{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/react/index.js","webpack:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/styled-components/dist/styled-components.browser.esm.js","webpack:///./react/features/base/redux/functions.js","webpack:///./react/features/base/redux/MiddlewareRegistry.js","webpack:///./react/features/base/redux/ReducerRegistry.js","webpack:///./react/features/base/redux/logger.js","webpack:///./react/features/base/redux/StateListenerRegistry.js","webpack:///./react/features/base/redux/index.js","webpack:///./react/features/analytics/AnalyticsEvents.js","webpack:///./react/features/analytics/handlers/AbstractHandler.js","webpack:///./react/features/analytics/handlers/amplitude/Amplitude.web.js","webpack:///./react/features/analytics/handlers/AmplitudeHandler.js","webpack:///./react/features/analytics/handlers/MatomoHandler.js","webpack:///./react/features/analytics/logger.js","webpack:///./react/features/analytics/functions.js","webpack:///./react/features/base/net-info/actionTypes.js","webpack:///./react/features/base/net-info/actions.js","webpack:///./react/features/base/net-info/constants.js","webpack:///./react/features/base/net-info/events.js","webpack:///./react/features/base/net-info/logger.js","webpack:///./react/features/base/net-info/NetworkInfoService.web.js","webpack:///./react/features/base/net-info/middleware.js","webpack:///./react/features/base/net-info/reducer.js","webpack:///./react/features/analytics/middleware.js","webpack:///./react/features/analytics/actionTypes.js","webpack:///./react/features/analytics/reducer.js","webpack:///./react/features/analytics/index.js","webpack:///./node_modules/@babel/runtime/helpers/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/createClass.js","webpack:///./react/features/base/lib-jitsi-meet/actionTypes.js","webpack:///./react/features/base/lib-jitsi-meet/actions.js","webpack:///./react/features/base/logging/actionTypes.js","webpack:///./react/features/base/logging/actions.js","webpack:///./react/features/base/testing/functions.js","webpack:///./react/features/base/testing/components/TestConnectionInfo.js","webpack:///./react/features/base/testing/actionTypes.js","webpack:///./react/features/base/testing/logger.js","webpack:///./react/features/base/testing/middleware.js","webpack:///./react/features/base/testing/actions.js","webpack:///./react/features/base/testing/reducer.js","webpack:///./react/features/base/logging/JitsiMeetLogStorage.js","webpack:///./react/features/base/logging/JitsiMeetInMemoryLogStorage.js","webpack:///./react/features/base/logging/middleware.js","webpack:///./react/features/base/logging/reducer.js","webpack:///./react/features/base/lib-jitsi-meet/middleware.js","webpack:///./react/features/base/lib-jitsi-meet/reducer.js","webpack:///./react/features/base/lib-jitsi-meet/index.js","webpack:///./node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack:///./node_modules/@babel/runtime/helpers/inherits.js","webpack:///./node_modules/i18next-xhr-backend/node_modules/@babel/runtime/helpers/esm/createClass.js","webpack:///./node_modules/i18next-xhr-backend/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack:///./node_modules/i18next-xhr-backend/dist/esm/i18nextXHRBackend.js","webpack:///./node_modules/i18next-xhr-backend/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack:///./react/features/base/i18n/configLanguageDetector.js","webpack:///./react/features/base/i18n/languageDetector.web.js","webpack:///./react/features/base/i18n/i18next.js","webpack:///./react/features/base/i18n/dateUtil.js","webpack:///./react/features/base/i18n/index.js","webpack:///./react/features/base/participants/actionTypes.js","webpack:///./react/features/base/participants/actions.js","webpack:///./react/features/base/participants/sounds.js","webpack:///./react/features/base/participants/middleware.js","webpack:///./react/features/base/participants/reducer.js","webpack:///./react/features/base/participants/index.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/elevation.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/typography.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/utils/math.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/utils/createTheme.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/components/Theme.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/components/Appearance.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/components/Reset.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/hoc.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/index.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./react/features/base/icons/components/Icon.js","webpack:///./react/features/base/icons/svg/add.svg","webpack:///./react/features/base/icons/svg/arrow_down.svg","webpack:///./react/features/base/icons/svg/volume.svg","webpack:///./react/features/base/icons/svg/blur-background.svg","webpack:///./react/features/base/icons/svg/camera.svg","webpack:///./react/features/base/icons/svg/camera-disabled.svg","webpack:///./react/features/base/icons/svg/cancel.svg","webpack:///./react/features/base/icons/svg/chat.svg","webpack:///./react/features/base/icons/svg/check.svg","webpack:///./react/features/base/icons/svg/close.svg","webpack:///./react/features/base/icons/svg/closed_caption.svg","webpack:///./react/features/base/icons/svg/gsm-bars.svg","webpack:///./react/features/base/icons/svg/ninja.svg","webpack:///./react/features/base/icons/svg/copy.svg","webpack:///./react/features/base/icons/svg/dominant-speaker.svg","webpack:///./react/features/base/icons/svg/download.svg","webpack:///./react/features/base/icons/svg/e2ee.svg","webpack:///./react/features/base/icons/svg/exclamation.svg","webpack:///./react/features/base/icons/svg/exclamation-solid.svg","webpack:///./react/features/base/icons/svg/exit-full-screen.svg","webpack:///./react/features/base/icons/svg/feedback.svg","webpack:///./react/features/base/icons/svg/full-screen.svg","webpack:///./react/features/base/icons/svg/hangup.svg","webpack:///./react/features/base/icons/svg/help.svg","webpack:///./react/features/base/icons/svg/info.svg","webpack:///./react/features/base/icons/svg/invite.svg","webpack:///./react/features/base/icons/svg/kick.svg","webpack:///./react/features/base/icons/svg/public.svg","webpack:///./react/features/base/icons/svg/menu-down.svg","webpack:///./react/features/base/icons/svg/thumb-menu.svg","webpack:///./react/features/base/icons/svg/menu-up.svg","webpack:///./react/features/base/icons/svg/message.svg","webpack:///./react/features/base/icons/svg/meter.svg","webpack:///./react/features/base/icons/svg/mic-disabled.svg","webpack:///./react/features/base/icons/svg/microphone.svg","webpack:///./react/features/base/icons/svg/microphone-empty.svg","webpack:///./react/features/base/icons/svg/star.svg","webpack:///./react/features/base/icons/svg/mute-everyone.svg","webpack:///./react/features/base/icons/svg/mute-everyone-else.svg","webpack:///./react/features/base/icons/svg/open_in_new.svg","webpack:///./react/features/base/icons/svg/phone.svg","webpack:///./react/features/base/icons/svg/presentation.svg","webpack:///./react/features/base/icons/svg/raised-hand.svg","webpack:///./react/features/base/icons/svg/rec.svg","webpack:///./react/features/base/icons/svg/play.svg","webpack:///./react/features/base/icons/svg/poker.svg","webpack:///./react/features/base/icons/svg/stop.svg","webpack:///./react/features/base/icons/svg/reply.svg","webpack:///./react/features/base/icons/svg/security.svg","webpack:///./react/features/base/icons/svg/security-locked.svg","webpack:///./react/features/base/icons/svg/settings.svg","webpack:///./react/features/base/icons/svg/share-desktop.svg","webpack:///./react/features/base/icons/svg/share-doc.svg","webpack:///./react/features/base/icons/svg/shared-video.svg","webpack:///./react/features/base/icons/svg/tiles-many.svg","webpack:///./react/features/base/icons/svg/camera-take-picture.svg","webpack:///./react/features/base/icons/svg/AUD.svg","webpack:///./react/features/base/icons/svg/HD.svg","webpack:///./react/features/base/icons/svg/LD.svg","webpack:///./react/features/base/icons/svg/SD.svg","webpack:///./react/features/base/icons/svg/volume-empty.svg","webpack:///./react/features/base/icons/index.js","webpack:///./node_modules/@babel/runtime/helpers/objectSpread.js","webpack:///./node_modules/prop-types/index.js","webpack:///./react/features/base/conference/actions.js","webpack:///./react/features/base/conference/middleware.js","webpack:///./react/features/base/conference/reducer.js","webpack:///./react/features/base/conference/index.js","webpack:///./node_modules/@babel/runtime/helpers/extends.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/elevation.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/typography.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/components/Appearance.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/components/Reset.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/hoc.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/elevation.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/typography.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/components/Appearance.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/components/Reset.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/hoc.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./react/features/poker/logic/helpers.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/elevation.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/typography.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/components/Appearance.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/components/Reset.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/hoc.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./react/features/base/dialog/actionTypes.js","webpack:///./react/features/base/dialog/functions.js","webpack:///./react/features/base/dialog/actions.js","webpack:///./react/features/base/dialog/components/AbstractDialog.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/portal/components/Portal.js","webpack:///./node_modules/@atlaskit/modal-dialog/components/ModalTransition.js","webpack:///./node_modules/@atlaskit/modal-dialog/components/StackConsumer.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/analytics-next/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/analytics-next/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/analytics-next/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/analytics-next/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/analytics-next/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/analytics-next/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/analytics-next/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/analytics-next/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/analytics-next/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/analytics-next/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/colors.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/constants.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/utils/getTheme.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/utils/themed.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/components/Theme.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/utils/createTheme.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/index.js","webpack:///./node_modules/@atlaskit/blanket/styled.js","webpack:///./node_modules/@atlaskit/blanket/Blanket.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/analytics-next/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/analytics-next/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/modal-dialog/shared-variables.js","webpack:///./node_modules/@atlaskit/modal-dialog/utils/flex-max-height-ie-fix.js","webpack:///./node_modules/@atlaskit/modal-dialog/styled/Modal.js","webpack:///./node_modules/@atlaskit/modal-dialog/components/Animation.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/button/dist/es2015/components/withDeprecationWarnings.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/button/dist/es2015/components/getButtonProps.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/button/dist/es2015/components/CustomComponentProxy.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/button/dist/es2015/styled/getButtonStyles.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/analytics-next/cleanProps.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/button/dist/es2015/styled/themeDefinitions.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/button/dist/es2015/theme.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/button/dist/es2015/styled/utils.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/button/dist/es2015/styled/ButtonContent.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/button/dist/es2015/styled/ButtonWrapper.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/button/dist/es2015/styled/IconWrapper.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/spinner/Spinner/constants.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/spinner/Spinner/styledContainer.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/spinner/Spinner/styledSvg.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/spinner/Spinner/index.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/button/dist/es2015/styled/LoadingSpinner.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/button/dist/es2015/components/Button.js","webpack:///./node_modules/@atlaskit/modal-dialog/styled/Content.js","webpack:///./node_modules/@atlaskit/modal-dialog/components/Footer.js","webpack:///./node_modules/@atlaskit/modal-dialog/components/Header.js","webpack:///./node_modules/@atlaskit/modal-dialog/components/Content.js","webpack:///./node_modules/focus-lock/dist/es2015/utils/array.js","webpack:///./node_modules/focus-lock/dist/es2015/utils/tabOrder.js","webpack:///./node_modules/focus-lock/dist/es2015/utils/tabbables.js","webpack:///./node_modules/focus-lock/dist/es2015/constants.js","webpack:///./node_modules/focus-lock/dist/es2015/utils/tabUtils.js","webpack:///./node_modules/focus-lock/dist/es2015/utils/DOMutils.js","webpack:///./node_modules/focus-lock/dist/es2015/utils/firstFocus.js","webpack:///./node_modules/focus-lock/dist/es2015/utils/all-affected.js","webpack:///./node_modules/focus-lock/dist/es2015/focusMerge.js","webpack:///./node_modules/focus-lock/dist/es2015/focusInside.js","webpack:///./node_modules/focus-lock/dist/es2015/focusIsHidden.js","webpack:///./node_modules/focus-lock/dist/es2015/setFocus.js","webpack:///./node_modules/focus-lock/dist/es2015/index.js","webpack:///./node_modules/react-focus-lock/dist/es2015/util.js","webpack:///./node_modules/react-focus-lock/dist/es2015/Trap.js","webpack:///./node_modules/react-clientside-effect/lib/index.es.js","webpack:///./node_modules/react-focus-lock/dist/es2015/FocusGuard.js","webpack:///./node_modules/react-focus-lock/dist/es2015/Lock.js","webpack:///./node_modules/react-focus-lock/dist/es2015/index.js","webpack:///./node_modules/react-focus-lock/dist/es2015/MoveFocusInside.js","webpack:///./react/features/base/util/react-focus-lock-wrapper.js","webpack:///./node_modules/@atlaskit/modal-dialog/components/FocusLock.js","webpack:///./node_modules/@atlaskit/modal-dialog/components/Modal.js","webpack:///./node_modules/@atlaskit/modal-dialog/components/ModalWrapper.js","webpack:///./react/features/base/dialog/components/web/StatelessDialog.js","webpack:///./react/features/base/dialog/components/web/Dialog.js","webpack:///./react/features/base/dialog/components/AbstractDialogContainer.js","webpack:///./react/features/base/dialog/components/web/DialogContainer.js","webpack:///./react/features/base/dialog/logger.js","webpack:///./react/features/base/dialog/components/web/DialogWithTabs.js","webpack:///./react/features/base/dialog/components/DialogContent.js","webpack:///./react/features/base/dialog/reducer.js","webpack:///./react/features/base/dialog/index.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack:///./react/features/base/util/timeoutPromise.js","webpack:///./react/features/base/util/httpUtils.js","webpack:///./react/features/base/util/loadScript.web.js","webpack:///./react/features/base/util/openURLInBrowser.web.js","webpack:///./react/features/base/util/uri.js","webpack:///./react/features/base/util/strings.web.js","webpack:///./react/features/base/util/index.js","webpack:///./react/features/base/media/actionTypes.js","webpack:///./react/features/base/media/constants.js","webpack:///./react/features/base/media/actions.js","webpack:///./react/features/base/media/functions.js","webpack:///./react/features/base/media/components/AbstractVideoTrack.js","webpack:///./react/features/base/media/components/web/VideoTrack.js","webpack:///./react/features/mobile/background/reducer.js","webpack:///./react/features/base/media/reducer.js","webpack:///./react/features/base/media/middleware.js","webpack:///./react/features/base/media/index.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/elevation.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/typography.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/components/Appearance.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/components/Reset.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/hoc.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./react/features/base/tracks/actionTypes.js","webpack:///./react/features/base/tracks/logger.js","webpack:///./react/features/base/tracks/functions.js","webpack:///./react/features/base/tracks/loadEffects.web.js","webpack:///./react/features/base/tracks/actions.js","webpack:///./react/features/base/tracks/middleware.js","webpack:///./react/features/base/tracks/reducer.js","webpack:///./react/features/base/tracks/index.js","webpack:///./react/features/base/logging/functions.js","webpack:///./react/features/base/react/index.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/elevation.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/typography.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/components/Appearance.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/components/Reset.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/hoc.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./react/features/notifications/middleware.js","webpack:///./react/features/notifications/reducer.js","webpack:///./react/features/notifications/index.js","webpack:///./react/features/video-layout/actions.js","webpack:///./react/features/video-layout/logger.js","webpack:///./react/features/video-layout/components/TileViewButton.js","webpack:///./react/features/video-layout/functions.js","webpack:///./react/features/video-layout/middleware.any.js","webpack:///./react/features/video-layout/middleware.web.js","webpack:///./react/features/video-layout/reducer.js","webpack:///./react/features/video-layout/subscriber.js","webpack:///./react/features/video-layout/index.js","webpack:///./node_modules/@babel/runtime/helpers/typeof.js","webpack:///./react/features/poker/actionTypes.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/elevation.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/typography.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/components/Appearance.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/components/Reset.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/hoc.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./react/features/base/devices/actionTypes.js","webpack:///./react/features/base/devices/logger.js","webpack:///./react/features/base/devices/functions.js","webpack:///./react/features/base/devices/actions.js","webpack:///./react/features/base/devices/middleware.js","webpack:///./react/features/base/devices/reducer.js","webpack:///./react/features/base/devices/index.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/elevation.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/typography.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/components/Appearance.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/components/Reset.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/hoc.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./service/UI/UIEvents.js","webpack:///./react/features/base/app/actionTypes.js","webpack:///./react/features/base/app/logger.js","webpack:///./react/features/base/app/components/BaseApp.js","webpack:///./react/features/base/app/actions.js","webpack:///./react/features/base/app/functions.js","webpack:///./react/features/base/app/reducer.js","webpack:///./react/features/base/app/index.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/colors.js","webpack:///./react/features/base/settings/actions.js","webpack:///./react/features/base/settings/constants.js","webpack:///./react/features/base/settings/functions.any.js","webpack:///./react/features/base/settings/functions.web.js","webpack:///./react/features/base/settings/middleware.js","webpack:///./react/features/base/settings/logger.js","webpack:///./react/features/base/settings/reducer.js","webpack:///./react/features/base/settings/index.js","webpack:///./react/features/base/conference/actionTypes.js","webpack:///./react/features/base/toolbox/components/AbstractToolboxItem.js","webpack:///./react/features/base/toolbox/components/ToolboxItem.web.js","webpack:///./react/features/base/toolbox/components/AbstractButton.js","webpack:///./react/features/base/toolbox/components/AbstractAudioMuteButton.js","webpack:///./react/features/base/toolbox/components/AbstractHangupButton.js","webpack:///./react/features/base/toolbox/components/AbstractVideoMuteButton.js","webpack:///./react/features/base/toolbox/components/BetaTag.js","webpack:///./react/features/base/toolbox/components/OverflowMenuItem.web.js","webpack:///./react/features/base/toolbox/components/ToolboxButtonWithIcon.js","webpack:///./react/features/base/toolbox/index.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/elevation.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/typography.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/components/Appearance.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/components/Reset.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/hoc.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./node_modules/react-dom/index.js","webpack:///./modules/UI/videolayout/VideoLayout.js","webpack:///./node_modules/lodash/lodash.js","webpack:///./react/features/base/sounds/actionTypes.js","webpack:///./react/features/base/sounds/actions.js","webpack:///./react/features/base/sounds/components/SoundCollection.js","webpack:///./react/features/base/sounds/logger.js","webpack:///./react/features/base/sounds/middleware.js","webpack:///./react/features/base/sounds/reducer.js","webpack:///./react/features/base/sounds/index.js","webpack:///./service/remotecontrol/Constants.js","webpack:///./react/features/toolbox/actionTypes.js","webpack:///./react/features/toolbox/actions.native.js","webpack:///./react/features/toolbox/actions.web.js","webpack:///./react/features/toolbox/components/AudioMuteButton.js","webpack:///./react/features/toolbox/functions.web.js","webpack:///./react/features/toolbox/components/web/AudioSettingsButton.js","webpack:///./react/features/toolbox/components/VideoMuteButton.js","webpack:///./react/features/toolbox/components/web/VideoSettingsButton.js","webpack:///./react/features/toolbox/components/AbstractToolbarButton.js","webpack:///./react/features/toolbox/components/web/ToolbarButton.js","webpack:///./react/features/toolbox/components/DownloadButton.js","webpack:///./react/features/toolbox/components/HangupButton.js","webpack:///./react/features/toolbox/components/HelpButton.js","webpack:///./react/features/toolbox/components/web/OverflowMenuButton.js","webpack:///./react/features/toolbox/components/web/OverflowMenuProfileItem.js","webpack:///./react/features/toolbox/components/web/MuteEveryoneButton.js","webpack:///./react/features/toolbox/components/web/Toolbox.js","webpack:///./react/features/toolbox/middleware.js","webpack:///./react/features/toolbox/reducer.js","webpack:///./react/features/toolbox/index.js","webpack:///./react/features/base/lib-jitsi-meet/_.web.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/elevation.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/typography.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/components/Appearance.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/components/Reset.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/hoc.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./react/features/base/connection/constants.js","webpack:///./react/features/base/connection/logger.js","webpack:///./react/features/base/connection/actions.native.js","webpack:///./react/features/base/connection/actions.web.js","webpack:///./react/features/base/connection/functions.js","webpack:///./react/features/base/connection/reducer.js","webpack:///./react/features/base/connection/index.js","webpack:///./node_modules/js-utils/jitsi-local-storage/index.js","webpack:///./node_modules/js-utils/index.js","webpack:///./node_modules/jitsi-meet-logger/lib/index.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/utils/themed.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/item/dist/esm/util/theme.js","webpack:///./react/features/prejoin/actionTypes.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/elevation.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/typography.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/components/Appearance.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/components/Reset.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/hoc.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./node_modules/@babel/runtime/helpers/get.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/react-popper/lib/esm/Manager.js","webpack:///./node_modules/react-popper/lib/esm/utils.js","webpack:///./node_modules/react-popper/lib/esm/Popper.js","webpack:///./node_modules/react-popper/lib/esm/Reference.js","webpack:///./react/features/prejoin/functions.js","webpack:///./react/features/base/participants/preloadImage.web.js","webpack:///./react/features/base/participants/functions.js","webpack:///./react/features/google-api/actionTypes.js","webpack:///./react/features/google-api/constants.js","webpack:///./react/features/google-api/googleApi.web.js","webpack:///./react/features/google-api/actions.js","webpack:///./react/features/google-api/components/AbstractGoogleSignInButton.js","webpack:///./react/features/google-api/components/GoogleSignInButton.web.js","webpack:///./react/features/google-api/reducer.js","webpack:///./react/features/google-api/index.js","webpack:///./react/features/poker/constants.js","webpack:///./react/features/base/config/actionTypes.js","webpack:///./react/features/base/config/constants.js","webpack:///./react/features/base/config/configWhitelist.js","webpack:///./react/features/base/config/extraConfigWhitelist.js","webpack:///./react/features/base/config/interfaceConfigWhitelist.js","webpack:///./react/features/base/config/logger.js","webpack:///./react/features/base/config/functions.any.js","webpack:///./react/features/base/config/actions.js","webpack:///./react/features/base/config/middleware.js","webpack:///./react/features/base/config/reducer.js","webpack:///./react/features/base/config/index.js","webpack:///./react/features/base/styles/components/styles/BoxModel.js","webpack:///./react/features/base/styles/components/styles/ColorPalette.js","webpack:///./react/features/base/styles/functions.any.js","webpack:///./react/features/base/styles/functions.web.js","webpack:///./react/features/base/styles/index.js","webpack:///./react/features/prejoin/components/buttons/ActionButton.js","webpack:///./react/features/prejoin/components/preview/CopyMeetingUrl.js","webpack:///./react/features/prejoin/components/preview/DeviceStatus.js","webpack:///./react/features/prejoin/components/preview/ParticipantName.js","webpack:///./react/features/prejoin/components/preview/Preview.js","webpack:///./react/features/prejoin/components/Prejoin.js","webpack:///./react/features/prejoin/middleware.js","webpack:///./react/features/prejoin/reducer.js","webpack:///./react/features/prejoin/index.js","webpack:///./react/features/filmstrip/constants.js","webpack:///./react/features/filmstrip/functions.web.js","webpack:///./react/features/filmstrip/actions.native.js","webpack:///./react/features/filmstrip/actions.web.js","webpack:///./react/features/filmstrip/components/web/AudioMutedIndicator.js","webpack:///./react/features/filmstrip/components/web/DominantSpeakerIndicator.js","webpack:///./react/features/filmstrip/components/web/Toolbar.js","webpack:///./react/features/poker/components/action/GenericAction.js","webpack:///./react/features/poker/components/action/RaiseAction.js","webpack:///./react/features/poker/components/ControlPanel.js","webpack:///./react/features/filmstrip/components/web/Filmstrip.js","webpack:///./react/features/filmstrip/components/web/ModeratorIndicator.js","webpack:///./react/features/filmstrip/components/AbstractRaisedHandIndicator.js","webpack:///./react/features/filmstrip/components/web/RaisedHandIndicator.js","webpack:///./react/features/filmstrip/components/web/VideoMutedIndicator.js","webpack:///./react/features/filmstrip/components/web/StatusIndicators.js","webpack:///./react/features/filmstrip/reducer.js","webpack:///./react/features/filmstrip/subscriber.web.js","webpack:///./react/features/filmstrip/middleware.web.js","webpack:///./react/features/filmstrip/index.js","webpack:///./react/features/poker/functions.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/elevation.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/typography.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/components/Appearance.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/components/Reset.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/hoc.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./react/features/app/functions.web.js","webpack:///./react/features/app/logger.js","webpack:///./react/features/app/actions.js","webpack:///./react/features/chrome-extension-banner/logger.js","webpack:///./react/features/chrome-extension-banner/components/ChromeExtensionBanner.web.js","webpack:///./react/features/base/user-interaction/actionTypes.js","webpack:///./react/features/base/user-interaction/middleware.js","webpack:///./react/features/base/user-interaction/reducer.js","webpack:///./react/features/external-api/middleware.js","webpack:///./react/features/external-api/subscriber.js","webpack:///./react/features/no-audio-signal/actionTypes.js","webpack:///./react/features/no-audio-signal/actions.js","webpack:///./react/features/no-audio-signal/components/DialInLink.js","webpack:///./react/features/no-audio-signal/constants.js","webpack:///./react/features/no-audio-signal/middleware.js","webpack:///./react/features/no-audio-signal/sounds.js","webpack:///./react/features/no-audio-signal/reducer.js","webpack:///./react/features/noise-detection/actionTypes.js","webpack:///./react/features/noise-detection/actions.js","webpack:///./react/features/noise-detection/middleware.js","webpack:///./react/features/noise-detection/constants.js","webpack:///./react/features/noise-detection/sounds.js","webpack:///./react/features/noise-detection/reducer.js","webpack:///./react/features/talk-while-muted/actionTypes.js","webpack:///./react/features/talk-while-muted/actions.js","webpack:///./react/features/talk-while-muted/middleware.js","webpack:///./react/features/talk-while-muted/constants.js","webpack:///./react/features/talk-while-muted/sounds.js","webpack:///./react/features/talk-while-muted/reducer.js","webpack:///./react/features/old-client-notification/components/OldElectronAPPNotificationDescription.js","webpack:///./react/features/old-client-notification/middleware.js","webpack:///./react/features/old-client-notification/functions.js","webpack:///./react/features/poker/middleware.js","webpack:///./react/features/poker/sounds.js","webpack:///./react/features/poker/logic/canDo.js","webpack:///./react/features/poker/logic/ranking.js","webpack:///./react/features/poker/logic/gameModifiers.js","webpack:///./react/features/poker/reducer.js","webpack:///./react/features/base/lastn/logger.js","webpack:///./react/features/base/lastn/middleware.js","webpack:///./react/features/rejoin/middleware.js","webpack:///./react/features/app/components/AbstractApp.js","webpack:///./react/features/app/components/App.web.js","webpack:///./react/features/base/environment/environment.js","webpack:///./react/features/conference/functions.js","webpack:///./react/features/transcribing/actionTypes.js","webpack:///./react/features/transcribing/actions.js","webpack:///./react/features/transcribing/components/TranscribingLabel.web.js","webpack:///./react/features/transcribing/components/AbstractTranscribingLabel.js","webpack:///./react/features/transcribing/middleware.js","webpack:///./react/features/transcribing/reducer.js","webpack:///./react/features/conference/components/AbstractLabels.js","webpack:///./react/features/conference/components/web/Labels.js","webpack:///./react/features/conference/components/web/Notice.js","webpack:///./react/features/conference/components/ConferenceTimer.js","webpack:///./react/features/conference/components/web/ConferenceTimerDisplay.js","webpack:///./react/features/conference/components/web/ParticipantsCount.js","webpack:///./react/features/conference/components/web/Subject.js","webpack:///./react/features/conference/components/AbstractConference.js","webpack:///./react/features/conference/components/web/Conference.js","webpack:///./react/features/conference/middleware.js","webpack:///./react/features/conference/actions.web.js","webpack:///./react/features/deep-linking/actionTypes.js","webpack:///./react/features/deep-linking/constants.js","webpack:///./react/features/deep-linking/components/DeepLinkingDesktopPage.web.js","webpack:///./react/features/deep-linking/actions.js","webpack:///./react/features/deep-linking/components/DeepLinkingMobilePage.web.js","webpack:///./react/features/deep-linking/renderPromotionalFooter.js","webpack:///./react/features/deep-linking/components/NoMobileApp.web.js","webpack:///./react/features/deep-linking/openDesktopApp.js","webpack:///./react/features/deep-linking/functions.js","webpack:///./react/features/deep-linking/middleware.js","webpack:///./react/features/deep-linking/reducer.js","webpack:///./react/features/unsupported-browser/components/browserLinks.js","webpack:///./react/features/unsupported-browser/components/UnsupportedDesktopBrowser.js","webpack:///./react/features/welcome/components/BlankPage.web.js","webpack:///./react/features/recent-list/components/styles.web.js","webpack:///./react/features/recent-list/components/AbstractRecentList.js","webpack:///./react/features/recent-list/functions.web.js","webpack:///./react/features/recent-list/components/RecentList.web.js","webpack:///./react/features/recent-list/actionTypes.js","webpack:///./react/features/recent-list/middleware.js","webpack:///./react/features/recent-list/actions.js","webpack:///./react/features/recent-list/logger.js","webpack:///./react/features/recent-list/reducer.js","webpack:///./react/features/welcome/components/AbstractWelcomePage.js","webpack:///./react/features/welcome/components/Tab.js","webpack:///./react/features/welcome/components/Tabs.js","webpack:///./react/features/welcome/components/WelcomePage.web.js","webpack:///./react/features/app/getRouteToRender.js","webpack:///./react/features/welcome/functions.js","webpack:///./react/features/welcome/reducer.js","webpack:///./react/features/welcome/actionTypes.js","webpack:///./react/features/app/middleware.js","webpack:///./react/features/app/index.js","webpack:///./react/features/base/conference/functions.js","webpack:///./react/features/videosipgw/actionTypes.js","webpack:///./react/features/videosipgw/logger.js","webpack:///./react/features/videosipgw/middleware.js","webpack:///./react/features/videosipgw/reducer.js","webpack:///./react/features/invite/actionTypes.js","webpack:///./react/features/invite/logger.js","webpack:///./react/features/invite/functions.js","webpack:///./react/features/invite/actions.any.js","webpack:///./react/features/videosipgw/actions.js","webpack:///./react/features/invite/components/add-people-dialog/AbstractAddPeopleDialog.js","webpack:///./react/features/invite/components/add-people-dialog/web/AddPeopleDialog.js","webpack:///./react/features/invite/_utils.js","webpack:///./react/features/invite/components/dial-in-summary/web/ConferenceID.js","webpack:///./react/features/invite/components/dial-in-summary/web/NumbersList.js","webpack:///./react/features/invite/components/dial-in-summary/web/DialInSummary.js","webpack:///./react/features/invite/components/info-dialog/web/DialInNumber.js","webpack:///./react/features/invite/components/info-dialog/web/PasswordForm.js","webpack:///./react/features/invite/components/info-dialog/web/InfoDialog.js","webpack:///./react/features/invite/components/info-dialog/web/InfoDialogButton.js","webpack:///./react/features/invite/components/callee-info/CalleeInfo.js","webpack:///./react/features/invite/components/callee-info/CalleeInfoContainer.js","webpack:///./react/features/invite/reducer.js","webpack:///./react/features/invite/constants.js","webpack:///./react/features/invite/sounds.js","webpack:///./react/features/invite/middleware.any.js","webpack:///./react/features/invite/middleware.web.js","webpack:///./react/features/invite/index.js","webpack:///./node_modules/react-redux/es/components/Context.js","webpack:///./node_modules/react-redux/es/utils/batch.js","webpack:///./node_modules/react-redux/es/utils/Subscription.js","webpack:///./node_modules/react-redux/es/components/Provider.js","webpack:///./node_modules/react-redux/es/components/connectAdvanced.js","webpack:///./node_modules/react-redux/es/utils/shallowEqual.js","webpack:///./node_modules/react-redux/es/connect/wrapMapToProps.js","webpack:///./node_modules/react-redux/es/connect/mapDispatchToProps.js","webpack:///./node_modules/react-redux/es/connect/mapStateToProps.js","webpack:///./node_modules/react-redux/es/connect/mergeProps.js","webpack:///./node_modules/react-redux/es/connect/selectorFactory.js","webpack:///./node_modules/react-redux/es/connect/connect.js","webpack:///./node_modules/react-redux/es/hooks/useSelector.js","webpack:///./node_modules/react-redux/es/index.js","webpack:///./react/features/poker/actions.js","webpack:///./react/features/notifications/constants.js","webpack:///./react/features/filmstrip/actionTypes.js","webpack:///./react/features/base/participants/constants.js","webpack:///./node_modules/uuid/index.js","webpack:///./react/features/base/storage/logger.js","webpack:///./react/features/base/storage/PersistenceRegistry.js","webpack:///./react/features/base/storage/middleware.js","webpack:///./react/features/base/storage/index.js","webpack:///./modules/UI/util/UIUtil.js","webpack:///./react/features/chat/actions.js","webpack:///./react/features/settings/actionTypes.js","webpack:///./react/features/settings/constants.js","webpack:///./react/features/settings/components/web/SettingsButton.js","webpack:///./react/features/settings/logger.js","webpack:///./react/features/settings/components/web/CalendarTab.js","webpack:///./react/features/settings/components/web/MoreTab.js","webpack:///./react/features/settings/components/web/ProfileTab.js","webpack:///./react/features/settings/functions.js","webpack:///./react/features/settings/components/web/SettingsDialog.js","webpack:///./react/features/settings/components/web/audio/AudioSettingsHeader.js","webpack:///./react/features/settings/components/web/audio/AudioSettingsEntry.js","webpack:///./react/features/settings/components/web/audio/Meter.js","webpack:///./react/features/settings/components/web/audio/MicrophoneEntry.js","webpack:///./react/features/settings/components/web/audio/TestButton.js","webpack:///./react/features/settings/components/web/audio/SpeakerEntry.js","webpack:///./react/features/settings/components/web/audio/AudioSettingsContent.js","webpack:///./react/features/settings/components/web/audio/AudioSettingsPopup.js","webpack:///./react/features/settings/components/web/video/VideoSettingsContent.js","webpack:///./react/features/settings/components/web/video/VideoSettingsPopup.js","webpack:///./react/features/settings/actions.js","webpack:///./react/features/settings/reducer.js","webpack:///./react/features/settings/index.js","webpack:///./node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectSpread.js","webpack:///./react/features/base/conference/constants.js","webpack:///./node_modules/exenv/index.js","webpack:///./react/features/base/react/components/AbstractContainer.js","webpack:///./react/features/base/react/components/web/Container.js","webpack:///./node_modules/react-i18next/dist/es/context.js","webpack:///./node_modules/react-i18next/dist/es/utils.js","webpack:///./node_modules/react-i18next/dist/es/useTranslation.js","webpack:///./node_modules/react-i18next/dist/es/withTranslation.js","webpack:///./node_modules/react-i18next/dist/es/I18nextProvider.js","webpack:///./node_modules/react-i18next/dist/es/index.js","webpack:///./react/features/presence-status/constants.js","webpack:///./react/features/presence-status/components/PresenceLabel.js","webpack:///./react/features/presence-status/functions.js","webpack:///./react/features/presence-status/index.js","webpack:///./react/features/base/connection/actionTypes.js","webpack:///./react/features/chat/actionTypes.js","webpack:///./service/remotecontrol/RemoteControlEvents.js","webpack:///./node_modules/js-utils/transport/PostMessageTransportBackend.js","webpack:///./node_modules/js-utils/transport/constants.js","webpack:///./node_modules/js-utils/transport/Transport.js","webpack:///./modules/transport/index.js","webpack:///./node_modules/babel-runtime/helpers/possibleConstructorReturn.js","webpack:///./modules/UI/videolayout/Filmstrip.js","webpack:///./modules/UI/util/MessageHandler.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/react-transition-group/index.js","webpack:///./react/features/base/avatar/components/AbstractStatelessAvatar.js","webpack:///./react/features/base/avatar/components/web/StatelessAvatar.js","webpack:///./react/features/base/avatar/functions.js","webpack:///./react/features/base/avatar/components/Avatar.js","webpack:///./react/features/base/avatar/index.js","webpack:///./react/features/calendar-sync/actionTypes.js","webpack:///./react/features/calendar-sync/constants.js","webpack:///./react/features/calendar-sync/functions.any.js","webpack:///./react/features/calendar-sync/web/googleCalendar.js","webpack:///./react/features/calendar-sync/web/microsoftCalendar.js","webpack:///./react/features/calendar-sync/logger.js","webpack:///./react/features/calendar-sync/functions.web.js","webpack:///./react/features/calendar-sync/actions.any.js","webpack:///./react/features/calendar-sync/actions.web.js","webpack:///./react/features/calendar-sync/components/AddMeetingUrlButton.web.js","webpack:///./react/features/calendar-sync/components/JoinButton.web.js","webpack:///./react/features/calendar-sync/components/CalendarListContent.web.js","webpack:///./react/features/calendar-sync/components/CalendarList.web.js","webpack:///./react/features/calendar-sync/components/MicrosoftSignInButton.web.js","webpack:///./react/features/calendar-sync/middleware.js","webpack:///./react/features/calendar-sync/reducer.js","webpack:///./react/features/calendar-sync/index.js","webpack:///./react/features/video-layout/actionTypes.js","webpack:///./react/features/overlay/actionTypes.js","webpack:///./react/features/overlay/actions.js","webpack:///./react/features/overlay/components/web/OverlayFrame.js","webpack:///./react/features/overlay/components/web/FilmstripOnlyOverlayFrame.js","webpack:///./react/features/overlay/logger.js","webpack:///./react/features/overlay/components/web/ReloadButton.js","webpack:///./react/features/overlay/components/AbstractPageReloadOverlay.js","webpack:///./react/features/overlay/components/web/PageReloadFilmstripOnlyOverlay.js","webpack:///./react/features/overlay/components/web/PageReloadOverlay.js","webpack:///./react/features/overlay/components/web/AbstractSuspendedOverlay.js","webpack:///./react/features/overlay/components/web/SuspendedFilmstripOnlyOverlay.js","webpack:///./react/features/overlay/components/web/SuspendedOverlay.js","webpack:///./react/features/overlay/components/web/AbstractUserMediaPermissionsOverlay.js","webpack:///./react/features/overlay/components/web/UserMediaPermissionsFilmstripOnlyOverlay.js","webpack:///./react/features/overlay/components/web/UserMediaPermissionsOverlay.js","webpack:///./react/features/overlay/functions.js","webpack:///./react/features/overlay/overlays.web.js","webpack:///./react/features/overlay/components/OverlayContainer.js","webpack:///./react/features/overlay/middleware.js","webpack:///./react/features/overlay/reducer.js","webpack:///./react/features/overlay/index.js","webpack:///./react/features/base/environment/utils.js","webpack:///./react/features/prejoin/actions.js","webpack:///./node_modules/@babel/runtime/helpers/interopRequireWildcard.js","webpack:///./node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack:///./react/features/base/i18n/functions.js","webpack:///./node_modules/babel-runtime/helpers/classCallCheck.js","webpack:///./node_modules/babel-runtime/helpers/inherits.js","webpack:///./react/features/mobile/background/actionTypes.js","webpack:///./modules/API/constants.js","webpack:///./node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/layer/dist/esm/components/internal/helpers.js","webpack:///./node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/layer/dist/esm/styledContentContainer.js","webpack:///./node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/layer/dist/esm/components/Layer.js","webpack:///./node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/theme/dist/esm/components/ThemeReset.js","webpack:///./node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./node_modules/@atlaskit/inline-dialog/dist/esm/InlineDialog/styled.js","webpack:///./node_modules/@atlaskit/inline-dialog/dist/esm/InlineDialog/index.js","webpack:///./node_modules/@atlaskit/inline-dialog/dist/esm/index.js","webpack:///./node_modules/@babel/runtime/helpers/esm/extends.js","webpack:///./react/features/notifications/actionTypes.js","webpack:///./react/features/etherpad/actionTypes.js","webpack:///./react/features/etherpad/actions.js","webpack:///./react/features/etherpad/components/SharedDocumentButton.js","webpack:///./react/features/etherpad/constants.js","webpack:///./react/features/etherpad/functions.js","webpack:///./react/features/etherpad/middleware.js","webpack:///./react/features/etherpad/reducer.js","webpack:///./react/features/etherpad/index.js","webpack:///./node_modules/core-js/library/modules/_core.js","webpack:///./node_modules/@atlaskit/spinner/dist/esm/index.js","webpack:///./node_modules/redux/es/redux.js","webpack:///./react/features/subtitles/actionTypes.js","webpack:///./react/features/subtitles/actions.js","webpack:///./react/features/subtitles/components/AbstractCaptions.js","webpack:///./react/features/subtitles/components/Captions.web.js","webpack:///./react/features/subtitles/components/AbstractClosedCaptionButton.js","webpack:///./react/features/subtitles/components/ClosedCaptionButton.web.js","webpack:///./react/features/subtitles/logger.js","webpack:///./react/features/subtitles/middleware.js","webpack:///./react/features/subtitles/reducer.js","webpack:///./react/features/subtitles/index.js","webpack:///./react/features/display-name/functions.js","webpack:///./react/features/display-name/components/web/DisplayName.js","webpack:///./react/features/display-name/components/AbstractDisplayNamePrompt.js","webpack:///./react/features/display-name/components/web/DisplayNamePrompt.js","webpack:///./react/features/display-name/actions.js","webpack:///./react/features/display-name/middleware.js","webpack:///./react/features/display-name/index.js","webpack:///./react/features/base/settings/actionTypes.js","webpack:///./node_modules/react-node-resolver/lib/index.js","webpack:///./node_modules/memoize-one/esm/index.js","webpack:///./react/features/base/label/components/AbstractCircularLabel.js","webpack:///./react/features/base/label/components/CircularLabel.web.js","webpack:///./react/features/base/label/index.js","webpack:///./node_modules/js-utils/random/randomUtil.js","webpack:///./node_modules/js-utils/random/roomNameGenerator.js","webpack:///./node_modules/js-utils/random/index.js","webpack:///./react/features/base/lib-jitsi-meet/functions.any.js","webpack:///./react/features/base/lib-jitsi-meet/functions.web.js","webpack:///./react/features/notifications/actions.js","webpack:///./node_modules/babel-runtime/helpers/extends.js","webpack:///./modules/UI/videolayout/SmallVideo.js","webpack:///./modules/UI/UIErrors.js","webpack:///./react/features/feedback/actionTypes.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/analytics-next/dist/esm/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/analytics-next/dist/esm/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/field-base/dist/esm/styled/Label.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/field-base/dist/esm/components/Label.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/popper/dist/esm/Popper.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/inline-dialog/dist/esm/InlineDialog/styled.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/inline-dialog/dist/esm/InlineDialog/index.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/field-base/dist/esm/styled/theme.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/field-base/dist/esm/styled/Content.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/field-base/dist/esm/components/ValidationElement.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/field-base/dist/esm/components/FieldBaseStateless.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/field-base/dist/esm/components/FieldBase.js","webpack:///./node_modules/@atlaskit/field-text-area/dist/esm/styled/TextArea.js","webpack:///./node_modules/@atlaskit/field-text-area/dist/esm/FieldTextAreaStateless.js","webpack:///./react/features/feedback/components/FeedbackDialog.web.js","webpack:///./react/features/feedback/actions.js","webpack:///./react/features/feedback/reducer.js","webpack:///./react/features/feedback/index.js","webpack:///./react/features/large-video/actions.js","webpack:///./react/features/large-video/components/LargeVideo.web.js","webpack:///./react/features/large-video/components/LargeVideoBackground.web.js","webpack:///./react/features/large-video/middleware.js","webpack:///./react/features/large-video/reducer.js","webpack:///./react/features/large-video/subscriber.web.js","webpack:///./react/features/large-video/index.js","webpack:///./react/features/base/audio-only/logger.js","webpack:///./react/features/base/audio-only/actions.js","webpack:///./react/features/base/audio-only/reducer.js","webpack:///./react/features/base/audio-only/index.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack:///./react/features/base/known-domains/actionTypes.js","webpack:///./react/features/base/known-domains/actions.js","webpack:///./react/features/base/known-domains/middleware.js","webpack:///./react/features/base/known-domains/reducer.js","webpack:///./react/features/base/known-domains/index.js","webpack:///./react/features/base/modal/actionTypes.js","webpack:///./react/features/base/modal/actions.js","webpack:///./react/features/base/modal/reducer.js","webpack:///./react/features/base/modal/components/index.web.js","webpack:///./react/features/base/modal/index.js","webpack:///./node_modules/react-redux/node_modules/invariant/browser.js","webpack:///./ConferenceEvents.js","webpack:///./react/features/room-lock/components/PasswordRequiredPrompt.web.js","webpack:///./react/features/room-lock/actions.js","webpack:///./react/features/room-lock/components/RoomLockButton.js","webpack:///./react/features/room-lock/logger.js","webpack:///./react/features/room-lock/middleware.js","webpack:///./react/features/room-lock/constants.js","webpack:///./react/features/room-lock/index.js","webpack:///./react/features/base/flags/actionTypes.js","webpack:///./react/features/base/flags/functions.js","webpack:///./react/features/base/flags/reducer.js","webpack:///./react/features/base/flags/index.js","webpack:///./react/features/base/flags/constants.js","webpack:///./modules/UI/videolayout/VideoContainer.js","webpack:///./node_modules/@atlaskit/icon/cjs/components/Icon.js","webpack:///./node_modules/core-js/library/modules/_export.js","webpack:///./node_modules/core-js/library/modules/_global.js","webpack:///./node_modules/core-js/library/modules/_descriptors.js","webpack:///./react/features/base/audio-only/actionTypes.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/constants.js","webpack:///./react/features/video-layout/constants.js","webpack:///./react/features/chat/components/AbstractChat.js","webpack:///./node_modules/react-textarea-autosize/dist/react-textarea-autosize.esm.browser.js","webpack:///./react/features/chat/smileys.js","webpack:///./react/features/chat/components/web/SmileysPanel.js","webpack:///./react/features/chat/components/web/ChatInput.js","webpack:///./react/features/chat/components/web/DisplayNameForm.js","webpack:///./react/features/chat/constants.js","webpack:///./react/features/chat/components/AbstractMessageContainer.js","webpack:///./react/features/chat/components/AbstractChatMessage.js","webpack:///./react/features/chat/components/web/ChatMessage.js","webpack:///./react/features/chat/components/web/ChatMessageGroup.js","webpack:///./react/features/chat/components/web/MessageContainer.js","webpack:///./react/features/chat/components/AbstractMessageRecipient.js","webpack:///./react/features/chat/components/web/MessageRecipient.js","webpack:///./react/features/chat/components/web/Chat.js","webpack:///./react/features/chat/functions.js","webpack:///./react/features/chat/components/web/ChatCounter.js","webpack:///./react/features/chat/components/AbstractChatPrivacyDialog.js","webpack:///./react/features/chat/components/web/ChatPrivacyDialog.js","webpack:///./react/features/chat/sounds.js","webpack:///./react/features/chat/middleware.js","webpack:///./react/features/chat/reducer.js","webpack:///./react/features/chat/index.js","webpack:///./react/features/e2ee/actionTypes.js","webpack:///./react/features/e2ee/actions.js","webpack:///./react/features/e2ee/components/E2EEDialog.js","webpack:///./react/features/e2ee/components/E2EEButton.js","webpack:///./react/features/e2ee/components/E2EELabel.js","webpack:///./react/features/e2ee/components/AbstractE2EELabel.js","webpack:///./react/features/e2ee/logger.js","webpack:///./react/features/e2ee/middleware.js","webpack:///./react/features/e2ee/reducer.js","webpack:///./react/features/e2ee/index.js","webpack:///./react/features/base/conference/logger.js","webpack:///./react/features/large-video/actionTypes.js","webpack:///./react/features/device-selection/actionTypes.js","webpack:///./react/features/device-selection/logger.js","webpack:///./react/features/device-selection/actions.js","webpack:///./react/features/device-selection/components/AudioInputPreview.js","webpack:///./react/features/base/media/components/Audio.web.js","webpack:///./react/features/device-selection/components/AudioOutputPreview.js","webpack:///./react/features/device-selection/components/DeviceSelector.web.js","webpack:///./react/features/device-selection/components/VideoInputPreview.js","webpack:///./react/features/device-selection/components/DeviceSelection.js","webpack:///./react/features/device-selection/middleware.js","webpack:///./react/features/device-selection/reducer.js","webpack:///./react/features/device-selection/index.js","webpack:///./react/features/video-quality/components/OverflowMenuVideoQualityItem.web.js","webpack:///./react/features/video-quality/logger.js","webpack:///./react/features/video-quality/components/VideoQualitySlider.web.js","webpack:///./react/features/video-quality/components/VideoQualityDialog.web.js","webpack:///./react/features/video-quality/components/AbstractVideoQualityLabel.js","webpack:///./react/features/video-quality/components/VideoQualityLabel.web.js","webpack:///./react/features/video-quality/actions.js","webpack:///./react/features/video-quality/index.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/objectSpread.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/createClass.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/inherits.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack:///./node_modules/i18next/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack:///./node_modules/i18next/dist/esm/i18next.js","webpack:///./node_modules/core-js/library/modules/_object-dp.js","webpack:///./node_modules/core-js/library/modules/_is-object.js","webpack:///./node_modules/core-js/library/modules/_has.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./react/features/notifications/functions.js","webpack:///./node_modules/tiny-invariant/dist/tiny-invariant.esm.js","webpack:///./react/features/base/react/Platform.web.js","webpack:///./react/features/device-selection/functions.js","webpack:///./react/features/chat/components/PrivateMessageButton.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./modules/util/helpers.js","webpack:///./react/features/recording/actionTypes.js","webpack:///./react/features/recording/actions.js","webpack:///./react/features/recording/constants.js","webpack:///./react/features/recording/functions.js","webpack:///./react/features/recording/components/AbstractRecordingLabel.js","webpack:///./react/features/recording/components/web/RecordingLabel.js","webpack:///./react/features/recording/components/LiveStream/AbstractLiveStreamButton.js","webpack:///./react/features/recording/components/LiveStream/web/LiveStreamButton.js","webpack:///./react/features/recording/components/LiveStream/AbstractStartLiveStreamDialog.js","webpack:///./react/features/recording/components/LiveStream/constants.js","webpack:///./react/features/recording/components/LiveStream/web/StreamKeyPicker.js","webpack:///./react/features/recording/components/LiveStream/AbstractStreamKeyForm.js","webpack:///./react/features/recording/components/LiveStream/web/StreamKeyForm.js","webpack:///./react/features/recording/components/LiveStream/web/StartLiveStreamDialog.js","webpack:///./react/features/recording/components/LiveStream/AbstractStopLiveStreamDialog.js","webpack:///./react/features/recording/components/LiveStream/web/StopLiveStreamDialog.js","webpack:///./react/features/recording/components/Recording/AbstractRecordButton.js","webpack:///./react/features/recording/components/Recording/web/RecordButton.js","webpack:///./react/features/dropbox/actionTypes.js","webpack:///./react/features/dropbox/functions.web.js","webpack:///./react/features/dropbox/actions.js","webpack:///./react/features/dropbox/logger.js","webpack:///./react/features/dropbox/reducer.js","webpack:///./react/features/recording/components/Recording/AbstractStartRecordingDialog.js","webpack:///./react/features/dropbox/functions.any.js","webpack:///./react/features/recording/components/Recording/styles.web.js","webpack:///./react/features/recording/components/Recording/StartRecordingDialogContent.js","webpack:///./react/features/recording/components/Recording/web/StartRecordingDialog.js","webpack:///./react/features/recording/components/Recording/AbstractStopRecordingDialog.js","webpack:///./react/features/recording/components/Recording/web/StopRecordingDialog.js","webpack:///./react/features/recording/middleware.js","webpack:///./react/features/recording/sounds.js","webpack:///./react/features/recording/reducer.js","webpack:///./react/features/recording/index.js","webpack:///./modules/UI/authentication/AuthHandler.js","webpack:///./react/features/remote-video-menu/index.js","webpack:///./react/features/connection-stats/components/ConnectionStatsTable.js","webpack:///./react/features/connection-indicator/statsEmitter.js","webpack:///./react/features/connection-indicator/components/AbstractConnectionIndicator.js","webpack:///./react/features/connection-indicator/components/web/ConnectionIndicator.js","webpack:///./react/features/connection-indicator/middleware.js","webpack:///./react/features/connection-indicator/index.js","webpack:///./node_modules/react-redux/node_modules/prop-types/index.js","webpack:///./node_modules/core-js/library/modules/_hide.js","webpack:///./node_modules/core-js/library/modules/_fails.js","webpack:///./node_modules/core-js/library/modules/_to-iobject.js","webpack:///./node_modules/core-js/library/modules/_wks.js","webpack:///./react/features/base/util/parseURLParams.js","webpack:///./react/features/base/media/components/web/Video.js","webpack:///./node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack:///./node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:///./node_modules/babel-runtime/core-js/object/get-prototype-of.js","webpack:///./node_modules/babel-runtime/helpers/createClass.js","webpack:///./node_modules/babel-runtime/helpers/taggedTemplateLiteral.js","webpack:///./node_modules/raf-schd/esm/index.js","webpack:///./node_modules/react-scrolllock/dist/index.js","webpack:///./node_modules/@babel/runtime/helpers/inheritsLoose.js","webpack:///./node_modules/react-emoji-render/lib/index.js","webpack:///./react/features/remote-video-menu/actions.js","webpack:///./modules/UI/videolayout/LargeContainer.js","webpack:///./react/features/speaker-stats/components/TimeElapsed.js","webpack:///./react/features/speaker-stats/components/SpeakerStatsItem.js","webpack:///./react/features/speaker-stats/components/SpeakerStatsLabels.js","webpack:///./react/features/speaker-stats/components/SpeakerStats.js","webpack:///./react/features/speaker-stats/index.js","webpack:///./react/features/base/media/logger.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/react-transition-group/node_modules/prop-types/index.js","webpack:///./node_modules/core-js/library/modules/_an-object.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/uuid/v1.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme/utils/getTheme.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./react/features/follow-me/functions.js","webpack:///./react/features/follow-me/actionTypes.js","webpack:///./react/features/follow-me/actions.js","webpack:///./react/features/follow-me/constants.js","webpack:///./react/features/follow-me/logger.js","webpack:///./react/features/follow-me/middleware.js","webpack:///./react/features/follow-me/subscriber.js","webpack:///./react/features/follow-me/reducer.js","webpack:///./react/features/follow-me/index.js","webpack:///./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack:///./react/features/prejoin/logger.js","webpack:///./modules/UI/shared_video/SharedVideo.js","webpack:///./react/features/local-recording/actionTypes.js","webpack:///./react/features/local-recording/components/LocalRecordingButton.js","webpack:///./react/features/local-recording/components/LocalRecordingLabel.web.js","webpack:///./react/features/local-recording/logger.js","webpack:///./react/features/local-recording/recording/RecordingAdapter.js","webpack:///./react/features/local-recording/recording/OggAdapter.js","webpack:///./react/features/local-recording/recording/AbstractAudioContextAdapter.js","webpack:///./react/features/local-recording/recording/WavAdapter.js","webpack:///./react/features/local-recording/recording/flac/messageTypes.js","webpack:///./react/features/local-recording/recording/flac/FlacAdapter.js","webpack:///./react/features/local-recording/session/SessionManager.js","webpack:///./react/features/local-recording/controller/RecordingController.js","webpack:///./react/features/local-recording/recording/Utils.js","webpack:///./react/features/local-recording/components/LocalRecordingInfoDialog.js","webpack:///./react/features/local-recording/actions.js","webpack:///./react/features/local-recording/middleware.js","webpack:///./react/features/local-recording/reducer.js","webpack:///./react/features/local-recording/index.js","webpack:///./node_modules/react-i18next/node_modules/@babel/runtime/helpers/typeof.js","webpack:///./modules/UI/authentication/LoginDialog.js","webpack:///./node_modules/core-js/library/modules/_property-desc.js","webpack:///./node_modules/core-js/library/modules/_object-keys.js","webpack:///./node_modules/core-js/library/modules/_uid.js","webpack:///./node_modules/core-js/library/modules/_object-pie.js","webpack:///./node_modules/react-focus-lock/node_modules/prop-types/index.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/icon/cjs/components/Icon.js","webpack:///./node_modules/js-utils/avatar/index.js","webpack:///./react/features/base/util/helpers.js","webpack:///./node_modules/react-transition-group/Transition.js","webpack:///./node_modules/react-transition-group/TransitionGroup.js","webpack:///./node_modules/babel-runtime/helpers/typeof.js","webpack:///./react/features/base/dialog/components/web/AbstractDialogTab.js","webpack:///./node_modules/react-emoji-render/data/asciiAliases.js","webpack:///./react/features/poker/components/Poker.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/theme.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/components/Flag/styledFlag.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/components/Expander/styledExpander.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/components/Expander/index.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/components/FlagActions/styledFlagActions.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/components/FlagActions/index.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/components/Flag/index.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsContext.js","webpack:///./react/features/notifications/components/AbstractNotification.js","webpack:///./react/features/notifications/components/web/Notification.js","webpack:///./node_modules/@atlaskit/portal/dist/esm/components/Portal.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/styled/Wrapper.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/components/FlagGroup/styledFlagGroup.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/components/FlagGroup/index.js","webpack:///./react/features/notifications/components/AbstractNotificationsContainer.js","webpack:///./react/features/notifications/components/web/NotificationsContainer.js","webpack:///./react/features/notifications/components/index.web.js","webpack:///./react/features/remote-video-menu/components/AbstractKickButton.js","webpack:///./react/features/remote-video-menu/components/web/RemoteVideoMenuButton.js","webpack:///./react/features/remote-video-menu/components/web/KickButton.js","webpack:///./react/features/remote-video-menu/components/AbstractKickRemoteParticipantDialog.js","webpack:///./react/features/remote-video-menu/components/web/KickRemoteParticipantDialog.js","webpack:///./react/features/remote-video-menu/components/AbstractMuteButton.js","webpack:///./react/features/remote-video-menu/components/web/MuteButton.js","webpack:///./react/features/remote-video-menu/components/AbstractMuteRemoteParticipantDialog.js","webpack:///./react/features/remote-video-menu/components/web/MuteEveryoneDialog.js","webpack:///./react/features/remote-video-menu/components/web/MuteEveryoneElseButton.js","webpack:///./react/features/remote-video-menu/components/web/MuteRemoteParticipantDialog.js","webpack:///./react/features/remote-video-menu/components/web/PrivateMessageMenuButton.js","webpack:///./react/features/remote-video-menu/components/web/RemoteControlButton.js","webpack:///./react/features/remote-video-menu/components/web/RemoteVideoMenu.js","webpack:///./react/features/remote-video-menu/components/web/RemoteVideoMenuTriggerButton.js","webpack:///./react/features/remote-video-menu/components/web/VolumeSlider.js","webpack:///./react/features/remote-video-menu/components/index.web.js","webpack:///./react/features/base/media/components/AbstractAudio.js","webpack:///./react/features/base/media/components/web/Audio.js","webpack:///./connection.js","webpack:///./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack:///./node_modules/@atlaskit/icon/glyph/chevron-down.js","webpack:///./node_modules/@atlaskit/type-helpers/dist/es2015/index.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/components/withDeprecationWarnings.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/icon/glyph/chevron-down.js","webpack:///./node_modules/js-md5/src/md5.js","webpack:///./react/features/base/media/components/Video.web.js","webpack:///./react/features/poker/components/Card.js","webpack:///./react/features/poker/components/Table.js","webpack:///./modules/remotecontrol/RemoteControlParticipant.js","webpack:///./react/features/keyboard-shortcuts/actionTypes.js","webpack:///./react/features/keyboard-shortcuts/actions.js","webpack:///./node_modules/@atlaskit/lozenge/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/lozenge/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/lozenge/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/lozenge/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/lozenge/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/lozenge/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/lozenge/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/lozenge/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./node_modules/@atlaskit/lozenge/dist/esm/Lozenge/styledContainer.js","webpack:///./node_modules/@atlaskit/lozenge/dist/esm/Lozenge/styledContent.js","webpack:///./node_modules/@atlaskit/lozenge/dist/esm/theme.js","webpack:///./node_modules/@atlaskit/lozenge/dist/esm/Lozenge/index.js","webpack:///./react/features/keyboard-shortcuts/components/KeyboardShortcutsDialog.web.js","webpack:///./react/features/keyboard-shortcuts/middleware.js","webpack:///./react/features/keyboard-shortcuts/index.js","webpack:///./react/features/base/responsive-ui/actionTypes.js","webpack:///./react/features/base/responsive-ui/constants.js","webpack:///./react/features/base/responsive-ui/middleware.web.js","webpack:///./react/features/base/responsive-ui/actions.js","webpack:///./react/features/base/responsive-ui/reducer.js","webpack:///./react/features/base/responsive-ui/index.js","webpack:///./react/features/blur/actionTypes.js","webpack:///./react/features/blur/functions.js","webpack:///./react/features/blur/logger.js","webpack:///./react/features/blur/actions.js","webpack:///./react/features/blur/components/VideoBlurButton.js","webpack:///./react/features/blur/reducer.js","webpack:///./react/features/blur/index.js","webpack:///./react/features/base/color-scheme/actionTypes.js","webpack:///./react/features/base/color-scheme/defaultScheme.js","webpack:///./react/features/base/color-scheme/ColorSchemeRegistry.js","webpack:///./react/features/base/color-scheme/reducer.js","webpack:///./react/features/base/color-scheme/index.js","webpack:///./react/features/base/jwt/actionTypes.js","webpack:///./react/features/base/jwt/actions.js","webpack:///./react/features/base/jwt/functions.js","webpack:///./react/features/base/jwt/middleware.js","webpack:///./react/features/base/jwt/reducer.js","webpack:///./react/features/base/jwt/index.js","webpack:///./react/features/stream-effects/screenshot-capture/constants.js","webpack:///./react/features/stream-effects/screenshot-capture/worker.js","webpack:///./react/features/stream-effects/screenshot-capture/ScreenshotCaptureEffect.js","webpack:///./react/features/stream-effects/screenshot-capture/index.js","webpack:///./react/features/shared-video/actionTypes.js","webpack:///./react/features/shared-video/actions.js","webpack:///./react/features/shared-video/middleware.js","webpack:///./react/features/shared-video/reducer.js","webpack:///./react/features/shared-video/index.js","webpack:///./react/features/base/popover/components/Popover.web.js","webpack:///./react/features/base/popover/index.js","webpack:///./react/features/poker/components/PlayerListEntry.js","webpack:///./react/features/poker/components/Game.js","webpack:///./node_modules/dropbox/dist/Dropbox-sdk.min.js","webpack:///./node_modules/jquery/dist/jquery.min.js-exposed?09e6","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/core-js/library/modules/_to-primitive.js","webpack:///./node_modules/core-js/library/modules/_defined.js","webpack:///./node_modules/core-js/library/modules/_to-integer.js","webpack:///./node_modules/core-js/library/modules/_shared-key.js","webpack:///./node_modules/core-js/library/modules/_shared.js","webpack:///./node_modules/core-js/library/modules/_enum-bug-keys.js","webpack:///./node_modules/core-js/library/modules/_object-gops.js","webpack:///./node_modules/core-js/library/modules/_to-object.js","webpack:///./node_modules/core-js/library/modules/_library.js","webpack:///./node_modules/core-js/library/modules/_iterators.js","webpack:///./node_modules/core-js/library/modules/_object-create.js","webpack:///./node_modules/core-js/library/modules/_set-to-string-tag.js","webpack:///./node_modules/core-js/library/modules/_wks-ext.js","webpack:///./node_modules/core-js/library/modules/_wks-define.js","webpack:///./node_modules/react-scrolllock/dist/utils.js","webpack:///./node_modules/node-libs-browser/node_modules/buffer/index.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/icon/cjs/components/Icon.js","webpack:///./node_modules/@microsoft/microsoft-graph-client/lib/src/common.js","webpack:///./node_modules/react-emoji-render/data/aliases.js","webpack:///./react/features/power-monitor/actionTypes.js","webpack:///./react/features/power-monitor/actions.js","webpack:///./react/features/power-monitor/middleware.js","webpack:///./react/features/power-monitor/reducer.js","webpack:///./react/features/power-monitor/index.js","webpack:///./node_modules/js-utils/node_modules/js-md5/src/md5.js","webpack:///./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack:///./node_modules/symbol-observable/es/index.js","webpack:///./node_modules/stylis/stylis.js","webpack:///./node_modules/styled-components/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack:///./node_modules/flushable/dist/index.umd.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/icon/glyph/warning.js","webpack:///./node_modules/react-addons-text-content/dist/react-addons-text-content.js","webpack:///./node_modules/@microsoft/microsoft-graph-client/lib/src/index.js","webpack:///./node_modules/jsrsasign/lib/jsrsasign.js","webpack:///./modules/UI/videolayout/LargeVideoManager.js","webpack:///./node_modules/pokersolver/pokersolver.js","webpack:///./modules/devices/mediaDeviceHelper.js","webpack:///./react/features/stream-effects/audio-mixer/AudioMixerEffect.js","webpack:///./react/features/screenshot-capture/logger.js","webpack:///./react/features/screenshot-capture/actionTypes.js","webpack:///./react/features/screenshot-capture/actions.js","webpack:///./react/features/screenshot-capture/reducer.js","webpack:///./react/features/screenshot-capture/index.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/object-assign/index.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///./node_modules/jitsi-meet-logger/lib/Logger.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/se.js","webpack:///./node_modules/moment/locale/si.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/fbjs/lib/emptyFunction.js","webpack:///./node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js","webpack:///./node_modules/react-transition-group/utils/PropTypes.js","webpack:///./node_modules/core-js/library/modules/_ctx.js","webpack:///./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/library/modules/_dom-create.js","webpack:///./node_modules/core-js/library/modules/_object-keys-internal.js","webpack:///./node_modules/core-js/library/modules/_iobject.js","webpack:///./node_modules/core-js/library/modules/_cof.js","webpack:///./node_modules/core-js/library/modules/_iter-define.js","webpack:///./node_modules/core-js/library/modules/_redefine.js","webpack:///./node_modules/core-js/library/modules/_object-dps.js","webpack:///./node_modules/core-js/library/modules/_object-gpo.js","webpack:///./node_modules/core-js/library/modules/_meta.js","webpack:///./node_modules/core-js/library/modules/_object-gopn.js","webpack:///./node_modules/core-js/library/modules/_object-gopd.js","webpack:///./node_modules/core-js/library/modules/_object-sap.js","webpack:///./node_modules/babel-runtime/core-js/object/define-property.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/icon/cjs/components/Icon.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/icon/cjs/components/Icon.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/icon/cjs/components/Icon.js","webpack:///./node_modules/lodash.flatten/index.js","webpack:///./node_modules/@microsoft/microsoft-graph-client/lib/src/GraphRequest.js","webpack:///./node_modules/@microsoft/microsoft-graph-client/lib/src/ResponseHandler.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/icon/cjs/components/Icon.js","webpack:///./modules/API/API.js","webpack:///./react/features/base/react/components/web/BaseIndicator.js","webpack:///./react/features/base/react/components/web/Button.js","webpack:///./react/features/base/react/components/web/Image.js","webpack:///./react/features/base/react/components/web/Linkify.js","webpack:///./react/features/base/react/components/web/Text.js","webpack:///./react/features/base/react/components/web/MeetingsList.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/analytics-next/dist/esm/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/analytics-next/dist/esm/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/layer/dist/esm/components/internal/ScrollBlock.js","webpack:///./node_modules/@atlaskit/layer/dist/esm/components/internal/helpers.js","webpack:///./node_modules/@atlaskit/layer/dist/esm/styledContentContainer.js","webpack:///./node_modules/@atlaskit/layer/dist/esm/components/Layer.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/styled/Droplist.js","webpack:///./node_modules/@atlaskit/item/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/item/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/item/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/item/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/item/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/item/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/item/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/item/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/theme/item-theme.js","webpack:///./node_modules/@atlaskit/item/dist/esm/util/theme.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/components/Droplist.js","webpack:///./node_modules/@atlaskit/field-base/dist/esm/styled/Label.js","webpack:///./node_modules/@atlaskit/field-base/dist/esm/components/Label.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/styled/Stateless.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/analytics-next/dist/esm/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/popper/dist/esm/Popper.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/inline-dialog/dist/esm/InlineDialog/styled.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/inline-dialog/dist/esm/InlineDialog/index.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/analytics-next/dist/esm/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/field-base/dist/esm/styled/theme.js","webpack:///./node_modules/@atlaskit/field-base/dist/esm/styled/Content.js","webpack:///./node_modules/@atlaskit/field-base/dist/esm/components/ValidationElement.js","webpack:///./node_modules/@atlaskit/field-base/dist/esm/components/FieldBaseStateless.js","webpack:///./node_modules/@atlaskit/tag-group/dist/esm/TagGroup/styled.js","webpack:///./node_modules/@atlaskit/tag-group/dist/esm/TagGroup/index.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/analytics-next/dist/esm/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/analytics-next/dist/esm/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/theme.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/Chrome/styled.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/Chrome/index.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/Content/styled.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/Content/index.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/RemoveButton/styled.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/RemoveButton/index.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/Tag/styledBefore.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/Tag/styledContainer.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/Tag/index.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/styled/Trigger.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/internal/appearances.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/components/Trigger.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/styled/Item.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/utils/index.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/components/Element.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/components/Item.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/styled/Footer.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/components/Footer.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/internal/sharedFunctions.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/styled/Group.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/components/Group.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/styled/NoMatch.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/styled/InitialLoading.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/styled/GroupsContainer.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/components/Groups.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/components/Options.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/components/Stateless.js","webpack:///./react/features/base/react/logger.js","webpack:///./react/features/base/react/components/web/InlineDialogFailure.js","webpack:///./react/features/base/react/components/web/MultiSelectAutocomplete.js","webpack:///./react/features/base/react/components/web/NavigateSectionListItem.js","webpack:///./react/features/base/react/components/web/NavigateSectionListSectionHeader.js","webpack:///./react/features/base/react/components/web/SectionList.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/analytics-next/dist/esm/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/toggle/dist/esm/styled/constants.js","webpack:///./node_modules/@atlaskit/toggle/dist/esm/styled/Label.js","webpack:///./node_modules/@atlaskit/toggle/dist/esm/styled/Input.js","webpack:///./node_modules/@atlaskit/toggle/dist/esm/styled/Slide.js","webpack:///./node_modules/@atlaskit/toggle/dist/esm/styled/Inner.js","webpack:///./node_modules/@atlaskit/toggle/dist/esm/styled/Handle.js","webpack:///./node_modules/@atlaskit/toggle/dist/esm/styled/IconWrapper.js","webpack:///./node_modules/@atlaskit/toggle/dist/esm/defaultBaseProps.js","webpack:///./node_modules/@atlaskit/toggle/dist/esm/ToggleStateless.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/analytics-next/dist/esm/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsContext.js","webpack:///./react/features/base/react/components/web/Switch.js","webpack:///./react/features/base/react/components/web/Watermarks.js","webpack:///./react/features/base/react/components/AbstractPage.js","webpack:///./react/features/base/react/components/NavigateSectionList.js","webpack:///./react/features/base/react/components/index.js","webpack:///./node_modules/@atlaskit/spinner/dist/esm/Spinner/constants.js","webpack:///./node_modules/@atlaskit/spinner/dist/esm/Spinner/styledContainer.js","webpack:///./node_modules/@atlaskit/spinner/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/spinner/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/spinner/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/spinner/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/spinner/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/spinner/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/spinner/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/spinner/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./node_modules/@atlaskit/spinner/dist/esm/Spinner/styledSvg.js","webpack:///./node_modules/@atlaskit/spinner/dist/esm/Spinner/index.js","webpack:///./conference.js","webpack:///./node_modules/bowser/es5.js","webpack:///./node_modules/jwt-decode/lib/index.js","webpack:///./node_modules/react-redux/node_modules/react-is/index.js","webpack:///./node_modules/symbol-observable/es/ponyfill.js","webpack:///./node_modules/html-parse-stringify2/index.js","webpack:///./node_modules/react-i18next/node_modules/@babel/runtime/helpers/classCallCheck.js","webpack:///./node_modules/react-i18next/node_modules/@babel/runtime/helpers/createClass.js","webpack:///./node_modules/redux-thunk/lib/index.js","webpack:///./node_modules/i18next-browser-languagedetector/index.js","webpack:///./node_modules/lodash/throttle.js","webpack:///./node_modules/fbjs/lib/hyphenateStyleName.js","webpack:///./node_modules/stylis-rule-sheet/index.js","webpack:///./node_modules/react-is/index.js","webpack:///./node_modules/@atlaskit/icon/glyph/chevron-up.js","webpack:///./node_modules/@atlaskit/icon/glyph/cross.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/theme.js","webpack:///./node_modules/@atlaskit/icon/glyph/error.js","webpack:///./node_modules/@atlaskit/icon/glyph/warning.js","webpack:///./node_modules/@atlaskit/icon/glyph/editor/info.js","webpack:///./node_modules/create-react-context/lib/index.js","webpack:///./node_modules/warning/browser.js","webpack:///./node_modules/react-linkify/dist/index.js","webpack:///./node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/layer/dist/popper/index-min.js","webpack:///./node_modules/babel-runtime/helpers/defineProperty.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/icon/glyph/checkbox.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/icon/glyph/radio.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/icon/glyph/warning.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/icon/glyph/cross.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/icon/glyph/check.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/icon/glyph/cross.js","webpack:///./node_modules/pixelmatch/index.js","webpack:///./node_modules/amplitude-js/amplitude.js","webpack:///./node_modules/postis/src/index.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/icon/glyph/chevron-down.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/icon/glyph/checkbox.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/icon/glyph/radio.js","webpack:///./node_modules/array-find/find.js","webpack:///./node_modules/shallowequal/index.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/icon/glyph/error.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/icon/glyph/warning.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/icon/glyph/warning.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/icon/glyph/check-circle.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/icon/glyph/info.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/icon/glyph/error.js","webpack:///./modules/util/TaskQueue.js","webpack:///./node_modules/windows-iana/dist/index.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/icon/glyph/checkbox-indeterminate.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/icon/glyph/checkbox.js","webpack:///./react/features/poker/layout/PokerTableThumb.js","webpack:///./react/features/poker/components/index.js","webpack:///./modules/UI/shared_video/SharedVideoThumb.js","webpack:///./modules/UI/videolayout/RemoteVideo.js","webpack:///./react/features/poker/components/LargePokerContainer.js","webpack:///./modules/UI/audio_levels/AudioLevels.js","webpack:///./modules/UI/videolayout/LocalVideo.js","webpack:///./node_modules/@atlaskit/icon/glyph/star-filled.js","webpack:///./node_modules/@atlaskit/icon/glyph/star.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/icon/glyph/warning.js","webpack:///./modules/recorder/Recorder.js","webpack:///./modules/keyboardshortcut/keyboardshortcut.js","webpack:///./modules/remotecontrol/RemoteControl.js","webpack:///./modules/remotecontrol/Controller.js","webpack:///./modules/keycode/keycode.js","webpack:///./modules/remotecontrol/Receiver.js","webpack:///./node_modules/jquery-i18next/index.js","webpack:///./modules/UI/UI.js","webpack:///./modules/UI/etherpad/Etherpad.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/analytics-next/dist/esm/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/analytics-next/dist/esm/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/droplist/dist/esm/styled/Item.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/droplist/dist/esm/utils/index.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/droplist/dist/esm/components/Element.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/droplist/dist/esm/components/Item.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/droplist/dist/esm/styled/Group.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/droplist/dist/esm/components/Group.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/layer/dist/esm/components/internal/ScrollBlock.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/layer/dist/esm/components/internal/helpers.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/layer/dist/esm/styledContentContainer.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/layer/dist/esm/components/Layer.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/droplist/dist/esm/styled/Droplist.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/droplist/dist/esm/theme/item-theme.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/droplist/dist/esm/components/Droplist.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/util/contextNamespace.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/util/keys.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/context/DropdownItemFocusManager.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/context/DropdownItemClickManager.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/context/DropdownItemSelectionCache.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/styled/WidthConstrainer.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/DropdownMenuStateless.js","webpack:///./react/features/desktop-picker/components/DesktopSourcePreview.js","webpack:///./react/features/desktop-picker/components/DesktopPickerPane.js","webpack:///./react/features/desktop-picker/logger.js","webpack:///./react/features/desktop-picker/components/DesktopPicker.js","webpack:///./react/features/desktop-picker/functions.js","webpack:///./react/features/desktop-picker/actions.js","webpack:///./react/features/desktop-picker/index.js","webpack:///./react/features/remote-control/components/RemoteControlAuthorizationDialog.js","webpack:///./react/features/remote-control/actions.js","webpack:///./react/features/remote-control/index.js","webpack:///./react/features/audio-level-indicator/components/AudioLevelIndicator.js","webpack:///./react/features/audio-level-indicator/index.js","webpack:///./react/features/stream-effects/presenter/TimeWorker.js","webpack:///./react/features/stream-effects/presenter/JitsiStreamPresenterEffect.js","webpack:///./react/features/stream-effects/presenter/index.js","webpack:///./react/features/rnnoise/functions.js","webpack:///./react/features/rnnoise/index.js","webpack:///./node_modules/jquery/dist/jquery.min.js-exposed","webpack:///./node_modules/jquery/dist/jquery.min.js","webpack:///./node_modules/jquery-contextmenu/dist/jquery.contextMenu.js","webpack:///./node_modules/jQuery-Impromptu/src/jquery-impromptu.js","webpack:///./node_modules/jwt-decode/lib/base64_url_decode.js","webpack:///./node_modules/jwt-decode/lib/atob.js","webpack:///./node_modules/react/cjs/react.production.min.js","webpack:///./node_modules/react-redux/node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/react-redux/node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/hoist-non-react-statics/node_modules/react-is/index.js","webpack:///./node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js","webpack:///./node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js","webpack:///./node_modules/react-dom/cjs/react-dom.production.min.js","webpack:///./node_modules/scheduler/index.js","webpack:///./node_modules/scheduler/cjs/scheduler.production.min.js","webpack:///./node_modules/jitsi-meet-logger/lib/LogCollector.js","webpack:///./node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack:///./node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/html-parse-stringify2/lib/parse.js","webpack:///./node_modules/html-parse-stringify2/lib/parse-tag.js","webpack:///./node_modules/void-elements/index.js","webpack:///./node_modules/html-parse-stringify2/lib/stringify.js","webpack:///./node_modules/react-i18next/node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:///./node_modules/react-i18next/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:///./node_modules/react-i18next/node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/index.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/utils.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/cookie.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/querystring.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/localStorage.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/navigator.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/htmlTag.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/path.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/subdomain.js","webpack:///./node_modules/moment-duration-format/lib/moment-duration-format.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/fbjs/lib/hyphenate.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/fbjs/lib/invariant.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/react-is/cjs/react-is.production.min.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack:///./node_modules/uuid/v4.js","webpack:///./node_modules/@atlaskit/icon/cjs/constants.js","webpack:///./node_modules/react-transition-group/CSSTransition.js","webpack:///./node_modules/react-transition-group/node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/react-transition-group/node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/dom-helpers/class/addClass.js","webpack:///./node_modules/dom-helpers/class/hasClass.js","webpack:///./node_modules/dom-helpers/class/removeClass.js","webpack:///./node_modules/react-transition-group/ReplaceTransition.js","webpack:///./node_modules/react-transition-group/utils/ChildMapping.js","webpack:///./node_modules/@babel/runtime/helpers/superPropBase.js","webpack:///./node_modules/react-node-resolver/lib/NodeResolver.js","webpack:///./node_modules/babel-runtime/core-js/object/assign.js","webpack:///./node_modules/core-js/library/fn/object/assign.js","webpack:///./node_modules/core-js/library/modules/es6.object.assign.js","webpack:///./node_modules/core-js/library/modules/_a-function.js","webpack:///./node_modules/core-js/library/modules/_object-assign.js","webpack:///./node_modules/core-js/library/modules/_array-includes.js","webpack:///./node_modules/core-js/library/modules/_to-length.js","webpack:///./node_modules/core-js/library/modules/_to-absolute-index.js","webpack:///./node_modules/babel-runtime/core-js/symbol/iterator.js","webpack:///./node_modules/core-js/library/fn/symbol/iterator.js","webpack:///./node_modules/core-js/library/modules/es6.string.iterator.js","webpack:///./node_modules/core-js/library/modules/_string-at.js","webpack:///./node_modules/core-js/library/modules/_iter-create.js","webpack:///./node_modules/core-js/library/modules/_html.js","webpack:///./node_modules/core-js/library/modules/web.dom.iterable.js","webpack:///./node_modules/core-js/library/modules/es6.array.iterator.js","webpack:///./node_modules/core-js/library/modules/_add-to-unscopables.js","webpack:///./node_modules/core-js/library/modules/_iter-step.js","webpack:///./node_modules/babel-runtime/core-js/symbol.js","webpack:///./node_modules/core-js/library/fn/symbol/index.js","webpack:///./node_modules/core-js/library/modules/es6.symbol.js","webpack:///./node_modules/core-js/library/modules/_enum-keys.js","webpack:///./node_modules/core-js/library/modules/_is-array.js","webpack:///./node_modules/core-js/library/modules/_object-gopn-ext.js","webpack:///./node_modules/core-js/library/modules/es7.symbol.async-iterator.js","webpack:///./node_modules/core-js/library/modules/es7.symbol.observable.js","webpack:///./node_modules/babel-runtime/core-js/object/set-prototype-of.js","webpack:///./node_modules/core-js/library/fn/object/set-prototype-of.js","webpack:///./node_modules/core-js/library/modules/es6.object.set-prototype-of.js","webpack:///./node_modules/core-js/library/modules/_set-proto.js","webpack:///./node_modules/babel-runtime/core-js/object/create.js","webpack:///./node_modules/core-js/library/fn/object/create.js","webpack:///./node_modules/core-js/library/modules/es6.object.create.js","webpack:///./node_modules/create-react-context/lib/implementation.js","webpack:///./node_modules/gud/index.js","webpack:///./node_modules/fbjs/lib/warning.js","webpack:///./node_modules/react-linkify/dist/components/Linkify.js","webpack:///./node_modules/react-linkify/dist/decorators/defaultComponentDecorator.js","webpack:///./node_modules/react-linkify/dist/decorators/defaultHrefDecorator.js","webpack:///./node_modules/react-linkify/dist/decorators/defaultMatchDecorator.js","webpack:///./node_modules/linkify-it/index.js","webpack:///./node_modules/linkify-it/lib/re.js","webpack:///./node_modules/uc.micro/properties/Any/regex.js","webpack:///./node_modules/uc.micro/categories/Cc/regex.js","webpack:///./node_modules/uc.micro/categories/Z/regex.js","webpack:///./node_modules/uc.micro/categories/P/regex.js","webpack:///./node_modules/tlds/index.js","webpack:///./node_modules/react-linkify/dist/decorators/defaultTextDecorator.js","webpack:///./node_modules/core-js/library/fn/object/get-prototype-of.js","webpack:///./node_modules/core-js/library/modules/es6.object.get-prototype-of.js","webpack:///./node_modules/core-js/library/fn/object/define-property.js","webpack:///./node_modules/core-js/library/modules/es6.object.define-property.js","webpack:///./node_modules/babel-runtime/core-js/object/define-properties.js","webpack:///./node_modules/core-js/library/fn/object/define-properties.js","webpack:///./node_modules/core-js/library/modules/es6.object.define-properties.js","webpack:///./node_modules/babel-runtime/core-js/object/freeze.js","webpack:///./node_modules/core-js/library/fn/object/freeze.js","webpack:///./node_modules/core-js/library/modules/es6.object.freeze.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/icon/cjs/constants.js","webpack:///./node_modules/react-scrolllock/dist/ScrollLock.js","webpack:///./node_modules/react-scrolllock/dist/withTouchListeners.js","webpack:///./node_modules/react-scrolllock/dist/StyleSheet.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/icon/cjs/components/Icon.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/icon/cjs/constants.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/icon/cjs/components/Icon.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/icon/cjs/constants.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/icon/cjs/components/Icon.js","webpack:///./node_modules/@atlaskit/multi-select/node_modules/@atlaskit/icon/cjs/constants.js","webpack:///./node_modules/@atlaskit/toggle/node_modules/@atlaskit/icon/cjs/constants.js","webpack:///./logging_config.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/node-libs-browser/node_modules/isarray/index.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/icon/cjs/constants.js","webpack:///./node_modules/react-focus-lock/node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/react-focus-lock/node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/icon/cjs/constants.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/icon/cjs/components/Icon.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/icon/cjs/constants.js","webpack:///./node_modules/react-emoji-render/lib/renderer.js","webpack:///./node_modules/classnames/index.js","webpack:///./node_modules/string-replace-to-array/string-replace-to-array.js","webpack:///./node_modules/invariant/browser.js","webpack:///./node_modules/lodash.isstring/index.js","webpack:///./node_modules/emoji-regex/index.js","webpack:///./node_modules/react-emoji-render/lib/asciiRegex.js","webpack:///./node_modules/react-emoji-render/lib/normalizeProtocol.js","webpack:///./node_modules/react-emoji-render/lib/unicodeToCodepoint.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/icon/cjs/constants.js","webpack:///./node_modules/es6-promise/dist/es6-promise.js","webpack:///./node_modules/isomorphic-fetch/fetch-npm-browserify.js","webpack:///./node_modules/whatwg-fetch/fetch.js","webpack:///./node_modules/@microsoft/microsoft-graph-client/lib/src/RequestMethod.js","webpack:///./node_modules/@microsoft/microsoft-graph-client/lib/src/GraphHelper.js","webpack:///./node_modules/windows-iana/dist/enums.js","webpack:///./node_modules/windows-iana/dist/time-zone-map.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/icon/cjs/constants.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/icon/cjs/components/Icon.js","webpack:///./node_modules/@atlaskit/field-text-area/node_modules/@atlaskit/icon/cjs/constants.js","webpack:///./node_modules/jquery-i18next/dist/commonjs/index.js","webpack:///./modules/translation/translation.js","webpack:///./react/index.web.js","webpack:///./app.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/DropdownMenu.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/analytics-next/dist/esm/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/analytics-next/dist/esm/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/field-base/dist/esm/styled/Label.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/field-base/dist/esm/components/Label.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/popper/dist/esm/Popper.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/inline-dialog/dist/esm/InlineDialog/styled.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/inline-dialog/dist/esm/InlineDialog/index.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/field-base/dist/esm/styled/theme.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/field-base/dist/esm/styled/Content.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/spinner/dist/esm/Spinner/constants.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/spinner/dist/esm/Spinner/styledContainer.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/spinner/dist/esm/Spinner/styledSvg.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/spinner/dist/esm/Spinner/index.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/field-base/dist/esm/components/ValidationElement.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/field-base/dist/esm/components/FieldBaseStateless.js","webpack:///./node_modules/@atlaskit/field-text/node_modules/@atlaskit/field-base/dist/esm/components/FieldBase.js","webpack:///./node_modules/@atlaskit/field-text/dist/esm/styled/Input.js","webpack:///./node_modules/@atlaskit/field-text/dist/esm/FieldTextStateless.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/analytics-next/dist/esm/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/components/getButtonProps.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/components/CustomComponentProxy.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/styled/getButtonStyles.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/analytics-next/dist/esm/cleanProps.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/styled/themeDefinitions.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/styled/utils.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/styled/ButtonContent.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/styled/ButtonWrapper.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/styled/IconWrapper.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/spinner/dist/esm/Spinner/constants.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/spinner/dist/esm/Spinner/styledContainer.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/spinner/dist/esm/Spinner/styledSvg.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/spinner/dist/esm/Spinner/index.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/styled/LoadingSpinner.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/components/Button.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/analytics-next/dist/esm/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/button/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/analytics-next/dist/esm/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./node_modules/@atlaskit/tabs/dist/esm/styled.js","webpack:///./node_modules/@atlaskit/tabs/dist/esm/components/TabsNavigation.js","webpack:///./node_modules/@atlaskit/tabs/dist/esm/components/TabContent.js","webpack:///./node_modules/@atlaskit/tabs/dist/esm/components/TabItem.js","webpack:///./node_modules/@atlaskit/tabs/dist/esm/components/Tabs.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/analytics-next/dist/esm/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/tabs/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/popper/dist/esm/Popper.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/portal/dist/esm/components/Portal.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/analytics-next/dist/esm/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/tooltip/dist/esm/components/Tooltip.js","webpack:///./node_modules/@atlaskit/tooltip/dist/esm/styled.js","webpack:///./node_modules/@atlaskit/tooltip/dist/esm/components/Animation.js","webpack:///./node_modules/@atlaskit/tooltip/dist/esm/components/utils/analytics-payloads.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/analytics-next/dist/esm/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/tooltip/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/analytics-next/dist/esm/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/popper/dist/esm/Popper.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/inline-dialog/dist/esm/InlineDialog/styled.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/inline-dialog/dist/esm/InlineDialog/index.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/analytics-next/dist/esm/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/inline-message/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/inline-message/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/inline-message/dist/esm/components/IconForType/styledIconForType.js","webpack:///./node_modules/@atlaskit/inline-message/dist/esm/components/IconForType/index.js","webpack:///./node_modules/@atlaskit/inline-message/dist/esm/components/InlineMessage/styledInlineMessage.js","webpack:///./node_modules/@atlaskit/inline-message/dist/esm/components/InlineMessage/index.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsContext.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/analytics-next/dist/esm/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/analytics-next/dist/esm/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/checkbox/dist/esm/styled/Checkbox.js","webpack:///./node_modules/@atlaskit/checkbox/dist/esm/CheckboxIcon.js","webpack:///./node_modules/@atlaskit/checkbox/dist/esm/Checkbox.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/analytics-next/dist/esm/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/checkbox/node_modules/@atlaskit/analytics-next/dist/esm/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/item/dist/esm/util/getDisplayName.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/item/dist/esm/util/safeContextCall.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/item/dist/esm/util/contextNamespace.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/item/dist/esm/components/hoc/withItemClick.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/item/dist/esm/components/hoc/withItemFocus.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/item/dist/esm/styled/Item.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/item/dist/esm/styled/ItemParts.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/item/dist/esm/components/Item.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/item/DropdownItem.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/item/dist/esm/styled/ItemGroup.js","webpack:///./node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/item/dist/esm/components/ItemGroup.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/group/DropdownItemGroup.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/styled/ButtonGroup.js","webpack:///./node_modules/@atlaskit/button/dist/es2015/components/ButtonGroup.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","self","ReferenceError","obj","configurable","writable","_typeof","iterator","constructor","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","length","descriptor","protoProps","staticProps","_extends","assign","arguments","source","inherits","subClass","superClass","setPrototypeOf","__proto__","objectWithoutProperties","keys","indexOf","possibleConstructorReturn","isPlainObject","x","StyledComponentsError","_Error","code","this","_len2","interpolations","Array","_key2","_this","join","Error","flatten","chunks","executionContext","reduce","ruleSet","chunk","isArray","push","apply","styledComponentId","nextChunk","isValidElement","elementName","displayName","objToCss","prevKey","css","filter","map","toString","COMMENT_REGEX","stylisSplitter","global","cascade","keyframe","prefix","compress","semicolon","stylis","parsingRules","returnRulesPlugin","context","parsedRules","parseRulesPlugin","rule","use","stringifyRules","rules","selector","flatCSS","replace","splitByRules","isStyledComponent","consolidateStreamedStyles","getAlphabeticChar","String","fromCharCode","generateAlphabeticName","Math","floor","interleave","strings","result","len","EMPTY_ARRAY","freeze","EMPTY_OBJECT","styles","_len","_key","concat","SC_ATTR","process","env","CONTEXT_KEY","IS_BROWSER","window","SC_COMPONENT_ID","extractComps","maybeCSS","existingComponents","match","componentId","matchIndex","_ref","nextComp","cssFromDOM","slice","getNonce","addNameForId","names","id","resetIdNames","hasNameForId","undefined","stringifyNames","str","trim","sheetForTag","tag","sheet","size","document","styleSheets","ownerNode","safeInsertRule","cssRule","index","maxIndex","cssRules","insertRule","err","makeTextMarker","addUpUntilIndex","sizes","totalUpToIndex","wrapAsHtmlTag","additionalAttrs","nonce","Boolean","wrapAsElement","_props","createElement","dangerouslySetInnerHTML","__html","getIdsFromMarkersFactory","markers","makeServerTagInternal","namesArg","markersArg","insertMarker","prev","cssForId","clone","namesClone","cloneNames","markersClone","getIds","insertRules","removeRules","marker","sealed","styleTag","toElement","toHTML","makeTag","tagEl","forceServer","insertBefore","getImportRuleTag","el","setAttribute","appendChild","createTextNode","parentNode","nextSibling","makeStyleTag","extractImport","usedImportRuleTag","end","cssText","insertIndex","injectedRules","importRules","cssRulesSize","mayHaveImport","removalIndex","lowerBound","deleteRule","deleteRules","makeSpeedyTag","SPLIT_REGEX","MAX_SIZE","_StyleSheetManager$ch","sheetRunningId","master","StyleSheet","head","importRuleTag","firstTag","tags","tagMap","deferred","rehydratedNames","ignoreRehydratedNames","capacity","clones","rehydrate","els","extracted","isStreamed","nodes","querySelectorAll","nodesSize","getAttribute","elNames","split","elNamesSize","j","textContent","extractedSize","rehydrationTag","immediateRehydration","cb","called","_extracted$i","_i","removeChild","makeRehydrationTag","max","_j","reset","ids","newTag","sealAllTags","forEach","lastEl","getTagForId","hasId","deferredInject","inject","remove","toReactElements","StyleSheetManager","_Component","getChildContext","sheetInstance","componentWillMount","render","Children","only","children","childContextTypes","oneOfType","instanceOf","ServerStyleSheet","isRequired","masterSheet","closed","complete","splice","collectStyles","getStyleTags","getStyleElement","interleaveWithNodeStream","readableStream","determineTheme","fallbackTheme","defaultProps","isDefaultTheme","theme","escapeRegex","dashesAtEnds","escape","getComponentName","isTag","ATTRIBUTE_REGEX","isCustomAttribute","RegExp","test","_contextShape","_ThemeProvider$contex","CHANNEL","CHANNEL_NEXT","CONTEXT_CHANNEL_SHAPE","shape","getTheme","func","subscribe","unsubscribe","contextShape","_babelHelpers$extends","ThemeProvider","unsubscribeToOuterId","initialState","listeners","state","_this2","outerContext","outerTheme","broadcast","publish","nextState","listener","currentId","unsubID","_this3","subscriber","unsubscribeId","componentWillReceiveProps","nextProps","componentWillUnmount","passedTheme","contextTypes","STATIC_EXECUTION_CONTEXT","modifiedContextShape","identifiers","BaseStyledComponent","_temp","args","attrs","generatedClassName","unsubscribeFromContext","buildExecutionContext","acc","attr","child","parent","getPrototypeOf","hasInInheritanceChain","generateAndInjectStyles","_constructor","componentStyle","styleSheet","warnTooManyClasses","isStatic","styledContext","setState","nextTheme","_generatedClassName","prevState","innerRef","_constructor2","isTargetTag","className","baseProps","ref","propsForElement","toLowerCase","murmurhash","k","h","charCodeAt","areStylesCacheable","isStaticRules","isHMREnabled","hot","domElements","replaceWhitespace","withTheme","Component$$1","isStatelessFunctionalComponent","shouldSetInnerRef","WithTheme","_React$Component","themeProp","oldState","Component","__DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS","ComponentStyle","nameGenerator","generateRuleHash","placeholder","lastClassName","generateName","_ComponentStyle","constructWithOptions","componentConstructor","options","templateFunction","withConfig","config","_constructWithOptions","StyledComponent","createStyledComponent","_options$isClass","isClass","_options$displayName","generateDisplayName","_options$componentId","_displayName","parentComponentId","nr","generateId","_options$ParentCompon","ParentComponent","extendingRules","_ParentComponent","withComponent","previousComponentId","optionsToCopy","newComponentId","newOptions","rulesFromOptions","newRules","extend","_StyledComponent","keyframes","JSON","stringify","_keyframes","injectGlobal","hash","_injectGlobal","styled","styledComponent","domElement","_styled","_set","connect","mapStateToProps","mapDispatchToProps","reduxConnect","equals","a","b","_","isEqual","set","copyOnWrite","newState","toState","stateful","getState","_elements","applyMiddleware","additional","register","middleware","combineReducers","reducer","getLogger","Set","_listener","prevSelections","store","selectorListener","_selectorListeners","prevSelection","selection","e","logger","error","add","Map","TYPE_TRACK","TYPE_UI","ACTION_SHORTCUT_TRIGGERED","createApiEvent","action","attributes","createAudioOnlyChangedEvent","enabled","createConnectionEvent","actionSubject","createCalendarClickedEvent","eventName","type","createCalendarSelectedEvent","createCalendarConnectedEvent","createRecentClickedEvent","createChromeExtensionBannerEvent","installPressed","createRecentSelectedEvent","createDeepLinkingPageEvent","createDeviceChangedEvent","mediaType","deviceType","createE2EEEvent","createFeedbackOpenEvent","createInviteDialogEvent","createOfferAnswerFailedEvent","createPageReloadScheduledEvent","reason","timeout","details","createPinnedEvent","participantId","objectType","objectId","createProfilePanelButtonEvent","buttonName","createRecordingDialogEvent","dialogName","createLiveStreamingDialogEvent","createRecordingEvent","createRejoinedEvent","url","lastConferenceDuration","timeSinceLeft","createRemoteMuteConfirmedEvent","createRemoteVideoMenuButtonEvent","createVideoBlurEvent","createScreenSharingEvent","createSelectParticipantFailedEvent","event","createSharedVideoEvent","createShortcutEvent","shortcut","actionSubjectId","createStartAudioOnlyEvent","audioOnly","createStartSilentEvent","createStartMutedConfigurationEvent","audioMute","videoMute","createSyncTrackStateEvent","muted","createToolbarEvent","createTrackMutedEvent","createWelcomePageEvent","AbstractHandler","_enabled","_whiteListedEvents","whiteListedEvents","_blackListedEvents","blackListedEvents","_extractName","_shouldIgnore","getInstance","amplitude","instanceName","AmplitudeHandler","super","amplitudeAPPKey","host","user","_amplitudeOptions","init","includeReferrer","setUserId","setUserProperties","userProps","sendEvent","logEvent","MatomoHandler","_userProperties","matomoEndpoint","matomoSiteID","_initMatomo","_paq","u","endsWith","g","getElementsByTagName","async","defer","src","_extractValue","round","parseFloat","visitScope","matomoEvent","isNaN","globalNS","getJitsiMeetGlobalNS","analyticsHandlers","sendAnalytics","analytics","warn","createHandlers","isAnalyticsEnabled","Promise","resolve","locationURL","analyticsConfig","deploymentInfo","scriptURLs","googleAnalyticsTrackingId","group","handlerConstructorOptions","envType","product","subproduct","environment","version","JitsiMeetJS","handlers","matomo","promises","loadScript","then","all","values","Handler","debug","_loadHandlers","externalHandlers","catch","dispose","SET_NETWORK_INFO","_STORE_NETWORK_INFO_CLEANUP","_storeNetworkInfoCleanup","cleanup","ONLINE_STATE_CHANGED_EVENT","NetworkInfoService","EventEmitter","_onlineStateListener","_handleOnlineStatusChange","_offlineStateListener","isOnline","emit","addEventListener","navigator","onLine","start","stop","removeEventListener","MiddlewareRegistry","dispatch","next","APP_WILL_MOUNT","isSupported","networkInfoService","removeAllListeners","addListener","networkType","info","setNetworkInfo","APP_WILL_UNMOUNT","_cleanup","DEFAULT_STATE","ReducerRegistry","cellularGeneration","calculateLocalTrackDuration","now","Date","localTracksDuration","conference","audio","video","camera","desktop","tracks","audioTrack","getLocalAudioTrack","videoTrack","getLocalVideoTrack","newDuration","startedTime","videoType","SET_CONFIG","SET_ROOM","createHandlersPromise","server","roomName","room","permanentProperties","websocket","addPermanentProperties","setConferenceName","setAnalyticsHandlers","isMobileBrowser","browser","isChrome","bannerCfg","chromeExtensionBanner","checkChromeExtensionsInstalled","extensionsInstalled","hasChromeExtension","some","ext","initAnalytics","CONFERENCE_JOINED","CONFERENCE_WILL_LEAVE","newLocalTracksDuration","duration","createLocalTracksDurationEvent","createNetworkInfoEvent","TRACK_ADDED","TRACK_REMOVED","TRACK_UPDATED","_defineProperties","LIB_DID_DISPOSE","LIB_DID_INIT","LIB_INIT_ERROR","LIB_WILL_DISPOSE","LIB_WILL_INIT","disposeLib","initLib","enableAnalyticsLogging","libInitError","SET_LOG_COLLECTOR","SET_LOGGING_CONFIG","setLogCollector","logCollector","isTestModeEnabled","testingConfig","testing","testMode","TestConnectionInfo","_onStatsUpdated","stats","bitrate","download","upload","componentDidMount","statsEmitter","subscribeToClientStats","_localUserId","componentDidUpdate","prevProps","unsubscribeToClientStats","_testMode","accessible","_conferenceConnectionState","_conferenceJoinedState","conferenceJoined","localParticipant","getLocalParticipant","connectionState","SET_CONNECTION_STATE","_onConnectionEvent","JitsiConferenceEvents","CONNECTION_ESTABLISHED","CONNECTION_INTERRUPTED","CONNECTION_RESTORED","CONFERENCE_WILL_JOIN","on","_bindConferenceConnectionListener","INITIAL_STATE","_setConnectionState","JitsiMeetLogStorage","counter","isReady","storeLogs","logEntries","getCurrentConference","isCallstatsEnabled","logMessage","logEntry","timestamp","count","text","sendApplicationLog","console","JitsiMeetInMemoryLogStorage","logs","getLogs","_setLogLevels","setLogLevel","defaultLogLevel","setLogLevelById","Logger","APP","_appWillMount","flush","BEFORE_STATISTICS_DISPOSED","_conferenceJoined","_libWillInit","newValue","isTestingEnabled","loggingConfig","disableLogCollector","removeGlobalTransport","removeGlobalLogTransport","_logCollector","LogCollector","addGlobalTransport","addGlobalLogTransport","debugLogs","debugLogCollector","storeInterval","_initLogging","_setLoggingConfig","require","_setLogCollector","getGlobalOnErrorHandler","oldOnErrorHandler","onerror","message","lineno","colno","oldOnUnhandledRejection","onunhandledrejection","_setErrorHandlers","PARTICIPANT_LEFT","participant","local","initialized","setLoggingConfig","_setConfig","initError","util","JitsiConferenceErrors","errors","events","JitsiConnectionErrors","connection","JitsiConnectionEvents","JitsiConnectionQualityEvents","connectionQuality","JitsiE2ePingEvents","detection","e2eping","JitsiMediaDevicesEvents","mediaDevices","JitsiParticipantConnectionStatus","constants","participantConnectionStatus","JitsiRecordingConstants","recording","JitsiSIPVideoGWStatus","sipVideoGW","JitsiTrackErrors","track","JitsiTrackEvents","_getPrototypeOf","assertThisInitialized","_typeof2","arr","each","defaults","prop","addQueryString","params","queryString","encodeURIComponent","paramName","ajax","callback","data","cache","queryStringParams","XMLHttpRequest","ActiveXObject","open","crossDomain","setRequestHeader","withCredentials","overrideMimeType","customHeaders","onreadystatechange","readyState","responseText","send","log","getDefaults","loadPath","addPath","allowMultiLoading","parse","Backend","services","_classCallCheck","languages","namespaces","interpolator","interpolate","lng","loadUrl","language","namespace","xhr","status","ret","fallbackValue","payload","cacheUserLanguage","Function","lookup","defaultLanguage","order","configLanguageDetector","interfaceConfig","LANG_DETECTION","languageDetector","BrowserLanguageDetector","caches","lookupLocalStorage","lookupQuerystring","addDetector","LANGUAGES","LANGUAGES_RESOURCES","DEFAULT_LANGUAGE","backend","defaultNS","fallbackLng","interpolation","escapeValue","load","react","useSuspense","returnEmptyString","returnNull","whitelist","i18next","I18nextXHRBackend","addResourceBundle","COUNTRIES_RESOURCES","MAIN_RESOURCES","getLocalizedDateFormatter","dateOrTimeStamp","moment","locale","i18nLocale","supportedLocale","localeResult","exec","currentLocaleRegexp","locales","find","lang","_getSupportedLocale","getLocalizedDurationFormatter","format","DOMINANT_SPEAKER_CHANGED","KICK_PARTICIPANT","MUTE_REMOTE_PARTICIPANT","PARTICIPANT_ID_CHANGED","PARTICIPANT_JOINED","PARTICIPANT_KICKED","PARTICIPANT_UPDATED","PIN_PARTICIPANT","HIDDEN_PARTICIPANT_JOINED","HIDDEN_PARTICIPANT_LEFT","SET_LOADABLE_AVATAR_URL","dominantSpeakerChanged","kickParticipant","localParticipantConnectionStatusChanged","connectionStatus","participantConnectionStatusChanged","localParticipantIdChanged","oldValue","localParticipantRoleChanged","role","participantRoleChanged","muteRemoteParticipant","participantJoined","stateFeaturesBaseConference","joining","hiddenParticipantJoined","hiddenParticipantLeft","participantLeft","participantPresenceChanged","presence","participantUpdated","participantToUpdate","getNormalizedDisplayName","participantMutedUs","showNotification","descriptionKey","titleKey","titleArguments","participantDisplayName","getParticipantDisplayName","getId","participantKicked","kicker","kicked","NOTIFICATION_TIMEOUT","pinParticipant","PARTICIPANT_JOINED_FILE","PARTICIPANT_LEFT_FILE","_e2eeUpdated","e2eeEnabled","_maybePlaySounds","startAudioMuted","getParticipantCount","INVITED","CALLING","playSound","PARTICIPANT_JOINED_SOUND_ID","PARTICIPANT_LEFT_SOUND_ID","_participantJoinedOrUpdated","avatarURL","email","raisedHand","setLocalParticipantProperty","disableThirdPartyRequests","updatedParticipant","getParticipantById","getFirstLoadableAvatarUrl","loadableAvatarUrl","setLoadableAvatarUrl","currentKnownId","getMyUserId","UI","refreshAvatarDisplay","_raiseHandUpdated","registerSound","_registerSounds","settings","localParticipantJoined","avatarID","_localParticipantJoined","unregisterSound","_unregisterSounds","localParticipantLeft","_localParticipantLeft","myUserId","muteParticipant","emitEvent","UIEvents","NICKNAME_CHANGED","StateListenerRegistry","leaving","LOCAL_PARTICIPANT_DEFAULT_ID","forEachConference","PARTICIPANT_PROPERTY_CHANGED","propertyName","e2eeSupported","isJigasi","features","localParticipantId","PARTICIPANT_PROPS_TO_OMIT_WHEN_UPDATE","_participantJoined","botType","dominantSpeaker","isFakeParticipant","pinned","PARTICIPANT_ROLE","NONE","_participant","e100","themed","light","colors","dark","e200","e300","e400","e500","lineHeight","fn","addend","subtract","subtrahend","multiply","factor","divide","divisor","createTheme","defaultThemeFn","emptyThemeFn","tokens","ThemeContext","Consumer","themeProps","themeFn","Provider","valueFn","getStylesheetResetCSS","backgroundColor","buildThemeState","LegacyReset","div","AtlaskitThemeProvider","hasAtlaskitThemeProvider","canUseDOM","stylesheet","innerHTML","newProps","newThemeState","Theme","bool","appearance","merged","orTextColor","preferred","textColor","Div","ResetTheme","linkColor","linkColorHover","linkColorActive","linkColorOutline","headingColor","subtleHeadingColor","subtleTextColor","Reset","InnerComponent","AtlasKitThemeProvider","R50","R75","R100","R200","R300","R400","R500","Y50","Y75","Y100","Y200","Y300","Y400","Y500","G50","G75","G100","G200","G300","G400","G500","B50","B75","B100","B200","B300","B400","B500","P50","P75","P100","P200","P300","P400","P500","T50","T75","T100","T200","T300","T400","T500","N0","N10","N20","N30","N40","N50","N60","N70","N80","N90","N100","N200","N300","N400","N500","N600","N700","N800","N900","N10A","N20A","N30A","N40A","N50A","N60A","N70A","N80A","N90A","N100A","N200A","N300A","N400A","N500A","N600A","N700A","N800A","DN900","DN800","DN700","DN600","DN500","DN400","DN300","DN200","DN100","DN90","DN80","DN70","DN60","DN50","DN40","DN30","DN20","DN10","DN0","DN800A","DN700A","DN600A","DN500A","DN400A","DN300A","DN200A","DN100A","DN90A","DN80A","DN70A","DN60A","DN50A","DN40A","DN30A","DN20A","DN10A","background","backgroundActive","backgroundHover","backgroundOnLayer","textHover","textActive","subtleText","placeholderText","heading","subtleHeading","codeBlock","linkHover","linkActive","linkOutline","primary","blue","teal","purple","red","yellow","green","colorPalette8","colorPalette16","colorPalette24","colorPalette","palette","borderRadius","gridSize","fontSize","DEFAULT_COLOR","DEFAULT_SIZE","Icon","color","onClick","IconComponent","style","styleTypeToObject","styleColor","styleSize","restStyle","calculatedColor","calculatedSize","Container","fill","height","width","viewBox","clipRule","fillRule","rx","_ref3","_ref4","_ref5","_ref6","_ref7","_ref8","clipPath","ownKeys","getOwnPropertySymbols","sym","getOwnPropertyDescriptor","authStatusChanged","authEnabled","authLogin","AUTH_STATUS_CHANGED","conferenceFailed","CONFERENCE_FAILED","recoverable","conferenceLeft","CONFERENCE_LEFT","conferenceSubjectChanged","subject","CONFERENCE_SUBJECT_CHANGED","conferenceTimestampChanged","conferenceTimestamp","CONFERENCE_TIMESTAMP_CHANGED","_conferenceWillJoin","localTracks","getLocalTracks","jitsiTrack","_addLocalTracksToConference","conferenceWillJoin","conferenceWillLeave","createConference","password","nick","initJitsiConference","getBackendSafeRoomName","applicationName","getName","getWiFiStatsMethod","getWiFiStats","confID","pathname","statisticsDisplayName","enableDisplayNameInStats","statisticsId","enableEmailInStats","JITSI_CONNECTION_CONFERENCE_KEY","JITSI_CONFERENCE_URL_KEY","CONFERENCE_ERROR","SUBJECT_CHANGED","CONFERENCE_CREATED_TIMESTAMP","KICKED","kickedOut","LOCK_STATE_CHANGED","lockStateChanged","STARTED_MUTED","audioMuted","videoMuted","startVideoMuted","setAudioMuted","setVideoMuted","isLocal","trackAdded","trackRemoved","TRACK_MUTE_CHANGED","participantThatMutedUs","DISPLAY_NAME_CHANGED","ENDPOINT_MESSAGE_RECEIVED","endpointMessageReceived","PARTICIPANT_CONN_STATUS_CHANGED","USER_JOINED","commonUserJoinedHandling","USER_LEFT","commonUserLeftHandling","USER_ROLE_CHANGED","USER_STATUS_CHANGED","BOT_TYPE_CHANGED","addCommandListener","AVATAR_ID_COMMAND","AVATAR_URL_COMMAND","EMAIL_COMMAND","_addConferenceListeners","sendLocalParticipant","dataChannelOpened","DATA_CHANNEL_OPENED","KICKED_OUT","locked","onStartMutedPolicyChanged","SET_START_MUTED_POLICY","startAudioMutedPolicy","startVideoMutedPolicy","p2pStatusChanged","p2p","P2P_STATUS_CHANGED","sendTones","tones","pause","SEND_TONES","setDesktopSharingEnabled","desktopSharingEnabled","SET_DESKTOP_SHARING_ENABLED","setFollowMe","SET_FOLLOW_ME","setMaxReceiverVideoQuality","maxReceiverVideoQuality","SET_MAX_RECEIVER_VIDEO_QUALITY","setPassword","method","passwordRequired","SET_PASSWORD","lock","SET_PASSWORD_FAILED","reject","setPreferredVideoQuality","preferredVideoQuality","SET_PREFERRED_VIDEO_QUALITY","setRoom","setStartMutedPolicy","setSubject","SET_PENDING_SUBJECT_CHANGE","beforeUnloadHandler","_setReceiverVideoConstraint","setReceiverVideoConstraint","min","OFFER_ANSWER_FAILED","leave","_conferenceFailed","pendingSubjectChange","requireDisplayName","isHidden","openDisplayNamePrompt","_connectionEstablished","CONNECTION_FAILED","getConnection","conferenceAction","_connectionFailed","API","notifySubjectChanged","_conferenceSubjectChanged","_syncReceiveVideoQuality","setDisplayName","_updateLocalParticipantInConference","participants","participantById","pinnedParticipant","getPinnedParticipant","actionName","ACTION_PINNED","ACTION_UNPINNED","participantIdForEvent","_pinParticipant","_sendTones","_setRoom","MEDIA_TYPE","PRESENTER","promise","_removeLocalTracksFromConference","_syncConferenceLocalTracksWithState","_trackAddedOrRemoved","currentState","previousState","changedPreferredVideoQuality","changedMaxVideoQuality","setSenderVideoConstraint","_setSenderVideoConstraint","VIDEO_QUALITY_LEVELS","HIGH","_authStatusChanged","conference_","authRequired","AUTHENTICATION_REQUIRED","PASSWORD_REQUIRED","LOCKED_REMOTELY","isE2EESupported","_conferenceLeftOrWillLeave","CONNECTION_WILL_CONNECT","_lockStateChanged","_p2pStatusChanged","_setDesktopSharingEnabled","SET_LOCATION_URL","LOCKED_LOCALLY","_setPassword","isRoomValid","SET_SIP_GATEWAY_ENABLED","isSIPGatewayEnabled","_setSIPGatewayEnabled","fontSizeSmall","fontFamily","codeFontFamily","card","dialog","navigation","layer","blanket","modal","flag","spotlight","tooltip","reduxAssign","chainableAssign","chain","assignToState","assignFunction","assignToCommon","common","assignToGame","game","assignToRound","assignToBettingRound","bettingRound","addToPlayers","playerEntry","players","player","assignToAllPlayer","fromEntries","assignToAllCardSlots","deck","assignToDeck","cards","cardSlot","owner","assignToCardSlotsOf","aNick","assignToPlayer","aPlayer","assignToCurrentPlayer","currentPlayer","cardSlotsOf","cardSlots","countCards","nextPlayerAfter","nicks","playerNick","getPlayer","fold","activePlayers","OWNER_TABLE","slot","isNotInSeatControl","logState","addStagePerformance","durationMillis","stagePerformances","hookCallback","hooks","input","isObject","isUndefined","isNumber","isDate","res","hasOwnProp","valueOf","createUTC","strict","createLocalOrUTC","utc","getParsingFlags","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","copyConfig","to","from","val","_isAMomentObject","_f","_l","_tzm","_isUTC","_offset","_locale","updateInProgress","Moment","updateOffset","isMoment","absFloor","number","ceil","toInt","argumentForCoercion","coercedNumber","isFinite","compareArrays","array1","array2","dontConvert","lengthDiff","abs","diffs","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","stack","deprecations","deprecateSimple","isFunction","mergeConfigs","parentConfig","childConfig","Locale","aliases","addUnitAlias","unit","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","zeroFill","targetLength","forceSign","absNumber","zerosToFill","pow","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","localeData","formatMoment","expandFormat","array","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","regexes","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","regexEscape","matched","p1","p2","p3","p4","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","year","isLeapYear","y","parseTwoDigitYear","parseInt","getSetYear","makeGetSet","keepTime","set$1","month","date","daysInMonth","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","MONTHS_IN_FORMAT","defaultLocaleMonths","defaultLocaleMonthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","getSetMonth","defaultMonthsShortRegex","defaultMonthsRegex","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createDate","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","MM","yy","meridiemParse","localeFamilies","normalizeLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","getLocale","defineLocale","abbr","_config","parentLocale","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","w","weekYear","temp","weekdayOverflow","GG","W","E","createLocal","_week","curWeek","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","getDay","setUTCMinutes","getUTCMinutes","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","string","configFromStringAndFormat","untruncateYear","yearStr","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromRFC2822","monthStr","dayStr","hourStr","minuteStr","secondStr","parsedArray","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromStringAndArray","createFromInputFallback","configFromString","minute","second","millisecond","configFromObject","configFromInput","isUTC","getOwnPropertyNames","isObjectEmpty","createFromConfig","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","years","quarters","quarter","weeks","days","milliseconds","unitHasDecimal","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","matches","parts","cloneWithOffset","model","diff","setTime","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","diffRes","base","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","proto","preParsePostFormat","time","formats","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","getPrioritizedUnits","isoWeekday","toArray","toObject","toDate","toISOString","inspect","zone","suffix","toJSON","unix","creationData","isoWeek","isoWeeks","weekInfo","isoWeeksInYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","proto$1","get$1","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","Y","D","toFixed","total","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","withSuffix","posNegDuration","relativeTime$1","toIsoString","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","factory","arrayWithoutHoles","iterableToArray","nonIterableSpread","HIDE_DIALOG","OPEN_DIALOG","isDialogOpen","component","_abstractMapStateToProps","_dialogStyles","ColorSchemeRegistry","hideDialog","openDialog","componentProps","toggleDialog","AbstractDialog","_onCancel","_onSubmit","_onSubmitFulfilled","_onSubmitRejected","_mounted","_hide","cancelDisabled","onCancel","okDisabled","onSubmit","submitting","createContainer","zIndex","container","body","portalParent","parentElement","querySelector","Portal","_getPrototypeOf2","portalIsMounted","newContainer","replaceChild","_this$state","createPortal","_createContext","isOpen","onExited","Transition","currentChildren","previousChildren","ModalTransitionConsumer","stackConsumers","StackConsumer","stackIndex","update","updateFn","createAnalyticsEvent","consumerEvent","fire","channel","ContextTypes","getAtlaskitAnalyticsContext","AnalyticsContext","getAnalyticsContext","ancestorData","withAnalyticsContext","defaultData","WrappedComponent","WithAnalyticsContext","forwardRef","_props$analyticsConte","analyticsContext","others","AnalyticsEvent","updater","_AnalyticsEvent","UIAnalyticsEvent","hasFired","handler","AnalyticsContextConsumer","_this$context","getAtlaskitAnalyticsEventHandlers","modifyCallbackProp","propName","eventMapEntry","providedCallback","curr","withAnalyticsEvents","createEventMap","WithAnalyticsEvents","modifiedProps","entry","DEFAULT_THEME_MODE","__ATLASKIT_THEME__","modesOrVariant","variantModes","variantProp","variants","modes","isTinted","canClickThrough","_PureComponent","Blanket","_this$props","onBlanketClicked","containerProps","createAndFireEventOnAtlaskit","componentName","packageName","packageVersion","WIDTH_ENUM","widths","small","medium","large","defaultValue","flexMaxHeightIEFix","isChromeless","_ref2","maxDimensions","gutter","maxHeightDimensions","widthName","widthValue","FillScreen","scrollDistance","PositionerAbsolute","PositionerRelative","heightValue","hasEntered","in","_ref$stackIndex","onEntered","enter","exit","appear","unadjustedStatus","adjustedStatus","fadeBase","transition","opacity","slideBase","transform","verticalOffset","slideTransitions","entering","entered","exiting","fade","slide","warnIfDeprecatedAppearance","_super","WithDeprecationWarnings","isDisabled","isLoading","isSelected","spacing","shouldFitContainer","disabled","isActive","isFocus","isHover","fit","getAppearanceProps","onBlur","onFocus","onMouseDown","onMouseEnter","onMouseLeave","onMouseUp","tabIndex","preventDefault","getInteractionProps","ariaLabel","href","getLinkElementProps","ariaHaspopup","ariaExpanded","ariaControls","form","getButtonElementProps","templateObject_1","templateObject_2","CustomComponentProxy","proxiedProps","iconBefore","iconAfter","ProxiedComponent","hex2rgba","hex","alpha","colorArr","substring","fallbacks","textDecoration","default","hover","active","selected","focusSelected","boxShadowColor","focus","warning","danger","help","link","subtle","getPropertyAppearance","definitions","themeDefinitions","inBuiltTheme","propertyStyles","providedTheme","defaultAppearanceStyles","providedAppearanceStyles","inBuiltAppearanceStyles","getAppearanceProperty","getButtonStyles","baseSize","buttonHeight","compactButtonHeight","cursor","outline","padding","transitionDuration","verticalAlign","boxShadow","getLoadingStyle","getAlignment","followsIcon","gridSizeDiv2","alignItems","alignSelf","flex","margin","maxWidth","textOverflow","whiteSpace","display","flexWrap","position","justifyContent","optionalProps","isOnlyChild","flexShrink","userSelect","SIZES_MAP","xsmall","xlarge","keyframeNames","noop","enterRotate","leaveRotate","leaveOpacity","getSize","delay","phase","getStrokeWidth","getStrokeCircumference","strokeRadius","PI","rotate","enterOpacity","smallEnterStroke","mediumEnterStroke","largeEnterStroke","xlargeEnterStroke","spinnerColor","spinnerColorInverted","invertColor","svgStyles","circumference","idleRotation","spinUpStroke","standardSizeName","sizeName","spinUpOpacity","activeAnimations","Svg","svg","Outer","Spinner","node","done","executeCallback","tagName","endListener","spinnerSize","isCompleting","validateSize","addEndListener","mountOnEnter","unmountOnExit","onEnter","idle","onExit","onComplete","transitionNode","focusable","xmlns","cx","cy","LoadingDiv","LoadingSpinner","invertSpinner","StyledButton","button","StyledLink","StyledSpan","span","templateObject_3","templateObject_4","Button","customComponent","isInteractive","onInnerClick","stopPropagation","getInnerRef","autoFocus","getStyledComponent","buttonProps","iconIsOnlyChild","ButtonWithoutAnalytics","createAndFireEvent","keylineColor","keylineHeight","DefaultWrapperComponent","HeaderOrFooter","Header","showKeyline","oneLineTitleText","Title","h4","TitleText","isHeadingMultiline","iconColor","TitleIconWrapper","Body","shouldScroll","Footer","Actions","ActionItem","ModalFooter","actions","onClose","idx","rest","variant","icon","label","ModalHeader","Content","showFooterKeyline","showHeaderKeyline","tabbableElements","scrollContainer","_this$scrollContainer","scrollTop","scrollHeight","clientHeight","escapeIsHeldDown","shouldCloseOnEscapePress","_this$props$stackInde","_isMounted","onStackChange","handleKeyDown","handleKeyUp","capturedScrollContainer","determineKeylines","header","footer","components","HTMLElement","handleStackChange","_this$props2","DeprecatedBody","_components$Container","CustomBody","BodyComponent","Fragment","getScrollContainer","asArray","tabSort","tabDiff","indexDiff","filterNegative","keepGuards","dataset","focusGuard","FOCUS_GROUP","FOCUS_DISABLED","FOCUS_ALLOW","FOCUS_AUTO","queryTabbables","tabbables","queryGuardTabbables","parents","withGuards","getParents","getCommonParent","nodea","nodeb","parentsA","parentsB","currentParent","isVisible","computedStyle","getComputedStyle","getPropertyValue","notHiddenInput","topNodes","topNode","parentFocus","isRadio","checked","findSelectedRadio","currentNode","filterNested","_loop","contains","v","_ret","getTopParent","isGuard","notAGuard","baseActiveElement","leftEntry","rightEntries","activeElements","leftEntries","activeElement","topCommon","subEntry","lastNode","entries","commonParent","innerElements","dstNodes","autoFocusables","outerNodes","orderedInnerElements","dnode","innerNodes","newId","autoFocused","cnt","firstFocus","lastFocus","activeIndex","lastNodeInside","firstNodeIndex","lastNodeIndex","autofocus","focusInFrame","frame","search","guardCount","lockDisabled","setTimeout","contentWindow","deferAction","setImmediate","lastActiveTrap","lastActiveFocus","lastPortaledElement","focusWasOutsideWindow","defaultWhitelist","autoGuard","startIndex","step","allNodes","lastGuard","item","guard","focusAutoGuard","lockItem","extractRef","current","element","_lastActiveTrap","observed","persistentFocus","shards","workingNode","portaledElement","workingArea","whiteList","focusWhitelisted","blur","newActiveElement","focusedItem","removeAttribute","focusedIndex","onTrap","currentTarget","observerNode","onWindowBlur","attachHandler","detachHandler","reducePropsToState","handleStateChangeOnClient","mountedInstances","emitChange","SideEffect","peek","_proto","shouldComponentUpdate","getDisplayName","propsList","trap","lastTrap","sameTrap","onActivation","onDeactivation","hiddenGuard","top","left","propTypes","emptyArray","FocusLock","originalFocusedElement","returnFocus","_extends2","noFocusGuards","allowTextSelection","_this$props$shards","_this$props$as","_this$props$lockProps","lockProps","hasLeadingGuards","hasTailingGuards","setObserveNode","MoveFocusInside","moveFocus","FocusLockWrapper","isEnabled","elem","shouldReturnFocus","scrollBehavior","PositionComponent","getScrollDistance","pageYOffset","documentElement","Modal","dialogNode","isExiting","scrollTo","pageXOffset","shouldCloseOnOverlayClick","handleWindowScroll","onCloseComplete","onOpenComplete","isBackground","includes","handleOverlayClick","ModalWrapper","naturalStackIndex","onModalClosed","CANCEL_BUTTON_ID","OK_BUTTON_ID","StatelessDialog","_onDialogDismissed","_onKeyDown","_renderFooter","_setDialogElement","identity","titleString","i18n","onDialogDismissed","onKeyDown","propsFromModalFooter","buttons","_renderOKButton","_renderCancelButton","ButtonGroup","isModal","disableBlanketClickDismiss","hideCancelButton","cancelKey","submitDisabled","okKey","_dialogElement","defaultPrevented","translate","AbstractDialogContainer","_renderDialogContent","_component","_reducedUI","reducedUI","React","_componentProps","stateFeaturesBaseDialog","ModalTransition","DialogWithTabs","selectedTab","defaultTab","tabStates","tabs","tab","_onTabSelected","_onTabStateChange","closeDialog","cssClassName","_renderTabs","_getTabProps","tabId","tabConfiguration","currentTabState","propsUpdateFunction","_renderTab","Tabs","onSelect","content","TabComponent","mountCallback","onMount","onTabStateChange","submit","objectWithoutPropertiesLoose","excluded","sourceSymbolKeys","propertyIsEnumerable","timeoutPromise","timeoutID","clearTimeout","RETRY_TIMEOUT","doGetJSON","retry","fetchPromise","fetch","response","jsonify","json","ok","ScriptUtil","openURLInBrowser","APP_LINK_SCHEME","_ROOM_EXCLUDE_PATTERN","_URI_AUTHORITY_PATTERN","_URI_PATH_PATTERN","URI_PROTOCOL_PATTERN","_fixURIStringScheme","uri","protocol","startsWith","decodeURIComponent","normalize","getLocationContextRoot","contextRootEndIndex","lastIndexOf","_objectToURLParamsArray","parseStandardURIString","_standardURIToString","authority","userinfoEndIndex","portBeginIndex","port","hostname","hashBeginIndex","parseURIString","contextRoot","fixedRoom","_fixRoom","thiz","safeDecodeURIComponent","toURLString","URL","serverURL","scheme","domain","jwt","urlPrefix","urlParamsArray","urlParamsString","urlObjectToString","addHashParamsToURL","hashParamsToAdd","parseURLParams","SET_AUDIO_MUTED","SET_AUDIO_AVAILABLE","SET_CAMERA_FACING_MODE","SET_VIDEO_AVAILABLE","SET_VIDEO_MUTED","STORE_VIDEO_TRANSFORM","TOGGLE_CAMERA_FACING_MODE","CAMERA_FACING_MODE","ENVIRONMENT","USER","AUDIO","VIDEO","VIDEO_MUTISM_AUTHORITY","AUDIO_ONLY","BACKGROUND","VIDEO_TYPE","CAMERA","DESKTOP","setAudioAvailable","available","ensureTrack","setVideoAvailable","toggleCameraFacingMode","_isVideoMutedByAuthority","videoMutismAuthority","isVideoMutedByUser","shouldRenderVideoTrack","waitForVideoStarted","videoStarted","AbstractVideoTrack","_onVideoPlaying","stream","getOriginalStream","zoomEnabled","Video","mirror","onPlaying","onPress","zOrder","trackVideoStarted","VideoTrack","autoPlay","_noAutoPlayVideo","onVideoPlaying","noAutoPlayVideo","appState","_SET_APP_STATE_LISTENER","appStateListener","APP_STATE_CHANGED","_AUDIO_INITIAL_MEDIA_STATE","_VIDEO_INITIAL_MEDIA_STATE","facingMode","transforms","_clearAllVideoTransforms","cameraFacingMode","streamId","_storeVideoTransform","getStreamId","nextTransforms","_trackRemoved","mute","_appStateChanged","SET_AUDIO_ONLY","ensureVideoTrack","_setAudioOnly","roomIsValid","mutedSources","urlParams","setCameraFacingMode","supportsVideo","setAudioOnly","setTrackMuted","_syncTrackMutedState","SET_NO_SRC_DATA_NOTIFICATION_UID","TOGGLE_SCREENSHARING","TRACK_CREATE_CANCELED","TRACK_CREATE_ERROR","TRACK_NO_DATA_FROM_SOURCE","TRACK_WILL_CREATE","createLocalPresenterTrack","desktopHeight","cameraDeviceId","constraints","aspectRatio","ideal","createLocalTracks","devices","createLocalTracksF","firePermissionPromptIsShownEvent","micDeviceId","getUserSelectedCameraDeviceId","getUserSelectedMicDeviceId","desktopSharingFrameRate","firefox_fake_device","resolution","blurPromise","blurEnabled","getBlurEffect","screenshotCapturePromise","capturesEnabled","createScreenshotCaptureEffect","loadEffects","effectsArray","effects","effect","desktopSharingExtensionExternalInstallation","desktopSharingSourceDevice","desktopSharingSources","getLocalTrack","includePending","getLocalVideoType","getTrackByMediaTypeAndParticipant","getTrackByJitsiTrack","isLocalVideoTrackMuted","presenterTrack","isLocalTrackMuted","isRemoteTrackMuted","isUserInteractionRequiredForUnmute","interacted","isMuted","f","TRACK_IS_DISPOSED","createDesiredLocalTracks","desiredTypes","availableTypes","createTypes","createLocalTracksA","device","gumProcess","canceled","_disposeTracks","_trackCreateCanceled","_onCreateLocalTracksRejected","cancel","destroyLocalTracks","logError","_cancelGUMProcesses","_disposeAndRemoveTracks","showNoDataFromSourceVideoError","notificationInfo","isReceivingData","notificationAction","showErrorNotification","uid","trackNoDataFromSourceNotificationInfoChanged","toggleScreensharing","replaceLocalTrack","oldTrack","newTrack","replaceTrack","setMuted","isVideoTrack","getType","_addTracks","trackMutedChanged","TRACK_VIDEOTYPE_CHANGED","trackVideoTypeChanged","noDataFromSourceNotificationInfo","setNoSrcDataNotificationUid","NO_DATA_FROM_SOURCE","noDataFromSource","getParticipantId","_shouldMirror","gum","permissionDenied","trackType","getCameraFacingMode","_getLocalTrack","_removeNoDataFromSourceNotification","hideNotification","_setMuted","localTrack","isAudioOnly","_handleNoDataFromSourceErrors","_switchCamera","participantID","mutePresenter","setVideoMuteStatus","onPeerVideoTypeChanged","setAudioMuteStatus","withoutTrackStub","DEFAULT_OPTS","DEFAULT_RN_OPTS","disableCallerInfo","opts","_getLogger","once","setGlobalOptions","setGlobalLogOptions","LogTransport","joinLeaveNotificationsDisabled","showParticipantJoinedNotification","DISABLE_FOCUS_INDICATOR","MODERATOR","descriptionArguments","title","oldParticipant","oldRole","clearNotifications","notifications","_insertNotificationByPriority","notification","newNotificationPriority","NOTIFICATION_TYPE_PRIORITIES","insertAtLocation","queuedNotification","copyOfNotifications","CLEAR_NOTIFICATIONS","HIDE_NOTIFICATION","SET_NOTIFICATIONS_ENABLED","SHOW_NOTIFICATION","setTileView","SET_TILE_VIEW","toggleTileView","tileViewEnabled","TileViewButton","AbstractButton","IconTileView","_handleClick","_tileViewEnabled","_isToggled","ownProps","getFeatureFlag","TILE_VIEW_ENABLED","visible","getCurrentLayout","shouldDisplayTileView","LAYOUTS","TILE_VIEW","VERTICAL_FILMSTRIP","VERTICAL_FILMSTRIP_VIEW","HORIZONTAL_FILMSTRIP_VIEW","getTileViewGridDimensions","maxColumns","configuredMax","TILE_VIEW_MAX_COLUMNS","getMaxColumnCount","iAmRecorder","numberOfParticipants","columnsToMaintainASquare","sqrt","columns","rows","visibleRows","editing","filmStripOnly","isPinning","SET_DOCUMENT_EDITING_STATUS","toggleDocument","VideoLayout","mucJoined","addRemoteParticipantContainer","removeParticipantContainer","onParticipantConnectionStatusChanged","onDominantSpeakerChanged","onPinChange","SET_FILMSTRIP_VISIBLE","resizeVideoArea","onRemoteStreamAdded","onRemoteStreamRemoved","screenShares","PersistenceRegistry","SCREEN_SHARE_PARTICIPANTS_UPDATED","participantIds","_getAutoPinSetting","AUTO_PIN_LATEST_SCREEN_SHARE","_updateAutoPinnedParticipant","latestScreenshareParticipantId","displayTileView","selectParticipant","debounce","isFollowMeActive","oldScreenSharesOrder","knownSharingParticipantIds","newScreenSharesOrder","setParticipantsWithScreenShare","START_GAME","STOP_GAME","JOIN_GAME","TAKE_OVER","GIVE_CARDS","CHECK","CALL","RAISE","FOLD","SHOW_CARDS","THROW_AWAY_CARDS","COLLECT","NEW_STATE_RECEIVED","SEND_GAME_STATE","extendStatics","__extends","__","__assign","__rest","__makeTemplateObject","cooked","raw","NOTIFY_CAMERA_ERROR","NOTIFY_MIC_ERROR","SET_AUDIO_INPUT_DEVICE","SET_VIDEO_INPUT_DEVICE","UPDATE_DEVICE_LIST","ADD_PENDING_DEVICE_REQUEST","REMOVE_PENDING_DEVICE_REQUESTS","CHECK_AND_NOTIFY_FOR_NEW_DEVICE","areDeviceLabelsInitialized","_localTracksInitialized","availableDevices","getAudioOutputDeviceId","getAudioOutputDevice","getDeviceIdByLabel","kind","kindToSearch","audioinput","audiooutput","videoinput","deviceId","getDeviceLabelById","groupDevicesByKind","audioInput","audioOutput","videoInput","formatDeviceLabel","formattedLabel","ix","getAudioInputDeviceData","getAudioOutputDeviceData","getVideoDeviceIds","hasAvailableDevices","setAudioOutputDeviceId","userSelection","newLabel","setAudioOutputDevice","newSettings","audioOutputDeviceId","userSelectedAudioOutputDeviceId","userSelectedAudioOutputDeviceLabel","updateSettings","DEVICE_TYPE_TO_SETTINGS_KEYS","currentDeviceId","userSelectedDeviceId","userSelectedDeviceLabel","addPendingDeviceRequest","request","configureInitialDevices","deviceLabels","getDevicesFromURL","updateSettingsPromise","getAvailableDevices","responseCallback","settingsTranslationMap","getUserSelectedOutputDeviceId","ex","isDeviceListAvailable","isDeviceChangeAvailable","enumerateDevices","updateDeviceList","notifyCameraError","notifyMicError","setAudioInputDevice","setAudioInputDeviceAndUpdateSettings","deviceLabel","userSelectedMicDeviceId","userSelectedMicDeviceLabel","setVideoInputDevice","setVideoInputDeviceAndUpdateSettings","userSelectedCameraDeviceId","userSelectedCameraDeviceLabel","checkAndNotifyForNewDevice","newDevices","oldDevices","JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP","microphone","CONSTRAINT_FAILED","GENERAL","NOT_FOUND","PERMISSION_DENIED","UNSUPPORTED_RESOLUTION","_useDevice","pendingRequests","processExternalDeviceRequest","removePendingDeviceRequests","cameraJitsiTrackErrorMsg","cameraErrorMsg","additionalCameraErrorMsg","showWarningNotification","description","micJitsiTrackErrorMsg","micErrorMsg","additionalMicErrorMsg","isPrejoinPageVisible","replaceAudioTrackById","AUDIO_DEVICE_CHANGED","replaceVideoTrackById","VIDEO_DEVICE_CHANGED","devicesGroupBy","nDevice","accumulated","groupId","devicesArray","newDevice","customActionNameKey","customActionHandler","_checkAndNotifyForNewDevice","deviceList","devicesToStr","list","audioInputs","audioOutputs","videoInputs","logDeviceList","EMAIL_CHANGED","AUDIO_MUTED","VIDEO_MUTED","ETHERPAD_CLICKED","SHARED_VIDEO_CLICKED","UPDATE_SHARED_VIDEO","TOGGLE_FULLSCREEN","FULLSCREEN_TOGGLED","AUTH_CLICKED","TOGGLE_AUDIO_ONLY","TOGGLE_FILMSTRIP","HANGUP","LOGOUT","LOCAL_FLIPX_CHANGED","EXTERNAL_INSTALLATION_CANCELED","SIDE_TOOLBAR_CONTAINER_TOGGLED","LOCAL_RAISE_HAND_CHANGED","LARGE_VIDEO_AVATAR_VISIBLE","LARGE_VIDEO_ID_CHANGED","BaseApp","route","_init","_initStorage","_createStore","app","appWillMount","jitsiLocalStorage","getItem","_createMainElement","_createExtraElement","_renderDialogContainer","devToolsExtension","Thunk","compose","createStore","getPersistedState","_navigate","location","getAppProp","SETTINGS_UPDATED","DEFAULT_SERVER_URL","sources","CONFIG_WHITELIST","getServerURL","_getUserSelectedDeviceId","matchRegex","replacement","candidate","strippedDeviceLabel","foundMatchBasedOnLabel","strippedCandidateLabel","getCurrentCameraDeviceId","getCurrentMicDeviceId","getCurrentOutputDeviceId","_mapSettingsFieldToParticipant","settingsField","disableCallIntegration","_initializeCallIntegration","startAudioOnly","_maybeSetAudioOnly","newLocalParticipant","_updateLocalParticipant","urlEmail","urlDisplayName","_updateLocalParticipantFromUrl","disableCrashReporting","disableP2P","localFlipX","startWithAudioMuted","startWithVideoMuted","filterSubtree","featureState","savedDisplayName","savedEmail","randomHexString","assignIfDefined","isReactNative","legacyProfile","persistedProfile","profile","_getLegacyProfile","_initSettings","AbstractToolboxItem","_onClick","_maybeTranslateAttribute","accessibilityLabel","_renderItem","showLabel","tooltipPosition","ToolboxItem","elementAfter","elementType","useTooltip","_renderIcon","Tooltip","toggled","iconComponent","_getElementAfter","_getIcon","toggledIcon","_getLabel","toggledLabel","_getStyles","disabledStyles","toggledStyles","buttonStyles","_isDisabled","iconStyle","combineStyles","labelStyle","underlayColor","_getTooltip","afterClick","AbstractAudioMuteButton","IconMicrophone","IconMicDisabled","_setAudioMuted","_isAudioMuted","AbstractHangupButton","IconHangup","_doHangup","AbstractVideoMuteButton","IconCamera","IconCameraDisabled","_setVideoMuted","_isVideoMuted","BetaTag","OverflowMenuItem","iconId","aria-label","_renderText","textElement","ToolboxButtonWithIcon","isHovered","_onMouseEnter","_onMouseLeave","iconDisabled","onIconClick","iconProps","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","__filename","remoteVideos","largeVideo","localVideoThumbnail","eventEmitter","onLocalFlipXChanged","onLocalFlipXChange","getAllThumbnails","emitter","LocalVideo","_updateLargeVideoIfDisplayed","registerListeners","_resetLargeVideo","_resetFilmstrip","initLargeVideo","LargeVideoManager","updateContainerSize","setAudioLevel","lvl","smallVideo","getSmallVideo","updateAudioLevelIndicator","updateLargeVideoAudioLevel","changeLocalVideo","localId","getLocalParticipantFromStore","onVideoTypeChanged","changeVideo","updateIndicators","setLocalVideoVisible","setVisible","remoteVideo","addRemoteStreamElement","onAudioMute","onVideoMute","removeRemoteStreamElement","updateMutedForNoTracks","getTracksByMediaType","getRemoteVideoType","SHARED_VIDEO_CONTAINER_TYPE","isPinned","getPinnedId","togglePin","videoNumber","videoView","pinnedParticipantID","thumbnail","addRemoteVideoContainer","PokerTableThumb","sharedVideoThumb","SharedVideoThumb","jitsiParticipant","RemoteVideo","_setRemoteControlProperties","updateView","remoteVideoActive","videoElement","resourceJid","$","show","isLocalId","showAudioIndicator","updateRemoteVideoMenu","setVideoMutedView","onDisplayNameChanged","updateDisplayName","showDominantSpeakerIndicator","onLastNEndpointsChanged","endpointsLeavingLastN","endpointsEnteringLastN","_updateRemoteVideo","hideStats","removeConnectionIndicator","newVideoType","resize","changeUserAvatar","avatarUrl","initializeAvatar","isCurrentlyOnLarge","updateAvatar","isLargeVideoVisible","isLargeContainerTypeVisible","VIDEO_CONTAINER_TYPE","getCurrentlyOnLargeContainer","getCurrentContainer","updateAllVideos","displayedUserId","getLargeVideoID","updateLargeVideo","forceUpdate","currentContainer","currentContainerType","getCurrentContainerType","isOnLarge","videoStream","isVideoContainer","getStreamID","addLargeVideoContainer","addContainer","removeLargeVideoContainer","removeContainer","showLargeVideoContainer","oldSmallVideo","containerTypeToShow","pinnedId","showContainer","getLargeVideo","setLocalFlipX","onUserFeaturesChanged","remoteControl","checkUserRemoteControlSupport","setRemoteControlSupport","getJid","getLargeVideoWrapper","$wrapper","getRemoteVideosCount","setRemoteControlActiveStatus","setLocalRemoteControlActiveChanged","refreshLayout","updateDOMLocation","rerender","remoteVideoThumbnail","destroy","remoteVideoId","force","onResize","LARGE_ARRAY_SIZE","CORE_ERROR_TEXT","FUNC_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","PLACEHOLDER","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","WRAP_BIND_FLAG","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","WRAP_FLIP_FLAG","DEFAULT_TRUNC_LENGTH","DEFAULT_TRUNC_OMISSION","HOT_COUNT","HOT_SPAN","LAZY_FILTER_FLAG","LAZY_MAP_FLAG","INFINITY","MAX_SAFE_INTEGER","MAX_INTEGER","NAN","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","HALF_MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","asyncTag","boolTag","dateTag","domExcTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","weakSetTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","freeSelf","root","freeExports","nodeType","freeModule","moduleExports","freeProcess","nodeUtil","types","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseUnary","baseValues","cacheHas","has","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","overArg","replaceHolders","setToArray","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Uint8Array","allocUnsafe","getPrototype","objectCreate","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","random","nativeReverse","reverse","DataView","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","clear","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","skip","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","pop","getMapData","pairs","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","maxLength","Infinity","seen","baseInvoke","last","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","baseIsNative","baseIteratee","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","baseWhile","isDrop","baseWrapperValue","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","copy","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","isIterateeCall","iterable","createCaseFirst","methodName","trailing","createCompounder","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","arrLength","oldArray","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrValue","otherFunc","getValue","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","ctorString","isMaskable","stubFalse","otherArgs","shortOut","reference","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","findIndex","findLastIndex","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","before","bindKey","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","resolver","memoized","Cache","negate","overArgs","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isString","lt","lte","iteratorToArray","remainder","toLength","isBinary","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","merge","omit","basePick","toPairs","toPairsIn","camelCase","word","capitalize","upperFirst","kebabCase","lowerFirst","snakeCase","startCase","upperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","dividend","multiplier","multiplicand","minuend","after","castArray","compact","cond","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","reduceRight","repeat","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sum","sumBy","template","isEscaping","isEvaluating","imports","importsKeys","importsValues","reDelimiters","evaluate","sourceURL","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","truncate","omission","newEnd","unescape","uniqueId","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","_ADD_AUDIO_ELEMENT","_REMOVE_AUDIO_ELEMENT","PLAY_SOUND","REGISTER_SOUND","STOP_SOUND","UNREGISTER_SOUND","soundId","soundName","stopSound","SoundCollection","sounds","sound","_sounds","Audio","setRef","_setRef","loop","_addAudioElement","_removeAudioElement","audioElement","play","_playSound","_stopSound","isAddAction","_addOrRemoveAudioElement","_registerSound","delete","_unregisterSound","DISCO_REMOTE_CONTROL_FEATURE","EVENTS","mousemove","mousedown","mouseup","mousedblclick","mousescroll","keydown","keyup","permissions","supported","REQUESTS","PERMISSIONS_ACTIONS","grant","deny","REMOTE_CONTROL_MESSAGE_NAME","CLEAR_TOOLBOX_TIMEOUT","FULL_SCREEN_CHANGED","SET_FULL_SCREEN","SET_OVERFLOW_MENU_VISIBLE","SET_TOOLBAR_HOVERED","SET_TOOLBOX_ALWAYS_VISIBLE","SET_TOOLBOX_ENABLED","SET_TOOLBOX_TIMEOUT","SET_TOOLBOX_TIMEOUT_MS","SET_TOOLBOX_VISIBLE","TOGGLE_TOOLBOX_VISIBLE","clearToolboxTimeout","setToolbarHovered","hovered","setToolboxAlwaysVisible","alwaysVisible","setToolboxEnabled","setToolboxTimeout","timeoutMS","setToolboxVisible","dockToolbox","dock","showToolbox","hideToolbox","fullScreenChanged","fullScreen","calleeInfoVisible","setToolboxTimeoutMS","TOOLBAR_TIMEOUT","AudioMuteButton","_onKeyboardShortcut","keyboardshortcut","registerShortcut","unregisterShortcut","_audioMuted","AUDIO_MUTE","enable","muteLocal","_disabled","isPrejoinAudioMuted","startSilent","isAudioDisabled","getToolboxHeight","toolbox","getElementById","isButtonEnabled","TOOLBAR_BUTTONS","isToolboxVisible","iAmSipGateway","audioSettingsVisible","videoSettingsVisible","isAudioSettingsButtonDisabled","devicesMissing","isVideoSettingsButtonDisabled","isPrejoinVideoDisabled","AudioSettingsButton","hasPermissions","isDevicePermissionGranted","_updatePermissions","permissionPromptVisibility","onAudioOptionsClick","settingsDisabled","IconArrowDown","toggleAudioSettings","getMediaPermissionPromptVisibility","VideoMuteButton","_videoDisabled","_videoMuted","VIDEO_MUTE","_audioOnly","_videoMediaType","isPrejoinVideoMuted","VideoSettingsButton","onVideoOptionsClick","toggleVideoSettings","AbstractToolbarButton","_renderButton","ToolbarButton","DownloadButton","IconDownload","_downloadAppsUrl","downloadAppsUrl","deploymentUrls","HangupButton","_hangup","appNavigate","disconnect","HelpButton","IconHelp","_userDocumentationURL","userDocumentationURL","OverflowMenuButton","_onCloseDialog","_onToggleDialogVisibility","IconMenuThumb","onVisibilityChange","OverflowMenuProfileItem","_localParticipant","_unclickable","classNames","DEFAULT_LOCAL_DISPLAY_NAME","isGuest","SETTINGS_SECTIONS","MuteEveryoneButton","IconMuteEveryone","MuteEveryoneDialog","exclude","isModerator","disableRemoteMute","visibleButtons","Toolbox","_onMouseOut","_onMouseOver","_onResize","_onSetOverflowVisible","_onShortcutToggleChat","_onShortcutPoker","_onShortcutToggleFullScreen","_onShortcutToggleRaiseHand","_onShortcutToggleScreenshare","_onShortcutToggleVideoQuality","_onToolbarOpenFeedback","_onToolbarOpenInvite","_onToolbarOpenKeyboardShortcuts","_onToolbarOpenSpeakerStats","_onToolbarOpenVideoQuality","_onToolbarToggleChat","_onToolbarPoker","_onToolbarToggleFullScreen","_onToolbarToggleProfile","_onToolbarToggleRaiseHand","_onToolbarToggleScreenshare","_onToolbarToggleSharedVideo","_onToolbarOpenLocalRecordingInfoDialog","_onShortcutToggleTileView","windowWidth","innerWidth","_shouldShowButton","character","helpDescription","_pokerAction","_overflowMenuVisible","_visible","_dialog","letter","_visibleButtons","rootClassNames","onMouseOut","onMouseOver","_renderToolboxContent","_doOpenFeedback","_conference","openFeedbackDialog","_doOpenKeyboardShorcuts","openKeyboardShortcutsDialog","_doOpenSpeakerStats","SpeakerStats","_doOpenVideoQuality","VideoQualityDialog","_doToggleChat","toggleChat","_doPoker","_doToggleFullScreen","_fullScreen","setFullScreen","_doToggleProfile","openSettingsDialog","SETTINGS_TABS","PROFILE","_doToggleRaiseHand","_localParticipantID","_raisedHand","_doToggleScreenshare","_desktopSharingEnabled","_doToggleSharedVideo","toggleSharedVideo","_doToggleVideoQuality","_doToggleTileView","setOverflowMenuVisible","_chatOpen","_screensharing","beginAddPeople","_sharingVideo","LocalRecordingInfoDialog","_isDesktopSharingButtonVisible","_desktopSharingDisabledTooltipKey","_renderDesktopSharingButton","isInOverflowMenu","IconShareDesktop","_isProfileVisible","_isGuest","_renderOverflowMenuContent","_feedbackConfigured","IconExitFullScreen","IconFullScreen","IconShareVideo","IconPresentation","IconFeedback","IconOpenInNew","_renderMovedButtons","movedButtons","IconRaisedHand","IconChat","_nameToDisplay","IconPoker","IconInvite","IconRec","_renderAudioButton","_renderVideoButton","_hideInviteButton","overflowMenuContent","overflowHasItems","buttonsLeft","buttonsRight","maxNumberOfButtonsPerGroup","unshift","numberOfButtons","callStatsID","enableFeaturesBasedOnToken","sharedVideoStatus","overflowMenuVisible","localRecordingStates","localVideo","addPeopleEnabled","isAddPeopleEnabled","dialOutEnabled","isDialOutEnabled","desktopSharingDisabledTooltipKey","getParticipants","_localRecState","toolboxAction","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","_setFullScreen","INITIAL_TOOLBAR_TIMEOUT","TOOLBAR_ALWAYS_VISIBLE","_getInitialState","connectionEstablished","timeEstablished","connectionFailed","credentials","setLocationURL","notifyConferenceLeft","requestFeedback","hangup","getCurrentConferenceUrl","currentUrl","stateOrGetState","isInviteURLReady","getInviteURL","getURLWithoutParams","getURLWithoutParamsNormalized","urlWithoutParams","toJid","authdomain","_getCurrentConnection","baseConnectionState","connecting","CONNECTION_DISCONNECTED","_connectionDisconnected","connection_","_connectionWillConnect","_setLocationURL","DummyLocalStorage","setItem","removeItem","storage","localStorage","keyName","keyValue","idLoggers","loggers","curLevel","levels","TRACE","transport","transports","level","setLevel","themeNamespace","compactSmallFontSize","compactLineHeight","defaultTheme","afterItemSpacing","beforeItemSpacing","bottom","right","secondaryText","dragging","isValidCssValue","getThemeStyle","maybeTheme","parentKey","themeWithKeys","ADD_PREJOIN_VIDEO_TRACK","ADD_PREJOIN_AUDIO_TRACK","ADD_PREJOIN_CONTENT_SHARING_TRACK","PREJOIN_START_CONFERENCE","SET_DEVICE_STATUS","SET_JOIN_BY_PHONE_DIALOG_VISIBLITY","SET_PREJOIN_AUDIO_DISABLED","SET_PREJOIN_AUDIO_MUTED","SET_PREJOIN_DEVICE_ERRORS","SET_PREJOIN_NAME","SET_PREJOIN_PAGE_VISIBILITY","SET_PREJOIN_VIDEO_DISABLED","SET_PREJOIN_VIDEO_MUTED","superPropBase","_get","receiver","Reflect","desc","ManagerContext","getReferenceRef","referenceNode","Manager","unwrapArray","safeInvoke","initialStyle","pointerEvents","initialArrowStyle","InnerPopper","placement","popperNode","arrowNode","setPopperNode","popperInstance","updatePopperInstance","setArrowNode","updateStateModifier","scheduleUpdate","getOptions","eventsEnabled","positionFixed","modifiers","arrow","applyStyle","getPopperStyle","offsets","popper","getPopperPlacement","getArrowStyle","arrowStyles","getOutOfBoundariesState","hide","destroyPopperInstance","referenceElement","outOfBoundaries","arrowProps","placements","Popper","InnerReference","refHandler","Reference","applyMuteOptionsToTrack","shouldMute","unmute","areJoinByPhoneButtonsVisible","buttonsVisible","isDeviceStatusVisible","getActiveVideoTrack","getVideoTrack","getContentSharingTrack","getAllPrejoinConfiguredTracks","getAudioTrack","csTrack","contentSharingTrack","getDeviceStatusText","deviceStatusText","getDeviceStatusType","deviceStatusType","getPrejoinName","getRawError","rawError","audioDisabled","videoDisabled","isJoinByPhoneDialogVisible","showJoinByPhoneDialog","isPrejoinPageEnabled","prejoinPageEnabled","showPrejoin","preloadImage","isIconUrl","image","onload","AVATAR_QUEUE","AVATAR_CHECKED_URLS","AVATAR_CHECKER_FUNCTIONS","JIGASI_PARTICIPANT_ICON","getGravatarURL","createDeferred","fullPromise","finalUrl","_getFirstLoadableAvatarUrl","_getAllParticipants","MAX_DISPLAY_NAME_LENGTH","getParticipantCountWithFake","DEFAULT_REMOTE_DISPLAY_NAME","getParticipantPresenceStatus","isLocalParticipantModerator","ignoreToken","enableUserRolesBasedOnToken","SET_GOOGLE_API_STATE","SET_GOOGLE_API_PROFILE","DISCOVERY_DOCS","GOOGLE_API_STATES","NEEDS_LOADING","LOADED","SIGNED_IN","NOT_AVAILABLE","googleClientLoadPromise","googleApi","globalGoogleApi","_getGoogleApiClient","getCurrentUserProfile","isSignedIn","auth2","getAuthInstance","currentUser","getBasicProfile","initializeClient","clientId","enableYoutube","enableCalendar","api","scope","client","discoveryDocs","scriptTag","requestAvailableYouTubeBroadcasts","requestLiveStreamsForYouTubeBroadcast","boundStreamID","showAccountSelection","signIn","signInIfNotSignedIn","signOut","_convertCalendarEntry","calendarId","endDate","dateTime","startDate","summary","_getConferenceDataVideoUri","conferenceData","parameters","addOnParameters","conferenceSolutionType","videoEntry","entryPoints","entryPointType","_getCalendarEntries","fetchStartDays","fetchEndDays","calendarList","items","en","accessRole","setDate","resultItem","results","_updateCalendarEntry","newDescription","patch","gapi","getCalendarEntries","loadGoogleAPI","liveStreamingEnabled","enableCalendarIntegration","googleApiApplicationClientID","googleAPIState","setGoogleAPIState","broadcasts","parsedBroadcasts","contentDetails","boundStreamId","lifeCycleStatus","snippet","streamKey","cdn","ingestionInfo","streamName","selectedBoundStreamID","googleResponse","updateProfile","profileEmail","getEmail","updateCalendarEvent","getShareInfoText","AbstractGoogleSignInButton","signedIn","CARD_TURN_SOUND_ID","GAME_STATE_CHANGED_EVENT","REQUEST_GAME_STATE_EVENT","SUITS","club","diamond","heart","spade","SYMBOLS","_2","_3","_4","_5","_6","_7","_8","_9","_10","jack","queen","king","ace","uuid","v4","ticks","startAmount","dealer","blind","big","pot","bet","raiseAmount","winners","win","raisePlayer","table","lastModifiedBy","CONFIG_WILL_LOAD","LOAD_CONFIG_ERROR","_UPDATE_CONFIG","_CONFIG_STORE_PREFIX","createFakeConfig","baseURL","hosts","muc","bosh","clientNode","_getWhitelistedJSON","configName","configJSON","INTERFACE_CONFIG_WHITELIST","restoreConfig","setConfigFromURLParams","param","configObj","overrideConfigJSON","configWillLoad","loadConfigError","setConfig","storeConfig","addKnownDomains","knownDomains","INITIAL_NON_RN_STATE","INITIAL_RN_STATE","disableAudioLevels","disableH264","preferH264","remoteVideoMenu","_updateConfig","oldConfigToNewConfig","section","oldKey","newKey","_translateLegacyConfig","ColorPalette","appBackground","black","blackBlue","blueHighlight","buttonUnderlay","darkGrey","lightGrey","overflowMenuItemUnderlay","transparent","white","HEX_LONG_COLOR_FORMAT","HEX_SHORT_COLOR_FORMAT","RGB_COLOR_FORMAT","st","flatStyle","styleElement","getRGBAFormat","_getAlphaInHex","Number","getFixedPlatformStyle","_style","classNameByType","secondary","ActionButton","ownClassName","cls","COPY_TIMEOUT","CopyMeetingUrl","textarea","createRef","showCopyLink","showLinkCopied","_copyUrl","_hideCopyLink","_hideLinkCopied","_showCopyLink","_showLinkCopied","select","execCommand","IconCheck","IconCopy","iconCls","readOnly","iconMap","IconExclamation","ParticipantName","_onNameChange","setName","isEditable","onChange","showCameraPreview","Prejoin","_showDialog","setJoinByPhoneDialogVisiblity","deviceStatusVisible","isAnonymousUser","joinConference","joinConferenceWithoutAudio","showJoinByPhoneButtons","joinConferenceWithoutAudioAction","joinConferenceAction","setJoinByPhoneDialogVisiblityAction","setPrejoinName","getRoomName","showDialog","getDeviceId","_syncParticipantName","prejoinStart","setPrejoinAudioMuted","setPrejoinVideoMuted","audioOnlyError","videoOnlyError","audioAndVideoError","getStatusFromErrors","TILE_ASPECT_RATIO","isFilmstripVisible","calculateThumbnailSizeForHorizontalView","FILM_STRIP_MAX_HEIGHT","LOCAL_THUMBNAIL_RATIO","remote","REMOTE_THUMBNAIL_RATIO","getVerticalFilmstripVisibleAreaWidth","filmstripMaxWidth","setFilmstripEnabled","SET_FILMSTRIP_ENABLED","setFilmstripVisible","TILE_VIEW_SIDE_MARGINS","setTileViewDimensions","dimensions","windowSize","thumbnailSize","clientWidth","viewHeight","aspectRatioHeight","calculateThumbnailSizeForTileView","filmstripWidth","SET_TILE_VIEW_DIMENSIONS","gridDimensions","setHorizontalViewDimensions","SET_HORIZONTAL_VIEW_DIMENSIONS","AudioMutedIndicator","iconSize","tooltipKey","DominantSpeakerIndicator","IconDominantSpeaker","iconClassName","Toolbar","GenericAction","_onAction","giveCards","check","showCards","throwAwayCards","collect","takeOver","joinGame","startGame","RaiseAction","amount","_minAmount","_onChange","raise","_maxAmount","commonState","ControlPanel","_actions","_currentLayout","_dealer","_amount","_bet","_playerState","_playerStateI18nParams","_action","_cards","_symbolClasses","_suite","suit","_nick","pokerActionTypes","playerState","playerStateI18nParams","Filmstrip","_notifyOfHoveredStateUpdate","_isHovered","_onShortcutToggleFilmstrip","_onToolbarToggleFilmstrip","_filmstripOnly","filmstripStyle","filmstripRemoteVideosContainerStyle","remoteVideoContainerClassName","_columns","_rows","_filmstripWidth","remoteVideosWrapperClassName","_hideScrollbar","toolbar","_hideToolbar","_renderToggleButton","_className","_localParticipantId","_videosClassName","_doToggleFilmstrip","_hovered","SET_FILMSTRIP_HOVERED","IconMenuDown","IconMenuUp","isFilmstripOnly","reduceHeight","participantCount","disable1On1Mode","shouldRemoteVideosBeVisible","videosClassName","tileViewDimensions","ModeratorIndicator","IconModerator","AbstractRaisedHandIndicator","_renderIndicator","VideoMutedIndicator","StatusIndicators","_showModeratorIndicator","showAudioMutedIndicator","showVideoMutedIndicator","horizontalViewDimensions","oldGridDimensions","layout","resizeThumbnailsForVerticalView","oldParticipantId","newThumbnail","oldThumbnail","CLIENT_RESIZED","qualityLevel","getNearestReceiverVideoQualityLevel","resizeThumbnailsForTileView","resizeThumbnailsForHorizontalView","POKER_ACTIONS","getNick","pokerState","stopGame","localNick","flippedOnly","flipped","setDominantSpeaker","performance","activeNicks","indexCurrent","cue","getFontPercentage","getDefaultURL","APP_NAME","defaultLocation","loadConfig","redirectToStaticPage","windowLocation","newPathname","reloadNow","setFatalError","newURL","addTrackStateToURL","reloadWithStoredParams","isVideoMuted","isAudioMuted","oldSearchString","reload","maybeRedirectToWelcomePage","enableClosePage","sessionStorage","SHOW_PROMOTIONAL_CLOSE_PAGE","feedbackSubmitted","showThankYou","appName","enableWelcomePage","newLocationURL","redirectWithStoredParams","emptyObject","DONT_SHOW_AGAIN_CHECKED","ChromeExtensionBanner","PureComponent","dontShowAgainChecked","closePressed","shouldShow","_onClosePressed","_onInstallExtensionClick","_shouldNotRender","_onDontShowAgainChange","_isSupportedEnvironment","prevBannerCfg","chromeExtensionsInfo","hasExtensions","SHOW_CHROME_EXTENSION_BANNER","dontShowAgain","mainClassNames","IconClose","USER_INTERACTION_RECEIVED","userInteractionListener","_onUserInteractionReceived","isTrusted","_stopListeningForUserInteraction","_startListeningForUserInteraction","notifyAvatarChanged","getBaseUrl","notifyOnPasswordRequired","notifyConferenceJoined","formattedDisplayName","appendSuffix","notifyDominantSpeakerChanged","notifyKickedOut","notifyOnCameraError","notifyOnMicError","notifyUserLeft","notifyUserJoined","PARTICIPANT_ROLE_CHANGED","notifyUserRoleChanged","notifyFilmstripDisplayChanged","SUBMIT_FEEDBACK_ERROR","notifyFeedbackSubmitted","SUBMIT_FEEDBACK_SUCCESS","notifyTileViewChanged","notifyDisplayNameChanged","notifyOnStageParticipantChanged","SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID","setNoAudioSignalNotificationUid","DialInLink","_room","_locationURL","_dialIn","shouldDisplayDialIn","getDialInfoPageURL","rel","NO_AUDIO_SIGNAL_SOUND_ID","AUDIO_INPUT_STATE_CHANGE","hasAudioInput","noAudioSignalNotificationUid","NO_AUDIO_INPUT","noSrcDataNotificationUid","activeDevice","getActiveAudioDevice","_handleNoAudioSignalNotification","SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID","setNoisyAudioInputNotificationUid","noisyAudioInputNotificationUid","isAudioTrack","NOISY_MIC","SET_CURRENT_NOTIFICATION_UID","setCurrentNotificationUid","currentNotificationUid","TALK_WHILE_MUTED","OldElectronAPPNotificationDescription","isElectron","userAgent","majorVersion","isOldJitsiMeetElectronApp","sendMessage","_requestGamesState","newStateReceived","sendGameState","_registerGameUpdateListener","canGiveCards","isDealer","cardsMissing","canCheck","_isCurrentPlayer","canCall","canRaise","canFold","canShowCards","canThrowAwayCards","isWinner","isLastPlayer","hasHiddenCards","canCollect","hands","playerCards","_toPokerSolverSymbol","_toPokerSolverSuite","_toPokerSolverCard","solvedCards","Hand","solve","_hands","winningHands","nickWithHands","updateGame","updateActions","nextBettingRound","giveCardsTo","showdown","newRound","_payBlind","payBlinds","nextIndex","nextPlayer","nextIsRaisePlayer","allCalled","betToPot","calculatePot","tryFinishBettingRound","setCurrentAsDominantSpeaker","potForEach","tryFinishRound","chooseDealer","toBet","tryFinishShowdown","winner","amountToPay","modifiedState","missingCards","checkSeatControl","SELECT_LARGE_VIDEO_PARTICIPANT","filmStripEnabled","lastN","channelLastN","largeVideoParticipantId","largeVideoParticipant","getLastN","setLastN","_updateLastN","recentList","newMostRecent","prevMostRecent","AbstractApp","_openURL","_getDefaultURL","previousUrl","previousTimestamp","currentTimestamp","App","DEFAULT_OPTIMAL_BROWSERS","DEFAULT_UNSUPPORTED_BROWSERS","browserNameToCheck","chrome","chromium","isChromiumBased","electron","firefox","isFirefox","nwjs","isNWJS","opera","isOpera","safari","isSafari","isSupportedBrowser","_isCurrentBrowserInList","UNSUPPORTED_BROWSERS","isWebRtcSupported","browserName","checkFunction","maybeShowSuboptimalExperienceNotification","OPTIMAL_BROWSERS","translateToHTML","shouldDisplayNotifications","isAnyOverlayVisible","getOverlayToRender","areThereNotifications","_TRANSCRIBER_JOINED","_TRANSCRIBER_LEFT","_POTENTIAL_TRANSCRIBER_JOINED","SET_PENDING_TRANSCRIBING_NOTIFICATION_UID","transcriberJoined","transcriberJID","setPendingTranscribingNotificationUid","TranscribingLabel","_showLabel","isTranscribing","potentialTranscriberJIDs","potentialTranscriberJoined","transcriberLeft","pendingNotificationUid","isDialing","isTerminating","AbstractLabels","_renderE2EELabel","_renderLocalRecordingLabel","_renderRecordingLabel","_renderTranscribingLabel","_renderVideoQualityLabel","_filmstripVisible","_showVideoQualityLabel","filmstripBecomingVisible","FILE","STREAM","Notice","_message","noticeMessage","ConferenceTimer","timerValue","_startTimer","_stopTimer","_startTimestamp","renderConferenceTimer","_setStateFromUTC","refValueUTC","currentValueUTC","timerMsValue","localizedTime","_interval","setInterval","clearInterval","getConferenceTimestamp","ParticipantsCount","Subject","_showParticipantCount","_subject","getConferenceName","AbstractConference","renderNotificationsContainer","_notificationsVisible","NotificationsContainer","FULL_SCREEN_EVENTS","LAYOUT_CLASSNAMES","reactReduxConnect","_shouldDisplayTileView","abstractMapStateToProps","_iAmRecorder","_layoutClassName","_roomName","getConferenceNameForTitle","_showPrejoin","_originalOnShowToolbar","_onShowToolbar","_onFullScreenChange","_start","unbindEvents","isJoined","VIDEO_QUALITY_LABEL_DISABLED","filmstripOnly","hideVideoQualityLabel","onMouseMove","isFullScreen","bindEvents","SET_REDUCED_UI","LOW","NOTIFICATION_TYPE","ERROR","hideErrorSupportLink","prevConference","FeedbackDialog","setActiveModalId","OPEN_DESKTOP_APP","OPEN_WEB_APP","_TNS","DeepLinkingDesktopPage","_onLaunchWeb","_onTryAgain","NATIVE_APP_NAME","SHOW_DEEP_LINKING_IMAGE","rightColumnStyle","_SNS","_URLS","android","MOBILE_DOWNLOAD_LINK_ANDROID","ios","MOBILE_DOWNLOAD_LINK_IOS","DeepLinkingMobilePage","_onDownloadApp","_onOpenApp","downloadButtonClassName","onOpenLinkProperties","Platform","OS","_generateDownloadURL","generateDeepLinkingURL","clickableNumbers","APN","APP_CODE","IBI","ISI","MOBILE_DYNAMIC_LINK","IUS","APP_SCHEME","NoMobileApp","_openDesktopApp","appScheme","ANDROID_APP_PACKAGE","openDesktopApp","launchInWeb","CHROME","FIREFOX","UnsupportedDesktopBrowser","_showFirefox","AbstractRecentList","AbstractPage","_onPress","_getRenderListEmptyComponent","emptyListContainer","emptyListText","isRecentListEnabled","RECENT_LIST_ENABLED","_recentList","toDisplayableList","hideURL","listEmptyComponent","meetings","DELETE_RECENT_LIST_ENTRY","_STORE_CURRENT_CONFERENCE","_UPDATE_CONFERENCE_DURATION","doNotStoreRoom","_updateConferenceDuration","_conferenceWillLeave","_storeCurrentConference","LEGACY_STORAGE_KEY","MAX_LIST_SIZE","_urlStringEquals","_getLegacyRecentRoomList","entryId","_deleteRecentListEntry","mostRecentIndex","mostRecent","nextMostRecent","conferenceDuration","AbstractWelcomePage","animateTimeoutId","generatedRoomname","roomPlaceholder","updateTimeoutId","_animateRoomnameChanging","_onJoin","_onRoomChange","_updateRoomname","_clearTimeouts","isGenerated","onAppNavigateSettled","generateRoomWithoutSeparator","Tab","_onSelect","ROOM_NAME_VALIDATE_PATTERN_STR","WINDOW_WIDTH_THRESHOLD","WelcomePage","generateRoomnames","GENERATE_ROOMNAMES_ON_WELCOME_PAGE","_additionalContentRef","_roomInputRef","_additionalToolbarContentRef","_additionalContentTemplate","_additionalToolbarContentTemplate","_onFormSubmit","_setAdditionalContentRef","_setRoomInputRef","_setAdditionalToolbarContentRef","classList","_shouldShowAdditionalContent","cloneNode","_shouldShowAdditionalToolbarContent","showAdditionalContent","showAdditionalToolbarContent","showResponsiveText","_shouldShowResponsiveText","CALENDAR","reportValidity","_calendarEnabled","_recentListEnabled","DISPLAY_WELCOME_PAGE_CONTENT","DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT","isCalendarEnabled","_settings","_getRouteToRender","_getEmptyRoute","Conference","WELCOME_PAGE_ENABLED","BlankPage","_getMobileRoute","disableDeepLinking","mobileAppPromo","MOBILE_APP_PROMO","getDeepLinkingPage","deepLinkComponent","_getWebConferenceRoute","_getWebWelcomePageRoute","defaultPage","pageIndex","history","replaceState","shard_changed","_immediateReloadThreshold","timeSinceConnectionEstablished","reloadThreshold","isWithinSplitBrainThreshold","splitBrain","_isMaybeSplitBrainError","conferenceLocalTracks","addTrack","_reportError","getBotType","getStatus","getRole","callee","callDisplayName","safeStartCase","availableHeight","qualityLevels","STANDARD","selectedLevel","previousValue","currentValue","_handleParticipantError","removeTrack","sendCommand","SIP_GW_AVAILABILITY_CHANGED","SIP_GW_INVITE_ROOMS","VIDEO_SIP_GW_AVAILABILITY_CHANGED","_availabilityChanged","VIDEO_SIP_GW_SESSION_STATE_CHANGED","toDispatch","STATE_PENDING","STATE_FAILED","STATE_OFF","failureReason","STATUS_BUSY","_sessionStateChanged","rooms","sipAddress","newSession","createVideoSIPGWSession","ERROR_NO_CONNECTION","ERROR_SESSION_EXISTS","_inviteRooms","ADD_PENDING_INVITE_REQUEST","BEGIN_ADD_PEOPLE","REMOVE_PENDING_INVITE_REQUESTS","SET_CALLEE_INFO_VISIBLE","UPDATE_DIAL_IN_NUMBERS_FAILED","UPDATE_DIAL_IN_NUMBERS_SUCCESS","getDialInConferenceID","baseUrl","mucURL","conferenceIDURL","getDialInNumbers","fullUrl","getDigitsOnly","getInviteResultsForQuery","query","dialOutAuthUrl","peopleSearchQueryTypes","peopleSearchUrl","peopleSearchPromise","serviceUrl","queryTypes","queryTypesString","searchDirectory","phoneNumberPromise","hasCountryCode","regexString","PHONE_NUMBER_REGEX","isPhoneNumberRegex","digits","isMaybeAPhoneNumber","numberToVerify","dialNumber","getJSON","checkDialNumber","allow","country","phone","peopleResults","phoneResults","allowed","originalEntry","showCountryCodeReminder","getInviteTypeCounts","inviteItems","inviteTypeCounts","isSIPCallingSupported","inviteUrl","useHtml","roomUrl","_decodeRoomURI","includeDialInfo","infoText","numbersPromise","numbers","conferenceID","dialInConfCodeUrl","dialInNumbersUrl","phoneNumber","_getDefaultPhoneNumber","defaultDialInNumber","dialInfoPageUrl","conferenceName","origin","pathParts","dialIn","numbersEnabled","dialInNumbers","defaultNumber","formattedNumber","firstRegion","decodeURI","invite","invitees","showCalleeInfo","setCalleeInfoVisible","addPendingInviteRequest","failedInvitees","allInvitePromises","invitesLeftToSend","callFlowsEnabled","inviteServiceUrl","inviteServiceCallFlowsUrl","phoneInvitePromises","numberToInvite","dial","invitee","usersAndRooms","peopleInvitePromise","headers","invitePeopleAndChatRooms","vrooms","inviteVideoRooms","initialCalleeInfo","AbstractAddPeopleDialog","_query","_invite","inviteAllowed","_isAddDisabled","addToCallInProgress","_callFlowsEnabled","erroredInviteTypeCounts","addToCallError","invitedCount","notificationProps","_addPeopleEnabled","_dialOutAuthUrl","_dialOutEnabled","_jwt","_peopleSearchQueryTypes","_peopleSearchUrl","footerTextEnabled","_footerTextEnabled","_onItemSelected","_onSelectionChange","_parseQueryResults","_setMultiSelectElement","_resourceClient","makeQuery","parseResults","_multiselect","setSelectedItems","loadingMessage","noMatches","footerText","isMultiSelectDisabled","IconPhone","_renderErrorMessage","noMatchesFound","onItemSelected","onSelectionChange","resourceClient","shouldFocus","selectedItems","unsentInviteIDs","user_id","itemsToSelect","_getAvatar","avatar","users","userDisplayItems","tagAvatar","elemAvatar","elemBefore","filterValues","telephoneIcon","_renderTelephoneIcon","numberDisplayItems","supportString","supportLink","SUPPORT_URL","supportLinkContent","InlineMessage","_formatConferenceIDPin","conferenceIDStr","partLen","ConferenceID","NumbersList","_renderWithCountries","numbersMapping","hasFlags","resultNumbers","countryCode","countryName","numbersArray","formattedNumbers","_renderFlag","_renderNumbersList","_renderNumbersTollFreeList","numbersListItems","_renderNumberLink","tollNumbersListItems","tollFree","DialInSummary","loading","_onGetNumbersSuccess","_onGetConferenceIDSuccess","_setErrorMessage","getNumbers","_getNumbers","getID","_getConferenceID","contents","URLSuffix","DialInNumber","PasswordForm","enteredPassword","editEnabled","_onEnteredPasswordChange","_onPasswordSubmit","_renderPasswordField","digitPattern","placeHolderText","passwordNumberOfDigits","spellCheck","InfoDialog","passwordEditEnabled","_password","_copyElement","_onClickURLText","_onCopyInviteInfo","_onCopyInviteUrl","_onPasswordRemove","_onTogglePasswordEditState","_setCopyElement","_setCopyUrlElement","isInlineDialog","liveStreamViewURL","inlineDialog","IconInfo","_inviteURL","_getURLToDisplay","_renderDialInDisplay","_renderLiveStreamURL","_locked","_passwordNumberOfDigits","_renderPasswordAction","_getTextToCopy","cancelTitleKey","_localParticipantName","_conferenceName","silentUrl","_copyUrlElement","textKey","_canEditPassword","lockRoomGuestEnabled","roomPasswordNumberOfDigits","InfoDialogButton","hasConnectedToConference","_isConferenceJoined","_toolboxVisible","_isLonelyCall","_disableAutoShow","_onDialogClose","_onDialogToggle","_onClickOverflowMenuButton","_liveStreamViewURL","currentLiveStreamingSession","getActiveSession","CalleeInfo","_callee","defaultPresence","aClassName","poltergeist","CalleeInfoContainer","_calleeInfoVisible","pendingInviteRequests","file","statusToRingtone","CONNECTED_USER","EXPIRED","REJECTED","RINGING","oldParticipantPresence","_onConferenceJoined","numberOfPoltergeists","numberOfRealParticipants","_maybeHideCalleeInfo","newParticipantPresence","oldSoundId","newSoundId","AddPeopleDialog","_beginAddPeople","ReactReduxContext","createContext","getBatch","CLEARED","nullListeners","notify","Subscription","parentSub","handleChangeWrapper","addNestedSub","trySubscribe","notifyNestedSubs","onStateChange","isSubscribed","batch","tryUnsubscribe","notifySubscribers","subscription","Context","any","NO_SUBSCRIPTION_ARRAY","storeStateUpdatesReducer","updateCount","initStateUpdates","useIsomorphicLayoutEffect","connectAdvanced","selectorFactory","_ref2$getDisplayName","_ref2$methodName","_ref2$renderCountProp","renderCountProp","_ref2$shouldHandleSta","shouldHandleStateChanges","_ref2$storeKey","storeKey","_ref2$withRef","withRef","_ref2$forwardRef","_ref2$context","connectOptions","wrappedComponentName","selectorFactoryOptions","pure","usePureOnlyMemo","ConnectFunction","_useMemo","forwardedRef","wrapperProps","propsContext","ContextToUse","contextValue","didStoreComeFromProps","didStoreComeFromContext","childPropsSelector","createChildSelector","_useMemo2","overriddenContextValue","_useReducer","previousStateUpdateResult","forceComponentUpdateDispatch","lastChildProps","lastWrapperProps","childPropsFromStoreUpdate","renderIsScheduled","actualChildProps","didUnsubscribe","lastThrownError","checkForUpdates","newChildProps","latestStoreState","renderedWrappedComponent","Connect","memo","forwarded","hasOwn","is","shallowEqual","objA","objB","keysA","keysB","wrapMapToPropsConstant","getConstant","constantSelector","dependsOnOwnProps","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","proxy","stateOrDispatch","defaultMergeProps","stateProps","dispatchProps","mergeProps","mergedProps","areMergedPropsEqual","hasRunOnce","nextMergedProps","wrapMergePropsFunc","impureFinalPropsSelectorFactory","pureFinalPropsSelectorFactory","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","handleSubsequentCalls","nextOwnProps","nextStateProps","statePropsChanged","propsChanged","stateChanged","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","factories","strictEqual","_ref$connectHOC","connectHOC","_ref$mapStateToPropsF","mapStateToPropsFactories","_ref$mapDispatchToPro","mapDispatchToPropsFactories","_ref$mergePropsFactor","mergePropsFactories","_ref$selectorFactory","_ref3$pure","_ref3$areStatesEqual","_ref3$areOwnPropsEqua","_ref3$areStatePropsEq","_ref3$areMergedPropsE","extraOptions","newBatch","INFO","NORMAL","SUCCESS","WARNING","PARTICIPANT","v1","PERSISTED_STATE_NAME","filteredPersistedState","subtreeName","persistedSubtree","_getPersistedSubtree","_defaultStates","persistedState","_getFilteredState","persistState","_checksum","_calculateChecksum","__DEV__","filteredState","checksum","defaultState","md5","_getFilteredSubtree","subtree","subtreeConfig","filteredSubtree","persistedKey","subtreeDefaults","_mergeDefaults","throttledPersistState","UIUtil","getAvailableVideoWidth","escapeHtml","unsafeText","html","prependChild","newChild","firstChild","childNodes","redirect","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","msFullscreenElement","offsetParent","addMessage","messageDetails","ADD_MESSAGE","clearMessages","CLEAR_MESSAGES","ignorePrivacy","SEND_MESSAGE","setPrivateMessageRecipient","SET_PRIVATE_MESSAGE_RECIPIENT","TOGGLE_CHAT","SET_AUDIO_SETTINGS_VISIBILITY","SET_VIDEO_SETTINGS_VISIBILITY","DEVICES","MORE","SettingsButton","IconSettings","openDeviceSelectionPopup","CalendarTab","_onClickDisconnect","_onClickGoogle","_onClickMicrosoft","bootstrapCalendarIntegration","_renderLoadingState","_isConnectedToCalendar","_renderSignOutState","_renderSignInState","_attemptSignIn","clearCalendarIntegration","CALENDAR_TYPE","GOOGLE","MICROSOFT","_appName","_enableGoogleIntegration","_enableMicrosoftIntegration","_profileEmail","calendarState","microsoftApiApplicationClientID","calendarEnabled","integrationReady","MoreTab","AbstractDialogTab","isLanguageSelectOpen","_onLanguageDropdownOpenChange","showModeratorSettings","showLanguageSettings","_renderModeratorSettings","_renderLangaugeSelect","currentLanguage","languageItems","DropdownItem","DropdownMenu","onOpenChange","trigger","triggerButtonProps","triggerType","DropdownItemGroup","followMeActive","followMeEnabled","Checkbox","isChecked","ProfileTab","_onAuthToggle","FieldTextStateless","_renderAuth","messageHandler","openTwoButtonDialog","leftButtonKey","msgKey","submitFunction","evt","yes","getMoreTabProps","configuredTabs","getProfileTabProps","getAudioSettingsVisibility","getVideoSettingsVisibility","SettingsDialog","_closeDialog","_tabs","defaultTabIdx","showDeviceSettings","moreTabProps","showProfileSettings","showCalendarSettings","DeviceSelection","getDeviceSelectionDialogProps","tabState","selectedAudioInputId","selectedAudioOutputId","selectedVideoInputId","submitDeviceSelectionTab","submitProfileTab","submitMoreTab","AudioSettingsHeader","AudioSettingsEntry","hasError","IconExclamationSolid","IconMeter","MicrophoneEntry","_updateLevel","num","_startListening","TRACK_AUDIO_LEVEL_CHANGED","_stopListening","off","compmonentWillUnmount","Meter","TestButton","TEST_SOUND_PATH","SpeakerEntry","audioRef","_onTestButtonClick","setSinkId","preload","AudioSettingsContent","_onMicrophoneEntryClick","_onSpeakerEntryClick","currentMicData","_renderMicrophoneEntry","currentMicDeviceId","_renderSpeakerEntry","currentOutputDeviceId","_disposeTrack","micData","createLocalTrack","_componentWasUnmounted","_updateCurrentMicData","microphoneDevices","outputDevices","IconMicrophoneEmpty","IconVolumeEmpty","setAudioOutputDeviceAction","videoClassName","VideoSettingsContent","trackData","videoDeviceIds","_onEntryClick","_renderPreviewEntry","currentCameraDeviceId","getTrackLabel","_setTracks","changeLanguage","changeLocalDisplayName","changeLocalEmail","setAudioSettingsVisibility","setVideoSettingsVisibility","ExecutionEnvironment","canUseWorkers","Worker","canUseEventListeners","attachEvent","canUseViewport","screen","AbstractContainer","_render","touchFeedback","filteredProps","i18nInstance","hasUsedI18nextProvider","defaultOptions","bindI18n","bindI18nStore","transEmptyNodeValue","transSupportBasicHtmlNodes","transKeepBasicHtmlNodesFor","I18nContext","getHasUsedI18nextProvider","ReportNamespaces","usedNamespaces","getI18n","_console","alreadyWarned","warnOnce","loadNamespaces","isInitialized","useTranslation","i18nFromProps","i18nFromContext","defaultNSFromContext","reportNamespaces","retNotReady","ready","i18nOptions","_props$useSuspense","addUsedNamespaces","initializedStoreOnce","lastLng","loadNotPending","loadState","backendConnector","hasResourceBundle","hasLoadedNamespace","getT","getFixedT","nsMode","_useState","_useState2","setT","isMounted","boundReset","withTranslation","I18nextWithTranslation","_useTranslation","_useTranslation2","passDownProps","tReady","I18nextProvider","STATUS_TO_I18N_KEY","PresenceLabel","_getPresenceText","_presence","i18nKey","DISABLE_PRESENCE_STATUS","ACTIVE_CHANGED","DEFAULT_POSTIS_OPTIONS","opener","POSTIS_METHOD_NAME","PostMessageTransportBackend","postisOptions","postis","Postis","_receiveCallback","listen","setReceiveCallback","MESSAGE_TYPE_EVENT","MESSAGE_TYPE_REQUEST","MESSAGE_TYPE_RESPONSE","Transport","_listeners","_requestID","_responseHandlers","_unprocessedMessages","setBackend","_disposeBackend","_backend","_onMessageReceived","listenersForEvent","isProcessed","removeListener","sendRequest","getJitsiMeetTransport","API_ID","setExternalTransportBackend","externalTransportBackend","_typeof3","getFilmstripHeight","outerHeight","getVerticalFilmstripWidth","thumbs","_getThumbs","avatarSize","localThumb","remoteThumbs","heightToWidthPercent","onlyVisible","hasClass","popupEnabled","twoButtonDialog","generateDontShowCheckbox","isDontShowAgainEnabled","dontShowTheDialog","localStorageKey","dontShowAgainSubmitFunctionWrapper","buttonValues","checkbox","OK","CANCEL","msgString","loadedFunction","closeFunction","defaultButton","wrapperClass","classes","leftButton","translation","generateTranslationHTML","cancelButton","_getDialogClasses","prompt","_getFormattedTitleString","persistent","loaded","promptspeed","close","translateElement","getApi","closeText","$titleString","addClass","append","box","openDialogWithStates","statesObject","translateOptions","defaultClasses","openCenteredPopup","onPopupClosed","screenX","screenY","innerHeight","popup","pollTimer","showError","showWarning","participantNotification","displayNameKey","messageKey","messageArguments","enablePopups","isDialogOpened","getCurrentStateName","_CSSTransition2","_interopRequireDefault","_ReplaceTransition2","_TransitionGroup2","_Transition2","TransitionGroup","ReplaceTransition","CSSTransition","AbstractStatelessAvatar","_isIcon","iconProp","StatelessAvatar","initials","_getAvatarClassName","_getBadgeClassName","_getAvatarStyle","onError","onAvatarLoadError","xmlnsXlink","dominantBaseline","textAnchor","defaultAvatar","AVATAR_COLORS","AVATAR_OPACITY","Avatar","avatarFailed","_onAvatarLoadError","_initialsBase","_loadableAvatarUrl","colorBase","avatarProps","effectiveURL","initialsBasis","getInitials","colorIndex","nameHash","codePointAt","getAvatarColor","CLEAR_CALENDAR_INTEGRATION","REFRESH_CALENDAR","SET_CALENDAR_AUTHORIZATION","SET_CALENDAR_ERROR","SET_CALENDAR_EVENTS","SET_CALENDAR_INTEGRATION","SET_CALENDAR_AUTH_STATE","SET_CALENDAR_PROFILE_EMAIL","SET_LOADING_CALENDAR_EVENTS","ERRORS","AUTH_FAILED","GOOGLE_APP_MISCONFIGURED","FETCH_END_DAYS","FETCH_START_DAYS","MAX_LIST_LENGTH","ALLDAY_EVENT_LENGTH","_isDisplayableCalendarEntry","allDay","attendees","_updateCalendarEntries","entryMap","_parseCalendarEntry","toTimeString","existingEntry","setCalendarEvents","_checkPattern","positivePattern","negativePattern","positiveRegExp","positiveMatch","urlRegExp","schemeRegExp","fieldsToSearch","notes","_getURLFromEvent","googleCalendarApi","getCurrentEmail","_isSignedIn","MS_API_CONFIGURATION","AUTH_ENDPOINT","CALENDAR_ENDPOINT","MS_API_SCOPES","MS_CONSUMER_TENANT","REDIRECT_URI","popupAuthWindow","microsoftCalendarApi","msAuthState","accessToken","Client","authProvider","getEventsPromises","ianaTimeZone","Intl","DateTimeFormat","resolvedOptions","timeZone","windowsTimeZone","findWindows","orderby","requestCalendarEvents","formatCalendarEntry","userSigninName","signInDeferred","guids","authState","generateGuid","authNonce","setCalendarAPIAuthState","authUrl","getAuthUrl","windowCloseCheck","handleAuth","getParamsFromHash","tokenParts","tokenInfo","appId","idToken","id_token","rs","KJUR","jws","JWS","readSafeJSONString","b64utoutf8","aud","iss","tid","notBefore","nbf","expires","exp","access_token","userDisplayName","userDomainType","preferred_username","getValidatedTokenParts","tokenExpires","isExpired","refreshAuthUrl","getAuthRefreshUrl","iframe","signInPromise","bodyPreview","buf","Uint16Array","crypto","getRandomValues","s4","authParams","expiresIn","expires_in","expireDate","_fetchCalendarEntries","maybePromptForPermission","forcePermission","integrationType","integration","_getCalendarIntegration","setLoadingCalendarEvents","setCalendarError","calendarType","refreshCalendar","integrationToLoad","setIntegrationReady","isLoadingEvents","newRoomName","roomURL","eventIx","newEvent","newEmail","setCalendarProfileEmail","AddMeetingUrlButton","IconAdd","eventId","JoinButton","CalendarListContent","_onJoinPress","_toDisplayableItem","_eventList","analyticsEventName","CalendarList","_onOpenSettings","_onRefreshEvents","_getErrorMessage","_calendarError","errorMessageKey","showRefreshButton","showSettingsButton","_hasIntegrationSelected","_hasLoadedEvents","provider","PROVIDER_NAME","MicrosoftSignInButton","ADD_KNOWN_DOMAINS","authorization","_maybeClearAccessStatus","MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED","SET_FATAL_ERROR","mediaPermissionPromptVisibilityChanged","fatalError","OverlayFrame","containerClass","isLightOverlay","contentClass","FilmstripOnlyOverlayFrame","iconClass","ReloadButton","_reloadNow","AbstractPageReloadOverlay","needsRenderWeb","conferenceError","configError","connectionError","isFatalJitsiConnectionError","isFatalJitsiConferenceError","timeoutSeconds","randomInt","isNetworkFailure","timeLeft","_renderProgressBar","timeRemaining","percentageComplete","AbstractSuspendedOverlay","suspendDetected","AbstractUserMediaPermissionsOverlay","isMediaPermissionPromptVisible","_renderPolicyLogo","policyLogoSrc","POLICY_LOGO","overlay","overlays","SuspendedOverlay","UserMediaPermissionsOverlay","PageReloadFilmstripOnlyOverlay","SuspendedFilmstripOnlyOverlay","UserMediaPermissionsFilmstripOnlyOverlay","PageReloadOverlay","getOverlays","needsRender","OverlayContainer","_setShowLoadConfigOverlay","_mediaPermissionPromptVisibilityChanged","_setFatalError","extensionInstalledFunction","img","Image","isExtensionInstalled","addPrejoinAudioTrack","addPrejoinVideoTrack","initPrejoin","setAudioDisabled","addPrejoinContentSharingTrack","setPrejoinVideoDisabled","replacePrejoinAudioTrack","setDeviceStatusWarning","replacePrejoinVideoTrack","newObj","_setPrototypeOf2","_create2","jitsi_meet_external_api_id","ENDPOINT_TEXT_MESSAGE_NAME","positionMap","animation","POSITION_ATTRIBUTE_ENUM","positionPropToPopperPosition","positionToPopper","_templateObject","maxHeight","Layer","extractStyles","popperHeight","_cssPosition","fixPositionTopUnderflow","_originalHeight","originalHeight","_maxHeight","calculateMaxHeight","cssPosition","hasExtractedStyles","actualPosition","originalPosition","applyPopper","onFlippedChange","currentHeight","positionTop","DocumentElementClientHeight","boundariesElement","viewportHeight","popperTop","targetRef","contentRef","actualTarget","popperOpts","onCreate","onUpdate","autoFlip","flipVariations","preventOverflow","escapeWithReference","flipBehavior","getFlipBehavior","behavior","_state","borderColor","shadowColor","InlineDialog","handleClickOutside","domNode","findDOMNode","Node","onContentBlur","onContentClick","onContentFocus","shouldFlip","dialogOffset","layerContent","onBlurCapture","onFocusCapture","SET_DOCUMENT_URL","TOGGLE_DOCUMENT_EDITING","setDocumentEditingState","setDocumentUrl","documentUrl","SharedDocumentButton","IconShareDoc","_editing","ETHERPAD_OPTIONS","showControls","showChat","showLineNumbers","useMonospaceFont","getSharedDocumentUrl","URLSearchParams","activeModalId","previousConference","etherpad_base","etherpadBase","core","__e","randomString","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","preloadedState","enhancer","currentReducer","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","replaceReducer","nextReducer","outerSubscribe","observer","observeState","getUndefinedStateErrorMessage","actionType","reducers","reducerKeys","finalReducers","shapeAssertionError","finalReducerKeys","assertReducerShape","hasChanged","previousStateForKey","nextStateForKey","errorMessage","bindActionCreator","actionCreator","bindActionCreators","actionCreators","boundActionCreators","_defineProperty","enumerableOnly","_objectSpread2","getOwnPropertyDescriptors","middlewares","_dispatch","middlewareAPI","REMOVE_TRANSCRIPT_MESSAGE","UPDATE_TRANSCRIPT_MESSAGE","TOGGLE_REQUESTING_SUBTITLES","updateTranscriptMessage","transcriptMessageID","newTranscriptMessage","toggleRequestingSubtitles","AbstractCaptions","_requestingSubtitles","_transcripts","paragraphs","_renderParagraph","_renderSubtitlesContainer","transcripts","_transcriptMessages","transcriptMessage","participantName","final","stable","unstable","_constructTranscripts","AbstractClosedCaptionButton","transcribingEnabled","IconClosedCaption","JSON_TYPE_TRANSCRIPTION_RESULT","JSON_TYPE_TRANSLATION_RESULT","P_NAME_REQUESTING_TRANSCRIPTION","P_NAME_TRANSLATION_LANGUAGE","REMOVE_AFTER_MS","_setClearerOnTranscriptMessage","clearTimeOut","removeTranscriptMessage","translationLanguage","getLocalParticipantProperty","message_id","transcript","is_interim","stability","_endpointMessageReceived","_requestingSubtitlesToggled","newTranscriptMessages","_removeTranscriptMessage","_updateTranscriptMessage","DisplayName","editDisplayNameValue","isEditing","_nameInput","_onStartEditing","_setNameInputRef","previousProps","allowEditing","displayNameSuffix","elementID","_configuredDisplayName","AbstractDisplayNamePrompt","_onSetDisplayName","onPostSubmit","_onDisplayNameChange","DisplayNamePrompt","_NodeResolver","simpleIsEqual","lastResult","calledOnce","isNewArgEqualToLast","newArg","newArgs","resultFn","AbstractCircularLabel","CircularLabel","HEX_DIGITS","randomElement","_randomString","characters","CATEGORIES","_ADJECTIVE_","_ADVERB_","_PLURALNOUN_","_VERB_","PATTERNS","_hasTemplate","jitsiLocalTrack","FOCUS_DISCONNECTED","FOCUS_LEFT","ICE_FAILED","VIDEOBRIDGE_NOT_AVAILABLE","CONNECTION_DROPPED_ERROR","OTHER_ERROR","SERVER_ERROR","setNotificationsEnabled","joinedParticipantsNames","_throttledNotifyParticipantConnected","joinedParticipantsCount","_assign","_assign2","DISPLAY_VIDEO","DISPLAY_AVATAR","DISPLAY_BLACKNESS_WITH_NAME","DISPLAY_VIDEO_WITH_NAME","DISPLAY_AVATAR_WITH_NAME","SmallVideo","audioStream","videoIsHovered","_connectionStatus","_popoverIsHovered","_showConnectionIndicator","CONNECTION_INDICATOR_DISABLED","_showDominantSpeaker","_showRaisedHand","_onPopoverHover","_onContainerClick","$container","isVideo","autoplay","getStreamElementID","bindHoverHandler","updateConnectionStatus","updateStatusBar","statusBarContainer","ReactDOM","addAudioLevelIndicator","audioLevelContainer","_getAudioLevelContainer","removeAudioLevelIndicator","unmountComponentAtNode","audioLevel","selectVideoElement","$avatar","$poker","$displayName","_renderDisplayName","displayNameContainer","removeDisplayName","isFocused","isFocusClassEnabled","removeClass","hasVideo","isCurrentlyOnLargeVideo","isVideoPlayable","selectDisplayMode","computeDisplayModeInput","getParticipantConnectionStatus","mutedWhileDisconnected","canPlayEventReceived","_canPlayEventReceived","videoStreamMuted","oldDisplayMode","displayMode","displayModeString","displayModeInput","removeAvatar","DISABLE_DOMINANT_SPEAKER_INDICATOR","toggleClass","videoSpanId","showRaisedHandIndicator","initBrowserSpecificProperties","toolbarContainer","_unmountIndicators","indicatorToolbar","INDICATOR_FONT_SIZES","showConnectionIndicator","CONNECTION_INDICATOR_AUTO_HIDE_ENABLED","currentLayout","statsPopoverPosition","statsPopoverLocation","isLocalVideo","enableStatsDisplay","poker","triggerPin","_shouldTriggerPin","$source","srcElement","participantIdToPin","popoverIsHovered","_setThumbnailSize","FEEDBACK_REQUEST_IN_PROGRESS","CANCEL_FEEDBACK","LabelWrapper","getColor","getDisabledColor","LabelInner","inlineEdit","RequiredIndicator","Label","htmlFor","isFirstChild","isLabelHidden","side","auto","getModifiers","containerRef","triggerRef","getBackgroundColor","standard","none","getBackgroundColorFocus","getBackgroundColorHover","getBorderColor","getBorderColorFocus","grid","lineHeightBase","lineHeightCompact","heightBase","heightCompact","horizontalPadding","ChildWrapper","minHeight","paddingDisabled","getMaxWidth","ContentWrapper","grow","WarningIcon","SpinnerParent","ValidationElement","isInvalid","FieldBaseStateless","shouldReset","invalidMessage","isCompact","isFitContainerWidthEnabled","isPaddingDisabled","isReadOnly","onDialogBlur","onDialogClick","onDialogFocus","isValidationHidden","ON_BLUR_KEY","ON_CONTENT_BLUR_KEY","FieldBase","defaultIsFocused","isDialogFocused","shouldIgnoreNextDialogBlur","cancelSchedule","reschedule","timers","getPlaceholderColor","isMonospaced","minimumRows","enableResize","Wrapper","FieldTextAreaStateless","isSpellCheckEnabled","required","scoreAnimationClass","ENABLE_FEEDBACK_ANIMATION","SCORES","_score","mousedOverScore","_scoreClickConfigurations","_onScoreSelect","_onScoreMouseOver","_onMessageChange","_onScoreContainerMouseLeave","notifyFeedbackPromptDisplayed","scoreToDisplayAsSelected","scoreIcons","isFilled","scoreToSubmit","cancelFeedback","submitFeedback","maybeOpenFeedbackDialog","feedbackPercentage","submitted","sendFeedback","selectParticipants","reportError","selectParticipantInLargeVideo","_electLastVisibleRemoteVideo","_electParticipantInLargeVideo","updateKnownLargeVideoResolution","UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION","LargeVideo","playsInline","DISABLE_TRANSCRIPTION_SUBTITLES","ORIENTATION","LANDSCAPE","PORTRAIT","LargeVideoBackground","_setCanvasEl","_updateCanvas","hidden","_setUpdateCanvasInterval","wasCanvasUpdating","shouldCanvasUpdating","_clearCanvas","_clearUpdateCanvasInterval","_canvasEl","getContext","clearRect","_updateCanvasInterval","videoWidth","videoHeight","canvasHeight","canvasWidth","cavnasContext","orientationFit","heightScaledToFit","drawImage","widthScaledToFit","ReflectOwnKeys","R","ReflectApply","NumberIsNaN","_events","_eventsCount","_maxListeners","defaultMaxListeners","$getMaxListeners","_addListener","prepend","existing","newListener","warned","onceWrapper","fired","wrapFn","_onceWrap","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","RangeError","setMaxListeners","getMaxListeners","doError","er","prependListener","prependOnceListener","originalListener","spliceOne","rawListeners","eventNames","_objectWithoutPropertiesLoose","sourceKeys","defaultURL","_addKnownDomains","knownDomain","SET_ACTIVE_MODAL_ID","modalProps","condition","argIndex","framesToPop","BEFORE_HANGUP","DESKTOP_SHARING_ENABLED_CHANGED","PasswordRequiredPrompt","_onPasswordChanged","_renderBody","notifyReadyToClose","RoomLockButton","IconRoomLock","IconRoomUnlock","RoomLockPrompt","_localParticipantModerator","MEETING_PASSWORD_ENABLED","_openPasswordRequiredPrompt","TOGGLE_ROOM_LOCK","previousLockedState","currentLockedState","PASSWORD_NOT_SUPPORTED","_setPasswordFailed","UPDATE_FLAGS","FADE_DURATION_MS","getCameraVideoPosition","videoSpaceWidth","videoSpaceHeight","horizontalIndent","verticalIndent","VideoContainer","LargeContainer","userId","resizeContainer","_backgroundOrientation","_hideBackground","_isHidden","avatarDisplayed","$remoteConnectionMessage","$remotePresenceMessage","wasVideoRendered","$wrapperParent","avatarHeight","onPlayingCallback","$video","onplaying","_resizeListeners","onresize","addResizeListener","getStreamSize","_getVideoSize","containerWidth","containerHeight","isScreenSharing","availableWidth","computeDesktopVideoSize","computeCameraVideoSize","videoLayoutFit","videoSpaceRatio","maxZoomCoefficient","MAXIMUM_ZOOMING_COEFFICIENT","VIDEO_LAYOUT_FIT","getVideoPosition","containerWidthToUse","positionRemoteStatusMessages","_positionParticipantStatus","$element","$avatarImage","parentHeight","animate","_updateBackground","queue","removeResizeListener","setStream","userID","detach","attach","flipX","setLargeVideoBackground","showAvatar","notifyLargeVideoVisibilityChanged","fadeTo","stayOnStage","isAvatar","DEFAULT_BACKGROUND","DISABLE_VIDEO_BACKGROUND","_interopRequireWildcard","IconWrapper","_classCallCheck2","_createClass2","_possibleConstructorReturn2","_inherits2","_defineProperty2","_react","_styledComponents","_uuid","_theme","_constants","primaryColor","secondaryColor","Glyph","glyph","dangerouslySetGlyph","insertDynamicGradientID","svgStr","ctx","$export","own","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","IS_WRAP","expProto","C","virtual","U","__g","FLATTENED","THEME_MODES","focusRing","outlineWidth","noFocusRing","layers","assistive","AbstractChat","isIE","currentStyle","HIDDEN_TEXTAREA_STYLE","visibility","SIZING_STYLE","computedStyleCache","hiddenTextarea","forceHiddenStyles","setProperty","calculateNodeHeight","uiTextNode","useCache","minRows","maxRows","nodeStyling","sizingStyle","boxSizing","paddingSize","borderSize","nodeInfo","calculateNodeStyling","singleRowHeight","valueRowCount","rowCount","TextareaAutosize","_onRef","inputRef","_controlled","_resizeComponent","nodeHeight","_uid","useCacheForDOMMeasurements","_resizeLock","onHeightChange","_resizeListener","purgeCache","smileys","smiley1","smiley2","smiley3","smiley4","smiley5","smiley6","smiley7","smiley8","smiley9","smiley10","smiley11","smiley12","smiley13","smiley14","smiley15","smiley16","smiley17","smiley18","smiley19","smiley20","SmileysPanel","smileyItems","smileyKey","onSelectFunction","_getOnSmileySelectCallback","onlyEmojiClassName","onSmileySelect","ChatInput","showSmileysPanel","_textArea","_onDetectSubmit","_onSmileySelect","_onToggleSmileysPanel","_setTextAreaRef","_focus","smileysPanelClassName","keyCode","shiftKey","trimmed","onSend","smileyText","textAreaElement","DisplayNameForm","INCOMING_MSG_SOUND_ID","MESSAGE_TYPE_ERROR","MESSAGE_TYPE_LOCAL","MESSAGE_TYPE_REMOTE","AbstractMessageContainer","_getMessagesGroupedBySender","messagesCount","messages","groups","currentGroupParticipantId","currentGrouping","TIMESTAMP_FORMAT","AbstractChatMessage","_getFormattedTimestamp","_getMessageText","messageType","_getPrivateNoticeMessage","recipient","processedMessage","privateMessage","showDisplayName","_renderPrivateNotice","PrivateMessageButton","reply","showTimestamp","_renderTimestamp","ChatMessageGroup","MessageContainer","_isScrolledToBottom","_messageListRef","_messagesListEndRef","_onChatScroll","onScroll","maybeUpdateBottomScroll","scrollToBottom","withAnimation","scrollIntoView","block","AbstractMessageRecipient","privateMessageRecipient","_privateMessageRecipient","_onRemovePrivateMessageRecipient","IconCancelSelection","_isOpen","_messages","_showNamePrompt","_onToggleChat","_onSendMessage","_isExited","_messageContainerRef","_renderPanelContent","_onChatInputResize","_scrollMessageContainerToBottom","_renderChat","_renderChatHeader","ComponentToRender","EMOTICON_REGEXP_ARRAY","getUnreadCount","lastReadMessage","escapedValues","asciiEmojies","emojiAsciiAliases","escapeRegexp","ChatCounter","_count","AbstractChatPrivacyDialog","_onSendGroupMessage","_onSendPrivateMessage","_onSetMessageRecipient","PRIVACY_NOTICE_TIMEOUT","_handleReceivedMessage","isChatOpen","hasRead","millisecondsTimestamp","notifyReceivedChatMessage","ts","MESSAGE_RECEIVED","PRIVATE_MESSAGE_RECEIVED","errorType","CHAT_ERROR","_handleChatError","_addChatMsgListener","shouldSendPrivateMessageTo","lastMessage","recentPrivateMessages","recentPrivateMessage","_shouldSendPrivateMessageTo","ChatPrivacyDialog","notifySendingChatMessage","sendPrivateTextMessage","recipientID","_persistSentPrivateMessage","sendTextMessage","textField","_maybeFocusField","updateChatState","newMessage","SET_E2EE_KEY","setE2EEKey","E2EEDialog","_onKeyChange","_everyoneSupportsE2EE","e2eeKey","E2EEButton","E2EELabel","IconE2EE","SET_DEVICE_SELECTION_POPUP_DATA","popupDialogData","_setDeviceSelectionPopupData","AudioInputPreview","_updateAudioLevel","_listenForAudioUpdates","_stopListeningForAudioUpdates","audioMeterFill","AudioOutputPreview","_audioElement","_audioElementReady","_setAudioSink","DeviceSelector","hasPermission","_renderNoPermission","_renderNoDevices","_createDropdownItem","defaultSelected","selectedDeviceId","_createDropdown","_createDropdownTrigger","triggerText","onItemActivated","newDeviceId","VIDEO_ERROR_CLASS","VideoInputPreview","hasAudioPermission","hasVideoPermission","previewAudioTrack","previewVideoTrack","previewVideoTrackError","_unMounted","_createAudioInputTrack","_createVideoInputTrack","_disposeAudioInputPreview","_disposeVideoInputPreview","hideAudioInputPreview","hideAudioOutputSelect","_renderSelectors","_renderSelector","deviceSelectorProps","configurations","disableDeviceChange","disableAudioInputChange","notifyDeviceListChanged","VIDEO_QUALITY_TO_ICON","IconVideoQualityHD","IconVideoQualitySD","IconVideoQualityLD","OverflowMenuVideoQualityItem","_videoQuality","IconVideoQualityAudioOnly","createEvent","quality","VideoQualitySlider","_enableAudioOnly","_enableHighDefinition","_enableLowDefinition","_enableStandardDefinition","_onSliderChange","_sliderOptions","videoQuality","_p2p","_videoSupported","activeSliderOption","_mapCurrentQualityToSliderValue","_renderP2PMessage","_renderAudioOnlyLockedMessage","_createLabels","activeLabelIndex","labelsCount","maxWidthOfLabel","sliderOption","_setPreferredVideoQuality","_sendrecvVideoQuality","audioOnlyOption","matchingOption","AbstractVideoQualityLabel","RESOLUTION_TO_TRANSLATION_KEY","RESOLUTIONS","videoTrackOnLargeVideo","translationKeys","highestMatchingResolution","knownResolution","labelKey","_mapResolutionToTranslationsKeys","_labelKey","_tooltipKey","_videoTrack","labelContent","setVideoQuality","frameHeight","_objectSpread","_createClass","_assertThisInitialized","_possibleConstructorReturn","_setPrototypeOf","_inherits","_toConsumableArray","arr2","iter","_slicedToArray","_arr","_n","_e","_s","consoleLogger","baseLogger","concreteLogger","forward","_len3","_key3","_len4","_key4","debugOnly","moduleName","observers","cloned","_cloned","rej","makeString","getLastOfPath","Empty","cleanKey","canNotTraverseDeeper","setPath","_getLastOfPath","getPath","_getLastOfPath3","deepExtend","overwrite","_entityMap","_EventEmitter","ResourceStore","keySeparator","silent","addNamespaces","resources","addResource","deep","pack","removeNamespaces","getResource","compatibilityAPI","postProcessor","processors","addPostProcessor","handle","translator","processor","Translator","resolved","nsSeparator","overloadTranslationOptionHandler","_this$extractFromKey","extractFromKey","appendNamespaceToCIMode","resUsedKey","usedKey","resExactUsedKey","exactUsedKey","resType","noObject","joinArrays","handleAsObjectInI18nFormat","i18nFormat","handleAsObject","returnObjects","returnedObjectHandler","resTypeIsArray","copy$$1","newKeyToUse","deepKey","extendTranslation","usedDefault","isValidLookup","pluralResolver","getSuffix","updateMissing","lngs","fallbackLngs","languageUtils","getFallbackCodes","saveMissingTo","toResolveHierarchy","missingKeyHandler","saveMissing","needsPluralHandling","saveMissingPlurals","getPluralFormsOfKey","appendNamespaceToMissingKey","parseMissingKeyHandler","usedLng","usedNS","skipInterpolation","defaultVariables","nest","postProcess","postProcessorNames","applyPostProcessor","found","_this4","fallbackNS","needsContextHandling","codes","pluralSuffix","possibleKey","finalKey","finalKeys","addLookupKeys","contextSeparator","resourceStore","LanguageUtil","formatLanguageCode","specialCases","lowerCaseLng","part","cleanCode","nonExplicitWhitelist","getLanguagePartFromCode","getScriptPartFromCode","fallbackCode","fallbackCodes","addCode","isWhitelisted","fc","sets","_rulesPluralsTypes","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","PluralResolver","plurals","getRule","noAbs","simplifyPluralSuffix","returnSuffix","compatibilityJSON","Interpolator","iOpts","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapePrefix","unescapeSuffix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","maxReplaces","resetRegExp","regexpStr","regexpUnescapeStr","regexpUnescape","nestingRegexpStr","nestingRegexp","replaces","regexSafe","handleFormat","missingInterpolationHandler","clonedOptions","handleHasOptions","inheritedOptions","optionsString","Connector","toLoad","pending","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","_name$split2","q","_getLastOfPath2","what","fcName","tried","read","queueLoad","loadOne","prepareLoading","_this5","_name$split3","_name$split4","isUpdate","initImmediate","pluralSeparator","partialBundledLanguages","tDescription","_format","transformOptions","I18n","external","isClone","createClassOnDemand","ClassOrObject","lu","storeApi","_this2$store","setLng","loadResources","detect","fixedT","_this$translator","_this$translator2","exists","_this6","preloaded","newLngs","_this7","mergedOptions","membersToCopy","anObject","IE8_DOM_DEFINE","toPrimitive","dP","O","Attributes","it","DISABLE_JOIN_LEAVE_NOTIFICATIONS","Version","isMultipleAudioInputSupported","isCollectingLocalStats","deviceDescriptions","currentlyUsedDeviceIds","IconMessage","IconReply","_setPrivateMessageRecipient","_mapDispatchToProps","_mapStateToProps","isBrowser","longerTimeoutBrowsers","timeoutDuration","scheduled","functionToCheck","getStyleComputedProperty","getParentNode","nodeName","getScrollParent","ownerDocument","_getStyleComputedProp","overflowX","overflowY","isIE11","MSInputMethodContext","documentMode","isIE10","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","upperSide","scrollingElement","getBordersSize","axis","sideA","sideB","getWindowSizes","getClientRect","getBoundingClientRect","rect","scrollLeft","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","modifier","includeScroll","getFixedPositionOffsetParent","getBoundaries","boundaries","excludeScroll","relativeOffset","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","isFixed","_getWindowSizes","isPaddingNumber","computeAutoPlacement","refRect","rects","sortedAreas","area","filteredAreas","computedPlacement","variation","getReferenceOffsets","getOuterSizes","marginBottom","marginRight","getOppositePlacement","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","runModifiers","ends","cur","isDestroyed","originalPlacement","isCreated","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","toCheck","willChange","disableEventListeners","removeOnDestroy","getWindow","defaultView","setupEventListeners","updateBound","passive","scrollElement","attachToScrollParents","scrollParents","isBody","enableEventListeners","cancelAnimationFrame","isNumeric","setStyles","isModifierRequired","requestingName","requestedName","requesting","_requesting","requested","validPlacements","clockwise","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","parseOffset","basePlacement","useHeight","fragments","frag","divider","splitRegex","ops","op","mergeWithPrevious","toValue","index2","Defaults","shiftvariation","_data$offsets","isVertical","shiftOffsets","transformProp","popperStyles","keepTogether","opSide","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","prefixedProperty","invertTop","invertLeft","onLoad","modifierOptions","requestAnimationFrame","jquery","Utils","PopperUtils","createTaskQueue","TaskQueue","CLEAR_RECORDING_SESSIONS","RECORDING_SESSION_UPDATED","SET_PENDING_RECORDING_NOTIFICATION_UID","SET_STREAM_KEY","showPendingRecordingNotification","streamType","dialogProps","showNotificationAction","isDismissAllowed","_setPendingRecordingNotificationUid","showRecordingError","RECORDING_TYPES","JITSI_REC_SERVICE","DROPBOX","RECORDING_STATUS_PRIORITIES","OFF","PENDING","ON","sessionDatas","statusConstants","sessionData","getSessionById","getSessionStatusToShow","recordingSessions","session","STALE_TIMEOUT","AbstractRecordingLabel","staleLabel","_status","_updateStaleStatus","_renderLabel","_getLabelKey","oldProps","AbstractLiveStreamButton","_isLiveStreamRunning","StopLiveStreamDialog","StartLiveStreamDialog","abstractProps","disabledByFeatures","livestreaming","_disabledByFeatures","_liveStreamDisabledTooltipKey","IconLiveStreaming","AbstractStartLiveStreamDialog","_onStreamKeyChange","_setStateIfMounted","_streamKey","selectedBroadcastID","selectedBroadcast","startRecording","broadcastId","GOOGLE_PRIVACY_POLICY","YOUTUBE_LIVE_DASHBOARD_URL","YOUTUBE_TERMS_URL","StreamKeyPicker","isDropdownOpen","_onDropdownOpenChange","dropdownItems","DropdownMenuStateless","_formatBroadcasts","dropdownEvent","onBroadcastSelected","LIVE_STREAMING_HELP_LINK","AbstractStreamKeyForm","showValidationError","_validateStreamKey","helpURL","_debouncedUpdateValidationErrorVisibility","_updateValidationErrorVisibility","_onInputChange","change","newShowValidationError","trimmedKey","_onOpenHelp","_googleAPIState","_googleProfileEmail","_googleApiApplicationClientID","_onGetYouTubeBroadcasts","_onInitializeGoogleApi","_onGoogleSignIn","_onRequestGoogleSignIn","_onYouTubeBroadcastIDSelected","_renderYouTubePanel","_parseErrorFromResponse","firstError","googleContent","helpText","_getGoogleErrorMessageToDisplay","AbstractStopLiveStreamDialog","_session","stopRecording","AbstractRecordButton","_isRecordingRunning","StopRecordingDialog","StartRecordingDialog","fileRecordingsEnabled","_fileRecordingsDisabledTooltipKey","IconToggleRecording","UPDATE_DROPBOX_TOKEN","_authorizeDropbox","appKey","redirectURI","windowName","gloabalNS","oauthCallbacks","authorize","Dropbox","getAuthenticationUrl","returnUrl","usersGetCurrentAccount","account","display_name","getSpaceUsage","usersGetSpaceUsage","space","allocation","used","allocated","dropbox","updateDropboxToken","AbstractStartRecordingDialog","selectedRecordingService","_onSelectedRecordingServiceChanged","_onSharingSettingChanged","_fileRecordingsServiceEnabled","_areIntegrationsEnabled","isTokenValid","isValidating","userName","sharingEnabled","spaceLeft","_token","_onTokenUpdated","_isDropboxEnabled","_appKey","_autoCaptionOnRecord","appData","DROPBOX_LOGO","ICON_SHARE","JITSI_LOGO","StartRecordingDialogContent","_onSignIn","_onSignOut","_onDropboxSwitchChange","_onRecordingServiceSwitchChange","_styles","_renderNoIntegrationsContent","_renderIntegrationsContent","_renderFileSharingContent","fileRecordingsServiceSharingEnabled","onSharingSettingChanged","sharingSetting","controlDisabled","mainContainerClasses","topBorderContainer","recordingIcon","onValueChange","switch","trackColor","false","fileRecordingsServiceEnabled","integrationsEnabled","switchContent","_renderSpinner","_renderSignOut","signButton","loggedIn","autoCaptionOnRecord","_fileRecordingsServiceSharingEnabled","isDropboxEnabled","isOkDisabled","AbstractStopRecordingDialog","_fileRecordingSession","oldSessionData","RECORDER_STATE_CHANGED","recorderSession","getError","initiator","getInitiator","getLiveStreamViewURL","getMode","terminator","getTerminator","updateRecordingSessionData","isStreamMode","SERVICE_UNAVAILABLE","serviceName","RESOURCE_CONSTRAINT","_showRecordingErrorNotification","disableRecordAudioNotification","updatedSessionData","pendingNotificationUids","hidePendingRecordingNotification","showStoppedRecordingNotification","soundOff","soundOn","initiatorName","showStartedRecordingNotification","soundID","_updateSessionDatas","newSessionData","newSessionDatas","externalAuthWindow","authRequiredDialog","isTokenAuthEnabled","tokenAuthUrl","getTokenAuthUrl","AuthUtil","doExternalAuth","lockPassword","getUrl","jwtToken","setJWT","openConnection","_getConferenceOptions","moderator","authenticate","unregister","errCode","initJWTTokenListener","getExternalAuthUrl","LoginDialog","showExternalAuthDialog","redirectToTokenAuthService","isExternalAuthEnabled","loginDialog","showAuthDialog","authenticateAndUpgradeRole","roomPassword","onLoginSuccessful","displayConnectionStatus","authenticationError","displayError","doXmppAuth","requireAuth","showAuthRequiredDialog","requestAuth","authDialog","showXmppPasswordPrompt","closeAuth","logout","ConnectionStatsTable","_renderStatistics","_renderShowMoreLink","shouldShowMore","_renderAdditionalStats","_renderBandwidth","_renderTransport","_renderRegion","bandwidth","_renderBitrate","_renderConnectionSummary","connectionSummary","_renderE2eRtt","e2eRtt","region","serverRegion","_renderBridgeCount","bridgeCount","_renderFrameRate","framerate","frameRateString","ssrc","_renderPacketLoss","packetLoss","packetLossTableData","_renderResolution","resolutionString","translationKey","onShowMore","isRemoteVideo","localIP","localPort","remoteIP","remotePort","transportType","ip","getIP","localip","getPort","isP2P","isTURN","localCandidateType","remoteCandidateType","additionalData","_renderTransportTableRow","getStringFromArray","subscribers","startListeningForStats","LOCAL_STATS_UPDATED","REMOTE_STATS_UPDATED","_emitStatsUpdate","E2E_RTT_CHANGED","getProperty","filteredSubscribers","localUserId","allUserFramerates","allUserResolutions","modifiedLocalStats","framerateUserIds","resolutionUserIds","remoteUserStats","INDICATOR_DISPLAY_THRESHOLD","AbstractConnectionIndicator","autoHideTimeout","newPercentageState","percent","newStats","_updateIndicatorAutoHide","showIndicator","CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT","QUALITY_TO_WIDTH","colorClass","tip","showMoreStats","_onToggleShowMore","_getVisibilityClass","indicatorContainerClassNames","_getConnectionColorClass","_renderStatisticsTable","disablePopover","INACTIVE","INTERRUPTED","_getDisplayConfiguration","_getConnectionStatusTip","tipKey","IconConnectionInactive","iconWidth","emptyIconWrapperClassName","IconConnectionActive","createDesc","IObject","defined","USE_SYMBOL","dontParse","paramStr","paramParts","firstParam","decoded","_videoElement","_setVideoElement","volume","_attachTrack","_detachTrack","arrayWithHoles","iterableToArrayLimit","nonIterableRest","_defineProperties2","_freeze2","frameId","wrapperFn","_ScrollLock","_renderer","Twemoji","Emojione","EmojioneV4","_react2","_propTypes2","_renderer2","_objectWithoutProperties","emojione","oneOf","muteRemote","muteAllParticipants","onHoverIn","onHoverOut","TimeElapsed","_getMinutesCount","_getSecondsCount","timeElapsed","hourPassed","_createTimeDisplay","minutesPassed","secondsPassed","countNounKey","countType","SpeakerStatsItem","rowDisplayClass","hasLeft","speakerStatusClass","isDominantSpeaker","dominantSpeakerTime","SpeakerStatsLabels","getSpeakerStats","_updateStats","_updateInterval","_createStatsItem","statsModel","getTotalDominantSpeakerTime","isLocalStats","meString","_localDisplayName","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","run","runClearTimeout","Item","nextTick","argv","versions","cwd","chdir","umask","rng","bytesToUuid","_seedBytes","_nodeId","_clockseq","_lastMSecs","_lastNSecs","clockseq","msecs","nsecs","dt","tl","tmh","SET_FOLLOW_ME_MODERATOR","SET_FOLLOW_ME_STATE","setFollowMeModerator","FOLLOW_ME_COMMAND","_FOLLOW_ME_RECEIVED_TIMEOUT","nextOnStageTimeout","nextOnStageTimer","_getFollowMeState","filmstripVisible","nextOnStage","sharedDocumentVisible","_sendFollowMeCommand","newSelectedValue","sendCommandOnce","participantSendingCommand","setFollowMeState","isEtherpadVisible","documentManager","getSharedDocumentManager","toggleEtherpad","idOfParticipantToPin","_pinVideoThumbnailById","clickId","_onFollowMeCommand","defaultSharedVideoLink","updateInterval","SharedVideoManager","isSharedVideoShown","isPlayerAPILoaded","mutedWithUserInteraction","isSharedVideoVolumeOn","getPlayerState","YT","PlayerState","PLAYING","getVolume","isSharedVideoOwner","intervalId","shareButton","backButton","linkError","state0","sharedVideoUrl","urlValue","encodeURI","yVideoId","$1","goToState","state1","requestVideoLink","onSharedVideoStart","isLocalAudioMuted","localAudioMutedListener","onLocalAudioMuted","firstScriptTag","initialAttributes","onYouTubeIframeAPIReady","Player","videoId","playerVars","onPlayerReady","onPlayerStateChange","onPlayerError","processVideoUpdate","smartAudioMute","PAUSED","smartAudioUnmute","fireSharedVideoEvent","onVideoProgress","onVolumeChange","playVideo","getIframe","sharedVideo","SharedVideoContainer","errorInPlayer","isPlayerPaused","processTime","isAttrMuted","smartPlayerMute","setVolume","pauseVideo","forceSeek","seekTo","currentPosition","getCurrentTime","sendPauseEvent","onSharedVideoUpdate","onSharedVideoStop","userInteraction","isVideoUpdate","unMute","$iframe","fadeIn","bodyBackground","fadeOut","LOCAL_RECORDING_ENGAGED","LOCAL_RECORDING_UNENGAGED","LOCAL_RECORDING_STATS_UPDATE","LocalRecordingButton","isDialogShown","LocalRecordingLabel","isEngaged","RecordingAdapter","exportRecordedData","setMicDevice","_getAudioStream","mediaStream","OggAdapter","_initPromise","_initialize","_mediaRecorder","onstop","_recordedData","shouldEnable","_stream","getAudioTracks","MediaRecorder","ondataavailable","_saveMediaData","AbstractAudioContextAdapter","_audioContext","AudioContext","_sampleRate","sampleRate","_initializeAudioContext","_audioSource","createMediaStreamSource","_audioProcessingNode","createScriptProcessor","onaudioprocess","_connectAudioGraph","destination","_disconnectAudioGraph","_replaceMic","newStream","newSource","WAV_BITS_PER_SAMPLE","WavAdapter","_onAudioProcess","_wavBuffers","_wavLength","_exportMonoWAV","_isInitialized","_createWavHeader","dataLength","writeUTFBytes","setUint32","setUint16","channelLeft","inputBuffer","getChannelData","Float32Array","buffers","setUint8","inputBuffers","sampleCount","bufferCount","setInt16","floatTo16BitPCM","Blob","MAIN_THREAD_FINISH","MAIN_THREAD_INIT","MAIN_THREAD_NEW_DATA_ARRIVED","WORKER_LIBFLAC_READY","WORKER_BLOB_READY","DEBUG","FlacAdapter","_onWorkerMessage","_encoder","_stopPromiseResolver","postMessage","command","_loadWebWorker","_initWorkerPromiseResolver","onmessage","bps","terminate","exception1","exception2","highPrecisionTime","timing","navigationStart","SessionEventType","SESSION_STARTED","SEGMENT_STARTED","SEGMENT_ENDED","LOCAL_STORAGE_KEY","sessionManager","_loadMetadata","dataStr","dataObject","_sessionsMetadata","_saveMetadata","createSession","sessionToken","getSessions","sessionTokens","thisSession","newSessionInfo","segments","getSegments","removeSession","_constructSegments","beginSegment","getCurrentSegmentIndex","endSegment","sessionStartTime","currentSegment","gapBefore","lastSegment","currentEvent","COMMAND_START","COMMAND_STOP","COMMAND_PING","COMMAND_PONG","PROPERTY_STATS","RECORDING_FORMATS","DEFAULT_RECORDING_FORMAT","ControllerState","IDLE","STARTING","RECORDING","STOPPING","FAILED","recordingController","registerEvents","getParticipantsStats","_onStartCommand","_onStopCommand","_onPingCommand","_doStartRecording","_doStopRecording","_switchToNewSession","_registered","delegate","_onStateChanged","_onNotify","_onWarning","removeCommand","_getRandomToken","_currentSessionToken","downloadRecordedData","_adapters","blob","fileName","base64Url","createObjectURL","click","downloadBlob","_micDeviceId","_isMuted","switchFormat","newFormat","getLocalStats","currentSessionToken","isRecording","recordedBytes","recordedLength","members","member","recordingStats","isSelf","_changeState","messageParams","_createRecordingAdapter","durationString","_timer","_prevState","nowTime","_getDuration","recordingEngagedAt","statsUpdate","_renderModeratorControls","_renderDurationAndFormat","encodingFormat","_renderStats","_renderStatsHeader","_renderStatsLine","lineKey","statusClass","_onStop","_onStart","localRecording","onStateChanged","startTime","localRecordingEngaged","onWarning","onNotify","successCallback","cancelCallback","loginButtons","finishedButtons","states","login","jid","username","connDialog","finished","errorMessageElem","onAuthNow","submitValue","bitmap","$keys","enumBugKeys","px","MATCH_OPERATOR_REGEXP","nextKey","EXITING","ENTERED","ENTERING","EXITED","UNMOUNTED","PropTypes","_reactDom2","_reactLifecyclesCompat","parentGroup","transitionGroup","isMounting","initialStatus","appearStatus","nextCallback","getDerivedStateFromProps","updateStatus","nextStatus","cancelNextCallback","getTimeouts","mounting","performEnter","performExit","appearing","timeouts","safeSetState","onEntering","onTransitionEnd","onExiting","setNextCallback","childProps","cloneElement","polyfill","_ChildMapping","handleExited","firstRender","appeared","prevChildMapping","getInitialChildMapping","getNextChildMapping","currentChildMapping","getChildMapping","childFactory","_iterator2","_symbol2","angry","blush","broken_heart","confused","cry","frowning","imp","innocent","joy","kissing","laughing","neutral_face","open_mouth","rage","smile","smiley","smiling_imp","sob","stuck_out_tongue","sunglasses","sweat","sweat_smile","unamused","wink","Poker","_pokerClasses","_fontPercentage","_folded","flagBackgroundColor","normal","success","flagBorderColor","flagTextColor","flagShadowColor","flagFocusRingColor","shared","DismissButton","Description","isExpanded","Expander","isAnimating","childrenIfExpanded","handleTransitionEnd","Action","hasDivider","useMidDot","FlagActions","linkComponent","isBold","DEFAULT_APPEARANCE","getUniqueId","Flag","onDismissed","ChevronIcon","ButtonIcon","buttonLabel","buttonAction","toggleExpand","dismissFlag","focusRingColor","_this$props3","autoDismissProps","OptionalDismissButton","renderToggleOrDismissButton","renderBody","handleMouseDown","AbstractNotification","_onDismissed","_getDescription","descriptionArray","ICON_COLOR","_mapAppearanceToButtons","_renderDescription","_mapAppearanceToIcon","_onOpenSupportLink","secIconColor","flagWidth","exitXPosition","animationEnter","animationLeave","transitionState","SROnly","h1","Inner","FlagGroup","renderChildren","AbstractNotificationsContainer","_notificationDismissTimeout","_manageDismissTimeout","_notifications","autoDismissTimeout","_clearNotificationDismissTimeout","ENFORCE_NOTIFICATION_AUTO_DISMISS_TIMEOUT","_iAmSipGateway","_renderFlags","AbstractKickButton","IconKick","KickRemoteParticipantDialog","RemoteVideoMenuButton","buttonText","displayClass","linkClassName","HIDE_KICK_BUTTON_FOR_GUESTS","AbstractKickRemoteParticipantDialog","AbstractMuteButton","MuteRemoteParticipantDialog","_audioTrackMuted","muteConfig","muteClassName","AbstractMuteRemoteParticipantDialog","_getTranslations","whom","IconMuteEveryoneElse","PrivateMessageMenuButton","_hidden","DISABLE_PRIVATE_MESSAGES","REMOTE_CONTROL_MENU_STATES","NOT_SUPPORTED","NOT_STARTED","REQUESTING","STARTED","RemoteControlButton","remoteControlState","IconRemoteControlStart","IconRemoteControlStop","RemoteVideoMenu","RemoteVideoMenuTriggerButton","_onShowRemoteMenu","_renderRemoteVideoMenu","onPopoverOpen","menuPosition","onMenuDisplay","_disableKick","_disableRemoteMute","_isModerator","initialVolumeValue","onRemoteControlToggle","initialValue","disableKick","VOLUME_SLIDER_SCALE","VolumeSlider","volumeLevel","_onVolumeChange","IconVolume","AbstractAudio","setAudioElementImpl","_audioElementImpl","sinkId","_onCanPlayThrough","onCanPlayThrough","currentTime","_maybeSetAudioElementImpl","_audioFileLoaded","DISCO_JIBRI_FEATURE","connectionConfig","issuer","JitsiConnection","addFeature","handleConnectionEstablished","handleConnectionFailed","connectionFailedHandler","checkForAttachParametersAndConnect","XMPPAttachInfo","attachOptions","usernameOverride","passwordOverride","AuthHandler","_inheritsLoose","_Icon","ChevronDownIcon","_default","withDefaultProps","WINDOW","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","COMMON_JS","JS_MD5_NO_COMMON_JS","AMD","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","HEX_CHARS","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","Uint32Array","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","createOutputMethod","outputType","Md5","createMethod","nodeWrap","eval","nodeMethod","createHash","digest","sharedMemory","h0","h2","h3","bytes","finalized","hashed","notString","lastByteIndex","finalize","bc","da","base64","v2","v3","base64Str","Card","Table","RemoteControlParticipant","sendRemoteControlEndpointMessage","onDataChannelFail","sendEndpointMessage","OPEN_KEYBOARD_SHORTCUTS_DIALOG","HORIZONTAL_SPACING","inprogress","moved","new","removed","boldBackgroundColor","boldTextColor","Lozenge","KeyboardShortcutsDialog","shortcuts","shortcutDescriptions","_renderShortcutsListItem","keyboardKey","SET_ASPECT_RATIO","ASPECT_RATIO_NARROW","clientResized","BLUR_ENABLED","BLUR_DISABLED","createBlurEffect","blurDisabled","VideoBlurButton","IconBlurBackground","_isVideoBlurred","blurEffectInstance","setEffect","SET_COLOR_SCHEME","errorText","localMsgBackground","privateMsgBackground","privateMsgNotice","remoteMsgBackground","replyBorder","replyIcon","inviteButtonBackground","onVideoText","border","buttonBackground","statusBar","statusBarContent","activeParticipantHighlight","activeParticipantTint","buttonToggled","buttonToggledBorder","_schemedStyles","schemedStyle","_applyColorScheme","_styleTemplates","styleName","styleValue","_getColor","colorDefinition","colorScheme","defaultScheme","_defaultTheme","SET_JWT","parseJWTFromURLParams","_setConfigOrLocationURL","actionPayload","jwtPayload","jwtDecode","_user2participant","newProperties","_overwriteLocalParticipant","_undoOverwriteLocalParticipant","_setJWT","PIXEL_LOWER_BOUND","POLL_INTERVAL","SET_INTERVAL","CLEAR_INTERVAL","INTERVAL_TIMEOUT","timerWorkerScript","ScreenshotCaptureEffect","_currentCanvas","_currentCanvasContext","_handleWorkerAction","_initScreenshotCapture","_streamWorker","startEffect","desktopTrack","getVideoTracks","getSettings","getConstraints","_streamHeight","_streamWidth","srcObject","stopEffect","storedCanvasContext","getImageData","_storedImageData","timeMs","_handleScreenshot","_shouldProcessScreenshot","nbPixels","diffPixels","pixelmatch","getMeetingUniqueId","MediaStreamTrack","SET_SHARED_VIDEO_STATUS","TOGGLE_SHARED_VIDEO","setSharedVideoStatus","DIALOG_TO_PADDING_POSITION","_mapPositionToPaddingClass","Popover","_onHideDialog","_onShowDialog","_renderContent","PlayerListEntry","Game","_nicks","WorkerGlobalScope","return","toByteArray","fromByteArray","write","LN2","isEncoding","readUInt16BE","A","T","SlowBuffer","alloc","INSPECT_MAX_BYTES","kMaxLength","TYPED_ARRAY_SUPPORT","foo","species","poolSize","allocUnsafeSlow","_isBuffer","compare","swap16","swap32","swap64","subarray","readUIntLE","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","clientSecret","selectUser","selectAdmin","getClientId","getClientSecret","getRpcRequest","getDownloadRequest","getUploadRequest","getAccessToken","rpcRequest","Authorization","downloadRequest","fileBlob","fileBinary","uploadRequest","DropboxTeam","lastDigit","last2Digits","processRelativeTime","monthsParseExact","weekdaysParseExact","monthsShortDot","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","standalone","monthsNominative","monthsSubjective","plural","momentToFormat","relativeTimeWithPlural","forms","lll","llll","suffixes","70","80","50","100","30","60","90","ll","dPs","createDict","iframeDocument","Properties","def","TAG","stat","LIBRARY","wksExt","$Symbol","preventTouchMove","allowTouchMove","preventInertiaScroll","totalScroll","currentScroll","isTouchDevice","maxTouchPoints","getPadding","currentPadding","paddingRight","camelToKebab","getWindowHeight","getDocumentHeight","injectStyles","insertStyleTag","ieee754","createBuffer","encodingOrOffset","fromArrayLike","fromArrayBuffer","encoding","actual","fromString","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","valLength","foundIndex","hexWrite","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","hi","lo","utf16leToBytes","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","typedArraySupport","_augment","thisStart","thisEnd","thisCopy","targetCopy","toHex","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","mul","sub","targetStart","INVALID_BASE64_RE","leadSurrogate","stringtrim","base64clean","dst","oDataQueryNames","DEFAULT_VERSION","GRAPH_BASE_URL","PACKAGE_VERSION","SUSPEND_DETECTED","SET_TRANSPORT","setTransport","onSuspendDetected","notifySuspendDetected","_setTransport","_suspendDetected","define","hBytes","ReactIs","REACT_STATICS","contextType","getDefaultProps","getDerivedStateFromError","mixins","KNOWN_STATICS","caller","MEMO_STATICS","TYPE_STATICS","getStatics","isMemo","ForwardRef","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","nullptn","formatptn","colonptn","cursorptn","transformptn","animationptn","propertiesptn","elementptn","selectorptn","andptn","escapeptn","invalidptn","keyframeptn","plcholdrptn","readonlyptn","beforeptn","afterptn","tailptn","whiteptn","pseudoptn","writingptn","supportsptn","propertyptn","selfptn","pseudofmt","dimensionptn","imgsrcptn","webkit","moz","SEMICOLON","CLOSEBRACES","OPENBRACES","OPENPARENTHESES","CLOSEPARENTHESES","OPENBRACKET","CLOSEBRACKET","NEWLINE","CARRIAGE","TAB","AT","SPACE","AND","DASH","UNDERSCORE","STAR","COMMA","COLON","SINGLEQUOTE","DOUBLEQUOTE","FOWARDSLASH","GREATERTHAN","PLUS","TILDE","NULL","FORMFEED","VERTICALTAB","KEYFRAME","MEDIA","SUPPORTS","READONLY","IMPORT","CHARSET","DOCUMENT","PAGE","column","line","preserve","plugins","plugged","should","POSTS","PREPS","UNKWN","PROPS","BLCKS","ATRUL","unkwn","keyed","nscopealt","nscope","compile","bracket","comment","parentheses","trail","peak","atrule","pseudo","caret","insert","eof","eol","char","flat","delimited","supports","vendor","elements","isolate","selectors","third","declare","minify","plugin","timeoutId","clearTimer","rootChild","rr","__export","common_1","GraphRequest_1","debugLogging","defaultVersion","clientOptions","graphClient","GraphRequest","YAHOO","superclass","CryptoJS","lib","Base","mixIn","$super","WordArray","sigBytes","enc","Hex","Latin1","Utf8","BufferedBlockAlgorithm","_nDataBytes","_append","_process","blockSize","_minBufferSize","_doProcessBlock","Hasher","cfg","_doReset","_doFinalize","_createHelper","_createHmacHelper","HMAC","algo","x64","Word","toX32","Cipher","Base64","EvpKDF","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","_xformMode","keySize","ivSize","encrypt","decrypt","StreamCipher","_iv","_prevBlock","BlockCipherMode","Encryptor","Decryptor","_cipher","processBlock","encryptBlock","decryptBlock","CBC","Pkcs7","unpad","BlockCipher","iv","_mode","CipherParams","formatter","OpenSSL","ciphertext","salt","SerializableCipher","algorithm","_parse","kdf","execute","compute","PasswordBasedCipher","z","AES","_nRounds","_keySchedule","_invKeySchedule","_doCryptBlock","_lBlock","_rBlock","268435456","536870912","805306368","1073741824","1342177280","1610612736","1879048192","2147483648","2415919104","2684354560","2952790016","3221225472","3489660928","3758096384","4026531840","134217728","402653184","671088640","939524096","1207959552","1476395008","1744830464","2013265920","2281701376","2550136832","2818572288","3087007744","3355443200","3623878656","3892314112","4160749568","268435457","536870913","805306369","1073741825","1342177281","1610612737","1879048193","2147483649","2415919105","2684354561","2952790017","3221225473","3489660929","3758096385","4026531841","134217729","402653185","671088641","939524097","1207959553","1476395009","1744830465","2013265921","2281701377","2550136833","2818572289","3087007745","3355443201","3623878657","3892314113","4160749569","16777216","33554432","50331648","67108864","83886080","100663296","117440512","150994944","167772160","184549376","201326592","218103808","234881024","251658240","8388608","25165824","41943040","58720256","75497472","92274688","109051904","125829120","142606336","159383552","176160768","192937984","209715200","226492416","243269632","260046848","285212672","301989888","318767104","335544320","352321536","369098752","385875968","419430400","436207616","452984832","469762048","486539264","503316480","520093696","276824064","293601280","310378496","327155712","343932928","360710144","377487360","394264576","411041792","427819008","444596224","461373440","478150656","494927872","511705088","528482304","1048576","2097152","3145728","4194304","5242880","6291456","7340032","9437184","10485760","11534336","12582912","13631488","14680064","15728640","524288","1572864","2621440","3670016","4718592","5767168","6815744","7864320","8912896","9961472","11010048","12058624","13107200","14155776","15204352","16252928","17825792","18874368","19922944","20971520","22020096","23068672","24117248","26214400","27262976","28311552","29360128","30408704","31457280","32505856","17301504","18350080","19398656","20447232","21495808","22544384","23592960","24641536","25690112","26738688","27787264","28835840","29884416","30932992","31981568","33030144","65536","131072","196608","262144","327680","393216","458752","589824","655360","720896","786432","851968","917504","983040","32768","98304","163840","229376","294912","360448","425984","491520","557056","622592","688128","753664","819200","884736","950272","1015808","1114112","1179648","1245184","1310720","1376256","1441792","1507328","1638400","1703936","1769472","1835008","1900544","1966080","2031616","1081344","1146880","1212416","1277952","1343488","1409024","1474560","1540096","1605632","1671168","1736704","1802240","1867776","1933312","1998848","2064384","4096","8192","12288","16384","20480","24576","28672","36864","40960","45056","49152","53248","57344","61440","2048","6144","10240","14336","18432","22528","26624","30720","34816","38912","43008","47104","51200","55296","59392","63488","69632","73728","77824","81920","86016","90112","94208","102400","106496","110592","114688","118784","122880","126976","67584","71680","75776","79872","83968","88064","92160","96256","100352","104448","108544","112640","116736","120832","124928","129024","256","512","768","1024","1280","1536","1792","2304","2560","2816","3072","3328","3584","3840","128","384","640","896","1152","1408","1664","1920","2176","2432","2688","2944","3200","3456","3712","3968","4352","4608","4864","5120","5376","5632","5888","6400","6656","6912","7168","7424","7680","7936","4224","4480","4736","4992","5248","5504","5760","6016","6272","6528","6784","7040","7296","7552","7808","8064","32","48","64","96","112","144","160","176","192","208","224","240","24","40","56","72","88","104","120","136","152","168","184","200","216","232","248","272","288","304","320","336","352","368","400","416","432","448","464","480","496","264","280","296","312","328","344","360","376","392","408","424","440","456","472","488","504","2147483650","2147483651","2147483652","2147483653","2147483654","2147483655","2147483656","2147483657","2147483658","2147483659","2147483660","2147483661","2147483662","2147483663","23","25","26","27","28","29","31","2147483664","2147483665","2147483666","2147483667","2147483668","2147483669","2147483670","2147483671","2147483672","2147483673","2147483674","2147483675","2147483676","2147483677","2147483678","2147483679","DES","_subKeys","_invSubKeys","TripleDES","_des1","_des2","_des3","_map","sin","MD5","_hash","HmacMD5","SHA1","HmacSHA1","SHA256","HmacSHA256","SHA224","HmacSHA224","ea","SHA512","H","I","J","X","K","Z","N","aa","ba","ca","Q","V","fa","HmacSHA512","SHA384","HmacSHA384","RIPEMD160","HmacRIPEMD160","_hasher","_oKey","_iKey","PBKDF2","hasher","iterations","dbits","b64map","b64pad","hex2b64","b64tohex","int2char","b64toBA","BigInteger","fromNumber","nbi","am","DB","DM","DV","FV","F1","F2","vv","BI_RM","BI_RC","intAt","nbv","fromInt","nbits","Classic","Montgomery","mp","invDigit","mpl","mph","um","mt2","op_and","op_or","op_xor","op_andnot","lbit","cbit","NullExp","nNop","Barrett","r2","q3","ONE","dlShiftTo","mu","compareTo","mod","revert","divRemTo","mulTo","multiplyTo","sqrTo","squareTo","ZERO","subTo","copyTo","drShiftTo","fromRadix","lShiftTo","rShiftTo","isEven","toRadix","bitLength","modPowInt","multiplyUpperTo","multiplyLowerTo","dAddOffset","lowprimes","lplim","Arcfour","chunkSize","signum","intValue","dMultiply","testBit","bitwiseTo","shiftLeft","isProbablePrime","nextBytes","changeBit","addTo","modInt","millerRabin","getLowestSetBit","shiftRight","modPow","byteValue","shortValue","and","or","andNot","not","bitCount","setBit","clearBit","flipBit","divideAndRemainder","modInverse","gcd","square","rng_state","rng_pool","rng_pptr","rng_psize","rng_seed_time","rng_seed_int","msCrypto","ua","appVersion","rng_get_byte","SecureRandom","parseBigInt","oaep_mgf1_arr","RSAKey","dmp1","dmq1","coeff","oaep_mgf1_str","ECFieldElementFp","ECPointFp","curve","zinv","ECCurveFp","fromBigInteger","infinity","doPublic","setPublic","isPublic","isPrivate","pkcs1pad2","encryptOAEP","MessageDigest","Util","getCanonicalAlgName","getHashLength","hextorstr","hashHex","rstrtohex","oaep_pad","doPrivate","setPrivate","setPrivateEx","generate","pkcs1unpad2","decryptOAEP","oaep_unpad","toBigInteger","getX","getY","isInfinity","twice","getInfinity","multiplyTwo","getQ","getA","getB","decodePointHex","getByteLength","getEncoded","toByteArrayUnsigned","decodeFrom","decodeFromHex","add2D","twice2D","multiply2D","isOnCurve","validate","jsonParse","asn1","ASN1Util","integerToByteHex","bigIntToMinTwosComplementsHex","getPEMStringFromHex","hextopem","newObject","DERBoolean","DERInteger","DERBitString","DEROctetString","DERNull","DERObjectIdentifier","DEREnumerated","DERUTF8String","DERNumericString","DERPrintableString","DERTeletexString","DERIA5String","DERUTCTime","DERGeneralizedTime","DERSequence","DERSet","DERTaggedObject","explicit","jsonToASN1HEX","getEncodedHex","oidHexToInt","oidIntToHex","ASN1Object","getLengthHexFromValue","hV","hTLV","isModified","getFreshValueHex","hL","hT","getValueHex","DERAbstractString","getString","setString","utf8tohex","setStringHex","DERAbstractTime","localDateToUTC","formatDate","zeroPadding","getHours","getMinutes","getSeconds","getMilliseconds","stohex","setByDateValue","setByDate","DERAbstractStructured","setByASN1ObjectArray","asn1Array","appendASN1Object","setByBigInteger","setByInteger","setValueHex","bigint","setHexValueIncludingUnusedBits","setUnusedBitsAndHexValue","setByBinaryString","setByBooleanArray","newFalseArray","bin","setValueOidString","setValueName","x509","OID","name2oid","oid","withMillis","millis","sortFlag","sortflag","isExplicit","asn1Object","setASN1Object","utf8tob64u","ASN1HEX","stoBA","BAtos","BAtohex","b64tob64u","b64utob64","hextob64u","b64utohex","uricmptohex","encodeURIComponentAll","hextoutf8","hextouricmp","hextob64","hextob64nl","b64nltohex","pemtohex","zulutomsec","zulutosec","ipv6tohex","hextoipv6","hextoip","hextoposhex","intarystrtohex","getLblen","getL","getVblen","getVidx","getV","getTLV","getNextSiblingIdx","getChildIdx","getNthChildIdx","getIdxbyList","getTLVbyList","getVbyList","hextooidstr","dump","ommit_long_octet","isASN1HEX","oid2name","oidname","x509ExtName","isHex","Certificate","asn1SignatureAlg","asn1TBSCert","Signature","alg","nameAlg","prvKey","updateHex","hexSig","asn1Sig","setSignatureHex","getPEMString","tbscertobj","prvkeyobj","TBSCertificate","Time","X500Name","SubjectPublicKeyInfo","asn1Version","asn1SerialNumber","asn1Issuer","asn1NotBefore","asn1NotAfter","asn1Subject","asn1SubjPKey","extensionsArray","setSerialNumberByParam","setSignatureAlgByParam","AlgorithmIdentifier","setIssuerByParam","setNotBeforeByParam","setNotAfterByParam","setSubjectByParam","setSubjectPublicKey","setSubjectPublicKeyByGetKey","KEYUTIL","getKey","appendExtension","appendExtensionByName","Extension","appendByNameToArray","getExtnValueHex","critical","BasicConstraints","KeyUsage","CRLDistributionPoints","ExtKeyUsage","AuthorityKeyIdentifier","AuthorityInfoAccess","SubjectAltName","IssuerAltName","X509","KEYUSAGE_NAME","asn1ExtnValue","cA","pathLen","setByDPArray","setByOneURI","GeneralNames","DistributionPointName","DistributionPoint","dpobj","setPurposeArray","asn1KID","asn1CertIssuer","asn1CertSN","setKIDByParam","setCertIssuerByParam","setCertSNByParam","kid","sn","setAccessDescriptionArray","accessMethod","GeneralName","accessLocation","setNameArray","CRL","asn1TBSCertList","sig","prov","tbsobj","TBSCertList","setThisUpdateByParam","asn1ThisUpdate","setNextUpdateByParam","asn1NextUpdate","addRevokedCert","CRLEntry","aRevokedCert","setCertSerial","setRevocationDate","TLV","setByString","RDN","setByLdapString","ldapToOneline","setByObject","ldapstr","certissuer","getIssuerHex","certsubject","getSubjectHex","onelineToLDAP","addByString","AttributeTypeAndValue","addByMultiValuedString","parseString","setByAttrTypeAndValueStr","typeObj","atype2obj","valueObj","getValueObj","ECDSA","DSA","getASN1Object","asn1AlgId","setPubKey","seq","curveName","asn1params","pubKeyHex","setTimeParams","timeParams","asn1Alg","asn1Params","paramEmpty","name2obj","paramempty","rfc822","dns","dn","setByParam","ldapdn","certsubj","asn1Obj","setByParamArray","asn1V","isPrototypeOf","asn1DP","atype2oidList","CN","ST","OU","STREET","DC","UID","SN","DN","businessCategory","postalCode","serialNumber","uniqueIdentifier","organizationIdentifier","jurisdictionOfIncorporationL","jurisdictionOfIncorporationSP","jurisdictionOfIncorporationC","name2oidList","sha1","sha256","sha384","sha512","sha224","md2","ripemd160","MD2withRSA","MD4withRSA","MD5withRSA","SHA1withRSA","SHA224withRSA","SHA256withRSA","SHA384withRSA","SHA512withRSA","SHA1withECDSA","SHA224withECDSA","SHA256withECDSA","SHA384withECDSA","SHA512withECDSA","dsa","SHA1withDSA","SHA224withDSA","SHA256withDSA","rsaEncryption","commonName","localityName","stateOrProvinceName","streetAddress","organizationName","organizationalUnitName","domainComponent","surname","distinguishedName","emailAddress","subjectKeyIdentifier","keyUsage","subjectAltName","issuerAltName","basicConstraints","nameConstraints","cRLDistributionPoints","certificatePolicies","authorityKeyIdentifier","policyConstraints","extKeyUsage","authorityInfoAccess","ocsp","caIssuers","anyExtendedKeyUsage","serverAuth","clientAuth","codeSigning","emailProtection","timeStamping","ocspSigning","ecPublicKey","secp256r1","secp256k1","secp384r1","pkcs5PBES2","pkcs5PBKDF2","tstinfo","extensionRequest","objCache","oid2atype","X509Util","newCertPEM","serial","sigalg","notbefore","notafter","sbjpubkey","cakey","sighex","cms","Attribute","attrTypeOid","valueList","ContentType","eciObj","EncapsulatedContentInfo","hashAlg","eContentValueHex","SigningTime","SigningCertificate","setCerts","IssuerAndSerialNumber","cert","SigningCertificateV2","setByCertPEM","dIssuer","getSerialNumberHex","dSerial","AttributeList","SignerInfo","SignedData","dCMSVersion","dSignerIdentifier","dDigestAlgorithm","dSignedAttrs","dSigAlg","dSig","dUnsignedAttrs","setSignerIdentifier","setForContentAndHash","sdObj","digestAlgNameList","addUnsigned","dEContentType","dEContent","isDetached","setContentType","setContentValue","setContentValueHex","setContentValueStr","ContentInfo","dContentType","dContent","dDigestAlgs","dEncapContentInfo","dCerts","certificateList","crlList","signerInfoList","addCertificatesByPEM","getContentInfo","getContentInfoEncodedHex","getPEM","CMSUtil","newSignedData","cades","SignaturePolicyIdentifier","certs","signerInfos","attrName","signerCert","sAttr","signerPrvKey","sigAlg","verifySignedData","signerid_issuer1","signerid_serial1","hashalg","idxSignedAttrs","sigval","signedAttrIdxList","saSigningTime","saMessageDigest","verifyDetail","econtent","validMessageDigest","certsIdx","certkeys","readCertHex","getPublicKey","cccc","cccci","certkey_idx","validSignatureValue","signedattrshex","verify","validSignatureValue_isValid","cmsType","revinfosIdx","signerinfosIdx","signerInfoIdxList","tsp","Accuracy","micros","MessageImprint","dHashAlg","dHashValue","hashValue","TimeStampReq","dVersion","dMessageImprint","dPolicy","dNonce","certReq","setMessageImprint","mi","policy","certreq","TSTInfo","dSerialNumber","dGenTime","dAccuracy","dOrdering","dTsa","messageImprint","genTime","accuracy","tsa","TimeStampResp","PKIStatusInfo","dStatus","dTST","tst","PKIStatus","PKIFreeText","PKIFailureInfo","dStatusString","dFailureInfo","statstr","failinfo","granted","grantedWithMods","rejection","waiting","revocationWarning","revocationNotification","textList","badAlg","badRequest","badDataFormat","timeNotAvailable","unacceptedPolicy","unacceptedExtension","addInfoNotAvailable","systemFailure","AbstractTSAAdapter","getTSTHex","SimpleTSAAdapter","tstInfo","TSPUtil","newTimeStampToken","FixedTSAAdapter","parseTimeStampReq","parseMessageImprint","OtherHashAlgAndValue","dAlg","dHash","SignatureTimeStamp","tstHex","CompleteCertificateRefs","setByArray","OtherCertID","hasIssuerSerial","dOtherCertHash","dIssuerSerial","OtherHash","hasis","dOtherHash","CAdESUtil","addSigTS","parseSignedDataForAddingUnsigned","algs","encapcontent","revs","si","parseSignerInfoForAddingUnsigned","digalg","sattrs","csr","CertificationRequest","asn1CSRInfo","csrinfo","CertificationRequestInfo","CSRUtil","newCSRPEM","sbjprvkey","getInfo","hex2dn","pubkey","DEFAULT_HASH","CertID","dIssuerNameHash","dIssuerKeyHash","setByValue","setByCert","readCertPEM","getPublicKeyHex","hoge","issuerCert","subjectCert","namehash","keyhash","Request","dReqCert","dExt","TBSRequest","dRequestorName","dRequestList","dRequestExt","setRequestListByParam","reqList","OCSPRequest","dTbsRequest","dOptionalSignature","OCSPUtil","getRequestHex","getOCSPResponseInfo","responseStatus","certStatus","revocationTime","thisUpdate","nextUpdate","isBase64","isBase64URL","isIntegerArray","DIGESTINFOHEAD","DEFAULTPROVIDER","hmacmd5","hmacsha1","hmacsha224","hmacsha256","hmacsha384","hmacsha512","hmacripemd160","RIPEMD160withRSA","MD5withECDSA","RIPEMD160withECDSA","MD5withRSAandMGF1","SHA1withRSAandMGF1","SHA224withRSAandMGF1","SHA256withRSAandMGF1","SHA384withRSAandMGF1","SHA512withRSAandMGF1","RIPEMD160withRSAandMGF1","CRYPTOJSMESSAGEDIGESTNAME","getDigestInfoHex","getPaddedDigestInfoHex","hashString","digestString","digestHex","sha256Hex","sha512Hex","SECURERANDOMGEN","getRandomHexOfNbytes","getRandomBigIntegerOfNbytes","getRandomHexOfNbits","getRandomBigIntegerOfNbits","getRandomBigIntegerZeroToMax","getRandomBigIntegerMinToMax","setAlgAndProvider","md","updateString","sjcl","codec","toBits","fromBits","algName","provName","HASHLENGTH","Mac","algProv","mac","pass","doFinal","doFinalString","doFinalHex","utf8","rstr","b64","b64u","_setAlgNames","mdAlgName","pubkeyAlgName","_zeroPaddingOfSignature","pubKey","sHashHex","ecprvhex","eccurvename","hSign","signHex","signWithMessageHashPSS","pssSaltLen","signWithMessageHash","signString","ecpubhex","verifyHex","verifyWithMessageHashPSS","verifyWithMessageHash","algProvName","initParams","psssaltlen","prvkeypem","prvkeypas","getAlgByKeyAndName","oidhex2name","getBigRandom","setNamedCurve","ecparams","ECParameterDB","getByName","prvKeyHex","setPrivateKeyHex","setPublicKeyHex","getPublicKeyXYHex","keylen","getShortNISTPCurveName","generateKeyPairHex","biRSSigToASN1Sig","fromByteArrayUnsigned","serializeSig","parseSigHex","verifyRaw","Bitcoin","parseSig","toByteArraySigned","parseSigCompact","readPKCS5PrvKeyHex","readPKCS8PrvKeyHex","readPKCS8PubKeyHex","readCertPubKeyHex","prv","pub","parseSigHexInHexRS","asn1SigToConcatSig","concatSigToASN1Sig","hexRSSigToASN1Sig","regist","setPrivateHex","setPublicHex","parseASN1Signature","proc","eproc","ivlen","cipher","ivsalt","keyhex","ivhex","parsePKCS5PEM","getKeyAndUnusedIvByPasscodeAndIvsalt","decryptKeyB64","getDecryptedKeyHex","getEncryptedPKCS5PEMFromPrvKeyHex","parseHexOfEncryptedPKCS8","encryptionSchemeAlg","encryptionSchemeIV","pbkdf2Salt","pbkdf2Iter","getPBKDF2KeyHexFromParam","_getPlainPKCS8HexFromEncryptedPKCS8PEM","getKeyFromEncryptedPKCS8PEM","getKeyFromPlainPrivatePKCS8Hex","parsePlainPrivatePKCS8Hex","algoid","algparam","keyidx","getKeyFromPlainPrivatePKCS8PEM","_getKeyFromPublicPKCS8Hex","parsePublicRawRSAKeyHex","parsePublicPKCS8Hex","xy","kty","dp","dq","co","qi","crv","getPublicKeyFromCertHex","getPublicKeyFromCertPEM","generateKeypair","prvKeyObj","pubKeyObj","octstr","bitstr","getKeyFromCSRPEM","getKeyFromCSRHex","parseCSRHex","p8pubkeyhex","getJWKFromKey","getPosArrayOfChildrenFromHex","getHexValueArrayOfChildrenFromHex","readPrivateKeyFromPEMString","readPKCS5PubKeyHex","_RE_HEXDECONLY","pss_mgf1_str","_rsasign_getAlgNameAndHashFromHexDisgestInfo","foffset","aExtInfo","getVersion","getSignatureAlgorithmField","getIssuerString","getSubjectString","getNotBefore","getNotAfter","getPublicKeyIdx","getPublicKeyContentIdx","getSignatureAlgorithmName","getSignatureValueHex","verifySignature","parseExt","vidx","getExtInfo","getExtBasicConstraints","getExtKeyUsageBin","getExtKeyUsageString","getExtSubjectKeyIdentifier","getExtAuthorityKeyIdentifier","getExtExtKeyUsageName","getExtSubjectAltName","getExtSubjectAltName2","getExtCRLDistributionPointsURI","getExtAIAInfo","caissuer","getExtCertificatePolicies","cps","unotice","signPSS","verifyPSS","SALT_LEN_HLEN","SALT_LEN_MAX","SALT_LEN_RECOVER","hex2rdn","hex2attrTypeValue","getPublicKeyInfoPropOfCertPEM","isSafeJSONString","parseJWS","parsedJWS","sigvalH","headB64U","payloadB64U","sigvalB64U","sigvalBI","headS","payloadS","jwsalg2sigalg","hASN1Sig","headerObj","payloadObj","headerPP","payloadPP","sigHex","verifyJWT","inArray","includedArray","IntDate","getNow","verifyAt","gracePeriod","iat","jti","HS256","HS384","HS512","RS256","RS384","RS512","ES256","ES384","PS256","PS384","PS512","getEncodedSignatureValueFromJWS","getJWKthumbprint","getZulu","intDate2UTCString","toUTCString","intDate2Zulu","getUTCHours","getUTCSeconds","JWSJS","aHeader","sPayload","aSignature","initWithJWS","addSignature","verifyAll","verifyNth","readJWSJS","signatures","aSignatures","stob64","stob64u","b64utos","utf8tob64","b64toutf8","hextoArrayBuffer","ArrayBuffertohex","getUint8","zulutodate","datetozulu","getUTCMilliseconds","iptohex","newline_toUnix","newline_toDos","strdiffidx","DESKTOP_CONTAINER_TYPE","containerType","containers","videoContainer","_videoAspectRatio","_onVideoResolutionUpdate","_dominantSpeakerAvatarContainer","_dominantSpeakerPokerContainer","removePresenceLabel","updateInProcess","newStreamData","scheduleLargeVideoUpdate","isUserSwitch","updatePoker","wasUsersImageCached","isVideoRenderable","ACTIVE","showWatermark","overrideAndHide","updateParticipantConnStatusIndication","updatePresenceLabel","_setRemoteConnectionMessage","showRemoteConnectionMessage","getContainer","AudioLevels","presenceLabelContainer","connStatus","msgOptions","oldContainer","currentAspectRatio","rank","wildValue","canDisqualify","cardPool","suits","wilds","sfLength","alwaysQualifies","lowestQualified","obj1","key1","handRank","handValues","isPossible","hand","checkCardsLength","wildStatus","setRanks","wild","picks","excluding","qualifiesHigh","highestRank","lose","loseTo","nonWilds","StraightFlush","resetWildCards","possibleStraight","nonCards","getCardsForFlush","sfQualify","descr","stripWilds","straight","Straight","RoyalFlush","NaturalRoyalFlush","WildRoyalFlush","FiveOfAKind","getNumCardsByRank","nextHighest","cardsInHand","FourOfAKindPairPlus","FourOfAKind","noKickers","FourWilds","ThreeOfAKindTwoPair","FullHouse","Flush","checkCards","wheelStatus","getWheel","wildCount","getGaps","checkHandLength","wildCards","cardsToCheck","gapCards","cardsList","gapCount","prevCard","stripReturn","wheelCards","cardFound","TwoThreeOfAKind","ThreeOfAKind","ThreePair","TwoPair","OnePair","HighCard","PaiGowPokerHelper","baseHand","hiHand","loHand","loGame","hiGame","hiCards","loCards","handValue","sfReturn","altGame","altHand","altRank","getSFData","possibleSF","possibleLoCards","bestLoCards","bestHand","handsToCheck","compareHands","banker","qualifiesValid","hiWinner","loWinner","fullHand","splitHouseWay","gameRules","exportToGlobal","getNewAudioOutputDevice","selectedAudioOutputDeviceId","availableAudioOutputDevices","preferredAudioOutputDeviceId","getNewAudioInputDevice","localAudio","availableAudioInputDevices","selectedAudioInputDeviceId","selectedAudioInputDevice","disposed","isEnded","getNewVideoInputDevice","availableVideoInputDevices","selectedVideoInputDeviceId","selectedVideoInputDevice","getNewMediaDevicesAfterDeviceListChanged","isSharingScreen","createLocalTracksAfterDeviceListChanged","audioTrackError","videoTrackError","audioRequested","videoRequested","createAudioTrack","createVideoTrack","disptach","AudioMixerEffect","mixAudio","_mixAudio","sourceLocalTrack","_audioMixer","createAudioMixer","addMediaStream","SET_SCREENSHOT_CAPTURE","ongoingEffect","setScreenshotCapture","toggleScreenshotCaptureEffect","__webpack_amd_options__","webpackPolyfill","propIsEnumerable","test1","test2","test3","shouldUseNative","symbols","originalModule","consoleTransport","globalTransports","transportIdx","globalOptions","callerInfo","fileLocation","getCallerInfo","logPrefixes","fullLogParts","methods","LOG","WARN","symbolMap","numberMap","pluralForm","pluralize","relativeTimeWithMutation","mutationTable","softMutation","mutation","lastNumber","monthsNominativeEl","monthsGenitiveEl","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","weekEndings","0","isUpper","eifelerRegelAppliesToNumber","translateSingular","special","relativeTimeWithSingular","correctGrammaticalCase","wordKey","relativeTimeMr","numbersNouns","numberNoun","hundred","ten","one","numberAsNoun","processHoursFunction","makeEmptyFunction","emptyFunction","thatReturns","thatReturnsFalse","thatReturnsTrue","thatReturnsNull","thatReturnsThis","thatReturnsArgument","rnds8","rnds","byteToHex","bth","componentWillUpdate","__reactInternalSnapshotFlag","__reactInternalSnapshot","getSnapshotBeforeUpdate","isReactComponent","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate","newApiName","maybeSnapshot","snapshot","__suppressDeprecationWarning","classNamesShape","timeoutsShape","transitionTimeout","transitionType","timeoutPropName","enabledPropName","_propTypes","enterDone","enterActive","exitDone","exitActive","aFunction","toIObject","cof","redefine","Iterators","$iterCreate","setToStringTag","ITERATOR","BUGGY","returnThis","NAME","DEFAULT","IS_SET","FORCED","IteratorPrototype","getMethod","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","getKeys","ObjectProto","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","meta","KEY","NEED","fastKey","getWeak","onFreeze","hiddenKeys","pIE","gOPD","fails","es6_promise_1","ResponseHandler_1","RequestMethod_1","GraphHelper_1","_headers","urlComponents","oDataQueryParams","otherURLQueryParams","parsePath","headerKey","headerValue","rawPath","endOfHostStrPos","endOfVersionStrPos","queryStrPos","queryParams_1","queryParams_2","urlJoin","urlSegments","pre","buildFullUrl","createQueryString","addCsvQueryParamater","expand","filterStr","skipToken","responseType","_responseType","propertyValue","additionalProperties","allValues","sendRequestAndRouteResponse","RequestMethod","DELETE","Headers","PATCH","GraphHelper","serializeContent","post","POST","put","PUT","del","GET","routeResponseToPromise","routeResponseToCallback","handleFetch","convertResponseType","responseValue","ResponseHandler","configureRequest","getStream","options_1","getDefaultRequestHeaders","putStream","options_2","defaultHeaders_1","SdkVersion","defaultHeaders","queryDictionaryOrString","queryStr","queryKey","queryValue","resContents","buildGraphErrorFromResponseObject","defaultGraphError","ParseError","rawErr","buildGraphErrorFromErrorObject","statusCode","requestId","errObj","innerError","commands","initialScreenSharingState","audioAvailable","videoAvailable","onDesktopSharingEnabledChanged","toggleScreenSharing","isDesktopSharingEnabled","JitsiMeetConferenceEvents","onProxyConnectionEvent","feedback","toggleAudioMuted","toggleVideoMuted","toggleFilmstrip","showFeedbackDialog","changeLocalAvatarUrl","isLocalVideoMuted","_sendEvent","sendProxyConnectionEvent","notifyEndpointTextMessageReceived","displayname","notifyEmailChanged","notifyAudioMutedStatusChanged","notifyVideoMutedStatusChanged","notifyAudioAvailabilityChanged","notifyVideoAvailabilityChanged","notifyScreenSharingStatusChanged","BaseIndicator","iconContainerClassName","ButtonImpl","Linkify","componentDecorator","_componentDecorator","decoratedHref","decoratedText","Text","MeetingsList","meeting","rootClassName","_toDateString","_toTimeString","ScrollBlock","FixedTarget","fixedOffset","calculateFixedOffset","onPositioned","isAlwaysFixed","fixedRef","lockScroll","_this$state2","isTall","verticalPadding","SpinnerContainer","dropdownPadding","droplistItemTheme","halfFocusRing","dropOffset","Droplist","setContentWidth","handleEsc","_assertThisInitialize","dropContentRef","withinTrigger","withinContent","shouldAllowMultilineItems","isMenuFixed","handleContentRef","handleTriggerRef","lineHeightDefault","SelectWrapper","justify","TagGroup","alignment","tagHeightUnitless","tagHeight","buttonWidthUnitless","maxWidthUnitless","maxTextWidthUnitless","maxTextWidth","textColors","grey","tealLight","blueLight","greenLight","purpleLight","redLight","yellowLight","greyLight","backgroundColors","textColorHover","backgroundColorHover","gridSizeUnitless","colorRemoval","colorRemovalHover","backgroundColorRemoval","Span","markedForRemoval","isRounded","isRemoved","isRemoving","Chrome","spacebarOrEnter","chromeRef","onFocusChange","isLink","isRemovable","handleBlur","handleFocus","onKeyPress","handleKeyPress","COMMON_STYLES","linkStyles","Link","styledProps","LinkComponent","getLinkComponent","focusColor","RemoveButton","onRemoveAction","onHoverChange","removeText","removeAnimation","colorList","Tag","onBeforeRemoveAction","onAfterRemoveAction","hoverState","focusState","removeButtonText","safeColor","onAnimationEnd","handleRemoveComplete","handleFocusChange","handleHoverChange","handleRemoveRequest","Expand","TriggerDiv","appearancesMap","mapAppearanceToFieldBase","Trigger","filterValue","handleItemRemove","handleOnChange","handleTriggerClick","inputRefFunction","tagGroupRefFunction","activeBackgroundColor","hoverBackgroundColor","selectedBackgroundColor","activePrimaryTextColor","defaultPrimaryTextColor","disabledPrimaryTextColor","primaryPrimaryTextColor","selectedPrimaryTextColor","focusedStyles","activeStyles","primaryStyles","isPrimary","Anchor","InputWrapper","Before","After","allowMultiline","getInputBackground","isPressed","getInputFill","appearanceProps","supportsVoiceOver","Element","ariaProps","ariaRoles","option","radio","commonProps","handleClick","handleMouseOut","handleMouseOver","handleMouseUp","testingProps","consolidatedProps","inputTypes","onActivate","guardedActivate","hasInput","Input","elemAfter","tooltipDescription","itemContext","shouldHideSeparator","filterItems","trimmedValue","selectedValues","unselectedItems","matchingValue","isMatched","getNextFocusable","indexItem","footerIsFocusable","currentItem","footerShouldBeFocused","getPrevFocusable","groupItems","firstItem","convertToGroupType","Heading","HeadingAfter","HeadingText","DroplistGroup","getAriaLabel","afterText","headingElement","Group","NoMatch","hasFooter","renderMessageForEmptyList","focusedItemIndex","handleItemSelect","shouldAllowCreateItem","renderedGroups","groupIndex","filteredItems","itemIndex","getAllValues","StatelessMultiSelect","_args","groupedItems","inputNode","tagGroup","tagGroupElements","isInsideTagGroup","tagInput","allFilteredItems","matchingElement","getAllVisibleItems","onNewItemCreated","isFooterFocused","handleItemCreate","handleFooterActivate","onSelected","onFilterChange","onRemoved","_this$props4","hasVisibleFooter","_this$props5","isSelectOpen","focusNextItem","focusPreviousItem","removeLatestItem","_this$props6","createNewItemLabel","_this$props7","handleKeyboardInteractions","multiple","isKeyboardInteractionDisabled","isTriggerDisabled","isTriggerNotTabbable","getPlaceholder","renderFooter","InlineDialogFailure","supportLinkElem","onRetry","MultiSelectAutocomplete","_onFilterChange","_onRetry","_sendQuery","_debounce","_renderError","itemGroups","regular","paddingUnitless","getHeight","getWidth","colorOptions","bgChecked","bgCheckedHover","bgCheckedDisabled","bgUnchecked","bgUncheckedHover","bgUncheckedDisabled","bgcolor","disabledColor","backgroundColorChecked","backgroundColorDisabled","iconPadding","ToggleStateless","handleChange","Slide","Handle","Switch","_RIGHT_WATERMARK_STYLE","backgroundImage","Watermarks","showBrandWatermark","showJitsiWatermark","showJitsiWatermarkForGuests","SHOW_BRAND_WATERMARK","SHOW_JITSI_WATERMARK","SHOW_WATERMARK_FOR_GUESTS","brandWatermarkLink","BRAND_WATERMARK_LINK","jitsiWatermarkLink","JITSI_WATERMARK_LINK","showPoweredBy","SHOW_POWERED_BY","_renderJitsiWatermark","_renderBrandWatermark","_renderPoweredBy","reactElement","_connectionPromise","_prevMutePresenterVideo","JitsiMeetScreenObtainer","openDesktopPicker","onSourceChoose","showDesktopPicker","AVATAR_ID","AVATAR_URL","CUSTOM_ROLE","EMAIL","ETHERPAD","SHARED_VIDEO","notifyTokenAuthFailed","notifyConnectionFailed","sendData","muteLocalAudio","muteLocalVideo","_replaceLocalAudioTrackQueue","_replaceLocalVideoTrackQueue","ConferenceConnector","_resolve","_reject","reconnectTimeout","_handleConferenceJoined","_onConferenceFailed","_handleConferenceFailed","_unsubscribe","CONNECTION_ERROR","NOT_ALLOWED_ERROR","RESERVATION_ERROR","notifyReservationError","GRACEFUL_SHUTDOWN","notifyGracefulShutdown","CONFERENCE_DESTROYED","notifyConferenceDestroyed","retrySec","notifyFocusDisconnected","CONFERENCE_MAX_USERS","notifyMaxUsersLimitReached","INCOMPATIBLE_SERVER_VERSIONS","onDisconnected","_connectionFailedHandler","localPresenterVideo","createInitialLocalTracks","initialDevices","tryCreateLocalTracks","requestedVideo","muteAudio","startScreenSharing","PERMISSION_PROMPT_IS_SHOWN","_createDesktopTrack","desktopStream","screenSharingError","createInitialLocalTracksAndConnect","con","_handleScreenSharingError","startConference","_createRoom","recorder","Recorder","initialOptions","onHashChange","_initDeviceList","showUI","maybeShowErrorDialog","useAudioStream","_createPresenterStreamEffect","muteVideo","_mutePresenterVideo","useVideoStream","listMembersIds","isParticipantModerator","listMembers","overallFeedback","detailedFeedback","getConnectionTimes","getConnectionState","getP2PConnectionState","_startP2P","startP2PSession","_stopP2P","stopP2PSession","isConnectionInterrupted","getLocalDisplayName","getConnectionStatus","audioLevelsMap","getPeerSSRCAudioLevel","getNumberOfParticipantsWithTracks","getTracks","getStats","saveLogs","filename","downloadurl","dispatchEvent","MouseEvent","bubbles","cancelable","e2eekey","cleanUrl","_setLocalAudioVideoStreams","_setupListeners","_getWiFiStatsMethod","createVADProcessor","createRnnoiseProcessorPromise","callStatsSecret","enqueue","onFinish","_setSharingScreen","addLocalVideoStream","wasSharingScreen","sourceType","videoSwitchInProgress","_untoggleScreenSharing","didHaveVideo","_stopProxyConnection","enableScreenshotCapture","_mixerEffect","_desktopAudioStream","toggle","_switchToScreenSharing","externalInstallation","DSExternalInstallationInProgress","_desktopSharingSourceDevice","interval","checkAgain","showExtensionExternalInstallationDialog","desktopStreams","_turnScreenSharingOff","desktopVideoStream","LOCAL_TRACK_STOPPED","createPresenterEffect","desktopResizeConstraints","resizeDesktopStream","DESKTOP_STREAM_CAP","advancedConstraints","toPrecision","isPortrait","advanced","applyConstraints","defaultCamera","streams","CHROME_EXTENSION_USER_CANCELED","CHROME_EXTENSION_USER_GESTURE_REQUIRED","showExtensionInlineInstallationDialog","PARTCIPANT_FEATURES_CHANGED","addUser","updateUserStatus","newLvl","debugAudioLevels","LAST_N_ENDPOINTS_CHANGED","leavingIds","enteringIds","handleLastNEndpoints","P2P_STATUS","jitsiConference","changeDisplayName","sender","eventData","senderInfo","_jid","_id","RemoteControlEvents","initEtherpad","START_MUTED_POLICY_CHANGED","isStartAudioMuted","isStartVideoMuted","notifyInitiallyMuted","videoWasMuted","_updateVideoDeviceId","audioWasMuted","_updateAudioDeviceId","deviceChangeListener","DEVICE_LIST_CHANGED","initConference","addConferenceListener","removeConferenceListener","setDeviceListChangeHandler","_onDeviceListChanged","onAvailableDevicesChanged","mediaDeviceHelper","requestedInput","setAudioOutputPromise","stopStream","newAvailDevices","newAudioDevices","oldAudioDevices","muteSyncPromises","updateAudioIconEnabled","audioMediaDevices","updateVideoIconEnabled","videoMediaDevices","requestFeedbackPromise","leaveRoomAndDisconnect","formattedEmail","formattedUrl","nickname","formattedNickname","getDesktopSharingSourceId","sourceId","getDesktopSharingSourceType","_proxyConnection","ProxyConnectionService","jitsiConnection","convertVideoToDesktop","onConnectionClosed","onSendMessage","peerJid","onRemoteStream","processMessage","getFirstMatch","getSecondMatch","matchAndReturnConst","getWindowsVersionName","getMacOSVersionName","getAndroidVersionName","getVersionPrecision","compareVersions","getBrowserAlias","BROWSER_ALIASES_MAP","getBrowserTypeByAlias","BROWSER_MAP","ENGINE_MAP","OS_MAP","PLATFORMS_MAP","Bada","BlackBerry","Chromium","Epiphany","Firefox","Focus","Generic","Googlebot","Maxthon","Opera","PhantomJS","Puffin","QupZilla","QQ","QQLite","Safari","Sailfish","SeaMonkey","Sleipnir","Swing","Tizen","Vivaldi","WeChat","Roku","amazon_silk","bada","blackberry","epiphany","generic","googlebot","google_search","ie","k_meleon","maxthon","edge","mz","naver","opera_coast","phantomjs","puffin","qupzilla","qq","qqlite","sailfish","samsung_internet","seamonkey","sleipnir","swing","tizen","uc","vivaldi","webos","wechat","yandex","tablet","mobile","tv","WindowsPhone","Windows","MacOS","iOS","Android","WebOS","Linux","ChromeOS","PlayStation4","EdgeHTML","Blink","Trident","Presto","Gecko","WebKit","getParser","getResult","91","_ua","parsedResult","getUA","parseBrowser","describe","getBrowser","getBrowserName","getBrowserVersion","getOS","os","parseOS","getOSName","getOSVersion","getPlatform","platform","parsePlatform","getPlatformType","getEngine","engine","parseEngine","getEngineName","satisfies","isOS","isPlatform","compareVersion","isEngine","92","93","versionName","94","95","base64_url_decode","InvalidTokenError","symbolObservablePonyfill","observable","createThunkMiddleware","extraArgument","thunk","withExtraArgument","main","hyphenate","msPattern","toSheet","delimiter","ChevronUpIcon","CrossIcon","ErrorIcon","EditorInfoIcon","_implementation2","_Linkify","_Linkify2","ue","ge","be","ye","we","Le","xe","ve","Ee","Oe","Se","scrollWidth","offsetLeft","offsetTop","Te","We","Be","He","le","isParentTransformed","function","te","oe","re","se","pe","fe","de","ce","getOffsetRect","getOffsetRectRelativeToCustomParent","getPosition","getTotalScroll","isTransformed","removeEventListeners","setAttributes","Pe","Ne","ke","De","Ce","CheckboxIcon","RadioIcon","CheckIcon","img1","img2","isPixelData","a32","b32","identical","diffMask","drawGrayPixel","maxDelta","aaR","aaG","aaB","aaColor","diffR","diffG","diffB","diffColor","colorDelta","includeAA","antialiased","drawPixel","BYTES_PER_ELEMENT","x1","y1","x0","y0","x2","y2","minX","minY","maxX","maxY","zeroes","delta","hasManySiblings","yOnly","r1","g1","b1","a1","g2","b2","a2","blend","rgb2y","rgb2i","rgb2q","commonjsGlobal","createCommonjsModule","objectTypes","SyntaxError","nativeJSON","isProperty","undef","getClass","isExtended","exception","serialized","stringifySupported","parseSupported","charIndexBuggy","Months","original","isConstructor","hasProperty","Escapes","34","toPaddedString","useCharIndex","charCode","serialize","whitespace","indentation","Index","Source","Unescapes","47","98","116","110","102","114","abort","lex","begin","isSigned","hasMembers","walk","previousJSON","isRestored","JSON3","UTF8","utftext","c1","c2","_keyStr","encode","btoa","atob","_encode","chr1","chr2","chr3","enc1","enc2","enc3","enc4","decode","_decode","componentUrl","isAbsolute","isRelative","isCrossDomain","parse$1","long","fmtLong","fmtShort","debug$1","createDebug","prevTime","ms$$1","coerce","formatters","formatArgs","useColors","selectColor","instances","disable","save","skips","lastC","WebkitAppearance","firebug","localstorage","componentCookie","maxage","secure","cookie","cookie$$1","logLevels","DISABLE","logLevel","_log","_truncateValue","validateProperties","propsType","keyType","validatePropertyValue","invalidValueTypes","valueType","arrayCopy","elemType","validateGroupName","groupName","groupNameType","utils","logLevelName","groupsType","expectedType","_options","expirationDays","_domainSpecific","nameEq","Cookie","stored","windowLocalStorageAvailable","globalStorage","attrKey","addBehavior","XMLDocument","localStorage$1","cookieStorage","_cookiesEnabled","getStorage","Identify","userPropertiesOperations","_addOperation","clearAll","setOnce","operation","safeAdd","lsw","md5cmn","md5ff","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","rstr2binl","length8","rstr2hex","str2rstrUTF8","rawMD5","rstrMD5","rawHMACMD5","bkey","ipad","opad","rstrHMACMD5","hexHMACMD5","hexMD5","_listCacheClear","eq_1","_assocIndexOf","_listCacheDelete","_listCacheGet","_listCacheHas","_listCacheSet","_ListCache","_stackClear","_stackDelete","_stackGet","_stackHas","_freeGlobal","_root","_Symbol","objectProto$1","hasOwnProperty$1","symToStringTag$1","_getRawTag","nativeObjectToString$1","_objectToString","_baseGetTag","isObject_1","isFunction_1","_coreJsData","_isMasked","funcToString$1","_toSource","_baseIsNative","_getValue","_getNative","_Map","_nativeCreate","_hashClear","_hashDelete","hasOwnProperty$2","_hashGet","hasOwnProperty$3","_hashHas","HASH_UNDEFINED$1","_hashSet","_Hash","_mapCacheClear","_isKeyable","_getMapData","_mapCacheDelete","_mapCacheGet","_mapCacheHas","_mapCacheSet","_MapCache","_stackSet","_Stack","_defineProperty$1","_baseAssignValue","_assignMergeValue","_baseFor","_cloneBuffer","_Uint8Array","_cloneArrayBuffer","_cloneTypedArray","_copyArray","_baseCreate","_overArg","_getPrototype","objectProto$5","_isPrototype","_initCloneObject","isObjectLike_1","_baseIsArguments","objectProto$6","hasOwnProperty$4","isArguments_1","isArray_1","isLength_1","isArrayLike_1","isArrayLikeObject_1","stubFalse_1","isBuffer_1","funcProto$2","objectProto$7","funcToString$2","hasOwnProperty$5","isPlainObject_1","_baseIsTypedArray","_baseUnary","_nodeUtil","isTypedArray_1","hasOwnProperty$6","_assignValue","_copyObject","_baseTimes","MAX_SAFE_INTEGER$1","_isIndex","hasOwnProperty$7","_arrayLikeKeys","_nativeKeysIn","hasOwnProperty$8","_baseKeysIn","keysIn_1","toPlainObject_1","_baseMergeDeep","_baseMerge","identity_1","_apply","_overRest","constant_1","_baseSetToString","_setToString","_baseRest","_isIterateeCall","_createAssigner","merge_1$1","hasOwnProperty$9","isArray$2","xs","stringifyPrimitive","sep","objectKeys","ks","parse$2","qs","maxKeys","kstr","vstr","querystring","XDomainRequest","xdr","ontimeout","onprogress","Revenue","_price","_productId","_quantity","_revenueType","_properties","setProductId","productId","setQuantity","quantity","setPrice","price","setRevenueType","revenueType","setEventProperties","eventProperties","_isValidRevenue","_toJSONObject","uaParser","MODEL","TYPE","VENDOR","MOBILE","TABLET","extensions","margedRegexes","str1","str2","lowerize","major","mapper","rgx","maps","oldsafari","amazon","sprint","windows","cpu","UAParser","uastring","rgxmap","getCPU","getDevice","setUA","BROWSER","MAJOR","CPU","ARCHITECTURE","DEVICE","CONSOLE","SMARTTV","WEARABLE","EMBEDDED","ENGINE","jQuery","Zepto","parser","uuid$1","DEFAULT_OPTIONS","apiEndpoint","batchEvents","cookieExpiration","cookieName","deviceIdFromUrlParam","eventUploadPeriodMillis","eventUploadThreshold","forceHttps","includeGclid","includeUtm","userLanguage","optOut","savedMaxCount","saveEvents","saveParamsReferrerOncePerSession","sessionTimeout","trackingOptions","city","device_model","dma","ip_address","os_name","os_version","version_name","unsentKey","unsentIdentifyKey","uploadBatchSize","AmplitudeClient","_instanceName","_legacyStorageSuffix","_unsentEvents","_unsentIdentifys","_q","_sending","_updateScheduled","_eventId","_identifyId","_lastEventTime","_newSession","_sequenceNumber","_sessionId","_userAgent","apiKey","opt_userId","opt_config","opt_callback","_storageSuffix","_parseConfig","_generateApiPropertiesTrackingConfig","_apiPropertiesTrackingOptions","tracking_options","_upgradeCookieData","_loadCookieData","_getDeviceIdFromUrlParam","_getUrlParams","_loadSavedUnsentEvents","event_properties","userProperties","user_properties","identifyGroups","_trackParamsAndReferrer","_saveCookieData","_sendEventsIfReady","_initUtmData","_saveReferrer","_getReferrer","_saveGclid","parseValidateAndLoad","inputValue","runQueuedFunctions","_apiKeySet","savedUnsentEventsString","_getFromStorage","_parseSavedUnsentEventsString","savedUnsentEventsStringLegacy","_getFromStorageLegacy","unsentEvents","_removeFromLegacyStorage","_setInStorage","isNewSession","getSessionId","nextEventId","nextIdentifyId","nextSequenceNumber","_unsentCount","sendEvents","cookieData","sessionId","lastEventTime","_getAndRemoveFromLocalStorage","apiKeySuffix","localStorageDeviceId","localStorageUserId","localStorageOptOut","localStorageSessionId","localStorageLastEventTime","localStorageEventId","localStorageIdentifyId","localStorageSequenceNumber","_getFromCookie","_loadCookieDataProps","legacyCookieData","identifyId","sequenceNumber","queryParams","cookieParams","rawCookie","fetchParam","utmSource","utmMedium","utmCampaign","utmTerm","utmContent","utmData","addIfNotNull","utmProperties","queryName","_sendParamsReferrerUserProperties","identify","referrer","gclid","_getReferringDomain","referrerInfo","setDomain","setGroup","groupType","_logEvent","setOptOut","setSessionId","resetSessionId","regenerateDeviceId","setDeviceId","sanitized","clearUserProperties","_convertProxyObjectToRealObject","identify_obj","groupIdentify","group_type","group_name","setVersionName","eventType","apiProperties","groupProperties","eventTime","device_id","event_id","session_id","event_type","_shouldTrackField","api_properties","library","sequence_number","group_properties","user_agent","_limitEventsQueued","fields","logEventWithTimestamp","logEventWithGroups","_isNumber","logRevenueV2","revenue_obj","logRevenue","removeEvents","maxEventId","maxIdentifyId","_removeEvents","eventQueue","maxId","filteredEvents","numEvents","mergedEvents","_mergeEventsAndIdentifys","eventsToSend","uploadTime","upload_time","eventIndex","identifyIndex","noIdentifys","noEvents","setGlobalUserProperties","__VERSION__","_nativeKeys","hasOwnProperty$11","_baseKeys","keys_1","hasOwnProperty$10","assign_1$1","Amplitude","_instances","old","newInstance","_iq","readynessCheck","targetWindow","windowForEventListening","sendBuffer","listenBuffer","listenersForMethod","listenBufferForMethod","readyCheckID","compareContext","bHasOwnProperty","valueA","valueB","CheckCircleIcon","InfoIcon","_queue","_currentTask","_onTaskComplete","taskFunction","_executeNext","enums_1","time_zone_map_1","findIana","territory","Territory","itemName","windowsName","itemTerritory","iana","findOneIana","CheckboxIndeterminateIcon","videoLayout","onclick","remoteVideosContainer","localVideoContainer","spanId","_audioStreamElement","_supportsRemoteControl","popupMenuIsHovered","_isRemoteControlSessionActive","_requestRemoteControlPermissions","_setAudioVolume","_stopRemoteControl","addPresenceLabel","_generatePopupContent","remoteVideoMenuContainer","controller","activeParticipant","getRequestedParticipant","isStarted","remoteMenuPosition","_onRemoteVideoMenuDisplay","requestPermissions","newVal","_figureOutMutedWhileDisconnected","isConnectionActive","updateConnectionStatusIndicator","removeRemoteVideoMenu","waitForPlayback","streamElement","webRtcStream","createStreamElement","UIUtils","menuSpan","LargePokerContainer","_setDotLevel","audioSpan","getElementsByClassName","audioTopDots","audioDotMiddle","audioBottomDots","sideDotsCount","elementId","shadowElement","_updateLargeVideoShadow","int","AUDIO_LEVEL_PRIMARY_COLOR","AUDIO_LEVEL_SECONDARY_COLOR","streamEndedCallback","localVideoId","disableLocalVideoFlip","_buildContextMenu","containerSpan","_updateVideoElement","_enableDisableContextMenu","setFlipX","endedHandler","_notifyOfStreamEnded","contextMenu","appendTarget","StarFilledIcon","StarIcon","_USER_INFO_COMMAND","_sendRecorderInfo","robot","_shortcuts","_shortcutsHelp","KeyboardShortcut","_initGlobalShortcuts","onkeyup","_getKeyboardKey","clickOnVideo","onkeydown","PRESSED","shortcutChar","shortcutAttr","_addShortcutToHelp","which","shortcutDescriptionKey","RELEASED","RemoteControl","Controller","_active","_initialized","disableRemoteControl","Receiver","getFeatures","KeyCodes","ctrlKey","altKey","metaKey","_isCollectingEvents","_controlledParticipant","_requestedParticipant","_stopListener","_handleRemoteControlStoppedEvent","_userLeftListener","_onUserLeft","_largeVideoChangedListener","_onLargeVideoIdChanged","eventCaptureArea","_area","onUserLeft","permissionsReplyListener","clearRequest","_handleReply","_stop","resume","pageX","pageY","_onMouseClickHandler","dblclick","contextmenu","onmousewheel","deltaX","deltaY","_onKeyPessHandler","KEYS","keyCodeToKey","33","35","36","37","38","39","42","44","45","46","59","61","97","99","101","103","105","113","115","117","118","119","121","122","123","124","173","186","187","188","189","190","191","219","220","221","222","229","keyboardEventToKey","_controller","_remoteControlEventsListener","_onRemoteControlMessage","_hangupListener","_onHangup","_onRemoteControlAPIEvent","_enable","removeFeature","dontNotify","openRemoteControlAuthorizationDialog","_sendStartRequest","_onRemoteControlSupported","etherpadManager","sharedVideoManager","UIListeners","showToolbar","displayJids","getSharedVideoManager","setDefaults","EtherpadManager","reduxState","inputDisplayNameHandler","newDisplayName","showLoginPopup","askForNickname","dockToolbar","stropheErrorMsg","notifyInternalError","onLocalRaiseHandChanged","isRaisedHand","openedWindow","bubbleIframeMouseMove","existingOnMouseMove","onmousemove","boundingClientRect","initMouseEvent","detail","clientX","clientY","DEFAULT_WIDTH","DEFAULT_HEIGHT","ETHERPAD_CONTAINER_TYPE","Etherpad","frameBorder","scrolling","doc","contentDocument","getElementsByName","etherpad","openEtherpad","focusManagerContext","selectionCacheContext","clickManagerContext","KEY_UP","KEY_DOWN","KEY_SPACE","KEY_ENTER","KEY_TAB","DropdownItemFocusManager","itemId","itemNode","registeredItems","focusedItemId","matchingIndex","handleItemRegistered","nextItemIndex","itemFocused","handleItemFocused","registerItem","deregisterItem","handleItemDeregistered","updateItem","handleItemUpdated","handleKeyboard","DropdownItemClickManager","onItemClicked","itemClicked","handleItemClicked","itemList","DropdownItemSelectionCache","lastCacheUpdate","newGroupSelections","newSelectedItems","isItemSelected","itemsInGroup","itemSelectionsChanged","handleItemSelectionsChanged","hasItemAlreadyHadDefaultSelectedApplied","alreadyDefaultedItems","markItemAsDefaultApplied","autoFocusDropdownItems","isUsingDeprecatedAPI","domItemsList","focusFirstItem","prevProp","latestAvailable","sourceOfIsOpen","focusItem","isDroplistItem","thisDom","isTargetChildItem","menuContainer","domMenuContainer","handleClickDeprecated","triggerContainer","insideTriggerContent","triggerProps","defaultButtonProps","triggerContent","renderItems","renderGroups","dropdownListPositioned","isDeprecated","deprecatedProps","handleKeyboardInteractionsDeprecated","handleKeyboardInteractionForClosed","renderTrigger","onDroplistPositioned","renderDeprecated","WidthConstrainer","renderDropdownItems","DesktopSourcePreview","_onDoubleClick","displayClasses","onDoubleClick","toDataURL","DesktopPickerPane","_onShareAudioCheck","onShareAudioChecked","selectedSourceId","previews","checkBox","THUMBNAIL_SIZE","UPDATE_INTERVAL","DEFAULT_TAB_TYPE","TAB_LABELS","VALID_TYPES","DesktopPicker","_getValidTypes","screenShareAudio","selectedSource","_onCloseModal","_onPreviewClick","_onShareAudioChecked","_updateSources","_startPolling","_stopPolling","_getSelectedSource","_selectedTabType","_poller","capturerOptions","JitsiMeetElectron","obtainDesktopStreams","sourcesByType","_seperateSourcesByType","obtainDesktopSources","RemoteControlAuthorizationDialog","_getAdditionalMessage","AUDIO_LEVEL_DOTS","CENTER_DOT_INDEX","AudioLevelIndicator","stretchedAudioLevel","audioLevelDots","distanceFromCenter","audioLevelFromCenter","cappedOpacity","JitsiStreamPresenterEffect","videoDiv","firstVideoTrack","frameRate","_canvas","_ctx","_desktopElement","_frameRate","_onVideoFrameTimer","_videoFrameTimerWorker","_renderVideo","_desktopStream","beginPath","lineWidth","strokeStyle","stroke","captureStream","loadRnnoisePromise","rnnoise","createRnnoiseProcessor","noModule","pushStack","prevObject","expando","isEmptyObject","globalEval","makeArray","grep","guid","support","ID","CLASS","ATTR","PSEUDO","CHILD","needsContext","ee","ne","ae","qsa","cacheLength","attrHandle","sourceIndex","he","isXML","namespaceURI","setDocument","createComment","getById","getAttributeNode","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","sortDetached","specified","uniqueSort","detectDuplicates","sortStable","getText","nodeValue","createPseudo","relative","preFilter","lastChild","uniqueID","pseudos","setFilters","hasFocus","selectedIndex","even","odd","me","filters","tokenize","expr","unique","isXMLDoc","escapeSelector","parseHTML","closest","prevAll","addBack","parentsUntil","nextAll","nextUntil","prevUntil","siblings","fail","Callbacks","stopOnFalse","memory","fireWith","Deferred","always","pipe","progress","notifyWith","resolveWith","exceptionHook","stackTrace","rejectWith","getStackHook","when","readyException","readyWait","doScroll","access","hasData","removeData","_removeData","dequeue","_queueHooks","clearQueue","composed","attachShadow","getRootNode","cssNumber","thead","col","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","createDocumentFragment","htmlPrefilter","checkClone","noCloneChecked","Ae","isTrigger","delegateType","stopImmediatePropagation","Event","triggered","bindType","origType","delegateCount","setup","teardown","removeEvent","fix","delegateTarget","preDispatch","isPropagationStopped","isImmediatePropagationStopped","rnamespace","handleObj","postDispatch","addProp","originalEvent","noBubble","beforeunload","returnValue","isDefaultPrevented","relatedTarget","timeStamp","isSimulated","changedTouches","eventPhase","offsetX","offsetY","pointerId","pointerType","targetTouches","touches","mouseenter","mouseleave","pointerenter","pointerleave","je","qe","Re","Me","Ie","_evalUrl","cleanData","replaceWith","appendTo","prependTo","insertAfter","replaceAll","$e","Fe","pixelBoxStyles","minWidth","ze","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","Ue","Xe","Ve","Ge","cssProps","Ye","Qe","Je","Ke","letterSpacing","fontWeight","Ze","et","tt","getClientRects","nt","cssHooks","animationIterationCount","columnCount","fillOpacity","flexGrow","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","orphans","widows","zoom","Tween","easing","propHooks","fx","linear","cos","rt","ot","ut","tick","ct","ft","pt","tweeners","prefilters","tweens","specialEasing","originalProperties","originalOptions","createTween","timer","anim","Animation","tweener","unqueued","prefilter","speed","speeds","finish","slideDown","slideUp","slideToggle","fadeToggle","slow","fast","checkOn","optSelected","radioValue","ht","removeAttr","attrHooks","vt","yt","mt","xt","bt","removeProp","propFix","wt","valHooks","focusin","Tt","Ct","parentWindow","simulate","triggerHandler","Et","kt","St","parseXML","DOMParser","parseFromString","At","Nt","Dt","jt","qt","serializeArray","Lt","Ht","Ot","Pt","Rt","Mt","It","Wt","$t","Ft","Bt","_t","dataTypes","zt","ajaxSettings","flatOptions","lastModified","etag","processData","contentType","accepts","xml","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","getResponseHeader","getAllResponseHeaders","mimeType","dataType","traditional","hasContent","ifModified","beforeSend","dataFilter","statusText","getScript","wrapAll","wrapInner","Ut","1223","Xt","cors","xhrFields","onabort","binary","script","scriptAttrs","charset","scriptCharset","Vt","Gt","Yt","jsonp","jsonpCallback","createHTMLDocument","implementation","animated","setOffset","using","Height","Width","unbind","undelegate","holdReady","parseJSON","isWindow","Qt","Jt","orig","htmlMenuitem","htmlCommand","eventSelectstart","ui","widget","elems","$currentTrigger","$win","menus","autoHide","reposition","selectableSubMenu","notSelectable","iconEdit","iconCut","iconCopy","iconPaste","iconDelete","iconAdd","iconQuit","iconLoadingClass","determinePosition","$menu","my","of","collision","outerWidth","opt","offsetParentOffset","positionSubmenu","hoveract","abortevent","$this","mouseButton","build","built","$trigger","showMenu","$related","$document","layerClick","$window","triggerAction","elementFromPoint","$layer","isContentEditable","sel","getSelection","selectNode","collapse","removeAllRanges","addRange","keyStop","isInput","targetZIndex","getZIndexOfTriggerTarget","$selected","$parent","itemdata","accesskeys","$node","prevItem","$s","$children","$prev","$round","itemMouseleave","itemMouseenter","$input","nextItem","$next","focusInput","contextMenuRoot","blurInput","menuMouseenter","hovering","menuMouseleave","itemClick","contextMenuKey","callbacks","inputClick","hideMenu","blurItem","additionalZValue","zin","$tt","zindex","createNameNode","$name","_accesskey","_beforeAccesskey","_afterAccesskey","isHtmlName","accesskey","$label","ak","aks","splitAccesskey","hasTypes","inputs","processPromises","_icon","domMenu","$item","errorPromise","errorItem","finishPromiseProcess","inputLabel","$o","$context","_hasContext","itemClickEvent","contextMenuItemObj","$visibleMenu","fromMenu","setInputValues","getInputValues","menuChildren","Imp","lifo","Ok","statechanging","statechanged","overlayspeed","useiframe","setStateDefaults","getLast","removeFromStack","$body","msgbox","jqib","jqi","jqif","addState","currentStateName","$state","stateobj","clicked","forminputs","promptsubmite","stateName","fadeClicked","intervalid","_windowResize","$defBtn","getCurrentState","$inputels","back","$firstState","callCallback","formvals","statename","afterState","showHtml","defbtn","$jqistates","removeState","rm","getBox","getPrompt","restoreFx","stateObj","bodyHeight","windowHeight","subState","jqiopts","promptstatechanginge","contentLaterFunc","withDataAndEvents","Impromptu","b64DecodeUnicode","InvalidCharacterError","bs","for","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","refs","isPureReactComponent","suspense","__self","__source","$$typeof","_owner","keyPrefix","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","_context","lazy","_ctor","_result","useCallback","useContext","useEffect","useImperativeHandle","useDebugValue","useLayoutEffect","useMemo","useReducer","useRef","useState","Profiler","StrictMode","Suspense","unstable_SuspenseList","createFactory","unstable_withSuspenseConfig","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentDispatcher","ReactCurrentBatchConfig","ReactCurrentOwner","IsSomeRendererActing","ReactPropTypesSecret","emptyFunctionWithReset","resetWarningCache","shim","propFullName","secret","getShim","ReactPropTypes","arrayOf","objectOf","exact","checkPropTypes","typeOf","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Lazy","Memo","isValidElementType","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isForwardRef","isFragment","isPortal","isProfiler","isStrictMode","isSuspense","extractEvents","eventTypes","phasedRegistrationNames","ha","registrationName","ia","ja","dependencies","ka","la","ma","na","oa","pa","qa","sa","ta","va","wa","ra","xa","ya","za","Aa","_dispatchListeners","_dispatchInstances","isPersistent","release","Ba","Ca","injectEventPluginOrder","injectEventPluginsByName","Da","stateNode","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","dispatchConfig","Na","_targetInst","Oa","Pa","Qa","Ra","Sa","Ta","animationend","animationiteration","animationstart","transitionend","Ua","Va","Wa","Xa","Ya","Za","ab","bb","db","eb","fb","gb","hb","nativeEvent","Interface","jb","eventPool","kb","destructor","ib","getPooled","cancelBubble","persist","lb","mb","nb","ob","pb","qb","sb","tb","ub","beforeInput","bubbled","captured","compositionEnd","compositionStart","compositionUpdate","vb","wb","xb","yb","Cb","Ab","Bb","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","datetime","tel","Qb","Rb","correspondingUseElement","Sb","Tb","Vb","_valueTracker","setValue","stopTracking","Ub","Wb","Xb","Yb","Zb","$b","ac","cc","dc","ec","gc","hc","ic","jc","kc","lc","mc","oc","pc","_debugOwner","_debugSource","lineNumber","qc","rc","sc","tc","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","sanitizeURL","xc","yc","zc","vc","wc","setAttributeNS","Ac","Bc","defaultChecked","_wrapperState","initialChecked","Cc","controlled","Dc","Ec","Fc","Gc","xlinkHref","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","detachEvent","Qc","Rc","Sc","Tc","Uc","Vc","_isInputEventSupported","Wc","Xc","Alt","Control","Meta","Shift","Yc","getModifierState","Zc","$c","ad","bd","cd","fromElement","movementX","movementY","ed","pressure","tangentialPressure","tiltX","tiltY","twist","fd","mouseEnter","mouseLeave","pointerEnter","pointerLeave","gd","alternate","hd","jd","kd","responder","ld","effectTag","od","qd","sibling","pd","rd","animationName","elapsedTime","pseudoElement","sd","clipboardData","ud","vd","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","wd","145","xd","yd","dataTransfer","zd","Ad","Bd","wheelDeltaX","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Cd","Dd","Ed","Fd","Gd","Hd","Id","Jd","Kd","Ld","eventPriority","Md","getEventPriority","Nd","Od","Pd","targetInst","ancestors","containerInfo","topLevelType","Qd","Rd","Sd","Td","Ud","Vd","Wd","Xd","Yd","Zd","HTMLIFrameElement","contentEditable","selectionStart","selectionEnd","anchorNode","anchorOffset","focusNode","focusOffset","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","mathml","MSApp","execUnsafeLocalFunction","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","flexPositive","flexNegative","flexOrder","gridRowSpan","gridColumnSpan","lineClamp","tabSize","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","menuitem","br","embed","hr","keygen","wbr","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","__reactInternalMemoizedMergedChildContext","unstable_runWithPriority","unstable_scheduleCallback","af","unstable_cancelCallback","bf","unstable_shouldYield","cf","unstable_requestPaint","df","unstable_now","ef","unstable_getCurrentPriorityLevel","ff","unstable_ImmediatePriority","hf","unstable_UserBlockingPriority","jf","unstable_NormalPriority","kf","unstable_LowPriority","lf","unstable_IdlePriority","mf","nf","pf","qf","rf","sf","tf","uf","vf","wf","xf","yf","zf","Af","Cf","Df","Ef","Ff","Gf","Hf","If","Jf","childExpirationTime","Kf","firstContext","expirationTime","Lf","Mf","observedBits","responders","Nf","Of","baseState","firstUpdate","lastUpdate","firstCapturedUpdate","lastCapturedUpdate","firstEffect","lastEffect","firstCapturedEffect","lastCapturedEffect","Pf","Qf","suspenseConfig","nextEffect","Rf","Sf","updateQueue","memoizedState","Tf","Uf","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","fg","_reactInternalFiber","cg","dg","eg","hg","ig","jg","kg","lg","_stringRef","mg","ng","og","pg","qg","rg","sg","rb","tg","ug","vg","wg","xg","yg","zg","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Hg","memoizedProps","revealOrder","Ig","Jg","Kg","Lg","Mg","Ng","Og","Pg","Qg","Rg","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","ih","jh","kh","lh","mh","lastRenderedReducer","lastRenderedState","eagerReducer","eagerState","nh","deps","oh","ph","qh","rh","sh","readContext","useResponder","uh","vh","wh","xh","yh","pendingProps","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","pendingContext","Oh","Ph","fallback","unstable_avoidThisFallback","Qh","isBackwards","rendering","tailExpiration","tailMode","Rh","Sh","Th","Uh","Vh","Wh","$h","ai","bi","ci","WeakSet","di","gi","fi","ji","ei","ki","li","ni","_reactRootContainer","oi","wasMultiple","pi","ri","ti","vi","wi","componentDidCatch","xi","componentStack","yi","zi","Ai","Bi","Ci","Di","Ei","Fi","Gi","Hi","Ii","Ji","Ki","Li","Mi","Ni","Oi","Pi","Qi","Ri","Si","Ti","Ui","Vi","Wi","timeoutMs","Xi","Yi","pingTime","Zi","firstPendingTime","lastPendingTime","callbackExpirationTime","callbackNode","$i","aj","bj","cj","ej","fj","gj","hj","finishedWork","finishedExpirationTime","timeoutHandle","ij","jj","pingCache","kj","lj","firstBatch","_defer","_expirationTime","_onComplete","dj","busyMinDurationMs","busyDelayMs","mj","createElementNS","nj","rangeCount","zb","focusedElem","selectionRange","gh","oj","__reactInternalSnapshotBeforeUpdate","$d","$a","nc","Fj","Xh","Yh","Gj","nd","Zh","gf","pj","qj","rj","Bf","sj","hydrate","unstable_observedBits","uj","pendingChildren","vj","wj","xj","yj","zj","Bj","_callbacks","_next","_hasChildren","_didComplete","_children","Cj","_didCommit","_onCommit","Dj","_internalRoot","Ej","Hj","Jj","hasAttribute","Ij","Kj","Aj","unmount","createBatch","Nj","unstable_renderSubtreeIntoContainer","unstable_createPortal","unstable_batchedUpdates","unstable_interactiveUpdates","unstable_discreteUpdates","unstable_flushDiscreteUpdates","flushSync","unstable_createRoot","unstable_createSyncRoot","unstable_flushControlled","Events","findFiberByHostInstance","bundleType","rendererPackageName","supportsFiber","onCommitFiberRoot","onCommitFiberUnmount","tj","overrideHookState","overrideProps","setSuspenseHandler","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","Oj","Pj","unstable_forceFrameRate","MessageChannel","port2","port1","priorityLevel","unstable_next","unstable_wrapCallback","unstable_continueExecution","unstable_pauseExecution","unstable_getFirstCallbackNode","logStorage","stringifyObjects","maxEntryLength","storeLogsIntervalID","totalLen","outputCache","someObject","formatLogMessage","prevMessage","prevMessageText","_flush","_reschedulePublishInterval","cachedQueue","tagRE","parseTag","pushTextNode","ignoreWhitespace","byTag","inComponent","isComment","nextChar","voidElement","attrRE","voidElements","expectingValueAfterEquals","buff","attrString","rootEl","webpackContext","req","webpackContextResolve","_cookie2","_querystring2","_localStorage2","_navigator2","_htmlTag2","_path2","_subdomain2","Browser","detectors","lookupCookie","excludeCacheFor","lookupFromUrlIndex","lookupFromPathIndex","detector","detectionOrder","detected","detectorName","cleanedLng","cacheName","toGMTString","nameEQ","cookieMinutes","cookieDomain","hasLocalStorageSupport","htmlTag","lookupFromSubdomainIndex","toLocaleStringWorks","toLocaleStringRoundingWorks","targets","stringIncludes","repeatZero","qty","formatNumber","userLocale","integerString","fractionString","exponentString","useToLocaleString","useGrouping","grouping","maximumSignificantDigits","minimumIntegerDigits","fractionDigits","groupingSeparator","decimalSeparator","localeStringOptions","maximumFractionDigits","minimumFractionDigits","roundingOptions","toLocaleString","integerLength","fractionLength","digitCount","digitsArray","carry","stringRound","exponent","formattedString","durationLabelCompare","passed","engLocale","durationLabelsStandard","SS","ww","durationLabelsShort","durationTimeTemplates","HMS","HM","MS","durationLabelTypes","durationPluralKey","integerValue","decimalValue","pluck","_b","durationsFormat","durations","returnMomentTypes","formattedDurations","dur","outputTypes","largest","durationFormat","isNegative","remainderMonths","momentTokens","tokenDefs","general","typeMap","tokenizer","stopTrim","_durationTimeTemplates","useLeftUnits","usePlural","forceLength","trunc","useSignificantDigits","significantDigits","significantDigitsCache","minValue","isMinValue","maxValue","isMaxValue","trimIncludes","rBoth","rAll","trimLarge","trimSmall","trimMid","trimFinal","rawTokens","currentToken","momentTypes","momentType","rawValue","isSmallest","isLargest","wholeValue","tokenLength","truncMethod","places","foundFirst","formatValue","formatOptions","formattedValue","formattedValueEn","formattedValueMS","findType","bubble","bubbleMomentType","targetMomentType","pluralKey","labels","localeDataKey","labelType","durationGetLabels","autoLocalized","pluralizedLabels","_durationLabelTypes","defaultFormatTemplate","firstType","lastType","toLocaleStringSupportsLocales","momentDurationFormatSetup","_uppercasePattern","invariant","validateFormat","_addClass2","_removeClass2","_PropTypes","getClassNames","removeClasses","activeClassName","reflowAndAddClass","doneClassName","_getClassNames","_hasClass2","baseVal","_hasClass","replaceClassName","origClass","classToRemove","_reactDom","_initialiseProps","handleLifecycle","originalArgs","_child$props","inProp","_React$Children$toArr","handleEnter","handleEntering","handleEntered","handleExit","handleExiting","_len5","_key5","_len6","_key6","_len7","_key7","mergeChildMappings","getProp","nextChildMapping","hasPrev","hasNext","prevChild","isLeaving","mapFn","getValueForKey","nextKeysPending","pendingKeys","childMapping","pendingNextKey","NodeResolver","gOPS","$assign","aLen","isEnum","toAbsoluteIndex","IS_INCLUDES","$at","iterated","point","TO_STRING","TO_STRING_TAG","DOMIterables","Collection","addToUnscopables","_k","Arguments","DESCRIPTORS","$fails","wks","wksDefine","enumKeys","_create","gOPNExt","$GOPD","$DP","gOPN","$JSON","_stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","USE_NATIVE","QObject","findChild","setSymbolDesc","protoDesc","$defineProperty","$defineProperties","$propertyIsEnumerable","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","$set","es6Symbols","wellKnownSymbols","keyFor","useSetter","useSimple","replacer","$replacer","windowNames","getWindowNames","buggy","$Object","_gud2","MAX_SIGNED_31_BIT_INT","calculateChangedBits","_Provider$childContex","_Consumer$contextType","contextProp","changedBits","_Component2","_temp2","_defaultComponentDecorator2","_defaultHrefDecorator2","_defaultMatchDecorator2","_defaultTextDecorator2","matchDecorator","hrefDecorator","textDecorator","decoratedComponent","_linkifyIt2","_tlds2","linkify","tlds","_class","escapeRE","fuzzyLink","fuzzyEmail","fuzzyIP","defaultSchemas","http","src_auth","src_host_port_strict","src_path","no_http","src_domain","src_domain_root","src_port","src_host_terminator","mailto","src_email_name","src_host_strict","tlds_2ch_src_re","tlds_default","__opts__","__tlds__","untpl","tpl","src_tlds","onCompile","__tlds_replaced__","src_xn","email_fuzzy","tpl_email_fuzzy","link_fuzzy","tpl_link_fuzzy","link_no_ip_fuzzy","tpl_link_no_ip_fuzzy","host_fuzzy_test","tpl_host_fuzzy_test","schemaError","__compiled__","__schemas__","compiled","createValidator","slist","schema_test","src_ZPCc","schema_search","pretest","__text_cache__","resetScanCache","Match","__last_index__","schema","__schema__","createMatch","LinkifyIt","schemas","definition","ml","tld_pos","testSchemaAt","keepOld","src_Any","src_Cc","src_Z","src_P","src_ZCc","src_pseudo_letter","src_ip4","src_host","tpl_host_fuzzy","tpl_host_no_ip_fuzzy","tpl_host_fuzzy_strict","tpl_host_port_fuzzy_strict","tpl_host_port_no_ip_fuzzy_strict","$getPrototypeOf","$freeze","_exenv","_utils","_withTouchListeners2","_StyleSheet2","ScrollLock","getStyles","accountForScrollbars","initialHeight","TouchProvider","listenerOptions","capture","touchScrollTarget","Sheet","addSheet","removeSheet","placeHoldersCount","placeHolders","Arr","revLookup","uint8","extraBytes","len2","encodeChunk","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","Emoji","_classnames3","_stringReplaceToArray2","_emojiRegex2","_asciiRegex2","_normalizeProtocol2","_unicodeToCodepoint2","_aliases2","_asciiAliases2","asciiAliasesRegex","unicodeEmojiRegex","aliasesRegex","asciiAliasKeys","aliasFound","isEdgeCase","fullMatchContent","validAsciiAlias","codepoint","removeHelperCharacters","alt","_ref$options","isOnlyEmoji","argType","regexpOrSubstr","newValueOrFn","replaceUsingString","replaceUsingRegexp","patternString","endIndex","replacerIsFn","storedLastIndex","newSubStrOrFn","edgeCases","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","toCodePoint","U200D","UFE0Fg","vertxNext","customSchedulerFn","asap","scheduleFlush","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","isWorker","Uint8ClampedArray","importScripts","useSetTimeout","globalSetTimeout","onFulfillment","onRejection","PROMISE_ID","makePromise","invokeCallback","resolve$1","observe","characterData","vertx","runOnLoop","runOnContext","attemptVertx","FULFILLED","TRY_CATCH_ERROR","getThen","handleMaybeThenable","maybeThenable","then$$1","thenable","fulfill","handleOwnThenable","fulfillmentHandler","rejectionHandler","tryThen","_label","handleForeignThenable","publishRejection","_onerror","_subscribers","settled","hasCallback","succeeded","failed","tryCatch","Enumerator","_instanceConstructor","_remaining","_enumerate","_eachEntry","resolve$$1","_then","_settledAt","Promise$1","_willSettleAt","enumerator","needsResolver","initializePromise","needsNew","finally","race","_setScheduler","scheduleFn","_setAsap","asapFn","_asap","promiseToString","cast","searchParams","formData","viewClasses","isDataView","isArrayBufferView","normalizeName","normalizeValue","iteratorFor","_bodyInit","Response","redirectStatuses","rawHeaders","responseURL","consumed","bodyUsed","fileReaderReady","reader","readBlobAsArrayBuffer","FileReader","readAsArrayBuffer","bufferClone","_initBody","_bodyText","_bodyBlob","FormData","_bodyFormData","_bodyArrayBuffer","rejected","readAsText","readArrayBufferAsText","upcased","bodyInit","WindowsZoneName","IanaName","mapContent","tName","i18nName","handleName","selectorAttr","targetAttr","optionsAttr","useOptionsAttr","parseDefaultValueFromContent","ele","extendDefault","dataAttr","translated","localize","targetSelector","_onI18nInitialized","jqueryI18next","connectionTimes","persisted","logCollectorStarted","indexLoadedTime","defaultOpen","activatedItem","activatedGroup","findActivatedGroup","handleItemActivation","handleOpenChange","autoComplete","setInputRef","onKeyUp","DefaultedButton","withDeprecationWarnings","lockSelectedColor","labelColor","activeLabelColor","focusLabelColor","hoverLabelColor","underlineColor","TabPane","NavWrapper","Nav","NavLine","NavItem","TabsNavigation","newselectedIndex","elementRefs","itemProps","elementProps","tabKeyDownHandler","tabMouseDownHandler","TabContent","TabItem","defaultIsSelectedTestNumber","defaultIsSelectedTestObject","defaultComponents","isSelectedTest","testFunction","newselected","newSelectedIndex","initiallyselected","_selected","resolveSelected","updatedselected","_defaultComponents$co","contentProps","pendingHide","TooltipPrimitive","horizontalOffset","defaultStyle","transitionStyle","immediatelyHide","immediatelyShow","hoveredPayload","unhoveredPayload","getMousePosition","mouseCoordinates","safeMouse","defaultDelay","isHidePending","flushed","renderTooltip","cancelPendingSetState","hideTooltipOnClick","hideTooltipOnMouseDown","wrapperRef","fakeMouseElement","scrollOptions","onShow","onHide","mousePosition","TooltipContainer","TargetContainer","handleMouseClick","handleMouseLeave","handleMouseMove","getAnimationStyles","itemSpacing","typesMapping","connectivity","confirmation","getBaseColor","getHoverColor","SelectedIconForType","_typesMapping$type","SelectedIcon","getFocusColor","Root","ButtonContents","getTitleColor","getTextColor","HiddenCheckbox","focusBorder","invalidBorder","activeBorder","checkedBorder","LabelText","CheckboxWrapper","isIndeterminate","emptyTheme","isMouseDown","actionKeys","indeterminate","fnToCall","_instance$context$con","contextKey","WrappedItem","WithItemClick","safeContextCall","shouldCloseAfterClick","callContextFn","otherProps","WithItemFocus","isFocusable","contextId","stateStyles","paddingKey","_getThemeStyle","_getThemeStyle$bottom","_getThemeStyle$left","_getThemeStyle$right","_getThemeStyle$top","adjustedTop","adjustedBottom","heightKey","isDragging","standardFocus","BeforeAfterBase","spaceKey","descriptionFontSize","rootComponent","dnd","dragHandleProps","patchedEventHandlers","draggableProps","shouldAllowMultiline","GroupTitle","paddingType","GroupTitleAfter","GroupTitleText","ItemGroup","headingAfterElement","GroupItem"],"mappings":"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A,cACA,QACA,mBACA,kBACA,+BACA,4BACA,oCACA,8BACA,gCACA,0BACA,wBACA,kBACA,aACA,aACA,YACA,qBACA,qBACA,cACA,aACA,yBACA,wBACA,YACA,uBACA,oBACA,aACA,mBACA,sBACA,4BACA,cACA,iBACA,UACA,2BACA,qBACA,mBACA,wBACA,gBACA,aACA,0BACA,uBACA,yBACA,0BACA,YACA,gBACA,UACA,qBACA,wBACA,sBACA,mBACA,cACA,+BACA,eACA,QACA,cACA,gBACA,qBACA,mBACA,uBACA,iBACA,kBACA,OACA,oBACA,MACA,kBACA,aACA,qBACA,qBACA,kBACA,aACA,kBACA,iBACA,eACA,qBACA,cACA,kBACA,sBACA,sBACA,SACA,UACA,UACA,UACA,WACA,cACA,sBACA,uBACFtzJ,OCvJa,ICGA,GACX,sBACA,WACA,aACA,4BACA,8BACA,wBACA,+BACA,uBACA,wBACA,yCACA,yCACA,gCACA,qBACA,0BACA,mCACA,6BACA,8BACA,qCACA,0BACA,2BACA,kBACA,kCACA,2BACA,+BACA,4BACA,4CACA,wBACA,qCACA,uBACA,0BACA,wBACA,uBACA,iBACA,2BACA,wBACA,8BACA,mBACA,+BACA,2BACA,sBACA,kBACA,mBACA,qBACA,cACA,gBACA,2BACA,2BACA,sBACA,yBACA,oBACA,uBACA,+BACA,0BACA,uBACA,kBACA,4BACA,cACA,wBACA,yBACA,kBACA,kBACA,uBACA,qBACA,mBACA,+BACA,iB,QCpEW+V,cAAU,wBCoBlB,SAASw9I,EAAiBC,GAC7B,MAAMj6I,EAAM,IAAIovE,IAAI6qE,GAEpB,MAAO,CACHC,MAAO,CACH3qE,OAAQvvE,EAAI2uE,SACZwrE,IAAM,cAAan6I,EAAI2uE,YAE3ByrE,KAAO,GAAEH,aACTI,WAAY,+BACZzlH,IAAK,CACD/2B,SAAS,IAiFrB,SAASy8I,EAAoBC,EAAYC,GACrC,MAAmB,oBAAfD,EACO9+I,IAAEwsG,KAAKuyC,EAAYC,GACJ,WAAfF,EACA9+I,IAAEwsG,KAAKuyC,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W,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,GAAM,OACN,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,GAAM,OACN,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,GAAM,OACN,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,GAAM,OACN,UAAW,OACX,GAAM,OACN,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,GAAM,OACN,UAAW,OACX,UAAW,OACX,UAAW,OACX,GAAM,OACN,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,GAAM,OACN,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,GAAM,OACN,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,GAAM,OACN,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,UAAW,OACX,KAAQ,KACR,GAAM,MACN,MAAS,KACT,MAAS,KACT,MAAS,KACT,MAAS,KACT,MAAS,KACT,MAAS,KACT,MAAS,KACT,MAA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,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,gBAAiB,IACjB,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,O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EDjmF,EAAG+lF,eAAiB/lF,EAAGyiF,oBAEzBziF,EAAGmiF,qBAEDniF,EAAG8lF,SAAW9lF,EAAGwiF,SAAWxiF,EAAGyiF,oBAEjCziF,EAAGkmF,2BAEDlmF,EAAG+lF,eAAiB/lF,EAAGwiF,SAAWxiF,EAAGyiF,oBAEvCziF,EAAGmmF,iCAEDnmF,EAAGgmF,qBAAuBhmF,EAAGwiF,SAAWxiF,EAAGyiF,oBAO7CziF,EAAG8jF,oBAED,sDAAwD9jF,EAAGskF,SAAW,SAExEtkF,EAAGwjF,gBAEC,kBAAsCxjF,EAAG2lF,QAAU,KAC7C3lF,EAAG2iF,eAAiB,IAAM3iF,EAAGimF,sBAAwB,IAE/DjmF,EAAG0jF,eAGC,mCAA0C1jF,EAAGskF,SAAW,qBAC9BtkF,EAAGkmF,2BAA6BlmF,EAAGoiF,SAAW,IAE5EpiF,EAAG4jF,qBAGC,mCAA0C5jF,EAAGskF,SAAW,qBAC9BtkF,EAAGmmF,iCAAmCnmF,EAAGoiF,SAAW,IAE3EpiF,I,cCjLT17X,EAAOD,QAAQ,oI,cCAfC,EAAOD,QAAQ,sB,cCAfC,EAAOD,QAAQ,4D,cCAfC,EAAOD,QAAQ,s2D,cCAfC,EAAOD,QAAU,CACf,MACA,OACA,SACA,MACA,SACA,SACA,MACA,OACA,UACA,WACA,KACA,UACA,YACA,aACA,cACA,MACA,SACA,QACA,KACA,OACA,MACA,QACA,KACA,MACA,OACA,QACA,KACA,iBACA,MACA,SACA,KACA,UACA,SACA,KACA,MACA,OACA,SACA,WACA,SACA,OACA,KACA,YACA,UACA,SACA,YACA,WACA,OACA,SACA,SACA,KACA,kBACA,iBACA,OACA,QACA,QACA,YACA,YACA,UACA,SACA,MACA,KACA,MACA,aACA,MACA,QACA,KACA,YACA,KACA,OACA,SACA,QACA,OACA,OACA,MACA,OACA,KACA,OACA,OACA,aACA,KACA,UACA,WACA,KACA,UACA,OACA,UACA,QACA,UACA,SACA,OACA,QACA,UACA,KACA,MACA,KACA,MACA,KACA,QACA,KACA,OACA,QACA,UACA,iBACA,OACA,OACA,MACA,YACA,cACA,WACA,WACA,WACA,WACA,aACA,UACA,SACA,KACA,MACA,MACA,OACA,MACA,MACA,KACA,KACA,QACA,SACA,OACA,UACA,SACA,OACA,UACA,MACA,KACA,KACA,KACA,SACA,KACA,QACA,MACA,OACA,OACA,QACA,MACA,MACA,KACA,QACA,cACA,SACA,cACA,OACA,YACA,OACA,KACA,MACA,MACA,KACA,MACA,aACA,KACA,QACA,aACA,OACA,MACA,OACA,MACA,OACA,UACA,QACA,SACA,SACA,MACA,WACA,MACA,KACA,WACA,cACA,WACA,SACA,UACA,WACA,KACA,KACA,WACA,UACA,QACA,WACA,WACA,MACA,OACA,KACA,KACA,KACA,KACA,MACA,KACA,MACA,OACA,MACA,OACA,cACA,MACA,SACA,OACA,iBACA,QACA,WACA,UACA,aACA,MACA,UACA,QACA,OACA,SACA,UACA,OACA,UACA,OACA,OACA,SACA,OACA,SACA,MACA,WACA,WACA,MACA,MACA,OACA,MACA,KACA,KACA,MACA,SACA,MACA,OACA,KACA,MACA,MACA,KACA,KACA,SACA,UACA,QACA,OACA,QACA,UACA,YACA,SACA,WACA,SACA,KACA,WACA,SACA,QACA,UACA,OACA,QACA,OACA,WACA,KACA,KACA,SACA,WACA,QACA,SACA,WACA,WACA,QACA,OACA,UACA,KACA,KACA,KACA,QACA,QACA,SACA,UACA,UACA,MACA,UACA,WACA,YACA,UACA,UACA,WACA,SACA,SACA,eACA,aACA,UACA,cACA,UACA,iBACA,OACA,OACA,UACA,UACA,SACA,UACA,UACA,KACA,SACA,aACA,cACA,UACA,QACA,MACA,SACA,UACA,MACA,KACA,aACA,KACA,KACA,KACA,KACA,QACA,OACA,KACA,QACA,MACA,QACA,OACA,OACA,SACA,SACA,MACA,OACA,MACA,KACA,OACA,SACA,QACA,SACA,WACA,OACA,WACA,QACA,WACA,SACA,UACA,OACA,SACA,MACA,MACA,WACA,OACA,UACA,SACA,YACA,WACA,WACA,OACA,MACA,KACA,KACA,KACA,MACA,KACA,OACA,SACA,QACA,MACA,OACA,UACA,MACA,WACA,QACA,MACA,QACA,OACA,SACA,OACA,SACA,SACA,OACA,MACA,KACA,QACA,MACA,KACA,MACA,QACA,MACA,YACA,KACA,KACA,QACA,SACA,SACA,WACA,cACA,cACA,QACA,QACA,YACA,KACA,WACA,OACA,KACA,MACA,SACA,WACA,KACA,WACA,KACA,aACA,MACA,SACA,WACA,WACA,SACA,UACA,UACA,aACA,OACA,OACA,YACA,QACA,SACA,MACA,OACA,OACA,UACA,UACA,OACA,QACA,WACA,UACA,UACA,KACA,OACA,WACA,OACA,OACA,QACA,UACA,YACA,OACA,YACA,WACA,OACA,UACA,MACA,UACA,KACA,KACA,SACA,UACA,OACA,UACA,UACA,MACA,KACA,KACA,MACA,OACA,cACA,WACA,OACA,QACA,UACA,QACA,aACA,MACA,KACA,OACA,YACA,MACA,UACA,YACA,WACA,MACA,UACA,YACA,MACA,OACA,YACA,SACA,MACA,KACA,MACA,UACA,QACA,SACA,OACA,QACA,MACA,SACA,KACA,OACA,KACA,MACA,KACA,MACA,OACA,UACA,SACA,KACA,KACA,OACA,KACA,KACA,OACA,QACA,QACA,SACA,KACA,QACA,QACA,MACA,SACA,QACA,KACA,QACA,OACA,MACA,MACA,KACA,UACA,OACA,YACA,OACA,MACA,YACA,WACA,OACA,SACA,MACA,MACA,MACA,KACA,KACA,KACA,WACA,WACA,SACA,QACA,QACA,UACA,QACA,KACA,KACA,KACA,WACA,QACA,OACA,QACA,UACA,OACA,KACA,KACA,OACA,UACA,UACA,OACA,MACA,OACA,WACA,SACA,aACA,OACA,WACA,OACA,SACA,OACA,SACA,YACA,UACA,MACA,KACA,MACA,KACA,KACA,SACA,WACA,UACA,YACA,YACA,QACA,YACA,QACA,YACA,QACA,WACA,OACA,UACA,MACA,UACA,SACA,UACA,QACA,MACA,KACA,OACA,KACA,KACA,SACA,QACA,UACA,MACA,OACA,MACA,MACA,KACA,KACA,OACA,MACA,QACA,KACA,KACA,SACA,OACA,OACA,aACA,KACA,aACA,WACA,OACA,MACA,MACA,YACA,YACA,SACA,MACA,QACA,gBACA,SACA,cACA,KACA,WACA,KACA,KACA,QACA,KACA,UACA,UACA,MACA,WACA,KACA,OACA,MACA,QACA,MACA,SACA,OACA,MACA,MACA,KACA,OACA,QACA,UACA,MACA,MACA,MACA,KACA,MACA,MACA,KACA,OACA,SACA,MACA,MACA,KACA,WACA,OACA,SACA,UACA,SACA,OACA,KACA,cACA,iBACA,kBACA,MACA,KACA,KACA,KACA,MACA,MACA,SACA,SACA,UACA,OACA,KACA,KACA,QACA,UACA,SACA,KACA,OACA,MACA,KACA,MACA,OACA,YACA,KACA,KACA,QACA,KACA,KACA,UACA,YACA,cACA,QACA,YACA,SACA,UACA,OACA,YACA,UACA,UACA,MACA,SACA,UACA,MACA,SACA,KACA,KACA,MACA,QACA,UACA,SACA,QACA,OACA,QACA,OACA,KACA,UACA,OACA,OACA,gBACA,YACA,WACA,OACA,QACA,UACA,OACA,UACA,QACA,OACA,QACA,OACA,SACA,QACA,KACA,MACA,OACA,QACA,SACA,QACA,OACA,MACA,SACA,QACA,QACA,OACA,MACA,eACA,KACA,KACA,KACA,MACA,OACA,KACA,WACA,QACA,OACA,SACA,KACA,KACA,KACA,QACA,SACA,OACA,SACA,SACA,MACA,aACA,QACA,MACA,SACA,YACA,UACA,WACA,YACA,WACA,SACA,MACA,KACA,WACA,KACA,KACA,MACA,QACA,OACA,YACA,OACA,WACA,MACA,OACA,MACA,WACA,UACA,KACA,KACA,QACA,YACA,MACA,OACA,OACA,MACA,aACA,KACA,KACA,MACA,MACA,KACA,MACA,KACA,KACA,OACA,SACA,SACA,OACA,MACA,MACA,MACA,SACA,QACA,UACA,QACA,SACA,WACA,SACA,OACA,cACA,MACA,QACA,WACA,KACA,KACA,KACA,KACA,MACA,KACA,MACA,MACA,KACA,SACA,SACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,QACA,SACA,OACA,aACA,SACA,OACA,MACA,KACA,KACA,MACA,MACA,UACA,UACA,UACA,UACA,MACA,aACA,OACA,OACA,aACA,QACA,KACA,MACA,KACA,MACA,MACA,KACA,OACA,OACA,QACA,QACA,SACA,SACA,KACA,KACA,QACA,qBACA,SACA,MACA,SACA,QACA,KACA,KACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,WACA,MACA,SACA,UACA,SACA,cACA,UACA,OACA,KACA,QACA,MACA,MACA,MACA,SACA,aACA,MACA,OACA,SACA,SACA,MACA,UACA,UACA,QACA,SACA,MACA,MACA,KACA,OACA,YACA,UACA,QACA,OACA,WACA,QACA,QACA,YACA,MACA,OACA,KACA,MACA,KACA,SACA,KACA,KACA,WACA,MACA,UACA,QACA,QACA,cACA,SACA,SACA,SACA,OACA,SACA,WACA,MACA,MACA,OACA,OACA,UACA,QACA,KACA,KACA,QACA,OACA,cACA,WACA,OACA,KACA,KACA,MACA,OACA,QACA,UACA,OACA,OACA,KACA,YACA,QACA,QACA,QACA,MACA,OACA,cACA,OACA,cACA,QACA,aACA,WACA,aACA,MACA,aACA,KACA,KACA,MACA,KACA,MACA,KACA,KACA,OACA,SACA,QACA,MACA,SACA,QACA,OACA,KACA,OACA,aACA,UACA,SACA,UACA,MACA,WACA,cACA,QACA,QACA,SACA,OACA,WACA,MACA,OACA,UACA,SACA,SACA,aACA,OACA,aACA,SACA,UACA,UACA,OACA,YACA,QACA,cACA,MACA,MACA,MACA,OACA,KACA,SACA,QACA,QACA,SACA,OACA,KACA,OACA,KACA,QACA,OACA,MACA,KACA,MACA,SACA,KACA,WACA,OACA,SACA,SACA,OACA,QACA,WACA,UACA,UACA,kBACA,SACA,MACA,OACA,OACA,MACA,OACA,OACA,KACA,MACA,MACA,KACA,MACA,MACA,aACA,UACA,eACA,SACA,SACA,UACA,UACA,YACA,OACA,OACA,KACA,KACA,SACA,OACA,SACA,WACA,OACA,SACA,QACA,WACA,MACA,QACA,MACA,MACA,OACA,MACA,KACA,KACA,YACA,QACA,OACA,QACA,OACA,UACA,QACA,OACA,WACA,SACA,OACA,WACA,UACA,KACA,OACA,OACA,UACA,OACA,KACA,KACA,MACA,OACA,MACA,QACA,KACA,QACA,KACA,QACA,QACA,KACA,OACA,KACA,SACA,SACA,WACA,WACA,OACA,QACA,YACA,OACA,OACA,MACA,QACA,UACA,QACA,OACA,gBACA,KACA,MACA,MACA,KACA,QACA,UACA,OACA,UACA,YACA,YACA,UACA,MACA,WACA,YACA,UACA,QACA,SACA,SACA,QACA,QACA,KACA,QACA,WACA,SACA,UACA,OACA,UACA,SACA,KACA,SACA,aACA,QACA,KACA,KACA,SACA,WACA,UACA,KACA,MACA,SACA,OACA,SACA,SACA,aACA,QACA,SACA,MACA,OACA,KACA,MACA,KACA,MACA,OACA,OACA,aACA,MACA,WACA,aACA,UACA,SACA,OACA,KACA,KACA,KACA,MACA,UACA,UACA,OACA,UACA,SACA,UACA,OACA,QACA,QACA,KACA,SACA,MACA,KACA,SACA,KACA,KACA,QACA,KACA,KACA,QACA,QACA,QACA,MACA,QACA,UACA,QACA,QACA,OACA,SACA,OACA,KACA,QACA,UACA,WACA,SACA,gBACA,YACA,qBACA,QACA,MACA,KACA,OACA,MACA,QACA,QACA,KACA,MACA,KACA,KACA,KACA,QACA,MACA,WACA,KACA,KACA,SACA,aACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,YACA,OACA,WACA,KACA,KACA,QACA,WACA,WACA,eACA,MACA,KACA,KACA,SACA,QACA,MACA,SACA,SACA,MACA,MACA,SACA,OACA,SACA,QACA,aACA,OACA,OACA,aACA,KACA,QACA,aACA,QACA,OACA,SACA,OACA,SACA,KACA,SACA,QACA,UACA,SACA,OACA,UACA,SACA,QACA,UACA,UACA,iBACA,SACA,QACA,UACA,MACA,UACA,QACA,OACA,KACA,UACA,OACA,OACA,cACA,MACA,UACA,OACA,UACA,MACA,gBACA,WACA,OACA,QACA,QACA,MACA,KACA,MACA,MACA,OACA,QACA,UACA,SACA,MACA,MACA,MACA,KACA,OACA,KACA,KACA,KACA,KACA,OACA,OACA,KACA,MACA,OACA,OACA,KACA,OACA,QACA,KACA,KACA,OACA,KACA,KACA,MACA,SACA,MACA,UACA,SACA,OACA,KACA,MACA,KACA,MACA,MACA,KACA,KACA,MACA,SACA,MACA,MACA,MACA,KACA,cACA,KACA,KACA,KACA,OACA,MACA,KACA,OACA,KACA,KACA,KACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,QACA,OACA,OACA,KACA,OACA,OACA,KACA,SACA,OACA,QACA,KACA,QACA,KACA,KACA,MACA,MACA,KACA,MACA,KACA,MACA,KACA,KACA,KACA,KACA,MACA,UACA,OACA,SACA,QACA,UACA,UACA,SACA,QACA,UACA,SACA,UACA,OACA,QACA,SACA,SACA,WACA,OACA,UACA,QACA,QACA,OACA,SACA,KACA,KACA,KACA,OACA,OACA,MACA,KACA,KACA,OACA,KACA,MACA,QACA,KACA,MACA,KACA,KACA,OACA,KACA,MACA,OACA,KACA,KACA,KACA,QACA,OACA,KACA,KACA,KACA,MACA,KACA,mBACA,oBACA,KACA,KACA,QACA,KACA,MACA,MACA,KACA,SACA,UACA,MACA,MACA,SACA,KACA,SACA,MACA,MACA,SACA,QACA,UACA,SACA,KACA,YACA,OACA,WACA,MACA,UACA,KACA,MACA,KACA,SACA,OACA,OACA,MACA,QACA,KACA,OACA,UACA,O,6BCrg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EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAC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","file":"app.bundle.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/libs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 814);\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","function _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nmodule.exports = _assertThisInitialized;","function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nmodule.exports = _defineProperty;","import hyphenate from 'fbjs/lib/hyphenateStyleName';\nimport React, { cloneElement, Component, createElement } from 'react';\nimport Stylis from 'stylis';\nimport _insertRulePlugin from 'stylis-rule-sheet';\nimport PropTypes from 'prop-types';\nimport hoistStatics from 'hoist-non-react-statics';\nimport { isValidElementType } from 'react-is';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function (obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n// \nvar isPlainObject = (function (x) {\n  return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x.constructor === Object;\n});\n\n// \n\n\n/**\n * Parse errors.md and turn it into a simple hash of code: message\n */\nvar ERRORS = process.env.NODE_ENV !== 'production' ? {\n  \"1\": \"Cannot create styled-component for component: %s.\\n\\n\",\n  \"2\": \"Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\\n\\n* Are you trying to reuse it across renders?\\n* Are you accidentally calling collectStyles twice?\\n\\n\",\n  \"3\": \"Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\\n\\n\",\n  \"4\": \"The `StyleSheetManager` expects a valid target or sheet prop!\\n\\n* Does this error occur on the client and is your target falsy?\\n* Does this error occur on the server and is the sheet falsy?\\n\\n\",\n  \"5\": \"The clone method cannot be used on the client!\\n\\n* Are you running in a client-like environment on the server?\\n* Are you trying to run SSR on the client?\\n\\n\",\n  \"6\": \"Trying to insert a new style tag, but the given Node is unmounted!\\n\\n* Are you using a custom target that isn't mounted?\\n* Does your document not have a valid head element?\\n* Have you accidentally removed a style tag manually?\\n\\n\",\n  \"7\": \"ThemeProvider: Please return an object from your \\\"theme\\\" prop function, e.g.\\n\\n```js\\ntheme={() => ({})}\\n```\\n\\n\",\n  \"8\": \"ThemeProvider: Please make your \\\"theme\\\" prop an object.\\n\\n\",\n  \"9\": \"Missing document `<head>`\\n\\n\",\n  \"10\": \"Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\\n\\n\",\n  \"11\": \"A plain React class (%s) has been interpolated into styles, probably as a component selector (https://www.styled-components.com/docs/advanced#referring-to-other-components). Only styled-component classes can be targeted in this fashion.\"\n} : {};\n\n/**\n * super basic version of sprintf\n */\nfunction format() {\n  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  var a = args[0];\n  var b = [];\n  var c = void 0;\n\n  for (c = 1; c < args.length; c += 1) {\n    b.push(args[c]);\n  }\n\n  b.forEach(function (d) {\n    a = a.replace(/%[a-z]/, d);\n  });\n\n  return a;\n}\n\n/**\n * Create an error file out of errors.md for development and a simple web link to the full errors\n * in production mode.\n */\n\nvar StyledComponentsError = function (_Error) {\n  inherits(StyledComponentsError, _Error);\n\n  function StyledComponentsError(code) {\n    classCallCheck(this, StyledComponentsError);\n\n    for (var _len2 = arguments.length, interpolations = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      interpolations[_key2 - 1] = arguments[_key2];\n    }\n\n    if (process.env.NODE_ENV === 'production') {\n      var _this = possibleConstructorReturn(this, _Error.call(this, 'An error occurred. See https://github.com/styled-components/styled-components/blob/master/src/utils/errors.md#' + code + ' for more information. ' + (interpolations ? 'Additional arguments: ' + interpolations.join(', ') : '')));\n    } else {\n      var _this = possibleConstructorReturn(this, _Error.call(this, format.apply(undefined, [ERRORS[code]].concat(interpolations))));\n    }\n    return possibleConstructorReturn(_this);\n  }\n\n  return StyledComponentsError;\n}(Error);\n\n// \n\nvar objToCss = function objToCss(obj, prevKey) {\n  var css = Object.keys(obj).filter(function (key) {\n    var chunk = obj[key];\n    return chunk !== undefined && chunk !== null && chunk !== false && chunk !== '';\n  }).map(function (key) {\n    if (isPlainObject(obj[key])) return objToCss(obj[key], key);\n    return hyphenate(key) + ': ' + obj[key] + ';';\n  }).join(' ');\n  return prevKey ? prevKey + ' {\\n  ' + css + '\\n}' : css;\n};\n\nvar flatten = function flatten(chunks, executionContext) {\n  return chunks.reduce(function (ruleSet, chunk) {\n    /* Remove falsey values */\n    if (chunk === undefined || chunk === null || chunk === false || chunk === '') {\n      return ruleSet;\n    }\n\n    /* Flatten ruleSet */\n    if (Array.isArray(chunk)) {\n      ruleSet.push.apply(ruleSet, flatten(chunk, executionContext));\n      return ruleSet;\n    }\n\n    /* Handle other components */\n    if (chunk.hasOwnProperty('styledComponentId')) {\n      // $FlowFixMe not sure how to make this pass\n      ruleSet.push('.' + chunk.styledComponentId);\n      return ruleSet;\n    }\n\n    /* Either execute or defer the function */\n    if (typeof chunk === 'function') {\n      if (executionContext) {\n        var nextChunk = chunk(executionContext);\n        /* Throw if a React Element was given styles */\n        if (React.isValidElement(nextChunk)) {\n          var elementName = chunk.displayName || chunk.name;\n          throw new StyledComponentsError(11, elementName);\n        }\n        ruleSet.push.apply(ruleSet, flatten([nextChunk], executionContext));\n      } else ruleSet.push(chunk);\n\n      return ruleSet;\n    }\n\n    /* Handle objects */\n    ruleSet.push(\n    // $FlowFixMe have to add %checks somehow to isPlainObject\n    isPlainObject(chunk) ? objToCss(chunk) : chunk.toString());\n\n    return ruleSet;\n  }, []);\n};\n\n// \n\nvar COMMENT_REGEX = /^\\s*\\/\\/.*$/gm;\n\n// NOTE: This stylis instance is only used to split rules from SSR'd style tags\nvar stylisSplitter = new Stylis({\n  global: false,\n  cascade: true,\n  keyframe: false,\n  prefix: false,\n  compress: false,\n  semicolon: true\n});\n\nvar stylis = new Stylis({\n  global: false,\n  cascade: true,\n  keyframe: false,\n  prefix: true,\n  compress: false,\n  semicolon: false // NOTE: This means \"autocomplete missing semicolons\"\n});\n\n// Wrap `insertRulePlugin to build a list of rules,\n// and then make our own plugin to return the rules. This\n// makes it easier to hook into the existing SSR architecture\n\nvar parsingRules = [];\n// eslint-disable-next-line consistent-return\nvar returnRulesPlugin = function returnRulesPlugin(context) {\n  if (context === -2) {\n    var parsedRules = parsingRules;\n    parsingRules = [];\n    return parsedRules;\n  }\n};\n\nvar parseRulesPlugin = _insertRulePlugin(function (rule) {\n  parsingRules.push(rule);\n});\n\nstylis.use([parseRulesPlugin, returnRulesPlugin]);\nstylisSplitter.use([parseRulesPlugin, returnRulesPlugin]);\n\nvar stringifyRules = function stringifyRules(rules, selector, prefix) {\n  var flatCSS = rules.join('').replace(COMMENT_REGEX, ''); // replace JS comments\n\n  var cssStr = selector && prefix ? prefix + ' ' + selector + ' { ' + flatCSS + ' }' : flatCSS;\n\n  return stylis(prefix || !selector ? '' : selector, cssStr);\n};\n\nvar splitByRules = function splitByRules(css) {\n  return stylisSplitter('', css);\n};\n\n// \n\nfunction isStyledComponent(target) /* : %checks */{\n  return (\n    // $FlowFixMe TODO: flow for styledComponentId\n    typeof target === 'function' && typeof target.styledComponentId === 'string'\n  );\n}\n\n// \n\n/* This function is DEPRECATED and will be removed on the next major version release.\n * It was needed to rehydrate all style blocks prepended to chunks before React\n * tries to rehydrate its HTML stream. Since the master StyleSheet will now detect\n * the use of streamed style tags and will perform the rehydration earlier when needed\n * this function will not be needed anymore */\nfunction consolidateStreamedStyles() {\n  if (process.env.NODE_ENV !== 'production') {\n    // eslint-disable-next-line no-console\n    console.warn('styled-components automatically does streaming SSR rehydration now.\\n' + 'Calling consolidateStreamedStyles manually is no longer necessary and a noop now.\\n' + '- Please remove the consolidateStreamedStyles call from your client.');\n  }\n}\n\n// \n/* eslint-disable no-bitwise */\n\n/* This is the \"capacity\" of our alphabet i.e. 2x26 for all letters plus their capitalised\n * counterparts */\nvar charsLength = 52;\n\n/* start at 75 for 'a' until 'z' (25) and then start at 65 for capitalised letters */\nvar getAlphabeticChar = function getAlphabeticChar(code) {\n  return String.fromCharCode(code + (code > 25 ? 39 : 97));\n};\n\n/* input a number, usually a hash and convert it to base-52 */\nvar generateAlphabeticName = function generateAlphabeticName(code) {\n  var name = '';\n  var x = void 0;\n\n  /* get a char and divide by alphabet-length */\n  for (x = code; x > charsLength; x = Math.floor(x / charsLength)) {\n    name = getAlphabeticChar(x % charsLength) + name;\n  }\n\n  return getAlphabeticChar(x % charsLength) + name;\n};\n\n// \n\nvar interleave = (function (strings, interpolations) {\n  var result = [strings[0]];\n\n  for (var i = 0, len = interpolations.length; i < len; i += 1) {\n    result.push(interpolations[i], strings[i + 1]);\n  }\n\n  return result;\n});\n\n// \nvar EMPTY_ARRAY = Object.freeze([]);\nvar EMPTY_OBJECT = Object.freeze({});\n\n// \n\nvar css = (function (styles) {\n  for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    interpolations[_key - 1] = arguments[_key];\n  }\n\n  if (typeof styles === 'function' || isPlainObject(styles)) {\n    // $FlowFixMe\n    return flatten(interleave(EMPTY_ARRAY, [styles].concat(interpolations)));\n  }\n\n  // $FlowFixMe\n  return flatten(interleave(styles, interpolations));\n});\n\n// \n\n\nvar SC_ATTR = typeof process !== 'undefined' && process.env.SC_ATTR || 'data-styled-components';\nvar SC_STREAM_ATTR = 'data-styled-streamed';\nvar CONTEXT_KEY = '__styled-components-stylesheet__';\n\nvar IS_BROWSER = typeof window !== 'undefined' && 'HTMLElement' in window;\n\nvar DISABLE_SPEEDY = process.env.NODE_ENV !== 'production';\n\n// \nvar SC_COMPONENT_ID = /^[^\\S\\n]*?\\/\\* sc-component-id:\\s*(\\S+)\\s+\\*\\//gm;\n\nvar extractComps = (function (maybeCSS) {\n  var css = '' + (maybeCSS || ''); // Definitely a string, and a clone\n  var existingComponents = [];\n  css.replace(SC_COMPONENT_ID, function (match, componentId, matchIndex) {\n    existingComponents.push({ componentId: componentId, matchIndex: matchIndex });\n    return match;\n  });\n  return existingComponents.map(function (_ref, i) {\n    var componentId = _ref.componentId,\n        matchIndex = _ref.matchIndex;\n\n    var nextComp = existingComponents[i + 1];\n    var cssFromDOM = nextComp ? css.slice(matchIndex, nextComp.matchIndex) : css.slice(matchIndex);\n    return { componentId: componentId, cssFromDOM: cssFromDOM };\n  });\n});\n\n// \n/* eslint-disable camelcase, no-undef */\n\nvar getNonce = (function () {\n  return typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n});\n\n// \n// Helper to call a given function, only once\nvar once = (function (cb) {\n  var called = false;\n\n  return function () {\n    if (!called) {\n      called = true;\n      cb();\n    }\n  };\n});\n\n// \n/* These are helpers for the StyleTags to keep track of the injected\n * rule names for each (component) ID that they're keeping track of.\n * They're crucial for detecting whether a name has already been\n * injected.\n * (This excludes rehydrated names) */\n\n/* adds a new ID:name pairing to a names dictionary */\nvar addNameForId = function addNameForId(names, id, name) {\n  if (name) {\n    // eslint-disable-next-line no-param-reassign\n    var namesForId = names[id] || (names[id] = Object.create(null));\n    namesForId[name] = true;\n  }\n};\n\n/* resets an ID entirely by overwriting it in the dictionary */\nvar resetIdNames = function resetIdNames(names, id) {\n  // eslint-disable-next-line no-param-reassign\n  names[id] = Object.create(null);\n};\n\n/* factory for a names dictionary checking the existance of an ID:name pairing */\nvar hasNameForId = function hasNameForId(names) {\n  return function (id, name) {\n    return names[id] !== undefined && names[id][name];\n  };\n};\n\n/* stringifies names for the html/element output */\nvar stringifyNames = function stringifyNames(names) {\n  var str = '';\n  // eslint-disable-next-line guard-for-in\n  for (var id in names) {\n    str += Object.keys(names[id]).join(' ') + ' ';\n  }\n  return str.trim();\n};\n\n/* clones the nested names dictionary */\nvar cloneNames = function cloneNames(names) {\n  var clone = Object.create(null);\n  // eslint-disable-next-line guard-for-in\n  for (var id in names) {\n    clone[id] = _extends({}, names[id]);\n  }\n  return clone;\n};\n\n// \n\n/* These are helpers that deal with the insertRule (aka speedy) API\n * They are used in the StyleTags and specifically the speedy tag\n */\n\n/* retrieve a sheet for a given style tag */\nvar sheetForTag = function sheetForTag(tag) {\n  // $FlowFixMe\n  if (tag.sheet) return tag.sheet;\n\n  /* Firefox quirk requires us to step through all stylesheets to find one owned by the given tag */\n  var size = document.styleSheets.length;\n  for (var i = 0; i < size; i += 1) {\n    var sheet = document.styleSheets[i];\n    // $FlowFixMe\n    if (sheet.ownerNode === tag) return sheet;\n  }\n\n  /* we should always be able to find a tag */\n  throw new StyledComponentsError(10);\n};\n\n/* insert a rule safely and return whether it was actually injected */\nvar safeInsertRule = function safeInsertRule(sheet, cssRule, index) {\n  /* abort early if cssRule string is falsy */\n  if (!cssRule) return false;\n\n  var maxIndex = sheet.cssRules.length;\n\n  try {\n    /* use insertRule and cap passed index with maxIndex (no of cssRules) */\n    sheet.insertRule(cssRule, index <= maxIndex ? index : maxIndex);\n  } catch (err) {\n    /* any error indicates an invalid rule */\n    return false;\n  }\n\n  return true;\n};\n\n/* deletes `size` rules starting from `removalIndex` */\nvar deleteRules = function deleteRules(sheet, removalIndex, size) {\n  var lowerBound = removalIndex - size;\n  for (var i = removalIndex; i > lowerBound; i -= 1) {\n    sheet.deleteRule(i);\n  }\n};\n\n// \n\n/* this marker separates component styles and is important for rehydration */\nvar makeTextMarker = function makeTextMarker(id) {\n  return '\\n/* sc-component-id: ' + id + ' */\\n';\n};\n\n/* add up all numbers in array up until and including the index */\nvar addUpUntilIndex = function addUpUntilIndex(sizes, index) {\n  var totalUpToIndex = 0;\n  for (var i = 0; i <= index; i += 1) {\n    totalUpToIndex += sizes[i];\n  }\n\n  return totalUpToIndex;\n};\n\n/* create a new style tag after lastEl */\nvar makeStyleTag = function makeStyleTag(target, tagEl, insertBefore) {\n  var el = document.createElement('style');\n  el.setAttribute(SC_ATTR, '');\n\n  var nonce = getNonce();\n  if (nonce) {\n    el.setAttribute('nonce', nonce);\n  }\n\n  /* Work around insertRule quirk in EdgeHTML */\n  el.appendChild(document.createTextNode(''));\n\n  if (target && !tagEl) {\n    /* Append to target when no previous element was passed */\n    target.appendChild(el);\n  } else {\n    if (!tagEl || !target || !tagEl.parentNode) {\n      throw new StyledComponentsError(6);\n    }\n\n    /* Insert new style tag after the previous one */\n    tagEl.parentNode.insertBefore(el, insertBefore ? tagEl : tagEl.nextSibling);\n  }\n\n  return el;\n};\n\n/* takes a css factory function and outputs an html styled tag factory */\nvar wrapAsHtmlTag = function wrapAsHtmlTag(css, names) {\n  return function (additionalAttrs) {\n    var nonce = getNonce();\n    var attrs = [nonce && 'nonce=\"' + nonce + '\"', SC_ATTR + '=\"' + stringifyNames(names) + '\"', additionalAttrs];\n\n    var htmlAttr = attrs.filter(Boolean).join(' ');\n    return '<style ' + htmlAttr + '>' + css() + '</style>';\n  };\n};\n\n/* takes a css factory function and outputs an element factory */\nvar wrapAsElement = function wrapAsElement(css, names) {\n  return function () {\n    var _props;\n\n    var props = (_props = {}, _props[SC_ATTR] = stringifyNames(names), _props);\n\n    var nonce = getNonce();\n    if (nonce) {\n      // $FlowFixMe\n      props.nonce = nonce;\n    }\n\n    // eslint-disable-next-line react/no-danger\n    return React.createElement('style', _extends({}, props, { dangerouslySetInnerHTML: { __html: css() } }));\n  };\n};\n\nvar getIdsFromMarkersFactory = function getIdsFromMarkersFactory(markers) {\n  return function () {\n    return Object.keys(markers);\n  };\n};\n\n/* speedy tags utilise insertRule */\nvar makeSpeedyTag = function makeSpeedyTag(el, getImportRuleTag) {\n  var names = Object.create(null);\n  var markers = Object.create(null);\n  var sizes = [];\n\n  var extractImport = getImportRuleTag !== undefined;\n  /* indicates whther getImportRuleTag was called */\n  var usedImportRuleTag = false;\n\n  var insertMarker = function insertMarker(id) {\n    var prev = markers[id];\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    markers[id] = sizes.length;\n    sizes.push(0);\n    resetIdNames(names, id);\n\n    return markers[id];\n  };\n\n  var insertRules = function insertRules(id, cssRules, name) {\n    var marker = insertMarker(id);\n    var sheet = sheetForTag(el);\n    var insertIndex = addUpUntilIndex(sizes, marker);\n\n    var injectedRules = 0;\n    var importRules = [];\n    var cssRulesSize = cssRules.length;\n\n    for (var i = 0; i < cssRulesSize; i += 1) {\n      var cssRule = cssRules[i];\n      var mayHaveImport = extractImport; /* @import rules are reordered to appear first */\n      if (mayHaveImport && cssRule.indexOf('@import') !== -1) {\n        importRules.push(cssRule);\n      } else if (safeInsertRule(sheet, cssRule, insertIndex + injectedRules)) {\n        mayHaveImport = false;\n        injectedRules += 1;\n      }\n    }\n\n    if (extractImport && importRules.length > 0) {\n      usedImportRuleTag = true;\n      // $FlowFixMe\n      getImportRuleTag().insertRules(id + '-import', importRules);\n    }\n\n    sizes[marker] += injectedRules; /* add up no of injected rules */\n    addNameForId(names, id, name);\n  };\n\n  var removeRules = function removeRules(id) {\n    var marker = markers[id];\n    if (marker === undefined) return;\n\n    var size = sizes[marker];\n    var sheet = sheetForTag(el);\n    var removalIndex = addUpUntilIndex(sizes, marker);\n    deleteRules(sheet, removalIndex, size);\n    sizes[marker] = 0;\n    resetIdNames(names, id);\n\n    if (extractImport && usedImportRuleTag) {\n      // $FlowFixMe\n      getImportRuleTag().removeRules(id + '-import');\n    }\n  };\n\n  var css = function css() {\n    var _sheetForTag = sheetForTag(el),\n        cssRules = _sheetForTag.cssRules;\n\n    var str = '';\n\n    // eslint-disable-next-line guard-for-in\n    for (var id in markers) {\n      str += makeTextMarker(id);\n      var marker = markers[id];\n      var end = addUpUntilIndex(sizes, marker);\n      var size = sizes[marker];\n      for (var i = end - size; i < end; i += 1) {\n        var rule = cssRules[i];\n        if (rule !== undefined) {\n          str += rule.cssText;\n        }\n      }\n    }\n\n    return str;\n  };\n\n  return {\n    clone: function clone() {\n      throw new StyledComponentsError(5);\n    },\n\n    css: css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker: insertMarker,\n    insertRules: insertRules,\n    removeRules: removeRules,\n    sealed: false,\n    styleTag: el,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names)\n  };\n};\n\nvar makeTextNode = function makeTextNode(id) {\n  return document.createTextNode(makeTextMarker(id));\n};\n\nvar makeBrowserTag = function makeBrowserTag(el, getImportRuleTag) {\n  var names = Object.create(null);\n  var markers = Object.create(null);\n\n  var extractImport = getImportRuleTag !== undefined;\n\n  /* indicates whther getImportRuleTag was called */\n  var usedImportRuleTag = false;\n\n  var insertMarker = function insertMarker(id) {\n    var prev = markers[id];\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    markers[id] = makeTextNode(id);\n    el.appendChild(markers[id]);\n    names[id] = Object.create(null);\n\n    return markers[id];\n  };\n\n  var insertRules = function insertRules(id, cssRules, name) {\n    var marker = insertMarker(id);\n    var importRules = [];\n    var cssRulesSize = cssRules.length;\n\n    for (var i = 0; i < cssRulesSize; i += 1) {\n      var rule = cssRules[i];\n      var mayHaveImport = extractImport;\n      if (mayHaveImport && rule.indexOf('@import') !== -1) {\n        importRules.push(rule);\n      } else {\n        mayHaveImport = false;\n        var separator = i === cssRulesSize - 1 ? '' : ' ';\n        marker.appendData('' + rule + separator);\n      }\n    }\n\n    addNameForId(names, id, name);\n\n    if (extractImport && importRules.length > 0) {\n      usedImportRuleTag = true;\n      // $FlowFixMe\n      getImportRuleTag().insertRules(id + '-import', importRules);\n    }\n  };\n\n  var removeRules = function removeRules(id) {\n    var marker = markers[id];\n    if (marker === undefined) return;\n\n    /* create new empty text node and replace the current one */\n    var newMarker = makeTextNode(id);\n    el.replaceChild(newMarker, marker);\n    markers[id] = newMarker;\n    resetIdNames(names, id);\n\n    if (extractImport && usedImportRuleTag) {\n      // $FlowFixMe\n      getImportRuleTag().removeRules(id + '-import');\n    }\n  };\n\n  var css = function css() {\n    var str = '';\n    // eslint-disable-next-line guard-for-in\n    for (var id in markers) {\n      str += markers[id].data;\n    }\n    return str;\n  };\n\n  return {\n    clone: function clone() {\n      throw new StyledComponentsError(5);\n    },\n\n    css: css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker: insertMarker,\n    insertRules: insertRules,\n    removeRules: removeRules,\n    sealed: false,\n    styleTag: el,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names)\n  };\n};\n\nvar makeServerTagInternal = function makeServerTagInternal(namesArg, markersArg) {\n  var names = namesArg === undefined ? Object.create(null) : namesArg;\n  var markers = markersArg === undefined ? Object.create(null) : markersArg;\n\n  var insertMarker = function insertMarker(id) {\n    var prev = markers[id];\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    return markers[id] = [''];\n  };\n\n  var insertRules = function insertRules(id, cssRules, name) {\n    var marker = insertMarker(id);\n    marker[0] += cssRules.join(' ');\n    addNameForId(names, id, name);\n  };\n\n  var removeRules = function removeRules(id) {\n    var marker = markers[id];\n    if (marker === undefined) return;\n    marker[0] = '';\n    resetIdNames(names, id);\n  };\n\n  var css = function css() {\n    var str = '';\n    // eslint-disable-next-line guard-for-in\n    for (var id in markers) {\n      var cssForId = markers[id][0];\n      if (cssForId) {\n        str += makeTextMarker(id) + cssForId;\n      }\n    }\n    return str;\n  };\n\n  var clone = function clone() {\n    var namesClone = cloneNames(names);\n    var markersClone = Object.create(null);\n\n    // eslint-disable-next-line guard-for-in\n    for (var id in markers) {\n      markersClone[id] = [markers[id][0]];\n    }\n\n    return makeServerTagInternal(namesClone, markersClone);\n  };\n\n  var tag = {\n    clone: clone,\n    css: css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker: insertMarker,\n    insertRules: insertRules,\n    removeRules: removeRules,\n    sealed: false,\n    styleTag: null,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names)\n  };\n\n  return tag;\n};\n\nvar makeServerTag = function makeServerTag() {\n  return makeServerTagInternal();\n};\n\nvar makeTag = function makeTag(target, tagEl, forceServer, insertBefore, getImportRuleTag) {\n  if (IS_BROWSER && !forceServer) {\n    var el = makeStyleTag(target, tagEl, insertBefore);\n\n    if (DISABLE_SPEEDY) {\n      return makeBrowserTag(el, getImportRuleTag);\n    } else {\n      return makeSpeedyTag(el, getImportRuleTag);\n    }\n  }\n\n  return makeServerTag();\n};\n\n/* wraps a given tag so that rehydration is performed once when necessary */\nvar makeRehydrationTag = function makeRehydrationTag(tag, els, extracted, immediateRehydration) {\n  /* rehydration function that adds all rules to the new tag */\n  var rehydrate = once(function () {\n    /* add all extracted components to the new tag */\n    for (var i = 0, len = extracted.length; i < len; i += 1) {\n      var _extracted$i = extracted[i],\n          componentId = _extracted$i.componentId,\n          cssFromDOM = _extracted$i.cssFromDOM;\n\n      var cssRules = splitByRules(cssFromDOM);\n      tag.insertRules(componentId, cssRules);\n    }\n\n    /* remove old HTMLStyleElements, since they have been rehydrated */\n    for (var _i = 0, _len = els.length; _i < _len; _i += 1) {\n      var el = els[_i];\n      if (el.parentNode) {\n        el.parentNode.removeChild(el);\n      }\n    }\n  });\n\n  if (immediateRehydration) rehydrate();\n\n  return _extends({}, tag, {\n    /* add rehydration hook to insertion methods */\n    insertMarker: function insertMarker(id) {\n      rehydrate();\n      return tag.insertMarker(id);\n    },\n    insertRules: function insertRules(id, cssRules, name) {\n      rehydrate();\n      return tag.insertRules(id, cssRules, name);\n    }\n  });\n};\n\n// \n\nvar SPLIT_REGEX = /\\s+/;\n\n/* determine the maximum number of components before tags are sharded */\nvar MAX_SIZE = void 0;\nif (IS_BROWSER) {\n  /* in speedy mode we can keep a lot more rules in a sheet before a slowdown can be expected */\n  MAX_SIZE = DISABLE_SPEEDY ? 40 : 1000;\n} else {\n  /* for servers we do not need to shard at all */\n  MAX_SIZE = -1;\n}\n\nvar sheetRunningId = 0;\nvar master = void 0;\n\nvar StyleSheet = function () {\n  /* a map from ids to tags */\n  /* deferred rules for a given id */\n  /* this is used for not reinjecting rules via hasNameForId() */\n  /* when rules for an id are removed using remove() we have to ignore rehydratedNames for it */\n  /* a list of tags belonging to this StyleSheet */\n  /* a tag for import rules */\n  /* current capacity until a new tag must be created */\n  /* children (aka clones) of this StyleSheet inheriting all and future injections */\n\n  function StyleSheet() {\n    var _this = this;\n\n    var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : IS_BROWSER ? document.head : null;\n    var forceServer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    classCallCheck(this, StyleSheet);\n\n    this.getImportRuleTag = function () {\n      var importRuleTag = _this.importRuleTag;\n\n      if (importRuleTag !== undefined) {\n        return importRuleTag;\n      }\n\n      var firstTag = _this.tags[0];\n      var insertBefore = true;\n\n      return _this.importRuleTag = makeTag(_this.target, firstTag ? firstTag.styleTag : null, _this.forceServer, insertBefore);\n    };\n\n    sheetRunningId += 1;\n    this.id = sheetRunningId;\n    this.forceServer = forceServer;\n    this.target = forceServer ? null : target;\n    this.tagMap = {};\n    this.deferred = {};\n    this.rehydratedNames = {};\n    this.ignoreRehydratedNames = {};\n    this.tags = [];\n    this.capacity = 1;\n    this.clones = [];\n  }\n\n  /* rehydrate all SSR'd style tags */\n\n\n  StyleSheet.prototype.rehydrate = function rehydrate() {\n    if (!IS_BROWSER || this.forceServer) {\n      return this;\n    }\n\n    var els = [];\n    var extracted = [];\n    var isStreamed = false;\n\n    /* retrieve all of our SSR style elements from the DOM */\n    var nodes = document.querySelectorAll('style[' + SC_ATTR + ']');\n    var nodesSize = nodes.length;\n\n    /* abort rehydration if no previous style tags were found */\n    if (nodesSize === 0) {\n      return this;\n    }\n\n    for (var i = 0; i < nodesSize; i += 1) {\n      // $FlowFixMe: We can trust that all elements in this query are style elements\n      var el = nodes[i];\n\n      /* check if style tag is a streamed tag */\n      if (!isStreamed) isStreamed = !!el.getAttribute(SC_STREAM_ATTR);\n\n      /* retrieve all component names */\n      var elNames = (el.getAttribute(SC_ATTR) || '').trim().split(SPLIT_REGEX);\n      var elNamesSize = elNames.length;\n      for (var j = 0; j < elNamesSize; j += 1) {\n        var name = elNames[j];\n        /* add rehydrated name to sheet to avoid readding styles */\n        this.rehydratedNames[name] = true;\n      }\n\n      /* extract all components and their CSS */\n      extracted.push.apply(extracted, extractComps(el.textContent));\n\n      /* store original HTMLStyleElement */\n      els.push(el);\n    }\n\n    /* abort rehydration if nothing was extracted */\n    var extractedSize = extracted.length;\n    if (extractedSize === 0) {\n      return this;\n    }\n\n    /* create a tag to be used for rehydration */\n    var tag = this.makeTag(null);\n    var rehydrationTag = makeRehydrationTag(tag, els, extracted, isStreamed);\n\n    /* reset capacity and adjust MAX_SIZE by the initial size of the rehydration */\n    this.capacity = Math.max(1, MAX_SIZE - extractedSize);\n    this.tags.push(rehydrationTag);\n\n    /* retrieve all component ids */\n    for (var _j = 0; _j < extractedSize; _j += 1) {\n      this.tagMap[extracted[_j].componentId] = rehydrationTag;\n    }\n\n    return this;\n  };\n\n  /* retrieve a \"master\" instance of StyleSheet which is typically used when no other is available\n   * The master StyleSheet is targeted by injectGlobal, keyframes, and components outside of any\n    * StyleSheetManager's context */\n\n\n  /* reset the internal \"master\" instance */\n  StyleSheet.reset = function reset() {\n    var forceServer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    master = new StyleSheet(undefined, forceServer).rehydrate();\n  };\n\n  /* adds \"children\" to the StyleSheet that inherit all of the parents' rules\n   * while their own rules do not affect the parent */\n\n\n  StyleSheet.prototype.clone = function clone() {\n    var sheet = new StyleSheet(this.target, this.forceServer);\n\n    /* add to clone array */\n    this.clones.push(sheet);\n\n    /* clone all tags */\n    sheet.tags = this.tags.map(function (tag) {\n      var ids = tag.getIds();\n      var newTag = tag.clone();\n\n      /* reconstruct tagMap */\n      for (var i = 0; i < ids.length; i += 1) {\n        sheet.tagMap[ids[i]] = newTag;\n      }\n\n      return newTag;\n    });\n\n    /* clone other maps */\n    sheet.rehydratedNames = _extends({}, this.rehydratedNames);\n    sheet.deferred = _extends({}, this.deferred);\n\n    return sheet;\n  };\n\n  /* force StyleSheet to create a new tag on the next injection */\n\n\n  StyleSheet.prototype.sealAllTags = function sealAllTags() {\n    this.capacity = 1;\n\n    this.tags.forEach(function (tag) {\n      // eslint-disable-next-line no-param-reassign\n      tag.sealed = true;\n    });\n  };\n\n  StyleSheet.prototype.makeTag = function makeTag$$1(tag) {\n    var lastEl = tag ? tag.styleTag : null;\n    var insertBefore = false;\n\n    return makeTag(this.target, lastEl, this.forceServer, insertBefore, this.getImportRuleTag);\n  };\n\n  /* get a tag for a given componentId, assign the componentId to one, or shard */\n  StyleSheet.prototype.getTagForId = function getTagForId(id) {\n    /* simply return a tag, when the componentId was already assigned one */\n    var prev = this.tagMap[id];\n    if (prev !== undefined && !prev.sealed) {\n      return prev;\n    }\n\n    var tag = this.tags[this.tags.length - 1];\n\n    /* shard (create a new tag) if the tag is exhausted (See MAX_SIZE) */\n    this.capacity -= 1;\n\n    if (this.capacity === 0) {\n      this.capacity = MAX_SIZE;\n      tag = this.makeTag(tag);\n      this.tags.push(tag);\n    }\n\n    return this.tagMap[id] = tag;\n  };\n\n  /* mainly for injectGlobal to check for its id */\n\n\n  StyleSheet.prototype.hasId = function hasId(id) {\n    return this.tagMap[id] !== undefined;\n  };\n\n  /* caching layer checking id+name to already have a corresponding tag and injected rules */\n\n\n  StyleSheet.prototype.hasNameForId = function hasNameForId(id, name) {\n    /* exception for rehydrated names which are checked separately */\n    if (this.ignoreRehydratedNames[id] === undefined && this.rehydratedNames[name]) {\n      return true;\n    }\n\n    var tag = this.tagMap[id];\n    return tag !== undefined && tag.hasNameForId(id, name);\n  };\n\n  /* registers a componentId and registers it on its tag */\n\n\n  StyleSheet.prototype.deferredInject = function deferredInject(id, cssRules) {\n    /* don't inject when the id is already registered */\n    if (this.tagMap[id] !== undefined) return;\n\n    var clones = this.clones;\n\n    for (var i = 0; i < clones.length; i += 1) {\n      clones[i].deferredInject(id, cssRules);\n    }\n\n    this.getTagForId(id).insertMarker(id);\n    this.deferred[id] = cssRules;\n  };\n\n  /* injects rules for a given id with a name that will need to be cached */\n\n\n  StyleSheet.prototype.inject = function inject(id, cssRules, name) {\n    var clones = this.clones;\n\n\n    for (var i = 0; i < clones.length; i += 1) {\n      clones[i].inject(id, cssRules, name);\n    }\n\n    var tag = this.getTagForId(id);\n\n    /* add deferred rules for component */\n    if (this.deferred[id] !== undefined) {\n      // Combine passed cssRules with previously deferred CSS rules\n      // NOTE: We cannot mutate the deferred array itself as all clones\n      // do the same (see clones[i].inject)\n      var rules = this.deferred[id].concat(cssRules);\n      tag.insertRules(id, rules, name);\n\n      this.deferred[id] = undefined;\n    } else {\n      tag.insertRules(id, cssRules, name);\n    }\n  };\n\n  /* removes all rules for a given id, which doesn't remove its marker but resets it */\n\n\n  StyleSheet.prototype.remove = function remove(id) {\n    var tag = this.tagMap[id];\n    if (tag === undefined) return;\n\n    var clones = this.clones;\n\n    for (var i = 0; i < clones.length; i += 1) {\n      clones[i].remove(id);\n    }\n\n    /* remove all rules from the tag */\n    tag.removeRules(id);\n    /* ignore possible rehydrated names */\n    this.ignoreRehydratedNames[id] = true;\n    /* delete possible deferred rules */\n    this.deferred[id] = undefined;\n  };\n\n  StyleSheet.prototype.toHTML = function toHTML() {\n    return this.tags.map(function (tag) {\n      return tag.toHTML();\n    }).join('');\n  };\n\n  StyleSheet.prototype.toReactElements = function toReactElements() {\n    var id = this.id;\n\n\n    return this.tags.map(function (tag, i) {\n      var key = 'sc-' + id + '-' + i;\n      return cloneElement(tag.toElement(), { key: key });\n    });\n  };\n\n  createClass(StyleSheet, null, [{\n    key: 'master',\n    get: function get$$1() {\n      return master || (master = new StyleSheet().rehydrate());\n    }\n\n    /* NOTE: This is just for backwards-compatibility with jest-styled-components */\n\n  }, {\n    key: 'instance',\n    get: function get$$1() {\n      return StyleSheet.master;\n    }\n  }]);\n  return StyleSheet;\n}();\n\nvar _StyleSheetManager$ch;\n\nvar StyleSheetManager = function (_Component) {\n  inherits(StyleSheetManager, _Component);\n\n  function StyleSheetManager() {\n    classCallCheck(this, StyleSheetManager);\n    return possibleConstructorReturn(this, _Component.apply(this, arguments));\n  }\n\n  StyleSheetManager.prototype.getChildContext = function getChildContext() {\n    var _ref;\n\n    return _ref = {}, _ref[CONTEXT_KEY] = this.sheetInstance, _ref;\n  };\n\n  StyleSheetManager.prototype.componentWillMount = function componentWillMount() {\n    if (this.props.sheet) {\n      this.sheetInstance = this.props.sheet;\n    } else if (this.props.target) {\n      this.sheetInstance = new StyleSheet(this.props.target);\n    } else {\n      throw new StyledComponentsError(4);\n    }\n  };\n\n  StyleSheetManager.prototype.render = function render() {\n    /* eslint-disable react/prop-types */\n    // Flow v0.43.1 will report an error accessing the `children` property,\n    // but v0.47.0 will not. It is necessary to use a type cast instead of\n    // a \"fixme\" comment to satisfy both Flow versions.\n    return React.Children.only(this.props.children);\n  };\n\n  return StyleSheetManager;\n}(Component);\n\nStyleSheetManager.childContextTypes = (_StyleSheetManager$ch = {}, _StyleSheetManager$ch[CONTEXT_KEY] = PropTypes.oneOfType([PropTypes.instanceOf(StyleSheet), PropTypes.instanceOf(ServerStyleSheet)]).isRequired, _StyleSheetManager$ch);\nprocess.env.NODE_ENV !== \"production\" ? StyleSheetManager.propTypes = {\n  sheet: PropTypes.oneOfType([PropTypes.instanceOf(StyleSheet), PropTypes.instanceOf(ServerStyleSheet)]),\n  target: PropTypes.shape({\n    appendChild: PropTypes.func.isRequired\n  })\n} : void 0;\n\n// \n\nvar ServerStyleSheet = function () {\n  function ServerStyleSheet() {\n    classCallCheck(this, ServerStyleSheet);\n\n    /* The master sheet might be reset, so keep a reference here */\n    this.masterSheet = StyleSheet.master;\n    this.instance = this.masterSheet.clone();\n    this.closed = false;\n  }\n\n  ServerStyleSheet.prototype.complete = function complete() {\n    if (!this.closed) {\n      /* Remove closed StyleSheets from the master sheet */\n      var index = this.masterSheet.clones.indexOf(this.instance);\n      this.masterSheet.clones.splice(index, 1);\n      this.closed = true;\n    }\n  };\n\n  ServerStyleSheet.prototype.collectStyles = function collectStyles(children) {\n    if (this.closed) {\n      throw new StyledComponentsError(2);\n    }\n\n    return React.createElement(\n      StyleSheetManager,\n      { sheet: this.instance },\n      children\n    );\n  };\n\n  ServerStyleSheet.prototype.getStyleTags = function getStyleTags() {\n    this.complete();\n    return this.instance.toHTML();\n  };\n\n  ServerStyleSheet.prototype.getStyleElement = function getStyleElement() {\n    this.complete();\n    return this.instance.toReactElements();\n  };\n\n  ServerStyleSheet.prototype.interleaveWithNodeStream = function interleaveWithNodeStream(readableStream) {\n    var _this = this;\n\n    {\n      throw new StyledComponentsError(3);\n    }\n\n    /* the tag index keeps track of which tags have already been emitted */\n    var instance = this.instance;\n\n    var instanceTagIndex = 0;\n\n    var streamAttr = SC_STREAM_ATTR + '=\"true\"';\n\n    var transformer = new stream.Transform({\n      transform: function appendStyleChunks(chunk, /* encoding */_, callback) {\n        var tags = instance.tags;\n\n        var html = '';\n\n        /* retrieve html for each new style tag */\n        for (; instanceTagIndex < tags.length; instanceTagIndex += 1) {\n          var tag = tags[instanceTagIndex];\n          html += tag.toHTML(streamAttr);\n        }\n\n        /* force our StyleSheets to emit entirely new tags */\n        instance.sealAllTags();\n\n        /* prepend style html to chunk */\n        this.push(html + chunk);\n        callback();\n      }\n    });\n\n    readableStream.on('end', function () {\n      return _this.complete();\n    });\n    readableStream.on('error', function (err) {\n      _this.complete();\n\n      // forward the error to the transform stream\n      transformer.emit('error', err);\n    });\n\n    return readableStream.pipe(transformer);\n  };\n\n  return ServerStyleSheet;\n}();\n\n// \n\nvar LIMIT = 200;\n\nvar createWarnTooManyClasses = (function (displayName) {\n  var generatedClasses = {};\n  var warningSeen = false;\n\n  return function (className) {\n    if (!warningSeen) {\n      generatedClasses[className] = true;\n      if (Object.keys(generatedClasses).length >= LIMIT) {\n        // Unable to find latestRule in test environment.\n        /* eslint-disable no-console, prefer-template */\n        console.warn('Over ' + LIMIT + ' classes were generated for component ' + displayName + '. \\n' + 'Consider using the attrs method, together with a style object for frequently changed styles.\\n' + 'Example:\\n' + '  const Component = styled.div.attrs({\\n' + '    style: ({ background }) => ({\\n' + '      background,\\n' + '    }),\\n' + '  })`width: 100%;`\\n\\n' + '  <Component />');\n        warningSeen = true;\n        generatedClasses = {};\n      }\n    }\n  };\n});\n\n// \n\nvar determineTheme = (function (props, fallbackTheme, defaultProps) {\n  // Props should take precedence over ThemeProvider, which should take precedence over\n  // defaultProps, but React automatically puts defaultProps on props.\n\n  /* eslint-disable react/prop-types */\n  var isDefaultTheme = defaultProps && props.theme === defaultProps.theme;\n  var theme = props.theme && !isDefaultTheme ? props.theme : fallbackTheme;\n  /* eslint-enable */\n\n  return theme;\n});\n\n// \nvar escapeRegex = /[[\\].#*$><+~=|^:(),\"'`-]+/g;\nvar dashesAtEnds = /(^-|-$)/g;\n\n/**\n * TODO: Explore using CSS.escape when it becomes more available\n * in evergreen browsers.\n */\nfunction escape(str) {\n  return str\n  // Replace all possible CSS selectors\n  .replace(escapeRegex, '-')\n\n  // Remove extraneous hyphens at the start and end\n  .replace(dashesAtEnds, '');\n}\n\n// \n\nfunction getComponentName(target) {\n  return target.displayName || target.name || 'Component';\n}\n\n// \n\nfunction isTag(target) /* : %checks */{\n  return typeof target === 'string';\n}\n\n// \n\nfunction generateDisplayName(target) {\n  return isTag(target) ? 'styled.' + target : 'Styled(' + getComponentName(target) + ')';\n}\n\n// \n/* eslint-disable max-len */\n/**\n * Trying to avoid the unknown-prop errors on styled components by filtering by\n * React's attribute whitelist.\n *\n * To regenerate this regex:\n *\n * 1. `npm i -g regexgen` (https://github.com/devongovett/regexgen)\n * 2. Run `regexgen` with the list of space-separated words below as input\n * 3. Surround the emitted regex with this: `/^(GENERATED_REGEX)$/` -- this will ensure a full string match\n *    and no false positives from partials\n * */\n/*\nchildren dangerouslySetInnerHTML key ref autoFocus defaultValue valueLink defaultChecked checkedLink innerHTML suppressContentEditableWarning onFocusIn onFocusOut className onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown onKeyPress onKeyUp onFocus onBlur onChange onInput onInvalid onSubmit onReset onClick onContextMenu onDoubleClick onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad onAnimationStart onAnimationEnd onAnimationIteration onTransitionEnd onCopyCapture onCutCapture onPasteCapture onCompositionEndCapture onCompositionStartCapture onCompositionUpdateCapture onKeyDownCapture onKeyPressCapture onKeyUpCapture onFocusCapture onBlurCapture onChangeCapture onInputCapture onSubmitCapture onResetCapture onClickCapture onContextMenuCapture onDoubleClickCapture onDragCapture onDragEndCapture onDragEnterCapture onDragExitCapture onDragLeaveCapture onDragOverCapture onDragStartCapture onDropCapture onMouseDownCapture onMouseEnterCapture onMouseLeaveCapture onMouseMoveCapture onMouseOutCapture onMouseOverCapture onMouseUpCapture onSelectCapture onTouchCancelCapture onTouchEndCapture onTouchMoveCapture onTouchStartCapture onScrollCapture onWheelCapture onAbortCapture onCanPlayCapture onCanPlayThroughCapture onDurationChangeCapture onEmptiedCapture onEncryptedCapture onEndedCapture onErrorCapture onLoadedDataCapture onLoadedMetadataCapture onLoadStartCapture onPauseCapture onPlayCapture onPlayingCapture onProgressCapture onRateChangeCapture onSeekedCapture onSeekingCapture onStalledCapture onSuspendCapture onTimeUpdateCapture onVolumeChangeCapture onWaitingCapture onLoadCapture onAnimationStartCapture onAnimationEndCapture onAnimationIterationCapture onTransitionEndCapture accept acceptCharset accessKey action allowFullScreen allowTransparency alt as async autoComplete autoPlay capture cellPadding cellSpacing charSet challenge checked cite classID className cols colSpan content contentEditable contextMenu controlsList controls coords crossOrigin data dateTime default defer dir disabled download draggable encType form formAction formEncType formMethod formNoValidate formTarget frameBorder headers height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity is keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media mediaGroup method min minLength multiple muted name nonce noValidate open optimum pattern placeholder playsInline poster preload profile radioGroup readOnly referrerPolicy rel required reversed role rows rowSpan sandbox scope scoped scrolling seamless selected shape size sizes span spellCheck src srcDoc srcLang srcSet start step style summary tabIndex target title type useMap value width wmode wrap about datatype inlist prefix property resource typeof vocab autoCapitalize autoCorrect autoSave color itemProp itemScope itemType itemID itemRef results security unselectable accentHeight accumulate additive alignmentBaseline allowReorder alphabetic amplitude arabicForm ascent attributeName attributeType autoReverse azimuth baseFrequency baseProfile baselineShift bbox begin bias by calcMode capHeight clip clipPath clipRule clipPathUnits colorInterpolation colorInterpolationFilters colorProfile colorRendering contentScriptType contentStyleType cursor cx cy d decelerate descent diffuseConstant direction display divisor dominantBaseline dur dx dy edgeMode elevation enableBackground end exponent externalResourcesRequired fill fillOpacity fillRule filter filterRes filterUnits floodColor floodOpacity focusable fontFamily fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontWeight format from fx fy g1 g2 glyphName glyphOrientationHorizontal glyphOrientationVertical glyphRef gradientTransform gradientUnits hanging horizAdvX horizOriginX ideographic imageRendering in in2 intercept k k1 k2 k3 k4 kernelMatrix kernelUnitLength kerning keyPoints keySplines keyTimes lengthAdjust letterSpacing lightingColor limitingConeAngle local markerEnd markerMid markerStart markerHeight markerUnits markerWidth mask maskContentUnits maskUnits mathematical mode numOctaves offset opacity operator order orient orientation origin overflow overlinePosition overlineThickness paintOrder panose1 pathLength patternContentUnits patternTransform patternUnits pointerEvents points pointsAtX pointsAtY pointsAtZ preserveAlpha preserveAspectRatio primitiveUnits r radius refX refY renderingIntent repeatCount repeatDur requiredExtensions requiredFeatures restart result rotate rx ry scale seed shapeRendering slope spacing specularConstant specularExponent speed spreadMethod startOffset stdDeviation stemh stemv stitchTiles stopColor stopOpacity strikethroughPosition strikethroughThickness string stroke strokeDasharray strokeDashoffset strokeLinecap strokeLinejoin strokeMiterlimit strokeOpacity strokeWidth surfaceScale systemLanguage tableValues targetX targetY textAnchor textDecoration textRendering textLength to transform u1 u2 underlinePosition underlineThickness unicode unicodeBidi unicodeRange unitsPerEm vAlphabetic vHanging vIdeographic vMathematical values vectorEffect version vertAdvY vertOriginX vertOriginY viewBox viewTarget visibility widths wordSpacing writingMode x xHeight x1 x2 xChannelSelector xlinkActuate xlinkArcrole xlinkHref xlinkRole xlinkShow xlinkTitle xlinkType xmlBase xmlns xmlnsXlink xmlLang xmlSpace y y1 y2 yChannelSelector z zoomAndPan onPointerDown onPointerMove onPointerUp onPointerCancel onGotPointerCapture onLostPointerCapture onPointerEnter onPointerLeave onPointerOver onPointerOut class for autofocus\n*/\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_REGEX = /^((?:s(?:uppressContentEditableWarn|croll|pac)|(?:shape|image|text)Render|(?:letter|word)Spac|vHang|hang)ing|(?:on(?:AnimationIteration|C(?:o(?:mposition(?:Update|Start|End)|ntextMenu|py)|anPlayThrough|anPlay|hange|lick|ut)|(?:Animation|Touch|Load|Drag)Start|(?:(?:Duration|Volume|Rate)Chang|(?:MouseLea|(?:Touch|Mouse)Mo|DragLea)v|Paus)e|Loaded(?:Metad|D)ata|(?:(?:T(?:ransition|ouch)|Animation)E|Suspe)nd|DoubleClick|(?:TouchCanc|Whe)el|Lo(?:stPointer|ad)|TimeUpdate|(?:Mouse(?:Ent|Ov)e|Drag(?:Ent|Ov)e|Erro)r|GotPointer|MouseDown|(?:E(?:n(?:crypt|d)|mpti)|S(?:tall|eek))ed|KeyPress|(?:MouseOu|DragExi|S(?:elec|ubmi)|Rese|Inpu)t|P(?:rogress|laying)|DragEnd|Key(?:Down|Up)|(?:MouseU|Dro)p|(?:Wait|Seek)ing|Scroll|Focus|Paste|Abort|Drag|Play|Blur)Captur|alignmentBaselin|(?:limitingConeAng|xlink(?:(?:Arcr|R)o|Tit)|s(?:urfaceSca|ty|ca)|unselectab|baseProfi|fontSty|(?:focus|dragg)ab|multip|profi|tit)l|d(?:ominantBaselin|efaultValu)|onPointerLeav|a(?:uto(?:Capitaliz|Revers|Sav)|dditiv)|(?:(?:formNoValid|xlinkActu|noValid|accumul|rot)a|autoComple|decelera)t|(?:(?:attribute|item)T|datat)yp|onPointerMov|(?:attribute|glyph)Nam|playsInlin|(?:writing|input|edge)Mod|(?:formE|e)ncTyp|(?:amplitu|mo)d|(?:xlinkTy|itemSco|keyTy|slo)p|(?:xmlSpa|non)c|fillRul|(?:dateTi|na)m|r(?:esourc|ol)|xmlBas|wmod)e|(?:glyphOrientationHorizont|loc)al|(?:externalResourcesRequir|select|revers|mut)ed|c(?:o(?:lorInterpolationFilter|ord)s|o(?:lor(?:Interpolation)?|nt(?:rols|ent))|(?:ontentS(?:cript|tyle)Typ|o(?:ntentEditab|lorProfi)l|l(?:assNam|ipRul)|a(?:lcMod|ptur)|it)e|olorRendering|l(?:ipPathUnits|assID)|(?:ontrolsLis|apHeigh)t|h(?:eckedLink|a(?:llenge|rSet)|ildren|ecked)|ell(?:Spac|Padd)ing|o(?:ntextMenu|ls)|(?:rossOrigi|olSpa)n|l(?:ip(?:Path)?|ass)|ursor|[xy])|glyphOrientationVertical|d(?:angerouslySetInnerHTML|efaultChecked|ownload|isabled|isplay|[xy])|(?:s(?:trikethroughThickn|eaml)es|(?:und|ov)erlineThicknes|r(?:equiredExtension|adiu)|(?:requiredFeatur|tableValu|stitchTil|numOctav|filterR)e|key(?:(?:Splin|Tim)e|Param)|auto[Ff]ocu|header|bia)s|(?:(?:st(?:rikethroughPosi|dDevia)|(?:und|ov)erlinePosi|(?:textDecor|elev)a|orienta)tio|(?:strokeLinejo|orig)i|on(?:PointerDow|FocusI)|formActio|zoomAndPa|directio|(?:vers|act)io|rowSpa|begi|ico)n|o(?:n(?:AnimationIteration|C(?:o(?:mposition(?:Update|Start|End)|ntextMenu|py)|anPlayThrough|anPlay|hange|lick|ut)|(?:(?:Duration|Volume|Rate)Chang|(?:MouseLea|(?:Touch|Mouse)Mo|DragLea)v|Paus)e|Loaded(?:Metad|D)ata|(?:Animation|Touch|Load|Drag)Start|(?:(?:T(?:ransition|ouch)|Animation)E|Suspe)nd|DoubleClick|(?:TouchCanc|Whe)el|(?:Mouse(?:Ent|Ov)e|Drag(?:Ent|Ov)e|Erro)r|TimeUpdate|(?:E(?:n(?:crypt|d)|mpti)|S(?:tall|eek))ed|MouseDown|P(?:rogress|laying)|(?:MouseOu|DragExi|S(?:elec|ubmi)|Rese|Inpu)t|KeyPress|DragEnd|Key(?:Down|Up)|(?:Wait|Seek)ing|(?:MouseU|Dro)p|Scroll|Paste|Focus|Abort|Drag|Play|Load|Blur)|rient)|p(?:reserveA(?:spectRatio|lpha)|ointsAt[X-Z]|anose1)|(?:patternContent|ma(?:sk(?:Content)?|rker)|primitive|gradient|pattern|filter)Units|(?:(?:allowTranspar|baseFrequ)enc|re(?:ferrerPolic|adOnl)|(?:(?:st(?:roke|op)O|floodO|fillO|o)pac|integr|secur)it|visibilit|fontFamil|accessKe|propert|summar)y|(?:gradientT|patternT|t)ransform|(?:[xy]ChannelSelect|lightingCol|textAnch|floodCol|stopCol|operat|htmlF)or|(?:strokeMiterlimi|(?:specularConsta|repeatCou|fontVaria)n|(?:(?:specularE|e)xpon|renderingInt|asc)en|d(?:iffuseConsta|esce)n|(?:fontSizeAdju|lengthAdju|manife)s|baselineShif|onPointerOu|vectorEffec|(?:(?:mar(?:ker|gin)|x)H|accentH|fontW)eigh|markerStar|a(?:utoCorrec|bou)|onFocusOu|intercep|restar|forma|inlis|heigh|lis)t|(?:(?:st(?:rokeDasho|artO)|o)ffs|acceptChars|formTarg|viewTarg|srcS)et|k(?:ernel(?:UnitLength|Matrix)|[1-4])|(?:(?:enableBackgrou|markerE)n|s(?:p(?:readMetho|ee)|ee)|formMetho|(?:markerM|onInval)i|preloa|metho|kin)d|strokeDasharray|(?:onPointerCanc|lab)el|(?:allowFullScre|hidd)en|systemLanguage|(?:(?:o(?:nPointer(?:Ent|Ov)|rd)|allowReord|placehold|frameBord|paintOrd|post)e|repeatDu|d(?:efe|u))r|v(?:Mathematical|ert(?:Origin[XY]|AdvY)|alues|ocab)|(?:pointerEve|keyPoi)nts|(?:strokeLineca|onPointerU|itemPro|useMa|wra|loo)p|h(?:oriz(?:Origin|Adv)X|ttpEquiv)|(?:vI|i)deographic|unicodeRange|mathematical|vAlphabetic|u(?:nicodeBidi|[12])|(?:fontStretc|hig)h|(?:(?:mar(?:ker|gin)W|strokeW)id|azimu)th|(?:xmlnsXl|valueL)ink|mediaGroup|spellCheck|(?:text|m(?:in|ax))Length|(?:unitsPerE|optimu|fro)m|r(?:adioGroup|e(?:sults|f[XY]|l)|ows|[xy])|a(?:rabicForm|l(?:phabetic|t)|sync)|pathLength|innerHTML|xlinkShow|(?:xlinkHr|glyphR)ef|(?:tabInde|(?:sand|b)bo|viewBo)x|(?:(?:href|xml|src)La|kerni)ng|autoPlay|o(?:verflow|pen)|f(?:o(?:ntSize|rm?)|il(?:ter|l))|r(?:e(?:quired|sult|f))?|divisor|p(?:attern|oints)|unicode|d(?:efault|ata|ir)?|i(?:temRef|n2|s)|t(?:arget[XY]|o)|srcDoc|s(?:coped|te(?:m[hv]|p)|pan)|(?:width|size)s|prefix|typeof|itemID|s(?:t(?:roke|art)|hape|cope|rc)|t(?:arget|ype)|(?:stri|la)ng|a(?:ccept|s)|m(?:edia|a(?:sk|x)|in)|x(?:mlns)?|width|value|size|href|k(?:ey)?|end|low|by|i[dn]|y[12]|g[12]|x[12]|f[xy]|[yz])$/;\n\n/* From DOMProperty */\nvar ATTRIBUTE_NAME_START_CHAR = ':A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + '\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nvar isCustomAttribute = RegExp.prototype.test.bind(new RegExp('^(x|data|aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$'));\n\nvar validAttr = (function (name) {\n  return ATTRIBUTE_REGEX.test(name) || isCustomAttribute(name.toLowerCase());\n});\n\n// \n\nfunction hasInInheritanceChain(child, parent) {\n  var target = child;\n\n  while (target) {\n    target = Object.getPrototypeOf(target);\n\n    if (target && target === parent) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n// \n/**\n * Creates a broadcast that can be listened to, i.e. simple event emitter\n *\n * @see https://github.com/ReactTraining/react-broadcast\n */\n\nvar createBroadcast = function createBroadcast(initialState) {\n  var listeners = {};\n  var id = 0;\n  var state = initialState;\n\n  function publish(nextState) {\n    state = nextState;\n\n    // eslint-disable-next-line guard-for-in, no-restricted-syntax\n    for (var key in listeners) {\n      var listener = listeners[key];\n      if (listener === undefined) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      listener(state);\n    }\n  }\n\n  function subscribe(listener) {\n    var currentId = id;\n    listeners[currentId] = listener;\n    id += 1;\n    listener(state);\n    return currentId;\n  }\n\n  function unsubscribe(unsubID) {\n    listeners[unsubID] = undefined;\n  }\n\n  return { publish: publish, subscribe: subscribe, unsubscribe: unsubscribe };\n};\n\nvar _contextShape, _ThemeProvider$contex;\n\n// NOTE: DO NOT CHANGE, changing this is a semver major change!\nvar CHANNEL = '__styled-components__';\nvar CHANNEL_NEXT = CHANNEL + 'next__';\n\nvar CONTEXT_CHANNEL_SHAPE = PropTypes.shape({\n  getTheme: PropTypes.func,\n  subscribe: PropTypes.func,\n  unsubscribe: PropTypes.func\n});\n\nvar contextShape = (_contextShape = {}, _contextShape[CHANNEL] = PropTypes.func, _contextShape[CHANNEL_NEXT] = CONTEXT_CHANNEL_SHAPE, _contextShape);\n\nvar warnChannelDeprecated = void 0;\nif (process.env.NODE_ENV !== 'production') {\n  warnChannelDeprecated = once(function () {\n    // eslint-disable-next-line no-console\n    console.warn('Warning: Usage of `context.' + CHANNEL + '` as a function is deprecated. It will be replaced with the object on `.context.' + CHANNEL_NEXT + '` in a future version.');\n  });\n}\n\nvar isFunction = function isFunction(test) {\n  return typeof test === 'function';\n};\n\n/**\n * Provide a theme to an entire react component tree via context and event listeners (have to do\n * both context and event emitter as pure components block context updates)\n */\n\nvar ThemeProvider = function (_Component) {\n  inherits(ThemeProvider, _Component);\n\n  function ThemeProvider() {\n    classCallCheck(this, ThemeProvider);\n\n    var _this = possibleConstructorReturn(this, _Component.call(this));\n\n    _this.unsubscribeToOuterId = -1;\n\n    _this.getTheme = _this.getTheme.bind(_this);\n    return _this;\n  }\n\n  ThemeProvider.prototype.componentWillMount = function componentWillMount() {\n    var _this2 = this;\n\n    // If there is a ThemeProvider wrapper anywhere around this theme provider, merge this theme\n    // with the outer theme\n    var outerContext = this.context[CHANNEL_NEXT];\n    if (outerContext !== undefined) {\n      this.unsubscribeToOuterId = outerContext.subscribe(function (theme) {\n        _this2.outerTheme = theme;\n\n        if (_this2.broadcast !== undefined) {\n          _this2.publish(_this2.props.theme);\n        }\n      });\n    }\n\n    this.broadcast = createBroadcast(this.getTheme());\n  };\n\n  ThemeProvider.prototype.getChildContext = function getChildContext() {\n    var _this3 = this,\n        _babelHelpers$extends;\n\n    return _extends({}, this.context, (_babelHelpers$extends = {}, _babelHelpers$extends[CHANNEL_NEXT] = {\n      getTheme: this.getTheme,\n      subscribe: this.broadcast.subscribe,\n      unsubscribe: this.broadcast.unsubscribe\n    }, _babelHelpers$extends[CHANNEL] = function (subscriber) {\n      if (process.env.NODE_ENV !== 'production') {\n        warnChannelDeprecated();\n      }\n\n      // Patch the old `subscribe` provide via `CHANNEL` for older clients.\n      var unsubscribeId = _this3.broadcast.subscribe(subscriber);\n      return function () {\n        return _this3.broadcast.unsubscribe(unsubscribeId);\n      };\n    }, _babelHelpers$extends));\n  };\n\n  ThemeProvider.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n    if (this.props.theme !== nextProps.theme) {\n      this.publish(nextProps.theme);\n    }\n  };\n\n  ThemeProvider.prototype.componentWillUnmount = function componentWillUnmount() {\n    if (this.unsubscribeToOuterId !== -1) {\n      this.context[CHANNEL_NEXT].unsubscribe(this.unsubscribeToOuterId);\n    }\n  };\n\n  // Get the theme from the props, supporting both (outerTheme) => {} as well as object notation\n\n\n  ThemeProvider.prototype.getTheme = function getTheme(passedTheme) {\n    var theme = passedTheme || this.props.theme;\n\n    if (isFunction(theme)) {\n      var mergedTheme = theme(this.outerTheme);\n\n      if (process.env.NODE_ENV !== 'production' && (mergedTheme === null || Array.isArray(mergedTheme) || (typeof mergedTheme === 'undefined' ? 'undefined' : _typeof(mergedTheme)) !== 'object')) {\n        throw new StyledComponentsError(7);\n      }\n\n      return mergedTheme;\n    }\n\n    if (theme === null || Array.isArray(theme) || (typeof theme === 'undefined' ? 'undefined' : _typeof(theme)) !== 'object') {\n      throw new StyledComponentsError(8);\n    }\n\n    return _extends({}, this.outerTheme, theme);\n  };\n\n  ThemeProvider.prototype.publish = function publish(theme) {\n    this.broadcast.publish(this.getTheme(theme));\n  };\n\n  ThemeProvider.prototype.render = function render() {\n    if (!this.props.children) {\n      return null;\n    }\n\n    return React.Children.only(this.props.children);\n  };\n\n  return ThemeProvider;\n}(Component);\n\nThemeProvider.childContextTypes = contextShape;\nThemeProvider.contextTypes = (_ThemeProvider$contex = {}, _ThemeProvider$contex[CHANNEL_NEXT] = CONTEXT_CHANNEL_SHAPE, _ThemeProvider$contex);\n\nvar _babelHelpers$extends;\n\n// HACK for generating all static styles without needing to allocate\n// an empty execution context every single time...\nvar STATIC_EXECUTION_CONTEXT = {};\n\nvar modifiedContextShape = _extends({}, contextShape, (_babelHelpers$extends = {}, _babelHelpers$extends[CONTEXT_KEY] = PropTypes.oneOfType([PropTypes.instanceOf(StyleSheet), PropTypes.instanceOf(ServerStyleSheet)]), _babelHelpers$extends));\n\nvar identifiers = {};\n\n/* We depend on components having unique IDs */\nvar generateId = function generateId(ComponentStyle, _displayName, parentComponentId) {\n  var displayName = typeof _displayName !== 'string' ? 'sc' : escape(_displayName);\n\n  /**\n   * This ensures uniqueness if two components happen to share\n   * the same displayName.\n   */\n  var nr = (identifiers[displayName] || 0) + 1;\n  identifiers[displayName] = nr;\n\n  var componentId = displayName + '-' + ComponentStyle.generateName(displayName + nr);\n\n  return parentComponentId !== undefined ? parentComponentId + '-' + componentId : componentId;\n};\n\nvar warnExtendDeprecated = function warnExtendDeprecated() {};\nif (process.env.NODE_ENV !== 'production') {\n  warnExtendDeprecated = once(function () {\n    // eslint-disable-next-line no-console\n    console.warn('Warning: The \"extend\" API will be removed in the upcoming v4.0 release. Use styled(StyledComponent) instead. You can find more information here: https://github.com/styled-components/styled-components/issues/1546');\n  });\n}\n\n// $FlowFixMe\n\nvar BaseStyledComponent = function (_Component) {\n  inherits(BaseStyledComponent, _Component);\n\n  function BaseStyledComponent() {\n    var _temp, _this, _ret;\n\n    classCallCheck(this, BaseStyledComponent);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.attrs = {}, _this.state = {\n      theme: null,\n      generatedClassName: ''\n    }, _this.unsubscribeId = -1, _temp), possibleConstructorReturn(_this, _ret);\n  }\n\n  BaseStyledComponent.prototype.unsubscribeFromContext = function unsubscribeFromContext() {\n    if (this.unsubscribeId !== -1) {\n      this.context[CHANNEL_NEXT].unsubscribe(this.unsubscribeId);\n    }\n  };\n\n  BaseStyledComponent.prototype.buildExecutionContext = function buildExecutionContext(theme, props) {\n    var attrs = this.constructor.attrs;\n\n    var context = _extends({}, props, { theme: theme });\n    if (attrs === undefined) {\n      return context;\n    }\n\n    this.attrs = Object.keys(attrs).reduce(function (acc, key) {\n      var attr = attrs[key];\n\n      // eslint-disable-next-line no-param-reassign\n      acc[key] = typeof attr === 'function' && !hasInInheritanceChain(attr, Component) ? attr(context) : attr;\n      return acc;\n    }, {});\n\n    return _extends({}, context, this.attrs);\n  };\n\n  BaseStyledComponent.prototype.generateAndInjectStyles = function generateAndInjectStyles(theme, props) {\n    var _constructor = this.constructor,\n        attrs = _constructor.attrs,\n        componentStyle = _constructor.componentStyle,\n        warnTooManyClasses = _constructor.warnTooManyClasses;\n\n    var styleSheet = this.context[CONTEXT_KEY] || StyleSheet.master;\n\n    // statically styled-components don't need to build an execution context object,\n    // and shouldn't be increasing the number of class names\n    if (componentStyle.isStatic && attrs === undefined) {\n      return componentStyle.generateAndInjectStyles(STATIC_EXECUTION_CONTEXT, styleSheet);\n    } else {\n      var executionContext = this.buildExecutionContext(theme, props);\n      var className = componentStyle.generateAndInjectStyles(executionContext, styleSheet);\n\n      if (process.env.NODE_ENV !== 'production' && warnTooManyClasses !== undefined) {\n        warnTooManyClasses(className);\n      }\n\n      return className;\n    }\n  };\n\n  BaseStyledComponent.prototype.componentWillMount = function componentWillMount() {\n    var _this2 = this;\n\n    var componentStyle = this.constructor.componentStyle;\n\n    var styledContext = this.context[CHANNEL_NEXT];\n\n    // If this is a statically-styled component, we don't need to the theme\n    // to generate or build styles.\n    if (componentStyle.isStatic) {\n      var generatedClassName = this.generateAndInjectStyles(STATIC_EXECUTION_CONTEXT, this.props);\n      this.setState({ generatedClassName: generatedClassName });\n      // If there is a theme in the context, subscribe to the event emitter. This\n      // is necessary due to pure components blocking context updates, this circumvents\n      // that by updating when an event is emitted\n    } else if (styledContext !== undefined) {\n      var subscribe = styledContext.subscribe;\n\n      this.unsubscribeId = subscribe(function (nextTheme) {\n        // This will be called once immediately\n        var theme = determineTheme(_this2.props, nextTheme, _this2.constructor.defaultProps);\n\n        var generatedClassName = _this2.generateAndInjectStyles(theme, _this2.props);\n\n        _this2.setState({ theme: theme, generatedClassName: generatedClassName });\n      });\n    } else {\n      // eslint-disable-next-line react/prop-types\n      var theme = this.props.theme || EMPTY_OBJECT;\n      var _generatedClassName = this.generateAndInjectStyles(theme, this.props);\n      this.setState({ theme: theme, generatedClassName: _generatedClassName });\n    }\n  };\n\n  BaseStyledComponent.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n    var _this3 = this;\n\n    // If this is a statically-styled component, we don't need to listen to\n    // props changes to update styles\n    var componentStyle = this.constructor.componentStyle;\n\n    if (componentStyle.isStatic) {\n      return;\n    }\n\n    this.setState(function (prevState) {\n      var theme = determineTheme(nextProps, prevState.theme, _this3.constructor.defaultProps);\n      var generatedClassName = _this3.generateAndInjectStyles(theme, nextProps);\n\n      return { theme: theme, generatedClassName: generatedClassName };\n    });\n  };\n\n  BaseStyledComponent.prototype.componentWillUnmount = function componentWillUnmount() {\n    this.unsubscribeFromContext();\n  };\n\n  BaseStyledComponent.prototype.render = function render() {\n    // eslint-disable-next-line react/prop-types\n    var innerRef = this.props.innerRef;\n    var generatedClassName = this.state.generatedClassName;\n    var _constructor2 = this.constructor,\n        styledComponentId = _constructor2.styledComponentId,\n        target = _constructor2.target;\n\n\n    var isTargetTag = isTag(target);\n\n    var className = [\n    // eslint-disable-next-line react/prop-types\n    this.props.className, styledComponentId, this.attrs.className, generatedClassName].filter(Boolean).join(' ');\n\n    var baseProps = _extends({}, this.attrs, {\n      className: className\n    });\n\n    if (isStyledComponent(target)) {\n      baseProps.innerRef = innerRef;\n    } else {\n      baseProps.ref = innerRef;\n    }\n\n    var propsForElement = baseProps;\n    var key = void 0;\n\n    for (key in this.props) {\n      // Don't pass through non HTML tags through to HTML elements\n      // always omit innerRef\n      if (key !== 'innerRef' && key !== 'className' && (!isTargetTag || validAttr(key))) {\n        propsForElement[key] = key === 'style' && key in this.attrs ? _extends({}, this.attrs[key], this.props[key]) : this.props[key];\n      }\n    }\n\n    return createElement(target, propsForElement);\n  };\n\n  return BaseStyledComponent;\n}(Component);\n\nvar _StyledComponent = (function (ComponentStyle, constructWithOptions) {\n  var createStyledComponent = function createStyledComponent(target, options, rules) {\n    var _options$isClass = options.isClass,\n        isClass = _options$isClass === undefined ? !isTag(target) : _options$isClass,\n        _options$displayName = options.displayName,\n        displayName = _options$displayName === undefined ? generateDisplayName(target) : _options$displayName,\n        _options$componentId = options.componentId,\n        componentId = _options$componentId === undefined ? generateId(ComponentStyle, options.displayName, options.parentComponentId) : _options$componentId,\n        _options$ParentCompon = options.ParentComponent,\n        ParentComponent = _options$ParentCompon === undefined ? BaseStyledComponent : _options$ParentCompon,\n        extendingRules = options.rules,\n        attrs = options.attrs;\n\n\n    var styledComponentId = options.displayName && options.componentId ? escape(options.displayName) + '-' + options.componentId : options.componentId || componentId;\n\n    var componentStyle = new ComponentStyle(extendingRules === undefined ? rules : extendingRules.concat(rules), attrs, styledComponentId);\n\n    var StyledComponent = function (_ParentComponent) {\n      inherits(StyledComponent, _ParentComponent);\n\n      function StyledComponent() {\n        classCallCheck(this, StyledComponent);\n        return possibleConstructorReturn(this, _ParentComponent.apply(this, arguments));\n      }\n\n      StyledComponent.withComponent = function withComponent(tag) {\n        var previousComponentId = options.componentId,\n            optionsToCopy = objectWithoutProperties(options, ['componentId']);\n\n\n        var newComponentId = previousComponentId && previousComponentId + '-' + (isTag(tag) ? tag : escape(getComponentName(tag)));\n\n        var newOptions = _extends({}, optionsToCopy, {\n          componentId: newComponentId,\n          ParentComponent: StyledComponent\n        });\n\n        return createStyledComponent(tag, newOptions, rules);\n      };\n\n      createClass(StyledComponent, null, [{\n        key: 'extend',\n        get: function get$$1() {\n          var rulesFromOptions = options.rules,\n              parentComponentId = options.componentId,\n              optionsToCopy = objectWithoutProperties(options, ['rules', 'componentId']);\n\n\n          var newRules = rulesFromOptions === undefined ? rules : rulesFromOptions.concat(rules);\n\n          var newOptions = _extends({}, optionsToCopy, {\n            rules: newRules,\n            parentComponentId: parentComponentId,\n            ParentComponent: StyledComponent\n          });\n\n          warnExtendDeprecated();\n\n          return constructWithOptions(createStyledComponent, target, newOptions);\n        }\n      }]);\n      return StyledComponent;\n    }(ParentComponent);\n\n    StyledComponent.attrs = attrs;\n    StyledComponent.componentStyle = componentStyle;\n    StyledComponent.contextTypes = modifiedContextShape;\n    StyledComponent.displayName = displayName;\n    StyledComponent.styledComponentId = styledComponentId;\n    StyledComponent.target = target;\n\n\n    if (process.env.NODE_ENV !== 'production') {\n      StyledComponent.warnTooManyClasses = createWarnTooManyClasses(displayName);\n    }\n\n    if (isClass) {\n      hoistStatics(StyledComponent, target, {\n        // all SC-specific things should not be hoisted\n        attrs: true,\n        componentStyle: true,\n        displayName: true,\n        extend: true,\n        styledComponentId: true,\n        target: true,\n        warnTooManyClasses: true,\n        withComponent: true\n      });\n    }\n\n    return StyledComponent;\n  };\n\n  return createStyledComponent;\n});\n\n// Source: https://github.com/garycourt/murmurhash-js/blob/master/murmurhash2_gc.js\nfunction murmurhash(str) {\n  var l = str.length | 0,\n      h = l | 0,\n      i = 0,\n      k;\n\n  while (l >= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n\n    k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n    k ^= k >>> 24;\n    k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n\n    h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16) ^ k;\n\n    l -= 4;\n    ++i;\n  }\n\n  switch (l) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n  }\n\n  h ^= h >>> 13;\n  h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n  h ^= h >>> 15;\n\n  return h >>> 0;\n}\n\n// \n\nvar areStylesCacheable = IS_BROWSER;\n\nvar isStaticRules = function isStaticRules(rules, attrs) {\n  for (var i = 0, len = rules.length; i < len; i += 1) {\n    var rule = rules[i];\n\n    // recursive case\n    if (Array.isArray(rule) && !isStaticRules(rule)) {\n      return false;\n    } else if (typeof rule === 'function' && !isStyledComponent(rule)) {\n      // functions are allowed to be static if they're just being\n      // used to get the classname of a nested styled component\n      return false;\n    }\n  }\n\n  if (attrs !== undefined) {\n    // eslint-disable-next-line guard-for-in, no-restricted-syntax\n    for (var key in attrs) {\n      if (typeof attrs[key] === 'function') {\n        return false;\n      }\n    }\n  }\n\n  return true;\n};\n\nvar isHMREnabled = typeof module !== 'undefined' && module.hot && process.env.NODE_ENV !== 'production';\n\n/*\n ComponentStyle is all the CSS-specific stuff, not\n the React-specific stuff.\n */\nvar _ComponentStyle = (function (nameGenerator, flatten, stringifyRules) {\n  /* combines hashStr (murmurhash) and nameGenerator for convenience */\n  var generateRuleHash = function generateRuleHash(str) {\n    return nameGenerator(murmurhash(str));\n  };\n\n  var ComponentStyle = function () {\n    function ComponentStyle(rules, attrs, componentId) {\n      classCallCheck(this, ComponentStyle);\n\n      this.rules = rules;\n      this.isStatic = !isHMREnabled && isStaticRules(rules, attrs);\n      this.componentId = componentId;\n\n      if (!StyleSheet.master.hasId(componentId)) {\n        var placeholder = process.env.NODE_ENV !== 'production' ? ['.' + componentId + ' {}'] : [];\n\n        StyleSheet.master.deferredInject(componentId, placeholder);\n      }\n    }\n\n    /*\n     * Flattens a rule set into valid CSS\n     * Hashes it, wraps the whole chunk in a .hash1234 {}\n     * Returns the hash to be injected on render()\n     * */\n\n\n    ComponentStyle.prototype.generateAndInjectStyles = function generateAndInjectStyles(executionContext, styleSheet) {\n      var isStatic = this.isStatic,\n          componentId = this.componentId,\n          lastClassName = this.lastClassName;\n\n      if (areStylesCacheable && isStatic && lastClassName !== undefined && styleSheet.hasNameForId(componentId, lastClassName)) {\n        return lastClassName;\n      }\n\n      var flatCSS = flatten(this.rules, executionContext);\n      var name = generateRuleHash(this.componentId + flatCSS.join(''));\n\n      if (!styleSheet.hasNameForId(componentId, name)) {\n        styleSheet.inject(this.componentId, stringifyRules(flatCSS, '.' + name), name);\n      }\n\n      this.lastClassName = name;\n      return name;\n    };\n\n    ComponentStyle.generateName = function generateName(str) {\n      return generateRuleHash(str);\n    };\n\n    return ComponentStyle;\n  }();\n\n  return ComponentStyle;\n});\n\n// \n// Thanks to ReactDOMFactories for this handy list!\n\nvar domElements = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr',\n\n// SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\n// \n\nvar _styled = (function (styledComponent, constructWithOptions) {\n  var styled = function styled(tag) {\n    return constructWithOptions(styledComponent, tag);\n  };\n\n  // Shorthands for all valid HTML Elements\n  domElements.forEach(function (domElement) {\n    styled[domElement] = styled(domElement);\n  });\n\n  return styled;\n});\n\n// \n\nvar replaceWhitespace = function replaceWhitespace(str) {\n  return str.replace(/\\s|\\\\n/g, '');\n};\n\nvar _keyframes = (function (nameGenerator, stringifyRules, css) {\n  return function () {\n    var styleSheet = StyleSheet.master;\n    var rules = css.apply(undefined, arguments);\n    var name = nameGenerator(murmurhash(replaceWhitespace(JSON.stringify(rules))));\n    var id = 'sc-keyframes-' + name;\n\n    if (!styleSheet.hasNameForId(id, name)) {\n      styleSheet.inject(id, stringifyRules(rules, name, '@keyframes'), name);\n    }\n\n    return name;\n  };\n});\n\n// \n\nvar _injectGlobal = (function (stringifyRules, css) {\n  var injectGlobal = function injectGlobal() {\n    var styleSheet = StyleSheet.master;\n    var rules = css.apply(undefined, arguments);\n    var hash = murmurhash(JSON.stringify(rules));\n    var id = 'sc-global-' + hash;\n\n    if (!styleSheet.hasId(id)) {\n      styleSheet.inject(id, stringifyRules(rules));\n    }\n  };\n\n  return injectGlobal;\n});\n\n// \n\nvar _constructWithOptions = (function (css) {\n  var constructWithOptions = function constructWithOptions(componentConstructor, tag) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_OBJECT;\n\n    if (!isValidElementType(tag)) {\n      throw new StyledComponentsError(1, String(tag));\n    }\n\n    /* This is callable directly as a template function */\n    // $FlowFixMe: Not typed to avoid destructuring arguments\n    var templateFunction = function templateFunction() {\n      return componentConstructor(tag, options, css.apply(undefined, arguments));\n    };\n\n    /* If config methods are called, wrap up a new template function and merge options */\n    templateFunction.withConfig = function (config) {\n      return constructWithOptions(componentConstructor, tag, _extends({}, options, config));\n    };\n    templateFunction.attrs = function (attrs) {\n      return constructWithOptions(componentConstructor, tag, _extends({}, options, {\n        attrs: _extends({}, options.attrs || EMPTY_OBJECT, attrs)\n      }));\n    };\n\n    return templateFunction;\n  };\n\n  return constructWithOptions;\n});\n\n// \n\nvar withTheme = (function (Component$$1) {\n  var isStatelessFunctionalComponent = typeof Component$$1 === 'function' &&\n  // $FlowFixMe TODO: flow for prototype\n  !(Component$$1.prototype && 'isReactComponent' in Component$$1.prototype);\n\n  // NOTE: We can't pass a ref to a stateless functional component\n  var shouldSetInnerRef = isStyledComponent(Component$$1) || isStatelessFunctionalComponent;\n\n  var WithTheme = function (_React$Component) {\n    inherits(WithTheme, _React$Component);\n\n    function WithTheme() {\n      var _temp, _this, _ret;\n\n      classCallCheck(this, WithTheme);\n\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _ret = (_temp = (_this = possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = EMPTY_OBJECT, _this.unsubscribeId = -1, _temp), possibleConstructorReturn(_this, _ret);\n    }\n\n    // NOTE: This is so that isStyledComponent passes for the innerRef unwrapping\n\n\n    WithTheme.prototype.componentWillMount = function componentWillMount() {\n      var _this2 = this;\n\n      var defaultProps = this.constructor.defaultProps;\n\n      var styledContext = this.context[CHANNEL_NEXT];\n      var themeProp = determineTheme(this.props, undefined, defaultProps);\n      if (styledContext === undefined && themeProp === undefined && process.env.NODE_ENV !== 'production') {\n        // eslint-disable-next-line no-console\n        console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps');\n      } else if (styledContext === undefined && themeProp !== undefined) {\n        this.setState({ theme: themeProp });\n      } else {\n        var subscribe = styledContext.subscribe;\n\n        this.unsubscribeId = subscribe(function (nextTheme) {\n          var theme = determineTheme(_this2.props, nextTheme, defaultProps);\n          _this2.setState({ theme: theme });\n        });\n      }\n    };\n\n    WithTheme.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      var defaultProps = this.constructor.defaultProps;\n\n      this.setState(function (oldState) {\n        var theme = determineTheme(nextProps, oldState.theme, defaultProps);\n\n        return { theme: theme };\n      });\n    };\n\n    WithTheme.prototype.componentWillUnmount = function componentWillUnmount() {\n      if (this.unsubscribeId !== -1) {\n        this.context[CHANNEL_NEXT].unsubscribe(this.unsubscribeId);\n      }\n    };\n\n    WithTheme.prototype.render = function render() {\n      var props = _extends({\n        theme: this.state.theme\n      }, this.props);\n\n      if (!shouldSetInnerRef) {\n        props.ref = props.innerRef;\n        delete props.innerRef;\n      }\n\n      return React.createElement(Component$$1, props);\n    };\n\n    return WithTheme;\n  }(React.Component);\n\n  WithTheme.contextTypes = contextShape;\n  WithTheme.displayName = 'WithTheme(' + getComponentName(Component$$1) + ')';\n  WithTheme.styledComponentId = 'withTheme';\n\n\n  return hoistStatics(WithTheme, Component$$1);\n});\n\n// \n\n/* eslint-disable */\nvar __DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS = {\n  StyleSheet: StyleSheet\n};\n\n// \n\n/* Warning if you've imported this file on React Native */\nif (process.env.NODE_ENV !== 'production' && typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n  // eslint-disable-next-line no-console\n  console.warn(\"It looks like you've imported 'styled-components' on React Native.\\n\" + \"Perhaps you're looking to import 'styled-components/native'?\\n\" + 'Read more about this at https://www.styled-components.com/docs/basics#react-native');\n}\n\n/* Warning if there are several instances of styled-components */\nif (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Node.js') === -1 && navigator.userAgent.indexOf('jsdom') === -1) {\n  window['__styled-components-init__'] = window['__styled-components-init__'] || 0;\n\n  if (window['__styled-components-init__'] === 1) {\n    // eslint-disable-next-line no-console\n    console.warn(\"It looks like there are several instances of 'styled-components' initialized in this application. \" + 'This may cause dynamic styles not rendering properly, errors happening during rehydration process ' + 'and makes your application bigger without a good reason.\\n\\n' + 'See https://s-c.sh/2BAXzed for more info.');\n  }\n\n  window['__styled-components-init__'] += 1;\n}\n\n/* Instantiate singletons */\nvar ComponentStyle = _ComponentStyle(generateAlphabeticName, flatten, stringifyRules);\nvar constructWithOptions = _constructWithOptions(css);\nvar StyledComponent = _StyledComponent(ComponentStyle, constructWithOptions);\n\n/* Instantiate exported singletons */\nvar keyframes = _keyframes(generateAlphabeticName, stringifyRules, css);\nvar injectGlobal = _injectGlobal(stringifyRules, css);\nvar styled = _styled(StyledComponent, constructWithOptions);\n\nexport default styled;\nexport { css, keyframes, injectGlobal, isStyledComponent, consolidateStreamedStyles, ThemeProvider, withTheme, ServerStyleSheet, StyleSheetManager, __DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS };\n//# sourceMappingURL=styled-components.browser.esm.js.map\n","// @flow\n\nimport _ from 'lodash';\nimport { connect as reduxConnect } from 'react-redux';\n\n/**\n * Sets specific properties of a specific state to specific values and prevents\n * unnecessary state changes.\n *\n * @param {Object} target - The state on which the specified properties are to\n * be set.\n * @param {Object} source - The map of properties to values which are to be set\n * on the specified target.\n * @returns {Object} The specified target if the values of the specified\n * properties equal the specified values; otherwise, a new state constructed\n * from the specified target by setting the specified properties to the\n * specified values.\n */\nexport function assign<T: Object>(target: T, source: $Shape<T>): T {\n    let t = target;\n\n    for (const property in source) { // eslint-disable-line guard-for-in\n        t = _set(t, property, source[property], t === target);\n    }\n\n    return t;\n}\n\n/**\n * Wrapper function for the react-redux connect function to avoid having to\n * declare function types for flow, but still let flow warn for other errors.\n *\n * @param {Function?} mapStateToProps - Redux mapStateToProps function.\n * @param {Function?} mapDispatchToProps - Redux mapDispatchToProps function.\n * @returns {Connector}\n */\nexport function connect(\n        mapStateToProps?: Function, mapDispatchToProps?: Function) {\n    return reduxConnect<*, *, *, *, *, *>(mapStateToProps, mapDispatchToProps);\n}\n\n/**\n * Determines whether {@code a} equals {@code b} according to deep comparison\n * (which makes sense for Redux and its state definition).\n *\n * @param {*} a - The value to compare to {@code b}.\n * @param {*} b - The value to compare to {@code a}.\n * @returns {boolean} True if {@code a} equals {@code b} (according to deep\n * comparison); false, otherwise.\n */\nexport function equals(a: any, b: any) {\n    return _.isEqual(a, b);\n}\n\n/**\n * Sets a specific property of a specific state to a specific value. Prevents\n * unnecessary state changes (when the specified {@code value} is equal to the\n * value of the specified {@code property} of the specified {@code state}).\n *\n * @param {Object} state - The (Redux) state from which a new state is to be\n * constructed by setting the specified {@code property} to the specified\n * {@code value}.\n * @param {string} property - The property of {@code state} which is to be\n * assigned the specified {@code value} (in the new state).\n * @param {*} value - The value to assign to the specified {@code property}.\n * @returns {Object} The specified {@code state} if the value of the specified\n * {@code property} equals the specified <tt>value/tt>; otherwise, a new state\n * constructed from the specified {@code state} by setting the specified\n * {@code property} to the specified {@code value}.\n */\nexport function set(state: Object, property: string, value: any) {\n    return _set(state, property, value, /* copyOnWrite */ true);\n}\n\n/* eslint-disable max-params */\n\n/**\n * Sets a specific property of a specific state to a specific value. Prevents\n * unnecessary state changes (when the specified {@code value} is equal to the\n * value of the specified {@code property} of the specified {@code state}).\n *\n * @param {Object} state - The (Redux) state from which a state is to be\n * constructed by setting the specified {@code property} to the specified\n * {@code value}.\n * @param {string} property - The property of {@code state} which is to be\n * assigned the specified {@code value}.\n * @param {*} value - The value to assign to the specified {@code property}.\n * @param {boolean} copyOnWrite - If the specified {@code state} is to not be\n * modified, {@code true}; otherwise, {@code false}.\n * @returns {Object} The specified {@code state} if the value of the specified\n * {@code property} equals the specified <tt>value/tt> or {@code copyOnWrite}\n * is truthy; otherwise, a new state constructed from the specified\n * {@code state} by setting the specified {@code property} to the specified\n * {@code value}.\n */\nfunction _set(\n        state: Object,\n        property: string,\n        value: any,\n        copyOnWrite: boolean) {\n    // Delete state properties that are to be set to undefined. (It is a matter\n    // of personal preference, mostly.)\n    if (typeof value === 'undefined'\n            && Object.prototype.hasOwnProperty.call(state, property)) {\n        const newState = copyOnWrite ? { ...state } : state;\n\n        if (delete newState[property]) {\n            return newState;\n        }\n    }\n\n    if (state[property] !== value) {\n        if (copyOnWrite) {\n            return {\n                ...state,\n                [property]: value\n            };\n        }\n\n        state[property] = value;\n    }\n\n    return state;\n}\n\n/* eslint-enable max-params */\n\n/**\n * Returns redux state from the specified {@code stateful} which is presumed to\n * be related to the redux state (e.g. The redux store, the redux\n * {@code getState} function).\n *\n * @param {Function|Object} stateful - The entity such as the redux store or the\n * redux {@code getState} function from which the redux state is to be\n * returned.\n * @returns {Object} The redux state.\n */\nexport function toState(stateful: Function | Object) {\n    if (stateful) {\n        if (typeof stateful === 'function') {\n            return stateful();\n        }\n\n        const { getState } = stateful;\n\n        if (typeof getState === 'function') {\n            return getState();\n        }\n    }\n\n    return stateful;\n}\n","/* @flow */\n\nimport { applyMiddleware } from 'redux';\nimport type { Middleware } from 'redux';\n\n/**\n * A registry for Redux middleware, allowing features to register their\n * middleware without needing to create additional inter-feature dependencies.\n */\nclass MiddlewareRegistry {\n    _elements: Array<Middleware<*, *>>;\n\n    /**\n     * Creates a MiddlewareRegistry instance.\n     */\n    constructor() {\n        /**\n         * The set of registered middleware.\n         *\n         * @private\n         * @type {Middleware[]}\n         */\n        this._elements = [];\n    }\n\n    /**\n     * Applies all registered middleware into a store enhancer.\n     * (@link http://redux.js.org/docs/api/applyMiddleware.html).\n     *\n     * @param {Middleware[]} additional - Any additional middleware that need to\n     * be included (such as middleware from third-party modules).\n     * @returns {Middleware}\n     */\n    applyMiddleware(...additional: Array<Middleware<*, *>>) {\n        // $FlowExpectedError\n        return applyMiddleware(...this._elements, ...additional);\n    }\n\n    /**\n     * Adds a middleware to the registry.\n     *\n     * The method is to be invoked only before {@link #applyMiddleware()}.\n     *\n     * @param {Middleware} middleware - A Redux middleware.\n     * @returns {void}\n     */\n    register(middleware: Middleware<*, *>) {\n        this._elements.push(middleware);\n    }\n}\n\n/**\n * The public singleton instance of the MiddlewareRegistry class.\n */\nexport default new MiddlewareRegistry();\n","/* @flow */\n\nimport { combineReducers } from 'redux';\nimport type { Reducer } from 'redux';\n\n/**\n * The type of the dictionary/map which associates a reducer (function) with the\n * name of he Redux state property managed by the reducer.\n */\ndeclare type NameReducerMap<S, A> = { [name: string]: Reducer<S, A> };\n\n/**\n * A registry for Redux reducers, allowing features to register themselves\n * without needing to create additional inter-feature dependencies.\n */\nclass ReducerRegistry {\n    _elements: NameReducerMap<*, *>;\n\n    /**\n     * Creates a ReducerRegistry instance.\n     */\n    constructor() {\n        /**\n         * The set of registered reducers, keyed based on the field each reducer\n         * will manage.\n         *\n         * @private\n         * @type {NameReducerMap}\n         */\n        this._elements = {};\n    }\n\n    /**\n     * Combines all registered reducers into a single reducing function.\n     *\n     * @param {Object} [additional={}] - Any additional reducers that need to be\n     * included (such as reducers from third-party modules).\n     * @returns {Function}\n     */\n    combineReducers(additional: NameReducerMap<*, *> = {}) {\n        // $FlowExpectedError\n        return combineReducers({\n            ...this._elements,\n            ...additional\n        });\n    }\n\n    /**\n     * Adds a reducer to the registry.\n     *\n     * The method is to be invoked only before {@link #combineReducers()}.\n     *\n     * @param {string} name - The field in the state object that will be managed\n     * by the provided reducer.\n     * @param {Reducer} reducer - A Redux reducer.\n     * @returns {void}\n     */\n    register(name: string, reducer: Reducer<*, *>) {\n        this._elements[name] = reducer;\n    }\n}\n\n/**\n * The public singleton instance of the ReducerRegistry class.\n */\nexport default new ReducerRegistry();\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/redux');\n","// @flow\n\nimport type { Store } from 'redux';\n\nimport logger from './logger';\n\n/**\n * The type listener supported for registration with\n * {@link StateListenerRegistry} in association with a {@link Selector}.\n *\n * @param {any} selection - The value derived from the redux store/state by the\n * associated {@code Selector}. Immutable!\n * @param {Store} store - The redux store. Provided in case the {@code Listener}\n * needs to {@code dispatch} or {@code getState}. The latter is advisable only\n * if the {@code Listener} is not to respond to changes to that state.\n * @param {any} prevSelection - The value previously derived from the redux\n * store/state by the associated {@code Selector}. The {@code Listener} is\n * invoked only if {@code prevSelection} and {@code selection} are different.\n * Immutable!\n */\ntype Listener\n    = (selection: any, store: Store<*, *>, prevSelection: any) => void;\n\n/**\n * The type selector supported for registration with\n * {@link StateListenerRegistry} in association with a {@link Listener}.\n *\n * @param {Object} state - The redux state from which the {@code Selector} is to\n * derive data.\n * @param {any} prevSelection - The value previously derived from the redux\n * store/state by the {@code Selector}. Provided in case the {@code Selector}\n * needs to derive the returned value from the specified {@code state} and\n * {@code prevSelection}. Immutable!\n * @returns {any} The value derived from the specified {@code state} and/or\n * {@code prevSelection}. The associated {@code Listener} will only be invoked\n * if the returned value is other than {@code prevSelection}.\n */\ntype Selector = (state: Object, prevSelection: any) => any;\n\n/**\n * A type of a {@link Selector}-{@link Listener} association in which the\n * {@code Listener} listens to changes in the values derived from a redux\n * store/state by the {@code Selector}.\n */\ntype SelectorListener = {\n\n    /**\n     * The {@code Listener} which listens to changes in the values selected by\n     * {@link selector}.\n     */\n    listener: Listener,\n\n    /**\n     * The {@code Selector} which selects values whose changes are listened to\n     * by {@link listener}.\n     */\n    selector: Selector\n};\n\n/**\n * A registry listeners which listen to changes in a redux store/state.\n */\nclass StateListenerRegistry {\n    /**\n     * The {@link Listener}s registered with this {@code StateListenerRegistry}\n     * to be notified when the values derived by associated {@link Selector}s\n     * from a redux store/state change.\n     */\n    _selectorListeners: Set<SelectorListener> = new Set();\n\n    _listener: ({\n        prevSelections: Map<SelectorListener, any>,\n        store: Store<*, *>\n    }) => void;\n\n    /**\n     * Invoked by a specific redux store any time an action is dispatched, and\n     * some part of the state (tree) may potentially have changed.\n     *\n     * @param {Object} context - The redux store invoking the listener and the\n     * private state of this {@code StateListenerRegistry} associated with the\n     * redux store.\n     * @returns {void}\n     */\n    _listener({ prevSelections, store }: {\n            prevSelections: Map<SelectorListener, any>,\n            store: Store<*, *>\n    }) {\n        for (const selectorListener of this._selectorListeners) {\n            const prevSelection = prevSelections.get(selectorListener);\n\n            try {\n                const selection\n                    = selectorListener.selector(\n                        store.getState(),\n                        prevSelection);\n\n                if (prevSelection !== selection) {\n                    prevSelections.set(selectorListener, selection);\n                    selectorListener.listener(selection, store, prevSelection);\n                }\n            } catch (e) {\n                // Don't let one faulty listener prevent other listeners from\n                // being notified about their associated changes.\n                logger.error(e);\n            }\n        }\n    }\n\n    /**\n     * Registers a specific listener to be notified when the value derived by a\n     * specific {@code selector} from a redux store/state changes.\n     *\n     * @param {Function} selector - The pure {@code Function} of the redux\n     * store/state (and the previous selection of made by {@code selector})\n     * which selects the value listened to by the specified {@code listener}.\n     * @param {Function} listener - The listener to register with this\n     * {@code StateListenerRegistry} so that it gets invoked when the value\n     * returned by the specified {@code selector} changes.\n     * @returns {void}\n     */\n    register(selector: Selector, listener: Listener) {\n        this._selectorListeners.add({\n            listener,\n            selector\n        });\n    }\n\n    /**\n     * Subscribes to a specific redux store (so that this instance gets notified\n     * any time an action is dispatched, and some part of the state (tree) of\n     * the specified redux store may potentially have changed).\n     *\n     * @param {Store} store - The redux store to which this\n     * {@code StateListenerRegistry} is to {@code subscribe}.\n     * @returns {void}\n     */\n    subscribe(store: Store<*, *>) {\n        // XXX If StateListenerRegistry is not utilized by the app to listen to\n        // state changes, do not bother subscribing to the store at all.\n        if (this._selectorListeners.size) {\n            store.subscribe(\n                this._listener.bind(\n                    this,\n                    {\n                        /**\n                         * The previous selections of the {@code Selector}s\n                         * registered with this {@code StateListenerRegistry}.\n                         *\n                         * @type Map<any>\n                         */\n                        prevSelections: new Map(),\n\n                        /**\n                         * The redux store.\n                         *\n                         * @type Store\n                         */\n                        store\n                    }));\n        }\n    }\n}\n\nexport default new StateListenerRegistry();\n","export * from './functions';\nexport { default as MiddlewareRegistry } from './MiddlewareRegistry';\nexport { default as ReducerRegistry } from './ReducerRegistry';\nexport { default as StateListenerRegistry } from './StateListenerRegistry';\n","/**\n * The constant for the event type 'track'.\n * TODO: keep these constants in a single place. Can we import them from\n * lib-jitsi-meet's AnalyticsEvents somehow?\n * @type {string}\n */\nconst TYPE_TRACK = 'track';\n\n/**\n * The constant for the event type 'UI' (User Interaction).\n * TODO: keep these constants in a single place. Can we import them from\n * lib-jitsi-meet's AnalyticsEvents somehow?\n * @type {string}\n */\nconst TYPE_UI = 'ui';\n\n/**\n * The identifier for the \"pinned\" action. The local participant has pinned a\n * participant to remain on large video.\n *\n * @type {String}\n */\nexport const ACTION_PINNED = 'pinned';\n\n/**\n * The identifier for the \"unpinned\" action. The local participant has unpinned\n * a participant so the participant doesn't remain permanently on local large\n * video.\n *\n * @type {String}\n */\nexport const ACTION_UNPINNED = 'unpinned';\n\n/**\n * The identifier for the \"pressed\" action for shortcut events. This action\n * means that a button was pressed (and not yet released).\n *\n * @type {String}\n */\nexport const ACTION_SHORTCUT_PRESSED = 'pressed';\n\n/**\n * The identifier for the \"released\" action for shortcut events. This action\n * means that a button which was previously pressed was released.\n *\n * @type {String}\n */\nexport const ACTION_SHORTCUT_RELEASED = 'released';\n\n/**\n * The identifier for the \"triggered\" action for shortcut events. This action\n * means that a button was pressed, and we don't care about whether it was\n * released or will be released in the future.\n *\n * @type {String}\n */\nexport const ACTION_SHORTCUT_TRIGGERED = 'triggered';\n\n/**\n * The name of the keyboard shortcut or toolbar button for muting audio.\n */\nexport const AUDIO_MUTE = 'audio.mute';\n\n/**\n * The name of the keyboard shortcut or toolbar button for muting video.\n */\nexport const VIDEO_MUTE = 'video.mute';\n\n/**\n * Creates an event which indicates that a certain action was requested through\n * the jitsi-meet API.\n *\n * @param {Object} action - The action which was requested through the\n * jitsi-meet API.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createApiEvent(action, attributes = {}) {\n    return {\n        action,\n        attributes,\n        source: 'jitsi-meet-api'\n    };\n}\n\n/**\n * Creates an event which indicates that the audio-only mode has been changed.\n *\n * @param {boolean} enabled - True if audio-only is enabled, false otherwise.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createAudioOnlyChangedEvent(enabled) {\n    return {\n        action: `audio.only.${enabled ? 'enabled' : 'disabled'}`\n    };\n}\n\n/**\n * Creates an event for about the JitsiConnection.\n *\n * @param {string} action - The action that the event represents.\n * @param {boolean} attributes - Additional attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createConnectionEvent(action, attributes = {}) {\n    return {\n        action,\n        actionSubject: 'connection',\n        attributes\n    };\n}\n\n/**\n * Creates an event which indicates an action occurred in the calendar\n * integration UI.\n *\n * @param {string} eventName - The name of the calendar UI event.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createCalendarClickedEvent(eventName, attributes = {}) {\n    return {\n        action: 'clicked',\n        actionSubject: eventName,\n        attributes,\n        source: 'calendar',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates that the calendar container is shown and\n * selected.\n *\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createCalendarSelectedEvent(attributes = {}) {\n    return {\n        action: 'selected',\n        actionSubject: 'calendar.selected',\n        attributes,\n        source: 'calendar',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event indicating that a calendar has been connected.\n *\n * @param {boolean} attributes - Additional attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createCalendarConnectedEvent(attributes = {}) {\n    return {\n        action: 'calendar.connected',\n        actionSubject: 'calendar.connected',\n        attributes\n    };\n}\n\n/**\n * Creates an event which indicates an action occurred in the recent list\n * integration UI.\n *\n * @param {string} eventName - The name of the recent list UI event.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createRecentClickedEvent(eventName, attributes = {}) {\n    return {\n        action: 'clicked',\n        actionSubject: eventName,\n        attributes,\n        source: 'recent.list',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicate an action occured in the chrome extension banner.\n *\n * @param {boolean} installPressed - Whether the user pressed install or `x` - cancel.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createChromeExtensionBannerEvent(installPressed, attributes = {}) {\n    return {\n        action: installPressed ? 'install' : 'cancel',\n        attributes,\n        source: 'chrome.extension.banner',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates that the recent list container is shown and\n * selected.\n *\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createRecentSelectedEvent(attributes = {}) {\n    return {\n        action: 'selected',\n        actionSubject: 'recent.list.selected',\n        attributes,\n        source: 'recent.list',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event for an action on the deep linking page.\n *\n * @param {string} action - The action that the event represents.\n * @param {string} actionSubject - The subject that was acted upon.\n * @param {boolean} attributes - Additional attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createDeepLinkingPageEvent(\n        action, actionSubject, attributes = {}) {\n    return {\n        action,\n        actionSubject,\n        source: 'deepLinkingPage',\n        attributes\n    };\n}\n\n/**\n * Creates an event which indicates that a device was changed.\n *\n * @param {string} mediaType - The media type of the device ('audio' or\n * 'video').\n * @param {string} deviceType - The type of the device ('input' or 'output').\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createDeviceChangedEvent(mediaType, deviceType) {\n    return {\n        action: 'device.changed',\n        attributes: {\n            'device_type': deviceType,\n            'media_type': mediaType\n        }\n    };\n}\n\n/**\n * Creates an event indicating that an action related to E2EE occurred.\n *\n * @param {string} action - The action which occurred.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createE2EEEvent(action) {\n    return {\n        action,\n        actionSubject: 'e2ee'\n    };\n}\n\n/**\n * Creates an event which specifies that the feedback dialog has been opened.\n *\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createFeedbackOpenEvent() {\n    return {\n        action: 'feedback.opened'\n    };\n}\n\n/**\n * Creates an event for an action regarding the AddPeopleDialog (invites).\n *\n * @param {string} action - The action that the event represents.\n * @param {string} actionSubject - The subject that was acted upon.\n * @param {boolean} attributes - Additional attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createInviteDialogEvent(\n        action, actionSubject, attributes = {}) {\n    return {\n        action,\n        actionSubject,\n        attributes,\n        source: 'inviteDialog'\n    };\n}\n\n/**\n * Creates an event which reports about the current network information reported by the operating system.\n *\n * @param {boolean} isOnline - Tells whether or not the internet is reachable.\n * @param {string} [networkType] - Network type, see {@code NetworkInfo} type defined by the 'base/net-info' feature.\n * @param {Object} [details] - Extra info, see {@code NetworkInfo} type defined by the 'base/net-info' feature.\n * @returns {Object}\n */\nexport function createNetworkInfoEvent({ isOnline, networkType, details }) {\n    const attributes = { isOnline };\n\n    // Do no include optional stuff or Amplitude handler will log warnings.\n    networkType && (attributes.networkType = networkType);\n    details && (attributes.details = details);\n\n    return {\n        action: 'network.info',\n        attributes\n    };\n}\n\n/**\n * Creates an \"offer/answer failure\" event.\n *\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createOfferAnswerFailedEvent() {\n    return {\n        action: 'offer.answer.failure'\n    };\n}\n\n/**\n * Creates a \"page reload\" event.\n *\n * @param {string} reason - The reason for the reload.\n * @param {number} timeout - The timeout in seconds after which the page is\n * scheduled to reload.\n * @param {Object} details - The details for the error.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createPageReloadScheduledEvent(reason, timeout, details) {\n    return {\n        action: 'page.reload.scheduled',\n        attributes: {\n            reason,\n            timeout,\n            ...details\n        }\n    };\n}\n\n/**\n * Creates a \"pinned\" or \"unpinned\" event.\n *\n * @param {string} action - The action (\"pinned\" or \"unpinned\").\n * @param {string} participantId - The ID of the participant which was pinned.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createPinnedEvent(action, participantId, attributes) {\n    return {\n        type: TYPE_TRACK,\n        action,\n        actionSubject: 'participant',\n        objectType: 'participant',\n        objectId: participantId,\n        attributes\n    };\n}\n\n/**\n * Creates an event which indicates that a button in the profile panel was\n * clicked.\n *\n * @param {string} buttonName - The name of the button.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createProfilePanelButtonEvent(buttonName, attributes = {}) {\n    return {\n        action: 'clicked',\n        actionSubject: buttonName,\n        attributes,\n        source: 'profile.panel',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates that a specific button on one of the\n * recording-related dialogs was clicked.\n *\n * @param {string} dialogName - The name of the dialog (e.g. 'start' or 'stop').\n * @param {string} buttonName - The name of the button (e.g. 'confirm' or\n * 'cancel').\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createRecordingDialogEvent(\n        dialogName, buttonName, attributes = {}) {\n    return {\n        action: 'clicked',\n        actionSubject: buttonName,\n        attributes,\n        source: `${dialogName}.recording.dialog`,\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates that a specific button on one of the\n * liveStreaming-related dialogs was clicked.\n *\n * @param {string} dialogName - The name of the dialog (e.g. 'start' or 'stop').\n * @param {string} buttonName - The name of the button (e.g. 'confirm' or\n * 'cancel').\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createLiveStreamingDialogEvent(dialogName, buttonName) {\n    return {\n        action: 'clicked',\n        actionSubject: buttonName,\n        source: `${dialogName}.liveStreaming.dialog`,\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event with the local tracks duration.\n *\n * @param {Object} duration - The object with the duration of the local tracks.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createLocalTracksDurationEvent(duration) {\n    const { audio, video, conference } = duration;\n    const { camera, desktop } = video;\n\n    return {\n        action: 'local.tracks.durations',\n        attributes: {\n            audio: audio.value,\n            camera: camera.value,\n            conference: conference.value,\n            desktop: desktop.value\n        }\n    };\n}\n\n/**\n * Creates an event which indicates that an action related to recording has\n * occured.\n *\n * @param {string} action - The action (e.g. 'start' or 'stop').\n * @param {string} type - The recording type (e.g. 'file' or 'live').\n * @param {number} value - The duration of the recording in seconds (for stop\n * action).\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createRecordingEvent(action, type, value) {\n    return {\n        action,\n        actionSubject: `recording.${type}`,\n        attributes: {\n            value\n        }\n    };\n}\n\n/**\n * Creates an event which indicates that the same conference has been rejoined.\n *\n * @param {string} url - The full conference URL.\n * @param {number} lastConferenceDuration - How many seconds user stayed in the previous conference.\n * @param {number} timeSinceLeft - How many seconds since the last conference was left.\n * @returns {Object} The event in a format suitable for sending via sendAnalytics.\n */\nexport function createRejoinedEvent({ url, lastConferenceDuration, timeSinceLeft }) {\n    return {\n        action: 'rejoined',\n        attributes: {\n            lastConferenceDuration,\n            timeSinceLeft,\n            url\n        }\n    };\n}\n\n/**\n * Creates an event which specifies that the \"confirm\" button on the remote\n * mute dialog has been clicked.\n *\n * @param {string} participantId - The ID of the participant that was remotely\n * muted.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createRemoteMuteConfirmedEvent(participantId) {\n    return {\n        action: 'clicked',\n        actionSubject: 'remote.mute.dialog.confirm.button',\n        attributes: {\n            'participant_id': participantId\n        },\n        source: 'remote.mute.dialog',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates that one of the buttons in the \"remote\n * video menu\" was clicked.\n *\n * @param {string} buttonName - The name of the button.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createRemoteVideoMenuButtonEvent(buttonName, attributes) {\n    return {\n        action: 'clicked',\n        actionSubject: buttonName,\n        attributes,\n        source: 'remote.video.menu',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event indicating that an action related to video blur\n * occurred (e.g. It was started or stopped).\n *\n * @param {string} action - The action which occurred.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createVideoBlurEvent(action) {\n    return {\n        action,\n        actionSubject: 'video.blur'\n    };\n}\n\n/**\n * Creates an event indicating that an action related to screen sharing\n * occurred (e.g. It was started or stopped).\n *\n * @param {string} action - The action which occurred.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createScreenSharingEvent(action) {\n    return {\n        action,\n        actionSubject: 'screen.sharing'\n    };\n}\n\n/**\n * The local participant failed to send a \"selected endpoint\" message to the\n * bridge.\n *\n * @param {Error} error - The error which caused the failure.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createSelectParticipantFailedEvent(error) {\n    const event = {\n        action: 'select.participant.failed'\n    };\n\n    if (error) {\n        event.error = error.toString();\n    }\n\n    return event;\n}\n\n/**\n * Creates an event associated with the \"shared video\" feature.\n *\n * @param {string} action - The action that the event represents.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createSharedVideoEvent(action, attributes = {}) {\n    return {\n        action,\n        attributes,\n        actionSubject: 'shared.video'\n    };\n}\n\n/**\n * Creates an event associated with a shortcut being pressed, released or\n * triggered. By convention, where appropriate an attribute named 'enable'\n * should be used to indicate the action which resulted by the shortcut being\n * pressed (e.g. Whether screen sharing was enabled or disabled).\n *\n * @param {string} shortcut - The identifier of the shortcut which produced\n * an action.\n * @param {string} action - The action that the event represents (one\n * of ACTION_SHORTCUT_PRESSED, ACTION_SHORTCUT_RELEASED\n * or ACTION_SHORTCUT_TRIGGERED).\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createShortcutEvent(\n        shortcut,\n        action = ACTION_SHORTCUT_TRIGGERED,\n        attributes = {}) {\n    return {\n        action,\n        actionSubject: 'keyboard.shortcut',\n        actionSubjectId: shortcut,\n        attributes,\n        source: 'keyboard.shortcut',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates the \"start audio only\" configuration.\n *\n * @param {boolean} audioOnly - Whether \"start audio only\" is enabled or not.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createStartAudioOnlyEvent(audioOnly) {\n    return {\n        action: 'start.audio.only',\n        attributes: {\n            enabled: audioOnly\n        }\n    };\n}\n\n/**\n * Creates an event which indicates the \"start silent\" configuration.\n *\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createStartSilentEvent() {\n    return {\n        action: 'start.silent'\n    };\n}\n\n/**\n * Creates an event which indicates the \"start muted\" configuration.\n *\n * @param {string} source - The source of the configuration, 'local' or\n * 'remote' depending on whether it comes from the static configuration (i.e.\n * {@code config.js}) or comes dynamically from Jicofo.\n * @param {boolean} audioMute - Whether the configuration requests that audio\n * is muted.\n * @param {boolean} videoMute - Whether the configuration requests that video\n * is muted.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createStartMutedConfigurationEvent(\n        source,\n        audioMute,\n        videoMute) {\n    return {\n        action: 'start.muted.configuration',\n        attributes: {\n            source,\n            'audio_mute': audioMute,\n            'video_mute': videoMute\n        }\n    };\n}\n\n/**\n * Automatically changing the mute state of a media track in order to match\n * the current stored state in redux.\n *\n * @param {string} mediaType - The track's media type ('audio' or 'video').\n * @param {boolean} muted - Whether the track is being muted or unmuted as\n * as result of the sync operation.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createSyncTrackStateEvent(mediaType, muted) {\n    return {\n        action: 'sync.track.state',\n        attributes: {\n            'media_type': mediaType,\n            muted\n        }\n    };\n}\n\n/**\n * Creates an event associated with a toolbar button being clicked/pressed. By\n * convention, where appropriate an attribute named 'enable' should be used to\n * indicate the action which resulted by the shortcut being pressed (e.g.\n * Whether screen sharing was enabled or disabled).\n *\n * @param {string} buttonName - The identifier of the toolbar button which was\n * clicked/pressed.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createToolbarEvent(buttonName, attributes = {}) {\n    return {\n        action: 'clicked',\n        actionSubject: buttonName,\n        attributes,\n        source: 'toolbar.button',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates that a local track was muted.\n *\n * @param {string} mediaType - The track's media type ('audio' or 'video').\n * @param {string} reason - The reason the track was muted (e.g. It was\n * triggered by the \"initial mute\" option, or a previously muted track was\n * replaced (e.g. When a new device was used)).\n * @param {boolean} muted - Whether the track was muted or unmuted.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createTrackMutedEvent(mediaType, reason, muted = true) {\n    return {\n        action: 'track.muted',\n        attributes: {\n            'media_type': mediaType,\n            muted,\n            reason\n        }\n    };\n}\n\n/**\n * Creates an event for an action on the welcome page.\n *\n * @param {string} action - The action that the event represents.\n * @param {string} actionSubject - The subject that was acted upon.\n * @param {boolean} attributes - Additional attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createWelcomePageEvent(action, actionSubject, attributes = {}) {\n    return {\n        action,\n        actionSubject,\n        attributes,\n        source: 'welcomePage'\n    };\n}\n","/**\n * Abstract implementation of analytics handler\n */\nexport default class AbstractHandler {\n    /**\n     * Creates new instance.\n     *\n     * @param {Object} options - Optional parameters.\n     */\n    constructor(options = {}) {\n        this._enabled = false;\n        this._whiteListedEvents = options.whiteListedEvents;\n\n        // FIXME:\n        // Keeping the list with the very noisy events so that we don't flood with events whoever hasn't configured\n        // white/black lists yet. We need to solve this issue properly by either making these events not so noisy or\n        // by removing them completely from the code.\n        this._blackListedEvents = [\n            ...(options.blackListedEvents || []), // eslint-disable-line no-extra-parens\n            'e2e_rtt', 'rtp.stats', 'rtt.by.region', 'available.device', 'stream.switch.delay', 'ice.state.changed',\n            'ice.duration', 'peer.conn.status.duration'\n        ];\n    }\n\n    /**\n     * Extracts a name for the event from the event properties.\n     *\n     * @param {Object} event - The analytics event.\n     * @returns {string} - The extracted name.\n     */\n    _extractName(event) {\n        // Page events have a single 'name' field.\n        if (event.type === 'page') {\n            return event.name;\n        }\n\n        const {\n            action,\n            actionSubject,\n            source\n        } = event;\n\n        // All events have action, actionSubject, and source fields. All\n        // three fields are required, and often jitsi-meet and\n        // lib-jitsi-meet use the same value when separate values are not\n        // necessary (i.e. event.action == event.actionSubject).\n        // Here we concatenate these three fields, but avoid adding the same\n        // value twice, because it would only make the event's name harder\n        // to read.\n        let name = action;\n\n        if (actionSubject && actionSubject !== action) {\n            name = `${actionSubject}.${action}`;\n        }\n        if (source && source !== action) {\n            name = `${source}.${name}`;\n        }\n\n        return name;\n    }\n\n    /**\n     * Checks if an event should be ignored or not.\n     *\n     * @param {Object} event - The event.\n     * @returns {boolean}\n     */\n    _shouldIgnore(event) {\n        if (!event || !this._enabled) {\n            return true;\n        }\n\n        const name = this._extractName(event);\n\n        if (Array.isArray(this._whiteListedEvents)) {\n            return this._whiteListedEvents.indexOf(name) === -1;\n        }\n\n        if (Array.isArray(this._blackListedEvents)) {\n            return this._blackListedEvents.indexOf(name) !== -1;\n        }\n\n        return false;\n    }\n}\n","import amplitude from 'amplitude-js';\n\nexport default {\n    /**\n     * Returns the AmplitudeClient instance.\n     *\n     * @param {Object} options - Optional parameters.\n     * @property {string} options.instanceName - The name of the AmplitudeClient instance.\n     * @returns {AmplitudeClient}\n     */\n    getInstance(options = {}) {\n        return amplitude.getInstance(options.instanceName);\n    }\n};\n","import AbstractHandler from './AbstractHandler';\nimport { amplitude, fixDeviceID } from './amplitude';\n\n/**\n * Analytics handler for Amplitude.\n */\nexport default class AmplitudeHandler extends AbstractHandler {\n    /**\n     * Creates new instance of the Amplitude analytics handler.\n     *\n     * @param {Object} options -\n     * @param {string} options.amplitudeAPPKey - The Amplitude app key required\n     * by the Amplitude API.\n     */\n    constructor(options) {\n        super(options);\n\n        const { amplitudeAPPKey, host, user } = options;\n\n        if (!amplitudeAPPKey) {\n            throw new Error('Failed to initialize Amplitude handler, no APP key');\n        }\n\n        this._enabled = true;\n\n        this._amplitudeOptions = {\n            host\n        };\n\n        amplitude.getInstance(this._amplitudeOptions).init(amplitudeAPPKey, undefined, { includeReferrer: true });\n        fixDeviceID(amplitude.getInstance(this._amplitudeOptions));\n\n        if (user) {\n            amplitude.getInstance(this._amplitudeOptions).setUserId(user);\n        }\n    }\n\n    /**\n     * Sets the Amplitude user properties.\n     *\n     * @param {Object} userProps - The user portperties.\n     * @returns {void}\n     */\n    setUserProperties(userProps) {\n        if (this._enabled) {\n            amplitude.getInstance(this._amplitudeOptions)\n                .setUserProperties(userProps);\n        }\n    }\n\n    /**\n     * Sends an event to Amplitude. The format of the event is described\n     * in AnalyticsAdapter in lib-jitsi-meet.\n     *\n     * @param {Object} event - The event in the format specified by\n     * lib-jitsi-meet.\n     * @returns {void}\n     */\n    sendEvent(event) {\n        if (this._shouldIgnore(event)) {\n            return;\n        }\n\n        amplitude.getInstance(this._amplitudeOptions).logEvent(\n            this._extractName(event),\n            event);\n    }\n}\n","/* global _paq */\n\nimport { getJitsiMeetGlobalNS } from '../../base/util';\n\nimport AbstractHandler from './AbstractHandler';\n\n/**\n * Analytics handler for Matomo.\n */\nexport default class MatomoHandler extends AbstractHandler {\n\n    /**\n     * Creates new instance of the Matomo handler.\n     *\n     * @param {Object} options -\n     * @param {string} options.matomoEndpoint - The Matomo endpoint.\n     * @param {string} options.matomoSiteID   - The site ID.\n     */\n    constructor(options) {\n        super(options);\n        this._userProperties = {};\n\n        if (!options.matomoEndpoint) {\n            throw new Error(\n                'Failed to initialize Matomo handler: no endpoint defined.'\n            );\n        }\n        if (!options.matomoSiteID) {\n            throw new Error(\n                'Failed to initialize Matomo handler: no site ID defined.'\n            );\n        }\n\n        this._enabled = true;\n        this._initMatomo(options);\n    }\n\n    /**\n     * Initializes the _paq object.\n     *\n     * @param {Object} options -\n     * @param {string} options.matomoEndpoint - The Matomo endpoint.\n     * @param {string} options.matomoSiteID   - The site ID.\n     * @returns {void}\n     */\n    _initMatomo(options) {\n        const _paq = window._paq || [];\n\n        window._paq = _paq;\n\n        _paq.push([ 'trackPageView' ]);\n        _paq.push([ 'enableLinkTracking' ]);\n\n        (function() {\n            // add trailing slash if needed\n            const u = options.matomoEndpoint.endsWith('/')\n                ? options.matomoEndpoint\n                : `${options.matomoEndpoint}/`;\n\n            // configure the tracker\n            _paq.push([ 'setTrackerUrl', `${u}matomo.php` ]);\n            _paq.push([ 'setSiteId', options.matomoSiteID ]);\n\n            // insert the matomo script\n            const d = document,\n                g = d.createElement('script'),\n                s = d.getElementsByTagName('script')[0];\n\n            g.type = 'text/javascript';\n            g.async = true;\n            g.defer = true;\n            g.src = `${u}matomo.js`;\n            s.parentNode.insertBefore(g, s);\n        })();\n    }\n\n    /**\n     * Extracts the integer to use for a Matomo event's value field\n     * from a lib-jitsi-meet analytics event.\n     *\n     * @param {Object} event - The lib-jitsi-meet analytics event.\n     * @returns {number} - The integer to use for the 'value' of a Matomo\n     * event, or NaN if the lib-jitsi-meet event doesn't contain a\n     * suitable value.\n     * @private\n     */\n    _extractValue(event) {\n        const value = event && event.attributes && event.attributes.value;\n\n        // Try to extract an integer from the 'value' attribute.\n        return Math.round(parseFloat(value));\n    }\n\n    /**\n     * Sets the permanent properties for the current session.\n     *\n     * @param {Object} userProps - The permanent properties.\n     * @returns {void}\n     */\n    setUserProperties(userProps = {}) {\n        if (!this._enabled) {\n            return;\n        }\n\n        const visitScope = [ 'user_agent', 'callstats_name', 'browser_name' ];\n\n        // add variables in the 'page' scope\n        Object.keys(userProps)\n            .filter(key => visitScope.indexOf(key) === -1)\n            .forEach((key, index) => {\n                _paq.push([\n                    'setCustomVariable',\n                    1 + index,\n                    key,\n                    userProps[key],\n                    'page'\n                ]);\n            });\n\n\n        // add variables in the 'visit' scope\n        Object.keys(userProps)\n            .filter(key => visitScope.indexOf(key) !== -1)\n            .forEach((key, index) => {\n                _paq.push([\n                    'setCustomVariable',\n                    1 + index,\n                    key,\n                    userProps[key],\n                    'visit'\n                ]);\n            });\n    }\n\n    /**\n     * This is the entry point of the API. The function sends an event to\n     * the Matomo endpoint. The format of the event is described in\n     * analyticsAdapter in lib-jitsi-meet.\n     *\n     * @param {Object} event - The event in the format specified by\n     * lib-jitsi-meet.\n     * @returns {void}\n     */\n    sendEvent(event) {\n        if (this._shouldIgnore(event)) {\n            return;\n        }\n\n        const value = this._extractValue(event);\n        const matomoEvent = [ 'trackEvent', 'jitsi-meet', this._extractName(event) ];\n\n        if (!isNaN(value)) {\n            matomoEvent.push(value);\n        }\n\n        _paq.push(matomoEvent);\n    }\n}\n\nconst globalNS = getJitsiMeetGlobalNS();\n\nglobalNS.analyticsHandlers = globalNS.analyticsHandlers || [];\nglobalNS.analyticsHandlers.push(MatomoHandler);\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/analytics');\n","// @flow\n\nimport JitsiMeetJS, {\n    analytics,\n    browser,\n    isAnalyticsEnabled\n} from '../base/lib-jitsi-meet';\nimport { getJitsiMeetGlobalNS, loadScript } from '../base/util';\nimport {\n    checkChromeExtensionsInstalled,\n    isMobileBrowser\n} from '../base/environment/utils';\nimport { AmplitudeHandler, MatomoHandler } from './handlers';\nimport logger from './logger';\n\n/**\n * Sends an event through the lib-jitsi-meet AnalyticsAdapter interface.\n *\n * @param {Object} event - The event to send. It should be formatted as\n * described in AnalyticsAdapter.js in lib-jitsi-meet.\n * @returns {void}\n */\nexport function sendAnalytics(event: Object) {\n    try {\n        analytics.sendEvent(event);\n    } catch (e) {\n        logger.warn(`Error sending analytics event: ${e}`);\n    }\n}\n\n/**\n * Resets the analytics adapter to its initial state - removes handlers, cache,\n * disabled state, etc.\n *\n * @returns {void}\n */\nexport function resetAnalytics() {\n    analytics.reset();\n}\n\n/**\n * Creates the analytics handlers.\n *\n * @param {Store} store - The redux store in which the specified {@code action} is being dispatched.\n * @returns {Promise} Resolves with the handlers that have been successfully loaded.\n */\nexport function createHandlers({ getState }: { getState: Function }) {\n    getJitsiMeetGlobalNS().analyticsHandlers = [];\n    window.analyticsHandlers = []; // Legacy support.\n\n    if (!isAnalyticsEnabled(getState)) {\n        return Promise.resolve([]);\n    }\n\n    const state = getState();\n    const config = state['features/base/config'];\n    const { locationURL } = state['features/base/connection'];\n    const host = locationURL ? locationURL.host : '';\n    const {\n        analytics: analyticsConfig = {},\n        deploymentInfo\n    } = config;\n    const {\n        amplitudeAPPKey,\n        blackListedEvents,\n        scriptURLs,\n        googleAnalyticsTrackingId,\n        matomoEndpoint,\n        matomoSiteID,\n        whiteListedEvents\n    } = analyticsConfig;\n    const { group, user } = state['features/base/jwt'];\n    const handlerConstructorOptions = {\n        amplitudeAPPKey,\n        blackListedEvents,\n        envType: (deploymentInfo && deploymentInfo.envType) || 'dev',\n        googleAnalyticsTrackingId,\n        matomoEndpoint,\n        matomoSiteID,\n        group,\n        host,\n        product: deploymentInfo && deploymentInfo.product,\n        subproduct: deploymentInfo && deploymentInfo.environment,\n        user: user && user.id,\n        version: JitsiMeetJS.version,\n        whiteListedEvents\n    };\n    const handlers = [];\n\n    try {\n        const amplitude = new AmplitudeHandler(handlerConstructorOptions);\n\n        handlers.push(amplitude);\n    // eslint-disable-next-line no-empty\n    } catch (e) {}\n\n    try {\n        const matomo = new MatomoHandler(handlerConstructorOptions);\n\n        handlers.push(matomo);\n    // eslint-disable-next-line no-empty\n    } catch (e) {}\n\n    return (\n        _loadHandlers(scriptURLs, handlerConstructorOptions)\n            .then(externalHandlers => {\n                handlers.push(...externalHandlers);\n                if (handlers.length === 0) {\n                    // Throwing an error in order to dispose the analytics in the catch clause due to the lack of any\n                    // analytics handlers.\n                    throw new Error('No analytics handlers created!');\n                }\n\n                return handlers;\n            })\n            .catch(e => {\n                analytics.dispose();\n                logger.error(e);\n\n                return [];\n            }));\n\n}\n\n/**\n * Inits JitsiMeetJS.analytics by setting permanent properties and setting the handlers from the loaded scripts.\n * NOTE: Has to be used after JitsiMeetJS.init. Otherwise analytics will be null.\n *\n * @param {Store} store - The redux store in which the specified {@code action} is being dispatched.\n * @param {Array<Object>} handlers - The analytics handlers.\n * @returns {void}\n */\nexport function initAnalytics({ getState }: { getState: Function }, handlers: Array<Object>) {\n    if (!isAnalyticsEnabled(getState) || handlers.length === 0) {\n        return;\n    }\n\n    const state = getState();\n    const config = state['features/base/config'];\n    const {\n        deploymentInfo\n    } = config;\n    const { group, server } = state['features/base/jwt'];\n    const roomName = state['features/base/conference'].room;\n    const permanentProperties = {};\n\n    if (server) {\n        permanentProperties.server = server;\n    }\n    if (group) {\n        permanentProperties.group = group;\n    }\n\n    //  Report if user is using websocket\n    permanentProperties.websocket = navigator.product !== 'ReactNative' && typeof config.websocket === 'string';\n\n    // Optionally, include local deployment information based on the\n    // contents of window.config.deploymentInfo.\n    if (deploymentInfo) {\n        for (const key in deploymentInfo) {\n            if (deploymentInfo.hasOwnProperty(key)) {\n                permanentProperties[key] = deploymentInfo[key];\n            }\n        }\n    }\n\n    analytics.addPermanentProperties(permanentProperties);\n    analytics.setConferenceName(roomName);\n\n    // Set the handlers last, since this triggers emptying of the cache\n    analytics.setAnalyticsHandlers(handlers);\n\n    if (!isMobileBrowser() && browser.isChrome()) {\n        const bannerCfg = state['features/base/config'].chromeExtensionBanner;\n\n        checkChromeExtensionsInstalled(bannerCfg).then(extensionsInstalled => {\n            if (extensionsInstalled?.length) {\n                analytics.addPermanentProperties({\n                    hasChromeExtension: extensionsInstalled.some(ext => ext)\n                });\n            }\n        });\n    }\n}\n\n/**\n * Tries to load the scripts for the analytics handlers and creates them.\n *\n * @param {Array} scriptURLs - The array of script urls to load.\n * @param {Object} handlerConstructorOptions - The default options to pass when creating handlers.\n * @private\n * @returns {Promise} Resolves with the handlers that have been successfully loaded and rejects if there are no handlers\n * loaded or the analytics is disabled.\n */\nfunction _loadHandlers(scriptURLs = [], handlerConstructorOptions) {\n    const promises = [];\n\n    for (const url of scriptURLs) {\n        promises.push(\n            loadScript(url).then(\n                () => {\n                    return { type: 'success' };\n                },\n                error => {\n                    return {\n                        type: 'error',\n                        error,\n                        url\n                    };\n                }));\n    }\n\n    return Promise.all(promises).then(values => {\n        for (const el of values) {\n            if (el.type === 'error') {\n                logger.warn(`Failed to load ${el.url}: ${el.error}`);\n            }\n        }\n\n        // analyticsHandlers is the handlers we want to use\n        // we search for them in the JitsiMeetGlobalNS, but also\n        // check the old location to provide legacy support\n        const analyticsHandlers = [\n            ...getJitsiMeetGlobalNS().analyticsHandlers,\n            ...window.analyticsHandlers\n        ];\n        const handlers = [];\n\n        for (const Handler of analyticsHandlers) {\n            // Catch any error while loading to avoid skipping analytics in case\n            // of multiple scripts.\n            try {\n                handlers.push(new Handler(handlerConstructorOptions));\n            } catch (error) {\n                logger.warn(`Error creating analytics handler: ${error}`);\n            }\n        }\n        logger.debug(`Loaded ${handlers.length} analytics handlers`);\n\n        return handlers;\n    });\n}\n","/**\n * The action dispatched when the {@link NetworkInfo} structure is being updated.\n *\n * @type {string}\n */\nexport const SET_NETWORK_INFO = 'SET_NETWORK_INFO';\n\n/**\n * Tha action dispatched by 'base/net-info' middleware in order to store the cleanup function for later use.\n * @type {string}\n * @private\n */\nexport const _STORE_NETWORK_INFO_CLEANUP = 'STORE_NETWORK_INFO_CLEANUP';\n","// @flow\n\nimport { SET_NETWORK_INFO, _STORE_NETWORK_INFO_CLEANUP } from './actionTypes';\n\nimport type { NetworkInfo } from './types';\n\n/**\n * Up[dates the network info state.\n *\n * @param {NetworkInfo} networkInfo - The new network state to be set.\n * @returns {{\n *     type: SET_NETWORK_INFO,\n *     isOnline: boolean,\n *     networkType: string,\n *     details: Object\n * }}\n */\nexport function setNetworkInfo({ isOnline, networkType, details }: NetworkInfo): Object {\n    return {\n        type: SET_NETWORK_INFO,\n        isOnline,\n        networkType,\n        details\n    };\n}\n\n/**\n * Stored the cleanup function used to shutdown the {@code NetworkInfoService}.\n *\n * @param {Function} cleanup - The cleanup function to be called on {@code APP_WILL_UNMOUNT}.\n * @returns {{\n *     type: _STORE_NETWORK_INFO_CLEANUP,\n *     cleanup: Function\n * }}\n * @private\n */\nexport function _storeNetworkInfoCleanup(cleanup: Function): Object {\n    return {\n        type: _STORE_NETWORK_INFO_CLEANUP,\n        cleanup\n    };\n}\n","/**\n * The name for Redux store key used by the 'base/net-info' feature.\n *\n * @type {string}\n */\nexport const STORE_NAME = 'features/base/net-info';\n","export const ONLINE_STATE_CHANGED_EVENT = 'network-info-online-status-change';\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/net-info');\n","import EventEmitter from 'events';\n\nimport { ONLINE_STATE_CHANGED_EVENT } from './events';\n\n/**\n * The network info service implementation for web (Chrome, Firefox and Safari).\n */\nexport default class NetworkInfoService extends EventEmitter {\n\n    /**\n     * Creates new instance...\n     */\n    constructor() {\n        super();\n        this._onlineStateListener = this._handleOnlineStatusChange.bind(this, /* online */ true);\n        this._offlineStateListener = this._handleOnlineStatusChange.bind(this, /* offline */ false);\n    }\n\n    /**\n     * Callback function to track the online state.\n     *\n     * @param {boolean} isOnline - Is the browser online or not.\n     * @private\n     * @returns {void}\n     */\n    _handleOnlineStatusChange(isOnline) {\n        this.emit(ONLINE_STATE_CHANGED_EVENT, { isOnline });\n    }\n\n    /**\n     * Checks for support.\n     *\n     * @returns {boolean}\n     */\n    static isSupported() {\n        return window.addEventListener && typeof navigator.onLine !== 'undefined';\n    }\n\n    /**\n     * Starts the service.\n     *\n     * @returns {void}\n     */\n    start() {\n        window.addEventListener('online', this._onlineStateListener);\n        window.addEventListener('offline', this._offlineStateListener);\n    }\n\n    /**\n     * Stops the service.\n     *\n     * @returns {void}\n     */\n    stop() {\n        window.removeEventListener('online', this._onlineStateListener);\n        window.removeEventListener('offline', this._offlineStateListener);\n    }\n}\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';\nimport { MiddlewareRegistry } from '../redux';\n\nimport { _storeNetworkInfoCleanup, setNetworkInfo } from './actions';\nimport { STORE_NAME } from './constants';\nimport { ONLINE_STATE_CHANGED_EVENT } from './events';\nimport logger from './logger';\nimport NetworkInfoService from './NetworkInfoService';\nimport type { NetworkInfo } from './types';\n\n/**\n * Middleware for 'base/net-info' feature.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        if (NetworkInfoService.isSupported()) {\n            const networkInfoService = new NetworkInfoService();\n            const stop = () => {\n                networkInfoService.stop();\n                networkInfoService.removeAllListeners();\n            };\n\n            networkInfoService.addListener(\n                ONLINE_STATE_CHANGED_EVENT,\n                ({ isOnline, networkType, details }: NetworkInfo) => {\n                    logger.info('Network changed', JSON.stringify({\n                        isOnline,\n                        details,\n                        networkType\n                    }));\n                    dispatch(setNetworkInfo({\n                        isOnline,\n                        networkType,\n                        details\n                    }));\n                });\n\n            dispatch(_storeNetworkInfoCleanup(stop));\n\n            networkInfoService.start();\n        }\n        break;\n    case APP_WILL_UNMOUNT: {\n        const { _cleanup } = getState()[STORE_NAME];\n\n        if (_cleanup) {\n            _cleanup();\n            dispatch(_storeNetworkInfoCleanup(undefined));\n        }\n    }\n        break;\n    }\n\n    return result;\n});\n","// @flow\nimport { assign, ReducerRegistry } from '../redux';\n\nimport { SET_NETWORK_INFO, _STORE_NETWORK_INFO_CLEANUP } from './actionTypes';\nimport { STORE_NAME } from './constants';\n\nconst DEFAULT_STATE = {\n    isOnline: true\n};\n\n/**\n * The base/net-info feature's reducer.\n */\nReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case SET_NETWORK_INFO:\n        return assign(state, {\n            isOnline: action.isOnline,\n            networkType: action.networkType,\n            cellularGeneration: action.cellularGeneration,\n            details: action.details\n        });\n    case _STORE_NETWORK_INFO_CLEANUP:\n        return assign(state, {\n            _cleanup: action.cleanup\n        });\n    default:\n        return state;\n    }\n});\n","// @flow\n\nimport {\n    CONFERENCE_JOINED,\n    CONFERENCE_WILL_LEAVE,\n    SET_ROOM\n} from '../base/conference';\nimport { SET_CONFIG } from '../base/config';\nimport { SET_NETWORK_INFO } from '../base/net-info';\nimport { MiddlewareRegistry } from '../base/redux';\nimport {\n    getLocalAudioTrack,\n    getLocalVideoTrack,\n    TRACK_ADDED,\n    TRACK_REMOVED,\n    TRACK_UPDATED\n} from '../base/tracks';\n\nimport { UPDATE_LOCAL_TRACKS_DURATION } from './actionTypes';\nimport { createLocalTracksDurationEvent, createNetworkInfoEvent } from './AnalyticsEvents';\nimport { createHandlers, initAnalytics, resetAnalytics, sendAnalytics } from './functions';\n\n/**\n * Calculates the duration of the local tracks.\n *\n * @param {Object} state - The redux state.\n * @returns {Object} - The local tracks duration.\n */\nfunction calculateLocalTrackDuration(state) {\n    const now = Date.now();\n    const { localTracksDuration } = state['features/analytics'];\n    const { conference } = state['features/base/conference'];\n    const { audio, video } = localTracksDuration;\n    const { camera, desktop } = video;\n    const tracks = state['features/base/tracks'];\n    const audioTrack = getLocalAudioTrack(tracks);\n    const videoTrack = getLocalVideoTrack(tracks);\n    const newDuration = { ...localTracksDuration };\n\n    if (!audioTrack || audioTrack.muted || !conference) {\n        newDuration.audio = {\n            startedTime: -1,\n            value: audio.value + (audio.startedTime === -1 ? 0 : now - audio.startedTime)\n        };\n    } else if (audio.startedTime === -1) {\n        newDuration.audio.startedTime = now;\n    }\n\n    if (!videoTrack || videoTrack.muted || !conference) {\n        newDuration.video = {\n            camera: {\n                startedTime: -1,\n                value: camera.value + (camera.startedTime === -1 ? 0 : now - camera.startedTime)\n            },\n            desktop: {\n                startedTime: -1,\n                value: desktop.value + (desktop.startedTime === -1 ? 0 : now - desktop.startedTime)\n            }\n        };\n    } else {\n        const { videoType } = videoTrack;\n\n        if (video[videoType].startedTime === -1) {\n            newDuration.video[videoType].startedTime = now;\n        }\n    }\n\n    return {\n        ...localTracksDuration,\n        ...newDuration\n    };\n}\n\n/**\n * Middleware which intercepts config actions to handle evaluating analytics\n * config based on the config stored in the store.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case SET_CONFIG:\n        if (navigator.product === 'ReactNative') {\n            // Reseting the analytics is currently not needed for web because\n            // the user will be redirected to another page and new instance of\n            // Analytics will be created and initialized.\n            resetAnalytics();\n        }\n        break;\n    case SET_ROOM: {\n        // createHandlers is called before the SET_ROOM action is executed in order for Amplitude to initialize before\n        // the deeplinking logic is executed (after the SET_ROOM action) so that the Amplitude device id is available\n        // if needed.\n        const createHandlersPromise = createHandlers(store);\n        const result = next(action);\n\n        createHandlersPromise.then(handlers => {\n            initAnalytics(store, handlers);\n        });\n\n        return result;\n    }\n    }\n\n    const result = next(action);\n\n    switch (action.type) {\n    case CONFERENCE_JOINED: {\n        const { dispatch, getState } = store;\n        const state = getState();\n\n        dispatch({\n            type: UPDATE_LOCAL_TRACKS_DURATION,\n            localTracksDuration: {\n                ...calculateLocalTrackDuration(state),\n                conference: {\n                    startedTime: Date.now(),\n                    value: 0\n                }\n            }\n        });\n        break;\n    }\n\n    case CONFERENCE_WILL_LEAVE: {\n        const { dispatch, getState } = store;\n        const state = getState();\n        const { localTracksDuration } = state['features/analytics'];\n        const newLocalTracksDuration = {\n            ...calculateLocalTrackDuration(state),\n            conference: {\n                startedTime: -1,\n                value: Date.now() - localTracksDuration.conference.startedTime\n            }\n        };\n\n        sendAnalytics(createLocalTracksDurationEvent(newLocalTracksDuration));\n\n        dispatch({\n            type: UPDATE_LOCAL_TRACKS_DURATION,\n            localTracksDuration: newLocalTracksDuration\n        });\n        break;\n    }\n    case SET_NETWORK_INFO:\n        sendAnalytics(\n            createNetworkInfoEvent({\n                isOnline: action.isOnline,\n                details: action.details,\n                networkType: action.networkType\n            }));\n        break;\n    case TRACK_ADDED:\n    case TRACK_REMOVED:\n    case TRACK_UPDATED: {\n        const { dispatch, getState } = store;\n        const state = getState();\n        const { localTracksDuration } = state['features/analytics'];\n\n        if (localTracksDuration.conference.startedTime === -1 || action.mediaType === 'presenter') {\n            // We don't want to track the media duration if the conference is not joined yet because otherwise we won't\n            // be able to compare them with the conference duration (from conference join to conference will leave).\n            // Also, do not track media duration for presenter tracks.\n            break;\n        }\n        dispatch({\n            type: UPDATE_LOCAL_TRACKS_DURATION,\n            localTracksDuration: {\n                ...localTracksDuration,\n                ...calculateLocalTrackDuration(state)\n            }\n        });\n        break;\n    }\n    }\n\n    return result;\n});\n","// @flow\n\n/**\n * The type of (redux) action which signals that local media duration has changed.\n *\n * {\n *     type: UPDATE_LOCAL_TRACKS_DURATION,\n *     localTracksDuration: Object\n * }\n */\nexport const UPDATE_LOCAL_TRACKS_DURATION = 'UPDATE_LOCAL_TRACKS_DURATION';\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport { UPDATE_LOCAL_TRACKS_DURATION } from './actionTypes';\n\n/**\n * Initial state.\n */\nconst DEFAULT_STATE = {\n    localTracksDuration: {\n        audio: {\n            startedTime: -1,\n            value: 0\n        },\n        video: {\n            camera: {\n                startedTime: -1,\n                value: 0\n            },\n            desktop: {\n                startedTime: -1,\n                value: 0\n            }\n        },\n        conference: {\n            startedTime: -1,\n            value: 0\n        }\n    }\n};\n\n/**\n * Listen for actions which changes the state of the analytics feature.\n *\n * @param {Object} state - The Redux state of the feature features/analytics.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @returns {Object}\n */\nReducerRegistry.register('features/analytics', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case UPDATE_LOCAL_TRACKS_DURATION:\n        return {\n            ...state,\n            localTracksDuration: action.localTracksDuration\n        };\n    default:\n        return state;\n    }\n});\n","export * from './AnalyticsEvents';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nmodule.exports = _createClass;","/**\n * The type of Redux action which signals that {@link JitsiMeetJS} was disposed.\n *\n * {\n *     type: LIB_DID_DISPOSE\n * }\n */\nexport const LIB_DID_DISPOSE = 'LIB_DID_DISPOSE';\n\n/**\n * The type of Redux action which signals that {@link JitsiMeetJS.init()} was\n * invoked and completed successfully.\n *\n * {\n *     type: LIB_DID_INIT\n * }\n */\nexport const LIB_DID_INIT = 'LIB_DID_INIT';\n\n/**\n * Action to signal that lib-jitsi-meet initialized failed with error.\n *\n * {\n *     type: LIB_INIT_ERROR,\n *     error: Error\n * }\n */\nexport const LIB_INIT_ERROR = 'LIB_INIT_ERROR';\n\n/**\n * The type of Redux action which signals that {@link JitsiMeetJS} will be\n * disposed.\n *\n * {\n *     type: LIB_WILL_DISPOSE\n * }\n */\nexport const LIB_WILL_DISPOSE = 'LIB_WILL_DISPOSE';\n\n/**\n * The type of Redux action which signals that {@link JitsiMeetJS.init()} will\n * be invoked.\n *\n * {\n *     type: LIB_WILL_INIT\n * }\n */\nexport const LIB_WILL_INIT = 'LIB_WILL_INIT';\n","/* @flow */\n\nimport type { Dispatch } from 'redux';\n\nimport JitsiMeetJS from './_';\nimport {\n    LIB_DID_DISPOSE,\n    LIB_DID_INIT,\n    LIB_INIT_ERROR,\n    LIB_WILL_DISPOSE,\n    LIB_WILL_INIT\n} from './actionTypes';\nimport { isAnalyticsEnabled } from './functions';\n\ndeclare var APP: Object;\n\n/**\n * Disposes (of) lib-jitsi-meet.\n *\n * @returns {Function}\n */\nexport function disposeLib() {\n    return (dispatch: Dispatch<any>) => {\n        dispatch({ type: LIB_WILL_DISPOSE });\n\n        // TODO Currently, lib-jitsi-meet doesn't have the functionality to\n        // dispose itself.\n        dispatch({ type: LIB_DID_DISPOSE });\n    };\n}\n\n/**\n * Initializes lib-jitsi-meet (i.e. {@link invokes JitsiMeetJS.init()}) with the\n * current config(uration).\n *\n * @returns {Function}\n */\nexport function initLib() {\n    return (dispatch: Dispatch<any>, getState: Function): void => {\n        const config = getState()['features/base/config'];\n\n        if (!config) {\n            throw new Error('Cannot init lib-jitsi-meet without config');\n        }\n\n        dispatch({ type: LIB_WILL_INIT });\n\n        try {\n            JitsiMeetJS.init({\n                enableAnalyticsLogging: isAnalyticsEnabled(getState),\n                ...config\n            });\n            dispatch({ type: LIB_DID_INIT });\n        } catch (error) {\n            dispatch(libInitError(error));\n        }\n    };\n}\n\n/**\n * Notifies about a specific error raised by {@link JitsiMeetJS.init()}.\n *\n * @param {Error} error - The Error raised by JitsiMeetJS.init().\n * @returns {{\n *     type: LIB_INIT_ERROR,\n *     error: Error\n * }}\n */\nexport function libInitError(error: Error) {\n    return {\n        type: LIB_INIT_ERROR,\n        error\n    };\n}\n","/**\n * The type of redux action which stores the log collector that will be\n * submitting the logs to CallStats.\n *\n * {\n *     type: SET_LOG_COLLECTOR,\n *     logCollector: Logger.LogCollector\n * }\n */\nexport const SET_LOG_COLLECTOR = 'SET_LOG_COLLECTOR';\n\n/**\n * The type of redux action which sets the configuration of the feature\n * base/logging.\n *\n * {\n *     type: SET_LOGGING_CONFIG,\n *     config: Object\n * }\n */\nexport const SET_LOGGING_CONFIG = 'SET_LOGGING_CONFIG';\n","/* @flow */\n\nimport { SET_LOG_COLLECTOR, SET_LOGGING_CONFIG } from './actionTypes';\n\n/**\n * Stores a {@code Logger.LogCollector} instance which will be uploading logs\n * to CallStats.\n *\n * @param {Logger.LogCollector} logCollector - The log collector instance to be\n * stored in the Redux state of base/logging feature.\n * @returns {{\n *     type,\n *     logCollector: Object\n * }}\n */\nexport function setLogCollector(logCollector: ?Object) {\n    return {\n        type: SET_LOG_COLLECTOR,\n        logCollector\n    };\n}\n\n/**\n * Sets the configuration of the feature base/logging.\n *\n * @param {Object} config - The configuration to set on the features\n * base/logging.\n * @returns {{\n *     type: SET_LOGGING_CONFIG,\n *     config: Object\n * }}\n */\nexport function setLoggingConfig(config: Object) {\n    return {\n        type: SET_LOGGING_CONFIG,\n        config\n    };\n}\n","// @flow\n\n/**\n * Indicates whether the test mode is enabled. When it's enabled\n * {@link TestHint} and other components from the testing package will be\n * rendered in various places across the app to help with automatic testing.\n *\n * @param {Object} state - The redux store state.\n * @returns {boolean}\n */\nexport function isTestModeEnabled(state: Object): boolean {\n    const testingConfig = state['features/base/config'].testing;\n\n    return Boolean(testingConfig && testingConfig.testMode);\n}\n","// @flow\n\nimport React, { Component, Fragment } from 'react';\n\nimport { getLocalParticipant } from '../../participants';\nimport { connect } from '../../redux';\n\n// FIXME this imports feature to 'base'\nimport { statsEmitter } from '../../../connection-indicator';\n\nimport { TestHint } from './index';\nimport { isTestModeEnabled } from '../functions';\n\n/**\n * Defines the TestConnectionInfo's properties.\n */\ntype Props = {\n\n    /**\n     * The JitsiConference's connection state. It's the lib-jitsi-meet's event\n     * name converted to a string directly. At the time of this writing these\n     * are the possible values:\n     * 'conference.connectionEstablished'\n     * 'conference.connectionInterrupted'\n     * 'conference.connectionRestored'\n     */\n    _conferenceConnectionState: string,\n\n    /**\n     * This will be a boolean converted to a string. The value will be 'true'\n     * once the conference is joined (the XMPP MUC room to be specific).\n     */\n    _conferenceJoinedState: string,\n\n    /**\n     * The local participant's ID. Required to be able to observe the local RTP\n     * stats.\n     */\n    _localUserId: string,\n\n    /**\n     * Indicates whether or not the test mode is currently on. Otherwise the\n     * TestConnectionInfo component will not render.\n     */\n    _testMode: boolean\n}\n\n/**\n * Describes the TestConnectionInfo's state.\n */\ntype State = {\n\n    /**\n     * The RTP stats section.\n     */\n    stats: {\n\n        /**\n         * The local bitrate.\n         */\n        bitrate: {\n\n            /**\n             * The local download RTP bitrate.\n             */\n            download: number,\n\n            /**\n             * The local upload RTP bitrate.\n             */\n            upload: number\n        }\n    }\n}\n\n/**\n * The component will expose some of the app state to the jitsi-meet-torture\n * through the UI accessibility layer which is visible to the tests. The Web\n * tests currently will execute JavaScript and access globals variables to learn\n * this information, but there's no such option on React Native(maybe that's\n * a good thing).\n */\nclass TestConnectionInfo extends Component<Props, State> {\n    _onStatsUpdated: Object => void;\n\n    /**\n     * Initializes new <tt>TestConnectionInfo</tt> instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onStatsUpdated = this._onStatsUpdated.bind(this);\n\n        this.state = {\n            stats: {\n                bitrate: {\n                    download: 0,\n                    upload: 0\n                }\n            }\n        };\n    }\n\n    /**\n     * The {@link statsEmitter} callback hoked up for the local participant.\n     *\n     * @param {Object} stats - These are the RTP stats. Look in\n     * the lib-jitsi-meet for more details on the actual structure or add\n     * a console print and figure out there.\n     * @returns {void}\n     * @private\n     */\n    _onStatsUpdated(stats = {}) {\n        this.setState({\n            stats: {\n                bitrate: {\n                    download: stats.bitrate?.download || 0,\n                    upload: stats.bitrate?.upload || 0\n                }\n            }\n        });\n    }\n\n    /**\n     * Starts listening for the local RTP stat updates.\n     *\n     * @inheritdoc\n     * returns {void}\n     */\n    componentDidMount() {\n        statsEmitter.subscribeToClientStats(\n            this.props._localUserId, this._onStatsUpdated);\n    }\n\n    /**\n     * Updates which user's stats are being listened to (the local participant's\n     * id changes).\n     *\n     * @inheritdoc\n     * returns {void}\n     */\n    componentDidUpdate(prevProps: Props) {\n        if (prevProps._localUserId !== this.props._localUserId) {\n            statsEmitter.unsubscribeToClientStats(\n                prevProps._localUserId, this._onStatsUpdated);\n            statsEmitter.subscribeToClientStats(\n                this.props._localUserId, this._onStatsUpdated);\n        }\n    }\n\n    /**\n     * Removes the local stats listener.\n     *\n     * @private\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        statsEmitter.unsubscribeToClientStats(\n            this.props._localUserId, this._onStatsUpdated);\n    }\n\n    /**\n     * Renders the component if the app is currently running in the test mode\n     * (config.testing.testMode == true).\n     *\n     * @returns {ReactElement|null}\n     */\n    render() {\n        if (!this.props._testMode) {\n            return null;\n        }\n\n        return (\n            <Fragment accessible = { false } >\n                <TestHint\n                    id = 'org.jitsi.meet.conference.connectionState'\n                    value = { this.props._conferenceConnectionState } />\n                <TestHint\n                    id = 'org.jitsi.meet.conference.joinedState'\n                    value = { this.props._conferenceJoinedState } />\n                <TestHint\n                    id = 'org.jitsi.meet.stats.rtp'\n                    value = { JSON.stringify(this.state.stats) } />\n            </Fragment>\n        );\n    }\n}\n\n\n/**\n * Maps (parts of) the Redux state to the associated TestConnectionInfo's props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _conferenceConnectionState: string,\n *     _conferenceJoinedState: string,\n *     _localUserId: string,\n *     _testMode: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    const conferenceJoined\n        = Boolean(state['features/base/conference'].conference);\n    const localParticipant = getLocalParticipant(state);\n\n    return {\n        _conferenceConnectionState: state['features/testing'].connectionState,\n        _conferenceJoinedState: conferenceJoined.toString(),\n        _localUserId: localParticipant && localParticipant.id,\n        _testMode: isTestModeEnabled(state)\n    };\n}\n\nexport default connect(_mapStateToProps)(TestConnectionInfo);\n","/**\n * The type of redux action which sets the configuration of the feature\n * base/logging.\n *\n * {\n *     type: SET_CONNECTION_STATE\n * }\n */\nexport const SET_CONNECTION_STATE = 'SET_CONNECTION_STATE';\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/testing');\n","// @flow\n\nimport { MiddlewareRegistry } from '../redux';\n\nimport { CONFERENCE_WILL_JOIN } from '../conference';\nimport { JitsiConferenceEvents } from '../lib-jitsi-meet';\nimport { setConnectionState } from './actions';\nimport logger from './logger';\n\n/**\n * The Redux middleware of the feature testing.\n *\n * @param {Store} store - The Redux store.\n * @returns {Function}\n * @private\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONFERENCE_WILL_JOIN:\n        _bindConferenceConnectionListener(action.conference, store);\n        break;\n    }\n\n    return next(action);\n});\n\n/**\n * Binds a handler which will listen for the connection related conference\n * events (in the lib-jitsi-meet internals those are associated with the ICE\n * connection state).\n *\n * @param {JitsiConference} conference - The {@link JitsiConference} for which\n * the conference will join even is dispatched.\n * @param {Store} store - The redux store in which the specified action is being\n * dispatched.\n * @private\n * @returns {void}\n */\nfunction _bindConferenceConnectionListener(conference, { dispatch }) {\n\n    conference.on(\n        JitsiConferenceEvents.CONNECTION_ESTABLISHED,\n        _onConnectionEvent.bind(\n            null, JitsiConferenceEvents.CONNECTION_ESTABLISHED, dispatch));\n    conference.on(\n        JitsiConferenceEvents.CONNECTION_RESTORED,\n        _onConnectionEvent.bind(\n            null, JitsiConferenceEvents.CONNECTION_RESTORED, dispatch));\n    conference.on(\n        JitsiConferenceEvents.CONNECTION_INTERRUPTED,\n        _onConnectionEvent.bind(\n            null, JitsiConferenceEvents.CONNECTION_INTERRUPTED, dispatch));\n}\n\n/**\n * The handler function for conference connection events which wil store the\n * latest even name in the Redux store of feature testing.\n *\n * @param {string} event - One of the lib-jitsi-meet JitsiConferenceEvents.\n * @param {Function} dispatch - The dispatch function of the current Redux\n * store.\n * @returns {void}\n * @private\n */\nfunction _onConnectionEvent(event, dispatch) {\n    switch (event) {\n    case JitsiConferenceEvents.CONNECTION_ESTABLISHED:\n    case JitsiConferenceEvents.CONNECTION_INTERRUPTED:\n    case JitsiConferenceEvents.CONNECTION_RESTORED:\n        dispatch(setConnectionState(event));\n        break;\n    default:\n        logger.error(`onConnectionEvent - unsupported event type: ${event}`);\n        break;\n    }\n}\n\n","/* @flow */\n\nimport { SET_CONNECTION_STATE } from './actionTypes';\n\n// eslint-disable-next-line jsdoc/require-description-complete-sentence\n/**\n * Sets the conference connection state of the testing feature.\n *\n * @param {string} connectionState - This is the lib-jitsi-meet event name. Can\n * be one of (with the string values at the time of this writing):\n * <li>{@link JitsiConferenceEvents.CONNECTION_ESTABLISHED}\n * - (\"conference.connectionEstablished\"</li>\n * <li>{@link JitsiConferenceEvents.CONNECTION_INTERRUPTED}\n * - (\"conference.connectionInterrupted\")</li>\n * <li>{@link JitsiConferenceEvents.CONNECTION_RESTORED}\n * - (\"conference.connectionRestored\")</li>\n * In the reducer the value will be an empty string until first event is\n * received.\n *\n * @returns {{\n *     type: SET_CONNECTION_STATE,\n *     connectionState: string\n * }}\n */\nexport function setConnectionState(connectionState: string) {\n    return {\n        type: SET_CONNECTION_STATE,\n        connectionState\n    };\n}\n","import { assign, ReducerRegistry } from '../redux';\n\nimport { SET_CONNECTION_STATE } from './actionTypes';\n\n/**\n * The initial state of the feature testing.\n *\n * @type {{\n *     connectionState: string\n * }}\n */\nconst INITIAL_STATE = {\n    connectionState: ''\n};\n\nReducerRegistry.register(\n    'features/testing',\n    (state = INITIAL_STATE, action) => {\n        switch (action.type) {\n        case SET_CONNECTION_STATE:\n            return _setConnectionState(state, action);\n\n        default:\n            return state;\n        }\n    });\n\n/**\n * Reduces a specific Redux action SET_CONNECTION_STATE of the feature\n * testing.\n *\n * @param {Object} state - The Redux state of the feature base/logging.\n * @param {Action} action - The Redux action SET_CONNECTION_STATE to reduce.\n * @private\n * @returns {Object} The new state of the feature testing after the\n * reduction of the specified action.\n */\nfunction _setConnectionState(state, action) {\n    return assign(state, { connectionState: action.connectionState });\n}\n","\nimport { getCurrentConference } from '../conference';\n\n/**\n * Implements log storage interface from the jitsi-meet-logger lib. Captured\n * logs are sent to CallStats.\n */\nexport default class JitsiMeetLogStorage {\n\n    /**\n     * Creates new <tt>JitsiMeetLogStorage</tt>.\n     *\n     * @param {Function} getState - The Redux store's {@code getState} method.\n     */\n    constructor(getState) {\n        /**\n         * Counts each log entry, increases on every batch log entry stored.\n         * @type {number}\n         */\n        this.counter = 1;\n\n        /**\n         * The Redux store's {@code getState} method.\n         *\n         * @type {Function}\n         */\n        this.getState = getState;\n    }\n\n    /**\n     * The JitsiMeetLogStorage is ready when the CallStats are started and\n     * before refactoring the code it was after the conference has been joined.\n     * A conference is considered joined when the 'conference' field is defined\n     * in the base/conference state.\n     *\n     * @returns {boolean} <tt>true</tt> when this storage is ready or\n     * <tt>false</tt> otherwise.\n     */\n    isReady() {\n        const { conference } = this.getState()['features/base/conference'];\n\n        return Boolean(conference);\n    }\n\n    /**\n     * Called by the <tt>LogCollector</tt> to store a series of log lines into\n     * batch.\n     *\n     * @param {Array<string|Object>} logEntries - An array containing strings\n     * representing log lines or aggregated lines objects.\n     * @returns {void}\n     */\n    storeLogs(logEntries) {\n        const conference = getCurrentConference(this.getState());\n\n        if (!conference || !conference.isCallstatsEnabled()) {\n            // Discard the logs if CallStats is not enabled.\n            return;\n        }\n\n        let logMessage = `{\"log${this.counter}\":\"\\n`;\n\n        for (let i = 0, len = logEntries.length; i < len; i++) {\n            const logEntry = logEntries[i];\n\n            if (logEntry.timestamp) {\n                logMessage += `${logEntry.timestamp} `;\n            }\n            if (logEntry.count > 1) {\n                logMessage += `(${logEntry.count}) `;\n            }\n            logMessage += `${logEntry.text}\\n`;\n        }\n        logMessage += '\"}';\n\n        this.counter += 1;\n\n        // Try catch was used, because there are many variables\n        // on the way that could be uninitialized if the storeLogs\n        // attempt would be made very early (which is unlikely)\n        try {\n            conference.sendApplicationLog(logMessage);\n        } catch (error) {\n            // NOTE console is intentional here\n            console.error(\n                `Failed to store the logs, msg length: ${logMessage.length}`\n                    + `error: ${JSON.stringify(error)}`);\n        }\n    }\n}\n","/**\n * Implements in memory logs storage, used for testing/debugging.\n *\n */\nexport default class JitsiMeetInMemoryLogStorage {\n\n    /**\n     * Creates new <tt>JitsiMeetInMemoryLogStorage</tt>.\n     */\n    constructor() {\n        /**\n         * Array of the log entries to keep.\n         * @type {array}\n         */\n        this.logs = [];\n    }\n\n    /**\n     * Checks if this storage instance is ready.\n     *\n     * @returns {boolean} <tt>true</tt> when this storage is ready or\n     * <tt>false</tt> otherwise.\n     */\n    isReady() {\n        return true;\n    }\n\n    /**\n     * Called by the <tt>LogCollector</tt> to store a series of log lines into\n     * batch.\n     *\n     * @param {string|Object[]} logEntries - An array containing strings\n     * representing log lines or aggregated lines objects.\n     * @returns {void}\n     */\n    storeLogs(logEntries) {\n        for (let i = 0, len = logEntries.length; i < len; i++) {\n            const logEntry = logEntries[i];\n\n            if (typeof logEntry === 'object') {\n                this.logs.push(logEntry.text);\n            } else {\n                // Regular message\n                this.logs.push(logEntry);\n            }\n        }\n    }\n\n    /**\n     * Returns the logs stored in the memory.\n     *\n     * @returns {Array<string>} The collected log entries.\n     */\n    getLogs() {\n        return this.logs;\n    }\n}\n","/* @flow */\n\nimport Logger from 'jitsi-meet-logger';\n\nimport { APP_WILL_MOUNT } from '../app';\nimport { CONFERENCE_JOINED, getCurrentConference } from '../conference';\nimport JitsiMeetJS, {\n    LIB_WILL_INIT,\n    JitsiConferenceEvents\n} from '../lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../redux';\n\nimport { isTestModeEnabled } from '../testing';\n\nimport { setLogCollector } from './actions';\nimport { SET_LOGGING_CONFIG } from './actionTypes';\nimport JitsiMeetLogStorage from './JitsiMeetLogStorage';\nimport JitsiMeetInMemoryLogStorage from './JitsiMeetInMemoryLogStorage';\n\ndeclare var APP: Object;\n\n/**\n * The Redux middleware of the feature base/logging.\n *\n * @param {Store} store - The Redux store.\n * @returns {Function}\n * @private\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        return _appWillMount(store, next, action);\n\n    case CONFERENCE_JOINED:\n        return _conferenceJoined(store, next, action);\n\n    case LIB_WILL_INIT:\n        return _libWillInit(store, next, action);\n\n    case SET_LOGGING_CONFIG:\n        return _setLoggingConfig(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature base/logging that the action {@link APP_WILL_MOUNT} is\n * being dispatched within a specific Redux {@code store}.\n *\n * @param {Store} store - The Redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The Redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The Redux action {@code APP_WILL_MOUNT} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _appWillMount({ getState }, next, action) {\n    const { config } = getState()['features/base/logging'];\n\n    _setLogLevels(Logger, config);\n\n    // FIXME Until the logic of conference.js is rewritten into the React\n    // app we, JitsiMeetJS.init is to not be used for the React app.\n    // Consequently, LIB_WILL_INIT will not be dispatched. In the meantime, do\n    // the following:\n    typeof APP === 'undefined' || _setLogLevels(JitsiMeetJS, config);\n\n    return next(action);\n}\n\n/**\n * Starts the log collector, after {@link CONFERENCE_JOINED} action is reduced.\n *\n * @param {Store} store - The Redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The Redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The Redux action {@code CONFERENCE_JOINED} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {*}\n */\nfunction _conferenceJoined({ getState }, next, action) {\n\n    // Wait until the joined event is processed, so that the JitsiMeetLogStorage\n    // will be ready.\n    const result = next(action);\n\n    const { conference } = action;\n    const { logCollector } = getState()['features/base/logging'];\n\n    if (logCollector && conference === getCurrentConference(getState())) {\n        // Start the LogCollector's periodic \"store logs\" task\n        logCollector.start();\n\n        // Make an attempt to flush in case a lot of logs have been cached,\n        // before the collector was started.\n        logCollector.flush();\n\n        // This event listener will flush the logs, before the statistics module\n        // (CallStats) is stopped.\n        //\n        // NOTE The LogCollector is not stopped, because this event can be\n        // triggered multiple times during single conference (whenever\n        // statistics module is stopped). That includes the case when Jicofo\n        // terminates a single person conference (one person left in the room\n        // waiting for someone to join). It will then restart the media session\n        // when someone eventually joins the room which will start the stats\n        // again.\n        conference.on(\n            JitsiConferenceEvents.BEFORE_STATISTICS_DISPOSED,\n            () => logCollector.flush()\n        );\n    }\n\n    return result;\n}\n\n/**\n * Initializes logging in the app.\n *\n * @param {Store} store - The Redux store in which context the logging is to be\n * initialized.\n * @param {Object} loggingConfig - The configuration with which logging is to be\n * initialized.\n * @param {boolean} isTestingEnabled - Is debug logging enabled.\n * @private\n * @returns {void}\n */\nfunction _initLogging({ dispatch, getState }, loggingConfig, isTestingEnabled) {\n    const { logCollector } = getState()['features/base/logging'];\n\n    // Create the LogCollector and register it as the global log transport. It\n    // is done early to capture as much logs as possible. Captured logs will be\n    // cached, before the JitsiMeetLogStorage gets ready (statistics module is\n    // initialized).\n    if (!logCollector && !loggingConfig.disableLogCollector) {\n        const _logCollector\n            = new Logger.LogCollector(new JitsiMeetLogStorage(getState));\n\n        Logger.addGlobalTransport(_logCollector);\n        JitsiMeetJS.addGlobalLogTransport(_logCollector);\n        dispatch(setLogCollector(_logCollector));\n\n        // The JitsiMeetInMemoryLogStorage can not be accessed on mobile through\n        // the 'executeScript' method like it's done in torture tests for WEB.\n        if (isTestingEnabled && typeof APP === 'object') {\n            APP.debugLogs = new JitsiMeetInMemoryLogStorage();\n            const debugLogCollector = new Logger.LogCollector(\n                APP.debugLogs, { storeInterval: 1000 });\n\n            Logger.addGlobalTransport(debugLogCollector);\n            JitsiMeetJS.addGlobalLogTransport(debugLogCollector);\n            debugLogCollector.start();\n        }\n    } else if (logCollector && loggingConfig.disableLogCollector) {\n        Logger.removeGlobalTransport(logCollector);\n        JitsiMeetJS.removeGlobalLogTransport(logCollector);\n        logCollector.stop();\n        dispatch(setLogCollector(undefined));\n    }\n}\n\n/**\n * Notifies the feature base/logging that the action {@link LIB_WILL_INIT} is\n * being dispatched within a specific Redux {@code store}.\n *\n * @param {Store} store - The Redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The Redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The Redux action {@code LIB_WILL_INIT} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _libWillInit({ getState }, next, action) {\n    // Adding the if in order to preserve the logic for web after enabling\n    // LIB_WILL_INIT action for web in initLib action.\n    if (typeof APP === 'undefined') {\n        _setLogLevels(JitsiMeetJS, getState()['features/base/logging'].config);\n    }\n\n    return next(action);\n}\n\n/**\n * Notifies the feature base/logging that the action {@link SET_LOGGING_CONFIG}\n * is being dispatched within a specific Redux {@code store}.\n *\n * @param {Store} store - The Redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The Redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The Redux action {@code SET_LOGGING_CONFIG} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _setLoggingConfig({ dispatch, getState }, next, action) {\n    const result = next(action);\n    const newValue = getState()['features/base/logging'].config;\n    const isTestingEnabled = isTestModeEnabled(getState());\n\n    // TODO Generally, we'll want to _setLogLevels and _initLogging only if the\n    // logging config values actually change.\n    // XXX Unfortunately, we don't currently have a (nice) way of determining\n    // whether _setLogLevels or _initLogging have been invoked so we have to\n    // invoke them unconditionally even if none of the values have actually\n    // changed.\n    _setLogLevels(Logger, newValue);\n    _setLogLevels(JitsiMeetJS, newValue);\n\n    _initLogging({\n        dispatch,\n        getState\n    }, newValue, isTestingEnabled);\n\n    return result;\n}\n\n/**\n * Sets the log levels of {@link Logger} or {@link JitsiMeetJS} in accord with\n * a specific configuration.\n *\n * @param {Object} logger - The object on which the log levels are to be set.\n * @param {Object} config - The configuration specifying the log levels to be\n * set on {@code Logger} or {@code JitsiMeetJS}.\n * @private\n * @returns {void}\n */\nfunction _setLogLevels(logger, config) {\n    // XXX The loggers of the library lib-jitsi-meet and the application\n    // jitsi-meet are separate, so the log levels have to be set in both.\n\n    // First, set the default log level.\n    logger.setLogLevel(config.defaultLogLevel);\n\n    // Second, set the log level of each logger explictly overriden by config.\n    Object.keys(config).forEach(\n        id =>\n            id === 'defaultLogLevel' || logger.setLogLevelById(config[id], id));\n}\n","// @flow\n\nimport { equals, ReducerRegistry, set } from '../redux';\n\nimport { SET_LOG_COLLECTOR, SET_LOGGING_CONFIG } from './actionTypes';\n\n/**\n * The default/initial redux state of the feature base/logging.\n *\n * @type {{\n *     config: Object\n * }}\n */\nconst DEFAULT_STATE = {\n    config: require('../../../../logging_config.js'),\n\n    /**\n     * The log collector.\n     */\n    logCollector: undefined\n};\n\nReducerRegistry.register(\n    'features/base/logging',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case SET_LOGGING_CONFIG:\n            return _setLoggingConfig(state, action);\n        case SET_LOG_COLLECTOR: {\n            return _setLogCollector(state, action);\n        }\n\n        default:\n            return state;\n        }\n    });\n\n/**\n * Reduces a specific Redux action SET_LOGGING_CONFIG of the feature\n * base/logging.\n *\n * @param {Object} state - The Redux state of the feature base/logging.\n * @param {Action} action - The Redux action SET_LOGGING_CONFIG to reduce.\n * @private\n * @returns {Object} The new state of the feature base/logging after the\n * reduction of the specified action.\n */\nfunction _setLoggingConfig(state, action) {\n    const config = {\n        // The config of DEFAULT_STATE is the default configuration of the\n        // feature base/logging.\n        ...DEFAULT_STATE.config,\n        ...action.config\n    };\n\n    if (equals(state.config, config)) {\n        return state;\n    }\n\n    return {\n        ...state,\n        config\n    };\n}\n\n/**\n * Reduces a specific Redux action SET_LOG_COLLECTOR of the feature\n * base/logging.\n *\n * @param {Object} state - The Redux state of the feature base/logging.\n * @param {Action} action - The Redux action SET_LOG_COLLECTOR to reduce.\n * @private\n * @returns {Object} The new state of the feature base/logging after the\n * reduction of the specified action.\n */\nfunction _setLogCollector(state, action) {\n    return set(state, 'logCollector', action.logCollector);\n}\n","/* @flow */\n\nimport { SET_CONFIG } from '../config';\nimport { setLoggingConfig } from '../logging';\nimport { PARTICIPANT_LEFT } from '../participants';\nimport { MiddlewareRegistry } from '../redux';\n\nimport JitsiMeetJS from './_';\nimport { disposeLib, initLib } from './actions';\nimport { LIB_WILL_INIT } from './actionTypes';\n\ndeclare var APP: Object;\n\n/**\n * Middleware that captures PARTICIPANT_LEFT action for a local participant\n * (which signalizes that we finally left the app) and disposes lib-jitsi-meet.\n * Also captures SET_CONFIG action and disposes previous instance (if any) of\n * lib-jitsi-meet, and initializes a new one with new config.\n *\n * @param {Store} store - Redux store.\n * @private\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case LIB_WILL_INIT:\n        // Moved from conference.js init method. It appears the error handlers\n        // are not used for mobile.\n        if (typeof APP !== 'undefined') {\n            _setErrorHandlers();\n        }\n        break;\n\n    case PARTICIPANT_LEFT:\n        action.participant.local && store.dispatch(disposeLib());\n        break;\n\n    case SET_CONFIG:\n        return _setConfig(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature base/lib-jitsi-meet that the action SET_CONFIG is being\n * dispatched within a specific Redux store.\n *\n * @param {Store} store - The Redux store in which the specified action is being\n * dispatched.\n * @param {Dispatch} next - The Redux dispatch function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The Redux action SET_CONFIG which is being\n * dispatched in the specified store.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified action.\n */\nfunction _setConfig({ dispatch, getState }, next, action) {\n    const { initialized } = getState()['features/base/lib-jitsi-meet'];\n\n    // XXX Since the config is changing, the library lib-jitsi-meet must be\n    // initialized again with the new config. Consequently, it may need to be\n    // disposed of first.\n    // TODO Currently, disposeLib actually does not dispose of lib-jitsi-meet\n    // because lib-jitsi-meet does not implement such functionality.\n    if (initialized) {\n        dispatch(disposeLib());\n    }\n\n    // Let the new config into the Redux store (because initLib will read it\n    // from there).\n    const result = next(action);\n\n    // FIXME Obviously, the following is bad design. However, I'm currently\n    // introducing the features base/config and base/logging and I'm trying to\n    // minimize the scope of the changes while I'm attempting to preserve\n    // compatibility with the existing partially React-ified Web source code and\n    // what was already executing on React Native. Additionally, I do not care\n    // to load logging_config.js on React Native.\n    dispatch(setLoggingConfig(window.loggingConfig));\n\n    dispatch(initLib());\n\n    return result;\n}\n\n/**\n * Attaches our custom error handlers to the window object.\n *\n * @returns {void}\n */\nfunction _setErrorHandlers() {\n    // attaches global error handler, if there is already one, respect it\n    if (JitsiMeetJS.getGlobalOnErrorHandler) {\n        const oldOnErrorHandler = window.onerror;\n\n        // eslint-disable-next-line max-params\n        window.onerror = (message, source, lineno, colno, error) => {\n            JitsiMeetJS.getGlobalOnErrorHandler(\n                message, source, lineno, colno, error);\n\n            if (oldOnErrorHandler) {\n                oldOnErrorHandler(message, source, lineno, colno, error);\n            }\n        };\n\n        const oldOnUnhandledRejection = window.onunhandledrejection;\n\n        window.onunhandledrejection = function(event) {\n            JitsiMeetJS.getGlobalOnErrorHandler(\n                null, null, null, null, event.reason);\n\n            if (oldOnUnhandledRejection) {\n                oldOnUnhandledRejection(event);\n            }\n        };\n    }\n}\n","// @flow\n\nimport { ReducerRegistry } from '../redux';\n\nimport {\n    LIB_DID_DISPOSE,\n    LIB_DID_INIT,\n    LIB_INIT_ERROR\n} from './actionTypes';\n\n/**\n * The default/initial redux state of the feature base/lib-jitsi-meet.\n *\n * @type {Object}\n */\nconst DEFAULT_STATE = {};\n\nReducerRegistry.register(\n    'features/base/lib-jitsi-meet',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case LIB_DID_DISPOSE:\n            return DEFAULT_STATE;\n\n        case LIB_DID_INIT:\n            return {\n                ...state,\n                initError: undefined,\n                initialized: true\n            };\n\n        case LIB_INIT_ERROR:\n            return {\n                ...state,\n                initError: action.error,\n                initialized: false\n            };\n\n        default:\n            return state;\n        }\n    });\n","// Re-export JitsiMeetJS from the library lib-jitsi-meet to (the other features\n// of) the project jitsi-meet.\nimport JitsiMeetJS from './_';\nexport { JitsiMeetJS as default };\n\n// XXX Re-export the properties exported by JitsiMeetJS in order to prevent\n// undefined imported JitsiMeetJS. It may be caused by import cycles but I have\n// not confirmed the theory.\nexport const analytics = JitsiMeetJS.analytics;\nexport const browser = JitsiMeetJS.util.browser;\nexport const JitsiConferenceErrors = JitsiMeetJS.errors.conference;\nexport const JitsiConferenceEvents = JitsiMeetJS.events.conference;\nexport const JitsiConnectionErrors = JitsiMeetJS.errors.connection;\nexport const JitsiConnectionEvents = JitsiMeetJS.events.connection;\nexport const JitsiConnectionQualityEvents\n    = JitsiMeetJS.events.connectionQuality;\nexport const JitsiDetectionEvents = JitsiMeetJS.events.detection;\nexport const JitsiE2ePingEvents = JitsiMeetJS.events.e2eping;\nexport const JitsiMediaDevicesEvents = JitsiMeetJS.events.mediaDevices;\nexport const JitsiParticipantConnectionStatus\n    = JitsiMeetJS.constants.participantConnectionStatus;\nexport const JitsiRecordingConstants = JitsiMeetJS.constants.recording;\nexport const JitsiSIPVideoGWStatus = JitsiMeetJS.constants.sipVideoGW;\nexport const JitsiTrackErrors = JitsiMeetJS.errors.track;\nexport const JitsiTrackEvents = JitsiMeetJS.events.track;\n\nexport * from './actions';\nexport * from './actionTypes';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","function _getPrototypeOf(o) {\n  module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","function _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}","function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nexport default function _typeof(obj) {\n  if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return _typeof2(obj);\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n    };\n  }\n\n  return _typeof(obj);\n}","import _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _typeof from '@babel/runtime/helpers/esm/typeof';\n\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nfunction defaults(obj) {\n  each.call(slice.call(arguments, 1), function (source) {\n    if (source) {\n      for (var prop in source) {\n        if (obj[prop] === undefined) obj[prop] = source[prop];\n      }\n    }\n  });\n  return obj;\n}\n\nfunction addQueryString(url, params) {\n  if (params && _typeof(params) === 'object') {\n    var queryString = '',\n        e = encodeURIComponent; // Must encode data\n\n    for (var paramName in params) {\n      queryString += '&' + e(paramName) + '=' + e(params[paramName]);\n    }\n\n    if (!queryString) {\n      return url;\n    }\n\n    url = url + (url.indexOf('?') !== -1 ? '&' : '?') + queryString.slice(1);\n  }\n\n  return url;\n} // https://gist.github.com/Xeoncross/7663273\n\n\nfunction ajax(url, options, callback, data, cache) {\n  if (data && _typeof(data) === 'object') {\n    if (!cache) {\n      data['_t'] = new Date();\n    } // URL encoded form data must be in querystring format\n\n\n    data = addQueryString('', data).slice(1);\n  }\n\n  if (options.queryStringParams) {\n    url = addQueryString(url, options.queryStringParams);\n  }\n\n  try {\n    var x;\n\n    if (XMLHttpRequest) {\n      x = new XMLHttpRequest();\n    } else {\n      x = new ActiveXObject('MSXML2.XMLHTTP.3.0');\n    }\n\n    x.open(data ? 'POST' : 'GET', url, 1);\n\n    if (!options.crossDomain) {\n      x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n    }\n\n    x.withCredentials = !!options.withCredentials;\n\n    if (data) {\n      x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n    }\n\n    if (x.overrideMimeType) {\n      x.overrideMimeType(\"application/json\");\n    }\n\n    var h = options.customHeaders;\n\n    if (h) {\n      for (var i in h) {\n        x.setRequestHeader(i, h[i]);\n      }\n    }\n\n    x.onreadystatechange = function () {\n      x.readyState > 3 && callback && callback(x.responseText, x);\n    };\n\n    x.send(data);\n  } catch (e) {\n    console && console.log(e);\n  }\n}\n\nfunction getDefaults() {\n  return {\n    loadPath: '/locales/{{lng}}/{{ns}}.json',\n    addPath: '/locales/add/{{lng}}/{{ns}}',\n    allowMultiLoading: false,\n    parse: JSON.parse,\n    crossDomain: false,\n    ajax: ajax\n  };\n}\n\nvar Backend =\n/*#__PURE__*/\nfunction () {\n  function Backend(services) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Backend);\n\n    this.init(services, options);\n    this.type = 'backend';\n  }\n\n  _createClass(Backend, [{\n    key: \"init\",\n    value: function init(services) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      this.services = services;\n      this.options = defaults(options, this.options || {}, getDefaults());\n    }\n  }, {\n    key: \"readMulti\",\n    value: function readMulti(languages, namespaces, callback) {\n      var loadPath = this.options.loadPath;\n\n      if (typeof this.options.loadPath === 'function') {\n        loadPath = this.options.loadPath(languages, namespaces);\n      }\n\n      var url = this.services.interpolator.interpolate(loadPath, {\n        lng: languages.join('+'),\n        ns: namespaces.join('+')\n      });\n      this.loadUrl(url, callback);\n    }\n  }, {\n    key: \"read\",\n    value: function read(language, namespace, callback) {\n      var loadPath = this.options.loadPath;\n\n      if (typeof this.options.loadPath === 'function') {\n        loadPath = this.options.loadPath([language], [namespace]);\n      }\n\n      var url = this.services.interpolator.interpolate(loadPath, {\n        lng: language,\n        ns: namespace\n      });\n      this.loadUrl(url, callback);\n    }\n  }, {\n    key: \"loadUrl\",\n    value: function loadUrl(url, callback) {\n      var _this = this;\n\n      this.options.ajax(url, this.options, function (data, xhr) {\n        if (xhr.status >= 500 && xhr.status < 600) return callback('failed loading ' + url, true\n        /* retry */\n        );\n        if (xhr.status >= 400 && xhr.status < 500) return callback('failed loading ' + url, false\n        /* no retry */\n        );\n        var ret, err;\n\n        try {\n          ret = _this.options.parse(data, url);\n        } catch (e) {\n          err = 'failed parsing ' + url + ' to json';\n        }\n\n        if (err) return callback(err, false);\n        callback(null, ret);\n      });\n    }\n  }, {\n    key: \"create\",\n    value: function create(languages, namespace, key, fallbackValue) {\n      var _this2 = this;\n\n      if (typeof languages === 'string') languages = [languages];\n      var payload = {};\n      payload[key] = fallbackValue || '';\n      languages.forEach(function (lng) {\n        var url = _this2.services.interpolator.interpolate(_this2.options.addPath, {\n          lng: lng,\n          ns: namespace\n        });\n\n        _this2.options.ajax(url, _this2.options, function (data, xhr) {//const statusCode = xhr.status.toString();\n          // TODO: if statusCode === 4xx do log\n        }, payload);\n      });\n    }\n  }]);\n\n  return Backend;\n}();\n\nBackend.type = 'backend';\n\nexport default Backend;\n","export default function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}","/* @flow */\n\ndeclare var config: Object;\n\n/**\n * Custom language detection, just returns the config property if any.\n */\nexport default {\n    /**\n     * Does not support caching.\n     *\n     * @returns {void}\n     */\n    cacheUserLanguage: Function.prototype,\n\n    /**\n     * Looks the language up in the config.\n     *\n     * @returns {string} The default language if any.\n     */\n    lookup() {\n        return config.defaultLanguage;\n    },\n\n    /**\n     * Name of the language detector.\n     */\n    name: 'configLanguageDetector'\n};\n","/* @flow */\n\nimport BrowserLanguageDetector from 'i18next-browser-languagedetector';\n\nimport configLanguageDetector from './configLanguageDetector';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The ordered list (by name) of language detectors to be utilized as backends\n * by the singleton language detector for Web.\n *\n * @type {Array<string>}\n */\nconst order = [\n    'querystring',\n    'localStorage',\n    configLanguageDetector.name\n];\n\n// Allow i18next to detect the system language reported by the Web browser\n// itself.\ninterfaceConfig.LANG_DETECTION && order.push('navigator');\n\n/**\n * The singleton language detector for Web.\n */\nconst languageDetector\n    = new BrowserLanguageDetector(\n        /* services */ null,\n        /* options */ {\n            caches: [ 'localStorage' ],\n            lookupLocalStorage: 'language',\n            lookupQuerystring: 'lang',\n            order\n        });\n\n// Add the language detector which looks the language up in the config. Its\n// order has already been established above.\nlanguageDetector.addDetector(configLanguageDetector);\n\nexport default languageDetector;\n","// @flow\n\nimport i18next from 'i18next';\nimport I18nextXHRBackend from 'i18next-xhr-backend';\n\nimport COUNTRIES_RESOURCES from 'i18n-iso-countries/langs/en.json';\nimport LANGUAGES_RESOURCES from '../../../../lang/languages.json';\nimport MAIN_RESOURCES from '../../../../lang/main.json';\n\nimport languageDetector from './languageDetector';\n\n/**\n * The available/supported languages.\n *\n * XXX The element at index zero is the default language.\n *\n * @public\n * @type {Array<string>}\n */\nexport const LANGUAGES: Array<string> = Object.keys(LANGUAGES_RESOURCES);\n\n/**\n * The default language.\n *\n * XXX The element at index zero of {@link LANGUAGES} is the default language.\n *\n * @public\n * @type {string} The default language.\n */\nexport const DEFAULT_LANGUAGE = LANGUAGES[0];\n\n/**\n * The options to initialize i18next with.\n *\n * @type {Object}\n */\nconst options = {\n    backend: {\n        loadPath: 'lang/{{ns}}-{{lng}}.json'\n    },\n    defaultNS: 'main',\n    fallbackLng: DEFAULT_LANGUAGE,\n    interpolation: {\n        escapeValue: false // not needed for react as it escapes by default\n    },\n    load: 'languageOnly',\n    ns: [ 'main', 'languages', 'countries' ],\n    react: {\n        useSuspense: false\n    },\n    returnEmptyString: false,\n    returnNull: false,\n\n    // XXX i18next modifies the array lngWhitelist so make sure to clone\n    // LANGUAGES.\n    whitelist: LANGUAGES.slice()\n};\n\ni18next\n    .use(navigator.product === 'ReactNative' ? {} : I18nextXHRBackend)\n    .use(languageDetector)\n    .init(options);\n\n// Add default language which is preloaded from the source code.\ni18next.addResourceBundle(\n    DEFAULT_LANGUAGE,\n    'countries',\n    COUNTRIES_RESOURCES,\n    /* deep */ true,\n    /* overwrite */ true);\ni18next.addResourceBundle(\n    DEFAULT_LANGUAGE,\n    'languages',\n    LANGUAGES_RESOURCES,\n    /* deep */ true,\n    /* overwrite */ true);\ni18next.addResourceBundle(\n    DEFAULT_LANGUAGE,\n    'main',\n    MAIN_RESOURCES,\n    /* deep */ true,\n    /* overwrite */ true);\n\n// Add builtin languages.\n// XXX: Note we are using require here, because we want the side-effects of the\n// import, but imports can only be placed at the top, and it would be too early,\n// since i18next is not yet initialized at that point.\nrequire('./BuiltinLanguages');\n\nexport default i18next;\n","// @flow\n\nimport moment from 'moment';\n\nimport i18next from './i18next';\n\n// allows for moment durations to be formatted\nimport 'moment-duration-format';\n\n// MomentJS uses static language bundle loading, so in order to support dynamic\n// language selection in the app we need to load all bundles that we support in\n// the app.\nrequire('moment/locale/bg');\nrequire('moment/locale/de');\nrequire('moment/locale/eo');\nrequire('moment/locale/es');\nrequire('moment/locale/fr');\nrequire('moment/locale/hy-am');\nrequire('moment/locale/it');\nrequire('moment/locale/nb');\n\n// OC is not available. Please submit OC translation to the MomentJS project.\n\nrequire('moment/locale/pl');\nrequire('moment/locale/pt');\nrequire('moment/locale/pt-br');\nrequire('moment/locale/ru');\nrequire('moment/locale/sk');\nrequire('moment/locale/sl');\nrequire('moment/locale/sv');\nrequire('moment/locale/tr');\nrequire('moment/locale/zh-cn');\n\n/**\n * Returns a localized date formatter initialized with a specific {@code Date}\n * or timestamp ({@code number}).\n *\n * @private\n * @param {Date | number} dateOrTimeStamp - The date or unix timestamp (ms)\n * to format.\n * @returns {Object}\n */\nexport function getLocalizedDateFormatter(dateOrTimeStamp: Date | number) {\n    return moment(dateOrTimeStamp).locale(_getSupportedLocale());\n}\n\n/**\n * Returns a localized duration formatter initialized with a\n * specific duration ({@code number}).\n *\n * @private\n * @param {number} duration - The duration (ms)\n * to format.\n * @returns {Object}\n */\nexport function getLocalizedDurationFormatter(duration: number) {\n    // FIXME The flow-type definition of moment is v2.3 while our package.json\n    // states v2.19 so maybe locale on moment's duration was introduced in\n    // between?\n    //\n\n    // If the conference is under an hour long we want to display it without\n    // showing the hour and we want to include the hour if the conference is\n    // more than an hour long\n\n    if (moment.duration(duration).format('h') !== '0') {\n        return moment.duration(duration).format('h:mm:ss');\n    }\n\n    return moment.duration(duration).format('mm:ss', { trim: false });\n}\n\n/**\n * A lenient locale matcher to match language and dialect if possible.\n *\n * @private\n * @returns {string}\n */\nfunction _getSupportedLocale() {\n    const i18nLocale = i18next.language;\n    let supportedLocale;\n\n    if (i18nLocale) {\n        const localeRegexp = new RegExp('^([a-z]{2,2})(-)*([a-z]{2,2})*$');\n        const localeResult = localeRegexp.exec(i18nLocale.toLowerCase());\n\n        if (localeResult) {\n            const currentLocaleRegexp\n                = new RegExp(\n                    `^${localeResult[1]}(-)*${`(${localeResult[3]})*` || ''}`);\n\n            supportedLocale\n\n                // FIXME The flow-type definition of moment is v2.3 while our\n                // package.json states v2.19 so maybe locales on moment was\n                // introduced in between?\n                = moment.locales().find(lang => currentLocaleRegexp.exec(lang));\n        }\n    }\n\n    return supportedLocale || 'en';\n}\n","export * from './dateUtil';\nexport * from './functions';\n\n// TODO Eventually (e.g. when the non-React Web app is rewritten into React), it\n// should not be necessary to export i18next.\nexport { default as i18next, DEFAULT_LANGUAGE, LANGUAGES } from './i18next';\n","// @flow\n\n/**\n * Create an action for when dominant speaker changes.\n *\n * {\n *     type: DOMINANT_SPEAKER_CHANGED,\n *     participant: {\n *         id: string\n *     }\n * }\n */\nexport const DOMINANT_SPEAKER_CHANGED = 'DOMINANT_SPEAKER_CHANGED';\n\n/**\n * Create an action for removing a participant from the conference.\n *\n * {\n *     type: KICK_PARTICIPANT,\n *     id: string\n * }\n */\nexport const KICK_PARTICIPANT = 'KICK_PARTICIPANT';\n\n/**\n * Create an action for muting a remote participant.\n *\n * {\n *     type: MUTE_REMOTE_PARTICIPANT,\n *     id: string\n * }\n */\nexport const MUTE_REMOTE_PARTICIPANT = 'MUTE_REMOTE_PARTICIPANT';\n\n/**\n * Create an action for when the local participant's display name is updated.\n *\n * {\n *     type: PARTICIPANT_DISPLAY_NAME_CHANGED,\n *     id: string,\n *     name: string\n * }\n */\nexport const PARTICIPANT_DISPLAY_NAME_CHANGED\n    = 'PARTICIPANT_DISPLAY_NAME_CHANGED';\n\n/**\n * Action to signal that ID of participant has changed. This happens when\n * local participant joins a new conference or quits one.\n *\n * {\n *     type: PARTICIPANT_ID_CHANGED,\n *     conference: JitsiConference\n *     newValue: string,\n *     oldValue: string\n * }\n */\nexport const PARTICIPANT_ID_CHANGED = 'PARTICIPANT_ID_CHANGED';\n\n/**\n * Action to signal that participant role has changed. e.\n *\n * {\n *     type: PARTICIPANT_ROLE_CHANGED,\n *     participant: {\n *         id: string\n *     }\n *     role: string\n * }\n */\nexport const PARTICIPANT_ROLE_CHANGED = 'PARTICIPANT_ROLE_CHANGED';\n\n/**\n * Action to signal that a participant has joined.\n *\n * {\n *     type: PARTICIPANT_JOINED,\n *     participant: Participant\n * }\n */\nexport const PARTICIPANT_JOINED = 'PARTICIPANT_JOINED';\n\n/**\n * Action to signal that a participant has been removed from a conference by\n * another participant.\n *\n * {\n *     type: PARTICIPANT_KICKED,\n *     kicked: Object,\n *     kicker: Object\n * }\n */\nexport const PARTICIPANT_KICKED = 'PARTICIPANT_KICKED';\n\n/**\n * Action to handle case when participant lefts.\n *\n * {\n *     type: PARTICIPANT_LEFT,\n *     participant: {\n *         id: string\n *     }\n * }\n */\nexport const PARTICIPANT_LEFT = 'PARTICIPANT_LEFT';\n\n/**\n * Action to handle case when info about participant changes.\n *\n * {\n *     type: PARTICIPANT_UPDATED,\n *     participant: Participant\n * }\n */\nexport const PARTICIPANT_UPDATED = 'PARTICIPANT_UPDATED';\n\n/**\n * The type of the Redux action which pins a conference participant.\n *\n * {\n *     type: PIN_PARTICIPANT,\n *     participant: {\n *         id: string\n *     }\n * }\n */\nexport const PIN_PARTICIPANT = 'PIN_PARTICIPANT';\n\n/**\n * Action to signal that a hidden participant has joined.\n *\n * {\n *     type: HIDDEN_PARTICIPANT_JOINED,\n *     participant: Participant\n * }\n */\nexport const HIDDEN_PARTICIPANT_JOINED = 'HIDDEN_PARTICIPANT_JOINED';\n\n/**\n * Action to handle case when hidden participant leaves.\n *\n * {\n *     type: PARTICIPANT_LEFT,\n *     participant: {\n *         id: string\n *     }\n * }\n */\nexport const HIDDEN_PARTICIPANT_LEFT = 'HIDDEN_PARTICIPANT_LEFT';\n\n/**\n * The type of Redux action which notifies the app that the loadable avatar URL has changed.\n *\n * {\n *     type: SET_LOADABLE_AVATAR_URL,\n *     participant: {\n *         id: string,\n           loadableAvatarUrl: string\n *     }\n * }\n */\nexport const SET_LOADABLE_AVATAR_URL = 'SET_LOADABLE_AVATAR_URL';\n\n","import { set } from '../redux';\nimport { NOTIFICATION_TIMEOUT, showNotification } from '../../notifications';\n\nimport {\n    DOMINANT_SPEAKER_CHANGED,\n    HIDDEN_PARTICIPANT_JOINED,\n    HIDDEN_PARTICIPANT_LEFT,\n    KICK_PARTICIPANT,\n    MUTE_REMOTE_PARTICIPANT,\n    PARTICIPANT_ID_CHANGED,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_KICKED,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_UPDATED,\n    PIN_PARTICIPANT,\n    SET_LOADABLE_AVATAR_URL\n} from './actionTypes';\nimport {\n    getLocalParticipant,\n    getNormalizedDisplayName,\n    getParticipantDisplayName\n} from './functions';\n\n/**\n * Create an action for when dominant speaker changes.\n *\n * @param {string} id - Participant's ID.\n * @param {JitsiConference} conference - The {@code JitsiConference} associated\n * with the participant identified by the specified {@code id}. Only the local\n * participant is allowed to not specify an associated {@code JitsiConference}\n * instance.\n * @returns {{\n *     type: DOMINANT_SPEAKER_CHANGED,\n *     participant: {\n *         conference: JitsiConference,\n *         id: string\n *     }\n * }}\n */\nexport function dominantSpeakerChanged(id, conference) {\n    return {\n        type: DOMINANT_SPEAKER_CHANGED,\n        participant: {\n            conference,\n            id\n        }\n    };\n}\n\n/**\n * Create an action for removing a participant from the conference.\n *\n * @param {string} id - Participant's ID.\n * @returns {{\n *     type: KICK_PARTICIPANT,\n *     id: string\n * }}\n */\nexport function kickParticipant(id) {\n    return {\n        type: KICK_PARTICIPANT,\n        id\n    };\n}\n\n/**\n * Creates an action to signal the connection status of the local participant\n * has changed.\n *\n * @param {string} connectionStatus - The current connection status of the local\n * participant, as enumerated by the library's participantConnectionStatus\n * constants.\n * @returns {Function}\n */\nexport function localParticipantConnectionStatusChanged(connectionStatus) {\n    return (dispatch, getState) => {\n        const participant = getLocalParticipant(getState);\n\n        if (participant) {\n            return dispatch(participantConnectionStatusChanged(\n                participant.id,\n                connectionStatus));\n        }\n    };\n}\n\n/**\n * Action to signal that the ID of local participant has changed. It happens\n * when the local participant joins a new conference or leaves an existing\n * conference.\n *\n * @param {string} id - New ID for local participant.\n * @returns {Function}\n */\nexport function localParticipantIdChanged(id) {\n    return (dispatch, getState) => {\n        const participant = getLocalParticipant(getState);\n\n        if (participant) {\n            return dispatch({\n                type: PARTICIPANT_ID_CHANGED,\n\n                // XXX A participant is identified by an id-conference pair.\n                // Only the local participant is with an undefined conference.\n                conference: undefined,\n                newValue: id,\n                oldValue: participant.id\n            });\n        }\n    };\n}\n\n/**\n * Action to signal that a local participant has joined.\n *\n * @param {Participant} participant={} - Information about participant.\n * @returns {{\n *     type: PARTICIPANT_JOINED,\n *     participant: Participant\n * }}\n */\nexport function localParticipantJoined(participant = {}) {\n    return participantJoined(set(participant, 'local', true));\n}\n\n/**\n * Action to remove a local participant.\n *\n * @returns {Function}\n */\nexport function localParticipantLeft() {\n    return (dispatch, getState) => {\n        const participant = getLocalParticipant(getState);\n\n        if (participant) {\n            return (\n                dispatch(\n                    participantLeft(\n                        participant.id,\n\n                        // XXX Only the local participant is allowed to leave\n                        // without stating the JitsiConference instance because\n                        // the local participant is uniquely identified by the\n                        // very fact that there is only one local participant\n                        // (and the fact that the local participant \"joins\" at\n                        // the beginning of the app and \"leaves\" at the end of\n                        // the app).\n                        undefined)));\n        }\n    };\n}\n\n/**\n * Action to signal the role of the local participant has changed. It can happen\n * when the participant has joined a conference, even before a non-default local\n * id has been set, or after a moderator leaves.\n *\n * @param {string} role - The new role of the local participant.\n * @returns {Function}\n */\nexport function localParticipantRoleChanged(role) {\n    return (dispatch, getState) => {\n        const participant = getLocalParticipant(getState);\n\n        if (participant) {\n            return dispatch(participantRoleChanged(participant.id, role));\n        }\n    };\n}\n\n/**\n * Create an action for muting another participant in the conference.\n *\n * @param {string} id - Participant's ID.\n * @returns {{\n *     type: MUTE_REMOTE_PARTICIPANT,\n *     id: string\n * }}\n */\nexport function muteRemoteParticipant(id) {\n    return {\n        type: MUTE_REMOTE_PARTICIPANT,\n        id\n    };\n}\n\n/**\n * Action to update a participant's connection status.\n *\n * @param {string} id - Participant's ID.\n * @param {string} connectionStatus - The new connection status of the\n * participant.\n * @returns {{\n *     type: PARTICIPANT_UPDATED,\n *     participant: {\n *         connectionStatus: string,\n *         id: string\n *     }\n * }}\n */\nexport function participantConnectionStatusChanged(id, connectionStatus) {\n    return {\n        type: PARTICIPANT_UPDATED,\n        participant: {\n            connectionStatus,\n            id\n        }\n    };\n}\n\n/**\n * Action to signal that a participant has joined.\n *\n * @param {Participant} participant - Information about participant.\n * @returns {{\n *     type: PARTICIPANT_JOINED,\n *     participant: Participant\n * }}\n */\nexport function participantJoined(participant) {\n    // Only the local participant is not identified with an id-conference pair.\n    if (participant.local) {\n        return {\n            type: PARTICIPANT_JOINED,\n            participant\n        };\n    }\n\n    // In other words, a remote participant is identified with an id-conference\n    // pair.\n    const { conference } = participant;\n\n    if (!conference) {\n        throw Error(\n            'A remote participant must be associated with a JitsiConference!');\n    }\n\n    return (dispatch, getState) => {\n        // A remote participant is only expected to join in a joined or joining\n        // conference. The following check is really necessary because a\n        // JitsiConference may have moved into leaving but may still manage to\n        // sneak a PARTICIPANT_JOINED in if its leave is delayed for any purpose\n        // (which is not outragous given that leaving involves network\n        // requests.)\n        const stateFeaturesBaseConference\n            = getState()['features/base/conference'];\n\n        if (conference === stateFeaturesBaseConference.conference\n                || conference === stateFeaturesBaseConference.joining) {\n            return dispatch({\n                type: PARTICIPANT_JOINED,\n                participant\n            });\n        }\n    };\n}\n\n/**\n * Action to signal that a hidden participant has joined the conference.\n *\n * @param {string} id - The id of the participant.\n * @param {string} displayName - The display name, or undefined when\n * unknown.\n * @returns {{\n *     type: HIDDEN_PARTICIPANT_JOINED,\n *     displayName: string,\n *     id: string\n * }}\n */\nexport function hiddenParticipantJoined(id, displayName) {\n    return {\n        type: HIDDEN_PARTICIPANT_JOINED,\n        id,\n        displayName\n    };\n}\n\n/**\n * Action to signal that a hidden participant has left the conference.\n *\n * @param {string} id - The id of the participant.\n * @returns {{\n *     type: HIDDEN_PARTICIPANT_LEFT,\n *     id: string\n * }}\n */\nexport function hiddenParticipantLeft(id) {\n    return {\n        type: HIDDEN_PARTICIPANT_LEFT,\n        id\n    };\n}\n\n/**\n * Action to signal that a participant has left.\n *\n * @param {string} id - Participant's ID.\n * @param {JitsiConference} conference - The {@code JitsiConference} associated\n * with the participant identified by the specified {@code id}. Only the local\n * participant is allowed to not specify an associated {@code JitsiConference}\n * instance.\n * @returns {{\n *     type: PARTICIPANT_LEFT,\n *     participant: {\n *         conference: JitsiConference,\n *         id: string\n *     }\n * }}\n */\nexport function participantLeft(id, conference) {\n    return {\n        type: PARTICIPANT_LEFT,\n        participant: {\n            conference,\n            id\n        }\n    };\n}\n\n/**\n * Action to signal that a participant's presence status has changed.\n *\n * @param {string} id - Participant's ID.\n * @param {string} presence - Participant's new presence status.\n * @returns {{\n *     type: PARTICIPANT_UPDATED,\n *     participant: {\n *         id: string,\n *         presence: string\n *     }\n * }}\n */\nexport function participantPresenceChanged(id, presence) {\n    return participantUpdated({\n        id,\n        presence\n    });\n}\n\n/**\n * Action to signal that a participant's role has changed.\n *\n * @param {string} id - Participant's ID.\n * @param {PARTICIPANT_ROLE} role - Participant's new role.\n * @returns {{\n *     type: PARTICIPANT_UPDATED,\n *     participant: {\n *         id: string,\n *         role: PARTICIPANT_ROLE\n *     }\n * }}\n */\nexport function participantRoleChanged(id, role) {\n    return participantUpdated({\n        id,\n        role\n    });\n}\n\n/**\n * Action to signal that some of participant properties has been changed.\n *\n * @param {Participant} participant={} - Information about participant. To\n * identify the participant the object should contain either property id with\n * value the id of the participant or property local with value true (if the\n * local participant hasn't joined the conference yet).\n * @returns {{\n *     type: PARTICIPANT_UPDATED,\n *     participant: Participant\n * }}\n */\nexport function participantUpdated(participant = {}) {\n    const participantToUpdate = {\n        ...participant\n    };\n\n    if (participant.name) {\n        participantToUpdate.name = getNormalizedDisplayName(participant.name);\n    }\n\n    return {\n        type: PARTICIPANT_UPDATED,\n        participant: participantToUpdate\n    };\n}\n\n/**\n * Action to signal that a participant has muted us.\n *\n * @param {JitsiParticipant} participant - Information about participant.\n * @returns {Promise}\n */\nexport function participantMutedUs(participant) {\n    return (dispatch, getState) => {\n        if (!participant) {\n            return;\n        }\n\n        dispatch(showNotification({\n            descriptionKey: 'notify.mutedRemotelyDescription',\n            titleKey: 'notify.mutedRemotelyTitle',\n            titleArguments: {\n                participantDisplayName:\n                    getParticipantDisplayName(getState, participant.getId())\n            }\n        }));\n    };\n}\n\n/**\n * Action to signal that a participant had been kicked.\n *\n * @param {JitsiParticipant} kicker - Information about participant performing the kick.\n * @param {JitsiParticipant} kicked - Information about participant that was kicked.\n * @returns {Promise}\n */\nexport function participantKicked(kicker, kicked) {\n    return (dispatch, getState) => {\n\n        dispatch({\n            type: PARTICIPANT_KICKED,\n            kicked: kicked.getId(),\n            kicker: kicker.getId()\n        });\n\n        dispatch(showNotification({\n            titleArguments: {\n                kicked:\n                    getParticipantDisplayName(getState, kicked.getId()),\n                kicker:\n                    getParticipantDisplayName(getState, kicker.getId())\n            },\n            titleKey: 'notify.kickParticipant'\n        }, NOTIFICATION_TIMEOUT * 2)); // leave more time for this\n    };\n}\n\n/**\n * Create an action which pins a conference participant.\n *\n * @param {string|null} id - The ID of the conference participant to pin or null\n * if none of the conference's participants are to be pinned.\n * @returns {{\n *     type: PIN_PARTICIPANT,\n *     participant: {\n *         id: string\n *     }\n * }}\n */\nexport function pinParticipant(id) {\n    return {\n        type: PIN_PARTICIPANT,\n        participant: {\n            id\n        }\n    };\n}\n\n/**\n * Creates an action which notifies the app that the loadable URL of the avatar of a participant got updated.\n *\n * @param {string} participantId - The ID of the participant.\n * @param {string} url - The new URL.\n * @returns {{\n *     type: SET_LOADABLE_AVATAR_URL,\n *     participant: {\n *         id: string,\n *         loadableAvatarUrl: string\n *     }\n * }}\n*/\nexport function setLoadableAvatarUrl(participantId, url) {\n    return {\n        type: SET_LOADABLE_AVATAR_URL,\n        participant: {\n            id: participantId,\n            loadableAvatarUrl: url\n        }\n    };\n}\n","/**\n * The name of the bundled sound file which will be played when new participant\n * joins the conference.\n */\nexport const PARTICIPANT_JOINED_FILE = 'joined.wav';\n\n/**\n * The name of the bundled sound file which will be played when any participant\n * leaves the conference.\n */\nexport const PARTICIPANT_LEFT_FILE = 'left.wav';\n","// @flow\n\nimport UIEvents from '../../../../service/UI/UIEvents';\n\nimport { NOTIFICATION_TIMEOUT, showNotification } from '../../notifications';\nimport { CALLING, INVITED } from '../../presence-status';\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';\nimport {\n    CONFERENCE_WILL_JOIN,\n    forEachConference,\n    getCurrentConference\n} from '../conference';\nimport { JitsiConferenceEvents } from '../lib-jitsi-meet';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../redux';\nimport { playSound, registerSound, unregisterSound } from '../sounds';\n\nimport {\n    localParticipantIdChanged,\n    localParticipantJoined,\n    localParticipantLeft,\n    participantLeft,\n    participantUpdated,\n    setLoadableAvatarUrl\n} from './actions';\nimport {\n    DOMINANT_SPEAKER_CHANGED,\n    KICK_PARTICIPANT,\n    MUTE_REMOTE_PARTICIPANT,\n    PARTICIPANT_DISPLAY_NAME_CHANGED,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_UPDATED\n} from './actionTypes';\nimport {\n    LOCAL_PARTICIPANT_DEFAULT_ID,\n    PARTICIPANT_JOINED_SOUND_ID,\n    PARTICIPANT_LEFT_SOUND_ID\n} from './constants';\nimport {\n    getFirstLoadableAvatarUrl,\n    getLocalParticipant,\n    getParticipantById,\n    getParticipantCount,\n    getParticipantDisplayName\n} from './functions';\nimport { PARTICIPANT_JOINED_FILE, PARTICIPANT_LEFT_FILE } from './sounds';\n\ndeclare var APP: Object;\n\n/**\n * Middleware that captures CONFERENCE_JOINED and CONFERENCE_LEFT actions and\n * updates respectively ID of local participant.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        _registerSounds(store);\n\n        return _localParticipantJoined(store, next, action);\n\n    case APP_WILL_UNMOUNT:\n        _unregisterSounds(store);\n\n        return _localParticipantLeft(store, next, action);\n\n    case CONFERENCE_WILL_JOIN:\n        store.dispatch(localParticipantIdChanged(action.conference.myUserId()));\n        break;\n\n    case DOMINANT_SPEAKER_CHANGED: {\n        // Ensure the raised hand state is cleared for the dominant speaker.\n\n        const { conference, id } = action.participant;\n        const participant = getLocalParticipant(store.getState());\n\n        participant\n            && store.dispatch(participantUpdated({\n                conference,\n                id,\n                local: participant.id === id,\n                raisedHand: false\n            }));\n\n        break;\n    }\n\n    case KICK_PARTICIPANT: {\n        const { conference } = store.getState()['features/base/conference'];\n\n        conference.kickParticipant(action.id);\n        break;\n    }\n\n    case MUTE_REMOTE_PARTICIPANT: {\n        const { conference } = store.getState()['features/base/conference'];\n\n        conference.muteParticipant(action.id);\n        break;\n    }\n\n    // TODO Remove this middleware when the local display name update flow is\n    // fully brought into redux.\n    case PARTICIPANT_DISPLAY_NAME_CHANGED: {\n        if (typeof APP !== 'undefined') {\n            const participant = getLocalParticipant(store.getState());\n\n            if (participant && participant.id === action.id) {\n                APP.UI.emitEvent(UIEvents.NICKNAME_CHANGED, action.name);\n            }\n        }\n\n        break;\n    }\n\n    case PARTICIPANT_JOINED: {\n        _maybePlaySounds(store, action);\n\n        return _participantJoinedOrUpdated(store, next, action);\n    }\n\n    case PARTICIPANT_LEFT:\n        _maybePlaySounds(store, action);\n        break;\n\n    case PARTICIPANT_UPDATED:\n        return _participantJoinedOrUpdated(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Syncs the redux state features/base/participants up with the redux state\n * features/base/conference by ensuring that the former does not contain remote\n * participants no longer relevant to the latter. Introduced to address an issue\n * with multiplying thumbnails in the filmstrip.\n */\nStateListenerRegistry.register(\n    /* selector */ state => getCurrentConference(state),\n    /* listener */ (conference, { dispatch, getState }) => {\n        for (const p of getState()['features/base/participants']) {\n            !p.local\n                && (!conference || p.conference !== conference)\n                && dispatch(participantLeft(p.id, p.conference));\n        }\n    });\n\n/**\n * Reset the ID of the local participant to\n * {@link LOCAL_PARTICIPANT_DEFAULT_ID}. Such a reset is deemed possible only if\n * the local participant and, respectively, her ID is not involved in a\n * conference which is still of interest to the user and, consequently, the app.\n * For example, a conference which is in the process of leaving is no longer of\n * interest the user, is unrecoverable from the perspective of the user and,\n * consequently, the app.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/base/conference'],\n    /* listener */ ({ leaving }, { dispatch, getState }) => {\n        const state = getState();\n        const localParticipant = getLocalParticipant(state);\n        let id;\n\n        if (!localParticipant\n                || (id = localParticipant.id)\n                    === LOCAL_PARTICIPANT_DEFAULT_ID) {\n            // The ID of the local participant has been reset already.\n            return;\n        }\n\n        // The ID of the local may be reset only if it is not in use.\n        const dispatchLocalParticipantIdChanged\n            = forEachConference(\n                state,\n                conference =>\n                    conference === leaving || conference.myUserId() !== id);\n\n        dispatchLocalParticipantIdChanged\n            && dispatch(\n                localParticipantIdChanged(LOCAL_PARTICIPANT_DEFAULT_ID));\n    });\n\n/**\n * Registers listeners for participant change events.\n */\nStateListenerRegistry.register(\n    state => state['features/base/conference'].conference,\n    (conference, store) => {\n        if (conference) {\n            // We joined a conference\n            conference.on(\n                JitsiConferenceEvents.PARTICIPANT_PROPERTY_CHANGED,\n                (participant, propertyName, oldValue, newValue) => {\n                    switch (propertyName) {\n                    case 'e2eeEnabled':\n                        _e2eeUpdated(store, conference, participant.getId(), newValue);\n                        break;\n                    case 'features_e2ee':\n                        store.dispatch(participantUpdated({\n                            conference,\n                            id: participant.getId(),\n                            e2eeSupported: newValue\n                        }));\n                        break;\n                    case 'features_jigasi':\n                        store.dispatch(participantUpdated({\n                            conference,\n                            id: participant.getId(),\n                            isJigasi: newValue\n                        }));\n                        break;\n                    case 'features_screen-sharing':\n                        store.dispatch(participantUpdated({\n                            conference,\n                            id: participant.getId(),\n                            features: { 'screen-sharing': true }\n                        }));\n                        break;\n                    case 'raisedHand': {\n                        _raiseHandUpdated(store, conference, participant.getId(), newValue);\n                        break;\n                    }\n                    default:\n\n                        // Ignore for now.\n                    }\n\n                });\n        } else {\n            const localParticipantId = getLocalParticipant(store.getState).id;\n\n            // We left the conference, the local participant must be updated.\n            _e2eeUpdated(store, conference, localParticipantId, false);\n            _raiseHandUpdated(store, conference, localParticipantId, false);\n        }\n    }\n);\n\n/**\n * Handles a E2EE enabled status update.\n *\n * @param {Function} dispatch - The Redux dispatch function.\n * @param {Object} conference - The conference for which we got an update.\n * @param {string} participantId - The ID of the participant from which we got an update.\n * @param {boolean} newValue - The new value of the E2EE enabled     status.\n * @returns {void}\n */\nfunction _e2eeUpdated({ dispatch }, conference, participantId, newValue) {\n    const e2eeEnabled = newValue === 'true';\n\n    dispatch(participantUpdated({\n        conference,\n        id: participantId,\n        e2eeEnabled\n    }));\n}\n\n/**\n * Initializes the local participant and signals that it joined.\n *\n * @private\n * @param {Store} store - The redux store.\n * @param {Dispatch} next - The redux dispatch function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The redux action which is being dispatched\n * in the specified store.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _localParticipantJoined({ getState, dispatch }, next, action) {\n    const result = next(action);\n\n    const settings = getState()['features/base/settings'];\n\n    dispatch(localParticipantJoined({\n        avatarID: settings.avatarID,\n        avatarURL: settings.avatarURL,\n        email: settings.email,\n        name: settings.displayName\n    }));\n\n    return result;\n}\n\n/**\n * Signals that the local participant has left.\n *\n * @param {Store} store - The redux store.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} into the specified {@code store}.\n * @param {Action} action - The redux action which is being dispatched in the\n * specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _localParticipantLeft({ dispatch }, next, action) {\n    const result = next(action);\n\n    dispatch(localParticipantLeft());\n\n    return result;\n}\n\n/**\n * Plays sounds when participants join/leave conference.\n *\n * @param {Store} store - The redux store.\n * @param {Action} action - The redux action. Should be either\n * {@link PARTICIPANT_JOINED} or {@link PARTICIPANT_LEFT}.\n * @private\n * @returns {void}\n */\nfunction _maybePlaySounds({ getState, dispatch }, action) {\n    const state = getState();\n    const { startAudioMuted } = state['features/base/config'];\n\n    // We're not playing sounds for local participant\n    // nor when the user is joining past the \"startAudioMuted\" limit.\n    // The intention there was to not play user joined notification in big\n    // conferences where 100th person is joining.\n    if (!action.participant.local\n            && (!startAudioMuted\n                || getParticipantCount(state) < startAudioMuted)) {\n        if (action.type === PARTICIPANT_JOINED) {\n            const { presence } = action.participant;\n\n            // The sounds for the poltergeist are handled by features/invite.\n            if (presence !== INVITED && presence !== CALLING) {\n                dispatch(playSound(PARTICIPANT_JOINED_SOUND_ID));\n            }\n        } else if (action.type === PARTICIPANT_LEFT) {\n            dispatch(playSound(PARTICIPANT_LEFT_SOUND_ID));\n        }\n    }\n}\n\n/**\n * Notifies the feature base/participants that the action\n * {@code PARTICIPANT_JOINED} or {@code PARTICIPANT_UPDATED} is being dispatched\n * within a specific redux store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} in the specified {@code store}.\n * @param {Action} action - The redux action {@code PARTICIPANT_JOINED} or\n * {@code PARTICIPANT_UPDATED} which is being dispatched in the specified\n * {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _participantJoinedOrUpdated({ dispatch, getState }, next, action) {\n    const { participant: { avatarURL, e2eeEnabled, email, id, local, name, raisedHand } } = action;\n\n    // Send an external update of the local participant's raised hand state\n    // if a new raised hand state is defined in the action.\n    if (typeof raisedHand !== 'undefined') {\n        if (local) {\n            const { conference } = getState()['features/base/conference'];\n\n            conference\n                && conference.setLocalParticipantProperty(\n                    'raisedHand',\n                    raisedHand);\n        }\n    }\n\n    // Send an external update of the local participant's E2EE enabled state\n    // if a new state is defined in the action.\n    if (typeof e2eeEnabled !== 'undefined') {\n        if (local) {\n            const { conference } = getState()['features/base/conference'];\n\n            conference && conference.setLocalParticipantProperty('e2eeEnabled', e2eeEnabled);\n        }\n    }\n\n    // Allow the redux update to go through and compare the old avatar\n    // to the new avatar and emit out change events if necessary.\n    const result = next(action);\n\n    const { disableThirdPartyRequests } = getState()['features/base/config'];\n\n    if (!disableThirdPartyRequests && (avatarURL || email || id || name)) {\n        const participantId = !id && local ? getLocalParticipant(getState()).id : id;\n        const updatedParticipant = getParticipantById(getState(), participantId);\n\n        getFirstLoadableAvatarUrl(updatedParticipant)\n            .then(url => {\n                dispatch(setLoadableAvatarUrl(participantId, url));\n            });\n    }\n\n    // Notify external listeners of potential avatarURL changes.\n    if (typeof APP === 'object') {\n        const currentKnownId = local ? APP.conference.getMyUserId() : id;\n\n        // Force update of local video getting a new id.\n        APP.UI.refreshAvatarDisplay(currentKnownId);\n    }\n\n    return result;\n}\n\n/**\n * Handles a raise hand status update.\n *\n * @param {Function} dispatch - The Redux dispatch function.\n * @param {Object} conference - The conference for which we got an update.\n * @param {string} participantId - The ID of the participant from which we got an update.\n * @param {boolean} newValue - The new value of the raise hand status.\n * @returns {void}\n */\nfunction _raiseHandUpdated({ dispatch, getState }, conference, participantId, newValue) {\n    const raisedHand = newValue === 'true';\n\n    dispatch(participantUpdated({\n        conference,\n        id: participantId,\n        raisedHand\n    }));\n\n    if (raisedHand) {\n        dispatch(showNotification({\n            titleArguments: {\n                name: getParticipantDisplayName(getState, participantId)\n            },\n            titleKey: 'notify.raisedHand'\n        }, NOTIFICATION_TIMEOUT));\n    }\n}\n\n/**\n * Registers sounds related with the participants feature.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _registerSounds({ dispatch }) {\n    dispatch(\n        registerSound(PARTICIPANT_JOINED_SOUND_ID, PARTICIPANT_JOINED_FILE));\n    dispatch(registerSound(PARTICIPANT_LEFT_SOUND_ID, PARTICIPANT_LEFT_FILE));\n}\n\n/**\n * Unregisters sounds related with the participants feature.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _unregisterSounds({ dispatch }) {\n    dispatch(unregisterSound(PARTICIPANT_JOINED_SOUND_ID));\n    dispatch(unregisterSound(PARTICIPANT_LEFT_SOUND_ID));\n}\n","// @flow\n\nimport { ReducerRegistry, set } from '../redux';\n\nimport {\n    DOMINANT_SPEAKER_CHANGED,\n    PARTICIPANT_ID_CHANGED,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_UPDATED,\n    PIN_PARTICIPANT,\n    SET_LOADABLE_AVATAR_URL\n} from './actionTypes';\nimport { LOCAL_PARTICIPANT_DEFAULT_ID, PARTICIPANT_ROLE } from './constants';\n\n/**\n * Participant object.\n * @typedef {Object} Participant\n * @property {string} id - Participant ID.\n * @property {string} name - Participant name.\n * @property {string} avatar - Path to participant avatar if any.\n * @property {string} role - Participant role.\n * @property {boolean} local - If true, participant is local.\n * @property {boolean} pinned - If true, participant is currently a\n * \"PINNED_ENDPOINT\".\n * @property {boolean} dominantSpeaker - If this participant is the dominant\n * speaker in the (associated) conference, {@code true}; otherwise,\n * {@code false}.\n * @property {string} email - Participant email.\n */\n\ndeclare var APP: Object;\n\n/**\n * The participant properties which cannot be updated through\n * {@link PARTICIPANT_UPDATED}. They either identify the participant or can only\n * be modified through property-dedicated actions.\n *\n * @type {string[]}\n */\nconst PARTICIPANT_PROPS_TO_OMIT_WHEN_UPDATE = [\n\n    // The following properties identify the participant:\n    'conference',\n    'id',\n    'local',\n\n    // The following properties can only be modified through property-dedicated\n    // actions:\n    'dominantSpeaker',\n    'pinned'\n];\n\n/**\n * Listen for actions which add, remove, or update the set of participants in\n * the conference.\n *\n * @param {Participant[]} state - List of participants to be modified.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @param {Participant} action.participant - Information about participant to be\n * added/removed/modified.\n * @returns {Participant[]}\n */\nReducerRegistry.register('features/base/participants', (state = [], action) => {\n    switch (action.type) {\n    case SET_LOADABLE_AVATAR_URL:\n    case DOMINANT_SPEAKER_CHANGED:\n    case PARTICIPANT_ID_CHANGED:\n    case PARTICIPANT_UPDATED:\n    case PIN_PARTICIPANT:\n        return state.map(p => _participant(p, action));\n\n    case PARTICIPANT_JOINED:\n        return [ ...state, _participantJoined(action) ];\n\n    case PARTICIPANT_LEFT: {\n        // XXX A remote participant is uniquely identified by their id in a\n        // specific JitsiConference instance. The local participant is uniquely\n        // identified by the very fact that there is only one local participant\n        // (and the fact that the local participant \"joins\" at the beginning of\n        // the app and \"leaves\" at the end of the app).\n        const { conference, id } = action.participant;\n\n        return state.filter(p =>\n            !(\n                p.id === id\n\n                    // XXX Do not allow collisions in the IDs of the local\n                    // participant and a remote participant cause the removal of\n                    // the local participant when the remote participant's\n                    // removal is requested.\n                    && p.conference === conference\n                    && (conference || p.local)));\n    }\n    }\n\n    return state;\n});\n\n/**\n * Reducer function for a single participant.\n *\n * @param {Participant|undefined} state - Participant to be modified.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @param {Participant} action.participant - Information about participant to be\n * added/modified.\n * @param {JitsiConference} action.conference - Conference instance.\n * @private\n * @returns {Participant}\n */\nfunction _participant(state: Object = {}, action) {\n    switch (action.type) {\n    case DOMINANT_SPEAKER_CHANGED:\n        // Only one dominant speaker is allowed.\n        return (\n            set(state, 'dominantSpeaker', state.id === action.participant.id));\n\n    case PARTICIPANT_ID_CHANGED: {\n        // A participant is identified by an id-conference pair. Only the local\n        // participant is with an undefined conference.\n        const { conference } = action;\n\n        if (state.id === action.oldValue\n                && state.conference === conference\n                && (conference || state.local)) {\n            return {\n                ...state,\n                id: action.newValue\n            };\n        }\n        break;\n    }\n\n    case SET_LOADABLE_AVATAR_URL:\n    case PARTICIPANT_UPDATED: {\n        const { participant } = action; // eslint-disable-line no-shadow\n        let { id } = participant;\n        const { local } = participant;\n\n        if (!id && local) {\n            id = LOCAL_PARTICIPANT_DEFAULT_ID;\n        }\n\n        if (state.id === id) {\n            const newState = { ...state };\n\n            for (const key in participant) {\n                if (participant.hasOwnProperty(key)\n                        && PARTICIPANT_PROPS_TO_OMIT_WHEN_UPDATE.indexOf(key)\n                            === -1) {\n                    newState[key] = participant[key];\n                }\n            }\n\n            return newState;\n        }\n        break;\n    }\n\n    case PIN_PARTICIPANT:\n        // Currently, only one pinned participant is allowed.\n        return set(state, 'pinned', state.id === action.participant.id);\n    }\n\n    return state;\n}\n\n/**\n * Reduces a specific redux action of type {@link PARTICIPANT_JOINED} in the\n * feature base/participants.\n *\n * @param {Action} action - The redux action of type {@code PARTICIPANT_JOINED}\n * to reduce.\n * @private\n * @returns {Object} The new participant derived from the payload of the\n * specified {@code action} to be added into the redux state of the feature\n * base/participants after the reduction of the specified\n * {@code action}.\n */\nfunction _participantJoined({ participant }) {\n    const {\n        avatarID,\n        avatarURL,\n        botType,\n        connectionStatus,\n        dominantSpeaker,\n        email,\n        isFakeParticipant,\n        isJigasi,\n        loadableAvatarUrl,\n        local,\n        name,\n        pinned,\n        presence,\n        role\n    } = participant;\n    let { conference, id } = participant;\n\n    if (local) {\n        // conference\n        //\n        // XXX The local participant is not identified in association with a\n        // JitsiConference because it is identified by the very fact that it is\n        // the local participant.\n        conference = undefined;\n\n        // id\n        id || (id = LOCAL_PARTICIPANT_DEFAULT_ID);\n    }\n\n    return {\n        avatarID,\n        avatarURL,\n        botType,\n        conference,\n        connectionStatus,\n        dominantSpeaker: dominantSpeaker || false,\n        email,\n        id,\n        isFakeParticipant,\n        isJigasi,\n        loadableAvatarUrl,\n        local: local || false,\n        name,\n        pinned: pinned || false,\n        presence,\n        role: role || PARTICIPANT_ROLE.NONE\n    };\n}\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './constants';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","import * as colors from './colors';\nimport themed from './utils/themed'; // Cards on a board\n\nexport var e100 = themed({\n  light: \"box-shadow: 0 1px 1px \".concat(colors.N50A, \", 0 0 1px 0 \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 1px 1px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Inline dialogs\n\nexport var e200 = themed({\n  light: \"box-shadow: 0 4px 8px -2px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 4px 8px -2px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Modals\n\nexport var e300 = themed({\n  light: \"box-shadow: 0 8px 16px -4px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 8px 16px -4px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Panels\n\nexport var e400 = themed({\n  light: \"box-shadow: 0 12px 24px -6px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 12px 24px -6px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Flag messages (notifications)\n\nexport var e500 = themed({\n  light: \"box-shadow: 0 20px 32px -8px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 20px 32px -8px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n});","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport { gridSize, fontSize } from './index';\n\nvar baseHeading = function baseHeading(size, lineHeight) {\n  return \"\\n  font-size: \".concat(size / fontSize(), \"em;\\n  font-style: inherit;\\n  line-height: \").concat(lineHeight / size, \";\\n\");\n};\n\nexport var h900 = function h900() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(35, 40), colors.heading, gridSize() * 6.5);\n};\nexport var h800 = function h800() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(29, 32), colors.heading, gridSize() * 5);\n};\nexport var h700 = function h700() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(24, 28), colors.heading, gridSize() * 5);\n};\nexport var h600 = function h600() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  margin-top: \", \"px;\\n\"], baseHeading(20, 24), colors.heading, gridSize() * 3.5);\n};\nexport var h500 = function h500() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.006em;\\n  margin-top: \", \"px;\\n\"], baseHeading(16, 20), colors.heading, gridSize() * 3);\n};\nexport var h400 = function h400() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.003em;\\n  margin-top: \", \"px;\\n\"], baseHeading(14, 16), colors.heading, gridSize() * 2);\n};\nexport var h300 = function h300() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n  text-transform: uppercase;\\n\"], baseHeading(12, 16), colors.heading, gridSize() * 2.5);\n};\nexport var h200 = function h200() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n\"], baseHeading(12, 16), colors.subtleHeading, gridSize() * 2);\n};\nexport var h100 = function h100() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 700;\\n  margin-top: \", \"px;\\n\"], baseHeading(11, 16), colors.subtleHeading, gridSize() * 2);\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport exenv from 'exenv';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_this), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider && exenv.canUseDOM) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nexport default (function (_ref) {\n  var children = _ref.children,\n      props = _ref.props,\n      theme = _ref.theme;\n  var appearance = _typeof(props) === 'object' ? 'default' : props;\n  var merged = _typeof(props) === 'object' ? _objectSpread({}, props) : {};\n  Object.keys(theme).forEach(function (key) {\n    if (!(key in merged)) {\n      merged[key] = theme[key]({\n        appearance: appearance\n      });\n    }\n  });\n  return children(merged);\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport * as colors from '../colors';\nimport { createTheme } from '../utils/createTheme';\n\nvar orTextColor = function orTextColor(preferred) {\n  return function (p) {\n    return p[preferred] || p.textColor;\n  };\n};\n\nvar Div = styled.div.withConfig({\n  displayName: \"Reset__Div\",\n  componentId: \"sc-15i6ali-0\"\n})([\"\\n  \", \";\\n\"], function (p) {\n  return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n\\n    a {\\n      color: \", \";\\n    }\\n    a:hover {\\n      color: \", \";\\n    }\\n    a:active {\\n      color: \", \";\\n    }\\n    a:focus {\\n      outline-color: \", \";\\n    }\\n    h1,\\n    h2,\\n    h3,\\n    h4,\\n    h5 {\\n      color: \", \";\\n    }\\n    h6 {\\n      color: \", \";\\n    }\\n    small {\\n      color: \", \";\\n    }\\n  \"], p.backgroundColor, p.textColor, orTextColor('linkColor'), orTextColor('linkColorHover'), orTextColor('linkColorActive'), orTextColor('linkColorOutline'), orTextColor('headingColor'), orTextColor('subtleHeadingColor'), orTextColor('subtleTextColor'));\n});\nexport var ResetTheme = createTheme(function () {\n  return {\n    backgroundColor: colors.N0,\n    linkColor: colors.B400,\n    linkColorHover: colors.B300,\n    linkColorActive: colors.B500,\n    linkColorOutline: colors.B100,\n    headingColor: colors.N800,\n    subtleHeadingColor: colors.N200,\n    subtleTextColor: colors.N200,\n    textColor: colors.N900\n  };\n});\nexport function Reset(props) {\n  return React.createElement(ResetTheme.Provider, {\n    value: props.theme\n  }, React.createElement(ResetTheme.Consumer, null, function (tokens) {\n    return React.createElement(Div, _extends({}, _objectSpread({}, tokens, {\n      mode: undefined\n    }), props), props.children);\n  }));\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React from 'react';\nimport Theme from './components/Theme'; // Pre-executes the theme and passes it as a prop to the supplied component.\n// This is useful for ensuring that the current theme is accessible as props\n// in styled-components.\n\nexport function withTheme(InnerComponent) {\n  return function ComponentWithTheme(props) {\n    return React.createElement(Theme.Consumer, null, function (tokens) {\n      return React.createElement(InnerComponent, _extends({}, props, {\n        theme: tokens\n      }));\n    });\n  };\n}","import * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\nexport * from './constants'; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","// @flow\n\nimport React from 'react';\n\nimport { styleTypeToObject } from '../../styles';\n\nimport { Container } from '../../react/base';\n\ntype Props = {\n\n    /**\n     * Class name for the web platform, if any.\n     */\n    className: string,\n\n    /**\n     * Color of the icon (if not provided by the style object).\n     */\n    color?: string,\n\n    /**\n     * Id prop (mainly for autotests).\n     */\n    id?: string,\n\n    /**\n     * Function to invoke on click.\n     */\n    onClick?: Function,\n\n    /**\n     * The size of the icon (if not provided by the style object).\n     */\n    size?: number | string,\n\n    /**\n     * The preloaded icon component to render.\n     */\n    src: Function,\n\n    /**\n     * Style object to be applied.\n     */\n    style?: Object\n};\n\nexport const DEFAULT_COLOR = navigator.product === 'ReactNative' ? 'white' : undefined;\nexport const DEFAULT_SIZE = navigator.product === 'ReactNative' ? 36 : 24;\n\n/**\n * Implements an Icon component that takes a loaded SVG file as prop and renders it as an icon.\n *\n * @param {Props} props - The props of the component.\n * @returns {Reactelement}\n */\nexport default function Icon(props: Props) {\n    const {\n        className,\n        color,\n        id,\n        onClick,\n        size,\n        src: IconComponent,\n        style\n    } = props;\n\n    const {\n        color: styleColor,\n        fontSize: styleSize,\n        ...restStyle\n    } = styleTypeToObject(style ?? {});\n    const calculatedColor = color ?? styleColor ?? DEFAULT_COLOR;\n    const calculatedSize = size ?? styleSize ?? DEFAULT_SIZE;\n\n    return (\n        <Container\n            className = { `jitsi-icon ${className}` }\n            onClick = { onClick }\n            style = { restStyle }>\n            <IconComponent\n                fill = { calculatedColor }\n                height = { calculatedSize }\n                id = { id }\n                width = { calculatedSize } />\n        </Container>\n    );\n}\n\nIcon.defaultProps = {\n    className: ''\n};\n","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M18.984 12.984h-6v6h-1.969v-6h-6v-1.969h6v-6h1.969v6h6v1.969z\"\n});\n\nvar SvgAdd = function SvgAdd(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref);\n};\n\nexport default SvgAdd;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  clipRule: \"evenodd\",\n  d: \"M8.07.248a.75.75 0 111.115 1.004L5.656 5.193a.75.75 0 01-1.115 0L1.068 1.252A.75.75 0 012.182.248L5.1 3.571 8.07.248z\"\n});\n\nvar SvgArrowDown = function SvgArrowDown(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 10 6\",\n    fill: \"none\"\n  }), _ref);\n};\n\nexport default SvgArrowDown;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M18.688 4.313c5.375 1.188 9.313 6 9.313 11.688s-3.938 10.5-9.313 11.688v-2.75c3.875-1.125 6.625-4.688 6.625-8.938s-2.75-7.813-6.625-8.938v-2.75zM22 16a5.936 5.936 0 01-3.313 5.375v-10.75c2 1 3.313 3 3.313 5.375zM4 12h5.313l6.688-6.688v21.375l-6.688-6.688H4v-8z\"\n});\n\nvar SvgVolume = function SvgVolume(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgVolume;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  fill: \"#a4b8d1\",\n  d: \"M14.667 12a2.667 2.667 0 11-5.334 0 2.667 2.667 0 015.334 0zM22.667 12a2.667 2.667 0 11-5.334 0 2.667 2.667 0 015.334 0zM14.667 20a2.667 2.667 0 11-5.334 0 2.667 2.667 0 015.334 0zM13.333 26.667a1.333 1.333 0 11-2.667 0 1.333 1.333 0 012.667 0zM21.333 26.667a1.333 1.333 0 11-2.667 0 1.333 1.333 0 012.667 0zM6.667 20A1.333 1.333 0 114 20a1.333 1.333 0 012.667 0zM6.667 12A1.333 1.333 0 114 12a1.333 1.333 0 012.667 0zM28 20a1.333 1.333 0 11-2.667 0A1.333 1.333 0 0128 20zM28 12a1.333 1.333 0 11-2.667 0A1.333 1.333 0 0128 12zM13.333 5.333a1.333 1.333 0 11-2.667 0 1.333 1.333 0 012.667 0zM21.333 5.333a1.333 1.333 0 11-2.667 0 1.333 1.333 0 012.667 0zM22.667 20a2.667 2.667 0 11-5.334 0 2.667 2.667 0 015.334 0z\"\n});\n\nvar SvgBlurBackground = function SvgBlurBackground(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgBlurBackground;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M22.688 14l5.313-5.313v14.625l-5.313-5.313v4.688c0 .75-.625 1.313-1.375 1.313h-16C4.563 24 4 23.437 4 22.687V9.312c0-.75.563-1.313 1.313-1.313h16c.75 0 1.375.563 1.375 1.313V14z\"\n});\n\nvar SvgCamera = function SvgCamera(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgCamera;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M4.375 2.688L28 26.313l-1.688 1.688-4.25-4.25c-.188.125-.5.25-.75.25h-16c-.75 0-1.313-.563-1.313-1.313V9.313c0-.75.563-1.313 1.313-1.313h1L2.687 4.375zm23.625 6v14.25L13.062 8h8.25c.75 0 1.375.563 1.375 1.313v4.688z\"\n});\n\nvar SvgCameraDisabled = function SvgCameraDisabled(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgCameraDisabled;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M17.016 15.609L13.407 12l3.609-3.609-1.406-1.406-3.609 3.609-3.609-3.609-1.406 1.406L10.595 12l-3.609 3.609 1.406 1.406 3.609-3.609 3.609 3.609zM12 2.016q4.125 0 7.055 2.93t2.93 7.055-2.93 7.055T12 21.986t-7.055-2.93-2.93-7.055 2.93-7.055T12 2.016z\"\n});\n\nvar SvgCancel = function SvgCancel(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref);\n};\n\nexport default SvgCancel;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M26.688 21.313v-16H5.313v18.688l2.688-2.688h18.688zm0-18.625a2.64 2.64 0 012.625 2.625v16c0 1.438-1.188 2.688-2.625 2.688H8l-5.313 5.313v-24a2.64 2.64 0 012.625-2.625h21.375z\"\n});\n\nvar SvgChat = function SvgChat(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgChat;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M9 16.172L19.594 5.578 21 6.984l-12 12-5.578-5.578L4.828 12z\"\n});\n\nvar SvgCheck = function SvgCheck(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref);\n};\n\nexport default SvgCheck;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M18.984 6.422L13.406 12l5.578 5.578-1.406 1.406L12 13.406l-5.578 5.578-1.406-1.406L10.594 12 5.016 6.422l1.406-1.406L12 10.594l5.578-5.578z\"\n});\n\nvar SvgClose = function SvgClose(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref);\n};\n\nexport default SvgClose;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M18 11.016V9.985a.96.96 0 00-.984-.984h-3c-.563 0-1.031.422-1.031.984v4.031c0 .563.469.984 1.031.984h3a.96.96 0 00.984-.984v-1.031h-1.5v.516h-2.016v-3H16.5v.516H18zm-6.984 0V9.985c0-.563-.469-.984-1.031-.984h-3a.96.96 0 00-.984.984v4.031a.96.96 0 00.984.984h3c.563 0 1.031-.422 1.031-.984v-1.031h-1.5v.516H7.5v-3h2.016v.516h1.5zm7.968-7.032C20.062 3.984 21 4.922 21 6v12c0 1.078-.938 2.016-2.016 2.016H5.015c-1.125 0-2.016-.938-2.016-2.016V6c0-1.078.891-2.016 2.016-2.016h13.969z\"\n});\n\nvar SvgClosedCaption = function SvgClosedCaption(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref);\n};\n\nexport default SvgClosedCaption;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M28 0a4 4 0 014 4v24a4 4 0 01-8 0V4a4 4 0 014-4zM16 8a4 4 0 014 4v16a4 4 0 01-8 0V12a4 4 0 014-4zM4 20a4 4 0 014 4v4a4 4 0 01-8 0v-4a4 4 0 014-4z\"\n});\n\nvar SvgGsmBars = function SvgGsmBars(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgGsmBars;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M7.75 13c-.01-.35.15-.69.42-.92.75.16 1.45.47 2.08.92 0 .68-.56 1.24-1.25 1.24S7.76 13.69 7.75 13zm6 0c.63-.44 1.33-.75 2.08-.91.27.23.43.57.42.91 0 .7-.56 1.26-1.25 1.26s-1.25-.56-1.25-1.26zM12 9c-2.77-.04-5.5.65-7.93 2L4 12c0 1.23.29 2.44.84 3.54a47.642 47.642 0 0114.32 0c.55-1.1.84-2.31.84-3.54l-.07-1A15.849 15.849 0 0012 9zm0-7c5.523 0 10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2z\"\n});\n\nvar SvgNinja = function SvgNinja(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref);\n};\n\nexport default SvgNinja;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  clipRule: \"evenodd\",\n  d: \"M4 4a2 2 0 012-2h8a2 2 0 012 2H6v14a2 2 0 01-2-2V4zm6 4v12h8V8h-8zm0-2h8a2 2 0 012 2v12a2 2 0 01-2 2h-8a2 2 0 01-2-2V8a2 2 0 012-2z\",\n  fill: \"#5E6D7A\"\n});\n\nvar SvgCopy = function SvgCopy(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _ref);\n};\n\nexport default SvgCopy;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M26 10c1.109 0 2 .891 2 2s-.891 2-2 2v6c0 1.094-.906 2-2 2-2.781-2.312-7.266-5.484-12.688-5.938-1.859.625-2.5 2.797-1.281 4.047-1.094 1.797.313 3.063 1.969 4.359-.969 1.906-5 1.937-6.438.609-.906-2.781-2.25-5.563-1.156-9.078H2.5a2.507 2.507 0 01-2.5-2.5v-3c0-1.375 1.125-2.5 2.5-2.5H10c6 0 11-3.5 14-6 1.094 0 2 .906 2 2v6zm-2 9.437V4.531c-4.078 3.125-8.031 4.922-12 5.359v4.219c3.969.438 7.922 2.203 12 5.328z\"\n});\n\nvar SvgDominantSpeaker = function SvgDominantSpeaker(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 28 28\"\n  }), _ref);\n};\n\nexport default SvgDominantSpeaker;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  clipRule: \"evenodd\",\n  d: \"M11 13.37V5a1 1 0 112 0v8.467l2.631-2.924a1 1 0 011.487 1.338l-5.012 5.568a.085.085 0 01-.126 0L6.97 11.881a1 1 0 111.487-1.338L11 13.371zM20 15a1 1 0 112 0v6a1 1 0 01-1 1H3a1 1 0 01-1-1v-6a1 1 0 112 0v5h16v-5z\",\n  fill: \"#A4B8D1\"\n});\n\nvar SvgDownload = function SvgDownload(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _ref);\n};\n\nexport default SvgDownload;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  clipRule: \"evenodd\",\n  d: \"M3.75 7.5h10.5V15H3.75V7.5zM14.25 6h-1.5v-.75a3.75 3.75 0 10-7.5 0V6h-1.5a1.5 1.5 0 00-1.5 1.5V15a1.5 1.5 0 001.5 1.5h10.5a1.5 1.5 0 001.5-1.5V7.5a1.5 1.5 0 00-1.5-1.5zm-4.524 5.813a1.5 1.5 0 10-1.452 0A.751.751 0 008.25 12v.75a.75.75 0 001.5 0V12a.751.751 0 00-.024-.187zM9 3a2.25 2.25 0 012.25 2.25V6h-4.5v-.75A2.25 2.25 0 019 3z\",\n  fill: \"#fff\"\n});\n\nvar SvgE2Ee = function SvgE2Ee(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 18 18\",\n    fill: \"none\"\n  }), _ref);\n};\n\nexport default SvgE2Ee;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  clipRule: \"evenodd\",\n  d: \"M1.333 8a6.667 6.667 0 1013.334 0A6.667 6.667 0 001.333 8zm12 0A5.333 5.333 0 112.667 8a5.333 5.333 0 0110.666 0zm-6-3.333a.667.667 0 011.334 0V8a.667.667 0 01-1.334 0V4.667zM8 10a.667.667 0 100 1.333A.667.667 0 008 10z\",\n  fill: \"#fff\"\n});\n\nvar SvgExclamation = function SvgExclamation(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 16 16\",\n    fill: \"none\"\n  }), _ref);\n};\n\nexport default SvgExclamation;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  clipRule: \"evenodd\",\n  d: \"M8 14.667A6.667 6.667 0 118 1.333a6.667 6.667 0 010 13.334zm-.667-10a.667.667 0 111.334 0V8a.667.667 0 11-1.334 0V4.667zM8 10a.667.667 0 100 1.333A.667.667 0 008 10z\"\n});\n\nvar SvgExclamationSolid = function SvgExclamationSolid(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 16 16\"\n  }), _ref);\n};\n\nexport default SvgExclamationSolid;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M21.313 10.688h4v2.625h-6.625V6.688h2.625v4zm-2.625 14.625v-6.625h6.625v2.625h-4v4h-2.625zm-8-14.625v-4h2.625v6.625H6.688v-2.625h4zm-4 10.625v-2.625h6.625v6.625h-2.625v-4h-4z\"\n});\n\nvar SvgExitFullScreen = function SvgExitFullScreen(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgExitFullScreen;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M1.333 28h5.333V12H1.333v16zm29.334-14.667c0-1.467-1.2-2.667-2.667-2.667h-8.413l1.267-6.093.04-.427c0-.547-.227-1.053-.587-1.413l-1.413-1.4-8.773 8.787A2.61 2.61 0 009.334 12v13.333c0 1.467 1.2 2.667 2.667 2.667h12a2.648 2.648 0 002.453-1.627l4.027-9.4c.12-.307.187-.627.187-.973v-2.547l-.013-.013.013-.107z\"\n});\n\nvar SvgFeedback = function SvgFeedback(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgFeedback;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M18.688 6.688h6.625v6.625h-2.625v-4h-4V6.688zm4 16v-4h2.625v6.625h-6.625v-2.625h4zm-16-9.375V6.688h6.625v2.625h-4v4H6.688zm2.625 5.375v4h4v2.625H6.688v-6.625h2.625z\"\n});\n\nvar SvgFullScreen = function SvgFullScreen(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgFullScreen;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M16 12c-2.125 0-4.188.313-6.125.938v4.125c0 .5-.313 1.063-.75 1.25a13.87 13.87 0 00-3.563 2.438c-.25.25-.563.375-.938.375s-.688-.125-.938-.375L.373 17.438c-.25-.25-.375-.563-.375-.938s.125-.688.375-.938c4.063-3.875 9.563-6.25 15.625-6.25s11.563 2.375 15.625 6.25c.25.25.375.563.375.938s-.125.688-.375.938l-3.313 3.313c-.25.25-.563.375-.938.375s-.688-.125-.938-.375a13.87 13.87 0 00-3.563-2.438c-.438-.188-.75-.625-.75-1.188V13c-1.938-.625-4-1-6.125-1z\"\n});\n\nvar SvgHangup = function SvgHangup(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgHangup;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 0h24v24H0z\"\n});\n\nvar _ref2 =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z\"\n});\n\nvar SvgHelp = function SvgHelp(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref, _ref2);\n};\n\nexport default SvgHelp;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M16 2.667C8.64 2.667 2.667 8.64 2.667 16S8.64 29.333 16 29.333 29.333 23.36 29.333 16 23.36 2.667 16 2.667zm1.333 20h-2.667v-8h2.667v8zm0-10.667h-2.667V9.333h2.667V12z\"\n});\n\nvar SvgInfo = function SvgInfo(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgInfo;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M18.984 12.984h-6v6h-1.969v-6h-6v-1.969h6v-6h1.969v6h6v1.969z\"\n});\n\nvar SvgInvite = function SvgInvite(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref);\n};\n\nexport default SvgInvite;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M16 6.688l8.875 13.313H7.125zm-9.312 16h18.625v2.625H6.688v-2.625z\"\n});\n\nvar SvgKick = function SvgKick(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgKick;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M17.906 17.391A7.912 7.912 0 0020.015 12a7.983 7.983 0 00-5.016-7.406v.422c0 1.078-.938 1.969-2.016 1.969h-1.969v2.016c0 .563-.469.984-1.031.984H8.014v2.016h6a.96.96 0 01.984.984v3h.984c.891 0 1.641.609 1.922 1.406zm-6.89 2.531V18C9.938 18 9 17.062 9 15.984V15l-4.781-4.781A7.404 7.404 0 003.985 12c0 4.078 3.094 7.453 7.031 7.922zM12 2.016c5.531 0 9.984 4.453 9.984 9.984S17.531 21.984 12 21.984 2.016 17.531 2.016 12 6.469 2.016 12 2.016z\"\n});\n\nvar SvgPublic = function SvgPublic(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref);\n};\n\nexport default SvgPublic;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M22.125 11.438L24 13.313l-8 8-8-8 1.875-1.875L16 17.563z\"\n});\n\nvar SvgMenuDown = function SvgMenuDown(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgMenuDown;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M12 15.984c1.078 0 2.016.938 2.016 2.016s-.938 2.016-2.016 2.016S9.984 19.078 9.984 18s.938-2.016 2.016-2.016zm0-6c1.078 0 2.016.938 2.016 2.016s-.938 2.016-2.016 2.016S9.984 13.078 9.984 12 10.922 9.984 12 9.984zm0-1.968c-1.078 0-2.016-.938-2.016-2.016S10.922 3.984 12 3.984s2.016.938 2.016 2.016S13.078 8.016 12 8.016z\"\n});\n\nvar SvgThumbMenu = function SvgThumbMenu(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref);\n};\n\nexport default SvgThumbMenu;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M16 10.688l8 8-1.875 1.875L16 14.438l-6.125 6.125L8 18.688z\"\n});\n\nvar SvgMenuUp = function SvgMenuUp(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgMenuUp;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-2 12H6v-2h12v2zm0-3H6V9h12v2zm0-3H6V6h12v2z\"\n});\n\nvar _ref2 =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M0 0h24v24H0z\",\n  fill: \"none\"\n});\n\nvar SvgMessage = function SvgMessage(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref, _ref2);\n};\n\nexport default SvgMessage;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"rect\", {\n  width: 3,\n  height: 12,\n  rx: 1\n});\n\nvar _ref2 =\n/*#__PURE__*/\nReact.createElement(\"rect\", {\n  x: 5,\n  width: 3,\n  height: 12,\n  rx: 1\n});\n\nvar _ref3 =\n/*#__PURE__*/\nReact.createElement(\"rect\", {\n  x: 10,\n  width: 3,\n  height: 12,\n  rx: 1\n});\n\nvar _ref4 =\n/*#__PURE__*/\nReact.createElement(\"rect\", {\n  x: 15,\n  width: 3,\n  height: 12,\n  rx: 1\n});\n\nvar _ref5 =\n/*#__PURE__*/\nReact.createElement(\"rect\", {\n  x: 20,\n  width: 3,\n  height: 12,\n  rx: 1\n});\n\nvar _ref6 =\n/*#__PURE__*/\nReact.createElement(\"rect\", {\n  x: 25,\n  width: 3,\n  height: 12,\n  rx: 1\n});\n\nvar _ref7 =\n/*#__PURE__*/\nReact.createElement(\"rect\", {\n  x: 30,\n  width: 3,\n  height: 12,\n  rx: 1\n});\n\nvar _ref8 =\n/*#__PURE__*/\nReact.createElement(\"rect\", {\n  x: 35,\n  width: 3,\n  height: 12,\n  rx: 1\n});\n\nvar SvgMeter = function SvgMeter(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 38 12\",\n    fill: \"#5E6D7A\"\n  }), _ref, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8);\n};\n\nexport default SvgMeter;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M5.688 4l22.313 22.313-1.688 1.688-5.563-5.563c-1 .625-2.25 1-3.438 1.188v4.375h-2.625v-4.375c-4.375-.625-8-4.375-8-8.938h2.25c0 4 3.375 6.75 7.063 6.75 1.063 0 2.125-.25 3.063-.688l-2.188-2.188c-.25.063-.563.125-.875.125-2.188 0-4-1.813-4-4v-1l-8-8zM20 14.875l-8-7.938v-.25c0-2.188 1.813-4 4-4s4 1.813 4 4v8.188zm5.313-.187a8.824 8.824 0 01-1.188 4.375L22.5 17.375c.375-.813.563-1.688.563-2.688h2.25z\"\n});\n\nvar SvgMicDisabled = function SvgMicDisabled(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgMicDisabled;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M23.063 14.688h2.25c0 4.563-3.625 8.313-8 8.938v4.375h-2.625v-4.375c-4.375-.625-8-4.375-8-8.938h2.25c0 4 3.375 6.75 7.063 6.75s7.063-2.75 7.063-6.75zm-7.063 4c-2.188 0-4-1.813-4-4v-8c0-2.188 1.813-4 4-4s4 1.813 4 4v8c0 2.188-1.813 4-4 4z\"\n});\n\nvar SvgMicrophone = function SvgMicrophone(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgMicrophone;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  clipRule: \"evenodd\",\n  d: \"M16 6a4 4 0 00-8 0v6a4.002 4.002 0 003.008 3.876c-.005.04-.008.082-.008.124v1.917A6.002 6.002 0 016 12a1 1 0 10-2 0 8.001 8.001 0 007 7.938V21a1 1 0 102 0v-1.062A8.001 8.001 0 0020 12a1 1 0 10-2 0 6.002 6.002 0 01-5 5.917V16c0-.042-.003-.083-.008-.124A4.002 4.002 0 0016 12V6zm-4-2a2 2 0 00-2 2v6a2 2 0 104 0V6a2 2 0 00-2-2z\",\n  fill: \"#A4B8D1\"\n});\n\nvar SvgMicrophoneEmpty = function SvgMicrophoneEmpty(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _ref);\n};\n\nexport default SvgMicrophoneEmpty;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M16 20.563l5 3-1.313-5.688L24.125 14l-5.875-.5L16 8.125 13.75 13.5l-5.875.5 4.438 3.875L11 23.563zm13.313-8.25l-7.25 6.313 2.188 9.375-8.25-5-8.25 5 2.188-9.375-7.25-6.313 9.563-.813 3.75-8.813 3.75 8.813z\"\n});\n\nvar SvgStar = function SvgStar(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgStar;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"g\", {\n  clipPath: \"url(#mute-everyone_svg__clip0)\",\n  fillRule: \"evenodd\",\n  clipRule: \"evenodd\",\n  fill: \"#A4B8D1\"\n}, React.createElement(\"path\", {\n  d: \"M6 13.078V15c0 1.4.959 2.576 2.256 2.907A.756.756 0 008.25 18v1.438A4.501 4.501 0 014.5 15 .75.75 0 003 15c0 3.06 2.29 5.584 5.25 5.954v.796a.75.75 0 001.5 0v-.796a5.97 5.97 0 002.92-1.207l2.529 2.53a.762.762 0 101.078-1.078l-2.53-2.53.009-.01-1.073-1.073-.008.011-1.084-1.084.007-.012-1.141-1.141-.004.015L7.5 12.422v-.019l-1.5-1.5v.019L2.801 7.723a.762.762 0 10-1.078 1.078L6 13.078zm1.5 1.5V15a1.5 1.5 0 001.875 1.453L7.5 14.578zm3.013 3.013a2.984 2.984 0 01-.769.316c.004.03.006.061.006.093v1.438a4.476 4.476 0 001.847-.763l-1.084-1.084zM12 14.747l-1.5-1.5V10.5a1.5 1.5 0 00-2.982-.235l-1.17-1.17A3 3 0 0112 10.5v4.247zm1.362 1.362l1.184 1.184A5.983 5.983 0 0015 15a.75.75 0 00-1.5 0c0 .383-.048.754-.138 1.11zM16 4.719V6a2 2 0 001.504 1.938A.508.508 0 0017.5 8v.959A3 3 0 0115 6a.5.5 0 00-1 0 4 4 0 003.5 3.969v.531a.5.5 0 001 0v-.531a3.98 3.98 0 001.946-.804l1.686 1.686a.508.508 0 00.72-.719l-1.687-1.686.006-.007-.716-.715-.005.007-.723-.722.005-.008-.76-.761-.004.01L17 4.28V4.27l-1-1v.012L13.868 1.15a.508.508 0 10-.72.719L16 4.718zm1 1V6a1 1 0 001.25.969L17 5.719zm2.009 2.008c-.159.093-.33.164-.513.211.003.02.004.041.004.062v.959a2.984 2.984 0 001.232-.509l-.723-.723zM20 5.831l-1-1V3a1 1 0 00-1.988-.157l-.78-.78A2 2 0 0120 3v2.831zm.908.908l.79.79A3.99 3.99 0 0022 6a.5.5 0 00-1 0c0 .255-.032.503-.092.74z\"\n}));\n\nvar _ref2 =\n/*#__PURE__*/\nReact.createElement(\"defs\", null, React.createElement(\"clipPath\", {\n  id: \"mute-everyone_svg__clip0\"\n}, React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h24v24H0z\"\n})));\n\nvar SvgMuteEveryone = function SvgMuteEveryone(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _ref, _ref2);\n};\n\nexport default SvgMuteEveryone;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"g\", {\n  clipPath: \"url(#mute-everyone-else_svg__clip0)\",\n  fillRule: \"evenodd\",\n  clipRule: \"evenodd\",\n  fill: \"#fff\"\n}, React.createElement(\"path\", {\n  d: \"M6 13.078V15c0 1.4.959 2.576 2.256 2.907A.756.756 0 008.25 18v1.438A4.501 4.501 0 014.5 15 .75.75 0 003 15c0 3.06 2.29 5.584 5.25 5.954v.796a.75.75 0 001.5 0v-.796a5.97 5.97 0 002.92-1.207l2.529 2.53a.762.762 0 101.078-1.078l-2.53-2.53.009-.01-1.073-1.073-.008.011-1.084-1.084.007-.012-1.141-1.141-.004.015L7.5 12.422v-.019l-1.5-1.5v.019L2.801 7.723a.762.762 0 10-1.078 1.078L6 13.078zm1.5 1.5V15a1.5 1.5 0 001.875 1.453L7.5 14.578zm3.013 3.013a2.984 2.984 0 01-.769.316c.004.03.006.061.006.093v1.438a4.476 4.476 0 001.847-.763l-1.084-1.084zM12 14.747l-1.5-1.5V10.5a1.5 1.5 0 00-2.982-.235l-1.17-1.17A3 3 0 0112 10.5v4.247zm1.362 1.362l1.184 1.184A5.983 5.983 0 0015 15a.75.75 0 00-1.5 0c0 .383-.048.754-.138 1.11zM16 4.719V6a2 2 0 001.504 1.938A.508.508 0 0017.5 8v.959A3 3 0 0115 6a.5.5 0 00-1 0 4 4 0 003.5 3.969v.531a.5.5 0 001 0v-.531a3.98 3.98 0 001.946-.804l1.686 1.686a.508.508 0 00.72-.719l-1.687-1.686.006-.007-.716-.715-.005.007-.723-.722.005-.008-.76-.761-.004.01L17 4.28V4.27l-1-1v.012L13.868 1.15a.508.508 0 10-.72.719L16 4.718zm1 1V6a1 1 0 001.25.969L17 5.719zm2.009 2.008c-.159.093-.33.164-.513.211.003.02.004.041.004.062v.959a2.984 2.984 0 001.232-.509l-.723-.723zM20 5.831l-1-1V3a1 1 0 00-1.988-.157l-.78-.78A2 2 0 0120 3v2.831zm.908.908l.79.79A3.99 3.99 0 0022 6a.5.5 0 00-1 0c0 .255-.032.503-.092.74z\"\n}));\n\nvar _ref2 =\n/*#__PURE__*/\nReact.createElement(\"defs\", null, React.createElement(\"clipPath\", {\n  id: \"mute-everyone-else_svg__clip0\"\n}, React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h24v24H0z\"\n})));\n\nvar SvgMuteEveryoneElse = function SvgMuteEveryoneElse(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _ref, _ref2);\n};\n\nexport default SvgMuteEveryoneElse;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M14.016 3H21v6.984h-2.016V6.421l-9.797 9.797-1.406-1.406 9.797-9.797h-3.563V2.999zm4.968 15.984V12H21v6.984C21 20.062 20.062 21 18.984 21H5.015c-1.125 0-2.016-.938-2.016-2.016V5.015c0-1.078.891-2.016 2.016-2.016h6.984v2.016H5.015v13.969h13.969z\"\n});\n\nvar SvgOpenInNew = function SvgOpenInNew(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref);\n};\n\nexport default SvgOpenInNew;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M6.609 10.781a15.506 15.506 0 006.609 6.609l2.203-2.203c.281-.281.703-.375 1.031-.234 1.125.375 2.344.563 3.563.563a.96.96 0 01.984.984v3.516a.96.96 0 01-.984.984C10.64 21 2.999 13.359 2.999 3.984A.96.96 0 013.983 3h3.516a.96.96 0 01.984.984c0 1.266.188 2.438.563 3.563.094.328.047.75-.234 1.031z\"\n});\n\nvar SvgPhone = function SvgPhone(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref);\n};\n\nexport default SvgPhone;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M29.765.154H4.181C1.906.154.05 2.049.05 4.378v23.46c0 2.327 1.855 4.222 4.131 4.222h25.584c2.279 0 4.135-1.895 4.135-4.222V4.378c0-2.329-1.856-4.224-4.135-4.224zm-.192 27.482H4.381V4.579h25.188l.004 23.057z\"\n});\n\nvar _ref2 =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M21.43 8.921h6.778v17.711H21.43V8.921zM13.396 12.937h6.778v13.694h-6.778V12.937zM5.386 16.954h6.755v9.677H5.386v-9.677z\"\n});\n\nvar SvgPresentation = function SvgPresentation(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 34 32\"\n  }), _ref, _ref2);\n};\n\nexport default SvgPresentation;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M30.688 7.313v19.375c0 2.938-2.438 5.313-5.375 5.313h-9.688a5.391 5.391 0 01-3.813-1.563L1.312 19.75S3 18.125 3.062 18.125a1.7 1.7 0 011.063-.375c.313 0 .563.063.813.188.063 0 5.75 3.25 5.75 3.25V5.313c0-1.125.875-2 2-2s2 .875 2 2v9.375h1.313V2c0-1.125.875-2 2-2s2 .875 2 2v12.688h1.313V3.313c0-1.125.875-2 2-2s2 .875 2 2v11.375h1.375V7.313c0-1.125.875-2 2-2s2 .875 2 2z\"\n});\n\nvar SvgRaisedHand = function SvgRaisedHand(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgRaisedHand;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16-7.163 16-16 16zm2.167-13.556h-3.456v-1.851h3.261v-1.26h-3.261v-1.777h3.456v-1.361h-5.052v7.61h5.052v-1.361zM23.087 20c1.839 0 3.181-1.134 3.313-2.779h-1.554c-.153.838-.84 1.376-1.754 1.376-1.205 0-1.95-.997-1.95-2.6s.745-2.595 1.945-2.595c.909 0 1.601.575 1.754 1.45h1.554c-.116-1.656-1.501-2.853-3.308-2.853-2.214 0-3.578 1.524-3.578 3.997 0 2.479 1.369 4.003 3.578 4.003zM7.196 17.047h1.305l1.422 2.758h1.807l-1.607-3.006c.877-.348 1.385-1.192 1.385-2.162 0-1.514-1.03-2.442-2.706-2.442H5.6v7.61h1.596v-2.758zm0-3.565v2.341h1.4c.803 0 1.274-.432 1.274-1.165 0-.722-.497-1.176-1.289-1.176H7.196z\"\n});\n\nvar SvgRec = function SvgRec(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgRec;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M21.625 14.484L.875 26.015c-.484.266-.875.031-.875-.516v-23c0-.547.391-.781.875-.516l20.75 11.531c.484.266.484.703 0 .969z\"\n});\n\nvar SvgPlay = function SvgPlay(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 28\"\n  }), _ref);\n};\n\nexport default SvgPlay;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M86.393 240.214a35.91 35.91 0 01-24.798-23.613L30.25 120.118a35.825 35.825 0 01-1.75-11.644l-20.087 14.24c-8.974 6.361-11.11 18.908-4.749 27.883l58.67 82.758c3.886 5.482 10.081 8.412 16.359 8.412 2.605 0 5.225-.516 7.7-1.553zm-61.449-95.945l-7.358-3.539-1.558 1.096 4.103 5.83-3.385 2.381-10.227-14.536 3.384-2.381 4.004 5.691 1.149-.809-.809-7.939 4.193-2.951.126 9.75 10.491 4.512-4.113 2.895zM58.307 89.983c-10.462 3.4-16.24 14.74-12.841 25.203l31.346 96.477c2.738 8.428 10.629 13.814 19.064 13.814 2.035 0 4.104-.313 6.138-.975l-.114-.018c-12.504-5.467-21.262-17.873-21.262-32.555V90.487c0-2.809.491-5.541 1.087-8.166l-23.418 7.662zm8.196 26.305l-6.09-5.438-1.8.623 2.328 6.736-3.911 1.352-5.805-16.799 3.911-1.351 2.272 6.578 1.327-.459 1.42-7.854 4.846-1.674-2.577 9.402 8.832 7.24-4.753 1.644z\"\n});\n\nvar _ref2 =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M126.971 52.489v-.006h.16\"\n});\n\nvar _ref3 =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M96.638 90.487V191.93c0 10.637 8.167 18.961 18.641 19.5-3.04-2.836-5.514-6.213-7.462-10.035-4.372-8.582-5.106-18.334-2.141-27.459l31.368-96.678c.803-2.469 1.877-4.178 3.14-7.178h-23.667c-11 .001-19.879 9.407-19.879 20.407zm25.688 8.594h-5.029l-3.98-7h-2.678v7h-4v-18h4v7h2.178l3.906-7h5.127l-5.506 8.158 5.982 9.842z\"\n});\n\nvar _ref4 =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M152.282 82.405l-31.347 96.477c-3.385 10.416 2.332 21.697 12.707 25.15a36.192 36.192 0 01-3.504-10.512c-1.616-9.496.549-19.035 6.098-26.859l58.668-82.758a35.702 35.702 0 016.164-6.676l-23.584-7.664a19.862 19.862 0 00-6.138-.975c-8.435.001-16.326 5.39-19.064 13.817zm21.413 17.057l-3.896-1.434.241-3.592-5.258-1.934-2.132 2.896-3.896-1.434 11.521-14.699 4.159 1.529-.739 18.668z\"\n});\n\nvar _ref5 =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M170.277 91.142l.454-6.61-.067-.025-3.926 5.332zM289.75 126.628l-53.91-38.219a19.855 19.855 0 00-11.523-3.664c-6.277 0-12.473 2.93-16.359 8.412l-58.668 82.756c-6.362 8.975-4.226 21.521 4.748 27.883l53.909 38.219a19.848 19.848 0 0011.523 3.664c6.278 0 12.473-2.93 16.359-8.412l58.669-82.756c6.362-8.975 4.225-21.522-4.748-27.883zm-65.061-33.645l3.613 2.566-5.6 17.82-3.385-2.402 1.174-3.404-4.569-3.244-2.816 2.24-3.385-2.404 14.968-11.172zm16.607 44.454c19.68 48.484-4.809 61.852-16.494 58.135-6.671-2.121-9.644-6.627-10.697-11.742l-7.6 12.607-9.424-6.688 8.971-10.828c-5.023.539-10.114-1.301-14.191-6.729-7.363-9.806-2.826-37.334 49.435-34.755z\"\n});\n\nvar _ref6 =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M221.582 104.444l2.169-6.259-.06-.041-5.184 4.117z\"\n});\n\nvar SvgPoker = function SvgPoker(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 298.162 298.162\"\n  }), _ref, _ref2, _ref3, _ref4, _ref5, _ref6);\n};\n\nexport default SvgPoker;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M24 3v22c0 .547-.453 1-1 1H1c-.547 0-1-.453-1-1V3c0-.547.453-1 1-1h22c.547 0 1 .453 1 1z\"\n});\n\nvar SvgStop = function SvgStop(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 28\"\n  }), _ref);\n};\n\nexport default SvgStop;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z\"\n});\n\nvar _ref2 =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M0 0h24v24H0z\",\n  fill: \"none\"\n});\n\nvar SvgReply = function SvgReply(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref, _ref2);\n};\n\nexport default SvgReply;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M24 26.688V13.313H8v13.375h16zm0-16c1.438 0 2.688 1.188 2.688 2.625v13.375c0 1.438-1.25 2.625-2.688 2.625H8c-1.438 0-2.688-1.188-2.688-2.625V13.313c0-1.438 1.25-2.625 2.688-2.625h12.125V8c0-2.25-1.875-4.125-4.125-4.125S11.875 5.75 11.875 8H9.312c0-3.688 3-6.688 6.688-6.688s6.688 3 6.688 6.688v2.688h1.313zm-8 12c-1.438 0-2.688-1.25-2.688-2.688s1.25-2.688 2.688-2.688 2.688 1.25 2.688 2.688-1.25 2.688-2.688 2.688z\"\n});\n\nvar SvgSecurity = function SvgSecurity(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgSecurity;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M24 26.688V13.313H8v13.375h16zM11.875 8v2.688h8.25V8c0-2.25-1.875-4.125-4.125-4.125S11.875 5.75 11.875 8zM24 10.688c1.438 0 2.688 1.188 2.688 2.625v13.375c0 1.438-1.25 2.625-2.688 2.625H8c-1.438 0-2.688-1.188-2.688-2.625V13.313c0-1.438 1.25-2.625 2.688-2.625h1.313V8c0-3.688 3-6.688 6.688-6.688s6.688 3 6.688 6.688v2.688h1.313zm-8 12c-1.438 0-2.688-1.25-2.688-2.688s1.25-2.688 2.688-2.688 2.688 1.25 2.688 2.688-1.25 2.688-2.688 2.688z\"\n});\n\nvar SvgSecurityLocked = function SvgSecurityLocked(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgSecurityLocked;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M16 20.688c2.563 0 4.688-2.125 4.688-4.688S18.563 11.312 16 11.312 11.312 13.437 11.312 16s2.125 4.688 4.688 4.688zm9.938-3.375l2.813 2.188c.25.188.313.563.125.875l-2.688 4.625c-.188.313-.5.375-.813.25l-3.313-1.313c-.688.5-1.438 1-2.25 1.313l-.5 3.5c-.063.313-.313.563-.625.563h-5.375c-.313 0-.563-.25-.625-.563l-.5-3.5a8.148 8.148 0 01-2.25-1.313l-3.313 1.313c-.313.125-.625.063-.813-.25l-2.688-4.625c-.188-.313-.125-.688.125-.875l2.813-2.188c-.063-.438-.063-.875-.063-1.313s0-.875.063-1.313l-2.813-2.188c-.25-.188-.313-.563-.125-.875l2.688-4.625c.188-.313.5-.375.813-.25l3.313 1.313c.688-.5 1.438-1 2.25-1.313l.5-3.5c.063-.313.313-.563.625-.563h5.375c.313 0 .563.25.625.563l.5 3.5c.813.313 1.563.75 2.25 1.313l3.313-1.313c.313-.125.625-.063.813.25l2.688 4.625c.188.313.125.688-.125.875l-2.813 2.188c.063.438.063.875.063 1.313s0 .875-.063 1.313z\"\n});\n\nvar SvgSettings = function SvgSettings(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgSettings;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M28 22.688v-16H4v16h24zM28 4c1.438 0 2.688 1.25 2.688 2.688l-.063 16A2.64 2.64 0 0128 25.313h-6.688v2.688H10.687v-2.688H3.999c-1.438 0-2.688-1.188-2.688-2.625v-16C1.311 5.25 2.561 4 3.999 4h24z\"\n});\n\nvar SvgShareDesktop = function SvgShareDesktop(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgShareDesktop;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M17.313 12h7.375l-7.375-7.313V12zm4 6.688V16H10.688v2.688h10.625zm0 5.312v-2.688H10.688V24h10.625zM18.688 2.688l8 8v16c0 1.438-1.25 2.625-2.688 2.625H8c-1.438 0-2.688-1.188-2.688-2.625l.063-21.375A2.64 2.64 0 018 2.688h10.688z\"\n});\n\nvar SvgShareDoc = function SvgShareDoc(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgShareDoc;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M16 26.688c5.875 0 10.688-4.813 10.688-10.688S21.875 5.312 16 5.312 5.312 10.125 5.312 16 10.125 26.688 16 26.688zm0-24c7.375 0 13.313 5.938 13.313 13.313S23.375 29.314 16 29.314 2.687 23.376 2.687 16.001 8.625 2.688 16 2.688zM13.313 22V10l8 6z\"\n});\n\nvar SvgSharedVideo = function SvgSharedVideo(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgSharedVideo;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M2.667 0H8a2.667 2.667 0 012.667 2.667V8A2.667 2.667 0 018 10.667H2.667A2.667 2.667 0 010 8V2.667A2.667 2.667 0 012.667 0zM4 2.667c-.736 0-1.333.597-1.333 1.333v2.667C2.667 7.403 3.264 8 4 8h2.667C7.403 8 8 7.403 8 6.667V4c0-.736-.597-1.333-1.333-1.333H4zM2.667 13.333H8A2.667 2.667 0 0110.667 16v5.333A2.667 2.667 0 018 24H2.667A2.667 2.667 0 010 21.333V16a2.667 2.667 0 012.667-2.667zM4 16c-.736 0-1.333.597-1.333 1.333V20c0 .736.597 1.333 1.333 1.333h2.667C7.403 21.333 8 20.736 8 20v-2.667C8 16.597 7.403 16 6.667 16H4zM16 0h5.333A2.667 2.667 0 0124 2.667V8a2.667 2.667 0 01-2.667 2.667H16A2.667 2.667 0 0113.333 8V2.667A2.667 2.667 0 0116 0zm1.333 2.667C16.597 2.667 16 3.264 16 4v2.667C16 7.403 16.597 8 17.333 8H20c.736 0 1.333-.597 1.333-1.333V4c0-.736-.597-1.333-1.333-1.333h-2.667zM16 13.333h5.333A2.667 2.667 0 0124 16v5.333A2.667 2.667 0 0121.333 24H16a2.667 2.667 0 01-2.667-2.667V16A2.667 2.667 0 0116 13.333zM17.333 16c-.736 0-1.333.597-1.333 1.333V20c0 .736.597 1.333 1.333 1.333H20c.736 0 1.333-.597 1.333-1.333v-2.667c0-.736-.597-1.333-1.333-1.333h-2.667z\"\n});\n\nvar SvgTilesMany = function SvgTilesMany(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _ref);\n};\n\nexport default SvgTilesMany;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M22.667 16a6.667 6.667 0 11-13.334 0 6.667 6.667 0 0113.334 0z\"\n});\n\nvar _ref2 =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M16 24a8 8 0 000-16 8 8 0 000 16zm0 1.333a9.333 9.333 0 110-18.666 9.333 9.333 0 110 18.666z\"\n});\n\nvar SvgCameraTakePicture = function SvgCameraTakePicture(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref, _ref2);\n};\n\nexport default SvgCameraTakePicture;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16-7.163 16-16 16zM9.633 19.897h1.788l-2.74-7.891H6.74L4 19.897h1.657l.607-1.881h2.773l.596 1.881zm4.801-7.892h-1.652v5.168c0 1.75 1.285 2.926 3.303 2.926 2.023 0 3.309-1.176 3.309-2.926v-5.168h-1.652v4.998c0 .995-.596 1.63-1.657 1.63-1.055 0-1.652-.634-1.652-1.63v-4.998zM21.32 12v7.897h3.106c2.363 0 3.702-1.438 3.702-4.003 0-2.472-1.356-3.894-3.702-3.894H21.32zm1.651 1.411v5.075h1.192c1.46 0 2.28-.897 2.28-2.565 0-1.597-.848-2.51-2.28-2.51h-1.192zm-15.362.235l-.99 3.095h2.067l-.979-3.095h-.098z\"\n});\n\nvar SvgAud = function SvgAud(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgAud;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16-7.163 16-16 16zm-.958-12v-7.994h-1.696v3.224h-3.65v-3.224H8V20h1.696v-3.341h3.65V20h1.696zm1.966-8v8h3.19C22.624 20 24 18.543 24 15.945 24 13.441 22.607 12 20.198 12h-3.19zm1.696 1.429v5.141h1.224c1.499 0 2.342-.909 2.342-2.598 0-1.618-.87-2.543-2.342-2.543h-1.224z\"\n});\n\nvar SvgHd = function SvgHd(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgHd;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16-7.163 16-16 16zm-1.238-13.541h-3.511v-6.453H9.599v7.891h5.162v-1.438zM16.261 12v7.897h3.106c2.363 0 3.702-1.438 3.702-4.003 0-2.472-1.356-3.894-3.702-3.894h-3.106zm1.652 1.411v5.075h1.192c1.46 0 2.28-.897 2.28-2.565 0-1.597-.848-2.51-2.28-2.51h-1.192z\"\n});\n\nvar SvgLd = function SvgLd(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgLd;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  d: \"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16-7.163 16-16 16zM8.8 17.901c.06 1.471 1.28 2.395 3.161 2.395 1.98 0 3.199-.973 3.199-2.565 0-1.225-.684-1.909-2.27-2.242l-.952-.202c-.924-.197-1.302-.476-1.302-.963 0-.602.547-.984 1.373-.984.798 0 1.378.416 1.455 1.039h1.553C14.968 12.974 13.737 12 11.998 12c-1.821 0-3.019.979-3.019 2.466 0 1.203.705 1.952 2.144 2.253l1.028.219c.968.208 1.362.498 1.362 1.001 0 .596-.607 1.012-1.466 1.012-.93 0-1.575-.41-1.652-1.05H8.798zm7.919-5.704v7.897h3.106c2.363 0 3.702-1.438 3.702-4.003 0-2.472-1.356-3.894-3.702-3.894h-3.106zm1.651 1.411v5.075h1.192c1.46 0 2.28-.897 2.28-2.565 0-1.597-.848-2.51-2.28-2.51H18.37z\"\n});\n\nvar SvgSd = function SvgSd(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _ref);\n};\n\nexport default SvgSd;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\n\nvar _ref =\n/*#__PURE__*/\nReact.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  clipRule: \"evenodd\",\n  d: \"M11.18 3.683L6 8H3a1 1 0 00-1 1v6a1 1 0 001 1h3l5.18 4.317a.5.5 0 00.82-.384V4.068a.5.5 0 00-.82-.385zM4 10h2.724L10 7.27v9.46L6.724 14H4v-4zm10-2a4 4 0 010 8v-2a2 2 0 100-4V8zm0-4a8 8 0 110 16v-2a6 6 0 000-12V4z\",\n  fill: \"#A4B8D1\"\n});\n\nvar SvgVolumeEmpty = function SvgVolumeEmpty(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _ref);\n};\n\nexport default SvgVolumeEmpty;","// @flow\n\nexport * from './components';\nexport * from './svg';\n","var defineProperty = require(\"./defineProperty\");\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    var ownKeys = Object.keys(source);\n\n    if (typeof Object.getOwnPropertySymbols === 'function') {\n      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n      }));\n    }\n\n    ownKeys.forEach(function (key) {\n      defineProperty(target, key, source[key]);\n    });\n  }\n\n  return target;\n}\n\nmodule.exports = _objectSpread;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n    Symbol.for &&\n    Symbol.for('react.element')) ||\n    0xeac7;\n\n  var isValidElement = function(object) {\n    return typeof object === 'object' &&\n      object !== null &&\n      object.$$typeof === REACT_ELEMENT_TYPE;\n  };\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    createStartMutedConfigurationEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { getName } from '../../app';\nimport { endpointMessageReceived } from '../../subtitles';\n\nimport { JITSI_CONNECTION_CONFERENCE_KEY } from '../connection';\nimport { JitsiConferenceEvents } from '../lib-jitsi-meet';\nimport { setAudioMuted, setVideoMuted } from '../media';\nimport {\n    dominantSpeakerChanged,\n    getLocalParticipant,\n    getNormalizedDisplayName,\n    participantConnectionStatusChanged,\n    participantKicked,\n    participantMutedUs,\n    participantPresenceChanged,\n    participantRoleChanged,\n    participantUpdated\n} from '../participants';\nimport { getLocalTracks, trackAdded, trackRemoved } from '../tracks';\nimport {\n    getBackendSafeRoomName,\n    getJitsiMeetGlobalNS\n} from '../util';\n\nimport {\n    AUTH_STATUS_CHANGED,\n    CONFERENCE_FAILED,\n    CONFERENCE_JOINED,\n    CONFERENCE_LEFT,\n    CONFERENCE_SUBJECT_CHANGED,\n    CONFERENCE_TIMESTAMP_CHANGED,\n    CONFERENCE_WILL_JOIN,\n    CONFERENCE_WILL_LEAVE,\n    DATA_CHANNEL_OPENED,\n    KICKED_OUT,\n    LOCK_STATE_CHANGED,\n    P2P_STATUS_CHANGED,\n    SEND_TONES,\n    SET_DESKTOP_SHARING_ENABLED,\n    SET_FOLLOW_ME,\n    SET_MAX_RECEIVER_VIDEO_QUALITY,\n    SET_PASSWORD,\n    SET_PASSWORD_FAILED,\n    SET_PREFERRED_VIDEO_QUALITY,\n    SET_ROOM,\n    SET_PENDING_SUBJECT_CHANGE,\n    SET_START_MUTED_POLICY\n} from './actionTypes';\nimport {\n    AVATAR_ID_COMMAND,\n    AVATAR_URL_COMMAND,\n    EMAIL_COMMAND,\n    JITSI_CONFERENCE_URL_KEY\n} from './constants';\nimport {\n    _addLocalTracksToConference,\n    commonUserJoinedHandling,\n    commonUserLeftHandling,\n    getCurrentConference,\n    sendLocalParticipant\n} from './functions';\nimport logger from './logger';\n\ndeclare var APP: Object;\n\n/**\n * Adds conference (event) listeners.\n *\n * @param {JitsiConference} conference - The JitsiConference instance.\n * @param {Dispatch} dispatch - The Redux dispatch function.\n * @private\n * @returns {void}\n */\nfunction _addConferenceListeners(conference, dispatch) {\n    // A simple logger for conference errors received through\n    // the listener. These errors are not handled now, but logged.\n    conference.on(JitsiConferenceEvents.CONFERENCE_ERROR,\n        error => logger.error('Conference error.', error));\n\n    // Dispatches into features/base/conference follow:\n\n    conference.on(\n        JitsiConferenceEvents.CONFERENCE_FAILED,\n        (...args) => dispatch(conferenceFailed(conference, ...args)));\n    conference.on(\n        JitsiConferenceEvents.CONFERENCE_JOINED,\n        (...args) => dispatch(conferenceJoined(conference, ...args)));\n    conference.on(\n        JitsiConferenceEvents.CONFERENCE_LEFT,\n        (...args) => {\n            dispatch(conferenceTimestampChanged(0));\n            dispatch(conferenceLeft(conference, ...args));\n        });\n    conference.on(JitsiConferenceEvents.SUBJECT_CHANGED,\n        (...args) => dispatch(conferenceSubjectChanged(...args)));\n\n    conference.on(JitsiConferenceEvents.CONFERENCE_CREATED_TIMESTAMP,\n        (...args) => dispatch(conferenceTimestampChanged(...args)));\n\n    conference.on(\n        JitsiConferenceEvents.KICKED,\n        (...args) => dispatch(kickedOut(conference, ...args)));\n\n    conference.on(\n        JitsiConferenceEvents.PARTICIPANT_KICKED,\n        (kicker, kicked) => dispatch(participantKicked(kicker, kicked)));\n\n    conference.on(\n        JitsiConferenceEvents.LOCK_STATE_CHANGED,\n        (...args) => dispatch(lockStateChanged(conference, ...args)));\n\n    // Dispatches into features/base/media follow:\n\n    conference.on(\n        JitsiConferenceEvents.STARTED_MUTED,\n        () => {\n            const audioMuted = Boolean(conference.startAudioMuted);\n            const videoMuted = Boolean(conference.startVideoMuted);\n\n            sendAnalytics(createStartMutedConfigurationEvent(\n                'remote', audioMuted, videoMuted));\n            logger.log(`Start muted: ${audioMuted ? 'audio, ' : ''}${\n                videoMuted ? 'video' : ''}`);\n\n            // XXX Jicofo tells lib-jitsi-meet to start with audio and/or video\n            // muted i.e. Jicofo expresses an intent. Lib-jitsi-meet has turned\n            // Jicofo's intent into reality by actually muting the respective\n            // tracks. The reality is expressed in base/tracks already so what\n            // is left is to express Jicofo's intent in base/media.\n            // TODO Maybe the app needs to learn about Jicofo's intent and\n            // transfer that intent to lib-jitsi-meet instead of lib-jitsi-meet\n            // acting on Jicofo's intent without the app's knowledge.\n            dispatch(setAudioMuted(audioMuted));\n            dispatch(setVideoMuted(videoMuted));\n        });\n\n    // Dispatches into features/base/tracks follow:\n\n    conference.on(\n        JitsiConferenceEvents.TRACK_ADDED,\n        t => t && !t.isLocal() && dispatch(trackAdded(t)));\n    conference.on(\n        JitsiConferenceEvents.TRACK_REMOVED,\n        t => t && !t.isLocal() && dispatch(trackRemoved(t)));\n\n    conference.on(\n        JitsiConferenceEvents.TRACK_MUTE_CHANGED,\n        (_, participantThatMutedUs) => {\n            if (participantThatMutedUs) {\n                dispatch(participantMutedUs(participantThatMutedUs));\n            }\n        });\n\n    // Dispatches into features/base/participants follow:\n    conference.on(\n        JitsiConferenceEvents.DISPLAY_NAME_CHANGED,\n        (id, displayName) => dispatch(participantUpdated({\n            conference,\n            id,\n            name: getNormalizedDisplayName(displayName)\n        })));\n\n    conference.on(\n        JitsiConferenceEvents.DOMINANT_SPEAKER_CHANGED,\n        id => dispatch(dominantSpeakerChanged(id, conference)));\n\n    conference.on(\n        JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,\n        (...args) => dispatch(endpointMessageReceived(...args)));\n\n    conference.on(\n        JitsiConferenceEvents.PARTICIPANT_CONN_STATUS_CHANGED,\n        (...args) => dispatch(participantConnectionStatusChanged(...args)));\n\n    conference.on(\n        JitsiConferenceEvents.USER_JOINED,\n        (id, user) => commonUserJoinedHandling({ dispatch }, conference, user));\n    conference.on(\n        JitsiConferenceEvents.USER_LEFT,\n        (id, user) => commonUserLeftHandling({ dispatch }, conference, user));\n    conference.on(\n        JitsiConferenceEvents.USER_ROLE_CHANGED,\n        (...args) => dispatch(participantRoleChanged(...args)));\n    conference.on(\n        JitsiConferenceEvents.USER_STATUS_CHANGED,\n        (...args) => dispatch(participantPresenceChanged(...args)));\n\n    conference.on(\n        JitsiConferenceEvents.BOT_TYPE_CHANGED,\n        (id, botType) => dispatch(participantUpdated({\n            conference,\n            id,\n            botType\n        })));\n\n    conference.addCommandListener(\n        AVATAR_ID_COMMAND,\n        (data, id) => dispatch(participantUpdated({\n            conference,\n            id,\n            avatarID: data.value\n        })));\n    conference.addCommandListener(\n        AVATAR_URL_COMMAND,\n        (data, id) => dispatch(participantUpdated({\n            conference,\n            id,\n            avatarURL: data.value\n        })));\n    conference.addCommandListener(\n        EMAIL_COMMAND,\n        (data, id) => dispatch(participantUpdated({\n            conference,\n            id,\n            email: data.value\n        })));\n}\n\n/**\n * Updates the current known state of server-side authentication.\n *\n * @param {boolean} authEnabled - Whether or not server authentication is\n * enabled.\n * @param {string} authLogin - The current name of the logged in user, if any.\n * @returns {{\n *     type: AUTH_STATUS_CHANGED,\n *     authEnabled: boolean,\n *     authLogin: string\n * }}\n */\nexport function authStatusChanged(authEnabled: boolean, authLogin: string) {\n    return {\n        type: AUTH_STATUS_CHANGED,\n        authEnabled,\n        authLogin\n    };\n}\n\n/**\n * Signals that a specific conference has failed.\n *\n * @param {JitsiConference} conference - The JitsiConference that has failed.\n * @param {string} error - The error describing/detailing the cause of the\n * failure.\n * @returns {{\n *     type: CONFERENCE_FAILED,\n *     conference: JitsiConference,\n *     error: Error\n * }}\n * @public\n */\nexport function conferenceFailed(conference: Object, error: string) {\n    return {\n        type: CONFERENCE_FAILED,\n        conference,\n\n        // Make the error resemble an Error instance (to the extent that\n        // jitsi-meet needs it).\n        error: {\n            name: error,\n            recoverable: undefined\n        }\n    };\n}\n\n/**\n * Signals that a specific conference has been joined.\n *\n * @param {JitsiConference} conference - The JitsiConference instance which was\n * joined by the local participant.\n * @returns {{\n *     type: CONFERENCE_JOINED,\n *     conference: JitsiConference\n * }}\n */\nexport function conferenceJoined(conference: Object) {\n    return {\n        type: CONFERENCE_JOINED,\n        conference\n    };\n}\n\n/**\n * Signals that a specific conference has been left.\n *\n * @param {JitsiConference} conference - The JitsiConference instance which was\n * left by the local participant.\n * @returns {{\n *     type: CONFERENCE_LEFT,\n *     conference: JitsiConference\n * }}\n */\nexport function conferenceLeft(conference: Object) {\n    return {\n        type: CONFERENCE_LEFT,\n        conference\n    };\n}\n\n/**\n * Signals that the conference subject has been changed.\n *\n * @param {string} subject - The new subject.\n * @returns {{\n *     type: CONFERENCE_SUBJECT_CHANGED,\n *     subject: string\n * }}\n */\nexport function conferenceSubjectChanged(subject: string) {\n    return {\n        type: CONFERENCE_SUBJECT_CHANGED,\n        subject\n    };\n}\n\n/**\n* Signals that the conference timestamp has been changed.\n*\n* @param {number} conferenceTimestamp - The UTC timestamp.\n* @returns {{\n*       type: CONFERENCE_TIMESTAMP_CHANGED,\n*       conferenceTimestamp\n* }}\n*/\nexport function conferenceTimestampChanged(conferenceTimestamp: number) {\n    return {\n        type: CONFERENCE_TIMESTAMP_CHANGED,\n        conferenceTimestamp\n    };\n}\n\n/**\n * Adds any existing local tracks to a specific conference before the conference\n * is joined. Then signals the intention of the application to have the local\n * participant join the specified conference.\n *\n * @param {JitsiConference} conference - The {@code JitsiConference} instance\n * the local participant will (try to) join.\n * @returns {Function}\n */\nfunction _conferenceWillJoin(conference: Object) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const localTracks\n            = getLocalTracks(getState()['features/base/tracks'])\n                .map(t => t.jitsiTrack);\n\n        if (localTracks.length) {\n            _addLocalTracksToConference(conference, localTracks);\n        }\n\n        dispatch(conferenceWillJoin(conference));\n    };\n}\n\n/**\n * Signals the intention of the application to have the local participant\n * join the specified conference.\n *\n * @param {JitsiConference} conference - The {@code JitsiConference} instance\n * the local participant will (try to) join.\n * @returns {{\n *     type: CONFERENCE_WILL_JOIN,\n *     conference: JitsiConference\n * }}\n */\nexport function conferenceWillJoin(conference: Object) {\n    return {\n        type: CONFERENCE_WILL_JOIN,\n        conference\n    };\n}\n\n/**\n * Signals the intention of the application to have the local participant leave\n * a specific conference. Similar in fashion to CONFERENCE_LEFT. Contrary to it\n * though, it's not guaranteed because CONFERENCE_LEFT may be triggered by\n * lib-jitsi-meet and not the application.\n *\n * @param {JitsiConference} conference - The JitsiConference instance which will\n * be left by the local participant.\n * @returns {{\n *     type: CONFERENCE_LEFT,\n *     conference: JitsiConference\n * }}\n */\nexport function conferenceWillLeave(conference: Object) {\n    return {\n        type: CONFERENCE_WILL_LEAVE,\n        conference\n    };\n}\n\n/**\n * Initializes a new conference.\n *\n * @returns {Function}\n */\nexport function createConference() {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { connection, locationURL } = state['features/base/connection'];\n\n        if (!connection) {\n            throw new Error('Cannot create a conference without a connection!');\n        }\n\n        const { password, room } = state['features/base/conference'];\n\n        if (!room) {\n            throw new Error('Cannot join a conference without a room name!');\n        }\n\n        const config = state['features/base/config'];\n        const { email, name: nick } = getLocalParticipant(state);\n        const conference\n            = connection.initJitsiConference(\n\n                getBackendSafeRoomName(room), {\n                    ...config,\n                    applicationName: getName(),\n                    getWiFiStatsMethod: getJitsiMeetGlobalNS().getWiFiStats,\n                    confID: `${locationURL.host}${locationURL.pathname}`,\n                    statisticsDisplayName: config.enableDisplayNameInStats ? nick : undefined,\n                    statisticsId: config.enableEmailInStats ? email : undefined\n                });\n\n        connection[JITSI_CONNECTION_CONFERENCE_KEY] = conference;\n\n        conference[JITSI_CONFERENCE_URL_KEY] = locationURL;\n\n        dispatch(_conferenceWillJoin(conference));\n\n        _addConferenceListeners(conference, dispatch);\n\n        sendLocalParticipant(state, conference);\n\n        conference.join(password);\n    };\n}\n\n/**\n * Will try to join the conference again in case it failed earlier with\n * {@link JitsiConferenceErrors.AUTHENTICATION_REQUIRED}. It means that Jicofo\n * did not allow to create new room from anonymous domain, but it can be tried\n * again later in case authenticated user created it in the meantime.\n *\n * @returns {Function}\n */\nexport function checkIfCanJoin() {\n    return (dispatch: Function, getState: Function) => {\n        const { authRequired, password }\n            = getState()['features/base/conference'];\n\n        authRequired && dispatch(_conferenceWillJoin(authRequired));\n        authRequired && authRequired.join(password);\n    };\n}\n\n/**\n * Signals the data channel with the bridge has successfully opened.\n *\n * @returns {{\n *     type: DATA_CHANNEL_OPENED\n * }}\n */\nexport function dataChannelOpened() {\n    return {\n        type: DATA_CHANNEL_OPENED\n    };\n}\n\n/**\n * Signals that we've been kicked out of the conference.\n *\n * @param {JitsiConference} conference - The {@link JitsiConference} instance\n * for which the event is being signaled.\n * @param {JitsiParticipant} participant - The {@link JitsiParticipant}\n * instance which initiated the kick event.\n * @returns {{\n *     type: KICKED_OUT,\n *     conference: JitsiConference,\n *     participant: JitsiParticipant\n * }}\n */\nexport function kickedOut(conference: Object, participant: Object) {\n    return {\n        type: KICKED_OUT,\n        conference,\n        participant\n    };\n}\n\n/**\n * Signals that the lock state of a specific JitsiConference changed.\n *\n * @param {JitsiConference} conference - The JitsiConference which had its lock\n * state changed.\n * @param {boolean} locked - If the specified conference became locked, true;\n * otherwise, false.\n * @returns {{\n *     type: LOCK_STATE_CHANGED,\n *     conference: JitsiConference,\n *     locked: boolean\n * }}\n */\nexport function lockStateChanged(conference: Object, locked: boolean) {\n    return {\n        type: LOCK_STATE_CHANGED,\n        conference,\n        locked\n    };\n}\n\n/**\n * Updates the known state of start muted policies.\n *\n * @param {boolean} audioMuted - Whether or not members will join the conference\n * as audio muted.\n * @param {boolean} videoMuted - Whether or not members will join the conference\n * as video muted.\n * @returns {{\n *     type: SET_START_MUTED_POLICY,\n *     startAudioMutedPolicy: boolean,\n *     startVideoMutedPolicy: boolean\n * }}\n */\nexport function onStartMutedPolicyChanged(\n        audioMuted: boolean, videoMuted: boolean) {\n    return {\n        type: SET_START_MUTED_POLICY,\n        startAudioMutedPolicy: audioMuted,\n        startVideoMutedPolicy: videoMuted\n    };\n}\n\n/**\n * Sets whether or not peer2peer is currently enabled.\n *\n * @param {boolean} p2p - Whether or not peer2peer is currently active.\n * @returns {{\n *     type: P2P_STATUS_CHANGED,\n *     p2p: boolean\n * }}\n */\nexport function p2pStatusChanged(p2p: boolean) {\n    return {\n        type: P2P_STATUS_CHANGED,\n        p2p\n    };\n}\n\n/**\n * Signals to play touch tones.\n *\n * @param {string} tones - The tones to play.\n * @param {number} [duration] - How long to play each tone.\n * @param {number} [pause] - How long to pause between each tone.\n * @returns {{\n *     type: SEND_TONES,\n *     tones: string,\n *     duration: number,\n *     pause: number\n * }}\n */\nexport function sendTones(tones: string, duration: number, pause: number) {\n    return {\n        type: SEND_TONES,\n        tones,\n        duration,\n        pause\n    };\n}\n\n/**\n * Sets the flag for indicating if desktop sharing is enabled.\n *\n * @param {boolean} desktopSharingEnabled - True if desktop sharing is enabled.\n * @returns {{\n *     type: SET_DESKTOP_SHARING_ENABLED,\n *     desktopSharingEnabled: boolean\n * }}\n */\nexport function setDesktopSharingEnabled(desktopSharingEnabled: boolean) {\n    return {\n        type: SET_DESKTOP_SHARING_ENABLED,\n        desktopSharingEnabled\n    };\n}\n\n/**\n * Enables or disables the Follow Me feature.\n *\n * @param {boolean} enabled - Whether or not Follow Me should be enabled.\n * @returns {{\n *     type: SET_FOLLOW_ME,\n *     enabled: boolean\n * }}\n */\nexport function setFollowMe(enabled: boolean) {\n    return {\n        type: SET_FOLLOW_ME,\n        enabled\n    };\n}\n\n/**\n * Sets the max frame height that should be received from remote videos.\n *\n * @param {number} maxReceiverVideoQuality - The max video frame height to\n * receive.\n * @returns {{\n *     type: SET_MAX_RECEIVER_VIDEO_QUALITY,\n *     maxReceiverVideoQuality: number\n * }}\n */\nexport function setMaxReceiverVideoQuality(maxReceiverVideoQuality: number) {\n    return {\n        type: SET_MAX_RECEIVER_VIDEO_QUALITY,\n        maxReceiverVideoQuality\n    };\n}\n\n/**\n * Sets the password to join or lock a specific JitsiConference.\n *\n * @param {JitsiConference} conference - The JitsiConference which requires a\n * password to join or is to be locked with the specified password.\n * @param {Function} method - The JitsiConference method of password protection\n * such as join or lock.\n * @param {string} password - The password with which the specified conference\n * is to be joined or locked.\n * @returns {Function}\n */\nexport function setPassword(\n        conference: Object,\n        method: Function,\n        password: string) {\n    return (dispatch: Dispatch<any>, getState: Function): ?Promise<void> => {\n        switch (method) {\n        case conference.join: {\n            let state = getState()['features/base/conference'];\n\n            // Make sure that the action will set a password for a conference\n            // that the application wants joined.\n            if (state.passwordRequired === conference) {\n                dispatch({\n                    type: SET_PASSWORD,\n                    conference,\n                    method,\n                    password\n                });\n\n                // Join the conference with the newly-set password.\n\n                // Make sure that the action did set the password.\n                state = getState()['features/base/conference'];\n                if (state.password === password\n                        && !state.passwordRequired\n\n                        // Make sure that the application still wants the\n                        // conference joined.\n                        && !state.conference) {\n                    method.call(conference, password);\n                }\n            }\n            break;\n        }\n\n        case conference.lock: {\n            const state = getState()['features/base/conference'];\n\n            if (state.conference === conference) {\n                return (\n                    method.call(conference, password)\n                        .then(() => dispatch({\n                            type: SET_PASSWORD,\n                            conference,\n                            method,\n                            password\n                        }))\n                        .catch(error => dispatch({\n                            type: SET_PASSWORD_FAILED,\n                            error\n                        }))\n                );\n            }\n\n            return Promise.reject();\n        }\n        }\n    };\n}\n\n/**\n * Sets the max frame height the user prefers to send and receive from the\n * remote participants.\n *\n * @param {number} preferredVideoQuality - The max video resolution to send and\n * receive.\n * @returns {{\n *     type: SET_PREFERRED_VIDEO_QUALITY,\n *     preferredVideoQuality: number\n * }}\n */\nexport function setPreferredVideoQuality(preferredVideoQuality: number) {\n    return {\n        type: SET_PREFERRED_VIDEO_QUALITY,\n        preferredVideoQuality\n    };\n}\n\n/**\n * Sets (the name of) the room of the conference to be joined.\n *\n * @param {(string|undefined)} room - The name of the room of the conference to\n * be joined.\n * @returns {{\n *     type: SET_ROOM,\n *     room: string\n * }}\n */\nexport function setRoom(room: ?string) {\n    return {\n        type: SET_ROOM,\n        room\n    };\n}\n\n/**\n * Sets whether or not members should join audio and/or video muted.\n *\n * @param {boolean} startAudioMuted - Whether or not members will join the\n * conference as audio muted.\n * @param {boolean} startVideoMuted - Whether or not members will join the\n * conference as video muted.\n * @returns {Function}\n */\nexport function setStartMutedPolicy(\n        startAudioMuted: boolean, startVideoMuted: boolean) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const conference = getCurrentConference(getState());\n\n        conference && conference.setStartMutedPolicy({\n            audio: startAudioMuted,\n            video: startVideoMuted\n        });\n\n        return dispatch(\n            onStartMutedPolicyChanged(startAudioMuted, startVideoMuted));\n    };\n}\n\n/**\n * Changing conference subject.\n *\n * @param {string} subject - The new subject.\n * @returns {void}\n */\nexport function setSubject(subject: string = '') {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { conference } = getState()['features/base/conference'];\n\n        if (conference) {\n            conference.setSubject(subject);\n        } else {\n            dispatch({\n                type: SET_PENDING_SUBJECT_CHANGE,\n                subject\n            });\n        }\n    };\n}\n","// @flow\n\nimport { openDisplayNamePrompt } from '../../display-name';\n\nimport {\n    ACTION_PINNED,\n    ACTION_UNPINNED,\n    createOfferAnswerFailedEvent,\n    createPinnedEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { CONNECTION_ESTABLISHED, CONNECTION_FAILED } from '../connection';\nimport { JitsiConferenceErrors } from '../lib-jitsi-meet';\nimport {\n    getLocalParticipant,\n    getParticipantById,\n    getPinnedParticipant,\n    PARTICIPANT_UPDATED,\n    PIN_PARTICIPANT\n} from '../participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../redux';\nimport { TRACK_ADDED, TRACK_REMOVED } from '../tracks';\n\nimport {\n    conferenceFailed,\n    conferenceWillLeave,\n    createConference,\n    setSubject\n} from './actions';\nimport {\n    CONFERENCE_FAILED,\n    CONFERENCE_JOINED,\n    CONFERENCE_SUBJECT_CHANGED,\n    CONFERENCE_WILL_LEAVE,\n    DATA_CHANNEL_OPENED,\n    SEND_TONES,\n    SET_PENDING_SUBJECT_CHANGE,\n    SET_ROOM\n} from './actionTypes';\nimport {\n    _addLocalTracksToConference,\n    _removeLocalTracksFromConference,\n    forEachConference,\n    getCurrentConference\n} from './functions';\nimport logger from './logger';\nimport { MEDIA_TYPE } from '../media';\n\ndeclare var APP: Object;\n\n/**\n * Handler for before unload event.\n */\nlet beforeUnloadHandler;\n\n/**\n * Implements the middleware of the feature base/conference.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONFERENCE_FAILED:\n        return _conferenceFailed(store, next, action);\n\n    case CONFERENCE_JOINED:\n        return _conferenceJoined(store, next, action);\n\n    case CONNECTION_ESTABLISHED:\n        return _connectionEstablished(store, next, action);\n\n    case CONNECTION_FAILED:\n        return _connectionFailed(store, next, action);\n\n    case CONFERENCE_SUBJECT_CHANGED:\n        return _conferenceSubjectChanged(store, next, action);\n\n    case CONFERENCE_WILL_LEAVE:\n        _conferenceWillLeave();\n        break;\n\n    case DATA_CHANNEL_OPENED:\n        return _syncReceiveVideoQuality(store, next, action);\n\n    case PARTICIPANT_UPDATED:\n        return _updateLocalParticipantInConference(store, next, action);\n\n    case PIN_PARTICIPANT:\n        return _pinParticipant(store, next, action);\n\n    case SEND_TONES:\n        return _sendTones(store, next, action);\n\n    case SET_ROOM:\n        return _setRoom(store, next, action);\n\n    case TRACK_ADDED:\n    case TRACK_REMOVED:\n        return _trackAddedOrRemoved(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Registers a change handler for state['features/base/conference'] to update\n * the preferred video quality levels based on user preferred and internal\n * settings.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/base/conference'],\n    /* listener */ (currentState, store, previousState = {}) => {\n        const {\n            conference,\n            maxReceiverVideoQuality,\n            preferredVideoQuality\n        } = currentState;\n        const changedPreferredVideoQuality\n            = preferredVideoQuality !== previousState.preferredVideoQuality;\n        const changedMaxVideoQuality = maxReceiverVideoQuality !== previousState.maxReceiverVideoQuality;\n\n        if (changedPreferredVideoQuality || changedMaxVideoQuality) {\n            _setReceiverVideoConstraint(conference, preferredVideoQuality, maxReceiverVideoQuality);\n        }\n        if (changedPreferredVideoQuality) {\n            _setSenderVideoConstraint(conference, preferredVideoQuality);\n        }\n    });\n\n/**\n * Makes sure to leave a failed conference in order to release any allocated\n * resources like peer connections, emit participant left events, etc.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONFERENCE_FAILED} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _conferenceFailed(store, next, action) {\n    const result = next(action);\n\n    const { conference, error } = action;\n\n    if (error.name === JitsiConferenceErrors.OFFER_ANSWER_FAILED) {\n        sendAnalytics(createOfferAnswerFailedEvent());\n    }\n\n    // FIXME: Workaround for the web version. Currently, the creation of the\n    // conference is handled by /conference.js and appropriate failure handlers\n    // are set there.\n    if (typeof APP !== 'undefined') {\n        if (typeof beforeUnloadHandler !== 'undefined') {\n            window.removeEventListener('beforeunload', beforeUnloadHandler);\n            beforeUnloadHandler = undefined;\n        }\n\n        return result;\n    }\n\n    // XXX After next(action), it is clear whether the error is recoverable.\n    !error.recoverable\n        && conference\n        && conference.leave().catch(reason => {\n            // Even though we don't care too much about the failure, it may be\n            // good to know that it happen, so log it (on the info level).\n            logger.info('JitsiConference.leave() rejected with:', reason);\n        });\n\n    return result;\n}\n\n/**\n * Does extra sync up on properties that may need to be updated after the\n * conference was joined.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONFERENCE_JOINED} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _conferenceJoined({ dispatch, getState }, next, action) {\n    const result = next(action);\n    const { conference } = action;\n    const { pendingSubjectChange } = getState()['features/base/conference'];\n    const { requireDisplayName } = getState()['features/base/config'];\n\n    pendingSubjectChange && dispatch(setSubject(pendingSubjectChange));\n\n    // FIXME: Very dirty solution. This will work on web only.\n    // When the user closes the window or quits the browser, lib-jitsi-meet\n    // handles the process of leaving the conference. This is temporary solution\n    // that should cover the described use case as part of the effort to\n    // implement the conferenceWillLeave action for web.\n    beforeUnloadHandler = () => {\n        dispatch(conferenceWillLeave(conference));\n    };\n    window.addEventListener('beforeunload', beforeUnloadHandler);\n\n    if (requireDisplayName\n        && !getLocalParticipant(getState)?.name\n        && !conference.isHidden()) {\n        dispatch(openDisplayNamePrompt(undefined));\n    }\n\n    return result;\n}\n\n/**\n * Notifies the feature base/conference that the action\n * {@code CONNECTION_ESTABLISHED} is being dispatched within a specific redux\n * store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONNECTION_ESTABLISHED}\n * which is being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _connectionEstablished({ dispatch }, next, action) {\n    const result = next(action);\n\n    // FIXME: Workaround for the web version. Currently, the creation of the\n    // conference is handled by /conference.js.\n    typeof APP === 'undefined' && dispatch(createConference());\n\n    return result;\n}\n\n/**\n * Notifies the feature base/conference that the action\n * {@code CONNECTION_FAILED} is being dispatched within a specific redux\n * store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONNECTION_FAILED} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _connectionFailed({ dispatch, getState }, next, action) {\n    const result = next(action);\n\n    if (typeof beforeUnloadHandler !== 'undefined') {\n        window.removeEventListener('beforeunload', beforeUnloadHandler);\n        beforeUnloadHandler = undefined;\n    }\n\n    // FIXME: Workaround for the web version. Currently, the creation of the\n    // conference is handled by /conference.js and appropriate failure handlers\n    // are set there.\n    if (typeof APP === 'undefined') {\n        const { connection } = action;\n        const { error } = action;\n\n        forEachConference(getState, conference => {\n            // It feels that it would make things easier if JitsiConference\n            // in lib-jitsi-meet would monitor it's connection and emit\n            // CONFERENCE_FAILED when it's dropped. It has more knowledge on\n            // whether it can recover or not. But because the reload screen\n            // and the retry logic is implemented in the app maybe it can be\n            // left this way for now.\n            if (conference.getConnection() === connection) {\n                // XXX Note that on mobile the error type passed to\n                // connectionFailed is always an object with .name property.\n                // This fact needs to be checked prior to enabling this logic on\n                // web.\n                const conferenceAction\n                    = conferenceFailed(conference, error.name);\n\n                // Copy the recoverable flag if set on the CONNECTION_FAILED\n                // action to not emit recoverable action caused by\n                // a non-recoverable one.\n                if (typeof error.recoverable !== 'undefined') {\n                    conferenceAction.error.recoverable = error.recoverable;\n                }\n\n                dispatch(conferenceAction);\n            }\n\n            return true;\n        });\n    }\n\n    return result;\n}\n\n/**\n * Notifies the feature base/conference that the action\n * {@code CONFERENCE_SUBJECT_CHANGED} is being dispatched within a specific\n *  redux store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONFERENCE_SUBJECT_CHANGED}\n * which is being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _conferenceSubjectChanged({ dispatch, getState }, next, action) {\n    const result = next(action);\n    const { subject } = getState()['features/base/conference'];\n\n    if (subject) {\n        dispatch({\n            type: SET_PENDING_SUBJECT_CHANGE,\n            subject: undefined\n        });\n    }\n\n    typeof APP === 'object' && APP.API.notifySubjectChanged(subject);\n\n    return result;\n}\n\n/**\n * Notifies the feature base/conference that the action\n * {@code CONFERENCE_WILL_LEAVE} is being dispatched within a specific redux\n * store.\n *\n * @private\n * @returns {void}\n */\nfunction _conferenceWillLeave() {\n    if (typeof beforeUnloadHandler !== 'undefined') {\n        window.removeEventListener('beforeunload', beforeUnloadHandler);\n        beforeUnloadHandler = undefined;\n    }\n}\n\n/**\n * Notifies the feature base/conference that the action {@code PIN_PARTICIPANT}\n * is being dispatched within a specific redux store. Pins the specified remote\n * participant in the associated conference, ignores the local participant.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code PIN_PARTICIPANT} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _pinParticipant({ getState }, next, action) {\n    const state = getState();\n    const { conference } = state['features/base/conference'];\n\n    if (!conference) {\n        return next(action);\n    }\n\n    const participants = state['features/base/participants'];\n    const id = action.participant.id;\n    const participantById = getParticipantById(participants, id);\n    const pinnedParticipant = getPinnedParticipant(participants);\n    const actionName = id ? ACTION_PINNED : ACTION_UNPINNED;\n    const local\n        = (participantById && participantById.local)\n            || (!id && pinnedParticipant && pinnedParticipant.local);\n    let participantIdForEvent;\n\n    if (local) {\n        participantIdForEvent = local;\n    } else {\n        participantIdForEvent\n            = actionName === ACTION_PINNED ? id : pinnedParticipant && pinnedParticipant.id;\n    }\n\n    sendAnalytics(createPinnedEvent(\n        actionName,\n        participantIdForEvent,\n        {\n            local,\n            'participant_count': conference.getParticipantCount()\n        }));\n\n    return next(action);\n}\n\n/**\n * Requests the specified tones to be played.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code SEND_TONES} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _sendTones({ getState }, next, action) {\n    const state = getState();\n    const { conference } = state['features/base/conference'];\n\n    if (conference) {\n        const { duration, tones, pause } = action;\n\n        conference.sendTones(tones, duration, pause);\n    }\n\n    return next(action);\n}\n\n/**\n * Helper function for updating the preferred receiver video constraint, based\n * on the user preference and the internal maximum.\n *\n * @param {JitsiConference} conference - The JitsiConference instance for the\n * current call.\n * @param {number} preferred - The user preferred max frame height.\n * @param {number} max - The maximum frame height the application should\n * receive.\n * @returns {void}\n */\nfunction _setReceiverVideoConstraint(conference, preferred, max) {\n    if (conference) {\n        conference.setReceiverVideoConstraint(Math.min(preferred, max));\n    }\n}\n\n/**\n * Helper function for updating the preferred sender video constraint, based\n * on the user preference.\n *\n * @param {JitsiConference} conference - The JitsiConference instance for the\n * current call.\n * @param {number} preferred - The user preferred max frame height.\n * @returns {void}\n */\nfunction _setSenderVideoConstraint(conference, preferred) {\n    if (conference) {\n        conference.setSenderVideoConstraint(preferred)\n            .catch(err => {\n                logger.error(`Changing sender resolution to ${preferred} failed - ${err} `);\n            });\n    }\n}\n\n/**\n * Notifies the feature base/conference that the action\n * {@code SET_ROOM} is being dispatched within a specific\n *  redux store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code SET_ROOM}\n * which is being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _setRoom({ dispatch, getState }, next, action) {\n    const state = getState();\n    const { subject } = state['features/base/config'];\n    const { room } = action;\n\n    if (room) {\n        // Set the stored subject.\n        dispatch(setSubject(subject));\n    }\n\n    return next(action);\n}\n\n/**\n * Synchronizes local tracks from state with local tracks in JitsiConference\n * instance.\n *\n * @param {Store} store - The redux store.\n * @param {Object} action - Action object.\n * @private\n * @returns {Promise}\n */\nfunction _syncConferenceLocalTracksWithState({ getState }, action) {\n    const conference = getCurrentConference(getState);\n    let promise;\n\n    if (conference) {\n        const track = action.track.jitsiTrack;\n\n        if (action.type === TRACK_ADDED) {\n            promise = _addLocalTracksToConference(conference, [ track ]);\n        } else {\n            promise = _removeLocalTracksFromConference(conference, [ track ]);\n        }\n    }\n\n    return promise || Promise.resolve();\n}\n\n/**\n * Sets the maximum receive video quality.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code DATA_CHANNEL_STATUS_CHANGED}\n * which is being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _syncReceiveVideoQuality({ getState }, next, action) {\n    const {\n        conference,\n        maxReceiverVideoQuality,\n        preferredVideoQuality\n    } = getState()['features/base/conference'];\n\n    _setReceiverVideoConstraint(\n        conference,\n        preferredVideoQuality,\n        maxReceiverVideoQuality);\n\n    return next(action);\n}\n\n/**\n * Notifies the feature base/conference that the action {@code TRACK_ADDED}\n * or {@code TRACK_REMOVED} is being dispatched within a specific redux store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code TRACK_ADDED} or\n * {@code TRACK_REMOVED} which is being dispatched in the specified\n * {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _trackAddedOrRemoved(store, next, action) {\n    const track = action.track;\n\n    // TODO All track swapping should happen here instead of conference.js.\n    // Since we swap the tracks for the web client in conference.js, ignore\n    // presenter tracks here and do not add/remove them to/from the conference.\n    if (track && track.local && track.mediaType !== MEDIA_TYPE.PRESENTER) {\n        return (\n            _syncConferenceLocalTracksWithState(store, action)\n                .then(() => next(action)));\n    }\n\n    return next(action);\n}\n\n/**\n * Updates the conference object when the local participant is updated.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action which is being dispatched in the\n * specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _updateLocalParticipantInConference({ getState }, next, action) {\n    const { conference } = getState()['features/base/conference'];\n    const { participant } = action;\n    const result = next(action);\n\n    if (conference && participant.local && 'name' in participant) {\n        conference.setDisplayName(participant.name);\n    }\n\n    return result;\n}\n","// @flow\n\nimport { CONNECTION_WILL_CONNECT, SET_LOCATION_URL } from '../connection';\nimport { JitsiConferenceErrors } from '../lib-jitsi-meet';\nimport { assign, ReducerRegistry, set } from '../redux';\nimport { LOCKED_LOCALLY, LOCKED_REMOTELY } from '../../room-lock';\n\nimport {\n    AUTH_STATUS_CHANGED,\n    CONFERENCE_FAILED,\n    CONFERENCE_JOINED,\n    CONFERENCE_LEFT,\n    CONFERENCE_SUBJECT_CHANGED,\n    CONFERENCE_TIMESTAMP_CHANGED,\n    CONFERENCE_WILL_JOIN,\n    CONFERENCE_WILL_LEAVE,\n    LOCK_STATE_CHANGED,\n    P2P_STATUS_CHANGED,\n    SET_DESKTOP_SHARING_ENABLED,\n    SET_FOLLOW_ME,\n    SET_MAX_RECEIVER_VIDEO_QUALITY,\n    SET_PASSWORD,\n    SET_PENDING_SUBJECT_CHANGE,\n    SET_PREFERRED_VIDEO_QUALITY,\n    SET_ROOM,\n    SET_SIP_GATEWAY_ENABLED,\n    SET_START_MUTED_POLICY\n} from './actionTypes';\nimport { VIDEO_QUALITY_LEVELS } from './constants';\nimport { isRoomValid } from './functions';\n\nconst DEFAULT_STATE = {\n    conference: undefined,\n    e2eeSupported: undefined,\n    joining: undefined,\n    leaving: undefined,\n    locked: undefined,\n    maxReceiverVideoQuality: VIDEO_QUALITY_LEVELS.HIGH,\n    password: undefined,\n    passwordRequired: undefined,\n    preferredVideoQuality: VIDEO_QUALITY_LEVELS.HIGH\n};\n\n/**\n * Listen for actions that contain the conference object, so that it can be\n * stored for use by other action creators.\n */\nReducerRegistry.register(\n    'features/base/conference',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case AUTH_STATUS_CHANGED:\n            return _authStatusChanged(state, action);\n\n        case CONFERENCE_FAILED:\n            return _conferenceFailed(state, action);\n\n        case CONFERENCE_JOINED:\n            return _conferenceJoined(state, action);\n\n        case CONFERENCE_SUBJECT_CHANGED:\n            return set(state, 'subject', action.subject);\n\n        case CONFERENCE_TIMESTAMP_CHANGED:\n            return set(state, 'conferenceTimestamp', action.conferenceTimestamp);\n\n        case CONFERENCE_LEFT:\n        case CONFERENCE_WILL_LEAVE:\n            return _conferenceLeftOrWillLeave(state, action);\n\n        case CONFERENCE_WILL_JOIN:\n            return _conferenceWillJoin(state, action);\n\n        case CONNECTION_WILL_CONNECT:\n            return set(state, 'authRequired', undefined);\n\n        case LOCK_STATE_CHANGED:\n            return _lockStateChanged(state, action);\n\n        case P2P_STATUS_CHANGED:\n            return _p2pStatusChanged(state, action);\n\n        case SET_DESKTOP_SHARING_ENABLED:\n            return _setDesktopSharingEnabled(state, action);\n\n        case SET_FOLLOW_ME:\n            return set(state, 'followMeEnabled', action.enabled);\n\n        case SET_LOCATION_URL:\n            return set(state, 'room', undefined);\n\n        case SET_MAX_RECEIVER_VIDEO_QUALITY:\n            return set(\n                state,\n                'maxReceiverVideoQuality',\n                action.maxReceiverVideoQuality);\n\n        case SET_PASSWORD:\n            return _setPassword(state, action);\n\n        case SET_PENDING_SUBJECT_CHANGE:\n            return set(state, 'pendingSubjectChange', action.subject);\n\n        case SET_PREFERRED_VIDEO_QUALITY:\n            return set(\n                state,\n                'preferredVideoQuality',\n                action.preferredVideoQuality);\n\n        case SET_ROOM:\n            return _setRoom(state, action);\n\n        case SET_SIP_GATEWAY_ENABLED:\n            return _setSIPGatewayEnabled(state, action);\n\n        case SET_START_MUTED_POLICY:\n            return {\n                ...state,\n                startAudioMutedPolicy: action.startAudioMutedPolicy,\n                startVideoMutedPolicy: action.startVideoMutedPolicy\n            };\n        }\n\n        return state;\n    });\n\n/**\n * Reduces a specific Redux action AUTH_STATUS_CHANGED of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action AUTH_STATUS_CHANGED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _authStatusChanged(state, { authEnabled, authLogin }) {\n    return assign(state, {\n        authEnabled,\n        authLogin\n    });\n}\n\n/**\n * Reduces a specific Redux action CONFERENCE_FAILED of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action CONFERENCE_FAILED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _conferenceFailed(state, { conference, error }) {\n    // The current (similar to getCurrentConference in\n    // base/conference/functions.js) conference which is joining or joined:\n    const conference_ = state.conference || state.joining;\n\n    if (conference_ && conference_ !== conference) {\n        return state;\n    }\n\n    let authRequired;\n    let passwordRequired;\n\n    switch (error.name) {\n    case JitsiConferenceErrors.AUTHENTICATION_REQUIRED:\n        authRequired = conference;\n        break;\n\n    case JitsiConferenceErrors.PASSWORD_REQUIRED:\n        passwordRequired = conference;\n        break;\n    }\n\n    return assign(state, {\n        authRequired,\n        conference: undefined,\n        e2eeSupported: undefined,\n        error,\n        joining: undefined,\n        leaving: undefined,\n\n        /**\n         * The indicator of how the conference/room is locked. If falsy, the\n         * conference/room is unlocked; otherwise, it's either\n         * {@code LOCKED_LOCALLY} or {@code LOCKED_REMOTELY}.\n         *\n         * @type {string}\n         */\n        locked: passwordRequired ? LOCKED_REMOTELY : undefined,\n        password: undefined,\n\n        /**\n         * The JitsiConference instance which requires a password to join.\n         *\n         * @type {JitsiConference}\n         */\n        passwordRequired\n    });\n}\n\n/**\n * Reduces a specific Redux action CONFERENCE_JOINED of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action CONFERENCE_JOINED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _conferenceJoined(state, { conference }) {\n    // FIXME The indicator which determines whether a JitsiConference is locked\n    // i.e. password-protected is private to lib-jitsi-meet. However, the\n    // library does not fire LOCK_STATE_CHANGED upon joining a JitsiConference\n    // with a password.\n    // FIXME Technically JitsiConference.room is a private field.\n    const locked = conference.room && conference.room.locked ? LOCKED_REMOTELY : undefined;\n\n    return assign(state, {\n        authRequired: undefined,\n\n        /**\n         * The JitsiConference instance represented by the Redux state of the\n         * feature base/conference.\n         *\n         * @type {JitsiConference}\n         */\n        conference,\n\n        e2eeSupported: conference.isE2EESupported(),\n\n        joining: undefined,\n        leaving: undefined,\n\n        /**\n         * The indicator which determines whether the conference is locked.\n         *\n         * @type {boolean}\n         */\n        locked,\n        passwordRequired: undefined\n    });\n}\n\n/**\n * Reduces a specific redux action {@link CONFERENCE_LEFT} or\n * {@link CONFERENCE_WILL_LEAVE} for the feature base/conference.\n *\n * @param {Object} state - The redux state of the feature base/conference.\n * @param {Action} action - The redux action {@code CONFERENCE_LEFT} or\n * {@code CONFERENCE_WILL_LEAVE} to reduce.\n * @private\n * @returns {Object} The next/new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _conferenceLeftOrWillLeave(state, { conference, type }) {\n    const nextState = { ...state };\n\n    // The redux action CONFERENCE_LEFT is the last time that we should be\n    // hearing from a JitsiConference instance.\n    //\n    // The redux action CONFERENCE_WILL_LEAVE represents the order of the user\n    // to leave a JitsiConference instance. From the user's perspective, there's\n    // no going back (with respect to the instance itself). The app will perform\n    // due clean-up like leaving the associated room, but the instance is no\n    // longer the focus of the attention of the user and, consequently, the app.\n    for (const p in state) {\n        if (state[p] === conference) {\n            nextState[p] = undefined;\n\n            switch (p) {\n            case 'conference':\n            case 'passwordRequired':\n                // XXX Clear/unset locked & password for a conference which has\n                // been LOCKED_LOCALLY or LOCKED_REMOTELY.\n                delete nextState.locked;\n                delete nextState.password;\n                break;\n            }\n        }\n    }\n\n    if (type === CONFERENCE_WILL_LEAVE) {\n        // A CONFERENCE_WILL_LEAVE is of further consequence only if it is\n        // expected i.e. if the specified conference is joining or joined.\n        if (conference === state.joining || conference === state.conference) {\n            /**\n             * The JitsiConference instance which is currently in the process of\n             * being left.\n             *\n             * @type {JitsiConference}\n             */\n            nextState.leaving = conference;\n        }\n    }\n\n    return nextState;\n}\n\n/**\n * Reduces a specific Redux action CONFERENCE_WILL_JOIN of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action CONFERENCE_WILL_JOIN to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _conferenceWillJoin(state, { conference }) {\n    return assign(state, {\n        error: undefined,\n        joining: conference\n    });\n}\n\n/**\n * Reduces a specific Redux action LOCK_STATE_CHANGED of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action LOCK_STATE_CHANGED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _lockStateChanged(state, { conference, locked }) {\n    if (state.conference !== conference) {\n        return state;\n    }\n\n    return assign(state, {\n        locked: locked ? state.locked || LOCKED_REMOTELY : undefined,\n        password: locked ? state.password : undefined\n    });\n}\n\n/**\n * Reduces a specific Redux action P2P_STATUS_CHANGED of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action P2P_STATUS_CHANGED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _p2pStatusChanged(state, action) {\n    return set(state, 'p2p', action.p2p);\n}\n\n/**\n * Reduces a specific Redux action SET_DESKTOP_SHARING_ENABLED of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action SET_DESKTOP_SHARING_ENABLED to\n * reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _setDesktopSharingEnabled(state, action) {\n    return set(state, 'desktopSharingEnabled', action.desktopSharingEnabled);\n}\n\n/**\n * Reduces a specific Redux action SET_PASSWORD of the feature base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action SET_PASSWORD to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _setPassword(state, { conference, method, password }) {\n    switch (method) {\n    case conference.join:\n        if (state.passwordRequired === conference) {\n            return assign(state, {\n                // XXX 1. The JitsiConference which transitions away from\n                // passwordRequired MUST remain in the redux state\n                // features/base/conference until it transitions into\n                // conference; otherwise, there is a span of time during which\n                // the redux state does not even know that there is a\n                // JitsiConference whatsoever.\n                //\n                // 2. The redux action setPassword will attempt to join the\n                // JitsiConference so joining is an appropriate transitional\n                // redux state.\n                //\n                // 3. The redux action setPassword will perform the same check\n                // before it proceeds with the re-join.\n                joining: state.conference ? state.joining : conference,\n                locked: LOCKED_REMOTELY,\n\n                /**\n                 * The password with which the conference is to be joined.\n                 *\n                 * @type {string}\n                 */\n                password,\n                passwordRequired: undefined\n            });\n        }\n        break;\n\n    case conference.lock:\n        return assign(state, {\n            locked: password ? LOCKED_LOCALLY : undefined,\n            password\n        });\n    }\n\n    return state;\n}\n\n/**\n * Reduces a specific Redux action SET_ROOM of the feature base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action SET_ROOM to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _setRoom(state, action) {\n    let { room } = action;\n\n    if (!isRoomValid(room)) {\n        // Technically, there are multiple values which don't represent valid\n        // room names. Practically, each of them is as bad as the rest of them\n        // because we can't use any of them to join a conference.\n        room = undefined;\n    }\n\n    /**\n     * The name of the room of the conference (to be) joined.\n     *\n     * @type {string}\n     */\n    return assign(state, {\n        error: undefined,\n        room\n    });\n}\n\n/**\n * Reduces a specific Redux action SET_SIP_GATEWAY_ENABLED of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action SET_SIP_GATEWAY_ENABLED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _setSIPGatewayEnabled(state, action) {\n    return set(state, 'isSIPGatewayEnabled', action.isSIPGatewayEnabled);\n}\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './constants';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","function _extends() {\n  module.exports = _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import * as colors from './colors';\nimport themed from './utils/themed'; // Cards on a board\n\nexport var e100 = themed({\n  light: \"box-shadow: 0 1px 1px \".concat(colors.N50A, \", 0 0 1px 0 \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 1px 1px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Inline dialogs\n\nexport var e200 = themed({\n  light: \"box-shadow: 0 4px 8px -2px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 4px 8px -2px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Modals\n\nexport var e300 = themed({\n  light: \"box-shadow: 0 8px 16px -4px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 8px 16px -4px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Panels\n\nexport var e400 = themed({\n  light: \"box-shadow: 0 12px 24px -6px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 12px 24px -6px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Flag messages (notifications)\n\nexport var e500 = themed({\n  light: \"box-shadow: 0 20px 32px -8px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 20px 32px -8px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n});","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport { gridSize, fontSize } from './index';\n\nvar baseHeading = function baseHeading(size, lineHeight) {\n  return \"\\n  font-size: \".concat(size / fontSize(), \"em;\\n  font-style: inherit;\\n  line-height: \").concat(lineHeight / size, \";\\n\");\n};\n\nexport var h900 = function h900() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(35, 40), colors.heading, gridSize() * 6.5);\n};\nexport var h800 = function h800() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(29, 32), colors.heading, gridSize() * 5);\n};\nexport var h700 = function h700() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(24, 28), colors.heading, gridSize() * 5);\n};\nexport var h600 = function h600() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  margin-top: \", \"px;\\n\"], baseHeading(20, 24), colors.heading, gridSize() * 3.5);\n};\nexport var h500 = function h500() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.006em;\\n  margin-top: \", \"px;\\n\"], baseHeading(16, 20), colors.heading, gridSize() * 3);\n};\nexport var h400 = function h400() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.003em;\\n  margin-top: \", \"px;\\n\"], baseHeading(14, 16), colors.heading, gridSize() * 2);\n};\nexport var h300 = function h300() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n  text-transform: uppercase;\\n\"], baseHeading(12, 16), colors.heading, gridSize() * 2.5);\n};\nexport var h200 = function h200() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n\"], baseHeading(12, 16), colors.subtleHeading, gridSize() * 2);\n};\nexport var h100 = function h100() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 700;\\n  margin-top: \", \"px;\\n\"], baseHeading(11, 16), colors.subtleHeading, gridSize() * 2);\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nexport default (function (_ref) {\n  var children = _ref.children,\n      props = _ref.props,\n      theme = _ref.theme;\n  var appearance = _typeof(props) === 'object' ? 'default' : props;\n  var merged = _typeof(props) === 'object' ? _objectSpread({}, props) : {};\n  Object.keys(theme).forEach(function (key) {\n    if (!(key in merged)) {\n      merged[key] = theme[key]({\n        appearance: appearance\n      });\n    }\n  });\n  return children(merged);\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport * as colors from '../colors';\nimport { createTheme } from '../utils/createTheme';\n\nvar orTextColor = function orTextColor(preferred) {\n  return function (p) {\n    return p[preferred] || p.textColor;\n  };\n};\n\nvar Div = styled.div.withConfig({\n  displayName: \"Reset__Div\",\n  componentId: \"sc-15i6ali-0\"\n})([\"\\n  \", \";\\n\"], function (p) {\n  return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n\\n    a {\\n      color: \", \";\\n    }\\n    a:hover {\\n      color: \", \";\\n    }\\n    a:active {\\n      color: \", \";\\n    }\\n    a:focus {\\n      outline-color: \", \";\\n    }\\n    h1,\\n    h2,\\n    h3,\\n    h4,\\n    h5 {\\n      color: \", \";\\n    }\\n    h6 {\\n      color: \", \";\\n    }\\n    small {\\n      color: \", \";\\n    }\\n  \"], p.backgroundColor, p.textColor, orTextColor('linkColor'), orTextColor('linkColorHover'), orTextColor('linkColorActive'), orTextColor('linkColorOutline'), orTextColor('headingColor'), orTextColor('subtleHeadingColor'), orTextColor('subtleTextColor'));\n});\nexport var ResetTheme = createTheme(function () {\n  return {\n    backgroundColor: colors.N0,\n    linkColor: colors.B400,\n    linkColorHover: colors.B300,\n    linkColorActive: colors.B500,\n    linkColorOutline: colors.B100,\n    headingColor: colors.N800,\n    subtleHeadingColor: colors.N200,\n    subtleTextColor: colors.N200,\n    textColor: colors.N900\n  };\n});\nexport function Reset(props) {\n  return React.createElement(ResetTheme.Provider, {\n    value: props.theme\n  }, React.createElement(ResetTheme.Consumer, null, function (tokens) {\n    return React.createElement(Div, _extends({}, _objectSpread({}, tokens, {\n      mode: undefined\n    }), props), props.children);\n  }));\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React from 'react';\nimport Theme from './components/Theme'; // Pre-executes the theme and passes it as a prop to the supplied component.\n// This is useful for ensuring that the current theme is accessible as props\n// in styled-components.\n\nexport function withTheme(InnerComponent) {\n  return function ComponentWithTheme(props) {\n    return React.createElement(Theme.Consumer, null, function (tokens) {\n      return React.createElement(InnerComponent, _extends({}, props, {\n        theme: tokens\n      }));\n    });\n  };\n}","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import * as colors from './colors';\nimport themed from './utils/themed'; // Cards on a board\n\nexport var e100 = themed({\n  light: \"box-shadow: 0 1px 1px \".concat(colors.N50A, \", 0 0 1px 0 \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 1px 1px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Inline dialogs\n\nexport var e200 = themed({\n  light: \"box-shadow: 0 4px 8px -2px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 4px 8px -2px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Modals\n\nexport var e300 = themed({\n  light: \"box-shadow: 0 8px 16px -4px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 8px 16px -4px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Panels\n\nexport var e400 = themed({\n  light: \"box-shadow: 0 12px 24px -6px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 12px 24px -6px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Flag messages (notifications)\n\nexport var e500 = themed({\n  light: \"box-shadow: 0 20px 32px -8px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 20px 32px -8px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n});","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport { gridSize, fontSize } from './index';\n\nvar baseHeading = function baseHeading(size, lineHeight) {\n  return \"\\n  font-size: \".concat(size / fontSize(), \"em;\\n  font-style: inherit;\\n  line-height: \").concat(lineHeight / size, \";\\n\");\n};\n\nexport var h900 = function h900() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(35, 40), colors.heading, gridSize() * 6.5);\n};\nexport var h800 = function h800() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(29, 32), colors.heading, gridSize() * 5);\n};\nexport var h700 = function h700() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(24, 28), colors.heading, gridSize() * 5);\n};\nexport var h600 = function h600() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  margin-top: \", \"px;\\n\"], baseHeading(20, 24), colors.heading, gridSize() * 3.5);\n};\nexport var h500 = function h500() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.006em;\\n  margin-top: \", \"px;\\n\"], baseHeading(16, 20), colors.heading, gridSize() * 3);\n};\nexport var h400 = function h400() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.003em;\\n  margin-top: \", \"px;\\n\"], baseHeading(14, 16), colors.heading, gridSize() * 2);\n};\nexport var h300 = function h300() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n  text-transform: uppercase;\\n\"], baseHeading(12, 16), colors.heading, gridSize() * 2.5);\n};\nexport var h200 = function h200() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n\"], baseHeading(12, 16), colors.subtleHeading, gridSize() * 2);\n};\nexport var h100 = function h100() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 700;\\n  margin-top: \", \"px;\\n\"], baseHeading(11, 16), colors.subtleHeading, gridSize() * 2);\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nexport default (function (_ref) {\n  var children = _ref.children,\n      props = _ref.props,\n      theme = _ref.theme;\n  var appearance = _typeof(props) === 'object' ? 'default' : props;\n  var merged = _typeof(props) === 'object' ? _objectSpread({}, props) : {};\n  Object.keys(theme).forEach(function (key) {\n    if (!(key in merged)) {\n      merged[key] = theme[key]({\n        appearance: appearance\n      });\n    }\n  });\n  return children(merged);\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport * as colors from '../colors';\nimport { createTheme } from '../utils/createTheme';\n\nvar orTextColor = function orTextColor(preferred) {\n  return function (p) {\n    return p[preferred] || p.textColor;\n  };\n};\n\nvar Div = styled.div.withConfig({\n  displayName: \"Reset__Div\",\n  componentId: \"sc-15i6ali-0\"\n})([\"\\n  \", \";\\n\"], function (p) {\n  return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n\\n    a {\\n      color: \", \";\\n    }\\n    a:hover {\\n      color: \", \";\\n    }\\n    a:active {\\n      color: \", \";\\n    }\\n    a:focus {\\n      outline-color: \", \";\\n    }\\n    h1,\\n    h2,\\n    h3,\\n    h4,\\n    h5 {\\n      color: \", \";\\n    }\\n    h6 {\\n      color: \", \";\\n    }\\n    small {\\n      color: \", \";\\n    }\\n  \"], p.backgroundColor, p.textColor, orTextColor('linkColor'), orTextColor('linkColorHover'), orTextColor('linkColorActive'), orTextColor('linkColorOutline'), orTextColor('headingColor'), orTextColor('subtleHeadingColor'), orTextColor('subtleTextColor'));\n});\nexport var ResetTheme = createTheme(function () {\n  return {\n    backgroundColor: colors.N0,\n    linkColor: colors.B400,\n    linkColorHover: colors.B300,\n    linkColorActive: colors.B500,\n    linkColorOutline: colors.B100,\n    headingColor: colors.N800,\n    subtleHeadingColor: colors.N200,\n    subtleTextColor: colors.N200,\n    textColor: colors.N900\n  };\n});\nexport function Reset(props) {\n  return React.createElement(ResetTheme.Provider, {\n    value: props.theme\n  }, React.createElement(ResetTheme.Consumer, null, function (tokens) {\n    return React.createElement(Div, _extends({}, _objectSpread({}, tokens, {\n      mode: undefined\n    }), props), props.children);\n  }));\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React from 'react';\nimport Theme from './components/Theme'; // Pre-executes the theme and passes it as a prop to the supplied component.\n// This is useful for ensuring that the current theme is accessible as props\n// in styled-components.\n\nexport function withTheme(InnerComponent) {\n  return function ComponentWithTheme(props) {\n    return React.createElement(Theme.Consumer, null, function (tokens) {\n      return React.createElement(InnerComponent, _extends({}, props, {\n        theme: tokens\n      }));\n    });\n  };\n}","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","// @flow\n\nimport type {\n    APokerState,\n    BettingRound,\n    Card,\n    CardSlot,\n    ChainablePokerState,\n    CommonState,\n    Deck,\n    Game,\n    Player,\n    PlayerEntry,\n    PokerState,\n    Round\n} from '../types';\nimport { assign as reduxAssign } from '../../base/redux';\nimport { OWNER_TABLE } from '../constants';\n\n// workaround for https://github.com/facebook/flow/issues/4312?\nfunction assign<T: Object>(target: ?T, source: ?$Shape<T>): T {\n    return reduxAssign(target, source);\n}\n\nexport function chainableAssign<T: Object>(target: T, source: $Shape<T>): ChainablePokerState {\n    return chain(reduxAssign(target, source));\n}\n\nexport function chain(state: APokerState): ChainablePokerState {\n    return {\n        ...state,\n        then: func => func(state)\n    };\n}\n\nexport function assignToState(\n        state: APokerState,\n        assignFunction: (APokerState) =>$Shape<PokerState>): ChainablePokerState {\n    return chainableAssign(state, assignFunction(state));\n}\n\nexport function assignToCommon(\n        state: APokerState,\n        assignFunction: (CommonState) => $Shape<CommonState>): ChainablePokerState {\n    return assignToState(state, () => {\n        return {\n            common: assign(state.common, assignFunction(state.common))\n        };\n    });\n}\n\nexport function assignToGame(state: APokerState, assignFunction: (Game) => $Shape<Game>): ChainablePokerState {\n    return assignToCommon(state, common => {\n        return {\n            game: assign(common.game, assignFunction(common.game))\n        };\n    });\n}\n\nexport function assignToRound(state: APokerState, assignFunction: (Round) => $Shape<Round>): ChainablePokerState {\n    return assignToGame(state, game => {\n        return {\n            round: assign(game.round, assignFunction(game.round))\n        };\n    });\n}\n\nexport function assignToDeck(state: APokerState, assignFunction: (Deck) => $Shape<Deck>): ChainablePokerState {\n    return assignToRound(state, round => {\n        return {\n            deck: assign(round.deck, round.deck ? assignFunction(round.deck) : round.deck)\n        };\n    });\n}\n\nexport function assignToBettingRound(\n        state: APokerState,\n        assignFunction: (BettingRound) => $Shape<BettingRound>): ChainablePokerState {\n    return assignToRound(state, round => {\n        return {\n            bettingRound: assign(round.bettingRound, assignFunction(round.bettingRound))\n        };\n    });\n}\n\nexport function addToPlayers(\n        state: APokerState,\n        assignFunction: ({ [string]: Player }) => PlayerEntry): ChainablePokerState {\n    const playerEntry = assignFunction(state.common.players);\n\n    return assignToCommon(state, common => {\n        return {\n            players: {\n                ...common.players,\n                ...{ [playerEntry.nick]: playerEntry.player }\n            }\n        };\n    });\n}\n\nexport function assignToAllPlayer(\n        state: APokerState,\n        assignFunction: (string, Player) => $Shape<Player>): ChainablePokerState {\n    return assignToCommon(state, common => {\n        return {\n            players: Object.fromEntries(Object.keys(common.players)\n            .map(nick => [ nick, {\n                ...common.players[nick],\n                ...assignFunction(nick, common.players[nick])\n            } ]))\n        };\n    });\n}\n\nexport function assignToAllCardSlots(\n        state: APokerState,\n        assignFunction: (?string, CardSlot) => $Shape<CardSlot>): ChainablePokerState {\n    return assignToDeck(state, deck => {\n        return {\n            cards: deck.cards.map(cardSlot => assign(cardSlot, assignFunction(cardSlot.owner, cardSlot)))\n        };\n    });\n}\n\nexport function assignToCardSlotsOf(\n        state: APokerState,\n        nick: ?string,\n        assignFunction: (CardSlot) => $Shape<CardSlot>): ChainablePokerState {\n    // eslint-disable-next-line no-confusing-arrow\n    return assignToAllCardSlots(state, (aNick, cardSlot) => nick === aNick ? assignFunction(cardSlot) : {});\n}\n\nexport function assignToPlayers(\n        state: APokerState,\n        nicks: Array<string>,\n        assignFunction: (string, Player) => $Shape<Player>): ChainablePokerState {\n    // eslint-disable-next-line arrow-body-style\n    return assignToAllPlayer(state, (aNick, aPlayer) => {\n        return nicks.includes(aNick) ? assignFunction(aNick, aPlayer) : {};\n    });\n}\n\nexport function assignToPlayer(\n        state: APokerState,\n        nick: ?string,\n        assignFunction: (Player) => $Shape<Player>): ChainablePokerState {\n    // eslint-disable-next-line arrow-body-style\n    return assignToAllPlayer(state, (aNick, aPlayer) => {\n        return nick === aNick ? assignFunction(aPlayer) : {};\n    });\n}\n\nexport function assignToCurrentPlayer(\n        state: APokerState,\n        assignFunction: (Player) => $Shape<Player>): ChainablePokerState {\n    return state.common.game.round.currentPlayer\n        ? assignToPlayer(state, state.common.game.round.currentPlayer, assignFunction)\n        : chain(state);\n}\n\nexport function cardSlotsOf(state: APokerState, nick: string): Array<CardSlot> {\n    return cardSlots(state).filter(cardSlot => cardSlot.owner === nick);\n}\n\nexport function cardSlots(state: APokerState): Array<CardSlot> {\n    return state.common.game.round.deck ? state.common.game.round.deck.cards : [];\n}\n\nexport function countCards(state: APokerState, nick: string) {\n    return cardSlotsOf(state, nick).length;\n}\n\nexport function nextPlayerAfter(state: APokerState, nick: ?string = state.common.game.round.currentPlayer) {\n    const allNicks = Object.keys(state.common.players);\n    const nicks = allNicks.filter(playerNick => !getPlayer(state, playerNick).fold || playerNick === nick);\n\n    return nicks[(nicks.indexOf(nick) + 1) % nicks.length];\n}\n\nexport function currentPlayer(state: APokerState): ?Player {\n    if (state.common.game.round.currentPlayer) {\n        return state.common.players[state.common.game.round.currentPlayer];\n    }\n}\n\nexport function getPlayer(state: APokerState, nick: string): Player {\n    return state.common.players[nick];\n}\n\nexport function players(state: APokerState): Array<Player> {\n    return Object.keys(state.common.players).map(nick => state.common.players[nick]);\n}\n\nexport function activePlayers(state: APokerState): Array<string> {\n    return Object.keys(state.common.players).filter(nick => !getPlayer(state, nick).fold);\n}\n\nexport function cards(state: APokerState, nick: string): Array<Card> {\n    return cardSlotsOf(state, nick).concat(cardSlotsOf(state, OWNER_TABLE))\n        .map(slot => slot.card);\n}\n\nexport function isNotInSeatControl(state: APokerState, nick: string) {\n    return state.nick === null && state.common.players[nick];\n}\n\nexport function logState(state: APokerState) {\n    console.log(state);\n\n    return chain(state);\n}\n\nexport function addStagePerformance(initialState: APokerState, nick: ?string, durationMillis: number = 3500) {\n    if (nick) {\n        return assignToCommon(initialState, common => {\n            return {\n                stagePerformances: common.stagePerformances.concat({\n                    nick,\n                    durationMillis\n                })\n            };\n        });\n    }\n\n    return chain(initialState);\n}\n","//! moment.js\n//! version : 2.19.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\nvar hookCallback;\n\nfunction hooks () {\n    return hookCallback.apply(null, arguments);\n}\n\n// This is done to register the method called with moment()\n// without creating circular dependencies.\nfunction setHookCallback (callback) {\n    hookCallback = callback;\n}\n\nfunction isArray(input) {\n    return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n}\n\nfunction isObject(input) {\n    // IE8 will treat undefined and null as object if it wasn't for\n    // input != null\n    return input != null && Object.prototype.toString.call(input) === '[object Object]';\n}\n\nfunction isObjectEmpty(obj) {\n    if (Object.getOwnPropertyNames) {\n        return (Object.getOwnPropertyNames(obj).length === 0);\n    } else {\n        var k;\n        for (k in obj) {\n            if (obj.hasOwnProperty(k)) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n\nfunction isUndefined(input) {\n    return input === void 0;\n}\n\nfunction isNumber(input) {\n    return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n}\n\nfunction isDate(input) {\n    return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n}\n\nfunction map(arr, fn) {\n    var res = [], i;\n    for (i = 0; i < arr.length; ++i) {\n        res.push(fn(arr[i], i));\n    }\n    return res;\n}\n\nfunction hasOwnProp(a, b) {\n    return Object.prototype.hasOwnProperty.call(a, b);\n}\n\nfunction extend(a, b) {\n    for (var i in b) {\n        if (hasOwnProp(b, i)) {\n            a[i] = b[i];\n        }\n    }\n\n    if (hasOwnProp(b, 'toString')) {\n        a.toString = b.toString;\n    }\n\n    if (hasOwnProp(b, 'valueOf')) {\n        a.valueOf = b.valueOf;\n    }\n\n    return a;\n}\n\nfunction createUTC (input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, true).utc();\n}\n\nfunction defaultParsingFlags() {\n    // We need to deep clone this object.\n    return {\n        empty           : false,\n        unusedTokens    : [],\n        unusedInput     : [],\n        overflow        : -2,\n        charsLeftOver   : 0,\n        nullInput       : false,\n        invalidMonth    : null,\n        invalidFormat   : false,\n        userInvalidated : false,\n        iso             : false,\n        parsedDateParts : [],\n        meridiem        : null,\n        rfc2822         : false,\n        weekdayMismatch : false\n    };\n}\n\nfunction getParsingFlags(m) {\n    if (m._pf == null) {\n        m._pf = defaultParsingFlags();\n    }\n    return m._pf;\n}\n\nvar some;\nif (Array.prototype.some) {\n    some = Array.prototype.some;\n} else {\n    some = function (fun) {\n        var t = Object(this);\n        var len = t.length >>> 0;\n\n        for (var i = 0; i < len; i++) {\n            if (i in t && fun.call(this, t[i], i, t)) {\n                return true;\n            }\n        }\n\n        return false;\n    };\n}\n\nfunction isValid(m) {\n    if (m._isValid == null) {\n        var flags = getParsingFlags(m);\n        var parsedParts = some.call(flags.parsedDateParts, function (i) {\n            return i != null;\n        });\n        var isNowValid = !isNaN(m._d.getTime()) &&\n            flags.overflow < 0 &&\n            !flags.empty &&\n            !flags.invalidMonth &&\n            !flags.invalidWeekday &&\n            !flags.weekdayMismatch &&\n            !flags.nullInput &&\n            !flags.invalidFormat &&\n            !flags.userInvalidated &&\n            (!flags.meridiem || (flags.meridiem && parsedParts));\n\n        if (m._strict) {\n            isNowValid = isNowValid &&\n                flags.charsLeftOver === 0 &&\n                flags.unusedTokens.length === 0 &&\n                flags.bigHour === undefined;\n        }\n\n        if (Object.isFrozen == null || !Object.isFrozen(m)) {\n            m._isValid = isNowValid;\n        }\n        else {\n            return isNowValid;\n        }\n    }\n    return m._isValid;\n}\n\nfunction createInvalid (flags) {\n    var m = createUTC(NaN);\n    if (flags != null) {\n        extend(getParsingFlags(m), flags);\n    }\n    else {\n        getParsingFlags(m).userInvalidated = true;\n    }\n\n    return m;\n}\n\n// Plugins that add properties should also add the key here (null value),\n// so we can properly clone ourselves.\nvar momentProperties = hooks.momentProperties = [];\n\nfunction copyConfig(to, from) {\n    var i, prop, val;\n\n    if (!isUndefined(from._isAMomentObject)) {\n        to._isAMomentObject = from._isAMomentObject;\n    }\n    if (!isUndefined(from._i)) {\n        to._i = from._i;\n    }\n    if (!isUndefined(from._f)) {\n        to._f = from._f;\n    }\n    if (!isUndefined(from._l)) {\n        to._l = from._l;\n    }\n    if (!isUndefined(from._strict)) {\n        to._strict = from._strict;\n    }\n    if (!isUndefined(from._tzm)) {\n        to._tzm = from._tzm;\n    }\n    if (!isUndefined(from._isUTC)) {\n        to._isUTC = from._isUTC;\n    }\n    if (!isUndefined(from._offset)) {\n        to._offset = from._offset;\n    }\n    if (!isUndefined(from._pf)) {\n        to._pf = getParsingFlags(from);\n    }\n    if (!isUndefined(from._locale)) {\n        to._locale = from._locale;\n    }\n\n    if (momentProperties.length > 0) {\n        for (i = 0; i < momentProperties.length; i++) {\n            prop = momentProperties[i];\n            val = from[prop];\n            if (!isUndefined(val)) {\n                to[prop] = val;\n            }\n        }\n    }\n\n    return to;\n}\n\nvar updateInProgress = false;\n\n// Moment prototype object\nfunction Moment(config) {\n    copyConfig(this, config);\n    this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n    if (!this.isValid()) {\n        this._d = new Date(NaN);\n    }\n    // Prevent infinite loop in case updateOffset creates new moment\n    // objects.\n    if (updateInProgress === false) {\n        updateInProgress = true;\n        hooks.updateOffset(this);\n        updateInProgress = false;\n    }\n}\n\nfunction isMoment (obj) {\n    return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n}\n\nfunction absFloor (number) {\n    if (number < 0) {\n        // -0 -> 0\n        return Math.ceil(number) || 0;\n    } else {\n        return Math.floor(number);\n    }\n}\n\nfunction toInt(argumentForCoercion) {\n    var coercedNumber = +argumentForCoercion,\n        value = 0;\n\n    if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n        value = absFloor(coercedNumber);\n    }\n\n    return value;\n}\n\n// compare two arrays, return the number of differences\nfunction compareArrays(array1, array2, dontConvert) {\n    var len = Math.min(array1.length, array2.length),\n        lengthDiff = Math.abs(array1.length - array2.length),\n        diffs = 0,\n        i;\n    for (i = 0; i < len; i++) {\n        if ((dontConvert && array1[i] !== array2[i]) ||\n            (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n            diffs++;\n        }\n    }\n    return diffs + lengthDiff;\n}\n\nfunction warn(msg) {\n    if (hooks.suppressDeprecationWarnings === false &&\n            (typeof console !==  'undefined') && console.warn) {\n        console.warn('Deprecation warning: ' + msg);\n    }\n}\n\nfunction deprecate(msg, fn) {\n    var firstTime = true;\n\n    return extend(function () {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(null, msg);\n        }\n        if (firstTime) {\n            var args = [];\n            var arg;\n            for (var i = 0; i < arguments.length; i++) {\n                arg = '';\n                if (typeof arguments[i] === 'object') {\n                    arg += '\\n[' + i + '] ';\n                    for (var key in arguments[0]) {\n                        arg += key + ': ' + arguments[0][key] + ', ';\n                    }\n                    arg = arg.slice(0, -2); // Remove trailing comma and space\n                } else {\n                    arg = arguments[i];\n                }\n                args.push(arg);\n            }\n            warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n            firstTime = false;\n        }\n        return fn.apply(this, arguments);\n    }, fn);\n}\n\nvar deprecations = {};\n\nfunction deprecateSimple(name, msg) {\n    if (hooks.deprecationHandler != null) {\n        hooks.deprecationHandler(name, msg);\n    }\n    if (!deprecations[name]) {\n        warn(msg);\n        deprecations[name] = true;\n    }\n}\n\nhooks.suppressDeprecationWarnings = false;\nhooks.deprecationHandler = null;\n\nfunction isFunction(input) {\n    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n}\n\nfunction set (config) {\n    var prop, i;\n    for (i in config) {\n        prop = config[i];\n        if (isFunction(prop)) {\n            this[i] = prop;\n        } else {\n            this['_' + i] = prop;\n        }\n    }\n    this._config = config;\n    // Lenient ordinal parsing accepts just a number in addition to\n    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n    // TODO: Remove \"ordinalParse\" fallback in next major release.\n    this._dayOfMonthOrdinalParseLenient = new RegExp(\n        (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n            '|' + (/\\d{1,2}/).source);\n}\n\nfunction mergeConfigs(parentConfig, childConfig) {\n    var res = extend({}, parentConfig), prop;\n    for (prop in childConfig) {\n        if (hasOwnProp(childConfig, prop)) {\n            if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                res[prop] = {};\n                extend(res[prop], parentConfig[prop]);\n                extend(res[prop], childConfig[prop]);\n            } else if (childConfig[prop] != null) {\n                res[prop] = childConfig[prop];\n            } else {\n                delete res[prop];\n            }\n        }\n    }\n    for (prop in parentConfig) {\n        if (hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])) {\n            // make sure changes to properties don't modify parent config\n            res[prop] = extend({}, res[prop]);\n        }\n    }\n    return res;\n}\n\nfunction Locale(config) {\n    if (config != null) {\n        this.set(config);\n    }\n}\n\nvar keys;\n\nif (Object.keys) {\n    keys = Object.keys;\n} else {\n    keys = function (obj) {\n        var i, res = [];\n        for (i in obj) {\n            if (hasOwnProp(obj, i)) {\n                res.push(i);\n            }\n        }\n        return res;\n    };\n}\n\nvar defaultCalendar = {\n    sameDay : '[Today at] LT',\n    nextDay : '[Tomorrow at] LT',\n    nextWeek : 'dddd [at] LT',\n    lastDay : '[Yesterday at] LT',\n    lastWeek : '[Last] dddd [at] LT',\n    sameElse : 'L'\n};\n\nfunction calendar (key, mom, now) {\n    var output = this._calendar[key] || this._calendar['sameElse'];\n    return isFunction(output) ? output.call(mom, now) : output;\n}\n\nvar defaultLongDateFormat = {\n    LTS  : 'h:mm:ss A',\n    LT   : 'h:mm A',\n    L    : 'MM/DD/YYYY',\n    LL   : 'MMMM D, YYYY',\n    LLL  : 'MMMM D, YYYY h:mm A',\n    LLLL : 'dddd, MMMM D, YYYY h:mm A'\n};\n\nfunction longDateFormat (key) {\n    var format = this._longDateFormat[key],\n        formatUpper = this._longDateFormat[key.toUpperCase()];\n\n    if (format || !formatUpper) {\n        return format;\n    }\n\n    this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n        return val.slice(1);\n    });\n\n    return this._longDateFormat[key];\n}\n\nvar defaultInvalidDate = 'Invalid date';\n\nfunction invalidDate () {\n    return this._invalidDate;\n}\n\nvar defaultOrdinal = '%d';\nvar defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\nfunction ordinal (number) {\n    return this._ordinal.replace('%d', number);\n}\n\nvar defaultRelativeTime = {\n    future : 'in %s',\n    past   : '%s ago',\n    s  : 'a few seconds',\n    ss : '%d seconds',\n    m  : 'a minute',\n    mm : '%d minutes',\n    h  : 'an hour',\n    hh : '%d hours',\n    d  : 'a day',\n    dd : '%d days',\n    M  : 'a month',\n    MM : '%d months',\n    y  : 'a year',\n    yy : '%d years'\n};\n\nfunction relativeTime (number, withoutSuffix, string, isFuture) {\n    var output = this._relativeTime[string];\n    return (isFunction(output)) ?\n        output(number, withoutSuffix, string, isFuture) :\n        output.replace(/%d/i, number);\n}\n\nfunction pastFuture (diff, output) {\n    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n    return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n}\n\nvar aliases = {};\n\nfunction addUnitAlias (unit, shorthand) {\n    var lowerCase = unit.toLowerCase();\n    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n}\n\nfunction normalizeUnits(units) {\n    return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n}\n\nfunction normalizeObjectUnits(inputObject) {\n    var normalizedInput = {},\n        normalizedProp,\n        prop;\n\n    for (prop in inputObject) {\n        if (hasOwnProp(inputObject, prop)) {\n            normalizedProp = normalizeUnits(prop);\n            if (normalizedProp) {\n                normalizedInput[normalizedProp] = inputObject[prop];\n            }\n        }\n    }\n\n    return normalizedInput;\n}\n\nvar priorities = {};\n\nfunction addUnitPriority(unit, priority) {\n    priorities[unit] = priority;\n}\n\nfunction getPrioritizedUnits(unitsObj) {\n    var units = [];\n    for (var u in unitsObj) {\n        units.push({unit: u, priority: priorities[u]});\n    }\n    units.sort(function (a, b) {\n        return a.priority - b.priority;\n    });\n    return units;\n}\n\nfunction zeroFill(number, targetLength, forceSign) {\n    var absNumber = '' + Math.abs(number),\n        zerosToFill = targetLength - absNumber.length,\n        sign = number >= 0;\n    return (sign ? (forceSign ? '+' : '') : '-') +\n        Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n}\n\nvar formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\nvar localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\nvar formatFunctions = {};\n\nvar formatTokenFunctions = {};\n\n// token:    'M'\n// padded:   ['MM', 2]\n// ordinal:  'Mo'\n// callback: function () { this.month() + 1 }\nfunction addFormatToken (token, padded, ordinal, callback) {\n    var func = callback;\n    if (typeof callback === 'string') {\n        func = function () {\n            return this[callback]();\n        };\n    }\n    if (token) {\n        formatTokenFunctions[token] = func;\n    }\n    if (padded) {\n        formatTokenFunctions[padded[0]] = function () {\n            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n        };\n    }\n    if (ordinal) {\n        formatTokenFunctions[ordinal] = function () {\n            return this.localeData().ordinal(func.apply(this, arguments), token);\n        };\n    }\n}\n\nfunction removeFormattingTokens(input) {\n    if (input.match(/\\[[\\s\\S]/)) {\n        return input.replace(/^\\[|\\]$/g, '');\n    }\n    return input.replace(/\\\\/g, '');\n}\n\nfunction makeFormatFunction(format) {\n    var array = format.match(formattingTokens), i, length;\n\n    for (i = 0, length = array.length; i < length; i++) {\n        if (formatTokenFunctions[array[i]]) {\n            array[i] = formatTokenFunctions[array[i]];\n        } else {\n            array[i] = removeFormattingTokens(array[i]);\n        }\n    }\n\n    return function (mom) {\n        var output = '', i;\n        for (i = 0; i < length; i++) {\n            output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n        }\n        return output;\n    };\n}\n\n// format date using native date object\nfunction formatMoment(m, format) {\n    if (!m.isValid()) {\n        return m.localeData().invalidDate();\n    }\n\n    format = expandFormat(format, m.localeData());\n    formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n    return formatFunctions[format](m);\n}\n\nfunction expandFormat(format, locale) {\n    var i = 5;\n\n    function replaceLongDateFormatTokens(input) {\n        return locale.longDateFormat(input) || input;\n    }\n\n    localFormattingTokens.lastIndex = 0;\n    while (i >= 0 && localFormattingTokens.test(format)) {\n        format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n        localFormattingTokens.lastIndex = 0;\n        i -= 1;\n    }\n\n    return format;\n}\n\nvar match1         = /\\d/;            //       0 - 9\nvar match2         = /\\d\\d/;          //      00 - 99\nvar match3         = /\\d{3}/;         //     000 - 999\nvar match4         = /\\d{4}/;         //    0000 - 9999\nvar match6         = /[+-]?\\d{6}/;    // -999999 - 999999\nvar match1to2      = /\\d\\d?/;         //       0 - 99\nvar match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\nvar match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\nvar match1to3      = /\\d{1,3}/;       //       0 - 999\nvar match1to4      = /\\d{1,4}/;       //       0 - 9999\nvar match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\nvar matchUnsigned  = /\\d+/;           //       0 - inf\nvar matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\nvar matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\nvar matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\nvar matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n// any word (or two) characters or numbers including two/three word month in arabic.\n// includes scottish gaelic two word and hyphenated months\nvar matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n\nvar regexes = {};\n\nfunction addRegexToken (token, regex, strictRegex) {\n    regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n        return (isStrict && strictRegex) ? strictRegex : regex;\n    };\n}\n\nfunction getParseRegexForToken (token, config) {\n    if (!hasOwnProp(regexes, token)) {\n        return new RegExp(unescapeFormat(token));\n    }\n\n    return regexes[token](config._strict, config._locale);\n}\n\n// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\nfunction unescapeFormat(s) {\n    return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n        return p1 || p2 || p3 || p4;\n    }));\n}\n\nfunction regexEscape(s) {\n    return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nvar tokens = {};\n\nfunction addParseToken (token, callback) {\n    var i, func = callback;\n    if (typeof token === 'string') {\n        token = [token];\n    }\n    if (isNumber(callback)) {\n        func = function (input, array) {\n            array[callback] = toInt(input);\n        };\n    }\n    for (i = 0; i < token.length; i++) {\n        tokens[token[i]] = func;\n    }\n}\n\nfunction addWeekParseToken (token, callback) {\n    addParseToken(token, function (input, array, config, token) {\n        config._w = config._w || {};\n        callback(input, config._w, config, token);\n    });\n}\n\nfunction addTimeToArrayFromToken(token, input, config) {\n    if (input != null && hasOwnProp(tokens, token)) {\n        tokens[token](input, config._a, config, token);\n    }\n}\n\nvar YEAR = 0;\nvar MONTH = 1;\nvar DATE = 2;\nvar HOUR = 3;\nvar MINUTE = 4;\nvar SECOND = 5;\nvar MILLISECOND = 6;\nvar WEEK = 7;\nvar WEEKDAY = 8;\n\n// FORMATTING\n\naddFormatToken('Y', 0, 0, function () {\n    var y = this.year();\n    return y <= 9999 ? '' + y : '+' + y;\n});\n\naddFormatToken(0, ['YY', 2], 0, function () {\n    return this.year() % 100;\n});\n\naddFormatToken(0, ['YYYY',   4],       0, 'year');\naddFormatToken(0, ['YYYYY',  5],       0, 'year');\naddFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n// ALIASES\n\naddUnitAlias('year', 'y');\n\n// PRIORITIES\n\naddUnitPriority('year', 1);\n\n// PARSING\n\naddRegexToken('Y',      matchSigned);\naddRegexToken('YY',     match1to2, match2);\naddRegexToken('YYYY',   match1to4, match4);\naddRegexToken('YYYYY',  match1to6, match6);\naddRegexToken('YYYYYY', match1to6, match6);\n\naddParseToken(['YYYYY', 'YYYYYY'], YEAR);\naddParseToken('YYYY', function (input, array) {\n    array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n});\naddParseToken('YY', function (input, array) {\n    array[YEAR] = hooks.parseTwoDigitYear(input);\n});\naddParseToken('Y', function (input, array) {\n    array[YEAR] = parseInt(input, 10);\n});\n\n// HELPERS\n\nfunction daysInYear(year) {\n    return isLeapYear(year) ? 366 : 365;\n}\n\nfunction isLeapYear(year) {\n    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n\n// HOOKS\n\nhooks.parseTwoDigitYear = function (input) {\n    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n};\n\n// MOMENTS\n\nvar getSetYear = makeGetSet('FullYear', true);\n\nfunction getIsLeapYear () {\n    return isLeapYear(this.year());\n}\n\nfunction makeGetSet (unit, keepTime) {\n    return function (value) {\n        if (value != null) {\n            set$1(this, unit, value);\n            hooks.updateOffset(this, keepTime);\n            return this;\n        } else {\n            return get(this, unit);\n        }\n    };\n}\n\nfunction get (mom, unit) {\n    return mom.isValid() ?\n        mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n}\n\nfunction set$1 (mom, unit, value) {\n    if (mom.isValid() && !isNaN(value)) {\n        if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n        }\n        else {\n            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n        }\n    }\n}\n\n// MOMENTS\n\nfunction stringGet (units) {\n    units = normalizeUnits(units);\n    if (isFunction(this[units])) {\n        return this[units]();\n    }\n    return this;\n}\n\n\nfunction stringSet (units, value) {\n    if (typeof units === 'object') {\n        units = normalizeObjectUnits(units);\n        var prioritized = getPrioritizedUnits(units);\n        for (var i = 0; i < prioritized.length; i++) {\n            this[prioritized[i].unit](units[prioritized[i].unit]);\n        }\n    } else {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units](value);\n        }\n    }\n    return this;\n}\n\nfunction mod(n, x) {\n    return ((n % x) + x) % x;\n}\n\nvar indexOf;\n\nif (Array.prototype.indexOf) {\n    indexOf = Array.prototype.indexOf;\n} else {\n    indexOf = function (o) {\n        // I know\n        var i;\n        for (i = 0; i < this.length; ++i) {\n            if (this[i] === o) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\n\nfunction daysInMonth(year, month) {\n    if (isNaN(year) || isNaN(month)) {\n        return NaN;\n    }\n    var modMonth = mod(month, 12);\n    year += (month - modMonth) / 12;\n    return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n}\n\n// FORMATTING\n\naddFormatToken('M', ['MM', 2], 'Mo', function () {\n    return this.month() + 1;\n});\n\naddFormatToken('MMM', 0, 0, function (format) {\n    return this.localeData().monthsShort(this, format);\n});\n\naddFormatToken('MMMM', 0, 0, function (format) {\n    return this.localeData().months(this, format);\n});\n\n// ALIASES\n\naddUnitAlias('month', 'M');\n\n// PRIORITY\n\naddUnitPriority('month', 8);\n\n// PARSING\n\naddRegexToken('M',    match1to2);\naddRegexToken('MM',   match1to2, match2);\naddRegexToken('MMM',  function (isStrict, locale) {\n    return locale.monthsShortRegex(isStrict);\n});\naddRegexToken('MMMM', function (isStrict, locale) {\n    return locale.monthsRegex(isStrict);\n});\n\naddParseToken(['M', 'MM'], function (input, array) {\n    array[MONTH] = toInt(input) - 1;\n});\n\naddParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n    var month = config._locale.monthsParse(input, token, config._strict);\n    // if we didn't find a month name, mark the date as invalid.\n    if (month != null) {\n        array[MONTH] = month;\n    } else {\n        getParsingFlags(config).invalidMonth = input;\n    }\n});\n\n// LOCALES\n\nvar MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\nvar defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\nfunction localeMonths (m, format) {\n    if (!m) {\n        return isArray(this._months) ? this._months :\n            this._months['standalone'];\n    }\n    return isArray(this._months) ? this._months[m.month()] :\n        this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n}\n\nvar defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\nfunction localeMonthsShort (m, format) {\n    if (!m) {\n        return isArray(this._monthsShort) ? this._monthsShort :\n            this._monthsShort['standalone'];\n    }\n    return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n        this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n}\n\nfunction handleStrictParse(monthName, format, strict) {\n    var i, ii, mom, llc = monthName.toLocaleLowerCase();\n    if (!this._monthsParse) {\n        // this is not used\n        this._monthsParse = [];\n        this._longMonthsParse = [];\n        this._shortMonthsParse = [];\n        for (i = 0; i < 12; ++i) {\n            mom = createUTC([2000, i]);\n            this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n            this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n        }\n    }\n\n    if (strict) {\n        if (format === 'MMM') {\n            ii = indexOf.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    } else {\n        if (format === 'MMM') {\n            ii = indexOf.call(this._shortMonthsParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf.call(this._longMonthsParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    }\n}\n\nfunction localeMonthsParse (monthName, format, strict) {\n    var i, mom, regex;\n\n    if (this._monthsParseExact) {\n        return handleStrictParse.call(this, monthName, format, strict);\n    }\n\n    if (!this._monthsParse) {\n        this._monthsParse = [];\n        this._longMonthsParse = [];\n        this._shortMonthsParse = [];\n    }\n\n    // TODO: add sorting\n    // Sorting makes sure if one month (or abbr) is a prefix of another\n    // see sorting in computeMonthsParse\n    for (i = 0; i < 12; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, i]);\n        if (strict && !this._longMonthsParse[i]) {\n            this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n            this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n        }\n        if (!strict && !this._monthsParse[i]) {\n            regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n            this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n        }\n        // test the regex\n        if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n            return i;\n        } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n            return i;\n        } else if (!strict && this._monthsParse[i].test(monthName)) {\n            return i;\n        }\n    }\n}\n\n// MOMENTS\n\nfunction setMonth (mom, value) {\n    var dayOfMonth;\n\n    if (!mom.isValid()) {\n        // No op\n        return mom;\n    }\n\n    if (typeof value === 'string') {\n        if (/^\\d+$/.test(value)) {\n            value = toInt(value);\n        } else {\n            value = mom.localeData().monthsParse(value);\n            // TODO: Another silent failure?\n            if (!isNumber(value)) {\n                return mom;\n            }\n        }\n    }\n\n    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n    return mom;\n}\n\nfunction getSetMonth (value) {\n    if (value != null) {\n        setMonth(this, value);\n        hooks.updateOffset(this, true);\n        return this;\n    } else {\n        return get(this, 'Month');\n    }\n}\n\nfunction getDaysInMonth () {\n    return daysInMonth(this.year(), this.month());\n}\n\nvar defaultMonthsShortRegex = matchWord;\nfunction monthsShortRegex (isStrict) {\n    if (this._monthsParseExact) {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            computeMonthsParse.call(this);\n        }\n        if (isStrict) {\n            return this._monthsShortStrictRegex;\n        } else {\n            return this._monthsShortRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_monthsShortRegex')) {\n            this._monthsShortRegex = defaultMonthsShortRegex;\n        }\n        return this._monthsShortStrictRegex && isStrict ?\n            this._monthsShortStrictRegex : this._monthsShortRegex;\n    }\n}\n\nvar defaultMonthsRegex = matchWord;\nfunction monthsRegex (isStrict) {\n    if (this._monthsParseExact) {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            computeMonthsParse.call(this);\n        }\n        if (isStrict) {\n            return this._monthsStrictRegex;\n        } else {\n            return this._monthsRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            this._monthsRegex = defaultMonthsRegex;\n        }\n        return this._monthsStrictRegex && isStrict ?\n            this._monthsStrictRegex : this._monthsRegex;\n    }\n}\n\nfunction computeMonthsParse () {\n    function cmpLenRev(a, b) {\n        return b.length - a.length;\n    }\n\n    var shortPieces = [], longPieces = [], mixedPieces = [],\n        i, mom;\n    for (i = 0; i < 12; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, i]);\n        shortPieces.push(this.monthsShort(mom, ''));\n        longPieces.push(this.months(mom, ''));\n        mixedPieces.push(this.months(mom, ''));\n        mixedPieces.push(this.monthsShort(mom, ''));\n    }\n    // Sorting makes sure if one month (or abbr) is a prefix of another it\n    // will match the longer piece.\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n    for (i = 0; i < 12; i++) {\n        shortPieces[i] = regexEscape(shortPieces[i]);\n        longPieces[i] = regexEscape(longPieces[i]);\n    }\n    for (i = 0; i < 24; i++) {\n        mixedPieces[i] = regexEscape(mixedPieces[i]);\n    }\n\n    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._monthsShortRegex = this._monthsRegex;\n    this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n}\n\nfunction createDate (y, m, d, h, M, s, ms) {\n    // can't just apply() to create a date:\n    // https://stackoverflow.com/q/181348\n    var date = new Date(y, m, d, h, M, s, ms);\n\n    // the date constructor remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n        date.setFullYear(y);\n    }\n    return date;\n}\n\nfunction createUTCDate (y) {\n    var date = new Date(Date.UTC.apply(null, arguments));\n\n    // the Date.UTC function remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n        date.setUTCFullYear(y);\n    }\n    return date;\n}\n\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n        fwd = 7 + dow - doy,\n        // first-week day local weekday -- which local weekday is fwd\n        fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n    return -fwdlw + fwd - 1;\n}\n\n// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\nfunction dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n    var localWeekday = (7 + weekday - dow) % 7,\n        weekOffset = firstWeekOffset(year, dow, doy),\n        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n        resYear, resDayOfYear;\n\n    if (dayOfYear <= 0) {\n        resYear = year - 1;\n        resDayOfYear = daysInYear(resYear) + dayOfYear;\n    } else if (dayOfYear > daysInYear(year)) {\n        resYear = year + 1;\n        resDayOfYear = dayOfYear - daysInYear(year);\n    } else {\n        resYear = year;\n        resDayOfYear = dayOfYear;\n    }\n\n    return {\n        year: resYear,\n        dayOfYear: resDayOfYear\n    };\n}\n\nfunction weekOfYear(mom, dow, doy) {\n    var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n        resWeek, resYear;\n\n    if (week < 1) {\n        resYear = mom.year() - 1;\n        resWeek = week + weeksInYear(resYear, dow, doy);\n    } else if (week > weeksInYear(mom.year(), dow, doy)) {\n        resWeek = week - weeksInYear(mom.year(), dow, doy);\n        resYear = mom.year() + 1;\n    } else {\n        resYear = mom.year();\n        resWeek = week;\n    }\n\n    return {\n        week: resWeek,\n        year: resYear\n    };\n}\n\nfunction weeksInYear(year, dow, doy) {\n    var weekOffset = firstWeekOffset(year, dow, doy),\n        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n}\n\n// FORMATTING\n\naddFormatToken('w', ['ww', 2], 'wo', 'week');\naddFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n// ALIASES\n\naddUnitAlias('week', 'w');\naddUnitAlias('isoWeek', 'W');\n\n// PRIORITIES\n\naddUnitPriority('week', 5);\naddUnitPriority('isoWeek', 5);\n\n// PARSING\n\naddRegexToken('w',  match1to2);\naddRegexToken('ww', match1to2, match2);\naddRegexToken('W',  match1to2);\naddRegexToken('WW', match1to2, match2);\n\naddWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n    week[token.substr(0, 1)] = toInt(input);\n});\n\n// HELPERS\n\n// LOCALES\n\nfunction localeWeek (mom) {\n    return weekOfYear(mom, this._week.dow, this._week.doy).week;\n}\n\nvar defaultLocaleWeek = {\n    dow : 0, // Sunday is the first day of the week.\n    doy : 6  // The week that contains Jan 1st is the first week of the year.\n};\n\nfunction localeFirstDayOfWeek () {\n    return this._week.dow;\n}\n\nfunction localeFirstDayOfYear () {\n    return this._week.doy;\n}\n\n// MOMENTS\n\nfunction getSetWeek (input) {\n    var week = this.localeData().week(this);\n    return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\nfunction getSetISOWeek (input) {\n    var week = weekOfYear(this, 1, 4).week;\n    return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\n// FORMATTING\n\naddFormatToken('d', 0, 'do', 'day');\n\naddFormatToken('dd', 0, 0, function (format) {\n    return this.localeData().weekdaysMin(this, format);\n});\n\naddFormatToken('ddd', 0, 0, function (format) {\n    return this.localeData().weekdaysShort(this, format);\n});\n\naddFormatToken('dddd', 0, 0, function (format) {\n    return this.localeData().weekdays(this, format);\n});\n\naddFormatToken('e', 0, 0, 'weekday');\naddFormatToken('E', 0, 0, 'isoWeekday');\n\n// ALIASES\n\naddUnitAlias('day', 'd');\naddUnitAlias('weekday', 'e');\naddUnitAlias('isoWeekday', 'E');\n\n// PRIORITY\naddUnitPriority('day', 11);\naddUnitPriority('weekday', 11);\naddUnitPriority('isoWeekday', 11);\n\n// PARSING\n\naddRegexToken('d',    match1to2);\naddRegexToken('e',    match1to2);\naddRegexToken('E',    match1to2);\naddRegexToken('dd',   function (isStrict, locale) {\n    return locale.weekdaysMinRegex(isStrict);\n});\naddRegexToken('ddd',   function (isStrict, locale) {\n    return locale.weekdaysShortRegex(isStrict);\n});\naddRegexToken('dddd',   function (isStrict, locale) {\n    return locale.weekdaysRegex(isStrict);\n});\n\naddWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n    var weekday = config._locale.weekdaysParse(input, token, config._strict);\n    // if we didn't get a weekday name, mark the date as invalid\n    if (weekday != null) {\n        week.d = weekday;\n    } else {\n        getParsingFlags(config).invalidWeekday = input;\n    }\n});\n\naddWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n    week[token] = toInt(input);\n});\n\n// HELPERS\n\nfunction parseWeekday(input, locale) {\n    if (typeof input !== 'string') {\n        return input;\n    }\n\n    if (!isNaN(input)) {\n        return parseInt(input, 10);\n    }\n\n    input = locale.weekdaysParse(input);\n    if (typeof input === 'number') {\n        return input;\n    }\n\n    return null;\n}\n\nfunction parseIsoWeekday(input, locale) {\n    if (typeof input === 'string') {\n        return locale.weekdaysParse(input) % 7 || 7;\n    }\n    return isNaN(input) ? null : input;\n}\n\n// LOCALES\n\nvar defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\nfunction localeWeekdays (m, format) {\n    if (!m) {\n        return isArray(this._weekdays) ? this._weekdays :\n            this._weekdays['standalone'];\n    }\n    return isArray(this._weekdays) ? this._weekdays[m.day()] :\n        this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n}\n\nvar defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\nfunction localeWeekdaysShort (m) {\n    return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n}\n\nvar defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\nfunction localeWeekdaysMin (m) {\n    return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n}\n\nfunction handleStrictParse$1(weekdayName, format, strict) {\n    var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n    if (!this._weekdaysParse) {\n        this._weekdaysParse = [];\n        this._shortWeekdaysParse = [];\n        this._minWeekdaysParse = [];\n\n        for (i = 0; i < 7; ++i) {\n            mom = createUTC([2000, 1]).day(i);\n            this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n            this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n            this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n        }\n    }\n\n    if (strict) {\n        if (format === 'dddd') {\n            ii = indexOf.call(this._weekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else if (format === 'ddd') {\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    } else {\n        if (format === 'dddd') {\n            ii = indexOf.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else if (format === 'ddd') {\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    }\n}\n\nfunction localeWeekdaysParse (weekdayName, format, strict) {\n    var i, mom, regex;\n\n    if (this._weekdaysParseExact) {\n        return handleStrictParse$1.call(this, weekdayName, format, strict);\n    }\n\n    if (!this._weekdaysParse) {\n        this._weekdaysParse = [];\n        this._minWeekdaysParse = [];\n        this._shortWeekdaysParse = [];\n        this._fullWeekdaysParse = [];\n    }\n\n    for (i = 0; i < 7; i++) {\n        // make the regex if we don't have it already\n\n        mom = createUTC([2000, 1]).day(i);\n        if (strict && !this._fullWeekdaysParse[i]) {\n            this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');\n            this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');\n            this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');\n        }\n        if (!this._weekdaysParse[i]) {\n            regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n            this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n        }\n        // test the regex\n        if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n            return i;\n        } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n            return i;\n        } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n            return i;\n        } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n            return i;\n        }\n    }\n}\n\n// MOMENTS\n\nfunction getSetDayOfWeek (input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n    if (input != null) {\n        input = parseWeekday(input, this.localeData());\n        return this.add(input - day, 'd');\n    } else {\n        return day;\n    }\n}\n\nfunction getSetLocaleDayOfWeek (input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n    return input == null ? weekday : this.add(input - weekday, 'd');\n}\n\nfunction getSetISODayOfWeek (input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n\n    // behaves the same as moment#day except\n    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n    // as a setter, sunday should belong to the previous week.\n\n    if (input != null) {\n        var weekday = parseIsoWeekday(input, this.localeData());\n        return this.day(this.day() % 7 ? weekday : weekday - 7);\n    } else {\n        return this.day() || 7;\n    }\n}\n\nvar defaultWeekdaysRegex = matchWord;\nfunction weekdaysRegex (isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysStrictRegex;\n        } else {\n            return this._weekdaysRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            this._weekdaysRegex = defaultWeekdaysRegex;\n        }\n        return this._weekdaysStrictRegex && isStrict ?\n            this._weekdaysStrictRegex : this._weekdaysRegex;\n    }\n}\n\nvar defaultWeekdaysShortRegex = matchWord;\nfunction weekdaysShortRegex (isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysShortStrictRegex;\n        } else {\n            return this._weekdaysShortRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n            this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n        }\n        return this._weekdaysShortStrictRegex && isStrict ?\n            this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n    }\n}\n\nvar defaultWeekdaysMinRegex = matchWord;\nfunction weekdaysMinRegex (isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysMinStrictRegex;\n        } else {\n            return this._weekdaysMinRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n            this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n        }\n        return this._weekdaysMinStrictRegex && isStrict ?\n            this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n    }\n}\n\n\nfunction computeWeekdaysParse () {\n    function cmpLenRev(a, b) {\n        return b.length - a.length;\n    }\n\n    var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n        i, mom, minp, shortp, longp;\n    for (i = 0; i < 7; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, 1]).day(i);\n        minp = this.weekdaysMin(mom, '');\n        shortp = this.weekdaysShort(mom, '');\n        longp = this.weekdays(mom, '');\n        minPieces.push(minp);\n        shortPieces.push(shortp);\n        longPieces.push(longp);\n        mixedPieces.push(minp);\n        mixedPieces.push(shortp);\n        mixedPieces.push(longp);\n    }\n    // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n    // will match the longer piece.\n    minPieces.sort(cmpLenRev);\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n    for (i = 0; i < 7; i++) {\n        shortPieces[i] = regexEscape(shortPieces[i]);\n        longPieces[i] = regexEscape(longPieces[i]);\n        mixedPieces[i] = regexEscape(mixedPieces[i]);\n    }\n\n    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._weekdaysShortRegex = this._weekdaysRegex;\n    this._weekdaysMinRegex = this._weekdaysRegex;\n\n    this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n}\n\n// FORMATTING\n\nfunction hFormat() {\n    return this.hours() % 12 || 12;\n}\n\nfunction kFormat() {\n    return this.hours() || 24;\n}\n\naddFormatToken('H', ['HH', 2], 0, 'hour');\naddFormatToken('h', ['hh', 2], 0, hFormat);\naddFormatToken('k', ['kk', 2], 0, kFormat);\n\naddFormatToken('hmm', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('hmmss', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2);\n});\n\naddFormatToken('Hmm', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('Hmmss', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2);\n});\n\nfunction meridiem (token, lowercase) {\n    addFormatToken(token, 0, 0, function () {\n        return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n    });\n}\n\nmeridiem('a', true);\nmeridiem('A', false);\n\n// ALIASES\n\naddUnitAlias('hour', 'h');\n\n// PRIORITY\naddUnitPriority('hour', 13);\n\n// PARSING\n\nfunction matchMeridiem (isStrict, locale) {\n    return locale._meridiemParse;\n}\n\naddRegexToken('a',  matchMeridiem);\naddRegexToken('A',  matchMeridiem);\naddRegexToken('H',  match1to2);\naddRegexToken('h',  match1to2);\naddRegexToken('k',  match1to2);\naddRegexToken('HH', match1to2, match2);\naddRegexToken('hh', match1to2, match2);\naddRegexToken('kk', match1to2, match2);\n\naddRegexToken('hmm', match3to4);\naddRegexToken('hmmss', match5to6);\naddRegexToken('Hmm', match3to4);\naddRegexToken('Hmmss', match5to6);\n\naddParseToken(['H', 'HH'], HOUR);\naddParseToken(['k', 'kk'], function (input, array, config) {\n    var kInput = toInt(input);\n    array[HOUR] = kInput === 24 ? 0 : kInput;\n});\naddParseToken(['a', 'A'], function (input, array, config) {\n    config._isPm = config._locale.isPM(input);\n    config._meridiem = input;\n});\naddParseToken(['h', 'hh'], function (input, array, config) {\n    array[HOUR] = toInt(input);\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmmss', function (input, array, config) {\n    var pos1 = input.length - 4;\n    var pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('Hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n});\naddParseToken('Hmmss', function (input, array, config) {\n    var pos1 = input.length - 4;\n    var pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n});\n\n// LOCALES\n\nfunction localeIsPM (input) {\n    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n    // Using charAt should be more compatible.\n    return ((input + '').toLowerCase().charAt(0) === 'p');\n}\n\nvar defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\nfunction localeMeridiem (hours, minutes, isLower) {\n    if (hours > 11) {\n        return isLower ? 'pm' : 'PM';\n    } else {\n        return isLower ? 'am' : 'AM';\n    }\n}\n\n\n// MOMENTS\n\n// Setting the hour should keep the time, because the user explicitly\n// specified which hour he wants. So trying to maintain the same hour (in\n// a new timezone) makes sense. Adding/subtracting hours does not follow\n// this rule.\nvar getSetHour = makeGetSet('Hours', true);\n\n// months\n// week\n// weekdays\n// meridiem\nvar baseConfig = {\n    calendar: defaultCalendar,\n    longDateFormat: defaultLongDateFormat,\n    invalidDate: defaultInvalidDate,\n    ordinal: defaultOrdinal,\n    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n    relativeTime: defaultRelativeTime,\n\n    months: defaultLocaleMonths,\n    monthsShort: defaultLocaleMonthsShort,\n\n    week: defaultLocaleWeek,\n\n    weekdays: defaultLocaleWeekdays,\n    weekdaysMin: defaultLocaleWeekdaysMin,\n    weekdaysShort: defaultLocaleWeekdaysShort,\n\n    meridiemParse: defaultLocaleMeridiemParse\n};\n\n// internal storage for locale config files\nvar locales = {};\nvar localeFamilies = {};\nvar globalLocale;\n\nfunction normalizeLocale(key) {\n    return key ? key.toLowerCase().replace('_', '-') : key;\n}\n\n// pick the locale from the array\n// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\nfunction chooseLocale(names) {\n    var i = 0, j, next, locale, split;\n\n    while (i < names.length) {\n        split = normalizeLocale(names[i]).split('-');\n        j = split.length;\n        next = normalizeLocale(names[i + 1]);\n        next = next ? next.split('-') : null;\n        while (j > 0) {\n            locale = loadLocale(split.slice(0, j).join('-'));\n            if (locale) {\n                return locale;\n            }\n            if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                //the next array item is better than a shallower substring of this one\n                break;\n            }\n            j--;\n        }\n        i++;\n    }\n    return null;\n}\n\nfunction loadLocale(name) {\n    var oldLocale = null;\n    // TODO: Find a better way to register and load all the locales in Node\n    if (!locales[name] && (typeof module !== 'undefined') &&\n            module && module.exports) {\n        try {\n            oldLocale = globalLocale._abbr;\n            var aliasedRequire = require;\n            aliasedRequire('./locale/' + name);\n            getSetGlobalLocale(oldLocale);\n        } catch (e) {}\n    }\n    return locales[name];\n}\n\n// This function will load locale and then set the global locale.  If\n// no arguments are passed in, it will simply return the current global\n// locale key.\nfunction getSetGlobalLocale (key, values) {\n    var data;\n    if (key) {\n        if (isUndefined(values)) {\n            data = getLocale(key);\n        }\n        else {\n            data = defineLocale(key, values);\n        }\n\n        if (data) {\n            // moment.duration._locale = moment._locale = data;\n            globalLocale = data;\n        }\n    }\n\n    return globalLocale._abbr;\n}\n\nfunction defineLocale (name, config) {\n    if (config !== null) {\n        var parentConfig = baseConfig;\n        config.abbr = name;\n        if (locales[name] != null) {\n            deprecateSimple('defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                    'an existing locale. moment.defineLocale(localeName, ' +\n                    'config) should only be used for creating a new locale ' +\n                    'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n            parentConfig = locales[name]._config;\n        } else if (config.parentLocale != null) {\n            if (locales[config.parentLocale] != null) {\n                parentConfig = locales[config.parentLocale]._config;\n            } else {\n                if (!localeFamilies[config.parentLocale]) {\n                    localeFamilies[config.parentLocale] = [];\n                }\n                localeFamilies[config.parentLocale].push({\n                    name: name,\n                    config: config\n                });\n                return null;\n            }\n        }\n        locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n        if (localeFamilies[name]) {\n            localeFamilies[name].forEach(function (x) {\n                defineLocale(x.name, x.config);\n            });\n        }\n\n        // backwards compat for now: also set the locale\n        // make sure we set the locale AFTER all child locales have been\n        // created, so we won't end up with the child locale set.\n        getSetGlobalLocale(name);\n\n\n        return locales[name];\n    } else {\n        // useful for testing\n        delete locales[name];\n        return null;\n    }\n}\n\nfunction updateLocale(name, config) {\n    if (config != null) {\n        var locale, tmpLocale, parentConfig = baseConfig;\n        // MERGE\n        tmpLocale = loadLocale(name);\n        if (tmpLocale != null) {\n            parentConfig = tmpLocale._config;\n        }\n        config = mergeConfigs(parentConfig, config);\n        locale = new Locale(config);\n        locale.parentLocale = locales[name];\n        locales[name] = locale;\n\n        // backwards compat for now: also set the locale\n        getSetGlobalLocale(name);\n    } else {\n        // pass null for config to unupdate, useful for tests\n        if (locales[name] != null) {\n            if (locales[name].parentLocale != null) {\n                locales[name] = locales[name].parentLocale;\n            } else if (locales[name] != null) {\n                delete locales[name];\n            }\n        }\n    }\n    return locales[name];\n}\n\n// returns locale data\nfunction getLocale (key) {\n    var locale;\n\n    if (key && key._locale && key._locale._abbr) {\n        key = key._locale._abbr;\n    }\n\n    if (!key) {\n        return globalLocale;\n    }\n\n    if (!isArray(key)) {\n        //short-circuit everything else\n        locale = loadLocale(key);\n        if (locale) {\n            return locale;\n        }\n        key = [key];\n    }\n\n    return chooseLocale(key);\n}\n\nfunction listLocales() {\n    return keys(locales);\n}\n\nfunction checkOverflow (m) {\n    var overflow;\n    var a = m._a;\n\n    if (a && getParsingFlags(m).overflow === -2) {\n        overflow =\n            a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n            a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n            a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n            a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n            a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n            a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n            -1;\n\n        if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n            overflow = DATE;\n        }\n        if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n            overflow = WEEK;\n        }\n        if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n            overflow = WEEKDAY;\n        }\n\n        getParsingFlags(m).overflow = overflow;\n    }\n\n    return m;\n}\n\n// Pick the first defined of two or three arguments.\nfunction defaults(a, b, c) {\n    if (a != null) {\n        return a;\n    }\n    if (b != null) {\n        return b;\n    }\n    return c;\n}\n\nfunction currentDateArray(config) {\n    // hooks is actually the exported moment object\n    var nowValue = new Date(hooks.now());\n    if (config._useUTC) {\n        return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n    }\n    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n}\n\n// convert an array to a date.\n// the array should mirror the parameters below\n// note: all values past the year are optional and will default to the lowest possible value.\n// [year, month, day , hour, minute, second, millisecond]\nfunction configFromArray (config) {\n    var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n    if (config._d) {\n        return;\n    }\n\n    currentDate = currentDateArray(config);\n\n    //compute day of the year from weeks and weekdays\n    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n        dayOfYearFromWeekInfo(config);\n    }\n\n    //if the day of the year is set, figure out what it is\n    if (config._dayOfYear != null) {\n        yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n        if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n            getParsingFlags(config)._overflowDayOfYear = true;\n        }\n\n        date = createUTCDate(yearToUse, 0, config._dayOfYear);\n        config._a[MONTH] = date.getUTCMonth();\n        config._a[DATE] = date.getUTCDate();\n    }\n\n    // Default to current date.\n    // * if no year, month, day of month are given, default to today\n    // * if day of month is given, default month and year\n    // * if month is given, default only year\n    // * if year is given, don't default anything\n    for (i = 0; i < 3 && config._a[i] == null; ++i) {\n        config._a[i] = input[i] = currentDate[i];\n    }\n\n    // Zero out whatever was not defaulted, including time\n    for (; i < 7; i++) {\n        config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n    }\n\n    // Check for 24:00:00.000\n    if (config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0) {\n        config._nextDay = true;\n        config._a[HOUR] = 0;\n    }\n\n    config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n    expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n    // Apply timezone offset from input. The actual utcOffset can be changed\n    // with parseZone.\n    if (config._tzm != null) {\n        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n    }\n\n    if (config._nextDay) {\n        config._a[HOUR] = 24;\n    }\n\n    // check for mismatching day of week\n    if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n        getParsingFlags(config).weekdayMismatch = true;\n    }\n}\n\nfunction dayOfYearFromWeekInfo(config) {\n    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n    w = config._w;\n    if (w.GG != null || w.W != null || w.E != null) {\n        dow = 1;\n        doy = 4;\n\n        // TODO: We need to take the current isoWeekYear, but that depends on\n        // how we interpret now (local, utc, fixed offset). So create\n        // a now version of current config (take local/utc/offset flags, and\n        // create now).\n        weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n        week = defaults(w.W, 1);\n        weekday = defaults(w.E, 1);\n        if (weekday < 1 || weekday > 7) {\n            weekdayOverflow = true;\n        }\n    } else {\n        dow = config._locale._week.dow;\n        doy = config._locale._week.doy;\n\n        var curWeek = weekOfYear(createLocal(), dow, doy);\n\n        weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n        // Default to current week.\n        week = defaults(w.w, curWeek.week);\n\n        if (w.d != null) {\n            // weekday -- low day numbers are considered next week\n            weekday = w.d;\n            if (weekday < 0 || weekday > 6) {\n                weekdayOverflow = true;\n            }\n        } else if (w.e != null) {\n            // local weekday -- counting starts from begining of week\n            weekday = w.e + dow;\n            if (w.e < 0 || w.e > 6) {\n                weekdayOverflow = true;\n            }\n        } else {\n            // default to begining of week\n            weekday = dow;\n        }\n    }\n    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n        getParsingFlags(config)._overflowWeeks = true;\n    } else if (weekdayOverflow != null) {\n        getParsingFlags(config)._overflowWeekday = true;\n    } else {\n        temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n        config._a[YEAR] = temp.year;\n        config._dayOfYear = temp.dayOfYear;\n    }\n}\n\n// iso 8601 regex\n// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\nvar extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\nvar basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\nvar tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\nvar isoDates = [\n    ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n    ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n    ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n    ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n    ['YYYY-DDD', /\\d{4}-\\d{3}/],\n    ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n    ['YYYYYYMMDD', /[+-]\\d{10}/],\n    ['YYYYMMDD', /\\d{8}/],\n    // YYYYMM is NOT allowed by the standard\n    ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n    ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n    ['YYYYDDD', /\\d{7}/]\n];\n\n// iso time formats and regexes\nvar isoTimes = [\n    ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n    ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n    ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n    ['HH:mm', /\\d\\d:\\d\\d/],\n    ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n    ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n    ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n    ['HHmm', /\\d\\d\\d\\d/],\n    ['HH', /\\d\\d/]\n];\n\nvar aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n// date from iso format\nfunction configFromISO(config) {\n    var i, l,\n        string = config._i,\n        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n        allowTime, dateFormat, timeFormat, tzFormat;\n\n    if (match) {\n        getParsingFlags(config).iso = true;\n\n        for (i = 0, l = isoDates.length; i < l; i++) {\n            if (isoDates[i][1].exec(match[1])) {\n                dateFormat = isoDates[i][0];\n                allowTime = isoDates[i][2] !== false;\n                break;\n            }\n        }\n        if (dateFormat == null) {\n            config._isValid = false;\n            return;\n        }\n        if (match[3]) {\n            for (i = 0, l = isoTimes.length; i < l; i++) {\n                if (isoTimes[i][1].exec(match[3])) {\n                    // match[2] should be 'T' or space\n                    timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                    break;\n                }\n            }\n            if (timeFormat == null) {\n                config._isValid = false;\n                return;\n            }\n        }\n        if (!allowTime && timeFormat != null) {\n            config._isValid = false;\n            return;\n        }\n        if (match[4]) {\n            if (tzRegex.exec(match[4])) {\n                tzFormat = 'Z';\n            } else {\n                config._isValid = false;\n                return;\n            }\n        }\n        config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n        configFromStringAndFormat(config);\n    } else {\n        config._isValid = false;\n    }\n}\n\n// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\nvar rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\nfunction extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n    var result = [\n        untruncateYear(yearStr),\n        defaultLocaleMonthsShort.indexOf(monthStr),\n        parseInt(dayStr, 10),\n        parseInt(hourStr, 10),\n        parseInt(minuteStr, 10)\n    ];\n\n    if (secondStr) {\n        result.push(parseInt(secondStr, 10));\n    }\n\n    return result;\n}\n\nfunction untruncateYear(yearStr) {\n    var year = parseInt(yearStr, 10);\n    if (year <= 49) {\n        return 2000 + year;\n    } else if (year <= 999) {\n        return 1900 + year;\n    }\n    return year;\n}\n\nfunction preprocessRFC2822(s) {\n    // Remove comments and folding whitespace and replace multiple-spaces with a single space\n    return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').trim();\n}\n\nfunction checkWeekday(weekdayStr, parsedInput, config) {\n    if (weekdayStr) {\n        // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n        var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n            weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n        if (weekdayProvided !== weekdayActual) {\n            getParsingFlags(config).weekdayMismatch = true;\n            config._isValid = false;\n            return false;\n        }\n    }\n    return true;\n}\n\nvar obsOffsets = {\n    UT: 0,\n    GMT: 0,\n    EDT: -4 * 60,\n    EST: -5 * 60,\n    CDT: -5 * 60,\n    CST: -6 * 60,\n    MDT: -6 * 60,\n    MST: -7 * 60,\n    PDT: -7 * 60,\n    PST: -8 * 60\n};\n\nfunction calculateOffset(obsOffset, militaryOffset, numOffset) {\n    if (obsOffset) {\n        return obsOffsets[obsOffset];\n    } else if (militaryOffset) {\n        // the only allowed military tz is Z\n        return 0;\n    } else {\n        var hm = parseInt(numOffset, 10);\n        var m = hm % 100, h = (hm - m) / 100;\n        return h * 60 + m;\n    }\n}\n\n// date and time from ref 2822 format\nfunction configFromRFC2822(config) {\n    var match = rfc2822.exec(preprocessRFC2822(config._i));\n    if (match) {\n        var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n        if (!checkWeekday(match[1], parsedArray, config)) {\n            return;\n        }\n\n        config._a = parsedArray;\n        config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n        config._d = createUTCDate.apply(null, config._a);\n        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n        getParsingFlags(config).rfc2822 = true;\n    } else {\n        config._isValid = false;\n    }\n}\n\n// date from iso format or fallback\nfunction configFromString(config) {\n    var matched = aspNetJsonRegex.exec(config._i);\n\n    if (matched !== null) {\n        config._d = new Date(+matched[1]);\n        return;\n    }\n\n    configFromISO(config);\n    if (config._isValid === false) {\n        delete config._isValid;\n    } else {\n        return;\n    }\n\n    configFromRFC2822(config);\n    if (config._isValid === false) {\n        delete config._isValid;\n    } else {\n        return;\n    }\n\n    // Final attempt, use Input Fallback\n    hooks.createFromInputFallback(config);\n}\n\nhooks.createFromInputFallback = deprecate(\n    'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n    'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n    'discouraged and will be removed in an upcoming major release. Please refer to ' +\n    'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n    function (config) {\n        config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n    }\n);\n\n// constant that refers to the ISO standard\nhooks.ISO_8601 = function () {};\n\n// constant that refers to the RFC 2822 form\nhooks.RFC_2822 = function () {};\n\n// date from string and format string\nfunction configFromStringAndFormat(config) {\n    // TODO: Move this to another part of the creation flow to prevent circular deps\n    if (config._f === hooks.ISO_8601) {\n        configFromISO(config);\n        return;\n    }\n    if (config._f === hooks.RFC_2822) {\n        configFromRFC2822(config);\n        return;\n    }\n    config._a = [];\n    getParsingFlags(config).empty = true;\n\n    // This array is used to make a Date, either with `new Date` or `Date.UTC`\n    var string = '' + config._i,\n        i, parsedInput, tokens, token, skipped,\n        stringLength = string.length,\n        totalParsedInputLength = 0;\n\n    tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n    for (i = 0; i < tokens.length; i++) {\n        token = tokens[i];\n        parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n        // console.log('token', token, 'parsedInput', parsedInput,\n        //         'regex', getParseRegexForToken(token, config));\n        if (parsedInput) {\n            skipped = string.substr(0, string.indexOf(parsedInput));\n            if (skipped.length > 0) {\n                getParsingFlags(config).unusedInput.push(skipped);\n            }\n            string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n            totalParsedInputLength += parsedInput.length;\n        }\n        // don't parse if it's not a known token\n        if (formatTokenFunctions[token]) {\n            if (parsedInput) {\n                getParsingFlags(config).empty = false;\n            }\n            else {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n            addTimeToArrayFromToken(token, parsedInput, config);\n        }\n        else if (config._strict && !parsedInput) {\n            getParsingFlags(config).unusedTokens.push(token);\n        }\n    }\n\n    // add remaining unparsed input length to the string\n    getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n    if (string.length > 0) {\n        getParsingFlags(config).unusedInput.push(string);\n    }\n\n    // clear _12h flag if hour is <= 12\n    if (config._a[HOUR] <= 12 &&\n        getParsingFlags(config).bigHour === true &&\n        config._a[HOUR] > 0) {\n        getParsingFlags(config).bigHour = undefined;\n    }\n\n    getParsingFlags(config).parsedDateParts = config._a.slice(0);\n    getParsingFlags(config).meridiem = config._meridiem;\n    // handle meridiem\n    config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n    configFromArray(config);\n    checkOverflow(config);\n}\n\n\nfunction meridiemFixWrap (locale, hour, meridiem) {\n    var isPm;\n\n    if (meridiem == null) {\n        // nothing to do\n        return hour;\n    }\n    if (locale.meridiemHour != null) {\n        return locale.meridiemHour(hour, meridiem);\n    } else if (locale.isPM != null) {\n        // Fallback\n        isPm = locale.isPM(meridiem);\n        if (isPm && hour < 12) {\n            hour += 12;\n        }\n        if (!isPm && hour === 12) {\n            hour = 0;\n        }\n        return hour;\n    } else {\n        // this is not supposed to happen\n        return hour;\n    }\n}\n\n// date from string and array of format strings\nfunction configFromStringAndArray(config) {\n    var tempConfig,\n        bestMoment,\n\n        scoreToBeat,\n        i,\n        currentScore;\n\n    if (config._f.length === 0) {\n        getParsingFlags(config).invalidFormat = true;\n        config._d = new Date(NaN);\n        return;\n    }\n\n    for (i = 0; i < config._f.length; i++) {\n        currentScore = 0;\n        tempConfig = copyConfig({}, config);\n        if (config._useUTC != null) {\n            tempConfig._useUTC = config._useUTC;\n        }\n        tempConfig._f = config._f[i];\n        configFromStringAndFormat(tempConfig);\n\n        if (!isValid(tempConfig)) {\n            continue;\n        }\n\n        // if there is any input that was not parsed add a penalty for that format\n        currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n        //or tokens\n        currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n        getParsingFlags(tempConfig).score = currentScore;\n\n        if (scoreToBeat == null || currentScore < scoreToBeat) {\n            scoreToBeat = currentScore;\n            bestMoment = tempConfig;\n        }\n    }\n\n    extend(config, bestMoment || tempConfig);\n}\n\nfunction configFromObject(config) {\n    if (config._d) {\n        return;\n    }\n\n    var i = normalizeObjectUnits(config._i);\n    config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n        return obj && parseInt(obj, 10);\n    });\n\n    configFromArray(config);\n}\n\nfunction createFromConfig (config) {\n    var res = new Moment(checkOverflow(prepareConfig(config)));\n    if (res._nextDay) {\n        // Adding is smart enough around DST\n        res.add(1, 'd');\n        res._nextDay = undefined;\n    }\n\n    return res;\n}\n\nfunction prepareConfig (config) {\n    var input = config._i,\n        format = config._f;\n\n    config._locale = config._locale || getLocale(config._l);\n\n    if (input === null || (format === undefined && input === '')) {\n        return createInvalid({nullInput: true});\n    }\n\n    if (typeof input === 'string') {\n        config._i = input = config._locale.preparse(input);\n    }\n\n    if (isMoment(input)) {\n        return new Moment(checkOverflow(input));\n    } else if (isDate(input)) {\n        config._d = input;\n    } else if (isArray(format)) {\n        configFromStringAndArray(config);\n    } else if (format) {\n        configFromStringAndFormat(config);\n    }  else {\n        configFromInput(config);\n    }\n\n    if (!isValid(config)) {\n        config._d = null;\n    }\n\n    return config;\n}\n\nfunction configFromInput(config) {\n    var input = config._i;\n    if (isUndefined(input)) {\n        config._d = new Date(hooks.now());\n    } else if (isDate(input)) {\n        config._d = new Date(input.valueOf());\n    } else if (typeof input === 'string') {\n        configFromString(config);\n    } else if (isArray(input)) {\n        config._a = map(input.slice(0), function (obj) {\n            return parseInt(obj, 10);\n        });\n        configFromArray(config);\n    } else if (isObject(input)) {\n        configFromObject(config);\n    } else if (isNumber(input)) {\n        // from milliseconds\n        config._d = new Date(input);\n    } else {\n        hooks.createFromInputFallback(config);\n    }\n}\n\nfunction createLocalOrUTC (input, format, locale, strict, isUTC) {\n    var c = {};\n\n    if (locale === true || locale === false) {\n        strict = locale;\n        locale = undefined;\n    }\n\n    if ((isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)) {\n        input = undefined;\n    }\n    // object construction must be done this way.\n    // https://github.com/moment/moment/issues/1423\n    c._isAMomentObject = true;\n    c._useUTC = c._isUTC = isUTC;\n    c._l = locale;\n    c._i = input;\n    c._f = format;\n    c._strict = strict;\n\n    return createFromConfig(c);\n}\n\nfunction createLocal (input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, false);\n}\n\nvar prototypeMin = deprecate(\n    'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n    function () {\n        var other = createLocal.apply(null, arguments);\n        if (this.isValid() && other.isValid()) {\n            return other < this ? this : other;\n        } else {\n            return createInvalid();\n        }\n    }\n);\n\nvar prototypeMax = deprecate(\n    'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n    function () {\n        var other = createLocal.apply(null, arguments);\n        if (this.isValid() && other.isValid()) {\n            return other > this ? this : other;\n        } else {\n            return createInvalid();\n        }\n    }\n);\n\n// Pick a moment m from moments so that m[fn](other) is true for all\n// other. This relies on the function fn to be transitive.\n//\n// moments should either be an array of moment objects or an array, whose\n// first element is an array of moment objects.\nfunction pickBy(fn, moments) {\n    var res, i;\n    if (moments.length === 1 && isArray(moments[0])) {\n        moments = moments[0];\n    }\n    if (!moments.length) {\n        return createLocal();\n    }\n    res = moments[0];\n    for (i = 1; i < moments.length; ++i) {\n        if (!moments[i].isValid() || moments[i][fn](res)) {\n            res = moments[i];\n        }\n    }\n    return res;\n}\n\n// TODO: Use [].sort instead?\nfunction min () {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isBefore', args);\n}\n\nfunction max () {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isAfter', args);\n}\n\nvar now = function () {\n    return Date.now ? Date.now() : +(new Date());\n};\n\nvar ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\nfunction isDurationValid(m) {\n    for (var key in m) {\n        if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n            return false;\n        }\n    }\n\n    var unitHasDecimal = false;\n    for (var i = 0; i < ordering.length; ++i) {\n        if (m[ordering[i]]) {\n            if (unitHasDecimal) {\n                return false; // only allow non-integers for smallest unit\n            }\n            if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                unitHasDecimal = true;\n            }\n        }\n    }\n\n    return true;\n}\n\nfunction isValid$1() {\n    return this._isValid;\n}\n\nfunction createInvalid$1() {\n    return createDuration(NaN);\n}\n\nfunction Duration (duration) {\n    var normalizedInput = normalizeObjectUnits(duration),\n        years = normalizedInput.year || 0,\n        quarters = normalizedInput.quarter || 0,\n        months = normalizedInput.month || 0,\n        weeks = normalizedInput.week || 0,\n        days = normalizedInput.day || 0,\n        hours = normalizedInput.hour || 0,\n        minutes = normalizedInput.minute || 0,\n        seconds = normalizedInput.second || 0,\n        milliseconds = normalizedInput.millisecond || 0;\n\n    this._isValid = isDurationValid(normalizedInput);\n\n    // representation for dateAddRemove\n    this._milliseconds = +milliseconds +\n        seconds * 1e3 + // 1000\n        minutes * 6e4 + // 1000 * 60\n        hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n    // Because of dateAddRemove treats 24 hours as different from a\n    // day when working around DST, we need to store them separately\n    this._days = +days +\n        weeks * 7;\n    // It is impossible to translate months into days without knowing\n    // which months you are are talking about, so we have to store\n    // it separately.\n    this._months = +months +\n        quarters * 3 +\n        years * 12;\n\n    this._data = {};\n\n    this._locale = getLocale();\n\n    this._bubble();\n}\n\nfunction isDuration (obj) {\n    return obj instanceof Duration;\n}\n\nfunction absRound (number) {\n    if (number < 0) {\n        return Math.round(-1 * number) * -1;\n    } else {\n        return Math.round(number);\n    }\n}\n\n// FORMATTING\n\nfunction offset (token, separator) {\n    addFormatToken(token, 0, 0, function () {\n        var offset = this.utcOffset();\n        var sign = '+';\n        if (offset < 0) {\n            offset = -offset;\n            sign = '-';\n        }\n        return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n    });\n}\n\noffset('Z', ':');\noffset('ZZ', '');\n\n// PARSING\n\naddRegexToken('Z',  matchShortOffset);\naddRegexToken('ZZ', matchShortOffset);\naddParseToken(['Z', 'ZZ'], function (input, array, config) {\n    config._useUTC = true;\n    config._tzm = offsetFromString(matchShortOffset, input);\n});\n\n// HELPERS\n\n// timezone chunker\n// '+10:00' > ['10',  '00']\n// '-1530'  > ['-15', '30']\nvar chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\nfunction offsetFromString(matcher, string) {\n    var matches = (string || '').match(matcher);\n\n    if (matches === null) {\n        return null;\n    }\n\n    var chunk   = matches[matches.length - 1] || [];\n    var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n    var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n    return minutes === 0 ?\n      0 :\n      parts[0] === '+' ? minutes : -minutes;\n}\n\n// Return a moment from input, that is local/utc/zone equivalent to model.\nfunction cloneWithOffset(input, model) {\n    var res, diff;\n    if (model._isUTC) {\n        res = model.clone();\n        diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n        // Use low-level api, because this fn is low-level api.\n        res._d.setTime(res._d.valueOf() + diff);\n        hooks.updateOffset(res, false);\n        return res;\n    } else {\n        return createLocal(input).local();\n    }\n}\n\nfunction getDateOffset (m) {\n    // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n    // https://github.com/moment/moment/pull/1871\n    return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n}\n\n// HOOKS\n\n// This function will be called whenever a moment is mutated.\n// It is intended to keep the offset in sync with the timezone.\nhooks.updateOffset = function () {};\n\n// MOMENTS\n\n// keepLocalTime = true means only change the timezone, without\n// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n// +0200, so we adjust the time as needed, to be valid.\n//\n// Keeping the time actually adds/subtracts (one hour)\n// from the actual represented time. That is why we call updateOffset\n// a second time. In case it wants us to change the offset again\n// _changeInProgress == true case, then we have to adjust, because\n// there is no such time in the given timezone.\nfunction getSetOffset (input, keepLocalTime, keepMinutes) {\n    var offset = this._offset || 0,\n        localAdjust;\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    if (input != null) {\n        if (typeof input === 'string') {\n            input = offsetFromString(matchShortOffset, input);\n            if (input === null) {\n                return this;\n            }\n        } else if (Math.abs(input) < 16 && !keepMinutes) {\n            input = input * 60;\n        }\n        if (!this._isUTC && keepLocalTime) {\n            localAdjust = getDateOffset(this);\n        }\n        this._offset = input;\n        this._isUTC = true;\n        if (localAdjust != null) {\n            this.add(localAdjust, 'm');\n        }\n        if (offset !== input) {\n            if (!keepLocalTime || this._changeInProgress) {\n                addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n            } else if (!this._changeInProgress) {\n                this._changeInProgress = true;\n                hooks.updateOffset(this, true);\n                this._changeInProgress = null;\n            }\n        }\n        return this;\n    } else {\n        return this._isUTC ? offset : getDateOffset(this);\n    }\n}\n\nfunction getSetZone (input, keepLocalTime) {\n    if (input != null) {\n        if (typeof input !== 'string') {\n            input = -input;\n        }\n\n        this.utcOffset(input, keepLocalTime);\n\n        return this;\n    } else {\n        return -this.utcOffset();\n    }\n}\n\nfunction setOffsetToUTC (keepLocalTime) {\n    return this.utcOffset(0, keepLocalTime);\n}\n\nfunction setOffsetToLocal (keepLocalTime) {\n    if (this._isUTC) {\n        this.utcOffset(0, keepLocalTime);\n        this._isUTC = false;\n\n        if (keepLocalTime) {\n            this.subtract(getDateOffset(this), 'm');\n        }\n    }\n    return this;\n}\n\nfunction setOffsetToParsedOffset () {\n    if (this._tzm != null) {\n        this.utcOffset(this._tzm, false, true);\n    } else if (typeof this._i === 'string') {\n        var tZone = offsetFromString(matchOffset, this._i);\n        if (tZone != null) {\n            this.utcOffset(tZone);\n        }\n        else {\n            this.utcOffset(0, true);\n        }\n    }\n    return this;\n}\n\nfunction hasAlignedHourOffset (input) {\n    if (!this.isValid()) {\n        return false;\n    }\n    input = input ? createLocal(input).utcOffset() : 0;\n\n    return (this.utcOffset() - input) % 60 === 0;\n}\n\nfunction isDaylightSavingTime () {\n    return (\n        this.utcOffset() > this.clone().month(0).utcOffset() ||\n        this.utcOffset() > this.clone().month(5).utcOffset()\n    );\n}\n\nfunction isDaylightSavingTimeShifted () {\n    if (!isUndefined(this._isDSTShifted)) {\n        return this._isDSTShifted;\n    }\n\n    var c = {};\n\n    copyConfig(c, this);\n    c = prepareConfig(c);\n\n    if (c._a) {\n        var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n        this._isDSTShifted = this.isValid() &&\n            compareArrays(c._a, other.toArray()) > 0;\n    } else {\n        this._isDSTShifted = false;\n    }\n\n    return this._isDSTShifted;\n}\n\nfunction isLocal () {\n    return this.isValid() ? !this._isUTC : false;\n}\n\nfunction isUtcOffset () {\n    return this.isValid() ? this._isUTC : false;\n}\n\nfunction isUtc () {\n    return this.isValid() ? this._isUTC && this._offset === 0 : false;\n}\n\n// ASP.NET json date format regex\nvar aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n// and further modified to allow for strings containing both week and day\nvar isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\nfunction createDuration (input, key) {\n    var duration = input,\n        // matching against regexp is expensive, do it on demand\n        match = null,\n        sign,\n        ret,\n        diffRes;\n\n    if (isDuration(input)) {\n        duration = {\n            ms : input._milliseconds,\n            d  : input._days,\n            M  : input._months\n        };\n    } else if (isNumber(input)) {\n        duration = {};\n        if (key) {\n            duration[key] = input;\n        } else {\n            duration.milliseconds = input;\n        }\n    } else if (!!(match = aspNetRegex.exec(input))) {\n        sign = (match[1] === '-') ? -1 : 1;\n        duration = {\n            y  : 0,\n            d  : toInt(match[DATE])                         * sign,\n            h  : toInt(match[HOUR])                         * sign,\n            m  : toInt(match[MINUTE])                       * sign,\n            s  : toInt(match[SECOND])                       * sign,\n            ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n        };\n    } else if (!!(match = isoRegex.exec(input))) {\n        sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1;\n        duration = {\n            y : parseIso(match[2], sign),\n            M : parseIso(match[3], sign),\n            w : parseIso(match[4], sign),\n            d : parseIso(match[5], sign),\n            h : parseIso(match[6], sign),\n            m : parseIso(match[7], sign),\n            s : parseIso(match[8], sign)\n        };\n    } else if (duration == null) {// checks for null or undefined\n        duration = {};\n    } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n        diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n        duration = {};\n        duration.ms = diffRes.milliseconds;\n        duration.M = diffRes.months;\n    }\n\n    ret = new Duration(duration);\n\n    if (isDuration(input) && hasOwnProp(input, '_locale')) {\n        ret._locale = input._locale;\n    }\n\n    return ret;\n}\n\ncreateDuration.fn = Duration.prototype;\ncreateDuration.invalid = createInvalid$1;\n\nfunction parseIso (inp, sign) {\n    // We'd normally use ~~inp for this, but unfortunately it also\n    // converts floats to ints.\n    // inp may be undefined, so careful calling replace on it.\n    var res = inp && parseFloat(inp.replace(',', '.'));\n    // apply sign while we're at it\n    return (isNaN(res) ? 0 : res) * sign;\n}\n\nfunction positiveMomentsDifference(base, other) {\n    var res = {milliseconds: 0, months: 0};\n\n    res.months = other.month() - base.month() +\n        (other.year() - base.year()) * 12;\n    if (base.clone().add(res.months, 'M').isAfter(other)) {\n        --res.months;\n    }\n\n    res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n    return res;\n}\n\nfunction momentsDifference(base, other) {\n    var res;\n    if (!(base.isValid() && other.isValid())) {\n        return {milliseconds: 0, months: 0};\n    }\n\n    other = cloneWithOffset(other, base);\n    if (base.isBefore(other)) {\n        res = positiveMomentsDifference(base, other);\n    } else {\n        res = positiveMomentsDifference(other, base);\n        res.milliseconds = -res.milliseconds;\n        res.months = -res.months;\n    }\n\n    return res;\n}\n\n// TODO: remove 'name' arg after deprecation is removed\nfunction createAdder(direction, name) {\n    return function (val, period) {\n        var dur, tmp;\n        //invert the arguments, but complain about it\n        if (period !== null && !isNaN(+period)) {\n            deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n            'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n            tmp = val; val = period; period = tmp;\n        }\n\n        val = typeof val === 'string' ? +val : val;\n        dur = createDuration(val, period);\n        addSubtract(this, dur, direction);\n        return this;\n    };\n}\n\nfunction addSubtract (mom, duration, isAdding, updateOffset) {\n    var milliseconds = duration._milliseconds,\n        days = absRound(duration._days),\n        months = absRound(duration._months);\n\n    if (!mom.isValid()) {\n        // No op\n        return;\n    }\n\n    updateOffset = updateOffset == null ? true : updateOffset;\n\n    if (months) {\n        setMonth(mom, get(mom, 'Month') + months * isAdding);\n    }\n    if (days) {\n        set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n    }\n    if (milliseconds) {\n        mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n    }\n    if (updateOffset) {\n        hooks.updateOffset(mom, days || months);\n    }\n}\n\nvar add      = createAdder(1, 'add');\nvar subtract = createAdder(-1, 'subtract');\n\nfunction getCalendarFormat(myMoment, now) {\n    var diff = myMoment.diff(now, 'days', true);\n    return diff < -6 ? 'sameElse' :\n            diff < -1 ? 'lastWeek' :\n            diff < 0 ? 'lastDay' :\n            diff < 1 ? 'sameDay' :\n            diff < 2 ? 'nextDay' :\n            diff < 7 ? 'nextWeek' : 'sameElse';\n}\n\nfunction calendar$1 (time, formats) {\n    // We want to compare the start of today, vs this.\n    // Getting start-of-today depends on whether we're local/utc/offset or not.\n    var now = time || createLocal(),\n        sod = cloneWithOffset(now, this).startOf('day'),\n        format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n    var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n    return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n}\n\nfunction clone () {\n    return new Moment(this);\n}\n\nfunction isAfter (input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n    if (units === 'millisecond') {\n        return this.valueOf() > localInput.valueOf();\n    } else {\n        return localInput.valueOf() < this.clone().startOf(units).valueOf();\n    }\n}\n\nfunction isBefore (input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n    if (units === 'millisecond') {\n        return this.valueOf() < localInput.valueOf();\n    } else {\n        return this.clone().endOf(units).valueOf() < localInput.valueOf();\n    }\n}\n\nfunction isBetween (from, to, units, inclusivity) {\n    inclusivity = inclusivity || '()';\n    return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n        (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n}\n\nfunction isSame (input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input),\n        inputMs;\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(units || 'millisecond');\n    if (units === 'millisecond') {\n        return this.valueOf() === localInput.valueOf();\n    } else {\n        inputMs = localInput.valueOf();\n        return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n    }\n}\n\nfunction isSameOrAfter (input, units) {\n    return this.isSame(input, units) || this.isAfter(input,units);\n}\n\nfunction isSameOrBefore (input, units) {\n    return this.isSame(input, units) || this.isBefore(input,units);\n}\n\nfunction diff (input, units, asFloat) {\n    var that,\n        zoneDelta,\n        delta, output;\n\n    if (!this.isValid()) {\n        return NaN;\n    }\n\n    that = cloneWithOffset(input, this);\n\n    if (!that.isValid()) {\n        return NaN;\n    }\n\n    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n    units = normalizeUnits(units);\n\n    switch (units) {\n        case 'year': output = monthDiff(this, that) / 12; break;\n        case 'month': output = monthDiff(this, that); break;\n        case 'quarter': output = monthDiff(this, that) / 3; break;\n        case 'second': output = (this - that) / 1e3; break; // 1000\n        case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n        case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n        case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n        case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n        default: output = this - that;\n    }\n\n    return asFloat ? output : absFloor(output);\n}\n\nfunction monthDiff (a, b) {\n    // difference in months\n    var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n        // b is in (anchor - 1 month, anchor + 1 month)\n        anchor = a.clone().add(wholeMonthDiff, 'months'),\n        anchor2, adjust;\n\n    if (b - anchor < 0) {\n        anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n        // linear across the month\n        adjust = (b - anchor) / (anchor - anchor2);\n    } else {\n        anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n        // linear across the month\n        adjust = (b - anchor) / (anchor2 - anchor);\n    }\n\n    //check for negative zero, return zero if negative zero\n    return -(wholeMonthDiff + adjust) || 0;\n}\n\nhooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\nhooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\nfunction toString () {\n    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n}\n\nfunction toISOString() {\n    if (!this.isValid()) {\n        return null;\n    }\n    var m = this.clone().utc();\n    if (m.year() < 0 || m.year() > 9999) {\n        return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n    }\n    if (isFunction(Date.prototype.toISOString)) {\n        // native implementation is ~50x faster, use it when we can\n        return this.toDate().toISOString();\n    }\n    return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n}\n\n/**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\nfunction inspect () {\n    if (!this.isValid()) {\n        return 'moment.invalid(/* ' + this._i + ' */)';\n    }\n    var func = 'moment';\n    var zone = '';\n    if (!this.isLocal()) {\n        func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n        zone = 'Z';\n    }\n    var prefix = '[' + func + '(\"]';\n    var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n    var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n    var suffix = zone + '[\")]';\n\n    return this.format(prefix + year + datetime + suffix);\n}\n\nfunction format (inputString) {\n    if (!inputString) {\n        inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n    }\n    var output = formatMoment(this, inputString);\n    return this.localeData().postformat(output);\n}\n\nfunction from (time, withoutSuffix) {\n    if (this.isValid() &&\n            ((isMoment(time) && time.isValid()) ||\n             createLocal(time).isValid())) {\n        return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction fromNow (withoutSuffix) {\n    return this.from(createLocal(), withoutSuffix);\n}\n\nfunction to (time, withoutSuffix) {\n    if (this.isValid() &&\n            ((isMoment(time) && time.isValid()) ||\n             createLocal(time).isValid())) {\n        return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction toNow (withoutSuffix) {\n    return this.to(createLocal(), withoutSuffix);\n}\n\n// If passed a locale key, it will set the locale for this\n// instance.  Otherwise, it will return the locale configuration\n// variables for this instance.\nfunction locale (key) {\n    var newLocaleData;\n\n    if (key === undefined) {\n        return this._locale._abbr;\n    } else {\n        newLocaleData = getLocale(key);\n        if (newLocaleData != null) {\n            this._locale = newLocaleData;\n        }\n        return this;\n    }\n}\n\nvar lang = deprecate(\n    'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n    function (key) {\n        if (key === undefined) {\n            return this.localeData();\n        } else {\n            return this.locale(key);\n        }\n    }\n);\n\nfunction localeData () {\n    return this._locale;\n}\n\nfunction startOf (units) {\n    units = normalizeUnits(units);\n    // the following switch intentionally omits break keywords\n    // to utilize falling through the cases.\n    switch (units) {\n        case 'year':\n            this.month(0);\n            /* falls through */\n        case 'quarter':\n        case 'month':\n            this.date(1);\n            /* falls through */\n        case 'week':\n        case 'isoWeek':\n        case 'day':\n        case 'date':\n            this.hours(0);\n            /* falls through */\n        case 'hour':\n            this.minutes(0);\n            /* falls through */\n        case 'minute':\n            this.seconds(0);\n            /* falls through */\n        case 'second':\n            this.milliseconds(0);\n    }\n\n    // weeks are a special case\n    if (units === 'week') {\n        this.weekday(0);\n    }\n    if (units === 'isoWeek') {\n        this.isoWeekday(1);\n    }\n\n    // quarters are also special\n    if (units === 'quarter') {\n        this.month(Math.floor(this.month() / 3) * 3);\n    }\n\n    return this;\n}\n\nfunction endOf (units) {\n    units = normalizeUnits(units);\n    if (units === undefined || units === 'millisecond') {\n        return this;\n    }\n\n    // 'date' is an alias for 'day', so it should be considered as such.\n    if (units === 'date') {\n        units = 'day';\n    }\n\n    return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n}\n\nfunction valueOf () {\n    return this._d.valueOf() - ((this._offset || 0) * 60000);\n}\n\nfunction unix () {\n    return Math.floor(this.valueOf() / 1000);\n}\n\nfunction toDate () {\n    return new Date(this.valueOf());\n}\n\nfunction toArray () {\n    var m = this;\n    return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n}\n\nfunction toObject () {\n    var m = this;\n    return {\n        years: m.year(),\n        months: m.month(),\n        date: m.date(),\n        hours: m.hours(),\n        minutes: m.minutes(),\n        seconds: m.seconds(),\n        milliseconds: m.milliseconds()\n    };\n}\n\nfunction toJSON () {\n    // new Date(NaN).toJSON() === null\n    return this.isValid() ? this.toISOString() : null;\n}\n\nfunction isValid$2 () {\n    return isValid(this);\n}\n\nfunction parsingFlags () {\n    return extend({}, getParsingFlags(this));\n}\n\nfunction invalidAt () {\n    return getParsingFlags(this).overflow;\n}\n\nfunction creationData() {\n    return {\n        input: this._i,\n        format: this._f,\n        locale: this._locale,\n        isUTC: this._isUTC,\n        strict: this._strict\n    };\n}\n\n// FORMATTING\n\naddFormatToken(0, ['gg', 2], 0, function () {\n    return this.weekYear() % 100;\n});\n\naddFormatToken(0, ['GG', 2], 0, function () {\n    return this.isoWeekYear() % 100;\n});\n\nfunction addWeekYearFormatToken (token, getter) {\n    addFormatToken(0, [token, token.length], 0, getter);\n}\n\naddWeekYearFormatToken('gggg',     'weekYear');\naddWeekYearFormatToken('ggggg',    'weekYear');\naddWeekYearFormatToken('GGGG',  'isoWeekYear');\naddWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n// ALIASES\n\naddUnitAlias('weekYear', 'gg');\naddUnitAlias('isoWeekYear', 'GG');\n\n// PRIORITY\n\naddUnitPriority('weekYear', 1);\naddUnitPriority('isoWeekYear', 1);\n\n\n// PARSING\n\naddRegexToken('G',      matchSigned);\naddRegexToken('g',      matchSigned);\naddRegexToken('GG',     match1to2, match2);\naddRegexToken('gg',     match1to2, match2);\naddRegexToken('GGGG',   match1to4, match4);\naddRegexToken('gggg',   match1to4, match4);\naddRegexToken('GGGGG',  match1to6, match6);\naddRegexToken('ggggg',  match1to6, match6);\n\naddWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n    week[token.substr(0, 2)] = toInt(input);\n});\n\naddWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n    week[token] = hooks.parseTwoDigitYear(input);\n});\n\n// MOMENTS\n\nfunction getSetWeekYear (input) {\n    return getSetWeekYearHelper.call(this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy);\n}\n\nfunction getSetISOWeekYear (input) {\n    return getSetWeekYearHelper.call(this,\n            input, this.isoWeek(), this.isoWeekday(), 1, 4);\n}\n\nfunction getISOWeeksInYear () {\n    return weeksInYear(this.year(), 1, 4);\n}\n\nfunction getWeeksInYear () {\n    var weekInfo = this.localeData()._week;\n    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n}\n\nfunction getSetWeekYearHelper(input, week, weekday, dow, doy) {\n    var weeksTarget;\n    if (input == null) {\n        return weekOfYear(this, dow, doy).year;\n    } else {\n        weeksTarget = weeksInYear(input, dow, doy);\n        if (week > weeksTarget) {\n            week = weeksTarget;\n        }\n        return setWeekAll.call(this, input, week, weekday, dow, doy);\n    }\n}\n\nfunction setWeekAll(weekYear, week, weekday, dow, doy) {\n    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n    this.year(date.getUTCFullYear());\n    this.month(date.getUTCMonth());\n    this.date(date.getUTCDate());\n    return this;\n}\n\n// FORMATTING\n\naddFormatToken('Q', 0, 'Qo', 'quarter');\n\n// ALIASES\n\naddUnitAlias('quarter', 'Q');\n\n// PRIORITY\n\naddUnitPriority('quarter', 7);\n\n// PARSING\n\naddRegexToken('Q', match1);\naddParseToken('Q', function (input, array) {\n    array[MONTH] = (toInt(input) - 1) * 3;\n});\n\n// MOMENTS\n\nfunction getSetQuarter (input) {\n    return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n}\n\n// FORMATTING\n\naddFormatToken('D', ['DD', 2], 'Do', 'date');\n\n// ALIASES\n\naddUnitAlias('date', 'D');\n\n// PRIOROITY\naddUnitPriority('date', 9);\n\n// PARSING\n\naddRegexToken('D',  match1to2);\naddRegexToken('DD', match1to2, match2);\naddRegexToken('Do', function (isStrict, locale) {\n    // TODO: Remove \"ordinalParse\" fallback in next major release.\n    return isStrict ?\n      (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n      locale._dayOfMonthOrdinalParseLenient;\n});\n\naddParseToken(['D', 'DD'], DATE);\naddParseToken('Do', function (input, array) {\n    array[DATE] = toInt(input.match(match1to2)[0]);\n});\n\n// MOMENTS\n\nvar getSetDayOfMonth = makeGetSet('Date', true);\n\n// FORMATTING\n\naddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n// ALIASES\n\naddUnitAlias('dayOfYear', 'DDD');\n\n// PRIORITY\naddUnitPriority('dayOfYear', 4);\n\n// PARSING\n\naddRegexToken('DDD',  match1to3);\naddRegexToken('DDDD', match3);\naddParseToken(['DDD', 'DDDD'], function (input, array, config) {\n    config._dayOfYear = toInt(input);\n});\n\n// HELPERS\n\n// MOMENTS\n\nfunction getSetDayOfYear (input) {\n    var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n    return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n}\n\n// FORMATTING\n\naddFormatToken('m', ['mm', 2], 0, 'minute');\n\n// ALIASES\n\naddUnitAlias('minute', 'm');\n\n// PRIORITY\n\naddUnitPriority('minute', 14);\n\n// PARSING\n\naddRegexToken('m',  match1to2);\naddRegexToken('mm', match1to2, match2);\naddParseToken(['m', 'mm'], MINUTE);\n\n// MOMENTS\n\nvar getSetMinute = makeGetSet('Minutes', false);\n\n// FORMATTING\n\naddFormatToken('s', ['ss', 2], 0, 'second');\n\n// ALIASES\n\naddUnitAlias('second', 's');\n\n// PRIORITY\n\naddUnitPriority('second', 15);\n\n// PARSING\n\naddRegexToken('s',  match1to2);\naddRegexToken('ss', match1to2, match2);\naddParseToken(['s', 'ss'], SECOND);\n\n// MOMENTS\n\nvar getSetSecond = makeGetSet('Seconds', false);\n\n// FORMATTING\n\naddFormatToken('S', 0, 0, function () {\n    return ~~(this.millisecond() / 100);\n});\n\naddFormatToken(0, ['SS', 2], 0, function () {\n    return ~~(this.millisecond() / 10);\n});\n\naddFormatToken(0, ['SSS', 3], 0, 'millisecond');\naddFormatToken(0, ['SSSS', 4], 0, function () {\n    return this.millisecond() * 10;\n});\naddFormatToken(0, ['SSSSS', 5], 0, function () {\n    return this.millisecond() * 100;\n});\naddFormatToken(0, ['SSSSSS', 6], 0, function () {\n    return this.millisecond() * 1000;\n});\naddFormatToken(0, ['SSSSSSS', 7], 0, function () {\n    return this.millisecond() * 10000;\n});\naddFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n    return this.millisecond() * 100000;\n});\naddFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n    return this.millisecond() * 1000000;\n});\n\n\n// ALIASES\n\naddUnitAlias('millisecond', 'ms');\n\n// PRIORITY\n\naddUnitPriority('millisecond', 16);\n\n// PARSING\n\naddRegexToken('S',    match1to3, match1);\naddRegexToken('SS',   match1to3, match2);\naddRegexToken('SSS',  match1to3, match3);\n\nvar token;\nfor (token = 'SSSS'; token.length <= 9; token += 'S') {\n    addRegexToken(token, matchUnsigned);\n}\n\nfunction parseMs(input, array) {\n    array[MILLISECOND] = toInt(('0.' + input) * 1000);\n}\n\nfor (token = 'S'; token.length <= 9; token += 'S') {\n    addParseToken(token, parseMs);\n}\n// MOMENTS\n\nvar getSetMillisecond = makeGetSet('Milliseconds', false);\n\n// FORMATTING\n\naddFormatToken('z',  0, 0, 'zoneAbbr');\naddFormatToken('zz', 0, 0, 'zoneName');\n\n// MOMENTS\n\nfunction getZoneAbbr () {\n    return this._isUTC ? 'UTC' : '';\n}\n\nfunction getZoneName () {\n    return this._isUTC ? 'Coordinated Universal Time' : '';\n}\n\nvar proto = Moment.prototype;\n\nproto.add               = add;\nproto.calendar          = calendar$1;\nproto.clone             = clone;\nproto.diff              = diff;\nproto.endOf             = endOf;\nproto.format            = format;\nproto.from              = from;\nproto.fromNow           = fromNow;\nproto.to                = to;\nproto.toNow             = toNow;\nproto.get               = stringGet;\nproto.invalidAt         = invalidAt;\nproto.isAfter           = isAfter;\nproto.isBefore          = isBefore;\nproto.isBetween         = isBetween;\nproto.isSame            = isSame;\nproto.isSameOrAfter     = isSameOrAfter;\nproto.isSameOrBefore    = isSameOrBefore;\nproto.isValid           = isValid$2;\nproto.lang              = lang;\nproto.locale            = locale;\nproto.localeData        = localeData;\nproto.max               = prototypeMax;\nproto.min               = prototypeMin;\nproto.parsingFlags      = parsingFlags;\nproto.set               = stringSet;\nproto.startOf           = startOf;\nproto.subtract          = subtract;\nproto.toArray           = toArray;\nproto.toObject          = toObject;\nproto.toDate            = toDate;\nproto.toISOString       = toISOString;\nproto.inspect           = inspect;\nproto.toJSON            = toJSON;\nproto.toString          = toString;\nproto.unix              = unix;\nproto.valueOf           = valueOf;\nproto.creationData      = creationData;\n\n// Year\nproto.year       = getSetYear;\nproto.isLeapYear = getIsLeapYear;\n\n// Week Year\nproto.weekYear    = getSetWeekYear;\nproto.isoWeekYear = getSetISOWeekYear;\n\n// Quarter\nproto.quarter = proto.quarters = getSetQuarter;\n\n// Month\nproto.month       = getSetMonth;\nproto.daysInMonth = getDaysInMonth;\n\n// Week\nproto.week           = proto.weeks        = getSetWeek;\nproto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\nproto.weeksInYear    = getWeeksInYear;\nproto.isoWeeksInYear = getISOWeeksInYear;\n\n// Day\nproto.date       = getSetDayOfMonth;\nproto.day        = proto.days             = getSetDayOfWeek;\nproto.weekday    = getSetLocaleDayOfWeek;\nproto.isoWeekday = getSetISODayOfWeek;\nproto.dayOfYear  = getSetDayOfYear;\n\n// Hour\nproto.hour = proto.hours = getSetHour;\n\n// Minute\nproto.minute = proto.minutes = getSetMinute;\n\n// Second\nproto.second = proto.seconds = getSetSecond;\n\n// Millisecond\nproto.millisecond = proto.milliseconds = getSetMillisecond;\n\n// Offset\nproto.utcOffset            = getSetOffset;\nproto.utc                  = setOffsetToUTC;\nproto.local                = setOffsetToLocal;\nproto.parseZone            = setOffsetToParsedOffset;\nproto.hasAlignedHourOffset = hasAlignedHourOffset;\nproto.isDST                = isDaylightSavingTime;\nproto.isLocal              = isLocal;\nproto.isUtcOffset          = isUtcOffset;\nproto.isUtc                = isUtc;\nproto.isUTC                = isUtc;\n\n// Timezone\nproto.zoneAbbr = getZoneAbbr;\nproto.zoneName = getZoneName;\n\n// Deprecations\nproto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\nproto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\nproto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\nproto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\nproto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\nfunction createUnix (input) {\n    return createLocal(input * 1000);\n}\n\nfunction createInZone () {\n    return createLocal.apply(null, arguments).parseZone();\n}\n\nfunction preParsePostFormat (string) {\n    return string;\n}\n\nvar proto$1 = Locale.prototype;\n\nproto$1.calendar        = calendar;\nproto$1.longDateFormat  = longDateFormat;\nproto$1.invalidDate     = invalidDate;\nproto$1.ordinal         = ordinal;\nproto$1.preparse        = preParsePostFormat;\nproto$1.postformat      = preParsePostFormat;\nproto$1.relativeTime    = relativeTime;\nproto$1.pastFuture      = pastFuture;\nproto$1.set             = set;\n\n// Month\nproto$1.months            =        localeMonths;\nproto$1.monthsShort       =        localeMonthsShort;\nproto$1.monthsParse       =        localeMonthsParse;\nproto$1.monthsRegex       = monthsRegex;\nproto$1.monthsShortRegex  = monthsShortRegex;\n\n// Week\nproto$1.week = localeWeek;\nproto$1.firstDayOfYear = localeFirstDayOfYear;\nproto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n// Day of Week\nproto$1.weekdays       =        localeWeekdays;\nproto$1.weekdaysMin    =        localeWeekdaysMin;\nproto$1.weekdaysShort  =        localeWeekdaysShort;\nproto$1.weekdaysParse  =        localeWeekdaysParse;\n\nproto$1.weekdaysRegex       =        weekdaysRegex;\nproto$1.weekdaysShortRegex  =        weekdaysShortRegex;\nproto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n// Hours\nproto$1.isPM = localeIsPM;\nproto$1.meridiem = localeMeridiem;\n\nfunction get$1 (format, index, field, setter) {\n    var locale = getLocale();\n    var utc = createUTC().set(setter, index);\n    return locale[field](utc, format);\n}\n\nfunction listMonthsImpl (format, index, field) {\n    if (isNumber(format)) {\n        index = format;\n        format = undefined;\n    }\n\n    format = format || '';\n\n    if (index != null) {\n        return get$1(format, index, field, 'month');\n    }\n\n    var i;\n    var out = [];\n    for (i = 0; i < 12; i++) {\n        out[i] = get$1(format, i, field, 'month');\n    }\n    return out;\n}\n\n// ()\n// (5)\n// (fmt, 5)\n// (fmt)\n// (true)\n// (true, 5)\n// (true, fmt, 5)\n// (true, fmt)\nfunction listWeekdaysImpl (localeSorted, format, index, field) {\n    if (typeof localeSorted === 'boolean') {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n    } else {\n        format = localeSorted;\n        index = format;\n        localeSorted = false;\n\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n    }\n\n    var locale = getLocale(),\n        shift = localeSorted ? locale._week.dow : 0;\n\n    if (index != null) {\n        return get$1(format, (index + shift) % 7, field, 'day');\n    }\n\n    var i;\n    var out = [];\n    for (i = 0; i < 7; i++) {\n        out[i] = get$1(format, (i + shift) % 7, field, 'day');\n    }\n    return out;\n}\n\nfunction listMonths (format, index) {\n    return listMonthsImpl(format, index, 'months');\n}\n\nfunction listMonthsShort (format, index) {\n    return listMonthsImpl(format, index, 'monthsShort');\n}\n\nfunction listWeekdays (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n}\n\nfunction listWeekdaysShort (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n}\n\nfunction listWeekdaysMin (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n}\n\ngetSetGlobalLocale('en', {\n    dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (toInt(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    }\n});\n\n// Side effect imports\nhooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\nhooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\nvar mathAbs = Math.abs;\n\nfunction abs () {\n    var data           = this._data;\n\n    this._milliseconds = mathAbs(this._milliseconds);\n    this._days         = mathAbs(this._days);\n    this._months       = mathAbs(this._months);\n\n    data.milliseconds  = mathAbs(data.milliseconds);\n    data.seconds       = mathAbs(data.seconds);\n    data.minutes       = mathAbs(data.minutes);\n    data.hours         = mathAbs(data.hours);\n    data.months        = mathAbs(data.months);\n    data.years         = mathAbs(data.years);\n\n    return this;\n}\n\nfunction addSubtract$1 (duration, input, value, direction) {\n    var other = createDuration(input, value);\n\n    duration._milliseconds += direction * other._milliseconds;\n    duration._days         += direction * other._days;\n    duration._months       += direction * other._months;\n\n    return duration._bubble();\n}\n\n// supports only 2.0-style add(1, 's') or add(duration)\nfunction add$1 (input, value) {\n    return addSubtract$1(this, input, value, 1);\n}\n\n// supports only 2.0-style subtract(1, 's') or subtract(duration)\nfunction subtract$1 (input, value) {\n    return addSubtract$1(this, input, value, -1);\n}\n\nfunction absCeil (number) {\n    if (number < 0) {\n        return Math.floor(number);\n    } else {\n        return Math.ceil(number);\n    }\n}\n\nfunction bubble () {\n    var milliseconds = this._milliseconds;\n    var days         = this._days;\n    var months       = this._months;\n    var data         = this._data;\n    var seconds, minutes, hours, years, monthsFromDays;\n\n    // if we have a mix of positive and negative values, bubble down first\n    // check: https://github.com/moment/moment/issues/2166\n    if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n            (milliseconds <= 0 && days <= 0 && months <= 0))) {\n        milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n        days = 0;\n        months = 0;\n    }\n\n    // The following code bubbles up values, see the tests for\n    // examples of what that means.\n    data.milliseconds = milliseconds % 1000;\n\n    seconds           = absFloor(milliseconds / 1000);\n    data.seconds      = seconds % 60;\n\n    minutes           = absFloor(seconds / 60);\n    data.minutes      = minutes % 60;\n\n    hours             = absFloor(minutes / 60);\n    data.hours        = hours % 24;\n\n    days += absFloor(hours / 24);\n\n    // convert days to months\n    monthsFromDays = absFloor(daysToMonths(days));\n    months += monthsFromDays;\n    days -= absCeil(monthsToDays(monthsFromDays));\n\n    // 12 months -> 1 year\n    years = absFloor(months / 12);\n    months %= 12;\n\n    data.days   = days;\n    data.months = months;\n    data.years  = years;\n\n    return this;\n}\n\nfunction daysToMonths (days) {\n    // 400 years have 146097 days (taking into account leap year rules)\n    // 400 years have 12 months === 4800\n    return days * 4800 / 146097;\n}\n\nfunction monthsToDays (months) {\n    // the reverse of daysToMonths\n    return months * 146097 / 4800;\n}\n\nfunction as (units) {\n    if (!this.isValid()) {\n        return NaN;\n    }\n    var days;\n    var months;\n    var milliseconds = this._milliseconds;\n\n    units = normalizeUnits(units);\n\n    if (units === 'month' || units === 'year') {\n        days   = this._days   + milliseconds / 864e5;\n        months = this._months + daysToMonths(days);\n        return units === 'month' ? months : months / 12;\n    } else {\n        // handle milliseconds separately because of floating point math errors (issue #1867)\n        days = this._days + Math.round(monthsToDays(this._months));\n        switch (units) {\n            case 'week'   : return days / 7     + milliseconds / 6048e5;\n            case 'day'    : return days         + milliseconds / 864e5;\n            case 'hour'   : return days * 24    + milliseconds / 36e5;\n            case 'minute' : return days * 1440  + milliseconds / 6e4;\n            case 'second' : return days * 86400 + milliseconds / 1000;\n            // Math.floor prevents floating point math errors here\n            case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n            default: throw new Error('Unknown unit ' + units);\n        }\n    }\n}\n\n// TODO: Use this.as('ms')?\nfunction valueOf$1 () {\n    if (!this.isValid()) {\n        return NaN;\n    }\n    return (\n        this._milliseconds +\n        this._days * 864e5 +\n        (this._months % 12) * 2592e6 +\n        toInt(this._months / 12) * 31536e6\n    );\n}\n\nfunction makeAs (alias) {\n    return function () {\n        return this.as(alias);\n    };\n}\n\nvar asMilliseconds = makeAs('ms');\nvar asSeconds      = makeAs('s');\nvar asMinutes      = makeAs('m');\nvar asHours        = makeAs('h');\nvar asDays         = makeAs('d');\nvar asWeeks        = makeAs('w');\nvar asMonths       = makeAs('M');\nvar asYears        = makeAs('y');\n\nfunction clone$1 () {\n    return createDuration(this);\n}\n\nfunction get$2 (units) {\n    units = normalizeUnits(units);\n    return this.isValid() ? this[units + 's']() : NaN;\n}\n\nfunction makeGetter(name) {\n    return function () {\n        return this.isValid() ? this._data[name] : NaN;\n    };\n}\n\nvar milliseconds = makeGetter('milliseconds');\nvar seconds      = makeGetter('seconds');\nvar minutes      = makeGetter('minutes');\nvar hours        = makeGetter('hours');\nvar days         = makeGetter('days');\nvar months       = makeGetter('months');\nvar years        = makeGetter('years');\n\nfunction weeks () {\n    return absFloor(this.days() / 7);\n}\n\nvar round = Math.round;\nvar thresholds = {\n    ss: 44,         // a few seconds to seconds\n    s : 45,         // seconds to minute\n    m : 45,         // minutes to hour\n    h : 22,         // hours to day\n    d : 26,         // days to month\n    M : 11          // months to year\n};\n\n// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\nfunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n}\n\nfunction relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n    var duration = createDuration(posNegDuration).abs();\n    var seconds  = round(duration.as('s'));\n    var minutes  = round(duration.as('m'));\n    var hours    = round(duration.as('h'));\n    var days     = round(duration.as('d'));\n    var months   = round(duration.as('M'));\n    var years    = round(duration.as('y'));\n\n    var a = seconds <= thresholds.ss && ['s', seconds]  ||\n            seconds < thresholds.s   && ['ss', seconds] ||\n            minutes <= 1             && ['m']           ||\n            minutes < thresholds.m   && ['mm', minutes] ||\n            hours   <= 1             && ['h']           ||\n            hours   < thresholds.h   && ['hh', hours]   ||\n            days    <= 1             && ['d']           ||\n            days    < thresholds.d   && ['dd', days]    ||\n            months  <= 1             && ['M']           ||\n            months  < thresholds.M   && ['MM', months]  ||\n            years   <= 1             && ['y']           || ['yy', years];\n\n    a[2] = withoutSuffix;\n    a[3] = +posNegDuration > 0;\n    a[4] = locale;\n    return substituteTimeAgo.apply(null, a);\n}\n\n// This function allows you to set the rounding function for relative time strings\nfunction getSetRelativeTimeRounding (roundingFunction) {\n    if (roundingFunction === undefined) {\n        return round;\n    }\n    if (typeof(roundingFunction) === 'function') {\n        round = roundingFunction;\n        return true;\n    }\n    return false;\n}\n\n// This function allows you to set a threshold for relative time strings\nfunction getSetRelativeTimeThreshold (threshold, limit) {\n    if (thresholds[threshold] === undefined) {\n        return false;\n    }\n    if (limit === undefined) {\n        return thresholds[threshold];\n    }\n    thresholds[threshold] = limit;\n    if (threshold === 's') {\n        thresholds.ss = limit - 1;\n    }\n    return true;\n}\n\nfunction humanize (withSuffix) {\n    if (!this.isValid()) {\n        return this.localeData().invalidDate();\n    }\n\n    var locale = this.localeData();\n    var output = relativeTime$1(this, !withSuffix, locale);\n\n    if (withSuffix) {\n        output = locale.pastFuture(+this, output);\n    }\n\n    return locale.postformat(output);\n}\n\nvar abs$1 = Math.abs;\n\nfunction sign(x) {\n    return ((x > 0) - (x < 0)) || +x;\n}\n\nfunction toISOString$1() {\n    // for ISO strings we do not use the normal bubbling rules:\n    //  * milliseconds bubble up until they become hours\n    //  * days do not bubble at all\n    //  * months bubble up until they become years\n    // This is because there is no context-free conversion between hours and days\n    // (think of clock changes)\n    // and also not between days and months (28-31 days per month)\n    if (!this.isValid()) {\n        return this.localeData().invalidDate();\n    }\n\n    var seconds = abs$1(this._milliseconds) / 1000;\n    var days         = abs$1(this._days);\n    var months       = abs$1(this._months);\n    var minutes, hours, years;\n\n    // 3600 seconds -> 60 minutes -> 1 hour\n    minutes           = absFloor(seconds / 60);\n    hours             = absFloor(minutes / 60);\n    seconds %= 60;\n    minutes %= 60;\n\n    // 12 months -> 1 year\n    years  = absFloor(months / 12);\n    months %= 12;\n\n\n    // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n    var Y = years;\n    var M = months;\n    var D = days;\n    var h = hours;\n    var m = minutes;\n    var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n    var total = this.asSeconds();\n\n    if (!total) {\n        // this is the same as C#'s (Noda) and python (isodate)...\n        // but not other JS (goog.date)\n        return 'P0D';\n    }\n\n    var totalSign = total < 0 ? '-' : '';\n    var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n    var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n    var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n    return totalSign + 'P' +\n        (Y ? ymSign + Y + 'Y' : '') +\n        (M ? ymSign + M + 'M' : '') +\n        (D ? daysSign + D + 'D' : '') +\n        ((h || m || s) ? 'T' : '') +\n        (h ? hmsSign + h + 'H' : '') +\n        (m ? hmsSign + m + 'M' : '') +\n        (s ? hmsSign + s + 'S' : '');\n}\n\nvar proto$2 = Duration.prototype;\n\nproto$2.isValid        = isValid$1;\nproto$2.abs            = abs;\nproto$2.add            = add$1;\nproto$2.subtract       = subtract$1;\nproto$2.as             = as;\nproto$2.asMilliseconds = asMilliseconds;\nproto$2.asSeconds      = asSeconds;\nproto$2.asMinutes      = asMinutes;\nproto$2.asHours        = asHours;\nproto$2.asDays         = asDays;\nproto$2.asWeeks        = asWeeks;\nproto$2.asMonths       = asMonths;\nproto$2.asYears        = asYears;\nproto$2.valueOf        = valueOf$1;\nproto$2._bubble        = bubble;\nproto$2.clone          = clone$1;\nproto$2.get            = get$2;\nproto$2.milliseconds   = milliseconds;\nproto$2.seconds        = seconds;\nproto$2.minutes        = minutes;\nproto$2.hours          = hours;\nproto$2.days           = days;\nproto$2.weeks          = weeks;\nproto$2.months         = months;\nproto$2.years          = years;\nproto$2.humanize       = humanize;\nproto$2.toISOString    = toISOString$1;\nproto$2.toString       = toISOString$1;\nproto$2.toJSON         = toISOString$1;\nproto$2.locale         = locale;\nproto$2.localeData     = localeData;\n\n// Deprecations\nproto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\nproto$2.lang = lang;\n\n// Side effect imports\n\n// FORMATTING\n\naddFormatToken('X', 0, 0, 'unix');\naddFormatToken('x', 0, 0, 'valueOf');\n\n// PARSING\n\naddRegexToken('x', matchSigned);\naddRegexToken('X', matchTimestamp);\naddParseToken('X', function (input, array, config) {\n    config._d = new Date(parseFloat(input, 10) * 1000);\n});\naddParseToken('x', function (input, array, config) {\n    config._d = new Date(toInt(input));\n});\n\n// Side effect imports\n\n\nhooks.version = '2.19.4';\n\nsetHookCallback(createLocal);\n\nhooks.fn                    = proto;\nhooks.min                   = min;\nhooks.max                   = max;\nhooks.now                   = now;\nhooks.utc                   = createUTC;\nhooks.unix                  = createUnix;\nhooks.months                = listMonths;\nhooks.isDate                = isDate;\nhooks.locale                = getSetGlobalLocale;\nhooks.invalid               = createInvalid;\nhooks.duration              = createDuration;\nhooks.isMoment              = isMoment;\nhooks.weekdays              = listWeekdays;\nhooks.parseZone             = createInZone;\nhooks.localeData            = getLocale;\nhooks.isDuration            = isDuration;\nhooks.monthsShort           = listMonthsShort;\nhooks.weekdaysMin           = listWeekdaysMin;\nhooks.defineLocale          = defineLocale;\nhooks.updateLocale          = updateLocale;\nhooks.locales               = listLocales;\nhooks.weekdaysShort         = listWeekdaysShort;\nhooks.normalizeUnits        = normalizeUnits;\nhooks.relativeTimeRounding  = getSetRelativeTimeRounding;\nhooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\nhooks.calendarFormat        = getCalendarFormat;\nhooks.prototype             = proto;\n\nreturn hooks;\n\n})));\n","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import * as colors from './colors';\nimport themed from './utils/themed'; // Cards on a board\n\nexport var e100 = themed({\n  light: \"box-shadow: 0 1px 1px \".concat(colors.N50A, \", 0 0 1px 0 \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 1px 1px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Inline dialogs\n\nexport var e200 = themed({\n  light: \"box-shadow: 0 4px 8px -2px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 4px 8px -2px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Modals\n\nexport var e300 = themed({\n  light: \"box-shadow: 0 8px 16px -4px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 8px 16px -4px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Panels\n\nexport var e400 = themed({\n  light: \"box-shadow: 0 12px 24px -6px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 12px 24px -6px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Flag messages (notifications)\n\nexport var e500 = themed({\n  light: \"box-shadow: 0 20px 32px -8px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 20px 32px -8px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n});","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport { gridSize, fontSize } from './index';\n\nvar baseHeading = function baseHeading(size, lineHeight) {\n  return \"\\n  font-size: \".concat(size / fontSize(), \"em;\\n  font-style: inherit;\\n  line-height: \").concat(lineHeight / size, \";\\n\");\n};\n\nexport var h900 = function h900() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(35, 40), colors.heading, gridSize() * 6.5);\n};\nexport var h800 = function h800() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(29, 32), colors.heading, gridSize() * 5);\n};\nexport var h700 = function h700() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(24, 28), colors.heading, gridSize() * 5);\n};\nexport var h600 = function h600() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  margin-top: \", \"px;\\n\"], baseHeading(20, 24), colors.heading, gridSize() * 3.5);\n};\nexport var h500 = function h500() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.006em;\\n  margin-top: \", \"px;\\n\"], baseHeading(16, 20), colors.heading, gridSize() * 3);\n};\nexport var h400 = function h400() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.003em;\\n  margin-top: \", \"px;\\n\"], baseHeading(14, 16), colors.heading, gridSize() * 2);\n};\nexport var h300 = function h300() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n  text-transform: uppercase;\\n\"], baseHeading(12, 16), colors.heading, gridSize() * 2.5);\n};\nexport var h200 = function h200() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n\"], baseHeading(12, 16), colors.subtleHeading, gridSize() * 2);\n};\nexport var h100 = function h100() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 700;\\n  margin-top: \", \"px;\\n\"], baseHeading(11, 16), colors.subtleHeading, gridSize() * 2);\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport exenv from 'exenv';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider && exenv.canUseDOM) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nexport default (function (_ref) {\n  var children = _ref.children,\n      props = _ref.props,\n      theme = _ref.theme;\n  var appearance = _typeof(props) === 'object' ? 'default' : props;\n  var merged = _typeof(props) === 'object' ? _objectSpread({}, props) : {};\n  Object.keys(theme).forEach(function (key) {\n    if (!(key in merged)) {\n      merged[key] = theme[key]({\n        appearance: appearance\n      });\n    }\n  });\n  return children(merged);\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport * as colors from '../colors';\nimport { createTheme } from '../utils/createTheme';\n\nvar orTextColor = function orTextColor(preferred) {\n  return function (p) {\n    return p[preferred] || p.textColor;\n  };\n};\n\nvar Div = styled.div.withConfig({\n  displayName: \"Reset__Div\",\n  componentId: \"sc-15i6ali-0\"\n})([\"\\n  \", \";\\n\"], function (p) {\n  return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n\\n    a {\\n      color: \", \";\\n    }\\n    a:hover {\\n      color: \", \";\\n    }\\n    a:active {\\n      color: \", \";\\n    }\\n    a:focus {\\n      outline-color: \", \";\\n    }\\n    h1,\\n    h2,\\n    h3,\\n    h4,\\n    h5 {\\n      color: \", \";\\n    }\\n    h6 {\\n      color: \", \";\\n    }\\n    small {\\n      color: \", \";\\n    }\\n  \"], p.backgroundColor, p.textColor, orTextColor('linkColor'), orTextColor('linkColorHover'), orTextColor('linkColorActive'), orTextColor('linkColorOutline'), orTextColor('headingColor'), orTextColor('subtleHeadingColor'), orTextColor('subtleTextColor'));\n});\nexport var ResetTheme = createTheme(function () {\n  return {\n    backgroundColor: colors.N0,\n    linkColor: colors.B400,\n    linkColorHover: colors.B300,\n    linkColorActive: colors.B500,\n    linkColorOutline: colors.B100,\n    headingColor: colors.N800,\n    subtleHeadingColor: colors.N200,\n    subtleTextColor: colors.N200,\n    textColor: colors.N900\n  };\n});\nexport function Reset(props) {\n  return React.createElement(ResetTheme.Provider, {\n    value: props.theme\n  }, React.createElement(ResetTheme.Consumer, null, function (tokens) {\n    return React.createElement(Div, _extends({}, _objectSpread({}, tokens, {\n      mode: undefined\n    }), props), props.children);\n  }));\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React from 'react';\nimport Theme from './components/Theme'; // Pre-executes the theme and passes it as a prop to the supplied component.\n// This is useful for ensuring that the current theme is accessible as props\n// in styled-components.\n\nexport function withTheme(InnerComponent) {\n  return function ComponentWithTheme(props) {\n    return React.createElement(Theme.Consumer, null, function (tokens) {\n      return React.createElement(InnerComponent, _extends({}, props, {\n        theme: tokens\n      }));\n    });\n  };\n}","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","/**\n * The type of Redux action which closes a dialog\n *\n * {\n *     type: HIDE_DIALOG\n * }\n */\nexport const HIDE_DIALOG = 'HIDE_DIALOG';\n\n/**\n * The type of Redux action which begins a request to open a dialog.\n *\n * {\n *     type: OPEN_DIALOG,\n *     component: React.Component,\n *     props: PropTypes\n * }\n *\n */\nexport const OPEN_DIALOG = 'OPEN_DIALOG';\n","/* @flow */\n\nimport { ColorSchemeRegistry } from '../color-scheme';\nimport { toState } from '../redux';\n\n/**\n * Checks if any {@code Dialog} is currently open.\n *\n * @param {Function|Object} stateful - The redux store, the redux\n * {@code getState} function, or the redux state itself.\n * @returns {boolean}\n */\nexport function isAnyDialogOpen(stateful: Function) {\n    return Boolean(toState(stateful)['features/base/dialog'].component);\n}\n\n/**\n * Checks if a {@code Dialog} with a specific {@code component} is currently\n * open.\n *\n * @param {Function|Object} stateful - The redux store, the redux\n * {@code getState} function, or the redux state itself.\n * @param {React.Component} component - The {@code component} of a\n * {@code Dialog} to be checked.\n * @returns {boolean}\n */\nexport function isDialogOpen(stateful: Function | Object, component: Object) {\n    return toState(stateful)['features/base/dialog'].component === component;\n}\n\n/**\n * Maps part of the Redux state to the props of any Dialog based component.\n *\n * @param {Object} state - The Redux state.\n * @returns {{\n *     _dialogStyles: StyleType\n * }}\n */\nexport function _abstractMapStateToProps(state: Object): Object {\n    return {\n        _dialogStyles: ColorSchemeRegistry.get(state, 'Dialog')\n    };\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { HIDE_DIALOG, OPEN_DIALOG } from './actionTypes';\nimport { isDialogOpen } from './functions';\n\n/**\n * Signals Dialog to close its dialog.\n *\n * @param {Object} [component] - The {@code Dialog} component to close/hide. If\n * {@code undefined}, closes/hides {@code Dialog} regardless of which\n * component it's rendering; otherwise, closes/hides {@code Dialog} only if\n * it's rendering the specified {@code component}.\n * @returns {{\n *     type: HIDE_DIALOG,\n *     component: (React.Component | undefined)\n * }}\n */\nexport function hideDialog(component: ?Object) {\n    return {\n        type: HIDE_DIALOG,\n        component\n    };\n}\n\n/**\n * Signals Dialog to open dialog.\n *\n * @param {Object} component - The component to display as dialog.\n * @param {Object} [componentProps] - The React {@code Component} props of the\n * specified {@code component}.\n * @returns {{\n *     type: OPEN_DIALOG,\n *     component: React.Component,\n *     componentProps: (Object | undefined)\n * }}\n */\nexport function openDialog(component: Object, componentProps: ?Object) {\n    return {\n        type: OPEN_DIALOG,\n        component,\n        componentProps\n    };\n}\n\n/**\n * Signals Dialog to open a dialog with the specified component if the component\n * is not already open. If it is open, then Dialog is signaled to close its\n * dialog.\n *\n * @param {Object} component - The component to display as dialog.\n * @param {Object} [componentProps] - The React {@code Component} props of the\n * specified {@code component}.\n * @returns {Function}\n */\nexport function toggleDialog(component: Object, componentProps: ?Object) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        if (isDialogOpen(getState, component)) {\n            dispatch(hideDialog(component));\n        } else {\n            dispatch(openDialog(component, componentProps));\n        }\n    };\n}\n","// @flow\n\nimport { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { hideDialog } from '../actions';\nimport type { DialogProps } from '../constants';\n\n/**\n * The type of the React {@code Component} props of {@link AbstractDialog}.\n */\nexport type Props = DialogProps & {\n\n    /**\n     * Used to show/hide the dialog on cancel.\n     */\n    dispatch: Dispatch<any>\n};\n\n/**\n * The type of the React {@code Component} state of {@link AbstractDialog}.\n */\nexport type State = {\n    submitting: ?boolean\n};\n\n/**\n * An abstract implementation of a dialog on Web/React and mobile/react-native.\n */\nexport default class AbstractDialog<P : Props, S : State>\n    extends Component<P, S> {\n\n    _mounted: boolean;\n\n    /**\n     * Initializes a new {@code AbstractDialog} instance.\n     *\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onCancel = this._onCancel.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n        this._onSubmitFulfilled = this._onSubmitFulfilled.bind(this);\n        this._onSubmitRejected = this._onSubmitRejected.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}. Invoked\n     * immediately before mounting occurs.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._mounted = true;\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount()}. Invoked\n     * immediately before this component is unmounted and destroyed.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._mounted = false;\n    }\n\n    /**\n     * Dispatches a redux action to hide this dialog.\n     *\n     * @returns {*} The return value of {@link hideDialog}.\n     */\n    _hide() {\n        return this.props.dispatch(hideDialog());\n    }\n\n    _onCancel: () => void;\n\n    /**\n     * Dispatches a redux action to hide this dialog when it's canceled.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _onCancel() {\n        const { cancelDisabled = false, onCancel } = this.props;\n\n        if (!cancelDisabled && (!onCancel || onCancel())) {\n            this._hide();\n        }\n    }\n\n    _onSubmit: (?string) => void;\n\n    /**\n     * Submits this {@code Dialog}. If the React {@code Component} prop\n     * {@code onSubmit} is defined, the function that is the value of the prop\n     * is invoked. If the function returns a {@code thenable}, then the\n     * resolution of the {@code thenable} is awaited. If the submission\n     * completes successfully, a redux action will be dispatched to hide this\n     * dialog.\n     *\n     * @protected\n     * @param {string} [value] - The submitted value if any.\n     * @returns {void}\n     */\n    _onSubmit(value: ?string) {\n        const { okDisabled = false, onSubmit } = this.props;\n\n        if (!okDisabled) {\n            this.setState({ submitting: true });\n\n            // Invoke the React Compnent prop onSubmit if any.\n            const r = !onSubmit || onSubmit(value);\n\n            // If the invocation returns a thenable, await its resolution;\n            // otherwise, treat the return value as a boolean indicating whether\n            // the submission has completed successfully.\n            let then;\n\n            if (r) {\n                switch (typeof r) {\n                case 'function':\n                case 'object':\n                    then = r.then;\n                    break;\n                }\n            }\n            if (typeof then === 'function' && then.length === 2) {\n                then.call(r, this._onSubmitFulfilled, this._onSubmitRejected);\n            } else if (r) {\n                this._onSubmitFulfilled();\n            } else {\n                this._onSubmitRejected();\n            }\n        }\n    }\n\n    _onSubmitFulfilled: () => void;\n\n    /**\n     * Notifies this {@code AbstractDialog} that it has been submitted\n     * successfully. Dispatches a redux action to hide this dialog after it has\n     * been submitted.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onSubmitFulfilled() {\n        this._mounted && this.setState({ submitting: false });\n\n        this._hide();\n    }\n\n    _onSubmitRejected: () => void;\n\n    /**\n     * Notifies this {@code AbstractDialog} that its submission has failed.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onSubmitRejected() {\n        this._mounted && this.setState({ submitting: false });\n    }\n}\n","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport invariant from 'tiny-invariant';\nimport { canUseDOM } from 'exenv';\n\nvar createContainer = function createContainer(zIndex) {\n  var container = document.createElement('div');\n  container.setAttribute('class', 'atlaskit-portal');\n  container.setAttribute('style', \"z-index: \".concat(zIndex, \";\"));\n  return container;\n};\n\nvar body = function body() {\n  invariant(document && document.body, 'cannot find document.body');\n  return document.body;\n};\n\nvar portalParent = function portalParent() {\n  var parentElement = document.querySelector('body > .atlaskit-portal-container');\n\n  if (!parentElement) {\n    var parent = document.createElement('div');\n    parent.setAttribute('class', 'atlaskit-portal-container');\n    parent.setAttribute('style', \"display: flex;\");\n    body().appendChild(parent);\n    return parent;\n  }\n\n  return parentElement;\n}; // This is a generic component does two things:\n// 1. Portals it's children using React.createPortal\n// 2. Creates the DOM node container for the portal based on props\n// 3. Ensures DOM the container creates it's own stacking context\n\n\nvar Portal =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inherits(Portal, _React$Component);\n\n  function Portal() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Portal);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Portal)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      container: canUseDOM ? createContainer(_this.props.zIndex) : undefined,\n      portalIsMounted: false\n    });\n\n    return _this;\n  }\n\n  _createClass(Portal, [{\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps, prevState) {\n      var container = this.state.container;\n      var zIndex = this.props.zIndex;\n\n      if (container && prevProps.zIndex !== zIndex) {\n        var newContainer = createContainer(zIndex);\n        portalParent().replaceChild(container, newContainer); // eslint-disable-next-line react/no-did-update-set-state\n\n        this.setState({\n          container: newContainer\n        });\n      } else if (!prevState.container && container) {\n        // SSR path\n        portalParent().appendChild(container);\n      }\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var container = this.state.container;\n      var zIndex = this.props.zIndex;\n\n      if (container) {\n        portalParent().appendChild(container);\n      } else {\n        // SSR path\n        var newContainer = createContainer(zIndex); // eslint-disable-next-line react/no-did-mount-set-state\n\n        this.setState({\n          container: newContainer\n        });\n      } // eslint-disable-next-line react/no-did-mount-set-state\n\n\n      this.setState({\n        portalIsMounted: true\n      });\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      var container = this.state.container;\n\n      if (container) {\n        portalParent().removeChild(container); // clean up parent element if there are no more portals\n\n        var portals = !!document.querySelector('body > .atlaskit-portal-container > .atlaskit-portal');\n\n        if (!portals) {\n          body().removeChild(portalParent());\n        }\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$state = this.state,\n          container = _this$state.container,\n          portalIsMounted = _this$state.portalIsMounted;\n      return container && portalIsMounted ? ReactDOM.createPortal(this.props.children, container) : null;\n    }\n  }]);\n\n  return Portal;\n}(React.Component);\n\n_defineProperty(Portal, \"defaultProps\", {\n  zIndex: 0\n});\n\nexport default Portal;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { createContext } from 'react';\n\nvar _createContext = createContext({\n  isOpen: true,\n  onExited: undefined\n}),\n    Consumer = _createContext.Consumer,\n    Provider = _createContext.Provider; // checks if children exist and are truthy\n\n\nvar hasChildren = function hasChildren(children) {\n  return React.Children.count(children) > 0 && React.Children.map(children, function (child) {\n    return !!child;\n  }).filter(Boolean).length > 0;\n};\n\nvar Transition =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inherits(Transition, _React$Component);\n\n  function Transition() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Transition);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Transition)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      currentChildren: undefined\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onExited\", function () {\n      _this.setState({\n        currentChildren: _this.props.children\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(Transition, [{\n    key: \"render\",\n    value: function render() {\n      return React.createElement(Provider, {\n        value: {\n          onExited: this.onExited,\n          isOpen: hasChildren(this.props.children)\n        }\n      }, this.state.currentChildren);\n    }\n  }], [{\n    key: \"getDerivedStateFromProps\",\n    value: function getDerivedStateFromProps(props, state) {\n      var previousChildren = state.currentChildren;\n      var exiting = hasChildren(previousChildren) && !hasChildren(props.children);\n      return {\n        currentChildren: exiting ? previousChildren : props.children\n      };\n    }\n  }]);\n\n  return Transition;\n}(React.Component);\n\nexport var ModalTransitionConsumer = Consumer;\nexport default Transition;","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React from 'react';\n// This is the source of truth for open modals\nvar stackConsumers = []; // This component provides the position of a modal dialog in the list of all open dialogs.\n// The key behaviours are:\n// - When a modal renders for the first time it takes the first stack position\n// - When a modal mounts, all other modals have to adjust their position\n// - When a modal unmounts, all other modals have to adjust their position\n\nvar StackConsumer =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inherits(StackConsumer, _React$Component);\n\n  function StackConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, StackConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(StackConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      stackIndex: 0\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"update\", function () {\n      var stackIndex = stackConsumers.indexOf(_this.update);\n\n      if (_this.state.stackIndex !== stackIndex) {\n        _this.setState({\n          stackIndex: stackIndex\n        });\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(StackConsumer, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      stackConsumers.forEach(function (updateFn) {\n        return updateFn();\n      });\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      var _this2 = this;\n\n      // This check will pass if the <Transition><Modal/></Transition> pattern has not been\n      // implemented correctly. In this case, will still need to make sure we remove ourselves\n      // from the stack list.\n      if (stackConsumers.indexOf(this.update) !== -1) {\n        stackConsumers = stackConsumers.filter(function (stack) {\n          return stack !== _this2.update;\n        });\n        stackConsumers.forEach(function (updateFn) {\n          return updateFn();\n        });\n      }\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var _this3 = this;\n\n      if (prevProps.isOpen && !this.props.isOpen) {\n        stackConsumers = stackConsumers.filter(function (stack) {\n          return stack !== _this3.update;\n        });\n        stackConsumers.forEach(function (updateFn) {\n          return updateFn();\n        });\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      if (stackConsumers.indexOf(this.update) === -1) {\n        // add this instance to stack consumer list\n        stackConsumers = [this.update].concat(_toConsumableArray(stackConsumers));\n      }\n\n      return this.props.children(this.state.stackIndex);\n    }\n  }]);\n\n  return StackConsumer;\n}(React.Component);\n\nexport default StackConsumer;","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_this), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return [].concat(_toConsumableArray(ancestorData), [data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      // eslint-disable-next-line react/prop-types\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_this), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_this), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_this), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}\nexport var withAnalyticsForSumTypeProps = withAnalyticsEvents;","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_this), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return [].concat(_toConsumableArray(ancestorData), [data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_this), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_this), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_this), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}\nexport var withAnalyticsForSumTypeProps = withAnalyticsEvents;","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = [].concat(colorPalette8, [{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = [].concat(_toConsumableArray(colorPalette16), [{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import { css } from 'styled-components';\nimport { B100 } from './colors';\nexport var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\";\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return \"'SFMono-Medium', 'SF Mono', 'Segoe UI Mono', 'Roboto Mono', 'Ubuntu Mono', Menlo, Consolas, Courier, monospace\";\n};\nexport var focusRing = function focusRing() {\n  var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : B100;\n  var outlineWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : gridSize() / 4;\n  return \"\\n  &:focus {\\n    outline: none;\\n    box-shadow: 0px 0px 0px \".concat(outlineWidth, \"px \").concat(color, \";\\n  }\\n\");\n};\nexport var noFocusRing = function noFocusRing() {\n  return \"\\n  box-shadow: none;\\n\";\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 300;\n  },\n  navigation: function navigation() {\n    return 200;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n};","import { DEFAULT_THEME_MODE } from '../constants';\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  }\n\n  if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return {\n    mode: DEFAULT_THEME_MODE\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport exenv from 'exenv';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_this), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider && exenv.canUseDOM) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\nexport * from './constants'; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","import styled from 'styled-components';\nimport { colors, themed, layers } from '@atlaskit/theme';\nvar backgroundColor = themed({\n  light: colors.N100A,\n  dark: colors.DN90A\n});\nexport var opacity = function opacity(p) {\n  return p.isTinted ? 1 : 0;\n};\nexport var pointerEvents = function pointerEvents(p) {\n  return p.canClickThrough ? 'none' : 'initial';\n};\nexport default styled.div.withConfig({\n  displayName: \"styled\",\n  componentId: \"knyj0u-0\"\n})([\"\\n  background: \", \";\\n  bottom: 0;\\n  left: 0;\\n  opacity: \", \";\\n  pointer-events: \", \";\\n  position: fixed;\\n  right: 0;\\n  top: 0;\\n  transition: opacity 220ms;\\n  z-index: \", \";\\n\"], backgroundColor, opacity, pointerEvents, layers.blanket);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { PureComponent } from 'react';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport { name as packageName, version as packageVersion } from './version.json';\nimport Div from './styled';\n\nvar Blanket =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(Blanket, _PureComponent);\n\n  function Blanket() {\n    _classCallCheck(this, Blanket);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(Blanket).apply(this, arguments));\n  }\n\n  _createClass(Blanket, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          canClickThrough = _this$props.canClickThrough,\n          isTinted = _this$props.isTinted,\n          onBlanketClicked = _this$props.onBlanketClicked;\n      var onClick = canClickThrough ? null : onBlanketClicked;\n      var containerProps = {\n        canClickThrough: canClickThrough,\n        isTinted: isTinted,\n        onClick: onClick\n      };\n      return React.createElement(Div, containerProps);\n    }\n  }]);\n\n  return Blanket;\n}(PureComponent);\n\n_defineProperty(Blanket, \"defaultProps\", {\n  canClickThrough: false,\n  isTinted: false,\n  onBlanketClicked: function onBlanketClicked() {}\n});\n\nexport { Blanket as BlanketWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'blanket',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onBlanketClicked: createAndFireEventOnAtlaskit({\n    action: 'clicked',\n    actionSubject: 'blanket',\n    attributes: {\n      componentName: 'blanket',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Blanket));","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      // eslint-disable-next-line react/prop-types\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","// eslint-disable-next-line import/prefer-default-export\nexport var WIDTH_ENUM = {\n  values: ['small', 'medium', 'large', 'x-large'],\n  widths: {\n    small: 400,\n    medium: 600,\n    large: 800,\n    'x-large': 968\n  },\n  defaultValue: 'medium'\n};\nexport var gutter = 60;","/* Used to adjust flex parent height to account for the subtraction in children below */\nexport var IEMaxHeightCalcPx = 1;\n/* A bug exists in IE where flex column children overflow the height of their parents.\n * The workaround is to set a pixel max-height on the flex children.\n * For more information see https://github.com/philipwalton/flexbugs/issues/216\n */\n\nexport var flexMaxHeightIEFix = \"\\n  max-height: 100%;\\n  @media only screen and (-ms-high-contrast:active), (-ms-high-contrast:none) {\\n    max-height: calc(100% - \".concat(IEMaxHeightCalcPx, \"px);\\n  }\\n\");","import styled, { css } from 'styled-components';\nimport { borderRadius, colors, themed, layers } from '@atlaskit/theme';\nimport { WIDTH_ENUM, gutter } from '../shared-variables';\nimport { flexMaxHeightIEFix, IEMaxHeightCalcPx } from '../utils/flex-max-height-ie-fix';\n\nvar boxShadow = function boxShadow(_ref) {\n  var isChromeless = _ref.isChromeless;\n  return isChromeless ? 'none' : \"\\n    0 0 0 1px \".concat(colors.N30A, \", 0 2px 1px \").concat(colors.N30A, \",\\n    0 0 20px -6px \").concat(colors.N60A, \"\\n  \");\n};\n\nvar dialogBgColor = function dialogBgColor(_ref2) {\n  var isChromeless = _ref2.isChromeless;\n  return isChromeless ? 'transparent' : themed({\n    light: colors.N0,\n    dark: colors.DN50\n  });\n};\n\nvar maxDimensions = \"calc(100% - \".concat(gutter * 2, \"px)\");\nvar maxHeightDimensions = \"calc(100% - \".concat(gutter * 2 - IEMaxHeightCalcPx, \"px)\");\nexport var dialogWidth = function dialogWidth(_ref3) {\n  var widthName = _ref3.widthName,\n      widthValue = _ref3.widthValue;\n\n  if (typeof widthValue === 'number') {\n    return \"\".concat(widthValue, \"px\");\n  }\n\n  return widthName ? \"\".concat(WIDTH_ENUM.widths[widthName], \"px\") : widthValue || 'auto';\n};\nexport var dialogHeight = function dialogHeight(_ref4) {\n  var heightValue = _ref4.heightValue;\n\n  if (typeof heightValue === 'number') {\n    return \"\".concat(heightValue, \"px\");\n  }\n\n  return heightValue || 'auto';\n};\n/**\n  NOTE:\n  z-index\n  - temporarily added to beat @atlaskit/navigation\n\n  absolute + top\n  - rather than fixed position so popper.js children are properly positioned\n\n  overflow-y\n  - only active when popper.js children envoked below the dialog\n*/\n\nexport var FillScreen = styled.div.withConfig({\n  displayName: \"Modal__FillScreen\",\n  componentId: \"sc-1jmnqyd-0\"\n})([\"\\n  height: 100vh;\\n  left: 0;\\n  overflow-y: auto;\\n  position: absolute;\\n  top: \", \"px;\\n  width: 100%;\\n  z-index: \", \";\\n  -webkit-overflow-scrolling: touch;\\n\"], function (p) {\n  return p.scrollDistance;\n}, layers.modal);\nexport var PositionerAbsolute = styled.div.withConfig({\n  displayName: \"Modal__PositionerAbsolute\",\n  componentId: \"sc-1jmnqyd-1\"\n})([\"\\n  display: flex;\\n  flex-direction: column;\\n  height: \", \";\\n  left: 0;\\n  margin-left: auto;\\n  margin-right: auto;\\n  max-width: \", \";\\n  position: absolute;\\n  right: 0;\\n  top: \", \"px;\\n  width: \", \";\\n  z-index: \", \";\\n  pointer-events: none;\\n\\n  @media (min-width: 320px) and (max-width: 480px) {\\n    height: 100%;\\n    left: 0;\\n    position: fixed;\\n    top: 0;\\n    max-width: 100%;\\n    width: 100%;\\n  }\\n\"], maxHeightDimensions, maxDimensions, gutter, dialogWidth, layers.modal);\nexport var PositionerRelative = styled.div.withConfig({\n  displayName: \"Modal__PositionerRelative\",\n  componentId: \"sc-1jmnqyd-2\"\n})([\"\\n  margin: \", \"px auto;\\n  position: relative;\\n  width: \", \";\\n  z-index: \", \";\\n  pointer-events: none;\\n\\n  @media (min-width: 320px) and (max-width: 480px) {\\n    height: 100%;\\n    left: 0;\\n    position: fixed;\\n    top: 0;\\n    margin: 0;\\n    max-width: 100%;\\n    width: 100%;\\n  }\\n\"], gutter, dialogWidth, layers.modal);\nexport var Dialog = styled.div.withConfig({\n  displayName: \"Modal__Dialog\",\n  componentId: \"sc-1jmnqyd-3\"\n})([\"\\n  \", \" color: \", \";\\n  display: flex;\\n  flex-direction: column;\\n  height: \", \";\\n  \", \";\\n  outline: 0;\\n  pointer-events: auto;\\n\\n  @media (min-width: 320px) and (max-width: 480px) {\\n    height: 100%;\\n    max-height: 100%;\\n    border-radius: 0;\\n  }\\n\"], function (p) {\n  return p.isChromeless ? null : css([\"\\n          background-color: \", \";\\n          border-radius: \", \"px;\\n          box-shadow: \", \";\\n        \"], dialogBgColor, borderRadius, boxShadow);\n}, colors.text, dialogHeight, flexMaxHeightIEFix);\nPositionerAbsolute.displayName = 'PositionerAbsolute';\nDialog.displayName = 'Dialog';\nFillScreen.displayName = 'FillScreen';\nPositionerRelative.displayName = 'PositionerRelative';","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport { Transition } from 'react-transition-group';\nvar duration = 500;\nvar easing = 'cubic-bezier(0.23, 1, 0.32, 1)'; // easeOutQuint\n\nvar verticalOffset = 16; // Animation\n// ==============================\n// Modal has two parts that need to be animated. Everything should fade in/out\n// and the popup should slide up/up (sic). These animations happen at the same time.\n// This component calls it's children with the styles for both animations.\n\nexport var Animation = function Animation(_ref) {\n  var hasEntered = _ref.in,\n      _ref$stackIndex = _ref.stackIndex,\n      stackIndex = _ref$stackIndex === void 0 ? 0 : _ref$stackIndex,\n      onExited = _ref.onExited,\n      onEntered = _ref.onEntered,\n      children = _ref.children;\n  return React.createElement(Transition, {\n    in: hasEntered,\n    timeout: {\n      enter: 0,\n      exit: duration\n    },\n    onExited: onExited,\n    onEntered: onEntered,\n    appear: true\n  }, function (unadjustedStatus) {\n    // when we first render, we want to finish the 'entering' state render\n    // then jump to the 'entered' state as quick as possible.\n    var adjustedStatus = hasEntered && unadjustedStatus === 'exited' ? 'entering' : unadjustedStatus; // Fade styles\n\n    var fadeBase = {\n      transition: \"opacity \".concat(duration / 2, \"ms\"),\n      opacity: 1\n    };\n    var fadeTransitions = {\n      entering: {\n        opacity: 0\n      },\n      exiting: {\n        opacity: 0\n      }\n    }; // Slide styles\n\n    var slideBase = {\n      transition: \"transform \".concat(duration, \"ms \").concat(easing),\n      transform: \"translate3d(0, \".concat(verticalOffset * 2, \"px, 0)\")\n    };\n    var slideTransitions = {\n      entering: {},\n      entered: {\n        transform: stackIndex > 0 ? \"translate3d(0, \".concat(stackIndex * (verticalOffset / 2), \"px, 0)\") : null\n      },\n      exiting: {\n        transform: \"translate3d(0, -\".concat(verticalOffset * 2, \"px, 0)\")\n      }\n    };\n    return children({\n      fade: _objectSpread({}, fadeBase, fadeTransitions[adjustedStatus]),\n      slide: _objectSpread({}, slideBase, slideTransitions[adjustedStatus])\n    });\n  });\n};","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nvar getComponentName = function (target) {\n    if (target.displayName && typeof target.displayName === 'string') {\n        return target.displayName;\n    }\n    return target.name || 'Component';\n};\nvar warnIfDeprecatedAppearance = function (appearance) {\n    var deprecatedAppearances = ['help'];\n    if (appearance && deprecatedAppearances.indexOf(appearance) !== -1) {\n        // tslint:disable-next-line:no-console\n        console.warn(\"Atlaskit: The Button appearance \\\"\" + appearance + \"\\\" is deprecated. Please use styled-components' ThemeProvider to provide a custom theme for Button instead.\");\n    }\n};\nvar withDeprecationWarnings = function (Component) {\n    var _a;\n    return _a = /** @class */ (function (_super) {\n            tslib_1.__extends(WithDeprecationWarnings, _super);\n            function WithDeprecationWarnings() {\n                return _super !== null && _super.apply(this, arguments) || this;\n            }\n            WithDeprecationWarnings.prototype.componentWillMount = function () {\n                warnIfDeprecatedAppearance(this.props.appearance);\n            };\n            WithDeprecationWarnings.prototype.componentWillReceiveProps = function (newProps) {\n                if (newProps.appearance !== this.props.appearance) {\n                    warnIfDeprecatedAppearance(newProps.appearance);\n                }\n            };\n            WithDeprecationWarnings.prototype.render = function () {\n                return React.createElement(Component, this.props);\n            };\n            return WithDeprecationWarnings;\n        }(React.Component)),\n        _a.displayName = \"WithDeprecationWarnings(\" + getComponentName(Component) + \")\",\n        _a;\n};\nexport default withDeprecationWarnings;\n//# sourceMappingURL=withDeprecationWarnings.js.map","import * as tslib_1 from \"tslib\";\nvar getAppearanceProps = function (props, state) {\n    var appearance = props.appearance, className = props.className, isDisabled = props.isDisabled, isLoading = props.isLoading, isSelected = props.isSelected, spacing = props.spacing, shouldFitContainer = props.shouldFitContainer;\n    var isActive = state.isActive, isFocus = state.isFocus, isHover = state.isHover;\n    return {\n        appearance: appearance,\n        className: className,\n        disabled: isDisabled,\n        isActive: isActive,\n        isFocus: isFocus,\n        isHover: isHover,\n        isLoading: isLoading,\n        isSelected: isSelected,\n        spacing: spacing,\n        fit: shouldFitContainer,\n    };\n};\nvar getInteractionProps = function (component) {\n    var onBlur = component.onBlur, onFocus = component.onFocus, onMouseDown = component.onMouseDown, onMouseEnter = component.onMouseEnter, onMouseLeave = component.onMouseLeave, onMouseUp = component.onMouseUp;\n    var tabIndex = component.props.tabIndex;\n    // Block onClick/Keyboard submit while isLoading\n    var onClick = component.props.isLoading\n        ? function (e) { return e.preventDefault(); }\n        : component.props.onClick;\n    return {\n        onBlur: onBlur,\n        onClick: onClick,\n        onFocus: onFocus,\n        onMouseDown: onMouseDown,\n        onMouseEnter: onMouseEnter,\n        onMouseLeave: onMouseLeave,\n        onMouseUp: onMouseUp,\n        tabIndex: tabIndex,\n    };\n};\nvar getLinkElementProps = function (props) {\n    var href = props.href, target = props.target;\n    return { href: href, target: target };\n};\nvar getButtonElementProps = function (props) {\n    var ariaHaspopup = props.ariaHaspopup, ariaExpanded = props.ariaExpanded, ariaControls = props.ariaControls, form = props.form, type = props.type;\n    return {\n        'aria-haspopup': ariaHaspopup,\n        'aria-expanded': ariaExpanded,\n        'aria-controls': ariaControls,\n        form: form,\n        type: type,\n    };\n};\nvar getButtonProps = function (component) {\n    var props = component.props, state = component.state;\n    var defaultProps = tslib_1.__assign({ id: props.id }, getAppearanceProps(props, state), getInteractionProps(component), { 'aria-label': props.ariaLabel });\n    if (props.component) {\n        return tslib_1.__assign({}, props, defaultProps);\n    }\n    if (props.href) {\n        if (props.isDisabled) {\n            return defaultProps;\n        }\n        return tslib_1.__assign({}, defaultProps, getLinkElementProps(props));\n    }\n    return tslib_1.__assign({}, defaultProps, getButtonElementProps(props));\n};\nexport default getButtonProps;\n//# sourceMappingURL=getButtonProps.js.map","import * as tslib_1 from \"tslib\";\n// @flow\nimport * as React from 'react';\nimport { cleanProps } from '@atlaskit/analytics-next';\nvar CustomComponentProxy = /** @class */ (function (_super) {\n    tslib_1.__extends(CustomComponentProxy, _super);\n    function CustomComponentProxy() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    CustomComponentProxy.prototype.render = function () {\n        var _a = cleanProps(this.props), appearance = _a.appearance, children = _a.children, component = _a.component, isActive = _a.isActive, isDisabled = _a.isDisabled, isFocus = _a.isFocus, isHover = _a.isHover, isSelected = _a.isSelected, shouldFitContainer = _a.shouldFitContainer, fit = _a.fit, iconBefore = _a.iconBefore, iconAfter = _a.iconAfter, isLoading = _a.isLoading, proxiedProps = tslib_1.__rest(_a, [\"appearance\", \"children\", \"component\", \"isActive\", \"isDisabled\", \"isFocus\", \"isHover\", \"isSelected\", \"shouldFitContainer\", \"fit\", \"iconBefore\", \"iconAfter\", \"isLoading\"]);\n        if (!component) {\n            throw new Error('No custom component provided while trying to use custom button component');\n        }\n        var ProxiedComponent = component;\n        return React.createElement(ProxiedComponent, tslib_1.__assign({}, proxiedProps), children);\n    };\n    return CustomComponentProxy;\n}(React.Component));\nexport default CustomComponentProxy;\n//# sourceMappingURL=CustomComponentProxy.js.map","import * as tslib_1 from \"tslib\";\nimport { css } from 'styled-components';\nimport { borderRadius, fontSize, gridSize, math } from '@atlaskit/theme';\nimport themeDefinitions from './themeDefinitions';\nimport { themeNamespace } from '../theme';\n// TODO: Type correctly when @atlaskit/theme is typescript\nvar getProvidedTheme = function (_a) {\n    var theme = _a.theme;\n    return (theme && theme[themeNamespace]) || {};\n};\nvar getAppearanceProperty = function (property, appearance, providedTheme, inBuiltTheme) {\n    var defaultAppearanceStyles = inBuiltTheme.default;\n    if (!appearance) {\n        return defaultAppearanceStyles[property];\n    }\n    var providedAppearanceStyles = providedTheme[appearance];\n    var inBuiltAppearanceStyles = inBuiltTheme[appearance];\n    return ((providedAppearanceStyles && providedAppearanceStyles[property]) ||\n        (inBuiltAppearanceStyles && inBuiltAppearanceStyles[property]) ||\n        defaultAppearanceStyles[property]);\n};\nvar getState = function (_a) {\n    var disabled = _a.disabled, isActive = _a.isActive, isFocus = _a.isFocus, isHover = _a.isHover, isSelected = _a.isSelected;\n    if (disabled) {\n        return 'disabled';\n    }\n    if (isSelected && isFocus) {\n        return 'focusSelected';\n    }\n    if (isSelected) {\n        return 'selected';\n    }\n    if (isActive) {\n        return 'active';\n    }\n    if (isHover) {\n        return 'hover';\n    }\n    if (isFocus) {\n        return 'focus';\n    }\n    return 'default';\n};\nexport var getPropertyAppearance = function (property, props, definitions) {\n    if (props === void 0) { props = {}; }\n    if (definitions === void 0) { definitions = themeDefinitions; }\n    var appearance = props.appearance;\n    var fallbacks = definitions.fallbacks, inBuiltTheme = definitions.theme;\n    var providedTheme = getProvidedTheme(props);\n    var propertyStyles = getAppearanceProperty(property, appearance, providedTheme, inBuiltTheme);\n    if (!propertyStyles) {\n        return fallbacks[property] || 'initial';\n    }\n    var state = getState(props);\n    return propertyStyles[state] || propertyStyles.default || fallbacks[property];\n};\nexport default function getButtonStyles(props) {\n    // $FlowFixMe - should be fixed when theme work is done\n    var baseSize = fontSize(props);\n    var buttonHeight = math.divide(math.multiply(gridSize, 4), baseSize)(props) + \"em\";\n    var compactButtonHeight = math.divide(math.multiply(gridSize, 3), baseSize)(props) + \"em\";\n    /**\n     * Variable styles\n     */\n    var cursor = 'default';\n    var height = buttonHeight;\n    var lineHeight = buttonHeight;\n    var outline = 'none';\n    // $FlowFixMe - should be fixed when theme work is done\n    var padding = \"0 \" + gridSize(props) + \"px\";\n    var transitionDuration = '0.1s, 0.15s';\n    var transition = 'background 0.1s ease-out, box-shadow 0.15s cubic-bezier(0.47, 0.03, 0.49, 1.38)';\n    var verticalAlign = 'middle';\n    var width = 'auto';\n    /**\n     * Appearance + Theme styles\n     */\n    var background = getPropertyAppearance('background', props);\n    var color = getPropertyAppearance('color', props);\n    var boxShadowColor = getPropertyAppearance('boxShadowColor', props);\n    var boxShadow = boxShadowColor\n        ? css(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject([\"\\n        box-shadow: 0 0 0 2px \", \";\\n      \"], [\"\\n        box-shadow: 0 0 0 2px \", \";\\n      \"])), boxShadowColor) : null;\n    var textDecoration = getPropertyAppearance('textDecoration', props);\n    // Spacing: Compact\n    if (props.spacing === 'compact') {\n        height = compactButtonHeight;\n        lineHeight = compactButtonHeight;\n    }\n    // Spacing: None\n    if (props.spacing === 'none') {\n        height = 'auto';\n        lineHeight = 'inherit';\n        padding = '0';\n        verticalAlign = 'baseline';\n    }\n    // Interaction: Hover\n    if (props.isHover) {\n        cursor = 'pointer';\n        transition =\n            'background 0s ease-out, box-shadow 0.15s cubic-bezier(0.47, 0.03, 0.49, 1.38)';\n    }\n    // Interaction: Active\n    if (props.isActive) {\n        transitionDuration = '0s';\n    }\n    // Interaction: Focus\n    if (props.isFocus) {\n        outline = 'none';\n        transitionDuration = '0s, 0.2s';\n    }\n    // Disabled\n    if (props.disabled) {\n        cursor = 'not-allowed';\n    }\n    // Loading\n    var isLoadingStyles = function (p) {\n        return p.isLoading ? 'pointer-events: none;' : null;\n    };\n    // Fit to parent width\n    if (props.fit) {\n        width = '100%';\n    }\n    /* Note use of !important to override the ThemeReset on anchor tag styles */\n    return css(templateObject_2 || (templateObject_2 = tslib_1.__makeTemplateObject([\"\\n    align-items: baseline;\\n    background: \", \";\\n    border-radius: \", \"px;\\n    border-width: 0;\\n    box-sizing: border-box;\\n    color: \", \" !important;\\n    cursor: \", \";\\n    display: inline-flex;\\n    font-size: inherit;\\n    font-style: normal;\\n    height: \", \";\\n    line-height: \", \";\\n    margin: 0;\\n    max-width: 100%;\\n    outline: \", \" !important;\\n    padding: \", \";\\n    text-align: center;\\n    text-decoration: \", \";\\n    transition: \", \";\\n    transition-duration: \", \";\\n    vertical-align: \", \";\\n    white-space: nowrap;\\n    width: \", \";\\n    \", \" &::-moz-focus-inner {\\n      border: 0;\\n      margin: 0;\\n      padding: 0;\\n    }\\n    \", \";\\n  \"], [\"\\n    align-items: baseline;\\n    background: \", \";\\n    border-radius: \", \"px;\\n    border-width: 0;\\n    box-sizing: border-box;\\n    color: \", \" !important;\\n    cursor: \", \";\\n    display: inline-flex;\\n    font-size: inherit;\\n    font-style: normal;\\n    height: \", \";\\n    line-height: \", \";\\n    margin: 0;\\n    max-width: 100%;\\n    outline: \", \" !important;\\n    padding: \", \";\\n    text-align: center;\\n    text-decoration: \", \";\\n    transition: \", \";\\n    transition-duration: \", \";\\n    vertical-align: \", \";\\n    white-space: nowrap;\\n    width: \", \";\\n    \", \" &::-moz-focus-inner {\\n      border: 0;\\n      margin: 0;\\n      padding: 0;\\n    }\\n    \", \";\\n  \"])), background, borderRadius, color, cursor, height, lineHeight, outline, padding, textDecoration, transition, transitionDuration, verticalAlign, width, boxShadow, isLoadingStyles);\n}\nvar templateObject_1, templateObject_2;\n//# sourceMappingURL=getButtonStyles.js.map","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\n\n/*\ncleanProps removes props added by the withAnalyticsEvents HOC from an object\n*/\nexport default function cleanProps(props) {\n  /* eslint-disable no-unused-vars */\n  var createAnalyticsEvent = props.createAnalyticsEvent,\n      cleanedProps = _objectWithoutProperties(props, [\"createAnalyticsEvent\"]);\n  /* eslint-enable no-unused-vars */\n\n\n  return cleanedProps;\n}","import { colors, themed } from '@atlaskit/theme';\n/**\n * Convert a hex colour code to RGBA.\n * @param {String} hex Hex colour code.\n * @param {Number} alpha Optional alpha value (defaults to 1).\n *\n */\nvar hex2rgba = function (hex, alpha) {\n    if (alpha === void 0) { alpha = 1; }\n    if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) {\n        var colorArr = hex.substring(1).split('');\n        if (colorArr.length === 3) {\n            colorArr = [\n                colorArr[0],\n                colorArr[0],\n                colorArr[1],\n                colorArr[1],\n                colorArr[2],\n                colorArr[2],\n            ];\n        }\n        var color = \"0x\" + colorArr.join('');\n        // FIXME: `>>` operand can validly take a string value\n        var r = (color >> 16) & 255;\n        var g = (color >> 8) & 255;\n        var b = color & 255;\n        return \"rgba(\" + [r, g, b].join(',') + \", \" + alpha + \")\";\n    }\n    throw new Error('Bad Hex');\n};\n/* eslint-enable no-bitwise */\nexport default {\n    // Fallbacks\n    fallbacks: {\n        background: themed({ light: colors.N20A, dark: colors.DN70 }),\n        color: themed({ light: colors.N400, dark: colors.DN400 }),\n        textDecoration: 'none',\n    },\n    // Themes\n    theme: {\n        // Default appearance\n        default: {\n            background: {\n                default: themed({ light: colors.N20A, dark: colors.DN70 }),\n                hover: themed({ light: colors.N30A, dark: colors.DN60 }),\n                active: themed({ light: hex2rgba(colors.B75, 0.6), dark: colors.B75 }),\n                disabled: themed({ light: colors.N20A, dark: colors.DN70 }),\n                selected: themed({ light: colors.N700, dark: colors.DN0 }),\n                focusSelected: themed({ light: colors.N700, dark: colors.DN0 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: hex2rgba(colors.B200, 0.6), dark: colors.B75 }),\n                focusSelected: themed({\n                    light: hex2rgba(colors.B200, 0.6),\n                    dark: colors.B75,\n                }),\n            },\n            color: {\n                default: themed({ light: colors.N400, dark: colors.DN400 }),\n                active: themed({ light: colors.B400, dark: colors.B400 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN30 }),\n                selected: themed({ light: colors.N20, dark: colors.DN400 }),\n                focusSelected: themed({ light: colors.N20, dark: colors.DN400 }),\n            },\n        },\n        // Primary appearance\n        primary: {\n            background: {\n                default: themed({ light: colors.B400, dark: colors.B100 }),\n                hover: themed({ light: colors.B300, dark: colors.B75 }),\n                active: themed({ light: colors.B500, dark: colors.B200 }),\n                disabled: themed({ light: colors.N20A, dark: colors.DN70 }),\n                selected: themed({ light: colors.N700, dark: colors.DN0 }),\n                focusSelected: themed({ light: colors.N700, dark: colors.DN0 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: hex2rgba(colors.B200, 0.6), dark: colors.B75 }),\n                focusSelected: themed({\n                    light: hex2rgba(colors.B200, 0.6),\n                    dark: colors.B75,\n                }),\n            },\n            color: {\n                default: themed({ light: colors.N0, dark: colors.DN30 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN30 }),\n                selected: themed({ light: colors.N20, dark: colors.DN400 }),\n                focusSelected: themed({ light: colors.N20, dark: colors.DN400 }),\n            },\n        },\n        // Warning appearance\n        warning: {\n            background: {\n                default: themed({ light: colors.Y300, dark: colors.Y300 }),\n                hover: themed({ light: colors.Y200, dark: colors.Y200 }),\n                active: themed({ light: colors.Y400, dark: colors.Y400 }),\n                disabled: themed({ light: colors.N20A, dark: colors.DN70 }),\n                selected: themed({ light: colors.Y400, dark: colors.Y400 }),\n                focusSelected: themed({ light: colors.Y400, dark: colors.Y400 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: colors.Y500, dark: colors.Y500 }),\n                focusSelected: themed({ light: colors.Y500, dark: colors.Y500 }),\n            },\n            color: {\n                default: themed({ light: colors.N800, dark: colors.N800 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN30 }),\n                selected: themed({ light: colors.N800, dark: colors.N800 }),\n                focusSelected: themed({ light: colors.N800, dark: colors.N800 }),\n            },\n        },\n        // Danger appearance\n        danger: {\n            background: {\n                default: themed({ light: colors.R400, dark: colors.R400 }),\n                hover: themed({ light: colors.R300, dark: colors.R300 }),\n                active: themed({ light: colors.R500, dark: colors.R500 }),\n                disabled: themed({ light: colors.N20A, dark: colors.DN70 }),\n                selected: themed({ light: colors.R500, dark: colors.R500 }),\n                focusSelected: themed({ light: colors.R500, dark: colors.R500 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: colors.R100, dark: colors.R100 }),\n                focusSelected: themed({ light: colors.R100, dark: colors.R100 }),\n            },\n            color: {\n                default: themed({ light: colors.N0, dark: colors.N0 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN30 }),\n                selected: themed({ light: colors.N0, dark: colors.N0 }),\n                focusSelected: themed({ light: colors.N0, dark: colors.N0 }),\n            },\n        },\n        // Help appearance\n        help: {\n            background: {\n                default: themed({ light: colors.P400, dark: colors.P400 }),\n                hover: themed({ light: colors.P200, dark: colors.P200 }),\n                active: themed({ light: colors.P500, dark: colors.P500 }),\n                disabled: themed({ light: colors.N20A, dark: colors.DN70 }),\n                selected: themed({ light: colors.N700, dark: colors.DN0 }),\n                focusSelected: themed({ light: colors.R500, dark: colors.R500 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: colors.P100, dark: colors.P100 }),\n                focusSelected: themed({ light: colors.P100, dark: colors.P100 }),\n            },\n            color: {\n                default: themed({ light: colors.N0, dark: colors.N0 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN30 }),\n                selected: themed({ light: colors.N20, dark: colors.DN400 }),\n                focusSelected: themed({ light: colors.N0, dark: colors.N0 }),\n            },\n        },\n        // Link appearance\n        link: {\n            background: {\n                default: themed({ light: 'none', dark: 'none' }),\n                selected: themed({ light: colors.N700, dark: colors.N20 }),\n                focusSelected: themed({ light: colors.N700, dark: colors.N20 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: hex2rgba(colors.B200, 0.6), dark: colors.B75 }),\n                focusSelected: themed({\n                    light: hex2rgba(colors.B200, 0.6),\n                    dark: colors.B75,\n                }),\n            },\n            color: {\n                default: themed({ light: colors.B400, dark: colors.B100 }),\n                hover: themed({ light: colors.B300, dark: colors.B75 }),\n                active: themed({ light: colors.B500, dark: colors.B200 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN100 }),\n                selected: themed({ light: colors.N20, dark: colors.N700 }),\n                focusSelected: themed({ light: colors.N20, dark: colors.N700 }),\n            },\n            textDecoration: {\n                hover: 'underline',\n            },\n        },\n        // Subtle appearance\n        subtle: {\n            background: {\n                default: themed({ light: 'none', dark: 'none' }),\n                hover: themed({ light: colors.N30A, dark: colors.DN60 }),\n                active: themed({ light: hex2rgba(colors.B75, 0.6), dark: colors.B75 }),\n                disabled: themed({ light: 'none', dark: 'none' }),\n                selected: themed({ light: colors.N700, dark: colors.DN0 }),\n                focusSelected: themed({ light: colors.N700, dark: colors.DN0 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: hex2rgba(colors.B200, 0.6), dark: colors.B75 }),\n                focusSelected: themed({\n                    light: hex2rgba(colors.B200, 0.6),\n                    dark: colors.B75,\n                }),\n            },\n            color: {\n                default: themed({ light: colors.N400, dark: colors.DN400 }),\n                active: themed({ light: colors.B400, dark: colors.B400 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN100 }),\n                selected: themed({ light: colors.N20, dark: colors.DN400 }),\n                focusSelected: themed({ light: colors.N20, dark: colors.DN400 }),\n            },\n        },\n        // Subtle Link appearance\n        'subtle-link': {\n            background: {\n                default: themed({ light: 'none', dark: 'none' }),\n                selected: themed({ light: colors.N700, dark: colors.N20 }),\n                focusSelected: themed({ light: colors.N700, dark: colors.N20 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: hex2rgba(colors.B200, 0.6), dark: colors.B75 }),\n                focusSelected: themed({\n                    light: hex2rgba(colors.B200, 0.6),\n                    dark: colors.B75,\n                }),\n            },\n            color: {\n                default: themed({ light: colors.N200, dark: colors.DN400 }),\n                hover: themed({ light: colors.N90, dark: colors.B50 }),\n                active: themed({ light: colors.N400, dark: colors.DN300 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN100 }),\n                selected: themed({ light: colors.N20, dark: colors.DN400 }),\n                focusSelected: themed({ light: colors.N20, dark: colors.DN400 }),\n            },\n            textDecoration: {\n                hover: 'underline',\n            },\n        },\n    },\n};\n//# sourceMappingURL=themeDefinitions.js.map","export var themeNamespace = '@atlaskit-shared-theme/button';\n//# sourceMappingURL=theme.js.map","import * as tslib_1 from \"tslib\";\nimport { css } from 'styled-components';\nvar isLoadingStyle = css(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject([\"\\n  transition: opacity 0.3s;\\n  opacity: \", \";\\n\"], [\"\\n  transition: opacity 0.3s;\\n  opacity: \", \";\\n\"])), function (_a) {\n    var isLoading = _a.isLoading;\n    return (isLoading ? 0 : 1);\n});\nvar getLoadingStyle = function (_a) {\n    var isLoading = _a.isLoading;\n    return ({\n        transition: 'opacity 0.3s',\n        opacity: isLoading ? 0 : 1,\n    });\n};\nexport { isLoadingStyle, getLoadingStyle };\nvar templateObject_1;\n//# sourceMappingURL=utils.js.map","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nimport { gridSize, math } from '@atlaskit/theme';\nimport { getLoadingStyle } from './utils';\nvar getAlignment = function (p) { return (p.followsIcon ? 'baseline' : 'center'); };\nvar gridSizeDiv2 = math.divide(gridSize, 2);\nvar getMargin = function (p) {\n    return p.spacing === 'none' ? 0 : \"0 \" + gridSizeDiv2(p) + \"px\";\n};\nvar ButtonContent = function (props) {\n    var style = tslib_1.__assign({ alignItems: getAlignment(props), alignSelf: getAlignment(props), flex: '1 1 auto', margin: getMargin(props), maxWidth: '100%', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }, getLoadingStyle(props));\n    return React.createElement(\"span\", { style: style }, props.children);\n};\nexport default ButtonContent;\n//# sourceMappingURL=ButtonContent.js.map","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nvar ButtonWrapper = function (props) {\n    var style = {\n        alignSelf: 'center',\n        display: 'inline-flex',\n        flexWrap: 'nowrap',\n        maxWidth: '100%',\n        position: 'relative',\n    };\n    if (props.fit) {\n        style.width = '100%';\n        style.justifyContent = 'center';\n    }\n    var optionalProps = {};\n    if (props.onClick) {\n        optionalProps.onClick = props.onClick;\n    }\n    return (React.createElement(\"span\", tslib_1.__assign({ style: style }, optionalProps), props.children));\n};\nexport default ButtonWrapper;\n//# sourceMappingURL=ButtonWrapper.js.map","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nimport { gridSize, math } from '@atlaskit/theme';\nimport { getLoadingStyle } from './utils';\nvar getMargin = function (props) {\n    if (props.spacing === 'none') {\n        return 0;\n    }\n    if (props.isOnlyChild) {\n        return \"0 -\" + math.divide(gridSize, 4)(props) + \"px\";\n    }\n    return \"0 \" + math.divide(gridSize, 2)(props) + \"px\";\n};\nvar IconWrapper = function (props) {\n    var style = tslib_1.__assign({ alignSelf: 'center', display: 'flex', flexShrink: 0, lineHeight: 0, fontSize: 0, margin: getMargin(props), userSelect: 'none' }, getLoadingStyle(props));\n    return React.createElement(\"span\", { style: style }, props.children);\n};\nexport default IconWrapper;\n//# sourceMappingURL=IconWrapper.js.map","export var SIZES_MAP = {\n  xsmall: 8,\n  small: 16,\n  medium: 24,\n  large: 48,\n  xlarge: 96\n};\nexport var DEFAULT_SIZE = SIZES_MAP.small;","import styled, { keyframes } from 'styled-components';\n\n/* Define keyframes statically to prevent a perfomance issue in styled components v1 where the keyframes function\n * does not cache previous values resulting in each spinner injecting the same keyframe definition\n * in the DOM.\n * This can be reverted to use dynamic keyframes when we upgrade to styled components v2\n */\nvar keyframeNames = {\n  noop: keyframes([\"\\n    from { opacity: 0; }\\n    to { opacity: 0; }\\n  \"]),\n  enterRotate: keyframes([\"\\n    from { transform: rotate(50deg); }\\n    to { transform: rotate(230deg); }\\n  \"]),\n  leaveRotate: keyframes([\"\\n    from { transform: rotate(230deg); }\\n    to { transform: rotate(510deg); }\\n  \"]),\n  leaveOpacity: keyframes([\"\\n    from { opacity: 1; }\\n    to { opacity: 0; }\\n  \"])\n};\nexport var getContainerAnimation = function getContainerAnimation(_ref) {\n  var delay = _ref.delay,\n      phase = _ref.phase;\n\n  if (phase === 'DELAY') {\n    /* This hides the spinner and allows us to use animationend events to move to the next phase in\n     * the same way we do with the other lifecycle stages */\n    return \"animation: \".concat(delay, \"s \").concat(keyframeNames.noop, \";\");\n  }\n\n  if (phase === 'ENTER' || phase === 'IDLE') {\n    return \"animation: 1s ease-in-out forwards \".concat(keyframeNames.enterRotate, \";\");\n  }\n\n  if (phase === 'LEAVE') {\n    return \"animation: 0.53s ease-in-out forwards \".concat(keyframeNames.leaveRotate, \",\\n      0.2s ease-in-out 0.33s \").concat(keyframeNames.leaveOpacity, \";\");\n  }\n\n  return '';\n};\n\nvar getSize = function getSize(_ref2) {\n  var size = _ref2.size;\n  return \"\".concat(size, \"px\");\n};\n\nvar Container = styled.div.withConfig({\n  displayName: \"styledContainer__Container\",\n  componentId: \"sc-1qs8wxp-0\"\n})([\"\\n  \", \" display: flex;\\n  height: \", \";\\n  width: \", \";\\n\\n  /* Rapidly creating and removing spinners will result in multiple spinners being visible while\\n   * they complete their exit animations. This rules hides the spinner if another one has been\\n   * added. */\\n  div + & {\\n    display: none;\\n  }\\n\"], getContainerAnimation, getSize, getSize);\nContainer.displayName = 'SpinnerContainer';\nexport default Container;","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport styled, { css, keyframes } from 'styled-components';\nimport { colors, themed } from '@atlaskit/theme';\nimport { SIZES_MAP } from './constants';\n\nvar getStrokeWidth = function getStrokeWidth(size) {\n  return Math.round(size / 10);\n};\n\nvar getStrokeCircumference = function getStrokeCircumference(size) {\n  var strokeWidth = getStrokeWidth(size);\n  var strokeRadius = size / 2 - strokeWidth / 2;\n  return Math.PI * strokeRadius * 2;\n};\n/* Define keyframes statically to prevent a perfomance issue in styled components v1 where the keyframes function\n * does not cache previous values resulting in each spinner injecting the same keyframe definition\n * in the DOM.\n * This can be reverted to dynamic keyframes when we upgrade to styled components v2\n */\n\n\nvar keyframeNames = {\n  noop: keyframes([\"\\n    from { opacity: 0; }\\n    to { opacity: 0; }\\n  \"]),\n  rotate: keyframes([\"\\n    to { transform: rotate(360deg); }\\n  \"]),\n  enterOpacity: keyframes([\"\\n    from { opacity: 0; }\\n    to { opacity: 1; }\\n  \"]),\n  smallEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.small), getStrokeCircumference(SIZES_MAP.small) * 0.8),\n  mediumEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.medium), getStrokeCircumference(SIZES_MAP.medium) * 0.8),\n  largeEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.large), getStrokeCircumference(SIZES_MAP.large) * 0.8),\n  xlargeEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.xlarge), getStrokeCircumference(SIZES_MAP.xlarge) * 0.8)\n};\n/* If a standard size is used, we can use one of our statically defined keyframes, otherwise\n * we're forced to dynamically create the keyframe and incur a performance cost.\n */\n\nvar getEnterStrokeKeyframe = function getEnterStrokeKeyframe(size) {\n  var standardSizeName = Object.keys(SIZES_MAP).find(function (sizeName) {\n    return size === SIZES_MAP[sizeName];\n  });\n\n  if (standardSizeName) {\n    return keyframeNames[\"\".concat(standardSizeName, \"EnterStroke\")];\n  }\n\n  var circumference = getStrokeCircumference(size);\n  return keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], circumference, circumference * 0.8);\n};\n\nvar spinnerColor = themed({\n  light: colors.N500,\n  dark: colors.N0\n});\nvar spinnerColorInverted = themed({\n  light: colors.N0,\n  dark: colors.N0\n});\nexport var getStrokeColor = function getStrokeColor(_ref // $FlowFixMe - theme is not found in props\n) {\n  var invertColor = _ref.invertColor,\n      props = _objectWithoutProperties(_ref, [\"invertColor\"]);\n\n  return invertColor ? spinnerColorInverted(props) : spinnerColor(props);\n};\nexport var svgStyles = css([\"\\n  \", \";\\n\"], function (props) {\n  var circumference = getStrokeCircumference(props.size);\n  var idleRotation = \"0.86s cubic-bezier(0.4, 0.15, 0.6, 0.85) infinite \".concat(keyframeNames.rotate);\n  var spinUpStroke = \"0.8s ease-in-out \".concat(getEnterStrokeKeyframe(props.size));\n  var spinUpOpacity = \"0.2s ease-in-out \".concat(keyframeNames.enterOpacity);\n  var activeAnimations = [idleRotation];\n\n  if (props.phase === 'ENTER') {\n    activeAnimations.push(spinUpStroke, spinUpOpacity);\n  }\n\n  return css([\"\\n      animation: \", \";\\n      fill: none;\\n      stroke: \", \";\\n      stroke-dasharray: \", \"px;\\n      stroke-dashoffset: \", \"px;\\n      stroke-linecap: round;\\n      stroke-width: \", \"px;\\n      transform-origin: center;\\n    \"], activeAnimations.join(', '), getStrokeColor, circumference, circumference * 0.8, getStrokeWidth(props.size));\n});\nvar Svg = styled.svg.withConfig({\n  displayName: \"styledSvg__Svg\",\n  componentId: \"y2l69q-0\"\n})([\"\\n  \", \";\\n\"], svgStyles);\nSvg.displayName = 'SpinnerSvg';\nexport default Svg;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { Transition } from 'react-transition-group';\nimport styled from 'styled-components';\nimport { SIZES_MAP, DEFAULT_SIZE } from './constants';\nimport Container from './styledContainer';\nimport Svg from './styledSvg';\nvar Outer = styled.div.withConfig({\n  displayName: \"Spinner__Outer\",\n  componentId: \"sc-1ejgacn-0\"\n})([\"\\n  display: inline-block;\\n  vertical-align: middle;\\n\"]);\nOuter.displayName = 'Outer';\n\nvar Spinner =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Spinner, _Component);\n\n  function Spinner(props) {\n    var _this;\n\n    _classCallCheck(this, Spinner);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Spinner).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_this), \"transitionNode\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"enter\", function () {\n      var delay = _this.props.delay;\n\n      if (delay) {\n        _this.setState({\n          phase: 'DELAY'\n        });\n      } else {\n        _this.setState({\n          phase: 'ENTER'\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"idle\", function () {\n      _this.setState({\n        phase: 'IDLE'\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"exit\", function () {\n      _this.setState({\n        phase: 'LEAVE'\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"endListener\", function (node, done) {\n      var executeCallback = function executeCallback(event) {\n        // ignore animation events on the glyph\n        // $FlowFixMe - tagName does not exist in event.target\n        if (event.target.tagName === 'svg') {\n          return false;\n        }\n\n        if (_this.state.phase === 'DELAY') {\n          _this.setState({\n            phase: 'ENTER'\n          });\n\n          _this.endListener(node, done);\n        } else {\n          done();\n        }\n\n        return node && node.removeEventListener('animationend', executeCallback);\n      };\n\n      return node && node.addEventListener('animationend', executeCallback);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"validateSize\", function () {\n      var size = _this.props.size;\n      var spinnerSize = SIZES_MAP[size] || size;\n      return typeof spinnerSize === 'number' ? spinnerSize : DEFAULT_SIZE;\n    });\n\n    _this.state = {\n      phase: ''\n    };\n    return _this;\n  }\n\n  _createClass(Spinner, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var phase = this.state.phase;\n      var _this$props = this.props,\n          delay = _this$props.delay,\n          invertColor = _this$props.invertColor,\n          isCompleting = _this$props.isCompleting;\n      var size = this.validateSize();\n      var strokeWidth = Math.round(size / 10);\n      var strokeRadius = size / 2 - strokeWidth / 2;\n      return React.createElement(Outer, null, React.createElement(Transition, {\n        addEndListener: this.endListener,\n        appear: true,\n        in: !isCompleting,\n        mountOnEnter: true,\n        unmountOnExit: true,\n        onEnter: this.enter,\n        onEntered: this.idle,\n        onExit: this.exit,\n        onExited: function onExited() {\n          return _this2.props.onComplete();\n        },\n        ref: function ref(node) {\n          _this2.transitionNode = node;\n        }\n      }, React.createElement(Container, {\n        delay: delay / 1000,\n        phase: phase,\n        size: size\n      }, React.createElement(Svg, {\n        focusable: \"false\",\n        height: size,\n        invertColor: invertColor,\n        phase: phase,\n        size: size,\n        viewBox: \"0 0 \".concat(size, \" \").concat(size),\n        width: size,\n        xmlns: \"http://www.w3.org/2000/svg\"\n      }, React.createElement(\"circle\", {\n        cx: size / 2,\n        cy: size / 2,\n        r: strokeRadius\n      })))));\n    }\n  }]);\n\n  return Spinner;\n}(Component);\n\n_defineProperty(Spinner, \"defaultProps\", {\n  delay: 100,\n  isCompleting: false,\n  invertColor: false,\n  onComplete: function onComplete() {},\n  size: 'medium'\n});\n\nexport { Spinner as default };","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport Spinner from '@atlaskit/spinner';\nvar LoadingDiv = styled.div(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject([\"\\n  display: flex;\\n  position: absolute;\\n  left: 50%;\\n  top: 50%;\\n  transform: translate(-50%, -50%);\\n\"], [\"\\n  display: flex;\\n  position: absolute;\\n  left: 50%;\\n  top: 50%;\\n  transform: translate(-50%, -50%);\\n\"])));\nvar LoadingSpinner = /** @class */ (function (_super) {\n    tslib_1.__extends(LoadingSpinner, _super);\n    function LoadingSpinner() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.invertSpinner = function () {\n            var _a = _this.props, appearance = _a.appearance, isSelected = _a.isSelected, isDisabled = _a.isDisabled;\n            if (isSelected) {\n                return true;\n            }\n            if (isDisabled) {\n                return false;\n            }\n            if (appearance === 'primary' ||\n                appearance === 'danger' ||\n                appearance === 'help') {\n                return true;\n            }\n            return false;\n        };\n        return _this;\n    }\n    LoadingSpinner.prototype.render = function () {\n        var spacing = this.props.spacing;\n        var spinnerSize = 'medium';\n        if (spacing !== 'default') {\n            spinnerSize = 'small';\n        }\n        return (React.createElement(LoadingDiv, null,\n            React.createElement(Spinner, { size: spinnerSize, invertColor: this.invertSpinner() })));\n    };\n    return LoadingSpinner;\n}(React.Component));\nexport default LoadingSpinner;\nvar templateObject_1;\n//# sourceMappingURL=LoadingSpinner.js.map","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent, } from '@atlaskit/analytics-next';\nimport withDeprecationWarnings from './withDeprecationWarnings';\nimport getButtonProps from './getButtonProps';\nimport CustomComponentProxy from './CustomComponentProxy';\nimport getButtonStyles from '../styled/getButtonStyles';\nimport ButtonContent from '../styled/ButtonContent';\nimport ButtonWrapper from '../styled/ButtonWrapper';\nimport IconWrapper from '../styled/IconWrapper';\nimport LoadingSpinner from '../styled/LoadingSpinner';\nimport { name as packageName, version as packageVersion, } from '../../package.json';\nimport { withDefaultProps } from '@atlaskit/type-helpers';\nvar StyledButton = styled.button(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject([\"\\n  \", \";\\n\"], [\"\\n  \", \";\\n\"])), getButtonStyles);\nStyledButton.displayName = 'StyledButton';\n// Target the <a> here to override a:hover specificity.\nvar StyledLink = styled.a(templateObject_2 || (templateObject_2 = tslib_1.__makeTemplateObject([\"\\n  a& {\\n    \", \";\\n  }\\n\"], [\"\\n  a& {\\n    \", \";\\n  }\\n\"])), getButtonStyles);\nStyledLink.displayName = 'StyledLink';\nvar StyledSpan = styled.span(templateObject_3 || (templateObject_3 = tslib_1.__makeTemplateObject([\"\\n  \", \";\\n\"], [\"\\n  \", \";\\n\"])), getButtonStyles);\nStyledSpan.displayName = 'StyledSpan';\nvar createStyledComponent = function () {\n    // Override pseudo-state specificity.\n    // This is necessary because we don't know what DOM element the custom component will render.\n    var component = styled(CustomComponentProxy)(templateObject_4 || (templateObject_4 = tslib_1.__makeTemplateObject([\"\\n    &,\\n    a&,\\n    &:hover,\\n    &:active,\\n    &:focus {\\n      \", \"\\n    }\\n  \"], [\"\\n    &,\\n    a&,\\n    &:hover,\\n    &:active,\\n    &:focus {\\n      \", \"\\n    }\\n  \"])), getButtonStyles);\n    component.displayName = 'StyledCustomComponent';\n    return component;\n};\nexport var defaultProps = {\n    appearance: 'default',\n    isDisabled: false,\n    isSelected: false,\n    isLoading: false,\n    spacing: 'default',\n    type: 'button',\n    shouldFitContainer: false,\n    autoFocus: false,\n};\nvar Button = /** @class */ (function (_super) {\n    tslib_1.__extends(Button, _super);\n    function Button() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.state = {\n            isActive: false,\n            isFocus: false,\n            isHover: false,\n        };\n        _this.customComponent = null;\n        _this.isInteractive = function () { return !_this.props.isDisabled && !_this.props.isLoading; };\n        _this.onMouseEnter = function () {\n            _this.setState({ isHover: true });\n        };\n        _this.onMouseLeave = function () { return _this.setState({ isHover: false, isActive: false }); };\n        _this.onMouseDown = function (e) {\n            e.preventDefault();\n            _this.setState({ isActive: true });\n        };\n        _this.onMouseUp = function () { return _this.setState({ isActive: false }); };\n        _this.onFocus = function (event) {\n            _this.setState({ isFocus: true });\n            if (_this.props.onFocus) {\n                _this.props.onFocus(event);\n            }\n        };\n        _this.onBlur = function (event) {\n            _this.setState({ isFocus: false });\n            if (_this.props.onBlur) {\n                _this.props.onBlur(event);\n            }\n        };\n        /* Swallow click events when the button is disabled to prevent inner child clicks bubbling up */\n        _this.onInnerClick = function (e) {\n            if (!_this.isInteractive()) {\n                e.stopPropagation();\n            }\n            return true;\n        };\n        _this.getInnerRef = function (ref) {\n            _this.button = ref;\n            if (_this.props.innerRef) {\n                _this.props.innerRef(ref);\n            }\n        };\n        return _this;\n    }\n    Button.prototype.componentWillReceiveProps = function (nextProps) {\n        if (this.props.component !== nextProps.component) {\n            delete this.customComponent;\n        }\n    };\n    Button.prototype.componentDidMount = function () {\n        if (this.props.autoFocus && this.button) {\n            this.button.focus();\n        }\n    };\n    Button.prototype.getStyledComponent = function () {\n        if (this.props.component) {\n            if (!this.customComponent) {\n                this.customComponent = createStyledComponent();\n            }\n            return this.customComponent;\n        }\n        if (this.props.href) {\n            return this.props.isDisabled ? StyledSpan : StyledLink;\n        }\n        return StyledButton;\n    };\n    Button.prototype.render = function () {\n        var _a = this.props, children = _a.children, iconBefore = _a.iconBefore, iconAfter = _a.iconAfter, isLoading = _a.isLoading, shouldFitContainer = _a.shouldFitContainer, spacing = _a.spacing, appearance = _a.appearance, isSelected = _a.isSelected, isDisabled = _a.isDisabled;\n        var buttonProps = getButtonProps(this);\n        var StyledComponent = this.getStyledComponent();\n        var iconIsOnlyChild = !!((iconBefore && !iconAfter && !children) ||\n            (iconAfter && !iconBefore && !children));\n        return (React.createElement(StyledComponent, tslib_1.__assign({ innerRef: this.getInnerRef }, buttonProps),\n            React.createElement(ButtonWrapper, { onClick: this.onInnerClick, fit: !!shouldFitContainer },\n                isLoading ? (React.createElement(LoadingSpinner, { spacing: spacing, appearance: appearance, isSelected: isSelected, isDisabled: isDisabled })) : null,\n                iconBefore ? (React.createElement(IconWrapper, { isLoading: isLoading, spacing: buttonProps.spacing, isOnlyChild: iconIsOnlyChild }, iconBefore)) : null,\n                children ? (React.createElement(ButtonContent, { isLoading: isLoading, followsIcon: !!iconBefore, spacing: buttonProps.spacing }, children)) : null,\n                iconAfter ? (React.createElement(IconWrapper, { isLoading: isLoading, spacing: buttonProps.spacing, isOnlyChild: iconIsOnlyChild }, iconAfter)) : null)));\n    };\n    return Button;\n}(React.Component));\nexport { Button };\nexport var DefaultedButton = withDefaultProps(defaultProps, Button);\nexport var ButtonBase = Button;\nexport var ButtonWithoutAnalytics = withDeprecationWarnings(DefaultedButton);\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n    componentName: 'button',\n    packageName: packageName,\n    packageVersion: packageVersion,\n})(withAnalyticsEvents({\n    onClick: createAndFireEventOnAtlaskit({\n        action: 'clicked',\n        actionSubject: 'button',\n        attributes: {\n            componentName: 'button',\n            packageName: packageName,\n            packageVersion: packageVersion,\n        },\n    }),\n})(ButtonWithoutAnalytics));\nvar templateObject_1, templateObject_2, templateObject_3, templateObject_4;\n//# sourceMappingURL=Button.js.map","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport { colors, gridSize, math, themed } from '@atlaskit/theme';\nimport { flexMaxHeightIEFix } from '../utils/flex-max-height-ie-fix'; // Constants\n// ==============================\n\nvar innerGutter = 16;\nvar outerGutter = 20;\nvar keylineColor = themed({\n  light: colors.N30,\n  dark: colors.DN30\n});\nexport var keylineHeight = 2; // Wrapper\n// ==============================\n\nvar DefaultWrapperComponent = styled.div.withConfig({\n  displayName: \"Content__DefaultWrapperComponent\",\n  componentId: \"sc-1npw367-0\"\n})([\"\\n  display: flex;\\n  flex-direction: column;\\n  flex: 1 1 auto;\\n  \", \";\\n\"], flexMaxHeightIEFix);\nexport var Wrapper = function Wrapper(_ref) {\n  var component = _ref.component,\n      children = _ref.children;\n  var StyledComponent = DefaultWrapperComponent;\n\n  if (component !== 'div') {\n    // $FlowFixMe\n    StyledComponent = styled(component).withConfig({\n      displayName: \"Content__StyledComponent\",\n      componentId: \"sc-1npw367-1\"\n    })([\"\\n      display: flex;\\n      flex-direction: column;\\n      flex: 1 1 auto;\\n      \", \";\\n    \"], flexMaxHeightIEFix);\n  }\n\n  return React.createElement(StyledComponent, null, children);\n};\nWrapper.defaultProps = {\n  component: 'div'\n}; // Header\n// ==============================\n\nvar HeaderOrFooter = styled.div.withConfig({\n  displayName: \"Content__HeaderOrFooter\",\n  componentId: \"sc-1npw367-2\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n  flex: 0 0 auto;\\n  justify-content: space-between;\\n  transition: box-shadow 200ms;\\n  z-index: 1;\\n\"]);\nexport var Header = styled(HeaderOrFooter).withConfig({\n  displayName: \"Content__Header\",\n  componentId: \"sc-1npw367-3\"\n})([\"\\n  padding: \", \"px \", \"px \", \"px;\\n  box-shadow: \", \";\\n\"], outerGutter, outerGutter, innerGutter - keylineHeight, function (p) {\n  return p.showKeyline ? \" 0 \".concat(keylineHeight, \"px 0 0 \").concat(keylineColor(p)) : 'none';\n}); // Title\n\nvar oneLineTitleText = css([\"\\n  white-space: nowrap;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n\"]);\nexport var Title = styled.h4.withConfig({\n  displayName: \"Content__Title\",\n  componentId: \"sc-1npw367-4\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n  font-size: 20px;\\n  font-style: inherit;\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  line-height: 1;\\n  margin: 0;\\n  min-width: 0;\\n\"]);\nexport var TitleText = styled.span.withConfig({\n  displayName: \"Content__TitleText\",\n  componentId: \"sc-1npw367-5\"\n})([\"\\n  flex: 1 1 auto;\\n  min-width: 0;\\n  word-wrap: break-word;\\n  width: 100%;\\n  \", \";\\n\"], function (_ref2) {\n  var isHeadingMultiline = _ref2.isHeadingMultiline;\n  return !isHeadingMultiline && oneLineTitleText;\n});\nvar iconColor = {\n  danger: colors.R400,\n  warning: colors.Y400\n};\nexport var TitleIconWrapper = styled.span.withConfig({\n  displayName: \"Content__TitleIconWrapper\",\n  componentId: \"sc-1npw367-6\"\n})([\"\\n  color: \", \";\\n  margin-right: \", \"px;\\n  flex: 0 0 auto;\\n\"], function (p) {\n  return iconColor[p.appearance];\n}, gridSize); // Body\n// ==============================\n\n/**\n  Adding the padding here avoids cropping box shadow on first/last\n  children. The combined vertical spacing is maintained by subtracting the\n  keyline height from header and footer.\n*/\n\nexport var Body = styled.div.withConfig({\n  displayName: \"Content__Body\",\n  componentId: \"sc-1npw367-7\"\n})([\"\\n  flex: 1 1 auto;\\n  \", \";\\n\\n  @media (min-width: 320px) and (max-width: 480px) {\\n    overflow-y: auto;\\n    height: 100%;\\n  }\\n\"], function (p) {\n  return p.shouldScroll ? \"\\n          overflow-y: auto;\\n          overflow-x: hidden;\\n          padding: \".concat(keylineHeight, \"px \").concat(outerGutter, \"px;\\n        \") : \"\\n          padding: 0 \".concat(outerGutter, \"px;\\n        \");\n});\nexport var styledBody = function styledBody(component) {\n  return component ? // $FlowFixMe\n  styled(component).withConfig({\n    displayName: \"Content\",\n    componentId: \"sc-1npw367-8\"\n  })([\"\\n        flex: 1 1 auto;\\n        \", \";\\n      \"], function (p) {\n    return p.shouldScroll ? \"\\n            overflow-y: auto;\\n            overflow-x: hidden;\\n            padding: \".concat(keylineHeight, \"px \").concat(outerGutter, \"px;\\n          \") : \"\\n            border-radius: 0px;\\n            padding: 0 \".concat(outerGutter, \"px;\\n    \");\n  }) : undefined;\n}; // Footer\n// ==============================\n\nexport var Footer = styled(HeaderOrFooter).withConfig({\n  displayName: \"Content__Footer\",\n  componentId: \"sc-1npw367-9\"\n})([\"\\n  padding: \", \"px \", \"px \", \"px;\\n  box-shadow: \", \";\\n\"], innerGutter - keylineHeight, outerGutter, outerGutter, function (p) {\n  return p.showKeyline ? \"0 -\".concat(keylineHeight, \"px 0 0 \").concat(keylineColor(p)) : 'none';\n});\nexport var Actions = styled.div.withConfig({\n  displayName: \"Content__Actions\",\n  componentId: \"sc-1npw367-10\"\n})([\"\\n  display: inline-flex;\\n  margin: 0 -\", \"px;\\n\"], math.divide(gridSize, 2));\nexport var ActionItem = styled.div.withConfig({\n  displayName: \"Content__ActionItem\",\n  componentId: \"sc-1npw367-11\"\n})([\"\\n  flex: 1 0 auto;\\n  margin: 0 \", \"px;\\n\"], math.divide(gridSize, 2));","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { createElement, Component } from 'react';\nimport Button from '@atlaskit/button';\nimport { Actions, ActionItem, Footer } from '../styled/Content';\n\nvar JustifyShim = function JustifyShim(props) {\n  return React.createElement(\"span\", props);\n};\n\nvar ModalFooter =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(ModalFooter, _Component);\n\n  function ModalFooter() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, ModalFooter);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ModalFooter)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_this), \"props\", void 0);\n\n    return _this;\n  }\n\n  _createClass(ModalFooter, [{\n    key: \"render\",\n    // eslint-disable-line react/sort-comp\n    value: function render() {\n      var _this$props = this.props,\n          actions = _this$props.actions,\n          appearance = _this$props.appearance,\n          component = _this$props.component,\n          onClose = _this$props.onClose,\n          showKeyline = _this$props.showKeyline;\n      var warning = 'You can provide `component` OR `actions`, not both.';\n      if (!component && !actions) return null;\n      if (component && actions) return console.warn(warning); // eslint-disable-line no-console\n\n      if (component) {\n        return createElement(component, {\n          appearance: appearance,\n          onClose: onClose,\n          showKeyline: showKeyline\n        });\n      }\n\n      return React.createElement(Footer, {\n        showKeyline: showKeyline\n      }, React.createElement(JustifyShim, null), React.createElement(Actions, null, actions ? actions.map(function (_ref, idx) {\n        var text = _ref.text,\n            rest = _objectWithoutProperties(_ref, [\"text\"]);\n\n        var variant = idx ? 'subtle' : appearance || 'primary';\n        return React.createElement(ActionItem, {\n          key: text || idx\n        }, React.createElement(Button, _extends({\n          appearance: variant\n        }, rest), text));\n      }) : null));\n    }\n  }]);\n\n  return ModalFooter;\n}(Component);\n\nexport { ModalFooter as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { createElement, Component } from 'react';\nimport ErrorIcon from '@atlaskit/icon/glyph/error';\nimport WarningIcon from '@atlaskit/icon/glyph/warning';\nimport { Header, Title, TitleText, TitleIconWrapper as IconWrapper } from '../styled/Content';\nvar icon = {\n  danger: ErrorIcon,\n  warning: WarningIcon\n};\n\nvar TitleIcon = function TitleIcon(_ref) {\n  var appearance = _ref.appearance;\n  if (!appearance) return null;\n  var Icon = icon[appearance];\n  return React.createElement(IconWrapper, {\n    appearance: appearance\n  }, React.createElement(Icon, {\n    label: \"\".concat(appearance, \" icon\")\n  }));\n};\n\nvar ModalHeader =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(ModalHeader, _Component);\n\n  function ModalHeader() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, ModalHeader);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ModalHeader)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_this), \"props\", void 0);\n\n    return _this;\n  }\n\n  _createClass(ModalHeader, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          component = _this$props.component,\n          heading = _this$props.heading,\n          onClose = _this$props.onClose,\n          showKeyline = _this$props.showKeyline,\n          isHeadingMultiline = _this$props.isHeadingMultiline;\n      var warning = 'You can provide `component` OR `heading`, not both.';\n      if (!component && !heading) return null;\n      if (component && heading) return console.warn(warning); // eslint-disable-line no-console\n\n      if (component) {\n        return createElement(component, {\n          appearance: appearance,\n          onClose: onClose,\n          showKeyline: showKeyline,\n          isHeadingMultiline: isHeadingMultiline\n        });\n      }\n\n      return React.createElement(Header, {\n        showKeyline: showKeyline\n      }, React.createElement(Title, {\n        isHeadingMultiline: isHeadingMultiline\n      }, React.createElement(TitleIcon, {\n        appearance: appearance\n      }), React.createElement(TitleText, {\n        isHeadingMultiline: isHeadingMultiline\n      }, heading)));\n    }\n  }]);\n\n  return ModalHeader;\n}(Component);\n\n_defineProperty(ModalHeader, \"defaultProps\", {\n  isHeadingMultiline: true\n});\n\nexport { ModalHeader as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport rafSchedule from 'raf-schd';\nimport ScrollLock from 'react-scrolllock';\nimport Footer from './Footer';\nimport Header from './Header';\nimport { Body as DefaultBody, styledBody, keylineHeight, Wrapper } from '../styled/Content';\n\nfunction getInitialState() {\n  return {\n    showFooterKeyline: false,\n    showHeaderKeyline: false,\n    tabbableElements: []\n  };\n}\n\nvar Content =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Content, _Component);\n\n  function Content() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Content);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Content)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_this), \"escapeIsHeldDown\", false);\n\n    _defineProperty(_assertThisInitialized(_this), \"_isMounted\", false);\n\n    _defineProperty(_assertThisInitialized(_this), \"scrollContainer\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", getInitialState());\n\n    _defineProperty(_assertThisInitialized(_this), \"determineKeylines\", rafSchedule(function () {\n      if (!_this.scrollContainer) return;\n      var _this$scrollContainer = _this.scrollContainer,\n          scrollTop = _this$scrollContainer.scrollTop,\n          scrollHeight = _this$scrollContainer.scrollHeight,\n          clientHeight = _this$scrollContainer.clientHeight;\n      var scrollableDistance = scrollHeight - clientHeight;\n      var showHeaderKeyline = scrollTop > keylineHeight;\n      var showFooterKeyline = scrollTop <= scrollableDistance - keylineHeight;\n\n      _this.setState({\n        showHeaderKeyline: showHeaderKeyline,\n        showFooterKeyline: showFooterKeyline\n      });\n    }));\n\n    _defineProperty(_assertThisInitialized(_this), \"getScrollContainer\", function (ref) {\n      if (!ref) return;\n      _this.scrollContainer = ref;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleKeyUp\", function () {\n      _this.escapeIsHeldDown = false;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleKeyDown\", function (event) {\n      var _this$props = _this.props,\n          onClose = _this$props.onClose,\n          shouldCloseOnEscapePress = _this$props.shouldCloseOnEscapePress,\n          _this$props$stackInde = _this$props.stackIndex,\n          stackIndex = _this$props$stackInde === void 0 ? 0 : _this$props$stackInde; // avoid consumers accidently closing multiple modals if they hold escape.\n\n      if (_this.escapeIsHeldDown) return;\n      if (event.key === 'Escape') _this.escapeIsHeldDown = true; // only the foremost modal should be interactive.\n\n      if (!_this._isMounted || stackIndex > 0) return;\n\n      switch (event.key) {\n        case 'Escape':\n          if (shouldCloseOnEscapePress) onClose(event);\n          break;\n\n        default:\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleStackChange\", function (stackIndex) {\n      var onStackChange = _this.props.onStackChange;\n      if (onStackChange) onStackChange(stackIndex);\n    });\n\n    return _this;\n  }\n\n  _createClass(Content, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this._isMounted = true; // $FlowFixMe - issue with document.addEventListener - Enum incompatible\n\n      document.addEventListener('keydown', this.handleKeyDown, false);\n      document.addEventListener('keyup', this.handleKeyUp, false);\n\n      if (this.scrollContainer) {\n        var capturedScrollContainer = this.scrollContainer;\n        window.addEventListener('resize', this.determineKeylines, false);\n        capturedScrollContainer.addEventListener('scroll', this.determineKeylines, false);\n        this.determineKeylines();\n      }\n      /* eslint-disable no-console */\n      // Check for deprecated props\n\n\n      if (this.props.header) console.warn(\"@atlaskit/modal-dialog: Deprecation warning - Use of the header prop in ModalDialog is deprecated. Please compose your ModalDialog using the 'components' prop instead\");\n      if (this.props.footer) console.warn(\"@atlaskit/modal-dialog: Deprecation warning - Use of the footer prop in ModalDialog is deprecated. Please compose your ModalDialog using the 'components' prop instead\");\n      if (this.props.body) console.warn(\"@atlaskit/modal-dialog: Deprecation warning - Use of the body prop in ModalDialog is deprecated. Please compose your ModalDialog using the 'components' prop instead\"); // Check that custom body components have used ForwardRef to attach to a DOM element\n\n      if (this.props.components.Body) {\n        if (!(this.scrollContainer instanceof HTMLElement)) {\n          console.warn('@atlaskit/modal-dialog: Warning - Ref must attach to a DOM element; check you are using forwardRef and attaching the ref to an appropriate element. Check the examples for more details.');\n        }\n      }\n      /* eslint-enable no-console */\n\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(nextProps) {\n      var stackIndex = this.props.stackIndex; // update focus scope and let consumer know when stack index has changed\n\n      if (nextProps.stackIndex && nextProps.stackIndex !== stackIndex) {\n        this.handleStackChange(nextProps.stackIndex);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this._isMounted = false; // $FlowFixMe - issue with document.addEventListener - Enum incompatible\n\n      document.removeEventListener('keydown', this.handleKeyDown, false);\n      document.removeEventListener('keyup', this.handleKeyUp, false);\n\n      if (this.scrollContainer) {\n        var capturedScrollContainer = this.scrollContainer;\n        window.removeEventListener('resize', this.determineKeylines, false);\n        capturedScrollContainer.removeEventListener('scroll', this.determineKeylines, false);\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props2 = this.props,\n          actions = _this$props2.actions,\n          appearance = _this$props2.appearance,\n          DeprecatedBody = _this$props2.body,\n          components = _this$props2.components,\n          children = _this$props2.children,\n          footer = _this$props2.footer,\n          header = _this$props2.header,\n          heading = _this$props2.heading,\n          onClose = _this$props2.onClose,\n          isChromeless = _this$props2.isChromeless,\n          isHeadingMultiline = _this$props2.isHeadingMultiline,\n          shouldScroll = _this$props2.shouldScroll;\n      var _components$Container = components.Container,\n          Container = _components$Container === void 0 ? 'div' : _components$Container,\n          CustomBody = components.Body; // Only load in 'div' default if there's no deprecated 'body' prop provided\n      // Prefer components.Body over deprecated body prop and default to DefaultBody\n\n      var BodyComponent = styledBody(CustomBody) || DeprecatedBody || DefaultBody;\n      var _this$state = this.state,\n          showFooterKeyline = _this$state.showFooterKeyline,\n          showHeaderKeyline = _this$state.showHeaderKeyline;\n      return React.createElement(Wrapper, {\n        component: Container\n      }, isChromeless ? children : React.createElement(React.Fragment, null, React.createElement(Header, {\n        appearance: appearance,\n        component: components.Header ? components.Header : header,\n        heading: heading,\n        onClose: onClose,\n        isHeadingMultiline: isHeadingMultiline,\n        showKeyline: showHeaderKeyline\n      }), React.createElement(BodyComponent, {\n        innerRef: this.getScrollContainer,\n        shouldScroll: shouldScroll\n      }, children), React.createElement(Footer, {\n        actions: actions,\n        appearance: appearance,\n        component: components.Footer ? components.Footer : footer,\n        onClose: onClose,\n        showKeyline: showFooterKeyline\n      })), React.createElement(ScrollLock, null));\n    }\n  }]);\n\n  return Content;\n}(Component);\n\n_defineProperty(Content, \"defaultProps\", {\n  autoFocus: false,\n  components: {},\n  isChromeless: false,\n  stackIndex: 0,\n  isHeadingMultiline: true\n});\n\nexport { Content as default };","export var toArray = function toArray(a) {\n  var ret = Array(a.length);\n  for (var i = 0; i < a.length; ++i) {\n    ret[i] = a[i];\n  }\n  return ret;\n};\n\nexport var arrayFind = function arrayFind(array, search) {\n  return array.filter(function (a) {\n    return a === search;\n  })[0];\n};\n\nexport var asArray = function asArray(a) {\n  return Array.isArray(a) ? a : [a];\n};","import { toArray } from './array';\n\nexport var tabSort = function tabSort(a, b) {\n  var tabDiff = a.tabIndex - b.tabIndex;\n  var indexDiff = a.index - b.index;\n\n  if (tabDiff) {\n    if (!a.tabIndex) return 1;\n    if (!b.tabIndex) return -1;\n  }\n\n  return tabDiff || indexDiff;\n};\n\nexport var orderByTabIndex = function orderByTabIndex(nodes, filterNegative, keepGuards) {\n  return toArray(nodes).map(function (node, index) {\n    return {\n      node: node,\n      index: index,\n      tabIndex: keepGuards && node.tabIndex === -1 ? (node.dataset || {}).focusGuard ? 0 : -1 : node.tabIndex\n    };\n  }).filter(function (data) {\n    return !filterNegative || data.tabIndex >= 0;\n  }).sort(tabSort);\n};","export default ['button:enabled:not([readonly])', 'select:enabled:not([readonly])', 'textarea:enabled:not([readonly])', 'input:enabled:not([readonly])', 'a[href]', 'area[href]', 'iframe', 'object', 'embed', '[tabindex]', '[contenteditable]', '[autofocus]'];","export var FOCUS_GROUP = 'data-focus-lock';\nexport var FOCUS_DISABLED = 'data-focus-lock-disabled';\nexport var FOCUS_ALLOW = 'data-no-focus-lock';\nexport var FOCUS_AUTO = 'data-autofocus-inside';","import tabbables from './tabbables';\nimport { toArray } from './array';\nimport { FOCUS_AUTO } from '../constants';\n\nvar queryTabbables = tabbables.join(',');\nvar queryGuardTabbables = queryTabbables + ', [data-focus-guard]';\n\nexport var getFocusables = function getFocusables(parents, withGuards) {\n  return parents.reduce(function (acc, parent) {\n    return acc.concat(\n    // add all tabbables inside\n    toArray(parent.querySelectorAll(withGuards ? queryGuardTabbables : queryTabbables)),\n    // add if node is tabble itself\n    parent.parentNode ? toArray(parent.parentNode.querySelectorAll(tabbables.join(','))).filter(function (node) {\n      return node === parent;\n    }) : []);\n  }, []);\n};\n\nexport var getParentAutofocusables = function getParentAutofocusables(parent) {\n  var parentFocus = parent.querySelectorAll('[' + FOCUS_AUTO + ']');\n  return toArray(parentFocus).map(function (node) {\n    return getFocusables([node]);\n  }).reduce(function (acc, nodes) {\n    return acc.concat(nodes);\n  }, []);\n};","import { orderByTabIndex } from './tabOrder';\nimport { getFocusables, getParentAutofocusables } from './tabUtils';\nimport { toArray } from './array';\n\nvar isElementHidden = function isElementHidden(computedStyle) {\n  if (!computedStyle || !computedStyle.getPropertyValue) {\n    return false;\n  }\n  return computedStyle.getPropertyValue('display') === 'none' || computedStyle.getPropertyValue('visibility') === 'hidden';\n};\n\nexport var isVisible = function isVisible(node) {\n  return !node || node === document || !isElementHidden(window.getComputedStyle(node, null)) && isVisible(node.parentNode);\n};\n\nexport var notHiddenInput = function notHiddenInput(node) {\n  return !((node.tagName === 'INPUT' || node.tagName === 'BUTTON') && (node.type === 'hidden' || node.disabled));\n};\n\nvar getParents = function getParents(node) {\n  var parents = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n  parents.push(node);\n  if (node.parentNode) {\n    getParents(node.parentNode, parents);\n  }\n  return parents;\n};\n\nexport var getCommonParent = function getCommonParent(nodea, nodeb) {\n  var parentsA = getParents(nodea);\n  var parentsB = getParents(nodeb);\n\n  for (var i = 0; i < parentsA.length; i += 1) {\n    var currentParent = parentsA[i];\n    if (parentsB.indexOf(currentParent) >= 0) {\n      return currentParent;\n    }\n  }\n  return false;\n};\n\nexport var filterFocusable = function filterFocusable(nodes) {\n  return toArray(nodes).filter(function (node) {\n    return isVisible(node);\n  }).filter(function (node) {\n    return notHiddenInput(node);\n  });\n};\n\nexport var getTabbableNodes = function getTabbableNodes(topNodes, withGuards) {\n  return orderByTabIndex(filterFocusable(getFocusables(topNodes, withGuards)), true, withGuards);\n};\n\nexport var getAllTabbableNodes = function getAllTabbableNodes(topNodes) {\n  return orderByTabIndex(filterFocusable(getFocusables(topNodes)), false);\n};\n\nexport var parentAutofocusables = function parentAutofocusables(topNode) {\n  return filterFocusable(getParentAutofocusables(topNode));\n};","var isRadio = function isRadio(node) {\n  return node.tagName === 'INPUT' && node.type === 'radio';\n};\n\nvar findSelectedRadio = function findSelectedRadio(node, nodes) {\n  return nodes.filter(isRadio).filter(function (el) {\n    return el.name === node.name;\n  }).filter(function (el) {\n    return el.checked;\n  })[0] || node;\n};\n\nvar pickFirstFocus = function pickFirstFocus(nodes) {\n  if (nodes[0] && nodes.length > 1) {\n    if (isRadio(nodes[0]) && nodes[0].name) {\n      return findSelectedRadio(nodes[0], nodes);\n    }\n  }\n  return nodes[0];\n};\n\nexport default pickFirstFocus;","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nimport { FOCUS_DISABLED, FOCUS_GROUP } from '../constants';\nimport { asArray, toArray } from './array';\n\nvar filterNested = function filterNested(nodes) {\n  var l = nodes.length;\n  for (var i = 0; i < l; i += 1) {\n    var _loop = function _loop(j) {\n      if (i !== j) {\n        if (nodes[i].contains(nodes[j])) {\n          return {\n            v: filterNested(nodes.filter(function (x) {\n              return x !== nodes[j];\n            }))\n          };\n        }\n      }\n    };\n\n    for (var j = 0; j < l; j += 1) {\n      var _ret = _loop(j);\n\n      if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n    }\n  }\n  return nodes;\n};\n\nvar getTopParent = function getTopParent(node) {\n  return node.parentNode ? getTopParent(node.parentNode) : node;\n};\n\nvar getAllAffectedNodes = function getAllAffectedNodes(node) {\n  var nodes = asArray(node);\n  return nodes.filter(Boolean).reduce(function (acc, currentNode) {\n    var group = currentNode.getAttribute(FOCUS_GROUP);\n    acc.push.apply(acc, group ? filterNested(toArray(getTopParent(currentNode).querySelectorAll('[' + FOCUS_GROUP + '=\"' + group + '\"]:not([' + FOCUS_DISABLED + '=\"disabled\"])'))) : [currentNode]);\n    return acc;\n  }, []);\n};\n\nexport default getAllAffectedNodes;","import { getCommonParent, getTabbableNodes, getAllTabbableNodes, parentAutofocusables } from './utils/DOMutils';\nimport pickFirstFocus from './utils/firstFocus';\nimport getAllAffectedNodes from './utils/all-affected';\nimport { asArray } from './utils/array';\n\nvar findAutoFocused = function findAutoFocused(autoFocusables) {\n  return function (node) {\n    return !!node.autofocus || node.dataset && !!node.dataset.autofocus || autoFocusables.indexOf(node) >= 0;\n  };\n};\n\nvar isGuard = function isGuard(node) {\n  return node.dataset && node.dataset.focusGuard;\n};\nvar notAGuard = function notAGuard(node) {\n  return !isGuard(node);\n};\n\nexport var newFocus = function newFocus(innerNodes, outerNodes, activeElement, lastNode, autoFocused) {\n  var cnt = innerNodes.length;\n  var firstFocus = innerNodes[0];\n  var lastFocus = innerNodes[cnt - 1];\n\n  // focus is inside\n  if (innerNodes.indexOf(activeElement) >= 0) {\n    return undefined;\n  }\n\n  var activeIndex = outerNodes.indexOf(activeElement);\n  var lastIndex = outerNodes.indexOf(lastNode || activeIndex);\n  var lastNodeInside = innerNodes.indexOf(lastNode);\n  var indexDiff = activeIndex - lastIndex;\n  var firstNodeIndex = outerNodes.indexOf(firstFocus);\n  var lastNodeIndex = outerNodes.indexOf(lastFocus);\n\n  // new focus\n  if (activeIndex === -1 || lastNodeInside === -1) {\n    return innerNodes.indexOf(autoFocused.length ? pickFirstFocus(autoFocused) : pickFirstFocus(innerNodes));\n  }\n  // old focus\n  if (!indexDiff && lastNodeInside >= 0) {\n    return lastNodeInside;\n  }\n  // first element\n  if (activeIndex <= firstNodeIndex && isGuard(activeElement) && Math.abs(indexDiff) > 1) {\n    return 0;\n  }\n  // jump out\n  if (indexDiff && Math.abs(indexDiff) > 1) {\n    return lastNodeInside;\n  }\n  // focus above lock\n  if (activeIndex <= firstNodeIndex) {\n    return cnt - 1;\n  }\n  // focus below lock\n  if (activeIndex > lastNodeIndex) {\n    return 0;\n  }\n  // index is inside tab order, but outside Lock\n  if (indexDiff) {\n    if (Math.abs(indexDiff) > 1) {\n      return lastNodeInside;\n    }\n    return (cnt + lastNodeInside + indexDiff) % cnt;\n  }\n  // do nothing\n  return undefined;\n};\n\nvar getTopCommonParent = function getTopCommonParent(baseActiveElement, leftEntry, rightEntries) {\n  var activeElements = asArray(baseActiveElement);\n  var leftEntries = asArray(leftEntry);\n  var activeElement = activeElements[0];\n  var topCommon = null;\n  leftEntries.filter(Boolean).forEach(function (entry) {\n    topCommon = getCommonParent(topCommon || entry, entry) || topCommon;\n    rightEntries.filter(Boolean).forEach(function (subEntry) {\n      var common = getCommonParent(activeElement, subEntry);\n      if (common) {\n        if (!topCommon || common.contains(topCommon)) {\n          topCommon = common;\n        } else {\n          topCommon = getCommonParent(common, topCommon);\n        }\n      }\n    });\n  });\n  return topCommon;\n};\n\nvar allParentAutofocusables = function allParentAutofocusables(entries) {\n  return entries.reduce(function (acc, node) {\n    return acc.concat(parentAutofocusables(node));\n  }, []);\n};\n\nvar reorderNodes = function reorderNodes(srcNodes, dstNodes) {\n  return srcNodes.map(function (dnode) {\n    return dstNodes.find(function (_ref) {\n      var node = _ref.node;\n      return dnode === node;\n    });\n  }).filter(Boolean);\n};\n\nexport var getFocusabledIn = function getFocusabledIn(topNode) {\n  var entries = getAllAffectedNodes(topNode).filter(notAGuard);\n  var commonParent = getTopCommonParent(topNode, topNode, entries);\n  var outerNodes = getTabbableNodes([commonParent], true);\n  var innerElements = getTabbableNodes(entries).filter(function (_ref2) {\n    var node = _ref2.node;\n    return notAGuard(node);\n  }).map(function (_ref3) {\n    var node = _ref3.node;\n    return node;\n  });\n\n  return outerNodes.map(function (_ref4) {\n    var node = _ref4.node,\n        index = _ref4.index;\n    return {\n      node: node,\n      index: index,\n      lockItem: innerElements.indexOf(node) >= 0,\n      guard: isGuard(node)\n    };\n  });\n};\n\nvar getFocusMerge = function getFocusMerge(topNode, lastNode) {\n  var activeElement = document && document.activeElement;\n  var entries = getAllAffectedNodes(topNode).filter(notAGuard);\n\n  var commonParent = getTopCommonParent(activeElement || topNode, topNode, entries);\n\n  var innerElements = getTabbableNodes(entries).filter(function (_ref5) {\n    var node = _ref5.node;\n    return notAGuard(node);\n  });\n\n  if (!innerElements[0]) {\n    innerElements = getAllTabbableNodes(entries).filter(function (_ref6) {\n      var node = _ref6.node;\n      return notAGuard(node);\n    });\n    if (!innerElements[0]) {\n      return undefined;\n    }\n  }\n\n  var outerNodes = getTabbableNodes([commonParent]).map(function (_ref7) {\n    var node = _ref7.node;\n    return node;\n  });\n  var orderedInnerElements = reorderNodes(outerNodes, innerElements);\n  var innerNodes = orderedInnerElements.map(function (_ref8) {\n    var node = _ref8.node;\n    return node;\n  });\n\n  var newId = newFocus(innerNodes, outerNodes, activeElement, lastNode, innerNodes.filter(findAutoFocused(allParentAutofocusables(entries))));\n\n  if (newId === undefined) {\n    return newId;\n  }\n  return orderedInnerElements[newId];\n};\n\nexport default getFocusMerge;","import getAllAffectedNodes from './utils/all-affected';\nimport { arrayFind, toArray } from './utils/array';\n\nvar focusInFrame = function focusInFrame(frame) {\n  return frame === document.activeElement;\n};\n\nvar focusInsideIframe = function focusInsideIframe(topNode) {\n  return !!arrayFind(toArray(topNode.querySelectorAll('iframe')), focusInFrame);\n};\n\nvar focusInside = function focusInside(topNode) {\n  var activeElement = document && document.activeElement;\n\n  if (!activeElement || activeElement.dataset && activeElement.dataset.focusGuard) {\n    return false;\n  }\n  return getAllAffectedNodes(topNode).reduce(function (result, node) {\n    return result || node.contains(activeElement) || focusInsideIframe(node);\n  }, false);\n};\n\nexport default focusInside;","import { toArray } from './utils/array';\nimport { FOCUS_ALLOW } from './constants';\n\nvar focusIsHidden = function focusIsHidden() {\n  return document && toArray(document.querySelectorAll('[' + FOCUS_ALLOW + ']')).some(function (node) {\n    return node.contains(document.activeElement);\n  });\n};\n\nexport default focusIsHidden;","import getFocusMerge from './focusMerge';\n\nexport var focusOn = function focusOn(target) {\n  target.focus();\n  if (target.contentWindow) {\n    target.contentWindow.focus();\n  }\n};\n\nvar guardCount = 0;\nvar lockDisabled = false;\n\nexport default (function (topNode, lastNode) {\n  var focusable = getFocusMerge(topNode, lastNode);\n\n  if (lockDisabled) {\n    return;\n  }\n\n  if (focusable) {\n    if (guardCount > 2) {\n      // eslint-disable-next-line no-console\n      console.error('FocusLock: focus-fighting detected. Only one focus management system could be active. ' + 'See https://github.com/theKashey/focus-lock/#focus-fighting');\n      lockDisabled = true;\n      setTimeout(function () {\n        lockDisabled = false;\n      }, 1);\n      return;\n    }\n    guardCount++;\n    focusOn(focusable.node);\n    guardCount--;\n  }\n});","import tabHook from './tabHook';\nimport focusMerge, { getFocusabledIn } from './focusMerge';\nimport focusInside from './focusInside';\nimport focusIsHidden from './focusIsHidden';\nimport setFocus from './setFocus';\nimport * as constants from './constants';\nimport getAllAffectedNodes from './utils/all-affected';\n\nexport { tabHook, focusInside, focusIsHidden, focusMerge, getFocusabledIn, constants, getAllAffectedNodes };\n\nexport default setFocus;","export function deferAction(action) {\n  // Hidding setImmediate from Webpack to avoid inserting polyfill\n  var setImmediate = window.setImmediate;\n\n  if (typeof setImmediate !== 'undefined') {\n    setImmediate(action);\n  } else {\n    setTimeout(action, 1);\n  }\n}\nexport var inlineProp = function inlineProp(name, value) {\n  var obj = {};\n  obj[name] = value;\n  return obj;\n};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withSideEffect from 'react-clientside-effect';\nimport moveFocusInside, { focusInside, focusIsHidden, getFocusabledIn } from 'focus-lock';\nimport { deferAction } from './util';\n\nvar focusOnBody = function focusOnBody() {\n  return document && document.activeElement === document.body;\n};\n\nvar isFreeFocus = function isFreeFocus() {\n  return focusOnBody() || focusIsHidden();\n};\n\nvar lastActiveTrap = null;\nvar lastActiveFocus = null;\nvar lastPortaledElement = null;\nvar focusWasOutsideWindow = false;\n\nvar defaultWhitelist = function defaultWhitelist() {\n  return true;\n};\n\nvar focusWhitelisted = function focusWhitelisted(activeElement) {\n  return (lastActiveTrap.whiteList || defaultWhitelist)(activeElement);\n};\n\nvar recordPortal = function recordPortal(observerNode, portaledElement) {\n  lastPortaledElement = {\n    observerNode: observerNode,\n    portaledElement: portaledElement\n  };\n};\n\nvar focusIsPortaledPair = function focusIsPortaledPair(element) {\n  return lastPortaledElement && lastPortaledElement.portaledElement === element;\n};\n\nfunction autoGuard(startIndex, end, step, allNodes) {\n  var lastGuard = null;\n  var i = startIndex;\n\n  do {\n    var item = allNodes[i];\n\n    if (item.guard) {\n      if (item.node.dataset.focusAutoGuard) {\n        lastGuard = item;\n      }\n    } else if (item.lockItem) {\n      if (i !== startIndex) {\n        // we will tab to the next element\n        return;\n      }\n\n      lastGuard = null;\n    } else {\n      break;\n    }\n  } while ((i += step) !== end);\n\n  if (lastGuard) {\n    lastGuard.node.tabIndex = 0;\n  }\n}\n\nvar extractRef = function extractRef(ref) {\n  return ref && 'current' in ref ? ref.current : ref;\n};\n\nvar activateTrap = function activateTrap() {\n  var result = false;\n\n  if (lastActiveTrap) {\n    var _lastActiveTrap = lastActiveTrap,\n        observed = _lastActiveTrap.observed,\n        persistentFocus = _lastActiveTrap.persistentFocus,\n        autoFocus = _lastActiveTrap.autoFocus,\n        shards = _lastActiveTrap.shards;\n    var workingNode = observed || lastPortaledElement && lastPortaledElement.portaledElement;\n    var activeElement = document && document.activeElement;\n\n    if (workingNode) {\n      var workingArea = [workingNode].concat(shards.map(extractRef).filter(Boolean));\n\n      if (!activeElement || focusWhitelisted(activeElement)) {\n        if (persistentFocus || focusWasOutsideWindow || !isFreeFocus() || !lastActiveFocus && autoFocus) {\n          if (workingNode && !(focusInside(workingArea) || focusIsPortaledPair(activeElement, workingNode))) {\n            if (document && !lastActiveFocus && activeElement && !autoFocus) {\n              activeElement.blur();\n              document.body.focus();\n            } else {\n              result = moveFocusInside(workingArea, lastActiveFocus);\n              lastPortaledElement = {};\n            }\n          }\n\n          focusWasOutsideWindow = false;\n          lastActiveFocus = document && document.activeElement;\n        }\n      }\n\n      if (document) {\n        var newActiveElement = document && document.activeElement;\n        var allNodes = getFocusabledIn(workingArea);\n        var focusedItem = allNodes.find(function (_ref) {\n          var node = _ref.node;\n          return node === newActiveElement;\n        });\n\n        if (focusedItem) {\n          // remove old focus\n          allNodes.filter(function (_ref2) {\n            var guard = _ref2.guard,\n                node = _ref2.node;\n            return guard && node.dataset.focusAutoGuard;\n          }).forEach(function (_ref3) {\n            var node = _ref3.node;\n            return node.removeAttribute('tabIndex');\n          });\n          var focusedIndex = allNodes.indexOf(focusedItem);\n          autoGuard(focusedIndex, allNodes.length, +1, allNodes);\n          autoGuard(focusedIndex, -1, -1, allNodes);\n        }\n      }\n    }\n  }\n\n  return result;\n};\n\nvar onTrap = function onTrap(event) {\n  if (activateTrap() && event) {\n    // prevent scroll jump\n    event.stopPropagation();\n    event.preventDefault();\n  }\n};\n\nexport var onBlur = function onBlur() {\n  return deferAction(activateTrap);\n};\nexport var onFocus = function onFocus(event) {\n  // detect portal\n  var source = event.target;\n  var currentNode = event.currentTarget;\n\n  if (!currentNode.contains(source)) {\n    recordPortal(currentNode, source);\n  }\n};\n\nvar FocusWatcher = function FocusWatcher() {\n  return null;\n};\n\nvar FocusTrap = function FocusTrap(_ref4) {\n  var children = _ref4.children;\n  return React.createElement(\"div\", {\n    onBlur: onBlur,\n    onFocus: onFocus\n  }, children);\n};\n\nFocusTrap.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  children: PropTypes.node.isRequired\n} : {};\n\nvar onWindowBlur = function onWindowBlur() {\n  focusWasOutsideWindow = true;\n};\n\nvar attachHandler = function attachHandler() {\n  document.addEventListener('focusin', onTrap, true);\n  document.addEventListener('focusout', onBlur);\n  window.addEventListener('blur', onWindowBlur);\n};\n\nvar detachHandler = function detachHandler() {\n  document.removeEventListener('focusin', onTrap, true);\n  document.removeEventListener('focusout', onBlur);\n  window.removeEventListener('blur', onWindowBlur);\n};\n\nfunction reducePropsToState(propsList) {\n  return propsList.filter(function (_ref5) {\n    var disabled = _ref5.disabled;\n    return !disabled;\n  }).slice(-1)[0];\n}\n\nfunction handleStateChangeOnClient(trap) {\n  if (trap && !lastActiveTrap) {\n    attachHandler();\n  }\n\n  var lastTrap = lastActiveTrap;\n  var sameTrap = lastTrap && trap && trap.onActivation === lastTrap.onActivation;\n  lastActiveTrap = trap;\n\n  if (lastTrap && !sameTrap) {\n    lastTrap.onDeactivation();\n  }\n\n  if (trap) {\n    lastActiveFocus = null;\n\n    if (!sameTrap || lastTrap.observed !== trap.observed) {\n      trap.onActivation();\n    }\n\n    activateTrap(true);\n    deferAction(activateTrap);\n  } else {\n    detachHandler();\n    lastActiveFocus = null;\n  }\n}\n\nexport default withSideEffect(reducePropsToState, handleStateChangeOnClient)(FocusWatcher);","import _inheritsLoose from '@babel/runtime/helpers/inheritsLoose';\nimport _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport React, { Component } from 'react';\nimport shallowEqual from 'shallowequal';\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (typeof reducePropsToState !== 'function') {\n      throw new Error('Expected reducePropsToState to be a function.');\n    }\n\n    if (typeof handleStateChangeOnClient !== 'function') {\n      throw new Error('Expected handleStateChangeOnClient to be a function.');\n    }\n  }\n\n  function getDisplayName(WrappedComponent) {\n    return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n  }\n\n  return function wrap(WrappedComponent) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (typeof WrappedComponent !== 'function') {\n        throw new Error('Expected WrappedComponent to be a React component.');\n      }\n    }\n\n    var mountedInstances = [];\n    var state;\n\n    function emitChange() {\n      state = reducePropsToState(mountedInstances.map(function (instance) {\n        return instance.props;\n      }));\n      handleStateChangeOnClient(state);\n    }\n\n    var SideEffect =\n    /*#__PURE__*/\n    function (_Component) {\n      _inheritsLoose(SideEffect, _Component);\n\n      function SideEffect() {\n        return _Component.apply(this, arguments) || this;\n      }\n\n      // Try to use displayName of wrapped component\n      SideEffect.peek = function peek() {\n        return state;\n      };\n\n      var _proto = SideEffect.prototype;\n\n      _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n        return !shallowEqual(nextProps, this.props);\n      };\n\n      _proto.componentDidMount = function componentDidMount() {\n        mountedInstances.push(this);\n        emitChange();\n      };\n\n      _proto.componentDidUpdate = function componentDidUpdate() {\n        emitChange();\n      };\n\n      _proto.componentWillUnmount = function componentWillUnmount() {\n        var index = mountedInstances.indexOf(this);\n        mountedInstances.splice(index, 1);\n        emitChange();\n      };\n\n      _proto.render = function render() {\n        return React.createElement(WrappedComponent, this.props);\n      };\n\n      return SideEffect;\n    }(Component);\n\n    _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n    return SideEffect;\n  };\n}\n\nexport default withSideEffect;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nexport var hiddenGuard = {\n  width: '1px',\n  height: '0px',\n  padding: 0,\n  overflow: 'hidden',\n  position: 'fixed',\n  top: '1px',\n  left: '1px'\n};\n\nvar InFocusGuard = function InFocusGuard(_ref) {\n  var children = _ref.children;\n  return React.createElement(React.Fragment, null, React.createElement(\"div\", {\n    key: \"guard-first\",\n    \"data-focus-guard\": true,\n    \"data-focus-auto-guard\": true,\n    style: hiddenGuard\n  }), children, children && React.createElement(\"div\", {\n    key: \"guard-last\",\n    \"data-focus-guard\": true,\n    \"data-focus-auto-guard\": true,\n    style: hiddenGuard\n  }));\n};\n\nInFocusGuard.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  children: PropTypes.node\n} : {};\nInFocusGuard.defaultProps = {\n  children: null\n};\nexport default InFocusGuard;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { constants } from 'focus-lock';\nimport FocusTrap, { onBlur, onFocus } from './Trap';\nimport { hiddenGuard } from './FocusGuard';\n\nvar RenderChildren = function RenderChildren(_ref) {\n  var children = _ref.children;\n  return React.createElement(\"div\", null, children);\n};\n\nRenderChildren.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  children: PropTypes.node.isRequired\n} : {};\nvar Fragment = React.Fragment ? React.Fragment : RenderChildren;\nvar emptyArray = [];\n\nvar FocusLock =\n/*#__PURE__*/\nfunction (_Component) {\n  _inheritsLoose(FocusLock, _Component);\n\n  function FocusLock() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      observed: undefined\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onActivation\", function () {\n      _this.originalFocusedElement = _this.originalFocusedElement || document && document.activeElement;\n\n      if (_this.state.observed && _this.props.onActivation) {\n        _this.props.onActivation(_this.state.observed);\n      }\n\n      _this.isActive = true;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onDeactivation\", function () {\n      _this.isActive = false;\n\n      if (_this.props.returnFocus && _this.originalFocusedElement && _this.originalFocusedElement.focus) {\n        _this.originalFocusedElement.focus();\n\n        _this.originalFocusedElement = null;\n      }\n\n      if (_this.props.onDeactivation) {\n        _this.props.onDeactivation(_this.state.observed);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onFocus\", function (event) {\n      if (_this.isActive) {\n        onFocus(event);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onBlur\", onBlur);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"setObserveNode\", function (observed) {\n      if (_this.state.observed !== observed) {\n        _this.setState({\n          observed: observed\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"isActive\", false);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"originalFocusedElement\", null);\n\n    return _this;\n  }\n\n  var _proto = FocusLock.prototype;\n\n  _proto.render = function render() {\n    var _extends2;\n\n    var _this$props = this.props,\n        children = _this$props.children,\n        disabled = _this$props.disabled,\n        noFocusGuards = _this$props.noFocusGuards,\n        persistentFocus = _this$props.persistentFocus,\n        autoFocus = _this$props.autoFocus,\n        allowTextSelection = _this$props.allowTextSelection,\n        group = _this$props.group,\n        className = _this$props.className,\n        whiteList = _this$props.whiteList,\n        _this$props$shards = _this$props.shards,\n        shards = _this$props$shards === void 0 ? emptyArray : _this$props$shards,\n        _this$props$as = _this$props.as,\n        Container = _this$props$as === void 0 ? 'div' : _this$props$as,\n        _this$props$lockProps = _this$props.lockProps,\n        containerProps = _this$props$lockProps === void 0 ? {} : _this$props$lockProps;\n    var observed = this.state.observed;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof allowTextSelection !== 'undefined') {\n        // eslint-disable-next-line no-console\n        console.warn('React-Focus-Lock: allowTextSelection is deprecated and enabled by default');\n      }\n    }\n\n    var lockProps = _extends((_extends2 = {}, _extends2[constants.FOCUS_DISABLED] = disabled && 'disabled', _extends2[constants.FOCUS_GROUP] = group, _extends2), containerProps);\n\n    var hasLeadingGuards = noFocusGuards !== true;\n    var hasTailingGuards = hasLeadingGuards && noFocusGuards !== 'tail';\n    return React.createElement(Fragment, null, hasLeadingGuards && [React.createElement(\"div\", {\n      key: \"guard-first\",\n      \"data-focus-guard\": true,\n      tabIndex: disabled ? -1 : 0,\n      style: hiddenGuard\n    }), // nearest focus guard\n    React.createElement(\"div\", {\n      key: \"guard-nearest\",\n      \"data-focus-guard\": true,\n      tabIndex: disabled ? -1 : 1,\n      style: hiddenGuard\n    })], React.createElement(Container, _extends({\n      ref: this.setObserveNode\n    }, lockProps, {\n      className: className,\n      onBlur: this.onBlur,\n      onFocus: this.onFocus\n    }), React.createElement(FocusTrap, {\n      observed: observed,\n      disabled: disabled,\n      persistentFocus: persistentFocus,\n      autoFocus: autoFocus,\n      whiteList: whiteList,\n      shards: shards,\n      onActivation: this.onActivation,\n      onDeactivation: this.onDeactivation\n    }), children), hasTailingGuards && React.createElement(\"div\", {\n      \"data-focus-guard\": true,\n      tabIndex: disabled ? -1 : 0,\n      style: hiddenGuard\n    }));\n  };\n\n  return FocusLock;\n}(Component);\n\nFocusLock.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  children: PropTypes.node.isRequired,\n  disabled: PropTypes.bool,\n  returnFocus: PropTypes.bool,\n  noFocusGuards: PropTypes.bool,\n  allowTextSelection: PropTypes.bool,\n  autoFocus: PropTypes.bool,\n  persistentFocus: PropTypes.bool,\n  group: PropTypes.string,\n  className: PropTypes.string,\n  whiteList: PropTypes.func,\n  shards: PropTypes.arrayOf(PropTypes.any),\n  as: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]),\n  lockProps: PropTypes.object,\n  onActivation: PropTypes.func,\n  onDeactivation: PropTypes.func\n} : {};\nFocusLock.defaultProps = {\n  disabled: false,\n  returnFocus: false,\n  noFocusGuards: false,\n  autoFocus: true,\n  persistentFocus: false,\n  allowTextSelection: undefined,\n  group: undefined,\n  className: undefined,\n  whiteList: undefined,\n  shards: undefined,\n  as: 'div',\n  lockProps: {},\n  onActivation: undefined,\n  onDeactivation: undefined\n};\nexport default FocusLock;","import FocusLock from './Lock';\nimport AutoFocusInside from './AutoFocusInside';\nimport MoveFocusInside from './MoveFocusInside';\nimport FreeFocusInside from './FreeFocusInside';\nimport InFocusGuard from './FocusGuard';\nexport { AutoFocusInside, MoveFocusInside, FreeFocusInside, InFocusGuard };\nexport default FocusLock;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport moveFocusInside, { focusInside, constants } from 'focus-lock';\nimport { inlineProp } from './util';\n\nvar MoveFocusInside =\n/*#__PURE__*/\nfunction (_Component) {\n  _inheritsLoose(MoveFocusInside, _Component);\n\n  function MoveFocusInside() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"setObserveNode\", function (ref) {\n      _this.observed = ref;\n\n      _this.moveFocus();\n    });\n\n    return _this;\n  }\n\n  var _proto = MoveFocusInside.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.moveFocus();\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (prevProps.disabled && !this.props.disabled) {\n      this.moveFocus();\n    }\n  };\n\n  _proto.moveFocus = function moveFocus() {\n    var observed = this.observed;\n\n    if (!this.props.disabled && observed) {\n      if (!focusInside(observed)) {\n        moveFocusInside(observed, null);\n      }\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        children = _this$props.children,\n        disabled = _this$props.disabled,\n        className = _this$props.className;\n    return React.createElement(\"div\", _extends({}, inlineProp(constants.FOCUS_AUTO, !disabled), {\n      ref: this.setObserveNode,\n      className: className\n    }), children);\n  };\n\n  return MoveFocusInside;\n}(Component);\n\n_defineProperty(MoveFocusInside, \"defaultProps\", {\n  disabled: false,\n  className: undefined\n});\n\nexport { MoveFocusInside as default };\nMoveFocusInside.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  children: PropTypes.node.isRequired,\n  disabled: PropTypes.bool,\n  className: PropTypes.string\n} : {};","// @flow\nimport React from 'react';\nimport FocusLock, { MoveFocusInside } from 'react-focus-lock';\n\n/**\n * FocusLock wrapper that disable the FocusLock in the @atlaskit/modal-dialog. We need to disable it because if the\n * iframe API is used and a dialog is displayed it is imposible to click on fields outside of the iframe (FocusLock\n * will steal the focus from any element that is not part of the dialog).\n */\nexport default class FocusLockWrapper extends FocusLock<*> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { children, ...otherProps } = this.props;\n\n        const props = {\n            ...otherProps,\n            disabled: true\n        };\n\n        // MoveFocusInside is added in order to initially bring the focus on the dialog.\n        return <FocusLock { ...props } ><MoveFocusInside>{children}</MoveFocusInside></FocusLock>;\n    }\n}\n\nexport * from 'react-focus-lock';\n","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport invariant from 'tiny-invariant';\nimport ReactFocusLock from 'react-focus-lock';\n\n// Thin wrapper over react-focus-lock. This wrapper only exists to ensure API compatibility.\n// This component should be deleted during https://ecosystem.atlassian.net/browse/AK-5658\nvar FocusLock =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(FocusLock, _Component);\n\n  function FocusLock() {\n    _classCallCheck(this, FocusLock);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(FocusLock).apply(this, arguments));\n  }\n\n  _createClass(FocusLock, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var _this$props = this.props,\n          isEnabled = _this$props.isEnabled,\n          autoFocus = _this$props.autoFocus;\n\n      if (process.env.NODE_ENV !== 'production') {\n        invariant(typeof autoFocus === 'boolean', '@atlaskit/modal-dialog: Passing a function as autoFocus is deprecated. Instead call focus on the element ref or use the autofocus property.');\n      }\n\n      if (typeof autoFocus === 'function' && isEnabled) {\n        var elem = autoFocus();\n\n        if (elem && elem.focus) {\n          elem.focus();\n        }\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props2 = this.props,\n          isEnabled = _this$props2.isEnabled,\n          autoFocus = _this$props2.autoFocus,\n          shouldReturnFocus = _this$props2.shouldReturnFocus;\n      return React.createElement(ReactFocusLock, {\n        disabled: !isEnabled,\n        autoFocus: !!autoFocus,\n        returnFocus: shouldReturnFocus\n      }, this.props.children);\n    }\n  }]);\n\n  return FocusLock;\n}(Component);\n\n_defineProperty(FocusLock, \"defaultProps\", {\n  autoFocus: true,\n  isEnabled: true,\n  shouldReturnFocus: true\n});\n\nexport { FocusLock as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { Component } from 'react';\nimport { canUseDOM } from 'exenv';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport Blanket from '@atlaskit/blanket';\nimport { name as packageName, version as packageVersion } from '../version.json';\nimport { WIDTH_ENUM } from '../shared-variables';\nimport { PositionerAbsolute, PositionerRelative, Dialog, FillScreen as StyledFillScreen } from '../styled/Modal';\nimport { Animation } from './Animation';\nimport Content from './Content';\nimport FocusLock from './FocusLock';\nexport var Positioner = function Positioner(_ref) {\n  var scrollBehavior = _ref.scrollBehavior,\n      props = _objectWithoutProperties(_ref, [\"scrollBehavior\"]);\n\n  var PositionComponent = scrollBehavior === 'inside' ? PositionerAbsolute : PositionerRelative;\n  return React.createElement(PositionComponent, props);\n};\n\nfunction getScrollDistance() {\n  return window.pageYOffset || document.documentElement && document.documentElement.scrollTop || document.body && document.body.scrollTop || 0;\n}\n\nvar Modal =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Modal, _Component);\n\n  function Modal() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Modal);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Modal)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      dialogNode: null,\n      scrollDistance: canUseDOM ? getScrollDistance() : 0,\n      isExiting: false\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleWindowScroll\", function () {\n      if (getScrollDistance() !== _this.state.scrollDistance) {\n        window.scrollTo(window.pageXOffset, _this.state.scrollDistance);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleOverlayClick\", function (e) {\n      if (_this.props.shouldCloseOnOverlayClick) {\n        _this.props.onClose(e);\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(Modal, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var scrollDistance = getScrollDistance();\n\n      if (getScrollDistance() !== this.state.scrollDistance) {\n        // eslint-disable-next-line react/no-did-mount-set-state\n        this.setState({\n          scrollDistance: scrollDistance\n        });\n      }\n\n      window.addEventListener('scroll', this.handleWindowScroll);\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      window.removeEventListener('scroll', this.handleWindowScroll);\n    }\n    /* Prevent window from being scrolled programatically so that the modal is positioned correctly\n     * and to prevent scrollIntoView from scrolling the window.\n     */\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          actions = _this$props.actions,\n          appearance = _this$props.appearance,\n          autoFocus = _this$props.autoFocus,\n          body = _this$props.body,\n          children = _this$props.children,\n          components = _this$props.components,\n          footer = _this$props.footer,\n          header = _this$props.header,\n          height = _this$props.height,\n          isChromeless = _this$props.isChromeless,\n          isHeadingMultiline = _this$props.isHeadingMultiline,\n          isOpen = _this$props.isOpen,\n          onClose = _this$props.onClose,\n          onCloseComplete = _this$props.onCloseComplete,\n          onOpenComplete = _this$props.onOpenComplete,\n          onStackChange = _this$props.onStackChange,\n          shouldCloseOnEscapePress = _this$props.shouldCloseOnEscapePress,\n          stackIndex = _this$props.stackIndex,\n          heading = _this$props.heading,\n          width = _this$props.width,\n          scrollBehavior = _this$props.scrollBehavior;\n      var scrollDistance = this.state.scrollDistance;\n      var isBackground = stackIndex != null && stackIndex > 0; // If a custom width (number or percentage) is supplied, set inline style\n      // otherwise allow styled component to consume as named prop\n\n      var widthName = WIDTH_ENUM.values.includes(width) ? width : null;\n      var widthValue = widthName ? null : width;\n      return React.createElement(Animation, {\n        in: isOpen,\n        onExited: onCloseComplete,\n        onEntered: onOpenComplete,\n        stackIndex: stackIndex\n      }, function (_ref2) {\n        var fade = _ref2.fade,\n            slide = _ref2.slide;\n        return React.createElement(StyledFillScreen, {\n          style: fade,\n          \"aria-hidden\": isBackground,\n          scrollDistance: scrollDistance\n        }, React.createElement(FocusLock, {\n          isEnabled: stackIndex === 0 && isOpen,\n          autoFocus: autoFocus\n        }, React.createElement(Blanket, {\n          isTinted: true,\n          onBlanketClicked: _this2.handleOverlayClick\n        }), React.createElement(Positioner, {\n          style: slide,\n          scrollBehavior: scrollBehavior,\n          widthName: widthName,\n          widthValue: widthValue\n        }, React.createElement(Dialog, {\n          heightValue: height,\n          isChromeless: isChromeless,\n          role: \"dialog\",\n          tabIndex: \"-1\"\n        }, React.createElement(Content, {\n          actions: actions,\n          appearance: appearance,\n          components: components,\n          footer: footer,\n          heading: heading,\n          isHeadingMultiline: isHeadingMultiline,\n          header: header,\n          onClose: onClose,\n          shouldScroll: scrollBehavior === 'inside',\n          shouldCloseOnEscapePress: shouldCloseOnEscapePress,\n          onStackChange: onStackChange,\n          isChromeless: isChromeless,\n          stackIndex: stackIndex,\n          body: body\n        }, children)))));\n      });\n    }\n  }]);\n\n  return Modal;\n}(Component);\n\n_defineProperty(Modal, \"defaultProps\", {\n  autoFocus: true,\n  scrollBehavior: 'inside',\n  shouldCloseOnEscapePress: true,\n  shouldCloseOnOverlayClick: true,\n  isChromeless: false,\n  isOpen: true,\n  stackIndex: 0,\n  width: 'medium',\n  isHeadingMultiline: true\n});\n\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport var ModalDialogWithoutAnalytics = Modal;\nexport default withAnalyticsContext({\n  componentName: 'modalDialog',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onClose: createAndFireEventOnAtlaskit({\n    action: 'closed',\n    actionSubject: 'modalDialog',\n    attributes: {\n      componentName: 'modalDialog',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Modal));","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { layers } from '@atlaskit/theme';\nimport Portal from '@atlaskit/portal';\nimport { ModalTransitionConsumer } from './ModalTransition';\nimport StackConsumer from './StackConsumer';\nimport Modal from './Modal';\n\nvar ModalWrapper =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(ModalWrapper, _Component);\n\n  function ModalWrapper() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, ModalWrapper);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ModalWrapper)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_this), \"onModalClosed\", function (onExited) {\n      return function (e) {\n        if (onExited) {\n          onExited();\n        }\n\n        if (_this.props.onCloseComplete) {\n          _this.props.onCloseComplete(e);\n        }\n      };\n    });\n\n    return _this;\n  }\n\n  _createClass(ModalWrapper, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      return React.createElement(ModalTransitionConsumer, null, function (_ref) {\n        var isOpen = _ref.isOpen,\n            onExited = _ref.onExited;\n        return React.createElement(Portal, {\n          zIndex: layers.modal()\n        }, React.createElement(StackConsumer, {\n          isOpen: isOpen\n        }, function (naturalStackIndex) {\n          return React.createElement(Modal, _extends({}, _this2.props, {\n            isOpen: isOpen,\n            stackIndex: _this2.props.stackIndex || naturalStackIndex,\n            onCloseComplete: _this2.onModalClosed(onExited)\n          }));\n        }));\n      });\n    }\n  }]);\n\n  return ModalWrapper;\n}(Component);\n\n_defineProperty(ModalWrapper, \"defaultProps\", {\n  autoFocus: true,\n  scrollBehavior: 'inside',\n  shouldCloseOnEscapePress: true,\n  shouldCloseOnOverlayClick: true,\n  isChromeless: false,\n  width: 'medium',\n  isHeadingMultiline: true,\n  onClose: function onClose() {}\n});\n\nexport default ModalWrapper;","// @flow\n\nimport Button, { ButtonGroup } from '@atlaskit/button';\nimport Modal, { ModalFooter } from '@atlaskit/modal-dialog';\nimport _ from 'lodash';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../i18n/functions';\n\nimport type { DialogProps } from '../../constants';\n\n/**\n * The ID to be used for the cancel button if enabled.\n * @type {string}\n */\nconst CANCEL_BUTTON_ID = 'modal-dialog-cancel-button';\n\n/**\n * The ID to be used for the ok button if enabled.\n * @type {string}\n */\nconst OK_BUTTON_ID = 'modal-dialog-ok-button';\n\n/**\n * The type of the React {@code Component} props of {@link StatelessDialog}.\n *\n * @static\n */\ntype Props = {\n    ...DialogProps,\n\n    i18n: Object,\n\n    /**\n     * Disables dismissing the dialog when the blanket is clicked. Enabled\n     * by default.\n     */\n    disableBlanketClickDismiss: boolean,\n\n    /**\n     * If true, the cancel button will not display but cancel actions, like\n     * clicking the blanket, will cancel.\n     */\n    hideCancelButton: boolean,\n\n    /**\n     * Whether the dialog is modal. This means clicking on the blanket will\n     * leave the dialog open. No cancel button.\n     */\n    isModal: boolean,\n\n    /**\n     * Disables rendering of the submit button.\n     */\n    submitDisabled: boolean,\n\n    /**\n     * Function to be used to retreive translated i18n labels.\n     */\n    t: Function,\n\n    /**\n     * Width of the dialog, can be:\n     * - 'small' (400px), 'medium' (600px), 'large' (800px),\n     *   'x-large' (968px)\n     * - integer value for pixel width\n     * - string value for percentage\n     */\n    width: string\n};\n\n/**\n * Web dialog that uses atlaskit modal-dialog to display dialogs.\n */\nclass StatelessDialog extends Component<Props> {\n    /**\n     * The functional component to be used for rendering the modal footer.\n     */\n    _Footer: ?Function\n\n    _dialogElement: ?HTMLElement;\n\n    /**\n     * Initializes a new {@code StatelessDialog} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onCancel = this._onCancel.bind(this);\n        this._onDialogDismissed = this._onDialogDismissed.bind(this);\n        this._onKeyDown = this._onKeyDown.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n        this._renderFooter = this._renderFooter.bind(this);\n        this._setDialogElement = this._setDialogElement.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            children,\n            t /* The following fixes a flow error: */ = _.identity,\n            titleString,\n            titleKey,\n            width\n        } = this.props;\n\n        return (\n            <Modal\n                autoFocus = { true }\n                footer = { this._renderFooter }\n                heading = { titleString || t(titleKey) }\n                i18n = { this.props.i18n }\n                onClose = { this._onDialogDismissed }\n                onDialogDismissed = { this._onDialogDismissed }\n                shouldCloseOnEscapePress = { true }\n                width = { width || 'medium' }>\n                <div\n                    onKeyDown = { this._onKeyDown }\n                    ref = { this._setDialogElement }>\n                    <form\n                        className = 'modal-dialog-form'\n                        id = 'modal-dialog-form'\n                        onSubmit = { this._onSubmit }>\n                        { children }\n                    </form>\n                </div>\n            </Modal>\n        );\n    }\n\n    _renderFooter: () => React$Node;\n\n    /**\n     * Returns a ReactElement to display buttons for closing the modal.\n     *\n     * @param {Object} propsFromModalFooter - The props passed in from the\n     * {@link ModalFooter} component.\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderFooter(propsFromModalFooter) {\n        // Filter out falsy (null) values because {@code ButtonGroup} will error\n        // if passed in anything but buttons with valid type props.\n        const buttons = [\n            this._renderOKButton(),\n            this._renderCancelButton()\n        ].filter(Boolean);\n\n        return (\n            <ModalFooter showKeyline = { propsFromModalFooter.showKeyline } >\n                {\n\n                    /**\n                     * Atlaskit has this empty span (JustifySim) so...\n                     */\n                }\n                <span />\n                <ButtonGroup>\n                    { buttons }\n                </ButtonGroup>\n            </ModalFooter>\n        );\n    }\n\n    _onCancel: () => void;\n\n    /**\n     * Dispatches action to hide the dialog.\n     *\n     * @returns {void}\n     */\n    _onCancel() {\n        if (!this.props.isModal) {\n            const { onCancel } = this.props;\n\n            onCancel && onCancel();\n        }\n    }\n\n    _onDialogDismissed: () => void;\n\n    /**\n     * Handles click on the blanket area.\n     *\n     * @returns {void}\n     */\n    _onDialogDismissed() {\n        if (!this.props.disableBlanketClickDismiss) {\n            this._onCancel();\n        }\n    }\n\n    _onSubmit: (?string) => void;\n\n    /**\n     * Dispatches the action when submitting the dialog.\n     *\n     * @private\n     * @param {string} value - The submitted value if any.\n     * @returns {void}\n     */\n    _onSubmit(value) {\n        const { onSubmit } = this.props;\n\n        onSubmit && onSubmit(value);\n    }\n\n    /**\n     * Renders Cancel button.\n     *\n     * @private\n     * @returns {ReactElement|null} The Cancel button if enabled and dialog is\n     * not modal.\n     */\n    _renderCancelButton() {\n        if (this.props.cancelDisabled\n            || this.props.isModal\n            || this.props.hideCancelButton) {\n            return null;\n        }\n\n        const {\n            t /* The following fixes a flow error: */ = _.identity\n        } = this.props;\n\n        return (\n            <Button\n                appearance = 'subtle'\n                id = { CANCEL_BUTTON_ID }\n                key = 'cancel'\n                onClick = { this._onCancel }\n                type = 'button'>\n                { t(this.props.cancelKey || 'dialog.Cancel') }\n            </Button>\n        );\n    }\n\n    /**\n     * Renders OK button.\n     *\n     * @private\n     * @returns {ReactElement|null} The OK button if enabled.\n     */\n    _renderOKButton() {\n        if (this.props.submitDisabled) {\n            return null;\n        }\n\n        const {\n            t /* The following fixes a flow error: */ = _.identity\n        } = this.props;\n\n        return (\n            <Button\n                appearance = 'primary'\n                form = 'modal-dialog-form'\n                id = { OK_BUTTON_ID }\n                isDisabled = { this.props.okDisabled }\n                key = 'submit'\n                onClick = { this._onSubmit }\n                type = 'button'>\n                { t(this.props.okKey || 'dialog.Ok') }\n            </Button>\n        );\n    }\n\n    _setDialogElement: (?HTMLElement) => void;\n\n    /**\n     * Sets the instance variable for the div containing the component's dialog\n     * element so it can be accessed directly.\n     *\n     * @param {HTMLElement} element - The DOM element for the component's\n     * dialog.\n     * @private\n     * @returns {void}\n     */\n    _setDialogElement(element: ?HTMLElement) {\n        this._dialogElement = element;\n    }\n\n    _onKeyDown: (Object) => void;\n\n    /**\n     * Handles 'Enter' key in the dialog to submit/hide dialog depending on\n     * the available buttons and their disabled state.\n     *\n     * @param {Object} event - The key event.\n     * @private\n     * @returns {void}\n     */\n    _onKeyDown(event) {\n        // If the event coming to the dialog has been subject to preventDefault\n        // we don't handle it here.\n        if (event.defaultPrevented) {\n            return;\n        }\n\n        if (event.key === 'Enter') {\n            event.preventDefault();\n            event.stopPropagation();\n\n            if (this.props.submitDisabled && !this.props.cancelDisabled) {\n                this._onCancel();\n            } else if (!this.props.okDisabled) {\n                this._onSubmit();\n            }\n        }\n    }\n}\n\nexport default translate(StatelessDialog);\n","// @flow\n\nimport React from 'react';\n\nimport { connect } from '../../../redux';\n\nimport AbstractDialog from '../AbstractDialog';\nimport type { Props as AbstractDialogProps, State } from '../AbstractDialog';\nimport StatelessDialog from './StatelessDialog';\n\n/**\n * The type of the React {@code Component} props of {@link Dialog}.\n */\ntype Props = AbstractDialogProps & {\n\n    /**\n     * Whether the dialog is modal. This means clicking on the blanket will\n     * leave the dialog open. No cancel button.\n     */\n    isModal: boolean,\n\n    /**\n     * Disables rendering of the submit button.\n     */\n    submitDisabled: boolean,\n\n    /**\n     * Width of the dialog, can be:\n     * - 'small' (400px), 'medium' (600px), 'large' (800px),\n     * 'x-large' (968px)\n     * - integer value for pixel width\n     * - string value for percentage\n     */\n    width: string\n};\n\n/**\n * Web dialog that uses atlaskit modal-dialog to display dialogs.\n */\nclass Dialog extends AbstractDialog<Props, State> {\n    /**\n     * Initializes a new Dialog instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onCancel = this._onCancel.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const props = {\n            ...this.props,\n            onCancel: this._onCancel,\n            onSubmit: this._onSubmit\n        };\n\n        // $FlowExpectedError\n        delete props.dispatch;\n\n        return <StatelessDialog { ...props } />;\n    }\n\n    _onCancel: () => void;\n\n    /**\n     * Dispatches action to hide the dialog.\n     *\n     * @returns {void}\n     */\n    _onCancel() {\n        this.props.isModal || super._onCancel();\n    }\n\n    _onSubmit: (?string) => void;\n}\n\nexport default connect()(Dialog);\n","/* @flow */\n\nimport React, { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of {@link DialogContainer}.\n */\ntype Props = {\n\n    /**\n     * The component to render.\n     */\n    _component: Function,\n\n    /**\n     * The props to pass to the component that will be rendered.\n     */\n    _componentProps: Object,\n\n    /**\n     * True if the UI is in a compact state where we don't show dialogs.\n     */\n    _reducedUI: boolean\n};\n\n/**\n * Implements a DialogContainer responsible for showing all dialogs.\n */\nexport default class AbstractDialogContainer extends Component<Props> {\n    /**\n     * Returns the dialog to be displayed.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderDialogContent() {\n        const {\n            _component: component,\n            _reducedUI: reducedUI\n        } = this.props;\n\n        return (\n            component && !reducedUI\n                ? React.createElement(component, this.props._componentProps)\n                : null);\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated\n * {@code AbstractDialogContainer}'s props.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _component: React.Component,\n *     _componentProps: Object,\n *     _reducedUI: boolean\n * }}\n */\nexport function abstractMapStateToProps(state: Object) {\n    const stateFeaturesBaseDialog = state['features/base/dialog'];\n    const { reducedUI } = state['features/base/responsive-ui'];\n\n    return {\n        _component: stateFeaturesBaseDialog.component,\n        _componentProps: stateFeaturesBaseDialog.componentProps,\n        _reducedUI: reducedUI\n    };\n}\n","import { ModalTransition } from '@atlaskit/modal-dialog';\nimport React from 'react';\n\nimport { connect } from '../../../redux';\n\nimport AbstractDialogContainer, {\n    abstractMapStateToProps\n} from '../AbstractDialogContainer';\n\n/**\n * Implements a DialogContainer responsible for showing all dialogs. Necessary\n * for supporting @atlaskit's modal animations.\n *\n * @extends AbstractDialogContainer\n */\nclass DialogContainer extends AbstractDialogContainer {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <ModalTransition>\n                { this._renderDialogContent() }\n            </ModalTransition>\n        );\n    }\n}\n\nexport default connect(abstractMapStateToProps)(DialogContainer);\n\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/dialog');\n","// @flow\n\nimport Tabs from '@atlaskit/tabs';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../i18n/functions';\n\nimport logger from '../../logger';\n\nimport StatelessDialog from './StatelessDialog';\n\n/**\n * The type of the React {@code Component} props of {@link DialogWithTabs}.\n */\nexport type Props = {\n\n    /**\n     * Function that closes the dialog.\n     */\n    closeDialog: Function,\n\n    /**\n     * Css class name that will be added to the dialog.\n     */\n    cssClassName: string,\n\n    /**\n     * Which settings tab should be initially displayed. If not defined then\n     * the first tab will be displayed.\n     */\n    defaultTab: number,\n\n    /**\n     * Disables dismissing the dialog when the blanket is clicked. Enabled\n     * by default.\n     */\n    disableBlanketClickDismiss: boolean,\n\n    /**\n     * Callback invoked when the Save button has been pressed.\n     */\n    onSubmit: Function,\n\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * Information about the tabs that will be rendered.\n     */\n    tabs: Array<Object>,\n\n    /**\n     * Key to use for showing a title.\n     */\n    titleKey: string\n\n};\n\n/**\n * The type of the React {@code Component} state of {@link DialogWithTabs}.\n */\ntype State = {\n\n    /**\n     * The index of the tab that should be displayed.\n     */\n    selectedTab: number,\n\n    /**\n     * An array of the states of the tabs.\n     */\n    tabStates: Array<Object>\n};\n\n/**\n * A React {@code Component} for displaying a dialog with tabs.\n *\n * @extends Component\n */\nclass DialogWithTabs extends Component<Props, State> {\n    /**\n     * Initializes a new {@code DialogWithTabs} instance.\n     *\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n        this.state = {\n            selectedTab: this.props.defaultTab || 0,\n            tabStates: this.props.tabs.map(tab => tab.props)\n        };\n        this._onSubmit = this._onSubmit.bind(this);\n        this._onTabSelected = this._onTabSelected.bind(this);\n        this._onTabStateChange = this._onTabStateChange.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const onCancel = this.props.closeDialog;\n\n        return (\n            <StatelessDialog\n                disableBlanketClickDismiss\n                    = { this.props.disableBlanketClickDismiss }\n                onCancel = { onCancel }\n                onSubmit = { this._onSubmit }\n                titleKey = { this.props.titleKey } >\n                <div className = { this.props.cssClassName } >\n                    { this._renderTabs() }\n                </div>\n            </StatelessDialog>\n        );\n    }\n\n    /**\n     * Gets the props to pass into the tab component.\n     *\n     * @param {number} tabId - The index of the tab configuration within\n     * {@link this.state.tabStates}.\n     * @returns {Object}\n     */\n    _getTabProps(tabId) {\n        const { tabs } = this.props;\n        const { tabStates } = this.state;\n        const tabConfiguration = tabs[tabId];\n        const currentTabState = tabStates[tabId];\n\n        if (tabConfiguration.propsUpdateFunction) {\n            return tabConfiguration.propsUpdateFunction(\n                currentTabState,\n                tabConfiguration.props);\n        }\n\n        return { ...currentTabState };\n    }\n\n    _onTabSelected: (Object, number) => void;\n\n    /**\n     * Callback invoked when the desired tab to display should be changed.\n     *\n     * @param {Object} tab - The configuration passed into atlaskit tabs to\n     * describe how to display the selected tab.\n     * @param {number} tabIndex - The index of the tab within the array of\n     * displayed tabs.\n     * @private\n     * @returns {void}\n     */\n    _onTabSelected(tab, tabIndex) { // eslint-disable-line no-unused-vars\n        this.setState({ selectedTab: tabIndex });\n    }\n\n    /**\n     * Renders the tabs from the tab information passed on props.\n     *\n     * @returns {void}\n     */\n    _renderTabs() {\n        const { t, tabs } = this.props;\n\n        if (tabs.length === 1) {\n            return this._renderTab({\n                ...tabs[0],\n                tabId: 0\n            });\n        }\n\n        if (tabs.length > 1) {\n            return (\n                <Tabs\n                    onSelect = { this._onTabSelected }\n                    selected = { this.state.selectedTab }\n                    tabs = {\n                        tabs.map(({ component, label, styles }, idx) => {\n                            return {\n                                content: this._renderTab({\n                                    component,\n                                    styles,\n                                    tabId: idx\n                                }),\n                                label: t(label)\n                            };\n                        })\n                    } />);\n        }\n\n        logger.warn('No settings tabs configured to display.');\n\n        return null;\n    }\n\n    /**\n     * Renders a tab from the tab information passed as parameters.\n     *\n     * @param {Object} tabInfo - Information about the tab.\n     * @returns {Component} - The tab.\n     */\n    _renderTab({ component, styles, tabId }) {\n        const { closeDialog } = this.props;\n        const TabComponent = component;\n\n        return (\n            <div className = { styles }>\n                <TabComponent\n                    closeDialog = { closeDialog }\n                    mountCallback = { this.props.tabs[tabId].onMount }\n                    onTabStateChange\n                        = { this._onTabStateChange }\n                    tabId = { tabId }\n                    { ...this._getTabProps(tabId) } />\n            </div>);\n    }\n\n    _onTabStateChange: (number, Object) => void;\n\n    /**\n     * Changes the state for a tab.\n     *\n     * @param {number} tabId - The id of the tab which state will be changed.\n     * @param {Object} state - The new state.\n     * @returns {void}\n     */\n    _onTabStateChange(tabId, state) {\n        const tabStates = [ ...this.state.tabStates ];\n\n        tabStates[tabId] = state;\n        this.setState({ tabStates });\n    }\n\n    _onSubmit: () => void;\n\n    /**\n     * Submits the information filled in the dialog.\n     *\n     * @returns {void}\n     */\n    _onSubmit() {\n        const { onSubmit, tabs } = this.props;\n\n        tabs.forEach(({ submit }, idx) => {\n            submit && submit(this.state.tabStates[idx]);\n        });\n\n        onSubmit();\n    }\n}\n\nexport default translate(DialogWithTabs);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Container, Text } from '../../react';\nimport { type StyleType } from '../../styles';\n\nimport styles from './styles';\n\ntype Props = {\n\n    /**\n     * Children of the component.\n     */\n    children: string | React$Node,\n\n    style: ?StyleType\n};\n\n/**\n * Generic dialog content container to provide the same styling for all custom\n * dialogs.\n */\nexport default class DialogContent extends Component<Props> {\n    /**\n     * Implements {@code Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { children, style } = this.props;\n\n        const childrenComponent = typeof children === 'string'\n            ? <Text style = { style }>{ children }</Text>\n            : children;\n\n        return (\n            <Container style = { styles.dialogContainer }>\n                { childrenComponent }\n            </Container>\n        );\n    }\n}\n","/* @flow */\n\nimport { assign, ReducerRegistry } from '../redux';\n\nimport { HIDE_DIALOG, OPEN_DIALOG } from './actionTypes';\n\n/**\n * Reduces redux actions which show or hide dialogs.\n *\n * @param {State} state - The current redux state.\n * @param {Action} action - The redux action to reduce.\n * @param {string} action.type - The type of the redux action to reduce..\n * @returns {State} The next redux state that is the result of reducing the\n * specified action.\n */\nReducerRegistry.register('features/base/dialog', (state = {}, action) => {\n    switch (action.type) {\n    case HIDE_DIALOG: {\n        const { component } = action;\n\n        if (typeof component === 'undefined' || state.component === component) {\n            return assign(state, {\n                component: undefined,\n                componentProps: undefined\n            });\n        }\n        break;\n    }\n\n    case OPEN_DIALOG:\n        return assign(state, {\n            component: action.component,\n            componentProps: action.componentProps\n        });\n    }\n\n    return state;\n});\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './functions';\n\nimport './reducer';\n","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose\");\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutProperties;","// @flow\n\n/**\n * Returns a new {@code Promise} which settles when a specific {@code Promise}\n * settles and is automatically rejected if the specified {@code Promise}\n * doesn't settle within a specific time interval.\n *\n * @param {Promise} promise - The {@code Promise} for which automatic rejecting\n * after the speicified timout is to be implemented.\n * @param {number} timeout - The number of milliseconds to wait the specified\n * {@code promise} to settle before automatically rejecting the returned\n * {@code Promise}.\n * @returns {Promise} - A new {@code Promise} which settles when the specified\n * {@code promise} settles and is automatically rejected after {@code timeout}\n * milliseconds.\n */\nexport function timeoutPromise<T>(\n        promise: Promise<T>,\n        timeout: number\n): Promise<T> {\n    return new Promise((resolve, reject) => {\n        const timeoutID\n            = setTimeout(() => reject(new Error('timeout')), timeout);\n\n        promise.then(\n            /* onFulfilled */ value => {\n                resolve(value);\n                clearTimeout(timeoutID);\n            },\n            /* onRejected */ reason => {\n                reject(reason);\n                clearTimeout(timeoutID);\n            }\n        );\n    });\n}\n","import { timeoutPromise } from './timeoutPromise';\n\n/**\n * The number of milliseconds before deciding that we need retry a fetch request.\n *\n * @type {number}\n */\nconst RETRY_TIMEOUT = 3000;\n\n/**\n * Wrapper around fetch GET requests to handle json-ifying the response\n * and logging errors.\n *\n * @param {string} url - The URL to perform a GET against.\n * @param {?boolean} retry - Whether the request will be retried after short timeout.\n * @returns {Promise<Object>} The response body, in JSON format, will be\n * through the Promise.\n */\nexport function doGetJSON(url, retry) {\n    const fetchPromise = fetch(url)\n        .then(response => {\n            const jsonify = response.json();\n\n            if (response.ok) {\n                return jsonify;\n            }\n\n            return jsonify\n                .then(result => Promise.reject(result));\n        });\n\n    if (retry) {\n        return timeoutPromise(fetchPromise, RETRY_TIMEOUT)\n            .catch(response => {\n                if (response.status >= 400 && response.status < 500) {\n                    return Promise.reject(response);\n                }\n\n                return timeoutPromise(fetchPromise, RETRY_TIMEOUT);\n            });\n    }\n\n    return fetchPromise;\n}\n","// @flow\n\ndeclare var JitsiMeetJS: Object;\n\n/**\n * Loads a script from a specific URL. The script will be interpreted upon load.\n *\n * @param {string} url - The url to be loaded.\n * @returns {Promise} Resolved with no arguments when the script is loaded and\n * rejected with the error from JitsiMeetJS.ScriptUtil.loadScript method.\n */\nexport function loadScript(url: string): Promise<void> {\n    return new Promise((resolve, reject) =>\n        JitsiMeetJS.util.ScriptUtil.loadScript(\n            url,\n            /* async */ true,\n            /* prepend */ false,\n            /* relativeURL */ false,\n            /* loadCallback */ resolve,\n            /* errorCallback */ reject));\n}\n","// @flow\n\n/**\n * Opens URL in the browser.\n *\n * @param {string} url - The URL to be opened.\n * @returns {void}\n */\nexport function openURLInBrowser(url: string) {\n    window.open(url, '', 'noopener');\n}\n","// @flow\n\nimport { parseURLParams } from './parseURLParams';\nimport { normalizeNFKC } from './strings';\n\n/**\n * The app linking scheme.\n * TODO: This should be read from the manifest files later.\n */\nexport const APP_LINK_SCHEME = 'org.jitsi.meet:';\n\n/**\n * A list of characters to be excluded/removed from the room component/segment\n * of a conference/meeting URI/URL. The list is based on RFC 3986 and the jxmpp\n * library utilized by jicofo.\n */\nconst _ROOM_EXCLUDE_PATTERN = '[\\\\:\\\\?#\\\\[\\\\]@!$&\\'()*+,;=></\"]';\n\n/**\n * The {@link RegExp} pattern of the authority of a URI.\n *\n * @private\n * @type {string}\n */\nconst _URI_AUTHORITY_PATTERN = '(//[^/?#]+)';\n\n/**\n * The {@link RegExp} pattern of the path of a URI.\n *\n * @private\n * @type {string}\n */\nconst _URI_PATH_PATTERN = '([^?#]*)';\n\n/**\n * The {@link RegExp} pattern of the protocol of a URI.\n *\n * FIXME: The URL class exposed by JavaScript will not include the colon in\n * the protocol field. Also in other places (at the time of this writing:\n * the DeepLinkingMobilePage.js) the APP_LINK_SCHEME does not include\n * the double dots, so things are inconsistent.\n *\n * @type {string}\n */\nexport const URI_PROTOCOL_PATTERN = '^([a-z][a-z0-9\\\\.\\\\+-]*:)';\n\n/**\n * Excludes/removes certain characters from a specific room (name) which are\n * incompatible with Jitsi Meet on the client and/or server sides.\n *\n * @param {?string} room - The room (name) to fix.\n * @private\n * @returns {?string}\n */\nfunction _fixRoom(room: ?string) {\n    return room\n        ? room.replace(new RegExp(_ROOM_EXCLUDE_PATTERN, 'g'), '')\n        : room;\n}\n\n/**\n * Fixes the scheme part of a specific URI (string) so that it contains a\n * well-known scheme such as HTTP(S). For example, the mobile app implements an\n * app-specific URI scheme in addition to Universal Links. The app-specific\n * scheme may precede or replace the well-known scheme. In such a case, dealing\n * with the app-specific scheme only complicates the logic and it is simpler to\n * get rid of it (by translating the app-specific scheme into a well-known\n * scheme).\n *\n * @param {string} uri - The URI (string) to fix the scheme of.\n * @private\n * @returns {string}\n */\nfunction _fixURIStringScheme(uri: string) {\n    const regex = new RegExp(`${URI_PROTOCOL_PATTERN}+`, 'gi');\n    const match: Array<string> | null = regex.exec(uri);\n\n    if (match) {\n        // As an implementation convenience, pick up the last scheme and make\n        // sure that it is a well-known one.\n        let protocol = match[match.length - 1].toLowerCase();\n\n        if (protocol !== 'http:' && protocol !== 'https:') {\n            protocol = 'https:';\n        }\n\n        /* eslint-disable no-param-reassign */\n\n        uri = uri.substring(regex.lastIndex);\n        if (uri.startsWith('//')) {\n            // The specified URL was not a room name only, it contained an\n            // authority.\n            uri = protocol + uri;\n        }\n\n        /* eslint-enable no-param-reassign */\n    }\n\n    return uri;\n}\n\n/**\n * Converts a room name to a backend-safe format. Properly lowercased and url encoded.\n *\n * @param {string?} room - The room name to convert.\n * @returns {string?}\n */\nexport function getBackendSafeRoomName(room: ?string): ?string {\n    if (!room) {\n        return room;\n    }\n\n    /* eslint-disable no-param-reassign */\n    try {\n        // We do not know if we get an already encoded string at this point\n        // as different platforms do it differently, but we need a decoded one\n        // for sure. However since decoding a non-encoded string is a noop, we're safe\n        // doing it here.\n        room = decodeURIComponent(room);\n    } catch (e) {\n        // This can happen though if we get an unencoded string and it contains\n        // some characters that look like an encoded entity, but it's not.\n        // But in this case we're fine goin on...\n    }\n\n    // Normalize the character set.\n    room = normalizeNFKC(room);\n\n    // Only decoded and normalized strings can be lowercased properly.\n    room = room.toLowerCase();\n\n    // But we still need to (re)encode it.\n    room = encodeURIComponent(room);\n    /* eslint-enable no-param-reassign */\n\n    // Unfortunately we still need to lowercase it, because encoding a string will\n    // add some uppercase characters, but some backend services\n    // expect it to be full lowercase. However lowercasing an encoded string\n    // doesn't change the string value.\n    return room.toLowerCase();\n}\n\n/**\n * Gets the (Web application) context root defined by a specific location (URI).\n *\n * @param {Object} location - The location (URI) which defines the (Web\n * application) context root.\n * @public\n * @returns {string} - The (Web application) context root defined by the\n * specified {@code location} (URI).\n */\nexport function getLocationContextRoot({ pathname }: { pathname: string }) {\n    const contextRootEndIndex = pathname.lastIndexOf('/');\n\n    return (\n        contextRootEndIndex === -1\n            ? '/'\n            : pathname.substring(0, contextRootEndIndex + 1));\n}\n\n/**\n * Constructs a new {@code Array} with URL parameter {@code String}s out of a\n * specific {@code Object}.\n *\n * @param {Object} obj - The {@code Object} to turn into URL parameter\n * {@code String}s.\n * @returns {Array<string>} The {@code Array} with URL parameter {@code String}s\n * constructed out of the specified {@code obj}.\n */\nfunction _objectToURLParamsArray(obj = {}) {\n    const params = [];\n\n    for (const key in obj) { // eslint-disable-line guard-for-in\n        try {\n            params.push(\n                `${key}=${encodeURIComponent(JSON.stringify(obj[key]))}`);\n        } catch (e) {\n            console.warn(`Error encoding ${key}: ${e}`);\n        }\n    }\n\n    return params;\n}\n\n/**\n * Parses a specific URI string into an object with the well-known properties of\n * the {@link Location} and/or {@link URL} interfaces implemented by Web\n * browsers. The parsing attempts to be in accord with IETF's RFC 3986.\n *\n * @param {string} str - The URI string to parse.\n * @public\n * @returns {{\n *     hash: string,\n *     host: (string|undefined),\n *     hostname: (string|undefined),\n *     pathname: string,\n *     port: (string|undefined),\n *     protocol: (string|undefined),\n *     search: string\n * }}\n */\nexport function parseStandardURIString(str: string) {\n    /* eslint-disable no-param-reassign */\n\n    const obj: Object = {\n        toString: _standardURIToString\n    };\n\n    let regex;\n    let match: Array<string> | null;\n\n    // XXX A URI string as defined by RFC 3986 does not contain any whitespace.\n    // Usually, a browser will have already encoded any whitespace. In order to\n    // avoid potential later problems related to whitespace in URI, strip any\n    // whitespace. Anyway, the Jitsi Meet app is not known to utilize unencoded\n    // whitespace so the stripping is deemed safe.\n    str = str.replace(/\\s/g, '');\n\n    // protocol\n    regex = new RegExp(URI_PROTOCOL_PATTERN, 'gi');\n    match = regex.exec(str);\n    if (match) {\n        obj.protocol = match[1].toLowerCase();\n        str = str.substring(regex.lastIndex);\n    }\n\n    // authority\n    regex = new RegExp(`^${_URI_AUTHORITY_PATTERN}`, 'gi');\n    match = regex.exec(str);\n    if (match) {\n        let authority: string = match[1].substring(/* // */ 2);\n\n        str = str.substring(regex.lastIndex);\n\n        // userinfo\n        const userinfoEndIndex = authority.indexOf('@');\n\n        if (userinfoEndIndex !== -1) {\n            authority = authority.substring(userinfoEndIndex + 1);\n        }\n\n        obj.host = authority;\n\n        // port\n        const portBeginIndex = authority.lastIndexOf(':');\n\n        if (portBeginIndex !== -1) {\n            obj.port = authority.substring(portBeginIndex + 1);\n            authority = authority.substring(0, portBeginIndex);\n        }\n\n        // hostname\n        obj.hostname = authority;\n    }\n\n    // pathname\n    regex = new RegExp(`^${_URI_PATH_PATTERN}`, 'gi');\n    match = regex.exec(str);\n\n    let pathname: ?string;\n\n    if (match) {\n        pathname = match[1];\n        str = str.substring(regex.lastIndex);\n    }\n    if (pathname) {\n        pathname.startsWith('/') || (pathname = `/${pathname}`);\n    } else {\n        pathname = '/';\n    }\n    obj.pathname = pathname;\n\n    // query\n    if (str.startsWith('?')) {\n        let hashBeginIndex = str.indexOf('#', 1);\n\n        if (hashBeginIndex === -1) {\n            hashBeginIndex = str.length;\n        }\n        obj.search = str.substring(0, hashBeginIndex);\n        str = str.substring(hashBeginIndex);\n    } else {\n        obj.search = ''; // Google Chrome\n    }\n\n    // fragment\n    obj.hash = str.startsWith('#') ? str : '';\n\n    /* eslint-enable no-param-reassign */\n\n    return obj;\n}\n\n/**\n * Parses a specific URI which (supposedly) references a Jitsi Meet resource\n * (location).\n *\n * @param {(string|undefined)} uri - The URI to parse which (supposedly)\n * references a Jitsi Meet resource (location).\n * @public\n * @returns {{\n *     contextRoot: string,\n *     hash: string,\n *     host: string,\n *     hostname: string,\n *     pathname: string,\n *     port: string,\n *     protocol: string,\n *     room: (string|undefined),\n *     search: string\n * }}\n */\nexport function parseURIString(uri: ?string) {\n    if (typeof uri !== 'string') {\n        return undefined;\n    }\n\n    const obj = parseStandardURIString(_fixURIStringScheme(uri));\n\n    // Add the properties that are specific to a Jitsi Meet resource (location)\n    // such as contextRoot, room:\n\n    // contextRoot\n    obj.contextRoot = getLocationContextRoot(obj);\n\n    // The room (name) is the last component/segment of pathname.\n    const { pathname } = obj;\n\n    // XXX While the components/segments of pathname are URI encoded, Jitsi Meet\n    // on the client and/or server sides still don't support certain characters.\n    const contextRootEndIndex = pathname.lastIndexOf('/');\n    let room = pathname.substring(contextRootEndIndex + 1) || undefined;\n\n    if (room) {\n        const fixedRoom = _fixRoom(room);\n\n        if (fixedRoom !== room) {\n            room = fixedRoom;\n\n            // XXX Drive fixedRoom into pathname (because room is derived from\n            // pathname).\n            obj.pathname\n                = pathname.substring(0, contextRootEndIndex + 1) + (room || '');\n        }\n    }\n    obj.room = room;\n\n    return obj;\n}\n\n/**\n * Implements {@code href} and {@code toString} for the {@code Object} returned\n * by {@link #parseStandardURIString}.\n *\n * @param {Object} [thiz] - An {@code Object} returned by\n * {@code #parseStandardURIString} if any; otherwise, it is presumed that the\n * function is invoked on such an instance.\n * @returns {string}\n */\nfunction _standardURIToString(thiz: ?Object) {\n    // eslint-disable-next-line no-invalid-this\n    const { hash, host, pathname, protocol, search } = thiz || this;\n    let str = '';\n\n    protocol && (str += protocol);\n\n    // TODO userinfo\n\n    host && (str += `//${host}`);\n    str += pathname || '/';\n    search && (str += search);\n    hash && (str += hash);\n\n    return str;\n}\n\n/**\n * Sometimes we receive strings that we don't know if already percent-encoded, or not, due to the\n * various sources we get URLs or room names. This function encapsulates the decoding in a safe way.\n *\n * @param {string} text - The text to decode.\n * @returns {string}\n */\nexport function safeDecodeURIComponent(text: string) {\n    try {\n        return decodeURIComponent(text);\n    } catch (e) {\n        // The text wasn't encoded.\n    }\n\n    return text;\n}\n\n/**\n * Attempts to return a {@code String} representation of a specific\n * {@code Object} which is supposed to represent a URL. Obviously, if a\n * {@code String} is specified, it is returned. If a {@code URL} is specified,\n * its {@code URL#href} is returned. Additionally, an {@code Object} similar to\n * the one accepted by the constructor of Web's ExternalAPI is supported on both\n * mobile/React Native and Web/React.\n *\n * @param {Object|string} obj - The URL to return a {@code String}\n * representation of.\n * @returns {string} - A {@code String} representation of the specified\n * {@code obj} which is supposed to represent a URL.\n */\nexport function toURLString(obj: ?(Object | string)): ?string {\n    let str;\n\n    switch (typeof obj) {\n    case 'object':\n        if (obj) {\n            if (obj instanceof URL) {\n                str = obj.href;\n            } else {\n                str = urlObjectToString(obj);\n            }\n        }\n        break;\n\n    case 'string':\n        str = String(obj);\n        break;\n    }\n\n    return str;\n}\n\n/**\n * Attempts to return a {@code String} representation of a specific\n * {@code Object} similar to the one accepted by the constructor\n * of Web's ExternalAPI.\n *\n * @param {Object} o - The URL to return a {@code String} representation of.\n * @returns {string} - A {@code String} representation of the specified\n * {@code Object}.\n */\nexport function urlObjectToString(o: Object): ?string {\n    // First normalize the given url. It come as o.url or split into o.serverURL\n    // and o.room.\n    let tmp;\n\n    if (o.serverURL && o.room) {\n        tmp = new URL(o.room, o.serverURL).toString();\n    } else if (o.room) {\n        tmp = o.room;\n    } else {\n        tmp = o.url || '';\n    }\n\n    const url = parseStandardURIString(_fixURIStringScheme(tmp));\n\n    // protocol\n    if (!url.protocol) {\n        let protocol: ?string = o.protocol || o.scheme;\n\n        if (protocol) {\n            // Protocol is supposed to be the scheme and the final ':'. Anyway,\n            // do not make a fuss if the final ':' is not there.\n            protocol.endsWith(':') || (protocol += ':');\n            url.protocol = protocol;\n        }\n    }\n\n    // authority & pathname\n    let { pathname } = url;\n\n    if (!url.host) {\n        // Web's ExternalAPI domain\n        //\n        // It may be host/hostname and pathname with the latter denoting the\n        // tenant.\n        const domain: ?string = o.domain || o.host || o.hostname;\n\n        if (domain) {\n            const { host, hostname, pathname: contextRoot, port }\n                = parseStandardURIString(\n\n                    // XXX The value of domain in supposed to be host/hostname\n                    // and, optionally, pathname. Make sure it is not taken for\n                    // a pathname only.\n                    _fixURIStringScheme(`${APP_LINK_SCHEME}//${domain}`));\n\n            // authority\n            if (host) {\n                url.host = host;\n                url.hostname = hostname;\n                url.port = port;\n            }\n\n            // pathname\n            pathname === '/' && contextRoot !== '/' && (pathname = contextRoot);\n        }\n    }\n\n    // pathname\n\n    // Web's ExternalAPI roomName\n    const room = o.roomName || o.room;\n\n    if (room\n            && (url.pathname.endsWith('/')\n                || !url.pathname.endsWith(`/${room}`))) {\n        pathname.endsWith('/') || (pathname += '/');\n        pathname += room;\n    }\n\n    url.pathname = pathname;\n\n    // query/search\n\n    // Web's ExternalAPI jwt\n    const { jwt } = o;\n\n    if (jwt) {\n        let { search } = url;\n\n        if (search.indexOf('?jwt=') === -1 && search.indexOf('&jwt=') === -1) {\n            search.startsWith('?') || (search = `?${search}`);\n            search.length === 1 || (search += '&');\n            search += `jwt=${jwt}`;\n\n            url.search = search;\n        }\n    }\n\n    // fragment/hash\n\n    let { hash } = url;\n\n    for (const urlPrefix of [ 'config', 'interfaceConfig', 'devices', 'userInfo' ]) {\n        const urlParamsArray\n            = _objectToURLParamsArray(\n                o[`${urlPrefix}Overwrite`]\n                    || o[urlPrefix]\n                    || o[`${urlPrefix}Override`]);\n\n        if (urlParamsArray.length) {\n            let urlParamsString\n                = `${urlPrefix}.${urlParamsArray.join(`&${urlPrefix}.`)}`;\n\n            if (hash.length) {\n                urlParamsString = `&${urlParamsString}`;\n            } else {\n                hash = '#';\n            }\n            hash += urlParamsString;\n        }\n    }\n\n    url.hash = hash;\n\n    return url.toString() || undefined;\n}\n\n/**\n * Adds hash params to URL.\n *\n * @param {URL} url - The URL.\n * @param {Object} hashParamsToAdd - A map with the parameters to be set.\n * @returns {URL} - The new URL.\n */\nexport function addHashParamsToURL(url: URL, hashParamsToAdd: Object = {}) {\n    const params = parseURLParams(url);\n    const urlParamsArray = _objectToURLParamsArray({\n        ...params,\n        ...hashParamsToAdd\n    });\n\n    if (urlParamsArray.length) {\n        url.hash = `#${urlParamsArray.join('&')}`;\n    }\n\n    return url;\n}\n","// @flow\n\n/**\n * Applies NFKC normalization to the given text.\n *\n * @param {string} text - The text that needs to be normalized.\n * @returns {string} - The normalized text.\n */\nexport function normalizeNFKC(text: string) {\n    return text.normalize('NFKC');\n}\n","export * from './helpers';\nexport * from './httpUtils';\nexport * from './loadScript';\nexport * from './openURLInBrowser';\nexport * from './uri';\nexport * from './parseURLParams';\n","/**\n * The type of (redux) action to set the muted state of the local audio.\n *\n * {\n *     type: SET_AUDIO_MUTED,\n *     muted: boolean\n * }\n */\nexport const SET_AUDIO_MUTED = 'SET_AUDIO_MUTED';\n\n/**\n * The type of (redux) action to adjust the availability of the local audio.\n *\n * {\n *     type: SET_AUDIO_AVAILABLE,\n *     muted: boolean\n * }\n */\nexport const SET_AUDIO_AVAILABLE = 'SET_AUDIO_AVAILABLE';\n\n/**\n * The type of (redux) action to set the facing mode of the local video camera\n * to a specific value.\n *\n * {\n *     type: SET_CAMERA_FACING_MODE,\n *     cameraFacingMode: CAMERA_FACING_MODE\n * }\n */\nexport const SET_CAMERA_FACING_MODE = 'SET_CAMERA_FACING_MODE';\n\n/**\n * The type of (redux) action to adjust the availability of the local video.\n *\n * {\n *     type: SET_VIDEO_AVAILABLE,\n *     available: boolean\n * }\n */\nexport const SET_VIDEO_AVAILABLE = 'SET_VIDEO_AVAILABLE';\n\n/**\n * The type of (redux) action to set the muted state of the local video.\n *\n * {\n *     type: SET_VIDEO_MUTED,\n *     muted: boolean\n * }\n */\nexport const SET_VIDEO_MUTED = 'SET_VIDEO_MUTED';\n\n/**\n * The type of (redux) action to store the last video {@link Transform} applied\n * to a stream.\n *\n * {\n *     type: STORE_VIDEO_TRANSFORM,\n *     streamId: string,\n *     transform: Transform\n * }\n */\nexport const STORE_VIDEO_TRANSFORM = 'STORE_VIDEO_TRANSFORM';\n\n/**\n * The type of (redux) action to toggle the local video camera facing mode. In\n * contrast to SET_CAMERA_FACING_MODE, allows the toggling to be optimally\n * and/or natively implemented without the overhead of separate reads and writes\n * of the current/effective camera facing mode.\n *\n * {\n *     type: TOGGLE_CAMERA_FACING_MODE\n * }\n */\nexport const TOGGLE_CAMERA_FACING_MODE = 'TOGGLE_CAMERA_FACING_MODE';\n","/**\n * The set of facing modes for camera.\n *\n * @enum {string}\n */\nexport const CAMERA_FACING_MODE = {\n    ENVIRONMENT: 'environment',\n    USER: 'user'\n};\n\n/**\n * The set of media types.\n *\n * @enum {string}\n */\nexport const MEDIA_TYPE = {\n    AUDIO: 'audio',\n    PRESENTER: 'presenter',\n    VIDEO: 'video'\n};\n\n/* eslint-disable no-bitwise */\n\n/**\n * The types of authorities which may mute/unmute the local video.\n *\n * @enum {number}\n */\nexport const VIDEO_MUTISM_AUTHORITY = {\n    AUDIO_ONLY: 1 << 0,\n    BACKGROUND: 1 << 1,\n    USER: 1 << 2\n};\n\n/* eslint-enable no-bitwise */\n\n/**\n * The types of video tracks.\n *\n * @enum {string}\n */\nexport const VIDEO_TYPE = {\n    CAMERA: 'camera',\n    DESKTOP: 'desktop'\n};\n","/* @flow */\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    SET_AUDIO_MUTED,\n    SET_AUDIO_AVAILABLE,\n    SET_CAMERA_FACING_MODE,\n    SET_VIDEO_AVAILABLE,\n    SET_VIDEO_MUTED,\n    STORE_VIDEO_TRANSFORM,\n    TOGGLE_CAMERA_FACING_MODE\n} from './actionTypes';\nimport {\n    CAMERA_FACING_MODE,\n    MEDIA_TYPE,\n    VIDEO_MUTISM_AUTHORITY\n} from './constants';\n\n/**\n * Action to adjust the availability of the local audio.\n *\n * @param {boolean} available - True if the local audio is to be marked as\n * available or false if the local audio is not available.\n * @returns {{\n *     type: SET_AUDIO_AVAILABLE,\n *     available: boolean\n * }}\n */\nexport function setAudioAvailable(available: boolean) {\n    return {\n        type: SET_AUDIO_AVAILABLE,\n        available\n    };\n}\n\n/**\n * Action to set the muted state of the local audio.\n *\n * @param {boolean} muted - True if the local audio is to be muted or false if\n * the local audio is to be unmuted.\n * @param {boolean} ensureTrack - True if we want to ensure that a new track is\n * created if missing.\n * @returns {{\n *     type: SET_AUDIO_MUTED,\n *     ensureTrack: boolean,\n *     muted: boolean\n * }}\n */\nexport function setAudioMuted(muted: boolean, ensureTrack: boolean = false) {\n    return {\n        type: SET_AUDIO_MUTED,\n        ensureTrack,\n        muted\n    };\n}\n\n/**\n * Action to set the facing mode of the local camera.\n *\n * @param {CAMERA_FACING_MODE} cameraFacingMode - The camera facing mode to set.\n * @returns {{\n *     type: SET_CAMERA_FACING_MODE,\n *     cameraFacingMode: CAMERA_FACING_MODE\n * }}\n */\nexport function setCameraFacingMode(cameraFacingMode: CAMERA_FACING_MODE) {\n    return {\n        type: SET_CAMERA_FACING_MODE,\n        cameraFacingMode\n    };\n}\n\n/**\n * Action to adjust the availability of the local video.\n *\n * @param {boolean} available - True if the local video is to be marked as\n * available or false if the local video is not available.\n * @returns {{\n *     type: SET_VIDEO_AVAILABLE,\n *     available: boolean\n * }}\n */\nexport function setVideoAvailable(available: boolean) {\n    return {\n        type: SET_VIDEO_AVAILABLE,\n        available\n    };\n}\n\n/**\n * Action to set the muted state of the local video.\n *\n * @param {boolean} muted - True if the local video is to be muted or false if\n * the local video is to be unmuted.\n * @param {MEDIA_TYPE} mediaType - The type of media.\n * @param {number} authority - The {@link VIDEO_MUTISM_AUTHORITY} which is\n * muting/unmuting the local video.\n * @param {boolean} ensureTrack - True if we want to ensure that a new track is\n * created if missing.\n * @returns {Function}\n */\nexport function setVideoMuted(\n        muted: boolean,\n        mediaType: MEDIA_TYPE = MEDIA_TYPE.VIDEO,\n        authority: number = VIDEO_MUTISM_AUTHORITY.USER,\n        ensureTrack: boolean = false) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const oldValue = getState()['features/base/media'].video.muted;\n\n        // eslint-disable-next-line no-bitwise\n        const newValue = muted ? oldValue | authority : oldValue & ~authority;\n\n        return dispatch({\n            type: SET_VIDEO_MUTED,\n            authority,\n            mediaType,\n            ensureTrack,\n            muted: newValue\n        });\n    };\n}\n\n/**\n * Creates an action to store the last video {@link Transform} applied to a\n * stream.\n *\n * @param {string} streamId - The ID of the stream.\n * @param {Object} transform - The {@code Transform} to store.\n * @returns {{\n *     type: STORE_VIDEO_TRANSFORM,\n *     streamId: string,\n *     transform: Object\n * }}\n */\nexport function storeVideoTransform(streamId: string, transform: Object) {\n    return {\n        type: STORE_VIDEO_TRANSFORM,\n        streamId,\n        transform\n    };\n}\n\n/**\n * Toggles the camera facing mode. Most commonly, for example, mobile devices\n * such as phones have a front/user-facing and a back/environment-facing\n * cameras. In contrast to setCameraFacingMode, allows the toggling to be\n * optimally and/or natively implemented without the overhead of separate reads\n * and writes of the current/effective camera facing mode.\n *\n * @returns {{\n *     type: TOGGLE_CAMERA_FACING_MODE\n * }}\n */\nexport function toggleCameraFacingMode() {\n    return {\n        type: TOGGLE_CAMERA_FACING_MODE\n    };\n}\n","/* @flow */\n\nimport { toState } from '../redux';\n\nimport { VIDEO_MUTISM_AUTHORITY } from './constants';\n\n/**\n * Determines whether video is currently muted by the audio-only authority.\n *\n * @param {Function|Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @returns {boolean}\n */\nexport function isVideoMutedByAudioOnly(stateful: Function | Object) {\n    return (\n        _isVideoMutedByAuthority(stateful, VIDEO_MUTISM_AUTHORITY.AUDIO_ONLY));\n}\n\n/**\n * Determines whether video is currently muted by a specific\n * {@code VIDEO_MUTISM_AUTHORITY}.\n *\n * @param {Function|Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @param {number} videoMutismAuthority - The {@code VIDEO_MUTISM_AUTHORITY}\n * which is to be checked whether it has muted video.\n * @returns {boolean} If video is currently muted by the specified\n * {@code videoMutismAuthority}, then {@code true}; otherwise, {@code false}.\n */\nfunction _isVideoMutedByAuthority(\n        stateful: Function | Object,\n        videoMutismAuthority: number) {\n    const { muted } = toState(stateful)['features/base/media'].video;\n\n    // eslint-disable-next-line no-bitwise\n    return Boolean(muted & videoMutismAuthority);\n}\n\n/**\n * Determines whether video is currently muted by the user authority.\n *\n * @param {Function|Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @returns {boolean}\n */\nexport function isVideoMutedByUser(stateful: Function | Object) {\n    return _isVideoMutedByAuthority(stateful, VIDEO_MUTISM_AUTHORITY.USER);\n}\n\n/**\n * Determines whether a specific videoTrack should be rendered.\n *\n * @param {Track} videoTrack - The video track which is to be rendered.\n * @param {boolean} waitForVideoStarted - True if the specified videoTrack\n * should be rendered only after its associated video has started;\n * otherwise, false.\n * @returns {boolean} True if the specified videoTrack should be renderd;\n * otherwise, false.\n */\nexport function shouldRenderVideoTrack(\n        videoTrack: ?{ muted: boolean, videoStarted: boolean },\n        waitForVideoStarted: boolean) {\n    return (\n        videoTrack\n            && !videoTrack.muted\n            && (!waitForVideoStarted || videoTrack.videoStarted));\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { trackVideoStarted } from '../../tracks';\n\nimport { shouldRenderVideoTrack } from '../functions';\nimport { Video } from './_';\n\n/**\n * The type of the React {@code Component} props of {@link AbstractVideoTrack}.\n */\nexport type Props = {\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Callback to invoke when the {@link Video} of {@code AbstractVideoTrack}\n     * is clicked/pressed.\n     */\n    onPress?: Function,\n\n    /**\n     * The Redux representation of the participant's video track.\n     */\n    videoTrack?: Object,\n\n    /**\n     * Whether or not video should be rendered after knowing video playback has\n     * started.\n     */\n    waitForVideoStarted?: boolean,\n\n    /**\n     * The z-order of the Video of AbstractVideoTrack in the stacking space of\n     * all Videos. For more details, refer to the zOrder property of the Video\n     * class for React Native.\n     */\n    zOrder?: number,\n\n    /**\n     * Indicates whether zooming (pinch to zoom and/or drag) is enabled.\n     */\n    zoomEnabled?: boolean\n};\n\n/**\n * Implements a React {@link Component} that renders video element for a\n * specific video track.\n *\n * @abstract\n */\nexport default class AbstractVideoTrack<P: Props> extends Component<P> {\n    /**\n     * Initializes a new AbstractVideoTrack instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onVideoPlaying = this._onVideoPlaying.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const videoTrack = _falsy2null(this.props.videoTrack);\n        let render;\n\n        if (this.props.waitForVideoStarted && videoTrack) {\n            // That's the complex case: we have to wait for onPlaying before we\n            // render videoTrack. The complexity comes from the fact that\n            // onPlaying will come after we render videoTrack.\n            if (shouldRenderVideoTrack(videoTrack, true)) {\n                // It appears that onPlaying has come for videoTrack already.\n                // Most probably, another render has already passed through the\n                // else clause bellow already.\n                render = true;\n            } else if (shouldRenderVideoTrack(videoTrack, false)\n                    && !videoTrack.videoStarted) {\n                // XXX Unfortunately, onPlaying has not come for videoTrack yet.\n                // We have to render in order to give onPlaying a chance to\n                // come.\n                render = true;\n            }\n        } else {\n            // That's the simple case: we don't have to wait for onPlaying\n            // before we render videoTrack\n            render = shouldRenderVideoTrack(videoTrack, false);\n        }\n\n        const stream = render && videoTrack\n            ? videoTrack.jitsiTrack.getOriginalStream() : null;\n\n        // Actual zoom is currently only enabled if the stream is a desktop\n        // stream.\n        const zoomEnabled\n            = this.props.zoomEnabled\n                && stream\n                && videoTrack\n                && videoTrack.videoType === 'desktop';\n\n        return (\n            <Video\n                mirror = { videoTrack && videoTrack.mirror }\n                onPlaying = { this._onVideoPlaying }\n                onPress = { this.props.onPress }\n                stream = { stream }\n                zOrder = { this.props.zOrder }\n                zoomEnabled = { zoomEnabled } />\n        );\n    }\n\n    _onVideoPlaying: () => void;\n\n    /**\n     * Handler for case when video starts to play.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onVideoPlaying() {\n        const { videoTrack } = this.props;\n\n        if (videoTrack && !videoTrack.videoStarted) {\n            this.props.dispatch(trackVideoStarted(videoTrack.jitsiTrack));\n        }\n    }\n}\n\n/**\n * Returns null if a specific value is falsy; otherwise, returns the specified\n * value.\n *\n * @param {*} value - The value to return if it is not falsy.\n * @returns {*} If the specified value is falsy, null; otherwise, the specified\n * value.\n */\nfunction _falsy2null(value) {\n    return value || null;\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { connect } from '../../../redux';\n\nimport AbstractVideoTrack from '../AbstractVideoTrack';\nimport type { Props as AbstractVideoTrackProps } from '../AbstractVideoTrack';\n\nimport Video from './Video';\n\n/**\n * The type of the React {@code Component} props of {@link VideoTrack}.\n */\ntype Props = AbstractVideoTrackProps & {\n\n    /**\n     * CSS classes to add to the video element.\n     */\n    className: string,\n\n    /**\n     * The value of the id attribute of the video. Used by the torture tests\n     * to locate video elements.\n     */\n    id: string,\n\n    /**\n     *\n     * Used to determine the value of the autoplay attribute of the underlying\n     * video element.\n     */\n    _noAutoPlayVideo: boolean\n};\n\n/**\n * Component that renders a video element for a passed in video track and\n * notifies the store when the video has started playing.\n *\n * @extends AbstractVideoTrack\n */\nclass VideoTrack extends AbstractVideoTrack<Props> {\n    /**\n     * Default values for {@code VideoTrack} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        className: '',\n\n        id: ''\n    };\n\n    /**\n     * Renders the video element.\n     *\n     * @override\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Video\n                autoPlay = { !this.props._noAutoPlayVideo }\n                className = { this.props.className }\n                id = { this.props.id }\n                onVideoPlaying = { this._onVideoPlaying }\n                videoTrack = { this.props.videoTrack } />\n        );\n    }\n\n    _onVideoPlaying: () => void;\n}\n\n\n/**\n * Maps (parts of) the Redux state to the associated VideoTracks props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _noAutoPlayVideo: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    const testingConfig = state['features/base/config'].testing;\n\n    return {\n        _noAutoPlayVideo: testingConfig?.noAutoPlayVideo\n    };\n}\n\nexport default connect(_mapStateToProps)(VideoTrack);\n","// @flow\n\nimport { ReducerRegistry } from '../../base/redux';\n\nimport {\n    _SET_APP_STATE_LISTENER,\n    APP_STATE_CHANGED\n} from './actionTypes';\n\n/**\n * The default/initial redux state of the feature background.\n */\nconst DEFAULT_STATE = {\n    appState: 'active'\n};\n\nReducerRegistry.register('features/background', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case _SET_APP_STATE_LISTENER:\n        return {\n            ...state,\n            appStateListener: action.listener\n        };\n\n    case APP_STATE_CHANGED:\n        return {\n            ...state,\n            appState: action.appState\n        };\n    }\n\n    return state;\n});\n","import { combineReducers } from 'redux';\n\nimport { CONFERENCE_FAILED, CONFERENCE_LEFT } from '../conference';\nimport { ReducerRegistry } from '../redux';\nimport { TRACK_REMOVED } from '../tracks';\n\nimport {\n    SET_AUDIO_AVAILABLE,\n    SET_AUDIO_MUTED,\n    SET_CAMERA_FACING_MODE,\n    SET_VIDEO_AVAILABLE,\n    SET_VIDEO_MUTED,\n    STORE_VIDEO_TRANSFORM,\n    TOGGLE_CAMERA_FACING_MODE\n} from './actionTypes';\nimport { CAMERA_FACING_MODE } from './constants';\n\n/**\n * Media state object for local audio.\n *\n * @typedef {Object} AudioMediaState\n * @property {boolean} muted=false - Audio muted state.\n */\n\n// FIXME Technically, _AUDIO_INITIAL_MEDIA_STATE is a constant internal to the\n// feature base/media and used in multiple files so it should be in\n// constants.js. Practically though, AudioMediaState would then be used in\n// multiple files as well so I don't know where and how to move it.\n/**\n * Initial state for local audio.\n *\n * @type {AudioMediaState}\n */\nexport const _AUDIO_INITIAL_MEDIA_STATE = {\n    available: true,\n    muted: false\n};\n\n/**\n * Reducer for audio media state.\n *\n * @param {AudioMediaState} state - Media state of local audio.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @private\n * @returns {AudioMediaState}\n */\nfunction _audio(state = _AUDIO_INITIAL_MEDIA_STATE, action) {\n    switch (action.type) {\n    case SET_AUDIO_AVAILABLE:\n        return {\n            ...state,\n            available: action.available\n        };\n\n    case SET_AUDIO_MUTED:\n        return {\n            ...state,\n            muted: action.muted\n        };\n\n    default:\n        return state;\n    }\n}\n\n/**\n * Media state object for local video.\n *\n * @typedef {Object} VideoMediaState\n * @property {CAMERA_FACING_MODE} facingMode='user' - Camera facing mode.\n * @property {boolean} muted=false - Video muted state.\n */\n\n// FIXME Technically, _VIDEO_INITIAL_MEDIA_STATE is a constant internal to the\n// feature base/media and used in multiple files so it should be in\n// constants.js. Practically though, VideoMediaState would then be used in\n// multiple files as well so I don't know where and how to move it.\n/**\n * Initial state for video.\n *\n * @type {VideoMediaState}\n */\nexport const _VIDEO_INITIAL_MEDIA_STATE = {\n    available: true,\n    facingMode: CAMERA_FACING_MODE.USER,\n    muted: 0,\n\n    /**\n     * The video {@link Transform}s applied to {@code MediaStream}s by\n     * {@code id} i.e. \"pinch to zoom\".\n     */\n    transforms: {}\n};\n\n/**\n * Reducer for camera media state.\n *\n * @param {VideoMediaState} state - Media state of local video.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @private\n * @returns {VideoMediaState}\n */\nfunction _video(state = _VIDEO_INITIAL_MEDIA_STATE, action) {\n    switch (action.type) {\n    case CONFERENCE_FAILED:\n    case CONFERENCE_LEFT:\n        return _clearAllVideoTransforms(state);\n\n    case SET_CAMERA_FACING_MODE:\n        return {\n            ...state,\n            facingMode: action.cameraFacingMode\n        };\n\n    case SET_VIDEO_AVAILABLE:\n        return {\n            ...state,\n            available: action.available\n        };\n\n    case SET_VIDEO_MUTED:\n        return {\n            ...state,\n            muted: action.muted\n        };\n\n    case STORE_VIDEO_TRANSFORM:\n        return _storeVideoTransform(state, action);\n\n    case TOGGLE_CAMERA_FACING_MODE: {\n        let cameraFacingMode = state.facingMode;\n\n        cameraFacingMode\n            = cameraFacingMode === CAMERA_FACING_MODE.USER\n                ? CAMERA_FACING_MODE.ENVIRONMENT\n                : CAMERA_FACING_MODE.USER;\n\n        return {\n            ...state,\n            facingMode: cameraFacingMode\n        };\n    }\n\n    case TRACK_REMOVED:\n        return _trackRemoved(state, action);\n\n    default:\n        return state;\n    }\n}\n\n/**\n * Listen for various actions related to media devices.\n *\n * @param {Object} state - State of media devices.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @param {Object} action.media - Information about media devices to be\n * modified.\n * @returns {Object}\n */\nReducerRegistry.register('features/base/media', combineReducers({\n    audio: _audio,\n    video: _video\n}));\n\n/**\n * Removes all stored video {@link Transform}s.\n *\n * @param {Object} state - The {@code video} state of the feature base/media.\n * @private\n * @returns {Object}\n */\nfunction _clearAllVideoTransforms(state) {\n    return {\n        ...state,\n        transforms: _VIDEO_INITIAL_MEDIA_STATE.transforms\n    };\n}\n\n/**\n * Stores the last applied transform to a stream.\n *\n * @param {Object} state - The {@code video} state of the feature base/media.\n * @param {Object} action - The redux action {@link STORE_VIDEO_TRANSFORM}.\n * @private\n * @returns {Object}\n */\nfunction _storeVideoTransform(state, { streamId, transform }) {\n    return {\n        ...state,\n        transforms: {\n            ...state.transforms,\n            [streamId]: transform\n        }\n    };\n}\n\n/**\n * Removes the stored video {@link Transform} associated with a\n * {@code MediaStream} when its respective track is removed.\n *\n * @param {Object} state - The {@code video} state of the feature base/media.\n * @param {Object} action - The redux action {@link TRACK_REMOVED}.\n * @private\n * @returns {Object}\n */\nfunction _trackRemoved(state, { track: { jitsiTrack } }) {\n    if (jitsiTrack) {\n        const streamId = jitsiTrack.getStreamId();\n\n        if (streamId && streamId in state.transforms) {\n            const nextTransforms = {\n                ...state.transforms\n            };\n\n            delete nextTransforms[streamId];\n\n            return {\n                ...state,\n                transforms: nextTransforms\n            };\n        }\n    }\n\n    return state;\n}\n","// @flow\n\nimport {\n    createStartAudioOnlyEvent,\n    createStartMutedConfigurationEvent,\n    createSyncTrackStateEvent,\n    createTrackMutedEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { APP_STATE_CHANGED } from '../../mobile/background';\n\nimport { SET_AUDIO_ONLY, setAudioOnly } from '../audio-only';\nimport { isRoomValid, SET_ROOM } from '../conference';\nimport JitsiMeetJS from '../lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../redux';\nimport { getPropertyValue } from '../settings';\nimport { setTrackMuted, TRACK_ADDED } from '../tracks';\n\nimport { setAudioMuted, setCameraFacingMode, setVideoMuted } from './actions';\nimport {\n    CAMERA_FACING_MODE,\n    MEDIA_TYPE,\n    VIDEO_MUTISM_AUTHORITY\n} from './constants';\nimport logger from './logger';\nimport {\n    _AUDIO_INITIAL_MEDIA_STATE,\n    _VIDEO_INITIAL_MEDIA_STATE\n} from './reducer';\n\n/**\n * Implements the entry point of the middleware of the feature base/media.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case APP_STATE_CHANGED:\n        return _appStateChanged(store, next, action);\n\n    case SET_AUDIO_ONLY:\n        return _setAudioOnly(store, next, action);\n\n    case SET_ROOM:\n        return _setRoom(store, next, action);\n\n    case TRACK_ADDED: {\n        const result = next(action);\n        const { track } = action;\n\n        // Don't sync track mute state with the redux store for screenshare\n        // since video mute state represents local camera mute state only.\n        track.local && track.videoType !== 'desktop'\n            && _syncTrackMutedState(store, track);\n\n        return result;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Adjusts the video muted state based on the app state.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code APP_STATE_CHANGED} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _appStateChanged({ dispatch }, next, action) {\n    const { appState } = action;\n    const mute = appState !== 'active'; // Note that 'background' and 'inactive' are treated equal.\n\n    sendAnalytics(createTrackMutedEvent('video', 'background mode', mute));\n\n    dispatch(setVideoMuted(mute, MEDIA_TYPE.VIDEO, VIDEO_MUTISM_AUTHORITY.BACKGROUND));\n\n    return next(action);\n}\n\n/**\n * Adjusts the video muted state based on the audio-only state.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code SET_AUDIO_ONLY} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _setAudioOnly({ dispatch }, next, action) {\n    const { audioOnly, ensureVideoTrack } = action;\n\n    sendAnalytics(createTrackMutedEvent('video', 'audio-only mode', audioOnly));\n\n    // Make sure we mute both the desktop and video tracks.\n    dispatch(setVideoMuted(audioOnly, MEDIA_TYPE.VIDEO, VIDEO_MUTISM_AUTHORITY.AUDIO_ONLY, ensureVideoTrack));\n\n    if (navigator.product !== 'ReactNative') {\n        dispatch(setVideoMuted(audioOnly, MEDIA_TYPE.PRESENTER, VIDEO_MUTISM_AUTHORITY.AUDIO_ONLY, ensureVideoTrack));\n    }\n\n    return next(action);\n}\n\n/**\n * Notifies the feature base/media that the action {@link SET_ROOM} is being\n * dispatched within a specific redux {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action, {@code SET_ROOM}, which is being\n * dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _setRoom({ dispatch, getState }, next, action) {\n    // Figure out the desires/intents i.e. the state of base/media. There are\n    // multiple desires/intents ordered by precedence such as server-side\n    // config, config overrides in the user-supplied URL, user's own app\n    // settings, etc.\n\n    const state = getState();\n    const { room } = action;\n    const roomIsValid = isRoomValid(room);\n\n    // XXX The configurations/preferences/settings startWithAudioMuted,\n    // startWithVideoMuted, and startAudioOnly were introduced for\n    // conferences/meetings. So it makes sense for these to not be considered\n    // outside of conferences/meetings (e.g. WelcomePage). Later on, though, we\n    // introduced a \"Video <-> Voice\" toggle on the WelcomePage which utilizes\n    // startAudioOnly outside of conferences/meetings so that particular\n    // configuration/preference/setting employs slightly exclusive logic.\n    const mutedSources = {\n        // We have startWithAudioMuted and startWithVideoMuted here:\n        config: true,\n        settings: true,\n\n        // XXX We've already overwritten base/config with urlParams. However,\n        // settings are more important than the server-side config.\n        // Consequently, we need to read from urlParams anyway:\n        urlParams: true,\n\n        // We don't have startWithAudioMuted and startWithVideoMuted here:\n        jwt: false\n    };\n    const audioMuted\n        = roomIsValid\n            ? Boolean(\n                getPropertyValue(state, 'startWithAudioMuted', mutedSources))\n            : _AUDIO_INITIAL_MEDIA_STATE.muted;\n    const videoMuted\n        = roomIsValid\n            ? Boolean(\n                getPropertyValue(state, 'startWithVideoMuted', mutedSources))\n            : _VIDEO_INITIAL_MEDIA_STATE.muted;\n\n    sendAnalytics(\n        createStartMutedConfigurationEvent('local', audioMuted, videoMuted));\n    logger.log(\n        `Start muted: ${audioMuted ? 'audio, ' : ''}${\n            videoMuted ? 'video' : ''}`);\n\n    // Unconditionally express the desires/expectations/intents of the app and\n    // the user i.e. the state of base/media. Eventually, practice/reality i.e.\n    // the state of base/tracks will or will not agree with the desires.\n    dispatch(setAudioMuted(audioMuted));\n    dispatch(setCameraFacingMode(CAMERA_FACING_MODE.USER));\n    dispatch(setVideoMuted(videoMuted));\n\n    // startAudioOnly\n    //\n    // FIXME Technically, the audio-only feature is owned by base/conference,\n    // not base/media so the following should be in base/conference.\n    // Practically, I presume it was easier to write the source code here\n    // because it looks like startWithAudioMuted and startWithVideoMuted.\n    //\n    // XXX After the introduction of the \"Video <-> Voice\" toggle on the\n    // WelcomePage, startAudioOnly is utilized even outside of\n    // conferences/meetings.\n    let audioOnly;\n\n    if (JitsiMeetJS.mediaDevices.supportsVideo()) {\n        audioOnly\n            = Boolean(\n                getPropertyValue(\n                    state,\n                    'startAudioOnly',\n                    /* sources */ {\n                        // FIXME Practically, base/config is (really) correct\n                        // only if roomIsValid. At the time of this writing,\n                        // base/config is overwritten by URL params which leaves\n                        // base/config incorrect on the WelcomePage after\n                        // leaving a conference which explicitly overwrites\n                        // base/config with URL params.\n                        config: roomIsValid,\n\n                        // XXX We've already overwritten base/config with\n                        // urlParams if roomIsValid. However, settings are more\n                        // important than the server-side config. Consequently,\n                        // we need to read from urlParams anyway. We also\n                        // probably want to read from urlParams when\n                        // !roomIsValid.\n                        urlParams: true,\n\n                        // The following don't have complications around whether\n                        // they are defined or not:\n                        jwt: false,\n                        settings: true\n                    }));\n    } else {\n        // Default to audio-only if the (execution) environment does not\n        // support (sending and/or receiving) video.\n        audioOnly = true;\n    }\n\n    sendAnalytics(createStartAudioOnlyEvent(audioOnly));\n    logger.log(`Start audio only set to ${audioOnly.toString()}`);\n\n    dispatch(setAudioOnly(audioOnly, false));\n\n    return next(action);\n}\n\n/**\n * Syncs muted state of local media track with muted state from media state.\n *\n * @param {Store} store - The redux store.\n * @param {Track} track - The local media track.\n * @private\n * @returns {void}\n */\nfunction _syncTrackMutedState({ getState }, track) {\n    const state = getState()['features/base/media'];\n    const mediaType = track.mediaType === MEDIA_TYPE.PRESENTER\n        ? MEDIA_TYPE.VIDEO : track.mediaType;\n    const muted = Boolean(state[mediaType].muted);\n\n    // XXX If muted state of track when it was added is different from our media\n    // muted state, we need to mute track and explicitly modify 'muted' property\n    // on track. This is because though TRACK_ADDED action was dispatched it's\n    // not yet in redux state and JitsiTrackEvents.TRACK_MUTE_CHANGED may be\n    // fired before track gets to state.\n    if (track.muted !== muted) {\n        sendAnalytics(createSyncTrackStateEvent(track.mediaType, muted));\n        logger.log(\n            `Sync ${track.mediaType} track muted state to ${\n                muted ? 'muted' : 'unmuted'}`);\n\n        track.muted = muted;\n        setTrackMuted(track.jitsiTrack, muted);\n    }\n}\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './constants';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import * as colors from './colors';\nimport themed from './utils/themed'; // Cards on a board\n\nexport var e100 = themed({\n  light: \"box-shadow: 0 1px 1px \".concat(colors.N50A, \", 0 0 1px 0 \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 1px 1px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Inline dialogs\n\nexport var e200 = themed({\n  light: \"box-shadow: 0 4px 8px -2px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 4px 8px -2px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Modals\n\nexport var e300 = themed({\n  light: \"box-shadow: 0 8px 16px -4px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 8px 16px -4px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Panels\n\nexport var e400 = themed({\n  light: \"box-shadow: 0 12px 24px -6px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 12px 24px -6px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Flag messages (notifications)\n\nexport var e500 = themed({\n  light: \"box-shadow: 0 20px 32px -8px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 20px 32px -8px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n});","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport { gridSize, fontSize } from './index';\n\nvar baseHeading = function baseHeading(size, lineHeight) {\n  return \"\\n  font-size: \".concat(size / fontSize(), \"em;\\n  font-style: inherit;\\n  line-height: \").concat(lineHeight / size, \";\\n\");\n};\n\nexport var h900 = function h900() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(35, 40), colors.heading, gridSize() * 6.5);\n};\nexport var h800 = function h800() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(29, 32), colors.heading, gridSize() * 5);\n};\nexport var h700 = function h700() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(24, 28), colors.heading, gridSize() * 5);\n};\nexport var h600 = function h600() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  margin-top: \", \"px;\\n\"], baseHeading(20, 24), colors.heading, gridSize() * 3.5);\n};\nexport var h500 = function h500() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.006em;\\n  margin-top: \", \"px;\\n\"], baseHeading(16, 20), colors.heading, gridSize() * 3);\n};\nexport var h400 = function h400() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.003em;\\n  margin-top: \", \"px;\\n\"], baseHeading(14, 16), colors.heading, gridSize() * 2);\n};\nexport var h300 = function h300() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n  text-transform: uppercase;\\n\"], baseHeading(12, 16), colors.heading, gridSize() * 2.5);\n};\nexport var h200 = function h200() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n\"], baseHeading(12, 16), colors.subtleHeading, gridSize() * 2);\n};\nexport var h100 = function h100() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 700;\\n  margin-top: \", \"px;\\n\"], baseHeading(11, 16), colors.subtleHeading, gridSize() * 2);\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nexport default (function (_ref) {\n  var children = _ref.children,\n      props = _ref.props,\n      theme = _ref.theme;\n  var appearance = _typeof(props) === 'object' ? 'default' : props;\n  var merged = _typeof(props) === 'object' ? _objectSpread({}, props) : {};\n  Object.keys(theme).forEach(function (key) {\n    if (!(key in merged)) {\n      merged[key] = theme[key]({\n        appearance: appearance\n      });\n    }\n  });\n  return children(merged);\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport * as colors from '../colors';\nimport { createTheme } from '../utils/createTheme';\n\nvar orTextColor = function orTextColor(preferred) {\n  return function (p) {\n    return p[preferred] || p.textColor;\n  };\n};\n\nvar Div = styled.div.withConfig({\n  displayName: \"Reset__Div\",\n  componentId: \"sc-15i6ali-0\"\n})([\"\\n  \", \";\\n\"], function (p) {\n  return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n\\n    a {\\n      color: \", \";\\n    }\\n    a:hover {\\n      color: \", \";\\n    }\\n    a:active {\\n      color: \", \";\\n    }\\n    a:focus {\\n      outline-color: \", \";\\n    }\\n    h1,\\n    h2,\\n    h3,\\n    h4,\\n    h5 {\\n      color: \", \";\\n    }\\n    h6 {\\n      color: \", \";\\n    }\\n    small {\\n      color: \", \";\\n    }\\n  \"], p.backgroundColor, p.textColor, orTextColor('linkColor'), orTextColor('linkColorHover'), orTextColor('linkColorActive'), orTextColor('linkColorOutline'), orTextColor('headingColor'), orTextColor('subtleHeadingColor'), orTextColor('subtleTextColor'));\n});\nexport var ResetTheme = createTheme(function () {\n  return {\n    backgroundColor: colors.N0,\n    linkColor: colors.B400,\n    linkColorHover: colors.B300,\n    linkColorActive: colors.B500,\n    linkColorOutline: colors.B100,\n    headingColor: colors.N800,\n    subtleHeadingColor: colors.N200,\n    subtleTextColor: colors.N200,\n    textColor: colors.N900\n  };\n});\nexport function Reset(props) {\n  return React.createElement(ResetTheme.Provider, {\n    value: props.theme\n  }, React.createElement(ResetTheme.Consumer, null, function (tokens) {\n    return React.createElement(Div, _extends({}, _objectSpread({}, tokens, {\n      mode: undefined\n    }), props), props.children);\n  }));\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React from 'react';\nimport Theme from './components/Theme'; // Pre-executes the theme and passes it as a prop to the supplied component.\n// This is useful for ensuring that the current theme is accessible as props\n// in styled-components.\n\nexport function withTheme(InnerComponent) {\n  return function ComponentWithTheme(props) {\n    return React.createElement(Theme.Consumer, null, function (tokens) {\n      return React.createElement(InnerComponent, _extends({}, props, {\n        theme: tokens\n      }));\n    });\n  };\n}","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","/**\n * The type of Redux action which sets the noSrcDataNotificationUid state representing the UID of the previous\n * no data from source notification. Used to check if such a notification was previously displayed.\n *\n * {\n *     type: SET_NO_SRC_DATA_NOTIFICATION_UID,\n *     uid: ?number\n * }\n */\nexport const SET_NO_SRC_DATA_NOTIFICATION_UID = 'SET_NO_SRC_DATA_NOTIFICATION_UID';\n\n/**\n * The type of redux action dispatched to disable screensharing or to start the\n * flow for enabling screenshare.\n *\n * {\n *     type: TOGGLE_SCREENSHARING\n * }\n */\nexport const TOGGLE_SCREENSHARING = 'TOGGLE_SCREENSHARING';\n\n/**\n * The type of redux action dispatched when a track has been (locally or\n * remotely) added to the conference.\n *\n * {\n *     type: TRACK_ADDED,\n *     track: Track\n * }\n */\nexport const TRACK_ADDED = 'TRACK_ADDED';\n\n/**\n * The type of redux action dispatched when a canceled {@code getUserMedia}\n * process completes either successfully or with an error (the error is ignored\n * and the track is immediately disposed if it has been created).\n *\n * {\n *     type: TRACK_CREATE_CANCELED,\n *     trackType: MEDIA_TYPE\n * }\n */\nexport const TRACK_CREATE_CANCELED = 'TRACK_CREATE_CANCELED';\n\n/**\n * The type of redux action dispatched when {@code getUserMedia} fails with an\n * error (such as permission denied).\n *\n * {\n *     type: TRACK_CREATE_ERROR,\n *     permissionDenied: Boolean,\n *     trackType: MEDIA_TYPE\n * }\n */\nexport const TRACK_CREATE_ERROR = 'TRACK_CREATE_ERROR';\n\n/**\n * The type of redux action dispatched when a track has triggered no data from source event.\n *\n * {\n *     type: TRACK_NO_DATA_FROM_SOURCE,\n *     track: Track\n * }\n */\nexport const TRACK_NO_DATA_FROM_SOURCE = 'TRACK_NO_DATA_FROM_SOURCE';\n\n/**\n * The type of redux action dispatched when a track has been (locally or\n * remotely) removed from the conference.\n *\n * {\n *     type: TRACK_REMOVED,\n *     track: Track\n * }\n */\nexport const TRACK_REMOVED = 'TRACK_REMOVED';\n\n/**\n * The type of redux action dispatched when a track's properties were updated.\n *\n * {\n *     type: TRACK_UPDATED,\n *     track: Track\n * }\n */\nexport const TRACK_UPDATED = 'TRACK_UPDATED';\n\n/**\n * The type of redux action dispatched when a local track starts being created\n * via a WebRTC {@code getUserMedia} call. The action's payload includes an\n * extra {@code gumProcess} property which is a {@code Promise} with an extra\n * {@code cancel} method which can be used to cancel the process. Canceling will\n * result in disposing any {@code JitsiLocalTrack} returned by the\n * {@code getUserMedia} callback. There will be a {@code TRACK_CREATE_CANCELED}\n * action instead of a {@code TRACK_ADDED} or {@code TRACK_CREATE_ERROR} action.\n *\n * {\n *     type: TRACK_WILL_CREATE\n *     track: {\n *         gumProcess: Promise with a `cancel` method to cancel the process,\n *         local: true,\n *         mediaType: MEDIA_TYPE\n *     }\n * }\n */\nexport const TRACK_WILL_CREATE = 'TRACK_WILL_CREATE';\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/tracks');\n","/* global APP */\n\nimport JitsiMeetJS, { JitsiTrackErrors, browser } from '../lib-jitsi-meet';\nimport { MEDIA_TYPE } from '../media';\nimport {\n    getUserSelectedCameraDeviceId,\n    getUserSelectedMicDeviceId\n} from '../settings';\n\nimport loadEffects from './loadEffects';\nimport logger from './logger';\n\n/**\n * Creates a local video track for presenter. The constraints are computed based\n * on the height of the desktop that is being shared.\n *\n * @param {Object} options - The options with which the local presenter track\n * is to be created.\n * @param {string|null} [options.cameraDeviceId] - Camera device id or\n * {@code undefined} to use app's settings.\n * @param {number} desktopHeight - The height of the desktop that is being\n * shared.\n * @returns {Promise<JitsiLocalTrack>}\n */\nexport async function createLocalPresenterTrack(options, desktopHeight) {\n    const { cameraDeviceId } = options;\n\n    // compute the constraints of the camera track based on the resolution\n    // of the desktop screen that is being shared.\n    const cameraHeights = [ 180, 270, 360, 540, 720 ];\n    const proportion = 5;\n    const result = cameraHeights.find(\n            height => (desktopHeight / proportion) < height);\n    const constraints = {\n        video: {\n            aspectRatio: 4 / 3,\n            height: {\n                ideal: result\n            }\n        }\n    };\n    const [ videoTrack ] = await JitsiMeetJS.createLocalTracks(\n        {\n            cameraDeviceId,\n            constraints,\n            devices: [ 'video' ]\n        });\n\n    videoTrack.type = MEDIA_TYPE.PRESENTER;\n\n    return videoTrack;\n}\n\n/**\n * Create local tracks of specific types.\n *\n * @param {Object} options - The options with which the local tracks are to be\n * created.\n * @param {string|null} [options.cameraDeviceId] - Camera device id or\n * {@code undefined} to use app's settings.\n * @param {string[]} options.devices - Required track types such as 'audio'\n * and/or 'video'.\n * @param {string|null} [options.micDeviceId] - Microphone device id or\n * {@code undefined} to use app's settings.\n * @param {boolean} [firePermissionPromptIsShownEvent] - Whether lib-jitsi-meet\n * should check for a {@code getUserMedia} permission prompt and fire a\n * corresponding event.\n * @param {Object} store - The redux store in the context of which the function\n * is to execute and from which state such as {@code config} is to be retrieved.\n * @returns {Promise<JitsiLocalTrack[]>}\n */\nexport function createLocalTracksF(options = {}, firePermissionPromptIsShownEvent, store) {\n    let { cameraDeviceId, micDeviceId } = options;\n\n    if (typeof APP !== 'undefined') {\n        // TODO The app's settings should go in the redux store and then the\n        // reliance on the global variable APP will go away.\n        store || (store = APP.store); // eslint-disable-line no-param-reassign\n\n        const state = store.getState();\n\n        if (typeof cameraDeviceId === 'undefined' || cameraDeviceId === null) {\n            cameraDeviceId = getUserSelectedCameraDeviceId(state);\n        }\n        if (typeof micDeviceId === 'undefined' || micDeviceId === null) {\n            micDeviceId = getUserSelectedMicDeviceId(state);\n        }\n    }\n\n    const state = store.getState();\n    const {\n        desktopSharingFrameRate,\n        firefox_fake_device, // eslint-disable-line camelcase\n        resolution\n    } = state['features/base/config'];\n    const constraints = options.constraints ?? state['features/base/config'].constraints;\n\n    return (\n        loadEffects(store).then(effectsArray => {\n            // Filter any undefined values returned by Promise.resolve().\n            const effects = effectsArray.filter(effect => Boolean(effect));\n\n            return JitsiMeetJS.createLocalTracks(\n                {\n                    cameraDeviceId,\n                    constraints,\n                    desktopSharingExtensionExternalInstallation:\n                        options.desktopSharingExtensionExternalInstallation,\n                    desktopSharingFrameRate,\n                    desktopSharingSourceDevice:\n                        options.desktopSharingSourceDevice,\n                    desktopSharingSources: options.desktopSharingSources,\n\n                    // Copy array to avoid mutations inside library.\n                    devices: options.devices.slice(0),\n                    effects,\n                    firefox_fake_device, // eslint-disable-line camelcase\n                    micDeviceId,\n                    resolution\n                },\n                firePermissionPromptIsShownEvent)\n            .catch(err => {\n                logger.error('Failed to create local tracks', options.devices, err);\n\n                return Promise.reject(err);\n            });\n        }));\n}\n\n/**\n * Returns local audio track.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @returns {(Track|undefined)}\n */\nexport function getLocalAudioTrack(tracks) {\n    return getLocalTrack(tracks, MEDIA_TYPE.AUDIO);\n}\n\n/**\n * Returns local track by media type.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @param {MEDIA_TYPE} mediaType - Media type.\n * @param {boolean} [includePending] - Indicates whether a local track is to be\n * returned if it is still pending. A local track is pending if\n * {@code getUserMedia} is still executing to create it and, consequently, its\n * {@code jitsiTrack} property is {@code undefined}. By default a pending local\n * track is not returned.\n * @returns {(Track|undefined)}\n */\nexport function getLocalTrack(tracks, mediaType, includePending = false) {\n    return (\n        getLocalTracks(tracks, includePending)\n            .find(t => t.mediaType === mediaType));\n}\n\n/**\n * Returns an array containing the local tracks with or without a (valid)\n * {@code JitsiTrack}.\n *\n * @param {Track[]} tracks - An array containing all local tracks.\n * @param {boolean} [includePending] - Indicates whether a local track is to be\n * returned if it is still pending. A local track is pending if\n * {@code getUserMedia} is still executing to create it and, consequently, its\n * {@code jitsiTrack} property is {@code undefined}. By default a pending local\n * track is not returned.\n * @returns {Track[]}\n */\nexport function getLocalTracks(tracks, includePending = false) {\n    // XXX A local track is considered ready only once it has its `jitsiTrack`\n    // property set by the `TRACK_ADDED` action. Until then there is a stub\n    // added just before the `getUserMedia` call with a cancellable\n    // `gumInProgress` property which then can be used to destroy the track that\n    // has not yet been added to the redux store. Once GUM is cancelled, it will\n    // never make it to the store nor there will be any\n    // `TRACK_ADDED`/`TRACK_REMOVED` actions dispatched for it.\n    return tracks.filter(t => t.local && (t.jitsiTrack || includePending));\n}\n\n/**\n * Returns local video track.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @returns {(Track|undefined)}\n */\nexport function getLocalVideoTrack(tracks) {\n    return getLocalTrack(tracks, MEDIA_TYPE.VIDEO);\n}\n\n/**\n * Returns the media type of the local video, presenter or video.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @returns {MEDIA_TYPE}\n */\nexport function getLocalVideoType(tracks) {\n    const presenterTrack = getLocalTrack(tracks, MEDIA_TYPE.PRESENTER);\n\n    return presenterTrack ? MEDIA_TYPE.PRESENTER : MEDIA_TYPE.VIDEO;\n}\n\n/**\n * Returns track of specified media type for specified participant id.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @param {MEDIA_TYPE} mediaType - Media type.\n * @param {string} participantId - Participant ID.\n * @returns {(Track|undefined)}\n */\nexport function getTrackByMediaTypeAndParticipant(\n        tracks,\n        mediaType,\n        participantId) {\n    return tracks.find(\n        t => t.participantId === participantId && t.mediaType === mediaType\n    );\n}\n\n/**\n * Returns the track if any which corresponds to a specific instance\n * of JitsiLocalTrack or JitsiRemoteTrack.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} jitsiTrack - JitsiTrack instance.\n * @returns {(Track|undefined)}\n */\nexport function getTrackByJitsiTrack(tracks, jitsiTrack) {\n    return tracks.find(t => t.jitsiTrack === jitsiTrack);\n}\n\n/**\n * Returns tracks of specified media type.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @param {MEDIA_TYPE} mediaType - Media type.\n * @returns {Track[]}\n */\nexport function getTracksByMediaType(tracks, mediaType) {\n    return tracks.filter(t => t.mediaType === mediaType);\n}\n\n/**\n * Checks if the local video track in the given set of tracks is muted.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @returns {Track[]}\n */\nexport function isLocalVideoTrackMuted(tracks) {\n    const presenterTrack = getLocalTrack(tracks, MEDIA_TYPE.PRESENTER);\n    const videoTrack = getLocalTrack(tracks, MEDIA_TYPE.VIDEO);\n\n    // Make sure we check the mute status of only camera tracks, i.e.,\n    // presenter track when it exists, camera track when the presenter\n    // track doesn't exist.\n    if (presenterTrack) {\n        return isLocalTrackMuted(tracks, MEDIA_TYPE.PRESENTER);\n    } else if (videoTrack) {\n        return videoTrack.videoType === 'camera'\n            ? isLocalTrackMuted(tracks, MEDIA_TYPE.VIDEO) : true;\n    }\n\n    return true;\n}\n\n/**\n * Checks if the first local track in the given tracks set is muted.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @param {MEDIA_TYPE} mediaType - The media type of tracks to be checked.\n * @returns {boolean} True if local track is muted or false if the track is\n * unmuted or if there are no local tracks of the given media type in the given\n * set of tracks.\n */\nexport function isLocalTrackMuted(tracks, mediaType) {\n    const track = getLocalTrack(tracks, mediaType);\n\n    return !track || track.muted;\n}\n\n/**\n * Returns true if the remote track of the given media type and the given\n * participant is muted, false otherwise.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @param {MEDIA_TYPE} mediaType - The media type of tracks to be checked.\n * @param {*} participantId - Participant ID.\n * @returns {boolean}\n */\nexport function isRemoteTrackMuted(tracks, mediaType, participantId) {\n    const track = getTrackByMediaTypeAndParticipant(\n        tracks, mediaType, participantId);\n\n    return !track || track.muted;\n}\n\n/**\n * Returns whether or not the current environment needs a user interaction with\n * the page before any unmute can occur.\n *\n * @param {Object} state - The redux state.\n * @returns {boolean}\n */\nexport function isUserInteractionRequiredForUnmute(state) {\n    return browser.isUserInteractionRequiredForUnmute()\n        && window\n        && window.self !== window.top\n        && !state['features/base/user-interaction'].interacted;\n}\n\n/**\n * Mutes or unmutes a specific {@code JitsiLocalTrack}. If the muted state of\n * the specified {@code track} is already in accord with the specified\n * {@code muted} value, then does nothing.\n *\n * @param {JitsiLocalTrack} track - The {@code JitsiLocalTrack} to mute or\n * unmute.\n * @param {boolean} muted - If the specified {@code track} is to be muted, then\n * {@code true}; otherwise, {@code false}.\n * @returns {Promise}\n */\nexport function setTrackMuted(track, muted) {\n    muted = Boolean(muted); // eslint-disable-line no-param-reassign\n\n    if (track.isMuted() === muted) {\n        return Promise.resolve();\n    }\n\n    const f = muted ? 'mute' : 'unmute';\n\n    return track[f]().catch(error => {\n        // Track might be already disposed so ignore such an error.\n        if (error.name !== JitsiTrackErrors.TRACK_IS_DISPOSED) {\n            // FIXME Emit mute failed, so that the app can show error dialog.\n            logger.error(`set track ${f} failed`, error);\n        }\n    });\n}\n","// @flow\n\nimport { createScreenshotCaptureEffect } from '../../stream-effects/screenshot-capture';\nimport { getBlurEffect } from '../../blur';\n\nimport logger from './logger';\n\n/**\n * Loads the enabled stream effects.\n *\n * @param {Object} store - The Redux store.\n * @returns {Promsie} - A Promise which resolves when all effects are created.\n */\nexport default function loadEffects(store: Object): Promise<any> {\n    const state = store.getState();\n\n    const blurPromise = state['features/blur'].blurEnabled\n        ? getBlurEffect()\n            .catch(error => {\n                logger.error('Failed to obtain the blur effect instance with error: ', error);\n\n                return Promise.resolve();\n            })\n        : Promise.resolve();\n    const screenshotCapturePromise = state['features/screenshot-capture']?.capturesEnabled\n        ? createScreenshotCaptureEffect(state)\n            .catch(error => {\n                logger.error('Failed to obtain the screenshot capture effect effect instance with error: ', error);\n\n                return Promise.resolve();\n            })\n        : Promise.resolve();\n\n    return Promise.all([ blurPromise, screenshotCapturePromise ]);\n}\n","import {\n    createTrackMutedEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { JitsiTrackErrors, JitsiTrackEvents } from '../lib-jitsi-meet';\nimport { showErrorNotification, showNotification } from '../../notifications';\nimport {\n    CAMERA_FACING_MODE,\n    MEDIA_TYPE,\n    setAudioMuted,\n    setVideoMuted,\n    VIDEO_MUTISM_AUTHORITY\n} from '../media';\nimport { getLocalParticipant } from '../participants';\n\nimport {\n    SET_NO_SRC_DATA_NOTIFICATION_UID,\n    TOGGLE_SCREENSHARING,\n    TRACK_ADDED,\n    TRACK_CREATE_CANCELED,\n    TRACK_CREATE_ERROR,\n    TRACK_NO_DATA_FROM_SOURCE,\n    TRACK_REMOVED,\n    TRACK_UPDATED,\n    TRACK_WILL_CREATE\n} from './actionTypes';\nimport { createLocalTracksF, getLocalTrack, getLocalTracks, getTrackByJitsiTrack } from './functions';\nimport logger from './logger';\n\n/**\n * Requests the creating of the desired media type tracks. Desire is expressed\n * by base/media unless the function caller specifies desired media types\n * explicitly and thus override base/media. Dispatches a\n * {@code createLocalTracksA} action for the desired media types for which there\n * are no existing tracks yet.\n *\n * @returns {Function}\n */\nexport function createDesiredLocalTracks(...desiredTypes) {\n    return (dispatch, getState) => {\n        const state = getState();\n\n        if (desiredTypes.length === 0) {\n            const { audio, video } = state['features/base/media'];\n\n            audio.muted || desiredTypes.push(MEDIA_TYPE.AUDIO);\n\n            // XXX When the app is coming into the foreground from the\n            // background in order to handle a URL, it may realize the new\n            // background state soon after it has tried to create the local\n            // tracks requested by the URL. Ignore\n            // VIDEO_MUTISM_AUTHORITY.BACKGROUND and create the local video\n            // track if no other VIDEO_MUTISM_AUTHORITY has muted it. The local\n            // video track will be muted until the app realizes the new\n            // background state.\n\n            // eslint-disable-next-line no-bitwise\n            (video.muted & ~VIDEO_MUTISM_AUTHORITY.BACKGROUND)\n                || desiredTypes.push(MEDIA_TYPE.VIDEO);\n        }\n\n        const availableTypes\n            = getLocalTracks(\n                    state['features/base/tracks'],\n                    /* includePending */ true)\n                .map(t => t.mediaType);\n\n        // We need to create the desired tracks which are not already available.\n        const createTypes\n            = desiredTypes.filter(type => availableTypes.indexOf(type) === -1);\n\n        createTypes.length\n            && dispatch(createLocalTracksA({ devices: createTypes }));\n    };\n}\n\n/**\n * Request to start capturing local audio and/or video. By default, the user\n * facing camera will be selected.\n *\n * @param {Object} [options] - For info @see JitsiMeetJS.createLocalTracks.\n * @returns {Function}\n */\nexport function createLocalTracksA(options = {}) {\n    return (dispatch, getState) => {\n        const devices\n            = options.devices || [ MEDIA_TYPE.AUDIO, MEDIA_TYPE.VIDEO ];\n        const store = {\n            dispatch,\n            getState\n        };\n\n        // The following executes on React Native only at the time of this\n        // writing. The effort to port Web's createInitialLocalTracksAndConnect\n        // is significant and that's where the function createLocalTracksF got\n        // born. I started with the idea a porting so that we could inherit the\n        // ability to getUserMedia for audio only or video only if getUserMedia\n        // for audio and video fails. Eventually though, I realized that on\n        // mobile we do not have combined permission prompts implemented anyway\n        // (either because there are no such prompts or it does not make sense\n        // to implement them) and the right thing to do is to ask for each\n        // device separately.\n        for (const device of devices) {\n            if (getLocalTrack(\n                    getState()['features/base/tracks'],\n                    device,\n                    /* includePending */ true)) {\n                throw new Error(`Local track for ${device} already exists`);\n            }\n\n            const gumProcess\n                = createLocalTracksF(\n                    {\n                        cameraDeviceId: options.cameraDeviceId,\n                        devices: [ device ],\n                        facingMode:\n                            options.facingMode || CAMERA_FACING_MODE.USER,\n                        micDeviceId: options.micDeviceId\n                    },\n                    /* firePermissionPromptIsShownEvent */ false,\n                    store)\n                .then(\n                    localTracks => {\n                        // Because GUM is called for 1 device (which is actually\n                        // a media type 'audio', 'video', 'screen', etc.) we\n                        // should not get more than one JitsiTrack.\n                        if (localTracks.length !== 1) {\n                            throw new Error(\n                                `Expected exactly 1 track, but was given ${\n                                    localTracks.length} tracks for device: ${\n                                    device}.`);\n                        }\n\n                        if (gumProcess.canceled) {\n                            return _disposeTracks(localTracks)\n                                .then(() =>\n                                    dispatch(_trackCreateCanceled(device)));\n                        }\n\n                        return dispatch(trackAdded(localTracks[0]));\n                    },\n                    reason =>\n                        dispatch(\n                            gumProcess.canceled\n                                ? _trackCreateCanceled(device)\n                                : _onCreateLocalTracksRejected(\n                                    reason,\n                                    device)));\n\n            /**\n             * Cancels the {@code getUserMedia} process represented by this\n             * {@code Promise}.\n             *\n             * @returns {Promise} This {@code Promise} i.e. {@code gumProcess}.\n             */\n            gumProcess.cancel = () => {\n                gumProcess.canceled = true;\n\n                return gumProcess;\n            };\n\n            dispatch({\n                type: TRACK_WILL_CREATE,\n                track: {\n                    gumProcess,\n                    local: true,\n                    mediaType: device\n                }\n            });\n        }\n    };\n}\n\n/**\n * Calls JitsiLocalTrack#dispose() on all local tracks ignoring errors when\n * track is already disposed. After that signals tracks to be removed.\n *\n * @returns {Function}\n */\nexport function destroyLocalTracks() {\n    return (dispatch, getState) => {\n        // First wait until any getUserMedia in progress is settled and then get\n        // rid of all local tracks.\n        _cancelGUMProcesses(getState)\n            .then(() =>\n                dispatch(\n                    _disposeAndRemoveTracks(\n                        getState()['features/base/tracks']\n                            .filter(t => t.local)\n                            .map(t => t.jitsiTrack))));\n    };\n}\n\n/**\n * Signals that the passed JitsiLocalTrack has triggered a no data from source event.\n *\n * @param {JitsiLocalTrack} track - The track.\n * @returns {{\n*     type: TRACK_NO_DATA_FROM_SOURCE,\n*     track: Track\n* }}\n*/\nexport function noDataFromSource(track) {\n    return {\n        type: TRACK_NO_DATA_FROM_SOURCE,\n        track\n    };\n}\n\n/**\n * Displays a no data from source video error if needed.\n *\n * @param {JitsiLocalTrack} jitsiTrack - The track.\n * @returns {Function}\n */\nexport function showNoDataFromSourceVideoError(jitsiTrack) {\n    return (dispatch, getState) => {\n        let notificationInfo;\n\n        const track = getTrackByJitsiTrack(getState()['features/base/tracks'], jitsiTrack);\n\n        if (!track) {\n            return;\n        }\n\n        if (track.isReceivingData) {\n            notificationInfo = undefined;\n        } else {\n            const notificationAction = showErrorNotification({\n                descriptionKey: 'dialog.cameraNotSendingData',\n                titleKey: 'dialog.cameraNotSendingDataTitle'\n            });\n\n            dispatch(notificationAction);\n            notificationInfo = {\n                uid: notificationAction.uid\n            };\n        }\n        dispatch(trackNoDataFromSourceNotificationInfoChanged(jitsiTrack, notificationInfo));\n    };\n}\n\n/**\n * Signals that the local participant is ending screensharing or beginning the\n * screensharing flow.\n *\n * @returns {{\n *     type: TOGGLE_SCREENSHARING,\n * }}\n */\nexport function toggleScreensharing() {\n    return {\n        type: TOGGLE_SCREENSHARING\n    };\n}\n\n/**\n * Replaces one track with another for one renegotiation instead of invoking\n * two renegotiations with a separate removeTrack and addTrack. Disposes the\n * removed track as well.\n *\n * @param {JitsiLocalTrack|null} oldTrack - The track to dispose.\n * @param {JitsiLocalTrack|null} newTrack - The track to use instead.\n * @param {JitsiConference} [conference] - The conference from which to remove\n * and add the tracks. If one is not provided, the conference in the redux store\n * will be used.\n * @returns {Function}\n */\nexport function replaceLocalTrack(oldTrack, newTrack, conference) {\n    return (dispatch, getState) => {\n        conference\n\n            // eslint-disable-next-line no-param-reassign\n            || (conference = getState()['features/base/conference'].conference);\n\n        return conference.replaceTrack(oldTrack, newTrack)\n            .then(() => {\n                // We call dispose after doing the replace because dispose will\n                // try and do a new o/a after the track removes itself. Doing it\n                // after means the JitsiLocalTrack.conference is already\n                // cleared, so it won't try and do the o/a.\n                const disposePromise\n                    = oldTrack\n                        ? dispatch(_disposeAndRemoveTracks([ oldTrack ]))\n                        : Promise.resolve();\n\n                return disposePromise\n                    .then(() => {\n                        if (newTrack) {\n                            // The mute state of the new track should be\n                            // reflected in the app's mute state. For example,\n                            // if the app is currently muted and changing to a\n                            // new track that is not muted, the app's mute\n                            // state should be falsey. As such, emit a mute\n                            // event here to set up the app to reflect the\n                            // track's mute state. If this is not done, the\n                            // current mute state of the app will be reflected\n                            // on the track, not vice-versa.\n                            const setMuted\n                                = newTrack.isVideoTrack()\n                                    ? setVideoMuted\n                                    : setAudioMuted;\n                            const isMuted = newTrack.isMuted();\n\n                            sendAnalytics(createTrackMutedEvent(\n                                newTrack.getType(),\n                                'track.replaced',\n                                isMuted));\n                            logger.log(`Replace ${newTrack.getType()} track - ${\n                                isMuted ? 'muted' : 'unmuted'}`);\n\n                            return dispatch(setMuted(isMuted));\n                        }\n                    })\n                    .then(() => {\n                        if (newTrack) {\n                            return dispatch(_addTracks([ newTrack ]));\n                        }\n                    });\n            });\n    };\n}\n\n/**\n * Create an action for when a new track has been signaled to be added to the\n * conference.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} track - JitsiTrack instance.\n * @returns {{ type: TRACK_ADDED, track: Track }}\n */\nexport function trackAdded(track) {\n    return (dispatch, getState) => {\n        track.on(\n            JitsiTrackEvents.TRACK_MUTE_CHANGED,\n            () => dispatch(trackMutedChanged(track)));\n        track.on(\n            JitsiTrackEvents.TRACK_VIDEOTYPE_CHANGED,\n            type => dispatch(trackVideoTypeChanged(track, type)));\n\n        // participantId\n        const local = track.isLocal();\n        const mediaType = track.getType();\n        let isReceivingData, noDataFromSourceNotificationInfo, participantId;\n\n        if (local) {\n            // Reset the no data from src notification state when we change the track, as it's context is set\n            // on a per device basis.\n            dispatch(setNoSrcDataNotificationUid());\n            const participant = getLocalParticipant(getState);\n\n            if (participant) {\n                participantId = participant.id;\n            }\n\n            isReceivingData = track.isReceivingData();\n            track.on(JitsiTrackEvents.NO_DATA_FROM_SOURCE, () => dispatch(noDataFromSource({ jitsiTrack: track })));\n            if (!isReceivingData) {\n                if (mediaType === MEDIA_TYPE.AUDIO) {\n                    const notificationAction = showNotification({\n                        descriptionKey: 'dialog.micNotSendingData',\n                        titleKey: 'dialog.micNotSendingDataTitle'\n                    });\n\n                    dispatch(notificationAction);\n\n                    // Set the notification ID so that other parts of the application know that this was\n                    // displayed in the context of the current device.\n                    // I.E. The no-audio-signal notification shouldn't be displayed if this was already shown.\n                    dispatch(setNoSrcDataNotificationUid(notificationAction.uid));\n\n                    noDataFromSourceNotificationInfo = { uid: notificationAction.uid };\n                } else {\n                    const timeout = setTimeout(() => dispatch(showNoDataFromSourceVideoError(track)), 5000);\n\n                    noDataFromSourceNotificationInfo = { timeout };\n                }\n\n            }\n        } else {\n            participantId = track.getParticipantId();\n            isReceivingData = true;\n        }\n\n        return dispatch({\n            type: TRACK_ADDED,\n            track: {\n                jitsiTrack: track,\n                isReceivingData,\n                local,\n                mediaType,\n                mirror: _shouldMirror(track),\n                muted: track.isMuted(),\n                noDataFromSourceNotificationInfo,\n                participantId,\n                videoStarted: false,\n                videoType: track.videoType\n            }\n        });\n    };\n}\n\n/**\n * Create an action for when a track's muted state has been signaled to be\n * changed.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} track - JitsiTrack instance.\n * @returns {{\n *     type: TRACK_UPDATED,\n *     track: Track\n * }}\n */\nexport function trackMutedChanged(track) {\n    return {\n        type: TRACK_UPDATED,\n        track: {\n            jitsiTrack: track,\n            muted: track.isMuted()\n        }\n    };\n}\n\n/**\n * Create an action for when a track's no data from source notification information changes.\n *\n * @param {JitsiLocalTrack} track - JitsiTrack instance.\n * @param {Object} noDataFromSourceNotificationInfo - Information about no data from source notification.\n * @returns {{\n *     type: TRACK_UPDATED,\n *     track: Track\n * }}\n */\nexport function trackNoDataFromSourceNotificationInfoChanged(track, noDataFromSourceNotificationInfo) {\n    return {\n        type: TRACK_UPDATED,\n        track: {\n            jitsiTrack: track,\n            noDataFromSourceNotificationInfo\n        }\n    };\n}\n\n/**\n * Create an action for when a track has been signaled for removal from the\n * conference.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} track - JitsiTrack instance.\n * @returns {{\n *     type: TRACK_REMOVED,\n *     track: Track\n * }}\n */\nexport function trackRemoved(track) {\n    track.removeAllListeners(JitsiTrackEvents.TRACK_MUTE_CHANGED);\n    track.removeAllListeners(JitsiTrackEvents.TRACK_VIDEOTYPE_CHANGED);\n    track.removeAllListeners(JitsiTrackEvents.NO_DATA_FROM_SOURCE);\n\n    return {\n        type: TRACK_REMOVED,\n        track: {\n            jitsiTrack: track\n        }\n    };\n}\n\n/**\n * Signal that track's video started to play.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} track - JitsiTrack instance.\n * @returns {{\n *     type: TRACK_UPDATED,\n *     track: Track\n * }}\n */\nexport function trackVideoStarted(track) {\n    return {\n        type: TRACK_UPDATED,\n        track: {\n            jitsiTrack: track,\n            videoStarted: true\n        }\n    };\n}\n\n/**\n * Create an action for when participant video type changes.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} track - JitsiTrack instance.\n * @param {VIDEO_TYPE|undefined} videoType - Video type.\n * @returns {{\n *     type: TRACK_UPDATED,\n *     track: Track\n * }}\n */\nexport function trackVideoTypeChanged(track, videoType) {\n    return {\n        type: TRACK_UPDATED,\n        track: {\n            jitsiTrack: track,\n            videoType\n        }\n    };\n}\n\n/**\n * Signals passed tracks to be added.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)[]} tracks - List of tracks.\n * @private\n * @returns {Function}\n */\nfunction _addTracks(tracks) {\n    return dispatch => Promise.all(tracks.map(t => dispatch(trackAdded(t))));\n}\n\n/**\n * Cancels and waits for any {@code getUserMedia} process/currently in progress\n * to complete/settle.\n *\n * @param {Function} getState - The redux store {@code getState} function used\n * to obtain the state.\n * @private\n * @returns {Promise} - A {@code Promise} resolved once all\n * {@code gumProcess.cancel()} {@code Promise}s are settled because all we care\n * about here is to be sure that the {@code getUserMedia} callbacks have\n * completed (i.e. Returned from the native side).\n */\nfunction _cancelGUMProcesses(getState) {\n    const logError\n        = error =>\n            logger.error('gumProcess.cancel failed', JSON.stringify(error));\n\n    return Promise.all(\n        getState()['features/base/tracks']\n            .filter(t => t.local)\n            .map(({ gumProcess }) =>\n                gumProcess && gumProcess.cancel().catch(logError)));\n}\n\n/**\n * Disposes passed tracks and signals them to be removed.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)[]} tracks - List of tracks.\n * @protected\n * @returns {Function}\n */\nexport function _disposeAndRemoveTracks(tracks) {\n    return dispatch =>\n        _disposeTracks(tracks)\n            .then(() =>\n                Promise.all(tracks.map(t => dispatch(trackRemoved(t)))));\n}\n\n/**\n * Disposes passed tracks.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)[]} tracks - List of tracks.\n * @private\n * @returns {Promise} - A Promise resolved once {@link JitsiTrack.dispose()} is\n * done for every track from the list.\n */\nfunction _disposeTracks(tracks) {\n    return Promise.all(\n        tracks.map(t =>\n            t.dispose()\n                .catch(err => {\n                    // Track might be already disposed so ignore such an error.\n                    // Of course, re-throw any other error(s).\n                    if (err.name !== JitsiTrackErrors.TRACK_IS_DISPOSED) {\n                        throw err;\n                    }\n                })));\n}\n\n/**\n * Implements the {@code Promise} rejection handler of\n * {@code createLocalTracksA} and {@code createLocalTracksF}.\n *\n * @param {Object} reason - The {@code Promise} rejection reason.\n * @param {string} device - The device/{@code MEDIA_TYPE} associated with the\n * rejection.\n * @private\n * @returns {Function}\n */\nfunction _onCreateLocalTracksRejected({ gum }, device) {\n    return dispatch => {\n        // If permissions are not allowed, alert the user.\n        if (gum) {\n            const { error } = gum;\n\n            if (error) {\n                dispatch({\n                    type: TRACK_CREATE_ERROR,\n                    permissionDenied: error.name === 'SecurityError',\n                    trackType: device\n                });\n            }\n        }\n    };\n}\n\n/**\n * Returns true if the provided {@code JitsiTrack} should be rendered as a\n * mirror.\n *\n * We only want to show a video in mirrored mode when:\n * 1) The video source is local, and not remote.\n * 2) The video source is a camera, not a desktop (capture).\n * 3) The camera is capturing the user, not the environment.\n *\n * TODO Similar functionality is part of lib-jitsi-meet. This function should be\n * removed after https://github.com/jitsi/lib-jitsi-meet/pull/187 is merged.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} track - JitsiTrack instance.\n * @private\n * @returns {boolean}\n */\nfunction _shouldMirror(track) {\n    return (\n        track\n            && track.isLocal()\n            && track.isVideoTrack()\n\n            // XXX The type of the return value of JitsiLocalTrack's\n            // getCameraFacingMode happens to be named CAMERA_FACING_MODE as\n            // well, it's defined by lib-jitsi-meet. Note though that the type\n            // of the value on the right side of the equality check is defined\n            // by jitsi-meet. The type definitions are surely compatible today\n            // but that may not be the case tomorrow.\n            && track.getCameraFacingMode() === CAMERA_FACING_MODE.USER);\n}\n\n/**\n * Signals that track create operation for given media track has been canceled.\n * Will clean up local track stub from the redux state which holds the\n * {@code gumProcess} reference.\n *\n * @param {MEDIA_TYPE} mediaType - The type of the media for which the track was\n * being created.\n * @private\n * @returns {{\n *     type,\n *     trackType: MEDIA_TYPE\n * }}\n */\nfunction _trackCreateCanceled(mediaType) {\n    return {\n        type: TRACK_CREATE_CANCELED,\n        trackType: mediaType\n    };\n}\n\n/**\n * Sets UID of the displayed no data from source notification. Used to track\n * if the notification was previously displayed in this context.\n *\n * @param {number} uid - Notification UID.\n * @returns {{\n    *     type: SET_NO_AUDIO_SIGNAL_UID,\n    *     uid: number\n    * }}\n    */\nexport function setNoSrcDataNotificationUid(uid) {\n    return {\n        type: SET_NO_SRC_DATA_NOTIFICATION_UID,\n        uid\n    };\n}\n","// @flow\n\nimport {\n    CAMERA_FACING_MODE,\n    MEDIA_TYPE,\n    SET_AUDIO_MUTED,\n    SET_CAMERA_FACING_MODE,\n    SET_VIDEO_MUTED,\n    VIDEO_MUTISM_AUTHORITY,\n    TOGGLE_CAMERA_FACING_MODE,\n    toggleCameraFacingMode\n} from '../media';\nimport { hideNotification } from '../../notifications';\nimport { MiddlewareRegistry } from '../redux';\nimport UIEvents from '../../../../service/UI/UIEvents';\n\nimport {\n    createLocalTracksA,\n    showNoDataFromSourceVideoError,\n    trackNoDataFromSourceNotificationInfoChanged\n} from './actions';\nimport {\n    TOGGLE_SCREENSHARING,\n    TRACK_NO_DATA_FROM_SOURCE,\n    TRACK_REMOVED,\n    TRACK_UPDATED\n} from './actionTypes';\nimport {\n    getLocalTrack,\n    getTrackByJitsiTrack,\n    isUserInteractionRequiredForUnmute,\n    setTrackMuted\n} from './functions';\n\ndeclare var APP: Object;\n\n/**\n * Middleware that captures LIB_DID_DISPOSE and LIB_DID_INIT actions and,\n * respectively, creates/destroys local media tracks. Also listens to\n * media-related actions and performs corresponding operations with tracks.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case TRACK_NO_DATA_FROM_SOURCE: {\n        const result = next(action);\n\n        _handleNoDataFromSourceErrors(store, action);\n\n        return result;\n    }\n    case TRACK_REMOVED: {\n        _removeNoDataFromSourceNotification(store, action.track);\n        break;\n    }\n    case SET_AUDIO_MUTED:\n        if (!action.muted\n                && isUserInteractionRequiredForUnmute(store.getState())) {\n            return;\n        }\n\n        _setMuted(store, action, MEDIA_TYPE.AUDIO);\n        break;\n\n    case SET_CAMERA_FACING_MODE: {\n        // XXX The camera facing mode of a MediaStreamTrack can be specified\n        // only at initialization time and then it can only be toggled. So in\n        // order to set the camera facing mode, one may destroy the track and\n        // then initialize a new instance with the new camera facing mode. But\n        // that is inefficient on mobile at least so the following relies on the\n        // fact that there are 2 camera facing modes and merely toggles between\n        // them to (hopefully) get the camera in the specified state.\n        const localTrack = _getLocalTrack(store, MEDIA_TYPE.VIDEO);\n        let jitsiTrack;\n\n        if (localTrack\n                && (jitsiTrack = localTrack.jitsiTrack)\n                && jitsiTrack.getCameraFacingMode()\n                    !== action.cameraFacingMode) {\n            store.dispatch(toggleCameraFacingMode());\n        }\n        break;\n    }\n\n    case SET_VIDEO_MUTED:\n        if (!action.muted\n                && isUserInteractionRequiredForUnmute(store.getState())) {\n            return;\n        }\n\n        _setMuted(store, action, action.mediaType);\n        break;\n\n    case TOGGLE_CAMERA_FACING_MODE: {\n        const localTrack = _getLocalTrack(store, MEDIA_TYPE.VIDEO);\n        let jitsiTrack;\n\n        if (localTrack && (jitsiTrack = localTrack.jitsiTrack)) {\n            // XXX MediaStreamTrack._switchCamera is a custom function\n            // implemented in react-native-webrtc for video which switches\n            // between the cameras via a native WebRTC library implementation\n            // without making any changes to the track.\n            jitsiTrack._switchCamera();\n\n            // Don't mirror the video of the back/environment-facing camera.\n            const mirror\n                = jitsiTrack.getCameraFacingMode() === CAMERA_FACING_MODE.USER;\n\n            store.dispatch({\n                type: TRACK_UPDATED,\n                track: {\n                    jitsiTrack,\n                    mirror\n                }\n            });\n        }\n        break;\n    }\n\n    case TOGGLE_SCREENSHARING:\n        if (typeof APP === 'object') {\n            APP.UI.emitEvent(UIEvents.TOGGLE_SCREENSHARING);\n        }\n        break;\n\n    case TRACK_UPDATED:\n        // TODO Remove the following calls to APP.UI once components interested\n        // in track mute changes are moved into React and/or redux.\n        if (typeof APP !== 'undefined') {\n            const result = next(action);\n\n            const { jitsiTrack } = action.track;\n            const muted = jitsiTrack.isMuted();\n            const participantID = jitsiTrack.getParticipantId();\n            const isVideoTrack = jitsiTrack.type !== MEDIA_TYPE.AUDIO;\n\n            if (isVideoTrack) {\n                if (jitsiTrack.type === MEDIA_TYPE.PRESENTER) {\n                    APP.conference.mutePresenter(muted);\n                }\n\n                // Make sure we change the video mute state only for camera tracks.\n                if (jitsiTrack.isLocal() && jitsiTrack.videoType !== 'desktop') {\n                    APP.conference.setVideoMuteStatus(muted);\n                } else {\n                    APP.UI.setVideoMuted(participantID, muted);\n                }\n                APP.UI.onPeerVideoTypeChanged(participantID, jitsiTrack.videoType);\n            } else if (jitsiTrack.isLocal()) {\n                APP.conference.setAudioMuteStatus(muted);\n            } else {\n                APP.UI.setAudioMuted(participantID, muted);\n            }\n\n            return result;\n        }\n\n    }\n\n    return next(action);\n});\n\n/**\n * Handles no data from source errors.\n *\n * @param {Store} store - The redux store in which the specified action is\n * dispatched.\n * @param {Action} action - The redux action dispatched in the specified store.\n * @private\n * @returns {void}\n */\nfunction _handleNoDataFromSourceErrors(store, action) {\n    const { getState, dispatch } = store;\n\n    const track = getTrackByJitsiTrack(getState()['features/base/tracks'], action.track.jitsiTrack);\n\n    if (!track || !track.local) {\n        return;\n    }\n\n    const { jitsiTrack } = track;\n\n    if (track.mediaType === MEDIA_TYPE.AUDIO && track.isReceivingData) {\n        _removeNoDataFromSourceNotification(store, action.track);\n    }\n\n    if (track.mediaType === MEDIA_TYPE.VIDEO) {\n        const { noDataFromSourceNotificationInfo = {} } = track;\n\n        if (track.isReceivingData) {\n            if (noDataFromSourceNotificationInfo.timeout) {\n                clearTimeout(noDataFromSourceNotificationInfo.timeout);\n                dispatch(trackNoDataFromSourceNotificationInfoChanged(jitsiTrack, undefined));\n            }\n\n            // try to remove the notification if there is one.\n            _removeNoDataFromSourceNotification(store, action.track);\n        } else {\n            if (noDataFromSourceNotificationInfo.timeout) {\n                return;\n            }\n\n            const timeout = setTimeout(() => dispatch(showNoDataFromSourceVideoError(jitsiTrack)), 5000);\n\n            dispatch(trackNoDataFromSourceNotificationInfoChanged(jitsiTrack, { timeout }));\n        }\n    }\n}\n\n/**\n * Gets the local track associated with a specific {@code MEDIA_TYPE} in a\n * specific redux store.\n *\n * @param {Store} store - The redux store from which the local track associated\n * with the specified {@code mediaType} is to be retrieved.\n * @param {MEDIA_TYPE} mediaType - The {@code MEDIA_TYPE} of the local track to\n * be retrieved from the specified {@code store}.\n * @param {boolean} [includePending] - Indicates whether a local track is to be\n * returned if it is still pending. A local track is pending if\n * {@code getUserMedia} is still executing to create it and, consequently, its\n * {@code jitsiTrack} property is {@code undefined}. By default a pending local\n * track is not returned.\n * @private\n * @returns {Track} The local {@code Track} associated with the specified\n * {@code mediaType} in the specified {@code store}.\n */\nfunction _getLocalTrack(\n        { getState }: { getState: Function },\n        mediaType: MEDIA_TYPE,\n        includePending: boolean = false) {\n    return (\n        getLocalTrack(\n            getState()['features/base/tracks'],\n            mediaType,\n            includePending));\n}\n\n/**\n * Removes the no data from source notification associated with the JitsiTrack if displayed.\n *\n * @param {Store} store - The redux store.\n * @param {Track} track - The redux action dispatched in the specified store.\n * @returns {void}\n */\nfunction _removeNoDataFromSourceNotification({ getState, dispatch }, track) {\n    const t = getTrackByJitsiTrack(getState()['features/base/tracks'], track.jitsiTrack);\n    const { jitsiTrack, noDataFromSourceNotificationInfo = {} } = t || {};\n\n    if (noDataFromSourceNotificationInfo && noDataFromSourceNotificationInfo.uid) {\n        dispatch(hideNotification(noDataFromSourceNotificationInfo.uid));\n        dispatch(trackNoDataFromSourceNotificationInfoChanged(jitsiTrack, undefined));\n    }\n}\n\n/**\n * Mutes or unmutes a local track with a specific media type.\n *\n * @param {Store} store - The redux store in which the specified action is\n * dispatched.\n * @param {Action} action - The redux action dispatched in the specified store.\n * @param {MEDIA_TYPE} mediaType - The {@link MEDIA_TYPE} of the local track\n * which is being muted or unmuted.\n * @private\n * @returns {void}\n */\nfunction _setMuted(store, { ensureTrack, authority, muted }, mediaType: MEDIA_TYPE) {\n    const localTrack\n        = _getLocalTrack(store, mediaType, /* includePending */ true);\n\n    if (localTrack) {\n        // The `jitsiTrack` property will have a value only for a localTrack for\n        // which `getUserMedia` has already completed. If there's no\n        // `jitsiTrack`, then the `muted` state will be applied once the\n        // `jitsiTrack` is created.\n        const { jitsiTrack } = localTrack;\n        const isAudioOnly = authority === VIDEO_MUTISM_AUTHORITY.AUDIO_ONLY;\n\n        // screenshare cannot be muted or unmuted using the video mute button\n        // anymore, unless it is muted by audioOnly.\n        jitsiTrack && (jitsiTrack.videoType !== 'desktop' || isAudioOnly)\n            && setTrackMuted(jitsiTrack, muted);\n    } else if (!muted && ensureTrack && typeof APP === 'undefined') {\n        // FIXME: This only runs on mobile now because web has its own way of\n        // creating local tracks. Adjust the check once they are unified.\n        store.dispatch(createLocalTracksA({ devices: [ mediaType ] }));\n    }\n}\n","import { PARTICIPANT_ID_CHANGED } from '../participants';\nimport { ReducerRegistry, set } from '../redux';\n\nimport {\n    SET_NO_SRC_DATA_NOTIFICATION_UID,\n    TRACK_ADDED,\n    TRACK_CREATE_CANCELED,\n    TRACK_CREATE_ERROR,\n    TRACK_NO_DATA_FROM_SOURCE,\n    TRACK_REMOVED,\n    TRACK_UPDATED,\n    TRACK_WILL_CREATE\n} from './actionTypes';\n\n/**\n * @typedef {Object} Track\n * @property {(JitsiLocalTrack|JitsiRemoteTrack)} [jitsiTrack] - The associated\n * {@code JitsiTrack} instance. Optional for local tracks if those are still\n * being created (i.e. {@code getUserMedia} is still in progress).\n * @property {Promise} [gumProcess] - If a local track is still being created,\n * it will have no {@code JitsiTrack}, but a {@code gumProcess} set to a\n * {@code Promise} with and extra {@code cancel()}.\n * @property {boolean} local=false - If the track is local.\n * @property {MEDIA_TYPE} mediaType=false - The media type of the track.\n * @property {boolean} mirror=false - The indicator which determines whether the\n * display/rendering of the track should be mirrored. It only makes sense in the\n * context of video (at least at the time of this writing).\n * @property {boolean} muted=false - If the track is muted.\n * @property {(string|undefined)} participantId - The ID of the participant whom\n * the track belongs to.\n * @property {boolean} videoStarted=false - If the video track has already\n * started to play.\n * @property {(VIDEO_TYPE|undefined)} videoType - The type of video track if\n * any.\n */\n\n/**\n * Reducer function for a single track.\n *\n * @param {Track|undefined} state - Track to be modified.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @param {string} action.newValue - New participant ID value (in this\n * particular case).\n * @param {string} action.oldValue - Old participant ID value (in this\n * particular case).\n * @param {Track} action.track - Information about track to be changed.\n * @param {Participant} action.participant - Information about participant.\n * @returns {Track|undefined}\n */\nfunction track(state, action) {\n    switch (action.type) {\n    case PARTICIPANT_ID_CHANGED:\n        if (state.participantId === action.oldValue) {\n            return {\n                ...state,\n                participantId: action.newValue\n            };\n        }\n        break;\n\n    case TRACK_UPDATED: {\n        const t = action.track;\n\n        if (state.jitsiTrack === t.jitsiTrack) {\n            // Make sure that there's an actual update in order to reduce the\n            // risk of unnecessary React Component renders.\n            for (const p in t) {\n                if (state[p] !== t[p]) {\n                    // There's an actual update.\n                    return {\n                        ...state,\n                        ...t\n                    };\n                }\n            }\n        }\n        break;\n    }\n    case TRACK_NO_DATA_FROM_SOURCE: {\n        const t = action.track;\n\n        if (state.jitsiTrack === t.jitsiTrack) {\n            const isReceivingData = t.jitsiTrack.isReceivingData();\n\n            if (state.isReceivingData !== isReceivingData) {\n                return {\n                    ...state,\n                    isReceivingData\n                };\n            }\n        }\n        break;\n    }\n    }\n\n    return state;\n}\n\n/**\n * Listen for actions that mutate (e.g. add, remove) local and remote tracks.\n */\nReducerRegistry.register('features/base/tracks', (state = [], action) => {\n    switch (action.type) {\n    case PARTICIPANT_ID_CHANGED:\n    case TRACK_NO_DATA_FROM_SOURCE:\n    case TRACK_UPDATED:\n        return state.map(t => track(t, action));\n\n    case TRACK_ADDED: {\n        let withoutTrackStub = state;\n\n        if (action.track.local) {\n            withoutTrackStub\n                = state.filter(\n                    t => !t.local || t.mediaType !== action.track.mediaType);\n        }\n\n        return [ ...withoutTrackStub, action.track ];\n    }\n\n    case TRACK_CREATE_CANCELED:\n    case TRACK_CREATE_ERROR: {\n        return state.filter(t => !t.local || t.mediaType !== action.trackType);\n    }\n\n    case TRACK_REMOVED:\n        return state.filter(t => t.jitsiTrack !== action.track.jitsiTrack);\n\n    case TRACK_WILL_CREATE:\n        return [ ...state, action.track ];\n\n    default:\n        return state;\n    }\n});\n\n/**\n * Listen for actions that mutate the no-src-data state, like the current notification id\n */\nReducerRegistry.register('features/base/no-src-data', (state = {}, action) => {\n    switch (action.type) {\n    case SET_NO_SRC_DATA_NOTIFICATION_UID:\n        return set(state, 'noSrcDataNotificationUid', action.uid);\n\n    default:\n        return state;\n    }\n});\n\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","// @flow\n\nimport _ from 'lodash';\nimport Logger, { getLogger as _getLogger } from 'jitsi-meet-logger';\n\nimport LogTransport from './LogTransport';\n\n/**\n * Options for building the logger. We disable the callee info on RN because it's\n * almost always empty anyway.\n */\nconst DEFAULT_OPTS = {};\nconst DEFAULT_RN_OPTS = { disableCallerInfo: true };\n\n/**\n * Gets a logger for the given id.\n *\n * @param {string} id - Name for the logger.\n * @returns {Object} - The logger object.\n */\nexport function getLogger(id: string) {\n    const opts = navigator.product === 'ReactNative' ? DEFAULT_RN_OPTS : DEFAULT_OPTS;\n\n    return _getLogger(id, undefined, opts);\n}\n\n/**\n * Initializes native logging. This operations must be done as early as possible.\n */\nexport const _initLogging = _.once(() => {\n    if (navigator.product !== 'ReactNative') {\n        return;\n    }\n\n    // Lazy load it to avoid cycles in early web bootstrap code.\n    const { default: JitsiMeetJS } = require('../lib-jitsi-meet/_');\n\n    Logger.setGlobalOptions(DEFAULT_RN_OPTS);\n    JitsiMeetJS.setGlobalLogOptions(DEFAULT_RN_OPTS);\n    Logger.removeGlobalTransport(console);\n    JitsiMeetJS.removeGlobalLogTransport(console);\n    Logger.addGlobalTransport(LogTransport);\n    JitsiMeetJS.addGlobalLogTransport(LogTransport);\n});\n","export * from './components';\nexport { default as Platform } from './Platform';\nexport * from './Types';\n","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import * as colors from './colors';\nimport themed from './utils/themed'; // Cards on a board\n\nexport var e100 = themed({\n  light: \"box-shadow: 0 1px 1px \".concat(colors.N50A, \", 0 0 1px 0 \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 1px 1px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Inline dialogs\n\nexport var e200 = themed({\n  light: \"box-shadow: 0 4px 8px -2px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 4px 8px -2px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Modals\n\nexport var e300 = themed({\n  light: \"box-shadow: 0 8px 16px -4px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 8px 16px -4px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Panels\n\nexport var e400 = themed({\n  light: \"box-shadow: 0 12px 24px -6px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 12px 24px -6px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Flag messages (notifications)\n\nexport var e500 = themed({\n  light: \"box-shadow: 0 20px 32px -8px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 20px 32px -8px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n});","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport { gridSize, fontSize } from './index';\n\nvar baseHeading = function baseHeading(size, lineHeight) {\n  return \"\\n  font-size: \".concat(size / fontSize(), \"em;\\n  font-style: inherit;\\n  line-height: \").concat(lineHeight / size, \";\\n\");\n};\n\nexport var h900 = function h900() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(35, 40), colors.heading, gridSize() * 6.5);\n};\nexport var h800 = function h800() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(29, 32), colors.heading, gridSize() * 5);\n};\nexport var h700 = function h700() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(24, 28), colors.heading, gridSize() * 5);\n};\nexport var h600 = function h600() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  margin-top: \", \"px;\\n\"], baseHeading(20, 24), colors.heading, gridSize() * 3.5);\n};\nexport var h500 = function h500() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.006em;\\n  margin-top: \", \"px;\\n\"], baseHeading(16, 20), colors.heading, gridSize() * 3);\n};\nexport var h400 = function h400() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.003em;\\n  margin-top: \", \"px;\\n\"], baseHeading(14, 16), colors.heading, gridSize() * 2);\n};\nexport var h300 = function h300() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n  text-transform: uppercase;\\n\"], baseHeading(12, 16), colors.heading, gridSize() * 2.5);\n};\nexport var h200 = function h200() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n\"], baseHeading(12, 16), colors.subtleHeading, gridSize() * 2);\n};\nexport var h100 = function h100() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 700;\\n  margin-top: \", \"px;\\n\"], baseHeading(11, 16), colors.subtleHeading, gridSize() * 2);\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nexport default (function (_ref) {\n  var children = _ref.children,\n      props = _ref.props,\n      theme = _ref.theme;\n  var appearance = _typeof(props) === 'object' ? 'default' : props;\n  var merged = _typeof(props) === 'object' ? _objectSpread({}, props) : {};\n  Object.keys(theme).forEach(function (key) {\n    if (!(key in merged)) {\n      merged[key] = theme[key]({\n        appearance: appearance\n      });\n    }\n  });\n  return children(merged);\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport * as colors from '../colors';\nimport { createTheme } from '../utils/createTheme';\n\nvar orTextColor = function orTextColor(preferred) {\n  return function (p) {\n    return p[preferred] || p.textColor;\n  };\n};\n\nvar Div = styled.div.withConfig({\n  displayName: \"Reset__Div\",\n  componentId: \"sc-15i6ali-0\"\n})([\"\\n  \", \";\\n\"], function (p) {\n  return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n\\n    a {\\n      color: \", \";\\n    }\\n    a:hover {\\n      color: \", \";\\n    }\\n    a:active {\\n      color: \", \";\\n    }\\n    a:focus {\\n      outline-color: \", \";\\n    }\\n    h1,\\n    h2,\\n    h3,\\n    h4,\\n    h5 {\\n      color: \", \";\\n    }\\n    h6 {\\n      color: \", \";\\n    }\\n    small {\\n      color: \", \";\\n    }\\n  \"], p.backgroundColor, p.textColor, orTextColor('linkColor'), orTextColor('linkColorHover'), orTextColor('linkColorActive'), orTextColor('linkColorOutline'), orTextColor('headingColor'), orTextColor('subtleHeadingColor'), orTextColor('subtleTextColor'));\n});\nexport var ResetTheme = createTheme(function () {\n  return {\n    backgroundColor: colors.N0,\n    linkColor: colors.B400,\n    linkColorHover: colors.B300,\n    linkColorActive: colors.B500,\n    linkColorOutline: colors.B100,\n    headingColor: colors.N800,\n    subtleHeadingColor: colors.N200,\n    subtleTextColor: colors.N200,\n    textColor: colors.N900\n  };\n});\nexport function Reset(props) {\n  return React.createElement(ResetTheme.Provider, {\n    value: props.theme\n  }, React.createElement(ResetTheme.Consumer, null, function (tokens) {\n    return React.createElement(Div, _extends({}, _objectSpread({}, tokens, {\n      mode: undefined\n    }), props), props.children);\n  }));\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React from 'react';\nimport Theme from './components/Theme'; // Pre-executes the theme and passes it as a prop to the supplied component.\n// This is useful for ensuring that the current theme is accessible as props\n// in styled-components.\n\nexport function withTheme(InnerComponent) {\n  return function ComponentWithTheme(props) {\n    return React.createElement(Theme.Consumer, null, function (tokens) {\n      return React.createElement(InnerComponent, _extends({}, props, {\n        theme: tokens\n      }));\n    });\n  };\n}","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","/* @flow */\n\nimport { getCurrentConference } from '../base/conference';\nimport {\n    PARTICIPANT_JOINED,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_ROLE,\n    PARTICIPANT_UPDATED,\n    getParticipantById,\n    getParticipantDisplayName\n} from '../base/participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\n\nimport {\n    clearNotifications,\n    showNotification,\n    showParticipantJoinedNotification\n} from './actions';\nimport { NOTIFICATION_TIMEOUT } from './constants';\nimport { joinLeaveNotificationsDisabled } from './functions';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Middleware that captures actions to display notifications.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case PARTICIPANT_JOINED: {\n        const result = next(action);\n        const { participant: p } = action;\n        const { dispatch, getState } = store;\n\n        if (!p.local && !joinLeaveNotificationsDisabled()) {\n            dispatch(showParticipantJoinedNotification(\n                getParticipantDisplayName(getState, p.id)\n            ));\n        }\n\n        if (typeof interfaceConfig === 'object'\n                && !interfaceConfig.DISABLE_FOCUS_INDICATOR && p.role === PARTICIPANT_ROLE.MODERATOR) {\n            // Do not show the notification for mobile and also when the focus indicator is disabled.\n            const displayName = getParticipantDisplayName(getState, p.id);\n\n            dispatch(showNotification({\n                descriptionArguments: { to: displayName || '$t(notify.somebody)' },\n                descriptionKey: 'notify.grantedTo',\n                titleKey: 'notify.somebody',\n                title: displayName\n            },\n            NOTIFICATION_TIMEOUT));\n        }\n\n        return result;\n    }\n    case PARTICIPANT_LEFT: {\n        if (!joinLeaveNotificationsDisabled()) {\n            const participant = getParticipantById(\n                store.getState(),\n                action.participant.id\n            );\n\n            if (typeof interfaceConfig === 'object'\n                && participant\n                && !participant.local) {\n                store.dispatch(showNotification({\n                    descriptionKey: 'notify.disconnected',\n                    titleKey: 'notify.somebody',\n                    title: participant.name\n                }, NOTIFICATION_TIMEOUT));\n            }\n        }\n\n        return next(action);\n    }\n    case PARTICIPANT_UPDATED: {\n        if (typeof interfaceConfig === 'undefined' || interfaceConfig.DISABLE_FOCUS_INDICATOR) {\n            // Do not show the notification for mobile and also when the focus indicator is disabled.\n            return next(action);\n        }\n\n        const { id, role } = action.participant;\n        const state = store.getState();\n        const oldParticipant = getParticipantById(state, id);\n        const oldRole = oldParticipant?.role;\n\n        if (oldRole && oldRole !== role && role === PARTICIPANT_ROLE.MODERATOR) {\n            const displayName = getParticipantDisplayName(state, id);\n\n            store.dispatch(showNotification({\n                descriptionArguments: { to: displayName || '$t(notify.somebody)' },\n                descriptionKey: 'notify.grantedTo',\n                titleKey: 'notify.somebody',\n                title: displayName\n            },\n            NOTIFICATION_TIMEOUT));\n        }\n\n        return next(action);\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * StateListenerRegistry provides a reliable way to detect the leaving of a\n * conference, where we need to clean up the notifications.\n */\nStateListenerRegistry.register(\n    /* selector */ state => getCurrentConference(state),\n    /* listener */ (conference, { dispatch }) => {\n        if (!conference) {\n            dispatch(clearNotifications());\n        }\n    }\n);\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    CLEAR_NOTIFICATIONS,\n    HIDE_NOTIFICATION,\n    SET_NOTIFICATIONS_ENABLED,\n    SHOW_NOTIFICATION\n} from './actionTypes';\nimport { NOTIFICATION_TYPE_PRIORITIES } from './constants';\n\n/**\n * The initial state of the feature notifications.\n *\n * @type {array}\n */\nconst DEFAULT_STATE = {\n    enabled: true,\n    notifications: []\n};\n\n/**\n * Reduces redux actions which affect the display of notifications.\n *\n * @param {Object} state - The current redux state.\n * @param {Object} action - The redux action to reduce.\n * @returns {Object} The next redux state which is the result of reducing the\n * specified {@code action}.\n */\nReducerRegistry.register('features/notifications',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case CLEAR_NOTIFICATIONS:\n            return {\n                ...state,\n                notifications: []\n            };\n        case HIDE_NOTIFICATION:\n            return {\n                ...state,\n                notifications: state.notifications.filter(\n                    notification => notification.uid !== action.uid)\n            };\n\n        case SET_NOTIFICATIONS_ENABLED:\n            return {\n                ...state,\n                enabled: action.enabled\n            };\n\n        case SHOW_NOTIFICATION:\n            return {\n                ...state,\n                notifications:\n                    _insertNotificationByPriority(state.notifications, {\n                        component: action.component,\n                        props: action.props,\n                        timeout: action.timeout,\n                        uid: action.uid\n                    })\n            };\n        }\n\n        return state;\n    });\n\n/**\n * Creates a new notification queue with the passed in notification placed at\n * the end of other notifications with higher or the same priority.\n *\n * @param {Object[]} notifications - The queue of notifications to be displayed.\n * @param {Object} notification - The new notification to add to the queue.\n * @private\n * @returns {Object[]} A new array with an updated order of the notification\n * queue.\n */\nfunction _insertNotificationByPriority(notifications, notification) {\n    const newNotificationPriority\n        = NOTIFICATION_TYPE_PRIORITIES[notification.props.appearance] || 0;\n\n    // Default to putting the new notification at the end of the queue.\n    let insertAtLocation = notifications.length;\n\n    // Find where to insert the new notification based on priority. Do not\n    // insert at the front of the queue so that the user can finish acting on\n    // any notification currently being read.\n    for (let i = 1; i < notifications.length; i++) {\n        const queuedNotification = notifications[i];\n        const queuedNotificationPriority\n            = NOTIFICATION_TYPE_PRIORITIES[queuedNotification.props.appearance]\n                || 0;\n\n        if (queuedNotificationPriority < newNotificationPriority) {\n            insertAtLocation = i;\n            break;\n        }\n    }\n\n    // Create a copy to avoid mutation and insert the notification.\n    const copyOfNotifications = notifications.slice();\n\n    copyOfNotifications.splice(insertAtLocation, 0, notification);\n\n    return copyOfNotifications;\n}\n","// @flow\n\nexport * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './constants';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    SCREEN_SHARE_PARTICIPANTS_UPDATED,\n    SET_TILE_VIEW\n} from './actionTypes';\n\n/**\n * Creates a (redux) action which signals that the list of known participants\n * with screen shares has changed.\n *\n * @param {string} participantIds - The participants which currently have active\n * screen share streams.\n * @returns {{\n *     type: SCREEN_SHARE_PARTICIPANTS_UPDATED,\n *     participantId: string\n * }}\n */\nexport function setParticipantsWithScreenShare(participantIds: Array<string>) {\n    return {\n        type: SCREEN_SHARE_PARTICIPANTS_UPDATED,\n        participantIds\n    };\n}\n\n/**\n * Creates a (redux) action which signals to set the UI layout to be tiled view\n * or not.\n *\n * @param {boolean} enabled - Whether or not tile view should be shown.\n * @returns {{\n *     type: SET_TILE_VIEW,\n *     enabled: boolean\n * }}\n */\nexport function setTileView(enabled: boolean) {\n    return {\n        type: SET_TILE_VIEW,\n        enabled\n    };\n}\n\n/**\n * Creates a (redux) action which signals either to exit tile view if currently\n * enabled or enter tile view if currently disabled.\n *\n * @returns {Function}\n */\nexport function toggleTileView() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { tileViewEnabled } = getState()['features/video-layout'];\n\n        dispatch(setTileView(!tileViewEnabled));\n    };\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/video-layout');\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    createToolbarEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { IconTileView } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport {\n    AbstractButton,\n    type AbstractButtonProps\n} from '../../base/toolbox';\n\nimport { setTileView } from '../actions';\nimport logger from '../logger';\nimport { TILE_VIEW_ENABLED, getFeatureFlag } from '../../base/flags';\n\n/**\n * The type of the React {@code Component} props of {@link TileViewButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether or not tile view layout has been enabled as the user preference.\n     */\n    _tileViewEnabled: boolean,\n\n    /**\n     * Used to dispatch actions from the buttons.\n     */\n    dispatch: Dispatch<any>\n};\n\n/**\n * Component that renders a toolbar button for toggling the tile layout view.\n *\n * @extends AbstractButton\n */\nclass TileViewButton<P: Props> extends AbstractButton<P, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.tileView';\n    icon = IconTileView;\n    label = 'toolbar.enterTileView';\n    toggledLabel = 'toolbar.exitTileView';\n    tooltip = 'toolbar.tileViewToggle';\n\n    /**\n     * Handles clicking / pressing the button.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { _tileViewEnabled, dispatch } = this.props;\n\n        sendAnalytics(createToolbarEvent(\n            'tileview.button',\n            {\n                'is_enabled': _tileViewEnabled\n            }));\n        const value = !_tileViewEnabled;\n\n        logger.debug(`Tile view ${value ? 'enable' : 'disable'}`);\n        dispatch(setTileView(value));\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._tileViewEnabled;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code TileViewButton} component.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The properties explicitly passed to the component instance.\n * @returns {Props}\n */\nfunction _mapStateToProps(state, ownProps) {\n    const enabled = getFeatureFlag(state, TILE_VIEW_ENABLED, true);\n    const { visible = enabled } = ownProps;\n\n    return {\n        _tileViewEnabled: state['features/video-layout'].tileViewEnabled,\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(TileViewButton));\n","// @flow\n\nimport { LAYOUTS } from './constants';\nimport { getPinnedParticipant } from '../base/participants';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Returns the {@code LAYOUTS} constant associated with the layout\n * the application should currently be in.\n *\n * @param {Object} state - The redux state.\n * @returns {string}\n */\nexport function getCurrentLayout(state: Object) {\n    if (shouldDisplayTileView(state)) {\n        return LAYOUTS.TILE_VIEW;\n    } else if (interfaceConfig.VERTICAL_FILMSTRIP) {\n        return LAYOUTS.VERTICAL_FILMSTRIP_VIEW;\n    }\n\n    return LAYOUTS.HORIZONTAL_FILMSTRIP_VIEW;\n}\n\n/**\n * Returns how many columns should be displayed in tile view. The number\n * returned will be between 1 and 5, inclusive.\n *\n * @returns {number}\n */\nexport function getMaxColumnCount() {\n    const configuredMax = interfaceConfig.TILE_VIEW_MAX_COLUMNS || 5;\n\n    return Math.min(Math.max(configuredMax, 1), 5);\n}\n\n/**\n * Returns the cell count dimensions for tile view. Tile view tries to uphold\n * equal count of tiles for height and width, until maxColumn is reached in\n * which rows will be added but no more columns.\n *\n * @param {Object} state - The redux store state.\n * @param {number} maxColumns - The maximum number of columns that can be\n * displayed.\n * @returns {Object} An object is return with the desired number of columns,\n * rows, and visible rows (the rest should overflow) for the tile view layout.\n */\nexport function getTileViewGridDimensions(state: Object, maxColumns: number = getMaxColumnCount()) {\n    // When in tile view mode, we must discount ourselves (the local participant) because our\n    // tile is not visible.\n    const { iAmRecorder } = state['features/base/config'];\n    const numberOfParticipants = state['features/base/participants'].length - (iAmRecorder ? 1 : 0);\n\n    const columnsToMaintainASquare = Math.ceil(Math.sqrt(numberOfParticipants));\n    const columns = Math.min(columnsToMaintainASquare, maxColumns);\n    const rows = Math.ceil(numberOfParticipants / columns);\n    const visibleRows = Math.min(maxColumns, rows);\n\n    return {\n        columns,\n        visibleRows\n    };\n}\n\n/**\n * Selector for determining if the UI layout should be in tile view. Tile view\n * is determined by more than just having the tile view setting enabled, as\n * one-on-one calls should not be in tile view, as well as etherpad editing.\n *\n * @param {Object} state - The redux state.\n * @returns {boolean} True if tile view should be displayed.\n */\nexport function shouldDisplayTileView(state: Object = {}) {\n    return Boolean(\n        state['features/video-layout']\n            && state['features/video-layout'].tileViewEnabled\n            && (!state['features/etherpad']\n                || !state['features/etherpad'].editing)\n\n            // Truthy check is needed for interfaceConfig to prevent errors on\n            // mobile which does not have interfaceConfig. On web, tile view\n            // should never be enabled for filmstrip only mode.\n            && (typeof interfaceConfig === 'undefined'\n                || !interfaceConfig.filmStripOnly)\n            && !getPinnedParticipant(state)\n    );\n}\n","import {\n    PIN_PARTICIPANT,\n    getPinnedParticipant,\n    pinParticipant\n} from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { SET_DOCUMENT_EDITING_STATUS, toggleDocument } from '../etherpad';\n\nimport { SET_TILE_VIEW } from './actionTypes';\nimport { setTileView } from './actions';\n\n/**\n * Middleware which intercepts actions and updates tile view related state.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case PIN_PARTICIPANT: {\n        const isPinning = Boolean(action.participant.id);\n        const { tileViewEnabled } = store.getState()['features/video-layout'];\n\n        if (isPinning && tileViewEnabled) {\n            store.dispatch(setTileView(false));\n        }\n\n        break;\n    }\n\n    case SET_DOCUMENT_EDITING_STATUS:\n        if (action.editing) {\n            store.dispatch(setTileView(false));\n        }\n\n        break;\n\n    case SET_TILE_VIEW: {\n        const state = store.getState();\n\n        if (action.enabled) {\n            if (getPinnedParticipant(state)) {\n                store.dispatch(pinParticipant(null));\n            }\n\n            if (state['features/etherpad'].editing) {\n                store.dispatch(toggleDocument());\n            }\n        }\n\n        break;\n    }\n    }\n\n    return next(action);\n});\n","// @flow\n\nimport VideoLayout from '../../../modules/UI/videolayout/VideoLayout.js';\n\nimport { CONFERENCE_JOINED, CONFERENCE_WILL_LEAVE } from '../base/conference';\nimport {\n    DOMINANT_SPEAKER_CHANGED,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_UPDATED,\n    PIN_PARTICIPANT,\n    getParticipantById\n} from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { TRACK_ADDED, TRACK_REMOVED } from '../base/tracks';\nimport { SET_FILMSTRIP_VISIBLE } from '../filmstrip';\n\nimport './middleware.any';\n\ndeclare var APP: Object;\n\n/**\n * Middleware which intercepts actions and updates the legacy component\n * {@code VideoLayout} as needed. The purpose of this middleware is to redux-ify\n * {@code VideoLayout} without having to simultaneously react-ifying it.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    // Purposefully perform additional actions after state update to mimic\n    // being connected to the store for updates.\n    const result = next(action);\n\n    switch (action.type) {\n    case CONFERENCE_JOINED:\n        VideoLayout.mucJoined();\n        break;\n\n    case CONFERENCE_WILL_LEAVE:\n        VideoLayout.reset();\n        break;\n\n    case PARTICIPANT_JOINED:\n        if (!action.participant.local) {\n            VideoLayout.addRemoteParticipantContainer(\n                getParticipantById(store.getState(), action.participant.id));\n        }\n        break;\n\n    case PARTICIPANT_LEFT:\n        VideoLayout.removeParticipantContainer(action.participant.id);\n        break;\n\n    case PARTICIPANT_UPDATED: {\n        // Look for actions that triggered a change to connectionStatus. This is\n        // done instead of changing the connection status change action to be\n        // explicit in order to minimize changes to other code.\n        if (typeof action.participant.connectionStatus !== 'undefined') {\n            VideoLayout.onParticipantConnectionStatusChanged(\n                action.participant.id,\n                action.participant.connectionStatus);\n        }\n        break;\n    }\n\n    case DOMINANT_SPEAKER_CHANGED:\n        VideoLayout.onDominantSpeakerChanged(action.participant.id);\n        break;\n\n    case PIN_PARTICIPANT:\n        VideoLayout.onPinChange(action.participant.id);\n        break;\n\n    case SET_FILMSTRIP_VISIBLE:\n        VideoLayout.resizeVideoArea();\n        break;\n\n    case TRACK_ADDED:\n        if (!action.track.local) {\n            VideoLayout.onRemoteStreamAdded(action.track.jitsiTrack);\n        }\n\n        break;\n    case TRACK_REMOVED:\n        if (!action.track.local) {\n            VideoLayout.onRemoteStreamRemoved(action.track.jitsiTrack);\n        }\n\n        break;\n    }\n\n    return result;\n});\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\nimport { PersistenceRegistry } from '../base/storage';\n\nimport {\n    SCREEN_SHARE_PARTICIPANTS_UPDATED,\n    SET_TILE_VIEW\n} from './actionTypes';\n\nconst DEFAULT_STATE = {\n    screenShares: [],\n\n    /**\n     * The indicator which determines whether the video layout should display\n     * video thumbnails in a tiled layout.\n     *\n     * @public\n     * @type {boolean}\n     */\n    tileViewEnabled: false\n};\n\nconst STORE_NAME = 'features/video-layout';\n\nPersistenceRegistry.register(STORE_NAME, {\n    tileViewEnabled: true\n});\n\nReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case SCREEN_SHARE_PARTICIPANTS_UPDATED: {\n        return {\n            ...state,\n            screenShares: action.participantIds\n        };\n    }\n\n    case SET_TILE_VIEW:\n        return {\n            ...state,\n            tileViewEnabled: action.enabled\n        };\n    }\n\n    return state;\n});\n","// @flow\n\nimport debounce from 'lodash/debounce';\n\nimport {\n    VIDEO_QUALITY_LEVELS,\n    setMaxReceiverVideoQuality\n} from '../base/conference';\nimport {\n    getPinnedParticipant,\n    pinParticipant\n} from '../base/participants';\nimport { StateListenerRegistry, equals } from '../base/redux';\nimport { isFollowMeActive } from '../follow-me';\nimport { selectParticipant } from '../large-video';\n\nimport { shouldDisplayTileView } from './functions';\nimport { setParticipantsWithScreenShare } from './actions';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * StateListenerRegistry provides a reliable way of detecting changes to\n * preferred layout state and dispatching additional actions.\n */\nStateListenerRegistry.register(\n    /* selector */ state => shouldDisplayTileView(state),\n    /* listener */ (displayTileView, store) => {\n        const { dispatch } = store;\n\n        dispatch(selectParticipant());\n\n        if (!displayTileView) {\n            dispatch(\n                setMaxReceiverVideoQuality(VIDEO_QUALITY_LEVELS.HIGH));\n\n            if (_getAutoPinSetting()) {\n                _updateAutoPinnedParticipant(store);\n            }\n        }\n    }\n);\n\n/**\n * For auto-pin mode, listen for changes to the known media tracks and look\n * for updates to screen shares. The listener is debounced to avoid state\n * thrashing that might occur, especially when switching in or out of p2p.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/base/tracks'],\n    /* listener */ debounce((tracks, store) => {\n        if (!_getAutoPinSetting() || isFollowMeActive(store)) {\n            return;\n        }\n\n        const oldScreenSharesOrder = store.getState()['features/video-layout'].screenShares || [];\n        const knownSharingParticipantIds = tracks.reduce((acc, track) => {\n            if (track.mediaType === 'video' && track.videoType === 'desktop') {\n                const skipTrack = _getAutoPinSetting() === 'remote-only' && track.local;\n\n                if (!skipTrack) {\n                    acc.push(track.participantId);\n                }\n            }\n\n            return acc;\n        }, []);\n\n        // Filter out any participants which are no longer screen sharing\n        // by looping through the known sharing participants and removing any\n        // participant IDs which are no longer sharing.\n        const newScreenSharesOrder = oldScreenSharesOrder.filter(\n            participantId => knownSharingParticipantIds.includes(participantId));\n\n        // Make sure all new sharing participant get added to the end of the\n        // known screen shares.\n        knownSharingParticipantIds.forEach(participantId => {\n            if (!newScreenSharesOrder.includes(participantId)) {\n                newScreenSharesOrder.push(participantId);\n            }\n        });\n\n        if (!equals(oldScreenSharesOrder, newScreenSharesOrder)) {\n            store.dispatch(\n                setParticipantsWithScreenShare(newScreenSharesOrder));\n\n            _updateAutoPinnedParticipant(store);\n        }\n    }, 100));\n\n/**\n * A selector for retrieving the current automatic pinning setting.\n *\n * @private\n * @returns {string|undefined} The string \"remote-only\" is returned if only\n * remote screensharing should be automatically pinned, any other truthy value\n * means automatically pin all screenshares. Falsy means do not automatically\n * pin any screenshares.\n */\nfunction _getAutoPinSetting() {\n    return typeof interfaceConfig === 'object'\n        ? interfaceConfig.AUTO_PIN_LATEST_SCREEN_SHARE\n        : 'remote-only';\n}\n\n/**\n * Private helper to automatically pin the latest screen share stream or unpin\n * if there are no more screen share streams.\n *\n * @param {Store} store - The redux store.\n * @returns {void}\n */\nfunction _updateAutoPinnedParticipant({ dispatch, getState }) {\n    const state = getState();\n    const screenShares = state['features/video-layout'].screenShares;\n\n    if (!screenShares) {\n        return;\n    }\n\n    const latestScreenshareParticipantId\n        = screenShares[screenShares.length - 1];\n\n    if (latestScreenshareParticipantId) {\n        dispatch(pinParticipant(latestScreenshareParticipantId));\n    } else if (getPinnedParticipant(state['features/base/participants'])) {\n        dispatch(pinParticipant(null));\n    }\n}\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './constants';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\nimport './subscriber';\n","function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n  if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n    module.exports = _typeof = function _typeof(obj) {\n      return _typeof2(obj);\n    };\n  } else {\n    module.exports = _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n    };\n  }\n\n  return _typeof(obj);\n}\n\nmodule.exports = _typeof;","// @flow\n\nexport const START_GAME = 'START_GAME';\nexport const STOP_GAME = 'STOP_GAME';\nexport const JOIN_GAME = 'JOIN_GAME';\nexport const TAKE_OVER = 'TAKE_OVER';\nexport const GIVE_CARDS = 'GIVE_CARDS';\nexport const CHECK = 'CHECK';\nexport const CALL = 'CALL';\nexport const RAISE = 'RAISE';\nexport const FOLD = 'FOLD';\nexport const SHOW_CARDS = 'SHOW_CARDS';\nexport const THROW_AWAY_CARDS = 'THROW_AWAY_CARDS';\nexport const COLLECT = 'COLLECT';\nexport const NEW_STATE_RECEIVED = 'NEW_STATE_RECEIVED';\nexport const SEND_GAME_STATE = 'SEND_GAME_STATE';\n","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import * as colors from './colors';\nimport themed from './utils/themed'; // Cards on a board\n\nexport var e100 = themed({\n  light: \"box-shadow: 0 1px 1px \".concat(colors.N50A, \", 0 0 1px 0 \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 1px 1px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Inline dialogs\n\nexport var e200 = themed({\n  light: \"box-shadow: 0 4px 8px -2px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 4px 8px -2px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Modals\n\nexport var e300 = themed({\n  light: \"box-shadow: 0 8px 16px -4px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 8px 16px -4px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Panels\n\nexport var e400 = themed({\n  light: \"box-shadow: 0 12px 24px -6px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 12px 24px -6px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Flag messages (notifications)\n\nexport var e500 = themed({\n  light: \"box-shadow: 0 20px 32px -8px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 20px 32px -8px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n});","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport { gridSize, fontSize } from './index';\n\nvar baseHeading = function baseHeading(size, lineHeight) {\n  return \"\\n  font-size: \".concat(size / fontSize(), \"em;\\n  font-style: inherit;\\n  line-height: \").concat(lineHeight / size, \";\\n\");\n};\n\nexport var h900 = function h900() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(35, 40), colors.heading, gridSize() * 6.5);\n};\nexport var h800 = function h800() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(29, 32), colors.heading, gridSize() * 5);\n};\nexport var h700 = function h700() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(24, 28), colors.heading, gridSize() * 5);\n};\nexport var h600 = function h600() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  margin-top: \", \"px;\\n\"], baseHeading(20, 24), colors.heading, gridSize() * 3.5);\n};\nexport var h500 = function h500() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.006em;\\n  margin-top: \", \"px;\\n\"], baseHeading(16, 20), colors.heading, gridSize() * 3);\n};\nexport var h400 = function h400() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.003em;\\n  margin-top: \", \"px;\\n\"], baseHeading(14, 16), colors.heading, gridSize() * 2);\n};\nexport var h300 = function h300() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n  text-transform: uppercase;\\n\"], baseHeading(12, 16), colors.heading, gridSize() * 2.5);\n};\nexport var h200 = function h200() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n\"], baseHeading(12, 16), colors.subtleHeading, gridSize() * 2);\n};\nexport var h100 = function h100() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 700;\\n  margin-top: \", \"px;\\n\"], baseHeading(11, 16), colors.subtleHeading, gridSize() * 2);\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nexport default (function (_ref) {\n  var children = _ref.children,\n      props = _ref.props,\n      theme = _ref.theme;\n  var appearance = _typeof(props) === 'object' ? 'default' : props;\n  var merged = _typeof(props) === 'object' ? _objectSpread({}, props) : {};\n  Object.keys(theme).forEach(function (key) {\n    if (!(key in merged)) {\n      merged[key] = theme[key]({\n        appearance: appearance\n      });\n    }\n  });\n  return children(merged);\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport * as colors from '../colors';\nimport { createTheme } from '../utils/createTheme';\n\nvar orTextColor = function orTextColor(preferred) {\n  return function (p) {\n    return p[preferred] || p.textColor;\n  };\n};\n\nvar Div = styled.div.withConfig({\n  displayName: \"Reset__Div\",\n  componentId: \"sc-15i6ali-0\"\n})([\"\\n  \", \";\\n\"], function (p) {\n  return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n\\n    a {\\n      color: \", \";\\n    }\\n    a:hover {\\n      color: \", \";\\n    }\\n    a:active {\\n      color: \", \";\\n    }\\n    a:focus {\\n      outline-color: \", \";\\n    }\\n    h1,\\n    h2,\\n    h3,\\n    h4,\\n    h5 {\\n      color: \", \";\\n    }\\n    h6 {\\n      color: \", \";\\n    }\\n    small {\\n      color: \", \";\\n    }\\n  \"], p.backgroundColor, p.textColor, orTextColor('linkColor'), orTextColor('linkColorHover'), orTextColor('linkColorActive'), orTextColor('linkColorOutline'), orTextColor('headingColor'), orTextColor('subtleHeadingColor'), orTextColor('subtleTextColor'));\n});\nexport var ResetTheme = createTheme(function () {\n  return {\n    backgroundColor: colors.N0,\n    linkColor: colors.B400,\n    linkColorHover: colors.B300,\n    linkColorActive: colors.B500,\n    linkColorOutline: colors.B100,\n    headingColor: colors.N800,\n    subtleHeadingColor: colors.N200,\n    subtleTextColor: colors.N200,\n    textColor: colors.N900\n  };\n});\nexport function Reset(props) {\n  return React.createElement(ResetTheme.Provider, {\n    value: props.theme\n  }, React.createElement(ResetTheme.Consumer, null, function (tokens) {\n    return React.createElement(Div, _extends({}, _objectSpread({}, tokens, {\n      mode: undefined\n    }), props), props.children);\n  }));\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React from 'react';\nimport Theme from './components/Theme'; // Pre-executes the theme and passes it as a prop to the supplied component.\n// This is useful for ensuring that the current theme is accessible as props\n// in styled-components.\n\nexport function withTheme(InnerComponent) {\n  return function ComponentWithTheme(props) {\n    return React.createElement(Theme.Consumer, null, function (tokens) {\n      return React.createElement(InnerComponent, _extends({}, props, {\n        theme: tokens\n      }));\n    });\n  };\n}","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n            t[p[i]] = s[p[i]];\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/**\n * The type of Redux action which signals that an error occurred while obtaining\n * a camera.\n *\n * {\n *     type: NOTIFY_CAMERA_ERROR,\n *     error: Object\n * }\n */\nexport const NOTIFY_CAMERA_ERROR = 'NOTIFY_CAMERA_ERROR';\n\n/**\n * The type of Redux action which signals that an error occurred while obtaining\n * a microphone.\n *\n * {\n *     type: NOTIFY_MIC_ERROR,\n *     error: Object\n * }\n */\nexport const NOTIFY_MIC_ERROR = 'NOTIFY_MIC_ERROR';\n\n/**\n * The type of Redux action which signals that the currently used audio\n * input device should be changed.\n *\n * {\n *     type: SET_AUDIO_INPUT_DEVICE,\n *     deviceId: string,\n * }\n */\nexport const SET_AUDIO_INPUT_DEVICE = 'SET_AUDIO_INPUT_DEVICE';\n\n/**\n * The type of Redux action which signals that the currently used video\n * input device should be changed.\n *\n * {\n *     type: SET_VIDEO_INPUT_DEVICE,\n *     deviceId: string,\n * }\n */\nexport const SET_VIDEO_INPUT_DEVICE = 'SET_VIDEO_INPUT_DEVICE';\n\n/**\n * The type of Redux action which signals that the list of known available\n * audio and video sources has changed.\n *\n * {\n *     type: UPDATE_DEVICE_LIST,\n *     devices: Array<MediaDeviceInfo>,\n * }\n */\nexport const UPDATE_DEVICE_LIST = 'UPDATE_DEVICE_LIST';\n\n/**\n * The type of Redux action which will add a pending device requests that will\n * be executed later when it is possible (when the conference is joined).\n *\n * {\n *     type: ADD_PENDING_DEVICE_REQUEST,\n *     request: Object\n * }\n */\nexport const ADD_PENDING_DEVICE_REQUEST = 'ADD_PENDING_DEVICE_REQUEST';\n\n/**\n * The type of Redux action which will remove all pending device requests.\n *\n * {\n *     type: REMOVE_PENDING_DEVICE_REQUESTS\n * }\n */\nexport const REMOVE_PENDING_DEVICE_REQUESTS = 'REMOVE_PENDING_DEVICE_REQUESTS';\n\n/**\n * The type of Redux action which will check passed old and passed new devices\n * and if needed will show notifications asking the user whether to use those.\n *\n * {\n *     type: CHECK_AND_NOTIFY_FOR_NEW_DEVICE\n *     newDevices: Array<MediaDeviceInfo>\n *     oldDevices: Array<MediaDeviceInfo>\n * }\n */\nexport const CHECK_AND_NOTIFY_FOR_NEW_DEVICE = 'CHECK_AND_NOTIFY_FOR_NEW_DEVICE';\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/devices');\n","// @flow\n\nimport { parseURLParams } from '../util';\nimport JitsiMeetJS from '../lib-jitsi-meet';\nimport { updateSettings } from '../settings';\n\nimport logger from './logger';\n\ndeclare var APP: Object;\n\n/**\n * Detects the use case when the labels are not available if the A/V permissions\n * are not yet granted.\n *\n * @param {Object} state - The redux state.\n * @returns {boolean} - True if the labels are already initialized and false\n * otherwise.\n */\nexport function areDeviceLabelsInitialized(state: Object) {\n    // TODO: Replace with something that doesn't use APP when the conference.js logic is reactified.\n    if (APP.conference._localTracksInitialized) {\n        return true;\n    }\n\n    for (const type of [ 'audioInput', 'audioOutput', 'videoInput' ]) {\n        if ((state['features/base/devices'].availableDevices[type] || []).find(d => Boolean(d.label))) {\n            return true;\n        }\n    }\n\n    return false;\n}\n\n/**\n * Get device id of the audio output device which is currently in use.\n * Empty string stands for default device.\n *\n * @returns {string}\n */\nexport function getAudioOutputDeviceId() {\n    return JitsiMeetJS.mediaDevices.getAudioOutputDevice();\n}\n\n/**\n * Finds a device with a label that matches the passed label and returns its id.\n *\n * @param {Object} state - The redux state.\n * @param {string} label - The label.\n * @param {string} kind - The type of the device. One of \"audioInput\",\n * \"audioOutput\", and \"videoInput\". Also supported is all lowercase versions\n * of the preceding types.\n * @returns {string|undefined}\n */\nexport function getDeviceIdByLabel(state: Object, label: string, kind: string) {\n    const webrtcKindToJitsiKindTranslator = {\n        audioinput: 'audioInput',\n        audiooutput: 'audioOutput',\n        videoinput: 'videoInput'\n    };\n\n    const kindToSearch = webrtcKindToJitsiKindTranslator[kind] || kind;\n\n    const device\n        = (state['features/base/devices'].availableDevices[kindToSearch] || [])\n            .find(d => d.label === label);\n\n    if (device) {\n        return device.deviceId;\n    }\n}\n\n/**\n * Finds a device with a label that matches the passed id and returns its label.\n *\n * @param {Object} state - The redux state.\n * @param {string} id - The device id.\n * @param {string} kind - The type of the device. One of \"audioInput\",\n * \"audioOutput\", and \"videoInput\". Also supported is all lowercase versions\n * of the preceding types.\n * @returns {string|undefined}\n */\nexport function getDeviceLabelById(state: Object, id: string, kind: string) {\n    const webrtcKindToJitsiKindTranslator = {\n        audioinput: 'audioInput',\n        audiooutput: 'audioOutput',\n        videoinput: 'videoInput'\n    };\n\n    const kindToSearch = webrtcKindToJitsiKindTranslator[kind] || kind;\n\n    const device\n        = (state['features/base/devices'].availableDevices[kindToSearch] || [])\n        .find(d => d.deviceId === id);\n\n    if (device) {\n        return device.label;\n    }\n}\n\n/**\n * Returns the devices set in the URL.\n *\n * @param {Object} state - The redux state.\n * @returns {Object|undefined}\n */\nexport function getDevicesFromURL(state: Object) {\n    const urlParams\n        = parseURLParams(state['features/base/connection'].locationURL);\n\n    const audioOutput = urlParams['devices.audioOutput'];\n    const videoInput = urlParams['devices.videoInput'];\n    const audioInput = urlParams['devices.audioInput'];\n\n    if (!audioOutput && !videoInput && !audioInput) {\n        return undefined;\n    }\n\n    const devices = {};\n\n    audioOutput && (devices.audioOutput = audioOutput);\n    videoInput && (devices.videoInput = videoInput);\n    audioInput && (devices.audioInput = audioInput);\n\n    return devices;\n}\n\n/**\n * Converts an array of media devices into an object organized by device kind.\n *\n * @param {Array<MediaDeviceInfo>} devices - Available media devices.\n * @private\n * @returns {Object} An object with the media devices split by type. The keys\n * are device type and the values are arrays with devices matching the device\n * type.\n */\nexport function groupDevicesByKind(devices: Object[]): Object {\n    return {\n        audioInput: devices.filter(device => device.kind === 'audioinput'),\n        audioOutput: devices.filter(device => device.kind === 'audiooutput'),\n        videoInput: devices.filter(device => device.kind === 'videoinput')\n    };\n}\n\n/**\n * Filters audio devices from a list of MediaDeviceInfo objects.\n *\n * @param {Array<MediaDeviceInfo>} devices - Unfiltered media devices.\n * @private\n * @returns {Array<MediaDeviceInfo>} Filtered audio devices.\n */\nexport function filterAudioDevices(devices: Object[]): Object {\n    return devices.filter(device => device.kind === 'audioinput');\n}\n\n/**\n * We want to strip any device details that are not very user friendly, like usb ids put in brackets at the end.\n *\n * @param {string} label - Device label to format.\n *\n * @returns {string} - Formatted string.\n */\nexport function formatDeviceLabel(label: string) {\n\n    let formattedLabel = label;\n\n    // Remove braked description at the end as it contains non user friendly strings i.e.\n    // Microsoft® LifeCam HD-3000 (045e:0779:31dg:d1231)\n    const ix = formattedLabel.lastIndexOf('(');\n\n    if (ix !== -1) {\n        formattedLabel = formattedLabel.substr(0, ix);\n    }\n\n    return formattedLabel;\n}\n\n/**\n * Returns a list of objects containing all the microphone device ids and labels.\n *\n * @param {Object} state - The state of the application.\n * @returns {Object[]}\n */\nexport function getAudioInputDeviceData(state: Object) {\n    return state['features/base/devices'].availableDevices.audioInput.map(\n        ({ deviceId, label }) => {\n            return {\n                deviceId,\n                label\n            };\n        });\n}\n\n/**\n * Returns a list of objectes containing all the output device ids and labels.\n *\n * @param {Object} state - The state of the application.\n * @returns {Object[]}\n */\nexport function getAudioOutputDeviceData(state: Object) {\n    return state['features/base/devices'].availableDevices.audioOutput.map(\n        ({ deviceId, label }) => {\n            return {\n                deviceId,\n                label\n            };\n        });\n}\n\n/**\n * Returns a list of all the camera device ids.\n *\n * @param {Object} state - The state of the application.\n * @returns {string[]}\n */\nexport function getVideoDeviceIds(state: Object) {\n    return state['features/base/devices'].availableDevices.videoInput.map(({ deviceId }) => deviceId);\n}\n\n/**\n * Returns true if there are devices of a specific type.\n *\n * @param {Object} state - The state of the application.\n * @param {string} type - The type of device: VideoOutput | audioOutput | audioInput.\n *\n * @returns {boolean}\n */\nexport function hasAvailableDevices(state: Object, type: string) {\n    return state['features/base/devices'].availableDevices[type].length > 0;\n}\n\n/**\n * Set device id of the audio output device which is currently in use.\n * Empty string stands for default device.\n *\n * @param {string} newId - New audio output device id.\n * @param {Function} dispatch - The Redux dispatch function.\n * @param {boolean} userSelection - Whether this is a user selection update.\n * @param {?string} newLabel - New audio output device label to store.\n * @returns {Promise}\n */\nexport function setAudioOutputDeviceId(\n        newId: string = 'default',\n        dispatch: Function,\n        userSelection: boolean = false,\n        newLabel: ?string): Promise<*> {\n\n    logger.debug(`setAudioOutputDevice: ${String(newLabel)}[${newId}]`);\n\n    return JitsiMeetJS.mediaDevices.setAudioOutputDevice(newId)\n        .then(() => {\n            const newSettings = {\n                audioOutputDeviceId: newId,\n                userSelectedAudioOutputDeviceId: undefined,\n                userSelectedAudioOutputDeviceLabel: undefined\n            };\n\n            if (userSelection) {\n                newSettings.userSelectedAudioOutputDeviceId = newId;\n                newSettings.userSelectedAudioOutputDeviceLabel = newLabel;\n            } else {\n                // a flow workaround, I needed to add 'userSelectedAudioOutputDeviceId: undefined'\n                delete newSettings.userSelectedAudioOutputDeviceId;\n                delete newSettings.userSelectedAudioOutputDeviceLabel;\n            }\n\n            return dispatch(updateSettings(newSettings));\n        });\n}\n","import JitsiMeetJS from '../lib-jitsi-meet';\nimport {\n    getUserSelectedOutputDeviceId,\n    updateSettings\n} from '../settings';\n\nimport {\n    ADD_PENDING_DEVICE_REQUEST,\n    CHECK_AND_NOTIFY_FOR_NEW_DEVICE,\n    NOTIFY_CAMERA_ERROR,\n    NOTIFY_MIC_ERROR,\n    REMOVE_PENDING_DEVICE_REQUESTS,\n    SET_AUDIO_INPUT_DEVICE,\n    SET_VIDEO_INPUT_DEVICE,\n    UPDATE_DEVICE_LIST\n} from './actionTypes';\nimport {\n    areDeviceLabelsInitialized,\n    getDeviceIdByLabel,\n    getDeviceLabelById,\n    getDevicesFromURL,\n    setAudioOutputDeviceId\n} from './functions';\nimport logger from './logger';\n\n/**\n * Maps the WebRTC string for device type to the keys used to store configure,\n * within redux, which devices should be used by default.\n */\nconst DEVICE_TYPE_TO_SETTINGS_KEYS = {\n    audioInput: {\n        currentDeviceId: 'micDeviceId',\n        userSelectedDeviceId: 'userSelectedMicDeviceId',\n        userSelectedDeviceLabel: 'userSelectedMicDeviceLabel'\n    },\n    audioOutput: {\n        currentDeviceId: 'audioOutputDeviceId',\n        userSelectedDeviceId: 'userSelectedAudioOutputDeviceId',\n        userSelectedDeviceLabel: 'userSelectedAudioOutputDeviceLabel'\n    },\n    videoInput: {\n        currentDeviceId: 'audioOutputDeviceId',\n        userSelectedDeviceId: 'userSelectedCameraDeviceId',\n        userSelectedDeviceLabel: 'userSelectedCameraDeviceLabel'\n    }\n};\n\n/**\n * Adds a pending device request.\n *\n * @param {Object} request - The request to be added.\n * @returns {{\n *      type: ADD_PENDING_DEVICE_REQUEST,\n *      request: Object\n * }}\n */\nexport function addPendingDeviceRequest(request) {\n    return {\n        type: ADD_PENDING_DEVICE_REQUEST,\n        request\n    };\n}\n\n/**\n * Configures the initial A/V devices before the conference has started.\n *\n * @returns {Function}\n */\nexport function configureInitialDevices() {\n    return (dispatch, getState) => {\n        const deviceLabels = getDevicesFromURL(getState());\n        let updateSettingsPromise;\n\n        if (deviceLabels) {\n            updateSettingsPromise = dispatch(getAvailableDevices()).then(() => {\n                const state = getState();\n\n                if (!areDeviceLabelsInitialized(state)) {\n                    // The labels are not available if the A/V permissions are\n                    // not yet granted.\n\n                    Object.keys(deviceLabels).forEach(key => {\n                        dispatch(addPendingDeviceRequest({\n                            type: 'devices',\n                            name: 'setDevice',\n                            device: {\n                                kind: key.toLowerCase(),\n                                label: deviceLabels[key]\n                            },\n                            // eslint-disable-next-line no-empty-function\n                            responseCallback() {}\n                        }));\n                    });\n\n                    return;\n                }\n\n                const newSettings = {};\n\n                Object.keys(deviceLabels).forEach(key => {\n                    const label = deviceLabels[key];\n                    const deviceId = getDeviceIdByLabel(state, label, key);\n\n                    if (deviceId) {\n                        const settingsTranslationMap = DEVICE_TYPE_TO_SETTINGS_KEYS[key];\n\n                        newSettings[settingsTranslationMap.currentDeviceId] = deviceId;\n                        newSettings[settingsTranslationMap.userSelectedDeviceId] = deviceId;\n                        newSettings[settingsTranslationMap.userSelectedDeviceLabel] = label;\n                    }\n                });\n\n                dispatch(updateSettings(newSettings));\n            });\n        } else {\n            updateSettingsPromise = Promise.resolve();\n        }\n\n        return updateSettingsPromise\n            .then(() => {\n                const userSelectedAudioOutputDeviceId = getUserSelectedOutputDeviceId(getState());\n\n                return setAudioOutputDeviceId(userSelectedAudioOutputDeviceId, dispatch)\n                    .catch(ex => logger.warn(`Failed to set audio output device.\n                        Default audio output device will be used instead ${ex}`));\n            });\n    };\n}\n\n/**\n * Queries for connected A/V input and output devices and updates the redux\n * state of known devices.\n *\n * @returns {Function}\n */\nexport function getAvailableDevices() {\n    return dispatch => new Promise(resolve => {\n        const { mediaDevices } = JitsiMeetJS;\n\n        if (mediaDevices.isDeviceListAvailable()\n                && mediaDevices.isDeviceChangeAvailable()) {\n            mediaDevices.enumerateDevices(devices => {\n                dispatch(updateDeviceList(devices));\n\n                resolve(devices);\n            });\n        } else {\n            resolve([]);\n        }\n    });\n}\n\n/**\n * Signals that an error occurred while trying to obtain a track from a camera.\n *\n * @param {Object} error - The device error, as provided by lib-jitsi-meet.\n * @param {string} error.name - The constant for the type of the error.\n * @param {string} error.message - Optional additional information about the\n * error.\n * @returns {{\n *     type: NOTIFY_CAMERA_ERROR,\n *     error: Object\n * }}\n */\nexport function notifyCameraError(error) {\n    return {\n        type: NOTIFY_CAMERA_ERROR,\n        error\n    };\n}\n\n/**\n * Signals that an error occurred while trying to obtain a track from a mic.\n *\n * @param {Object} error - The device error, as provided by lib-jitsi-meet.\n * @param {Object} error.name - The constant for the type of the error.\n * @param {string} error.message - Optional additional information about the\n * error.\n * @returns {{\n *     type: NOTIFY_MIC_ERROR,\n *     error: Object\n * }}\n */\nexport function notifyMicError(error) {\n    return {\n        type: NOTIFY_MIC_ERROR,\n        error\n    };\n}\n\n/**\n * Remove all pending device requests.\n *\n * @returns {{\n *      type: REMOVE_PENDING_DEVICE_REQUESTS\n * }}\n */\nexport function removePendingDeviceRequests() {\n    return {\n        type: REMOVE_PENDING_DEVICE_REQUESTS\n    };\n}\n\n/**\n * Signals to update the currently used audio input device.\n *\n * @param {string} deviceId - The id of the new audio input device.\n * @returns {{\n *      type: SET_AUDIO_INPUT_DEVICE,\n *      deviceId: string\n * }}\n */\nexport function setAudioInputDevice(deviceId) {\n    return {\n        type: SET_AUDIO_INPUT_DEVICE,\n        deviceId\n    };\n}\n\n/**\n * Sets the audio input device id and updates the settings\n * so they are persisted across sessions.\n *\n * @param {string} deviceId - The id of the new audio input device.\n * @returns {Function}\n */\nexport function setAudioInputDeviceAndUpdateSettings(deviceId) {\n    return function(dispatch, getState) {\n        const deviceLabel = getDeviceLabelById(getState(), deviceId, 'audioInput');\n\n        dispatch(setAudioInputDevice(deviceId));\n        dispatch(updateSettings({\n            userSelectedMicDeviceId: deviceId,\n            userSelectedMicDeviceLabel: deviceLabel\n        }));\n    };\n}\n\n/**\n * Updates the output device id.\n *\n * @param {string} deviceId - The id of the new output device.\n * @returns {Function}\n */\nexport function setAudioOutputDevice(deviceId) {\n    return function(dispatch) {\n        return setAudioOutputDeviceId(deviceId, dispatch);\n    };\n}\n\n/**\n * Signals to update the currently used video input device.\n *\n * @param {string} deviceId - The id of the new video input device.\n * @returns {{\n *      type: SET_VIDEO_INPUT_DEVICE,\n *      deviceId: string\n * }}\n */\nexport function setVideoInputDevice(deviceId) {\n    return {\n        type: SET_VIDEO_INPUT_DEVICE,\n        deviceId\n    };\n}\n\n/**\n * Sets the video input device id and updates the settings\n * so they are persisted across sessions.\n *\n * @param {string} deviceId - The id of the new video input device.\n * @returns {Function}\n */\nexport function setVideoInputDeviceAndUpdateSettings(deviceId) {\n    return function(dispatch, getState) {\n        const deviceLabel = getDeviceLabelById(getState(), deviceId, 'videoInput');\n\n        dispatch(setVideoInputDevice(deviceId));\n        dispatch(updateSettings({\n            userSelectedCameraDeviceId: deviceId,\n            userSelectedCameraDeviceLabel: deviceLabel\n        }));\n    };\n}\n\n/**\n * Signals to update the list of known audio and video devices.\n *\n * @param {Array<MediaDeviceInfo>} devices - All known available audio input,\n * audio output, and video input devices.\n * @returns {{\n *      type: UPDATE_DEVICE_LIST,\n *      devices: Array<MediaDeviceInfo>\n * }}\n */\nexport function updateDeviceList(devices) {\n    return {\n        type: UPDATE_DEVICE_LIST,\n        devices\n    };\n}\n\n/**\n * Signals to check new and old devices for newly added devices and notify.\n *\n * @param {Array<MediaDeviceInfo>} newDevices - Array of the new devices.\n * @param {Array<MediaDeviceInfo>} oldDevices - Array of the old devices.\n * @returns {{\n *      type: CHECK_AND_NOTIFY_FOR_NEW_DEVICE,\n *      newDevices: Array<MediaDeviceInfo>,\n *      oldDevices: Array<MediaDeviceInfo>\n * }}\n */\nexport function checkAndNotifyForNewDevice(newDevices, oldDevices) {\n    return {\n        type: CHECK_AND_NOTIFY_FOR_NEW_DEVICE,\n        newDevices,\n        oldDevices\n    };\n}\n","/* global APP */\n\nimport { CONFERENCE_JOINED } from '../conference';\nimport { processExternalDeviceRequest } from '../../device-selection';\nimport { MiddlewareRegistry } from '../redux';\nimport UIEvents from '../../../../service/UI/UIEvents';\nimport { JitsiTrackErrors } from '../lib-jitsi-meet';\n\nimport {\n    removePendingDeviceRequests,\n    setAudioInputDevice,\n    setVideoInputDevice\n} from './actions';\nimport {\n    CHECK_AND_NOTIFY_FOR_NEW_DEVICE,\n    NOTIFY_CAMERA_ERROR,\n    NOTIFY_MIC_ERROR,\n    SET_AUDIO_INPUT_DEVICE,\n    SET_VIDEO_INPUT_DEVICE\n} from './actionTypes';\nimport { replaceAudioTrackById, replaceVideoTrackById } from '../../prejoin/actions';\nimport { isPrejoinPageVisible } from '../../prejoin/functions';\nimport { showNotification, showWarningNotification } from '../../notifications';\nimport { updateSettings } from '../settings';\nimport { formatDeviceLabel, setAudioOutputDeviceId } from './functions';\nimport logger from './logger';\n\nconst JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP = {\n    microphone: {\n        [JitsiTrackErrors.CONSTRAINT_FAILED]: 'dialog.micConstraintFailedError',\n        [JitsiTrackErrors.GENERAL]: 'dialog.micUnknownError',\n        [JitsiTrackErrors.NOT_FOUND]: 'dialog.micNotFoundError',\n        [JitsiTrackErrors.PERMISSION_DENIED]: 'dialog.micPermissionDeniedError'\n    },\n    camera: {\n        [JitsiTrackErrors.CONSTRAINT_FAILED]: 'dialog.cameraConstraintFailedError',\n        [JitsiTrackErrors.GENERAL]: 'dialog.cameraUnknownError',\n        [JitsiTrackErrors.NOT_FOUND]: 'dialog.cameraNotFoundError',\n        [JitsiTrackErrors.PERMISSION_DENIED]: 'dialog.cameraPermissionDeniedError',\n        [JitsiTrackErrors.UNSUPPORTED_RESOLUTION]: 'dialog.cameraUnsupportedResolutionError'\n    }\n};\n\n/**\n * Implements the middleware of the feature base/devices.\n *\n * @param {Store} store - Redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONFERENCE_JOINED:\n        return _conferenceJoined(store, next, action);\n    case NOTIFY_CAMERA_ERROR: {\n        if (typeof APP !== 'object' || !action.error) {\n            break;\n        }\n\n        const { message, name } = action.error;\n\n        const cameraJitsiTrackErrorMsg\n            = JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP.camera[name];\n        const cameraErrorMsg = cameraJitsiTrackErrorMsg\n            || JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP\n                .camera[JitsiTrackErrors.GENERAL];\n        const additionalCameraErrorMsg = cameraJitsiTrackErrorMsg ? null : message;\n\n        store.dispatch(showWarningNotification({\n            description: additionalCameraErrorMsg,\n            descriptionKey: cameraErrorMsg,\n            titleKey: name === JitsiTrackErrors.PERMISSION_DENIED\n                ? 'deviceError.cameraPermission' : 'deviceError.cameraError'\n        }));\n\n        break;\n    }\n    case NOTIFY_MIC_ERROR: {\n        if (typeof APP !== 'object' || !action.error) {\n            break;\n        }\n\n        const { message, name } = action.error;\n\n        const micJitsiTrackErrorMsg\n            = JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP.microphone[name];\n        const micErrorMsg = micJitsiTrackErrorMsg\n            || JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP\n                .microphone[JitsiTrackErrors.GENERAL];\n        const additionalMicErrorMsg = micJitsiTrackErrorMsg ? null : message;\n\n        store.dispatch(showWarningNotification({\n            description: additionalMicErrorMsg,\n            descriptionKey: micErrorMsg,\n            titleKey: name === JitsiTrackErrors.PERMISSION_DENIED\n                ? 'deviceError.microphonePermission'\n                : 'deviceError.microphoneError'\n        }));\n\n        break;\n    }\n    case SET_AUDIO_INPUT_DEVICE:\n        if (isPrejoinPageVisible(store.getState())) {\n            store.dispatch(replaceAudioTrackById(action.deviceId));\n        } else {\n            APP.UI.emitEvent(UIEvents.AUDIO_DEVICE_CHANGED, action.deviceId);\n        }\n        break;\n    case SET_VIDEO_INPUT_DEVICE:\n        if (isPrejoinPageVisible(store.getState())) {\n            store.dispatch(replaceVideoTrackById(action.deviceId));\n        } else {\n            APP.UI.emitEvent(UIEvents.VIDEO_DEVICE_CHANGED, action.deviceId);\n        }\n        break;\n    case CHECK_AND_NOTIFY_FOR_NEW_DEVICE:\n        _checkAndNotifyForNewDevice(store, action.newDevices, action.oldDevices);\n        break;\n    }\n\n    return next(action);\n});\n\n/**\n * Does extra sync up on properties that may need to be updated after the\n * conference was joined.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONFERENCE_JOINED} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _conferenceJoined({ dispatch, getState }, next, action) {\n    const result = next(action);\n    const state = getState();\n    const { pendingRequests } = state['features/base/devices'];\n\n    pendingRequests.forEach(request => {\n        processExternalDeviceRequest(\n            dispatch,\n            getState,\n            request,\n            request.responseCallback);\n    });\n    dispatch(removePendingDeviceRequests());\n\n    return result;\n}\n\n/**\n * Finds a new device by comparing new and old array of devices and dispatches\n * notification with the new device. For new devices with same groupId only one\n * notification will be shown, this is so to avoid showing multiple notifications\n * for audio input and audio output devices.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {MediaDeviceInfo[]} newDevices - The array of new devices we received.\n * @param {MediaDeviceInfo[]} oldDevices - The array of the old devices we have.\n * @private\n * @returns {void}\n */\nfunction _checkAndNotifyForNewDevice(store, newDevices, oldDevices) {\n    const { dispatch } = store;\n\n    // let's intersect both newDevices and oldDevices and handle thew newly\n    // added devices\n    const onlyNewDevices = newDevices.filter(\n        nDevice => !oldDevices.find(\n            device => device.deviceId === nDevice.deviceId));\n\n    // we group devices by groupID which normally is the grouping by physical device\n    // plugging in headset we provide normally two device, one input and one output\n    // and we want to show only one notification for this physical audio device\n    const devicesGroupBy = onlyNewDevices.reduce((accumulated, value) => {\n        accumulated[value.groupId] = accumulated[value.groupId] || [];\n        accumulated[value.groupId].push(value);\n\n        return accumulated;\n    }, {});\n\n    Object.values(devicesGroupBy).forEach(devicesArray => {\n\n        if (devicesArray.length < 1) {\n            return;\n        }\n\n        // let's get the first device as a reference, we will use it for\n        // label and type\n        const newDevice = devicesArray[0];\n\n        // we want to strip any device details that are not very\n        // user friendly, like usb ids put in brackets at the end\n        const description = formatDeviceLabel(newDevice.label);\n\n        let titleKey;\n\n        switch (newDevice.kind) {\n        case 'videoinput': {\n            titleKey = 'notify.newDeviceCameraTitle';\n            break;\n        }\n        case 'audioinput' :\n        case 'audiooutput': {\n            titleKey = 'notify.newDeviceAudioTitle';\n            break;\n        }\n        }\n\n        dispatch(showNotification({\n            description,\n            titleKey,\n            customActionNameKey: 'notify.newDeviceAction',\n            customActionHandler: _useDevice.bind(undefined, store, devicesArray)\n        }));\n    });\n}\n\n/**\n * Set a device to be currently used, selected by the user.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Array<MediaDeviceInfo|InputDeviceInfo>} devices - The devices to save.\n * @returns {boolean} - Returns true in order notifications to be dismissed.\n * @private\n */\nfunction _useDevice({ dispatch }, devices) {\n    devices.forEach(device => {\n        switch (device.kind) {\n        case 'videoinput': {\n            dispatch(updateSettings({\n                userSelectedCameraDeviceId: device.deviceId,\n                userSelectedCameraDeviceLabel: device.label\n            }));\n\n            dispatch(setVideoInputDevice(device.deviceId));\n            break;\n        }\n        case 'audioinput': {\n            dispatch(updateSettings({\n                userSelectedMicDeviceId: device.deviceId,\n                userSelectedMicDeviceLabel: device.label\n            }));\n\n            dispatch(setAudioInputDevice(device.deviceId));\n            break;\n        }\n        case 'audiooutput': {\n            setAudioOutputDeviceId(\n                device.deviceId,\n                dispatch,\n                true,\n                device.label)\n                .then(() => logger.log('changed audio output device'))\n                .catch(err => {\n                    logger.warn(\n                        'Failed to change audio output device.',\n                        'Default or previously set audio output device will',\n                        ' be used instead.',\n                        err);\n                });\n            break;\n        }\n        }\n    });\n\n    return true;\n}\n","import {\n    ADD_PENDING_DEVICE_REQUEST,\n    REMOVE_PENDING_DEVICE_REQUESTS,\n    SET_AUDIO_INPUT_DEVICE,\n    SET_VIDEO_INPUT_DEVICE,\n    UPDATE_DEVICE_LIST\n} from './actionTypes';\nimport { groupDevicesByKind } from './functions';\n\nimport { ReducerRegistry } from '../redux';\n\nimport logger from './logger';\n\nconst DEFAULT_STATE = {\n    availableDevices: {\n        audioInput: [],\n        audioOutput: [],\n        videoInput: []\n    },\n    pendingRequests: []\n};\n\n/**\n * Logs the current device list.\n *\n * @param {Object} deviceList - Whatever is returned by {@link groupDevicesByKind}.\n * @returns {string}\n */\nfunction logDeviceList(deviceList) {\n    const devicesToStr = list => list.map(device => `\\t\\t${device.label}[${device.deviceId}]`).join('\\n');\n    const audioInputs = devicesToStr(deviceList.audioInput);\n    const audioOutputs = devicesToStr(deviceList.audioOutput);\n    const videoInputs = devicesToStr(deviceList.videoInput);\n\n    logger.debug('Device list updated:\\n'\n        + `audioInput:\\n${audioInputs}\\n`\n        + `audioOutput:\\n${audioOutputs}\\n`\n        + `videoInput:\\n${videoInputs}`);\n}\n\n/**\n * Listen for actions which changes the state of known and used devices.\n *\n * @param {Object} state - The Redux state of the feature features/base/devices.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @param {Array<MediaDeviceInfo>} action.devices - All available audio and\n * video devices.\n * @returns {Object}\n */\nReducerRegistry.register(\n    'features/base/devices',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case UPDATE_DEVICE_LIST: {\n            const deviceList = groupDevicesByKind(action.devices);\n\n            logDeviceList(deviceList);\n\n            return {\n                ...state,\n                availableDevices: deviceList\n            };\n        }\n\n        case ADD_PENDING_DEVICE_REQUEST:\n            return {\n                ...state,\n                pendingRequests: [\n                    ...state.pendingRequests,\n                    action.request\n                ]\n            };\n\n        case REMOVE_PENDING_DEVICE_REQUESTS:\n            return {\n                ...state,\n                pendingRequests: [ ]\n            };\n\n        // TODO: Changing of current audio and video device id is currently handled outside of react/redux.\n        case SET_AUDIO_INPUT_DEVICE: {\n            logger.debug(`set audio input device: ${action.deviceId}`);\n\n            return state;\n        }\n        case SET_VIDEO_INPUT_DEVICE: {\n            logger.debug(`set video input device: ${action.deviceId}`);\n\n            return state;\n        }\n        default:\n            return state;\n        }\n    });\n\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import * as colors from './colors';\nimport themed from './utils/themed'; // Cards on a board\n\nexport var e100 = themed({\n  light: \"box-shadow: 0 1px 1px \".concat(colors.N50A, \", 0 0 1px 0 \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 1px 1px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Inline dialogs\n\nexport var e200 = themed({\n  light: \"box-shadow: 0 4px 8px -2px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 4px 8px -2px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Modals\n\nexport var e300 = themed({\n  light: \"box-shadow: 0 8px 16px -4px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 8px 16px -4px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Panels\n\nexport var e400 = themed({\n  light: \"box-shadow: 0 12px 24px -6px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 12px 24px -6px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Flag messages (notifications)\n\nexport var e500 = themed({\n  light: \"box-shadow: 0 20px 32px -8px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 20px 32px -8px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n});","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport { gridSize, fontSize } from './index';\n\nvar baseHeading = function baseHeading(size, lineHeight) {\n  return \"\\n  font-size: \".concat(size / fontSize(), \"em;\\n  font-style: inherit;\\n  line-height: \").concat(lineHeight / size, \";\\n\");\n};\n\nexport var h900 = function h900() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(35, 40), colors.heading, gridSize() * 6.5);\n};\nexport var h800 = function h800() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(29, 32), colors.heading, gridSize() * 5);\n};\nexport var h700 = function h700() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(24, 28), colors.heading, gridSize() * 5);\n};\nexport var h600 = function h600() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  margin-top: \", \"px;\\n\"], baseHeading(20, 24), colors.heading, gridSize() * 3.5);\n};\nexport var h500 = function h500() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.006em;\\n  margin-top: \", \"px;\\n\"], baseHeading(16, 20), colors.heading, gridSize() * 3);\n};\nexport var h400 = function h400() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.003em;\\n  margin-top: \", \"px;\\n\"], baseHeading(14, 16), colors.heading, gridSize() * 2);\n};\nexport var h300 = function h300() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n  text-transform: uppercase;\\n\"], baseHeading(12, 16), colors.heading, gridSize() * 2.5);\n};\nexport var h200 = function h200() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n\"], baseHeading(12, 16), colors.subtleHeading, gridSize() * 2);\n};\nexport var h100 = function h100() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 700;\\n  margin-top: \", \"px;\\n\"], baseHeading(11, 16), colors.subtleHeading, gridSize() * 2);\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nexport default (function (_ref) {\n  var children = _ref.children,\n      props = _ref.props,\n      theme = _ref.theme;\n  var appearance = _typeof(props) === 'object' ? 'default' : props;\n  var merged = _typeof(props) === 'object' ? _objectSpread({}, props) : {};\n  Object.keys(theme).forEach(function (key) {\n    if (!(key in merged)) {\n      merged[key] = theme[key]({\n        appearance: appearance\n      });\n    }\n  });\n  return children(merged);\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport * as colors from '../colors';\nimport { createTheme } from '../utils/createTheme';\n\nvar orTextColor = function orTextColor(preferred) {\n  return function (p) {\n    return p[preferred] || p.textColor;\n  };\n};\n\nvar Div = styled.div.withConfig({\n  displayName: \"Reset__Div\",\n  componentId: \"sc-15i6ali-0\"\n})([\"\\n  \", \";\\n\"], function (p) {\n  return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n\\n    a {\\n      color: \", \";\\n    }\\n    a:hover {\\n      color: \", \";\\n    }\\n    a:active {\\n      color: \", \";\\n    }\\n    a:focus {\\n      outline-color: \", \";\\n    }\\n    h1,\\n    h2,\\n    h3,\\n    h4,\\n    h5 {\\n      color: \", \";\\n    }\\n    h6 {\\n      color: \", \";\\n    }\\n    small {\\n      color: \", \";\\n    }\\n  \"], p.backgroundColor, p.textColor, orTextColor('linkColor'), orTextColor('linkColorHover'), orTextColor('linkColorActive'), orTextColor('linkColorOutline'), orTextColor('headingColor'), orTextColor('subtleHeadingColor'), orTextColor('subtleTextColor'));\n});\nexport var ResetTheme = createTheme(function () {\n  return {\n    backgroundColor: colors.N0,\n    linkColor: colors.B400,\n    linkColorHover: colors.B300,\n    linkColorActive: colors.B500,\n    linkColorOutline: colors.B100,\n    headingColor: colors.N800,\n    subtleHeadingColor: colors.N200,\n    subtleTextColor: colors.N200,\n    textColor: colors.N900\n  };\n});\nexport function Reset(props) {\n  return React.createElement(ResetTheme.Provider, {\n    value: props.theme\n  }, React.createElement(ResetTheme.Consumer, null, function (tokens) {\n    return React.createElement(Div, _extends({}, _objectSpread({}, tokens, {\n      mode: undefined\n    }), props), props.children);\n  }));\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React from 'react';\nimport Theme from './components/Theme'; // Pre-executes the theme and passes it as a prop to the supplied component.\n// This is useful for ensuring that the current theme is accessible as props\n// in styled-components.\n\nexport function withTheme(InnerComponent) {\n  return function ComponentWithTheme(props) {\n    return React.createElement(Theme.Consumer, null, function (tokens) {\n      return React.createElement(InnerComponent, _extends({}, props, {\n        theme: tokens\n      }));\n    });\n  };\n}","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","export default {\n    NICKNAME_CHANGED: 'UI.nickname_changed',\n\n    /**\n     * Notifies that local user changed email.\n     */\n    EMAIL_CHANGED: 'UI.email_changed',\n\n    /**\n     * Notifies that \"start muted\" settings changed.\n     */\n    AUDIO_MUTED: 'UI.audio_muted',\n    VIDEO_MUTED: 'UI.video_muted',\n    ETHERPAD_CLICKED: 'UI.etherpad_clicked',\n    SHARED_VIDEO_CLICKED: 'UI.start_shared_video',\n\n    /**\n     * Updates shared video with params: url, state, time(optional)\n     * Where url is the video link, state is stop/start/pause and time is the\n     * current video playing time.\n     */\n    UPDATE_SHARED_VIDEO: 'UI.update_shared_video',\n    TOGGLE_FULLSCREEN: 'UI.toogle_fullscreen',\n    FULLSCREEN_TOGGLED: 'UI.fullscreen_toggled',\n    AUTH_CLICKED: 'UI.auth_clicked',\n\n    /**\n     * Notifies that the audio only mode was toggled.\n     */\n    TOGGLE_AUDIO_ONLY: 'UI.toggle_audioonly',\n\n    /**\n     * Notifies that a command to toggle the filmstrip has been issued. The\n     * event may optionally specify a {Boolean} (primitive) value to assign to\n     * the visibility of the filmstrip (i.e. the event may act as a setter).\n     * The very toggling of the filmstrip may or may not occurred at the time\n     * of the receipt of the event depending on the position of the receiving\n     * event listener in relation to the event listener which carries out the\n     * command to toggle the filmstrip.\n     *\n     * @see {TOGGLED_FILMSTRIP}\n     */\n    TOGGLE_FILMSTRIP: 'UI.toggle_filmstrip',\n\n    TOGGLE_SCREENSHARING: 'UI.toggle_screensharing',\n    HANGUP: 'UI.hangup',\n    LOGOUT: 'UI.logout',\n    VIDEO_DEVICE_CHANGED: 'UI.video_device_changed',\n    AUDIO_DEVICE_CHANGED: 'UI.audio_device_changed',\n\n    /**\n     * Notifies that flipX property of the local video is changed.\n     */\n    LOCAL_FLIPX_CHANGED: 'UI.local_flipx_changed',\n\n    /**\n     * Notifies that the button \"Cancel\" is pressed on the dialog for\n     * external extension installation.\n     */\n    EXTERNAL_INSTALLATION_CANCELED: 'UI.external_installation_canceled',\n\n    /**\n     * Notifies that the side toolbar container has been toggled. The actual\n     * event must contain the identifier of the container that has been toggled\n     * and information about toggle on or off.\n     */\n    SIDE_TOOLBAR_CONTAINER_TOGGLED: 'UI.side_container_toggled',\n\n    /**\n     * Notifies that the raise hand has been changed.\n     */\n    LOCAL_RAISE_HAND_CHANGED: 'UI.local_raise_hand_changed',\n\n    /**\n     * Notifies that the avatar is displayed or not on the largeVideo.\n     */\n    LARGE_VIDEO_AVATAR_VISIBLE: 'UI.large_video_avatar_visible',\n\n    /**\n     * Notifies that the displayed particpant id on the largeVideo is changed.\n     */\n    LARGE_VIDEO_ID_CHANGED: 'UI.large_video_id_changed'\n};\n","/**\n * The type of (redux) action which signals that a specific App will mount (in\n * React terms).\n *\n * {\n *     type: APP_WILL_MOUNT,\n *     app: App\n * }\n */\nexport const APP_WILL_MOUNT = 'APP_WILL_MOUNT';\n\n/**\n * The type of (redux) action which signals that a specific App will unmount (in\n * React terms).\n *\n * {\n *     type: APP_WILL_UNMOUNT,\n *     app: App\n * }\n */\nexport const APP_WILL_UNMOUNT = 'APP_WILL_UNMOUNT';\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/app');\n","// @flow\n\nimport { jitsiLocalStorage } from 'js-utils';\nimport _ from 'lodash';\nimport React, { Component, Fragment } from 'react';\nimport { I18nextProvider } from 'react-i18next';\nimport { Provider } from 'react-redux';\nimport { compose, createStore } from 'redux';\nimport Thunk from 'redux-thunk';\n\nimport { i18next } from '../../i18n';\nimport {\n    MiddlewareRegistry,\n    ReducerRegistry,\n    StateListenerRegistry\n} from '../../redux';\nimport { SoundCollection } from '../../sounds';\nimport { PersistenceRegistry } from '../../storage';\nimport { appWillMount, appWillUnmount } from '../actions';\nimport logger from '../logger';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} state of {@link BaseApp}.\n */\ntype State = {\n\n    /**\n     * The {@code Route} rendered by the {@code BaseApp}.\n     */\n    route: Object,\n\n    /**\n     * The redux store used by the {@code BaseApp}.\n     */\n    store: Object\n};\n\n/**\n * Base (abstract) class for main App component.\n *\n * @abstract\n */\nexport default class BaseApp extends Component<*, State> {\n    _init: Promise<*>;\n\n    /**\n     * Initializes a new {@code BaseApp} instance.\n     *\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Object) {\n        super(props);\n\n        this.state = {\n            route: {},\n            store: undefined\n        };\n    }\n\n    /**\n     * Initializes the app.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        /**\n         * Make the mobile {@code BaseApp} wait until the {@code AsyncStorage}\n         * implementation of {@code Storage} initializes fully.\n         *\n         * @private\n         * @see {@link #_initStorage}\n         * @type {Promise}\n         */\n        this._init = this._initStorage()\n            .catch(err => {\n                /* BaseApp should always initialize! */\n                logger.error(err);\n            })\n            .then(() => new Promise(resolve => {\n                this.setState({\n                    store: this._createStore()\n                }, resolve);\n            }))\n            .then(() => this.state.store.dispatch(appWillMount(this)))\n            .catch(err => {\n                /* BaseApp should always initialize! */\n                logger.error(err);\n            });\n    }\n\n    /**\n     * De-initializes the app.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this.state.store.dispatch(appWillUnmount(this));\n    }\n\n    /**\n     * Delays this {@code BaseApp}'s startup until the {@code Storage}\n     * implementation of {@code localStorage} initializes. While the\n     * initialization is instantaneous on Web (with Web Storage API), it is\n     * asynchronous on mobile/react-native.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _initStorage(): Promise<*> {\n        const _initializing = jitsiLocalStorage.getItem('_initializing');\n\n        return _initializing || Promise.resolve();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { route: { component }, store } = this.state;\n\n        if (store) {\n            return (\n                <I18nextProvider i18n = { i18next }>\n                    <Provider store = { store }>\n                        <Fragment>\n                            { this._createMainElement(component) }\n                            <SoundCollection />\n                            { this._createExtraElement() }\n                            { this._renderDialogContainer() }\n                        </Fragment>\n                    </Provider>\n                </I18nextProvider>\n            );\n        }\n\n        return null;\n    }\n\n    /**\n     * Creates an extra {@link ReactElement}s to be added (unconditionaly)\n     * alongside the main element.\n     *\n     * @returns {ReactElement}\n     * @abstract\n     * @protected\n     */\n    _createExtraElement() {\n        return null;\n    }\n\n    /**\n     * Creates a {@link ReactElement} from the specified component, the\n     * specified props and the props of this {@code AbstractApp} which are\n     * suitable for propagation to the children of this {@code Component}.\n     *\n     * @param {Component} component - The component from which the\n     * {@code ReactElement} is to be created.\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the {@code ReactElement} is to be initialized.\n     * @returns {ReactElement}\n     * @protected\n     */\n    _createMainElement(component, props) {\n        return component ? React.createElement(component, props || {}) : null;\n    }\n\n    /**\n     * Initializes a new redux store instance suitable for use by this\n     * {@code AbstractApp}.\n     *\n     * @private\n     * @returns {Store} - A new redux store instance suitable for use by\n     * this {@code AbstractApp}.\n     */\n    _createStore() {\n        // Create combined reducer from all reducers in ReducerRegistry.\n        const reducer = ReducerRegistry.combineReducers();\n\n        // Apply all registered middleware from the MiddlewareRegistry and\n        // additional 3rd party middleware:\n        // - Thunk - allows us to dispatch async actions easily. For more info\n        // @see https://github.com/gaearon/redux-thunk.\n        let middleware = MiddlewareRegistry.applyMiddleware(Thunk);\n\n        // Try to enable Redux DevTools Chrome extension in order to make it\n        // available for the purposes of facilitating development.\n        let devToolsExtension;\n\n        if (typeof window === 'object'\n                && (devToolsExtension = window.devToolsExtension)) {\n            middleware = compose(middleware, devToolsExtension());\n        }\n\n        const store = createStore(\n            reducer, PersistenceRegistry.getPersistedState(), middleware);\n\n        // StateListenerRegistry\n        StateListenerRegistry.subscribe(store);\n\n        // This is temporary workaround to be able to dispatch actions from\n        // non-reactified parts of the code (conference.js for example).\n        // Don't use in the react code!!!\n        // FIXME: remove when the reactification is finished!\n        if (typeof APP !== 'undefined') {\n            APP.store = store;\n        }\n\n        return store;\n    }\n\n    /**\n     * Navigates to a specific Route.\n     *\n     * @param {Route} route - The Route to which to navigate.\n     * @returns {Promise}\n     */\n    _navigate(route): Promise<*> {\n        if (_.isEqual(route, this.state.route)) {\n            return Promise.resolve();\n        }\n\n        if (route.href) {\n            // This navigation requires loading a new URL in the browser.\n            window.location.href = route.href;\n\n            return Promise.resolve();\n        }\n\n        // XXX React's setState is asynchronous which means that the value of\n        // this.state.route above may not even be correct. If the check is\n        // performed before setState completes, the app may not navigate to the\n        // expected route. In order to mitigate the problem, _navigate was\n        // changed to return a Promise.\n        return new Promise(resolve => {\n            this.setState({ route }, resolve);\n        });\n    }\n\n    /**\n     * Renders the platform specific dialog container.\n     *\n     * @returns {React$Element}\n     */\n    _renderDialogContainer: () => React$Element<*>\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from './actionTypes';\n\ndeclare var APP;\n\n/**\n * Signals that a specific App will mount (in the terms of React).\n *\n * @param {App} app - The App which will mount.\n * @returns {{\n *     type: APP_WILL_MOUNT,\n *     app: App\n * }}\n */\nexport function appWillMount(app: Object) {\n    return (dispatch: Dispatch<any>) => {\n        // TODO There was a redux action creator appInit which I did not like\n        // because we already had the redux action creator appWillMount and,\n        // respectively, the redux action APP_WILL_MOUNT. So I set out to remove\n        // appInit and managed to move everything it was doing but the\n        // following. Which is not extremely bad because we haven't moved the\n        // API module into its own feature yet so we're bound to work on that in\n        // the future.\n        typeof APP === 'object' && APP.API.init();\n\n        dispatch({\n            type: APP_WILL_MOUNT,\n            app\n        });\n    };\n}\n\n/**\n * Signals that a specific App will unmount (in the terms of React).\n *\n * @param {App} app - The App which will unmount.\n * @returns {{\n *     type: APP_WILL_UNMOUNT,\n *     app: App\n * }}\n */\nexport function appWillUnmount(app: Object) {\n    return {\n        type: APP_WILL_UNMOUNT,\n        app\n    };\n}\n","// @flow\n\nimport { toState } from '../redux';\n\n/**\n * Gets the value of a specific React {@code Component} prop of the currently\n * mounted {@link App}.\n *\n * @param {Function|Object} stateful - The redux store or {@code getState}\n * function.\n * @param {string} propName - The name of the React {@code Component} prop of\n * the currently mounted {@code App} to get.\n * @returns {*} The value of the specified React {@code Compoennt} prop of the\n * currently mounted {@code App}.\n */\nexport function getAppProp(stateful: Function | Object, propName: string) {\n    const state = toState(stateful)['features/base/app'];\n\n    if (state) {\n        const { app } = state;\n\n        if (app) {\n            return app.props[propName];\n        }\n    }\n\n    return undefined;\n}\n","// @flow\n\nimport { ReducerRegistry } from '../redux';\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from './actionTypes';\n\nReducerRegistry.register('features/base/app', (state = {}, action) => {\n    switch (action.type) {\n    case APP_WILL_MOUNT: {\n        const { app } = action;\n\n        if (state.app !== app) {\n            return {\n                ...state,\n\n                /**\n                 * The one and only (i.e. singleton) {@link BaseApp} instance\n                 * which is currently mounted.\n                 *\n                 * @type {BaseApp}\n                 */\n                app\n            };\n        }\n        break;\n    }\n\n    case APP_WILL_UNMOUNT:\n        if (state.app === action.app) {\n            return {\n                ...state,\n                app: undefined\n            };\n        }\n        break;\n    }\n\n    return state;\n});\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './functions';\n\nimport './reducer';\n","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = [].concat(colorPalette8, [{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = [].concat(_toConsumableArray(colorPalette16), [{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import { SETTINGS_UPDATED } from './actionTypes';\n\n/**\n * Create an action for when the settings are updated.\n *\n * @param {Object} settings - The new (partial) settings properties.\n * @returns {{\n *     type: SETTINGS_UPDATED,\n *     settings: {\n *         audioOutputDeviceId: string,\n *         avatarID: string,\n *         avatarURL: string,\n *         cameraDeviceId: string,\n *         displayName: string,\n *         email: string,\n *         localFlipX: boolean,\n *         micDeviceId: string,\n *         serverURL: string,\n *         startAudioOnly: boolean,\n *         startWithAudioMuted: boolean,\n *         startWithVideoMuted: boolean\n *     }\n * }}\n */\nexport function updateSettings(settings) {\n    return {\n        type: SETTINGS_UPDATED,\n        settings\n    };\n}\n","// @flow\n\n/**\n * The default server URL to open if no other was specified.\n */\nexport const DEFAULT_SERVER_URL = 'https://meet.jit.si';\n","// @flow\nimport { CONFIG_WHITELIST } from '../config';\nimport { toState } from '../redux';\nimport { parseURLParams } from '../util';\n\nimport { DEFAULT_SERVER_URL } from './constants';\n\n/**\n * Returns the effective value of a configuration/preference/setting by applying\n * a precedence among the values specified by JWT, URL, settings,\n * and config.\n *\n * @param {Object|Function} stateful - The redux state object or\n * {@code getState} function.\n * @param {string} propertyName - The name of the\n * configuration/preference/setting (property) to retrieve.\n * @param {{\n *     config: boolean,\n *     jwt: boolean,\n *     settings: boolean,\n *     urlParams: boolean\n * }} [sources] - A set/structure of {@code boolean} flags indicating the\n * configuration/preference/setting sources to consider/retrieve values from.\n * @returns {any}\n */\nexport function getPropertyValue(\n        stateful: Object | Function,\n        propertyName: string,\n        sources?: Object\n) {\n    // Default values don't play nicely with partial objects and we want to make\n    // the function easy to use without exhaustively defining all flags:\n    sources = { // eslint-disable-line no-param-reassign\n        // Defaults:\n        config: true,\n        jwt: true,\n        settings: true,\n        urlParams: true,\n\n        ...sources\n    };\n\n    // Precedence: jwt -> urlParams -> settings -> config.\n\n    const state = toState(stateful);\n\n    // jwt\n    if (sources.jwt) {\n        const value = state['features/base/jwt'][propertyName];\n\n        if (typeof value !== 'undefined') {\n            return value[propertyName];\n        }\n    }\n\n    // urlParams\n    if (sources.urlParams) {\n        if (CONFIG_WHITELIST.indexOf(propertyName) !== -1) {\n            const urlParams\n                = parseURLParams(state['features/base/connection'].locationURL);\n            const value = urlParams[`config.${propertyName}`];\n\n            if (typeof value !== 'undefined') {\n                return value;\n            }\n        }\n    }\n\n    // settings\n    if (sources.settings) {\n        const value = state['features/base/settings'][propertyName];\n\n        if (typeof value !== 'undefined') {\n            return value;\n        }\n    }\n\n    // config\n    if (sources.config) {\n        const value = state['features/base/config'][propertyName];\n\n        if (typeof value !== 'undefined') {\n            return value;\n        }\n    }\n\n    return undefined;\n}\n\n/**\n * Gets the currently configured server URL.\n *\n * @param {Object|Function} stateful - The redux state object or\n * {@code getState} function.\n * @returns {string} - The currently configured server URL.\n */\nexport function getServerURL(stateful: Object | Function) {\n    const state = toState(stateful);\n\n    return state['features/base/settings'].serverURL || DEFAULT_SERVER_URL;\n}\n\n/**\n * Searches known devices for a matching deviceId and fall back to matching on\n * label. Returns the stored preferred cameraDeviceId if a match is not found.\n *\n * @param {Object|Function} stateful - The redux state object or\n * {@code getState} function.\n * @returns {string}\n */\nexport function getUserSelectedCameraDeviceId(stateful: Object | Function) {\n    const state = toState(stateful);\n    const {\n        userSelectedCameraDeviceId,\n        userSelectedCameraDeviceLabel\n    } = state['features/base/settings'];\n    const { videoInput } = state['features/base/devices'].availableDevices;\n\n    return _getUserSelectedDeviceId({\n        availableDevices: videoInput,\n\n        // Operating systems may append \" #{number}\" somewhere in the label so\n        // find and strip that bit.\n        matchRegex: /\\s#\\d*(?!.*\\s#\\d*)/,\n        userSelectedDeviceId: userSelectedCameraDeviceId,\n        userSelectedDeviceLabel: userSelectedCameraDeviceLabel,\n        replacement: ''\n    });\n}\n\n/**\n * Searches known devices for a matching deviceId and fall back to matching on\n * label. Returns the stored preferred micDeviceId if a match is not found.\n *\n * @param {Object|Function} stateful - The redux state object or\n * {@code getState} function.\n * @returns {string}\n */\nexport function getUserSelectedMicDeviceId(stateful: Object | Function) {\n    const state = toState(stateful);\n    const {\n        userSelectedMicDeviceId,\n        userSelectedMicDeviceLabel\n    } = state['features/base/settings'];\n    const { audioInput } = state['features/base/devices'].availableDevices;\n\n    return _getUserSelectedDeviceId({\n        availableDevices: audioInput,\n\n        // Operating systems may append \" ({number}-\" somewhere in the label so\n        // find and strip that bit.\n        matchRegex: /\\s\\(\\d*-\\s(?!.*\\s\\(\\d*-\\s)/,\n        userSelectedDeviceId: userSelectedMicDeviceId,\n        userSelectedDeviceLabel: userSelectedMicDeviceLabel,\n        replacement: ' ('\n    });\n}\n\n/**\n * Searches known devices for a matching deviceId and fall back to matching on\n * label. Returns the stored preferred audioOutputDeviceId if a match is not found.\n *\n * @param {Object|Function} stateful - The redux state object or\n * {@code getState} function.\n * @returns {string}\n */\nexport function getUserSelectedOutputDeviceId(stateful: Object | Function) {\n    const state = toState(stateful);\n    const {\n        userSelectedAudioOutputDeviceId,\n        userSelectedAudioOutputDeviceLabel\n    } = state['features/base/settings'];\n    const { audioOutput } = state['features/base/devices'].availableDevices;\n\n    return _getUserSelectedDeviceId({\n        availableDevices: audioOutput,\n        matchRegex: undefined,\n        userSelectedDeviceId: userSelectedAudioOutputDeviceId,\n        userSelectedDeviceLabel: userSelectedAudioOutputDeviceLabel,\n        replacement: undefined\n    });\n}\n\n/**\n * A helper function to abstract the logic for choosing which device ID to\n * use. Falls back to fuzzy matching on label if a device ID match is not found.\n *\n * @param {Object} options - The arguments used to match find the preferred\n * device ID from available devices.\n * @param {Array<string>} options.availableDevices - The array of currently\n * available devices to match against.\n * @param {Object} options.matchRegex - The regex to use to find strings\n * appended to the label by the operating system. The matches will be replaced\n * with options.replacement, with the intent of matching the same device that\n * might have a modified label.\n * @param {string} options.userSelectedDeviceId - The device ID the participant\n * prefers to use.\n * @param {string} options.userSelectedDeviceLabel - The label associated with the\n * device ID the participant prefers to use.\n * @param {string} options.replacement - The string to use with\n * options.matchRegex to remove identifies added to the label by the operating\n * system.\n * @private\n * @returns {string} The preferred device ID to use for media.\n */\nfunction _getUserSelectedDeviceId(options) {\n    const {\n        availableDevices,\n        matchRegex,\n        userSelectedDeviceId,\n        userSelectedDeviceLabel,\n        replacement\n    } = options;\n\n    // If there is no label at all, there is no need to fall back to checking\n    // the label for a fuzzy match.\n    if (!userSelectedDeviceLabel || !userSelectedDeviceId) {\n        return userSelectedDeviceId;\n    }\n\n    const foundMatchingBasedonDeviceId = availableDevices.find(\n        candidate => candidate.deviceId === userSelectedDeviceId);\n\n    // Prioritize matching the deviceId\n    if (foundMatchingBasedonDeviceId) {\n        return userSelectedDeviceId;\n    }\n\n    const strippedDeviceLabel\n        = matchRegex ? userSelectedDeviceLabel.replace(matchRegex, replacement)\n            : userSelectedDeviceLabel;\n    const foundMatchBasedOnLabel = availableDevices.find(candidate => {\n        const { label } = candidate;\n\n        if (!label) {\n            return false;\n        } else if (strippedDeviceLabel === label) {\n            return true;\n        }\n\n        const strippedCandidateLabel\n            = label.replace(matchRegex, replacement);\n\n        return strippedDeviceLabel === strippedCandidateLabel;\n    });\n\n    return foundMatchBasedOnLabel\n        ? foundMatchBasedOnLabel.deviceId : userSelectedDeviceId;\n}\n\n","// @flow\n\nexport * from './functions.any';\n\n/**\n * Returns the deviceId for the currently used camera.\n *\n * @param {Object} state - The state of the application.\n * @returns {void}\n */\nexport function getCurrentCameraDeviceId(state: Object) {\n    return state['features/base/settings'].cameraDeviceId;\n}\n\n/**\n * Returns the deviceId for the currently used microphone.\n *\n * @param {Object} state - The state of the application.\n * @returns {void}\n */\nexport function getCurrentMicDeviceId(state: Object) {\n    return state['features/base/settings'].micDeviceId;\n}\n\n/**\n * Returns the deviceId for the currently used speaker.\n *\n * @param {Object} state - The state of the application.\n * @returns {void}\n */\nexport function getCurrentOutputDeviceId(state: Object) {\n    return state['features/base/settings'].audioOutputDeviceId;\n}\n\n/**\n * Handles changes to the `disableCallIntegration` setting.\n * Noop on web.\n *\n * @param {boolean} disabled - Whether call integration is disabled or not.\n * @returns {void}\n */\nexport function handleCallIntegrationChange(disabled: boolean) { // eslint-disable-line no-unused-vars\n}\n\n/**\n * Handles changes to the `disableCrashReporting` setting.\n * Noop on web.\n *\n * @param {boolean} disabled - Whether crash reporting is disabled or not.\n * @returns {void}\n */\nexport function handleCrashReportingChange(disabled: boolean) { // eslint-disable-line no-unused-vars\n}\n","// @flow\nimport _ from 'lodash';\n\nimport { APP_WILL_MOUNT } from '../app';\nimport { setAudioOnly } from '../audio-only';\nimport { parseURLParams } from '../util';\nimport { SET_LOCATION_URL } from '../connection/actionTypes'; // minimize imports to avoid circular imports\nimport { getLocalParticipant, participantUpdated } from '../participants';\nimport { MiddlewareRegistry } from '../redux';\n\nimport { SETTINGS_UPDATED } from './actionTypes';\nimport { handleCallIntegrationChange, handleCrashReportingChange } from './functions';\n\n/**\n * The middleware of the feature base/settings. Distributes changes to the state\n * of base/settings to the states of other features computed from the state of\n * base/settings.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        _initializeCallIntegration(store);\n        break;\n    case SETTINGS_UPDATED:\n        _maybeHandleCallIntegrationChange(action);\n        _maybeSetAudioOnly(store, action);\n        _updateLocalParticipant(store, action);\n        _maybeCrashReportingChange(action);\n        break;\n    case SET_LOCATION_URL:\n        _updateLocalParticipantFromUrl(store);\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Initializes the audio device handler based on the `disableCallIntegration` setting.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _initializeCallIntegration({ getState }) {\n    const { disableCallIntegration } = getState()['features/base/settings'];\n\n    if (typeof disableCallIntegration === 'boolean') {\n        handleCallIntegrationChange(disableCallIntegration);\n    }\n}\n\n/**\n * Maps the settings field names to participant names where they don't match.\n * Currently there is only one such field, but may be extended in the future.\n *\n * @private\n * @param {string} settingsField - The name of the settings field to map.\n * @returns {string}\n */\nfunction _mapSettingsFieldToParticipant(settingsField) {\n    switch (settingsField) {\n    case 'displayName':\n        return 'name';\n    }\n\n    return settingsField;\n}\n\n/**\n * Handles a change in the `disableCallIntegration` setting.\n *\n * @param {Object} action - The redux action.\n * @private\n * @returns {void}\n */\nfunction _maybeHandleCallIntegrationChange({ settings: { disableCallIntegration } }) {\n    if (typeof disableCallIntegration === 'boolean') {\n        handleCallIntegrationChange(disableCallIntegration);\n    }\n}\n\n/**\n * Handles a change in the `disableCrashReporting` setting.\n *\n * @param {Object} action - The redux action.\n * @private\n * @returns {void}\n */\nfunction _maybeCrashReportingChange({ settings: { disableCrashReporting } }) {\n    if (typeof disableCrashReporting === 'boolean') {\n        handleCrashReportingChange(disableCrashReporting);\n    }\n}\n\n/**\n * Updates {@code startAudioOnly} flag if it's updated in the settings.\n *\n * @param {Store} store - The redux store.\n * @param {Object} action - The redux action.\n * @private\n * @returns {void}\n */\nfunction _maybeSetAudioOnly(\n        { dispatch },\n        { settings: { startAudioOnly } }) {\n    if (typeof startAudioOnly === 'boolean') {\n        dispatch(setAudioOnly(startAudioOnly, true));\n    }\n}\n\n/**\n * Updates the local participant according to settings changes.\n *\n * @param {Store} store - The redux store.\n * @param {Object} action - The dispatched action.\n * @private\n * @returns {void}\n */\nfunction _updateLocalParticipant({ dispatch, getState }, action) {\n    const { settings } = action;\n    const localParticipant = getLocalParticipant(getState());\n    const newLocalParticipant = {\n        ...localParticipant\n    };\n\n    for (const key in settings) {\n        if (settings.hasOwnProperty(key)) {\n            newLocalParticipant[_mapSettingsFieldToParticipant(key)]\n                = settings[key];\n        }\n    }\n\n    dispatch(participantUpdated(newLocalParticipant));\n}\n\n\n/**\n * Returns the userInfo set in the URL.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _updateLocalParticipantFromUrl({ dispatch, getState }) {\n    const urlParams\n        = parseURLParams(getState()['features/base/connection'].locationURL);\n    const urlEmail = urlParams['userInfo.email'];\n    const urlDisplayName = urlParams['userInfo.displayName'];\n\n    if (!urlEmail && !urlDisplayName) {\n        return;\n    }\n\n    const localParticipant = getLocalParticipant(getState());\n\n    if (localParticipant) {\n        dispatch(participantUpdated({\n            ...localParticipant,\n            email: _.escape(urlEmail),\n            name: _.escape(urlDisplayName)\n        }));\n    }\n}\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/settings');\n","// @flow\n\nimport { jitsiLocalStorage } from 'js-utils';\nimport { randomHexString } from 'js-utils/random';\nimport _ from 'lodash';\n\nimport { APP_WILL_MOUNT } from '../app';\nimport { browser } from '../lib-jitsi-meet';\nimport { ReducerRegistry } from '../redux';\nimport { PersistenceRegistry } from '../storage';\nimport { assignIfDefined } from '../util';\n\nimport { SETTINGS_UPDATED } from './actionTypes';\nimport logger from './logger';\n\n/**\n * The default/initial redux state of the feature {@code base/settings}.\n *\n * @type Object\n */\nconst DEFAULT_STATE = {\n    audioOutputDeviceId: undefined,\n    avatarID: undefined,\n    avatarURL: undefined,\n    cameraDeviceId: undefined,\n    disableCallIntegration: undefined,\n    disableCrashReporting: undefined,\n    disableP2P: undefined,\n    displayName: undefined,\n    email: undefined,\n    localFlipX: true,\n    micDeviceId: undefined,\n    serverURL: undefined,\n    startAudioOnly: false,\n    startWithAudioMuted: false,\n    startWithVideoMuted: false,\n    userSelectedAudioOutputDeviceId: undefined,\n    userSelectedCameraDeviceId: undefined,\n    userSelectedMicDeviceId: undefined,\n    userSelectedAudioOutputDeviceLabel: undefined,\n    userSelectedCameraDeviceLabel: undefined,\n    userSelectedMicDeviceLabel: undefined\n};\n\nconst STORE_NAME = 'features/base/settings';\n\n/**\n * Sets up the persistence of the feature {@code base/settings}.\n */\nconst filterSubtree = {};\n\n// start with the default state\nObject.keys(DEFAULT_STATE).forEach(key => {\n    filterSubtree[key] = true;\n});\n\n// we want to filter these props, to not be stored as they represent\n// what is currently opened/used as devices\nfilterSubtree.audioOutputDeviceId = false;\nfilterSubtree.cameraDeviceId = false;\nfilterSubtree.micDeviceId = false;\n\nPersistenceRegistry.register(STORE_NAME, filterSubtree);\n\nReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        return _initSettings(state);\n\n    case SETTINGS_UPDATED:\n        return {\n            ...state,\n            ...action.settings\n        };\n    }\n\n    return state;\n});\n\n/**\n * Retrieves the legacy profile values regardless of it's being in pre or\n * post-flattening format.\n *\n * FIXME: Let's remove this after a predefined time (e.g. By July 2018) to avoid\n * garbage in the source.\n *\n * @private\n * @returns {Object}\n */\nfunction _getLegacyProfile() {\n    let persistedProfile = jitsiLocalStorage.getItem('features/base/profile');\n\n    if (persistedProfile) {\n        try {\n            persistedProfile = JSON.parse(persistedProfile);\n\n            if (persistedProfile && typeof persistedProfile === 'object') {\n                const preFlattenedProfile = persistedProfile.profile;\n\n                return preFlattenedProfile || persistedProfile;\n            }\n        } catch (e) {\n            logger.warn('Error parsing persisted legacy profile', e);\n        }\n    }\n\n    return {};\n}\n\n/**\n * Inits the settings object based on what information we have available.\n * Info taken into consideration:\n *   - Old Settings.js style data\n *   - Things that we stored in profile earlier but belong here.\n *\n * @private\n * @param {Object} featureState - The current state of the feature.\n * @returns {Object}\n */\nfunction _initSettings(featureState) {\n    let settings = featureState;\n\n    // Old Settings.js values\n    // FIXME: jibri uses old settings.js local storage values to set its display\n    // name and email. Provide another way for jibri to set these values, update\n    // jibri, and remove the old settings.js values.\n    const savedDisplayName = jitsiLocalStorage.getItem('displayname');\n    const savedEmail = jitsiLocalStorage.getItem('email');\n    let avatarID = _.escape(jitsiLocalStorage.getItem('avatarId'));\n\n    // The helper _.escape will convert null to an empty strings. The empty\n    // string will be saved in settings. On app re-load, because an empty string\n    // is a defined value, it will override any value found in local storage.\n    // The workaround is sidestepping _.escape when the value is not set in\n    // local storage.\n    const displayName\n        = savedDisplayName === null ? undefined : _.escape(savedDisplayName);\n    const email = savedEmail === null ? undefined : _.escape(savedEmail);\n\n    if (!avatarID) {\n        // if there is no avatar id, we generate a unique one and use it forever\n        avatarID = randomHexString(32);\n    }\n\n    settings = assignIfDefined({\n        avatarID,\n        displayName,\n        email\n    }, settings);\n\n    if (!browser.isReactNative()) {\n        // Browser only\n        const localFlipX = JSON.parse(jitsiLocalStorage.getItem('localFlipX') || 'true');\n        const cameraDeviceId = jitsiLocalStorage.getItem('cameraDeviceId') || '';\n        const micDeviceId = jitsiLocalStorage.getItem('micDeviceId') || '';\n\n        // Currently audio output device change is supported only in Chrome and\n        // default output always has 'default' device ID\n        const audioOutputDeviceId = jitsiLocalStorage.getItem('audioOutputDeviceId') || 'default';\n\n        settings = assignIfDefined({\n            audioOutputDeviceId,\n            cameraDeviceId,\n            localFlipX,\n            micDeviceId\n        }, settings);\n    }\n\n    // Things we stored in profile earlier\n    const legacyProfile = _getLegacyProfile();\n\n    settings = assignIfDefined(legacyProfile, settings);\n\n    return settings;\n}\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './constants';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","/**\n * The type of (redux) action which signals that server authentication has\n * becoming available or unavailable or logged in user has changed.\n *\n * {\n *     type: AUTH_STATUS_CHANGED,\n *     authEnabled: boolean,\n *     authLogin: string\n * }\n */\nexport const AUTH_STATUS_CHANGED = 'AUTH_STATUS_CHANGED';\n\n/**\n * The type of (redux) action which signals that a specific conference failed.\n *\n * {\n *     type: CONFERENCE_FAILED,\n *     conference: JitsiConference,\n *     error: Error\n * }\n */\nexport const CONFERENCE_FAILED = 'CONFERENCE_FAILED';\n\n/**\n * The type of (redux) action which signals that a specific conference was\n * joined.\n *\n * {\n *     type: CONFERENCE_JOINED,\n *     conference: JitsiConference\n * }\n */\nexport const CONFERENCE_JOINED = 'CONFERENCE_JOINED';\n\n/**\n * The type of (redux) action which signals that a specific conference was left.\n *\n * {\n *     type: CONFERENCE_LEFT,\n *     conference: JitsiConference\n * }\n */\nexport const CONFERENCE_LEFT = 'CONFERENCE_LEFT';\n\n/**\n * The type of (redux) action, which indicates conference subject changes.\n *\n * {\n *     type: CONFERENCE_SUBJECT_CHANGED\n *     subject: string\n * }\n */\nexport const CONFERENCE_SUBJECT_CHANGED = 'CONFERENCE_SUBJECT_CHANGED';\n\n/**\n* The type of (redux) action, which indicates conference UTC timestamp changes.\n*\n* {\n*      type: CONFERENCE_TIMESTAMP_CHANGED\n*      timestamp: number\n* }\n*/\nexport const CONFERENCE_TIMESTAMP_CHANGED = 'CONFERENCE_TIMESTAMP_CHANGED';\n\n/**\n * The type of (redux) action which signals that a specific conference will be\n * joined.\n *\n * {\n *     type: CONFERENCE_WILL_JOIN,\n *     conference: JitsiConference\n * }\n */\nexport const CONFERENCE_WILL_JOIN = 'CONFERENCE_WILL_JOIN';\n\n/**\n * The type of (redux) action which signals that a specific conference will be\n * left.\n *\n * {\n *     type: CONFERENCE_WILL_LEAVE,\n *     conference: JitsiConference\n * }\n */\nexport const CONFERENCE_WILL_LEAVE = 'CONFERENCE_WILL_LEAVE';\n\n/**\n * The type of (redux) action which signals that the data channel with the\n * bridge has been established.\n *\n * {\n *     type: DATA_CHANNEL_OPENED\n * }\n */\nexport const DATA_CHANNEL_OPENED = 'DATA_CHANNEL_OPENED';\n\n/**\n * The type of action which signals that the user has been kicked out from\n * the conference.\n *\n * {\n *     type: KICKED_OUT,\n *     conference: JitsiConference\n * }\n */\nexport const KICKED_OUT = 'KICKED_OUT';\n\n/**\n * The type of (redux) action which signals that the lock state of a specific\n * {@code JitsiConference} changed.\n *\n * {\n *     type: LOCK_STATE_CHANGED,\n *     conference: JitsiConference,\n *     locked: boolean\n * }\n */\nexport const LOCK_STATE_CHANGED = 'LOCK_STATE_CHANGED';\n\n/**\n * The type of (redux) action which sets the peer2peer flag for the current\n * conference.\n *\n * {\n *     type: P2P_STATUS_CHANGED,\n *     p2p: boolean\n * }\n */\nexport const P2P_STATUS_CHANGED = 'P2P_STATUS_CHANGED';\n\n/**\n * The type of (redux) action which signals to play specified touch tones.\n *\n * {\n *     type: SEND_TONES,\n *     tones: string,\n *     duration: number,\n *     pause: number\n * }\n */\nexport const SEND_TONES = 'SEND_TONES';\n\n/**\n * The type of (redux) action which sets the desktop sharing enabled flag for\n * the current conference.\n *\n * {\n *     type: SET_DESKTOP_SHARING_ENABLED,\n *     desktopSharingEnabled: boolean\n * }\n */\nexport const SET_DESKTOP_SHARING_ENABLED\n    = 'SET_DESKTOP_SHARING_ENABLED';\n\n/**\n * The type of (redux) action which updates the current known status of the\n * Follow Me feature.\n *\n * {\n *     type: SET_FOLLOW_ME,\n *     enabled: boolean\n * }\n */\nexport const SET_FOLLOW_ME = 'SET_FOLLOW_ME';\n\n/**\n * The type of (redux) action which sets the maximum video height that should be\n * received from remote participants, even if the user prefers a larger video\n * height.\n *\n * {\n *     type: SET_MAX_RECEIVER_VIDEO_QUALITY,\n *     maxReceiverVideoQuality: number\n * }\n */\nexport const SET_MAX_RECEIVER_VIDEO_QUALITY\n    = 'SET_MAX_RECEIVER_VIDEO_QUALITY';\n\n/**\n * The type of (redux) action which sets the password to join or lock a specific\n * {@code JitsiConference}.\n *\n * {\n *     type: SET_PASSWORD,\n *     conference: JitsiConference,\n *     method: Function\n *     password: string\n * }\n */\nexport const SET_PASSWORD = 'SET_PASSWORD';\n\n/**\n * The type of (redux) action which signals that setting a password on a\n * {@code JitsiConference} failed (with an error).\n *\n * {\n *     type: SET_PASSWORD_FAILED,\n *     error: string\n * }\n */\nexport const SET_PASSWORD_FAILED = 'SET_PASSWORD_FAILED';\n\n/**\n * The type of (redux) action which signals for pending subject changes.\n *\n * {\n *     type: SET_PENDING_SUBJECT_CHANGE,\n *     subject: string\n * }\n */\nexport const SET_PENDING_SUBJECT_CHANGE = 'SET_PENDING_SUBJECT_CHANGE';\n\n/**\n * The type of (redux) action which sets the preferred maximum video height that\n * should be sent to and received from remote participants.\n *\n * {\n *     type: SET_PREFERRED_VIDEO_QUALITY,\n *     preferredVideoQuality: number\n * }\n */\nexport const SET_PREFERRED_VIDEO_QUALITY = 'SET_PREFERRED_VIDEO_QUALITY';\n\n/**\n * The type of (redux) action which sets the name of the room of the\n * conference to be joined.\n *\n * {\n *     type: SET_ROOM,\n *     room: string\n * }\n */\nexport const SET_ROOM = 'SET_ROOM';\n\n/**\n * The type of (redux) action, which indicates if a SIP gateway is enabled on\n * the server.\n *\n * {\n *     type: SET_SIP_GATEWAY_ENABLED\n *     isSIPGatewayEnabled: boolean\n * }\n */\nexport const SET_SIP_GATEWAY_ENABLED = 'SET_SIP_GATEWAY_ENABLED';\n\n/**\n * The type of (redux) action which updates the current known status of the\n * moderator features for starting participants as audio or video muted.\n *\n * {\n *     type: SET_START_MUTED_POLICY,\n *     startAudioMutedPolicy: boolean,\n *     startVideoMutedPolicy: boolean\n * }\n */\nexport const SET_START_MUTED_POLICY = 'SET_START_MUTED_POLICY';\n","// @flow\n\nimport { Component } from 'react';\n\nimport type { StyleType } from '../../styles';\n\nexport type Styles = {\n\n    /**\n     * Style for the item's icon.\n     */\n    iconStyle: StyleType,\n\n    /**\n     * Style for the item's label.\n     */\n    labelStyle: StyleType,\n\n    /**\n     * Style for the item itself.\n     */\n    style: StyleType,\n\n    /**\n     * Color for the item underlay (shows when clicked).\n     */\n    underlayColor: ?string\n};\n\nexport type Props = {\n\n    /**\n     * A succinct description of what the item does. Used by accessibility\n     * tools and torture tests.\n     */\n    accessibilityLabel: string,\n\n    /**\n     * Whether this item is disabled or not. When disabled, clicking an the item\n     * has no effect, and it may reflect on its style.\n     */\n    disabled: boolean,\n\n    /**\n     * A React Element to display at the end of {@code ToolboxItem}.\n     */\n    elementAfter?: React$Node,\n\n    /**\n     * The icon to render for this {@code ToolboxItem}.\n     */\n    icon: Object,\n\n    /**\n     * The text associated with this item. When `showLabel` is set to\n     * {@code true}, it will be displayed alongside the icon.\n     */\n    label: string,\n\n    /**\n     * On click handler.\n     */\n    onClick: Function,\n\n    /**\n     * Whether to show the label or not.\n     */\n    showLabel: boolean,\n\n    /**\n     * Collection of styles for the item. Used only on native.\n     */\n    styles: ?Styles,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: ?Function,\n\n    /**\n     * True if the item is toggled, false otherwise.\n     */\n    toggled: boolean,\n\n    /**\n     * The text to display in the tooltip. Used only on web.\n     */\n    tooltip: ?string,\n\n    /**\n     * From which direction the tooltip should appear, relative to the\n     * item. Used only on web.\n     */\n    tooltipPosition: string,\n\n    /**\n     * Whether this item is visible or not.\n     */\n    visible: boolean\n};\n\n/**\n * Abstract (base) class for an item in {@link Toolbox}. The item can be located\n * anywhere in the {@link Toolbox}, it will morph its shape to accommodate it.\n *\n * @abstract\n */\nexport default class AbstractToolboxItem<P : Props> extends Component<P> {\n    /**\n     * Default values for {@code AbstractToolboxItem} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        disabled: false,\n        label: '',\n        showLabel: false,\n        t: undefined,\n        tooltip: '',\n        tooltipPosition: 'top',\n        visible: true\n    };\n\n    /**\n     * Initializes a new {@code AbstractToolboxItem} instance.\n     *\n     * @param {Object} props - The React {@code Component} props to initialize\n     * the new {@code AbstractToolboxItem} instance with.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Helper property to get the item label. If a translation function was\n     * provided then it will be translated using it.\n     *\n     * @protected\n     * @returns {?string}\n     */\n    get label(): ?string {\n        return this._maybeTranslateAttribute(this.props.label);\n    }\n\n    /**\n     * Helper property to get the item tooltip. If a translation function was\n     * provided then it will be translated using it.\n     *\n     * @protected\n     * @returns {?string}\n     */\n    get tooltip(): ?string {\n        return this._maybeTranslateAttribute(this.props.tooltip);\n    }\n\n    /**\n     * Helper property to get the item accessibilityLabel. If a translation\n     * function was provided then it will be translated using it.\n     *\n     * @protected\n     * @returns {?string}\n     */\n    get accessibilityLabel(): ?string {\n        return this._maybeTranslateAttribute(this.props.accessibilityLabel);\n    }\n\n    /**\n     * Utility function to translate the given string, if a translation\n     * function is available.\n     *\n     * @param {string} text - What needs translating.\n     * @private\n     * @returns {string}\n     */\n    _maybeTranslateAttribute(text) {\n        const { t } = this.props;\n\n        return typeof t === 'function' ? t(text) : text;\n    }\n\n    _onClick: (*) => void;\n\n    /**\n     * Handles clicking/pressing this {@code AbstractToolboxItem} by\n     * forwarding the event to the {@code onClick} prop of this instance if any.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _onClick(...args) {\n        const { disabled, onClick } = this.props;\n\n        disabled || (onClick && onClick(...args));\n    }\n\n    /**\n     * Renders this {@code AbstractToolboxItem} (if it is {@code visible}). To\n     * be implemented/overridden by extenders. The default implementation of\n     * {@code AbstractToolboxItem} does nothing.\n     *\n     * @protected\n     * @returns {ReactElement}\n     */\n    _renderItem() {\n        // To be implemented by a subclass.\n        return null;\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return this.props.visible ? this._renderItem() : null;\n    }\n}\n","// @flow\n\nimport Tooltip from '@atlaskit/tooltip';\nimport React, { Fragment } from 'react';\n\nimport { Icon } from '../../icons';\n\nimport AbstractToolboxItem from './AbstractToolboxItem';\nimport type { Props } from './AbstractToolboxItem';\n\n/**\n * Web implementation of {@code AbstractToolboxItem}.\n */\nexport default class ToolboxItem extends AbstractToolboxItem<Props> {\n    /**\n     * Handles rendering of the actual item. If the label is being shown, which\n     * is controlled with the `showLabel` prop, the item is rendered for its\n     * display in an overflow menu, otherwise it will only have an icon, which\n     * can be displayed on any toolbar.\n     *\n     * @protected\n     * @returns {ReactElement}\n     */\n    _renderItem() {\n        const {\n            disabled,\n            elementAfter,\n            onClick,\n            showLabel,\n            tooltipPosition\n        } = this.props;\n        const className = showLabel ? 'overflow-menu-item' : 'toolbox-button';\n        const props = {\n            'aria-label': this.accessibilityLabel,\n            className: className + (disabled ? ' disabled' : ''),\n            onClick: disabled ? undefined : onClick\n        };\n        const elementType = showLabel ? 'li' : 'div';\n        const useTooltip = this.tooltip && this.tooltip.length > 0;\n        let children = (\n            <Fragment>\n                { this._renderIcon() }\n                { showLabel && <span>\n                    { this.label }\n                </span> }\n                { elementAfter }\n            </Fragment>\n        );\n\n        if (useTooltip) {\n            children = (\n                <Tooltip\n                    content = { this.tooltip }\n                    position = { tooltipPosition }>\n                    { children }\n                </Tooltip>\n            );\n        }\n\n        return React.createElement(elementType, props, children);\n    }\n\n    /**\n     * Helper function to render the item's icon.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderIcon() {\n        const { disabled, icon, showLabel, toggled } = this.props;\n        const iconComponent = <Icon src = { icon } />;\n        const elementType = showLabel ? 'span' : 'div';\n        const className = `${showLabel ? 'overflow-menu-item-icon' : 'toolbox-icon'} ${\n            toggled ? 'toggled' : ''} ${disabled ? 'disabled' : ''}`;\n\n        return React.createElement(elementType, { className }, iconComponent);\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { combineStyles } from '../../styles';\n\nimport type { Styles } from './AbstractToolboxItem';\nimport ToolboxItem from './ToolboxItem';\n\nexport type Props = {\n\n    /**\n     * Function to be called after the click handler has been processed.\n     */\n    afterClick: ?Function,\n\n    /**\n     * Extra styles which will be applied in conjunction with `styles` or\n     * `toggledStyles` when the button is disabled;\n     */\n    disabledStyles: ?Styles,\n\n    /**\n     * Whether to show the label or not.\n     */\n    showLabel: boolean,\n\n    /**\n     * Collection of styles for the button.\n     */\n    styles: ?Styles,\n\n    /**\n     * Collection of styles for the button, when in toggled state.\n     */\n    toggledStyles: ?Styles,\n\n    /**\n     * From which direction the tooltip should appear, relative to the button.\n     */\n    tooltipPosition: string,\n\n    /**\n     * Whether this button is visible or not.\n     */\n    visible: boolean\n};\n\n/**\n * Default style for disabled buttons.\n */\nexport const defaultDisabledButtonStyles = {\n    iconStyle: {\n        opacity: 0.5\n    },\n    labelStyle: {\n        opacity: 0.5\n    },\n    style: undefined,\n    underlayColor: undefined\n};\n\n/**\n * An abstract implementation of a button.\n */\nexport default class AbstractButton<P: Props, S: *> extends Component<P, S> {\n    static defaultProps = {\n        afterClick: undefined,\n        disabledStyles: defaultDisabledButtonStyles,\n        showLabel: false,\n        styles: undefined,\n        toggledStyles: undefined,\n        tooltipPosition: 'top',\n        visible: true\n    };\n\n    /**\n     * A succinct description of what the button does. Used by accessibility\n     * tools and torture tests.\n     *\n     * @abstract\n     */\n    accessibilityLabel: string;\n\n    /**\n     * The icon of this button.\n     *\n     * @abstract\n     */\n    icon: Object;\n\n    /**\n     * The text associated with this button. When `showLabel` is set to\n     * {@code true}, it will be displayed alongside the icon.\n     *\n     * @abstract\n     */\n    label: string;\n\n    /**\n     * The label for this button, when toggled.\n     */\n    toggledLabel: string;\n\n    /**\n     * The icon of this button, when toggled.\n     *\n     * @abstract\n     */\n    toggledIcon: Object;\n\n    /**\n     * The text to display in the tooltip. Used only on web.\n     *\n     * @abstract\n     */\n    tooltip: ?string;\n\n    /**\n     * Initializes a new {@code AbstractButton} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code AbstractButton} instance with.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which should be used\n     * to handle the button being clicked / pressed.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        // To be implemented by subclass.\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which may return a\n     * new React Element to be appended at the end of the button.\n     *\n     * @protected\n     * @returns {ReactElement|null}\n     */\n    _getElementAfter() {\n        return null;\n    }\n\n    /**\n     * Gets the current icon, taking the toggled state into account. If no\n     * toggled icon is provided, the regular icon will also be used in the\n     * toggled state.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getIcon() {\n        return (\n            this._isToggled() ? this.toggledIcon : this.icon\n        ) || this.icon;\n    }\n\n    /**\n     * Gets the current label, taking the toggled state into account. If no\n     * toggled label is provided, the regular label will also be used in the\n     * toggled state.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getLabel() {\n        return (this._isToggled() ? this.toggledLabel : this.label)\n            || this.label;\n    }\n\n    /**\n     * Gets the current styles, taking the toggled state into account. If no\n     * toggled styles are provided, the regular styles will also be used in the\n     * toggled state.\n     *\n     * @private\n     * @returns {?Styles}\n     */\n    _getStyles(): ?Styles {\n        const { disabledStyles, styles, toggledStyles } = this.props;\n        const buttonStyles\n            = (this._isToggled() ? toggledStyles : styles) || styles;\n\n        if (this._isDisabled() && buttonStyles && disabledStyles) {\n            return {\n                iconStyle: combineStyles(\n                    buttonStyles.iconStyle, disabledStyles.iconStyle),\n                labelStyle: combineStyles(\n                    buttonStyles.labelStyle, disabledStyles.labelStyle),\n                style: combineStyles(\n                    buttonStyles.style, disabledStyles.style),\n                underlayColor:\n                    disabledStyles.underlayColor || buttonStyles.underlayColor\n            };\n        }\n\n        return buttonStyles;\n    }\n\n    /**\n     * Get the tooltip to display when hovering over the button.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getTooltip() {\n        return this.tooltip || '';\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * boolean value indicating if this button is disabled or not.\n     *\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return false;\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * {@code boolean} value indicating if this button is toggled or not.\n     *\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return false;\n    }\n\n    _onClick: (*) => void;\n\n    /**\n     * Handles clicking / pressing the button, and toggles the audio mute state\n     * accordingly.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClick() {\n        const { afterClick } = this.props;\n\n        this._handleClick();\n        afterClick && afterClick();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {React$Node}\n     */\n    render(): React$Node {\n        const props = {\n            ...this.props,\n            accessibilityLabel: this.accessibilityLabel,\n            disabled: this._isDisabled(),\n            elementAfter: this._getElementAfter(),\n            icon: this._getIcon(),\n            label: this._getLabel(),\n            styles: this._getStyles(),\n            toggled: this._isToggled(),\n            tooltip: this._getTooltip()\n        };\n\n        return (\n            <ToolboxItem\n                disabled = { this._isDisabled() }\n                onClick = { this._onClick }\n                { ...props } />\n        );\n    }\n}\n","// @flow\n\nimport { IconMicDisabled, IconMicrophone } from '../../icons';\n\nimport AbstractButton from './AbstractButton';\nimport type { Props } from './AbstractButton';\n\n/**\n * An abstract implementation of a button for toggling audio mute.\n */\nexport default class AbstractAudioMuteButton<P: Props, S: *>\n    extends AbstractButton<P, S> {\n\n    icon = IconMicrophone;\n    toggledIcon = IconMicDisabled;\n\n    /**\n     * Handles clicking / pressing the button, and toggles the audio mute state\n     * accordingly.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        this._setAudioMuted(!this._isAudioMuted());\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * boolean value indicating if audio is muted or not.\n     *\n     * @protected\n     * @returns {boolean}\n     */\n    _isAudioMuted() {\n        // To be implemented by subclass.\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this._isAudioMuted();\n    }\n\n    /**\n     * Helper function to perform the actual setting of the audio mute / unmute\n     * action.\n     *\n     * @param {boolean} audioMuted - Whether video should be muted or not.\n     * @protected\n     * @returns {void}\n     */\n    _setAudioMuted(audioMuted: boolean) { // eslint-disable-line no-unused-vars\n        // To be implemented by subclass.\n    }\n}\n","// @flow\n\nimport { IconHangup } from '../../icons';\n\nimport AbstractButton from './AbstractButton';\nimport type { Props } from './AbstractButton';\n\n/**\n * An abstract implementation of a button for disconnecting a conference.\n */\nexport default class AbstractHangupButton<P : Props, S: *>\n    extends AbstractButton<P, S> {\n\n    icon = IconHangup;\n\n    /**\n     * Handles clicking / pressing the button, and disconnects the conference.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        this._doHangup();\n    }\n\n    /**\n     * Helper function to perform the actual hangup action.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _doHangup() {\n        // To be implemented by subclass.\n    }\n}\n","// @flow\n\nimport { IconCamera, IconCameraDisabled } from '../../icons';\n\nimport AbstractButton from './AbstractButton';\nimport type { Props } from './AbstractButton';\n\n/**\n * An abstract implementation of a button for toggling video mute.\n */\nexport default class AbstractVideoMuteButton<P : Props, S : *>\n    extends AbstractButton<P, S> {\n\n    icon = IconCamera;\n    toggledIcon = IconCameraDisabled;\n\n    /**\n     * Handles clicking / pressing the button, and toggles the video mute state\n     * accordingly.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        this._setVideoMuted(!this._isVideoMuted());\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this._isVideoMuted();\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * {@code boolean} value indicating if video is muted or not.\n     *\n     * @protected\n     * @returns {boolean}\n     */\n    _isVideoMuted() {\n        // To be implemented by subclass.\n    }\n\n    /**\n     * Helper function to perform the actual setting of the video mute / unmute\n     * action.\n     *\n     * @param {boolean} videoMuted - Whether video should be muted or not.\n     * @protected\n     * @returns {void}\n     */\n    _setVideoMuted(videoMuted: boolean) { // eslint-disable-line no-unused-vars\n        // To be implemented by subclass.\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../i18n';\nimport { Container, Text } from '../../react';\n\ntype Props = {\n    t: Function\n};\n\n/**\n * Creates a ReactElement for showing a ToolboxItem is for a beta feature.\n *\n * @extends {Component}\n */\nclass BetaTag extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Container className = 'beta-tag'>\n                <Text>\n                    { this.props.t('recording.beta') }\n                </Text>\n            </Container>\n        );\n    }\n}\n\nexport default translate(BetaTag);\n","// @flow\n\nimport Tooltip from '@atlaskit/tooltip';\nimport React, { Component } from 'react';\n\nimport { Icon } from '../../icons';\n\n/**\n * The type of the React {@code Component} props of {@link OverflowMenuItem}.\n */\ntype Props = {\n\n    /**\n     * A succinct description of what the item does. Used by accessibility tools\n     * and torture tests.\n     */\n    accessibilityLabel: string,\n\n    /**\n     * Whether menu item is disabled or not.\n     */\n    disabled: boolean,\n\n    /**\n     * A React Element to display at the end of {@code OverflowMenuItem}.\n     */\n    elementAfter?: React$Node,\n\n    /**\n     * The icon class to use for displaying an icon before the link text.\n     */\n    icon: Object,\n\n    /**\n     * Id of the icon to be rendered.\n     */\n    iconId?: string,\n\n    /**\n     * The callback to invoke when {@code OverflowMenuItem} is clicked.\n     */\n    onClick: Function,\n\n    /**\n     * The text to display in the {@code OverflowMenuItem}.\n     */\n    text: string,\n\n    /**\n     * The text to display in the tooltip.\n     */\n    tooltip?: string,\n\n    /**\n     * From which direction the tooltip should appear, relative to the button.\n     */\n    tooltipPosition: string\n};\n\n/**\n * A React {@code Component} for displaying a link to interact with other\n * features of the application.\n *\n * @extends Component\n */\nclass OverflowMenuItem extends Component<Props> {\n    /**\n     * Default values for {@code OverflowMenuItem} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        tooltipPosition: 'left',\n        disabled: false\n    };\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { accessibilityLabel, disabled, elementAfter, icon, iconId, onClick } = this.props;\n\n        let className = 'overflow-menu-item';\n\n        className += this.props.disabled ? ' disabled' : '';\n\n        return (\n            <li\n                aria-label = { accessibilityLabel }\n                className = { className }\n                onClick = { disabled ? null : onClick }>\n                <span className = 'overflow-menu-item-icon'>\n                    <Icon\n                        id = { iconId }\n                        src = { icon } />\n                </span>\n                { this._renderText() }\n                {\n                    elementAfter || null\n                }\n            </li>\n        );\n    }\n\n    /**\n     * Renders the text label to display in the {@code OverflowMenuItem}.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderText() {\n        const textElement = (\n            <span className = 'overflow-menu-item-text'>\n                { this.props.text }\n            </span>\n        );\n\n        if (this.props.tooltip) {\n            return (\n                <Tooltip\n                    content = { this.props.tooltip }\n                    position = { this.props.tooltipPosition }>\n                    { textElement }\n                </Tooltip>\n            );\n        }\n\n        return textElement;\n    }\n}\n\nexport default OverflowMenuItem;\n","// @flow\n\nimport React, { Component } from 'react';\nimport { Icon } from '../../icons';\n\ntype Props = {\n\n    /**\n     * The decorated component (ToolboxButton).\n     */\n    children: React$Node,\n\n    /**\n     * Icon of the button.\n     */\n    icon: Function,\n\n    /**\n     * Flag used for disabling the small icon.\n     */\n    iconDisabled: boolean,\n\n    /**\n     * Click handler for the small icon.\n     */\n    onIconClick: Function,\n\n    /**\n     * Additional styles.\n     */\n    styles?: Object,\n};\n\ntype State = {\n\n    /**\n     * Whether the button is hovered or not.\n     */\n    isHovered: boolean,\n};\n\n/**\n * Displayes the `ToolboxButtonWithIcon` component.\n *\n * @returns {ReactElement}\n */\nexport default class ToolboxButtonWithIcon extends Component<Props, State> {\n\n    /**\n     * Initializes a new {@code ToolboxButtonWithIcon} instance.\n     *\n     * @param {Props} props - The props of the component.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            isHovered: false\n        };\n        this._onMouseEnter = this._onMouseEnter.bind(this);\n        this._onMouseLeave = this._onMouseLeave.bind(this);\n    }\n\n    _onMouseEnter: () => void;\n\n    /**\n     * Handler for when the small button has the mouse over.\n     *\n     * @returns {void}.\n     */\n    _onMouseEnter() {\n        this.setState({\n            isHovered: true\n        });\n    }\n\n    _onMouseLeave: () => void;\n\n    /**\n     * Handler for when the mouse leaves the small button.\n     *\n     * @returns {void}\n     */\n    _onMouseLeave() {\n        this.setState({\n            isHovered: false\n        });\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {React$Node}\n     */\n    render() {\n        const {\n            children,\n            icon,\n            iconDisabled,\n            onIconClick,\n            styles\n        } = this.props;\n\n        const iconProps = {};\n        let size = 9;\n\n        if (iconDisabled) {\n            iconProps.className\n                = 'settings-button-small-icon settings-button-small-icon--disabled';\n        } else {\n            iconProps.className = 'settings-button-small-icon';\n            iconProps.onClick = onIconClick;\n\n            if (this.state.isHovered) {\n                iconProps.className = `${iconProps.className} settings-button-small-icon--hovered`;\n                size = 11;\n            }\n        }\n\n        return (\n            <div\n                className = 'settings-button-container'\n                styles = { styles }>\n                {children}\n                <div\n                    onMouseEnter = { this._onMouseEnter }\n                    onMouseLeave = { this._onMouseLeave }>\n                    <Icon\n                        { ...iconProps }\n                        size = { size }\n                        src = { icon } />\n                </div>\n            </div>\n        );\n    }\n}\n","// @flow\n\nexport * from './components';\n","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import * as colors from './colors';\nimport themed from './utils/themed'; // Cards on a board\n\nexport var e100 = themed({\n  light: \"box-shadow: 0 1px 1px \".concat(colors.N50A, \", 0 0 1px 0 \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 1px 1px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Inline dialogs\n\nexport var e200 = themed({\n  light: \"box-shadow: 0 4px 8px -2px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 4px 8px -2px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Modals\n\nexport var e300 = themed({\n  light: \"box-shadow: 0 8px 16px -4px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 8px 16px -4px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Panels\n\nexport var e400 = themed({\n  light: \"box-shadow: 0 12px 24px -6px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 12px 24px -6px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Flag messages (notifications)\n\nexport var e500 = themed({\n  light: \"box-shadow: 0 20px 32px -8px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 20px 32px -8px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n});","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport { gridSize, fontSize } from './index';\n\nvar baseHeading = function baseHeading(size, lineHeight) {\n  return \"\\n  font-size: \".concat(size / fontSize(), \"em;\\n  font-style: inherit;\\n  line-height: \").concat(lineHeight / size, \";\\n\");\n};\n\nexport var h900 = function h900() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(35, 40), colors.heading, gridSize() * 6.5);\n};\nexport var h800 = function h800() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(29, 32), colors.heading, gridSize() * 5);\n};\nexport var h700 = function h700() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(24, 28), colors.heading, gridSize() * 5);\n};\nexport var h600 = function h600() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  margin-top: \", \"px;\\n\"], baseHeading(20, 24), colors.heading, gridSize() * 3.5);\n};\nexport var h500 = function h500() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.006em;\\n  margin-top: \", \"px;\\n\"], baseHeading(16, 20), colors.heading, gridSize() * 3);\n};\nexport var h400 = function h400() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.003em;\\n  margin-top: \", \"px;\\n\"], baseHeading(14, 16), colors.heading, gridSize() * 2);\n};\nexport var h300 = function h300() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n  text-transform: uppercase;\\n\"], baseHeading(12, 16), colors.heading, gridSize() * 2.5);\n};\nexport var h200 = function h200() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n\"], baseHeading(12, 16), colors.subtleHeading, gridSize() * 2);\n};\nexport var h100 = function h100() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 700;\\n  margin-top: \", \"px;\\n\"], baseHeading(11, 16), colors.subtleHeading, gridSize() * 2);\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nexport default (function (_ref) {\n  var children = _ref.children,\n      props = _ref.props,\n      theme = _ref.theme;\n  var appearance = _typeof(props) === 'object' ? 'default' : props;\n  var merged = _typeof(props) === 'object' ? _objectSpread({}, props) : {};\n  Object.keys(theme).forEach(function (key) {\n    if (!(key in merged)) {\n      merged[key] = theme[key]({\n        appearance: appearance\n      });\n    }\n  });\n  return children(merged);\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport * as colors from '../colors';\nimport { createTheme } from '../utils/createTheme';\n\nvar orTextColor = function orTextColor(preferred) {\n  return function (p) {\n    return p[preferred] || p.textColor;\n  };\n};\n\nvar Div = styled.div.withConfig({\n  displayName: \"Reset__Div\",\n  componentId: \"sc-15i6ali-0\"\n})([\"\\n  \", \";\\n\"], function (p) {\n  return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n\\n    a {\\n      color: \", \";\\n    }\\n    a:hover {\\n      color: \", \";\\n    }\\n    a:active {\\n      color: \", \";\\n    }\\n    a:focus {\\n      outline-color: \", \";\\n    }\\n    h1,\\n    h2,\\n    h3,\\n    h4,\\n    h5 {\\n      color: \", \";\\n    }\\n    h6 {\\n      color: \", \";\\n    }\\n    small {\\n      color: \", \";\\n    }\\n  \"], p.backgroundColor, p.textColor, orTextColor('linkColor'), orTextColor('linkColorHover'), orTextColor('linkColorActive'), orTextColor('linkColorOutline'), orTextColor('headingColor'), orTextColor('subtleHeadingColor'), orTextColor('subtleTextColor'));\n});\nexport var ResetTheme = createTheme(function () {\n  return {\n    backgroundColor: colors.N0,\n    linkColor: colors.B400,\n    linkColorHover: colors.B300,\n    linkColorActive: colors.B500,\n    linkColorOutline: colors.B100,\n    headingColor: colors.N800,\n    subtleHeadingColor: colors.N200,\n    subtleTextColor: colors.N200,\n    textColor: colors.N900\n  };\n});\nexport function Reset(props) {\n  return React.createElement(ResetTheme.Provider, {\n    value: props.theme\n  }, React.createElement(ResetTheme.Consumer, null, function (tokens) {\n    return React.createElement(Div, _extends({}, _objectSpread({}, tokens, {\n      mode: undefined\n    }), props), props.children);\n  }));\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React from 'react';\nimport Theme from './components/Theme'; // Pre-executes the theme and passes it as a prop to the supplied component.\n// This is useful for ensuring that the current theme is accessible as props\n// in styled-components.\n\nexport function withTheme(InnerComponent) {\n  return function ComponentWithTheme(props) {\n    return React.createElement(Theme.Consumer, null, function (tokens) {\n      return React.createElement(InnerComponent, _extends({}, props, {\n        theme: tokens\n      }));\n    });\n  };\n}","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","/* global APP, $, interfaceConfig  */\nimport PokerTableThumb from '../../../react/features/poker/layout/PokerTableThumb';\n\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\nimport { MEDIA_TYPE, VIDEO_TYPE } from '../../../react/features/base/media';\nimport {\n    getLocalParticipant as getLocalParticipantFromStore,\n    getPinnedParticipant,\n    getParticipantById,\n    pinParticipant\n} from '../../../react/features/base/participants';\nimport { getTrackByMediaTypeAndParticipant } from '../../../react/features/base/tracks';\nimport { SHARED_VIDEO_CONTAINER_TYPE } from '../shared_video/SharedVideo';\nimport SharedVideoThumb from '../shared_video/SharedVideoThumb';\n\nimport UIEvents from '../../../service/UI/UIEvents';\n\nimport RemoteVideo from './RemoteVideo';\nimport LargeVideoManager from './LargeVideoManager';\nimport { VIDEO_CONTAINER_TYPE } from './VideoContainer';\n\nimport LocalVideo from './LocalVideo';\n\nconst remoteVideos = {};\nlet localVideoThumbnail = null;\n\nlet eventEmitter = null;\n\nlet largeVideo;\n\n/**\n * flipX state of the localVideo\n */\nlet localFlipX = null;\n\n/**\n * Handler for local flip X changed event.\n * @param {Object} val\n */\nfunction onLocalFlipXChanged(val) {\n    localFlipX = val;\n    if (largeVideo) {\n        largeVideo.onLocalFlipXChange(val);\n    }\n}\n\n/**\n * Returns an array of all thumbnails in the filmstrip.\n *\n * @private\n * @returns {Array}\n */\nfunction getAllThumbnails() {\n    return [\n        localVideoThumbnail,\n        ...Object.values(remoteVideos)\n    ];\n}\n\n/**\n * Private helper to get the redux representation of the local participant.\n *\n * @private\n * @returns {Object}\n */\nfunction getLocalParticipant() {\n    return getLocalParticipantFromStore(APP.store.getState());\n}\n\nconst VideoLayout = {\n    init(emitter) {\n        eventEmitter = emitter;\n\n        localVideoThumbnail = new LocalVideo(\n            VideoLayout,\n            emitter,\n            this._updateLargeVideoIfDisplayed.bind(this));\n\n        this.registerListeners();\n    },\n\n    /**\n     * Registering listeners for UI events in Video layout component.\n     *\n     * @returns {void}\n     */\n    registerListeners() {\n        eventEmitter.addListener(UIEvents.LOCAL_FLIPX_CHANGED,\n            onLocalFlipXChanged);\n    },\n\n    /**\n     * Cleans up state of this singleton {@code VideoLayout}.\n     *\n     * @returns {void}\n     */\n    reset() {\n        this._resetLargeVideo();\n        this._resetFilmstrip();\n    },\n\n    initLargeVideo() {\n        this._resetLargeVideo();\n\n        largeVideo = new LargeVideoManager(eventEmitter);\n        if (localFlipX) {\n            largeVideo.onLocalFlipXChange(localFlipX);\n        }\n        largeVideo.updateContainerSize();\n    },\n\n    /**\n     * Sets the audio level of the video elements associated to the given id.\n     *\n     * @param id the video identifier in the form it comes from the library\n     * @param lvl the new audio level to update to\n     */\n    setAudioLevel(id, lvl) {\n        const smallVideo = this.getSmallVideo(id);\n\n        if (smallVideo) {\n            smallVideo.updateAudioLevelIndicator(lvl);\n        }\n\n        if (largeVideo && id === largeVideo.id) {\n            largeVideo.updateLargeVideoAudioLevel(lvl);\n        }\n    },\n\n    changeLocalVideo(stream) {\n        const localId = getLocalParticipant().id;\n\n        this.onVideoTypeChanged(localId, stream.videoType);\n\n        localVideoThumbnail.changeVideo(stream);\n\n        this._updateLargeVideoIfDisplayed(localId);\n    },\n\n    /**\n     * Get's the localID of the conference and set it to the local video\n     * (small one). This needs to be called as early as possible, when muc is\n     * actually joined. Otherwise events can come with information like email\n     * and setting them assume the id is already set.\n     */\n    mucJoined() {\n        // FIXME: replace this call with a generic update call once SmallVideo\n        // only contains a ReactElement. Then remove this call once the\n        // Filmstrip is fully in React.\n        localVideoThumbnail.updateIndicators();\n    },\n\n    /**\n     * Shows/hides local video.\n     * @param {boolean} true to make the local video visible, false - otherwise\n     */\n    setLocalVideoVisible(visible) {\n        localVideoThumbnail.setVisible(visible);\n    },\n\n    onRemoteStreamAdded(stream) {\n        const id = stream.getParticipantId();\n        const remoteVideo = remoteVideos[id];\n\n        logger.debug(`Received a new ${stream.getType()} stream for ${id}`);\n\n        if (!remoteVideo) {\n            logger.debug('No remote video element to add stream');\n\n            return;\n        }\n\n        remoteVideo.addRemoteStreamElement(stream);\n\n        // Make sure track's muted state is reflected\n        if (stream.getType() === 'audio') {\n            this.onAudioMute(id, stream.isMuted());\n        } else {\n            this.onVideoMute(id, stream.isMuted());\n        }\n    },\n\n    onRemoteStreamRemoved(stream) {\n        const id = stream.getParticipantId();\n        const remoteVideo = remoteVideos[id];\n\n        // Remote stream may be removed after participant left the conference.\n\n        if (remoteVideo) {\n            remoteVideo.removeRemoteStreamElement(stream);\n        }\n\n        this.updateMutedForNoTracks(id, stream.getType());\n    },\n\n    /**\n     * FIXME get rid of this method once muted indicator are reactified (by\n     * making sure that user with no tracks is displayed as muted )\n     *\n     * If participant has no tracks will make the UI display muted status.\n     * @param {string} participantId\n     * @param {string} mediaType 'audio' or 'video'\n     */\n    updateMutedForNoTracks(participantId, mediaType) {\n        const participant = APP.conference.getParticipantById(participantId);\n\n        if (participant && !participant.getTracksByMediaType(mediaType).length) {\n            if (mediaType === 'audio') {\n                APP.UI.setAudioMuted(participantId, true);\n            } else if (mediaType === 'video') {\n                APP.UI.setVideoMuted(participantId, true);\n            } else {\n                logger.error(`Unsupported media type: ${mediaType}`);\n            }\n        }\n    },\n\n    /**\n     * Return the type of the remote video.\n     * @param id the id for the remote video\n     * @returns {String} the video type video or screen.\n     */\n    getRemoteVideoType(id) {\n        const state = APP.store.getState();\n        const participant = getParticipantById(state, id);\n\n        if (participant?.isFakeParticipant) {\n            if (participant?.id === 'table') {\n                return VIDEO_TYPE.CAMERA;\n            }\n\n            return SHARED_VIDEO_CONTAINER_TYPE;\n        }\n\n        const videoTrack = getTrackByMediaTypeAndParticipant(state['features/base/tracks'], MEDIA_TYPE.VIDEO, id);\n\n        return videoTrack?.videoType;\n    },\n\n    isPinned(id) {\n        return id === this.getPinnedId();\n    },\n\n    getPinnedId() {\n        const { id } = getPinnedParticipant(APP.store.getState()) || {};\n\n        return id || null;\n    },\n\n    /**\n     * Triggers a thumbnail to pin or unpin itself.\n     *\n     * @param {number} videoNumber - The index of the video to toggle pin on.\n     * @private\n     */\n    togglePin(videoNumber) {\n        const videos = getAllThumbnails();\n        const videoView = videos[videoNumber];\n\n        videoView && videoView.togglePin();\n    },\n\n    /**\n     * Callback invoked to update display when the pin participant has changed.\n     *\n     * @paramn {string|null} pinnedParticipantID - The participant ID of the\n     * participant that is pinned or null if no one is pinned.\n     * @returns {void}\n     */\n    onPinChange(pinnedParticipantID) {\n        if (interfaceConfig.filmStripOnly) {\n            return;\n        }\n\n        getAllThumbnails().forEach(thumbnail =>\n            thumbnail.focus(pinnedParticipantID === thumbnail.getId()));\n    },\n\n    /**\n     * Creates a participant container for the given id.\n     *\n     * @param {Object} participant - The redux representation of a remote\n     * participant.\n     * @returns {void}\n     */\n    addRemoteParticipantContainer(participant) {\n        if (!participant || participant.local) {\n            return;\n        } else if (participant.isFakeParticipant) {\n            if (participant.id === 'table') {\n                this.addRemoteVideoContainer(participant.id, new PokerTableThumb(VideoLayout));\n\n                return;\n            }\n            const sharedVideoThumb = new SharedVideoThumb(\n                participant,\n                SHARED_VIDEO_CONTAINER_TYPE,\n                VideoLayout);\n\n            this.addRemoteVideoContainer(participant.id, sharedVideoThumb);\n\n            return;\n        }\n\n        const id = participant.id;\n        const jitsiParticipant = APP.conference.getParticipantById(id);\n        const remoteVideo = new RemoteVideo(jitsiParticipant, VideoLayout);\n\n        this._setRemoteControlProperties(jitsiParticipant, remoteVideo);\n        this.addRemoteVideoContainer(id, remoteVideo);\n\n        this.updateMutedForNoTracks(id, 'audio');\n        this.updateMutedForNoTracks(id, 'video');\n    },\n\n    /**\n     * Adds remote video container for the given id and <tt>SmallVideo</tt>.\n     *\n     * @param {string} the id of the video to add\n     * @param {SmallVideo} smallVideo the small video instance to add as a\n     * remote video\n     */\n    addRemoteVideoContainer(id, remoteVideo) {\n        remoteVideos[id] = remoteVideo;\n\n        // Initialize the view\n        remoteVideo.updateView();\n    },\n\n    // FIXME: what does this do???\n    remoteVideoActive(videoElement, resourceJid) {\n        logger.info(`${resourceJid} video is now active`, videoElement);\n        if (videoElement) {\n            $(videoElement).show();\n        }\n        this._updateLargeVideoIfDisplayed(resourceJid, true);\n    },\n\n    /**\n     * On audio muted event.\n     */\n    onAudioMute(id, isMuted) {\n        if (APP.conference.isLocalId(id)) {\n            localVideoThumbnail.showAudioIndicator(isMuted);\n        } else {\n            const remoteVideo = remoteVideos[id];\n\n            if (!remoteVideo) {\n                return;\n            }\n\n            remoteVideo.showAudioIndicator(isMuted);\n            remoteVideo.updateRemoteVideoMenu();\n        }\n    },\n\n    /**\n     * On video muted event.\n     */\n    onVideoMute(id, value) {\n        if (APP.conference.isLocalId(id)) {\n            localVideoThumbnail && localVideoThumbnail.setVideoMutedView(value);\n        } else {\n            const remoteVideo = remoteVideos[id];\n\n            if (remoteVideo) {\n                remoteVideo.setVideoMutedView(value);\n            }\n        }\n\n        // large video will show avatar instead of muted stream\n        this._updateLargeVideoIfDisplayed(id, true);\n    },\n\n    /**\n     * Display name changed.\n     */\n    onDisplayNameChanged(id) {\n        if (id === 'localVideoContainer'\n            || APP.conference.isLocalId(id)) {\n            localVideoThumbnail.updateDisplayName();\n        } else {\n            const remoteVideo = remoteVideos[id];\n\n            if (remoteVideo) {\n                remoteVideo.updateDisplayName();\n            }\n        }\n    },\n\n    /**\n     * On dominant speaker changed event.\n     *\n     * @param {string} id - The participant ID of the new dominant speaker.\n     * @returns {void}\n     */\n    onDominantSpeakerChanged(id) {\n        getAllThumbnails().forEach(thumbnail =>\n            thumbnail.showDominantSpeakerIndicator(id === thumbnail.getId()));\n    },\n\n    /**\n     * Shows/hides warning about a user's connectivity issues.\n     *\n     * @param {string} id - The ID of the remote participant(MUC nickname).\n     * @returns {void}\n     */\n    onParticipantConnectionStatusChanged(id) {\n        if (APP.conference.isLocalId(id)) {\n\n            return;\n        }\n\n        // We have to trigger full large video update to transition from\n        // avatar to video on connectivity restored.\n        this._updateLargeVideoIfDisplayed(id, true);\n\n        const remoteVideo = remoteVideos[id];\n\n        if (remoteVideo) {\n            // Updating only connection status indicator is not enough, because\n            // when we the connection is restored while the avatar was displayed\n            // (due to 'muted while disconnected' condition) we may want to show\n            // the video stream again and in order to do that the display mode\n            // must be updated.\n            // remoteVideo.updateConnectionStatusIndicator(isActive);\n            remoteVideo.updateView();\n        }\n    },\n\n    /**\n     * On last N change event.\n     *\n     * @param endpointsLeavingLastN the list currently leaving last N\n     * endpoints\n     * @param endpointsEnteringLastN the list currently entering last N\n     * endpoints\n     */\n    onLastNEndpointsChanged(endpointsLeavingLastN, endpointsEnteringLastN) {\n        if (endpointsLeavingLastN) {\n            endpointsLeavingLastN.forEach(this._updateRemoteVideo, this);\n        }\n\n        if (endpointsEnteringLastN) {\n            endpointsEnteringLastN.forEach(this._updateRemoteVideo, this);\n        }\n    },\n\n    /**\n     * Updates remote video by id if it exists.\n     * @param {string} id of the remote video\n     * @private\n     */\n    _updateRemoteVideo(id) {\n        const remoteVideo = remoteVideos[id];\n\n        if (remoteVideo) {\n            remoteVideo.updateView();\n            this._updateLargeVideoIfDisplayed(id);\n        }\n    },\n\n    /**\n     * Hides all the indicators\n     */\n    hideStats() {\n        for (const video in remoteVideos) { // eslint-disable-line guard-for-in\n            const remoteVideo = remoteVideos[video];\n\n            if (remoteVideo) {\n                remoteVideo.removeConnectionIndicator();\n            }\n        }\n        localVideoThumbnail.removeConnectionIndicator();\n    },\n\n    removeParticipantContainer(id) {\n        // Unlock large video\n        if (this.getPinnedId() === id) {\n            logger.info('Focused video owner has left the conference');\n            APP.store.dispatch(pinParticipant(null));\n        }\n\n        const remoteVideo = remoteVideos[id];\n\n        if (remoteVideo) {\n            // Remove remote video\n            logger.info(`Removing remote video: ${id}`);\n            delete remoteVideos[id];\n            remoteVideo.remove();\n        } else {\n            logger.warn(`No remote video for ${id}`);\n        }\n    },\n\n    onVideoTypeChanged(id, newVideoType) {\n        if (VideoLayout.getRemoteVideoType(id) === newVideoType) {\n            return;\n        }\n\n        logger.info('Peer video type changed: ', id, newVideoType);\n\n        this._updateLargeVideoIfDisplayed(id, true);\n    },\n\n    /**\n     * Resizes the video area.\n     */\n    resizeVideoArea() {\n        if (largeVideo) {\n            largeVideo.updateContainerSize();\n            largeVideo.resize(false);\n        }\n    },\n\n    getSmallVideo(id) {\n        if (APP.conference.isLocalId(id)) {\n            return localVideoThumbnail;\n        }\n\n        return remoteVideos[id];\n\n    },\n\n    changeUserAvatar(id, avatarUrl) {\n        const smallVideo = VideoLayout.getSmallVideo(id);\n\n        if (smallVideo) {\n            smallVideo.initializeAvatar();\n        } else {\n            logger.warn(\n                `Missed avatar update - no small video yet for ${id}`\n            );\n        }\n        if (this.isCurrentlyOnLarge(id)) {\n            largeVideo.updateAvatar(avatarUrl);\n        }\n    },\n\n    isLargeVideoVisible() {\n        return this.isLargeContainerTypeVisible(VIDEO_CONTAINER_TYPE);\n    },\n\n    /**\n     * @return {LargeContainer} the currently displayed container on large\n     * video.\n     */\n    getCurrentlyOnLargeContainer() {\n        return largeVideo.getCurrentContainer();\n    },\n\n    isCurrentlyOnLarge(id) {\n        return largeVideo && largeVideo.id === id;\n    },\n\n    /**\n     * Triggers an update of remote video and large video displays so they may\n     * pick up any state changes that have occurred elsewhere.\n     *\n     * @returns {void}\n     */\n    updateAllVideos() {\n        const displayedUserId = this.getLargeVideoID();\n\n        if (displayedUserId) {\n            this.updateLargeVideo(displayedUserId, true);\n        }\n\n        Object.keys(remoteVideos).forEach(video => {\n            remoteVideos[video].updateView();\n        });\n    },\n\n    updateLargeVideo(id, forceUpdate) {\n        if (!largeVideo) {\n            return;\n        }\n        const currentContainer = largeVideo.getCurrentContainer();\n        const currentContainerType = largeVideo.getCurrentContainerType();\n        const isOnLarge = this.isCurrentlyOnLarge(id);\n        const state = APP.store.getState();\n        const videoTrack = getTrackByMediaTypeAndParticipant(state['features/base/tracks'], MEDIA_TYPE.VIDEO, id);\n        const videoStream = videoTrack?.jitsiTrack;\n\n        if (isOnLarge && !forceUpdate\n                && LargeVideoManager.isVideoContainer(currentContainerType)\n                && videoStream) {\n            const currentStreamId = currentContainer.getStreamID();\n            const newStreamId = videoStream?.getId() || null;\n\n            // FIXME it might be possible to get rid of 'forceUpdate' argument\n            if (currentStreamId !== newStreamId) {\n                logger.debug('Enforcing large video update for stream change');\n                forceUpdate = true; // eslint-disable-line no-param-reassign\n            }\n        }\n\n        if (!isOnLarge || forceUpdate) {\n            const videoType = this.getRemoteVideoType(id);\n\n\n            largeVideo.updateLargeVideo(\n                id,\n                videoStream,\n                videoType || VIDEO_TYPE.CAMERA\n            ).catch(() => {\n                // do nothing\n            });\n        }\n    },\n\n    addLargeVideoContainer(type, container) {\n        largeVideo && largeVideo.addContainer(type, container);\n    },\n\n    removeLargeVideoContainer(type) {\n        largeVideo && largeVideo.removeContainer(type);\n    },\n\n    /**\n     * @returns Promise\n     */\n    showLargeVideoContainer(type, show) {\n        if (!largeVideo) {\n            return Promise.reject();\n        }\n\n        const isVisible = this.isLargeContainerTypeVisible(type);\n\n        if (isVisible === show) {\n            return Promise.resolve();\n        }\n\n        const currentId = largeVideo.id;\n        let oldSmallVideo;\n\n        if (currentId) {\n            oldSmallVideo = this.getSmallVideo(currentId);\n        }\n\n        let containerTypeToShow = type;\n\n        // if we are hiding a container and there is focusedVideo\n        // (pinned remote video) use its video type,\n        // if not then use default type - large video\n\n        if (!show) {\n            const pinnedId = this.getPinnedId();\n\n            if (pinnedId) {\n                containerTypeToShow = this.getRemoteVideoType(pinnedId);\n            } else {\n                containerTypeToShow = VIDEO_CONTAINER_TYPE;\n            }\n        }\n\n        return largeVideo.showContainer(containerTypeToShow)\n            .then(() => {\n                if (oldSmallVideo) {\n                    oldSmallVideo && oldSmallVideo.updateView();\n                }\n            });\n    },\n\n    isLargeContainerTypeVisible(type) {\n        return largeVideo && largeVideo.state === type;\n    },\n\n    /**\n     * Returns the id of the current video shown on large.\n     * Currently used by tests (torture).\n     */\n    getLargeVideoID() {\n        return largeVideo && largeVideo.id;\n    },\n\n    /**\n     * Returns the the current video shown on large.\n     * Currently used by tests (torture).\n     */\n    getLargeVideo() {\n        return largeVideo;\n    },\n\n    /**\n     * Sets the flipX state of the local video.\n     * @param {boolean} true for flipped otherwise false;\n     */\n    setLocalFlipX(val) {\n        this.localFlipX = val;\n    },\n\n    /**\n     * Handles user's features changes.\n     */\n    onUserFeaturesChanged(user) {\n        const video = this.getSmallVideo(user.getId());\n\n        if (!video) {\n            return;\n        }\n        this._setRemoteControlProperties(user, video);\n    },\n\n    /**\n     * Sets the remote control properties (checks whether remote control\n     * is supported and executes remoteVideo.setRemoteControlSupport).\n     * @param {JitsiParticipant} user the user that will be checked for remote\n     * control support.\n     * @param {RemoteVideo} remoteVideo the remoteVideo on which the properties\n     * will be set.\n     */\n    _setRemoteControlProperties(user, remoteVideo) {\n        APP.remoteControl.checkUserRemoteControlSupport(user)\n            .then(result => remoteVideo.setRemoteControlSupport(result))\n            .catch(error =>\n                logger.warn(`could not get remote control properties for: ${user.getJid()}`, error));\n    },\n\n    /**\n     * Returns the wrapper jquery selector for the largeVideo\n     * @returns {JQuerySelector} the wrapper jquery selector for the largeVideo\n     */\n    getLargeVideoWrapper() {\n        return this.getCurrentlyOnLargeContainer().$wrapper;\n    },\n\n    /**\n     * Returns the number of remove video ids.\n     *\n     * @returns {number} The number of remote videos.\n     */\n    getRemoteVideosCount() {\n        return Object.keys(remoteVideos).length;\n    },\n\n    /**\n     * Sets the remote control active status for a remote participant.\n     *\n     * @param {string} participantID - The id of the remote participant.\n     * @param {boolean} isActive - The new remote control active status.\n     * @returns {void}\n     */\n    setRemoteControlActiveStatus(participantID, isActive) {\n        remoteVideos[participantID].setRemoteControlActiveStatus(isActive);\n    },\n\n    /**\n     * Sets the remote control active status for the local participant.\n     *\n     * @returns {void}\n     */\n    setLocalRemoteControlActiveChanged() {\n        Object.values(remoteVideos).forEach(\n            remoteVideo => remoteVideo.updateRemoteVideoMenu()\n        );\n    },\n\n    /**\n     * Helper method to invoke when the video layout has changed and elements\n     * have to be re-arranged and resized.\n     *\n     * @returns {void}\n     */\n    refreshLayout() {\n        localVideoThumbnail && localVideoThumbnail.updateDOMLocation();\n        VideoLayout.resizeVideoArea();\n\n        // Rerender the thumbnails since they are dependant on the layout because of the tooltip positioning.\n        localVideoThumbnail && localVideoThumbnail.rerender();\n        Object.values(remoteVideos).forEach(remoteVideoThumbnail => remoteVideoThumbnail.rerender());\n    },\n\n    /**\n     * Cleans up any existing largeVideo instance.\n     *\n     * @private\n     * @returns {void}\n     */\n    _resetLargeVideo() {\n        if (largeVideo) {\n            largeVideo.destroy();\n        }\n\n        largeVideo = null;\n    },\n\n    /**\n     * Cleans up filmstrip state. While a separate {@code Filmstrip} exists, its\n     * implementation is mainly for querying and manipulating the DOM while\n     * state mostly remains in {@code VideoLayout}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _resetFilmstrip() {\n        Object.keys(remoteVideos).forEach(remoteVideoId => {\n            this.removeParticipantContainer(remoteVideoId);\n            delete remoteVideos[remoteVideoId];\n        });\n\n        if (localVideoThumbnail) {\n            localVideoThumbnail.remove();\n            localVideoThumbnail = null;\n        }\n    },\n\n    /**\n     * Triggers an update of large video if the passed in participant is\n     * currently displayed on large video.\n     *\n     * @param {string} participantId - The participant ID that should trigger an\n     * update of large video if displayed.\n     * @param {boolean} force - Whether or not the large video update should\n     * happen no matter what.\n     * @returns {void}\n     */\n    _updateLargeVideoIfDisplayed(participantId, force = false) {\n        if (this.isCurrentlyOnLarge(participantId)) {\n            this.updateLargeVideo(participantId, force);\n        }\n    },\n\n    /**\n     * Handles window resizes.\n     */\n    onResize() {\n        VideoLayout.resizeVideoArea();\n    }\n};\n\nexport default VideoLayout;\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.13';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading and trailing whitespace. */\n  var reTrim = /^\\s+|\\s+$/g,\n      reTrimStart = /^\\s+/,\n      reTrimEnd = /\\s+$/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      var index = -1;\n      iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      value = iteratee(value);\n\n      var low = 0,\n          high = array == null ? 0 : array.length,\n          valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(array);\n      if (stacked && stack.get(other)) {\n        return stacked == other;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked && stack.get(other)) {\n        return stacked == other;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = value.replace(reTrim, '');\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // with lookup (in case of e.g. prototype pollution), and strip newlines if any.\n      // A newline wouldn't be a valid sourceURL anyway, and it'd enable code injection.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/[\\r\\n]/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      // Like with sourceURL, we take care to not check the option's prototype,\n      // as this configuration is a code injection vector.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrim, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimEnd, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","/**\n * The type of a feature/internal/protected (redux) action to add an audio\n * element to the sounds collection state.\n *\n * {\n *     type: _ADD_AUDIO_ELEMENT,\n *     ref: AudioElement,\n *     soundId: string\n * }\n */\nexport const _ADD_AUDIO_ELEMENT = '_ADD_AUDIO_ELEMENT';\n\n/**\n * The type of feature/internal/protected (redux) action to remove an audio\n * element for given sound identifier from the sounds collection state.\n *\n * {\n *     type: _REMOVE_AUDIO_ELEMENT,\n *     soundId: string\n * }\n */\nexport const _REMOVE_AUDIO_ELEMENT = '_REMOVE_AUDIO_ELEMENT';\n\n/**\n * The type of (redux) action to play a sound from the sounds collection.\n *\n * {\n *     type: PLAY_SOUND,\n *     soundId: string\n * }\n */\nexport const PLAY_SOUND = 'PLAY_SOUND';\n\n/**\n * The type of (redux) action to register a new sound with the sounds\n * collection.\n *\n * {\n *     type: REGISTER_SOUND,\n *     soundId: string\n * }\n */\nexport const REGISTER_SOUND = 'REGISTER_SOUND';\n\n/**\n * The type of (redux) action to stop a sound from the sounds collection.\n *\n * {\n *     type: STOP_SOUND,\n *     soundId: string\n * }\n */\nexport const STOP_SOUND = 'STOP_SOUND';\n\n/**\n * The type of (redux) action to unregister an existing sound from the sounds\n * collection.\n *\n * {\n *     type: UNREGISTER_SOUND,\n *     soundId: string\n * }\n */\nexport const UNREGISTER_SOUND = 'UNREGISTER_SOUND';\n","// @flow\n\nimport type { AudioElement } from '../media';\n\nimport {\n    _ADD_AUDIO_ELEMENT,\n    _REMOVE_AUDIO_ELEMENT,\n    PLAY_SOUND,\n    REGISTER_SOUND,\n    STOP_SOUND,\n    UNREGISTER_SOUND\n} from './actionTypes';\nimport { getSoundsPath } from './functions';\n\n/**\n * Adds {@link AudioElement} instance to the base/sounds feature state for the\n * {@link Sound} instance identified by the given id. After this action the\n * sound can be played by dispatching the {@link PLAY_SOUND} action.\n *\n * @param {string} soundId - The sound identifier for which the audio element\n * will be stored.\n * @param {AudioElement} audioElement - The audio element which implements the\n * audio playback functionality and which is backed by the sound resource\n * corresponding to the {@link Sound} with the given id.\n * @protected\n * @returns {{\n *     type: PLAY_SOUND,\n *     audioElement: AudioElement,\n *     soundId: string\n * }}\n */\nexport function _addAudioElement(soundId: string, audioElement: AudioElement) {\n    return {\n        type: _ADD_AUDIO_ELEMENT,\n        audioElement,\n        soundId\n    };\n}\n\n/**\n * The opposite of {@link _addAudioElement} which removes {@link AudioElement}\n * for given sound from base/sounds state. It means that the audio resource has\n * been disposed and the sound can no longer be played.\n *\n * @param {string} soundId - The {@link Sound} instance identifier for which the\n * audio element is being removed.\n * @protected\n * @returns {{\n *     type: _REMOVE_AUDIO_ELEMENT,\n *     soundId: string\n * }}\n */\nexport function _removeAudioElement(soundId: string) {\n    return {\n        type: _REMOVE_AUDIO_ELEMENT,\n        soundId\n    };\n}\n\n/**\n * Starts playback of the sound identified by the given sound id. The action\n * will have effect only if the audio resource has been loaded already.\n *\n * @param {string} soundId - The id of the sound to be played (the same one\n * which was used in {@link registerSound} to register the sound).\n * @returns {{\n *     type: PLAY_SOUND,\n *     soundId: string\n * }}\n */\nexport function playSound(soundId: string): Object {\n    return {\n        type: PLAY_SOUND,\n        soundId\n    };\n}\n\n/**\n * Registers a new sound for given id and a source object which can be either a\n * path or a raw object depending on the platform (native vs web). It will make\n * the {@link SoundCollection} render extra HTMLAudioElement which will make it\n * available for playback through the {@link playSound} action.\n *\n * @param {string} soundId - The global identifier which identify the sound\n * created for given source object.\n * @param {string} soundName - The name of bundled audio file that will be\n * associated with the given {@code soundId}.\n * @param {Object} options - Optional paramaters.\n * @param {boolean} options.loop - True in order to loop the sound.\n * @returns {{\n *     type: REGISTER_SOUND,\n *     soundId: string,\n *     src: string,\n *     options: {\n *          loop: boolean\n *     }\n * }}\n */\nexport function registerSound(\n        soundId: string, soundName: string, options: Object = {}): Object {\n    return {\n        type: REGISTER_SOUND,\n        soundId,\n        src: `${getSoundsPath()}/${soundName}`,\n        options\n    };\n}\n\n/**\n * Stops playback of the sound identified by the given sound id.\n *\n * @param {string} soundId - The id of the sound to be stopped (the same one\n * which was used in {@link registerSound} to register the sound).\n * @returns {{\n *     type: STOP_SOUND,\n *     soundId: string\n * }}\n */\nexport function stopSound(soundId: string): Object {\n    return {\n        type: STOP_SOUND,\n        soundId\n    };\n}\n\n/**\n * Unregister the sound identified by the given id. It will make the\n * {@link SoundCollection} component stop rendering the corresponding\n * {@code HTMLAudioElement} which then should result in the audio resource\n * disposal.\n *\n * @param {string} soundId - The identifier of the {@link Sound} to be removed.\n * @returns {{\n *     type: UNREGISTER_SOUND,\n *     soundId: string\n * }}\n */\nexport function unregisterSound(soundId: string): Object {\n    return {\n        type: UNREGISTER_SOUND,\n        soundId\n    };\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Audio } from '../../media';\nimport type { AudioElement } from '../../media';\nimport { connect } from '../../redux';\n\nimport { _addAudioElement, _removeAudioElement } from '../actions';\nimport type { Sound } from '../reducer';\n\n/**\n * {@link SoundCollection}'s properties.\n */\ntype Props = {\n\n    /**\n     * Dispatches {@link _ADD_AUDIO_ELEMENT} Redux action which will store the\n     * {@link AudioElement} for a sound in the Redux store.\n     */\n    _addAudioElement: Function,\n\n    /**\n     * Dispatches {@link _REMOVE_AUDIO_ELEMENT} Redux action which will remove\n     * the sound's {@link AudioElement} from the Redux store.\n     */\n    _removeAudioElement: Function,\n\n    /**\n     * It's the 'base/sounds' reducer's state mapped to a property. It's used to\n     * render audio elements for every registered sound.\n     */\n    _sounds: Map<string, Sound>\n}\n\n/**\n * Collections of all global sounds used by the app for playing audio\n * notifications in response to various events. It renders <code>Audio</code>\n * element for each sound registered in the base/sounds feature. When the audio\n * resource is loaded it will emit add/remove audio element actions which will\n * attach the element to the corresponding {@link Sound} instance in the Redux\n * state. When that happens the sound can be played using the {@link playSound}\n * action.\n */\nclass SoundCollection extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        let key = 0;\n        const sounds = [];\n\n        for (const [ soundId, sound ] of this.props._sounds.entries()) {\n            const { options, src } = sound;\n\n            sounds.push(\n                React.createElement(\n                    Audio, {\n                        key,\n                        setRef: this._setRef.bind(this, soundId),\n                        src,\n                        loop: options.loop\n                    }));\n            key += 1;\n        }\n\n        return sounds;\n    }\n\n    /**\n     * Set the (reference to the) {@link AudioElement} object which implements\n     * the audio playback functionality.\n     *\n     * @param {string} soundId - The sound Id for the audio element for which\n     * the callback is being executed.\n     * @param {AudioElement} element - The {@link AudioElement} instance\n     * which implements the audio playback functionality.\n     * @protected\n     * @returns {void}\n     */\n    _setRef(soundId: string, element: ?AudioElement) {\n        if (element) {\n            this.props._addAudioElement(soundId, element);\n        } else {\n            this.props._removeAudioElement(soundId);\n        }\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to {@code SoundCollection}'s props.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _sounds: Map<string, Sound>\n * }}\n */\nfunction _mapStateToProps(state) {\n    return {\n        _sounds: state['features/base/sounds']\n    };\n}\n\n/**\n * Maps dispatching of some actions to React component props.\n *\n * @param {Function} dispatch - Redux action dispatcher.\n * @private\n * @returns {{\n *     _addAudioElement: void,\n *     _removeAudioElement: void\n * }}\n */\nexport function _mapDispatchToProps(dispatch: Function) {\n    return {\n        /**\n         * Dispatches action to store the {@link AudioElement} for\n         * a {@link Sound} identified by given <tt>soundId</tt> in the Redux\n         * store, so that the playback can be controlled through the Redux\n         * actions.\n         *\n         * @param {string} soundId - A global identifier which will be used to\n         * identify the {@link Sound} instance for which an audio element will\n         * be added.\n         * @param {AudioElement} audioElement - The {@link AudioElement}\n         * instance that will be stored in the Redux state of the base/sounds\n         * feature, as part of the {@link Sound} object. At that point the sound\n         * will be ready for playback.\n         * @private\n         * @returns {void}\n         */\n        _addAudioElement(soundId: string, audioElement: AudioElement) {\n            dispatch(_addAudioElement(soundId, audioElement));\n        },\n\n        /**\n         * Dispatches action to remove {@link AudioElement} from the Redux\n         * store for specific {@link Sound}, because it is no longer part of\n         * the DOM tree and the audio resource will be released.\n         *\n         * @param {string} soundId - The id of the {@link Sound} instance for\n         * which an {@link AudioElement} will be removed from the Redux store.\n         * @private\n         * @returns {void}\n         */\n        _removeAudioElement(soundId: string) {\n            dispatch(_removeAudioElement(soundId));\n        }\n    };\n}\n\nexport default connect(_mapStateToProps, _mapDispatchToProps)(SoundCollection);\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/sounds');\n","// @flow\n\nimport { MiddlewareRegistry } from '../redux';\n\nimport { PLAY_SOUND, STOP_SOUND } from './actionTypes';\nimport logger from './logger';\n\n/**\n * Implements the entry point of the middleware of the feature base/media.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case PLAY_SOUND:\n        _playSound(store, action.soundId);\n        break;\n    case STOP_SOUND:\n        _stopSound(store, action.soundId);\n        break;\n    }\n\n    return next(action);\n});\n\n/**\n * Plays sound from audio element registered in the Redux store.\n *\n * @param {Store} store - The Redux store instance.\n * @param {string} soundId - Audio element identifier.\n * @private\n * @returns {void}\n */\nfunction _playSound({ getState }, soundId) {\n    const sounds = getState()['features/base/sounds'];\n    const sound = sounds.get(soundId);\n\n    if (sound) {\n        if (sound.audioElement) {\n            sound.audioElement.play();\n        } else {\n            logger.warn(`PLAY_SOUND: sound not loaded yet for id: ${soundId}`);\n        }\n    } else {\n        logger.warn(`PLAY_SOUND: no sound found for id: ${soundId}`);\n    }\n}\n\n/**\n * Stop sound from audio element registered in the Redux store.\n *\n * @param {Store} store - The Redux store instance.\n * @param {string} soundId - Audio element identifier.\n * @private\n * @returns {void}\n */\nfunction _stopSound({ getState }, soundId) {\n    const sounds = getState()['features/base/sounds'];\n    const sound = sounds.get(soundId);\n\n    if (sound) {\n        const { audioElement } = sound;\n\n        if (audioElement) {\n            audioElement.stop();\n        } else {\n            logger.warn(`STOP_SOUND: sound not loaded yet for id: ${soundId}`);\n        }\n    } else {\n        logger.warn(`STOP_SOUND: no sound found for id: ${soundId}`);\n    }\n}\n","// @flow\n\nimport type { AudioElement } from '../media';\nimport { assign, ReducerRegistry } from '../redux';\n\nimport {\n    _ADD_AUDIO_ELEMENT,\n    _REMOVE_AUDIO_ELEMENT,\n    REGISTER_SOUND,\n    UNREGISTER_SOUND\n} from './actionTypes';\nimport logger from './logger';\n\n/**\n * The structure use by this reducer to describe a sound.\n */\nexport type Sound = {\n\n    /**\n     * The HTMLAudioElement which implements the audio playback functionality.\n     * Becomes available once the sound resource gets loaded and the sound can\n     * not be played until that happens.\n     */\n    audioElement?: AudioElement,\n\n    /**\n     * This field describes the source of the audio resource to be played. It\n     * can be either a path to the file or an object depending on the platform\n     * (native vs web).\n     */\n    src: Object | string,\n\n    /**\n     * This field is container for all optional parameters related to the sound.\n     */\n    options: Object\n}\n\n/**\n * Initial/default state of the feature {@code base/sounds}. It is a {@code Map}\n * of globally stored sounds.\n *\n * @type {Map<string, Sound>}\n */\nconst DEFAULT_STATE = new Map();\n\n/**\n * The base/sounds feature's reducer.\n */\nReducerRegistry.register(\n    'features/base/sounds',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case _ADD_AUDIO_ELEMENT:\n        case _REMOVE_AUDIO_ELEMENT:\n            return _addOrRemoveAudioElement(state, action);\n\n        case REGISTER_SOUND:\n            return _registerSound(state, action);\n\n        case UNREGISTER_SOUND:\n            return _unregisterSound(state, action);\n\n        default:\n            return state;\n        }\n    });\n\n/**\n * Adds or removes {@link AudioElement} associated with a {@link Sound}.\n *\n * @param {Map<string, Sound>} state - The current Redux state of this feature.\n * @param {_ADD_AUDIO_ELEMENT | _REMOVE_AUDIO_ELEMENT} action - The action to be\n * handled.\n * @private\n * @returns {Map<string, Sound>}\n */\nfunction _addOrRemoveAudioElement(state, action) {\n    const isAddAction = action.type === _ADD_AUDIO_ELEMENT;\n    const nextState = new Map(state);\n    const { soundId } = action;\n\n    const sound = nextState.get(soundId);\n\n    if (sound) {\n        if (isAddAction) {\n            nextState.set(soundId,\n                assign(sound, {\n                    audioElement: action.audioElement\n                }));\n        } else {\n            nextState.set(soundId,\n                assign(sound, {\n                    audioElement: undefined\n                }));\n        }\n    } else {\n        logger.warn(`${action.type}: no sound for id: ${soundId}`);\n    }\n\n    return nextState;\n}\n\n/**\n * Registers a new {@link Sound} for given id and source. It will make\n * the {@link SoundCollection} component render HTMLAudioElement for given\n * source making it available for playback through the redux actions.\n *\n * @param {Map<string, Sound>} state - The current Redux state of the sounds\n * features.\n * @param {REGISTER_SOUND} action - The register sound action.\n * @private\n * @returns {Map<string, Sound>}\n */\nfunction _registerSound(state, action) {\n    const nextState = new Map(state);\n\n    nextState.set(action.soundId, {\n        src: action.src,\n        options: action.options\n    });\n\n    return nextState;\n}\n\n/**\n * Unregisters a {@link Sound} which will make the {@link SoundCollection}\n * component stop rendering the corresponding HTMLAudioElement. This will\n * result further in the audio resource disposal.\n *\n * @param {Map<string, Sound>} state - The current Redux state of this feature.\n * @param {UNREGISTER_SOUND} action - The unregister sound action.\n * @private\n * @returns {Map<string, Sound>}\n */\nfunction _unregisterSound(state, action) {\n    const nextState = new Map(state);\n\n    nextState.delete(action.soundId);\n\n    return nextState;\n}\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\n\nimport './middleware';\nimport './reducer';\n","/**\n * The value for the \"var\" attribute of feature tag in disco-info packets.\n */\nexport const DISCO_REMOTE_CONTROL_FEATURE\n    = 'http://jitsi.org/meet/remotecontrol';\n\n/**\n * Types of remote-control events.\n  * @readonly\n  * @enum {string}\n */\nexport const EVENTS = {\n    mousemove: 'mousemove',\n    mousedown: 'mousedown',\n    mouseup: 'mouseup',\n    mousedblclick: 'mousedblclick',\n    mousescroll: 'mousescroll',\n    keydown: 'keydown',\n    keyup: 'keyup',\n    permissions: 'permissions',\n    start: 'start',\n    stop: 'stop',\n    supported: 'supported'\n};\n\n/**\n * Types of remote-control requests.\n  * @readonly\n  * @enum {string}\n */\nexport const REQUESTS = {\n    start: 'start'\n};\n\n/**\n * Actions for the remote control permission events.\n * @readonly\n * @enum {string}\n */\nexport const PERMISSIONS_ACTIONS = {\n    request: 'request',\n    grant: 'grant',\n    deny: 'deny',\n    error: 'error'\n};\n\n/**\n * The type of remote control messages.\n */\nexport const REMOTE_CONTROL_MESSAGE_NAME = 'remote-control';\n\n/**\n * The remote control event.\n * @typedef {object} RemoteControlEvent\n * @property {EVENTS | REQUESTS} type - the type of the message\n * @property {number} x - avaibale for type === mousemove only. The new x\n * coordinate of the mouse\n * @property {number} y - For mousemove type - the new y\n * coordinate of the mouse and for mousescroll - represents the vertical\n * scrolling diff value\n * @property {number} button - 1(left), 2(middle) or 3 (right). Supported by\n * mousedown, mouseup and mousedblclick types.\n * @property {KEYS} key - Represents the key related to the event. Supported by\n * keydown and keyup types.\n * @property {KEYS[]} modifiers - Represents the modifier related to the event.\n * Supported by keydown and keyup types.\n * @property {PERMISSIONS_ACTIONS} action - Supported by type === permissions.\n * Represents the action related to the permissions event.\n *\n * Optional properties. Supported for permissions event for action === request:\n * @property {string} userId - The user id of the participant that has sent the\n * request.\n * @property {string} userJID - The full JID in the MUC of the user that has\n * sent the request.\n * @property {string} displayName - the displayName of the participant that has\n * sent the request.\n * @property {boolean} screenSharing - true if the SS is started for the local\n * participant and false if not.\n */\n","/**\n * The type of the action which clears the Toolbox visibility timeout.\n *\n * {\n *     type: CLEAR_TOOLBOX_TIMEOUT\n * }\n */\nexport const CLEAR_TOOLBOX_TIMEOUT = 'CLEAR_TOOLBOX_TIMEOUT';\n\n/**\n * The type of (redux) action which updates whether the conference is or is not\n * currently in full screen view.\n *\n * {\n *     type: FULL_SCREEN_CHANGED,\n *     fullScreen: boolean\n * }\n */\nexport const FULL_SCREEN_CHANGED = 'FULL_SCREEN_CHANGED';\n\n/**\n * The type of (redux) action which requests full screen mode be entered or\n * exited.\n *\n * {\n *     type: SET_FULL_SCREEN,\n *     fullScreen: boolean\n * }\n */\nexport const SET_FULL_SCREEN = 'SET_FULL_SCREEN';\n\n/**\n * The type of the (redux) action which shows/hides the OverflowMenu.\n *\n * {\n *     type: SET_OVERFLOW_MENU_VISIBLE,\n *     visible: boolean\n * }\n */\nexport const SET_OVERFLOW_MENU_VISIBLE = 'SET_OVERFLOW_MENU_VISIBLE';\n\n/**\n * The type of the action which sets the indicator which determiens whether a\n * fToolbar in the Toolbox is hovered.\n *\n * {\n *     type: SET_TOOLBAR_HOVERED,\n *     hovered: boolean\n * }\n */\nexport const SET_TOOLBAR_HOVERED = 'SET_TOOLBAR_HOVERED';\n\n/**\n * The type of the action which sets the permanent visibility of the Toolbox.\n *\n * {\n *     type: SET_TOOLBOX_ALWAYS_VISIBLE,\n *     alwaysVisible: boolean\n * }\n */\nexport const SET_TOOLBOX_ALWAYS_VISIBLE = 'SET_TOOLBOX_ALWAYS_VISIBLE';\n\n/**\n * The type of the (redux) action which enables/disables the Toolbox.\n *\n * {\n *     type: SET_TOOLBOX_ENABLED,\n *     enabled: boolean\n * }\n */\nexport const SET_TOOLBOX_ENABLED = 'SET_TOOLBOX_ENABLED';\n\n/**\n * The type of the action which sets a new Toolbox visibility timeout and its\n * delay.\n *\n * {\n *     type: SET_TOOLBOX_TIMEOUT,\n *     handler: Function,\n *     timeoutMS: number\n * }\n */\nexport const SET_TOOLBOX_TIMEOUT = 'SET_TOOLBOX_TIMEOUT';\n\n/**\n * The type of the action which sets the delay in milliseconds after which\n * the Toolbox visibility is to be changed.\n *\n * {\n *     type: SET_TOOLBOX_TIMEOUT_MS,\n *     timeoutMS: number\n * }\n */\nexport const SET_TOOLBOX_TIMEOUT_MS = 'SET_TOOLBOX_TIMEOUT_MS';\n\n/**\n * The type of the (redux) action which shows/hides the Toolbox.\n *\n * {\n *     type: SET_TOOLBOX_VISIBLE,\n *     visible: boolean\n * }\n */\nexport const SET_TOOLBOX_VISIBLE = 'SET_TOOLBOX_VISIBLE';\n\n/**\n * The type of the redux action which toggles the toolbox visibility regardless of it's current state.\n *\n * {\n *     type: TOGGLE_TOOLBOX_VISIBLE\n * }\n */\nexport const TOGGLE_TOOLBOX_VISIBLE = 'TOGGLE_TOOLBOX_VISIBLE';\n","/* @flow */\n\nimport {\n    CLEAR_TOOLBOX_TIMEOUT,\n    SET_OVERFLOW_MENU_VISIBLE,\n    SET_TOOLBAR_HOVERED,\n    SET_TOOLBOX_ALWAYS_VISIBLE,\n    SET_TOOLBOX_ENABLED,\n    SET_TOOLBOX_TIMEOUT,\n    SET_TOOLBOX_TIMEOUT_MS,\n    SET_TOOLBOX_VISIBLE,\n    TOGGLE_TOOLBOX_VISIBLE\n} from './actionTypes';\n\n\n/**\n * Signals that toolbox timeout should be cleared.\n *\n * @returns {{\n *     type: CLEAR_TOOLBOX_TIMEOUT\n * }}\n */\nexport function clearToolboxTimeout(): Object {\n    return {\n        type: CLEAR_TOOLBOX_TIMEOUT\n    };\n}\n\n/**\n * Shows/hides the overflow menu.\n *\n * @param {boolean} visible - True to show it or false to hide it.\n * @returns {{\n *     type: SET_OVERFLOW_MENU_VISIBLE,\n *     visible: boolean\n * }}\n */\nexport function setOverflowMenuVisible(visible: boolean): Object {\n    return {\n        type: SET_OVERFLOW_MENU_VISIBLE,\n        visible\n    };\n}\n\n/**\n * Signals that toolbar is hovered value should be changed.\n *\n * @param {boolean} hovered - Flag showing whether toolbar is hovered.\n * @returns {{\n *     type: SET_TOOLBAR_HOVERED,\n *     hovered: boolean\n * }}\n */\nexport function setToolbarHovered(hovered: boolean): Object {\n    return {\n        type: SET_TOOLBAR_HOVERED,\n        hovered\n    };\n}\n\n/**\n * Signals that always visible toolbars value should be changed.\n *\n * @param {boolean} alwaysVisible - Value to be set in redux store.\n * @returns {{\n *     type: SET_TOOLBOX_ALWAYS_VISIBLE,\n *     alwaysVisible: boolean\n * }}\n */\nexport function setToolboxAlwaysVisible(alwaysVisible: boolean): Object {\n    return {\n        type: SET_TOOLBOX_ALWAYS_VISIBLE,\n        alwaysVisible\n    };\n}\n\n/* eslint-disable flowtype/space-before-type-colon */\n\n/**\n * Enables/disables the toolbox.\n *\n * @param {boolean} enabled - True to enable the toolbox or false to disable it.\n * @returns {{\n *     type: SET_TOOLBOX_ENABLED,\n *     enabled: boolean\n * }}\n */\nexport function setToolboxEnabled(enabled: boolean): Object {\n    return {\n        type: SET_TOOLBOX_ENABLED,\n        enabled\n    };\n}\n\n/**\n * Dispatches an action which sets new timeout and clears the previous one.\n *\n * @param {Function} handler - Function to be invoked after the timeout.\n * @param {number} timeoutMS - Delay.\n * @returns {{\n *     type: SET_TOOLBOX_TIMEOUT,\n *     handler: Function,\n *     timeoutMS: number\n * }}\n */\nexport function setToolboxTimeout(handler: Function, timeoutMS: number)\n      : Object {\n    return {\n        type: SET_TOOLBOX_TIMEOUT,\n        handler,\n        timeoutMS\n    };\n}\n\n/* eslint-enable flowtype/space-before-type-colon */\n\n/**\n * Dispatches an action which sets new toolbox timeout value.\n *\n * @param {number} timeoutMS - Delay.\n * @returns {{\n *     type: SET_TOOLBOX_TIMEOUT_MS,\n *     timeoutMS: number\n * }}\n */\nexport function setToolboxTimeoutMS(timeoutMS: number): Object {\n    return {\n        type: SET_TOOLBOX_TIMEOUT_MS,\n        timeoutMS\n    };\n}\n\n/**\n * Shows/hides the toolbox.\n *\n * @param {boolean} visible - True to show the toolbox or false to hide it.\n * @returns {{\n *     type: SET_TOOLBOX_VISIBLE,\n *     visible: boolean\n * }}\n */\nexport function setToolboxVisible(visible: boolean): Object {\n    return {\n        type: SET_TOOLBOX_VISIBLE,\n        visible\n    };\n}\n\n/**\n * Action to toggle the toolbox visibility.\n *\n * @returns {{\n *     type: TOGGLE_TOOLBOX_VISIBLE\n * }}\n */\nexport function toggleToolboxVisible() {\n    return {\n        type: TOGGLE_TOOLBOX_VISIBLE\n    };\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    clearToolboxTimeout,\n    setToolboxTimeout,\n    setToolboxTimeoutMS,\n    setToolboxVisible\n} from './actions.native';\nimport {\n    FULL_SCREEN_CHANGED,\n    SET_FULL_SCREEN\n} from './actionTypes';\n\ndeclare var interfaceConfig: Object;\n\nexport * from './actions.native';\n\n/**\n * Docks/undocks the Toolbox.\n *\n * @param {boolean} dock - True if dock, false otherwise.\n * @returns {Function}\n */\nexport function dockToolbox(dock: boolean): Function {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        if (interfaceConfig.filmStripOnly) {\n            return;\n        }\n\n        const { timeoutMS, visible } = getState()['features/toolbox'];\n\n        if (dock) {\n            // First make sure the toolbox is shown.\n            visible || dispatch(showToolbox());\n\n            dispatch(clearToolboxTimeout());\n        } else if (visible) {\n            dispatch(\n                setToolboxTimeout(\n                    () => dispatch(hideToolbox()),\n                    timeoutMS));\n        } else {\n            dispatch(showToolbox());\n        }\n    };\n}\n\n/**\n * Signals that full screen mode has been entered or exited.\n *\n * @param {boolean} fullScreen - Whether or not full screen mode is currently\n * enabled.\n * @returns {{\n *     type: FULL_SCREEN_CHANGED,\n *     fullScreen: boolean\n * }}\n */\nexport function fullScreenChanged(fullScreen: boolean) {\n    return {\n        type: FULL_SCREEN_CHANGED,\n        fullScreen\n    };\n}\n\n/**\n * Hides the toolbox.\n *\n * @param {boolean} force - True to force the hiding of the toolbox without\n * caring about the extended toolbar side panels.\n * @returns {Function}\n */\nexport function hideToolbox(force: boolean = false): Function {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const {\n            alwaysVisible,\n            hovered,\n            timeoutMS\n        } = state['features/toolbox'];\n\n        if (alwaysVisible) {\n            return;\n        }\n\n        dispatch(clearToolboxTimeout());\n\n        if (!force\n                && (hovered\n                    || state['features/invite'].calleeInfoVisible\n                    || state['features/chat'].isOpen)) {\n            dispatch(\n                setToolboxTimeout(\n                    () => dispatch(hideToolbox()),\n                    timeoutMS));\n        } else {\n            dispatch(setToolboxVisible(false));\n        }\n    };\n}\n\n/**\n * Signals a request to enter or exit full screen mode.\n *\n * @param {boolean} fullScreen - True to enter full screen mode, false to exit.\n * @returns {{\n *     type: SET_FULL_SCREEN,\n *     fullScreen: boolean\n * }}\n */\nexport function setFullScreen(fullScreen: boolean) {\n    return {\n        type: SET_FULL_SCREEN,\n        fullScreen\n    };\n}\n\n/**\n * Shows the toolbox for specified timeout.\n *\n * @param {number} timeout - Timeout for showing the toolbox.\n * @returns {Function}\n */\nexport function showToolbox(timeout: number = 0): Object {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const {\n            alwaysVisible,\n            enabled,\n            timeoutMS,\n            visible\n        } = state['features/toolbox'];\n\n        if (enabled && !visible) {\n            dispatch(setToolboxVisible(true));\n\n            // If the Toolbox is always visible, there's no need for a timeout\n            // to toggle its visibility.\n            if (!alwaysVisible) {\n                dispatch(\n                    setToolboxTimeout(\n                        () => dispatch(hideToolbox()),\n                        timeout || timeoutMS));\n                dispatch(setToolboxTimeoutMS(interfaceConfig.TOOLBAR_TIMEOUT));\n            }\n        }\n    };\n}\n","// @flow\n\nimport {\n    ACTION_SHORTCUT_TRIGGERED,\n    AUDIO_MUTE,\n    createShortcutEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { MEDIA_TYPE } from '../../base/media';\nimport { connect } from '../../base/redux';\nimport { AbstractAudioMuteButton } from '../../base/toolbox';\nimport type { AbstractButtonProps } from '../../base/toolbox';\nimport { isLocalTrackMuted } from '../../base/tracks';\nimport {\n    isPrejoinAudioMuted,\n    isAudioDisabled,\n    isPrejoinPageVisible\n} from '../../prejoin';\nimport { muteLocal } from '../../remote-video-menu/actions';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} props of {@link AudioMuteButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether audio is currently muted or not.\n     */\n    _audioMuted: boolean,\n\n    /**\n     * Whether the button is disabled.\n     */\n    _disabled: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n}\n\n/**\n * Component that renders a toolbar button for toggling audio mute.\n *\n * @extends AbstractAudioMuteButton\n */\nclass AudioMuteButton extends AbstractAudioMuteButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.mute';\n    label = 'toolbar.mute';\n    tooltip = 'toolbar.mute';\n\n    /**\n     * Initializes a new {@code AudioMuteButton} instance.\n     *\n     * @param {Props} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onKeyboardShortcut = this._onKeyboardShortcut.bind(this);\n    }\n\n    /**\n     * Registers the keyboard shortcut that toggles the audio muting.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        typeof APP === 'undefined'\n            || APP.keyboardshortcut.registerShortcut(\n                'M',\n                null,\n                this._onKeyboardShortcut,\n                'keyboardShortcuts.mute');\n    }\n\n    /**\n     * Unregisters the keyboard shortcut that toggles the audio muting.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        typeof APP === 'undefined'\n            || APP.keyboardshortcut.unregisterShortcut('M');\n    }\n\n    /**\n     * Indicates if audio is currently muted ot nor.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isAudioMuted() {\n        return this.props._audioMuted;\n    }\n\n    _onKeyboardShortcut: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action to\n     * toggle the audio muting.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onKeyboardShortcut() {\n        sendAnalytics(\n            createShortcutEvent(\n                AUDIO_MUTE,\n                ACTION_SHORTCUT_TRIGGERED,\n                { enable: !this._isAudioMuted() }));\n\n        super._handleClick();\n    }\n\n    /**\n     * Changes the muted state.\n     *\n     * @param {boolean} audioMuted - Whether audio should be muted or not.\n     * @protected\n     * @returns {void}\n     */\n    _setAudioMuted(audioMuted: boolean) {\n        this.props.dispatch(muteLocal(audioMuted));\n    }\n\n    /**\n     * Return a boolean value indicating if this button is disabled or not.\n     *\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return this.props._disabled;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code AudioMuteButton} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _audioMuted: boolean,\n *     _disabled: boolean\n * }}\n */\nfunction _mapStateToProps(state): Object {\n    let _audioMuted;\n    let _disabled;\n\n    if (isPrejoinPageVisible(state)) {\n        _audioMuted = isPrejoinAudioMuted(state);\n        _disabled = state['features/base/config'].startSilent;\n    } else {\n        const tracks = state['features/base/tracks'];\n\n        _audioMuted = isLocalTrackMuted(tracks, MEDIA_TYPE.AUDIO);\n        _disabled = state['features/base/config'].startSilent || isAudioDisabled(state);\n    }\n\n    return {\n        _audioMuted,\n        _disabled\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(AudioMuteButton));\n","// @flow\n\nimport {\n    isAudioDisabled,\n    isPrejoinPageVisible,\n    isPrejoinVideoDisabled\n} from '../prejoin';\nimport { hasAvailableDevices } from '../base/devices';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Helper for getting the height of the toolbox.\n *\n * @returns {number} The height of the toolbox.\n */\nexport function getToolboxHeight() {\n    const toolbox = document.getElementById('new-toolbox');\n\n    return (toolbox && toolbox.clientHeight) || 0;\n}\n\n/**\n * Indicates if a toolbar button is enabled.\n *\n * @param {string} name - The name of the setting section as defined in\n * interface_config.js.\n * @returns {boolean} - True to indicate that the given toolbar button\n * is enabled, false - otherwise.\n */\nexport function isButtonEnabled(name: string) {\n    return interfaceConfig.TOOLBAR_BUTTONS.indexOf(name) !== -1;\n}\n\n\n/**\n * Indicates if the toolbox is visible or not.\n *\n * @param {string} state - The state from the Redux store.\n * @returns {boolean} - True to indicate that the toolbox is visible, false -\n * otherwise.\n */\nexport function isToolboxVisible(state: Object) {\n    const { iAmSipGateway } = state['features/base/config'];\n    const {\n        alwaysVisible,\n        timeoutID,\n        visible\n    } = state['features/toolbox'];\n    const { audioSettingsVisible, videoSettingsVisible } = state['features/settings'];\n\n    return Boolean(!iAmSipGateway && (timeoutID || visible || alwaysVisible\n                                      || audioSettingsVisible || videoSettingsVisible));\n}\n\n/**\n * Indicates if the audio settings button is disabled or not.\n *\n * @param {string} state - The state from the Redux store.\n * @returns {boolean}\n */\nexport function isAudioSettingsButtonDisabled(state: Object) {\n    const devicesMissing = !hasAvailableDevices(state, 'audioInput')\n          && !hasAvailableDevices(state, 'audioOutput');\n\n    return isPrejoinPageVisible(state)\n        ? devicesMissing || isAudioDisabled(state)\n        : devicesMissing;\n}\n\n/**\n * Indicates if the video settings button is disabled or not.\n *\n * @param {string} state - The state from the Redux store.\n * @returns {boolean}\n */\nexport function isVideoSettingsButtonDisabled(state: Object) {\n    const devicesMissing = !hasAvailableDevices(state, 'videoInput');\n\n    return isPrejoinPageVisible(state)\n        ? devicesMissing || isPrejoinVideoDisabled(state)\n        : devicesMissing;\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport AudioMuteButton from '../AudioMuteButton';\nimport { isAudioSettingsButtonDisabled } from '../../functions';\nimport { IconArrowDown } from '../../../base/icons';\nimport JitsiMeetJS from '../../../base/lib-jitsi-meet/_';\nimport { ToolboxButtonWithIcon } from '../../../base/toolbox';\nimport { connect } from '../../../base/redux';\nimport { getMediaPermissionPromptVisibility } from '../../../overlay';\nimport { AudioSettingsPopup, toggleAudioSettings } from '../../../settings';\n\ntype Props = {\n\n    /**\n     * Click handler for the small icon. Opens audio options.\n     */\n    onAudioOptionsClick: Function,\n\n    /**\n     * Whether the permission prompt is visible or not.\n     * Useful for enabling the button on permission grant.\n     */\n    permissionPromptVisibility: boolean,\n\n    /**\n     * If the button should be disabled.\n     */\n    isDisabled: boolean,\n\n    /**\n     * Flag controlling the visibility of the button.\n     */\n    visible: boolean,\n};\n\ntype State = {\n\n    /**\n     * If there are permissions for audio devices.\n     */\n    hasPermissions: boolean,\n}\n\n/**\n * Button used for audio & audio settings.\n *\n * @returns {ReactElement}\n */\nclass AudioSettingsButton extends Component<Props, State> {\n    _isMounted: boolean;\n\n    /**\n     * Initializes a new {@code AudioSettingsButton} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        this._isMounted = true;\n        this.state = {\n            hasPermissions: false\n        };\n    }\n\n    /**\n     * Updates device permissions.\n     *\n     * @returns {Promise<void>}\n     */\n    async _updatePermissions() {\n        const hasPermissions = await JitsiMeetJS.mediaDevices.isDevicePermissionGranted(\n            'audio',\n        );\n\n        this._isMounted && this.setState({\n            hasPermissions\n        });\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._updatePermissions();\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps) {\n        if (this.props.permissionPromptVisibility !== prevProps.permissionPromptVisibility) {\n            this._updatePermissions();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount}.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._isMounted = false;\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { isDisabled, onAudioOptionsClick, visible } = this.props;\n        const settingsDisabled = !this.state.hasPermissions || isDisabled;\n\n        return visible ? (\n            <AudioSettingsPopup>\n                <ToolboxButtonWithIcon\n                    icon = { IconArrowDown }\n                    iconDisabled = { settingsDisabled }\n                    onIconClick = { onAudioOptionsClick }>\n                    <AudioMuteButton />\n                </ToolboxButtonWithIcon>\n            </AudioSettingsPopup>\n        ) : null;\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    return {\n        isDisabled: isAudioSettingsButtonDisabled(state),\n        permissionPromptVisibility: getMediaPermissionPromptVisibility(state)\n    };\n}\n\nconst mapDispatchToProps = {\n    onAudioOptionsClick: toggleAudioSettings\n};\n\nexport default connect(\n    mapStateToProps,\n    mapDispatchToProps,\n)(AudioSettingsButton);\n","// @flow\n\nimport {\n    ACTION_SHORTCUT_TRIGGERED,\n    VIDEO_MUTE,\n    createShortcutEvent,\n    createToolbarEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { setAudioOnly } from '../../base/audio-only';\nimport { translate } from '../../base/i18n';\nimport {\n    VIDEO_MUTISM_AUTHORITY,\n    setVideoMuted\n} from '../../base/media';\nimport { connect } from '../../base/redux';\nimport { AbstractVideoMuteButton } from '../../base/toolbox';\nimport type { AbstractButtonProps } from '../../base/toolbox';\nimport { getLocalVideoType, isLocalVideoTrackMuted } from '../../base/tracks';\nimport {\n    isPrejoinPageVisible,\n    isPrejoinVideoDisabled,\n    isPrejoinVideoMuted\n} from '../../prejoin';\nimport UIEvents from '../../../../service/UI/UIEvents';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} props of {@link VideoMuteButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether the current conference is in audio only mode or not.\n     */\n    _audioOnly: boolean,\n\n    /**\n     * MEDIA_TYPE of the local video.\n     */\n    _videoMediaType: string,\n\n    /**\n     * Whether video is currently muted or not.\n     */\n    _videoMuted: boolean,\n\n    /**\n     * Whether video button is disabled or not.\n     */\n    _videoDisabled: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n}\n\n/**\n * Component that renders a toolbar button for toggling video mute.\n *\n * @extends AbstractVideoMuteButton\n */\nclass VideoMuteButton extends AbstractVideoMuteButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.videomute';\n    label = 'toolbar.videomute';\n    tooltip = 'toolbar.videomute';\n\n    /**\n     * Initializes a new {@code VideoMuteButton} instance.\n     *\n     * @param {Props} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onKeyboardShortcut = this._onKeyboardShortcut.bind(this);\n    }\n\n    /**\n     * Registers the keyboard shortcut that toggles the video muting.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        typeof APP === 'undefined'\n            || APP.keyboardshortcut.registerShortcut(\n                'V',\n                null,\n                this._onKeyboardShortcut,\n                'keyboardShortcuts.videoMute');\n    }\n\n    /**\n     * Unregisters the keyboard shortcut that toggles the video muting.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        typeof APP === 'undefined'\n            || APP.keyboardshortcut.unregisterShortcut('V');\n    }\n\n    /**\n     * Indicates if video is currently disabled or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return this.props._videoDisabled;\n    }\n\n    /**\n     * Indicates if video is currently muted ot nor.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isVideoMuted() {\n        return this.props._videoMuted;\n    }\n\n    _onKeyboardShortcut: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action to\n     * toggle the video muting.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onKeyboardShortcut() {\n        sendAnalytics(\n            createShortcutEvent(\n                VIDEO_MUTE,\n                ACTION_SHORTCUT_TRIGGERED,\n                { enable: !this._isVideoMuted() }));\n\n        super._handleClick();\n    }\n\n    /**\n     * Changes the muted state.\n     *\n     * @override\n     * @param {boolean} videoMuted - Whether video should be muted or not.\n     * @protected\n     * @returns {void}\n     */\n    _setVideoMuted(videoMuted: boolean) {\n        sendAnalytics(createToolbarEvent(VIDEO_MUTE, { enable: videoMuted }));\n        if (this.props._audioOnly) {\n            this.props.dispatch(\n                setAudioOnly(false, /* ensureTrack */ true));\n        }\n        const mediaType = this.props._videoMediaType;\n\n        this.props.dispatch(\n            setVideoMuted(\n                videoMuted,\n                mediaType,\n                VIDEO_MUTISM_AUTHORITY.USER,\n                /* ensureTrack */ true));\n\n        // FIXME: The old conference logic still relies on this event being\n        // emitted.\n        typeof APP === 'undefined'\n            || APP.UI.emitEvent(UIEvents.VIDEO_MUTED, videoMuted, true);\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code VideoMuteButton} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _audioOnly: boolean,\n *     _videoMuted: boolean\n * }}\n */\nfunction _mapStateToProps(state): Object {\n    const { enabled: audioOnly } = state['features/base/audio-only'];\n    const tracks = state['features/base/tracks'];\n    let _videoMuted = isLocalVideoTrackMuted(tracks);\n    let _videoDisabled = false;\n\n    if (isPrejoinPageVisible(state)) {\n        _videoMuted = isPrejoinVideoMuted(state);\n        _videoDisabled = isPrejoinVideoDisabled(state);\n    }\n\n    return {\n        _audioOnly: Boolean(audioOnly),\n        _videoDisabled,\n        _videoMediaType: getLocalVideoType(tracks),\n        _videoMuted\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(VideoMuteButton));\n","// @flow\n\nimport React, { Component } from 'react';\nimport { isVideoSettingsButtonDisabled } from '../../functions';\nimport { toggleVideoSettings, VideoSettingsPopup } from '../../../settings';\nimport VideoMuteButton from '../VideoMuteButton';\nimport JitsiMeetJS from '../../../base/lib-jitsi-meet/_';\nimport { IconArrowDown } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport { ToolboxButtonWithIcon } from '../../../base/toolbox';\nimport { getMediaPermissionPromptVisibility } from '../../../overlay';\n\ntype Props = {\n\n    /**\n     * Click handler for the small icon. Opens video options.\n     */\n    onVideoOptionsClick: Function,\n\n    /**\n     * Whether the permission prompt is visible or not.\n     * Useful for enabling the button on initial permission grant.\n     */\n    permissionPromptVisibility: boolean,\n\n    /**\n     * If the button should be disabled\n     */\n    isDisabled: boolean,\n\n    /**\n     * Flag controlling the visibility of the button.\n     */\n    visible: boolean,\n};\n\ntype State = {\n\n    /**\n     * Whether the app has video permissions or not.\n     */\n    hasPermissions: boolean,\n};\n\n/**\n * Button used for video & video settings.\n *\n * @returns {ReactElement}\n */\nclass VideoSettingsButton extends Component<Props, State> {\n    _isMounted: boolean;\n\n    /**\n     * Initializes a new {@code VideoSettingsButton} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        this._isMounted = true;\n        this.state = {\n            hasPermissions: false\n        };\n    }\n\n    /**\n     * Updates device permissions.\n     *\n     * @returns {Promise<void>}\n     */\n    async _updatePermissions() {\n        const hasPermissions = await JitsiMeetJS.mediaDevices.isDevicePermissionGranted(\n            'video',\n        );\n\n        this._isMounted && this.setState({\n            hasPermissions\n        });\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._updatePermissions();\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps) {\n        if (this.props.permissionPromptVisibility !== prevProps.permissionPromptVisibility) {\n            this._updatePermissions();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount}.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._isMounted = false;\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { isDisabled, onVideoOptionsClick, visible } = this.props;\n        const iconDisabled = !this.state.hasPermissions || isDisabled;\n\n        return visible ? (\n            <VideoSettingsPopup>\n                <ToolboxButtonWithIcon\n                    icon = { IconArrowDown }\n                    iconDisabled = { iconDisabled }\n                    onIconClick = { onVideoOptionsClick }>\n                    <VideoMuteButton />\n                </ToolboxButtonWithIcon>\n            </VideoSettingsPopup>\n        ) : null;\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    return {\n        isDisabled: isVideoSettingsButtonDisabled(state),\n        permissionPromptVisibility: getMediaPermissionPromptVisibility(state)\n    };\n}\n\nconst mapDispatchToProps = {\n    onVideoOptionsClick: toggleVideoSettings\n};\n\nexport default connect(\n    mapStateToProps,\n    mapDispatchToProps,\n)(VideoSettingsButton);\n","/* @flow */\n\nimport { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractToolbarButton}.\n */\nexport type Props = {\n\n    /**\n     * A succinct description of what the button does. Used by accessibility\n     * tools and torture tests.\n     */\n    accessibilityLabel: string,\n\n    /**\n     * The Icon of this {@code AbstractToolbarButton}.\n     */\n    icon: Object,\n\n    /**\n     * The style of the Icon of this {@code AbstractToolbarButton}.\n     */\n    iconStyle?: Object,\n\n    /**\n     * On click handler.\n     */\n    onClick: Function,\n\n    /**\n     * {@code AbstractToolbarButton} styles.\n     */\n    style?: Array<string> | Object,\n\n    /**\n     * An optional modifier to render the button toggled.\n     */\n    toggled?: boolean,\n\n    /**\n     * The color underlaying the button.\n     */\n    underlayColor?: any\n};\n\n/**\n * Abstract (base) class for a button in {@link Toolbar}.\n *\n * @abstract\n */\nexport default class AbstractToolbarButton<P: Props> extends Component<P> {\n    /**\n     * Initializes a new {@code AbstractToolbarButton} instance.\n     *\n     * @param {Object} props - The React {@code Component} props to initialize\n     * the new {@code AbstractToolbarButton} instance with.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onClick = this._onClick.bind(this);\n    }\n\n    _onClick: (any) => any;\n\n    /**\n     * Handles clicking/pressing this {@code AbstractToolbarButton} by\n     * forwarding the event to the {@code onClick} prop of this instance if any.\n     *\n     * @protected\n     * @returns {*} The result returned by the invocation of the {@code onClick}\n     * prop of this instance if any.\n     */\n    _onClick(...args) {\n        const { onClick } = this.props;\n\n        return onClick && onClick(...args);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return this._renderButton(this._renderIcon());\n    }\n\n    _renderButton: (React$Element<any> | null) => React$Element<any>;\n\n    _renderIcon: () => React$Element<any> | null;\n}\n","/* @flow */\n\nimport Tooltip from '@atlaskit/tooltip';\nimport React from 'react';\n\nimport { Icon } from '../../../base/icons';\n\nimport AbstractToolbarButton from '../AbstractToolbarButton';\nimport type { Props as AbstractToolbarButtonProps }\n    from '../AbstractToolbarButton';\n\n/**\n * The type of the React {@code Component} props of {@link ToolbarButton}.\n */\ntype Props = AbstractToolbarButtonProps & {\n\n    /**\n     * The text to display in the tooltip.\n     */\n    tooltip: string,\n\n    /**\n     * From which direction the tooltip should appear, relative to the\n     * button.\n     */\n    tooltipPosition: string\n};\n\n/**\n * Represents a button in the toolbar.\n *\n * @extends AbstractToolbarButton\n */\nclass ToolbarButton extends AbstractToolbarButton<Props> {\n    /**\n     * Default values for {@code ToolbarButton} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        tooltipPosition: 'top'\n    };\n\n    /**\n     * Renders the button of this {@code ToolbarButton}.\n     *\n     * @param {Object} children - The children, if any, to be rendered inside\n     * the button. Presumably, contains the icon of this {@code ToolbarButton}.\n     * @protected\n     * @returns {ReactElement} The button of this {@code ToolbarButton}.\n     */\n    _renderButton(children) {\n        return (\n            <div\n                aria-label = { this.props.accessibilityLabel }\n                className = 'toolbox-button'\n                onClick = { this.props.onClick }>\n                { this.props.tooltip\n                    ? <Tooltip\n                        content = { this.props.tooltip }\n                        position = { this.props.tooltipPosition }>\n                        { children }\n                    </Tooltip>\n                    : children }\n            </div>\n        );\n    }\n\n    /**\n     * Renders the icon of this {@code ToolbarButton}.\n     *\n     * @inheritdoc\n     */\n    _renderIcon() {\n        return (\n            <div className = { `toolbox-icon ${this.props.toggled ? 'toggled' : ''}` }>\n                <Icon src = { this.props.icon } />\n            </div>\n        );\n    }\n}\n\nexport default ToolbarButton;\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { IconDownload } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { openURLInBrowser } from '../../base/util';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox';\n\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The URL to the applications page.\n     */\n    _downloadAppsUrl: string\n};\n\n/**\n * Implements an {@link AbstractButton} to open the applications page in a new window.\n */\nclass DownloadButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.download';\n    icon = IconDownload;\n    label = 'toolbar.download';\n\n    /**\n     * Handles clicking / pressing the button, and opens a new window with the user documentation.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        sendAnalytics(createToolbarEvent('download.pressed'));\n        openURLInBrowser(this.props._downloadAppsUrl);\n    }\n}\n\n\n/**\n * Maps part of the redux state to the component's props.\n *\n * @param {Object} state - The redux store/state.\n * @returns {Object}\n */\nfunction _mapStateToProps(state: Object) {\n    const { downloadAppsUrl } = state['features/base/config'].deploymentUrls || {};\n    const visible = typeof downloadAppsUrl === 'string';\n\n    return {\n        _downloadAppsUrl: downloadAppsUrl,\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(DownloadButton));\n","// @flow\n\nimport _ from 'lodash';\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { appNavigate } from '../../app';\nimport { disconnect } from '../../base/connection';\nimport { translate } from '../../base/i18n';\nimport { connect } from '../../base/redux';\nimport { AbstractHangupButton } from '../../base/toolbox';\nimport type { AbstractButtonProps } from '../../base/toolbox';\n\n/**\n * The type of the React {@code Component} props of {@link HangupButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\n/**\n * Component that renders a toolbar button for leaving the current conference.\n *\n * @extends AbstractHangupButton\n */\nclass HangupButton extends AbstractHangupButton<Props, *> {\n    _hangup: Function;\n\n    accessibilityLabel = 'toolbar.accessibilityLabel.hangup';\n    label = 'toolbar.hangup';\n    tooltip = 'toolbar.hangup';\n\n    /**\n     * Initializes a new HangupButton instance.\n     *\n     * @param {Props} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._hangup = _.once(() => {\n            sendAnalytics(createToolbarEvent('hangup'));\n\n            // FIXME: these should be unified.\n            if (navigator.product === 'ReactNative') {\n                this.props.dispatch(appNavigate(undefined));\n            } else {\n                this.props.dispatch(disconnect(true));\n            }\n        });\n    }\n\n    /**\n     * Helper function to perform the actual hangup action.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    _doHangup() {\n        this._hangup();\n    }\n}\n\nexport default translate(connect()(HangupButton));\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { IconHelp } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { openURLInBrowser } from '../../base/util';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox';\n\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The URL to the user documenation.\n     */\n    _userDocumentationURL: string\n};\n\n/**\n * Implements an {@link AbstractButton} to open the user documentation in a new window.\n */\nclass HelpButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.help';\n    icon = IconHelp;\n    label = 'toolbar.help';\n\n    /**\n     * Handles clicking / pressing the button, and opens a new window with the user documentation.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        sendAnalytics(createToolbarEvent('help.pressed'));\n        openURLInBrowser(this.props._userDocumentationURL);\n    }\n}\n\n\n/**\n * Maps part of the redux state to the component's props.\n *\n * @param {Object} state - The redux store/state.\n * @returns {Object}\n */\nfunction _mapStateToProps(state: Object) {\n    const { userDocumentationURL } = state['features/base/config'].deploymentUrls || {};\n    const visible = typeof userDocumentationURL === 'string';\n\n    return {\n        _userDocumentationURL: userDocumentationURL,\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(HelpButton));\n","/* @flow */\n\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport React, { Component } from 'react';\n\nimport { createToolbarEvent, sendAnalytics } from '../../../analytics';\nimport { translate } from '../../../base/i18n';\nimport { IconMenuThumb } from '../../../base/icons';\n\nimport ToolbarButton from './ToolbarButton';\n\n/**\n * The type of the React {@code Component} props of {@link OverflowMenuButton}.\n */\ntype Props = {\n\n    /**\n     * A child React Element to display within {@code InlineDialog}.\n     */\n    children: React$Node,\n\n    /**\n     * Whether or not the OverflowMenu popover should display.\n     */\n    isOpen: boolean,\n\n    /**\n     * Calback to change the visibility of the overflow menu.\n     */\n    onVisibilityChange: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * A React {@code Component} for opening or closing the {@code OverflowMenu}.\n *\n * @extends Component\n */\nclass OverflowMenuButton extends Component<Props> {\n    /**\n     * Initializes a new {@code OverflowMenuButton} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onCloseDialog = this._onCloseDialog.bind(this);\n        this._onToggleDialogVisibility\n            = this._onToggleDialogVisibility.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { children, isOpen, t } = this.props;\n\n        return (\n            <div className = 'toolbox-button-wth-dialog'>\n                <InlineDialog\n                    content = { children }\n                    isOpen = { isOpen }\n                    onClose = { this._onCloseDialog }\n                    position = { 'top right' }>\n                    <ToolbarButton\n                        accessibilityLabel =\n                            { t('toolbar.accessibilityLabel.moreActions') }\n                        icon = { IconMenuThumb }\n                        onClick = { this._onToggleDialogVisibility }\n                        toggled = { isOpen }\n                        tooltip = { t('toolbar.moreActions') } />\n                </InlineDialog>\n            </div>\n        );\n    }\n\n    _onCloseDialog: () => void;\n\n    /**\n     * Callback invoked when {@code InlineDialog} signals that it should be\n     * close.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onCloseDialog() {\n        this.props.onVisibilityChange(false);\n    }\n\n    _onToggleDialogVisibility: () => void;\n\n    /**\n     * Callback invoked to signal that an event has occurred that should change\n     * the visibility of the {@code InlineDialog} component.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToggleDialogVisibility() {\n        sendAnalytics(createToolbarEvent('overflow'));\n\n        this.props.onVisibilityChange(!this.props.isOpen);\n    }\n}\n\nexport default translate(OverflowMenuButton);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Avatar } from '../../../base/avatar';\nimport { getLocalParticipant } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of\n * {@link OverflowMenuProfileItem}.\n */\ntype Props = {\n\n    /**\n     * The redux representation of the local participant.\n     */\n    _localParticipant: Object,\n\n    /**\n     * Whether the button support clicking or not.\n     */\n    _unclickable: boolean,\n\n    /**\n     * The callback to invoke when {@code OverflowMenuProfileItem} is\n     * clicked.\n     */\n    onClick: Function\n};\n\n/**\n * A React {@code Component} for displaying a link with a profile avatar as an\n * icon.\n *\n * @extends Component\n */\nclass OverflowMenuProfileItem extends Component<Props> {\n    /**\n     * Initializes a new {@code OverflowMenuProfileItem} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _localParticipant, _unclickable } = this.props;\n        const classNames = `overflow-menu-item ${\n            _unclickable ? 'unclickable' : ''}`;\n        let displayName;\n\n        if (_localParticipant && _localParticipant.name) {\n            displayName = _localParticipant.name;\n        } else {\n            displayName = interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME;\n        }\n\n        return (\n            <li\n                aria-label = 'Edit your profile'\n                className = { classNames }\n                onClick = { this._onClick }>\n                <span className = 'overflow-menu-item-icon'>\n                    <Avatar\n                        participantId = { _localParticipant.id }\n                        size = { 24 } />\n                </span>\n                <span className = 'profile-text'>\n                    { displayName }\n                </span>\n            </li>\n        );\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Invokes an on click callback if clicking is allowed.\n     *\n     * @returns {void}\n     */\n    _onClick() {\n        if (!this.props._unclickable) {\n            this.props.onClick();\n        }\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code OverflowMenuProfileItem} component's props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _localParticipant: Object,\n *     _unclickable: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    return {\n        _localParticipant: getLocalParticipant(state),\n        _unclickable: !state['features/base/jwt'].isGuest\n            || !interfaceConfig.SETTINGS_SECTIONS.includes('profile')\n    };\n}\n\nexport default connect(_mapStateToProps)(OverflowMenuProfileItem);\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../../analytics';\nimport { openDialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { IconMuteEveryone } from '../../../base/icons';\nimport { getLocalParticipant, PARTICIPANT_ROLE } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox';\nimport { MuteEveryoneDialog } from '../../../remote-video-menu';\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /*\n     ** Whether the local participant is a moderator or not.\n     */\n    isModerator: Boolean,\n\n    /**\n     * The ID of the local participant.\n     */\n    localParticipantId: string\n};\n\n/**\n * Implements a React {@link Component} which displays a button for audio muting\n * every participant (except the local one)\n */\nclass MuteEveryoneButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.muteEveryone';\n    icon = IconMuteEveryone;\n    label = 'toolbar.muteEveryone';\n    tooltip = 'toolbar.muteEveryone';\n\n    /**\n     * Handles clicking / pressing the button, and opens a confirmation dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, localParticipantId } = this.props;\n\n        sendAnalytics(createToolbarEvent('mute.everyone.pressed'));\n        dispatch(openDialog(MuteEveryoneDialog, {\n            exclude: [ localParticipantId ]\n        }));\n    }\n}\n\n/**\n * Maps part of the redux state to the component's props.\n *\n * @param {Object} state - The redux store/state.\n * @param {Props} ownProps - The component's own props.\n * @returns {Object}\n */\nfunction _mapStateToProps(state: Object, ownProps: Props) {\n    const localParticipant = getLocalParticipant(state);\n    const isModerator = localParticipant.role === PARTICIPANT_ROLE.MODERATOR;\n    const { visible } = ownProps;\n    const { disableRemoteMute } = state['features/base/config'];\n\n    return {\n        isModerator,\n        localParticipantId: localParticipant.id,\n        visible: visible && isModerator && !disableRemoteMute\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(MuteEveryoneButton));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport {\n    ACTION_SHORTCUT_TRIGGERED,\n    createShortcutEvent,\n    createToolbarEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { openDialog, toggleDialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport {\n    IconChat,\n    IconExitFullScreen,\n    IconFeedback,\n    IconFullScreen,\n    IconInvite,\n    IconOpenInNew,\n    IconPresentation,\n    IconRaisedHand,\n    IconRec,\n    IconShareDesktop,\n    IconShareVideo,\n    IconPoker\n} from '../../../base/icons';\nimport {\n    getLocalParticipant,\n    getParticipants,\n    participantUpdated,\n    getParticipantDisplayName\n} from '../../../base/participants';\nimport { connect, equals } from '../../../base/redux';\nimport { OverflowMenuItem } from '../../../base/toolbox';\nimport { getLocalVideoTrack, toggleScreensharing } from '../../../base/tracks';\nimport { VideoBlurButton } from '../../../blur';\nimport { ChatCounter, toggleChat } from '../../../chat';\nimport { E2EEButton } from '../../../e2ee';\nimport { SharedDocumentButton } from '../../../etherpad';\nimport { openFeedbackDialog } from '../../../feedback';\nimport {\n    beginAddPeople,\n    InfoDialogButton,\n    isAddPeopleEnabled,\n    isDialOutEnabled\n} from '../../../invite';\nimport { openKeyboardShortcutsDialog } from '../../../keyboard-shortcuts';\nimport {\n    LocalRecordingButton,\n    LocalRecordingInfoDialog\n} from '../../../local-recording';\nimport {\n    LiveStreamButton,\n    RecordButton\n} from '../../../recording';\nimport {\n    SETTINGS_TABS,\n    SettingsButton,\n    openSettingsDialog\n} from '../../../settings';\nimport { toggleSharedVideo } from '../../../shared-video';\nimport { SpeakerStats } from '../../../speaker-stats';\nimport {\n    TileViewButton,\n    toggleTileView\n} from '../../../video-layout';\nimport {\n    OverflowMenuVideoQualityItem,\n    VideoQualityDialog\n} from '../../../video-quality';\n\nimport {\n    setFullScreen,\n    setOverflowMenuVisible,\n    setToolbarHovered\n} from '../../actions';\nimport AudioSettingsButton from './AudioSettingsButton';\nimport DownloadButton from '../DownloadButton';\nimport { isToolboxVisible } from '../../functions';\nimport HangupButton from '../HangupButton';\nimport HelpButton from '../HelpButton';\nimport OverflowMenuButton from './OverflowMenuButton';\nimport OverflowMenuProfileItem from './OverflowMenuProfileItem';\nimport MuteEveryoneButton from './MuteEveryoneButton';\nimport ToolbarButton from './ToolbarButton';\nimport VideoSettingsButton from './VideoSettingsButton';\nimport {\n    ClosedCaptionButton\n} from '../../../subtitles';\nimport { toolboxAction } from '../../../poker/functions';\n\n/**\n * The type of the React {@code Component} props of {@link Toolbox}.\n */\ntype Props = {\n\n    /**\n     * Whether or not the chat feature is currently displayed.\n     */\n    _chatOpen: boolean,\n\n    /**\n     * The {@code JitsiConference} for the current conference.\n     */\n    _conference: Object,\n\n    /**\n     * The tooltip key to use when screensharing is disabled. Or undefined\n     * if non to be shown and the button to be hidden.\n     */\n    _desktopSharingDisabledTooltipKey: boolean,\n\n    /**\n     * Whether or not screensharing is initialized.\n     */\n    _desktopSharingEnabled: boolean,\n\n    /**\n     * Whether or not a dialog is displayed.\n     */\n    _dialog: boolean,\n\n    /**\n     * Whether or not call feedback can be sent.\n     */\n    _feedbackConfigured: boolean,\n\n    /**\n     * Whether or not the app is currently in full screen.\n     */\n    _fullScreen: boolean,\n\n    /**\n     * Whether or not the tile view is enabled.\n     */\n    _tileViewEnabled: boolean,\n\n    /**\n     * Whether or not invite should be hidden, regardless of feature\n     * availability.\n     */\n    _hideInviteButton: boolean,\n\n    /**\n     * Whether or not the current user is logged in through a JWT.\n     */\n    _isGuest: boolean,\n\n    /**\n     * The ID of the local participant.\n     */\n    _localParticipantID: String,\n\n    /**\n     * The subsection of Redux state for local recording\n     */\n    _localRecState: Object,\n\n    /**\n     * Whether or not the overflow menu is visible.\n     */\n    _overflowMenuVisible: boolean,\n\n    /**\n     * Whether or not the local participant's hand is raised.\n     */\n    _raisedHand: boolean,\n\n    /**\n     * Whether or not the local participant is screensharing.\n     */\n    _screensharing: boolean,\n\n    /**\n     * Whether or not the local participant is sharing a YouTube video.\n     */\n    _sharingVideo: boolean,\n\n    /**\n     * Flag showing whether toolbar is visible.\n     */\n    _visible: boolean,\n\n    /**\n     * Set with the buttons which this Toolbox should display.\n     */\n    _visibleButtons: Set<string>,\n\n    _pokerAction: Object,\n    _nameToDisplay: Object,\n\n    /**\n     * Invoked to active other features of the app.\n     */\n    dispatch: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link Toolbox}.\n */\ntype State = {\n\n    /**\n     * The width of the browser's window.\n     */\n    windowWidth: number\n};\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n// XXX: We are not currently using state here, but in the future, when\n// interfaceConfig is part of redux we will. This will have to be retrieved from the store.\nconst visibleButtons = new Set(interfaceConfig.TOOLBAR_BUTTONS);\n\n/**\n * Implements the conference toolbox on React/Web.\n *\n * @extends Component\n */\nclass Toolbox extends Component<Props, State> {\n    /**\n     * Initializes a new {@code Toolbox} instance.\n     *\n     * @param {Props} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onMouseOut = this._onMouseOut.bind(this);\n        this._onMouseOver = this._onMouseOver.bind(this);\n        this._onResize = this._onResize.bind(this);\n        this._onSetOverflowVisible = this._onSetOverflowVisible.bind(this);\n\n        this._onShortcutToggleChat = this._onShortcutToggleChat.bind(this);\n        this._onShortcutPoker = this._onShortcutPoker.bind(this);\n        this._onShortcutToggleFullScreen = this._onShortcutToggleFullScreen.bind(this);\n        this._onShortcutToggleRaiseHand = this._onShortcutToggleRaiseHand.bind(this);\n        this._onShortcutToggleScreenshare = this._onShortcutToggleScreenshare.bind(this);\n        this._onShortcutToggleVideoQuality = this._onShortcutToggleVideoQuality.bind(this);\n        this._onToolbarOpenFeedback = this._onToolbarOpenFeedback.bind(this);\n        this._onToolbarOpenInvite = this._onToolbarOpenInvite.bind(this);\n        this._onToolbarOpenKeyboardShortcuts = this._onToolbarOpenKeyboardShortcuts.bind(this);\n        this._onToolbarOpenSpeakerStats = this._onToolbarOpenSpeakerStats.bind(this);\n        this._onToolbarOpenVideoQuality = this._onToolbarOpenVideoQuality.bind(this);\n        this._onToolbarToggleChat = this._onToolbarToggleChat.bind(this);\n        this._onToolbarPoker = this._onToolbarPoker.bind(this);\n        this._onToolbarToggleFullScreen = this._onToolbarToggleFullScreen.bind(this);\n        this._onToolbarToggleProfile = this._onToolbarToggleProfile.bind(this);\n        this._onToolbarToggleRaiseHand = this._onToolbarToggleRaiseHand.bind(this);\n        this._onToolbarToggleScreenshare = this._onToolbarToggleScreenshare.bind(this);\n        this._onToolbarToggleSharedVideo = this._onToolbarToggleSharedVideo.bind(this);\n        this._onToolbarOpenLocalRecordingInfoDialog = this._onToolbarOpenLocalRecordingInfoDialog.bind(this);\n        this._onShortcutToggleTileView = this._onShortcutToggleTileView.bind(this);\n\n        this.state = {\n            windowWidth: window.innerWidth\n        };\n    }\n\n    /**\n     * Sets keyboard shortcuts for to trigger ToolbarButtons actions.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        const KEYBOARD_SHORTCUTS = [\n            this._shouldShowButton('videoquality') && {\n                character: 'A',\n                exec: this._onShortcutToggleVideoQuality,\n                helpDescription: 'keyboardShortcuts.videoQuality'\n            },\n            this._shouldShowButton('chat') && {\n                character: 'C',\n                exec: this._onShortcutToggleChat,\n                helpDescription: 'keyboardShortcuts.toggleChat'\n            },\n            {\n                character: 'P',\n                exec: this._onShortcutPoker,\n                helpDescription: `poker.action.${this.props._pokerAction.type}`\n            },\n            this._shouldShowButton('desktop') && {\n                character: 'D',\n                exec: this._onShortcutToggleScreenshare,\n                helpDescription: 'keyboardShortcuts.toggleScreensharing'\n            },\n            this._shouldShowButton('raisehand') && {\n                character: 'R',\n                exec: this._onShortcutToggleRaiseHand,\n                helpDescription: 'keyboardShortcuts.raiseHand'\n            },\n            this._shouldShowButton('fullscreen') && {\n                character: 'S',\n                exec: this._onShortcutToggleFullScreen,\n                helpDescription: 'keyboardShortcuts.fullScreen'\n            },\n            this._shouldShowButton('tileview') && {\n                character: 'W',\n                exec: this._onShortcutToggleTileView,\n                helpDescription: 'toolbar.tileViewToggle'\n            }\n        ];\n\n        KEYBOARD_SHORTCUTS.forEach(shortcut => {\n            if (typeof shortcut === 'object') {\n                APP.keyboardshortcut.registerShortcut(\n                    shortcut.character,\n                    null,\n                    shortcut.exec,\n                    shortcut.helpDescription);\n            }\n        });\n\n        window.addEventListener('resize', this._onResize);\n    }\n\n    /**\n     * Update the visibility of the {@code OverflowMenuButton}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps) {\n        // Ensure the dialog is closed when the toolbox becomes hidden.\n        if (prevProps._overflowMenuVisible && !this.props._visible) {\n            this._onSetOverflowVisible(false);\n        }\n\n        if (prevProps._overflowMenuVisible\n            && !prevProps._dialog\n            && this.props._dialog) {\n            this._onSetOverflowVisible(false);\n            this.props.dispatch(setToolbarHovered(false));\n        }\n    }\n\n    /**\n     * Removes keyboard shortcuts registered by this component.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        [ 'A', 'C', 'D', 'R', 'S' ].forEach(letter =>\n            APP.keyboardshortcut.unregisterShortcut(letter));\n\n        window.removeEventListener('resize', this._onResize);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _visible, _visibleButtons } = this.props;\n        const rootClassNames = `new-toolbox ${_visible ? 'visible' : ''} ${\n            _visibleButtons.size ? '' : 'no-buttons'}`;\n\n        return (\n            <div\n                className = { rootClassNames }\n                id = 'new-toolbox'\n                onMouseOut = { this._onMouseOut }\n                onMouseOver = { this._onMouseOver }>\n                <div className = 'toolbox-background' />\n                { this._renderToolboxContent() }\n            </div>\n        );\n    }\n\n    /**\n     * Callback invoked to display {@code FeedbackDialog}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doOpenFeedback() {\n        const { _conference } = this.props;\n\n        this.props.dispatch(openFeedbackDialog(_conference));\n    }\n\n    /**\n     * Dispatches an action to display {@code KeyboardShortcuts}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doOpenKeyboardShorcuts() {\n        this.props.dispatch(openKeyboardShortcutsDialog());\n    }\n\n    /**\n     * Callback invoked to display {@code SpeakerStats}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doOpenSpeakerStats() {\n        this.props.dispatch(openDialog(SpeakerStats, {\n            conference: this.props._conference\n        }));\n    }\n\n    /**\n     * Dispatches an action to open the video quality dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doOpenVideoQuality() {\n        this.props.dispatch(openDialog(VideoQualityDialog));\n    }\n\n    /**\n     * Dispatches an action to toggle the display of chat.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleChat() {\n        this.props.dispatch(toggleChat());\n    }\n\n    _doPoker() {\n        this.props.dispatch(this.props._pokerAction);\n    }\n\n    /**\n     * Dispatches an action to toggle screensharing.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleFullScreen() {\n        const fullScreen = !this.props._fullScreen;\n\n        this.props.dispatch(setFullScreen(fullScreen));\n    }\n\n    /**\n     * Dispatches an action to show or hide the profile edit panel.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleProfile() {\n        this.props.dispatch(openSettingsDialog(SETTINGS_TABS.PROFILE));\n    }\n\n    /**\n     * Dispatches an action to toggle the local participant's raised hand state.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleRaiseHand() {\n        const { _localParticipantID, _raisedHand } = this.props;\n\n        this.props.dispatch(participantUpdated({\n            // XXX Only the local participant is allowed to update without\n            // stating the JitsiConference instance (i.e. participant property\n            // `conference` for a remote participant) because the local\n            // participant is uniquely identified by the very fact that there is\n            // only one local participant.\n\n            id: _localParticipantID,\n            local: true,\n            raisedHand: !_raisedHand\n        }));\n    }\n\n    /**\n     * Dispatches an action to toggle screensharing.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleScreenshare() {\n        if (this.props._desktopSharingEnabled) {\n            this.props.dispatch(toggleScreensharing());\n        }\n    }\n\n    /**\n     * Dispatches an action to toggle YouTube video sharing.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleSharedVideo() {\n        this.props.dispatch(toggleSharedVideo());\n    }\n\n    /**\n     * Dispatches an action to toggle the video quality dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleVideoQuality() {\n        this.props.dispatch(toggleDialog(VideoQualityDialog));\n    }\n\n    /**\n     * Dispaches an action to toggle tile view.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleTileView() {\n        this.props.dispatch(toggleTileView());\n    }\n\n    _onMouseOut: () => void;\n\n    /**\n     * Dispatches an action signaling the toolbar is not being hovered.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onMouseOut() {\n        this.props.dispatch(setToolbarHovered(false));\n    }\n\n    _onMouseOver: () => void;\n\n    /**\n     * Dispatches an action signaling the toolbar is being hovered.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onMouseOver() {\n        this.props.dispatch(setToolbarHovered(true));\n    }\n\n    _onResize: () => void;\n\n    /**\n     * A window resize handler used to calculate the number of buttons we can\n     * fit in the toolbar.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onResize() {\n        const width = window.innerWidth;\n\n        if (this.state.windowWidth !== width) {\n            this.setState({ windowWidth: width });\n        }\n    }\n\n\n    _onSetOverflowVisible: (boolean) => void;\n\n    /**\n     * Sets the visibility of the overflow menu.\n     *\n     * @param {boolean} visible - Whether or not the overflow menu should be\n     * displayed.\n     * @private\n     * @returns {void}\n     */\n    _onSetOverflowVisible(visible) {\n        this.props.dispatch(setOverflowMenuVisible(visible));\n    }\n\n    _onShortcutToggleChat: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action for\n     * toggling the display of chat.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutToggleChat() {\n        sendAnalytics(createShortcutEvent(\n            'toggle.chat',\n            {\n                enable: !this.props._chatOpen\n            }));\n\n        this._doToggleChat();\n    }\n\n    _onShortcutPoker: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action for\n     * starting poker.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutPoker() {\n        sendAnalytics(createShortcutEvent('poker'));\n        this._doPoker();\n    }\n\n    _onShortcutToggleVideoQuality: () => void;\n\n    /**\n    * Creates an analytics keyboard shortcut event and dispatches an action for\n    * toggling the display of Video Quality.\n    *\n    * @private\n    * @returns {void}\n    */\n    _onShortcutToggleVideoQuality() {\n        sendAnalytics(createShortcutEvent('video.quality'));\n\n        this._doToggleVideoQuality();\n    }\n\n    _onShortcutToggleTileView: () => void;\n\n    /**\n     * Dispatches an action for toggling the tile view.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutToggleTileView() {\n        sendAnalytics(createShortcutEvent(\n            'toggle.tileview',\n            {\n                enable: !this.props._tileViewEnabled\n            }));\n\n        this._doToggleTileView();\n    }\n\n    _onShortcutToggleFullScreen: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action for\n     * toggling full screen mode.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutToggleFullScreen() {\n        sendAnalytics(createShortcutEvent(\n            'toggle.fullscreen',\n            {\n                enable: !this.props._fullScreen\n            }));\n\n        this._doToggleFullScreen();\n    }\n\n    _onShortcutToggleRaiseHand: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action for\n     * toggling raise hand.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutToggleRaiseHand() {\n        sendAnalytics(createShortcutEvent(\n            'toggle.raise.hand',\n            ACTION_SHORTCUT_TRIGGERED,\n            { enable: !this.props._raisedHand }));\n\n        this._doToggleRaiseHand();\n    }\n\n    _onShortcutToggleScreenshare: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action for\n     * toggling screensharing.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutToggleScreenshare() {\n        sendAnalytics(createToolbarEvent(\n            'screen.sharing',\n            {\n                enable: !this.props._screensharing\n            }));\n\n        this._doToggleScreenshare();\n    }\n\n    _onToolbarOpenFeedback: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for toggling\n     * display of feedback.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarOpenFeedback() {\n        sendAnalytics(createToolbarEvent('feedback'));\n\n        this._doOpenFeedback();\n    }\n\n    _onToolbarOpenInvite: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for opening\n     * the modal for inviting people directly into the conference.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarOpenInvite() {\n        sendAnalytics(createToolbarEvent('invite'));\n        this.props.dispatch(beginAddPeople());\n    }\n\n    _onToolbarOpenKeyboardShortcuts: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for opening\n     * the modal for showing available keyboard shortcuts.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarOpenKeyboardShortcuts() {\n        sendAnalytics(createToolbarEvent('shortcuts'));\n\n        this._doOpenKeyboardShorcuts();\n    }\n\n    _onToolbarOpenSpeakerStats: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for opening\n     * the speaker stats modal.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarOpenSpeakerStats() {\n        sendAnalytics(createToolbarEvent('speaker.stats'));\n\n        this._doOpenSpeakerStats();\n    }\n\n    _onToolbarOpenVideoQuality: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for toggling\n     * open the video quality dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarOpenVideoQuality() {\n        sendAnalytics(createToolbarEvent('video.quality'));\n\n        this._doOpenVideoQuality();\n    }\n\n    _onToolbarToggleChat: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for toggling\n     * the display of chat.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarToggleChat() {\n        sendAnalytics(createToolbarEvent(\n            'toggle.chat',\n            {\n                enable: !this.props._chatOpen\n            }));\n\n        this._doToggleChat();\n    }\n\n    _onToolbarPoker: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for\n     * starting poker.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarPoker() {\n        sendAnalytics(createToolbarEvent('toggle.poker'));\n        this._doPoker();\n    }\n\n    _onToolbarToggleFullScreen: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for toggling\n     * full screen mode.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarToggleFullScreen() {\n        sendAnalytics(createToolbarEvent(\n            'toggle.fullscreen',\n                {\n                    enable: !this.props._fullScreen\n                }));\n\n        this._doToggleFullScreen();\n    }\n\n    _onToolbarToggleProfile: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for showing\n     * or hiding the profile edit panel.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarToggleProfile() {\n        sendAnalytics(createToolbarEvent('profile'));\n\n        this._doToggleProfile();\n    }\n\n    _onToolbarToggleRaiseHand: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for toggling\n     * raise hand.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarToggleRaiseHand() {\n        sendAnalytics(createToolbarEvent(\n            'raise.hand',\n            { enable: !this.props._raisedHand }));\n\n        this._doToggleRaiseHand();\n    }\n\n    _onToolbarToggleScreenshare: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for toggling\n     * screensharing.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarToggleScreenshare() {\n        if (!this.props._desktopSharingEnabled) {\n            return;\n        }\n\n        sendAnalytics(createShortcutEvent(\n            'toggle.screen.sharing',\n            ACTION_SHORTCUT_TRIGGERED,\n            { enable: !this.props._screensharing }));\n\n        this._doToggleScreenshare();\n    }\n\n    _onToolbarToggleSharedVideo: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for toggling\n     * the sharing of a YouTube video.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarToggleSharedVideo() {\n        sendAnalytics(createToolbarEvent('shared.video.toggled',\n            {\n                enable: !this.props._sharingVideo\n            }));\n\n        this._doToggleSharedVideo();\n    }\n\n    _onToolbarOpenLocalRecordingInfoDialog: () => void;\n\n    /**\n     * Opens the {@code LocalRecordingInfoDialog}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarOpenLocalRecordingInfoDialog() {\n        sendAnalytics(createToolbarEvent('local.recording'));\n\n        this.props.dispatch(openDialog(LocalRecordingInfoDialog));\n    }\n\n    /**\n     * Returns true if the the desktop sharing button should be visible and\n     * false otherwise.\n     *\n     * @returns {boolean}\n     */\n    _isDesktopSharingButtonVisible() {\n        const {\n            _desktopSharingEnabled,\n            _desktopSharingDisabledTooltipKey\n        } = this.props;\n\n        return _desktopSharingEnabled || _desktopSharingDisabledTooltipKey;\n    }\n\n    /**\n     * Renders a button for toggleing screen sharing.\n     *\n     * @private\n     * @param {boolean} isInOverflowMenu - True if the button is moved to the\n     * overflow menu.\n     * @returns {ReactElement|null}\n     */\n    _renderDesktopSharingButton(isInOverflowMenu = false) {\n        const {\n            _desktopSharingEnabled,\n            _desktopSharingDisabledTooltipKey,\n            _screensharing,\n            t\n        } = this.props;\n\n        if (!this._isDesktopSharingButtonVisible()) {\n            return null;\n        }\n\n        if (isInOverflowMenu) {\n            return (\n                <OverflowMenuItem\n                    accessibilityLabel\n                        = { t('toolbar.accessibilityLabel.shareYourScreen') }\n                    disabled = { _desktopSharingEnabled }\n                    icon = { IconShareDesktop }\n                    iconId = 'share-desktop'\n                    key = 'desktop'\n                    onClick = { this._onToolbarToggleScreenshare }\n                    text = {\n                        t(`toolbar.${\n                            _screensharing\n                                ? 'stopScreenSharing' : 'startScreenSharing'}`\n                        )\n                    } />\n            );\n        }\n\n        const tooltip = t(\n            _desktopSharingEnabled\n                ? 'dialog.shareYourScreen' : _desktopSharingDisabledTooltipKey);\n\n        return (\n            <ToolbarButton\n                accessibilityLabel\n                    = { t('toolbar.accessibilityLabel.shareYourScreen') }\n                disabled = { !_desktopSharingEnabled }\n                icon = { IconShareDesktop }\n                onClick = { this._onToolbarToggleScreenshare }\n                toggled = { _screensharing }\n                tooltip = { tooltip } />\n        );\n    }\n\n    /**\n     * Returns true if the profile button is visible and false otherwise.\n     *\n     * @returns {boolean}\n     */\n    _isProfileVisible() {\n        return this.props._isGuest && this._shouldShowButton('profile');\n    }\n\n    /**\n     * Renders the list elements of the overflow menu.\n     *\n     * @private\n     * @returns {Array<ReactElement>}\n     */\n    _renderOverflowMenuContent() {\n        const {\n            _feedbackConfigured,\n            _fullScreen,\n            _screensharing,\n            _sharingVideo,\n            t\n        } = this.props;\n\n        return [\n            this._isProfileVisible()\n                && <OverflowMenuProfileItem\n                    key = 'profile'\n                    onClick = { this._onToolbarToggleProfile } />,\n            this._shouldShowButton('videoquality')\n                && <OverflowMenuVideoQualityItem\n                    key = 'videoquality'\n                    onClick = { this._onToolbarOpenVideoQuality } />,\n            this._shouldShowButton('fullscreen')\n                && <OverflowMenuItem\n                    accessibilityLabel = { t('toolbar.accessibilityLabel.fullScreen') }\n                    icon = { _fullScreen ? IconExitFullScreen : IconFullScreen }\n                    key = 'fullscreen'\n                    onClick = { this._onToolbarToggleFullScreen }\n                    text = { _fullScreen ? t('toolbar.exitFullScreen') : t('toolbar.enterFullScreen') } />,\n            <LiveStreamButton\n                key = 'livestreaming'\n                showLabel = { true } />,\n            <RecordButton\n                key = 'record'\n                showLabel = { true } />,\n            this._shouldShowButton('sharedvideo')\n                && <OverflowMenuItem\n                    accessibilityLabel = { t('toolbar.accessibilityLabel.sharedvideo') }\n                    icon = { IconShareVideo }\n                    key = 'sharedvideo'\n                    onClick = { this._onToolbarToggleSharedVideo }\n                    text = { _sharingVideo ? t('toolbar.stopSharedVideo') : t('toolbar.sharedvideo') } />,\n            this._shouldShowButton('etherpad')\n                && <SharedDocumentButton\n                    key = 'etherpad'\n                    showLabel = { true } />,\n            <VideoBlurButton\n                key = 'videobackgroundblur'\n                showLabel = { true }\n                visible = { this._shouldShowButton('videobackgroundblur') && !_screensharing } />,\n            <SettingsButton\n                key = 'settings'\n                showLabel = { true }\n                visible = { this._shouldShowButton('settings') } />,\n            <MuteEveryoneButton\n                key = 'mute-everyone'\n                showLabel = { true }\n                visible = { this._shouldShowButton('mute-everyone') } />,\n            this._shouldShowButton('stats')\n                && <OverflowMenuItem\n                    accessibilityLabel = { t('toolbar.accessibilityLabel.speakerStats') }\n                    icon = { IconPresentation }\n                    key = 'stats'\n                    onClick = { this._onToolbarOpenSpeakerStats }\n                    text = { t('toolbar.speakerStats') } />,\n            this._shouldShowButton('e2ee')\n                && <E2EEButton\n                    key = 'e2ee'\n                    showLabel = { true } />,\n            this._shouldShowButton('feedback')\n                && _feedbackConfigured\n                && <OverflowMenuItem\n                    accessibilityLabel = { t('toolbar.accessibilityLabel.feedback') }\n                    icon = { IconFeedback }\n                    key = 'feedback'\n                    onClick = { this._onToolbarOpenFeedback }\n                    text = { t('toolbar.feedback') } />,\n            this._shouldShowButton('shortcuts')\n                && <OverflowMenuItem\n                    accessibilityLabel = { t('toolbar.accessibilityLabel.shortcuts') }\n                    icon = { IconOpenInNew }\n                    key = 'shortcuts'\n                    onClick = { this._onToolbarOpenKeyboardShortcuts }\n                    text = { t('toolbar.shortcuts') } />,\n            this._shouldShowButton('download')\n                && <DownloadButton\n                    key = 'download'\n                    showLabel = { true } />,\n            this._shouldShowButton('help')\n                && <HelpButton\n                    key = 'help'\n                    showLabel = { true } />\n        ];\n    }\n\n    /**\n     * Renders a list of buttons that are moved to the overflow menu.\n     *\n     * @private\n     * @param {Array<string>} movedButtons - The names of the buttons to be\n     * moved.\n     * @returns {Array<ReactElement>}\n     */\n    _renderMovedButtons(movedButtons) {\n        const {\n            _chatOpen,\n            _raisedHand,\n            t\n        } = this.props;\n\n        return movedButtons.map(buttonName => {\n            switch (buttonName) {\n            case 'desktop':\n                return this._renderDesktopSharingButton(true);\n            case 'raisehand':\n                return (\n                    <OverflowMenuItem\n                        accessibilityLabel =\n                            { t('toolbar.accessibilityLabel.raiseHand') }\n                        icon = { IconRaisedHand }\n                        key = 'raisedHand'\n                        onClick = { this._onToolbarToggleRaiseHand }\n                        text = {\n                            t(`toolbar.${\n                                _raisedHand\n                                    ? 'lowerYourHand' : 'raiseYourHand'}`\n                            )\n                        } />\n                );\n            case 'chat':\n                return (\n                    <OverflowMenuItem\n                        accessibilityLabel =\n                            { t('toolbar.accessibilityLabel.chat') }\n                        icon = { IconChat }\n                        key = 'chat'\n                        onClick = { this._onToolbarToggleChat }\n                        text = {\n                            t(`toolbar.${\n                                _chatOpen ? 'closeChat' : 'openChat'}`\n                            )\n                        } />\n                );\n            case 'closedcaptions':\n                return <ClosedCaptionButton showLabel = { true } />;\n            case 'poker':\n                return (<OverflowMenuItem\n                    accessibilityLabel =\n                        { t(`poker.action.${this.props._pokerAction.type}`,\n                            { player: this.props._nameToDisplay }) }\n                    icon = { IconPoker }\n                    key = 'poker'\n                    onClick = { this._onToolbarPoker }\n                    text = { t(`toolbar.poker.${this.props._pokerAction.type}`,\n                        { player: this.props._nameToDisplay }) } />);\n            case 'info':\n                return <InfoDialogButton showLabel = { true } />;\n            case 'invite':\n                return (\n                    <OverflowMenuItem\n                        accessibilityLabel = { t('toolbar.accessibilityLabel.invite') }\n                        icon = { IconInvite }\n                        key = 'invite'\n                        onClick = { this._onToolbarOpenInvite }\n                        text = { t('toolbar.invite') } />\n                );\n            case 'tileview':\n                return <TileViewButton showLabel = { true } />;\n            case 'localrecording':\n                return (\n                    <OverflowMenuItem\n                        accessibilityLabel = { t('toolbar.accessibilityLabel.localRecording') }\n                        icon = { IconRec }\n                        key = 'localrecording'\n                        onClick = { this._onToolbarOpenLocalRecordingInfoDialog }\n                        text = { t('localRecording.dialogTitle') } />\n                );\n            default:\n                return null;\n            }\n        });\n    }\n\n    /**\n     * Renders the Audio controlling button.\n     *\n     * @returns {ReactElement}\n     */\n    _renderAudioButton() {\n        return this._shouldShowButton('microphone')\n            ? <AudioSettingsButton\n                key = 'asb'\n                visible = { true } />\n            : null;\n    }\n\n    /**\n     * Renders the Video controlling button.\n     *\n     * @returns {ReactElement}\n     */\n    _renderVideoButton() {\n        return this._shouldShowButton('camera')\n            ? <VideoSettingsButton\n                key = 'vsb'\n                visible = { true } />\n            : null;\n    }\n\n    /**\n     * Renders the toolbox content.\n     *\n     * @returns {Array<ReactElement>}\n     */\n    _renderToolboxContent() {\n        const {\n            _chatOpen,\n            _hideInviteButton,\n            _overflowMenuVisible,\n            _raisedHand,\n            t\n        } = this.props;\n        const overflowMenuContent = this._renderOverflowMenuContent();\n        const overflowHasItems = Boolean(overflowMenuContent.filter(child => child).length);\n        const toolbarAccLabel = 'toolbar.accessibilityLabel.moreActionsMenu';\n        const buttonsLeft = [];\n        const buttonsRight = [];\n\n        const maxNumberOfButtonsPerGroup = Math.floor(\n            (\n                this.state.windowWidth\n                    - 168 // the width of the central group by design\n                    - 48 // the minimum space between the button groups\n            )\n            / 56 // the width + padding of a button\n            / 2 // divide by the number of groups(left and right group)\n        );\n\n        if (this._shouldShowButton('desktop')\n                && this._isDesktopSharingButtonVisible()) {\n            buttonsLeft.push('desktop');\n        }\n        if (this._shouldShowButton('raisehand')) {\n            buttonsLeft.push('raisehand');\n        }\n        if (this._shouldShowButton('chat')) {\n            buttonsLeft.push('chat');\n        }\n        if (this._shouldShowButton('closedcaptions')) {\n            buttonsLeft.push('closedcaptions');\n        }\n        buttonsLeft.push('poker');\n        if (overflowHasItems) {\n            buttonsRight.push('overflowmenu');\n        }\n        if (this._shouldShowButton('info')) {\n            buttonsRight.push('info');\n        }\n        if (this._shouldShowButton('invite') && !_hideInviteButton) {\n            buttonsRight.push('invite');\n        }\n        if (this._shouldShowButton('tileview')) {\n            buttonsRight.push('tileview');\n        }\n        if (this._shouldShowButton('localrecording')) {\n            buttonsRight.push('localrecording');\n        }\n\n        const movedButtons = [];\n\n        if (buttonsLeft.length > maxNumberOfButtonsPerGroup) {\n            movedButtons.push(...buttonsLeft.splice(\n                maxNumberOfButtonsPerGroup,\n                buttonsLeft.length - maxNumberOfButtonsPerGroup));\n            if (buttonsRight.indexOf('overflowmenu') === -1) {\n                buttonsRight.unshift('overflowmenu');\n            }\n        }\n\n        if (buttonsRight.length > maxNumberOfButtonsPerGroup) {\n            if (buttonsRight.indexOf('overflowmenu') === -1) {\n                buttonsRight.unshift('overflowmenu');\n            }\n\n            let numberOfButtons = maxNumberOfButtonsPerGroup;\n\n            // make sure the more button will be displayed when we move buttons.\n            if (numberOfButtons === 0) {\n                numberOfButtons++;\n            }\n\n            movedButtons.push(...buttonsRight.splice(\n                numberOfButtons,\n                buttonsRight.length - numberOfButtons));\n\n        }\n\n        overflowMenuContent.splice(\n            1, 0, ...this._renderMovedButtons(movedButtons));\n\n        return (\n            <div className = 'toolbox-content'>\n                <div className = 'button-group-left'>\n                    { buttonsLeft.indexOf('desktop') !== -1\n                        && this._renderDesktopSharingButton() }\n                    { buttonsLeft.indexOf('raisehand') !== -1\n                        && <ToolbarButton\n                            accessibilityLabel = { t('toolbar.accessibilityLabel.raiseHand') }\n                            icon = { IconRaisedHand }\n                            onClick = { this._onToolbarToggleRaiseHand }\n                            toggled = { _raisedHand }\n                            tooltip = { t('toolbar.raiseHand') } /> }\n                    { buttonsLeft.indexOf('chat') !== -1\n                        && <div className = 'toolbar-button-with-badge'>\n                            <ToolbarButton\n                                accessibilityLabel = { t('toolbar.accessibilityLabel.chat') }\n                                icon = { IconChat }\n                                onClick = { this._onToolbarToggleChat }\n                                toggled = { _chatOpen }\n                                tooltip = { t('toolbar.chat') } />\n                            <ChatCounter />\n                        </div> }\n                    {\n                        buttonsLeft.indexOf('closedcaptions') !== -1\n                            && <ClosedCaptionButton />\n                    }\n                    {\n                        buttonsLeft.indexOf('poker') !== -1\n                        && <ToolbarButton\n                            accessibilityLabel = { t('toolbar.accessibilityLabel.poker') }\n                            className = { `toolbox-button ${this.props._pokerAction.type}` }\n                            icon = { IconPoker }\n                            onClick = { this._onToolbarPoker }\n                            tooltip = { t(`poker.action.${this.props._pokerAction.type}`) } />\n                    }\n\n                    <div className = { `toolbox-button ${this.props._pokerAction.type}` }>\n                        { t(`poker.action.${this.props._pokerAction.type}`, { player: this.props._nameToDisplay }) }\n                    </div>\n                </div>\n                <div className = 'button-group-center'>\n                    { this._renderAudioButton() }\n                    <HangupButton\n                        visible = { this._shouldShowButton('hangup') } />\n                    { this._renderVideoButton() }\n                </div>\n                <div className = 'button-group-right'>\n                    { buttonsRight.indexOf('localrecording') !== -1\n                        && <LocalRecordingButton\n                            onClick = {\n                                this._onToolbarOpenLocalRecordingInfoDialog\n                            } />\n                    }\n                    { buttonsRight.indexOf('tileview') !== -1\n                        && <TileViewButton /> }\n                    { buttonsRight.indexOf('invite') !== -1\n                        && <ToolbarButton\n                            accessibilityLabel =\n                                { t('toolbar.accessibilityLabel.invite') }\n                            icon = { IconInvite }\n                            onClick = { this._onToolbarOpenInvite }\n                            tooltip = { t('toolbar.invite') } /> }\n                    {\n                        buttonsRight.indexOf('info') !== -1\n                            && <InfoDialogButton />\n                    }\n                    { buttonsRight.indexOf('overflowmenu') !== -1\n                        && <OverflowMenuButton\n                            isOpen = { _overflowMenuVisible }\n                            onVisibilityChange = { this._onSetOverflowVisible }>\n                            <ul\n                                aria-label = { t(toolbarAccLabel) }\n                                className = 'overflow-menu'>\n                                { overflowMenuContent }\n                            </ul>\n                        </OverflowMenuButton> }\n                </div>\n            </div>);\n    }\n\n    _shouldShowButton: (string) => boolean;\n\n    /**\n     * Returns if a button name has been explicitly configured to be displayed.\n     *\n     * @param {string} buttonName - The name of the button, as expected in\n     * {@link interfaceConfig}.\n     * @private\n     * @returns {boolean} True if the button should be displayed.\n     */\n    _shouldShowButton(buttonName) {\n        return this.props._visibleButtons.has(buttonName);\n    }\n}\n\n/**\n * Maps (parts of) the redux state to {@link Toolbox}'s React {@code Component}\n * props.\n *\n * @param {Object} state - The redux store/state.\n * @private\n * @returns {{}}\n */\nfunction _mapStateToProps(state) {\n    const { conference } = state['features/base/conference'];\n    let { desktopSharingEnabled } = state['features/base/conference'];\n    const {\n        callStatsID,\n        enableFeaturesBasedOnToken,\n        iAmRecorder\n    } = state['features/base/config'];\n    const sharedVideoStatus = state['features/shared-video'].status;\n    const {\n        fullScreen,\n        overflowMenuVisible\n    } = state['features/toolbox'];\n    const localParticipant = getLocalParticipant(state);\n    const displayName = getParticipantDisplayName(state, localParticipant.id);\n    const localRecordingStates = state['features/local-recording'];\n    const localVideo = getLocalVideoTrack(state['features/base/tracks']);\n    const addPeopleEnabled = isAddPeopleEnabled(state);\n    const dialOutEnabled = isDialOutEnabled(state);\n\n    let desktopSharingDisabledTooltipKey;\n\n    if (enableFeaturesBasedOnToken) {\n        // we enable desktop sharing if any participant already have this\n        // feature enabled\n        desktopSharingEnabled = getParticipants(state)\n            .find(({ features = {} }) =>\n                String(features['screen-sharing']) === 'true') !== undefined;\n\n        // we want to show button and tooltip\n        if (state['features/base/jwt'].isGuest) {\n            desktopSharingDisabledTooltipKey\n                = 'dialog.shareYourScreenDisabledForGuest';\n        } else {\n            desktopSharingDisabledTooltipKey\n                = 'dialog.shareYourScreenDisabled';\n        }\n    }\n\n    // NB: We compute the buttons again here because if URL parameters were used to\n    // override them we'd miss it.\n    const buttons = new Set(interfaceConfig.TOOLBAR_BUTTONS);\n\n    return {\n        _chatOpen: state['features/chat'].isOpen,\n        _conference: conference,\n        _desktopSharingEnabled: desktopSharingEnabled,\n        _desktopSharingDisabledTooltipKey: desktopSharingDisabledTooltipKey,\n        _dialog: Boolean(state['features/base/dialog'].component),\n        _feedbackConfigured: Boolean(callStatsID),\n        _hideInviteButton:\n            iAmRecorder || (!addPeopleEnabled && !dialOutEnabled),\n        _isGuest: state['features/base/jwt'].isGuest,\n        _fullScreen: fullScreen,\n        _tileViewEnabled: state['features/video-layout'].tileViewEnabled,\n        _localParticipantID: localParticipant.id,\n        _localRecState: localRecordingStates,\n        _overflowMenuVisible: overflowMenuVisible,\n        _raisedHand: localParticipant.raisedHand,\n        _screensharing: localVideo && localVideo.videoType === 'desktop',\n        _sharingVideo: sharedVideoStatus === 'playing'\n            || sharedVideoStatus === 'start'\n            || sharedVideoStatus === 'pause',\n        _visible: isToolboxVisible(state),\n        _visibleButtons: equals(visibleButtons, buttons) ? visibleButtons : buttons,\n        _nameToDisplay: displayName,\n        _pokerAction: toolboxAction(state)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(Toolbox));\n","// @flow\n\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport {\n    CLEAR_TOOLBOX_TIMEOUT,\n    SET_TOOLBOX_TIMEOUT,\n    SET_FULL_SCREEN\n} from './actionTypes';\n\ndeclare var APP: Object;\n\n/**\n * Middleware which intercepts Toolbox actions to handle changes to the\n * visibility timeout of the Toolbox.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CLEAR_TOOLBOX_TIMEOUT: {\n        const { timeoutID } = store.getState()['features/toolbox'];\n\n        clearTimeout(timeoutID);\n        break;\n    }\n\n    case SET_FULL_SCREEN:\n        return _setFullScreen(next, action);\n\n    case SET_TOOLBOX_TIMEOUT: {\n        const { timeoutID } = store.getState()['features/toolbox'];\n        const { handler, timeoutMS } = action;\n\n        clearTimeout(timeoutID);\n        action.timeoutID = setTimeout(handler, timeoutMS);\n\n        break;\n    }\n    }\n\n    return next(action);\n});\n\ntype DocumentElement = {\n    +requestFullscreen?: Function,\n    +mozRequestFullScreen?: Function,\n    +webkitRequestFullscreen?: Function\n}\n\n/**\n * Makes an external request to enter or exit full screen mode.\n *\n * @param {Dispatch} next - The redux dispatch function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The redux action SET_FULL_SCREEN which is being\n * dispatched in the specified store.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _setFullScreen(next, action) {\n    if (typeof APP === 'object') {\n        const { fullScreen } = action;\n\n        if (fullScreen) {\n            const documentElement: DocumentElement\n                = document.documentElement || {};\n\n            if (typeof documentElement.requestFullscreen === 'function') {\n                documentElement.requestFullscreen();\n            } else if (\n                typeof documentElement.mozRequestFullScreen === 'function') {\n                documentElement.mozRequestFullScreen();\n            } else if (\n                typeof documentElement.webkitRequestFullscreen === 'function') {\n                documentElement.webkitRequestFullscreen();\n            }\n        } else {\n            /* eslint-disable no-lonely-if */\n\n            // $FlowFixMe\n            if (typeof document.exitFullscreen === 'function') {\n                document.exitFullscreen();\n\n            // $FlowFixMe\n            } else if (typeof document.mozCancelFullScreen === 'function') {\n                document.mozCancelFullScreen();\n\n            // $FlowFixMe\n            } else if (typeof document.webkitExitFullscreen === 'function') {\n                document.webkitExitFullscreen();\n            }\n\n            /* eslint-enable no-loney-if */\n        }\n    }\n\n    return next(action);\n}\n","// @flow\n\nimport { ReducerRegistry, set } from '../base/redux';\n\nimport {\n    CLEAR_TOOLBOX_TIMEOUT,\n    FULL_SCREEN_CHANGED,\n    SET_OVERFLOW_MENU_VISIBLE,\n    SET_TOOLBAR_HOVERED,\n    SET_TOOLBOX_ALWAYS_VISIBLE,\n    SET_TOOLBOX_ENABLED,\n    SET_TOOLBOX_TIMEOUT,\n    SET_TOOLBOX_TIMEOUT_MS,\n    SET_TOOLBOX_VISIBLE,\n    TOGGLE_TOOLBOX_VISIBLE\n} from './actionTypes';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Returns initial state for toolbox's part of Redux store.\n *\n * @private\n * @returns {{\n *     alwaysVisible: boolean,\n *     enabled: boolean,\n *     hovered: boolean,\n *     overflowMenuVisible: boolean,\n *     timeoutID: number,\n *     timeoutMS: number,\n *     visible: boolean\n * }}\n */\nfunction _getInitialState() {\n    // Does the toolbar eventually fade out, or is it always visible?\n    let alwaysVisible = false;\n\n    // Toolbar (initial) visibility.\n    let visible = false;\n\n    // Default toolbox timeout for mobile app.\n    let timeoutMS = 5000;\n\n    if (typeof interfaceConfig !== 'undefined') {\n        if (interfaceConfig.INITIAL_TOOLBAR_TIMEOUT) {\n            timeoutMS = interfaceConfig.INITIAL_TOOLBAR_TIMEOUT;\n        }\n        if (typeof interfaceConfig.TOOLBAR_ALWAYS_VISIBLE !== 'undefined') {\n            alwaysVisible = interfaceConfig.TOOLBAR_ALWAYS_VISIBLE;\n        }\n    }\n\n    // When the toolbar is always visible, it must initially be visible too.\n    if (alwaysVisible === true) {\n        visible = true;\n    }\n\n    return {\n        /**\n         * The indicator which determines whether the Toolbox should always be\n         * visible. When false, the toolbar will fade out after timeoutMS.\n         *\n         * @type {boolean}\n         */\n        alwaysVisible,\n\n        /**\n         * The indicator which determines whether the Toolbox is enabled.\n         *\n         * @type {boolean}\n         */\n        enabled: true,\n\n        /**\n         * The indicator which determines whether a Toolbar in the Toolbox is\n         * hovered.\n         *\n         * @type {boolean}\n         */\n        hovered: false,\n\n        /**\n         * The indicator which determines whether the OverflowMenu is visible.\n         *\n         * @type {boolean}\n         */\n        overflowMenuVisible: false,\n\n        /**\n         * A number, non-zero value which identifies the timer created by a call\n         * to setTimeout() with timeoutMS.\n         *\n         * @type {number|null}\n         */\n        timeoutID: null,\n\n        /**\n         * The delay in milliseconds before timeoutID executes (after its\n         * initialization).\n         *\n         * @type {number}\n         */\n        timeoutMS,\n\n        /**\n         * The indicator which determines whether the Toolbox is visible.\n         *\n         * @type {boolean}\n         */\n        visible\n    };\n}\n\nReducerRegistry.register(\n    'features/toolbox',\n    (state: Object = _getInitialState(), action: Object) => {\n        switch (action.type) {\n        case CLEAR_TOOLBOX_TIMEOUT:\n            return {\n                ...state,\n                timeoutID: undefined\n            };\n\n        case FULL_SCREEN_CHANGED:\n            return {\n                ...state,\n                fullScreen: action.fullScreen\n            };\n\n        case SET_OVERFLOW_MENU_VISIBLE:\n            return {\n                ...state,\n                overflowMenuVisible: action.visible\n            };\n\n        case SET_TOOLBAR_HOVERED:\n            return {\n                ...state,\n                hovered: action.hovered\n            };\n\n        case SET_TOOLBOX_ALWAYS_VISIBLE:\n            return {\n                ...state,\n                alwaysVisible: action.alwaysVisible,\n                visible: action.alwaysVisible === true ? true : state.visible\n            };\n\n        case SET_TOOLBOX_ENABLED:\n            return {\n                ...state,\n                enabled: action.enabled\n            };\n\n        case SET_TOOLBOX_TIMEOUT:\n            return {\n                ...state,\n                timeoutID: action.timeoutID,\n                timeoutMS: action.timeoutMS\n            };\n\n        case SET_TOOLBOX_TIMEOUT_MS:\n            return {\n                ...state,\n                timeoutMS: action.timeoutMS\n            };\n\n        case SET_TOOLBOX_VISIBLE:\n            return set(state, 'visible', state.alwaysVisible || action.visible);\n\n        case TOGGLE_TOOLBOX_VISIBLE:\n            return set(state, 'visible', state.alwaysVisible || !state.visible);\n        }\n\n        return state;\n    });\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","// @flow\n\ndeclare var JitsiMeetJS: Object;\n\nexport default JitsiMeetJS;\n","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import * as colors from './colors';\nimport themed from './utils/themed'; // Cards on a board\n\nexport var e100 = themed({\n  light: \"box-shadow: 0 1px 1px \".concat(colors.N50A, \", 0 0 1px 0 \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 1px 1px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Inline dialogs\n\nexport var e200 = themed({\n  light: \"box-shadow: 0 4px 8px -2px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 4px 8px -2px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Modals\n\nexport var e300 = themed({\n  light: \"box-shadow: 0 8px 16px -4px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 8px 16px -4px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Panels\n\nexport var e400 = themed({\n  light: \"box-shadow: 0 12px 24px -6px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 12px 24px -6px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Flag messages (notifications)\n\nexport var e500 = themed({\n  light: \"box-shadow: 0 20px 32px -8px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 20px 32px -8px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n});","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport { gridSize, fontSize } from './index';\n\nvar baseHeading = function baseHeading(size, lineHeight) {\n  return \"\\n  font-size: \".concat(size / fontSize(), \"em;\\n  font-style: inherit;\\n  line-height: \").concat(lineHeight / size, \";\\n\");\n};\n\nexport var h900 = function h900() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(35, 40), colors.heading, gridSize() * 6.5);\n};\nexport var h800 = function h800() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(29, 32), colors.heading, gridSize() * 5);\n};\nexport var h700 = function h700() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(24, 28), colors.heading, gridSize() * 5);\n};\nexport var h600 = function h600() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  margin-top: \", \"px;\\n\"], baseHeading(20, 24), colors.heading, gridSize() * 3.5);\n};\nexport var h500 = function h500() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.006em;\\n  margin-top: \", \"px;\\n\"], baseHeading(16, 20), colors.heading, gridSize() * 3);\n};\nexport var h400 = function h400() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.003em;\\n  margin-top: \", \"px;\\n\"], baseHeading(14, 16), colors.heading, gridSize() * 2);\n};\nexport var h300 = function h300() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n  text-transform: uppercase;\\n\"], baseHeading(12, 16), colors.heading, gridSize() * 2.5);\n};\nexport var h200 = function h200() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n\"], baseHeading(12, 16), colors.subtleHeading, gridSize() * 2);\n};\nexport var h100 = function h100() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 700;\\n  margin-top: \", \"px;\\n\"], baseHeading(11, 16), colors.subtleHeading, gridSize() * 2);\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nexport default (function (_ref) {\n  var children = _ref.children,\n      props = _ref.props,\n      theme = _ref.theme;\n  var appearance = _typeof(props) === 'object' ? 'default' : props;\n  var merged = _typeof(props) === 'object' ? _objectSpread({}, props) : {};\n  Object.keys(theme).forEach(function (key) {\n    if (!(key in merged)) {\n      merged[key] = theme[key]({\n        appearance: appearance\n      });\n    }\n  });\n  return children(merged);\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport * as colors from '../colors';\nimport { createTheme } from '../utils/createTheme';\n\nvar orTextColor = function orTextColor(preferred) {\n  return function (p) {\n    return p[preferred] || p.textColor;\n  };\n};\n\nvar Div = styled.div.withConfig({\n  displayName: \"Reset__Div\",\n  componentId: \"sc-15i6ali-0\"\n})([\"\\n  \", \";\\n\"], function (p) {\n  return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n\\n    a {\\n      color: \", \";\\n    }\\n    a:hover {\\n      color: \", \";\\n    }\\n    a:active {\\n      color: \", \";\\n    }\\n    a:focus {\\n      outline-color: \", \";\\n    }\\n    h1,\\n    h2,\\n    h3,\\n    h4,\\n    h5 {\\n      color: \", \";\\n    }\\n    h6 {\\n      color: \", \";\\n    }\\n    small {\\n      color: \", \";\\n    }\\n  \"], p.backgroundColor, p.textColor, orTextColor('linkColor'), orTextColor('linkColorHover'), orTextColor('linkColorActive'), orTextColor('linkColorOutline'), orTextColor('headingColor'), orTextColor('subtleHeadingColor'), orTextColor('subtleTextColor'));\n});\nexport var ResetTheme = createTheme(function () {\n  return {\n    backgroundColor: colors.N0,\n    linkColor: colors.B400,\n    linkColorHover: colors.B300,\n    linkColorActive: colors.B500,\n    linkColorOutline: colors.B100,\n    headingColor: colors.N800,\n    subtleHeadingColor: colors.N200,\n    subtleTextColor: colors.N200,\n    textColor: colors.N900\n  };\n});\nexport function Reset(props) {\n  return React.createElement(ResetTheme.Provider, {\n    value: props.theme\n  }, React.createElement(ResetTheme.Consumer, null, function (tokens) {\n    return React.createElement(Div, _extends({}, _objectSpread({}, tokens, {\n      mode: undefined\n    }), props), props.children);\n  }));\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React from 'react';\nimport Theme from './components/Theme'; // Pre-executes the theme and passes it as a prop to the supplied component.\n// This is useful for ensuring that the current theme is accessible as props\n// in styled-components.\n\nexport function withTheme(InnerComponent) {\n  return function ComponentWithTheme(props) {\n    return React.createElement(Theme.Consumer, null, function (tokens) {\n      return React.createElement(InnerComponent, _extends({}, props, {\n        theme: tokens\n      }));\n    });\n  };\n}","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","// @flow\n\n/**\n * The name of the {@code JitsiConnection} property which identifies the {@code JitsiConference} currently associated\n * with it.\n *\n * FIXME: This is a hack. It was introduced to solve the following case: if a user presses hangup quickly, they may\n * \"leave the conference\" before the actual conference was ever created. While we might have a connection in place,\n * there is no conference which can be left, thus no CONFERENCE_LEFT action will ever be fired.\n *\n * This is problematic because the external API module used to send events to the native SDK won't know what to send.\n * So, in order to detect this situation we are attaching the conference object to the connection which runs it.\n */\nexport const JITSI_CONNECTION_CONFERENCE_KEY = Symbol('conference');\n\n/**\n * The name of the {@code JitsiConnection} property which identifies the location URL where the connection will be made.\n */\nexport const JITSI_CONNECTION_URL_KEY = Symbol('url');\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/connection');\n","// @flow\n\nimport _ from 'lodash';\nimport type { Dispatch } from 'redux';\n\nimport {\n    conferenceLeft,\n    conferenceWillLeave,\n    getCurrentConference\n} from '../conference';\nimport JitsiMeetJS, { JitsiConnectionEvents } from '../lib-jitsi-meet';\nimport {\n    getBackendSafeRoomName,\n    parseURIString\n} from '../util';\n\nimport {\n    CONNECTION_DISCONNECTED,\n    CONNECTION_ESTABLISHED,\n    CONNECTION_FAILED,\n    CONNECTION_WILL_CONNECT,\n    SET_LOCATION_URL\n} from './actionTypes';\nimport { JITSI_CONNECTION_URL_KEY } from './constants';\nimport logger from './logger';\n\n/**\n * The error structure passed to the {@link connectionFailed} action.\n *\n * Note there was an intention to make the error resemble an Error instance (to\n * the extent that jitsi-meet needs it).\n */\nexport type ConnectionFailedError = {\n\n    /**\n     * The invalid credentials that were used to authenticate and the\n     * authentication failed.\n     */\n    credentials?: {\n\n        /**\n         * The XMPP user's ID.\n         */\n        jid: string,\n\n        /**\n         * The XMPP user's password.\n         */\n        password: string\n    },\n\n    /**\n     * The details about the connection failed event.\n     */\n    details?: Object,\n\n    /**\n     * Error message.\n     */\n    message?: string,\n\n    /**\n     * One of {@link JitsiConnectionError} constants (defined in\n     * lib-jitsi-meet).\n     */\n    name: string,\n\n    /**\n     * Indicates whether this event is recoverable or not.\n     */\n    recoverable?: boolean\n};\n\n/**\n * Opens new connection.\n *\n * @param {string} [id] - The XMPP user's ID (e.g. {@code user@server.com}).\n * @param {string} [password] - The XMPP user's password.\n * @returns {Function}\n */\nexport function connect(id: ?string, password: ?string) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const options = _constructOptions(state);\n        const { locationURL } = state['features/base/connection'];\n        const { issuer, jwt } = state['features/base/jwt'];\n        const connection\n            = new JitsiMeetJS.JitsiConnection(\n                options.appId,\n                jwt && issuer && issuer !== 'anonymous' ? jwt : undefined,\n                options);\n\n        connection[JITSI_CONNECTION_URL_KEY] = locationURL;\n\n        dispatch(_connectionWillConnect(connection));\n\n        connection.addEventListener(\n            JitsiConnectionEvents.CONNECTION_DISCONNECTED,\n            _onConnectionDisconnected);\n        connection.addEventListener(\n            JitsiConnectionEvents.CONNECTION_ESTABLISHED,\n            _onConnectionEstablished);\n        connection.addEventListener(\n            JitsiConnectionEvents.CONNECTION_FAILED,\n            _onConnectionFailed);\n\n        connection.connect({\n            id,\n            password\n        });\n\n        /**\n         * Dispatches {@code CONNECTION_DISCONNECTED} action when connection is\n         * disconnected.\n         *\n         * @param {string} message - Disconnect reason.\n         * @private\n         * @returns {void}\n         */\n        function _onConnectionDisconnected(message: string) {\n            unsubscribe();\n            dispatch(_connectionDisconnected(connection, message));\n        }\n\n        /**\n         * Resolves external promise when connection is established.\n         *\n         * @private\n         * @returns {void}\n         */\n        function _onConnectionEstablished() {\n            connection.removeEventListener(\n                JitsiConnectionEvents.CONNECTION_ESTABLISHED,\n                _onConnectionEstablished);\n            dispatch(connectionEstablished(connection, Date.now()));\n        }\n\n        /**\n         * Rejects external promise when connection fails.\n         *\n         * @param {JitsiConnectionErrors} err - Connection error.\n         * @param {string} [msg] - Error message supplied by lib-jitsi-meet.\n         * @param {Object} [credentials] - The invalid credentials that were\n         * used to authenticate and the authentication failed.\n         * @param {string} [credentials.jid] - The XMPP user's ID.\n         * @param {string} [credentials.password] - The XMPP user's password.\n         * @param {Object} details - Additional information about the error.\n         * @private\n         * @returns {void}\n         */\n        function _onConnectionFailed( // eslint-disable-line max-params\n                err: string,\n                msg: string,\n                credentials: Object,\n                details: Object) {\n            unsubscribe();\n            dispatch(\n                connectionFailed(\n                    connection, {\n                        credentials,\n                        details,\n                        name: err,\n                        message: msg\n                    }\n                ));\n        }\n\n        /**\n         * Unsubscribe the connection instance from\n         * {@code CONNECTION_DISCONNECTED} and {@code CONNECTION_FAILED} events.\n         *\n         * @returns {void}\n         */\n        function unsubscribe() {\n            connection.removeEventListener(\n                JitsiConnectionEvents.CONNECTION_DISCONNECTED,\n                _onConnectionDisconnected);\n            connection.removeEventListener(\n                JitsiConnectionEvents.CONNECTION_FAILED,\n                _onConnectionFailed);\n        }\n    };\n}\n\n/**\n * Create an action for when the signaling connection has been lost.\n *\n * @param {JitsiConnection} connection - The {@code JitsiConnection} which\n * disconnected.\n * @param {string} message - Error message.\n * @private\n * @returns {{\n *     type: CONNECTION_DISCONNECTED,\n *     connection: JitsiConnection,\n *     message: string\n * }}\n */\nfunction _connectionDisconnected(connection: Object, message: string) {\n    return {\n        type: CONNECTION_DISCONNECTED,\n        connection,\n        message\n    };\n}\n\n/**\n * Create an action for when the signaling connection has been established.\n *\n * @param {JitsiConnection} connection - The {@code JitsiConnection} which was\n * established.\n * @param {number} timeEstablished - The time at which the\n * {@code JitsiConnection} which was established.\n * @public\n * @returns {{\n *     type: CONNECTION_ESTABLISHED,\n *     connection: JitsiConnection,\n *     timeEstablished: number\n * }}\n */\nexport function connectionEstablished(\n        connection: Object, timeEstablished: number) {\n    return {\n        type: CONNECTION_ESTABLISHED,\n        connection,\n        timeEstablished\n    };\n}\n\n/**\n * Create an action for when the signaling connection could not be created.\n *\n * @param {JitsiConnection} connection - The {@code JitsiConnection} which\n * failed.\n * @param {ConnectionFailedError} error - Error.\n * @public\n * @returns {{\n *     type: CONNECTION_FAILED,\n *     connection: JitsiConnection,\n *     error: ConnectionFailedError\n * }}\n */\nexport function connectionFailed(\n        connection: Object,\n        error: ConnectionFailedError) {\n    const { credentials } = error;\n\n    if (credentials && !Object.keys(credentials).length) {\n        error.credentials = undefined;\n    }\n\n    return {\n        type: CONNECTION_FAILED,\n        connection,\n        error\n    };\n}\n\n/**\n * Create an action for when a connection will connect.\n *\n * @param {JitsiConnection} connection - The {@code JitsiConnection} which will\n * connect.\n * @private\n * @returns {{\n *     type: CONNECTION_WILL_CONNECT,\n *     connection: JitsiConnection\n * }}\n */\nfunction _connectionWillConnect(connection) {\n    return {\n        type: CONNECTION_WILL_CONNECT,\n        connection\n    };\n}\n\n/**\n * Constructs options to be passed to the constructor of {@code JitsiConnection}\n * based on the redux state.\n *\n * @param {Object} state - The redux state.\n * @returns {Object} The options to be passed to the constructor of\n * {@code JitsiConnection}.\n */\nfunction _constructOptions(state) {\n    // Deep clone the options to make sure we don't modify the object in the\n    // redux store.\n    const options = _.cloneDeep(state['features/base/config']);\n\n    // Normalize the BOSH URL.\n    let { bosh } = options;\n\n    if (bosh) {\n        const { locationURL } = state['features/base/connection'];\n\n        if (bosh.startsWith('//')) {\n            // By default our config.js doesn't include the protocol.\n            bosh = `${locationURL.protocol}${bosh}`;\n        } else if (bosh.startsWith('/')) {\n            // Handle relative URLs, which won't work on mobile.\n            const {\n                protocol,\n                host,\n                contextRoot\n            } = parseURIString(locationURL.href);\n\n            // eslint-disable-next-line max-len\n            bosh = `${protocol}//${host}${contextRoot || '/'}${bosh.substr(1)}`;\n        }\n\n        // Append room to the URL's search.\n        const { room } = state['features/base/conference'];\n\n        room && (bosh += `?room=${getBackendSafeRoomName(room)}`);\n\n        // FIXME Remove deprecated 'bosh' option assignment at some point.\n        options.serviceUrl = options.bosh = bosh;\n    }\n\n    return options;\n}\n\n/**\n * Closes connection.\n *\n * @returns {Function}\n */\nexport function disconnect() {\n    return (dispatch: Dispatch<any>, getState: Function): Promise<void> => {\n        const state = getState();\n\n        // The conference we have already joined or are joining.\n        const conference_ = getCurrentConference(state);\n\n        // Promise which completes when the conference has been left and the\n        // connection has been disconnected.\n        let promise;\n\n        // Leave the conference.\n        if (conference_) {\n            // In a fashion similar to JitsiConference's CONFERENCE_LEFT event\n            // (and the respective Redux action) which is fired after the\n            // conference has been left, notify the application about the\n            // intention to leave the conference.\n            dispatch(conferenceWillLeave(conference_));\n\n            promise\n                = conference_.leave()\n                    .catch(error => {\n                        logger.warn(\n                            'JitsiConference.leave() rejected with:',\n                            error);\n\n                        // The library lib-jitsi-meet failed to make the\n                        // JitsiConference leave. Which may be because\n                        // JitsiConference thinks it has already left.\n                        // Regardless of the failure reason, continue in\n                        // jitsi-meet as if the leave has succeeded.\n                        dispatch(conferenceLeft(conference_));\n                    });\n        } else {\n            promise = Promise.resolve();\n        }\n\n        // Disconnect the connection.\n        const { connecting, connection } = state['features/base/connection'];\n\n        // The connection we have already connected or are connecting.\n        const connection_ = connection || connecting;\n\n        if (connection_) {\n            promise = promise.then(() => connection_.disconnect());\n        } else {\n            logger.info('No connection found while disconnecting.');\n        }\n\n        return promise;\n    };\n}\n\n/**\n * Sets the location URL of the application, connecton, conference, etc.\n *\n * @param {URL} [locationURL] - The location URL of the application,\n * connection, conference, etc.\n * @returns {{\n *     type: SET_LOCATION_URL,\n *     locationURL: URL\n * }}\n */\nexport function setLocationURL(locationURL: ?URL) {\n    return {\n        type: SET_LOCATION_URL,\n        locationURL\n    };\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\ndeclare var APP: Object;\ndeclare var config: Object;\n\nimport { configureInitialDevices } from '../devices';\nimport { getBackendSafeRoomName } from '../util';\n\nexport {\n    connectionEstablished,\n    connectionFailed,\n    setLocationURL\n} from './actions.native';\nimport logger from './logger';\n\n/**\n * Opens new connection.\n *\n * @returns {Promise<JitsiConnection>}\n */\nexport function connect() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const room = getBackendSafeRoomName(getState()['features/base/conference'].room);\n\n        // XXX For web based version we use conference initialization logic\n        // from the old app (at the moment of writing).\n        return dispatch(configureInitialDevices()).then(\n            () => APP.conference.init({\n                roomName: room\n            }).catch(error => {\n                APP.API.notifyConferenceLeft(APP.conference.roomName);\n                logger.error(error);\n            }));\n    };\n}\n\n/**\n * Closes connection.\n *\n * @param {boolean} [requestFeedback] - Whether or not to attempt showing a\n * request for call feedback.\n * @returns {Function}\n */\nexport function disconnect(requestFeedback: boolean = false) {\n    // XXX For web based version we use conference hanging up logic from the old\n    // app.\n    return () => APP.conference.hangup(requestFeedback);\n}\n","/* @flow */\n\nimport { toState } from '../redux';\nimport { toURLString } from '../util';\n\n/**\n * Figures out what's the current conference URL which is supposed to indicate what conference is currently active.\n * When not currently in any conference and not trying to join any then 'undefined' is returned.\n *\n * @param {Object|Function} stateful - Either the whole Redux state object or the Redux store's {@code getState} method.\n * @returns {string|undefined}\n * @private\n */\nexport function getCurrentConferenceUrl(stateful: Function | Object) {\n    const state = toState(stateful);\n    let currentUrl;\n\n    if (isInviteURLReady(state)) {\n        currentUrl = toURLString(getInviteURL(state));\n    }\n\n    // Check if the URL doesn't end with a slash\n    if (currentUrl && currentUrl.substr(-1) === '/') {\n        currentUrl = undefined;\n    }\n\n    return currentUrl ? currentUrl : undefined;\n}\n\n/**\n * Retrieves a simplified version of the conference/location URL stripped of URL params (i.e. Query/search and hash)\n * which should be used for sending invites.\n * NOTE that the method will throw an error if called too early. That is before the conference is joined or before\n * the process of joining one has started. This limitation does not apply to the case when called with the URL object\n * instance. Use {@link isInviteURLReady} to check if it's safe to call the method already.\n *\n * @param {Function|Object} stateOrGetState - The redux state or redux's {@code getState} function or the URL object\n * to be stripped.\n * @returns {string}\n */\nexport function getInviteURL(stateOrGetState: Function | Object): string {\n    const state = toState(stateOrGetState);\n    let locationURL\n        = state instanceof URL\n            ? state\n            : state['features/base/connection'].locationURL;\n\n    // If there's no locationURL on the base/connection feature try the base/config where it's set earlier.\n    if (!locationURL) {\n        locationURL = state['features/base/config'].locationURL;\n    }\n\n    if (!locationURL) {\n        throw new Error('Can not get invite URL - the app is not ready');\n    }\n\n    return getURLWithoutParams(locationURL).href;\n}\n\n/**\n * Checks whether or not is safe to call the {@link getInviteURL} method already.\n *\n * @param {Function|Object} stateOrGetState - The redux state or redux's {@code getState} function.\n * @returns {boolean}\n */\nexport function isInviteURLReady(stateOrGetState: Function | Object): boolean {\n    const state = toState(stateOrGetState);\n\n    return Boolean(state['features/base/connection'].locationURL || state['features/base/config'].locationURL);\n}\n\n/**\n * Gets a {@link URL} without hash and query/search params from a specific\n * {@code URL}.\n *\n * @param {URL} url - The {@code URL} which may have hash and query/search\n * params.\n * @returns {URL}\n */\nexport function getURLWithoutParams(url: URL): URL {\n    const { hash, search } = url;\n\n    if ((hash && hash.length > 1) || (search && search.length > 1)) {\n        url = new URL(url.href); // eslint-disable-line no-param-reassign\n        url.hash = '';\n        url.search = '';\n\n        // XXX The implementation of URL at least on React Native appends ? and\n        // # at the end of the href which is not desired.\n        let { href } = url;\n\n        if (href) {\n            href.endsWith('#') && (href = href.substring(0, href.length - 1));\n            href.endsWith('?') && (href = href.substring(0, href.length - 1));\n\n            // eslint-disable-next-line no-param-reassign\n            url.href === href || (url = new URL(href));\n        }\n    }\n\n    return url;\n}\n\n/**\n * Gets a URL string without hash and query/search params from a specific\n * {@code URL}.\n *\n * @param {URL} url - The {@code URL} which may have hash and query/search\n * params.\n * @returns {string}\n */\nexport function getURLWithoutParamsNormalized(url: URL): string {\n    const urlWithoutParams = getURLWithoutParams(url).href;\n\n    if (urlWithoutParams) {\n        return urlWithoutParams.toLowerCase();\n    }\n\n    return '';\n}\n\n/**\n * Converts a specific id to jid if it's not jid yet.\n *\n * @param {string} id - User id or jid.\n * @param {Object} configHosts - The {@code hosts} part of the {@code config}\n * object.\n * @returns {string} A string in the form of a JID (i.e.\n * {@code user@server.com}).\n */\nexport function toJid(id: string, { authdomain, domain }: Object): string {\n    return id.indexOf('@') >= 0 ? id : `${id}@${authdomain || domain}`;\n}\n","/* @flow */\n\nimport { SET_ROOM } from '../conference';\nimport { JitsiConnectionErrors } from '../lib-jitsi-meet';\nimport { assign, set, ReducerRegistry } from '../redux';\n\nimport {\n    CONNECTION_DISCONNECTED,\n    CONNECTION_ESTABLISHED,\n    CONNECTION_FAILED,\n    CONNECTION_WILL_CONNECT,\n    SET_LOCATION_URL\n} from './actionTypes';\n\nimport type { ConnectionFailedError } from './actions.native';\n\n/**\n * Reduces the Redux actions of the feature base/connection.\n */\nReducerRegistry.register(\n    'features/base/connection',\n    (state: Object = {}, action: Object) => {\n        switch (action.type) {\n        case CONNECTION_DISCONNECTED:\n            return _connectionDisconnected(state, action);\n\n        case CONNECTION_ESTABLISHED:\n            return _connectionEstablished(state, action);\n\n        case CONNECTION_FAILED:\n            return _connectionFailed(state, action);\n\n        case CONNECTION_WILL_CONNECT:\n            return _connectionWillConnect(state, action);\n\n        case SET_LOCATION_URL:\n            return _setLocationURL(state, action);\n\n        case SET_ROOM:\n            return _setRoom(state);\n        }\n\n        return state;\n    });\n\n/**\n * Reduces a specific Redux action CONNECTION_DISCONNECTED of the feature\n * base/connection.\n *\n * @param {Object} state - The Redux state of the feature base/connection.\n * @param {Action} action - The Redux action CONNECTION_DISCONNECTED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/connection after the\n * reduction of the specified action.\n */\nfunction _connectionDisconnected(\n        state: Object,\n        { connection }: { connection: Object }) {\n    const connection_ = _getCurrentConnection(state);\n\n    if (connection_ !== connection) {\n        return state;\n    }\n\n    return assign(state, {\n        connecting: undefined,\n        connection: undefined,\n        timeEstablished: undefined\n    });\n}\n\n/**\n * Reduces a specific Redux action CONNECTION_ESTABLISHED of the feature\n * base/connection.\n *\n * @param {Object} state - The Redux state of the feature base/connection.\n * @param {Action} action - The Redux action CONNECTION_ESTABLISHED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/connection after the\n * reduction of the specified action.\n */\nfunction _connectionEstablished(\n        state: Object,\n        { connection, timeEstablished }: {\n            connection: Object,\n            timeEstablished: number\n        }) {\n    return assign(state, {\n        connecting: undefined,\n        connection,\n        error: undefined,\n        passwordRequired: undefined,\n        timeEstablished\n    });\n}\n\n/**\n * Reduces a specific Redux action CONNECTION_FAILED of the feature\n * base/connection.\n *\n * @param {Object} state - The Redux state of the feature base/connection.\n * @param {Action} action - The Redux action CONNECTION_FAILED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/connection after the\n * reduction of the specified action.\n */\nfunction _connectionFailed(\n        state: Object,\n        { connection, error }: {\n            connection: Object,\n            error: ConnectionFailedError\n        }) {\n    const connection_ = _getCurrentConnection(state);\n\n    if (connection_ && connection_ !== connection) {\n        return state;\n    }\n\n    return assign(state, {\n        connecting: undefined,\n        connection: undefined,\n        error,\n        passwordRequired:\n            error.name === JitsiConnectionErrors.PASSWORD_REQUIRED\n                ? connection : undefined\n    });\n}\n\n/**\n * Reduces a specific Redux action CONNECTION_WILL_CONNECT of the feature\n * base/connection.\n *\n * @param {Object} state - The Redux state of the feature base/connection.\n * @param {Action} action - The Redux action CONNECTION_WILL_CONNECT to reduce.\n * @private\n * @returns {Object} The new state of the feature base/connection after the\n * reduction of the specified action.\n */\nfunction _connectionWillConnect(\n        state: Object,\n        { connection }: { connection: Object }) {\n    return assign(state, {\n        connecting: connection,\n\n        // We don't care if the previous connection has been closed already,\n        // because it's an async process and there's no guarantee if it'll be\n        // done before the new one is established.\n        connection: undefined,\n        error: undefined,\n        passwordRequired: undefined,\n        timeEstablished: undefined\n    });\n}\n\n/**\n * The current (similar to getCurrentConference in base/conference/functions.js)\n * connection which is {@code connection} or {@code connecting}.\n *\n * @param {Object} baseConnectionState - The current state of the\n * {@code 'base/connection'} feature.\n * @returns {JitsiConnection} - The current {@code JitsiConnection} if any.\n * @private\n */\nfunction _getCurrentConnection(baseConnectionState: Object): ?Object {\n    return baseConnectionState.connection || baseConnectionState.connecting;\n}\n\n/**\n * Reduces a specific redux action {@link SET_LOCATION_URL} of the feature\n * base/connection.\n *\n * @param {Object} state - The redux state of the feature base/connection.\n * @param {Action} action - The redux action {@code SET_LOCATION_URL} to reduce.\n * @private\n * @returns {Object} The new state of the feature base/connection after the\n * reduction of the specified action.\n */\nfunction _setLocationURL(\n        state: Object,\n        { locationURL }: { locationURL: ?URL }) {\n    return set(state, 'locationURL', locationURL);\n}\n\n/**\n * Reduces a specific redux action {@link SET_ROOM} of the feature\n * base/connection.\n *\n * @param {Object} state - The redux state of the feature base/connection.\n * @private\n * @returns {Object} The new state of the feature base/connection after the\n * reduction of the specified action.\n */\nfunction _setRoom(state: Object) {\n    return assign(state, {\n        error: undefined,\n        passwordRequired: undefined\n    });\n}\n","// @flow\n\nexport * from './actions';\nexport * from './actionTypes';\nexport * from './constants';\nexport * from './functions';\n\nimport './reducer';\n","/**\n * Dummy implementation of Storage interface with empty methods.\n */\nclass DummyLocalStorage {\n    /* eslint-disable no-empty-function */\n    /**\n     * Empty function\n     */\n    getItem() { }\n\n    /**\n     * Empty function\n     */\n    setItem() { }\n\n    /**\n     * Empty function\n     */\n    removeItem() { }\n\n    /**\n     * Empty function\n     */\n    key() { }\n    /* eslint-enable no-empty-function */\n}\n\n/**\n * Wrapper class for browser's local storage object.\n */\nclass JitsiLocalStorage extends DummyLocalStorage {\n    /**\n     * @constructor\n     * @param {Storage} storage browser's local storage object.\n     */\n    constructor() {\n        super();\n        let storage;\n\n        try {\n            storage = window.localStorage;\n        } catch (error) {\n            // do nothing\n        }\n        this.storage = storage || new DummyLocalStorage();\n    }\n\n    /**\n     * Returns that passed key's value.\n     * @param {string} keyName the name of the key you want to retrieve\n     * the value of.\n     * @returns {String|null} the value of the key. If the key does not exist,\n     * null is returned.\n     */\n    getItem(keyName) {\n        return this.storage.getItem(keyName);\n    }\n\n    /**\n     * Adds a key to the storage, or update key's value if it already exists.\n     * @param {string} keyName the name of the key you want to create/update.\n     * @param {string} keyValue the value you want to give the key you are\n     * creating/updating.\n     */\n    setItem(keyName, keyValue) {\n        return this.storage.setItem(keyName, keyValue);\n    }\n\n    /**\n     * Remove a key from the storage.\n     * @param {string} keyName the name of the key you want to remove.\n     */\n    removeItem(keyName) {\n        return this.storage.removeItem(keyName);\n    }\n\n    /**\n     * Returns the name of the nth key in the list, or null if n is greater\n     * than or equal to the number of key/value pairs in the object.\n     *\n     * @param {number} i - The index of the key in the list.\n     * @returns {string}\n     */\n    key(i) {\n        return this.storage.key(i);\n    }\n}\n\nexport const jitsiLocalStorage = new JitsiLocalStorage();\n","export * from './avatar';\nexport * from './browser-capabilities';\nexport * from './browser-detection';\nexport * from './jitsi-local-storage';\n","/* Copyright @ 2015-present 8x8, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar Logger = require(\"./Logger\");\nvar LogCollector = require(\"./LogCollector\");\n\n/**\n * Definition of the log method\n * @name log_method\n * @function\n * @param {...*} log_args the arguments to be logged\n */\n/**\n * The logger's transport type definition.\n *\n * @typedef {object} LoggerTransport\n *\n * @property {log_method} trace method called to log on {@link Logger.levels.TRACE} logging level\n * @property {log_method} debug method called to log on {@link Logger.levels.DEBUG} logging level\n * @property {log_method} info method called to log on {@link Logger.levels.INFO} logging level\n * @property {log_method} log method called to log on {@link Logger.levels.LOG} logging level\n * @property {log_method} warn method called to log on {@link Logger.levels.WARN} logging level\n * @property {log_method} error method called to log on {@link Logger.levels.ERROR} logging level\n */\n\n/**\n * Map with the created loggers with ID.\n */\nvar idLoggers = {};\n\n/**\n * Array with the loggers without id.\n */\nvar loggers = [];\n\n/**\n * Log level for the lbrary.\n */\nvar curLevel = Logger.levels.TRACE;\n\n\nmodule.exports = {\n    /**\n     * Adds given {@link LoggerTransport} instance to the list of global\n     * transports which means that it'll be used by all {@link Logger}s\n     * @param {LoggerTransport} transport\n     */\n    addGlobalTransport: function(transport) {\n        Logger.addGlobalTransport(transport);\n    },\n    /**\n     * Removes given {@link LoggerTransport} instance from the list of global\n     * transports\n     * @param {LoggerTransport} transport\n     */\n    removeGlobalTransport: function(transport) {\n        Logger.removeGlobalTransport(transport);\n    },\n    /**\n    * Sets global options which will be used by all loggers. Changing these\n    * works even after other loggers are created.\n    */\n    setGlobalOptions: function(options) {\n        Logger.setGlobalOptions(options);\n    },\n    /**\n     * Creates new logger.\n     * @arguments the same as Logger constructor\n     */\n    getLogger: function(id, transports, options) {\n        var logger = new Logger(curLevel, id, transports, options);\n        if(id) {\n            idLoggers[id] = idLoggers[id] || [];\n            idLoggers[id].push(logger);\n        } else {\n            loggers.push(logger);\n        }\n        return logger;\n    },\n    /**\n     * Changes the log level for the existing loggers by id.\n     * @param level the new log level.\n     * @param id if specified the level will be changed only for loggers with the\n     * same id. Otherwise the operation will affect all loggers that don't\n     * have id.\n     */\n    setLogLevelById: function(level, id) {\n        var l = id? (idLoggers[id] || []) : loggers;\n        for(var i = 0; i < l.length; i++) {\n            l[i].setLevel(level);\n        }\n    },\n    /**\n     * Changes the log level for all existing loggers.\n     * @param level the new log level.\n     */\n    setLogLevel: function (level) {\n        curLevel = level;\n        var i = 0;\n        for(; i < loggers.length; i++) {\n            loggers[i].setLevel(level);\n        }\n\n        for(var id in idLoggers) {\n            var l = idLoggers[id] || [];\n            for(i = 0; i < l.length; i++) {\n                l[i].setLevel(level);\n            }\n        }\n    },\n    /**\n     * The supported log levels.\n     */\n    levels: Logger.levels,\n    /**\n     * Exports the <tt>LogCollector</tt>.\n     */\n    LogCollector: LogCollector\n};\n","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","import { colors, gridSize as akGridSize, borderRadius } from '@atlaskit/theme';\nexport var themeNamespace = '@atlaskit-shared-theme/item'; // Used for Group titles and Item descriptions\n\nexport var compactSmallFontSize = 10;\nexport var compactLineHeight = 1.2;\nexport var gridSize = akGridSize();\nexport var defaultTheme = {\n  afterItemSpacing: {\n    compact: akGridSize(),\n    default: akGridSize()\n  },\n  beforeItemSpacing: {\n    compact: akGridSize(),\n    default: akGridSize()\n  },\n  borderRadius: borderRadius(),\n  focus: {\n    outline: colors.B100\n  },\n  height: {\n    compact: 0,\n    default: 0\n  },\n  padding: {\n    default: {\n      bottom: akGridSize() / 2,\n      left: akGridSize() / 2,\n      right: akGridSize() / 2,\n      top: akGridSize() / 2\n    },\n    compact: {\n      bottom: akGridSize(),\n      left: akGridSize(),\n      right: akGridSize(),\n      top: akGridSize()\n    }\n  },\n  default: {\n    background: colors.background,\n    text: colors.text,\n    secondaryText: colors.N200\n  },\n  selected: {\n    background: colors.backgroundActive,\n    text: colors.N500,\n    secondaryText: colors.N200\n  },\n  active: {\n    background: colors.backgroundActive,\n    text: colors.textActive,\n    secondaryText: colors.N200\n  },\n  hover: {\n    background: colors.backgroundHover,\n    text: colors.textHover,\n    secondaryText: colors.N200\n  },\n  disabled: {\n    background: colors.N0,\n    text: colors.N200,\n    secondaryText: colors.N200\n  },\n  // same as hover in this case\n  dragging: {\n    background: colors.N20,\n    text: colors.N800,\n    secondaryText: colors.N200\n  }\n};\n\nvar isValidCssValue = function isValidCssValue(value) {\n  return value !== undefined && value !== null && value !== '';\n}; // Returns the theme that contains the requested theme key(s), preferring the user-supplied\n// theme if it is provided.\n\n\nexport var themeWithKeys = function themeWithKeys(maybeTheme, key, parentKey) {\n  if (parentKey) {\n    return maybeTheme && maybeTheme[parentKey] && isValidCssValue(maybeTheme[parentKey][key]) ? maybeTheme : defaultTheme;\n  }\n\n  return maybeTheme && isValidCssValue(maybeTheme[key]) ? maybeTheme : defaultTheme;\n}; // Returns the theme value for the requested key(s), falling back to the default theme if the\n// user-supplied theme doesn't exist or doesn't contain the requested key(s)\n\nexport var getThemeStyle = function getThemeStyle(maybeTheme, key, parentKey) {\n  var theme = themeWithKeys(maybeTheme, key, parentKey);\n  return parentKey ? theme[parentKey][key] : theme[key];\n};","/**\n * Action type to add a video track to the store.\n */\nexport const ADD_PREJOIN_VIDEO_TRACK = 'ADD_PREJOIN_VIDEO_TRACK';\n\n/**\n * Action type to add an audio track to the store.\n */\nexport const ADD_PREJOIN_AUDIO_TRACK = 'ADD_PREJOIN_AUDIO_TRACK';\n\n/**\n * Action type to add a content sharing track to the store.\n */\nexport const ADD_PREJOIN_CONTENT_SHARING_TRACK\n    = 'ADD_PREJOIN_CONTENT_SHARING_TRACK';\n\n/**\n * Action type to signal the start of the conference.\n */\nexport const PREJOIN_START_CONFERENCE = 'PREJOIN_START_CONFERENCE';\n\n/**\n * Action type to set the status of the device.\n */\nexport const SET_DEVICE_STATUS = 'SET_DEVICE_STATUS';\n\n/**\n * Action type to set the visiblity of the 'JoinByPhone' dialog.\n */\nexport const SET_JOIN_BY_PHONE_DIALOG_VISIBLITY = 'SET_JOIN_BY_PHONE_DIALOG_VISIBLITY';\n\n/**\n * Action type to disable the audio while on prejoin page.\n */\nexport const SET_PREJOIN_AUDIO_DISABLED = 'SET_PREJOIN_AUDIO_DISABLED';\n\n/**\n * Action type to mute/unmute the audio while on prejoin page.\n */\nexport const SET_PREJOIN_AUDIO_MUTED = 'SET_PREJOIN_AUDIO_MUTED';\n\n/**\n * Action type to set the errors while creating the prejoin streams.\n */\nexport const SET_PREJOIN_DEVICE_ERRORS = 'SET_PREJOIN_DEVICE_ERRORS';\n\n/**\n * Action type to set the name of the user.\n */\nexport const SET_PREJOIN_NAME = 'SET_PREJOIN_NAME';\n\n/**\n * Action type to set the visibility of the prejoin page.\n */\nexport const SET_PREJOIN_PAGE_VISIBILITY = 'SET_PREJOIN_PAGE_VISIBILITY';\n\n/**\n * Action type to mute/unmute the video while on prejoin page.\n */\nexport const SET_PREJOIN_VIDEO_DISABLED = 'SET_PREJOIN_VIDEO_DISABLED';\n\n/**\n * Action type to mute/unmute the video while on prejoin page.\n */\nexport const SET_PREJOIN_VIDEO_MUTED = 'SET_PREJOIN_VIDEO_MUTED';\n","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import * as colors from './colors';\nimport themed from './utils/themed'; // Cards on a board\n\nexport var e100 = themed({\n  light: \"box-shadow: 0 1px 1px \".concat(colors.N50A, \", 0 0 1px 0 \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 1px 1px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Inline dialogs\n\nexport var e200 = themed({\n  light: \"box-shadow: 0 4px 8px -2px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 4px 8px -2px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Modals\n\nexport var e300 = themed({\n  light: \"box-shadow: 0 8px 16px -4px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 8px 16px -4px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Panels\n\nexport var e400 = themed({\n  light: \"box-shadow: 0 12px 24px -6px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 12px 24px -6px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Flag messages (notifications)\n\nexport var e500 = themed({\n  light: \"box-shadow: 0 20px 32px -8px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 20px 32px -8px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n});","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport { gridSize, fontSize } from './index';\n\nvar baseHeading = function baseHeading(size, lineHeight) {\n  return \"\\n  font-size: \".concat(size / fontSize(), \"em;\\n  font-style: inherit;\\n  line-height: \").concat(lineHeight / size, \";\\n\");\n};\n\nexport var h900 = function h900() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(35, 40), colors.heading, gridSize() * 6.5);\n};\nexport var h800 = function h800() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(29, 32), colors.heading, gridSize() * 5);\n};\nexport var h700 = function h700() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(24, 28), colors.heading, gridSize() * 5);\n};\nexport var h600 = function h600() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  margin-top: \", \"px;\\n\"], baseHeading(20, 24), colors.heading, gridSize() * 3.5);\n};\nexport var h500 = function h500() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.006em;\\n  margin-top: \", \"px;\\n\"], baseHeading(16, 20), colors.heading, gridSize() * 3);\n};\nexport var h400 = function h400() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.003em;\\n  margin-top: \", \"px;\\n\"], baseHeading(14, 16), colors.heading, gridSize() * 2);\n};\nexport var h300 = function h300() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n  text-transform: uppercase;\\n\"], baseHeading(12, 16), colors.heading, gridSize() * 2.5);\n};\nexport var h200 = function h200() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n\"], baseHeading(12, 16), colors.subtleHeading, gridSize() * 2);\n};\nexport var h100 = function h100() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 700;\\n  margin-top: \", \"px;\\n\"], baseHeading(11, 16), colors.subtleHeading, gridSize() * 2);\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nexport default (function (_ref) {\n  var children = _ref.children,\n      props = _ref.props,\n      theme = _ref.theme;\n  var appearance = _typeof(props) === 'object' ? 'default' : props;\n  var merged = _typeof(props) === 'object' ? _objectSpread({}, props) : {};\n  Object.keys(theme).forEach(function (key) {\n    if (!(key in merged)) {\n      merged[key] = theme[key]({\n        appearance: appearance\n      });\n    }\n  });\n  return children(merged);\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport * as colors from '../colors';\nimport { createTheme } from '../utils/createTheme';\n\nvar orTextColor = function orTextColor(preferred) {\n  return function (p) {\n    return p[preferred] || p.textColor;\n  };\n};\n\nvar Div = styled.div.withConfig({\n  displayName: \"Reset__Div\",\n  componentId: \"sc-15i6ali-0\"\n})([\"\\n  \", \";\\n\"], function (p) {\n  return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n\\n    a {\\n      color: \", \";\\n    }\\n    a:hover {\\n      color: \", \";\\n    }\\n    a:active {\\n      color: \", \";\\n    }\\n    a:focus {\\n      outline-color: \", \";\\n    }\\n    h1,\\n    h2,\\n    h3,\\n    h4,\\n    h5 {\\n      color: \", \";\\n    }\\n    h6 {\\n      color: \", \";\\n    }\\n    small {\\n      color: \", \";\\n    }\\n  \"], p.backgroundColor, p.textColor, orTextColor('linkColor'), orTextColor('linkColorHover'), orTextColor('linkColorActive'), orTextColor('linkColorOutline'), orTextColor('headingColor'), orTextColor('subtleHeadingColor'), orTextColor('subtleTextColor'));\n});\nexport var ResetTheme = createTheme(function () {\n  return {\n    backgroundColor: colors.N0,\n    linkColor: colors.B400,\n    linkColorHover: colors.B300,\n    linkColorActive: colors.B500,\n    linkColorOutline: colors.B100,\n    headingColor: colors.N800,\n    subtleHeadingColor: colors.N200,\n    subtleTextColor: colors.N200,\n    textColor: colors.N900\n  };\n});\nexport function Reset(props) {\n  return React.createElement(ResetTheme.Provider, {\n    value: props.theme\n  }, React.createElement(ResetTheme.Consumer, null, function (tokens) {\n    return React.createElement(Div, _extends({}, _objectSpread({}, tokens, {\n      mode: undefined\n    }), props), props.children);\n  }));\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React from 'react';\nimport Theme from './components/Theme'; // Pre-executes the theme and passes it as a prop to the supplied component.\n// This is useful for ensuring that the current theme is accessible as props\n// in styled-components.\n\nexport function withTheme(InnerComponent) {\n  return function ComponentWithTheme(props) {\n    return React.createElement(Theme.Consumer, null, function (tokens) {\n      return React.createElement(InnerComponent, _extends({}, props, {\n        theme: tokens\n      }));\n    });\n  };\n}","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","var superPropBase = require(\"./superPropBase\");\n\nfunction _get(target, property, receiver) {\n  if (typeof Reflect !== \"undefined\" && Reflect.get) {\n    module.exports = _get = Reflect.get;\n  } else {\n    module.exports = _get = function _get(target, property, receiver) {\n      var base = superPropBase(target, property);\n      if (!base) return;\n      var desc = Object.getOwnPropertyDescriptor(base, property);\n\n      if (desc.get) {\n        return desc.get.call(receiver);\n      }\n\n      return desc.value;\n    };\n  }\n\n  return _get(target, property, receiver || target);\n}\n\nmodule.exports = _get;","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","import _extends from \"babel-runtime/helpers/extends\";\nimport _classCallCheck from \"babel-runtime/helpers/classCallCheck\";\nimport _possibleConstructorReturn from \"babel-runtime/helpers/possibleConstructorReturn\";\nimport _inherits from \"babel-runtime/helpers/inherits\";\nimport * as React from \"react\";\nimport createContext from \"create-react-context\";\n\nexport var ManagerContext = createContext({ getReferenceRef: undefined, referenceNode: undefined });\n\nvar Manager = function (_React$Component) {\n  _inherits(Manager, _React$Component);\n\n  function Manager() {\n    _classCallCheck(this, Manager);\n\n    var _this = _possibleConstructorReturn(this, _React$Component.call(this));\n\n    _this.getReferenceRef = function (referenceNode) {\n      return _this.setState(function (_ref) {\n        var context = _ref.context;\n        return {\n          context: _extends({}, context, { referenceNode: referenceNode })\n        };\n      });\n    };\n\n    _this.state = {\n      context: {\n        getReferenceRef: _this.getReferenceRef,\n        referenceNode: undefined\n      }\n    };\n    return _this;\n  }\n\n  Manager.prototype.render = function render() {\n    return React.createElement(\n      ManagerContext.Provider,\n      { value: this.state.context },\n      this.props.children\n    );\n  };\n\n  return Manager;\n}(React.Component);\n\nexport default Manager;","\n\n/**\n * Takes an argument and if it's an array, returns the first item in the array,\n * otherwise returns the argument. Used for Preact compatibility.\n */\nexport var unwrapArray = function unwrapArray(arg) {\n  return Array.isArray(arg) ? arg[0] : arg;\n};\n\n/**\n * Takes a maybe-undefined function and arbitrary args and invokes the function\n * only if it is defined.\n */\nexport var safeInvoke = function safeInvoke(fn) {\n  for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  if (typeof fn === \"function\") {\n    return fn.apply(undefined, args);\n  }\n};","import _extends from 'babel-runtime/helpers/extends';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport * as React from 'react';\nimport PopperJS from 'popper.js';\n\nimport { ManagerContext } from './Manager';\nimport { safeInvoke, unwrapArray } from './utils';\n\nvar initialStyle = {\n  position: 'absolute',\n  top: 0,\n  left: 0,\n  opacity: 0,\n  pointerEvents: 'none'\n};\n\nvar initialArrowStyle = {};\n\nexport var InnerPopper = function (_React$Component) {\n  _inherits(InnerPopper, _React$Component);\n\n  function InnerPopper() {\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, InnerPopper);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n      data: undefined,\n      placement: undefined\n    }, _this.popperNode = null, _this.arrowNode = null, _this.setPopperNode = function (popperNode) {\n      if (_this.popperNode === popperNode) return;\n\n      safeInvoke(_this.props.innerRef, popperNode);\n      _this.popperNode = popperNode;\n\n      if (!_this.popperInstance) _this.updatePopperInstance();\n    }, _this.setArrowNode = function (arrowNode) {\n      if (_this.arrowNode === arrowNode) return;\n      _this.arrowNode = arrowNode;\n\n      if (!_this.popperInstance) _this.updatePopperInstance();\n    }, _this.updateStateModifier = {\n      enabled: true,\n      order: 900,\n      fn: function fn(data) {\n        var placement = data.placement;\n\n        _this.setState({ data: data, placement: placement }, placement !== _this.state.placement ? _this.scheduleUpdate : undefined);\n        return data;\n      }\n    }, _this.getOptions = function () {\n      return {\n        placement: _this.props.placement,\n        eventsEnabled: _this.props.eventsEnabled,\n        positionFixed: _this.props.positionFixed,\n        modifiers: _extends({}, _this.props.modifiers, {\n          arrow: {\n            enabled: !!_this.arrowNode,\n            element: _this.arrowNode\n          },\n          applyStyle: { enabled: false },\n          updateStateModifier: _this.updateStateModifier\n        })\n      };\n    }, _this.getPopperStyle = function () {\n      return !_this.popperNode || !_this.state.data ? initialStyle : _extends({\n        position: _this.state.data.offsets.popper.position\n      }, _this.state.data.styles);\n    }, _this.getPopperPlacement = function () {\n      return !_this.state.data ? undefined : _this.state.placement;\n    }, _this.getArrowStyle = function () {\n      return !_this.arrowNode || !_this.state.data ? initialArrowStyle : _this.state.data.arrowStyles;\n    }, _this.getOutOfBoundariesState = function () {\n      return _this.state.data ? _this.state.data.hide : undefined;\n    }, _this.destroyPopperInstance = function () {\n      if (!_this.popperInstance) return;\n\n      _this.popperInstance.destroy();\n      _this.popperInstance = null;\n    }, _this.updatePopperInstance = function () {\n      _this.destroyPopperInstance();\n\n      var _this2 = _this,\n          popperNode = _this2.popperNode;\n      var referenceElement = _this.props.referenceElement;\n\n\n      if (!referenceElement || !popperNode) return;\n\n      _this.popperInstance = new PopperJS(referenceElement, popperNode, _this.getOptions());\n    }, _this.scheduleUpdate = function () {\n      if (_this.popperInstance) {\n        _this.popperInstance.scheduleUpdate();\n      }\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  InnerPopper.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n    // If the Popper.js options have changed, update the instance (destroy + create)\n    if (this.props.placement !== prevProps.placement || this.props.eventsEnabled !== prevProps.eventsEnabled || this.props.referenceElement !== prevProps.referenceElement || this.props.positionFixed !== prevProps.positionFixed) {\n      this.updatePopperInstance();\n      return;\n    }\n\n    // A placement difference in state means popper determined a new placement\n    // apart from the props value. By the time the popper element is rendered with\n    // the new position Popper has already measured it, if the place change triggers\n    // a size change it will result in a misaligned popper. So we schedule an update to be sure.\n    if (prevState.placement !== this.state.placement) {\n      this.scheduleUpdate();\n    }\n  };\n\n  InnerPopper.prototype.componentWillUnmount = function componentWillUnmount() {\n    this.destroyPopperInstance();\n  };\n\n  InnerPopper.prototype.render = function render() {\n    return unwrapArray(this.props.children)({\n      ref: this.setPopperNode,\n      style: this.getPopperStyle(),\n      placement: this.getPopperPlacement(),\n      outOfBoundaries: this.getOutOfBoundariesState(),\n      scheduleUpdate: this.scheduleUpdate,\n      arrowProps: {\n        ref: this.setArrowNode,\n        style: this.getArrowStyle()\n      }\n    });\n  };\n\n  return InnerPopper;\n}(React.Component);\n\nInnerPopper.defaultProps = {\n  placement: 'bottom',\n  eventsEnabled: true,\n  referenceElement: undefined,\n  positionFixed: false\n};\nvar placements = PopperJS.placements;\nexport { placements };\n\nexport default function Popper(props) {\n  return React.createElement(\n    ManagerContext.Consumer,\n    null,\n    function (_ref) {\n      var referenceNode = _ref.referenceNode;\n      return React.createElement(InnerPopper, _extends({ referenceElement: referenceNode }, props));\n    }\n  );\n}","import _extends from 'babel-runtime/helpers/extends';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport * as React from 'react';\nimport warning from 'warning';\nimport { ManagerContext } from './Manager';\nimport { safeInvoke, unwrapArray } from './utils';\n\nvar InnerReference = function (_React$Component) {\n  _inherits(InnerReference, _React$Component);\n\n  function InnerReference() {\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, InnerReference);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.refHandler = function (node) {\n      safeInvoke(_this.props.innerRef, node);\n      safeInvoke(_this.props.getReferenceRef, node);\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  InnerReference.prototype.render = function render() {\n    warning(this.props.getReferenceRef, '`Reference` should not be used outside of a `Manager` component.');\n    return unwrapArray(this.props.children)({ ref: this.refHandler });\n  };\n\n  return InnerReference;\n}(React.Component);\n\nexport default function Reference(props) {\n  return React.createElement(\n    ManagerContext.Consumer,\n    null,\n    function (_ref) {\n      var getReferenceRef = _ref.getReferenceRef;\n      return React.createElement(InnerReference, _extends({ getReferenceRef: getReferenceRef }, props));\n    }\n  );\n}","// @flow\n\n\n/**\n * Mutes or unmutes a track.\n *\n * @param {Object} track - The track to be configured.\n * @param {boolean} shouldMute - If it should mute or not.\n * @returns {Promise<void>}\n */\nfunction applyMuteOptionsToTrack(track, shouldMute) {\n    if (track.isMuted() === shouldMute) {\n        return;\n    }\n\n    if (shouldMute) {\n        return track.mute();\n    }\n\n    return track.unmute();\n}\n\n/**\n * Selector for the visibility of the 'join by phone' buttons.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function areJoinByPhoneButtonsVisible(state: Object): boolean {\n    return state['features/prejoin'].buttonsVisible;\n}\n\n/**\n * Selector for determining if the device status strip is visible or not.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isDeviceStatusVisible(state: Object): boolean {\n    return !((isAudioDisabled(state) && isPrejoinVideoDisabled(state))\n        || (isPrejoinAudioMuted(state) && isPrejoinVideoMuted(state)));\n}\n\n/**\n * Selector for getting the active video/content sharing track.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function getActiveVideoTrack(state: Object): Object {\n    const track = getVideoTrack(state) || getContentSharingTrack(state);\n\n    if (track && track.isActive()) {\n        return track;\n    }\n\n    return null;\n}\n\n/**\n * Returns a list with all the prejoin tracks configured according to\n * user's preferences.\n *\n * @param {Object} state - The state of the app.\n * @returns {Promise<Object[]>}\n */\nexport async function getAllPrejoinConfiguredTracks(state: Object): Promise<Object[]> {\n    const tracks = [];\n    const audioTrack = getAudioTrack(state);\n    const videoTrack = getVideoTrack(state);\n    const csTrack = getContentSharingTrack(state);\n\n    if (csTrack) {\n        tracks.push(csTrack);\n    } else if (videoTrack) {\n        await applyMuteOptionsToTrack(videoTrack, isPrejoinVideoMuted(state));\n        tracks.push(videoTrack);\n    }\n\n    if (audioTrack) {\n        await applyMuteOptionsToTrack(audioTrack, isPrejoinAudioMuted(state));\n        isPrejoinAudioMuted(state) && audioTrack.mute();\n        tracks.push(audioTrack);\n    }\n\n    return tracks;\n}\n\n/**\n * Selector for getting the prejoin audio track.\n *\n * @param {Object} state - The state of the app.\n * @returns {Object}\n */\nexport function getAudioTrack(state: Object): Object {\n    return state['features/prejoin'].audioTrack;\n}\n\n/**\n * Selector for getting the prejoin content sharing track.\n *\n * @param {Object} state - The state of the app.\n * @returns {Object}\n */\nexport function getContentSharingTrack(state: Object): Object {\n    return state['features/prejoin'].contentSharingTrack;\n}\n\n/**\n * Returns the text for the prejoin status bar.\n *\n * @param {Object} state - The state of the app.\n * @returns {string}\n */\nexport function getDeviceStatusText(state: Object): string {\n    return state['features/prejoin'].deviceStatusText;\n}\n\n/**\n * Returns the type of the prejoin status bar: 'ok'|'warning'.\n *\n * @param {Object} state - The state of the app.\n * @returns {string}\n */\nexport function getDeviceStatusType(state: Object): string {\n    return state['features/prejoin'].deviceStatusType;\n}\n\n/**\n * Selector for getting the prejoin video track.\n *\n * @param {Object} state - The state of the app.\n * @returns {Object}\n */\nexport function getVideoTrack(state: Object): Object {\n    return state['features/prejoin'].videoTrack;\n}\n\n/**\n * Selector for getting the mute status of the prejoin audio.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isPrejoinAudioMuted(state: Object): boolean {\n    return state['features/prejoin'].audioMuted;\n}\n\n/**\n * Selector for getting the name that the user filled while configuring.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function getPrejoinName(state: Object): string {\n    return state['features/prejoin'].name;\n}\n\n/**\n * Selector for getting the mute status of the prejoin video.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isPrejoinVideoMuted(state: Object): boolean {\n    return state['features/prejoin'].videoMuted;\n}\n\n/**\n * Selector for getting the error if any while creating streams.\n *\n * @param {Object} state - The state of the app.\n * @returns {string}\n */\nexport function getRawError(state: Object): string {\n    return state['features/prejoin'].rawError;\n}\n\n/**\n * Selector for getting state of the prejoin audio.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isAudioDisabled(state: Object): Object {\n    return state['features/prejoin'].audioDisabled;\n}\n\n/**\n * Selector for getting state of the prejoin video.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isPrejoinVideoDisabled(state: Object): Object {\n    return state['features/prejoin'].videoDisabled;\n}\n\n/**\n * Selector for getting the visiblity state for the 'JoinByPhoneDialog'.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isJoinByPhoneDialogVisible(state: Object): boolean {\n    return state['features/prejoin'].showJoinByPhoneDialog;\n}\n\n/**\n * Returns true if the prejoin page is enabled and no flag\n * to bypass showing the page is present.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isPrejoinPageEnabled(state: Object): boolean {\n    return state['features/base/config'].prejoinPageEnabled;\n}\n\n/**\n * Returns true if the prejoin page is visible & active.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isPrejoinPageVisible(state: Object): boolean {\n    return isPrejoinPageEnabled(state) && state['features/prejoin'].showPrejoin;\n}\n","\n// @flow\n\nimport { isIconUrl } from './functions';\n\n/**\n * Tries to preload an image.\n *\n * @param {string | Object} src - Source of the avatar.\n * @returns {Promise}\n */\nexport function preloadImage(src: string | Object): Promise<string> {\n    if (isIconUrl(src)) {\n        return Promise.resolve(src);\n    }\n\n    return new Promise((resolve, reject) => {\n        const image = document.createElement('img');\n\n        image.onload = () => resolve(src);\n        image.onerror = reject;\n        image.src = src;\n    });\n}\n","// @flow\nimport { getGravatarURL } from 'js-utils/avatar';\n\nimport { toState } from '../redux';\n\nimport { JitsiParticipantConnectionStatus } from '../lib-jitsi-meet';\nimport { MEDIA_TYPE, shouldRenderVideoTrack } from '../media';\nimport { getTrackByMediaTypeAndParticipant } from '../tracks';\nimport { createDeferred } from '../util';\n\nimport {\n    JIGASI_PARTICIPANT_ICON,\n    MAX_DISPLAY_NAME_LENGTH,\n    PARTICIPANT_ROLE\n} from './constants';\nimport { preloadImage } from './preloadImage';\n\ndeclare var config: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * Temp structures for avatar urls to be checked/preloaded.\n */\nconst AVATAR_QUEUE = [];\nconst AVATAR_CHECKED_URLS = new Map();\n/* eslint-disable arrow-body-style */\nconst AVATAR_CHECKER_FUNCTIONS = [\n    participant => {\n        return participant && participant.isJigasi ? JIGASI_PARTICIPANT_ICON : null;\n    },\n    participant => {\n        return participant && participant.avatarURL ? participant.avatarURL : null;\n    },\n    participant => {\n        return participant && participant.email ? getGravatarURL(participant.email) : null;\n    }\n];\n/* eslint-enable arrow-body-style */\n\n/**\n * Resolves the first loadable avatar URL for a participant.\n *\n * @param {Object} participant - The participant to resolve avatars for.\n * @returns {Promise}\n */\nexport function getFirstLoadableAvatarUrl(participant: Object) {\n    const deferred = createDeferred();\n    const fullPromise = deferred.promise\n        .then(() => _getFirstLoadableAvatarUrl(participant))\n        .then(src => {\n\n            if (AVATAR_QUEUE.length) {\n                const next = AVATAR_QUEUE.shift();\n\n                next.resolve();\n            }\n\n            return src;\n        });\n\n    if (AVATAR_QUEUE.length) {\n        AVATAR_QUEUE.push(deferred);\n    } else {\n        deferred.resolve();\n    }\n\n    return fullPromise;\n}\n\n/**\n * Returns local participant from Redux state.\n *\n * @param {(Function|Object|Participant[])} stateful - The redux state\n * features/base/participants, the (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @returns {(Participant|undefined)}\n */\nexport function getLocalParticipant(stateful: Object | Function) {\n    const participants = _getAllParticipants(stateful);\n\n    return participants.find(p => p.local);\n}\n\n/**\n * Normalizes a display name so then no invalid values (padding, length...etc)\n * can be set.\n *\n * @param {string} name - The display name to set.\n * @returns {string}\n */\nexport function getNormalizedDisplayName(name: string) {\n    if (!name || !name.trim()) {\n        return undefined;\n    }\n\n    return name.trim().substring(0, MAX_DISPLAY_NAME_LENGTH);\n}\n\n/**\n * Returns participant by ID from Redux state.\n *\n * @param {(Function|Object|Participant[])} stateful - The redux state\n * features/base/participants, the (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @param {string} id - The ID of the participant to retrieve.\n * @private\n * @returns {(Participant|undefined)}\n */\nexport function getParticipantById(\n        stateful: Object | Function, id: string): ?Object {\n    const participants = _getAllParticipants(stateful);\n\n    return participants.find(p => p.id === id);\n}\n\n/**\n * Returns a count of the known participants in the passed in redux state,\n * excluding any fake participants.\n *\n * @param {(Function|Object|Participant[])} stateful - The redux state\n * features/base/participants, the (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @returns {number}\n */\nexport function getParticipantCount(stateful: Object | Function) {\n    return getParticipants(stateful).length;\n}\n\n/**\n * Returns a count of the known participants in the passed in redux state,\n * including fake participants.\n *\n * @param {(Function|Object|Participant[])} stateful - The redux state\n * features/base/participants, the (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @returns {number}\n */\nexport function getParticipantCountWithFake(stateful: Object | Function) {\n    return _getAllParticipants(stateful).length;\n}\n\n/**\n * Returns participant's display name.\n *\n * FIXME: Remove the hardcoded strings once interfaceConfig is stored in redux\n * and merge with a similarly named method in {@code conference.js}.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state.\n * @param {string} id - The ID of the participant's display name to retrieve.\n * @returns {string}\n */\nexport function getParticipantDisplayName(\n        stateful: Object | Function,\n        id: string) {\n    const participant = getParticipantById(stateful, id);\n\n    if (participant) {\n        if (participant.name) {\n            return participant.name;\n        }\n\n        if (participant.local) {\n            return typeof interfaceConfig === 'object'\n                ? interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME\n                : 'me';\n        }\n    }\n\n    return typeof interfaceConfig === 'object'\n        ? interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME\n        : 'Fellow Jitster';\n}\n\n/**\n * Returns the presence status of a participant associated with the passed id.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state.\n * @param {string} id - The id of the participant.\n * @returns {string} - The presence status.\n */\nexport function getParticipantPresenceStatus(\n        stateful: Object | Function, id: string) {\n    if (!id) {\n        return undefined;\n    }\n    const participantById = getParticipantById(stateful, id);\n\n    if (!participantById) {\n        return undefined;\n    }\n\n    return participantById.presence;\n}\n\n/**\n * Selectors for getting all known participants with fake participants filtered\n * out.\n *\n * @param {(Function|Object|Participant[])} stateful - The redux state\n * features/base/participants, the (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @returns {Participant[]}\n */\nexport function getParticipants(stateful: Object | Function) {\n    return _getAllParticipants(stateful).filter(p => !p.isFakeParticipant);\n}\n\n/**\n * Returns the participant which has its pinned state set to truthy.\n *\n * @param {(Function|Object|Participant[])} stateful - The redux state\n * features/base/participants, the (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @returns {(Participant|undefined)}\n */\nexport function getPinnedParticipant(stateful: Object | Function) {\n    return _getAllParticipants(stateful).find(p => p.pinned);\n}\n\n/**\n * Returns array of participants from Redux state.\n *\n * @param {(Function|Object|Participant[])} stateful - The redux state\n * features/base/participants, the (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @private\n * @returns {Participant[]}\n */\nfunction _getAllParticipants(stateful) {\n    return (\n        Array.isArray(stateful)\n            ? stateful\n            : toState(stateful)['features/base/participants'] || []);\n}\n\n/**\n * Returns true if all of the meeting participants are moderators.\n *\n * @param {Object|Function} stateful -Object or function that can be resolved\n * to the Redux state.\n * @returns {boolean}\n */\nexport function isEveryoneModerator(stateful: Object | Function) {\n    const participants = _getAllParticipants(stateful);\n\n    for (const participant of participants) {\n        if (participant.role !== PARTICIPANT_ROLE.MODERATOR) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n/**\n * Checks a value and returns true if it's a preloaded icon object.\n *\n * @param {?string | ?Object} icon - The icon to check.\n * @returns {boolean}\n */\nexport function isIconUrl(icon: ?string | ?Object) {\n    return Boolean(icon) && typeof icon === 'object';\n}\n\n/**\n * Returns true if the current local participant is a moderator in the\n * conference.\n *\n * @param {Object|Function} stateful - Object or function that can be resolved\n * to the Redux state.\n * @param {?boolean} ignoreToken - When true we ignore the token check.\n * @returns {boolean}\n */\nexport function isLocalParticipantModerator(\n        stateful: Object | Function,\n        ignoreToken: ?boolean = false) {\n    const state = toState(stateful);\n    const localParticipant = getLocalParticipant(state);\n\n    if (!localParticipant) {\n        return false;\n    }\n\n    return (\n        localParticipant.role === PARTICIPANT_ROLE.MODERATOR\n        && (ignoreToken\n                || !state['features/base/config'].enableUserRolesBasedOnToken\n                || !state['features/base/jwt'].isGuest));\n}\n\n/**\n * Returns true if the video of the participant should be rendered.\n * NOTE: This is currently only used on mobile.\n *\n * @param {Object|Function} stateful - Object or function that can be resolved\n * to the Redux state.\n * @param {string} id - The ID of the participant.\n * @returns {boolean}\n */\nexport function shouldRenderParticipantVideo(stateful: Object | Function, id: string) {\n    const state = toState(stateful);\n    const participant = getParticipantById(state, id);\n\n    if (!participant) {\n        return false;\n    }\n\n    /* First check if we have an unmuted video track. */\n    const videoTrack\n        = getTrackByMediaTypeAndParticipant(state['features/base/tracks'], MEDIA_TYPE.VIDEO, id);\n\n    if (!shouldRenderVideoTrack(videoTrack, /* waitForVideoStarted */ false)) {\n        return false;\n    }\n\n    /* Then check if the participant connection is active. */\n    const connectionStatus = participant.connectionStatus || JitsiParticipantConnectionStatus.ACTIVE;\n\n    if (connectionStatus !== JitsiParticipantConnectionStatus.ACTIVE) {\n        return false;\n    }\n\n    /* Then check if audio-only mode is not active. */\n    const audioOnly = state['features/base/audio-only'].enabled;\n\n    if (!audioOnly) {\n        return true;\n    }\n\n    /* Last, check if the participant is sharing their screen and they are on stage. */\n    const screenShares = state['features/video-layout'].screenShares || [];\n    const largeVideoParticipantId = state['features/large-video'].participantId;\n    const participantIsInLargeVideoWithScreen\n        = participant.id === largeVideoParticipantId && screenShares.includes(participant.id);\n\n    return participantIsInLargeVideoWithScreen;\n}\n\n/**\n * Resolves the first loadable avatar URL for a participant.\n *\n * @param {Object} participant - The participant to resolve avatars for.\n * @returns {?string}\n */\nasync function _getFirstLoadableAvatarUrl(participant) {\n    for (let i = 0; i < AVATAR_CHECKER_FUNCTIONS.length; i++) {\n        const url = AVATAR_CHECKER_FUNCTIONS[i](participant);\n\n        if (url) {\n            if (AVATAR_CHECKED_URLS.has(url)) {\n                if (AVATAR_CHECKED_URLS.get(url)) {\n                    return url;\n                }\n            } else {\n                try {\n                    const finalUrl = await preloadImage(url);\n\n                    AVATAR_CHECKED_URLS.set(finalUrl, true);\n\n                    return finalUrl;\n                } catch (e) {\n                    AVATAR_CHECKED_URLS.set(url, false);\n                }\n            }\n        }\n    }\n\n    return undefined;\n}\n","/**\n * The type of Redux action which changes Google API state.\n *\n * {\n *     type: SET_GOOGLE_API_STATE\n * }\n * @public\n */\nexport const SET_GOOGLE_API_STATE = 'SET_GOOGLE_API_STATE';\n\n/**\n * The type of Redux action which changes Google API profile state.\n *\n * {\n *     type: SET_GOOGLE_API_PROFILE\n * }\n * @public\n */\nexport const SET_GOOGLE_API_PROFILE = 'SET_GOOGLE_API_PROFILE';\n","// @flow\n\n/**\n * Google API URL to retreive streams for a live broadcast of a user.\n *\n * NOTE: The URL must be appended by a broadcast ID returned by a call towards\n * {@code API_URL_LIVE_BROADCASTS}.\n *\n * @type {string}\n */\n// eslint-disable-next-line max-len\nexport const API_URL_BROADCAST_STREAMS = 'https://content.googleapis.com/youtube/v3/liveStreams?part=id%2Csnippet%2Ccdn%2Cstatus&id=';\n\n/**\n * Google API URL to retreive live broadcasts of a user.\n *\n * @type {string}\n */\n// eslint-disable-next-line max-len\nexport const API_URL_LIVE_BROADCASTS = 'https://content.googleapis.com/youtube/v3/liveBroadcasts?broadcastType=all&mine=true&part=id%2Csnippet%2CcontentDetails%2Cstatus';\n\n/**\n * Array of API discovery doc URLs for APIs used by the googleApi.\n *\n * @type {string[]}\n */\nexport const DISCOVERY_DOCS\n    = [ 'https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest' ];\n\n/**\n * An enumeration of the different states the Google API can be in.\n *\n * @private\n * @type {Object}\n */\nexport const GOOGLE_API_STATES = {\n    /**\n     * The state in which the Google API still needs to be loaded.\n     */\n    NEEDS_LOADING: 0,\n\n    /**\n     * The state in which the Google API is loaded and ready for use.\n     */\n    LOADED: 1,\n\n    /**\n     * The state in which a user has been logged in through the Google API.\n     */\n    SIGNED_IN: 2,\n\n    /**\n     * The state in which the Google authentication is not available (e.g. Play\n     * services are not installed on Android).\n     */\n    NOT_AVAILABLE: 3\n};\n\n/**\n * Google API auth scope to access Google calendar.\n *\n * @type {string}\n */\nexport const GOOGLE_SCOPE_CALENDAR = 'https://www.googleapis.com/auth/calendar';\n\n/**\n * Google API auth scope to access YouTube streams.\n *\n * @type {string}\n */\nexport const GOOGLE_SCOPE_YOUTUBE\n    = 'https://www.googleapis.com/auth/youtube.readonly';\n","import {\n    API_URL_BROADCAST_STREAMS,\n    API_URL_LIVE_BROADCASTS,\n    DISCOVERY_DOCS,\n    GOOGLE_SCOPE_CALENDAR,\n    GOOGLE_SCOPE_YOUTUBE\n} from './constants';\n\nconst GOOGLE_API_CLIENT_LIBRARY_URL = 'https://apis.google.com/js/api.js';\n\n/**\n * A promise for dynamically loading the Google API Client Library.\n *\n * @private\n * @type {Promise}\n */\nlet googleClientLoadPromise;\n\n/**\n * A singleton for loading and interacting with the Google API.\n */\nconst googleApi = {\n    /**\n     * Obtains Google API Client Library, loading the library dynamically if\n     * needed.\n     *\n     * @returns {Promise}\n     */\n    get() {\n        const globalGoogleApi = this._getGoogleApiClient();\n\n        if (!globalGoogleApi) {\n            return this.load();\n        }\n\n        return Promise.resolve(globalGoogleApi);\n    },\n\n    /**\n     * Gets the profile for the user signed in to the Google API Client Library.\n     *\n     * @returns {Promise}\n     */\n    getCurrentUserProfile() {\n        return this.get()\n            .then(() => this.isSignedIn())\n            .then(isSignedIn => {\n                if (!isSignedIn) {\n                    return null;\n                }\n\n                return this._getGoogleApiClient()\n                    .auth2.getAuthInstance()\n                    .currentUser.get()\n                    .getBasicProfile();\n            });\n    },\n\n    /**\n     * Sets the Google Web Client ID used for authenticating with Google and\n     * making Google API requests.\n     *\n     * @param {string} clientId - The client ID to be used with the API library.\n     * @param {boolean} enableYoutube - Whether youtube scope is enabled.\n     * @param {boolean} enableCalendar - Whether calendar scope is enabled.\n     * @returns {Promise}\n     */\n    initializeClient(clientId, enableYoutube, enableCalendar) {\n        return this.get()\n            .then(api => new Promise((resolve, reject) => {\n                const scope\n                    = `${enableYoutube ? GOOGLE_SCOPE_YOUTUBE : ''} ${enableCalendar ? GOOGLE_SCOPE_CALENDAR : ''}`\n                        .trim();\n\n                // setTimeout is used as a workaround for api.client.init not\n                // resolving consistently when the Google API Client Library is\n                // loaded asynchronously. See:\n                // github.com/google/google-api-javascript-client/issues/399\n                setTimeout(() => {\n                    api.client.init({\n                        clientId,\n                        discoveryDocs: DISCOVERY_DOCS,\n                        scope\n                    })\n                    .then(resolve)\n                    .catch(reject);\n                }, 500);\n            }));\n    },\n\n    /**\n     * Checks whether a user is currently authenticated with Google through an\n     * initialized Google API Client Library.\n     *\n     * @returns {Promise}\n     */\n    isSignedIn() {\n        return this.get()\n            .then(api => Boolean(api\n                && api.auth2\n                && api.auth2.getAuthInstance\n                && api.auth2.getAuthInstance()\n                && api.auth2.getAuthInstance().isSignedIn\n                && api.auth2.getAuthInstance().isSignedIn.get()));\n    },\n\n    /**\n     * Generates a script tag and downloads the Google API Client Library.\n     *\n     * @returns {Promise}\n     */\n    load() {\n        if (googleClientLoadPromise) {\n            return googleClientLoadPromise;\n        }\n\n        googleClientLoadPromise = new Promise((resolve, reject) => {\n            const scriptTag = document.createElement('script');\n\n            scriptTag.async = true;\n            scriptTag.addEventListener('error', () => {\n                scriptTag.remove();\n\n                googleClientLoadPromise = null;\n\n                reject();\n            });\n            scriptTag.addEventListener('load', resolve);\n            scriptTag.type = 'text/javascript';\n\n            scriptTag.src = GOOGLE_API_CLIENT_LIBRARY_URL;\n\n            document.head.appendChild(scriptTag);\n        })\n            .then(() => new Promise((resolve, reject) =>\n                this._getGoogleApiClient().load('client:auth2', {\n                    callback: resolve,\n                    onerror: reject\n                })))\n            .then(() => this._getGoogleApiClient());\n\n        return googleClientLoadPromise;\n    },\n\n    /**\n     * Executes a request for a list of all YouTube broadcasts associated with\n     * user currently signed in to the Google API Client Library.\n     *\n     * @returns {Promise}\n     */\n    requestAvailableYouTubeBroadcasts() {\n        return this.get()\n            .then(api => api.client.request(API_URL_LIVE_BROADCASTS));\n    },\n\n    /**\n     * Executes a request to get all live streams associated with a broadcast\n     * in YouTube.\n     *\n     * @param {string} boundStreamID - The bound stream ID associated with a\n     * broadcast in YouTube.\n     * @returns {Promise}\n     */\n    requestLiveStreamsForYouTubeBroadcast(boundStreamID) {\n        return this.get()\n            .then(api => api.client.request(\n                `${API_URL_BROADCAST_STREAMS}${boundStreamID}`));\n    },\n\n    /**\n     * Prompts the participant to sign in to the Google API Client Library, even\n     * if already signed in.\n     *\n     * @returns {Promise}\n     */\n    showAccountSelection() {\n        return this.get()\n            .then(api => api.auth2.getAuthInstance().signIn());\n    },\n\n    /**\n     * Prompts the participant to sign in to the Google API Client Library, if\n     * not already signed in.\n     *\n     * @returns {Promise}\n     */\n    signInIfNotSignedIn() {\n        return this.get()\n            .then(() => this.isSignedIn())\n            .then(isSignedIn => {\n                if (!isSignedIn) {\n                    return this.showAccountSelection();\n                }\n            });\n    },\n\n    /**\n     * Sign out from the Google API Client Library.\n     *\n     * @returns {Promise}\n     */\n    signOut() {\n        return this.get()\n            .then(api =>\n                api.auth2\n                && api.auth2.getAuthInstance\n                && api.auth2.getAuthInstance()\n                && api.auth2.getAuthInstance().signOut());\n    },\n\n    /**\n     * Parses the google calendar entries to a known format.\n     *\n     * @param {Object} entry - The google calendar entry.\n     * @returns {{\n     *  calendarId: string,\n     *  description: string,\n     *  endDate: string,\n     *  id: string,\n     *  location: string,\n     *  startDate: string,\n     *  title: string}}\n     * @private\n     */\n    _convertCalendarEntry(entry) {\n        return {\n            calendarId: entry.calendarId,\n            description: entry.description,\n            endDate: entry.end.dateTime,\n            id: entry.id,\n            location: entry.location,\n            startDate: entry.start.dateTime,\n            title: entry.summary,\n            url: this._getConferenceDataVideoUri(entry.conferenceData)\n        };\n    },\n\n    /**\n     * Checks conference data for jitsi conference solution and returns\n     * its video url.\n     *\n     * @param {Object} conferenceData - The conference data of the event.\n     * @returns {string|undefined} Returns the found video uri or undefined.\n     */\n    _getConferenceDataVideoUri(conferenceData = {}) {\n        try {\n            // check conference data coming from calendar addons\n            if (conferenceData.parameters.addOnParameters.parameters\n                    .conferenceSolutionType === 'jitsi') {\n                const videoEntry = conferenceData.entryPoints.find(\n                    e => e.entryPointType === 'video');\n\n                if (videoEntry) {\n                    return videoEntry.uri;\n                }\n            }\n        } catch (error) {\n            // we don't care about undefined fields\n        }\n    },\n\n    /**\n     * Retrieves calendar entries from all available calendars.\n     *\n     * @param {number} fetchStartDays - The number of days to go back\n     * when fetching.\n     * @param {number} fetchEndDays - The number of days to fetch.\n     * @returns {Promise<CalendarEntry>}\n     * @private\n     */\n    _getCalendarEntries(fetchStartDays, fetchEndDays) {\n        return this.get()\n            .then(() => this.isSignedIn())\n            .then(isSignedIn => {\n                if (!isSignedIn) {\n                    return null;\n                }\n\n                // user can edit the events, so we want only those that\n                // can be edited\n                return this._getGoogleApiClient()\n                    .client.calendar.calendarList.list();\n            })\n            .then(calendarList => {\n\n                // no result, maybe not signed in\n                if (!calendarList) {\n                    return Promise.resolve();\n                }\n\n                const calendarIds\n                    = calendarList.result.items.map(en => {\n                        return {\n                            id: en.id,\n                            accessRole: en.accessRole\n                        };\n                    });\n                const promises = calendarIds.map(({ id, accessRole }) => {\n                    const startDate = new Date();\n                    const endDate = new Date();\n\n                    startDate.setDate(startDate.getDate() + fetchStartDays);\n                    endDate.setDate(endDate.getDate() + fetchEndDays);\n\n                    // retrieve the events and adds to the result the calendarId\n                    return this._getGoogleApiClient()\n                        .client.calendar.events.list({\n                            'calendarId': id,\n                            'timeMin': startDate.toISOString(),\n                            'timeMax': endDate.toISOString(),\n                            'showDeleted': false,\n                            'singleEvents': true,\n                            'orderBy': 'startTime'\n                        })\n                        .then(result => result.result.items\n                            .map(item => {\n                                const resultItem = { ...item };\n\n                                // add the calendarId only for the events\n                                // we can edit\n                                if (accessRole === 'writer'\n                                    || accessRole === 'owner') {\n                                    resultItem.calendarId = id;\n                                }\n\n                                return resultItem;\n                            }));\n                });\n\n                return Promise.all(promises)\n                    .then(results => [].concat(...results))\n                    .then(entries =>\n                        entries.map(e => this._convertCalendarEntry(e)));\n            });\n    },\n\n    /* eslint-disable max-params */\n    /**\n     * Updates the calendar event and adds a location and text.\n     *\n     * @param {string} id - The event id to update.\n     * @param {string} calendarId - The calendar id to use.\n     * @param {string} location - The location to add to the event.\n     * @param {string} text - The description text to set/append.\n     * @returns {Promise<T | never>}\n     * @private\n     */\n    _updateCalendarEntry(id, calendarId, location, text) {\n        return this.get()\n            .then(() => this.isSignedIn())\n            .then(isSignedIn => {\n                if (!isSignedIn) {\n                    return null;\n                }\n\n                return this._getGoogleApiClient()\n                    .client.calendar.events.get({\n                        'calendarId': calendarId,\n                        'eventId': id\n                    }).then(event => {\n                        let newDescription = text;\n\n                        if (event.result.description) {\n                            newDescription = `${event.result.description}\\n\\n${\n                                text}`;\n                        }\n\n                        return this._getGoogleApiClient()\n                            .client.calendar.events.patch({\n                                'calendarId': calendarId,\n                                'eventId': id,\n                                'description': newDescription,\n                                'location': location\n                            });\n                    });\n\n            });\n    },\n    /* eslint-enable max-params */\n\n    /**\n     * Returns the global Google API Client Library object. Direct use of this\n     * method is discouraged; instead use the {@link get} method.\n     *\n     * @private\n     * @returns {Object|undefined}\n     */\n    _getGoogleApiClient() {\n        return window.gapi;\n    }\n};\n\nexport default googleApi;\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { getShareInfoText } from '../invite';\n\nimport {\n    SET_GOOGLE_API_PROFILE,\n    SET_GOOGLE_API_STATE\n} from './actionTypes';\nimport { GOOGLE_API_STATES } from './constants';\nimport googleApi from './googleApi';\n\n/**\n * Retrieves the current calendar events.\n *\n * @param {number} fetchStartDays - The number of days to go back when fetching.\n * @param {number} fetchEndDays - The number of days to fetch.\n * @returns {function(Dispatch<any>): Promise<CalendarEntries>}\n */\nexport function getCalendarEntries(\n        fetchStartDays: ?number, fetchEndDays: ?number) {\n    return () =>\n        googleApi.get()\n        .then(() =>\n            googleApi._getCalendarEntries(fetchStartDays, fetchEndDays));\n}\n\n/**\n * Loads Google API.\n *\n * @returns {Function}\n */\nexport function loadGoogleAPI() {\n    return (dispatch: Dispatch<any>, getState: Function) =>\n        googleApi.get()\n        .then(() => {\n            const {\n                liveStreamingEnabled,\n                enableCalendarIntegration,\n                googleApiApplicationClientID\n            } = getState()['features/base/config'];\n\n            if (getState()['features/google-api'].googleAPIState\n                    === GOOGLE_API_STATES.NEEDS_LOADING) {\n                return googleApi.initializeClient(\n                    googleApiApplicationClientID, liveStreamingEnabled, enableCalendarIntegration);\n            }\n\n            return Promise.resolve();\n        })\n        .then(() => dispatch(setGoogleAPIState(GOOGLE_API_STATES.LOADED)))\n        .then(() => googleApi.isSignedIn())\n        .then(isSignedIn => {\n            if (isSignedIn) {\n                dispatch(setGoogleAPIState(GOOGLE_API_STATES.SIGNED_IN));\n            }\n        });\n}\n\n/**\n * Executes a request for a list of all YouTube broadcasts associated with\n * user currently signed in to the Google API Client Library.\n *\n * @returns {function(): (Promise<*>|Promise<any[] | never>)}\n */\nexport function requestAvailableYouTubeBroadcasts() {\n    return () =>\n        googleApi.requestAvailableYouTubeBroadcasts()\n        .then(response => {\n            // Takes in a list of broadcasts from the YouTube API,\n            // removes dupes, removes broadcasts that cannot get a stream key,\n            // and parses the broadcasts into flat objects.\n            const broadcasts = response.result.items;\n\n            const parsedBroadcasts = {};\n\n            for (let i = 0; i < broadcasts.length; i++) {\n                const broadcast = broadcasts[i];\n                const boundStreamID = broadcast.contentDetails.boundStreamId;\n\n                if (boundStreamID && !parsedBroadcasts[boundStreamID]) {\n                    parsedBroadcasts[boundStreamID] = {\n                        boundStreamID,\n                        id: broadcast.id,\n                        status: broadcast.status.lifeCycleStatus,\n                        title: broadcast.snippet.title\n                    };\n                }\n            }\n\n            return Object.values(parsedBroadcasts);\n        });\n}\n\n/**\n * Fetches the stream key for a YouTube broadcast and updates the internal\n * state to display the associated stream key as being entered.\n *\n * @param {string} boundStreamID - The bound stream ID associated with the\n * broadcast from which to get the stream key.\n * @returns {function(): (Promise<*>|Promise<{\n *  streamKey: (*|string),\n *  selectedBoundStreamID: *} | never>)}\n */\nexport function requestLiveStreamsForYouTubeBroadcast(boundStreamID: string) {\n    return () =>\n        googleApi.requestLiveStreamsForYouTubeBroadcast(boundStreamID)\n            .then(response => {\n                const broadcasts = response.result.items;\n                const streamName = broadcasts\n                    && broadcasts[0]\n                    && broadcasts[0].cdn.ingestionInfo.streamName;\n                const streamKey = streamName || '';\n\n                return {\n                    streamKey,\n                    selectedBoundStreamID: boundStreamID\n                };\n            });\n}\n\n/**\n * Sets the current Google API state.\n *\n * @param {number} googleAPIState - The state to be set.\n * @param {Object} googleResponse - The last response from Google.\n * @returns {{\n *     type: SET_GOOGLE_API_STATE,\n *     googleAPIState: number\n * }}\n */\nexport function setGoogleAPIState(\n        googleAPIState: number, googleResponse: ?Object) {\n    return {\n        type: SET_GOOGLE_API_STATE,\n        googleAPIState,\n        googleResponse\n    };\n}\n\n/**\n * Forces the Google web client application to prompt for a sign in, such as\n * when changing account, and will then fetch available YouTube broadcasts.\n *\n * @returns {function(): (Promise<*>|Promise<{\n *  streamKey: (*|string),\n *  selectedBoundStreamID: *} | never>)}\n */\nexport function showAccountSelection() {\n    return () =>\n        googleApi.showAccountSelection();\n}\n\n/**\n * Prompts the participant to sign in to the Google API Client Library.\n *\n * @returns {function(Dispatch<any>): Promise<string | never>}\n */\nexport function signIn() {\n    return (dispatch: Dispatch<any>) => googleApi.get()\n            .then(() => googleApi.signInIfNotSignedIn())\n            .then(() => dispatch({\n                type: SET_GOOGLE_API_STATE,\n                googleAPIState: GOOGLE_API_STATES.SIGNED_IN\n            }));\n}\n\n/**\n * Logs out the user.\n *\n * @returns {function(Dispatch<any>): Promise<string | never>}\n */\nexport function signOut() {\n    return (dispatch: Dispatch<any>) =>\n        googleApi.get()\n            .then(() => googleApi.signOut())\n            .then(() => {\n                dispatch({\n                    type: SET_GOOGLE_API_STATE,\n                    googleAPIState: GOOGLE_API_STATES.LOADED\n                });\n                dispatch({\n                    type: SET_GOOGLE_API_PROFILE,\n                    profileEmail: ''\n                });\n            });\n}\n\n/**\n * Updates the profile data that is currently used.\n *\n * @returns {function(Dispatch<any>): Promise<string | never>}\n */\nexport function updateProfile() {\n    return (dispatch: Dispatch<any>) => googleApi.get()\n        .then(() => googleApi.signInIfNotSignedIn())\n        .then(() => dispatch({\n            type: SET_GOOGLE_API_STATE,\n            googleAPIState: GOOGLE_API_STATES.SIGNED_IN\n        }))\n        .then(() => googleApi.getCurrentUserProfile())\n        .then(profile => {\n            dispatch({\n                type: SET_GOOGLE_API_PROFILE,\n                profileEmail: profile.getEmail()\n            });\n\n            return profile.getEmail();\n        });\n}\n\n/**\n * Updates the calendar event and adds a location and text.\n *\n * @param {string} id - The event id to update.\n * @param {string} calendarId - The calendar id to use.\n * @param {string} location - The location to add to the event.\n * @returns {function(Dispatch<any>): Promise<string | never>}\n */\nexport function updateCalendarEvent(\n        id: string, calendarId: string, location: string) {\n    return (dispatch: Dispatch<any>, getState: Function) =>\n        getShareInfoText(getState(), location)\n            .then(text =>\n                googleApi._updateCalendarEntry(id, calendarId, location, text));\n}\n","// @flow\n\nimport { Component } from 'react';\n\n/**\n * {@code AbstractGoogleSignInButton} component's property types.\n */\ntype Props = {\n\n    /**\n     * The callback to invoke when the button is clicked.\n     */\n    onClick: Function,\n\n    /**\n     * True if the user is signed in, so it needs to render a different label\n     * and maybe different style (for the future).\n     */\n    signedIn?: boolean,\n\n    /**\n     * Function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * Abstract class of the {@code GoogleSignInButton} to share platform\n * independent code.\n *\n * @inheritdoc\n */\nexport default class AbstractGoogleSignInButton extends Component<Props> {\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../base/i18n';\n\nimport AbstractGoogleSignInButton from './AbstractGoogleSignInButton';\n\n/**\n * A React Component showing a button to sign in with Google.\n *\n * @extends Component\n */\nclass GoogleSignInButton extends AbstractGoogleSignInButton {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <div\n                className = 'google-sign-in'\n                onClick = { this.props.onClick }>\n                <img\n                    className = 'google-logo'\n                    src = 'images/googleLogo.svg' />\n                <div className = 'google-cta'>\n                    {\n                        t(this.props.signedIn\n                            ? 'liveStreaming.signOut'\n                            : 'liveStreaming.signIn')\n                    }\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default translate(GoogleSignInButton);\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    SET_GOOGLE_API_PROFILE,\n    SET_GOOGLE_API_STATE\n} from './actionTypes';\nimport { GOOGLE_API_STATES } from './constants';\n\n/**\n * The default state is the Google API needs loading.\n *\n * @type {{googleAPIState: number}}\n */\nconst DEFAULT_STATE = {\n    googleAPIState: GOOGLE_API_STATES.NEEDS_LOADING,\n    profileEmail: ''\n};\n\n/**\n * Reduces the Redux actions of the feature features/google-api.\n */\nReducerRegistry.register('features/google-api',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case SET_GOOGLE_API_STATE:\n            return {\n                ...state,\n                googleAPIState: action.googleAPIState,\n                googleResponse: action.googleResponse\n            };\n        case SET_GOOGLE_API_PROFILE:\n            return {\n                ...state,\n                profileEmail: action.profileEmail\n            };\n        }\n\n        return state;\n    });\n","// @flow\n\nexport * from './actions';\nexport * from './components';\nexport * from './constants';\nexport { default as googleApi } from './googleApi';\n\nimport './reducer';\n","// @flow\n\nimport type { PokerState } from './types';\nimport uuid from 'uuid';\n\n/**\n * Sound\n */\nexport const CARD_TURN_SOUND_ID = 'CARD_TURN_SOUND';\n\n/**\n * Events\n */\nexport const GAME_STATE_CHANGED_EVENT = 'poker-state-changed';\nexport const REQUEST_GAME_STATE_EVENT = 'request-game-state-event';\n\nexport const OWNER_TABLE = 'table';\n\nexport const SUITS = Object.freeze({\n    club: 'club',\n    diamond: 'diamond',\n    heart: 'heart',\n    spade: 'spade'\n});\n\nexport const SYMBOLS = Object.freeze({\n    _2: '2',\n    _3: '3',\n    _4: '4',\n    _5: '5',\n    _6: '6',\n    _7: '7',\n    _8: '8',\n    _9: '9',\n    _10: '10',\n    jack: 'J',\n    queen: 'Q',\n    king: 'K',\n    ace: 'A'\n});\n\nexport const DEFAULT_STATE: PokerState = {\n    common: {\n        game: {\n            id: uuid.v4().toUpperCase(),\n            ticks: 0,\n            state: 'none',\n            startAmount: 1000,\n            dealer: null,\n            blind: {\n                small: 5,\n                big: 10\n            },\n            round: {\n                state: 'preflop',\n                currentPlayer: null,\n                deck: null,\n                pot: 0,\n                bet: 0,\n                raiseAmount: 0,\n                winners: [],\n                win: {},\n                bettingRound: {\n                    raisePlayer: null\n                }\n            }\n        },\n        table: [],\n        players: {},\n        stagePerformances: [],\n        lastModifiedBy: null\n    },\n    nick: null\n};\n","/**\n * The redux action which signals that a configuration (commonly known in Jitsi\n * Meet as config.js) will be loaded for a specific locationURL.\n *\n * {\n *     type: CONFIG_WILL_LOAD,\n *     locationURL: URL,\n *     room: string\n * }\n */\nexport const CONFIG_WILL_LOAD = 'CONFIG_WILL_LOAD';\n\n/**\n * The redux action which signals that a configuration (commonly known in Jitsi\n * Meet as config.js) could not be loaded due to a specific error.\n *\n * {\n *     type: LOAD_CONFIG_ERROR,\n *     error: Error,\n *     locationURL: URL\n * }\n */\nexport const LOAD_CONFIG_ERROR = 'LOAD_CONFIG_ERROR';\n\n/**\n * The redux action which sets the configuration represented by the feature\n * base/config. The configuration is defined and consumed by the library\n * lib-jitsi-meet but some of its properties are consumed by the application\n * jitsi-meet as well.\n *\n * {\n *     type: SET_CONFIG,\n *     config: Object\n * }\n */\nexport const SET_CONFIG = 'SET_CONFIG';\n\n/**\n * The redux action which updates the configuration represented by the feature\n * base/config. The configuration is defined and consumed by the library\n * lib-jitsi-meet but some of its properties are consumed by the application\n * jitsi-meet as well. A merge operation is performed between the existing config\n * and the passed object.\n *\n * {\n *     type: _UPDATE_CONFIG,\n *     config: Object\n * }\n */\nexport const _UPDATE_CONFIG = '_UPDATE_CONFIG';\n","/**\n * The prefix of the {@code localStorage} key into which {@link storeConfig}\n * stores and from which {@link restoreConfig} restores.\n *\n * @protected\n * @type string\n */\nexport const _CONFIG_STORE_PREFIX = 'config.js';\n","import extraConfigWhitelist from './extraConfigWhitelist';\n\n/**\n * The config keys to whitelist, the keys that can be overridden.\n * Currently we can only whitelist the first part of the properties, like\n * 'p2p.useStunTurn' and 'p2p.enabled' we whitelist all p2p options.\n * The whitelist is used only for config.js.\n *\n * @type Array\n */\nexport default [\n    '_desktopSharingSourceDevice',\n    '_peerConnStatusOutOfLastNTimeout',\n    '_peerConnStatusRtcMuteTimeout',\n    'abTesting',\n    'analytics.disabled',\n    'audioLevelsInterval',\n    'autoRecord',\n    'autoRecordToken',\n    'avgRtpStatsN',\n\n    /**\n     * The display name of the CallKit call representing the conference/meeting\n     * associated with this config.js including while the call is ongoing in the\n     * UI presented by CallKit and in the system-wide call history. The property\n     * is meant for use cases in which the room name is not desirable as a\n     * display name for CallKit purposes and the desired display name is not\n     * provided in the form of a JWT callee. As the value is associated with a\n     * conference/meeting, the value makes sense not as a deployment-wide\n     * configuration, only as a runtime configuration override/overwrite\n     * provided by, for example, Jitsi Meet SDK for iOS.\n     *\n     * @type string\n     */\n    'callDisplayName',\n    'callFlowsEnabled',\n\n    /**\n     * The handle\n     * ({@link https://developer.apple.com/documentation/callkit/cxhandle}) of\n     * the CallKit call representing the conference/meeting associated with this\n     * config.js. The property is meant for use cases in which the room URL is\n     * not desirable as the handle for CallKit purposes. As the value is\n     * associated with a conference/meeting, the value makes sense not as a\n     * deployment-wide configuration, only as a runtime configuration\n     * override/overwrite provided by, for example, Jitsi Meet SDK for iOS.\n     *\n     * @type string\n     */\n    'callHandle',\n    'callStatsConfIDNamespace',\n    'callStatsID',\n    'callStatsSecret',\n\n    /**\n     * The UUID of the CallKit call representing the conference/meeting\n     * associated with this config.js. The property is meant for use cases in\n     * which Jitsi Meet is to work with a CallKit call created outside of Jitsi\n     * Meet and to be adopted by Jitsi Meet such as, for example, an incoming\n     * and/or outgoing CallKit call created by Jitsi Meet SDK for iOS\n     * clients/consumers prior to giving control to Jitsi Meet. As the value is\n     * associated with a conference/meeting, the value makes sense not as a\n     * deployment-wide configuration, only as a runtime configuration\n     * override/overwrite provided by, for example, Jitsi Meet SDK for iOS.\n     *\n     * @type string\n     */\n    'callUUID',\n\n    'channelLastN',\n    'constraints',\n    'debug',\n    'debugAudioLevels',\n    'defaultLanguage',\n    'desktopSharingChromeDisabled',\n    'desktopSharingChromeExtId',\n    'desktopSharingChromeMinExtVersion',\n    'desktopSharingChromeSources',\n    'desktopSharingFirefoxDisabled',\n    'desktopSharingFrameRate',\n    'desktopSharingSources',\n    'disable1On1Mode',\n    'disableAEC',\n    'disableAGC',\n    'disableAP',\n    'disableAudioLevels',\n    'disableDeepLinking',\n    'disableH264',\n    'disableHPF',\n    'disableInviteFunctions',\n    'disableLocalVideoFlip',\n    'disableNS',\n    'disableRemoteControl',\n    'disableRemoteMute',\n    'disableRtx',\n    'disableSimulcast',\n    'disableSuspendVideo',\n    'disableThirdPartyRequests',\n    'displayJids',\n    'doNotStoreRoom',\n    'e2eping',\n    'enableDisplayNameInStats',\n    'enableEmailInStats',\n    'enableIceRestart',\n    'enableLayerSuspension',\n    'enableLipSync',\n    'enableRemb',\n    'enableScreenshotCapture',\n    'enableTalkWhileMuted',\n    'enableNoAudioDetection',\n    'enableNoisyMicDetection',\n    'enableTcc',\n    'etherpad_base',\n    'failICE',\n    'feedbackPercentage',\n    'fileRecordingsEnabled',\n    'firefox_fake_device',\n    'forceJVB121Ratio',\n    'gatherStats',\n    'googleApiApplicationClientID',\n    'hiddenDomain',\n    'hosts',\n    'iAmRecorder',\n    'iAmSipGateway',\n    'iceTransportPolicy',\n    'ignoreStartMuted',\n    'liveStreamingEnabled',\n    'localRecording',\n    'minParticipants',\n    'nick',\n    'openBridgeChannel',\n    'p2p',\n    'pcStatsInterval',\n    'preferH264',\n    'prejoinPageEnabled',\n    'requireDisplayName',\n    'remoteVideoMenu',\n    'resolution',\n    'startAudioMuted',\n    'startAudioOnly',\n    'startBitrate',\n    'startScreenSharing',\n    'startSilent',\n    'startVideoMuted',\n    'startWithAudioMuted',\n    'startWithVideoMuted',\n    'stereo',\n    'subject',\n    'testing',\n    'useIPv6',\n    'useNicks',\n    'useStunTurn',\n    'webrtcIceTcpDisable',\n    'webrtcIceUdpDisable'\n].concat(extraConfigWhitelist);\n","/**\n * Deploy-specific configuration whitelists\n */\nexport default [];\n","/**\n * The interface config keys to whitelist, the keys that can be overridden.\n *\n * @private\n * @type Array\n */\nexport default [\n    'ANDROID_APP_PACKAGE',\n    'APP_NAME',\n    'APP_SCHEME',\n    'AUDIO_LEVEL_PRIMARY_COLOR',\n    'AUDIO_LEVEL_SECONDARY_COLOR',\n    'AUTHENTICATION_ENABLE',\n    'AUTO_PIN_LATEST_SCREEN_SHARE',\n    'BRAND_WATERMARK_LINK',\n    'CLOSE_PAGE_GUEST_HINT',\n    'CONNECTION_INDICATOR_AUTO_HIDE_ENABLED',\n    'CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT',\n    'CONNECTION_INDICATOR_DISABLED',\n    'DEFAULT_BACKGROUND',\n    'DISABLE_PRESENCE_STATUS',\n    'DISABLE_JOIN_LEAVE_NOTIFICATIONS',\n    'DEFAULT_LOCAL_DISPLAY_NAME',\n    'DEFAULT_REMOTE_DISPLAY_NAME',\n    'DISABLE_DOMINANT_SPEAKER_INDICATOR',\n    'DISABLE_FOCUS_INDICATOR',\n    'DISABLE_PRIVATE_MESSAGES',\n    'DISABLE_RINGING',\n    'DISABLE_TRANSCRIPTION_SUBTITLES',\n    'DISABLE_VIDEO_BACKGROUND',\n    'DISPLAY_WELCOME_PAGE_CONTENT',\n    'ENABLE_FEEDBACK_ANIMATION',\n    'ENFORCE_NOTIFICATION_AUTO_DISMISS_TIMEOUT',\n    'FILM_STRIP_MAX_HEIGHT',\n    'GENERATE_ROOMNAMES_ON_WELCOME_PAGE',\n    'INDICATOR_FONT_SIZES',\n    'INITIAL_TOOLBAR_TIMEOUT',\n    'INVITATION_POWERED_BY',\n    'JITSI_WATERMARK_LINK',\n    'LANG_DETECTION',\n    'LIVE_STREAMING_HELP_LINK',\n    'LOCAL_THUMBNAIL_RATIO',\n    'MAXIMUM_ZOOMING_COEFFICIENT',\n    'MOBILE_APP_PROMO',\n    'MOBILE_DOWNLOAD_LINK_ANDROID',\n    'MOBILE_DOWNLOAD_LINK_IOS',\n    'MOBILE_DYNAMIC_LINK',\n    'NATIVE_APP_NAME',\n    'OPTIMAL_BROWSERS',\n    'PHONE_NUMBER_REGEX',\n    'POLICY_LOGO',\n    'PROVIDER_NAME',\n    'RANDOM_AVATAR_URL_PREFIX',\n    'RANDOM_AVATAR_URL_SUFFIX',\n    'RECENT_LIST_ENABLED',\n    'REMOTE_THUMBNAIL_RATIO',\n    'SETTINGS_SECTIONS',\n    'SHOW_BRAND_WATERMARK',\n    'SHOW_CHROME_EXTENSION_BANNER',\n    'SHOW_DEEP_LINKING_IMAGE',\n    'SHOW_JITSI_WATERMARK',\n    'SHOW_POWERED_BY',\n    'SHOW_WATERMARK_FOR_GUESTS',\n    'SUPPORT_URL',\n    'TILE_VIEW_MAX_COLUMNS',\n    'TOOLBAR_ALWAYS_VISIBLE',\n    'TOOLBAR_BUTTONS',\n    'TOOLBAR_TIMEOUT',\n    'UNSUPPORTED_BROWSERS',\n    'VERTICAL_FILMSTRIP',\n    'VIDEO_LAYOUT_FIT',\n    'VIDEO_QUALITY_LABEL_DISABLED',\n    'filmStripOnly'\n];\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/config');\n","// @flow\n\nimport { jitsiLocalStorage } from 'js-utils';\nimport _ from 'lodash';\n\nimport CONFIG_WHITELIST from './configWhitelist';\nimport { _CONFIG_STORE_PREFIX } from './constants';\nimport INTERFACE_CONFIG_WHITELIST from './interfaceConfigWhitelist';\nimport { parseURLParams } from '../util';\nimport logger from './logger';\n\n// XXX The function getRoomName is split out of\n// functions.js because it is bundled in both app.bundle and\n// do_external_connect, webpack 1 does not support tree shaking, and we don't\n// want all functions to be bundled in do_external_connect.\nexport { default as getRoomName } from './getRoomName';\n\n/**\n * Create a \"fake\" configuration object for the given base URL. This is used in case the config\n * couldn't be loaded in the welcome page, so at least we have something to try with.\n *\n * @param {string} baseURL - URL of the deployment for which we want the fake config.\n * @returns {Object}\n */\nexport function createFakeConfig(baseURL: string) {\n    const url = new URL(baseURL);\n\n    return {\n        hosts: {\n            domain: url.hostname,\n            muc: `conference.${url.hostname}`\n        },\n        bosh: `${baseURL}http-bind`,\n        clientNode: 'https://jitsi.org/jitsi-meet',\n        p2p: {\n            enabled: true\n        }\n    };\n}\n\n/* eslint-disable max-params, no-shadow */\n\n/**\n * Overrides JSON properties in {@code config} and\n * {@code interfaceConfig} Objects with the values from {@code newConfig}.\n * Overrides only the whitelisted keys.\n *\n * @param {Object} config - The config Object in which we'll be overriding\n * properties.\n * @param {Object} interfaceConfig - The interfaceConfig Object in which we'll\n * be overriding properties.\n * @param {Object} loggingConfig - The loggingConfig Object in which we'll be\n * overriding properties.\n * @param {Object} json - Object containing configuration properties.\n * Destination object is selected based on root property name:\n * {\n *     config: {\n *         // config.js properties here\n *     },\n *     interfaceConfig: {\n *         // interface_config.js properties here\n *     },\n *     loggingConfig: {\n *         // logging_config.js properties here\n *     }\n * }.\n * @returns {void}\n */\nexport function overrideConfigJSON(\n        config: ?Object, interfaceConfig: ?Object, loggingConfig: ?Object,\n        json: Object) {\n    for (const configName of Object.keys(json)) {\n        let configObj;\n\n        if (configName === 'config') {\n            configObj = config;\n        } else if (configName === 'interfaceConfig') {\n            configObj = interfaceConfig;\n        } else if (configName === 'loggingConfig') {\n            configObj = loggingConfig;\n        }\n        if (configObj) {\n            const configJSON\n                = _getWhitelistedJSON(configName, json[configName]);\n\n            if (!_.isEmpty(configJSON)) {\n                logger.info(\n                    `Extending ${configName} with: ${\n                        JSON.stringify(configJSON)}`);\n\n                // eslint-disable-next-line arrow-body-style\n                _.mergeWith(configObj, configJSON, (oldValue, newValue) => {\n\n                    // XXX We don't want to merge the arrays, we want to\n                    // overwrite them.\n                    return Array.isArray(oldValue) ? newValue : undefined;\n                });\n            }\n        }\n    }\n}\n\n/* eslint-enable max-params, no-shadow */\n\n/**\n * Apply whitelist filtering for configs with whitelists, skips this for others\n * configs (loggingConfig).\n * Only extracts overridden values for keys we allow to be overridden.\n *\n * @param {string} configName - The config name, one of config,\n * interfaceConfig, loggingConfig.\n * @param {Object} configJSON - The object with keys and values to override.\n * @private\n * @returns {Object} - The result object only with the keys\n * that are whitelisted.\n */\nfunction _getWhitelistedJSON(configName, configJSON) {\n    if (configName === 'interfaceConfig') {\n        return _.pick(configJSON, INTERFACE_CONFIG_WHITELIST);\n    } else if (configName === 'config') {\n        return _.pick(configJSON, CONFIG_WHITELIST);\n    }\n\n    return configJSON;\n}\n\n/**\n * Restores a Jitsi Meet config.js from {@code localStorage} if it was\n * previously downloaded from a specific {@code baseURL} and stored with\n * {@link storeConfig}.\n *\n * @param {string} baseURL - The base URL from which the config.js was\n * previously downloaded and stored with {@code storeConfig}.\n * @returns {?Object} The Jitsi Meet config.js which was previously downloaded\n * from {@code baseURL} and stored with {@code storeConfig} if it was restored;\n * otherwise, {@code undefined}.\n */\nexport function restoreConfig(baseURL: string): ?Object {\n    const key = `${_CONFIG_STORE_PREFIX}/${baseURL}`;\n    const config = jitsiLocalStorage.getItem(key);\n\n    if (config) {\n        try {\n            return JSON.parse(config) || undefined;\n        } catch (e) {\n            // Somehow incorrect data ended up in the storage. Clean it up.\n            jitsiLocalStorage.removeItem(key);\n        }\n    }\n\n    return undefined;\n}\n\n/* eslint-disable max-params */\n\n/**\n * Inspects the hash part of the location URI and overrides values specified\n * there in the corresponding config objects given as the arguments. The syntax\n * is: {@code https://server.com/room#config.debug=true\n * &interfaceConfig.showButton=false&loggingConfig.something=1}.\n *\n * In the hash part each parameter will be parsed to JSON and then the root\n * object will be matched with the corresponding config object given as the\n * argument to this function.\n *\n * @param {Object} config - This is the general config.\n * @param {Object} interfaceConfig - This is the interface config.\n * @param {Object} loggingConfig - The logging config.\n * @param {URI} location - The new location to which the app is navigating to.\n * @returns {void}\n */\nexport function setConfigFromURLParams(\n        config: ?Object,\n        interfaceConfig: ?Object,\n        loggingConfig: ?Object,\n        location: Object) {\n    const params = parseURLParams(location);\n    const json = {};\n\n    // At this point we have:\n    // params = {\n    //     \"config.disableAudioLevels\": false,\n    //     \"config.channelLastN\": -1,\n    //     \"interfaceConfig.APP_NAME\": \"Jitsi Meet\"\n    // }\n    // We want to have:\n    // json = {\n    //     config: {\n    //         \"disableAudioLevels\": false,\n    //         \"channelLastN\": -1\n    //     },\n    //     interfaceConfig: {\n    //         \"APP_NAME\": \"Jitsi Meet\"\n    //     }\n    // }\n    config && (json.config = {});\n    interfaceConfig && (json.interfaceConfig = {});\n    loggingConfig && (json.loggingConfig = {});\n\n    for (const param of Object.keys(params)) {\n        let base = json;\n        const names = param.split('.');\n        const last = names.pop();\n\n        for (const name of names) {\n            base = base[name] = base[name] || {};\n        }\n\n        base[last] = params[param];\n    }\n\n    overrideConfigJSON(config, interfaceConfig, loggingConfig, json);\n}\n\n/* eslint-enable max-params */\n","// @flow\n\nimport { jitsiLocalStorage } from 'js-utils';\nimport type { Dispatch } from 'redux';\n\nimport { addKnownDomains } from '../known-domains';\nimport { parseURIString } from '../util';\n\nimport { CONFIG_WILL_LOAD, LOAD_CONFIG_ERROR, SET_CONFIG } from './actionTypes';\nimport { _CONFIG_STORE_PREFIX } from './constants';\nimport { setConfigFromURLParams } from './functions';\n\n/**\n * Signals that the configuration (commonly known in Jitsi Meet as config.js)\n * for a specific locationURL will be loaded now.\n *\n * @param {URL} locationURL - The URL of the location which necessitated the\n * loading of a configuration.\n * @param {string} room - The name of the room (conference) for which we're loading the config for.\n * @returns {{\n *     type: CONFIG_WILL_LOAD,\n *     locationURL: URL,\n *     room: string\n * }}\n */\nexport function configWillLoad(locationURL: URL, room: string) {\n    return {\n        type: CONFIG_WILL_LOAD,\n        locationURL,\n        room\n    };\n}\n\n/**\n * Signals that a configuration (commonly known in Jitsi Meet as config.js)\n * could not be loaded due to a specific error.\n *\n * @param {Error} error - The {@code Error} which prevented the successful\n * loading of a configuration.\n * @param {URL} locationURL - The URL of the location which necessitated the\n * loading of a configuration.\n * @returns {{\n *     type: LOAD_CONFIG_ERROR,\n *     error: Error,\n *     locationURL: URL\n * }}\n */\nexport function loadConfigError(error: Error, locationURL: URL) {\n    return {\n        type: LOAD_CONFIG_ERROR,\n        error,\n        locationURL\n    };\n}\n\n/**\n * Sets the configuration represented by the feature base/config. The\n * configuration is defined and consumed by the library lib-jitsi-meet but some\n * of its properties are consumed by the application jitsi-meet as well.\n *\n * @param {Object} config - The configuration to be represented by the feature\n * base/config.\n * @returns {Function}\n */\nexport function setConfig(config: Object = {}) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { locationURL } = getState()['features/base/connection'];\n\n        // Now that the loading of the config was successful override the values\n        // with the parameters passed in the hash part of the location URI.\n        // TODO We're still in the middle ground between old Web with config,\n        // interfaceConfig, and loggingConfig used via global variables and new\n        // Web and mobile reading the respective values from the redux store.\n        // On React Native there's no interfaceConfig at all yet and\n        // loggingConfig is not loaded but there's a default value in the redux\n        // store.\n        // Only the config will be overridden on React Native, as the other\n        // globals will be undefined here. It's intentional - we do not care to\n        // override those configs yet.\n        locationURL\n            && setConfigFromURLParams(\n\n                // On Web the config also comes from the window.config global,\n                // but it is resolved in the loadConfig procedure.\n                config,\n                window.interfaceConfig,\n                window.loggingConfig,\n                locationURL);\n\n        dispatch({\n            type: SET_CONFIG,\n            config\n        });\n    };\n}\n\n/**\n * Stores a specific Jitsi Meet config.js object into {@code localStorage}.\n *\n * @param {string} baseURL - The base URL from which the config.js was\n * downloaded.\n * @param {Object} config - The Jitsi Meet config.js to store.\n * @returns {Function}\n */\nexport function storeConfig(baseURL: string, config: Object) {\n    return (dispatch: Dispatch<any>) => {\n        // Try to store the configuration in localStorage. If the deployment\n        // specified 'getroom' as a function, for example, it does not make\n        // sense to and it will not be stored.\n        let b = false;\n\n        try {\n            if (typeof window.config === 'undefined' || window.config !== config) {\n                jitsiLocalStorage.setItem(`${_CONFIG_STORE_PREFIX}/${baseURL}`, JSON.stringify(config));\n                b = true;\n            }\n        } catch (e) {\n            // Ignore the error because the caching is optional.\n        }\n\n        // If base/config knows a domain, then the app knows it.\n        if (b) {\n            try {\n                dispatch(addKnownDomains(parseURIString(baseURL).host));\n            } catch (e) {\n                // Ignore the error because the fiddling with \"known domains\" is\n                // a side effect here.\n            }\n        }\n\n        return b;\n    };\n}\n","// @flow\n\nimport { jitsiLocalStorage } from 'js-utils';\n\nimport { APP_WILL_MOUNT } from '../app';\nimport { addKnownDomains } from '../known-domains';\nimport { MiddlewareRegistry } from '../redux';\nimport { parseURIString } from '../util';\n\nimport { _UPDATE_CONFIG, SET_CONFIG } from './actionTypes';\nimport { _CONFIG_STORE_PREFIX } from './constants';\n\n/**\n * The middleware of the feature {@code base/config}.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        return _appWillMount(store, next, action);\n\n    case SET_CONFIG:\n        return _setConfig(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature {@code base/config} that the {@link APP_WILL_MOUNT}\n * redux action is being {@code dispatch}ed in a specific redux store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} in the specified {@code store}.\n * @param {Action} action - The redux action which is being {@code dispatch}ed\n * in the specified {@code store}.\n * @private\n * @returns {*} The return value of {@code next(action)}.\n */\nfunction _appWillMount(store, next, action) {\n    const result = next(action);\n\n    // It's an opportune time to transfer the feature base/config's knowledge\n    // about \"known domains\" (which is local to the feature) to the feature\n    // base/known-domains (which is global to the app).\n    //\n    // XXX Since the feature base/config predates the feature calendar-sync and,\n    // consequently, the feature known-domains, it's possible for the feature\n    // base/config to know of domains which the feature known-domains is yet to\n    // discover.\n\n    const prefix = `${_CONFIG_STORE_PREFIX}/`;\n    const knownDomains = [];\n\n    for (let i = 0; /* localStorage.key(i) */; ++i) {\n        const key = jitsiLocalStorage.key(i);\n\n        if (key) {\n            let baseURL;\n\n            if (key.startsWith(prefix)\n                    && (baseURL = key.substring(prefix.length))) {\n                const uri = parseURIString(baseURL);\n                let host;\n\n                uri && (host = uri.host) && knownDomains.push(host);\n            }\n        } else {\n            break;\n        }\n    }\n    knownDomains.length && store.dispatch(addKnownDomains(knownDomains));\n\n    return result;\n}\n\n/**\n * Notifies the feature {@code base/config} that the {@link SET_CONFIG} redux\n * action is being {@code dispatch}ed in a specific redux store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} in the specified {@code store}.\n * @param {Action} action - The redux action which is being {@code dispatch}ed\n * in the specified {@code store}.\n * @private\n * @returns {*} The return value of {@code next(action)}.\n */\nfunction _setConfig({ dispatch, getState }, next, action) {\n    // The reducer is doing some alterations to the config passed in the action,\n    // so make sure it's the final state by waiting for the action to be\n    // reduced.\n    const result = next(action);\n    const state = getState();\n\n    // Update the config with user defined settings.\n    const settings = state['features/base/settings'];\n    const config = {};\n\n    if (typeof settings.disableP2P !== 'undefined') {\n        config.p2p = { enabled: !settings.disableP2P };\n    }\n\n    dispatch({\n        type: _UPDATE_CONFIG,\n        config\n    });\n\n    // FIXME On Web we rely on the global 'config' variable which gets altered\n    // multiple times, before it makes it to the reducer. At some point it may\n    // not be the global variable which is being modified anymore due to\n    // different merge methods being used along the way. The global variable\n    // must be synchronized with the final state resolved by the reducer.\n    if (typeof window.config !== 'undefined') {\n        window.config = state['features/base/config'];\n    }\n\n    return result;\n}\n","// @flow\n\nimport _ from 'lodash';\n\nimport { equals, ReducerRegistry, set } from '../redux';\n\nimport { _UPDATE_CONFIG, CONFIG_WILL_LOAD, LOAD_CONFIG_ERROR, SET_CONFIG } from './actionTypes';\nimport { _cleanupConfig } from './functions';\n\n/**\n * The initial state of the feature base/config when executing in a\n * non-React Native environment. The mandatory configuration to be passed to\n * JitsiMeetJS#init(). The app will download config.js from the Jitsi Meet\n * deployment and take its values into account but the values bellow will be\n * enforced (because they are essential to the correct execution of the\n * application).\n *\n * @type {Object}\n */\nconst INITIAL_NON_RN_STATE = {\n};\n\n/**\n * The initial state of the feature base/config when executing in a React Native\n * environment. The mandatory configuration to be passed to JitsiMeetJS#init().\n * The app will download config.js from the Jitsi Meet deployment and take its\n * values into account but the values bellow will be enforced (because they are\n * essential to the correct execution of the application).\n *\n * @type {Object}\n */\nconst INITIAL_RN_STATE = {\n    analytics: {},\n\n    // FIXME The support for audio levels in lib-jitsi-meet polls the statistics\n    // of WebRTC at a short interval multiple times a second. Unfortunately,\n    // React Native is slow to fetch these statistics from the native WebRTC\n    // API, through the React Native bridge and eventually to JavaScript.\n    // Because the audio levels are of no interest to the mobile app, it is\n    // fastest to merely disable them.\n    disableAudioLevels: true,\n\n    p2p: {\n        disableH264: false,\n        preferH264: true\n    },\n\n    remoteVideoMenu: {}\n};\n\nReducerRegistry.register('features/base/config', (state = _getInitialState(), action) => {\n    switch (action.type) {\n    case _UPDATE_CONFIG:\n        return _updateConfig(state, action);\n\n    case CONFIG_WILL_LOAD:\n        return {\n            error: undefined,\n\n            /**\n                * The URL of the location associated with/configured by this\n                * configuration.\n                *\n                * @type URL\n                */\n            locationURL: action.locationURL\n        };\n\n    case LOAD_CONFIG_ERROR:\n        // XXX LOAD_CONFIG_ERROR is one of the settlement execution paths of\n        // the asynchronous \"loadConfig procedure/process\" started with\n        // CONFIG_WILL_LOAD. Due to the asynchronous nature of it, whoever\n        // is settling the process needs to provide proof that they have\n        // started it and that the iteration of the process being completed\n        // now is still of interest to the app.\n        if (state.locationURL === action.locationURL) {\n            return {\n                /**\n                    * The {@link Error} which prevented the loading of the\n                    * configuration of the associated {@code locationURL}.\n                    *\n                    * @type Error\n                    */\n                error: action.error\n            };\n        }\n        break;\n\n    case SET_CONFIG:\n        return _setConfig(state, action);\n    }\n\n    return state;\n});\n\n/**\n * Gets the initial state of the feature base/config. The mandatory\n * configuration to be passed to JitsiMeetJS#init(). The app will download\n * config.js from the Jitsi Meet deployment and take its values into account but\n * the values bellow will be enforced (because they are essential to the correct\n * execution of the application).\n *\n * @returns {Object}\n */\nfunction _getInitialState() {\n    return (\n        navigator.product === 'ReactNative'\n            ? INITIAL_RN_STATE\n            : INITIAL_NON_RN_STATE);\n}\n\n/**\n * Reduces a specific Redux action SET_CONFIG of the feature\n * base/lib-jitsi-meet.\n *\n * @param {Object} state - The Redux state of the feature base/config.\n * @param {Action} action - The Redux action SET_CONFIG to reduce.\n * @private\n * @returns {Object} The new state after the reduction of the specified action.\n */\nfunction _setConfig(state, { config }) {\n    // The mobile app bundles jitsi-meet and lib-jitsi-meet at build time and\n    // does not download them at runtime from the deployment on which it will\n    // join a conference. The downloading is planned for implementation in the\n    // future (later rather than sooner) but is not implemented yet at the time\n    // of this writing and, consequently, we must provide legacy support in the\n    // meantime.\n\n    // eslint-disable-next-line no-param-reassign\n    config = _translateLegacyConfig(config);\n\n    const newState = _.merge(\n        {},\n        config,\n        { error: undefined },\n\n        // The config of _getInitialState() is meant to override the config\n        // downloaded from the Jitsi Meet deployment because the former contains\n        // values that are mandatory.\n        _getInitialState()\n    );\n\n    _cleanupConfig(newState);\n\n    return equals(state, newState) ? state : newState;\n}\n\n/**\n * Constructs a new config {@code Object}, if necessary, out of a specific\n * config {@code Object} which is in the latest format supported by jitsi-meet.\n * Such a translation from an old config format to a new/the latest config\n * format is necessary because the mobile app bundles jitsi-meet and\n * lib-jitsi-meet at build time and does not download them at runtime from the\n * deployment on which it will join a conference.\n *\n * @param {Object} oldValue - The config {@code Object} which may or may not be\n * in the latest form supported by jitsi-meet and from which a new config\n * {@code Object} is to be constructed if necessary.\n * @returns {Object} A config {@code Object} which is in the latest format\n * supported by jitsi-meet.\n */\nfunction _translateLegacyConfig(oldValue: Object) {\n    let newValue = oldValue;\n\n    const oldConfigToNewConfig = {\n        analytics: [\n            [ 'analyticsScriptUrls', 'scriptURLs' ],\n            [ 'googleAnalyticsTrackingId', 'googleAnalyticsTrackingId' ]\n        ]\n    };\n\n    // Translate the old config properties into the new config properties.\n    Object.keys(oldConfigToNewConfig).forEach(section => {\n        if (typeof oldValue[section] !== 'object') {\n            newValue = set(newValue, section, {});\n        }\n\n        for (const [ oldKey, newKey ] of oldConfigToNewConfig[section]) {\n            if (oldKey in newValue && !(newKey in newValue[section])) {\n                const v = newValue[oldKey];\n\n                // Do not modify oldValue.\n                if (newValue === oldValue) {\n                    newValue = {\n                        ...newValue\n                    };\n                }\n                delete newValue[oldKey];\n\n                // Do not modify the section because it may be from oldValue\n                // i.e. do not modify oldValue.\n                newValue[section] = {\n                    ...newValue[section],\n                    [newKey]: v\n                };\n            }\n        }\n    });\n\n    return newValue;\n}\n\n/**\n * Updates the stored configuration with the given extra options.\n *\n * @param {Object} state - The Redux state of the feature base/config.\n * @param {Action} action - The Redux action to reduce.\n * @private\n * @returns {Object} The new state after the reduction of the specified action.\n */\nfunction _updateConfig(state, { config }) {\n    const newState = _.merge({}, state, config);\n\n    _cleanupConfig(newState);\n\n    return equals(state, newState) ? state : newState;\n}\n","export * from './actions';\nexport * from './actionTypes';\nexport { default as CONFIG_WHITELIST } from './configWhitelist';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","/**\n * The application's default properties related to the CSS box model such as\n * margins, borders, padding.\n */\nexport const BoxModel = {\n    /**\n     * The application's default margin when non-zero margin is necessary.\n     */\n    margin: 10,\n\n    /**\n     * The application's default padding when non-zero padding is necessary.\n     */\n    padding: 10\n};\n","/**\n * The application's definition of the default color black.\n */\nconst BLACK = '#111111';\n\n/**\n * The application's color palette.\n */\nexport const ColorPalette = {\n    /**\n     * The application's background color.\n     */\n    appBackground: BLACK,\n\n    /**\n     * The application's definition of the default color black. Generally,\n     * expected to be kept in sync with the application's background color for\n     * the sake of consistency.\n     */\n    black: BLACK,\n    blackBlue: 'rgb(0, 3, 6)',\n    blue: '#17A0DB',\n    blueHighlight: '#1081b2',\n    buttonUnderlay: '#495258',\n    darkGrey: '#555555',\n    green: '#40b183',\n    lightGrey: '#AAAAAA',\n    overflowMenuItemUnderlay: '#EEEEEE',\n    red: '#D00000',\n    transparent: 'rgba(0, 0, 0, 0)',\n    warning: 'rgb(215, 121, 118)',\n    white: '#FFFFFF',\n\n    /**\n     * These are colors from the atlaskit to be used on mobile, when needed.\n     *\n     * FIXME: Maybe a better solution would be good, or a native packaging of\n     * the respective atlaskit components.\n     */\n    G400: '#00875A', // Slime\n    N500: '#42526E', // McFanning\n    R400: '#DE350B', // Red dirt\n    Y200: '#FFC400' // Pub mix\n};\n","/* @flow */\nimport Platform from '../react/Platform';\n\nimport { ColorPalette } from './components';\n\ndeclare type StyleSheet = Object;\nexport type StyleType = StyleSheet | Array<StyleSheet>;\n\n/**\n * RegExp pattern for long HEX color format.\n */\nconst HEX_LONG_COLOR_FORMAT\n    = /^#([0-9A-F]{2,2})([0-9A-F]{2,2})([0-9A-F]{2,2})$/i;\n\n/**\n * RegExp pattern for short HEX color format.\n */\nconst HEX_SHORT_COLOR_FORMAT\n    = /^#([0-9A-F]{1,1})([0-9A-F]{1,1})([0-9A-F]{1,1})$/i;\n\n/**\n * RegExp pattern for RGB color format.\n */\nconst RGB_COLOR_FORMAT = /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/i;\n\n/**\n * RegExp pattern for RGBA color format.\n */\nconst RGBA_COLOR_FORMAT\n    = /^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*([0-9.]+)\\)$/i;\n\n/**\n * The list of the well-known style properties which may not be numbers on Web\n * but must be numbers on React Native.\n *\n * @private\n */\nconst _WELL_KNOWN_NUMBER_PROPERTIES = [ 'height', 'width' ];\n\n/**\n * Function to convert complex StyleType styles into a single flat object,\n * so then they can be deconstructed for further processing.\n *\n * @param {Styletype} st - The complex style type.\n * @returns {Object}\n */\nexport function styleTypeToObject(st: StyleType): Object {\n    if (!st) {\n        return {};\n    }\n\n    if (Array.isArray(st)) {\n        const flatStyle = {};\n\n        for (const styleElement of st) {\n            Object.assign(flatStyle, styleTypeToObject(styleElement));\n        }\n\n        return flatStyle;\n    }\n\n    return st;\n}\n\n/**\n * Combines the given 2 styles into a single one.\n *\n * @param {StyleType} a - An object or array of styles.\n * @param {StyleType} b - An object or array of styles.\n * @private\n * @returns {StyleType} - The merged styles.\n */\nexport function combineStyles(a: StyleType, b: StyleType): StyleType {\n    const result: Array<StyleSheet> = [];\n\n    if (a) {\n        if (Array.isArray(a)) {\n            result.push(...a);\n        } else {\n            result.push(a);\n        }\n    }\n\n    if (b) {\n        if (Array.isArray(b)) {\n            result.push(...b);\n        } else {\n            result.push(b);\n        }\n    }\n\n    return result;\n}\n\n/**\n * Create a style sheet using the provided style definitions.\n *\n * @param {StyleSheet} styles - A dictionary of named style definitions.\n * @param {StyleSheet} [overrides={}] - Optional set of additional (often\n * platform-dependent/specific) style definitions that will override the base\n * (often platform-independent) styles.\n * @returns {StyleSheet}\n */\nexport function createStyleSheet(\n        styles: StyleSheet, overrides: StyleSheet = {}): StyleSheet {\n    const combinedStyles = {};\n\n    for (const k of Object.keys(styles)) {\n        combinedStyles[k]\n            = _shimStyles({\n                ...styles[k],\n                ...overrides[k]\n            });\n    }\n\n    return combinedStyles;\n}\n\n/**\n * Works around a bug in react-native or react-native-webrtc on Android which\n * causes Views overlaying RTCView to be clipped. Even though we (may) display\n * multiple RTCViews, it is enough to apply the fix only to a View with a\n * bounding rectangle containing all RTCviews and their overlaying Views.\n *\n * @param {StyleSheet} styles - An object which represents a stylesheet.\n * @public\n * @returns {StyleSheet}\n */\nexport function fixAndroidViewClipping<T: StyleSheet>(styles: T): T {\n    if (Platform.OS === 'android') {\n        styles.borderColor = ColorPalette.appBackground;\n        styles.borderWidth = 1;\n    }\n\n    return styles;\n}\n\n/**\n * Returns an rgba format of the provided color if it's in hex or rgb format.\n *\n * NOTE: The function will return the same color if it's not in one of those\n * two formats (e.g. 'white').\n *\n * @param {string} color - The string representation of the color in rgb or hex\n * format.\n * @param {number} alpha - The alpha value to apply.\n * @returns {string}\n */\nexport function getRGBAFormat(color: string, alpha: number): string {\n    let match = color.match(HEX_LONG_COLOR_FORMAT);\n\n    if (match) {\n        return `#${match[1]}${match[2]}${match[3]}${_getAlphaInHex(alpha)}`;\n    }\n\n    match = color.match(HEX_SHORT_COLOR_FORMAT);\n    if (match) {\n        return `#${match[1]}${match[1]}${match[2]}${match[2]}${match[3]}${\n            match[3]}${_getAlphaInHex(alpha)}`;\n    }\n\n    match = color.match(RGB_COLOR_FORMAT);\n    if (match) {\n        return `rgba(${match[1]}, ${match[2]}, ${match[3]}, ${alpha})`;\n    }\n\n    return color;\n}\n\n/**\n * Decides if a color is light or dark based on the ITU-R BT.709 and W3C\n * recommendations.\n *\n * NOTE: Please see https://www.w3.org/TR/WCAG20/#relativeluminancedef.\n *\n * @param {string} color - The color in rgb, rgba or hex format.\n * @returns {boolean}\n */\nexport function isDarkColor(color: string): boolean {\n    const rgb = _getRGBObjectFormat(color);\n\n    return ((_getColorLuminance(rgb.r) * 0.2126)\n    + (_getColorLuminance(rgb.g) * 0.7152)\n    + (_getColorLuminance(rgb.b) * 0.0722)) <= 0.179;\n}\n\n/**\n * Converts an [0..1] alpha value into HEX.\n *\n * @param {number} alpha - The alpha value to convert.\n * @returns {string}\n */\nfunction _getAlphaInHex(alpha: number): string {\n    return Number(Math.round(255 * alpha)).toString(16)\n        .padStart(2, '0');\n}\n\n/**\n * Calculated the color luminance component for an individual color channel.\n *\n * NOTE: Please see https://www.w3.org/TR/WCAG20/#relativeluminancedef.\n *\n * @param {number} c - The color which we need the individual luminance\n * for.\n * @returns {number}\n */\nfunction _getColorLuminance(c: number): number {\n    return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n}\n\n/**\n * Parses a color string into an object containing the RGB values as numbers.\n *\n * NOTE: Object properties are not alpha-sorted for sanity.\n *\n * @param {string} color - The color to convert.\n * @returns {{\n *     r: number,\n *     g: number,\n *     b: number\n * }}\n */\nfunction _getRGBObjectFormat(color: string): {r: number, g: number, b: number} {\n    let match = color.match(HEX_LONG_COLOR_FORMAT);\n\n    if (match) {\n        return {\n            r: parseInt(match[1], 16) / 255.0,\n            g: parseInt(match[2], 16) / 255.0,\n            b: parseInt(match[3], 16) / 255.0\n        };\n    }\n\n    match = color.match(HEX_SHORT_COLOR_FORMAT);\n    if (match) {\n        return {\n            r: parseInt(`${match[1]}${match[1]}`, 16) / 255.0,\n            g: parseInt(`${match[2]}${match[2]}`, 16) / 255.0,\n            b: parseInt(`${match[3]}${match[3]}`, 16) / 255.0\n        };\n    }\n\n    match = color.match(RGB_COLOR_FORMAT) || color.match(RGBA_COLOR_FORMAT);\n    if (match) {\n        return {\n            r: parseInt(match[1], 10) / 255.0,\n            g: parseInt(match[2], 10) / 255.0,\n            b: parseInt(match[3], 10) / 255.0\n        };\n    }\n\n    return {\n        r: 0,\n        g: 0,\n        b: 0\n    };\n}\n\n/**\n * Shims style properties to work correctly on native. Allows us to minimize the\n * number of style declarations that need to be set or overridden for specific\n * platforms.\n *\n * @param {StyleSheet} styles - An object which represents a stylesheet.\n * @private\n * @returns {StyleSheet}\n */\nfunction _shimStyles<T: StyleSheet>(styles: T): T {\n    // Certain style properties may not be numbers on Web but must be numbers on\n    // React Native. For example, height and width may be expressed in percent\n    // on Web but React Native will not understand them and we will get errors\n    // (at least during development). Convert such well-known properties to\n    // numbers if possible; otherwise, remove them to avoid runtime errors.\n    for (const k of _WELL_KNOWN_NUMBER_PROPERTIES) {\n        const v = styles[k];\n        const typeofV = typeof v;\n\n        if (typeofV !== 'undefined' && typeofV !== 'number') {\n            const numberV = Number(v);\n\n            if (Number.isNaN(numberV)) {\n                delete styles[k];\n            } else {\n                styles[k] = numberV;\n            }\n        }\n    }\n\n    return styles;\n}\n","// @flow\n\nimport { type StyleType } from './functions.any';\n\nexport * from './functions.any';\n\n/**\n * Fixes the style prop that is passed to a platform generic component based on platform specific\n * format requirements.\n *\n * @param {StyleType} style - The passed style prop to the component.\n * @returns {StyleType}\n */\nexport function getFixedPlatformStyle(style: StyleType): StyleType {\n    if (Array.isArray(style)) {\n        const _style = {};\n\n        for (const component of style) {\n            Object.assign(_style, component);\n        }\n\n        return _style;\n    }\n\n    return style;\n}\n","export * from './components';\nexport * from './functions';\n","// @flow\n\nimport React from 'react';\nconst classNameByType = {\n    primary: 'prejoin-btn--primary',\n    secondary: 'prejoin-btn--secondary',\n    text: 'prejoin-btn--text'\n};\n\ntype Props = {\n\n    /**\n     * Text of the button.\n     */\n    children: React$Node,\n\n    /**\n     * Text css class of the button.\n     */\n    className?: string,\n\n    /**\n     * The type of th button: primary, secondary, text.\n     */\n    type: string,\n\n    /**\n     * OnClick button handler.\n     */\n    onClick: Function,\n};\n\n/**\n * Button used for prejoin actions: Join/Join without audio/Join by phone.\n *\n * @returns {ReactElement}\n */\nfunction ActionButton({ children, className, type, onClick }: Props) {\n    const ownClassName = `prejoin-btn ${classNameByType[type]}`;\n    const cls = className ? `${className} ${ownClassName}` : ownClassName;\n\n    return (\n        <div\n            className = { cls }\n            onClick = { onClick }>\n            {children}\n        </div>\n    );\n}\n\nexport default ActionButton;\n","// @flow\n\nimport React, { Component } from 'react';\nimport { connect } from '../../../base/redux';\nimport { translate } from '../../../base/i18n';\nimport { getCurrentConferenceUrl } from '../../../base/connection';\nimport { Icon, IconCopy, IconCheck } from '../../../base/icons';\nimport logger from '../../logger';\n\ntype Props = {\n\n    /**\n     * The meeting url.\n     */\n    url: string,\n\n    /**\n     * Used for translation.\n     */\n    t: Function\n};\n\ntype State = {\n\n    /**\n     * If true it shows the 'copy link' message.\n     */\n    showCopyLink: boolean,\n\n    /**\n     * If true it shows the 'link copied' message.\n     */\n    showLinkCopied: boolean,\n};\n\nconst COPY_TIMEOUT = 2000;\n\n/**\n * Component used to copy meeting url on prejoin page.\n */\nclass CopyMeetingUrl extends Component<Props, State> {\n\n    textarea: Object;\n\n    /**\n     * Initializes a new {@code Prejoin} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        this.textarea = React.createRef();\n        this.state = {\n            showCopyLink: false,\n            showLinkCopied: false\n        };\n        this._copyUrl = this._copyUrl.bind(this);\n        this._hideCopyLink = this._hideCopyLink.bind(this);\n        this._hideLinkCopied = this._hideLinkCopied.bind(this);\n        this._showCopyLink = this._showCopyLink.bind(this);\n        this._showLinkCopied = this._showLinkCopied.bind(this);\n    }\n\n    _copyUrl: () => void;\n\n    /**\n     * Callback invoked to copy the url to clipboard.\n     *\n     * @returns {void}\n     */\n    _copyUrl() {\n        const textarea = this.textarea.current;\n\n        try {\n            textarea.select();\n            document.execCommand('copy');\n            textarea.blur();\n            this._showLinkCopied();\n            window.setTimeout(this._hideLinkCopied, COPY_TIMEOUT);\n        } catch (err) {\n            logger.error('error when copying the meeting url');\n        }\n    }\n\n    _hideLinkCopied: () => void;\n\n    /**\n     * Hides the 'Link copied' message.\n     *\n     * @private\n     * @returns {void}\n     */\n    _hideLinkCopied() {\n        this.setState({\n            showLinkCopied: false\n        });\n    }\n\n    _hideCopyLink: () => void;\n\n    /**\n     * Hides the 'Copy link' text.\n     *\n     * @private\n     * @returns {void}\n     */\n    _hideCopyLink() {\n        this.setState({\n            showCopyLink: false\n        });\n    }\n\n    _showCopyLink: () => void;\n\n    /**\n     * Shows the dark 'Copy link' text on hover.\n     *\n     * @private\n     * @returns {void}\n     */\n    _showCopyLink() {\n        this.setState({\n            showCopyLink: true\n        });\n    }\n\n    _showLinkCopied: () => void;\n\n    /**\n     * Shows the green 'Link copied' message.\n     *\n     * @private\n     * @returns {void}\n     */\n    _showLinkCopied() {\n        this.setState({\n            showLinkCopied: true,\n            showCopyLink: false\n        });\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { showCopyLink, showLinkCopied } = this.state;\n        const { url, t } = this.props;\n        const { _copyUrl, _showCopyLink, _hideCopyLink } = this;\n        const src = showLinkCopied ? IconCheck : IconCopy;\n        const iconCls = showCopyLink || showCopyLink ? 'prejoin-copy-icon--white' : 'prejoin-copy-icon--light';\n\n        return (\n            <div\n                className = 'prejoin-copy-meeting'\n                onMouseEnter = { _showCopyLink }\n                onMouseLeave = { _hideCopyLink }>\n                <div className = 'prejoin-copy-url'>{url}</div>\n                {showCopyLink && <div\n                    className = 'prejoin-copy-badge prejoin-copy-badge--hover'\n                    onClick = { _copyUrl }>\n                    {t('prejoin.copyAndShare')}\n                </div>}\n                {showLinkCopied && <div\n                    className = 'prejoin-copy-badge prejoin-copy-badge--done'>\n                    {t('prejoin.linkCopied')}\n                </div>}\n                <Icon\n                    className = { `prejoin-copy-icon ${iconCls}` }\n                    size = { 24 }\n                    src = { src } />\n                <textarea\n                    className = 'prejoin-copy-textarea'\n                    readOnly = { true }\n                    ref = { this.textarea }\n                    tabIndex = '-1'\n                    value = { url } />\n            </div>);\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props.\n *\n * @param {Object} state - The redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    return {\n        url: getCurrentConferenceUrl(state)\n    };\n}\n\nexport default connect(mapStateToProps)(translate(CopyMeetingUrl));\n","// @flow\n\nimport React from 'react';\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconCheck, IconExclamation } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport {\n    getDeviceStatusType,\n    getDeviceStatusText,\n    getRawError\n} from '../../functions';\n\nexport type Props = {\n\n    /**\n     * The text to be displayed in relation to the status of the audio/video devices.\n     */\n    deviceStatusText: string,\n\n    /**\n     * The type of status for current devices, controlling the background color of the text.\n     * Can be `ok` or `warning`.\n     */\n    deviceStatusType: string,\n\n    /**\n     * The error coming from device configuration.\n     */\n    rawError: string,\n\n    /**\n     * Used for translation.\n     */\n    t: Function\n};\n\nconst iconMap = {\n    warning: {\n        src: IconExclamation,\n        className: 'prejoin-preview-status--warning'\n    },\n    ok: {\n        src: IconCheck,\n        className: 'prejoin-preview-status--ok'\n    }\n};\n\n/**\n * Strip showing the current status of the devices.\n * User is informed if there are missing or malfunctioning devices.\n *\n * @returns {ReactElement}\n */\nfunction DeviceStatus({ deviceStatusType, deviceStatusText, rawError, t }: Props) {\n    const { src, className } = iconMap[deviceStatusType];\n\n    return (\n        <div className = { `prejoin-preview-status ${className}` }>\n            <Icon\n                className = 'prejoin-preview-icon'\n                size = { 16 }\n                src = { src } />\n            <span className = 'prejoin-preview-error-desc'>{t(deviceStatusText)}</span>\n            <span>{rawError}</span>\n        </div>\n    );\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props.\n *\n * @param {Object} state - The redux state.\n * @returns {{ deviceStatusText: string, deviceStatusText: string }}\n */\nfunction mapStateToProps(state) {\n    return {\n        deviceStatusText: getDeviceStatusText(state),\n        deviceStatusType: getDeviceStatusType(state),\n        rawError: getRawError(state)\n    };\n}\n\nexport default translate(connect(mapStateToProps)(DeviceStatus));\n","// @flow\n\nimport React, { Component } from 'react';\nimport { translate } from '../../../base/i18n';\n\ntype Props = {\n\n    /**\n     * Flag signaling if the name is ediable or not.\n     */\n    isEditable: boolean,\n\n    /**\n     * Sets the name for the joining user.\n     */\n    setName: Function,\n\n    /**\n     * Used to obtain translations.\n     */\n    t: Function,\n\n    /**\n     * The text to be displayed.\n     */\n    value: string,\n};\n\n/**\n * Participant name - can be an editable input or just the text name.\n *\n * @returns {ReactElement}\n */\nclass ParticipantName extends Component<Props> {\n    /**\n     * Initializes a new {@code ParticipantName} instance.\n     *\n     * @param {Props} props - The props of the component.\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        this._onNameChange = this._onNameChange.bind(this);\n    }\n\n    _onNameChange: () => void;\n\n    /**\n     * Handler used for changing the guest user name.\n     *\n     * @returns {undefined}\n     */\n    _onNameChange({ target: { value } }) {\n        this.props.setName(value);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { value, isEditable, t } = this.props;\n\n        return isEditable ? (\n            <input\n                className = 'prejoin-preview-name prejoin-preview-name--editable'\n                onChange = { this._onNameChange }\n                placeholder = { t('dialog.enterDisplayName') }\n                value = { value } />\n        )\n            : <div className = 'prejoin-preview-name'>{value}</div>\n        ;\n    }\n}\n\n\nexport default translate(ParticipantName);\n","// @flow\n\nimport React from 'react';\nimport { Avatar } from '../../../base/avatar';\nimport { Video } from '../../../base/media';\nimport { connect } from '../../../base/redux';\nimport { getActiveVideoTrack, getPrejoinName, isPrejoinVideoMuted } from '../../functions';\n\nexport type Props = {\n\n    /**\n     * The name of the user that is about to join.\n     */\n    name: string,\n\n    /**\n     * Flag signaling the visibility of camera preview.\n     */\n    showCameraPreview: boolean,\n\n    /**\n     * The JitsiLocalTrack to display.\n     */\n    videoTrack: ?Object,\n};\n\n/**\n * Component showing the video preview and device status.\n *\n * @param {Props} props - The props of the component.\n * @returns {ReactElement}\n */\nfunction Preview(props: Props) {\n    const {\n        name,\n        showCameraPreview,\n        videoTrack\n    } = props;\n\n    if (showCameraPreview && videoTrack) {\n        return (\n            <div className = 'prejoin-preview'>\n                <div className = 'prejoin-preview-overlay' />\n                <Video\n                    className = 'flipVideoX prejoin-preview-video'\n                    videoTrack = {{ jitsiTrack: videoTrack }} />\n            </div>\n        );\n    }\n\n    return (\n        <div className = 'prejoin-preview prejoin-preview--no-video'>\n            <Avatar\n                className = 'prejoin-preview-avatar'\n                displayName = { name }\n                size = { 200 } />\n        </div>\n    );\n}\n\n/**\n * Maps the redux state to the React {@code Component} props.\n *\n * @param {Object} state - The redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    return {\n        name: getPrejoinName(state),\n        videoTrack: getActiveVideoTrack(state),\n        showCameraPreview: !isPrejoinVideoMuted(state)\n    };\n}\n\nexport default connect(mapStateToProps)(Preview);\n","// @flow\n\nimport React, { Component } from 'react';\nimport {\n    joinConference as joinConferenceAction,\n    joinConferenceWithoutAudio as joinConferenceWithoutAudioAction,\n    setJoinByPhoneDialogVisiblity as setJoinByPhoneDialogVisiblityAction,\n    setPrejoinName\n} from '../actions';\nimport { getRoomName } from '../../base/conference';\nimport { translate } from '../../base/i18n';\nimport { connect } from '../../base/redux';\nimport ActionButton from './buttons/ActionButton';\nimport {\n    areJoinByPhoneButtonsVisible,\n    getPrejoinName,\n    isDeviceStatusVisible,\n    isJoinByPhoneDialogVisible\n} from '../functions';\nimport { isGuest } from '../../invite';\nimport CopyMeetingUrl from './preview/CopyMeetingUrl';\nimport DeviceStatus from './preview/DeviceStatus';\nimport ParticipantName from './preview/ParticipantName';\nimport Preview from './preview/Preview';\nimport { VideoSettingsButton, AudioSettingsButton } from '../../toolbox';\n\ntype Props = {\n\n    /**\n     * Flag signaling if the device status is visible or not.\n     */\n    deviceStatusVisible: boolean,\n\n    /**\n     * Flag signaling if a user is logged in or not.\n     */\n    isAnonymousUser: boolean,\n\n    /**\n     * Joins the current meeting.\n     */\n    joinConference: Function,\n\n    /**\n     * Joins the current meeting without audio.\n     */\n    joinConferenceWithoutAudio: Function,\n\n    /**\n     * The name of the user that is about to join.\n     */\n    name: string,\n\n    /**\n     * Sets the name for the joining user.\n     */\n    setName: Function,\n\n    /**\n     * The name of the meeting that is about to be joined.\n     */\n    roomName: string,\n\n    /**\n     * Sets visibilit of the 'JoinByPhoneDialog'.\n     */\n    setJoinByPhoneDialogVisiblity: Function,\n\n    /**\n     * If 'JoinByPhoneDialog' is visible or not.\n     */\n    showDialog: boolean,\n\n    /**\n     * If join by phone buttons should be visible.\n     */\n    showJoinByPhoneButtons: boolean,\n\n    /**\n     * Used for translation.\n     */\n    t: Function,\n};\n\n/**\n * This component is displayed before joining a meeting.\n */\nclass Prejoin extends Component<Props> {\n    /**\n     * Initializes a new {@code Prejoin} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        this._showDialog = this._showDialog.bind(this);\n    }\n\n    _showDialog: () => void;\n\n    /**\n     * Displays the dialog for joining a meeting by phone.\n     *\n     * @returns {undefined}\n     */\n    _showDialog() {\n        this.props.setJoinByPhoneDialogVisiblity(true);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            deviceStatusVisible,\n            isAnonymousUser,\n            joinConference,\n            joinConferenceWithoutAudio,\n            name,\n            setName,\n            showJoinByPhoneButtons,\n            t\n        } = this.props;\n        const { _showDialog } = this;\n\n        return (\n            <div className = 'prejoin-full-page'>\n                <Preview />\n                <div className = 'prejoin-input-area-container'>\n                    <div className = 'prejoin-input-area'>\n                        <div className = 'prejoin-title'>\n                            {t('prejoin.joinMeeting')}\n                        </div>\n                        <CopyMeetingUrl />\n                        <ParticipantName\n                            isEditable = { isAnonymousUser }\n                            setName = { setName }\n                            value = { name } />\n                        <ActionButton\n                            onClick = { joinConference }\n                            type = 'primary'>\n                            { t('calendarSync.join') }\n                        </ActionButton>\n                        {showJoinByPhoneButtons\n                            && <div className = 'prejoin-text-btns'>\n                                <ActionButton\n                                    onClick = { joinConferenceWithoutAudio }\n                                    type = 'text'>\n                                    { t('prejoin.joinWithoutAudio') }\n                                </ActionButton>\n                                <ActionButton\n                                    onClick = { _showDialog }\n                                    type = 'text'>\n                                    { t('prejoin.joinAudioByPhone') }\n                                </ActionButton>\n                            </div>}\n                    </div>\n                </div>\n                <div className = 'prejoin-preview-btn-container'>\n                    <AudioSettingsButton visible = { true } />\n                    <VideoSettingsButton visible = { true } />\n                </div>\n                { deviceStatusVisible && <DeviceStatus /> }\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props.\n *\n * @param {Object} state - The redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state): Object {\n    return {\n        isAnonymousUser: isGuest(state),\n        deviceStatusVisible: isDeviceStatusVisible(state),\n        name: getPrejoinName(state),\n        roomName: getRoomName(state),\n        showDialog: isJoinByPhoneDialogVisible(state),\n        showJoinByPhoneButtons: areJoinByPhoneButtonsVisible(state)\n    };\n}\n\nconst mapDispatchToProps = {\n    joinConferenceWithoutAudio: joinConferenceWithoutAudioAction,\n    joinConference: joinConferenceAction,\n    setJoinByPhoneDialogVisiblity: setJoinByPhoneDialogVisiblityAction,\n    setName: setPrejoinName\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(translate(Prejoin));\n","// @flow\n\nimport {\n    ADD_PREJOIN_AUDIO_TRACK,\n    ADD_PREJOIN_VIDEO_TRACK,\n    PREJOIN_START_CONFERENCE\n} from './actionTypes';\nimport { setPrejoinAudioMuted, setPrejoinVideoMuted } from './actions';\nimport { SET_AUDIO_MUTED, SET_VIDEO_MUTED } from '../base/media';\nimport { participantUpdated, getLocalParticipant } from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { updateSettings } from '../base/settings';\nimport { getAllPrejoinConfiguredTracks, getPrejoinName } from './functions';\n\ndeclare var APP: Object;\n\n/**\n * The redux middleware for {@link PrejoinPage}.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => async action => {\n    switch (action.type) {\n    case ADD_PREJOIN_AUDIO_TRACK: {\n        const { value: audioTrack } = action;\n\n        if (audioTrack) {\n            store.dispatch(\n                    updateSettings({\n                        micDeviceId: audioTrack.getDeviceId()\n                    }),\n            );\n        }\n\n        break;\n    }\n\n    case ADD_PREJOIN_VIDEO_TRACK: {\n        const { value: videoTrack } = action;\n\n        if (videoTrack) {\n            store.dispatch(\n                    updateSettings({\n                        cameraDeviceId: videoTrack.getDeviceId()\n                    }),\n            );\n        }\n\n        break;\n    }\n\n    case PREJOIN_START_CONFERENCE: {\n        const { dispatch, getState } = store;\n\n        _syncParticipantName(dispatch, getState);\n        const tracks = await getAllPrejoinConfiguredTracks(getState());\n\n        APP.conference.prejoinStart(tracks);\n\n        break;\n    }\n\n    case SET_AUDIO_MUTED: {\n        store.dispatch(setPrejoinAudioMuted(Boolean(action.muted)));\n        break;\n    }\n\n    case SET_VIDEO_MUTED: {\n        store.dispatch(setPrejoinVideoMuted(Boolean(action.muted)));\n        break;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Sets the local participant name if one is present.\n *\n * @param {Function} dispatch - The redux dispatch function.\n * @param {Function} getState - Gets the current state.\n * @returns {undefined}\n */\nfunction _syncParticipantName(dispatch, getState) {\n    const state = getState();\n    const name = getPrejoinName(state);\n\n    name && dispatch(\n            participantUpdated({\n                ...getLocalParticipant(state),\n                name\n            }),\n    );\n}\n","import { ReducerRegistry } from '../base/redux';\n\nimport {\n    ADD_PREJOIN_AUDIO_TRACK,\n    ADD_PREJOIN_CONTENT_SHARING_TRACK,\n    ADD_PREJOIN_VIDEO_TRACK,\n    SET_DEVICE_STATUS,\n    SET_JOIN_BY_PHONE_DIALOG_VISIBLITY,\n    SET_PREJOIN_AUDIO_DISABLED,\n    SET_PREJOIN_AUDIO_MUTED,\n    SET_PREJOIN_DEVICE_ERRORS,\n    SET_PREJOIN_NAME,\n    SET_PREJOIN_PAGE_VISIBILITY,\n    SET_PREJOIN_VIDEO_DISABLED,\n    SET_PREJOIN_VIDEO_MUTED\n} from './actionTypes';\n\nconst DEFAULT_STATE = {\n    audioDisabled: false,\n    audioMuted: false,\n    videoMuted: false,\n    videoDisabled: false,\n    deviceStatusText: 'prejoin.configuringDevices',\n    deviceStatusType: 'ok',\n    showPrejoin: true,\n    showJoinByPhoneDialog: false,\n    videoTrack: null,\n    audioTrack: null,\n    contentSharingTrack: null,\n    rawError: '',\n    name: ''\n};\n\n/**\n * Listen for actions that mutate the prejoin state\n */\nReducerRegistry.register(\n    'features/prejoin', (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case ADD_PREJOIN_AUDIO_TRACK: {\n            return {\n                ...state,\n                audioTrack: action.value\n            };\n        }\n\n        case ADD_PREJOIN_CONTENT_SHARING_TRACK: {\n            return {\n                ...state,\n                contentSharingTrack: action.value\n            };\n        }\n\n        case ADD_PREJOIN_VIDEO_TRACK: {\n            return {\n                ...state,\n                videoTrack: action.value\n            };\n        }\n\n        case SET_PREJOIN_NAME: {\n            return {\n                ...state,\n                name: action.value\n            };\n        }\n\n        case SET_PREJOIN_PAGE_VISIBILITY:\n            return {\n                ...state,\n                showPrejoin: action.value\n            };\n\n        case SET_PREJOIN_VIDEO_DISABLED: {\n            return {\n                ...state,\n                videoDisabled: action.value\n            };\n        }\n\n        case SET_PREJOIN_VIDEO_MUTED:\n            return {\n                ...state,\n                videoMuted: action.value\n            };\n\n        case SET_PREJOIN_AUDIO_MUTED:\n            return {\n                ...state,\n                audioMuted: action.value\n            };\n\n        case SET_PREJOIN_DEVICE_ERRORS: {\n            const status = getStatusFromErrors(action.value);\n\n            return {\n                ...state,\n                ...status\n            };\n        }\n\n        case SET_DEVICE_STATUS: {\n            return {\n                ...state,\n                deviceStatusText: action.text,\n                deviceStatusType: action.type\n            };\n        }\n\n        case SET_PREJOIN_AUDIO_DISABLED: {\n            return {\n                ...state,\n                audioDisabled: true\n            };\n        }\n\n        case SET_JOIN_BY_PHONE_DIALOG_VISIBLITY: {\n            return {\n                ...state,\n                showJoinByPhoneDialog: action.value\n            };\n        }\n\n        default:\n            return state;\n        }\n    },\n);\n\n/**\n * Returns a suitable error object based on the track errors.\n *\n * @param {Object} errors - The errors got while creating local tracks.\n * @returns {Object}\n */\nfunction getStatusFromErrors(errors) {\n    const { audioOnlyError, videoOnlyError, audioAndVideoError } = errors;\n\n    if (audioAndVideoError) {\n        if (audioOnlyError) {\n            if (videoOnlyError) {\n                return {\n                    deviceStatusType: 'warning',\n                    deviceStatusText: 'prejoin.audioAndVideoError',\n                    rawError: audioAndVideoError.message\n                };\n            }\n\n            return {\n                deviceStatusType: 'warning',\n                deviceStatusText: 'prejoin.audioOnlyError',\n                rawError: audioOnlyError.message\n            };\n        }\n\n        return {\n            deviceStatusType: 'warning',\n            deviceStatusText: 'prejoin.videoOnlyError',\n            rawError: audioAndVideoError.message\n        };\n    }\n\n    return {\n        deviceStatusType: 'ok',\n        deviceStatusText: 'prejoin.lookGood',\n        rawError: ''\n    };\n}\n","export * from './actions';\nexport * from './functions';\n\nexport { default as Prejoin } from './components/Prejoin';\n\nimport './middleware';\nimport './reducer';\n","// @flow\n\n/**\n * The height of the filmstrip in narrow aspect ratio, or width in wide.\n */\nexport const FILMSTRIP_SIZE = 90;\n\n/**\n * The aspect ratio of a tile in tile view.\n */\nexport const TILE_ASPECT_RATIO = 16 / 9;\n","// @flow\n\nimport {\n    getParticipantCountWithFake,\n    getPinnedParticipant\n} from '../base/participants';\nimport { toState } from '../base/redux';\n\nimport { TILE_ASPECT_RATIO } from './constants';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Returns true if the filmstrip on mobile is visible, false otherwise.\n *\n * NOTE: Filmstrip on web behaves differently to mobile, much simpler, but so\n * function lies here only for the sake of consistency and to avoid flow errors\n * on import.\n *\n * @param {Object | Function} stateful - The Object or Function that can be\n * resolved to a Redux state object with the toState function.\n * @returns {boolean}\n */\nexport function isFilmstripVisible(stateful: Object | Function) {\n    return toState(stateful)['features/filmstrip'].visible;\n}\n\n/**\n * Determines whether the remote video thumbnails should be displayed/visible in\n * the filmstrip.\n *\n * @param {Object} state - The full redux state.\n * @returns {boolean} - If remote video thumbnails should be displayed/visible\n * in the filmstrip, then {@code true}; otherwise, {@code false}.\n */\nexport function shouldRemoteVideosBeVisible(state: Object) {\n    if (state['features/invite'].calleeInfoVisible) {\n        return false;\n    }\n\n    // Include fake participants to derive how many thumbnails are dispalyed,\n    // as it is assumed all participants, including fake, will be displayed\n    // in the filmstrip.\n    const participantCount = getParticipantCountWithFake(state);\n    let pinnedParticipant;\n\n    return Boolean(\n        participantCount > 2\n\n            // Always show the filmstrip when there is another participant to\n            // show and the filmstrip is hovered, or local video is pinned, or\n            // the toolbar is displayed.\n            || (participantCount > 1\n                && (state['features/filmstrip'].hovered\n                    || state['features/toolbox'].visible\n                    || ((pinnedParticipant = getPinnedParticipant(state))\n                        && pinnedParticipant.local)))\n\n            || (typeof interfaceConfig === 'object'\n                && interfaceConfig.filmStripOnly)\n\n            || state['features/base/config'].disable1On1Mode);\n}\n\n/**\n * Calculates the size for thumbnails when in horizontal view layout.\n *\n * @param {number} clientHeight - The height of the app window.\n * @returns {{local: {height, width}, remote: {height, width}}}\n */\nexport function calculateThumbnailSizeForHorizontalView(clientHeight: number = 0) {\n    const topBottomMargin = 15;\n    const availableHeight = Math.min(clientHeight, (interfaceConfig.FILM_STRIP_MAX_HEIGHT || 120) + topBottomMargin);\n    const height = availableHeight - topBottomMargin;\n\n    return {\n        local: {\n            height,\n            width: Math.floor(interfaceConfig.LOCAL_THUMBNAIL_RATIO * height)\n        },\n        remote: {\n            height,\n            width: Math.floor(interfaceConfig.REMOTE_THUMBNAIL_RATIO * height)\n        }\n    };\n}\n\n/**\n * Calculates the size for thumbnails when in tile view layout.\n *\n * @param {Object} dimensions - The desired dimensions of the tile view grid.\n * @returns {{height, width}}\n */\nexport function calculateThumbnailSizeForTileView({\n    columns,\n    visibleRows,\n    clientWidth,\n    clientHeight\n}: Object) {\n    // The distance from the top and bottom of the screen, as set by CSS, to\n    // avoid overlapping UI elements.\n    const topBottomPadding = 200;\n\n    // Minimum space to keep between the sides of the tiles and the sides\n    // of the window.\n    const sideMargins = 30 * 2;\n\n    const verticalMargins = visibleRows * 10;\n    const viewWidth = clientWidth - sideMargins;\n    const viewHeight = clientHeight - topBottomPadding - verticalMargins;\n    const initialWidth = viewWidth / columns;\n    const aspectRatioHeight = initialWidth / TILE_ASPECT_RATIO;\n    const height = Math.floor(Math.min(aspectRatioHeight, viewHeight / visibleRows));\n    const width = Math.floor(TILE_ASPECT_RATIO * height);\n\n    return {\n        height,\n        width\n    };\n}\n\n/**\n * Returns the width of the visible area (doesn't include the left margin/padding) of the the vertical filmstrip.\n *\n * @returns {number} - The width of the vertical filmstrip.\n */\nexport function getVerticalFilmstripVisibleAreaWidth() {\n    // Adding 11px for the 2px right margin, 2px borders on the left and right and 5px right padding.\n    // Also adding 7px for the scrollbar. Note that we are not counting the left margins and paddings because this\n    // function is used for calculating the available space and they are invisible.\n    // TODO: Check if we can remove the left margins and paddings from the CSS.\n    // FIXME: This function is used to calculate the size of the large video, etherpad or shared video. Once everything\n    // is reactified this calculation will need to move to the corresponding components.\n    const filmstripMaxWidth = (interfaceConfig.FILM_STRIP_MAX_HEIGHT || 120) + 18;\n\n    return Math.min(filmstripMaxWidth, window.innerWidth);\n}\n","// @flow\n\nimport {\n    SET_FILMSTRIP_ENABLED,\n    SET_FILMSTRIP_HOVERED,\n    SET_FILMSTRIP_VISIBLE\n} from './actionTypes';\n\n/**\n * Sets whether the filmstrip is enabled.\n *\n * @param {boolean} enabled - Whether the filmstrip is enabled.\n * @returns {{\n *     type: SET_FILMSTRIP_ENABLED,\n *     enabled: boolean\n * }}\n */\nexport function setFilmstripEnabled(enabled: boolean) {\n    return {\n        type: SET_FILMSTRIP_ENABLED,\n        enabled\n    };\n}\n\n/**\n * Sets whether the filmstrip is being hovered (over).\n *\n * @param {boolean} hovered - Whether the filmstrip is being hovered (over).\n * @returns {{\n *     type: SET_FILMSTRIP_HOVERED,\n *     hovered: boolean\n * }}\n */\nexport function setFilmstripHovered(hovered: boolean) {\n    return {\n        type: SET_FILMSTRIP_HOVERED,\n        hovered\n    };\n}\n\n/**\n * Sets whether the filmstrip is visible.\n *\n * @param {boolean} visible - Whether the filmstrip is visible.\n * @returns {{\n *     type: SET_FILMSTRIP_VISIBLE,\n *     visible: boolean\n * }}\n */\nexport function setFilmstripVisible(visible: boolean) {\n    return {\n        type: SET_FILMSTRIP_VISIBLE,\n        visible\n    };\n}\n","// @flow\n\nimport { SET_HORIZONTAL_VIEW_DIMENSIONS, SET_TILE_VIEW_DIMENSIONS } from './actionTypes';\nimport { calculateThumbnailSizeForHorizontalView, calculateThumbnailSizeForTileView } from './functions';\n\n/**\n * The size of the side margins for each tile as set in CSS.\n */\nconst TILE_VIEW_SIDE_MARGINS = 10 * 2;\n\n/**\n * Sets the dimensions of the tile view grid.\n *\n * @param {Object} dimensions - Whether the filmstrip is visible.\n * @param {Object} windowSize - The size of the window.\n * @returns {{\n *     type: SET_TILE_VIEW_DIMENSIONS,\n *     dimensions: Object\n * }}\n */\nexport function setTileViewDimensions(dimensions: Object, windowSize: Object) {\n    const thumbnailSize = calculateThumbnailSizeForTileView({\n        ...dimensions,\n        ...windowSize\n    });\n    const filmstripWidth = dimensions.columns * (TILE_VIEW_SIDE_MARGINS + thumbnailSize.width);\n\n    return {\n        type: SET_TILE_VIEW_DIMENSIONS,\n        dimensions: {\n            gridDimensions: dimensions,\n            thumbnailSize,\n            filmstripWidth\n        }\n    };\n}\n\n/**\n * Sets the dimensions of the thumbnails in horizontal view.\n *\n * @param {number} clientHeight - The height of the window.\n * @returns {{\n *     type: SET_HORIZONTAL_VIEW_DIMENSIONS,\n *     dimensions: Object\n * }}\n */\nexport function setHorizontalViewDimensions(clientHeight: number = 0) {\n    return {\n        type: SET_HORIZONTAL_VIEW_DIMENSIONS,\n        dimensions: calculateThumbnailSizeForHorizontalView(clientHeight)\n    };\n}\n\nexport * from './actions.native';\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { IconMicDisabled } from '../../../base/icons';\nimport { BaseIndicator } from '../../../base/react';\n\n/**\n * The type of the React {@code Component} props of {@link AudioMutedIndicator}.\n */\ntype Props = {\n\n    /**\n     * From which side of the indicator the tooltip should appear from.\n     */\n    tooltipPosition: string\n};\n\n/**\n * React {@code Component} for showing an audio muted icon with a tooltip.\n *\n * @extends Component\n */\nclass AudioMutedIndicator extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <BaseIndicator\n                className = 'audioMuted toolbar-icon'\n                icon = { IconMicDisabled }\n                iconId = 'mic-disabled'\n                iconSize = { 13 }\n                tooltipKey = 'videothumbnail.mute'\n                tooltipPosition = { this.props.tooltipPosition } />\n        );\n    }\n}\n\nexport default AudioMutedIndicator;\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { IconDominantSpeaker } from '../../../base/icons';\nimport { BaseIndicator } from '../../../base/react';\n\n/**\n * The type of the React {@code Component} props of\n * {@link DominantSpeakerIndicator}.\n */\ntype Props = {\n\n    /**\n     * The font-size for the icon.\n     */\n    iconSize: number,\n\n    /**\n     * From which side of the indicator the tooltip should appear from.\n     */\n    tooltipPosition: string\n};\n\n/**\n * Thumbnail badge showing that the participant is the dominant speaker in\n * the conference.\n *\n * @extends Component\n */\nclass DominantSpeakerIndicator extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (\n            <BaseIndicator\n                className = 'indicator show-inline'\n                icon = { IconDominantSpeaker }\n                iconClassName = 'indicatoricon'\n                iconSize = { `${this.props.iconSize}px` }\n                id = 'dominantspeakerindicator'\n                tooltipKey = 'speaker'\n                tooltipPosition = { this.props.tooltipPosition } />\n        );\n    }\n}\n\nexport default DominantSpeakerIndicator;\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { connect, equals } from '../../../base/redux';\nimport { SettingsButton } from '../../../settings';\nimport {\n    AudioMuteButton,\n    HangupButton,\n    VideoMuteButton\n} from '../../../toolbox';\n\ndeclare var interfaceConfig: Object;\n\n// XXX: We are not currently using state here, but in the future, when\n// interfaceConfig is part of redux we will. This has to be retrieved from the store.\nconst visibleButtons = new Set(interfaceConfig.TOOLBAR_BUTTONS);\n\n/**\n * The type of the React {@code Component} props of {@link Toolbar}.\n */\ntype Props = {\n\n    /**\n     * The set of buttons which should be visible in this {@code Toolbar}.\n     */\n    _visibleButtons: Set<string>\n};\n\n/**\n * Implements the conference toolbar on React/Web for filmstrip-only mode.\n *\n * @extends Component\n */\nclass Toolbar extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div\n                className = 'filmstrip-toolbox'\n                id = 'new-toolbox'>\n                <HangupButton\n                    tooltipPosition = 'left'\n                    visible = { this._shouldShowButton('hangup') } />\n                <AudioMuteButton\n                    tooltipPosition = 'left'\n                    visible = { this._shouldShowButton('microphone') } />\n                <VideoMuteButton\n                    tooltipPosition = 'left'\n                    visible = { this._shouldShowButton('camera') } />\n                <SettingsButton\n                    tooltipPosition = 'left'\n                    visible = { this._shouldShowButton('fodeviceselection') } />\n            </div>\n        );\n    }\n\n    _shouldShowButton: (string) => boolean;\n\n    /**\n     * Returns if a button name has been explicitly configured to be displayed.\n     *\n     * @param {string} buttonName - The name of the button, as expected in\n     * {@link intefaceConfig}.\n     * @private\n     * @returns {boolean} True if the button should be displayed, false\n     * otherwise.\n     */\n    _shouldShowButton(buttonName) {\n        return this.props._visibleButtons.has(buttonName);\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for this component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _visibleButtons: Set<string>\n * }}\n */\nfunction _mapStateToProps(state): Object { // eslint-disable-line no-unused-vars\n    // XXX: We are not currently using state here, but in the future, when\n    // interfaceConfig is part of redux we will.\n    //\n    // NB: We compute the buttons again here because if URL parameters were used to\n    // override them we'd miss it.\n    const buttons = new Set(interfaceConfig.TOOLBAR_BUTTONS);\n\n    return {\n        _visibleButtons: equals(visibleButtons, buttons) ? visibleButtons : buttons\n    };\n}\n\nexport default connect(_mapStateToProps)(Toolbar);\n","// @flow\n\nimport React, { Component } from 'react';\nimport {\n    CALL,\n    CHECK,\n    COLLECT,\n    FOLD,\n    GIVE_CARDS,\n    JOIN_GAME,\n    SHOW_CARDS,\n    START_GAME,\n    TAKE_OVER,\n    THROW_AWAY_CARDS\n} from '../../actionTypes';\nimport {\n    call,\n    check,\n    collect,\n    fold,\n    giveCards,\n    joinGame,\n    showCards,\n    startGame,\n    takeOver,\n    throwAwayCards\n} from '../../actions';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\nexport type Props = {\n    nick: string,\n    action: string,\n    dispatch: Function,\n    t: Function,\n}\n\nclass GenericAction extends Component<Props> {\n\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onAction = this._onAction.bind(this);\n    }\n\n    render() {\n\n        const { t, action } = this.props;\n\n        return (\n            <button\n                aria-label = { t(`poker.action.${this.props.action}`) }\n                className = 'poker-button'\n                /* eslint-disable-next-line react/jsx-no-bind */\n                onClick = { e => this._onAction(e, this.props.action) }>\n                <div className = { 'poker-action' }>\n                    {t(`poker.action.${action}`)}\n                </div>\n            </button>\n        );\n    }\n\n    _onAction: (Object, string) => void;\n    _onAction(event, action) {\n        switch (action) {\n        case GIVE_CARDS:\n            this.props.dispatch(giveCards());\n            break;\n        case CHECK:\n            this.props.dispatch(check());\n            break;\n        case CALL:\n            this.props.dispatch(call());\n            break;\n        case FOLD:\n            this.props.dispatch(fold());\n            break;\n        case SHOW_CARDS:\n            this.props.dispatch(showCards());\n            break;\n        case THROW_AWAY_CARDS:\n            this.props.dispatch(throwAwayCards(this.props.nick));\n            break;\n        case COLLECT:\n            this.props.dispatch(collect(this.props.nick));\n            break;\n        case TAKE_OVER:\n            this.props.dispatch(takeOver(this.props.nick));\n            break;\n        case JOIN_GAME:\n            this.props.dispatch(joinGame(this.props.nick));\n            break;\n        case START_GAME:\n            this.props.dispatch(startGame());\n            break;\n        default:\n            console.log('unknown action');\n        }\n    }\n}\n\nexport function _mapStateToProps() {\n    return {};\n}\n\nexport default translate(connect(_mapStateToProps)(GenericAction));\n","// @flow\n\nimport React, { Component } from 'react';\nimport { raise } from '../../actions';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport type { CommonState } from '../../types';\n\ntype Props = {\n    nick: string,\n    dispatch: Function,\n    t: Function,\n    _minAmount: number,\n    _maxAmount: number,\n}\n\ntype State = {\n    amount: number\n}\n\nclass RaiseAction extends Component<Props, State> {\n\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            amount: props._minAmount\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onChange = this._onChange.bind(this);\n        this._onClick = this._onClick.bind(this);\n        this._onKeyDown = this._onKeyDown.bind(this);\n    }\n\n    render() {\n\n        const { t } = this.props;\n\n        return (\n            <button\n                aria-label = { t('poker.action.RAISE') }\n                className = 'poker-button raise'\n                onClick = { this._onClick }>\n                <input\n                    autoFocus = { true }\n                    onChange = { this._onChange }\n                    onKeyDown = { this._onKeyDown }\n                    placeholder = { t('poker.raise.amount') }\n                    type = 'number'\n                    value = { this.state.amount } />\n                <div className = { 'poker-action' }>\n                    {t('poker.action.RAISE')}\n                </div>\n            </button>\n        );\n    }\n\n    _onClick: () => void;\n    _onClick(event) {\n        if (event.target.tagName !== 'INPUT') {\n            this.raise();\n        }\n    }\n\n    _onChange: () => void;\n    _onChange(event) {\n        let number = parseInt(event.target.value, 10);\n\n        if (!isNaN(number) || event.target.value === '') {\n            number = Math.min(number, this.props._maxAmount);\n            number = Math.max(number, this.props._minAmount);\n            this.setState({\n                amount: number\n            });\n        }\n    }\n\n    _onKeyDown: () => void;\n    _onKeyDown(event) {\n        if (event.key === 'Enter') {\n            this.raise();\n        }\n    }\n\n    raise() {\n        this.props.dispatch(raise(this.state.amount));\n    }\n}\n\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const commonState: CommonState = state['features/poker'].common;\n\n    return {\n        _minAmount: commonState.game.round.raiseAmount,\n        _maxAmount: commonState.players[ownProps.nick].amount\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(RaiseAction));\n","// @flow\n\nimport React, { Component } from 'react';\nimport { connect } from '../../base/redux';\nimport { translate } from '../../base/i18n';\nimport type { Action, Card as CardType, CommonState } from '../types';\nimport { cards, playerState, playerStateI18nParams, pokerActionTypes } from '../functions';\nimport { getParticipantDisplayName } from '../../base/participants';\nimport { SYMBOLS } from '../constants';\nimport GenericAction from './action/GenericAction';\nimport { RAISE } from '../actionTypes';\nimport RaiseAction from './action/RaiseAction';\nimport { getCurrentLayout } from '../../video-layout';\n\ntype Props = {\n    participantId: string,\n    dispatch: Function,\n    t: Function,\n    _cards: Array<CardType>,\n    _actions: Array<Action>,\n    _nick: Array<Action>,\n    _dealer: boolean,\n    _amount: number,\n    _bet: number,\n    _playerState: string,\n    _playerStateI18nParams: Object,\n    _currentLayout: string\n}\n\ntype State = {\n\n}\n\n/**\n * Implements a class to render poker in the app.\n */\nclass ControlPanel extends Component<Props, State> {\n\n    render() {\n        const { t, _actions } = this.props;\n\n        return (\n            <div className = { `poker-control-panel ${this.props._currentLayout}` }>\n                <div className = 'info'>\n\n                    {this.props._dealer\n                    && <span className = 'dealer-button'><span>Dealer</span></span>}\n\n                    {this.props._amount > 0\n                    && <div>{ t('poker.stack') }: {this.props._amount}</div>}\n\n                    {this.props._bet > 0\n                    && <div>{ t('poker.bet') }: {this.props._bet}</div>}\n\n                    <div className = { `state ${this.props._playerState}` }>\n                        { t(`poker.state.${this.props._playerState}`, this.props._playerStateI18nParams) }\n                    </div>\n                </div>\n                <div className = 'poker-buttons'>\n                    {_actions.map(action => this._action(action))}\n                </div>\n                {this.props._cards.length === 2\n                && <div className = 'poker-hand'>\n                    <img src = 'images/hand_cropped.png' />\n                    <div className = 'card card-one'>\n                        <span className = { this._symbolClasses(this.props._cards[0]) }>\n                            {SYMBOLS[this.props._cards[0]?.symbol]}\n                        </span>\n                        <span className = 'suite'>{this._suite(this.props._cards[0])}</span>\n                    </div>\n                    <div className = 'card card-two'>\n                        <span className = { this._symbolClasses(this.props._cards[1]) }>\n                            {SYMBOLS[this.props._cards[1]?.symbol]}\n                        </span>\n                        <span className = 'suite'>{this._suite(this.props._cards[1])}</span>\n                    </div>\n                </div>}\n            </div>\n        );\n    }\n\n    _suite(card: CardType) {\n        if (card.suit === 'club') {\n            return <span>&clubs;</span>;\n        }\n        if (card.suit === 'diamond') {\n            return <span>&diams;</span>;\n        }\n        if (card.suit === 'heart') {\n            return <span>&hearts;</span>;\n        }\n        if (card.suit === 'spade') {\n            return <span>&spades;</span>;\n        }\n    }\n\n    _symbolClasses(card: CardType) {\n        if (card.suit === 'heart' || card.suit === 'diamond') {\n            return 'symbol red';\n        }\n\n        return 'symbol black';\n    }\n\n\n    _action(action) {\n        switch (action) {\n        case RAISE:\n            return (<RaiseAction\n                key = { action }\n                nick = { this.props._nick } />);\n        }\n\n        return (<GenericAction\n            action = { action }\n            key = { action }\n            nick = { this.props._nick } />);\n    }\n}\n\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const commonState: CommonState = state['features/poker'].common;\n    const { players } = commonState;\n\n    const { participantId } = ownProps;\n    const nick = getParticipantDisplayName(state, participantId);\n    const player = players[nick];\n\n    return {\n        _actions: pokerActionTypes(state, nick),\n        _cards: cards(state, nick),\n        _nick: nick,\n        _dealer: commonState.game.dealer === nick,\n        _amount: player ? player.amount : null,\n        _bet: player ? player.bet : null,\n        _playerState: playerState(state, nick),\n        _playerStateI18nParams: playerStateI18nParams(state, nick),\n        _currentLayout: getCurrentLayout(state)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(ControlPanel));\n","/* @flow */\n\nimport _ from 'lodash';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport {\n    createShortcutEvent,\n    createToolbarEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { Icon, IconMenuDown, IconMenuUp } from '../../../base/icons';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport { dockToolbox } from '../../../toolbox';\n\nimport { setFilmstripHovered, setFilmstripVisible } from '../../actions';\nimport { shouldRemoteVideosBeVisible } from '../../functions';\n\nimport { getCurrentLayout, LAYOUTS } from '../../../video-layout';\n\nimport Toolbar from './Toolbar';\nimport ControlPanel from '../../../poker/components/ControlPanel';\nimport { getLocalParticipant } from '../../../base/participants';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link Filmstrip}.\n */\ntype Props = {\n\n    /**\n     * Additional CSS class names top add to the root.\n     */\n    _className: string,\n\n    /**\n     * The current layout of the filmstrip.\n     */\n    _currentLayout: string,\n\n    /**\n     * The number of columns in tile view.\n     */\n    _columns: number,\n\n    /**\n     * Whether the UI/UX is filmstrip-only.\n     */\n    _filmstripOnly: boolean,\n\n    /**\n     * The width of the filmstrip.\n     */\n    _filmstripWidth: number,\n\n    /**\n     * Whether the filmstrip scrollbar should be hidden or not.\n     */\n    _hideScrollbar: boolean,\n\n    /**\n     * Whether the filmstrip toolbar should be hidden or not.\n     */\n    _hideToolbar: boolean,\n\n    /**\n     * Whether or not remote videos are currently being hovered over. Hover\n     * handling is currently being handled detected outside of react.\n     */\n    _hovered: boolean,\n\n    /**\n     * The number of rows in tile view.\n     */\n    _rows: number,\n\n    /**\n     * Additional CSS class names to add to the container of all the thumbnails.\n     */\n    _videosClassName: string,\n\n    /**\n     * Whether or not the filmstrip videos should currently be displayed.\n     */\n    _visible: boolean,\n\n    _localParticipantId: string,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} which represents the filmstrip on\n * Web/React.\n *\n * @extends Component\n */\nclass Filmstrip extends Component <Props> {\n    _isHovered: boolean;\n\n    _notifyOfHoveredStateUpdate: Function;\n\n    _onMouseOut: Function;\n\n    _onMouseOver: Function;\n\n    /**\n     * Initializes a new {@code Filmstrip} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Debounce the method for dispatching the new filmstrip handled state\n        // so that it does not get called with each mouse movement event. This\n        // also works around an issue where mouseout and then a mouseover event\n        // is fired when hovering over remote thumbnails, which are not yet in\n        // react.\n        this._notifyOfHoveredStateUpdate = _.debounce(this._notifyOfHoveredStateUpdate, 100);\n\n        // Cache the current hovered state for _updateHoveredState to always\n        // send the last known hovered state.\n        this._isHovered = false;\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onMouseOut = this._onMouseOut.bind(this);\n        this._onMouseOver = this._onMouseOver.bind(this);\n        this._onShortcutToggleFilmstrip = this._onShortcutToggleFilmstrip.bind(this);\n        this._onToolbarToggleFilmstrip = this._onToolbarToggleFilmstrip.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        if (!this.props._filmstripOnly) {\n            APP.keyboardshortcut.registerShortcut(\n                'F',\n                'filmstripPopover',\n                this._onShortcutToggleFilmstrip,\n                'keyboardShortcuts.toggleFilmstrip'\n            );\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        APP.keyboardshortcut.unregisterShortcut('F');\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        // Note: Appending of {@code RemoteVideo} views is handled through\n        // VideoLayout. The views do not get blown away on render() because\n        // ReactDOMComponent is only aware of the given JSX and not new appended\n        // DOM. As such, when updateDOMProperties gets called, only attributes\n        // will get updated without replacing the DOM. If the known DOM gets\n        // modified, then the views will get blown away.\n\n        const filmstripStyle = { };\n        const filmstripRemoteVideosContainerStyle = {};\n        let remoteVideoContainerClassName = 'remote-videos-container';\n\n        switch (this.props._currentLayout) {\n        case LAYOUTS.VERTICAL_FILMSTRIP_VIEW:\n            // Adding 18px for the 2px margins, 2px borders on the left and right and 5px padding on the left and right.\n            // Also adding 7px for the scrollbar.\n            filmstripStyle.maxWidth = (interfaceConfig.FILM_STRIP_MAX_HEIGHT || 120) + 25;\n            break;\n        case LAYOUTS.TILE_VIEW: {\n            // The size of the side margins for each tile as set in CSS.\n            const { _columns, _rows, _filmstripWidth } = this.props;\n\n            if (_rows > _columns) {\n                remoteVideoContainerClassName += ' has-overflow';\n            }\n\n            filmstripRemoteVideosContainerStyle.width = _filmstripWidth;\n            break;\n        }\n        }\n\n        let remoteVideosWrapperClassName = 'filmstrip__videos';\n\n        if (this.props._hideScrollbar) {\n            remoteVideosWrapperClassName += ' hide-scrollbar';\n        }\n\n        let toolbar = null;\n\n        if (!this.props._hideToolbar) {\n            toolbar = this.props._filmstripOnly ? <Toolbar /> : this._renderToggleButton();\n        }\n\n        return (\n            <div\n                className = { `filmstrip ${this.props._className}` }\n                style = { filmstripStyle }>\n                { toolbar }\n                <div className = 'filmstripPokerContainer'>\n                    <ControlPanel participantId = { this.props._localParticipantId } />\n                </div>\n                <div\n                    className = { this.props._videosClassName }\n                    id = 'remoteVideos'>\n                    <div\n                        className = 'filmstrip__videos'\n                        id = 'filmstripLocalVideo'\n                        onMouseOut = { this._onMouseOut }\n                        onMouseOver = { this._onMouseOver }>\n                        <div id = 'filmstripLocalVideoThumbnail' />\n                    </div>\n                    <div\n                        className = { remoteVideosWrapperClassName }\n                        id = 'filmstripRemoteVideos'>\n                        {/*\n                          * XXX This extra video container is needed for\n                          * scrolling thumbnails in Firefox; otherwise, the flex\n                          * thumbnails resize instead of causing overflow.\n                          */}\n                        <div\n                            className = { remoteVideoContainerClassName }\n                            id = 'filmstripRemoteVideosContainer'\n                            onMouseOut = { this._onMouseOut }\n                            onMouseOver = { this._onMouseOver }\n                            style = { filmstripRemoteVideosContainerStyle }>\n                            <div id = 'localVideoTileViewContainer' />\n                        </div>\n                    </div>\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Dispatches an action to change the visibility of the filmstrip.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleFilmstrip() {\n        this.props.dispatch(setFilmstripVisible(!this.props._visible));\n    }\n\n    /**\n     * If the current hover state does not match the known hover state in redux,\n     * dispatch an action to update the known hover state in redux.\n     *\n     * @private\n     * @returns {void}\n     */\n    _notifyOfHoveredStateUpdate() {\n        if (this.props._hovered !== this._isHovered) {\n            this.props.dispatch(dockToolbox(this._isHovered));\n            this.props.dispatch(setFilmstripHovered(this._isHovered));\n        }\n    }\n\n    /**\n     * Updates the currently known mouseover state and attempt to dispatch an\n     * update of the known hover state in redux.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onMouseOut() {\n        this._isHovered = false;\n        this._notifyOfHoveredStateUpdate();\n    }\n\n    /**\n     * Updates the currently known mouseover state and attempt to dispatch an\n     * update of the known hover state in redux.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onMouseOver() {\n        this._isHovered = true;\n        this._notifyOfHoveredStateUpdate();\n    }\n\n    _onShortcutToggleFilmstrip: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action for\n     * toggling filmstrip visibility.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutToggleFilmstrip() {\n        sendAnalytics(createShortcutEvent(\n            'toggle.filmstrip',\n            {\n                enable: this.props._visible\n            }));\n\n        this._doToggleFilmstrip();\n    }\n\n    _onToolbarToggleFilmstrip: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for opening\n     * the speaker stats modal.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarToggleFilmstrip() {\n        sendAnalytics(createToolbarEvent(\n            'toggle.filmstrip.button',\n            {\n                enable: this.props._visible\n            }));\n\n        this._doToggleFilmstrip();\n    }\n\n    /**\n     * Creates a React Element for changing the visibility of the filmstrip when\n     * clicked.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderToggleButton() {\n        const icon = this.props._visible ? IconMenuDown : IconMenuUp;\n        const { t } = this.props;\n\n        return (\n            <div className = 'filmstrip__toolbar'>\n                <button\n                    aria-label = { t('toolbar.accessibilityLabel.toggleFilmstrip') }\n                    id = 'toggleFilmstripButton'\n                    onClick = { this._onToolbarToggleFilmstrip }>\n                    <Icon src = { icon } />\n                </button>\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code Filmstrip}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    const { iAmSipGateway } = state['features/base/config'];\n    const { hovered, visible } = state['features/filmstrip'];\n    const isFilmstripOnly = Boolean(interfaceConfig.filmStripOnly);\n    const reduceHeight\n        = !isFilmstripOnly && state['features/toolbox'].visible && interfaceConfig.TOOLBAR_BUTTONS.length;\n    const remoteVideosVisible = shouldRemoteVideosBeVisible(state);\n    const className = `${remoteVideosVisible ? '' : 'hide-videos'} ${reduceHeight ? 'reduce-height' : ''}`.trim();\n    const videosClassName = `filmstrip__videos${\n        isFilmstripOnly ? ' filmstrip__videos-filmstripOnly' : ''}${\n        visible ? '' : ' hidden'}`;\n    const { gridDimensions = {}, filmstripWidth } = state['features/filmstrip'].tileViewDimensions;\n\n\n    return {\n        _className: className,\n        _columns: gridDimensions.columns,\n        _currentLayout: getCurrentLayout(state),\n        _filmstripOnly: isFilmstripOnly,\n        _filmstripWidth: filmstripWidth,\n        _hideScrollbar: Boolean(iAmSipGateway),\n        _hideToolbar: Boolean(iAmSipGateway),\n        _hovered: hovered,\n        _rows: gridDimensions.rows,\n        _videosClassName: videosClassName,\n        _visible: visible,\n        _localParticipantId: getLocalParticipant(state).id\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(Filmstrip));\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { IconModerator } from '../../../base/icons';\nimport { BaseIndicator } from '../../../base/react';\n\n/**\n * The type of the React {@code Component} props of {@link ModeratorIndicator}.\n */\ntype Props = {\n\n    /**\n     * From which side of the indicator the tooltip should appear from.\n     */\n    tooltipPosition: string\n};\n\n/**\n * React {@code Component} for showing a moderator icon with a tooltip.\n *\n * @extends Component\n */\nclass ModeratorIndicator extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div className = 'moderator-icon right'>\n                <BaseIndicator\n                    className = 'focusindicator toolbar-icon'\n                    icon = { IconModerator }\n                    iconSize = { 13 }\n                    tooltipKey = 'videothumbnail.moderator'\n                    tooltipPosition = { this.props.tooltipPosition } />\n            </div>\n        );\n    }\n}\n\nexport default ModeratorIndicator;\n","// @flow\n\nimport { Component } from 'react';\n\nimport { getParticipantById } from '../../base/participants';\n\nexport type Props = {\n\n    /**\n     * The participant id who we want to render the raised hand indicator\n     * for.\n     */\n    participantId: string,\n\n    /**\n     * True if the hand is raised for this participant.\n     */\n    _raisedHand?: boolean\n}\n\n/**\n * Implements an abstract class for the RaisedHandIndicator component.\n */\nexport default class AbstractRaisedHandIndicator<P: Props>\n    extends Component<P> {\n\n    /**\n     * Implements {@code Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        if (!this.props._raisedHand) {\n            return null;\n        }\n\n        return this._renderIndicator();\n    }\n\n    /**\n     * Renders the platform specific indicator element.\n     *\n     * @returns {React$Element<*>}\n     */\n    _renderIndicator: () => React$Element<*>\n\n}\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the component.\n * @returns {Object}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props): Object {\n    const participant = getParticipantById(state, ownProps.participantId);\n\n    return {\n        _raisedHand: participant && participant.raisedHand\n    };\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { IconRaisedHand } from '../../../base/icons';\nimport { BaseIndicator } from '../../../base/react';\nimport { connect } from '../../../base/redux';\n\nimport AbstractRaisedHandIndicator, {\n    type Props as AbstractProps,\n    _mapStateToProps\n} from '../AbstractRaisedHandIndicator';\n\n/**\n * The type of the React {@code Component} props of {@link RaisedHandIndicator}.\n */\ntype Props = AbstractProps & {\n\n    /**\n     * The font-size for the icon.\n     */\n    iconSize: number,\n\n    /**\n     * From which side of the indicator the tooltip should appear from.\n     */\n    tooltipPosition: string\n};\n\n/**\n * Thumbnail badge showing that the participant would like to speak.\n *\n * @extends Component\n */\nclass RaisedHandIndicator extends AbstractRaisedHandIndicator<Props> {\n    /**\n     * Renders the platform specific indicator element.\n     *\n     * @returns {React$Element<*>}\n     */\n    _renderIndicator() {\n        return (\n            <BaseIndicator\n                className = 'raisehandindicator indicator show-inline'\n                icon = { IconRaisedHand }\n                iconClassName = 'indicatoricon'\n                iconSize = { `${this.props.iconSize}px` }\n                tooltipKey = 'raisedHand'\n                tooltipPosition = { this.props.tooltipPosition } />\n        );\n    }\n}\n\nexport default connect(_mapStateToProps)(RaisedHandIndicator);\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { IconCameraDisabled } from '../../../base/icons';\nimport { BaseIndicator } from '../../../base/react';\n\n/**\n * The type of the React {@code Component} props of {@link VideoMutedIndicator}.\n */\ntype Props = {\n\n    /**\n     * From which side of the indicator the tooltip should appear from.\n     */\n    tooltipPosition: string\n};\n\n/**\n * React {@code Component} for showing a video muted icon with a tooltip.\n *\n * @extends Component\n */\nclass VideoMutedIndicator extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (\n            <BaseIndicator\n                className = 'videoMuted toolbar-icon'\n                icon = { IconCameraDisabled }\n                iconId = 'camera-disabled'\n                iconSize = { 13 }\n                tooltipKey = 'videothumbnail.videomute'\n                tooltipPosition = { this.props.tooltipPosition } />\n        );\n    }\n}\n\nexport default VideoMutedIndicator;\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { getLocalParticipant, getParticipantById, PARTICIPANT_ROLE } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { getCurrentLayout, LAYOUTS } from '../../../video-layout';\n\nimport AudioMutedIndicator from './AudioMutedIndicator';\nimport ModeratorIndicator from './ModeratorIndicator';\nimport VideoMutedIndicator from './VideoMutedIndicator';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link StatusIndicators}.\n */\ntype Props = {\n\n    /**\n     * The current layout of the filmstrip.\n     */\n    _currentLayout: string,\n\n    /**\n     * Indicates if the moderator indicator should be visible or not.\n     */\n    _showModeratorIndicator: Boolean,\n\n    /**\n     * Indicates if the audio muted indicator should be visible or not.\n     */\n    showAudioMutedIndicator: Boolean,\n\n    /**\n     * Indicates if the video muted indicator should be visible or not.\n     */\n    showVideoMutedIndicator: Boolean,\n\n    /**\n     * The ID of the participant for which the status bar is rendered.\n     */\n    participantID: String\n};\n\n/**\n * React {@code Component} for showing the status bar in a thumbnail.\n *\n * @extends Component\n */\nclass StatusIndicators extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            _currentLayout,\n            _showModeratorIndicator,\n            showAudioMutedIndicator,\n            showVideoMutedIndicator\n        } = this.props;\n        let tooltipPosition;\n\n        switch (_currentLayout) {\n        case LAYOUTS.TILE_VIEW:\n            tooltipPosition = 'right';\n            break;\n        case LAYOUTS.VERTICAL_FILMSTRIP_VIEW:\n            tooltipPosition = 'left';\n            break;\n        default:\n            tooltipPosition = 'top';\n        }\n\n        return (\n            <div>\n                { showAudioMutedIndicator ? <AudioMutedIndicator tooltipPosition = { tooltipPosition } /> : null }\n                { showVideoMutedIndicator ? <VideoMutedIndicator tooltipPosition = { tooltipPosition } /> : null }\n                { _showModeratorIndicator ? <ModeratorIndicator tooltipPosition = { tooltipPosition } /> : null }\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code StatusIndicators}'s props.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The own props of the component.\n * @private\n * @returns {{\n *     _currentLayout: string,\n *     _showModeratorIndicator: boolean\n * }}\n*/\nfunction _mapStateToProps(state, ownProps) {\n    const { participantID } = ownProps;\n\n    // Only the local participant won't have id for the time when the conference is not yet joined.\n    const participant = participantID ? getParticipantById(state, participantID) : getLocalParticipant(state);\n\n    return {\n        _currentLayout: getCurrentLayout(state),\n        _showModeratorIndicator:\n            !interfaceConfig.DISABLE_FOCUS_INDICATOR && participant && participant.role === PARTICIPANT_ROLE.MODERATOR\n    };\n}\n\nexport default connect(_mapStateToProps)(StatusIndicators);\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    SET_FILMSTRIP_ENABLED,\n    SET_FILMSTRIP_HOVERED,\n    SET_FILMSTRIP_VISIBLE,\n    SET_HORIZONTAL_VIEW_DIMENSIONS,\n    SET_TILE_VIEW_DIMENSIONS\n} from './actionTypes';\n\nconst DEFAULT_STATE = {\n    /**\n     * The indicator which determines whether the {@link Filmstrip} is enabled.\n     *\n     * @public\n     * @type {boolean}\n     */\n    enabled: true,\n\n    /**\n     * The horizontal view dimensions.\n     *\n     * @public\n     * @type {Object}\n     */\n    horizontalViewDimensions: {},\n\n    /**\n     * The tile view dimensions.\n     *\n     * @public\n     * @type {Object}\n     */\n    tileViewDimensions: {},\n\n    /**\n     * The indicator which determines whether the {@link Filmstrip} is visible.\n     *\n     * @public\n     * @type {boolean}\n     */\n    visible: true\n};\n\nReducerRegistry.register(\n    'features/filmstrip',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case SET_FILMSTRIP_ENABLED:\n            return {\n                ...state,\n                enabled: action.enabled\n            };\n\n        case SET_FILMSTRIP_HOVERED:\n            return {\n                ...state,\n\n                /**\n                 * The indicator which determines whether the {@link Filmstrip}\n                 * is being hovered (over).\n                 *\n                 * @public\n                 * @type {boolean}\n                 */\n                hovered: action.hovered\n            };\n\n        case SET_FILMSTRIP_VISIBLE:\n            return {\n                ...state,\n                visible: action.visible\n            };\n\n        case SET_HORIZONTAL_VIEW_DIMENSIONS:\n            return {\n                ...state,\n                horizontalViewDimensions: action.dimensions\n            };\n        case SET_TILE_VIEW_DIMENSIONS:\n            return {\n                ...state,\n                tileViewDimensions: action.dimensions\n            };\n        }\n\n        return state;\n    });\n","// @flow\n\nimport { StateListenerRegistry, equals } from '../base/redux';\nimport Filmstrip from '../../../modules/UI/videolayout/Filmstrip';\nimport VideoLayout from '../../../modules/UI/videolayout/VideoLayout';\nimport { getCurrentLayout, getTileViewGridDimensions, shouldDisplayTileView, LAYOUTS } from '../video-layout';\n\nimport { setHorizontalViewDimensions, setTileViewDimensions } from './actions';\n\n/**\n * Listens for changes in the number of participants to calculate the dimensions of the tile view grid and the tiles.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/base/participants'].length,\n    /* listener */ (numberOfParticipants, store) => {\n        const state = store.getState();\n\n        if (shouldDisplayTileView(state)) {\n            const gridDimensions = getTileViewGridDimensions(state);\n            const oldGridDimensions = state['features/filmstrip'].tileViewDimensions.gridDimensions;\n            const { clientHeight, clientWidth } = state['features/base/responsive-ui'];\n\n            if (!equals(gridDimensions, oldGridDimensions)) {\n                store.dispatch(setTileViewDimensions(gridDimensions, {\n                    clientHeight,\n                    clientWidth\n                }));\n            }\n        }\n    });\n\n/**\n * Listens for changes in the selected layout to calculate the dimensions of the tile view grid and horizontal view.\n */\nStateListenerRegistry.register(\n    /* selector */ state => getCurrentLayout(state),\n    /* listener */ (layout, store) => {\n        const state = store.getState();\n\n        switch (layout) {\n        case LAYOUTS.TILE_VIEW: {\n            const { clientHeight, clientWidth } = state['features/base/responsive-ui'];\n\n            store.dispatch(setTileViewDimensions(\n                getTileViewGridDimensions(state), {\n                    clientHeight,\n                    clientWidth\n                }));\n            break;\n        }\n        case LAYOUTS.HORIZONTAL_FILMSTRIP_VIEW:\n            store.dispatch(setHorizontalViewDimensions(state['features/base/responsive-ui'].clientHeight));\n            break;\n        case LAYOUTS.VERTICAL_FILMSTRIP_VIEW:\n            // Once the thumbnails are reactified this should be moved there too.\n            Filmstrip.resizeThumbnailsForVerticalView();\n            break;\n        }\n    });\n\n/**\n * Handles on stage participant updates.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/large-video'].participantId,\n    /* listener */ (participantId, store, oldParticipantId) => {\n        const newThumbnail = VideoLayout.getSmallVideo(participantId);\n        const oldThumbnail = VideoLayout.getSmallVideo(oldParticipantId);\n\n        if (newThumbnail) {\n            newThumbnail.updateView();\n        }\n\n        if (oldThumbnail) {\n            oldThumbnail.updateView();\n        }\n    }\n);\n","// @flow\n\nimport { getNearestReceiverVideoQualityLevel, setMaxReceiverVideoQuality } from '../base/conference';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { CLIENT_RESIZED } from '../base/responsive-ui';\nimport Filmstrip from '../../../modules/UI/videolayout/Filmstrip';\nimport {\n    getCurrentLayout,\n    LAYOUTS,\n    shouldDisplayTileView\n} from '../video-layout';\n\nimport { setHorizontalViewDimensions, setTileViewDimensions } from './actions';\nimport { SET_HORIZONTAL_VIEW_DIMENSIONS, SET_TILE_VIEW_DIMENSIONS } from './actionTypes';\n\n/**\n * The middleware of the feature Filmstrip.\n */\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case CLIENT_RESIZED: {\n        const state = store.getState();\n        const layout = getCurrentLayout(state);\n\n        switch (layout) {\n        case LAYOUTS.TILE_VIEW: {\n            const { gridDimensions } = state['features/filmstrip'].tileViewDimensions;\n            const { clientHeight, clientWidth } = state['features/base/responsive-ui'];\n\n            store.dispatch(setTileViewDimensions(gridDimensions, {\n                clientHeight,\n                clientWidth\n            }));\n            break;\n        }\n        case LAYOUTS.HORIZONTAL_FILMSTRIP_VIEW:\n            store.dispatch(setHorizontalViewDimensions(state['features/base/responsive-ui'].clientHeight));\n            break;\n        }\n        break;\n    }\n    case SET_TILE_VIEW_DIMENSIONS: {\n        const state = store.getState();\n\n        if (shouldDisplayTileView(state)) {\n            const { width, height } = state['features/filmstrip'].tileViewDimensions.thumbnailSize;\n            const qualityLevel = getNearestReceiverVideoQualityLevel(height);\n\n            store.dispatch(setMaxReceiverVideoQuality(qualityLevel));\n\n            // Once the thumbnails are reactified this should be moved there too.\n            Filmstrip.resizeThumbnailsForTileView(width, height, true);\n        }\n        break;\n    }\n    case SET_HORIZONTAL_VIEW_DIMENSIONS: {\n        const state = store.getState();\n\n        if (getCurrentLayout(state) === LAYOUTS.HORIZONTAL_FILMSTRIP_VIEW) {\n            const { horizontalViewDimensions = {} } = state['features/filmstrip'];\n\n            // Once the thumbnails are reactified this should be moved there too.\n            Filmstrip.resizeThumbnailsForHorizontalView(horizontalViewDimensions, true);\n        }\n\n        break;\n    }\n    }\n\n    return result;\n});\n\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './constants';\nexport * from './functions';\n\nimport './reducer';\nimport './subscriber';\nimport './middleware';\n","// @flow\n\nimport {\n    CALL,\n    CHECK,\n    COLLECT,\n    FOLD,\n    GIVE_CARDS,\n    JOIN_GAME,\n    RAISE,\n    SHOW_CARDS,\n    START_GAME,\n    TAKE_OVER,\n    THROW_AWAY_CARDS\n} from './actionTypes';\nimport { joinGame, startGame, stopGame, takeOver } from './actions';\nimport type { Card, PlayerState, PokerState } from './types';\nimport {\n    dominantSpeakerChanged,\n    getLocalParticipant,\n    getParticipantCount,\n    getParticipantDisplayName,\n    getParticipants\n} from '../base/participants';\nimport { activePlayers, cardSlotsOf, isNotInSeatControl } from './logic/helpers';\nimport { getCurrentConference } from '../base/conference';\nimport { getCurrentLayout, LAYOUTS } from '../video-layout';\n\nconst POKER_ACTIONS = [\n    GIVE_CARDS,\n    CHECK,\n    CALL,\n    RAISE,\n    FOLD,\n    SHOW_CARDS,\n    THROW_AWAY_CARDS,\n    COLLECT,\n    TAKE_OVER,\n    JOIN_GAME,\n    START_GAME ];\n\nexport function toolboxAction(state: Object) {\n    const nick = getNick(state);\n    const pokerState = state['features/poker'];\n\n    if (isNotInSeatControl(pokerState, nick)) {\n        return takeOver(nick);\n    }\n\n    const players = pokerState.common.players;\n    const player = players[nick] || { actions: [ JOIN_GAME ] };\n\n    return [ startGame(), joinGame(nick), stopGame() ].filter(action => player.actions.includes(action.type))[0];\n}\n\nexport function pokerActionTypes(state: Object, nick: string): Array<string> {\n    const localNick = getParticipantDisplayName(state, getLocalParticipant(state).id);\n    const pokerState = state['features/poker'];\n    const player = pokerState.common.players[nick] || { actions: [ JOIN_GAME ] };\n\n    if (isNotInSeatControl(pokerState, localNick)) {\n        return [ TAKE_OVER ];\n    }\n\n    return POKER_ACTIONS.filter(action => player.actions.includes(action));\n}\n\nexport function cards(state: Object, nick: string, flippedOnly: boolean = false): Array<Card> {\n    const pokerState: PokerState = state['features/poker'];\n    const nicksCards = cardSlotsOf(pokerState, nick).filter(cardSlot => !flippedOnly || cardSlot.flipped);\n\n    return nicksCards.map(cardSlot => cardSlot.card);\n}\n\nexport function setDominantSpeaker(state: Object): ?Array<string> {\n    const pokerState: PokerState = state.getState()['features/poker'];\n    const conference = getCurrentConference(state);\n\n    if (pokerState.common.stagePerformances.length > 0) {\n        const performance = pokerState.common.stagePerformances.splice(0, 1)[0];\n        const participantId = getParticipantId(state, performance.nick) || performance.nick;\n\n        if (participantId && conference) {\n            state.dispatch(dominantSpeakerChanged(participantId, conference));\n        }\n\n        setTimeout(() => {\n            setDominantSpeaker(state);\n        }, performance.durationMillis);\n\n    }\n}\n\nexport function getParticipantId(state: Object, nick: ?string): ?Array<string> {\n    return getParticipants(state).filter(participant => participant.name === nick)[0]?.id;\n}\n\nexport function getNick(state: Object): string {\n    return getParticipantDisplayName(state, getLocalParticipant(state).id);\n}\n\nexport function currentPlayer(state: Object, nick: string): boolean {\n    const pokerState: PokerState = state['features/poker'];\n\n    return pokerState.common.game.round.currentPlayer === nick;\n}\n\nexport function playerState(state: Object, nick: string): PlayerState {\n    const pokerState: PokerState = state['features/poker'];\n\n    if (!pokerState.common.players[nick]) {\n        return 'spectator';\n    }\n    if (pokerState.common.game.state === 'none') {\n        return 'joined';\n    }\n    if (pokerState.common.game.round.bettingRound.raisePlayer === nick) {\n        return 'raiser';\n    }\n    if (pokerState.common.game.round.currentPlayer === nick) {\n        return 'current';\n    }\n    if (pokerState.common.players[nick].fold) {\n        return 'folded';\n    }\n\n    return 'waiting';\n}\n\nexport function playerStateI18nParams(state: Object, nick: string): Object {\n    const pokerState: PokerState = state['features/poker'];\n    const activeNicks = activePlayers(pokerState);\n\n    const indexCurrent = activeNicks.indexOf(pokerState.common.game.round.currentPlayer);\n    const indexNick = activeNicks.indexOf(nick);\n\n    return {\n        cue: (indexNick - indexCurrent + activeNicks.length) % activeNicks.length\n    };\n}\n\nexport function getFontPercentage(state: Object): number {\n    const participantCount = getParticipantCount(state);\n    const currentLayout = getCurrentLayout(state);\n\n    return currentLayout === LAYOUTS.TILE_VIEW ? 200 / Math.ceil(Math.sqrt(participantCount)) : 100;\n}\n","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import * as colors from './colors';\nimport themed from './utils/themed'; // Cards on a board\n\nexport var e100 = themed({\n  light: \"box-shadow: 0 1px 1px \".concat(colors.N50A, \", 0 0 1px 0 \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 1px 1px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Inline dialogs\n\nexport var e200 = themed({\n  light: \"box-shadow: 0 4px 8px -2px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 4px 8px -2px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Modals\n\nexport var e300 = themed({\n  light: \"box-shadow: 0 8px 16px -4px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 8px 16px -4px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Panels\n\nexport var e400 = themed({\n  light: \"box-shadow: 0 12px 24px -6px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 12px 24px -6px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Flag messages (notifications)\n\nexport var e500 = themed({\n  light: \"box-shadow: 0 20px 32px -8px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 20px 32px -8px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n});","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport { gridSize, fontSize } from './index';\n\nvar baseHeading = function baseHeading(size, lineHeight) {\n  return \"\\n  font-size: \".concat(size / fontSize(), \"em;\\n  font-style: inherit;\\n  line-height: \").concat(lineHeight / size, \";\\n\");\n};\n\nexport var h900 = function h900() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(35, 40), colors.heading, gridSize() * 6.5);\n};\nexport var h800 = function h800() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(29, 32), colors.heading, gridSize() * 5);\n};\nexport var h700 = function h700() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.01em;\\n  margin-top: \", \"px;\\n\"], baseHeading(24, 28), colors.heading, gridSize() * 5);\n};\nexport var h600 = function h600() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  margin-top: \", \"px;\\n\"], baseHeading(20, 24), colors.heading, gridSize() * 3.5);\n};\nexport var h500 = function h500() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.006em;\\n  margin-top: \", \"px;\\n\"], baseHeading(16, 20), colors.heading, gridSize() * 3);\n};\nexport var h400 = function h400() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  letter-spacing: -0.003em;\\n  margin-top: \", \"px;\\n\"], baseHeading(14, 16), colors.heading, gridSize() * 2);\n};\nexport var h300 = function h300() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n  text-transform: uppercase;\\n\"], baseHeading(12, 16), colors.heading, gridSize() * 2.5);\n};\nexport var h200 = function h200() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 600;\\n  margin-top: \", \"px;\\n\"], baseHeading(12, 16), colors.subtleHeading, gridSize() * 2);\n};\nexport var h100 = function h100() {\n  return css([\"\\n  \", \" color: \", \";\\n  font-weight: 700;\\n  margin-top: \", \"px;\\n\"], baseHeading(11, 16), colors.subtleHeading, gridSize() * 2);\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nexport default (function (_ref) {\n  var children = _ref.children,\n      props = _ref.props,\n      theme = _ref.theme;\n  var appearance = _typeof(props) === 'object' ? 'default' : props;\n  var merged = _typeof(props) === 'object' ? _objectSpread({}, props) : {};\n  Object.keys(theme).forEach(function (key) {\n    if (!(key in merged)) {\n      merged[key] = theme[key]({\n        appearance: appearance\n      });\n    }\n  });\n  return children(merged);\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport styled, { css } from 'styled-components';\nimport * as colors from '../colors';\nimport { createTheme } from '../utils/createTheme';\n\nvar orTextColor = function orTextColor(preferred) {\n  return function (p) {\n    return p[preferred] || p.textColor;\n  };\n};\n\nvar Div = styled.div.withConfig({\n  displayName: \"Reset__Div\",\n  componentId: \"sc-15i6ali-0\"\n})([\"\\n  \", \";\\n\"], function (p) {\n  return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n\\n    a {\\n      color: \", \";\\n    }\\n    a:hover {\\n      color: \", \";\\n    }\\n    a:active {\\n      color: \", \";\\n    }\\n    a:focus {\\n      outline-color: \", \";\\n    }\\n    h1,\\n    h2,\\n    h3,\\n    h4,\\n    h5 {\\n      color: \", \";\\n    }\\n    h6 {\\n      color: \", \";\\n    }\\n    small {\\n      color: \", \";\\n    }\\n  \"], p.backgroundColor, p.textColor, orTextColor('linkColor'), orTextColor('linkColorHover'), orTextColor('linkColorActive'), orTextColor('linkColorOutline'), orTextColor('headingColor'), orTextColor('subtleHeadingColor'), orTextColor('subtleTextColor'));\n});\nexport var ResetTheme = createTheme(function () {\n  return {\n    backgroundColor: colors.N0,\n    linkColor: colors.B400,\n    linkColorHover: colors.B300,\n    linkColorActive: colors.B500,\n    linkColorOutline: colors.B100,\n    headingColor: colors.N800,\n    subtleHeadingColor: colors.N200,\n    subtleTextColor: colors.N200,\n    textColor: colors.N900\n  };\n});\nexport function Reset(props) {\n  return React.createElement(ResetTheme.Provider, {\n    value: props.theme\n  }, React.createElement(ResetTheme.Consumer, null, function (tokens) {\n    return React.createElement(Div, _extends({}, _objectSpread({}, tokens, {\n      mode: undefined\n    }), props), props.children);\n  }));\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React from 'react';\nimport Theme from './components/Theme'; // Pre-executes the theme and passes it as a prop to the supplied component.\n// This is useful for ensuring that the current theme is accessible as props\n// in styled-components.\n\nexport function withTheme(InnerComponent) {\n  return function ComponentWithTheme(props) {\n    return React.createElement(Theme.Consumer, null, function (tokens) {\n      return React.createElement(InnerComponent, _extends({}, props, {\n        theme: tokens\n      }));\n    });\n  };\n}","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","// @flow\n\nimport { toState } from '../base/redux';\nimport { getServerURL } from '../base/settings';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Retrieves the default URL for the app. This can either come from a prop to\n * the root App component or be configured in the settings.\n *\n * @param {Function|Object} stateful - The redux store or {@code getState}\n * function.\n * @returns {string} - Default URL for the app.\n */\nexport function getDefaultURL(stateful: Function | Object) {\n    const state = toState(stateful);\n    const { href } = window.location;\n\n    if (href) {\n        return href;\n    }\n\n    return getServerURL(state);\n}\n\n/**\n * Returns application name.\n *\n * @returns {string} The application name.\n */\nexport function getName() {\n    return interfaceConfig.APP_NAME;\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/app');\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { setRoom } from '../base/conference';\nimport {\n    configWillLoad,\n    createFakeConfig,\n    loadConfigError,\n    restoreConfig,\n    setConfig,\n    storeConfig\n} from '../base/config';\nimport { connect, disconnect, setLocationURL } from '../base/connection';\nimport { loadConfig } from '../base/lib-jitsi-meet';\nimport { MEDIA_TYPE } from '../base/media';\nimport { toState } from '../base/redux';\nimport { createDesiredLocalTracks, isLocalVideoTrackMuted, isLocalTrackMuted } from '../base/tracks';\nimport {\n    addHashParamsToURL,\n    getBackendSafeRoomName,\n    getLocationContextRoot,\n    parseURIString,\n    toURLString\n} from '../base/util';\nimport { showNotification } from '../notifications';\nimport { setFatalError } from '../overlay';\n\nimport {\n    getDefaultURL,\n    getName\n} from './functions';\nimport logger from './logger';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n\n/**\n * Triggers an in-app navigation to a specific route. Allows navigation to be\n * abstracted between the mobile/React Native and Web/React applications.\n *\n * @param {string|undefined} uri - The URI to which to navigate. It may be a\n * full URL with an HTTP(S) scheme, a full or partial URI with the app-specific\n * scheme, or a mere room name.\n * @returns {Function}\n */\nexport function appNavigate(uri: ?string) {\n    return async (dispatch: Dispatch<any>, getState: Function) => {\n        let location = parseURIString(uri);\n\n        // If the specified location (URI) does not identify a host, use the app's\n        // default.\n        if (!location || !location.host) {\n            const defaultLocation = parseURIString(getDefaultURL(getState));\n\n            if (location) {\n                location.host = defaultLocation.host;\n\n                // FIXME Turn location's host, hostname, and port properties into\n                // setters in order to reduce the risks of inconsistent state.\n                location.hostname = defaultLocation.hostname;\n                location.pathname\n                    = defaultLocation.pathname + location.pathname.substr(1);\n                location.port = defaultLocation.port;\n                location.protocol = defaultLocation.protocol;\n            } else {\n                location = defaultLocation;\n            }\n        }\n\n        location.protocol || (location.protocol = 'https:');\n        const { contextRoot, host, room } = location;\n        const locationURL = new URL(location.toString());\n\n        // Disconnect from any current conference.\n        // FIXME: unify with web.\n        if (navigator.product === 'ReactNative') {\n            dispatch(disconnect());\n        }\n\n        dispatch(configWillLoad(locationURL, room));\n\n        let protocol = location.protocol.toLowerCase();\n\n        // The React Native app supports an app-specific scheme which is sure to not\n        // be supported by fetch.\n        protocol !== 'http:' && protocol !== 'https:' && (protocol = 'https:');\n\n        const baseURL = `${protocol}//${host}${contextRoot || '/'}`;\n        let url = `${baseURL}config.js`;\n\n        // XXX In order to support multiple shards, tell the room to the deployment.\n        room && (url += `?room=${getBackendSafeRoomName(room)}`);\n\n        let config;\n\n        // Avoid (re)loading the config when there is no room.\n        if (!room) {\n            config = restoreConfig(baseURL);\n        }\n\n        if (!config) {\n            try {\n                config = await loadConfig(url);\n                dispatch(storeConfig(baseURL, config));\n            } catch (error) {\n                config = restoreConfig(baseURL);\n\n                if (!config) {\n                    if (room) {\n                        dispatch(loadConfigError(error, locationURL));\n\n                        return;\n                    }\n\n                    // If there is no room (we are on the welcome page), don't fail, just create a fake one.\n                    logger.warn('Failed to load config but there is no room, applying a fake one');\n                    config = createFakeConfig(baseURL);\n                }\n            }\n        }\n\n        if (getState()['features/base/config'].locationURL !== locationURL) {\n            dispatch(loadConfigError(new Error('Config no longer needed!'), locationURL));\n\n            return;\n        }\n\n        dispatch(setLocationURL(locationURL));\n        dispatch(setConfig(config));\n        dispatch(setRoom(room));\n\n        // FIXME: unify with web, currently the connection and track creation happens in conference.js.\n        if (room && navigator.product === 'ReactNative') {\n            dispatch(createDesiredLocalTracks());\n            dispatch(connect());\n        }\n    };\n}\n\n/**\n * Redirects to another page generated by replacing the path in the original URL\n * with the given path.\n *\n * @param {(string)} pathname - The path to navigate to.\n * @returns {Function}\n */\nexport function redirectWithStoredParams(pathname: string) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { locationURL } = getState()['features/base/connection'];\n        const newLocationURL = new URL(locationURL.href);\n\n        newLocationURL.pathname = pathname;\n        window.location.assign(newLocationURL.toString());\n    };\n}\n\n/**\n * Assigns a specific pathname to window.location.pathname taking into account\n * the context root of the Web app.\n *\n * @param {string} pathname - The pathname to assign to\n * window.location.pathname. If the specified pathname is relative, the context\n * root of the Web app will be prepended to the specified pathname before\n * assigning it to window.location.pathname.\n * @returns {Function}\n */\nexport function redirectToStaticPage(pathname: string) {\n    return () => {\n        const windowLocation = window.location;\n        let newPathname = pathname;\n\n        if (!newPathname.startsWith('/')) {\n            // A pathname equal to ./ specifies the current directory. It will be\n            // fine but pointless to include it because contextRoot is the current\n            // directory.\n            newPathname.startsWith('./')\n                && (newPathname = newPathname.substring(2));\n            newPathname = getLocationContextRoot(windowLocation) + newPathname;\n        }\n\n        windowLocation.pathname = newPathname;\n    };\n}\n\n/**\n * Reloads the page.\n *\n * @protected\n * @returns {Function}\n */\nexport function reloadNow() {\n    return (dispatch: Dispatch<Function>, getState: Function) => {\n        dispatch(setFatalError(undefined));\n\n        const state = getState();\n        const { locationURL } = state['features/base/connection'];\n\n        // Preserve the local tracks muted state after the reload.\n        const newURL = addTrackStateToURL(locationURL, state);\n\n        logger.info(`Reloading the conference using URL: ${locationURL}`);\n\n        if (navigator.product === 'ReactNative') {\n            dispatch(appNavigate(toURLString(newURL)));\n        } else {\n            dispatch(reloadWithStoredParams());\n        }\n    };\n}\n\n/**\n * Adds the current track state to the passed URL.\n *\n * @param {URL} url - The URL that will be modified.\n * @param {Function|Object} stateful - The redux store or {@code getState} function.\n * @returns {URL} - Returns the modified URL.\n */\nfunction addTrackStateToURL(url, stateful) {\n    const state = toState(stateful);\n    const tracks = state['features/base/tracks'];\n    const isVideoMuted = isLocalVideoTrackMuted(tracks);\n    const isAudioMuted = isLocalTrackMuted(tracks, MEDIA_TYPE.AUDIO);\n\n    return addHashParamsToURL(new URL(url), { // use new URL object in order to not pollute the passed parameter.\n        'config.startWithAudioMuted': isAudioMuted,\n        'config.startWithVideoMuted': isVideoMuted\n    });\n\n}\n\n/**\n * Reloads the page by restoring the original URL.\n *\n * @returns {Function}\n */\nexport function reloadWithStoredParams() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const { locationURL } = state['features/base/connection'];\n\n        // Preserve the local tracks muted states.\n        const newURL = addTrackStateToURL(locationURL, state);\n        const windowLocation = window.location;\n        const oldSearchString = windowLocation.search;\n\n        windowLocation.replace(newURL.toString());\n\n        if (newURL.search === oldSearchString) {\n            // NOTE: Assuming that only the hash or search part of the URL will\n            // be changed!\n            // location.replace will not trigger redirect/reload when\n            // only the hash params are changed. That's why we need to call\n            // reload in addition to replace.\n            windowLocation.reload();\n        }\n    };\n}\n\n/**\n * Check if the welcome page is enabled and redirects to it.\n * If requested show a thank you dialog before that.\n * If we have a close page enabled, redirect to it without\n * showing any other dialog.\n *\n * @param {Object} options - Used to decide which particular close page to show\n * or if close page is disabled, whether we should show the thankyou dialog.\n * @param {boolean} options.showThankYou - Whether we should\n * show thank you dialog.\n * @param {boolean} options.feedbackSubmitted - Whether feedback was submitted.\n * @returns {Function}\n */\nexport function maybeRedirectToWelcomePage(options: Object = {}) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n\n        const {\n            enableClosePage\n        } = getState()['features/base/config'];\n\n        // if close page is enabled redirect to it, without further action\n        if (enableClosePage) {\n            const { isGuest } = getState()['features/base/jwt'];\n\n            // save whether current user is guest or not, before navigating\n            // to close page\n            window.sessionStorage.setItem('guest', isGuest);\n\n            let path = 'close.html';\n\n            if (interfaceConfig.SHOW_PROMOTIONAL_CLOSE_PAGE) {\n                path = 'close3.html';\n            } else if (!options.feedbackSubmitted) {\n                path = 'close2.html';\n            }\n\n            dispatch(redirectToStaticPage(`static/${path}`));\n\n            return;\n        }\n\n        // else: show thankYou dialog only if there is no feedback\n        if (options.showThankYou) {\n            dispatch(showNotification({\n                titleArguments: { appName: getName() },\n                titleKey: 'dialog.thankYou'\n            }));\n        }\n\n        // if Welcome page is enabled redirect to welcome page after 3 sec, if\n        // there is a thank you message to be shown, 0.5s otherwise.\n        if (getState()['features/base/config'].enableWelcomePage) {\n            setTimeout(\n                () => {\n                    dispatch(redirectWithStoredParams('/'));\n                },\n                options.showThankYou ? 3000 : 500);\n        }\n    };\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/chrome-banner');\n","// @flow\n\nimport { jitsiLocalStorage } from 'js-utils';\nimport React, { PureComponent } from 'react';\n\nimport {\n    createChromeExtensionBannerEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { getCurrentConference } from '../../base/conference/functions';\nimport { Icon, IconClose } from '../../base/icons';\nimport { translate } from '../../base/i18n';\nimport { browser } from '../../base/lib-jitsi-meet';\nimport { connect } from '../../base/redux';\nimport {\n    checkChromeExtensionsInstalled,\n    isMobileBrowser\n} from '../../base/environment/utils';\n\nimport logger from '../logger';\n\n\ndeclare var interfaceConfig: Object;\n\nconst emptyObject = {};\n\n/**\n * Local storage key name for flag telling if user checked 'Don't show again' checkbox on the banner\n * If the user checks this before closing the banner, next time he will access a jitsi domain\n * the banner will not be shown regardless of extensions being installed or not.\n */\nconst DONT_SHOW_AGAIN_CHECKED = 'hide_chrome_extension_banner';\n\n/**\n * The type of the React {@code PureComponent} props of {@link ChromeExtensionBanner}.\n */\ntype Props = {\n\n    /**\n     * Contains info about installed/to be installed chrome extension(s).\n     */\n    bannerCfg: Object,\n\n    /**\n     * Conference data, if any\n     */\n    conference: Object,\n\n    /**\n     * Whether I am the current recorder.\n     */\n    iAmRecorder: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n};\n\n/**\n * The type of the React {@link PureComponent} state of {@link ChromeExtensionBanner}.\n */\ntype State = {\n\n    /**\n     * Keeps the current value of dont show again checkbox\n     */\n    dontShowAgainChecked: boolean,\n\n    /**\n     * Tells whether user pressed install extension or close button.\n     */\n    closePressed: boolean,\n\n    /**\n     * Tells whether should show the banner or not based on extension being installed or not.\n     */\n    shouldShow: boolean,\n};\n\n/**\n * Implements a React {@link PureComponent} which displays a banner having a link to the chrome extension.\n * @class ChromeExtensionBanner\n * @extends PureComponent\n */\nclass ChromeExtensionBanner extends PureComponent<Props, State> {\n    /**\n     * Initializes a new {@code ChromeExtensionBanner} instance.\n     *\n     * @param {Object} props - The read-only React {@code PureComponent} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n        this.state = {\n            dontShowAgainChecked: false,\n            closePressed: false,\n            shouldShow: false\n        };\n\n        this._onClosePressed = this._onClosePressed.bind(this);\n        this._onInstallExtensionClick = this._onInstallExtensionClick.bind(this);\n        this._shouldNotRender = this._shouldNotRender.bind(this);\n        this._onDontShowAgainChange = this._onDontShowAgainChange.bind(this);\n    }\n\n    /**\n     * Executed on component update.\n     * Checks whether any chrome extension from the config is installed.\n     *\n     * @inheritdoc\n     */\n    async componentDidUpdate(prevProps) {\n        if (!this._isSupportedEnvironment()) {\n            return;\n        }\n\n        const { bannerCfg } = this.props;\n        const prevBannerCfg = prevProps.bannerCfg;\n\n        if (bannerCfg.url && !prevBannerCfg.url) {\n            logger.info('Chrome extension URL found.');\n        }\n\n        if ((bannerCfg.chromeExtensionsInfo || []).length && !(prevBannerCfg.chromeExtensionsInfo || []).length) {\n            logger.info('Chrome extension(s) info found.');\n        }\n\n        const hasExtensions = await checkChromeExtensionsInstalled(this.props.bannerCfg);\n\n        if (\n            hasExtensions\n            && hasExtensions.length\n            && hasExtensions.every(ext => !ext)\n            && !this.state.shouldShow\n        ) {\n            this.setState({ shouldShow: true }); // eslint-disable-line\n        }\n    }\n\n    /**\n     * Checks whether the feature is enabled and whether the environment(browser/os)\n     * supports it.\n     *\n     * @returns {boolean}\n     */\n    _isSupportedEnvironment() {\n        return interfaceConfig.SHOW_CHROME_EXTENSION_BANNER\n            && browser.isChrome()\n            && !isMobileBrowser();\n    }\n\n    _onClosePressed: () => void;\n\n    /**\n     * Closes the banner for the current session.\n     *\n     * @returns {void}\n     */\n    _onClosePressed() {\n        sendAnalytics(createChromeExtensionBannerEvent(false));\n        this.setState({ closePressed: true });\n    }\n\n    _onInstallExtensionClick: () => void;\n\n    /**\n     * Opens the chrome extension page.\n     *\n     * @returns {void}\n     */\n    _onInstallExtensionClick() {\n        sendAnalytics(createChromeExtensionBannerEvent(true));\n        window.open(this.props.bannerCfg.url);\n        this.setState({ closePressed: true });\n    }\n\n    _shouldNotRender: () => boolean;\n\n    /**\n     * Checks whether the banner should not be rendered.\n     *\n     * @returns {boolean} Whether to show the banner or not.\n     */\n    _shouldNotRender() {\n        if (!this._isSupportedEnvironment()) {\n            return true;\n        }\n\n        const dontShowAgain = jitsiLocalStorage.getItem(DONT_SHOW_AGAIN_CHECKED) === 'true';\n\n        return !this.props.bannerCfg.url\n            || dontShowAgain\n            || this.state.closePressed\n            || !this.state.shouldShow\n            || this.props.iAmRecorder;\n    }\n\n    _onDontShowAgainChange: (object: Object) => void;\n\n    /**\n    * Handles the current `don't show again` checkbox state.\n    *\n    * @param {Object} event - Input change event.\n    * @returns {void}\n    */\n    _onDontShowAgainChange(event) {\n        this.setState({ dontShowAgainChecked: event.target.checked });\n    }\n\n    /**\n     * Implements React's {@link PureComponent#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (this._shouldNotRender()) {\n            if (this.state.dontShowAgainChecked) {\n                jitsiLocalStorage.setItem(DONT_SHOW_AGAIN_CHECKED, 'true');\n            }\n\n            return null;\n        }\n        const { t } = this.props;\n        const mainClassNames = this.props.conference\n            ? 'chrome-extension-banner chrome-extension-banner__pos_in_meeting'\n            : 'chrome-extension-banner';\n\n        return (\n            <div className = { mainClassNames }>\n                <div className = 'chrome-extension-banner__container'>\n                    <div\n                        className = 'chrome-extension-banner__icon-container' />\n                    <div\n                        className = 'chrome-extension-banner__text-container'>\n                        { t('chromeExtensionBanner.installExtensionText') }\n                    </div>\n                    <div\n                        className = 'chrome-extension-banner__close-container'\n                        onClick = { this._onClosePressed }>\n                        <Icon\n                            className = 'gray'\n                            size = { 12 }\n                            src = { IconClose } />\n                    </div>\n                </div>\n                <div\n                    className = 'chrome-extension-banner__button-container'>\n                    <div\n                        className = 'chrome-extension-banner__button-open-url'\n                        onClick = { this._onInstallExtensionClick }>\n                        <div\n                            className = 'chrome-extension-banner__button-text'>\n                            { t('chromeExtensionBanner.buttonText') }\n                        </div>\n                    </div>\n                </div>\n                <div className = 'chrome-extension-banner__checkbox-container'>\n                    <label className = 'chrome-extension-banner__checkbox-label'>\n                        <input\n                            checked = { this.state.dontShowAgainChecked }\n                            onChange = { this._onDontShowAgainChange }\n                            type = 'checkbox' />\n                        &nbsp;{ t('chromeExtensionBanner.dontShowAgain') }\n                    </label>\n                </div>\n            </div>\n        );\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nconst _mapStateToProps = state => {\n    return {\n        // Using emptyObject so that we don't change the reference every time when _mapStateToProps is called.\n        bannerCfg: state['features/base/config'].chromeExtensionBanner || emptyObject,\n        conference: getCurrentConference(state),\n        iAmRecorder: state['features/base/config'].iAmRecorder\n    };\n};\n\nexport default translate(connect(_mapStateToProps)(ChromeExtensionBanner));\n","/**\n * The type of (redux) action which signals the user has interacted with the\n * page.\n *\n * {\n *     type: USER_INTERACTION_RECEIVED,\n * }\n */\nexport const USER_INTERACTION_RECEIVED = 'USER_INTERACTION_RECEIVED';\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';\nimport { MiddlewareRegistry } from '../redux';\n\nimport { USER_INTERACTION_RECEIVED } from './actionTypes';\n\n/**\n * Reference to any callback that has been created to be invoked on user\n * interaction.\n *\n * @type {Function|null}\n */\nlet userInteractionListener = null;\n\n/**\n * Implements the entry point of the middleware of the feature base/user-interaction.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        _startListeningForUserInteraction(store);\n        break;\n\n    case APP_WILL_UNMOUNT:\n        _stopListeningForUserInteraction();\n        break;\n    }\n\n    return next(action);\n});\n\n/**\n * Callback invoked when the user interacts with the page.\n *\n * @param {Function} dispatch - The redux dispatch function.\n * @param {Object} event - The DOM event for a user interacting with the page.\n * @private\n * @returns {void}\n */\nfunction _onUserInteractionReceived(dispatch, event) {\n    if (event.isTrusted) {\n        dispatch({\n            type: USER_INTERACTION_RECEIVED\n        });\n\n        _stopListeningForUserInteraction();\n    }\n}\n\n/**\n * Registers listeners to notify redux of any user interaction with the page.\n *\n * @param {Object} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _startListeningForUserInteraction({ dispatch }) {\n    _stopListeningForUserInteraction();\n\n    userInteractionListener = _onUserInteractionReceived.bind(null, dispatch);\n\n    window.addEventListener('mousedown', userInteractionListener);\n    window.addEventListener('keydown', userInteractionListener);\n}\n\n/**\n * De-registers listeners for user interaction with the page.\n *\n * @private\n * @returns {void}\n */\nfunction _stopListeningForUserInteraction() {\n    window.removeEventListener('mousedown', userInteractionListener);\n    window.removeEventListener('keydown', userInteractionListener);\n\n    userInteractionListener = null;\n}\n","// @flow\n\nimport { ReducerRegistry } from '../redux';\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';\nimport { USER_INTERACTION_RECEIVED } from './actionTypes';\n\nReducerRegistry.register('features/base/user-interaction', (state = {}, action) => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n    case APP_WILL_UNMOUNT:\n        return {\n            ...state,\n            interacted: false\n        };\n\n    case USER_INTERACTION_RECEIVED:\n        return {\n            ...state,\n            interacted: true\n        };\n    }\n\n    return state;\n});\n","// @flow\n\nimport {\n    CONFERENCE_FAILED,\n    CONFERENCE_JOINED,\n    KICKED_OUT\n} from '../base/conference';\nimport { NOTIFY_CAMERA_ERROR, NOTIFY_MIC_ERROR } from '../base/devices';\nimport { JitsiConferenceErrors } from '../base/lib-jitsi-meet';\nimport {\n    DOMINANT_SPEAKER_CHANGED,\n    PARTICIPANT_KICKED,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_ROLE_CHANGED,\n    SET_LOADABLE_AVATAR_URL,\n    getLocalParticipant,\n    getParticipantById\n} from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { getBaseUrl } from '../base/util';\nimport { appendSuffix } from '../display-name';\nimport { SUBMIT_FEEDBACK_ERROR, SUBMIT_FEEDBACK_SUCCESS } from '../feedback';\nimport { SET_FILMSTRIP_VISIBLE } from '../filmstrip';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * The middleware of the feature {@code external-api}.\n *\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    // We need to do these before executing the rest of the middelware chain\n    switch (action.type) {\n    case SET_LOADABLE_AVATAR_URL: {\n        const { id, loadableAvatarUrl } = action.participant;\n        const participant = getParticipantById(\n            store.getState(),\n            id\n        );\n\n        const result = next(action);\n\n        if (participant) {\n            if (loadableAvatarUrl) {\n                participant.loadableAvatarUrl !== loadableAvatarUrl && APP.API.notifyAvatarChanged(\n                    id,\n                    loadableAvatarUrl\n                );\n            } else {\n                // There is no loadable explicit URL. In this case the Avatar component would\n                // decide to render initials or the default avatar, but the external API needs\n                // a URL when it needs to be rendered, so if there is no initials, we return the default\n                // Avatar URL as if it was a usual avatar URL. If there are (or may be) initials\n                // we send undefined to signal the api user that it's not an URL that needs to be rendered.\n                //\n                // NOTE: we may implement a special URL format later to signal that the avatar is based\n                // on initials, that API consumers can handle as they want, e.g. initials://jm\n                APP.API.notifyAvatarChanged(\n                    id,\n                    participant.name ? undefined : _getDefaultAvatarUrl()\n                );\n            }\n        }\n\n        return result;\n    }\n    }\n\n    const result = next(action);\n\n    // These should happen after the rest of the middleware chain ran\n    switch (action.type) {\n    case CONFERENCE_FAILED: {\n        if (action.conference\n            && action.error.name === JitsiConferenceErrors.PASSWORD_REQUIRED) {\n            APP.API.notifyOnPasswordRequired();\n        }\n        break;\n    }\n\n    case CONFERENCE_JOINED: {\n        const state = store.getState();\n        const { room } = state['features/base/conference'];\n        const { loadableAvatarUrl, name, id } = getLocalParticipant(state);\n\n        APP.API.notifyConferenceJoined(\n            room,\n            id,\n            {\n                displayName: name,\n                formattedDisplayName: appendSuffix(\n                    name,\n                    interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME\n                ),\n                avatarURL: loadableAvatarUrl\n            }\n        );\n        break;\n    }\n\n    case DOMINANT_SPEAKER_CHANGED:\n        APP.API.notifyDominantSpeakerChanged(action.participant.id);\n        break;\n\n    case KICKED_OUT:\n        APP.API.notifyKickedOut(\n            {\n                id: getLocalParticipant(store.getState()).id,\n                local: true\n            },\n            { id: action.participant.getId() }\n        );\n        break;\n\n    case NOTIFY_CAMERA_ERROR:\n        if (action.error) {\n            APP.API.notifyOnCameraError(\n              action.error.name, action.error.message);\n        }\n        break;\n\n    case NOTIFY_MIC_ERROR:\n        if (action.error) {\n            APP.API.notifyOnMicError(action.error.name, action.error.message);\n        }\n        break;\n\n    case PARTICIPANT_KICKED:\n        APP.API.notifyKickedOut(\n            {\n                id: action.kicked,\n                local: false\n            },\n            { id: action.kicker });\n        break;\n\n    case PARTICIPANT_LEFT:\n        APP.API.notifyUserLeft(action.participant.id);\n        break;\n\n    case PARTICIPANT_JOINED: {\n        const { participant } = action;\n        const { id, local, name } = participant;\n\n        // The version of external api outside of middleware did not emit\n        // the local participant being created.\n        if (!local) {\n            APP.API.notifyUserJoined(id, {\n                displayName: name,\n                formattedDisplayName: appendSuffix(\n                    name || interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME)\n            });\n        }\n\n        break;\n    }\n\n    case PARTICIPANT_ROLE_CHANGED:\n        APP.API.notifyUserRoleChanged(action.participant.id, action.participant.role);\n        break;\n\n    case SET_FILMSTRIP_VISIBLE:\n        APP.API.notifyFilmstripDisplayChanged(action.visible);\n        break;\n\n    case SUBMIT_FEEDBACK_ERROR:\n        APP.API.notifyFeedbackSubmitted(action.error || 'Unknown error');\n        break;\n\n    case SUBMIT_FEEDBACK_SUCCESS:\n        APP.API.notifyFeedbackSubmitted();\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Returns the absolute URL of the default avatar.\n *\n * @returns {string}\n */\nfunction _getDefaultAvatarUrl() {\n    return new URL('images/avatar.png', getBaseUrl()).href;\n}\n","// @flow\n\nimport { MEDIA_TYPE, VIDEO_TYPE } from '../base/media';\nimport { getLocalParticipant } from '../base/participants';\nimport { StateListenerRegistry } from '../base/redux';\nimport { getTrackByMediaTypeAndParticipant } from '../base/tracks';\nimport { appendSuffix } from '../display-name';\nimport { shouldDisplayTileView } from '../video-layout';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * StateListenerRegistry provides a reliable way of detecting changes to\n * preferred layout state and dispatching additional actions.\n */\nStateListenerRegistry.register(\n    /* selector */ state => shouldDisplayTileView(state),\n    /* listener */ displayTileView => {\n        APP.API.notifyTileViewChanged(displayTileView);\n    });\n\nStateListenerRegistry.register(\n    /* selector */ state => state['features/base/settings'].displayName,\n    /* listener */ (displayName, store) => {\n        const localParticipant = getLocalParticipant(store.getState());\n\n        // Initial setting of the display name occurs happens on app\n        // initialization, before the local participant is ready. The initial\n        // settings is not desired to be fired anyways, only changes.\n        if (localParticipant) {\n            const { id } = localParticipant;\n\n            APP.API.notifyDisplayNameChanged(id, {\n                displayName,\n                formattedDisplayName: appendSuffix(\n                    displayName,\n                    interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME)\n            });\n        }\n    });\n\n/**\n * Updates the on stage participant value.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/large-video'].participantId,\n    /* listener */ (participantId, store) => {\n        const videoTrack = getTrackByMediaTypeAndParticipant(\n            store.getState()['features/base/tracks'], MEDIA_TYPE.VIDEO, participantId);\n\n        if (videoTrack && videoTrack.videoType === VIDEO_TYPE.CAMERA) {\n            APP.API.notifyOnStageParticipantChanged(participantId);\n        }\n    }\n);\n","/**\n * The type of Redux action which sets the pending notification UID\n * to use it when hiding the notification is necessary, or unset it when\n * undefined (or no param) is passed.\n *\n * {\n *     type: SET_CURRENT_NOTIFICATION_UID,\n *     uid: ?number\n * }\n */\nexport const SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID = 'SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID';\n","// @flow\n\nimport { SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID } from './actionTypes';\n\n/**\n * Sets UID of the the pending notification to use it when hiding\n * the notification is necessary, or unset it when undefined (or no param) is\n * passed.\n *\n * @param {?number} uid - The UID of the notification.\n * @returns {{\n *     type: SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID,\n *     uid: number\n * }}\n */\nexport function setNoAudioSignalNotificationUid(uid: ?number) {\n    return {\n        type: SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID,\n        uid\n    };\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { connect } from '../../base/redux';\nimport { translate } from '../../base/i18n';\nimport { getDialInfoPageURL, shouldDisplayDialIn } from '../../invite';\n\n/**\n * The type of the React {@code Component} props of {@link DialInLink}.\n */\ntype Props = {\n\n    /**\n     * The name of the current conference.\n     */\n    _room: string,\n\n    /**\n     * The current location url of the conference.\n     */\n    _locationURL: string,\n\n\n    /**\n     * The redux state representing the dial-in numbers feature.\n     */\n    _dialIn: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React {@code Component} responsible for displaying a telephone number and\n * conference ID for dialing into a conference.\n *\n * @extends Component\n */\nclass DialInLink extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _room, _locationURL, _dialIn, t } = this.props;\n\n        if (!shouldDisplayDialIn(_dialIn)) {\n            return null;\n        }\n\n        return (\n            <div>{t('toolbar.noAudioSignalDialInDesc')}&nbsp;\n                <a\n                    href = {\n                        getDialInfoPageURL(\n                            _room,\n                            _locationURL\n                        )\n                    }\n                    rel = 'noopener noreferrer'\n                    target = '_blank'>\n                    {t('toolbar.noAudioSignalDialInLinkDesc')}\n                </a>\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code DialInLink} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n    *     _room: string,\n    *     _locationURL: string,\n    *     _dialIn: Object,\n    * }}\n    */\nfunction _mapStateToProps(state) {\n\n    return {\n        _room: state['features/base/conference'].room,\n        _locationURL: state['features/base/connection'].locationURL,\n        _dialIn: state['features/invite']\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(DialInLink));\n","/**\n * The identifier of the sound to be played when we got an event for no audio signal.\n *\n * @type {string}\n */\nexport const NO_AUDIO_SIGNAL_SOUND_ID = 'NO_AUDIO_SIGNAL_SOUND_ID';\n","// @flow\n\nimport React from 'react';\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport { CONFERENCE_JOINED } from '../base/conference';\nimport {\n    formatDeviceLabel,\n    setAudioInputDevice\n} from '../base/devices';\nimport JitsiMeetJS, { JitsiConferenceEvents } from '../base/lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { updateSettings } from '../base/settings';\nimport { playSound, registerSound, unregisterSound } from '../base/sounds';\nimport { hideNotification, showNotification } from '../notifications';\n\nimport { setNoAudioSignalNotificationUid } from './actions';\nimport DialInLink from './components/DialInLink';\nimport { NO_AUDIO_SIGNAL_SOUND_ID } from './constants';\nimport { NO_AUDIO_SIGNAL_SOUND_FILE } from './sounds';\n\nMiddlewareRegistry.register(store => next => async action => {\n    const result = next(action);\n    const { dispatch } = store;\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        dispatch(registerSound(NO_AUDIO_SIGNAL_SOUND_ID, NO_AUDIO_SIGNAL_SOUND_FILE));\n        break;\n    case APP_WILL_UNMOUNT:\n        dispatch(unregisterSound(NO_AUDIO_SIGNAL_SOUND_ID));\n        break;\n    case CONFERENCE_JOINED:\n        _handleNoAudioSignalNotification(store, action);\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Handles the logic of displaying the no audio input detected notification as well as finding a valid device on the\n * system.\n *\n * @param {Store} store - The redux store in which the specified action is being dispatched.\n * @param {Action} action - The redux action {@code CONFERENCE_JOINED} which is being dispatched in the specified redux\n * store.\n * @private\n * @returns {void}\n */\nasync function _handleNoAudioSignalNotification({ dispatch, getState }, action) {\n\n    const { conference } = action;\n\n    conference.on(JitsiConferenceEvents.AUDIO_INPUT_STATE_CHANGE, hasAudioInput => {\n        const { noAudioSignalNotificationUid } = getState()['features/no-audio-signal'];\n\n        // In case the notification is displayed but the conference detected audio input signal we hide it.\n        if (noAudioSignalNotificationUid && hasAudioInput) {\n            dispatch(hideNotification(noAudioSignalNotificationUid));\n            dispatch(setNoAudioSignalNotificationUid());\n        }\n    });\n    conference.on(JitsiConferenceEvents.NO_AUDIO_INPUT, async () => {\n        const { noSrcDataNotificationUid } = getState()['features/base/no-src-data'];\n\n        // In case the 'no data detected from source' notification was already shown, we prevent the\n        // no audio signal notification as it's redundant i.e. it's clear that the users microphone is\n        // muted from system settings.\n        if (noSrcDataNotificationUid) {\n            return;\n        }\n\n        const activeDevice = await JitsiMeetJS.getActiveAudioDevice();\n\n        // In case there is a previous notification displayed just hide it.\n        const { noAudioSignalNotificationUid } = getState()['features/no-audio-signal'];\n\n        if (noAudioSignalNotificationUid) {\n            dispatch(hideNotification(noAudioSignalNotificationUid));\n            dispatch(setNoAudioSignalNotificationUid());\n        }\n\n\n        let descriptionKey = 'toolbar.noAudioSignalDesc';\n        let customActionNameKey;\n        let customActionHandler;\n\n        // In case the detector picked up a device show a notification with a device suggestion\n        if (activeDevice.deviceLabel !== '') {\n            descriptionKey = 'toolbar.noAudioSignalDescSuggestion';\n\n            // Preferably the label should be passed as an argument paired with a i18next string, however\n            // at the point of the implementation the showNotification function only supports doing that for\n            // the description.\n            // TODO Add support for arguments to showNotification title and customAction strings.\n            customActionNameKey = `Switch to ${formatDeviceLabel(activeDevice.deviceLabel)}`;\n            customActionHandler = () => {\n                // Select device callback\n                dispatch(\n                        updateSettings({\n                            userSelectedMicDeviceId: activeDevice.deviceId,\n                            userSelectedMicDeviceLabel: activeDevice.deviceLabel\n                        })\n                );\n\n                dispatch(setAudioInputDevice(activeDevice.deviceId));\n            };\n        }\n\n        const notification = showNotification({\n            titleKey: 'toolbar.noAudioSignalTitle',\n            description: <DialInLink />,\n            descriptionKey,\n            customActionNameKey,\n            customActionHandler\n        });\n\n        dispatch(notification);\n\n        dispatch(playSound(NO_AUDIO_SIGNAL_SOUND_ID));\n\n        // Store the current notification uid so we can check for this state and hide it in case\n        // a new track was added, thus changing the context of the notification\n        dispatch(setNoAudioSignalNotificationUid(notification.uid));\n    });\n}\n","/**\n * The file used for the no audio signal sound notification.\n *\n * @type {string}\n */\nexport const NO_AUDIO_SIGNAL_SOUND_FILE = 'noAudioSignal.mp3';\n","// @flow\n\nimport { ReducerRegistry, set } from '../base/redux';\n\nimport { SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID } from './actionTypes';\n\n/**\n * Reduces the redux actions of the feature no audio signal\n */\nReducerRegistry.register('features/no-audio-signal', (state = {}, action) => {\n    switch (action.type) {\n    case SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID:\n        return set(state, 'noAudioSignalNotificationUid', action.uid);\n    }\n\n    return state;\n});\n","/**\n * The type of Redux action which sets the pending notification UID\n * to use it when hiding the notification is necessary, or unset it when\n * undefined (or no param) is passed.\n *\n * {\n *     type: SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID\n *     uid: ?number\n * }\n */\nexport const SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID = 'SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID';\n","// @flow\n\nimport { SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID } from './actionTypes';\n\n/**\n * Sets UID of the the pending notification to use it when hiding\n * the notification is necessary, or unset it when undefined (or no param) is\n * passed.\n *\n * @param {?number} uid - The UID of the notification.\n * @returns {{\n *     type: SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID,\n *     uid: number\n * }}\n */\nexport function setNoisyAudioInputNotificationUid(uid: ?number) {\n    return {\n        type: SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID,\n        uid\n    };\n}\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport { CONFERENCE_JOINED } from '../base/conference';\nimport { JitsiConferenceEvents } from '../base/lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { playSound, registerSound, unregisterSound } from '../base/sounds';\nimport { hideNotification, showNotification } from '../notifications';\n\nimport { setNoisyAudioInputNotificationUid } from './actions';\nimport { NOISY_AUDIO_INPUT_SOUND_ID } from './constants';\nimport { NOISY_AUDIO_INPUT_SOUND_FILE } from './sounds';\n\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        store.dispatch(registerSound(NOISY_AUDIO_INPUT_SOUND_ID, NOISY_AUDIO_INPUT_SOUND_FILE));\n        break;\n    case APP_WILL_UNMOUNT:\n        store.dispatch(unregisterSound(NOISY_AUDIO_INPUT_SOUND_ID));\n        break;\n    case CONFERENCE_JOINED: {\n        const { dispatch, getState } = store;\n        const { conference } = action;\n\n        conference.on(\n            JitsiConferenceEvents.TRACK_MUTE_CHANGED,\n            track => {\n                const { noisyAudioInputNotificationUid } = getState()['features/noise-detection'];\n\n                // Hide the notification in case the user mutes the microphone\n                if (noisyAudioInputNotificationUid && track.isAudioTrack() && track.isLocal() && track.isMuted()) {\n                    dispatch(hideNotification(noisyAudioInputNotificationUid));\n                    dispatch(setNoisyAudioInputNotificationUid());\n                }\n            });\n        conference.on(\n            JitsiConferenceEvents.NOISY_MIC, () => {\n                const notification = showNotification({\n                    titleKey: 'toolbar.noisyAudioInputTitle',\n                    descriptionKey: 'toolbar.noisyAudioInputDesc'\n                });\n\n                dispatch(notification);\n                dispatch(playSound(NOISY_AUDIO_INPUT_SOUND_ID));\n\n                // we store the last notification id so we can hide it if the mic is muted\n                dispatch(setNoisyAudioInputNotificationUid(notification.uid));\n            });\n        break;\n    }\n    }\n\n    return result;\n});\n","/**\n * The identifier of the sound to be played when we display a you are noisy notification.\n *\n * @type {string}\n */\nexport const NOISY_AUDIO_INPUT_SOUND_ID = 'NOISY_AUDIO_INPUT_SOUND_ID';\n","/**\n * The file used for the noisy audio input notification.\n *\n * @type {string}\n */\nexport const NOISY_AUDIO_INPUT_SOUND_FILE = 'noisyAudioInput.mp3';\n","// @flow\n\nimport { ReducerRegistry, set } from '../base/redux';\n\nimport { SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID } from './actionTypes';\n\n/**\n * Reduces the redux actions of noise detection feature\n */\nReducerRegistry.register('features/noise-detection', (state = {}, action) => {\n    switch (action.type) {\n    case SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID:\n        return set(state, 'noisyAudioInputNotificationUid', action.uid);\n    }\n\n    return state;\n});\n","/**\n * The type of Redux action which sets the pending notification UID\n * to use it for when hiding the notification is necessary, or unsets it when\n * undefined (or no param) is passed.\n *\n * {\n *     type: SET_CURRENT_NOTIFICATION_UID,\n *     uid: ?number\n * }\n * @public\n */\nexport const SET_CURRENT_NOTIFICATION_UID = 'SET_CURRENT_NOTIFICATION_UID';\n","// @flow\n\nimport { SET_CURRENT_NOTIFICATION_UID } from './actionTypes';\n\n/**\n * Sets UID of the the pending notification to use it when hiding\n * the notification is necessary, or unsets it when undefined (or no param) is\n * passed.\n *\n * @param {?number} uid - The UID of the notification.\n * @returns {{\n *     type: SET_CURRENT_NOTIFICATION_UID,\n *     uid: number\n * }}\n */\nexport function setCurrentNotificationUid(uid: ?number) {\n    return {\n        type: SET_CURRENT_NOTIFICATION_UID,\n        uid\n    };\n}\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport { CONFERENCE_JOINED } from '../base/conference';\nimport { JitsiConferenceEvents } from '../base/lib-jitsi-meet';\nimport { setAudioMuted } from '../base/media';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { playSound, registerSound, unregisterSound } from '../base/sounds';\nimport {\n    hideNotification,\n    showNotification\n} from '../notifications';\n\nimport { setCurrentNotificationUid } from './actions';\nimport { TALK_WHILE_MUTED_SOUND_ID } from './constants';\nimport { TALK_WHILE_MUTED_SOUND_FILE } from './sounds';\n\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n    const { dispatch, getState } = store;\n    const { conference } = action;\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        dispatch(registerSound(TALK_WHILE_MUTED_SOUND_ID, TALK_WHILE_MUTED_SOUND_FILE));\n        break;\n    case APP_WILL_UNMOUNT:\n        dispatch(unregisterSound(TALK_WHILE_MUTED_SOUND_ID));\n        break;\n\n    case CONFERENCE_JOINED: {\n        conference.on(\n            JitsiConferenceEvents.TRACK_MUTE_CHANGED,\n            track => {\n                const { currentNotificationUid } = getState()['features/talk-while-muted'];\n\n                if (currentNotificationUid && track.isAudioTrack() && track.isLocal() && !track.isMuted()) {\n                    dispatch(hideNotification(currentNotificationUid));\n                    dispatch(setCurrentNotificationUid());\n                }\n            });\n        conference.on(\n            JitsiConferenceEvents.TALK_WHILE_MUTED, () => {\n                const notification = showNotification({\n                    titleKey: 'toolbar.talkWhileMutedPopup',\n                    customActionNameKey: 'notify.unmute',\n                    customActionHandler: () => dispatch(setAudioMuted(false))\n                });\n\n                dispatch(notification);\n\n                dispatch(playSound(TALK_WHILE_MUTED_SOUND_ID));\n\n                // we store the last start muted notification id that we showed,\n                // so we can hide it when unmuted mic is detected\n                dispatch(setCurrentNotificationUid(notification.uid));\n            });\n        break;\n    }\n    }\n\n    return result;\n});\n","/**\n * The identifier of the sound to be played when we got event for talking while muted.\n *\n * @type {string}\n */\nexport const TALK_WHILE_MUTED_SOUND_ID = 'TALK_WHILE_MUTED_SOUND_ID';\n","/**\n * The file used for the talk while muted sound notification.\n *\n * @type {string}\n */\nexport const TALK_WHILE_MUTED_SOUND_FILE = 'talkWhileMuted.mp3';\n","// @flow\n\nimport { ReducerRegistry, set } from '../base/redux';\n\nimport { SET_CURRENT_NOTIFICATION_UID } from './actionTypes';\n\n/**\n * Reduces the redux actions of the feature talk while muted.\n */\nReducerRegistry.register('features/talk-while-muted', (state = { }, action) => {\n    switch (action.type) {\n    case SET_CURRENT_NOTIFICATION_UID:\n        return set(state, 'currentNotificationUid', action.uid);\n    }\n\n    return state;\n});\n","// @flow\n\nimport React, { Component } from 'react';\nimport { translate } from '../../base/i18n';\n\n/**\n * The type of the React {@code Component} props of {@link OldElectronAPPNotificationDescription}.\n */\ntype Props = {\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * A component that renders the description of the notification for old Jitsi Meet Electron clients.\n *\n * @extends AbstractApp\n */\nexport class OldElectronAPPNotificationDescription extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <div>\n                { t('notify.oldElectronClientDescription1') }\n                <a\n                    href = 'https://github.com/jitsi/jitsi-meet-electron/releases/latest'\n                    rel = 'noopener noreferrer'\n                    target = '_blank'>\n                    { t('notify.oldElectronClientDescription2') }\n                </a>\n                { t('notify.oldElectronClientDescription3') }\n            </div>);\n    }\n\n}\n\nexport default translate(OldElectronAPPNotificationDescription);\n","// @flow\n\nimport React from 'react';\n\nimport { APP_WILL_MOUNT } from '../base/app';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { showErrorNotification } from '../notifications';\n\nimport { isOldJitsiMeetElectronApp } from './functions';\nimport { OldElectronAPPNotificationDescription } from './components';\n\ndeclare var interfaceConfig: Object;\n\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        return _appWillMount(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature that the action {@link APP_WILL_MOUNT} has being dispatched.\n *\n * @param {Store} store - The redux store in which the specified {@code action} is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the specified {@code action}.\n * @param {Action} action - The redux action {@code APP_WILL_MOUNT} which is being dispatched.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the specified {@code action}.\n */\nfunction _appWillMount(store, next, action) {\n    if (isOldJitsiMeetElectronApp()) {\n        const { dispatch } = store;\n\n        dispatch(showErrorNotification({\n            titleKey: 'notify.OldElectronAPPTitle',\n            description: <OldElectronAPPNotificationDescription />\n        }));\n    }\n\n    return next(action);\n}\n","// @flow\n\nimport { browser } from '../../../react/features/base/lib-jitsi-meet';\n\n/**\n * Returns true if Jitsi Meet is running in too old jitsi-meet-electron app and false otherwise.\n *\n * @returns {boolean} - True if Jitsi Meet is running in too old jitsi-meet-electron app and false otherwise.\n */\nexport function isOldJitsiMeetElectronApp() {\n    if (!browser.isElectron()) {\n        return false;\n    }\n\n    const match = navigator.userAgent.match(/(JitsiMeet)\\s*\\/\\s*((\\d+)\\.[^\\s]*)/);\n\n    if (!Array.isArray(match) || match.length < 3) {\n        return false;\n    }\n\n    const majorVersion = Number(match[3]);\n\n    if (isNaN(majorVersion) || majorVersion >= 2) {\n        return false;\n    }\n\n    return true;\n}\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport { CONFERENCE_JOINED, getCurrentConference } from '../base/conference';\nimport { JitsiConferenceEvents } from '../base/lib-jitsi-meet';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\nimport { registerSound, unregisterSound } from '../base/sounds';\nimport { newStateReceived, sendGameState } from './actions';\n\nimport { CARD_TURN_SOUND_FILE } from './sounds';\nimport { CARD_TURN_SOUND_ID, GAME_STATE_CHANGED_EVENT, REQUEST_GAME_STATE_EVENT } from './constants';\nimport { setDominantSpeaker } from './functions';\nimport type { CommonState } from './types';\nimport { participantJoined } from '../base/participants';\n\n/**\n * Implements the middleware of the poker feature.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const { dispatch } = store;\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        dispatch(registerSound(CARD_TURN_SOUND_ID, CARD_TURN_SOUND_FILE));\n        break;\n\n    case APP_WILL_UNMOUNT:\n        dispatch(unregisterSound(CARD_TURN_SOUND_ID));\n        break;\n\n    case CONFERENCE_JOINED:\n        _requestGamesState(action.conference);\n        _registerGameUpdateListener(action.conference, store);\n        dispatch(participantJoined({\n            conference: action.conference,\n            id: 'table',\n            isFakeParticipant: true,\n            name: 'Table'\n        }));\n        break;\n    }\n\n    return next(action);\n});\n\nStateListenerRegistry.register(\n    state => state['features/poker'],\n    (currentState, state = {}) => {\n        const conference = getCurrentConference(state.getState());\n\n        if (conference\n            && currentState.nick\n            && currentState.common.lastModifiedBy === currentState.nick) {\n            conference.sendMessage({\n                state: currentState.common,\n                type: GAME_STATE_CHANGED_EVENT\n            });\n            setDominantSpeaker(state);\n        }\n    });\n\nfunction _registerGameUpdateListener(conference, store) {\n    conference.on(\n        JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,\n        (id, message) => {\n            if (message.type === GAME_STATE_CHANGED_EVENT) {\n                console.log(message);\n\n                const newState: CommonState = message.state;\n\n                store.dispatch(newStateReceived(newState));\n                setDominantSpeaker(store);\n            } else if (message.type === REQUEST_GAME_STATE_EVENT) {\n                store.dispatch(sendGameState());\n            }\n        }\n    );\n}\n\nfunction _requestGamesState(conference) {\n    conference.sendMessage({\n        type: REQUEST_GAME_STATE_EVENT\n    });\n}\n","/**\n * The name of the bundled audio file which will be played for the incoming chat\n * message sound.\n *\n * @type {string}\n */\nexport const CARD_TURN_SOUND_FILE = 'cardPlace1.wav';\n","// @flow\n\nimport type { Action, APokerState } from '../types';\nimport { activePlayers, cardSlotsOf, countCards, currentPlayer } from './helpers';\nimport { CALL, CHECK, COLLECT, FOLD, GIVE_CARDS, RAISE, SHOW_CARDS, THROW_AWAY_CARDS } from '../actionTypes';\n\nexport function canGiveCards(state: APokerState, nick: string): ?Action {\n    const isDealer = state.common.game.dealer === nick;\n    const cardsMissing = Object.keys(state.common.players).some(playerNick => countCards(state, playerNick) < 2);\n\n    return isDealer && cardsMissing ? GIVE_CARDS : null;\n}\n\nexport function canCheck(state: APokerState, nick: string): ?Action {\n    return _isCurrentPlayer(state, nick)\n    && countCards(state, nick) === 2\n    && currentPlayer(state)?.bet === state.common.game.round.bet ? CHECK : null;\n}\n\nexport function canCall(state: APokerState, nick: string): ?Action {\n    return _isCurrentPlayer(state, nick)\n    && countCards(state, nick) === 2\n    && (currentPlayer(state)?.bet || 0) < state.common.game.round.bet ? CALL : null;\n}\n\nexport function canRaise(state: APokerState, nick: string): ?Action {\n    return _isCurrentPlayer(state, nick)\n    && countCards(state, nick) === 2\n    && state.common.game.round.currentPlayer !== state.common.game.round.bettingRound.raisePlayer ? RAISE : null;\n}\n\nexport function canFold(state: APokerState, nick: string): ?Action {\n    return _isCurrentPlayer(state, nick)\n    && countCards(state, nick) === 2\n    && !currentPlayer(state)?.fold ? FOLD : null;\n}\n\nexport function canShowCards(state: APokerState, nick: string): ?Action {\n    return cardSlotsOf(state, nick).filter(cardSlot => !cardSlot.flipped).length > 0 ? SHOW_CARDS : null;\n}\n\nexport function canThrowAwayCards(state: APokerState, nick: string): ?Action {\n    const isWinner = state.common.game.round.winners.includes(nick);\n    const isLastPlayer = activePlayers(state).length === 1 && activePlayers(state)[0] === nick;\n    const hasHiddenCards = cardSlotsOf(state, nick).filter(cardSlot => !cardSlot.flipped).length > 0;\n\n    return !isWinner && !isLastPlayer && hasHiddenCards ? THROW_AWAY_CARDS : null;\n}\n\nexport function canCollect(state: APokerState, nick: string): ?Action {\n    return state.common.game.round.win[nick] ? COLLECT : null;\n}\n\nfunction _isCurrentPlayer(state: APokerState, nick: string) {\n    return state.common.game.round.currentPlayer === nick;\n}\n","// @flow\n\nimport type { APokerState, Card, Suit, Symbol } from '../types';\nimport { Hand } from 'pokersolver';\nimport { activePlayers, cards } from './helpers';\n\nexport function winners(state: APokerState): Array<string> {\n    const hands = _hands(state);\n    const winningHands = Hand.winners(hands.map(nickWithHands => nickWithHands.solvedCards).filter(Boolean));\n\n    return hands\n        .filter(nickWithHands => winningHands.includes(nickWithHands.solvedCards))\n        .map(nickWithHands => nickWithHands.nick);\n}\n\nexport function _hands(state: APokerState): Array<{nick: string, solvedCards: Hand}> {\n    return activePlayers(state).map(nick => {\n        const playerCards = cards(state, nick).map(card => _toPokerSolverCard(card));\n\n        return {\n            nick,\n            solvedCards: playerCards.length > 0 ? Hand.solve(playerCards) : null\n        };\n    });\n}\n\nfunction _toPokerSolverCard(card: Card): string {\n    return _toPokerSolverSymbol(card.symbol) + _toPokerSolverSuite(card.suit);\n}\n\nfunction _toPokerSolverSuite(suit: Suit): string {\n    switch (suit) {\n    case 'club': return 'c';\n    case 'diamond': return 'd';\n    case 'heart': return 'h';\n    case 'spade': return 's';\n    }\n    throw new Error(`Unknown: ${suit}`);\n}\n\nfunction _toPokerSolverSymbol(symbol: Symbol): string {\n    switch (symbol) {\n    case 'ace': return 'A';\n    case 'queen': return 'Q';\n    case 'king': return 'K';\n    case 'jack': return 'J';\n    case '_2': return '2';\n    case '_3': return '3';\n    case '_4': return '4';\n    case '_5': return '5';\n    case '_6': return '6';\n    case '_7': return '7';\n    case '_8': return '8';\n    case '_9': return '9';\n    case '_10': return 'T';\n    }\n    throw new Error(`Unknown: ${symbol}`);\n}\n","/* eslint-disable arrow-body-style */\n// @flow\n\nimport type { APokerState, ChainablePokerState, Deck, Player, Suit, Symbol } from '../types';\n\nimport { JOIN_GAME, START_GAME, STOP_GAME } from '../actionTypes';\nimport { DEFAULT_STATE, SUITS, SYMBOLS } from '../constants';\nimport {\n    activePlayers,\n    addStagePerformance,\n    assignToAllPlayer,\n    assignToBettingRound,\n    assignToCardSlotsOf,\n    assignToCommon,\n    assignToCurrentPlayer,\n    assignToGame,\n    assignToPlayer,\n    assignToRound,\n    assignToState,\n    cardSlots,\n    chain,\n    chainableAssign,\n    countCards,\n    logState,\n    nextPlayerAfter,\n    getPlayer,\n    players\n} from './helpers';\nimport {\n    canCall,\n    canCheck,\n    canCollect,\n    canFold,\n    canGiveCards,\n    canRaise,\n    canShowCards,\n    canThrowAwayCards\n} from './canDo';\nimport { winners } from './ranking';\n\nexport function getDeck(): Deck {\n    return {\n        nextIndex: 0,\n        cards: Object.keys(SUITS)\n            .flatMap((suit: Suit) => Object.keys(SYMBOLS)\n                .map((symbol: Symbol) => {\n                    return {\n                        card: {\n                            suit,\n                            symbol\n                        },\n                        owner: null,\n                        flipped: false\n                    };\n                }))\n                .sort(() => Math.random() - 0.5)\n    };\n}\n\nexport function update(initialState: APokerState) {\n    return chain(initialState)\n    .then(state => updateGame(state))\n    .then(state => updateActions(assignToCommon(state, () => ({\n        lastModifiedBy: state.nick\n    }))))\n    .then(state => logState(state));\n}\n\nexport function updateGame(initialState: APokerState): ChainablePokerState {\n    return chain(initialState)\n    .then(state => assignToRound(state, () => ({\n        bet: Math.max(...players(state).map((player: Player) => player.bet))\n    })))\n    .then(state => assignToRound(state, () => ({\n        winners: winners(state)\n    })));\n}\n\nexport function updateActions(state: APokerState): ChainablePokerState {\n    switch (state.common.game.state) {\n    case 'none': {\n        // return mapPlayers(state, (_) => ({actions: [JOIN_GAME]}));\n        return assignToAllPlayer(state, nick => {\n            return { actions: state.common.players[nick] ? [ START_GAME ] : [ JOIN_GAME ] };\n        });\n    }\n    case 'running': {\n        return assignToAllPlayer(state, nick => {\n            return {\n                actions: [\n                    STOP_GAME,\n                    canGiveCards(state, nick),\n                    canCheck(state, nick),\n                    canCall(state, nick),\n                    canRaise(state, nick),\n                    canFold(state, nick)\n                ].filter(Boolean)\n            };\n        });\n    }\n    case 'showdown': {\n        return assignToAllPlayer(state, nick => {\n            return {\n                actions: [\n                    STOP_GAME,\n                    canShowCards(state, nick),\n                    canThrowAwayCards(state, nick),\n                    canCollect(state, nick)\n                ].filter(Boolean)\n            };\n        });\n    }\n    default: {\n        return chain(state);\n    }\n    }\n}\n\nexport function nextBettingRound(initialState: APokerState) {\n    switch (initialState.common.game.round.state) {\n    case 'preflop': {\n        return chain(initialState)\n        .then(state => assignToBettingRound(state, () => DEFAULT_STATE.common.game.round.bettingRound))\n        .then(state => giveCardsTo(state, 'table', 3))\n        .then(state => assignToRound(state, () => ({ state: 'flop' })));\n    }\n    case 'flop': {\n        return chain(initialState)\n        .then(state => assignToBettingRound(state, () => DEFAULT_STATE.common.game.round.bettingRound))\n        .then(state => giveCardsTo(state, 'table', 1))\n        .then(state => assignToRound(state, () => ({ state: 'turn' })));\n    }\n    case 'turn': {\n        return chain(initialState)\n        .then(state => assignToBettingRound(state, () => DEFAULT_STATE.common.game.round.bettingRound))\n        .then(state => giveCardsTo(state, 'table', 1))\n        .then(state => assignToRound(state, () => ({ state: 'river' })));\n    }\n    case 'river': {\n        return chain(initialState)\n        .then(state => showdown(state))\n        .then(state => assignToRound(state, () => ({ currentPlayer: null })));\n    }\n    }\n\n    return chain(initialState);\n}\n\nexport function newRound(initialState: APokerState) {\n    return chain(initialState)\n    .then(state => assignToAllPlayer(state, () => {\n        return { fold: false };\n    }))\n    .then(state => assignToGame(state, game => ({\n        dealer: nextPlayerAfter(state, game.dealer),\n        state: 'running'\n    })))\n    .then(state => assignToRound(state, () => DEFAULT_STATE.common.game.round))\n    .then(state => payBlinds(state))\n    .then(state => assignToRound(state, () => ({\n        deck: getDeck(),\n        currentPlayer: nextPlayerAfter(state, state.common.game.dealer)\n    })))\n    .then(state => addStagePerformance(state, state.common.game.round.currentPlayer));\n}\n\nexport function nextPlayer(initialState: APokerState) {\n    return chain(initialState)\n    .then(state => tryFinishBettingRound(state))\n    .then(state => setCurrentAsDominantSpeaker(state));\n}\n\nexport function tryFinishBettingRound(initialState: APokerState) {\n    const nextIsRaisePlayer = nextPlayerAfter(initialState) === initialState.common.game.round.bettingRound.raisePlayer;\n    const isDealer = initialState.common.game.dealer === initialState.common.game.round.currentPlayer;\n\n    const allCalled = !activePlayers(initialState).some(nick => {\n        const bet = initialState.common.players[nick]?.bet || 0;\n\n        return bet < initialState.common.game.round.bet;\n    });\n\n    if (activePlayers(initialState).length < 2) {\n        return chain(initialState)\n        .then(state => betToPot(state, activePlayers(state)[0]))\n        .then(state => assignToRound(state, () => ({\n            winners: [ activePlayers(state)[0] ]\n        })))\n        .then(state => assignToGame(state, () => ({\n            state: 'showdown'\n        })))\n        .then(state => calculatePot(state));\n    }\n\n    if (nextIsRaisePlayer || (isDealer && allCalled)) {\n        return nextBettingRound(initialState)\n        .then(state => assignToRound(state, () => ({\n            currentPlayer: nextPlayerAfter(state, state.common.game.dealer)\n        })))\n        .then(state => addStagePerformance(state, 'table'));\n    }\n\n    return assignToRound(initialState, () => ({\n        currentPlayer: nextPlayerAfter(initialState)\n    }));\n}\n\nexport function showdown(initialState: APokerState) {\n\n    return chain(initialState)\n    .then(state => assignToGame(state, () => ({\n        state: 'showdown'\n    })))\n    .then(state => assignToRound(state, () => ({\n        pot: players(state).map(player => player.bet)\n.reduce((a, b) => a + b)\n    })))\n    .then(state => assignToAllPlayer(state, () => ({\n        bet: 0\n    })));\n}\n\nexport function collect(initialState: APokerState, nick: string) {\n    const potForEach = initialState.common.game.round.pot / initialState.common.game.round.winners.length;\n\n    return chain(initialState)\n    .then(state => assignToPlayer(state, nick, player => {\n        const amount = player.amount + state.common.game.round.win[nick];\n\n        delete state.common.game.round.win[nick];\n\n        return { amount };\n    }))\n    .then(state => assignToRound(state, round => ({\n        pot: round.pot - potForEach\n    })))\n    .then(state => tryFinishRound(state))\n    .then(state => addStagePerformance(state, nick));\n}\n\nexport function tryFinishRound(initialState: APokerState) {\n    if (initialState.common.game.round.pot === 0) {\n        return newRound(initialState);\n    }\n\n    return chain(initialState);\n}\n\nexport function giveCards(initialState: APokerState) {\n    const nicks: Array<string> = Object.keys(initialState.common.players);\n\n    return nicks.reduce((modifiedState: APokerState, nick: string) => {\n        const missingCards = 2 - countCards(modifiedState, nick);\n\n        return giveCardsTo(modifiedState, nick, missingCards)\n        .then(state => assignToPlayer(state, nick, () => {\n            return { fold: false };\n        }));\n    }, chainableAssign(initialState, {}));\n}\n\nexport function giveCardsTo(state: APokerState, owner: string, n: number) {\n    const deck: ?Deck = state.common.game.round.deck;\n\n    if (deck) {\n        for (let i = 0; i < n; i++) {\n            deck.cards[deck.nextIndex].owner = owner;\n            if (owner === 'table') {\n                deck.cards[deck.nextIndex].flipped = true;\n            }\n            deck.nextIndex = deck.nextIndex + 1;\n        }\n    }\n\n    state.common.game.round.deck = deck;\n\n    return assignToRound(state, () => ({ deck }));\n}\n\nexport function chooseDealer(state: APokerState) {\n    const nicks = Object.keys(state.common.players);\n\n    return nicks[Math.floor(Math.random() * nicks.length)];\n}\n\nexport function toBet(state: APokerState, amount: number) {\n    return assignToCurrentPlayer(state, player => ({\n        amount: player.amount - amount,\n        bet: player.bet + amount\n    }));\n}\n\nexport function betToPot(initialState: APokerState, nick: string) {\n    return chain(initialState)\n    .then(state => assignToRound(state, round => ({\n        pot: round.pot + getPlayer(state, nick).bet\n    })))\n    .then(state => assignToPlayer(state, nick, () => ({\n        bet: 0\n    })));\n}\n\nexport function showCards(initialState: APokerState, nick: ?string): ChainablePokerState {\n    return assignToCardSlotsOf(initialState, nick, () => {\n        return { flipped: true };\n    })\n    .then(state => tryFinishShowdown(state));\n}\n\nexport function throwAwayCards(initialState: APokerState, nick: ?string): ChainablePokerState {\n    return assignToCardSlotsOf(initialState, nick, () => {\n        return { owner: null };\n    })\n    .then(state => tryFinishShowdown(state));\n}\n\nexport function tryFinishShowdown(initialState: APokerState) {\n    if (new Set(cardSlots(initialState).filter(slot => slot.owner && !slot.flipped)\n.map(cardSlot => cardSlot.owner)).size <= 1) {\n        return calculatePot(initialState);\n    }\n\n    return chain(initialState);\n}\n\nexport function calculatePot(initialState: APokerState) {\n    const potForEach = initialState.common.game.round.pot / initialState.common.game.round.winners.length;\n\n    return assignToRound(initialState, () => ({\n        win: Object.fromEntries(initialState.common.game.round.winners.map(winner => [ winner, potForEach ]))\n    }));\n}\n\nexport function payBlinds(initialState: APokerState) {\n    const small = nextPlayerAfter(initialState, initialState.common.game.dealer);\n    const big = nextPlayerAfter(initialState, small);\n\n    return chain(initialState)\n    .then(state => _payBlind(state, small, state.common.game.blind.small))\n    .then(state => _payBlind(state, big, state.common.game.blind.big))\n    .then(state => assignToRound(state, () => ({\n        bet: state.common.game.blind.big,\n        raiseAmount: state.common.game.blind.big\n    })));\n}\n\nexport function checkSeatControl(initialState: APokerState) {\n    if (initialState.common.lastModifiedBy === initialState.nick) {\n        return chain(initialState).then(state => assignToState(state, () => ({\n            nick: state.common.lastModifiedBy === state.nick ? null : state.nick\n        })))\n        .then(state => update(state));\n    }\n\n    return chain(initialState);\n}\n\nfunction _payBlind(state: APokerState, nick: string, amount: number) {\n    return assignToPlayer(state, nick, player => {\n        const amountToPay = Math.max(0, amount - player.bet);\n\n        return {\n            bet: player.bet + amountToPay,\n            amount: player.amount - amountToPay\n        };\n    });\n}\n\nfunction setCurrentAsDominantSpeaker(initialState: APokerState) {\n    return chain(initialState)\n    .then(state => addStagePerformance(state, state.common.game.round.bettingRound.raisePlayer, 0))\n    .then(state => addStagePerformance(state, state.common.game.round.currentPlayer));\n}\n","/* eslint-disable arrow-body-style */\n// @flow\n\nimport { ReducerRegistry } from '../base/redux';\nimport {\n    betToPot,\n    checkSeatControl,\n    chooseDealer,\n    collect,\n    giveCards,\n    newRound,\n    nextPlayer, showCards, throwAwayCards,\n    toBet,\n    update\n} from './logic/gameModifiers';\nimport {\n    addStagePerformance,\n    addToPlayers,\n    assignToBettingRound,\n    assignToCommon,\n    assignToCurrentPlayer,\n    assignToGame,\n    assignToRound,\n    assignToState,\n    chain,\n    currentPlayer\n} from './logic/helpers';\n\nimport {\n    CALL,\n    CHECK, COLLECT,\n    FOLD,\n    GIVE_CARDS,\n    JOIN_GAME,\n    NEW_STATE_RECEIVED,\n    RAISE,\n    SEND_GAME_STATE, SHOW_CARDS,\n    START_GAME,\n    STOP_GAME,\n    TAKE_OVER, THROW_AWAY_CARDS\n} from './actionTypes';\n\nimport { DEFAULT_STATE } from './constants';\n\nReducerRegistry.register('features/poker', (initialState = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case JOIN_GAME: {\n        return chain(initialState)\n        .then(state => addToPlayers(state, () => ({\n            nick: action.nick,\n            player: {\n                amount: state.common.game.startAmount,\n                actions: [],\n                bet: 0,\n                fold: true\n            }\n        })))\n        .then(state => assignToState(state, () => ({\n            nick: action.nick\n        })))\n        .then(state => update(state))\n        .then(state => addStagePerformance(state, 'table'));\n    }\n    case TAKE_OVER: {\n        return chain(initialState)\n        .then(state => assignToState(state, () => ({\n            nick: action.nick\n        })))\n        .then(state => update(state));\n    }\n    case STOP_GAME: {\n        return chain(initialState)\n        .then(state => assignToCommon(state, () => DEFAULT_STATE.common))\n        .then(state => update(state));\n    }\n    case START_GAME: {\n        return chain(initialState)\n        .then(state => assignToGame(state, () => ({\n            dealer: chooseDealer(state),\n            state: 'running'\n        })))\n        .then(state => newRound(state))\n        .then(state => update(state));\n    }\n    case GIVE_CARDS: {\n        return chain(initialState)\n        .then(state => giveCards(state))\n        .then(state => update(state));\n    }\n    case CHECK: {\n        return chain(initialState)\n        .then(state => nextPlayer(state))\n        .then(state => update(state));\n    }\n    case CALL: {\n        return chain(initialState)\n        .then(state => toBet(state, state.common.game.round.bet - (currentPlayer(state)?.bet || 0)))\n        .then(state => nextPlayer(state))\n        .then(state => update(state));\n    }\n    case RAISE: {\n        return chain(initialState)\n        .then(state => toBet(state, state.common.game.round.bet - (currentPlayer(state)?.bet || 0)))\n        .then(state => toBet(state, action.amount))\n        .then(state => assignToBettingRound(state, () => ({\n            raisePlayer: state.common.game.round.currentPlayer\n        })))\n        .then(state => assignToRound(state, () => ({\n            raiseAmount: action.amount\n        })))\n        .then(state => nextPlayer(state))\n        .then(state => update(state));\n    }\n    case FOLD: {\n        return chain(initialState)\n        .then(state => betToPot(state, state.common.game.round.currentPlayer || ''))\n        .then(state => assignToCurrentPlayer(state, () => {\n            return {\n                fold: true\n            };\n        }))\n        .then(state => nextPlayer(state))\n        .then(state => update(state));\n    }\n    case SHOW_CARDS: {\n        return chain(initialState)\n        .then(state => showCards(state, state.nick))\n        .then(state => addStagePerformance(state, state.nick))\n        .then(state => update(state));\n    }\n    case THROW_AWAY_CARDS: {\n        return chain(initialState)\n        .then(state => throwAwayCards(state, action.nick))\n        .then(state => addStagePerformance(state, action.nick))\n        .then(state => update(state));\n    }\n    case COLLECT: {\n        return chain(initialState)\n        .then(state => collect(state, action.nick))\n        .then(state => addStagePerformance(state, action.nick))\n        .then(state => update(state));\n    }\n    case NEW_STATE_RECEIVED: {\n        return chain(initialState)\n        .then(state => assignToState(state, () => ({\n            common: action.common\n        })))\n        .then(state => checkSeatControl(state));\n    }\n    case SEND_GAME_STATE: {\n        return chain(initialState)\n        .then(state => update(state));\n    }\n    }\n\n    return initialState;\n});\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/lastn');\n","// @flow\n\nimport { SET_FILMSTRIP_ENABLED } from '../../filmstrip/actionTypes';\nimport { SELECT_LARGE_VIDEO_PARTICIPANT } from '../../large-video/actionTypes';\nimport { APP_STATE_CHANGED } from '../../mobile/background/actionTypes';\nimport { SCREEN_SHARE_PARTICIPANTS_UPDATED, SET_TILE_VIEW } from '../../video-layout/actionTypes';\n\nimport { SET_AUDIO_ONLY } from '../audio-only/actionTypes';\nimport { CONFERENCE_JOINED } from '../conference/actionTypes';\nimport { getParticipantById } from '../participants/functions';\nimport { MiddlewareRegistry } from '../redux';\n\nimport logger from './logger';\n\ndeclare var APP: Object;\n\n\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_STATE_CHANGED:\n    case CONFERENCE_JOINED:\n    case SCREEN_SHARE_PARTICIPANTS_UPDATED:\n    case SELECT_LARGE_VIDEO_PARTICIPANT:\n    case SET_AUDIO_ONLY:\n    case SET_FILMSTRIP_ENABLED:\n    case SET_TILE_VIEW:\n        _updateLastN(store);\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Updates the last N value in the conference based on the current state of the redux store.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _updateLastN({ getState }) {\n    const state = getState();\n    const { conference } = state['features/base/conference'];\n    const { enabled: audioOnly } = state['features/base/audio-only'];\n    const { appState } = state['features/background'];\n    const { enabled: filmStripEnabled } = state['features/filmstrip'];\n    const config = state['features/base/config'];\n\n    if (!conference) {\n        logger.debug('There is no active conference, not updating last N');\n\n        return;\n    }\n\n    const defaultLastN = typeof config.channelLastN === 'undefined' ? -1 : config.channelLastN;\n    let lastN = defaultLastN;\n\n    if (appState !== 'active') {\n        lastN = 0;\n    } else if (audioOnly) {\n        const { screenShares, tileViewEnabled } = state['features/video-layout'];\n        const largeVideoParticipantId = state['features/large-video'].participantId;\n        const largeVideoParticipant\n            = largeVideoParticipantId ? getParticipantById(state, largeVideoParticipantId) : undefined;\n\n        if (!tileViewEnabled && largeVideoParticipant && !largeVideoParticipant.local) {\n            lastN = (screenShares || []).includes(largeVideoParticipantId) ? 1 : 0;\n        } else {\n            lastN = 0;\n        }\n    } else if (!filmStripEnabled) {\n        lastN = 1;\n    }\n\n    if (conference.getLastN() === lastN) {\n        return;\n    }\n\n    logger.info(`Setting last N to: ${lastN}`);\n\n    try {\n        conference.setLastN(lastN);\n    } catch (err) {\n        logger.error(`Failed to set lastN: ${err}`);\n    }\n}\n","import { createRejoinedEvent, sendAnalytics } from '../analytics';\n\nimport { StateListenerRegistry } from '../base/redux';\n\nStateListenerRegistry.register(\n    /* selector */ state => {\n        const recentList = state['features/recent-list'];\n\n        // Return the most recent conference entry\n        return recentList && recentList.length && recentList[recentList.length - 1];\n    },\n    // eslint-disable-next-line no-empty-pattern\n    /* listener */ (newMostRecent, { }, prevMostRecent) => {\n        if (prevMostRecent && newMostRecent) {\n\n            // Send the rejoined event just before the duration is reset on the most recent entry\n            if (prevMostRecent.conference === newMostRecent.conference && newMostRecent.duration === 0) {\n                sendAnalytics(\n                    createRejoinedEvent({\n                        lastConferenceDuration: prevMostRecent.duration / 1000,\n                        timeSinceLeft: (Date.now() - (prevMostRecent.date + prevMostRecent.duration)) / 1000,\n                        url: prevMostRecent.conference\n                    })\n                );\n            }\n        }\n    });\n","// @flow\n\nimport React, { Fragment } from 'react';\n\nimport { BaseApp } from '../../base/app';\nimport { toURLString } from '../../base/util';\nimport '../../follow-me';\nimport { OverlayContainer } from '../../overlay';\n\nimport '../../base/lastn'; // Register lastN middleware\nimport '../../rejoin'; // Enable rejoin analytics\n\nimport { appNavigate } from '../actions';\nimport { getDefaultURL } from '../functions';\n\n/**\n * The type of React {@code Component} props of {@link AbstractApp}.\n */\nexport type Props = {\n\n    /**\n     * XXX Refer to the implementation of loadURLObject: in\n     * ios/sdk/src/JitsiMeetView.m for further information.\n     */\n    timestamp: any,\n\n    /**\n     * The URL, if any, with which the app was launched.\n     */\n    url: Object | string\n};\n\n/**\n * Base (abstract) class for main App component.\n *\n * @abstract\n */\nexport class AbstractApp extends BaseApp<Props, *> {\n    _init: Promise<*>;\n\n    /**\n     * Initializes the app.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        super.componentDidMount();\n\n        this._init.then(() => {\n            // If a URL was explicitly specified to this React Component, then\n            // open it; otherwise, use a default.\n            this._openURL(toURLString(this.props.url) || this._getDefaultURL());\n        });\n    }\n\n    /**\n     * Implements React Component's componentDidUpdate.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: Props) {\n        const previousUrl = toURLString(prevProps.url);\n        const currentUrl = toURLString(this.props.url);\n        const previousTimestamp = prevProps.timestamp;\n        const currentTimestamp = this.props.timestamp;\n\n        this._init.then(() => {\n            // Deal with URL changes.\n\n            if (previousUrl !== currentUrl\n\n                    // XXX Refer to the implementation of loadURLObject: in\n                    // ios/sdk/src/JitsiMeetView.m for further information.\n                    || previousTimestamp !== currentTimestamp) {\n                this._openURL(currentUrl || this._getDefaultURL());\n            }\n        });\n    }\n\n    /**\n     * Creates an extra {@link ReactElement}s to be added (unconditionaly)\n     * alongside the main element.\n     *\n     * @abstract\n     * @protected\n     * @returns {ReactElement}\n     */\n    _createExtraElement() {\n        return (\n            <Fragment>\n                <OverlayContainer />\n            </Fragment>\n        );\n    }\n\n    _createMainElement: (React$Element<*>, Object) => ?React$Element<*>;\n\n    /**\n     * Gets the default URL to be opened when this {@code App} mounts.\n     *\n     * @protected\n     * @returns {string} The default URL to be opened when this {@code App}\n     * mounts.\n     */\n    _getDefaultURL() {\n        return getDefaultURL(this.state.store);\n    }\n\n    /**\n     * Navigates this {@code AbstractApp} to (i.e. Opens) a specific URL.\n     *\n     * @param {Object|string} url - The URL to navigate this {@code AbstractApp}\n     * to (i.e. The URL to open).\n     * @protected\n     * @returns {void}\n     */\n    _openURL(url) {\n        this.state.store.dispatch(appNavigate(toURLString(url)));\n    }\n}\n","// @flow\n\nimport { AtlasKitThemeProvider } from '@atlaskit/theme';\nimport React from 'react';\n\nimport { DialogContainer } from '../../base/dialog';\nimport { ChromeExtensionBanner } from '../../chrome-extension-banner';\nimport '../../base/user-interaction';\nimport '../../chat';\nimport '../../external-api';\nimport '../../no-audio-signal';\nimport '../../noise-detection';\nimport '../../power-monitor';\nimport '../../room-lock';\nimport '../../talk-while-muted';\nimport '../../video-layout';\nimport '../../old-client-notification';\nimport '../../poker';\n\nimport { AbstractApp } from './AbstractApp';\n\n/**\n * Root app {@code Component} on Web/React.\n *\n * @extends AbstractApp\n */\nexport class App extends AbstractApp {\n    /**\n     * Overrides the parent method to inject {@link AtlasKitThemeProvider} as\n     * the top most component.\n     *\n     * @override\n     */\n    _createMainElement(component, props) {\n        return (\n            <AtlasKitThemeProvider mode = 'dark'>\n                <ChromeExtensionBanner />\n                { super._createMainElement(component, props) }\n            </AtlasKitThemeProvider>\n        );\n    }\n\n    /**\n     * Renders the platform specific dialog container.\n     *\n     * @returns {React$Element}\n     */\n    _renderDialogContainer() {\n        return (\n            <AtlasKitThemeProvider mode = 'dark'>\n                <DialogContainer />\n            </AtlasKitThemeProvider>\n        );\n    }\n}\n","// @flow\n\nimport JitsiMeetJS from '../lib-jitsi-meet';\nimport { isMobileBrowser } from './utils';\n\nconst { browser } = JitsiMeetJS.util;\n\nconst DEFAULT_OPTIMAL_BROWSERS = [\n    'chrome',\n    'electron',\n    'firefox',\n    'nwjs',\n    'safari'\n];\n\nconst DEFAULT_UNSUPPORTED_BROWSERS = [];\n\nconst browserNameToCheck = {\n    chrome: browser.isChrome.bind(browser),\n    chromium: browser.isChromiumBased.bind(browser),\n    electron: browser.isElectron.bind(browser),\n    firefox: browser.isFirefox.bind(browser),\n    nwjs: browser.isNWJS.bind(browser),\n    opera: browser.isOpera.bind(browser),\n    safari: browser.isSafari.bind(browser)\n};\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Returns whether or not jitsi is optimized and targeted for the  provided\n * browser name.\n *\n * @param {string} browserName - The name of the browser to check.\n * @returns {boolean}\n */\nexport function isBrowsersOptimal(browserName: string) {\n    return (interfaceConfig.OPTIMAL_BROWSERS || DEFAULT_OPTIMAL_BROWSERS)\n        .includes(browserName);\n}\n\n/**\n * Returns whether or not the current browser or the list of passed in browsers\n * is considered suboptimal. Suboptimal means it is a supported browser but has\n * not been explicitly listed as being optimal, possibly due to functionality\n * issues.\n *\n * @param {Array<string>} [browsers] - A list of browser names to check. Will\n * default to a whitelist.\n * @returns {boolean}\n */\nexport function isSuboptimalBrowser() {\n    const optimalBrowsers\n        = interfaceConfig.OPTIMAL_BROWSERS || DEFAULT_OPTIMAL_BROWSERS;\n\n    return !_isCurrentBrowserInList(optimalBrowsers) && isSupportedBrowser();\n}\n\n/**\n * Returns whether or not the current browser should allow the app to display.\n * A supported browser is assumed to be able to support WebRtc.\n *\n * @returns {boolean}\n */\nexport function isSupportedBrowser() {\n    if (navigator.product === 'ReactNative') {\n        return false;\n    }\n\n    // Blacklists apply to desktop browsers only right now.\n    if (!isMobileBrowser() && _isCurrentBrowserInList(\n        interfaceConfig.UNSUPPORTED_BROWSERS || DEFAULT_UNSUPPORTED_BROWSERS\n    )) {\n        return false;\n    }\n\n    // We are intentionally allow mobile browsers because:\n    // - the WelcomePage is mobile ready;\n    // - if the URL points to a conference then deep-linking will take\n    //   care of it.\n    return isMobileBrowser() || JitsiMeetJS.isWebRtcSupported();\n}\n\n/**\n * Runs various browser checks to know if the current browser is found within\n * the list.\n *\n * @param {Array<string>} list - Browser names to check. The names should be\n * keys in {@link browserNameToCheck}.\n * @private\n * @returns {boolean}\n */\nfunction _isCurrentBrowserInList(list) {\n    return Boolean(list.find(browserName => {\n        const checkFunction = browserNameToCheck[browserName];\n\n        return checkFunction ? checkFunction.call(browser) : false;\n    }));\n}\n","import { translateToHTML } from '../base/i18n';\nimport { isSuboptimalBrowser } from '../base/environment';\nimport { toState } from '../base/redux';\n\nimport {\n    areThereNotifications,\n    showWarningNotification\n} from '../notifications';\nimport { getOverlayToRender } from '../overlay';\n\n/**\n * Shows the suboptimal experience notification if needed.\n *\n * @param {Function} dispatch - The dispatch method.\n * @param {Function} t - The translation function.\n * @returns {void}\n */\nexport function maybeShowSuboptimalExperienceNotification(dispatch, t) {\n    if (isSuboptimalBrowser()) {\n        dispatch(\n            showWarningNotification(\n                {\n                    titleKey: 'notify.suboptimalExperienceTitle',\n                    description: translateToHTML(\n                        t,\n                        'notify.suboptimalBrowserWarning'\n                    )\n                }\n            )\n        );\n    }\n}\n\n/**\n * Tells whether or not the notifications should be displayed within\n * the conference feature based on the current Redux state.\n *\n * @param {Object|Function} stateful - The redux store state.\n * @returns {boolean}\n */\nexport function shouldDisplayNotifications(stateful) {\n    const state = toState(stateful);\n    const isAnyOverlayVisible = Boolean(getOverlayToRender(state));\n    const { calleeInfoVisible } = state['features/invite'];\n\n    return areThereNotifications(state)\n            && !isAnyOverlayVisible\n            && !calleeInfoVisible;\n}\n","/**\n * The type of Redux action triggering storage of participantId of transcriber,\n * so that it can later be kicked\n *\n * {\n *     type: TRANSCRIBER_JOINED,\n *     participantId: String\n * }\n * @private\n */\nexport const _TRANSCRIBER_JOINED = 'TRANSCRIBER_JOINED';\n\n/**\n * The type of Redux action signalling that the transcriber has left\n *\n * {\n *     type: TRANSCRIBER_LEFT,\n *     participantId: String\n * }\n * @private\n */\nexport const _TRANSCRIBER_LEFT = 'TRANSCRIBER_LEFT';\n\n/**\n * The type of a Redux action signalling that a hidden participant has joined,\n * which can be candidate for being a transcriber.\n *\n * {\n *     type: _POTENTIAL_TRANSCRIBER_JOINED,\n * }\n * @private\n */\nexport const _POTENTIAL_TRANSCRIBER_JOINED\n    = 'POTENTIAL_TRANSCRIBER_JOINED';\n\n/**\n * The type of Redux action which sets the pending transcribing notification UID\n * to use it for when hiding the notification is necessary, or unsets it when\n * undefined (or no param) is passed.\n *\n * {\n *     type: SET_PENDING_TRANSCRIBING_NOTIFICATION_UID,\n *     uid: ?number\n * }\n * @public\n */\nexport const SET_PENDING_TRANSCRIBING_NOTIFICATION_UID\n    = 'SET_PENDING_TRANSCRIBING_NOTIFICATION_UID';\n","// @flow\n\nimport {\n    _POTENTIAL_TRANSCRIBER_JOINED,\n    _TRANSCRIBER_JOINED,\n    _TRANSCRIBER_LEFT,\n    SET_PENDING_TRANSCRIBING_NOTIFICATION_UID\n} from './actionTypes';\nimport {\n    NOTIFICATION_TIMEOUT,\n    hideNotification,\n    showErrorNotification,\n    showNotification\n} from '../notifications';\n\n/**\n * Notify that the transcriber, with a unique ID, has joined.\n *\n * @param {string} participantId - The participant id of the transcriber.\n * @returns {{\n *     type: _TRANSCRIBER_JOINED,\n *     participantId: string\n * }}\n */\nexport function transcriberJoined(participantId: string) {\n    return {\n        type: _TRANSCRIBER_JOINED,\n        transcriberJID: participantId\n    };\n}\n\n/**\n * Notify that the transcriber, with a unique ID, has left.\n *\n * @param {string} participantId - The participant id of the transcriber.\n * @returns {{\n *     type: _TRANSCRIBER_LEFT,\n *     participantId: string\n * }}\n */\nexport function transcriberLeft(participantId: string) {\n    return {\n        type: _TRANSCRIBER_LEFT,\n        transcriberJID: participantId\n    };\n}\n\n/**\n * Notify that a potential transcriber, with a unique ID, has joined.\n *\n * @param {string} participantId - The participant id of the transcriber.\n * @returns {{\n *     type: _POTENTIAL_TRANSCRIBER_JOINED,\n *     participantId: string\n * }}\n */\nexport function potentialTranscriberJoined(participantId: string) {\n    return {\n        type: _POTENTIAL_TRANSCRIBER_JOINED,\n        transcriberJID: participantId\n    };\n}\n\n/**\n * Signals that the pending transcribing notification should be shown on the\n * screen.\n *\n * @returns {Function}\n */\nexport function showPendingTranscribingNotification() {\n    return (dispatch: Function) => {\n        const showNotificationAction = showNotification({\n            descriptionKey: 'transcribing.pending',\n            isDismissAllowed: false,\n            titleKey: 'dialog.transcribing'\n        });\n\n        dispatch(showNotificationAction);\n\n        dispatch(setPendingTranscribingNotificationUid(\n            showNotificationAction.uid));\n    };\n}\n\n/**\n * Sets UID of the the pending transcribing notification to use it when hiding\n * the notification is necessary, or unsets it when undefined (or no param) is\n * passed.\n *\n * @param {?number} uid - The UID of the notification.\n * @returns {{\n *     type: SET_PENDING_TRANSCRIBING_NOTIFICATION_UID,\n *     uid: number\n * }}\n */\nexport function setPendingTranscribingNotificationUid(uid: ?number) {\n    return {\n        type: SET_PENDING_TRANSCRIBING_NOTIFICATION_UID,\n        uid\n    };\n}\n\n/**\n * Signals that the pending transcribing notification should be removed from the\n * screen.\n *\n * @returns {Function}\n */\nexport function hidePendingTranscribingNotification() {\n    return (dispatch: Function, getState: Function) => {\n        const { pendingNotificationUid } = getState()['features/transcribing'];\n\n        if (pendingNotificationUid) {\n            dispatch(hideNotification(pendingNotificationUid));\n            dispatch(setPendingTranscribingNotificationUid());\n        }\n    };\n}\n\n/**\n * Signals that the stopped transcribing notification should be shown on the\n * screen.\n *\n * @returns {showNotification}\n */\nexport function showStoppedTranscribingNotification() {\n    return showNotification({\n        descriptionKey: 'transcribing.off',\n        titleKey: 'dialog.transcribing'\n    }, NOTIFICATION_TIMEOUT);\n}\n\n\n/**\n * Signals that the transcribing error notification should be shown.\n *\n * @returns {showErrorNotification}\n */\nexport function showTranscribingError() {\n    return showErrorNotification({\n        descriptionKey: 'transcribing.error',\n        titleKey: 'transcribing.failedToStart'\n    });\n}\n","// @flow\n\nimport Tooltip from '@atlaskit/tooltip';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { CircularLabel } from '../../base/label';\nimport { connect } from '../../base/redux';\n\nimport { _mapStateToProps, type Props } from './AbstractTranscribingLabel';\n\n/**\n * React {@code Component} for displaying a label when a transcriber is in the\n * conference.\n *\n * @extends Component\n */\nclass TranscribingLabel extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (!this.props._showLabel) {\n            return null;\n        }\n\n        return (\n            <Tooltip\n                content = { this.props.t('transcribing.labelToolTip') }\n                position = { 'left' }>\n                <CircularLabel\n                    className = 'recording-label'\n                    label = { this.props.t('transcribing.tr') } />\n            </Tooltip>\n        );\n    }\n\n}\n\nexport default translate(connect(_mapStateToProps)(TranscribingLabel));\n","// @flow\n\n/**\n * The type of the React {@code Component} props of {@link TranscribingLabel}.\n */\nexport type Props = {\n\n    /**\n     * True if the label needs to be rendered, false otherwise.\n     */\n    _showLabel: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Maps (parts of) the redux state to the associated props of the\n * {@link AbstractTranscribingLabel} {@code Component}.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _showLabel: boolean\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    return {\n        _showLabel: state['features/transcribing'].isTranscribing\n    };\n}\n","// @flow\n\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport {\n    _TRANSCRIBER_LEFT\n} from './actionTypes';\nimport {\n    hidePendingTranscribingNotification,\n    potentialTranscriberJoined,\n    showStoppedTranscribingNotification,\n    transcriberJoined,\n    transcriberLeft\n} from './actions';\nimport {\n    HIDDEN_PARTICIPANT_JOINED,\n    HIDDEN_PARTICIPANT_LEFT,\n    PARTICIPANT_UPDATED\n} from './../base/participants';\n\nconst TRANSCRIBER_DISPLAY_NAME = 'Transcriber';\n\n/**\n * Implements the middleware of the feature transcribing.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    const {\n        transcriberJID,\n        potentialTranscriberJIDs\n    } = store.getState()['features/transcribing'];\n\n    switch (action.type) {\n    case _TRANSCRIBER_LEFT:\n        store.dispatch(showStoppedTranscribingNotification());\n        break;\n    case HIDDEN_PARTICIPANT_JOINED:\n        if (action.displayName\n                && action.displayName === TRANSCRIBER_DISPLAY_NAME) {\n            store.dispatch(transcriberJoined(action.id));\n        } else {\n            store.dispatch(potentialTranscriberJoined(action.id));\n        }\n\n        break;\n    case HIDDEN_PARTICIPANT_LEFT:\n        if (action.id === transcriberJID) {\n            store.dispatch(transcriberLeft(action.id));\n        }\n        break;\n    case PARTICIPANT_UPDATED: {\n        const { participant } = action;\n\n        if (potentialTranscriberJIDs.includes(participant.id)\n            && participant.name === TRANSCRIBER_DISPLAY_NAME) {\n            store.dispatch(transcriberJoined(participant.id));\n            store.dispatch(hidePendingTranscribingNotification());\n        }\n\n        break;\n    }\n    }\n\n    return next(action);\n});\n","import { ReducerRegistry } from '../base/redux';\nimport {\n    _TRANSCRIBER_JOINED,\n    _TRANSCRIBER_LEFT,\n    _POTENTIAL_TRANSCRIBER_JOINED,\n    SET_PENDING_TRANSCRIBING_NOTIFICATION_UID\n} from '../transcribing/actionTypes';\n\n/**\n * Returns initial state for transcribing feature part of Redux store.\n *\n * @returns {{\n * isTranscribing: boolean,\n * isDialing: boolean,\n * transcriberJID: null,\n * potentialTranscriberJIDs: Array\n * }}\n * @private\n */\nfunction _getInitialState() {\n    return {\n        /**\n         * Indicates whether there is currently an active transcriber in the\n         * room\n         *\n         * @type {boolean}\n         */\n        isTranscribing: false,\n\n        /**\n         * Indicates whether the transcriber has been dialed into the room and\n         * we're currently awaiting successfull joining or failure of joining\n         *\n         * @type {boolean}\n         */\n        isDialing: false,\n\n        /**\n         * Indicates whether the transcribing feature is in the process of\n         * terminating; the transcriber has been told to leave.\n         */\n        isTerminating: false,\n\n        /**\n         * The JID of the active transcriber\n         *\n         * @type { string }\n         */\n        transcriberJID: null,\n\n        /**\n         * A list containing potential JID's of transcriber participants\n         *\n         * @type { Array }\n         */\n        potentialTranscriberJIDs: []\n    };\n}\n\n/**\n * Reduces the Redux actions of the feature features/transcribing.\n */\nReducerRegistry.register('features/transcribing',\n    (state = _getInitialState(), action) => {\n        switch (action.type) {\n        case _TRANSCRIBER_JOINED:\n            return {\n                ...state,\n                isTranscribing: true,\n                isDialing: false,\n                transcriberJID: action.transcriberJID\n            };\n        case _TRANSCRIBER_LEFT:\n            return {\n                ...state,\n                isTerminating: false,\n                isTranscribing: false,\n                transcriberJID: undefined,\n                potentialTranscriberJIDs: []\n            };\n        case _POTENTIAL_TRANSCRIBER_JOINED:\n            return {\n                ...state,\n                potentialTranscriberJIDs:\n                    [ action.transcriberJID ]\n                        .concat(state.potentialTranscriberJIDs)\n            };\n        case SET_PENDING_TRANSCRIBING_NOTIFICATION_UID:\n            return {\n                ...state,\n                pendingNotificationUid: action.uid\n            };\n        default:\n            return state;\n        }\n    });\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { E2EELabel } from '../../e2ee';\nimport { isFilmstripVisible } from '../../filmstrip';\nimport { LocalRecordingLabel } from '../../local-recording';\nimport { RecordingLabel } from '../../recording';\nimport { TranscribingLabel } from '../../transcribing';\nimport { shouldDisplayTileView } from '../../video-layout';\nimport { VideoQualityLabel } from '../../video-quality';\n\n/**\n * The type of the React {@code Component} props of {@link AbstractLabels}.\n */\nexport type Props = {\n\n    /**\n     * Whether the filmstrip is displayed with remote videos. Used to determine\n     * display classes to set.\n     */\n    _filmstripVisible: boolean,\n\n    /**\n     * Whether the video quality label should be displayed.\n     */\n    _showVideoQualityLabel: boolean\n};\n\n/**\n * A container to hold video status labels, including recording status and\n * current large video quality.\n *\n * @extends Component\n */\nexport default class AbstractLabels<P: Props, S> extends Component<P, S> {\n    /**\n     * Renders the {@code E2EELabel}.\n     *\n     * @protected\n     * @returns {React$Element}\n     */\n    _renderE2EELabel() {\n        return (\n            <E2EELabel />\n        );\n    }\n\n    /**\n     * Renders the {@code LocalRecordingLabel}.\n     *\n     * @protected\n     * @returns {React$Element}\n     */\n    _renderLocalRecordingLabel() {\n        return (\n            <LocalRecordingLabel />\n        );\n    }\n\n    /**\n     * Renders the {@code RecordingLabel} that is platform independent.\n     *\n     * @param {string} mode - The recording mode that this label is rendered\n     * for.\n     * @protected\n     * @returns {React$Element}\n     */\n    _renderRecordingLabel(mode: string) {\n        return (\n            <RecordingLabel mode = { mode } />\n        );\n    }\n\n    /**\n     * Renders the {@code TranscribingLabel}.\n     *\n     * @protected\n     * @returns {React$Element}\n     */\n    _renderTranscribingLabel() {\n        return (\n            <TranscribingLabel />\n        );\n    }\n\n    /**\n     * Renders the {@code VideoQualityLabel} that is platform independent.\n     *\n     * @protected\n     * @returns {React$Element}\n     */\n    _renderVideoQualityLabel() {\n        return (\n            <VideoQualityLabel />\n        );\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props of the {@link Labels}\n * {@code Component}.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _filmstripVisible: boolean,\n *     _showVideoQualityLabel: boolean\n * }}\n */\nexport function _abstractMapStateToProps(state: Object) {\n    return {\n        _filmstripVisible: isFilmstripVisible(state),\n        _showVideoQualityLabel: !shouldDisplayTileView(state)\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\nimport { connect } from '../../../base/redux';\n\nimport AbstractLabels, {\n    _abstractMapStateToProps as _mapStateToProps,\n    type Props\n} from '../AbstractLabels';\n\n/**\n * The type of the React {@code Component} state of {@link Labels}.\n */\ntype State = {\n\n    /**\n     * Whether or not the filmstrip was not visible but has transitioned in the\n     * latest component update to visible. This boolean is used  to set a class\n     * for position animations.\n     *\n     * @type {boolean}\n     */\n    filmstripBecomingVisible: boolean\n};\n\n/**\n * A container to hold video status labels, including recording status and\n * current large video quality.\n *\n * @extends Component\n */\nclass Labels extends AbstractLabels<Props, State> {\n    /**\n     * Updates the state for whether or not the filmstrip is transitioning to\n     * a displayed state.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props: Props, prevState: State) {\n        return {\n            filmstripBecomingVisible: !prevState.filmstripBecomingVisible\n                && props._filmstripVisible\n        };\n    }\n\n    /**\n     * Initializes a new {@code Labels} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            filmstripBecomingVisible: false\n        };\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _filmstripVisible } = this.props;\n        const { filmstripBecomingVisible } = this.state;\n        const className = `large-video-labels ${\n            filmstripBecomingVisible ? 'opening' : ''} ${\n            _filmstripVisible ? 'with-filmstrip' : 'without-filmstrip'}`;\n\n        return (\n            <div className = { className } >\n                {\n                    this._renderE2EELabel()\n                }\n                {\n                    this._renderRecordingLabel(\n                        JitsiRecordingConstants.mode.FILE)\n                }\n                {\n                    this._renderRecordingLabel(\n                        JitsiRecordingConstants.mode.STREAM)\n                }\n                {\n                    this._renderLocalRecordingLabel()\n                }\n                {\n                    this._renderTranscribingLabel()\n                }\n                {\n                    this.props._showVideoQualityLabel\n                        && this._renderVideoQualityLabel()\n                }\n            </div>\n        );\n    }\n\n    _renderE2EELabel: () => React$Element<*>;\n\n    _renderLocalRecordingLabel: () => React$Element<*>;\n\n    _renderRecordingLabel: string => React$Element<*>;\n\n    _renderTranscribingLabel: () => React$Element<*>;\n\n    _renderVideoQualityLabel: () => React$Element<*>;\n}\n\nexport default connect(_mapStateToProps)(Labels);\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\ndeclare var config: Object;\n\ntype Props = {\n    _message?: string,\n};\n\n/**\n * Notice react component.\n *\n * @class Notice\n */\nclass Notice extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (!this.props._message) {\n            return null;\n        }\n\n        return (\n            <div className = 'notice'>\n                <span className = 'notice__message' >\n                    { this.props._message }\n                </span>\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code Notice}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _message: string,\n * }}\n */\nfunction _mapStateToProps(state) {\n    const {\n        noticeMessage\n    } = state['features/base/config'];\n\n    return {\n        _message: noticeMessage\n    };\n}\nexport default translate(connect(_mapStateToProps)(Notice));\n","// @flow\n\nimport { Component } from 'react';\n\nimport { connect } from '../../base/redux';\nimport { getLocalizedDurationFormatter } from '../../base/i18n';\nimport { getConferenceTimestamp } from '../../base/conference/functions';\nimport { renderConferenceTimer } from '../';\n\n/**\n * The type of the React {@code Component} props of {@link ConferenceTimer}.\n */\ntype Props = {\n\n    /**\n     * The UTC timestamp representing the time when first participant joined.\n     */\n    _startTimestamp: ?number,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link ConferenceTimer}.\n */\ntype State = {\n\n    /**\n     * Value of current conference time.\n     */\n    timerValue: string\n};\n\n/**\n * ConferenceTimer react component.\n *\n * @class ConferenceTimer\n * @extends Component\n */\nclass ConferenceTimer extends Component<Props, State> {\n\n    /**\n     * Handle for setInterval timer.\n     */\n    _interval;\n\n    /**\n     * Initializes a new {@code ConferenceTimer} instance.\n     *\n     * @param {Props} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            timerValue: getLocalizedDurationFormatter(0)\n        };\n    }\n\n    /**\n     * Starts the conference timer when component will be\n     * mounted.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._startTimer();\n    }\n\n    /**\n     * Stops the conference timer when component will be\n     * unmounted.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._stopTimer();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { timerValue } = this.state;\n        const { _startTimestamp } = this.props;\n\n        if (!_startTimestamp) {\n            return null;\n        }\n\n        return renderConferenceTimer(timerValue);\n    }\n\n    /**\n     * Sets the current state values that will be used to render the timer.\n     *\n     * @param {number} refValueUTC - The initial UTC timestamp value.\n     * @param {number} currentValueUTC - The current UTC timestamp value.\n     *\n     * @returns {void}\n     */\n    _setStateFromUTC(refValueUTC, currentValueUTC) {\n\n        if (!refValueUTC || !currentValueUTC) {\n            return;\n        }\n\n        if (currentValueUTC < refValueUTC) {\n            return;\n        }\n\n        const timerMsValue = currentValueUTC - refValueUTC;\n\n        const localizedTime = getLocalizedDurationFormatter(timerMsValue);\n\n        this.setState({\n            timerValue: localizedTime\n        });\n    }\n\n    /**\n     * Start conference timer.\n     *\n     * @returns {void}\n     */\n    _startTimer() {\n        if (!this._interval) {\n            this._setStateFromUTC(this.props._startTimestamp, (new Date()).getTime());\n\n            this._interval = setInterval(() => {\n                this._setStateFromUTC(this.props._startTimestamp, (new Date()).getTime());\n            }, 1000);\n        }\n    }\n\n    /**\n     * Stop conference timer.\n     *\n     * @returns {void}\n     */\n    _stopTimer() {\n        if (this._interval) {\n            clearInterval(this._interval);\n        }\n\n        this.setState({\n            timerValue: getLocalizedDurationFormatter(0)\n        });\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code ConferenceTimer}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *      _startTimestamp: number\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n\n    return {\n        _startTimestamp: getConferenceTimestamp(state)\n    };\n}\n\nexport default connect(_mapStateToProps)(ConferenceTimer);\n","// @flow\n\nimport React from 'react';\n\n/**\n * Returns web element to be rendered.\n *\n * @param {string} timerValue - String to display as time.\n *\n * @returns {ReactElement}\n */\nexport default function renderConferenceTimer(timerValue: string) {\n    return (\n        <span className = 'subject-conference-timer' >{ timerValue }</span>\n    );\n}\n","// @flow\n\nimport React, { PureComponent } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { openDialog } from '../../../base/dialog';\nimport { getParticipantCount } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { SpeakerStats } from '../../../speaker-stats';\n\n/**\n * The type of the React {@code Component} props of {@link ParticipantsCount}.\n */\ntype Props = {\n\n    /**\n     * Number of the conference participants.\n     */\n    count: string,\n\n    /**\n     * Conference data.\n     */\n    conference: Object,\n\n    /**\n     * Invoked to open Speaker stats.\n     */\n    dispatch: Dispatch<any>,\n};\n\n/**\n * ParticipantsCount react component.\n * Displays the number of participants and opens Speaker stats on click.\n *\n * @class ParticipantsCount\n */\nclass ParticipantsCount extends PureComponent<Props> {\n    /**\n     * Initializes a new ParticipantsCount instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onClick = this._onClick.bind(this);\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Callback invoked to display {@code SpeakerStats}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClick() {\n        const { dispatch, conference } = this.props;\n\n        dispatch(openDialog(SpeakerStats, { conference }));\n    }\n\n    /**\n     * Implements React's {@link PureComponent#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div\n                className = 'participants-count'\n                onClick = { this._onClick }>\n                <span className = 'participants-count-number'>\n                    {this.props.count}\n                </span>\n                <span className = 'participants-count-icon' />\n            </div>\n        );\n    }\n}\n\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code ParticipantsCount} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction mapStateToProps(state) {\n    return {\n        conference: state['features/base/conference'].conference,\n        count: getParticipantCount(state)\n    };\n}\n\nexport default connect(mapStateToProps)(ParticipantsCount);\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { getConferenceName } from '../../../base/conference/functions';\nimport { getParticipantCount } from '../../../base/participants/functions';\nimport { connect } from '../../../base/redux';\nimport { isToolboxVisible } from '../../../toolbox';\n\nimport ConferenceTimer from '../ConferenceTimer';\nimport ParticipantsCount from './ParticipantsCount';\n\n/**\n * The type of the React {@code Component} props of {@link Subject}.\n */\ntype Props = {\n\n    /**\n     * Whether then participant count should be shown or not.\n     */\n    _showParticipantCount: boolean,\n\n    /**\n     * The subject or the of the conference.\n     * Falls back to conference name.\n     */\n    _subject: string,\n\n    /**\n     * Indicates whether the component should be visible or not.\n     */\n    _visible: boolean\n};\n\n/**\n * Subject react component.\n *\n * @class Subject\n */\nclass Subject extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _showParticipantCount, _subject, _visible } = this.props;\n\n        return (\n            <div className = { `subject ${_visible ? 'visible' : ''}` }>\n                <span className = 'subject-text'>{ _subject }</span>\n                { _showParticipantCount && <ParticipantsCount /> }\n                <ConferenceTimer />\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code Subject}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _subject: string,\n *     _visible: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    const participantCount = getParticipantCount(state);\n\n    return {\n        _showParticipantCount: participantCount > 2,\n        _subject: getConferenceName(state),\n        _visible: isToolboxVisible(state)\n    };\n}\n\nexport default connect(_mapStateToProps)(Subject);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { NotificationsContainer } from '../../notifications/components';\n\nimport { shouldDisplayNotifications } from '../functions';\nimport { shouldDisplayTileView } from '../../video-layout';\n\n/**\n * The type of the React {@code Component} props of {@link AbstractLabels}.\n */\nexport type AbstractProps = {\n\n    /**\n     * Set to {@code true} when the notifications are to be displayed.\n     *\n     * @protected\n     * @type {boolean}\n     */\n    _notificationsVisible: boolean,\n\n    /**\n     * Conference room name.\n     *\n     * @protected\n     * @type {string}\n     */\n    _room: string,\n\n    /**\n     * Whether or not the layout should change to support tile view mode.\n     *\n     * @protected\n     * @type {boolean}\n     */\n    _shouldDisplayTileView: boolean\n};\n\n/**\n * A container to hold video status labels, including recording status and\n * current large video quality.\n *\n * @extends Component\n */\nexport class AbstractConference<P: AbstractProps, S>\n    extends Component<P, S> {\n\n    /**\n     * Renders the {@code LocalRecordingLabel}.\n     *\n     * @param {Object} props - The properties to be passed to\n     * the {@code NotificationsContainer}.\n     * @protected\n     * @returns {React$Element}\n     */\n    renderNotificationsContainer(props: ?Object) {\n        if (this.props._notificationsVisible) {\n            return (\n                React.createElement(NotificationsContainer, props)\n            );\n        }\n\n        return null;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props of the {@link Labels}\n * {@code Component}.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {AbstractProps}\n */\nexport function abstractMapStateToProps(state: Object) {\n    return {\n        _notificationsVisible: shouldDisplayNotifications(state),\n        _room: state['features/base/conference'].room,\n        _shouldDisplayTileView: shouldDisplayTileView(state)\n    };\n}\n","// @flow\n\nimport _ from 'lodash';\nimport React from 'react';\n\nimport VideoLayout from '../../../../../modules/UI/videolayout/VideoLayout';\n\nimport { connect, disconnect } from '../../../base/connection';\nimport { translate } from '../../../base/i18n';\nimport { connect as reactReduxConnect } from '../../../base/redux';\nimport { getConferenceNameForTitle } from '../../../base/conference';\nimport { Chat } from '../../../chat';\nimport { Filmstrip } from '../../../filmstrip';\nimport { CalleeInfoContainer } from '../../../invite';\nimport { LargeVideo } from '../../../large-video';\nimport { Prejoin, isPrejoinPageVisible } from '../../../prejoin';\nimport { LAYOUTS, getCurrentLayout } from '../../../video-layout';\n\nimport {\n    Toolbox,\n    fullScreenChanged,\n    setToolboxAlwaysVisible,\n    showToolbox\n} from '../../../toolbox';\n\nimport { maybeShowSuboptimalExperienceNotification } from '../../functions';\n\nimport Labels from './Labels';\nimport { default as Notice } from './Notice';\nimport { default as Subject } from './Subject';\nimport {\n    AbstractConference,\n    abstractMapStateToProps\n} from '../AbstractConference';\nimport type { AbstractProps } from '../AbstractConference';\n\ndeclare var APP: Object;\ndeclare var config: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * DOM events for when full screen mode has changed. Different browsers need\n * different vendor prefixes.\n *\n * @private\n * @type {Array<string>}\n */\nconst FULL_SCREEN_EVENTS = [\n    'webkitfullscreenchange',\n    'mozfullscreenchange',\n    'fullscreenchange'\n];\n\n/**\n * The CSS class to apply to the root element of the conference so CSS can\n * modify the app layout.\n *\n * @private\n * @type {Object}\n */\nconst LAYOUT_CLASSNAMES = {\n    [LAYOUTS.HORIZONTAL_FILMSTRIP_VIEW]: 'horizontal-filmstrip',\n    [LAYOUTS.TILE_VIEW]: 'tile-view',\n    [LAYOUTS.VERTICAL_FILMSTRIP_VIEW]: 'vertical-filmstrip'\n};\n\n/**\n * The type of the React {@code Component} props of {@link Conference}.\n */\ntype Props = AbstractProps & {\n\n    /**\n     * Whether the local participant is recording the conference.\n     */\n    _iAmRecorder: boolean,\n\n    /**\n     * The CSS class to apply to the root of {@link Conference} to modify the\n     * application layout.\n     */\n    _layoutClassName: string,\n\n    /**\n     * Name for this conference room.\n     */\n    _roomName: string,\n\n    /**\n     * If prejoin page is visible or not.\n     */\n    _showPrejoin: boolean,\n\n    dispatch: Function,\n    t: Function\n}\n\n/**\n * The conference page of the Web application.\n */\nclass Conference extends AbstractConference<Props, *> {\n    _onFullScreenChange: Function;\n    _onShowToolbar: Function;\n    _originalOnShowToolbar: Function;\n\n    /**\n     * Initializes a new Conference instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        // Throttle and bind this component's mousemove handler to prevent it\n        // from firing too often.\n        this._originalOnShowToolbar = this._onShowToolbar;\n        this._onShowToolbar = _.throttle(\n            () => this._originalOnShowToolbar(),\n            100,\n            {\n                leading: true,\n                trailing: false\n            });\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onFullScreenChange = this._onFullScreenChange.bind(this);\n    }\n\n    /**\n     * Start the connection and get the UI ready for the conference.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        document.title = `${this.props._roomName} | ${interfaceConfig.APP_NAME}`;\n        this._start();\n    }\n\n    /**\n     * Calls into legacy UI to update the application layout, if necessary.\n     *\n     * @inheritdoc\n     * returns {void}\n     */\n    componentDidUpdate(prevProps) {\n        if (this.props._shouldDisplayTileView\n            === prevProps._shouldDisplayTileView) {\n            return;\n        }\n\n        // TODO: For now VideoLayout is being called as LargeVideo and Filmstrip\n        // sizing logic is still handled outside of React. Once all components\n        // are in react they should calculate size on their own as much as\n        // possible and pass down sizings.\n        VideoLayout.refreshLayout();\n    }\n\n    /**\n     * Disconnect from the conference when component will be\n     * unmounted.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        APP.UI.unbindEvents();\n\n        FULL_SCREEN_EVENTS.forEach(name =>\n            document.removeEventListener(name, this._onFullScreenChange));\n\n        APP.conference.isJoined() && this.props.dispatch(disconnect());\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            VIDEO_QUALITY_LABEL_DISABLED,\n\n            // XXX The character casing of the name filmStripOnly utilized by\n            // interfaceConfig is obsolete but legacy support is required.\n            filmStripOnly: filmstripOnly\n        } = interfaceConfig;\n        const {\n            _iAmRecorder,\n            _layoutClassName,\n            _showPrejoin\n        } = this.props;\n        const hideVideoQualityLabel\n            = filmstripOnly\n                || VIDEO_QUALITY_LABEL_DISABLED\n                || _iAmRecorder;\n\n        return (\n            <div\n                className = { _layoutClassName }\n                id = 'videoconference_page'\n                onMouseMove = { this._onShowToolbar }>\n\n                <Notice />\n                <Subject />\n                <div id = 'videospace'>\n                    <LargeVideo />\n                    { hideVideoQualityLabel\n                        || <Labels /> }\n                    <Filmstrip filmstripOnly = { filmstripOnly } />\n                </div>\n\n                { filmstripOnly || _showPrejoin || <Toolbox /> }\n                { filmstripOnly || <Chat /> }\n\n                { this.renderNotificationsContainer() }\n\n                { !filmstripOnly && _showPrejoin && <Prejoin />}\n\n                <CalleeInfoContainer />\n            </div>\n        );\n    }\n\n    /**\n     * Updates the Redux state when full screen mode has been enabled or\n     * disabled.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onFullScreenChange() {\n        this.props.dispatch(fullScreenChanged(APP.UI.isFullScreen()));\n    }\n\n    /**\n     * Displays the toolbar.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShowToolbar() {\n        this.props.dispatch(showToolbox());\n    }\n\n    /**\n     * Until we don't rewrite UI using react components\n     * we use UI.start from old app. Also method translates\n     * component right after it has been mounted.\n     *\n     * @inheritdoc\n     */\n    _start() {\n        APP.UI.start();\n\n        APP.UI.registerListeners();\n        APP.UI.bindEvents();\n\n        FULL_SCREEN_EVENTS.forEach(name =>\n            document.addEventListener(name, this._onFullScreenChange));\n\n        const { dispatch, t } = this.props;\n\n        dispatch(connect());\n\n        maybeShowSuboptimalExperienceNotification(dispatch, t);\n\n        interfaceConfig.filmStripOnly\n            && dispatch(setToolboxAlwaysVisible(true));\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code Conference} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    return {\n        ...abstractMapStateToProps(state),\n        _iAmRecorder: state['features/base/config'].iAmRecorder,\n        _layoutClassName: LAYOUT_CLASSNAMES[getCurrentLayout(state)],\n        _roomName: getConferenceNameForTitle(state),\n        _showPrejoin: isPrejoinPageVisible(state)\n    };\n}\n\nexport default reactReduxConnect(_mapStateToProps)(translate(Conference));\n","// @flow\nimport { notifyKickedOut } from './actions';\nimport { appNavigate } from '../app';\nimport {\n    CONFERENCE_JOINED,\n    KICKED_OUT,\n    VIDEO_QUALITY_LEVELS,\n    conferenceLeft,\n    getCurrentConference,\n    setPreferredVideoQuality\n} from '../base/conference';\nimport { hideDialog, isDialogOpen } from '../base/dialog';\nimport { setActiveModalId } from '../base/modal';\nimport { pinParticipant } from '../base/participants';\nimport { SET_REDUCED_UI } from '../base/responsive-ui';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\nimport { FeedbackDialog } from '../feedback';\nimport { setFilmstripEnabled } from '../filmstrip';\nimport { setToolboxEnabled } from '../toolbox';\n\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case CONFERENCE_JOINED:\n    case SET_REDUCED_UI: {\n        const { dispatch, getState } = store;\n        const state = getState();\n        const { reducedUI } = state['features/base/responsive-ui'];\n\n        dispatch(setToolboxEnabled(!reducedUI));\n        dispatch(setFilmstripEnabled(!reducedUI));\n\n        dispatch(\n            setPreferredVideoQuality(\n                reducedUI\n                    ? VIDEO_QUALITY_LEVELS.LOW\n                    : VIDEO_QUALITY_LEVELS.HIGH));\n\n        break;\n    }\n\n    case KICKED_OUT: {\n        const { dispatch } = store;\n\n        dispatch(notifyKickedOut(\n            action.participant,\n            () => {\n                dispatch(conferenceLeft(action.conference));\n                dispatch(appNavigate(undefined));\n            }\n        ));\n\n        break;\n    }\n    }\n\n    return result;\n});\n\n/**\n * Set up state change listener to perform maintenance tasks when the conference\n * is left or failed, close all dialogs and unpin any pinned participants.\n */\nStateListenerRegistry.register(\n    state => getCurrentConference(state),\n    (conference, { dispatch, getState }, prevConference) => {\n        const { authRequired, passwordRequired }\n            = getState()['features/base/conference'];\n\n        if (conference !== prevConference) {\n            // Unpin participant, in order to avoid the local participant\n            // remaining pinned, since it's not destroyed across runs.\n            dispatch(pinParticipant(null));\n\n            // XXX I wonder if there is a better way to do this. At this stage\n            // we do know what dialogs we want to keep but the list of those\n            // we want to hide is a lot longer. Thus we take a bit of a shortcut\n            // and explicitly check.\n            if (typeof authRequired === 'undefined'\n                    && typeof passwordRequired === 'undefined'\n                    && !isDialogOpen(getState(), FeedbackDialog)) {\n                // Conference changed, left or failed... and there is no\n                // pending authentication, nor feedback request, so close any\n                // dialog we might have open.\n                dispatch(hideDialog());\n            }\n\n            // We want to close all modals.\n            dispatch(setActiveModalId());\n        }\n    });\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    NOTIFICATION_TYPE,\n    showNotification\n} from '../notifications';\nimport { getParticipantDisplayName } from '../base/participants';\n\n/**\n * Notify that we've been kicked out of the conference.\n *\n * @param {JitsiParticipant} participant - The {@link JitsiParticipant}\n * instance which initiated the kick event.\n * @param {?Function} _ - Used only in native code.\n * @returns {Function}\n */\nexport function notifyKickedOut(participant: Object, _: ?Function) { // eslint-disable-line no-unused-vars\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const args = {\n            participantDisplayName:\n                getParticipantDisplayName(getState, participant.getId())\n        };\n\n        dispatch(showNotification({\n            appearance: NOTIFICATION_TYPE.ERROR,\n            hideErrorSupportLink: true,\n            descriptionKey: 'dialog.kickMessage',\n            descriptionArguments: args,\n            titleKey: 'dialog.kickTitle',\n            titleArguments: args\n        }));\n    };\n}\n","/* @flow */\n\n/**\n * The type of the action which signals to open the conference in the desktop\n * app.\n *\n * {\n *     type: OPEN_DESKTOP\n * }\n */\nexport const OPEN_DESKTOP_APP = 'OPEN_DESKTOP_APP';\n\n/**\n * The type of the action which signals to open the conference in the web app.\n *\n * {\n *     type: OPEN_WEB_APP\n * }\n */\nexport const OPEN_WEB_APP = 'OPEN_WEB_APP';\n","/**\n * The namespace of the i18n/translation keys.\n *\n * @type {string}\n */\nexport const _TNS = 'deepLinking';\n","// @flow\n\nimport Button, { ButtonGroup } from '@atlaskit/button';\nimport { AtlasKitThemeProvider } from '@atlaskit/theme';\nimport React, { Component } from 'react';\nimport { connect } from '../../base/redux';\nimport type { Dispatch } from 'redux';\n\nimport { createDeepLinkingPageEvent, sendAnalytics } from '../../analytics';\nimport { isSupportedBrowser } from '../../base/environment';\nimport { translate } from '../../base/i18n';\n\nimport {\n    openWebApp,\n    openDesktopApp\n} from '../actions';\nimport { _TNS } from '../constants';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of\n * {@link DeepLinkingDesktopPage}.\n */\n type Props = {\n\n    /**\n     * Used to dispatch actions from the buttons.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Used to obtain translations.\n     */\n    t: Function\n};\n\n/**\n * React component representing the deep linking page.\n *\n * @class DeepLinkingDesktopPage\n */\nclass DeepLinkingDesktopPage<P : Props> extends Component<P> {\n    /**\n     * Initializes a new {@code DeepLinkingDesktopPage} instance.\n     *\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onLaunchWeb = this._onLaunchWeb.bind(this);\n        this._onTryAgain = this._onTryAgain.bind(this);\n    }\n\n    /**\n     * Implements the Component's componentDidMount method.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'displayed', 'DeepLinkingDesktop', { isMobileBrowser: false }));\n    }\n\n    /**\n     * Renders the component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n        const { NATIVE_APP_NAME, SHOW_DEEP_LINKING_IMAGE } = interfaceConfig;\n        const rightColumnStyle\n            = SHOW_DEEP_LINKING_IMAGE ? null : { width: '100%' };\n\n        return (\n\n            // Enabling light theme because of the color of the buttons.\n            <AtlasKitThemeProvider mode = 'light'>\n                <div className = 'deep-linking-desktop'>\n                    <div className = 'header'>\n                        <img\n                            className = 'logo'\n                            src = 'images/logo-deep-linking.png' />\n                    </div>\n                    <div className = 'content'>\n                        {\n                            SHOW_DEEP_LINKING_IMAGE\n                                ? <div className = 'leftColumn'>\n                                    <div className = 'leftColumnContent'>\n                                        <div className = 'image' />\n                                    </div>\n                                </div> : null\n                        }\n                        <div\n                            className = 'rightColumn'\n                            style = { rightColumnStyle }>\n                            <div className = 'rightColumnContent'>\n                                <h1 className = 'title'>\n                                    {\n                                        t(`${_TNS}.title`,\n                                        { app: NATIVE_APP_NAME })\n                                    }\n                                </h1>\n                                <p className = 'description'>\n                                    {\n                                        t(\n                                            `${_TNS}.${isSupportedBrowser()\n                                                ? 'description'\n                                                : 'descriptionWithoutWeb'}`,\n                                            { app: NATIVE_APP_NAME }\n                                        )\n                                    }\n                                </p>\n                                <div className = 'buttons'>\n                                    <ButtonGroup>\n                                        <Button\n                                            appearance = 'default'\n                                            onClick = { this._onTryAgain }>\n                                            { t(`${_TNS}.tryAgainButton`) }\n                                        </Button>\n                                        {\n                                            isSupportedBrowser()\n                                                && <Button onClick = { this._onLaunchWeb }>\n                                                    { t(`${_TNS}.launchWebButton`) }\n                                                </Button>\n                                        }\n                                    </ButtonGroup>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </AtlasKitThemeProvider>\n        );\n    }\n\n    _onTryAgain: () => void;\n\n    /**\n     * Handles try again button clicks.\n     *\n     * @returns {void}\n     */\n    _onTryAgain() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'clicked', 'tryAgainButton', { isMobileBrowser: false }));\n        this.props.dispatch(openDesktopApp());\n    }\n\n    _onLaunchWeb: () => void;\n\n    /**\n     * Handles launch web button clicks.\n     *\n     * @returns {void}\n     */\n    _onLaunchWeb() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'clicked', 'launchWebButton', { isMobileBrowser: false }));\n        this.props.dispatch(openWebApp());\n    }\n}\n\nexport default translate(connect()(DeepLinkingDesktopPage));\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { appNavigate } from '../app';\n\nimport { OPEN_DESKTOP_APP, OPEN_WEB_APP } from './actionTypes';\n\n/**\n * Continue to the conference page.\n *\n * @returns {Function}\n */\nexport function openWebApp() {\n    return (dispatch: Dispatch<any>) => {\n        // In order to go to the web app we need to skip the deep linking\n        // interceptor. OPEN_WEB_APP action should set launchInWeb to true in\n        // the redux store. After this when appNavigate() is called the\n        // deep linking interceptor will be skipped (will return undefined).\n        dispatch({ type: OPEN_WEB_APP });\n        dispatch(appNavigate());\n    };\n}\n\n/**\n * Opens the desktop app.\n *\n * @returns {{\n *     type: OPEN_DESKTOP_APP\n * }}\n */\nexport function openDesktopApp() {\n    return {\n        type: OPEN_DESKTOP_APP\n    };\n}\n","// @flow\n\nimport React, { Component } from 'react';\nimport { connect } from '../../base/redux';\n\nimport { createDeepLinkingPageEvent, sendAnalytics } from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { Platform } from '../../base/react';\nimport { DialInSummary } from '../../invite';\n\nimport { _TNS } from '../constants';\nimport { generateDeepLinkingURL } from '../functions';\nimport { renderPromotionalFooter } from '../renderPromotionalFooter';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The namespace of the CSS styles of DeepLinkingMobilePage.\n *\n * @private\n * @type {string}\n */\nconst _SNS = 'deep-linking-mobile';\n\n/**\n * The map of platforms to URLs at which the mobile app for the associated\n * platform is available for download.\n *\n * @private\n * @type {Array<string>}\n */\nconst _URLS = {\n    android: interfaceConfig.MOBILE_DOWNLOAD_LINK_ANDROID,\n    ios: interfaceConfig.MOBILE_DOWNLOAD_LINK_IOS\n};\n\n/**\n * The type of the React {@code Component} props of\n * {@link DeepLinkingMobilePage}.\n */\ntype Props = {\n\n    /**\n     * The name of the conference attempting to being joined.\n     */\n    _room: string,\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * React component representing mobile browser page.\n *\n * @class DeepLinkingMobilePage\n */\nclass DeepLinkingMobilePage extends Component<Props> {\n    /**\n     * Initializes a new {@code DeepLinkingMobilePage} instance.\n     *\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onDownloadApp = this._onDownloadApp.bind(this);\n        this._onOpenApp = this._onOpenApp.bind(this);\n    }\n\n    /**\n     * Implements the Component's componentDidMount method.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'displayed', 'DeepLinkingMobile', { isMobileBrowser: true }));\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _room, t } = this.props;\n        const { NATIVE_APP_NAME, SHOW_DEEP_LINKING_IMAGE } = interfaceConfig;\n        const downloadButtonClassName\n            = `${_SNS}__button ${_SNS}__button_primary`;\n\n\n        const onOpenLinkProperties = _URLS[Platform.OS]\n            ? {\n                // When opening a link to the download page, we want to let the\n                // OS itself handle intercepting and opening the appropriate\n                // app store. This avoids potential issues with browsers, such\n                // as iOS Chrome, not opening the store properly.\n            }\n            : {\n                // When falling back to another URL (Firebase) let the page be\n                // opened in a new window. This helps prevent the user getting\n                // trapped in an app-open-cycle where going back to the mobile\n                // browser re-triggers the app-open behavior.\n                target: '_blank',\n                rel: 'noopener noreferrer'\n            };\n\n        return (\n            <div className = { _SNS }>\n                <div className = 'header'>\n                    <img\n                        className = 'logo'\n                        src = 'images/logo-deep-linking.png' />\n                </div>\n                <div className = { `${_SNS}__body` }>\n                    {\n                        SHOW_DEEP_LINKING_IMAGE\n                            ? <img\n                                className = 'image'\n                                src = 'images/deep-linking-image.png' />\n                            : null\n                    }\n                    <p className = { `${_SNS}__text` }>\n                        { t(`${_TNS}.appNotInstalled`, { app: NATIVE_APP_NAME }) }\n                    </p>\n                    <a\n                        { ...onOpenLinkProperties }\n                        href = { this._generateDownloadURL() }\n                        onClick = { this._onDownloadApp }>\n                        <button className = { downloadButtonClassName }>\n                            { t(`${_TNS}.downloadApp`) }\n                        </button>\n                    </a>\n                    <a\n                        { ...onOpenLinkProperties }\n                        className = { `${_SNS}__href` }\n                        href = { generateDeepLinkingURL() }\n                        onClick = { this._onOpenApp }>\n                        {/* <button className = { `${_SNS}__button` }> */}\n                        { t(`${_TNS}.openApp`) }\n                        {/* </button> */}\n                    </a>\n                    { renderPromotionalFooter() }\n                    <DialInSummary\n                        className = 'deep-linking-dial-in'\n                        clickableNumbers = { true }\n                        room = { _room } />\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Generates the URL for downloading the app.\n     *\n     * @private\n     * @returns {string} - The URL for downloading the app.\n     */\n    _generateDownloadURL() {\n        const url = _URLS[Platform.OS];\n\n        if (url) {\n            return url;\n        }\n\n        // For information about the properties of\n        // interfaceConfig.MOBILE_DYNAMIC_LINK check:\n        // https://firebase.google.com/docs/dynamic-links/create-manually\n        const {\n            APN = 'org.jitsi.meet',\n            APP_CODE = 'w2atb',\n            IBI = 'com.atlassian.JitsiMeet.ios',\n            ISI = '1165103905'\n        } = interfaceConfig.MOBILE_DYNAMIC_LINK || {};\n        const IUS = interfaceConfig.APP_SCHEME || 'org.jitsi.meet';\n\n        return `https://${APP_CODE}.app.goo.gl/?link=${\n            encodeURIComponent(window.location.href)}&apn=${\n            APN}&ibi=${\n            IBI}&isi=${\n            ISI}&ius=${\n            IUS}&efr=1`;\n    }\n\n    _onDownloadApp: () => void;\n\n    /**\n     * Handles download app button clicks.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onDownloadApp() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'clicked', 'downloadAppButton', { isMobileBrowser: true }));\n    }\n\n    _onOpenApp: () => void;\n\n    /**\n     * Handles open app button clicks.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onOpenApp() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'clicked', 'openAppButton', { isMobileBrowser: true }));\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code DeepLinkingMobilePage} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _room: string\n * }}\n */\nfunction _mapStateToProps(state) {\n    return {\n        _room: decodeURIComponent(state['features/base/conference'].room)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(DeepLinkingMobilePage));\n","// @flow\n/**\n * Method used in order to render a custom promotional footer.\n *\n * @returns {HTMLElement}\n */\nexport function renderPromotionalFooter() {\n    return null;\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { createDeepLinkingPageEvent, sendAnalytics } from '../../analytics';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * React component representing no mobile app page.\n *\n * @class NoMobileApp\n */\nexport default class NoMobileApp extends Component<*> {\n    /**\n     * Implements the Component's componentDidMount method.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'displayed', 'noMobileApp', { isMobileBrowser: true }));\n    }\n\n    /**\n     * Renders the component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        const ns = 'no-mobile-app';\n\n        return (\n            <div className = { ns }>\n                <h2 className = { `${ns}__title` }>\n                    Video chat isn't available on mobile.\n                </h2>\n                <p className = { `${ns}__description` }>\n                    Please use { interfaceConfig.NATIVE_APP_NAME } on desktop to\n                    join calls.\n                </p>\n            </div>\n        );\n    }\n}\n","// @flow\n\n/**\n * Opens the desktop app.\n *\n * @param {Object} state - Object containing current redux state.\n * @returns {Promise<boolean>} - Resolves with true if the attempt to open the desktop app was successful and resolves\n * with false otherwise.\n */\nexport function _openDesktopApp(state: Object) { // eslint-disable-line no-unused-vars\n    return Promise.resolve(false);\n}\n","/* global interfaceConfig */\n\nimport { URI_PROTOCOL_PATTERN } from '../base/util';\nimport { isMobileBrowser } from '../base/environment/utils';\nimport { Platform } from '../base/react';\n\nimport {\n    DeepLinkingDesktopPage,\n    DeepLinkingMobilePage,\n    NoMobileApp\n} from './components';\nimport { _openDesktopApp } from './openDesktopApp';\n\n/**\n * Generates a deep linking URL based on the current window URL.\n *\n * @returns {string} - The generated URL.\n */\nexport function generateDeepLinkingURL() {\n    // If the user installed the app while this Component was displayed\n    // (e.g. the user clicked the Download the App button), then we would\n    // like to open the current URL in the mobile app. The only way to do it\n    // appears to be a link with an app-specific scheme, not a Universal\n    // Link.\n\n    const appScheme = interfaceConfig.APP_SCHEME || 'org.jitsi.meet';\n    const { href } = window.location;\n    const regex = new RegExp(URI_PROTOCOL_PATTERN, 'gi');\n\n    // Android: use an intent link, custom schemes don't work in all browsers.\n    // https://developer.chrome.com/multidevice/android/intents\n    if (Platform.OS === 'android') {\n        // https://meet.jit.si/foo -> meet.jit.si/foo\n        const url = href.replace(regex, '').substr(2);\n        const pkg = interfaceConfig.ANDROID_APP_PACKAGE || 'org.jitsi.meet';\n\n        return `intent://${url}#Intent;scheme=${appScheme};package=${pkg};end`;\n    }\n\n    // iOS: Replace the protocol part with the app scheme.\n    return href.replace(regex, `${appScheme}:`);\n}\n\n/**\n * Resolves with the component that should be displayed if the deep linking page\n * should be shown and with <tt>undefined</tt> otherwise.\n *\n * @param {Object} state - Object containing current redux state.\n * @returns {Promise<Component>}\n */\nexport function getDeepLinkingPage(state) {\n    const { room } = state['features/base/conference'];\n\n    // Show only if we are about to join a conference.\n    if (!room || state['features/base/config'].disableDeepLinking) {\n        return Promise.resolve();\n    }\n\n    if (isMobileBrowser()) { // mobile\n        const mobileAppPromo\n            = typeof interfaceConfig === 'object'\n                && interfaceConfig.MOBILE_APP_PROMO;\n\n        return Promise.resolve(\n            typeof mobileAppPromo === 'undefined' || Boolean(mobileAppPromo)\n                ? DeepLinkingMobilePage : NoMobileApp);\n    }\n\n    // desktop\n    const { launchInWeb } = state['features/deep-linking'];\n\n    if (launchInWeb) {\n        return Promise.resolve();\n    }\n\n    return _openDesktopApp(state).then(\n        // eslint-disable-next-line no-confusing-arrow\n        result => result ? DeepLinkingDesktopPage : undefined);\n}\n\n/**\n * Opens the desktop app.\n *\n * @param {Object} state - Object containing current redux state.\n * @returns {Promise<boolean>} - Resolves with true if the attempt to open the desktop app was successful and resolves\n * with false otherwise.\n */\nexport function openDesktopApp(state) {\n    return _openDesktopApp(state);\n}\n","// @flow\n\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport { OPEN_DESKTOP_APP } from './actionTypes';\nimport { openDesktopApp } from './functions';\n\n/**\n * Implements the middleware of the deep linking feature.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case OPEN_DESKTOP_APP:\n        openDesktopApp(store.getState());\n        break;\n    }\n\n    return next(action);\n});\n","/* @flow */\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport { OPEN_WEB_APP } from './actionTypes';\n\nReducerRegistry.register('features/deep-linking', (state = {}, action) => {\n    switch (action.type) {\n    case OPEN_WEB_APP: {\n        return {\n            ...state,\n            launchInWeb: true\n        };\n    }\n    }\n\n    return state;\n});\n","/* @flow */\n\n/**\n * The URL at which Google Chrome is available for download.\n *\n * @type {string}\n */\nexport const CHROME = 'https://www.google.com/chrome/';\n\n/**\n * The URL at which Chromium is available for download.\n *\n * @type {string}\n */\nexport const CHROMIUM = 'https://www.chromium.org/';\n\n/**\n * The URL at which Microsoft Edge is available for download.\n *\n * @type {string}\n */\nexport const EDGE\n    = 'https://www.microsoft.com/en-us/windows/microsoft-edge';\n\n/**\n * The URL at which Mozilla Firefox is available for download.\n *\n * @type {string}\n */\nexport const FIREFOX = 'https://www.getfirefox.com/';\n\n/**\n * The URL at which Safari is available for download.\n *\n * @type {string}\n */\nexport const SAFARI = 'https://support.apple.com/downloads/safari';\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { isBrowsersOptimal } from '../../base/environment';\nimport { translate } from '../../base/i18n';\n\nimport { CHROME, FIREFOX } from './browserLinks';\n\n/**\n * The namespace of the CSS styles of UnsupportedDesktopBrowser.\n *\n * @private\n * @type {string}\n */\nconst _SNS = 'unsupported-desktop-browser';\n\n/**\n * The type of the React {@code Component} props of\n * {@link UnsupportedDesktopBrowser}.\n */\ntype Props = {\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * React component representing unsupported browser page.\n *\n * @class UnsupportedDesktopBrowser\n */\nclass UnsupportedDesktopBrowser extends Component<Props> {\n    /**\n     * Renders the component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div className = { _SNS }>\n                <h2 className = { `${_SNS}__title` }>\n                    It looks like you're using a browser we don't support.\n                </h2>\n                <p className = { `${_SNS}__description` }>\n                    Please try again with the latest version of&nbsp;\n                    <a\n                        className = { `${_SNS}__link` }\n                        href = { CHROME } >Chrome</a>&nbsp;\n                    {\n                        this._showFirefox() && <>or <a\n                            className = { `${_SNS}__link` }\n                            href = { FIREFOX }>Firefox</a></>\n                    }\n                </p>\n            </div>\n        );\n    }\n\n    /**\n     * Returns whether or not a link to download Firefox is displayed.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _showFirefox() {\n        return isBrowsersOptimal('firefox');\n    }\n}\n\nexport default translate(UnsupportedDesktopBrowser);\n","export default undefined;\n","export default {};\n","// @flow\n\nimport React from 'react';\nimport type { Dispatch } from 'redux';\n\nimport {\n    createRecentClickedEvent,\n    createRecentSelectedEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { appNavigate } from '../../app';\nimport {\n    AbstractPage,\n    Container,\n    Text\n} from '../../base/react';\n\nimport styles from './styles';\n\n/**\n * The type of the React {@code Component} props of {@link AbstractRecentList}\n */\ntype Props = {\n\n    /**\n     * The redux store's {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * The translate function.\n     */\n    t: Function\n};\n\n/**\n * An abstract component for the recent list.\n *\n */\nexport default class AbstractRecentList<P: Props> extends AbstractPage<P> {\n    /**\n     * Initializes a new {@code RecentList} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        this._onPress = this._onPress.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}. Invoked\n     * immediately after this component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        sendAnalytics(createRecentSelectedEvent());\n    }\n\n    _getRenderListEmptyComponent: () => React$Node;\n\n    /**\n     * Returns a list empty component if a custom one has to be rendered instead\n     * of the default one in the {@link NavigateSectionList}.\n     *\n     * @private\n     * @returns {React$Component}\n     */\n    _getRenderListEmptyComponent() {\n        const { t } = this.props;\n\n        return (\n            <Container\n                className = 'meetings-list-empty'\n                style = { styles.emptyListContainer }>\n                <Text\n                    className = 'description'\n                    style = { styles.emptyListText }>\n                    { t('welcomepage.recentListEmpty') }\n                </Text>\n            </Container>\n        );\n    }\n\n    _onPress: string => void;\n\n    /**\n     * Handles the list's navigate action.\n     *\n     * @private\n     * @param {string} url - The url string to navigate to.\n     * @returns {void}\n     */\n    _onPress(url) {\n        const { dispatch } = this.props;\n\n        sendAnalytics(createRecentClickedEvent('recent.meeting.tile'));\n\n        dispatch(appNavigate(url));\n    }\n}\n","/* global interfaceConfig */\n\nimport { parseURIString, safeDecodeURIComponent } from '../base/util';\n\n\n/**\n * Transforms the history list to a displayable list.\n *\n * @private\n * @param {Array<Object>} recentList - The recent list form the redux store.\n * @returns {Array<Object>}\n */\nexport function toDisplayableList(recentList) {\n    return (\n        recentList.slice(-3).reverse()\n            .map(item => {\n                return {\n                    date: item.date,\n                    duration: item.duration,\n                    time: [ item.date ],\n                    title: safeDecodeURIComponent(parseURIString(item.conference).room),\n                    url: item.conference\n                };\n            }));\n}\n\n/**\n * Returns <tt>true</tt> if recent list is enabled and <tt>false</tt> otherwise.\n *\n * @returns {boolean} <tt>true</tt> if recent list is enabled and <tt>false</tt>\n * otherwise.\n */\nexport function isRecentListEnabled() {\n    return interfaceConfig.RECENT_LIST_ENABLED;\n}\n","// @flow\n\nimport React from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { translate } from '../../base/i18n';\nimport { MeetingsList } from '../../base/react';\nimport { connect } from '../../base/redux';\n\nimport AbstractRecentList from './AbstractRecentList';\nimport { isRecentListEnabled, toDisplayableList } from '../functions';\n\n/**\n * The type of the React {@code Component} props of {@link RecentList}\n */\ntype Props = {\n\n    /**\n     * Renders the list disabled.\n     */\n    disabled: boolean,\n\n    /**\n     * The redux store's {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * The translate function.\n     */\n    t: Function,\n\n    /**\n     * The recent list from the Redux store.\n     */\n    _recentList: Array<Object>\n};\n\n/**\n * The cross platform container rendering the list of the recently joined rooms.\n *\n */\nclass RecentList extends AbstractRecentList<Props> {\n    _getRenderListEmptyComponent: () => React$Node;\n    _onPress: string => {};\n\n    /**\n     * Initializes a new {@code RecentList} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._getRenderListEmptyComponent\n            = this._getRenderListEmptyComponent.bind(this);\n        this._onPress = this._onPress.bind(this);\n    }\n\n    /**\n     * Implements the React Components's render method.\n     *\n     * @inheritdoc\n     */\n    render() {\n        if (!isRecentListEnabled()) {\n            return null;\n        }\n        const {\n            disabled,\n            _recentList\n        } = this.props;\n        const recentList = toDisplayableList(_recentList);\n\n        return (\n            <MeetingsList\n                disabled = { disabled }\n                hideURL = { true }\n                listEmptyComponent = { this._getRenderListEmptyComponent() }\n                meetings = { recentList }\n                onPress = { this._onPress } />\n        );\n    }\n}\n\n/**\n * Maps redux state to component props.\n *\n * @param {Object} state - The redux state.\n * @returns {{\n *     _defaultServerURL: string,\n *     _recentList: Array\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    return {\n        _recentList: state['features/recent-list']\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(RecentList));\n","// @flow\n\n/**\n * Action type to signal the deletion of a list entry.\n *\n * {\n *     type: DELETE_RECENT_LIST_ENTRY,\n *     entryId: Object\n * }\n */\nexport const DELETE_RECENT_LIST_ENTRY = 'DELETE_RECENT_LIST_ENTRY';\n\n/**\n * Action type to signal a new addition to the list.\n *\n * {\n *     type: _STORE_CURRENT_CONFERENCE,\n *     locationURL: Object\n * }\n *\n * @protected\n */\nexport const _STORE_CURRENT_CONFERENCE = '_STORE_CURRENT_CONFERENCE';\n\n/**\n * Action type to signal that a new conference duration info is available.\n *\n * {\n *     type: _UPDATE_CONFERENCE_DURATION,\n *     locationURL: Object\n * }\n *\n * @protected\n */\nexport const _UPDATE_CONFERENCE_DURATION\n    = '_UPDATE_CONFERENCE_DURATION';\n","// @flow\n\nimport { APP_WILL_MOUNT } from '../base/app';\nimport {\n    CONFERENCE_WILL_LEAVE,\n    SET_ROOM,\n    JITSI_CONFERENCE_URL_KEY\n} from '../base/conference';\nimport { addKnownDomains } from '../base/known-domains';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { parseURIString } from '../base/util';\n\nimport { _storeCurrentConference, _updateConferenceDuration } from './actions';\nimport { isRecentListEnabled } from './functions';\n\ndeclare var APP: Object;\n\n/**\n * Middleware that captures joined rooms so they can be saved into\n * {@code window.localStorage}.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    if (isRecentListEnabled()) {\n        switch (action.type) {\n        case APP_WILL_MOUNT:\n            return _appWillMount(store, next, action);\n\n        case CONFERENCE_WILL_LEAVE:\n            return _conferenceWillLeave(store, next, action);\n\n        case SET_ROOM:\n            return _setRoom(store, next, action);\n        }\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature recent-list that the redux action {@link APP_WILL_MOUNT}\n * is being dispatched in a specific redux store.\n *\n * @param {Store} store - The redux store in which the specified action is being\n * dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The redux action {@code APP_WILL_MOUNT} which is\n * being dispatched in the specified redux store.\n * @private\n * @returns {*} The result returned by {@code next(action)}.\n */\nfunction _appWillMount({ dispatch, getState }, next, action) {\n    const result = next(action);\n\n    // It's an opportune time to transfer the feature recent-list's knowledge\n    // about \"known domains\" (which is local to the feature) to the feature\n    // base/known-domains (which is global to the app).\n    //\n    // XXX Since the feature recent-list predates the feature calendar-sync and,\n    // consequently, the feature known-domains, it's possible for the feature\n    // known-list to know of domains which the feature known-domains is yet to\n    // discover.\n    const knownDomains = [];\n\n    for (const { conference } of getState()['features/recent-list']) {\n        const uri = parseURIString(conference);\n        let host;\n\n        uri && (host = uri.host) && knownDomains.push(host);\n    }\n    knownDomains.length && dispatch(addKnownDomains(knownDomains));\n\n    return result;\n}\n\n/**\n * Updates the duration of the last conference stored in the list.\n *\n * @param {Store} store - The redux store.\n * @param {Dispatch} next - The redux {@code dispatch} function.\n * @param {Action} action - The redux action {@link CONFERENCE_WILL_LEAVE}.\n * @private\n * @returns {*} The result returned by {@code next(action)}.\n */\nfunction _conferenceWillLeave({ dispatch, getState }, next, action) {\n    const { doNotStoreRoom } = getState()['features/base/config'];\n\n    if (!doNotStoreRoom) {\n        let locationURL;\n\n        /**\n         * FIXME:\n         * It is better to use action.conference[JITSI_CONFERENCE_URL_KEY]\n         * in order to make sure we get the url the conference is leaving\n         * from (i.e. the room we are leaving from) because if the order of events\n         * is different, we cannot be guranteed that the location URL in base\n         * connection is the url we are leaving from... not the one we are going to\n         * (the latter happens on mobile -- if we use the web implementation);\n         * however, the conference object on web does not have\n         * JITSI_CONFERENCE_URL_KEY so we cannot call it and must use the other way\n         */\n        if (typeof APP === 'undefined') {\n            locationURL = action.conference[JITSI_CONFERENCE_URL_KEY];\n        } else {\n            locationURL = getState()['features/base/connection'].locationURL;\n        }\n        dispatch(\n            _updateConferenceDuration(\n                locationURL));\n    }\n\n    return next(action);\n}\n\n/**\n * Checks if there is a current conference (upon SET_ROOM action), and saves it\n * if necessary.\n *\n * @param {Store} store - The redux store.\n * @param {Dispatch} next - The redux {@code dispatch} function.\n * @param {Action} action - The redux action {@link SET_ROOM}.\n * @private\n * @returns {*} The result returned by {@code next(action)}.\n */\nfunction _setRoom({ dispatch, getState }, next, action) {\n    const { doNotStoreRoom } = getState()['features/base/config'];\n\n    if (!doNotStoreRoom && action.room) {\n        const { locationURL } = getState()['features/base/connection'];\n\n        if (locationURL) {\n            dispatch(_storeCurrentConference(locationURL));\n\n            // Whatever domain the feature recent-list knows about, the app as a\n            // whole should know about.\n            //\n            // XXX Technically, _storeCurrentConference could be turned into an\n            // asynchronous action creator which dispatches both\n            // _STORE_CURRENT_CONFERENCE and addKnownDomains but...\n            dispatch(addKnownDomains(locationURL.host));\n        }\n    }\n\n    return next(action);\n}\n","// @flow\n\nimport {\n    _STORE_CURRENT_CONFERENCE,\n    _UPDATE_CONFERENCE_DURATION,\n    DELETE_RECENT_LIST_ENTRY\n} from './actionTypes';\n\n/**\n * Deletes a recent list entry based on url and date.\n *\n * @param {Object} entryId - An object constructed of the url and the date of\n * the entry for easy identification.\n * @returns {{\n *     type: DELETE_RECENT_LIST_ENTRY,\n *     entryId: Object\n * }}\n */\nexport function deleteRecentListEntry(entryId: Object) {\n    return {\n        type: DELETE_RECENT_LIST_ENTRY,\n        entryId\n    };\n}\n\n/**\n * Action to initiate a new addition to the list.\n *\n * @param {Object} locationURL - The current location URL.\n * @protected\n * @returns {{\n *     type: _STORE_CURRENT_CONFERENCE,\n *     locationURL: Object\n * }}\n */\nexport function _storeCurrentConference(locationURL: Object) {\n    return {\n        type: _STORE_CURRENT_CONFERENCE,\n        locationURL\n    };\n}\n\n/**\n * Action to initiate the update of the duration of the last conference.\n *\n * @param {Object} locationURL - The current location URL.\n * @protected\n * @returns {{\n *     type: _UPDATE_CONFERENCE_DURATION,\n *     locationURL: Object\n * }}\n */\nexport function _updateConferenceDuration(locationURL: Object) {\n    return {\n        type: _UPDATE_CONFERENCE_DURATION,\n        locationURL\n    };\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/recent-list');\n","// @flow\n\nimport { jitsiLocalStorage } from 'js-utils';\n\nimport { APP_WILL_MOUNT } from '../base/app';\nimport { getURLWithoutParamsNormalized } from '../base/connection';\nimport { ReducerRegistry } from '../base/redux';\nimport { PersistenceRegistry } from '../base/storage';\n\nimport {\n    _STORE_CURRENT_CONFERENCE,\n    _UPDATE_CONFERENCE_DURATION,\n    DELETE_RECENT_LIST_ENTRY\n} from './actionTypes';\nimport { isRecentListEnabled } from './functions';\nimport logger from './logger';\n\n/**\n * The default/initial redux state of the feature {@code recent-list}.\n *\n * @type {Array<Object>}\n */\nconst DEFAULT_STATE = [];\n\n/**\n * The name of the {@code window.localStorage} item where recent rooms are\n * stored.\n *\n * @type {string}\n */\nconst LEGACY_STORAGE_KEY = 'recentURLs';\n\n/**\n * The max size of the list.\n *\n * @type {number}\n */\nexport const MAX_LIST_SIZE = 30;\n\n/**\n * The redux subtree of this feature.\n */\nconst STORE_NAME = 'features/recent-list';\n\n/**\n * Sets up the persistence of the feature {@code recent-list}.\n */\nPersistenceRegistry.register(STORE_NAME);\n\n/**\n * Reduces redux actions for the purposes of the feature {@code recent-list}.\n */\nReducerRegistry.register(\n    STORE_NAME,\n    (state = _getLegacyRecentRoomList(), action) => {\n        if (isRecentListEnabled()) {\n            switch (action.type) {\n            case APP_WILL_MOUNT:\n                return _appWillMount(state);\n            case DELETE_RECENT_LIST_ENTRY:\n                return _deleteRecentListEntry(state, action.entryId);\n            case _STORE_CURRENT_CONFERENCE:\n                return _storeCurrentConference(state, action);\n\n            case _UPDATE_CONFERENCE_DURATION:\n                return _updateConferenceDuration(state, action);\n            default:\n                return state;\n            }\n        }\n\n        return state;\n    });\n\n/**\n * Deletes a recent list entry based on the url and date of the item.\n *\n * @param {Array<Object>} state - The Redux state.\n * @param {Object} entryId - The ID object of the entry.\n * @returns {Array<Object>}\n */\nfunction _deleteRecentListEntry(\n        state: Array<Object>, entryId: Object): Array<Object> {\n    return state.filter(entry =>\n        entry.conference !== entryId.url || entry.date !== entryId.date);\n}\n\n/**\n * Reduces the redux action {@link APP_WILL_MOUNT}.\n *\n * @param {Object} state - The redux state of the feature {@code recent-list}.\n * @param {Action} action - The redux action {@code APP_WILL_MOUNT}.\n * @returns {Array<Object>} The next redux state of the feature\n * {@code recent-list}.\n */\nfunction _appWillMount(state) {\n    // XXX APP_WILL_MOUNT is the earliest redux action of ours dispatched in the\n    // store. For the purposes of legacy support, make sure that the\n    // deserialized recent-list's state is in the format deemed current by the\n    // current app revision.\n    if (state && typeof state === 'object') {\n        if (Array.isArray(state)) {\n            return state;\n        }\n\n        // In an enterprise/internal build of Jitsi Meet for Android and iOS we\n        // had recent-list's state as an object with property list.\n        const { list } = state;\n\n        if (Array.isArray(list) && list.length) {\n            return list.slice();\n        }\n    }\n\n    // In the weird case that we have previously persisted/serialized null.\n    return DEFAULT_STATE;\n}\n\n/**\n * Retrieves the recent room list that was stored using the legacy way.\n *\n * @returns {Array<Object>}\n */\nfunction _getLegacyRecentRoomList(): Array<Object> {\n    const str = jitsiLocalStorage.getItem(LEGACY_STORAGE_KEY);\n\n    if (str) {\n        try {\n            return JSON.parse(str);\n        } catch (error) {\n            logger.warn('Failed to parse legacy recent-room list!');\n        }\n    }\n\n\n    return [];\n}\n\n/**\n * Adds a new list entry to the redux store.\n *\n * @param {Object} state - The redux state of the feature {@code recent-list}.\n * @param {Object} action - The redux action.\n * @returns {Object}\n */\nfunction _storeCurrentConference(state, { locationURL }) {\n    const conference = locationURL.href;\n\n    // If the current conference is already in the list, we remove it to re-add\n    // it to the top.\n    const nextState\n        = state.filter(e => !_urlStringEquals(e.conference, conference));\n\n    // The list is a reverse-sorted (i.e. the newer elements are at the end).\n    nextState.push({\n        conference,\n        date: Date.now(),\n        duration: 0 // We don't have the duration yet!\n    });\n\n    // Ensure the list doesn't exceed a/the maximum size.\n    nextState.splice(0, nextState.length - MAX_LIST_SIZE);\n\n    return nextState;\n}\n\n/**\n * Updates the conference length when left.\n *\n * @param {Object} state - The redux state of the feature {@code recent-list}.\n * @param {Object} action - The redux action.\n * @returns {Object} The next redux state of the feature {@code recent-list}.\n */\nfunction _updateConferenceDuration(state, { locationURL }) {\n    if (locationURL && locationURL.href && state.length) {\n        const mostRecentIndex = state.length - 1;\n        const mostRecent = state[mostRecentIndex];\n\n        if (_urlStringEquals(mostRecent.conference, locationURL.href)) {\n            // The last conference start was stored so we need to update the\n            // length.\n            const nextMostRecent = {\n                ...mostRecent,\n                duration: Date.now() - mostRecent.date\n            };\n\n            delete nextMostRecent.conferenceDuration; // legacy\n\n            // Shallow copy to avoid in-place modification.\n            const nextState = state.slice();\n\n            nextState[mostRecentIndex] = nextMostRecent;\n\n            return nextState;\n        }\n    }\n\n    return state;\n}\n\n/**\n * Determines whether two specific URL {@code strings} are equal in the sense\n * that they identify one and the same conference resource (irrespective of\n * time) for the purposes of the feature {@code recent-list}.\n *\n * @param {string} a - The URL {@code string} to test for equality to {@code b}.\n * @param {string} b - The URL {@code string} to test for equality to {@code a}.\n * @returns {boolean}\n */\nfunction _urlStringEquals(a: string, b: string) {\n    const aHref = getURLWithoutParamsNormalized(new URL(a));\n    const bHref = getURLWithoutParamsNormalized(new URL(b));\n\n    return aHref === bHref;\n}\n","// @flow\n\nimport { generateRoomWithoutSeparator } from 'js-utils/random';\nimport { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { createWelcomePageEvent, sendAnalytics } from '../../analytics';\nimport { appNavigate } from '../../app';\nimport { isCalendarEnabled } from '../../calendar-sync';\nimport { isRecentListEnabled } from '../../recent-list/functions';\n\n/**\n * {@code AbstractWelcomePage}'s React {@code Component} prop types.\n */\ntype Props = {\n\n    /**\n     * Whether the calendar functionality is enabled or not.\n     */\n    _calendarEnabled: boolean,\n\n    /**\n     * Whether the recent list is enabled\n     */\n    _recentListEnabled: Boolean,\n\n    /**\n     * Room name to join to.\n     */\n    _room: string,\n\n    /**\n     * The current settings.\n     */\n    _settings: Object,\n\n    /**\n     * The Redux dispatch Function.\n     */\n    dispatch: Dispatch<any>\n};\n\n/**\n * Base (abstract) class for container component rendering the welcome page.\n *\n * @abstract\n */\nexport class AbstractWelcomePage extends Component<Props, *> {\n    _mounted: ?boolean;\n\n    /**\n     * Implements React's {@link Component#getDerivedStateFromProps()}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props: Props, state: Object) {\n        return {\n            room: props._room || state.room\n        };\n    }\n\n    /**\n     * Save room name into component's local state.\n     *\n     * @type {Object}\n     * @property {number|null} animateTimeoutId - Identifier of the letter\n     * animation timeout.\n     * @property {string} generatedRoomname - Automatically generated room name.\n     * @property {string} room - Room name.\n     * @property {string} roomPlaceholder - Room placeholder that's used as a\n     * placeholder for input.\n     * @property {nubmer|null} updateTimeoutId - Identifier of the timeout\n     * updating the generated room name.\n     */\n    state = {\n        animateTimeoutId: undefined,\n        generatedRoomname: '',\n        joining: false,\n        room: '',\n        roomPlaceholder: '',\n        updateTimeoutId: undefined\n    };\n\n    /**\n     * Initializes a new {@code AbstractWelcomePage} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code AbstractWelcomePage} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._animateRoomnameChanging\n            = this._animateRoomnameChanging.bind(this);\n        this._onJoin = this._onJoin.bind(this);\n        this._onRoomChange = this._onRoomChange.bind(this);\n        this._updateRoomname = this._updateRoomname.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}. Invoked\n     * immediately after mounting occurs.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._mounted = true;\n        sendAnalytics(createWelcomePageEvent('viewed', undefined, { value: 1 }));\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount()}. Invoked\n     * immediately before this component is unmounted and destroyed.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._clearTimeouts();\n        this._mounted = false;\n    }\n\n    _animateRoomnameChanging: (string) => void;\n\n    /**\n     * Animates the changing of the room name.\n     *\n     * @param {string} word - The part of room name that should be added to\n     * placeholder.\n     * @private\n     * @returns {void}\n     */\n    _animateRoomnameChanging(word: string) {\n        let animateTimeoutId;\n        const roomPlaceholder = this.state.roomPlaceholder + word.substr(0, 1);\n\n        if (word.length > 1) {\n            animateTimeoutId\n                = setTimeout(\n                    () => {\n                        this._animateRoomnameChanging(\n                            word.substring(1, word.length));\n                    },\n                    70);\n        }\n        this.setState({\n            animateTimeoutId,\n            roomPlaceholder\n        });\n    }\n\n    /**\n     * Method that clears timeouts for animations and updates of room name.\n     *\n     * @private\n     * @returns {void}\n     */\n    _clearTimeouts() {\n        clearTimeout(this.state.animateTimeoutId);\n        clearTimeout(this.state.updateTimeoutId);\n    }\n\n    _onJoin: () => void;\n\n    /**\n     * Handles joining. Either by clicking on 'Join' button\n     * or by pressing 'Enter' in room name input field.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _onJoin() {\n        const room = this.state.room || this.state.generatedRoomname;\n\n        sendAnalytics(\n            createWelcomePageEvent('clicked', 'joinButton', {\n                isGenerated: !this.state.room,\n                room\n            }));\n\n        if (room) {\n            this.setState({ joining: true });\n\n            // By the time the Promise of appNavigate settles, this component\n            // may have already been unmounted.\n            const onAppNavigateSettled\n                = () => this._mounted && this.setState({ joining: false });\n\n            this.props.dispatch(appNavigate(room))\n                .then(onAppNavigateSettled, onAppNavigateSettled);\n        }\n    }\n\n    _onRoomChange: (string) => void;\n\n    /**\n     * Handles 'change' event for the room name text input field.\n     *\n     * @param {string} value - The text typed into the respective text input\n     * field.\n     * @protected\n     * @returns {void}\n     */\n    _onRoomChange(value: string) {\n        this.setState({ room: value });\n    }\n\n    _updateRoomname: () => void;\n\n    /**\n     * Triggers the generation of a new room name and initiates an animation of\n     * its changing.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _updateRoomname() {\n        const generatedRoomname = generateRoomWithoutSeparator();\n        const roomPlaceholder = '';\n        const updateTimeoutId = setTimeout(this._updateRoomname, 10000);\n\n        this._clearTimeouts();\n        this.setState(\n            {\n                generatedRoomname,\n                roomPlaceholder,\n                updateTimeoutId\n            },\n            () => this._animateRoomnameChanging(generatedRoomname));\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props of\n * {@code AbstractWelcomePage}.\n *\n * @param {Object} state - The redux state.\n * @protected\n * @returns {{\n *     _calendarEnabled: boolean,\n *     _room: string,\n *     _settings: Object\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    return {\n        _calendarEnabled: isCalendarEnabled(state),\n        _recentListEnabled: isRecentListEnabled(),\n        _room: state['features/base/conference'].room,\n        _settings: state['features/base/settings']\n    };\n}\n","// @flow\nimport React, { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of {@link Tab}\n */\ntype Props = {\n\n    /**\n     * The index of the tab.\n     */\n    index: number,\n\n    /**\n     * Indicates if the tab is selected or not.\n     */\n    isSelected: boolean,\n\n    /**\n     * The label of the tab.\n     */\n    label: string,\n\n    /**\n     * Handler for selecting the tab.\n     */\n    onSelect: Function\n}\n\n/**\n * A React component that implements tabs.\n *\n */\nexport default class Tab extends Component<Props> {\n    /**\n     * Initializes a new {@code Tab} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onSelect = this._onSelect.bind(this);\n    }\n\n    _onSelect: () => void;\n\n    /**\n     * Selects a tab.\n     *\n     * @returns {void}\n     */\n    _onSelect() {\n        const { index, onSelect } = this.props;\n\n        onSelect(index);\n    }\n\n    /**\n     * Implements the React Components's render method.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { index, isSelected, label } = this.props;\n        const className = `tab${isSelected ? ' selected' : ''}`;\n\n        return (\n            <div\n                className = { className }\n                key = { index }\n                onClick = { this._onSelect }>\n                { label }\n            </div>);\n    }\n}\n","// @flow\nimport React, { Component } from 'react';\n\nimport Tab from './Tab';\n\n/**\n * The type of the React {@code Component} props of {@link Tabs}\n */\ntype Props = {\n\n    /**\n     * Handler for selecting the tab.\n     */\n    onSelect: Function,\n\n    /**\n     * The index of the selected tab.\n     */\n    selected: number,\n\n    /**\n     * Tabs information.\n     */\n    tabs: Object\n};\n\n/**\n * A React component that implements tabs.\n *\n */\nexport default class Tabs extends Component<Props> {\n    static defaultProps = {\n        tabs: [],\n        selected: 0\n    };\n\n    /**\n     * Implements the React Components's render method.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { onSelect, selected, tabs } = this.props;\n        const { content = null } = tabs.length\n            ? tabs[Math.min(selected, tabs.length - 1)]\n            : {};\n\n        return (\n            <div className = 'tab-container'>\n                <div className = 'tab-content'>\n                    { content }\n                </div>\n                { tabs.length > 1 ? (\n                    <div className = 'tab-buttons'>\n                        {\n                            tabs.map((tab, index) => (\n                                <Tab\n                                    index = { index }\n                                    isSelected = { index === selected }\n                                    key = { index }\n                                    label = { tab.label }\n                                    onSelect = { onSelect } />\n                            ))\n                        }\n                    </div>) : null\n                }\n            </div>\n        );\n    }\n}\n","/* global interfaceConfig */\n\nimport React from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { Watermarks } from '../../base/react';\nimport { connect } from '../../base/redux';\nimport { isMobileBrowser } from '../../base/environment/utils';\nimport { CalendarList } from '../../calendar-sync';\nimport { RecentList } from '../../recent-list';\nimport { SettingsButton, SETTINGS_TABS } from '../../settings';\n\nimport { AbstractWelcomePage, _mapStateToProps } from './AbstractWelcomePage';\nimport Tabs from './Tabs';\n\n/**\n * The pattern used to validate room name.\n * @type {string}\n */\nexport const ROOM_NAME_VALIDATE_PATTERN_STR = '^[^?&:\\u0022\\u0027%#]+$';\n\n/**\n * Maximum number of pixels corresponding to a mobile layout.\n * @type {number}\n */\nconst WINDOW_WIDTH_THRESHOLD = 425;\n\n/**\n * The Web container rendering the welcome page.\n *\n * @extends AbstractWelcomePage\n */\nclass WelcomePage extends AbstractWelcomePage {\n    /**\n     * Default values for {@code WelcomePage} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        _room: ''\n    };\n\n    /**\n     * Initializes a new WelcomePage instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            ...this.state,\n\n            generateRoomnames:\n                interfaceConfig.GENERATE_ROOMNAMES_ON_WELCOME_PAGE,\n            selectedTab: 0\n        };\n\n        /**\n         * The HTML Element used as the container for additional content. Used\n         * for directly appending the additional content template to the dom.\n         *\n         * @private\n         * @type {HTMLTemplateElement|null}\n         */\n        this._additionalContentRef = null;\n\n        this._roomInputRef = null;\n\n        /**\n         * The HTML Element used as the container for additional toolbar content. Used\n         * for directly appending the additional content template to the dom.\n         *\n         * @private\n         * @type {HTMLTemplateElement|null}\n         */\n        this._additionalToolbarContentRef = null;\n\n        /**\n         * The template to use as the main content for the welcome page. If\n         * not found then only the welcome page head will display.\n         *\n         * @private\n         * @type {HTMLTemplateElement|null}\n         */\n        this._additionalContentTemplate = document.getElementById(\n            'welcome-page-additional-content-template');\n\n        /**\n         * The template to use as the additional content for the welcome page header toolbar.\n         * If not found then only the settings icon will be displayed.\n         *\n         * @private\n         * @type {HTMLTemplateElement|null}\n         */\n        this._additionalToolbarContentTemplate = document.getElementById(\n            'settings-toolbar-additional-content-template'\n        );\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onFormSubmit = this._onFormSubmit.bind(this);\n        this._onRoomChange = this._onRoomChange.bind(this);\n        this._setAdditionalContentRef\n            = this._setAdditionalContentRef.bind(this);\n        this._setRoomInputRef = this._setRoomInputRef.bind(this);\n        this._setAdditionalToolbarContentRef\n            = this._setAdditionalToolbarContentRef.bind(this);\n        this._onTabSelected = this._onTabSelected.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}. Invoked\n     * immediately after this component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        super.componentDidMount();\n\n        document.body.classList.add('welcome-page');\n        document.title = interfaceConfig.APP_NAME;\n\n        if (this.state.generateRoomnames) {\n            this._updateRoomname();\n        }\n\n        if (this._shouldShowAdditionalContent()) {\n            this._additionalContentRef.appendChild(\n                this._additionalContentTemplate.content.cloneNode(true));\n        }\n\n        if (this._shouldShowAdditionalToolbarContent()) {\n            this._additionalToolbarContentRef.appendChild(\n                this._additionalToolbarContentTemplate.content.cloneNode(true)\n            );\n        }\n    }\n\n    /**\n     * Removes the classname used for custom styling of the welcome page.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        super.componentWillUnmount();\n\n        document.body.classList.remove('welcome-page');\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement|null}\n     */\n    render() {\n        const { t } = this.props;\n        const { APP_NAME } = interfaceConfig;\n        const showAdditionalContent = this._shouldShowAdditionalContent();\n        const showAdditionalToolbarContent = this._shouldShowAdditionalToolbarContent();\n        const showResponsiveText = this._shouldShowResponsiveText();\n\n        return (\n            <div\n                className = { `welcome ${showAdditionalContent\n                    ? 'with-content' : 'without-content'}` }\n                id = 'welcome_page'>\n                <div className = 'welcome-watermark'>\n                    <Watermarks />\n                </div>\n                <div className = 'header'>\n                    <div className = 'welcome-page-settings'>\n                        <SettingsButton\n                            defaultTab = { SETTINGS_TABS.CALENDAR } />\n                        { showAdditionalToolbarContent\n                            ? <div\n                                className = 'settings-toolbar-content'\n                                ref = { this._setAdditionalToolbarContentRef } />\n                            : null\n                        }\n                    </div>\n                    <div className = 'header-image' />\n                    <div className = 'header-text'>\n                        <h1 className = 'header-text-title'>\n                            { t('welcomepage.title') }\n                        </h1>\n                        <p className = 'header-text-description'>\n                            { t('welcomepage.appDescription',\n                                { app: APP_NAME }) }\n                        </p>\n                    </div>\n                    <div id = 'enter_room'>\n                        <div className = 'enter-room-input-container'>\n                            <div className = 'enter-room-title'>\n                                { t('welcomepage.enterRoomTitle') }\n                            </div>\n                            <form onSubmit = { this._onFormSubmit }>\n                                <input\n                                    autoFocus = { true }\n                                    className = 'enter-room-input'\n                                    id = 'enter_room_field'\n                                    onChange = { this._onRoomChange }\n                                    pattern = { ROOM_NAME_VALIDATE_PATTERN_STR }\n                                    placeholder = { this.state.roomPlaceholder }\n                                    ref = { this._setRoomInputRef }\n                                    title = { t('welcomepage.roomNameAllowedChars') }\n                                    type = 'text'\n                                    value = { this.state.room } />\n                            </form>\n                        </div>\n                        <div\n                            className = 'welcome-page-button'\n                            id = 'enter_room_button'\n                            onClick = { this._onFormSubmit }>\n                            {\n                                showResponsiveText\n                                    ? t('welcomepage.goSmall')\n                                    : t('welcomepage.go')\n                            }\n                        </div>\n                    </div>\n                    { this._renderTabs() }\n                </div>\n                { showAdditionalContent\n                    ? <div\n                        className = 'welcome-page-content'\n                        ref = { this._setAdditionalContentRef } />\n                    : null }\n            </div>\n        );\n    }\n\n    /**\n     * Prevents submission of the form and delegates join logic.\n     *\n     * @param {Event} event - The HTML Event which details the form submission.\n     * @private\n     * @returns {void}\n     */\n    _onFormSubmit(event) {\n        event.preventDefault();\n\n        if (!this._roomInputRef || this._roomInputRef.reportValidity()) {\n            this._onJoin();\n        }\n    }\n\n    /**\n     * Overrides the super to account for the differences in the argument types\n     * provided by HTML and React Native text inputs.\n     *\n     * @inheritdoc\n     * @override\n     * @param {Event} event - The (HTML) Event which details the change such as\n     * the EventTarget.\n     * @protected\n     */\n    _onRoomChange(event) {\n        super._onRoomChange(event.target.value);\n    }\n\n    /**\n     * Callback invoked when the desired tab to display should be changed.\n     *\n     * @param {number} tabIndex - The index of the tab within the array of\n     * displayed tabs.\n     * @private\n     * @returns {void}\n     */\n    _onTabSelected(tabIndex) {\n        this.setState({ selectedTab: tabIndex });\n    }\n\n    /**\n     * Renders tabs to show previous meetings and upcoming calendar events. The\n     * tabs are purposefully hidden on mobile browsers.\n     *\n     * @returns {ReactElement|null}\n     */\n    _renderTabs() {\n        if (isMobileBrowser()) {\n            return null;\n        }\n\n        const { _calendarEnabled, _recentListEnabled, t } = this.props;\n\n        const tabs = [];\n\n        if (_calendarEnabled) {\n            tabs.push({\n                label: t('welcomepage.calendar'),\n                content: <CalendarList />\n            });\n        }\n\n        if (_recentListEnabled) {\n            tabs.push({\n                label: t('welcomepage.recentList'),\n                content: <RecentList />\n            });\n        }\n\n        if (tabs.length === 0) {\n            return null;\n        }\n\n        return (\n            <Tabs\n                onSelect = { this._onTabSelected }\n                selected = { this.state.selectedTab }\n                tabs = { tabs } />);\n    }\n\n    /**\n     * Sets the internal reference to the HTMLDivElement used to hold the\n     * welcome page content.\n     *\n     * @param {HTMLDivElement} el - The HTMLElement for the div that is the root\n     * of the welcome page content.\n     * @private\n     * @returns {void}\n     */\n    _setAdditionalContentRef(el) {\n        this._additionalContentRef = el;\n    }\n\n    /**\n     * Sets the internal reference to the HTMLDivElement used to hold the\n     * toolbar additional content.\n     *\n     * @param {HTMLDivElement} el - The HTMLElement for the div that is the root\n     * of the additional toolbar content.\n     * @private\n     * @returns {void}\n     */\n    _setAdditionalToolbarContentRef(el) {\n        this._additionalToolbarContentRef = el;\n    }\n\n    /**\n     * Sets the internal reference to the HTMLInputElement used to hold the\n     * welcome page input room element.\n     *\n     * @param {HTMLInputElement} el - The HTMLElement for the input of the room name on the welcome page.\n     * @private\n     * @returns {void}\n     */\n    _setRoomInputRef(el) {\n        this._roomInputRef = el;\n    }\n\n    /**\n     * Returns whether or not additional content should be displayed below\n     * the welcome page's header for entering a room name.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _shouldShowAdditionalContent() {\n        return interfaceConfig.DISPLAY_WELCOME_PAGE_CONTENT\n            && this._additionalContentTemplate\n            && this._additionalContentTemplate.content\n            && this._additionalContentTemplate.innerHTML.trim();\n    }\n\n    /**\n     * Returns whether or not additional content should be displayed inside\n     * the header toolbar.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _shouldShowAdditionalToolbarContent() {\n        return interfaceConfig.DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT\n            && this._additionalToolbarContentTemplate\n            && this._additionalToolbarContentTemplate.content\n            && this._additionalToolbarContentTemplate.innerHTML.trim();\n    }\n\n    /**\n     * Returns whether or not the screen has a size smaller than a custom margin\n     * and therefore display different text in the go button.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _shouldShowResponsiveText() {\n        const { innerWidth } = window;\n\n        return innerWidth <= WINDOW_WIDTH_THRESHOLD;\n    }\n\n}\n\nexport default translate(connect(_mapStateToProps)(WelcomePage));\n","// @flow\n\nimport { generateRoomWithoutSeparator } from 'js-utils/random';\nimport type { Component } from 'react';\n\nimport { isRoomValid } from '../base/conference';\nimport { toState } from '../base/redux';\nimport { isSupportedBrowser } from '../base/environment';\nimport { Conference } from '../conference';\nimport { getDeepLinkingPage } from '../deep-linking';\nimport { UnsupportedDesktopBrowser } from '../unsupported-browser';\nimport {\n    BlankPage,\n    WelcomePage,\n    isWelcomePageAppEnabled,\n    isWelcomePageUserEnabled\n} from '../welcome';\n\n/**\n * Object describing application route.\n *\n * @typedef {Object} Route\n * @property {Component} component - React Component constructor.\n * @property {string|undefined} href - New location, in case navigation involves\n * a location change.\n */\nexport type Route = {\n    component: Class<Component<*>>,\n    href: ?string\n};\n\n/**\n * Determines which route is to be rendered in order to depict a specific Redux\n * store.\n *\n * @param {(Function|Object)} stateful - THe redux store, state, or\n * {@code getState} function.\n * @returns {Promise<Route>}\n */\nexport function _getRouteToRender(stateful: Function | Object): Promise<Route> {\n    const state = toState(stateful);\n\n    if (navigator.product === 'ReactNative') {\n        return _getMobileRoute(state);\n    }\n\n    return _getWebConferenceRoute(state) || _getWebWelcomePageRoute(state);\n}\n\n/**\n * Returns the {@code Route} to display on the React Native app.\n *\n * @param {Object} state - The redux state.\n * @returns {Promise<Route>}\n */\nfunction _getMobileRoute(state): Promise<Route> {\n    const route = _getEmptyRoute();\n\n    if (isRoomValid(state['features/base/conference'].room)) {\n        route.component = Conference;\n    } else if (isWelcomePageAppEnabled(state)) {\n        route.component = WelcomePage;\n    } else {\n        route.component = BlankPage;\n    }\n\n    return Promise.resolve(route);\n}\n\n/**\n * Returns the {@code Route} to display when trying to access a conference if\n * a valid conference is being joined.\n *\n * @param {Object} state - The redux state.\n * @returns {Promise<Route>|undefined}\n */\nfunction _getWebConferenceRoute(state): ?Promise<Route> {\n    if (!isRoomValid(state['features/base/conference'].room)) {\n        return;\n    }\n\n    const route = _getEmptyRoute();\n\n    // Update the location if it doesn't match. This happens when a room is\n    // joined from the welcome page. The reason for doing this instead of using\n    // the history API is that we want to load the config.js which takes the\n    // room into account.\n    const { locationURL } = state['features/base/connection'];\n\n    if (window.location.href !== locationURL.href) {\n        route.href = locationURL.href;\n\n        return Promise.resolve(route);\n    }\n\n    return getDeepLinkingPage(state)\n        .then(deepLinkComponent => {\n            if (deepLinkComponent) {\n                route.component = deepLinkComponent;\n            } else if (isSupportedBrowser()) {\n                route.component = Conference;\n            } else {\n                route.component = UnsupportedDesktopBrowser;\n            }\n\n            return route;\n        });\n}\n\n/**\n * Returns the {@code Route} to display when trying to access the welcome page.\n *\n * @param {Object} state - The redux state.\n * @returns {Promise<Route>}\n */\nfunction _getWebWelcomePageRoute(state): Promise<Route> {\n    const route = _getEmptyRoute();\n\n    if (isWelcomePageUserEnabled(state)) {\n        if (isSupportedBrowser()) {\n            route.component = WelcomePage;\n        } else {\n            route.component = UnsupportedDesktopBrowser;\n        }\n    } else {\n        // Web: if the welcome page is disabled, go directly to a random room.\n\n        let href = window.location.href;\n\n        href.endsWith('/') || (href += '/');\n        route.href = href + generateRoomWithoutSeparator();\n    }\n\n    return Promise.resolve(route);\n}\n\n/**\n * Returns the default {@code Route}.\n *\n * @returns {Route}\n */\nfunction _getEmptyRoute(): Route {\n    return {\n        component: BlankPage,\n        href: undefined\n    };\n}\n","// @flow\n\nimport { WELCOME_PAGE_ENABLED, getFeatureFlag } from '../base/flags';\nimport { toState } from '../base/redux';\n\ndeclare var APP: Object;\n\n/**\n * Determines whether the {@code WelcomePage} is enabled by the app itself\n * (e.g. Programmatically via the Jitsi Meet SDK for Android and iOS). Not to be\n * confused with {@link isWelcomePageUserEnabled}.\n *\n * @param {Function|Object} stateful - The redux state or {@link getState}\n * function.\n * @returns {boolean} If the {@code WelcomePage} is enabled by the app, then\n * {@code true}; otherwise, {@code false}.\n */\nexport function isWelcomePageAppEnabled(stateful: Function | Object) {\n    if (navigator.product === 'ReactNative') {\n        // We introduced the welcomePageEnabled prop on App in Jitsi Meet SDK\n        // for Android and iOS. There isn't a strong reason not to introduce it\n        // on Web but there're a few considerations to be taken before I go\n        // there among which:\n        // - Enabling/disabling the Welcome page on Web historically\n        // automatically redirects to a random room and that does not make sense\n        // on mobile (right now).\n        return Boolean(getFeatureFlag(stateful, WELCOME_PAGE_ENABLED));\n    }\n\n    return true;\n}\n\n/**\n * Determines whether the {@code WelcomePage} is enabled by the user either\n * herself or through her deployment config(uration). Not to be confused with\n * {@link isWelcomePageAppEnabled}.\n *\n * @param {Function|Object} stateful - The redux state or {@link getState}\n * function.\n * @returns {boolean} If the {@code WelcomePage} is enabled by the user, then\n * {@code true}; otherwise, {@code false}.\n */\nexport function isWelcomePageUserEnabled(stateful: Function | Object) {\n    return (\n        typeof APP === 'undefined'\n            ? true\n            : toState(stateful)['features/base/config'].enableWelcomePage);\n}\n","// @flow\n\nimport { ReducerRegistry, set } from '../base/redux';\nimport { PersistenceRegistry } from '../base/storage';\n\nimport {\n    SET_SIDEBAR_VISIBLE,\n    SET_WELCOME_PAGE_LISTS_DEFAULT_PAGE\n} from './actionTypes';\n\n/**\n * The name of the redux store/state property which is the root of the redux\n * state of the feature {@code welcome}.\n */\nconst STORE_NAME = 'features/welcome';\n\n/**\n * Sets up the persistence of the feature {@code welcome}.\n */\nPersistenceRegistry.register(STORE_NAME, {\n    defaultPage: true\n});\n\n/**\n * Reduces redux actions for the purposes of the feature {@code welcome}.\n */\nReducerRegistry.register(STORE_NAME, (state = {}, action) => {\n    switch (action.type) {\n    case SET_SIDEBAR_VISIBLE:\n        return set(state, 'sideBarVisible', action.visible);\n\n    case SET_WELCOME_PAGE_LISTS_DEFAULT_PAGE:\n        return set(state, 'defaultPage', action.pageIndex);\n    }\n\n    return state;\n});\n","// @flow\n\n/**\n * The type of the (redux) action which sets the visibility of\n * {@link WelcomePageSideBar}.\n *\n * {\n *     type: SET_SIDEBAR_VISIBLE,\n *     visible: boolean\n * }\n */\nexport const SET_SIDEBAR_VISIBLE = 'SET_SIDEBAR_VISIBLE';\n\n/**\n * The type of (redux) action to set the default page index of\n * {@link WelcomePageLists}.\n *\n * {\n *     type: SET_WELCOME_PAGE_LISTS_DEFAULT_PAGE,\n *     pageIndex: number\n * }\n */\nexport const SET_WELCOME_PAGE_LISTS_DEFAULT_PAGE\n    = 'SET_WELCOME_PAGE_LIST_DEFAULT_PAGE';\n","// @flow\n\nimport {\n    createConnectionEvent,\n    sendAnalytics\n} from '../analytics';\n\nimport { SET_ROOM } from '../base/conference';\nimport {\n    CONNECTION_ESTABLISHED,\n    CONNECTION_FAILED,\n    getURLWithoutParams\n} from '../base/connection';\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport { reloadNow } from './actions';\nimport { _getRouteToRender } from './getRouteToRender';\n\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONNECTION_ESTABLISHED:\n        return _connectionEstablished(store, next, action);\n    case CONNECTION_FAILED:\n        return _connectionFailed(store, next, action);\n\n    case SET_ROOM:\n        return _setRoom(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature app that the action {@link CONNECTION_ESTABLISHED} is\n * being dispatched within a specific redux {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONNECTION_ESTABLISHED}\n * which is being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _connectionEstablished(store, next, action) {\n    const result = next(action);\n\n    // In the Web app we explicitly do not want to display the hash and\n    // query/search URL params. Unfortunately, window.location and, more\n    // importantly, its params are used not only in jitsi-meet but also in\n    // lib-jitsi-meet. Consequenlty, the time to remove the params is\n    // determined by when no one needs them anymore.\n    const { history, location } = window;\n\n    if (history\n            && location\n            && history.length\n            && typeof history.replaceState === 'function') {\n        const replacement = getURLWithoutParams(location);\n\n        if (location !== replacement) {\n            history.replaceState(\n                history.state,\n                (document && document.title) || '',\n                replacement);\n        }\n    }\n\n    return result;\n}\n\n/**\n * CONNECTION_FAILED action side effects.\n *\n * @param {Object} store - The Redux store.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the specified {@code action} to\n * the specified {@code store}.\n * @param {Action} action - The redux action {@code CONNECTION_FAILED} which is being dispatched in the specified\n * {@code store}.\n * @returns {Object}\n * @private\n */\nfunction _connectionFailed({ dispatch, getState }, next, action) {\n    // In the case of a split-brain error, reload early and prevent further\n    // handling of the action.\n    if (_isMaybeSplitBrainError(getState, action)) {\n        dispatch(reloadNow());\n\n        return;\n    }\n\n    return next(action);\n}\n\n/**\n * Returns whether or not a CONNECTION_FAILED action is for a possible split brain error. A split brain error occurs\n * when at least two users join a conference on different bridges. It is assumed the split brain scenario occurs very\n * early on in the call.\n *\n * @param {Function} getState - The redux function for fetching the current state.\n * @param {Action} action - The redux action {@code CONNECTION_FAILED} which is being dispatched in the specified\n * {@code store}.\n * @private\n * @returns {boolean}\n */\nfunction _isMaybeSplitBrainError(getState, action) {\n    const { error } = action;\n    const isShardChangedError = error\n        && error.message === 'item-not-found'\n        && error.details\n        && error.details.shard_changed;\n\n    if (isShardChangedError) {\n        const state = getState();\n        const { timeEstablished } = state['features/base/connection'];\n        const { _immediateReloadThreshold } = state['features/base/config'];\n\n        const timeSinceConnectionEstablished = timeEstablished && Date.now() - timeEstablished;\n        const reloadThreshold = typeof _immediateReloadThreshold === 'number' ? _immediateReloadThreshold : 1500;\n\n        const isWithinSplitBrainThreshold = !timeEstablished || timeSinceConnectionEstablished <= reloadThreshold;\n\n        sendAnalytics(createConnectionEvent('failed', {\n            ...error,\n            connectionEstablished: timeEstablished,\n            splitBrain: isWithinSplitBrainThreshold,\n            timeSinceConnectionEstablished\n        }));\n\n        return isWithinSplitBrainThreshold;\n    }\n\n    return false;\n}\n\n/**\n * Navigates to a route in accord with a specific redux state.\n *\n * @param {Store} store - The redux store which determines/identifies the route\n * to navigate to.\n * @private\n * @returns {void}\n */\nfunction _navigate({ getState }) {\n    const state = getState();\n    const { app } = state['features/base/app'];\n\n    _getRouteToRender(state).then(route => app._navigate(route));\n}\n\n/**\n * Notifies the feature app that the action {@link SET_ROOM} is being dispatched\n * within a specific redux {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action, {@code SET_ROOM}, which is being\n * dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _setRoom(store, next, action) {\n    const result = next(action);\n\n    _navigate(store);\n\n    return result;\n}\n","// @flow\n\nexport * from './actions';\nexport * from './components';\nexport * from './functions';\n\nimport './middleware';\n","// @flow\n\nimport _ from 'lodash';\n\nimport { JitsiTrackErrors } from '../lib-jitsi-meet';\nimport {\n    getLocalParticipant,\n    hiddenParticipantJoined,\n    hiddenParticipantLeft,\n    participantJoined,\n    participantLeft\n} from '../participants';\nimport { toState } from '../redux';\nimport { safeDecodeURIComponent } from '../util';\n\nimport {\n    AVATAR_ID_COMMAND,\n    AVATAR_URL_COMMAND,\n    EMAIL_COMMAND,\n    JITSI_CONFERENCE_URL_KEY,\n    VIDEO_QUALITY_LEVELS\n} from './constants';\nimport logger from './logger';\n\n/**\n * Attach a set of local tracks to a conference.\n *\n * @param {JitsiConference} conference - Conference instance.\n * @param {JitsiLocalTrack[]} localTracks - List of local media tracks.\n * @protected\n * @returns {Promise}\n */\nexport function _addLocalTracksToConference(\n        conference: { addTrack: Function, getLocalTracks: Function },\n        localTracks: Array<Object>) {\n    const conferenceLocalTracks = conference.getLocalTracks();\n    const promises = [];\n\n    for (const track of localTracks) {\n        // XXX The library lib-jitsi-meet may be draconian, for example, when\n        // adding one and the same video track multiple times.\n        if (conferenceLocalTracks.indexOf(track) === -1) {\n            promises.push(\n                conference.addTrack(track).catch(err => {\n                    _reportError(\n                        'Failed to add local track to conference',\n                        err);\n                }));\n        }\n    }\n\n    return Promise.all(promises);\n}\n\n/**\n * Logic shared between web and RN which processes the {@code USER_JOINED}\n * conference event and dispatches either {@link participantJoined} or\n * {@link hiddenParticipantJoined}.\n *\n * @param {Object} store - The redux store.\n * @param {JitsiMeetConference} conference - The conference for which the\n * {@code USER_JOINED} event is being processed.\n * @param {JitsiParticipant} user - The user who has just joined.\n * @returns {void}\n */\nexport function commonUserJoinedHandling(\n        { dispatch }: Object,\n        conference: Object,\n        user: Object) {\n    const id = user.getId();\n    const displayName = user.getDisplayName();\n\n    if (user.isHidden()) {\n        dispatch(hiddenParticipantJoined(id, displayName));\n    } else {\n        dispatch(participantJoined({\n            botType: user.getBotType(),\n            conference,\n            id,\n            name: displayName,\n            presence: user.getStatus(),\n            role: user.getRole()\n        }));\n    }\n}\n\n/**\n * Logic shared between web and RN which processes the {@code USER_LEFT}\n * conference event and dispatches either {@link participantLeft} or\n * {@link hiddenParticipantLeft}.\n *\n * @param {Object} store - The redux store.\n * @param {JitsiMeetConference} conference - The conference for which the\n * {@code USER_LEFT} event is being processed.\n * @param {JitsiParticipant} user - The user who has just left.\n * @returns {void}\n */\nexport function commonUserLeftHandling(\n        { dispatch }: Object,\n        conference: Object,\n        user: Object) {\n    const id = user.getId();\n\n    if (user.isHidden()) {\n        dispatch(hiddenParticipantLeft(id));\n    } else {\n        dispatch(participantLeft(id, conference));\n    }\n}\n\n/**\n * Evaluates a specific predicate for each {@link JitsiConference} known to the\n * redux state features/base/conference while it returns {@code true}.\n *\n * @param {Function | Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @param {Function} predicate - The predicate to evaluate for each\n * {@code JitsiConference} know to the redux state features/base/conference\n * while it returns {@code true}.\n * @returns {boolean} If the specified {@code predicate} returned {@code true}\n * for all {@code JitsiConference} instances known to the redux state\n * features/base/conference.\n */\nexport function forEachConference(\n        stateful: Function | Object,\n        predicate: (Object, URL) => boolean) {\n    const state = toState(stateful)['features/base/conference'];\n\n    for (const v of Object.values(state)) {\n        // Does the value of the base/conference's property look like a\n        // JitsiConference?\n        if (v && typeof v === 'object') {\n            // $FlowFixMe\n            const url: URL = v[JITSI_CONFERENCE_URL_KEY];\n\n            // XXX The Web version of Jitsi Meet does not utilize\n            // JITSI_CONFERENCE_URL_KEY at the time of this writing. An\n            // alternative is necessary then to recognize JitsiConference\n            // instances and myUserId is as good as any other property.\n            if ((url || typeof v.myUserId === 'function')\n                    && !predicate(v, url)) {\n                return false;\n            }\n        }\n    }\n\n    return true;\n}\n\n/**\n * Returns the display name of the conference.\n *\n * @param {Function | Object} stateful - Reference that can be resolved to Redux\n * state with the {@code toState} function.\n * @returns {string}\n */\nexport function getConferenceName(stateful: Function | Object): string {\n    const state = toState(stateful);\n    const { callee } = state['features/base/jwt'];\n    const { callDisplayName } = state['features/base/config'];\n    const { pendingSubjectChange, room, subject } = state['features/base/conference'];\n\n    return pendingSubjectChange\n        || subject\n        || callDisplayName\n        || (callee && callee.name)\n        || safeStartCase(safeDecodeURIComponent(room));\n}\n\n/**\n * Returns the name of the conference formated for the title.\n *\n * @param {Function | Object} stateful - Reference that can be resolved to Redux state with the {@code toState}\n * function.\n * @returns {string} - The name of the conference formated for the title.\n */\nexport function getConferenceNameForTitle(stateful: Function | Object) {\n    return safeStartCase(safeDecodeURIComponent(toState(stateful)['features/base/conference'].room));\n}\n\n/**\n* Returns the UTC timestamp when the first participant joined the conference.\n*\n* @param {Function | Object} stateful - Reference that can be resolved to Redux\n* state with the {@code toState} function.\n* @returns {number}\n*/\nexport function getConferenceTimestamp(stateful: Function | Object): number {\n    const state = toState(stateful);\n    const { conferenceTimestamp } = state['features/base/conference'];\n\n    return conferenceTimestamp;\n}\n\n/**\n * Returns the current {@code JitsiConference} which is joining or joined and is\n * not leaving. Please note the contrast with merely reading the\n * {@code conference} state of the feature base/conference which is not joining\n * but may be leaving already.\n *\n * @param {Function|Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @returns {JitsiConference|undefined}\n */\nexport function getCurrentConference(stateful: Function | Object) {\n    const { conference, joining, leaving, passwordRequired }\n        = toState(stateful)['features/base/conference'];\n\n    // There is a precendence\n    if (conference) {\n        return conference === leaving ? undefined : conference;\n    }\n\n    return joining || passwordRequired;\n}\n\n/**\n * Finds the nearest match for the passed in {@link availableHeight} to am\n * enumerated value in {@code VIDEO_QUALITY_LEVELS}.\n *\n * @param {number} availableHeight - The height to which a matching video\n * quality level should be found.\n * @returns {number} The closest matching value from\n * {@code VIDEO_QUALITY_LEVELS}.\n */\nexport function getNearestReceiverVideoQualityLevel(availableHeight: number) {\n    const qualityLevels = [\n        VIDEO_QUALITY_LEVELS.HIGH,\n        VIDEO_QUALITY_LEVELS.STANDARD,\n        VIDEO_QUALITY_LEVELS.LOW\n    ];\n\n    let selectedLevel = qualityLevels[0];\n\n    for (let i = 1; i < qualityLevels.length; i++) {\n        const previousValue = qualityLevels[i - 1];\n        const currentValue = qualityLevels[i];\n        const diffWithCurrent = Math.abs(availableHeight - currentValue);\n        const diffWithPrevious = Math.abs(availableHeight - previousValue);\n\n        if (diffWithCurrent < diffWithPrevious) {\n            selectedLevel = currentValue;\n        }\n    }\n\n    return selectedLevel;\n}\n\n/**\n * Returns the stored room name.\n *\n * @param {Object} state - The current state of the app.\n * @returns {string}\n */\nexport function getRoomName(state: Object): string {\n    return state['features/base/conference'].room;\n}\n\n/**\n * Handle an error thrown by the backend (i.e. {@code lib-jitsi-meet}) while\n * manipulating a conference participant (e.g. Pin or select participant).\n *\n * @param {Error} err - The Error which was thrown by the backend while\n * manipulating a conference participant and which is to be handled.\n * @protected\n * @returns {void}\n */\nexport function _handleParticipantError(err: { message: ?string }) {\n    // XXX DataChannels are initialized at some later point when the conference\n    // has multiple participants, but code that pins or selects a participant\n    // might be executed before. So here we're swallowing a particular error.\n    // TODO Lib-jitsi-meet should be fixed to not throw such an exception in\n    // these scenarios.\n    if (err.message !== 'Data channels support is disabled!') {\n        throw err;\n    }\n}\n\n/**\n * Determines whether a specific string is a valid room name.\n *\n * @param {(string|undefined)} room - The name of the conference room to check\n * for validity.\n * @returns {boolean} If the specified room name is valid, then true; otherwise,\n * false.\n */\nexport function isRoomValid(room: ?string) {\n    return typeof room === 'string' && room !== '';\n}\n\n/**\n * Remove a set of local tracks from a conference.\n *\n * @param {JitsiConference} conference - Conference instance.\n * @param {JitsiLocalTrack[]} localTracks - List of local media tracks.\n * @protected\n * @returns {Promise}\n */\nexport function _removeLocalTracksFromConference(\n        conference: { removeTrack: Function },\n        localTracks: Array<Object>) {\n    return Promise.all(localTracks.map(track =>\n        conference.removeTrack(track)\n            .catch(err => {\n                // Local track might be already disposed by direct\n                // JitsiTrack#dispose() call. So we should ignore this error\n                // here.\n                if (err.name !== JitsiTrackErrors.TRACK_IS_DISPOSED) {\n                    _reportError(\n                        'Failed to remove local track from conference',\n                        err);\n                }\n            })\n    ));\n}\n\n/**\n * Reports a specific Error with a specific error message. While the\n * implementation merely logs the specified msg and err via the console at the\n * time of this writing, the intention of the function is to abstract the\n * reporting of errors and facilitate elaborating on it in the future.\n *\n * @param {string} msg - The error message to report.\n * @param {Error} err - The Error to report.\n * @private\n * @returns {void}\n */\nfunction _reportError(msg, err) {\n    // TODO This is a good point to call some global error handler when we have\n    // one.\n    logger.error(msg, err);\n}\n\n/**\n * Sends a representation of the local participant such as her avatar (URL),\n * e-mail address, and display name to (the remote participants of) a specific\n * conference.\n *\n * @param {Function|Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @param {JitsiConference} conference - The {@code JitsiConference} to which\n * the representation of the local participant is to be sent.\n * @returns {void}\n */\nexport function sendLocalParticipant(\n        stateful: Function | Object,\n        conference: {\n            sendCommand: Function,\n            setDisplayName: Function,\n            setLocalParticipantProperty: Function }) {\n    const {\n        avatarID,\n        avatarURL,\n        email,\n        features,\n        name\n    } = getLocalParticipant(stateful);\n\n    avatarID && conference.sendCommand(AVATAR_ID_COMMAND, {\n        value: avatarID\n    });\n    avatarURL && conference.sendCommand(AVATAR_URL_COMMAND, {\n        value: avatarURL\n    });\n    email && conference.sendCommand(EMAIL_COMMAND, {\n        value: email\n    });\n\n    if (features && features['screen-sharing'] === 'true') {\n        conference.setLocalParticipantProperty('features_screen-sharing', true);\n    }\n\n    conference.setDisplayName(name);\n}\n\n/**\n * A safe implementation of lodash#startCase that doesn't deburr the string.\n *\n * NOTE: According to lodash roadmap, lodash v5 will have this function.\n *\n * Code based on https://github.com/lodash/lodash/blob/master/startCase.js.\n *\n * @param {string} s - The string to do start case on.\n * @returns {string}\n */\nfunction safeStartCase(s = '') {\n    return _.words(`${s}`.replace(/['\\u2019]/g, '')).reduce(\n        (result, word, index) => result + (index ? ' ' : '') + _.upperFirst(word)\n        , '');\n}\n","/**\n * The type of (redux) action which signals that sip GW service change its\n * availability status.\n *\n * {\n *     type: SIP_GW_AVAILABILITY_CHANGED,\n *     status: string\n * }\n */\nexport const SIP_GW_AVAILABILITY_CHANGED\n    = 'SIP_GW_AVAILABILITY_CHANGED';\n\n/**\n * The type of the action which signals to invite room participants to the\n * conference through the SIP Jibri service.\n *\n * {\n *     type: SIP_GW_INVITE_ROOMS,\n *     conference: JitsiConference,\n *     rooms: {Immutable.List}\n * }\n */\nexport const SIP_GW_INVITE_ROOMS = 'SIP_GW_INVITE_ROOMS';\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/videosipgw');\n","// @flow\n\nimport { CONFERENCE_WILL_JOIN } from '../base/conference';\nimport {\n    JitsiConferenceEvents,\n    JitsiSIPVideoGWStatus\n} from '../base/lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../base/redux';\nimport {\n    showErrorNotification,\n    showNotification,\n    showWarningNotification\n} from '../notifications';\n\nimport {\n    SIP_GW_AVAILABILITY_CHANGED,\n    SIP_GW_INVITE_ROOMS\n} from './actionTypes';\nimport logger from './logger';\n\n/**\n * Middleware that captures conference video sip gw events and stores\n * the global sip gw availability in redux or show appropriate notification\n * for sip gw sessions.\n * Captures invitation actions that create sip gw sessions or display\n * appropriate error/warning notifications.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case CONFERENCE_WILL_JOIN: {\n        const conference = getState()['features/base/conference'].joining;\n\n        conference.on(\n            JitsiConferenceEvents.VIDEO_SIP_GW_AVAILABILITY_CHANGED,\n            (...args) => dispatch(_availabilityChanged(...args)));\n        conference.on(\n            JitsiConferenceEvents.VIDEO_SIP_GW_SESSION_STATE_CHANGED,\n            event => {\n                const toDispatch = _sessionStateChanged(event);\n\n                // sessionStateChanged can decide there is nothing to dispatch\n                if (toDispatch) {\n                    dispatch(toDispatch);\n                }\n            });\n\n        break;\n    }\n    case SIP_GW_INVITE_ROOMS:\n        _inviteRooms(action.rooms, action.conference, dispatch);\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Signals that sip gw availability had changed.\n *\n * @param {string} status - The new status of the service.\n * @returns {{\n *     type: SIP_GW_AVAILABILITY_CHANGED,\n *     status: string\n * }}\n * @private\n */\nfunction _availabilityChanged(status: string) {\n    return {\n        type: SIP_GW_AVAILABILITY_CHANGED,\n        status\n    };\n}\n\n/**\n * Processes the action from the actionType {@code SIP_GW_INVITE_ROOMS} by\n * inviting rooms into the conference or showing an error message.\n *\n * @param {Array} rooms - The conference rooms to invite.\n * @param {Object} conference - The JitsiConference to invite the rooms to.\n * @param {Function} dispatch - The redux dispatch function for emitting state\n * changes (queuing error notifications).\n * @private\n * @returns {void}\n */\nfunction _inviteRooms(rooms, conference, dispatch) {\n    for (const room of rooms) {\n        const { id: sipAddress, name: displayName } = room;\n\n        if (sipAddress && displayName) {\n            const newSession = conference\n                .createVideoSIPGWSession(sipAddress, displayName);\n\n            if (newSession instanceof Error) {\n                const e = newSession;\n\n                switch (e.message) {\n                case JitsiSIPVideoGWStatus.ERROR_NO_CONNECTION: {\n                    dispatch(showErrorNotification({\n                        descriptionKey: 'videoSIPGW.errorInvite',\n                        titleKey: 'videoSIPGW.errorInviteTitle'\n                    }));\n\n                    return;\n                }\n                case JitsiSIPVideoGWStatus.ERROR_SESSION_EXISTS: {\n                    dispatch(showWarningNotification({\n                        titleKey: 'videoSIPGW.errorAlreadyInvited',\n                        titleArguments: { displayName }\n                    }));\n\n                    return;\n                }\n                }\n\n                logger.error(\n                    'Unknown error trying to create sip videogw session',\n                    e);\n\n                return;\n            }\n\n            newSession.start();\n        } else {\n            logger.error(`No display name or sip number for ${\n                JSON.stringify(room)}`);\n        }\n    }\n}\n\n/**\n * Signals that a session we created has a change in its status.\n *\n * @param {string} event - The event describing the session state change.\n * @returns {{\n *     type: SHOW_NOTIFICATION\n * }}|null\n * @private\n */\nfunction _sessionStateChanged(\n        event: Object) {\n    switch (event.newState) {\n    case JitsiSIPVideoGWStatus.STATE_PENDING: {\n        return showNotification({\n            titleKey: 'videoSIPGW.pending',\n            titleArguments: {\n                displayName: event.displayName\n            }\n        }, 2000);\n    }\n    case JitsiSIPVideoGWStatus.STATE_FAILED: {\n        return showErrorNotification({\n            titleKey: 'videoSIPGW.errorInviteFailedTitle',\n            titleArguments: {\n                displayName: event.displayName\n            },\n            descriptionKey: 'videoSIPGW.errorInviteFailed'\n        });\n    }\n    case JitsiSIPVideoGWStatus.STATE_OFF: {\n        if (event.failureReason === JitsiSIPVideoGWStatus.STATUS_BUSY) {\n            return showErrorNotification({\n                descriptionKey: 'videoSIPGW.busy',\n                titleKey: 'videoSIPGW.busyTitle'\n            });\n        } else if (event.failureReason) {\n            logger.error(`Unknown sip videogw error ${event.newState} ${\n                event.failureReason}`);\n        }\n    }\n    }\n\n    // nothing to show\n    return null;\n}\n","import { ReducerRegistry } from '../base/redux';\n\nimport { SIP_GW_AVAILABILITY_CHANGED } from './actionTypes';\n\nReducerRegistry.register(\n    'features/videosipgw', (state = [], action) => {\n        switch (action.type) {\n        case SIP_GW_AVAILABILITY_CHANGED: {\n            return {\n                ...state,\n                status: action.status\n            };\n        }\n        }\n\n        return state;\n    });\n","/**\n * The type of redux action which will add pending invite request to the redux\n * store.\n *\n * {\n *     type: ADD_PENDING_INVITE_REQUEST,\n *     request: Object\n * }\n */\nexport const ADD_PENDING_INVITE_REQUEST = 'ADD_PENDING_INVITE_REQUEST';\n\n/**\n * The type of the (redux) action which signals that a click/tap has been\n * performed on {@link InviteButton} and that the execution flow for\n * adding/inviting people to the current conference/meeting is to begin.\n *\n * {\n *     type: BEGIN_ADD_PEOPLE\n * }\n */\nexport const BEGIN_ADD_PEOPLE = 'BEGIN_ADD_PEOPLE';\n\n/**\n * The type of redux action which will remove pending invite requests from the\n * redux store.\n *\n * {\n *     type: REMOVE_PENDING_INVITE_REQUESTS\n * }\n */\nexport const REMOVE_PENDING_INVITE_REQUESTS\n    = 'REMOVE_PENDING_INVITE_REQUESTS';\n\n/**\n * The type of redux action which sets the visibility of {@code CalleeInfo}.\n *\n * {\n *     type: SET_CALLEE_INFO_VISIBLE,\n *     calleeInfoVisible: boolean\n * }\n */\nexport const SET_CALLEE_INFO_VISIBLE = 'SET_CALLEE_INFO_VISIBLE';\n\n/**\n * The type of the action which signals an error occurred while requesting dial-\n * in numbers.\n *\n * {\n *     type: UPDATE_DIAL_IN_NUMBERS_FAILED,\n *     error: Object\n * }\n */\nexport const UPDATE_DIAL_IN_NUMBERS_FAILED\n    = 'UPDATE_DIAL_IN_NUMBERS_FAILED';\n\n/**\n * The type of the action which signals a request for dial-in numbers has\n * succeeded.\n *\n * {\n *     type: UPDATE_DIAL_IN_NUMBERS_SUCCESS,\n *     conferenceID: Object,\n *     dialInNumbers: Object\n * }\n */\nexport const UPDATE_DIAL_IN_NUMBERS_SUCCESS\n    = 'UPDATE_DIAL_IN_NUMBERS_SUCCESS';\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/invite');\n","// @flow\n\nimport { i18next } from '../base/i18n';\nimport { isLocalParticipantModerator } from '../base/participants';\nimport { doGetJSON, parseURIString } from '../base/util';\n\nimport logger from './logger';\n\ndeclare var $: Function;\ndeclare var interfaceConfig: Object;\n\n/**\n * Sends an ajax request to check if the phone number can be called.\n *\n * @param {string} dialNumber - The dial number to check for validity.\n * @param {string} dialOutAuthUrl - The endpoint to use for checking validity.\n * @returns {Promise} - The promise created by the request.\n */\nexport function checkDialNumber(\n        dialNumber: string,\n        dialOutAuthUrl: string\n): Promise<Object> {\n    const fullUrl = `${dialOutAuthUrl}?phone=${dialNumber}`;\n\n    return new Promise((resolve, reject) => {\n        $.getJSON(fullUrl)\n            .then(resolve)\n            .catch(reject);\n    });\n}\n\n/**\n * Sends a GET request to obtain the conference ID necessary for identifying\n * which conference to join after diaing the dial-in service.\n *\n * @param {string} baseUrl - The url for obtaining the conference ID (pin) for\n * dialing into a conference.\n * @param {string} roomName - The conference name to find the associated\n * conference ID.\n * @param {string} mucURL - In which MUC the conference exists.\n * @returns {Promise} - The promise created by the request.\n */\nexport function getDialInConferenceID(\n        baseUrl: string,\n        roomName: string,\n        mucURL: string\n): Promise<Object> {\n\n    const conferenceIDURL = `${baseUrl}?conference=${roomName}@${mucURL}`;\n\n    return doGetJSON(conferenceIDURL, true);\n}\n\n/**\n * Sends a GET request for phone numbers used to dial into a conference.\n *\n * @param {string} url - The service that returns conference dial-in numbers.\n * @param {string} roomName - The conference name to find the associated\n * conference ID.\n * @param {string} mucURL - In which MUC the conference exists.\n * @returns {Promise} - The promise created by the request. The returned numbers\n * may be an array of Objects containing numbers, with keys countryCode,\n * tollFree, formattedNumber or an object with countries as keys and arrays of\n * phone number strings, as the second one should not be used and is deprecated.\n */\nexport function getDialInNumbers(\n        url: string,\n        roomName: string,\n        mucURL: string\n): Promise<*> {\n\n    const fullUrl = `${url}?conference=${roomName}@${mucURL}`;\n\n    return doGetJSON(fullUrl, true);\n}\n\n/**\n * Removes all non-numeric characters from a string.\n *\n * @param {string} text - The string from which to remove all characters except\n * numbers.\n * @returns {string} A string with only numbers.\n */\nexport function getDigitsOnly(text: string = ''): string {\n    return text.replace(/\\D/g, '');\n}\n\n/**\n * Type of the options to use when sending a search query.\n */\nexport type GetInviteResultsOptions = {\n\n    /**\n     * The endpoint to use for checking phone number validity.\n     */\n    dialOutAuthUrl: string,\n\n    /**\n     * Whether or not to search for people.\n     */\n    addPeopleEnabled: boolean,\n\n    /**\n     * Whether or not to check phone numbers.\n     */\n    dialOutEnabled: boolean,\n\n    /**\n     * Array with the query types that will be executed -\n     * \"conferenceRooms\" | \"user\" | \"room\".\n     */\n    peopleSearchQueryTypes: Array<string>,\n\n    /**\n     * The url to query for people.\n     */\n    peopleSearchUrl: string,\n\n    /**\n     * The jwt token to pass to the search service.\n     */\n    jwt: string\n};\n\n/**\n * Combines directory search with phone number validation to produce a single\n * set of invite search results.\n *\n * @param {string} query - Text to search.\n * @param {GetInviteResultsOptions} options - Options to use when searching.\n * @returns {Promise<*>}\n */\nexport function getInviteResultsForQuery(\n        query: string,\n        options: GetInviteResultsOptions\n): Promise<*> {\n\n    const text = query.trim();\n\n    const {\n        dialOutAuthUrl,\n        addPeopleEnabled,\n        dialOutEnabled,\n        peopleSearchQueryTypes,\n        peopleSearchUrl,\n        jwt\n    } = options;\n\n    let peopleSearchPromise;\n\n    if (addPeopleEnabled && text) {\n        peopleSearchPromise = searchDirectory(\n            peopleSearchUrl,\n            jwt,\n            text,\n            peopleSearchQueryTypes);\n    } else {\n        peopleSearchPromise = Promise.resolve([]);\n    }\n\n\n    let hasCountryCode = text.startsWith('+');\n    let phoneNumberPromise;\n\n    // Phone numbers are handled a specially to enable both cases of restricting\n    // numbers to telephone number-y numbers and accepting any arbitrary string,\n    // which may be valid for SIP (jigasi) calls. If the dialOutAuthUrl is\n    // defined, then it is assumed the call is to a telephone number and\n    // some validation of the number is completed, with the + sign used as a way\n    // for the UI to detect and enforce the usage of a country code. If the\n    // dialOutAuthUrl is not defined, accept anything because this is assumed\n    // to be the SIP (jigasi) case.\n    if (dialOutEnabled && dialOutAuthUrl && isMaybeAPhoneNumber(text)) {\n        let numberToVerify = text;\n\n        // When the number to verify does not start with a +, we assume no\n        // proper country code has been entered. In such a case, prepend 1 for\n        // the country code. The service currently takes care of prepending the\n        // +.\n        if (!hasCountryCode && !text.startsWith('1')) {\n            numberToVerify = `1${numberToVerify}`;\n        }\n\n        // The validation service works properly when the query is digits only\n        // so ensure only digits get sent.\n        numberToVerify = getDigitsOnly(numberToVerify);\n\n        phoneNumberPromise = checkDialNumber(numberToVerify, dialOutAuthUrl);\n    } else if (dialOutEnabled && !dialOutAuthUrl) {\n        // fake having a country code to hide the country code reminder\n        hasCountryCode = true;\n\n        // With no auth url, let's say the text is a valid number\n        phoneNumberPromise = Promise.resolve({\n            allow: true,\n            country: '',\n            phone: text\n        });\n    } else {\n        phoneNumberPromise = Promise.resolve({});\n    }\n\n    return Promise.all([ peopleSearchPromise, phoneNumberPromise ])\n        .then(([ peopleResults, phoneResults ]) => {\n            const results = [\n                ...peopleResults\n            ];\n\n            /**\n             * This check for phone results is for the day the call to searching\n             * people might return phone results as well. When that day comes\n             * this check will make it so the server checks are honored and the\n             * local appending of the number is not done. The local appending of\n             * the phone number can then be cleaned up when convenient.\n             */\n            const hasPhoneResult\n                = peopleResults.find(result => result.type === 'phone');\n\n            if (!hasPhoneResult && typeof phoneResults.allow === 'boolean') {\n                results.push({\n                    allowed: phoneResults.allow,\n                    country: phoneResults.country,\n                    type: 'phone',\n                    number: phoneResults.phone,\n                    originalEntry: text,\n                    showCountryCodeReminder: !hasCountryCode\n                });\n            }\n\n            return results;\n        });\n}\n\n/**\n * Helper for determining how many of each type of user is being invited. Used\n * for logging and sending analytics related to invites.\n *\n * @param {Array} inviteItems - An array with the invite items, as created in\n * {@link _parseQueryResults}.\n * @returns {Object} An object with keys as user types and values as the number\n * of invites for that type.\n */\nexport function getInviteTypeCounts(inviteItems: Array<Object> = []) {\n    const inviteTypeCounts = {};\n\n    inviteItems.forEach(({ type }) => {\n        if (!inviteTypeCounts[type]) {\n            inviteTypeCounts[type] = 0;\n        }\n        inviteTypeCounts[type]++;\n    });\n\n    return inviteTypeCounts;\n}\n\n/**\n * Sends a post request to an invite service.\n *\n * @param {string} inviteServiceUrl - The invite service that generates the\n * invitation.\n * @param {string} inviteUrl - The url to the conference.\n * @param {string} jwt - The jwt token to pass to the search service.\n * @param {Immutable.List} inviteItems - The list of the \"user\" or \"room\" type\n * items to invite.\n * @returns {Promise} - The promise created by the request.\n */\nexport function invitePeopleAndChatRooms( // eslint-disable-line max-params\n        inviteServiceUrl: string,\n        inviteUrl: string,\n        jwt: string,\n        inviteItems: Array<Object>\n): Promise<void> {\n\n    if (!inviteItems || inviteItems.length === 0) {\n        return Promise.resolve();\n    }\n\n    return fetch(\n           `${inviteServiceUrl}?token=${jwt}`,\n           {\n               body: JSON.stringify({\n                   'invited': inviteItems,\n                   'url': inviteUrl\n               }),\n               method: 'POST',\n               headers: {\n                   'Content-Type': 'application/json'\n               }\n           }\n    );\n}\n\n/**\n * Determines if adding people is currently enabled.\n *\n * @param {boolean} state - Current state.\n * @returns {boolean} Indication of whether adding people is currently enabled.\n */\nexport function isAddPeopleEnabled(state: Object): boolean {\n    const { peopleSearchUrl } = state['features/base/config'];\n\n    return !isGuest(state) && Boolean(peopleSearchUrl);\n}\n\n/**\n * Determines if dial out is currently enabled or not.\n *\n * @param {boolean} state - Current state.\n * @returns {boolean} Indication of whether dial out is currently enabled.\n */\nexport function isDialOutEnabled(state: Object): boolean {\n    const { conference } = state['features/base/conference'];\n\n    return isLocalParticipantModerator(state)\n        && conference && conference.isSIPCallingSupported();\n}\n\n/**\n * Determines if the current user is guest or not.\n *\n * @param {Object} state - Current state.\n * @returns {boolean}\n */\nexport function isGuest(state: Object): boolean {\n    return state['features/base/jwt'].isGuest;\n}\n\n/**\n * Checks whether a string looks like it could be for a phone number.\n *\n * @param {string} text - The text to check whether or not it could be a phone\n * number.\n * @private\n * @returns {boolean} True if the string looks like it could be a phone number.\n */\nfunction isMaybeAPhoneNumber(text: string): boolean {\n    if (!isPhoneNumberRegex().test(text)) {\n        return false;\n    }\n\n    const digits = getDigitsOnly(text);\n\n    return Boolean(digits.length);\n}\n\n/**\n * RegExp to use to determine if some text might be a phone number.\n *\n * @returns {RegExp}\n */\nfunction isPhoneNumberRegex(): RegExp {\n    let regexString = '^[0-9+()-\\\\s]*$';\n\n    if (typeof interfaceConfig !== 'undefined') {\n        regexString = interfaceConfig.PHONE_NUMBER_REGEX || regexString;\n    }\n\n    return new RegExp(regexString);\n}\n\n/**\n * Sends an ajax request to a directory service.\n *\n * @param {string} serviceUrl - The service to query.\n * @param {string} jwt - The jwt token to pass to the search service.\n * @param {string} text - Text to search.\n * @param {Array<string>} queryTypes - Array with the query types that will be\n * executed - \"conferenceRooms\" | \"user\" | \"room\".\n * @returns {Promise} - The promise created by the request.\n */\nexport function searchDirectory( // eslint-disable-line max-params\n        serviceUrl: string,\n        jwt: string,\n        text: string,\n        queryTypes: Array<string> = [ 'conferenceRooms', 'user', 'room' ]\n): Promise<Array<Object>> {\n\n    const query = encodeURIComponent(text);\n    const queryTypesString = encodeURIComponent(JSON.stringify(queryTypes));\n\n    return fetch(`${serviceUrl}?query=${query}&queryTypes=${\n        queryTypesString}&jwt=${jwt}`)\n            .then(response => {\n                const jsonify = response.json();\n\n                if (response.ok) {\n                    return jsonify;\n                }\n\n                return jsonify\n                    .then(result => Promise.reject(result));\n            })\n            .catch(error => {\n                logger.error(\n                    'Error searching directory:', error);\n\n                return Promise.reject(error);\n            });\n}\n\n/**\n * Returns descriptive text that can be used to invite participants to a meeting\n * (share via mobile or use it for calendar event description).\n *\n * @param {Object} state - The current state.\n * @param {string} inviteUrl - The conference/location URL.\n * @param {boolean} useHtml - Whether to return html text.\n * @returns {Promise<string>} A {@code Promise} resolving with a\n * descriptive text that can be used to invite participants to a meeting.\n */\nexport function getShareInfoText(\n        state: Object, inviteUrl: string, useHtml: ?boolean): Promise<string> {\n    let roomUrl = _decodeRoomURI(inviteUrl);\n    const includeDialInfo = state['features/base/config'] !== undefined;\n\n    if (useHtml) {\n        roomUrl = `<a href=\"${roomUrl}\">${roomUrl}</a>`;\n    }\n\n    let infoText = i18next.t('share.mainText', { roomUrl });\n\n    if (includeDialInfo) {\n        const { room } = parseURIString(inviteUrl);\n        let numbersPromise;\n\n        if (state['features/invite'].numbers\n            && state['features/invite'].conferenceID) {\n            numbersPromise = Promise.resolve(state['features/invite']);\n        } else {\n            // we are requesting numbers and conferenceId directly\n            // not using updateDialInNumbers, because custom room\n            // is specified and we do not want to store the data\n            // in the state\n            const { dialInConfCodeUrl, dialInNumbersUrl, hosts }\n                = state['features/base/config'];\n            const mucURL = hosts && hosts.muc;\n\n            if (!dialInConfCodeUrl || !dialInNumbersUrl || !mucURL) {\n                // URLs for fetching dial in numbers not defined\n                return Promise.resolve(infoText);\n            }\n\n            numbersPromise = Promise.all([\n                getDialInNumbers(dialInNumbersUrl, room, mucURL),\n                getDialInConferenceID(dialInConfCodeUrl, room, mucURL)\n            ]).then(([ numbers, {\n                conference, id, message } ]) => {\n\n                if (!conference || !id) {\n                    return Promise.reject(message);\n                }\n\n                return {\n                    numbers,\n                    conferenceID: id\n                };\n            });\n        }\n\n        return numbersPromise.then(\n            ({ conferenceID, numbers }) => {\n                const phoneNumber = _getDefaultPhoneNumber(numbers) || '';\n\n                return `${\n                    i18next.t('info.dialInNumber')} ${\n                    phoneNumber} ${\n                    i18next.t('info.dialInConferenceID')} ${\n                    conferenceID}#\\n\\n`;\n            })\n            .catch(error =>\n                logger.error('Error fetching numbers or conferenceID', error))\n            .then(defaultDialInNumber => {\n                let dialInfoPageUrl = getDialInfoPageURL(\n                    room,\n                    state['features/base/connection'].locationURL);\n\n                if (useHtml) {\n                    dialInfoPageUrl\n                        = `<a href=\"${dialInfoPageUrl}\">${dialInfoPageUrl}</a>`;\n                }\n\n                infoText += i18next.t('share.dialInfoText', {\n                    defaultDialInNumber,\n                    dialInfoPageUrl });\n\n                return infoText;\n            });\n    }\n\n    return Promise.resolve(infoText);\n}\n\n/**\n * Generates the URL for the static dial in info page.\n *\n * @param {string} conferenceName - The conference name.\n * @param {Object} locationURL - The current location URL, the object coming\n * from state ['features/base/connection'].locationURL.\n * @returns {string}\n */\nexport function getDialInfoPageURL(\n        conferenceName: string,\n        locationURL: Object) {\n    const origin = locationURL.origin;\n    const pathParts = locationURL.pathname.split('/');\n\n    pathParts.length = pathParts.length - 1;\n\n    const newPath = pathParts.reduce((accumulator, currentValue) => {\n        if (currentValue) {\n            return `${accumulator}/${currentValue}`;\n        }\n\n        return accumulator;\n    }, '');\n\n    return `${origin}${newPath}/static/dialInInfo.html?room=${_decodeRoomURI(conferenceName)}`;\n}\n\n/**\n * Generates the URL for the static dial in info page.\n *\n * @param {string} uri - The conference URI string.\n * @returns {string}\n */\nexport function getDialInfoPageURLForURIString(\n        uri: ?string) {\n    if (!uri) {\n        return undefined;\n    }\n    const { protocol, host, contextRoot, room } = parseURIString(uri);\n\n    return `${protocol}//${host}${contextRoot}static/dialInInfo.html?room=${room}`;\n}\n\n/**\n * Returns whether or not dial-in related UI should be displayed.\n *\n * @param {Object} dialIn - Dial in information.\n * @returns {boolean}\n */\nexport function shouldDisplayDialIn(dialIn: Object) {\n    const { conferenceID, numbers, numbersEnabled } = dialIn;\n    const phoneNumber = _getDefaultPhoneNumber(numbers);\n\n    return Boolean(\n            conferenceID\n            && numbers\n            && numbersEnabled\n            && phoneNumber);\n}\n\n/**\n * Sets the internal state of which dial-in number to display.\n *\n * @param {Array<string>|Object} dialInNumbers - The array or object of\n * numbers to choose a number from.\n * @private\n * @returns {string|null}\n */\nexport function _getDefaultPhoneNumber(\n        dialInNumbers: ?Object): ?string {\n\n    if (!dialInNumbers) {\n        return null;\n    }\n\n    if (Array.isArray(dialInNumbers)) {\n        // new syntax follows\n        // find the default country inside dialInNumbers, US one\n        // or return the first one\n        const defaultNumber = dialInNumbers.find(number => number.default);\n\n        if (defaultNumber) {\n            return defaultNumber.formattedNumber;\n        }\n\n        return dialInNumbers.length > 0\n            ? dialInNumbers[0].formattedNumber : null;\n    }\n\n    const { numbers } = dialInNumbers;\n\n    if (numbers && Object.keys(numbers).length > 0) {\n        // deprecated and will be removed\n        const firstRegion = Object.keys(numbers)[0];\n\n        return firstRegion && numbers[firstRegion][0];\n    }\n\n    return null;\n}\n\n/**\n * Decodes URI only if doesn't contain a space(' ').\n *\n * @param {string} url - The string to decode.\n * @returns {string} - It the string contains space, encoded value is '%20' returns\n * same string, otherwise decoded one.\n * @private\n */\nexport function _decodeRoomURI(url: string) {\n    let roomUrl = url;\n\n    // we want to decode urls when the do not contain space, ' ', which url encoded is %20\n    if (roomUrl && !roomUrl.includes('%20')) {\n        roomUrl = decodeURI(roomUrl);\n    }\n\n    // Handles a special case where the room name has % encoded, the decoded will have\n    // % followed by a char (non-digit) which is not a valid URL and room name ... so we do not\n    // want to show this decoded\n    if (roomUrl.match(/.*%[^\\d].*/)) {\n        return url;\n    }\n\n    return roomUrl;\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { getInviteURL } from '../base/connection';\nimport { inviteVideoRooms } from '../videosipgw';\nimport { getParticipants } from '../base/participants';\n\nimport {\n    ADD_PENDING_INVITE_REQUEST,\n    BEGIN_ADD_PEOPLE,\n    REMOVE_PENDING_INVITE_REQUESTS,\n    SET_CALLEE_INFO_VISIBLE,\n    UPDATE_DIAL_IN_NUMBERS_FAILED,\n    UPDATE_DIAL_IN_NUMBERS_SUCCESS\n} from './actionTypes';\nimport {\n    getDialInConferenceID,\n    getDialInNumbers,\n    invitePeopleAndChatRooms\n} from './functions';\nimport logger from './logger';\n\n/**\n * Creates a (redux) action to signal that a click/tap has been performed on\n * {@link InviteButton} and that the execution flow for adding/inviting people\n * to the current conference/meeting is to begin.\n *\n * @returns {{\n *     type: BEGIN_ADD_PEOPLE\n * }}\n */\nexport function beginAddPeople() {\n    return {\n        type: BEGIN_ADD_PEOPLE\n    };\n}\n\n\n/**\n * Invites (i.e. Sends invites to) an array of invitees (which may be a\n * combination of users, rooms, phone numbers, and video rooms.\n *\n * @param  {Array<Object>} invitees - The recepients to send invites to.\n * @param  {Array<Object>} showCalleeInfo - Indicates whether the\n * {@code CalleeInfo} should be displayed or not.\n * @returns {Promise<Array<Object>>} A {@code Promise} resolving with an array\n * of invitees who were not invited (i.e. Invites were not sent to them).\n */\nexport function invite(\n        invitees: Array<Object>,\n        showCalleeInfo: boolean = false) {\n    return (\n            dispatch: Dispatch<any>,\n            getState: Function): Promise<Array<Object>> => {\n        const state = getState();\n        const participants = getParticipants(state);\n        const { calleeInfoVisible } = state['features/invite'];\n\n        if (showCalleeInfo\n                && !calleeInfoVisible\n                && invitees.length === 1\n                && invitees[0].type === 'user'\n                && participants.length === 1) {\n            dispatch(setCalleeInfoVisible(true, invitees[0]));\n        }\n\n        const { conference } = state['features/base/conference'];\n\n        if (typeof conference === 'undefined') {\n            // Invite will fail before CONFERENCE_JOIN. The request will be\n            // cached in order to be executed on CONFERENCE_JOIN.\n            return new Promise(resolve => {\n                dispatch(addPendingInviteRequest({\n                    invitees,\n                    callback: failedInvitees => resolve(failedInvitees)\n                }));\n            });\n        }\n\n        let allInvitePromises = [];\n        let invitesLeftToSend = [ ...invitees ];\n\n        const {\n            callFlowsEnabled,\n            inviteServiceUrl,\n            inviteServiceCallFlowsUrl\n        } = state['features/base/config'];\n        const inviteUrl = getInviteURL(state);\n        const { jwt } = state['features/base/jwt'];\n\n        // First create all promises for dialing out.\n        const phoneNumbers\n            = invitesLeftToSend.filter(({ type }) => type === 'phone');\n\n        // For each number, dial out. On success, remove the number from\n        // {@link invitesLeftToSend}.\n        const phoneInvitePromises = phoneNumbers.map(item => {\n            const numberToInvite = item.number;\n\n            return conference.dial(numberToInvite)\n                .then(() => {\n                    invitesLeftToSend\n                        = invitesLeftToSend.filter(\n                            invitee => invitee !== item);\n                })\n                .catch(error =>\n                    logger.error('Error inviting phone number:', error));\n        });\n\n        allInvitePromises = allInvitePromises.concat(phoneInvitePromises);\n\n        const usersAndRooms\n            = invitesLeftToSend.filter(\n                ({ type }) => type === 'user' || type === 'room');\n\n        if (usersAndRooms.length) {\n            // Send a request to invite all the rooms and users. On success,\n            // filter all rooms and users from {@link invitesLeftToSend}.\n            const peopleInvitePromise\n                = invitePeopleAndChatRooms(\n                    callFlowsEnabled\n                        ? inviteServiceCallFlowsUrl : inviteServiceUrl,\n                    inviteUrl,\n                    jwt,\n                    usersAndRooms)\n                .then(() => {\n                    invitesLeftToSend\n                        = invitesLeftToSend.filter(\n                            ({ type }) => type !== 'user' && type !== 'room');\n                })\n                .catch(error => {\n                    dispatch(setCalleeInfoVisible(false));\n                    logger.error('Error inviting people:', error);\n                });\n\n            allInvitePromises.push(peopleInvitePromise);\n        }\n\n        // Sipgw calls are fire and forget. Invite them to the conference, then\n        // immediately remove them from invitesLeftToSend.\n        const vrooms\n            = invitesLeftToSend.filter(({ type }) => type === 'videosipgw');\n\n        conference\n            && vrooms.length > 0\n            && dispatch(inviteVideoRooms(conference, vrooms));\n\n        invitesLeftToSend\n            = invitesLeftToSend.filter(({ type }) => type !== 'videosipgw');\n\n        return (\n            Promise.all(allInvitePromises)\n                .then(() => invitesLeftToSend));\n    };\n}\n\n/**\n * Sends AJAX requests for dial-in numbers and conference ID.\n *\n * @returns {Function}\n */\nexport function updateDialInNumbers() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const { dialInConfCodeUrl, dialInNumbersUrl, hosts }\n            = state['features/base/config'];\n        const mucURL = hosts && hosts.muc;\n\n        if (!dialInConfCodeUrl || !dialInNumbersUrl || !mucURL) {\n            // URLs for fetching dial in numbers not defined\n            return;\n        }\n\n        const { room } = state['features/base/conference'];\n\n        Promise.all([\n            getDialInNumbers(dialInNumbersUrl, room, mucURL),\n            getDialInConferenceID(dialInConfCodeUrl, room, mucURL)\n        ])\n            .then(([ dialInNumbers, { conference, id, message } ]) => {\n                if (!conference || !id) {\n                    return Promise.reject(message);\n                }\n\n                dispatch({\n                    type: UPDATE_DIAL_IN_NUMBERS_SUCCESS,\n                    conferenceID: id,\n                    dialInNumbers\n                });\n            })\n            .catch(error => {\n                dispatch({\n                    type: UPDATE_DIAL_IN_NUMBERS_FAILED,\n                    error\n                });\n            });\n    };\n}\n\n/**\n * Sets the visibility of {@code CalleeInfo}.\n *\n * @param {boolean|undefined} [calleeInfoVisible] - If {@code CalleeInfo} is\n * to be displayed/visible, then {@code true}; otherwise, {@code false} or\n * {@code undefined}.\n * @param {Object|undefined} [initialCalleeInfo] - Callee information.\n * @returns {{\n *     type: SET_CALLEE_INFO_VISIBLE,\n *     calleeInfoVisible: (boolean|undefined),\n *     initialCalleeInfo\n * }}\n */\nexport function setCalleeInfoVisible(\n        calleeInfoVisible: boolean,\n        initialCalleeInfo: ?Object) {\n    return {\n        type: SET_CALLEE_INFO_VISIBLE,\n        calleeInfoVisible,\n        initialCalleeInfo\n    };\n}\n\n/**\n * Adds pending invite request.\n *\n * @param {Object} request - The request.\n * @returns {{\n *     type: ADD_PENDING_INVITE_REQUEST,\n *     request: Object\n * }}\n */\nexport function addPendingInviteRequest(\n        request: { invitees: Array<Object>, callback: Function }) {\n    return {\n        type: ADD_PENDING_INVITE_REQUEST,\n        request\n    };\n}\n\n/**\n * Removes all pending invite requests.\n *\n * @returns {{\n *     type: REMOVE_PENDING_INVITE_REQUEST\n * }}\n */\nexport function removePendingInviteRequests() {\n    return {\n        type: REMOVE_PENDING_INVITE_REQUESTS\n    };\n}\n","/* @flow */\n\nimport { SIP_GW_INVITE_ROOMS } from './actionTypes';\n\n/**\n * Invites room participants to the conference through the SIP Jibri service.\n *\n * @param {JitsiMeetConference} conference - The conference to which the rooms\n * will be invited to.\n * @param {Immutable.List} rooms - The list of the \"videosipgw\" type items to\n * invite.\n * @returns {void}\n */\nexport function inviteVideoRooms(\n        conference: Object,\n        rooms: Object) {\n    return {\n        type: SIP_GW_INVITE_ROOMS,\n        conference,\n        rooms\n    };\n}\n","// @flow\n\nimport { Component } from 'react';\n\nimport { createInviteDialogEvent, sendAnalytics } from '../../../analytics';\n\nimport { invite } from '../../actions';\nimport {\n    getInviteResultsForQuery,\n    getInviteTypeCounts,\n    isAddPeopleEnabled,\n    isDialOutEnabled\n} from '../../functions';\nimport {\n    NOTIFICATION_TIMEOUT,\n    showNotification\n} from '../../../notifications';\n\nimport logger from '../../logger';\n\nexport type Props = {\n\n    /**\n     * Whether or not to show Add People functionality.\n     */\n    _addPeopleEnabled: boolean,\n\n    /**\n     * Whether or not call flows are enabled.\n     */\n    _callFlowsEnabled: boolean,\n\n    /**\n     * The URL for validating if a phone number can be called.\n     */\n    _dialOutAuthUrl: string,\n\n    /**\n     * Whether or not to show Dial Out functionality.\n     */\n    _dialOutEnabled: boolean,\n\n    /**\n     * The JWT token.\n     */\n    _jwt: string,\n\n    /**\n     * The query types used when searching people.\n     */\n    _peopleSearchQueryTypes: Array<string>,\n\n    /**\n     * The URL pointing to the service allowing for people search.\n     */\n    _peopleSearchUrl: string,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function\n};\n\nexport type State = {\n\n    /**\n     * Indicating that an error occurred when adding people to the call.\n     */\n    addToCallError: boolean,\n\n    /**\n     * Indicating that we're currently adding the new people to the\n     * call.\n     */\n    addToCallInProgress: boolean,\n\n    /**\n     * The list of invite items.\n     */\n    inviteItems: Array<Object>,\n};\n\n/**\n * Implements an abstract dialog to invite people to the conference.\n */\nexport default class AbstractAddPeopleDialog<P: Props, S: State>\n    extends Component<P, S> {\n    /**\n     * Constructor of the component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        this._query = this._query.bind(this);\n    }\n\n    /**\n     * Invite people and numbers to the conference. The logic works by inviting\n     * numbers, people/rooms, and videosipgw in parallel. All invitees are\n     * stored in an array. As each invite succeeds, the invitee is removed\n     * from the array. After all invites finish, close the modal if there are\n     * no invites left to send. If any are left, that means an invite failed\n     * and an error state should display.\n     *\n     * @param {Array<Object>} invitees - The items to be invited.\n     * @returns {Promise<Array<Object>>}\n     */\n    _invite(invitees) {\n        const inviteTypeCounts = getInviteTypeCounts(invitees);\n\n        sendAnalytics(createInviteDialogEvent(\n            'clicked', 'inviteButton', {\n                ...inviteTypeCounts,\n                inviteAllowed: this._isAddDisabled()\n            }));\n\n        if (this._isAddDisabled()) {\n            return Promise.resolve([]);\n        }\n\n        this.setState({\n            addToCallInProgress: true\n        });\n\n        const { _callFlowsEnabled, dispatch } = this.props;\n\n        return dispatch(invite(invitees))\n            .then(invitesLeftToSend => {\n                this.setState({\n                    addToCallInProgress: false\n                });\n\n                // If any invites are left that means something failed to send\n                // so treat it as an error.\n                if (invitesLeftToSend.length) {\n                    const erroredInviteTypeCounts\n                        = getInviteTypeCounts(invitesLeftToSend);\n\n                    logger.error(`${invitesLeftToSend.length} invites failed`,\n                        erroredInviteTypeCounts);\n\n                    sendAnalytics(createInviteDialogEvent(\n                        'error', 'invite', {\n                            ...erroredInviteTypeCounts\n                        }));\n\n                    this.setState({\n                        addToCallError: true\n                    });\n                } else if (!_callFlowsEnabled) {\n                    const invitedCount = invitees.length;\n                    let notificationProps;\n\n                    if (invitedCount >= 3) {\n                        notificationProps = {\n                            titleArguments: {\n                                name: invitees[0].name,\n                                count: invitedCount - 1\n                            },\n                            titleKey: 'notify.invitedThreePlusMembers'\n                        };\n                    } else if (invitedCount === 2) {\n                        notificationProps = {\n                            titleArguments: {\n                                first: invitees[0].name,\n                                second: invitees[1].name\n                            },\n                            titleKey: 'notify.invitedTwoMembers'\n                        };\n                    } else if (invitedCount) {\n                        notificationProps = {\n                            titleArguments: {\n                                name: invitees[0].name\n                            },\n                            titleKey: 'notify.invitedOneMember'\n                        };\n                    }\n\n                    if (notificationProps) {\n                        dispatch(\n                            showNotification(notificationProps, NOTIFICATION_TIMEOUT));\n                    }\n                }\n\n                return invitesLeftToSend;\n            });\n    }\n\n    /**\n     * Indicates if the Add button should be disabled.\n     *\n     * @private\n     * @returns {boolean} - True to indicate that the Add button should\n     * be disabled, false otherwise.\n     */\n    _isAddDisabled() {\n        return !this.state.inviteItems.length\n            || this.state.addToCallInProgress;\n    }\n\n    _query: (?string) => Promise<Array<Object>>;\n\n    /**\n     * Performs a people and phone number search request.\n     *\n     * @param {string} query - The search text.\n     * @private\n     * @returns {Promise}\n     */\n    _query(query = '') {\n        const {\n            _addPeopleEnabled: addPeopleEnabled,\n            _dialOutAuthUrl: dialOutAuthUrl,\n            _dialOutEnabled: dialOutEnabled,\n            _jwt: jwt,\n            _peopleSearchQueryTypes: peopleSearchQueryTypes,\n            _peopleSearchUrl: peopleSearchUrl\n        } = this.props;\n        const options = {\n            addPeopleEnabled,\n            dialOutAuthUrl,\n            dialOutEnabled,\n            jwt,\n            peopleSearchQueryTypes,\n            peopleSearchUrl\n        };\n\n        return getInviteResultsForQuery(query, options);\n    }\n\n}\n\n/**\n * Maps (parts of) the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _addPeopleEnabled: boolean,\n *     _dialOutAuthUrl: string,\n *     _dialOutEnabled: boolean,\n *     _jwt: string,\n *     _peopleSearchQueryTypes: Array<string>,\n *     _peopleSearchUrl: string\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    const {\n        callFlowsEnabled,\n        dialOutAuthUrl,\n        peopleSearchQueryTypes,\n        peopleSearchUrl\n    } = state['features/base/config'];\n\n    return {\n        _addPeopleEnabled: isAddPeopleEnabled(state),\n        _callFlowsEnabled: callFlowsEnabled,\n        _dialOutAuthUrl: dialOutAuthUrl,\n        _dialOutEnabled: isDialOutEnabled(state),\n        _jwt: state['features/base/jwt'].jwt,\n        _peopleSearchQueryTypes: peopleSearchQueryTypes,\n        _peopleSearchUrl: peopleSearchUrl\n    };\n}\n","// @flow\n\nimport InlineMessage from '@atlaskit/inline-message';\nimport React from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { createInviteDialogEvent, sendAnalytics } from '../../../../analytics';\nimport { Avatar } from '../../../../base/avatar';\nimport { Dialog, hideDialog } from '../../../../base/dialog';\nimport { translate, translateToHTML } from '../../../../base/i18n';\nimport { Icon, IconPhone } from '../../../../base/icons';\nimport { getLocalParticipant } from '../../../../base/participants';\nimport { MultiSelectAutocomplete } from '../../../../base/react';\nimport { connect } from '../../../../base/redux';\n\nimport AbstractAddPeopleDialog, {\n    type Props as AbstractProps,\n    type State,\n    _mapStateToProps as _abstractMapStateToProps\n} from '../AbstractAddPeopleDialog';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link AddPeopleDialog}.\n */\ntype Props = AbstractProps & {\n\n    /**\n     * The {@link JitsiMeetConference} which will be used to invite \"room\"\n     * participants through the SIP Jibri (Video SIP gateway).\n     */\n    _conference: Object,\n\n    /**\n     * Whether to show a footer text after the search results as a last element.\n     */\n    _footerTextEnabled: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n};\n\n/**\n * The dialog that allows to invite people to the call.\n */\nclass AddPeopleDialog extends AbstractAddPeopleDialog<Props, State> {\n    _multiselect = null;\n\n    _resourceClient: Object;\n\n    state = {\n        addToCallError: false,\n        addToCallInProgress: false,\n        inviteItems: []\n    };\n\n    /**\n     * Initializes a new {@code AddPeopleDialog} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onItemSelected = this._onItemSelected.bind(this);\n        this._onSelectionChange = this._onSelectionChange.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n        this._parseQueryResults = this._parseQueryResults.bind(this);\n        this._setMultiSelectElement = this._setMultiSelectElement.bind(this);\n\n        this._resourceClient = {\n            makeQuery: this._query,\n            parseResults: this._parseQueryResults\n        };\n    }\n\n    /**\n     * Sends an analytics event to record the dialog has been shown.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        sendAnalytics(createInviteDialogEvent(\n            'invite.dialog.opened', 'dialog'));\n    }\n\n    /**\n     * React Component method that executes once component is updated.\n     *\n     * @param {Object} prevProps - The state object before the update.\n     * @param {Object} prevState - The state object before the update.\n     * @returns {void}\n     */\n    componentDidUpdate(prevProps, prevState) {\n        /**\n         * Clears selected items from the multi select component on successful\n         * invite.\n         */\n        if (prevState.addToCallError\n                && !this.state.addToCallInProgress\n                && !this.state.addToCallError\n                && this._multiselect) {\n            this._multiselect.setSelectedItems([]);\n        }\n    }\n\n    /**\n     * Sends an analytics event to record the dialog has been closed.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        sendAnalytics(createInviteDialogEvent(\n            'invite.dialog.closed', 'dialog'));\n    }\n\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            _addPeopleEnabled,\n            _dialOutEnabled,\n            _footerTextEnabled,\n            t\n        } = this.props;\n        let isMultiSelectDisabled = this.state.addToCallInProgress || false;\n        let placeholder;\n        let loadingMessage;\n        let noMatches;\n        let footerText;\n\n        if (_addPeopleEnabled && _dialOutEnabled) {\n            loadingMessage = 'addPeople.loading';\n            noMatches = 'addPeople.noResults';\n            placeholder = 'addPeople.searchPeopleAndNumbers';\n        } else if (_addPeopleEnabled) {\n            loadingMessage = 'addPeople.loadingPeople';\n            noMatches = 'addPeople.noResults';\n            placeholder = 'addPeople.searchPeople';\n        } else if (_dialOutEnabled) {\n            loadingMessage = 'addPeople.loadingNumber';\n            noMatches = 'addPeople.noValidNumbers';\n            placeholder = 'addPeople.searchNumbers';\n        } else {\n            isMultiSelectDisabled = true;\n            noMatches = 'addPeople.noResults';\n            placeholder = 'addPeople.disabled';\n        }\n\n        if (_footerTextEnabled) {\n            footerText = {\n                content: <div className = 'footer-text-wrap'>\n                    <div>\n                        <span className = 'footer-telephone-icon'>\n                            <Icon src = { IconPhone } />\n                        </span>\n                    </div>\n                    { translateToHTML(t, 'addPeople.footerText') }\n                </div>\n            };\n        }\n\n        return (\n            <Dialog\n                okDisabled = { this._isAddDisabled() }\n                okKey = 'addPeople.add'\n                onSubmit = { this._onSubmit }\n                titleKey = 'addPeople.title'\n                width = 'medium'>\n                <div className = 'add-people-form-wrap'>\n                    { this._renderErrorMessage() }\n                    <MultiSelectAutocomplete\n                        footer = { footerText }\n                        isDisabled = { isMultiSelectDisabled }\n                        loadingMessage = { t(loadingMessage) }\n                        noMatchesFound = { t(noMatches) }\n                        onItemSelected = { this._onItemSelected }\n                        onSelectionChange = { this._onSelectionChange }\n                        placeholder = { t(placeholder) }\n                        ref = { this._setMultiSelectElement }\n                        resourceClient = { this._resourceClient }\n                        shouldFitContainer = { true }\n                        shouldFocus = { true } />\n                </div>\n            </Dialog>\n        );\n    }\n\n    _invite: Array<Object> => Promise<*>\n\n    _isAddDisabled: () => boolean;\n\n    _onItemSelected: (Object) => Object;\n\n    /**\n     * Callback invoked when a selection has been made but before it has been\n     * set as selected.\n     *\n     * @param {Object} item - The item that has just been selected.\n     * @private\n     * @returns {Object} The item to display as selected in the input.\n     */\n    _onItemSelected(item) {\n        if (item.item.type === 'phone') {\n            item.content = item.item.number;\n        }\n\n        return item;\n    }\n\n    _onSelectionChange: (Map<*, *>) => void;\n\n    /**\n     * Handles a selection change.\n     *\n     * @param {Map} selectedItems - The list of selected items.\n     * @private\n     * @returns {void}\n     */\n    _onSelectionChange(selectedItems) {\n        this.setState({\n            inviteItems: selectedItems\n        });\n    }\n\n    _onSubmit: () => void;\n\n    /**\n     * Submits the selection for inviting.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onSubmit() {\n        const { inviteItems } = this.state;\n        const invitees = inviteItems.map(({ item }) => item);\n\n        this._invite(invitees)\n            .then(invitesLeftToSend => {\n                if (invitesLeftToSend.length) {\n                    const unsentInviteIDs\n                        = invitesLeftToSend.map(invitee =>\n                            invitee.id || invitee.user_id || invitee.number);\n                    const itemsToSelect\n                        = inviteItems.filter(({ item }) =>\n                            unsentInviteIDs.includes(item.id || item.user_id || item.number));\n\n                    if (this._multiselect) {\n                        this._multiselect.setSelectedItems(itemsToSelect);\n                    }\n                } else {\n                    this.props.dispatch(hideDialog());\n                }\n            });\n    }\n\n    _parseQueryResults: (?Array<Object>) => Array<Object>;\n\n    /**\n     * Returns the avatar component for a user.\n     *\n     * @param {Object} user - The user.\n     * @param {string} className - The CSS class for the avatar component.\n     * @private\n     * @returns {ReactElement}\n     */\n    _getAvatar(user, className = 'avatar-small') {\n        return (<Avatar\n            className = { className }\n            status = { user.status }\n            url = { user.avatar } />);\n    }\n\n    /**\n     * Processes results from requesting available numbers and people by munging\n     * each result into a format {@code MultiSelectAutocomplete} can use for\n     * display.\n     *\n     * @param {Array} response - The response object from the server for the\n     * query.\n     * @private\n     * @returns {Object[]} Configuration objects for items to display in the\n     * search autocomplete.\n     */\n    _parseQueryResults(response = []) {\n        const { t, _dialOutEnabled } = this.props;\n        const users = response.filter(item => item.type !== 'phone');\n        const userDisplayItems = [];\n\n        users.forEach(user => {\n            const { name, phone } = user;\n            const tagAvatar = this._getAvatar(user, 'avatar-xsmall');\n            const elemAvatar = this._getAvatar(user);\n\n            userDisplayItems.push({\n                content: name,\n                elemBefore: elemAvatar,\n                item: user,\n                tag: {\n                    elemBefore: tagAvatar\n                },\n                value: user.id || user.user_id\n            });\n\n            if (phone && _dialOutEnabled) {\n                userDisplayItems.push({\n                    filterValues: [ name, phone ],\n                    content: `${phone} (${name})`,\n                    elemBefore: elemAvatar,\n                    item: {\n                        type: 'phone',\n                        number: phone\n                    },\n                    tag: {\n                        elemBefore: tagAvatar\n                    },\n                    value: phone\n                });\n            }\n        });\n\n        const numbers = response.filter(item => item.type === 'phone');\n        const telephoneIcon = this._renderTelephoneIcon();\n\n        const numberDisplayItems = numbers.map(number => {\n            const numberNotAllowedMessage\n                = number.allowed ? '' : t('addPeople.countryNotSupported');\n            const countryCodeReminder = number.showCountryCodeReminder\n                ? t('addPeople.countryReminder') : '';\n            const description\n                = `${numberNotAllowedMessage} ${countryCodeReminder}`.trim();\n\n            return {\n                filterValues: [\n                    number.originalEntry,\n                    number.number\n                ],\n                content: t('addPeople.telephone', { number: number.number }),\n                description,\n                isDisabled: !number.allowed,\n                elemBefore: telephoneIcon,\n                item: number,\n                tag: {\n                    elemBefore: telephoneIcon\n                },\n                value: number.number\n            };\n        });\n\n        return [\n            ...userDisplayItems,\n            ...numberDisplayItems\n        ];\n    }\n\n    _query: (string) => Promise<Array<Object>>;\n\n    /**\n     * Renders the error message if the add doesn't succeed.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderErrorMessage() {\n        if (!this.state.addToCallError) {\n            return null;\n        }\n\n        const { t } = this.props;\n        const supportString = t('inlineDialogFailure.supportMsg');\n        const supportLink = interfaceConfig.SUPPORT_URL;\n        const supportLinkContent\n            = (\n                <span>\n                    <span>\n                        { supportString.padEnd(supportString.length + 1) }\n                    </span>\n                    <span>\n                        <a\n                            href = { supportLink }\n                            rel = 'noopener noreferrer'\n                            target = '_blank'>\n                            { t('inlineDialogFailure.support') }\n                        </a>\n                    </span>\n                    <span>.</span>\n                </span>\n            );\n\n        return (\n            <div className = 'modal-dialog-form-error'>\n                <InlineMessage\n                    title = { t('addPeople.failedToAdd') }\n                    type = 'error'>\n                    { supportLinkContent }\n                </InlineMessage>\n            </div>\n        );\n    }\n\n    /**\n     * Renders a telephone icon.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderTelephoneIcon() {\n        return (\n            <span className = 'add-telephone-icon'>\n                <Icon src = { IconPhone } />\n            </span>\n        );\n    }\n\n    _setMultiSelectElement: (React$ElementRef<*> | null) => void;\n\n    /**\n     * Sets the instance variable for the multi select component\n     * element so it can be accessed directly.\n     *\n     * @param {Object} element - The DOM element for the component's dialog.\n     * @private\n     * @returns {void}\n     */\n    _setMultiSelectElement(element) {\n        this._multiselect = element;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code AddPeopleDialog}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _dialOutAuthUrl: string,\n *     _jwt: string,\n *     _peopleSearchQueryTypes: Array<string>,\n *     _peopleSearchUrl: string\n * }}\n */\nfunction _mapStateToProps(state) {\n    const {\n        enableFeaturesBasedOnToken\n    } = state['features/base/config'];\n    let footerTextEnabled = false;\n\n    if (enableFeaturesBasedOnToken) {\n        const { features = {} } = getLocalParticipant(state);\n\n        if (String(features['outbound-call']) !== 'true') {\n            footerTextEnabled = true;\n        }\n    }\n\n    return {\n        ..._abstractMapStateToProps(state),\n        _footerTextEnabled: footerTextEnabled\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(AddPeopleDialog));\n","// @flow\n\n/**\n * Utility class with no dependencies. Used in components that are stripped in separate bundles\n * and requires as less dependencies as possible.\n */\n\n/**\n * Formats the conference pin in readable way for UI to display it.\n * Formats the pin in 3 groups of digits:\n * XXXX XXXX XX or XXXXX XXXXX XXX.\n * The length of first and second group is Math.ceil(pin.length / 3).\n *\n * @param {Object} conferenceID - The conference id to format, string or number.\n * @returns {string} - The formatted conference pin.\n * @private\n */\nexport function _formatConferenceIDPin(conferenceID: Object) {\n    const conferenceIDStr = conferenceID.toString();\n\n    // let's split the conferenceID in 3 parts, to be easier to read\n    const partLen = Math.ceil(conferenceIDStr.length / 3);\n\n    return `${\n        conferenceIDStr.substring(0, partLen)} ${\n        conferenceIDStr.substring(partLen, 2 * partLen)} ${\n        conferenceIDStr.substring(2 * partLen, conferenceIDStr.length)}`;\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../../base/i18n';\n\nimport { _formatConferenceIDPin } from '../../../_utils';\n\n/**\n * The type of the React {@code Component} props of {@link ConferenceID}.\n */\ntype Props = {\n\n    /**\n     * The conference ID for dialing in.\n     */\n    conferenceID: number,\n\n    /**\n     * The name of the conference.\n     */\n    conferenceName: ?string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Displays a conference ID used as a pin for dialing into a conference.\n *\n * @extends Component\n */\nclass ConferenceID extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { conferenceID, conferenceName, t } = this.props;\n\n        return (\n            <div className = 'dial-in-conference-id'>\n                <div className = 'dial-in-conference-name'>\n                    { conferenceName }\n                </div>\n                <div className = 'dial-in-conference-description'>\n                    { t('info.dialANumber') }\n                </div>\n                <div className = 'dial-in-conference-pin'>\n                    { `${t('info.dialInConferenceID')} ${_formatConferenceIDPin(conferenceID)}` }\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default translate(ConferenceID);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../../base/i18n';\n\ntype Props = {\n\n    /**\n     * Whether or not numbers should include links with the telephone protocol.\n     */\n    clickableNumbers: boolean,\n\n    /**\n     * The conference ID for dialing in.\n     */\n    conferenceID: number,\n\n    /**\n     * The phone numbers to display. Can be an array of number Objects or an\n     * object with countries as keys and an array of numbers as values.\n     */\n    numbers: { [string]: Array<string> } | Array<Object>,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n * Displays a table with phone numbers to dial in to a conference.\n *\n * @extends Component\n */\nclass NumbersList extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { numbers } = this.props;\n\n        return this._renderWithCountries(numbers);\n    }\n\n    /**\n     * Renders rows of countries and associated phone numbers.\n     *\n     * @param {Object|Array<Object>} numbersMapping - An object with country\n     * names as keys and values as arrays of phone numbers.\n     * @private\n     * @returns {ReactElement[]}\n     */\n    _renderWithCountries(\n            numbersMapping: { numbers: Array<string> } | Array<Object>) {\n        const { t } = this.props;\n        let hasFlags = false, numbers;\n\n        if (Array.isArray(numbersMapping)) {\n            hasFlags = true;\n            numbers = numbersMapping.reduce(\n                (resultNumbers, number) => {\n                    // The i18n-iso-countries package insists on upper case.\n                    const countryCode = number.countryCode.toUpperCase();\n                    const countryName\n                        = t(`countries:countries.${countryCode}`);\n\n                    if (resultNumbers[countryName]) {\n                        resultNumbers[countryName].push(number);\n                    } else {\n                        resultNumbers[countryName] = [ number ];\n                    }\n\n                    return resultNumbers;\n                }, {});\n        } else {\n            numbers = {};\n\n            for (const [ country, numbersArray ]\n                of Object.entries(numbersMapping.numbers)) {\n\n                if (Array.isArray(numbersArray)) {\n                    /* eslint-disable arrow-body-style */\n                    const formattedNumbers = numbersArray.map(number => ({\n                        formattedNumber: number\n                    }));\n                    /* eslint-enable arrow-body-style */\n\n                    numbers[country] = formattedNumbers;\n                }\n            }\n        }\n\n        const rows = [];\n\n        Object.keys(numbers).forEach((countryName: string) => {\n            const numbersArray = numbers[countryName];\n\n            rows.push(\n                <tr\n                    className = 'number-group'\n                    key = { countryName }>\n                    { this._renderFlag(numbersArray[0].countryCode) }\n                    <td className = 'country' >{ countryName }</td>\n                    <td className = 'numbers-list-column'>\n                        { this._renderNumbersList(numbersArray) }\n                    </td>\n                    <td className = 'toll-free-list-column' >\n                        { this._renderNumbersTollFreeList(numbersArray) }\n                    </td>\n                </tr>\n            );\n        });\n\n        return (\n            <table className = 'dial-in-numbers-list'>\n                <thead>\n                    <tr>\n                        { hasFlags ? <th /> : null}\n                        <th>{ t('info.country') }</th>\n                        <th>{ t('info.numbers') }</th>\n                        <th />\n                    </tr>\n                </thead>\n                <tbody className = 'dial-in-numbers-body'>\n                    { rows }\n                </tbody>\n            </table>\n        );\n    }\n\n    /**\n     * Renders a div container for a flag for the country of the phone number.\n     *\n     * @param {string} countryCode - The country code flag to display.\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderFlag(countryCode) {\n        if (countryCode) {\n            return (\n                <td className = 'flag-cell'>\n                    <i className = { `flag iti-flag ${countryCode}` } />\n                </td>);\n        }\n\n        return null;\n    }\n\n    /**\n     * Renders a div container for a phone number.\n     *\n     * @param {Array} numbers - The phone number to display.\n     * @private\n     * @returns {ReactElement[]}\n     */\n    _renderNumbersList(numbers) {\n        const numbersListItems = numbers.map(number =>\n            (<li\n                className = 'dial-in-number'\n                key = { number.formattedNumber }>\n                { this._renderNumberLink(number.formattedNumber) }\n            </li>));\n\n        return (\n            <ul className = 'numbers-list'>\n                { numbersListItems }\n            </ul>\n        );\n    }\n\n    /**\n     * Renders list with a toll free text on the position where there is a\n     * number marked as toll free.\n     *\n     * @param {Array} numbers - The phone number that are displayed.\n     * @private\n     * @returns {ReactElement[]}\n     */\n    _renderNumbersTollFreeList(numbers) {\n        const { t } = this.props;\n\n        const tollNumbersListItems = numbers.map(number =>\n            (<li\n                className = 'toll-free'\n                key = { number.formattedNumber }>\n                { number.tollFree ? t('info.dialInTollFree') : '' }\n            </li>));\n\n        return (\n            <ul className = 'toll-free-list'>\n                { tollNumbersListItems }\n            </ul>\n        );\n    }\n\n    /**\n     * Renders a ReactElement for displaying a telephone number. If the\n     * component prop {@code clickableNumbers} is true, then the number will\n     * have a link with the telephone protocol.\n     *\n     * @param {string} number - The phone number to display.\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderNumberLink(number) {\n        if (this.props.clickableNumbers) {\n            // Url encode # to %23, Android phone was cutting the # after\n            // clicking it.\n            // Seems that using ',' and '%23' works on iOS and Android.\n            return (\n                <a\n                    href = { `tel:${number},${this.props.conferenceID}%23` }\n                    key = { number } >\n                    { number }\n                </a>\n            );\n        }\n\n        return number;\n    }\n\n}\n\nexport default translate(NumbersList);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { doGetJSON } from '../../../../base/util';\n\nimport ConferenceID from './ConferenceID';\nimport NumbersList from './NumbersList';\n\ndeclare var config: Object;\n\n/**\n * The type of the React {@code Component} props of {@link DialInSummary}.\n */\ntype Props = {\n\n    /**\n     * Additional CSS classnames to append to the root of the component.\n     */\n    className: string,\n\n    /**\n     * Whether or not numbers should include links with the telephone protocol.\n     */\n    clickableNumbers: boolean,\n\n    /**\n     * The name of the conference to show a conferenceID for.\n     */\n    room: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link DialInSummary}.\n */\ntype State = {\n\n    /**\n     * The numeric ID of the conference, used as a pin when dialing in.\n     */\n    conferenceID: ?string,\n\n    /**\n     * An error message to display.\n     */\n    error: string,\n\n    /**\n     * Whether or not the app is fetching data.\n     */\n    loading: boolean,\n\n    /**\n     * The dial-in numbers to be displayed.\n     */\n    numbers: ?Array<Object> | ?Object,\n\n    /**\n     * Whether or not dial-in is allowed.\n     */\n    numbersEnabled: ?boolean\n}\n\n/**\n * Displays a page listing numbers for dialing into a conference and pin to\n * the a specific conference.\n *\n * @extends Component\n */\nclass DialInSummary extends Component<Props, State> {\n    state = {\n        conferenceID: null,\n        error: '',\n        loading: true,\n        numbers: null,\n        numbersEnabled: null\n    };\n\n    /**\n     * Initializes a new {@code DialInSummary} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onGetNumbersSuccess = this._onGetNumbersSuccess.bind(this);\n        this._onGetConferenceIDSuccess\n            = this._onGetConferenceIDSuccess.bind(this);\n        this._setErrorMessage = this._setErrorMessage.bind(this);\n    }\n\n    /**\n     * Implements {@link Component#componentDidMount()}. Invoked immediately\n     * after this component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        const getNumbers = this._getNumbers()\n            .then(this._onGetNumbersSuccess)\n            .catch(this._setErrorMessage);\n\n        const getID = this._getConferenceID()\n            .then(this._onGetConferenceIDSuccess)\n            .catch(this._setErrorMessage);\n\n        Promise.all([ getNumbers, getID ])\n            .then(() => {\n                this.setState({ loading: false });\n            });\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        let className = '';\n        let contents;\n\n        const { conferenceID, error, loading, numbersEnabled } = this.state;\n\n        if (loading) {\n            contents = '';\n        } else if (numbersEnabled === false) {\n            contents = this.props.t('info.dialInNotSupported');\n        } else if (error) {\n            contents = error;\n        } else {\n            className = 'has-numbers';\n            contents = [\n                conferenceID\n                    ? <ConferenceID\n                        conferenceID = { conferenceID }\n                        conferenceName = { this.props.room }\n                        key = 'conferenceID' />\n                    : null,\n                <NumbersList\n                    clickableNumbers = { this.props.clickableNumbers }\n                    conferenceID = { conferenceID }\n                    key = 'numbers'\n                    numbers = { this.state.numbers } />\n            ];\n        }\n\n        return (\n            <div className = { `${this.props.className} ${className}` }>\n                { contents }\n            </div>\n        );\n    }\n\n    /**\n     * Creates an AJAX request for the conference ID.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _getConferenceID() {\n        const { room } = this.props;\n        const { dialInConfCodeUrl, hosts } = config;\n        const mucURL = hosts && hosts.muc;\n\n        if (!dialInConfCodeUrl || !mucURL || !room) {\n            return Promise.resolve();\n        }\n\n        return doGetJSON(`${dialInConfCodeUrl}?conference=${room}@${mucURL}`, true)\n            .catch(() => Promise.reject(this.props.t('info.genericError')));\n    }\n\n    /**\n     * Creates an AJAX request for dial-in numbers.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _getNumbers() {\n        const { room } = this.props;\n        const { dialInNumbersUrl, hosts } = config;\n        const mucURL = hosts && hosts.muc;\n        let URLSuffix = '';\n\n        if (!dialInNumbersUrl) {\n            return Promise.reject(this.props.t('info.dialInNotSupported'));\n        }\n\n        // when room and mucURL are available\n        // provide conference when looking up dial in numbers\n\n        if (room && mucURL) {\n            URLSuffix = `?conference=${room}@${mucURL}`;\n        }\n\n        return doGetJSON(`${dialInNumbersUrl}${URLSuffix}`, true)\n            .catch(() => Promise.reject(this.props.t('info.genericError')));\n    }\n\n    _onGetConferenceIDSuccess: (Object) => void;\n\n    /**\n     * Callback invoked when fetching the conference ID succeeds.\n     *\n     * @param {Object} response - The response from fetching the conference ID.\n     * @private\n     * @returns {void}\n     */\n    _onGetConferenceIDSuccess(response = {}) {\n        const { conference, id } = response;\n\n        if (!conference || !id) {\n            return;\n        }\n\n        this.setState({ conferenceID: id });\n    }\n\n    _onGetNumbersSuccess: (Object) => void;\n\n    /**\n     * Callback invoked when fetching dial-in numbers succeeds. Sets the\n     * internal to show the numbers.\n     *\n     * @param {Array|Object} response - The response from fetching\n     * dial-in numbers.\n     * @param {Array|Object} response.numbers - The dial-in numbers.\n     * @param {boolean} response.numbersEnabled - Whether or not dial-in is\n     * enabled, old syntax that is deprecated.\n     * @private\n     * @returns {void}\n     */\n    _onGetNumbersSuccess(\n            response: Array<Object> | { numbersEnabled?: boolean }) {\n\n        this.setState({\n            numbersEnabled:\n                Array.isArray(response)\n                    ? response.length > 0 : response.numbersEnabled,\n            numbers: response\n        });\n    }\n\n    _setErrorMessage: (string) => void;\n\n    /**\n     * Sets an error message to display on the page instead of content.\n     *\n     * @param {string} error - The error message to display.\n     * @private\n     * @returns {void}\n     */\n    _setErrorMessage(error) {\n        this.setState({\n            error\n        });\n    }\n}\n\nexport default translate(DialInSummary);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../../base/i18n';\n\nimport { _formatConferenceIDPin } from '../../../_utils';\n\n/**\n * The type of the React {@code Component} props of {@link DialInNumber}.\n */\ntype Props = {\n\n    /**\n     * The numberic identifier for the current conference, used after dialing a\n     * the number to join the conference.\n     */\n    conferenceID: number,\n\n    /**\n     * The phone number to dial to begin the process of dialing into a\n     * conference.\n     */\n    phoneNumber: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React {@code Component} responsible for displaying a telephone number and\n * conference ID for dialing into a conference.\n *\n * @extends Component\n */\nclass DialInNumber extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { conferenceID, phoneNumber, t } = this.props;\n\n        return (\n            <div className = 'dial-in-number'>\n                <span className = 'phone-number'>\n                    <span className = 'info-label'>\n                        { t('info.dialInNumber') }\n                    </span>\n                    <span className = 'spacer'>&nbsp;</span>\n                    <span className = 'info-value'>\n                        { phoneNumber }\n                    </span>\n                </span>\n                <span className = 'spacer'>&nbsp;</span>\n                <span className = 'conference-id'>\n                    <span className = 'info-label'>\n                        { t('info.dialInConferenceID') }\n                    </span>\n                    <span className = 'spacer'>&nbsp;</span>\n                    <span className = 'info-value'>\n                        { `${_formatConferenceIDPin(conferenceID)}#` }\n                    </span>\n                </span>\n            </div>\n        );\n    }\n}\n\nexport default translate(DialInNumber);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { LOCKED_LOCALLY } from '../../../../room-lock';\n\n/**\n * The type of the React {@code Component} props of {@link PasswordForm}.\n */\ntype Props = {\n\n    /**\n     * Whether or not to show the password editing field.\n     */\n    editEnabled: boolean,\n\n    /**\n     * The value for how the conference is locked (or undefined if not locked)\n     * as defined by room-lock constants.\n     */\n    locked: string,\n\n    /**\n     * Callback to invoke when the local participant is submitting a password\n     * set request.\n     */\n    onSubmit: Function,\n\n    /**\n     * The current known password for the JitsiConference.\n     */\n    password: string,\n\n    /**\n     * The number of digits to be used in the password.\n     */\n    passwordNumberOfDigits: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link PasswordForm}.\n */\ntype State = {\n\n    /**\n     * The value of the password being entered by the local participant.\n     */\n    enteredPassword: string\n};\n\n/**\n * React {@code Component} for displaying and editing the conference password.\n *\n * @extends Component\n */\nclass PasswordForm extends Component<Props, State> {\n    /**\n     * Implements React's {@link Component#getDerivedStateFromProps()}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props, state) {\n        return {\n            enteredPassword: props.editEnabled ? state.enteredPassword : ''\n        };\n    }\n\n    state = {\n        enteredPassword: ''\n    };\n\n    /**\n     * Initializes a new {@code PasswordForm} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code PasswordForm} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onEnteredPasswordChange\n            = this._onEnteredPasswordChange.bind(this);\n        this._onPasswordSubmit = this._onPasswordSubmit.bind(this);\n        this._onKeyDown = this._onKeyDown.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <div className = 'info-password'>\n                <span className = 'info-label'>\n                    { t('info.password') }\n                </span>\n                <span className = 'spacer'>&nbsp;</span>\n                <span className = 'info-password-field info-value'>\n                    { this._renderPasswordField() }\n                </span>\n            </div>\n        );\n    }\n\n    /**\n     * Returns a ReactElement for showing the current state of the password or\n     * for editing the current password.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderPasswordField() {\n        if (this.props.editEnabled) {\n            let digitPattern, placeHolderText;\n\n            if (this.props.passwordNumberOfDigits) {\n                placeHolderText = this.props.t('passwordDigitsOnly', {\n                    number: this.props.passwordNumberOfDigits });\n                digitPattern = '\\\\d*';\n            }\n\n            return (\n                <form\n                    className = 'info-password-form'\n                    onKeyDown = { this._onKeyDown }\n                    onSubmit = { this._onPasswordSubmit }>\n                    <input\n                        autoFocus = { true }\n                        className = 'info-password-input'\n                        maxLength = { this.props.passwordNumberOfDigits }\n                        onChange = { this._onEnteredPasswordChange }\n                        pattern = { digitPattern }\n                        placeholder = { placeHolderText }\n                        spellCheck = { 'false' }\n                        type = 'text'\n                        value = { this.state.enteredPassword } />\n                </form>\n            );\n        } else if (this.props.locked === LOCKED_LOCALLY) {\n            return (\n                <div className = 'info-password-local'>\n                    { this.props.password }\n                </div>\n            );\n        } else if (this.props.locked) {\n            return (\n                <div className = 'info-password-remote'>\n                    { this.props.t('passwordSetRemotely') }\n                </div>\n            );\n        }\n\n        return (\n            <div className = 'info-password-none'>\n                { this.props.t('info.noPassword') }\n            </div>\n        );\n    }\n\n    _onEnteredPasswordChange: (Object) => void;\n\n    /**\n     * Updates the internal state of entered password.\n     *\n     * @param {Object} event - DOM Event for value change.\n     * @private\n     * @returns {void}\n     */\n    _onEnteredPasswordChange(event) {\n        this.setState({ enteredPassword: event.target.value });\n    }\n\n    _onPasswordSubmit: (Object) => void;\n\n    /**\n     * Invokes the passed in onSubmit callback to notify the parent that a\n     * password submission has been attempted.\n     *\n     * @param {Object} event - DOM Event for form submission.\n     * @private\n     * @returns {void}\n     */\n    _onPasswordSubmit(event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        this.props.onSubmit(this.state.enteredPassword);\n    }\n\n    _onKeyDown: (Object) => void;\n\n    /**\n     * Stops the the EnterKey for propagation in order to prevent the dialog\n     * to close.\n     *\n     * @param {Object} event - The key event.\n     * @private\n     * @returns {void}\n     */\n    _onKeyDown(event) {\n        if (event.key === 'Enter') {\n            event.stopPropagation();\n        }\n    }\n}\n\nexport default translate(PasswordForm);\n","// @flow\n\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { setPassword } from '../../../../base/conference';\nimport { getInviteURL } from '../../../../base/connection';\nimport { Dialog } from '../../../../base/dialog';\nimport { translate } from '../../../../base/i18n';\nimport { Icon, IconInfo, IconCopy } from '../../../../base/icons';\nimport { connect } from '../../../../base/redux';\nimport {\n    isLocalParticipantModerator,\n    getLocalParticipant\n} from '../../../../base/participants';\n\nimport {\n    _decodeRoomURI,\n    _getDefaultPhoneNumber,\n    getDialInfoPageURL,\n    shouldDisplayDialIn\n} from '../../../functions';\nimport logger from '../../../logger';\nimport DialInNumber from './DialInNumber';\nimport PasswordForm from './PasswordForm';\n\n\n/**\n * The type of the React {@code Component} props of {@link InfoDialog}.\n */\ntype Props = {\n\n    /**\n     * Whether or not the current user can modify the current password.\n     */\n    _canEditPassword: boolean,\n\n    /**\n     * The JitsiConference for which to display a lock state and change the\n     * password.\n     */\n    _conference: Object,\n\n    /**\n     * The name of the current conference. Used as part of inviting users.\n     */\n    _conferenceName: string,\n\n    /**\n     * The number of digits to be used in the password.\n     */\n    _passwordNumberOfDigits: ?number,\n\n    /**\n     * The current url of the conference to be copied onto the clipboard.\n     */\n    _inviteURL: string,\n\n    /**\n     * The redux representation of the local participant.\n     */\n    _localParticipantName: ?string,\n\n    /**\n     * The current location url of the conference.\n     */\n    _locationURL: Object,\n\n    /**\n     * The value for how the conference is locked (or undefined if not locked)\n     * as defined by room-lock constants.\n     */\n    _locked: string,\n\n    /**\n     * The current known password for the JitsiConference.\n     */\n    _password: string,\n\n    /**\n     * The object representing the dialIn feature.\n     */\n    dialIn: Object,\n\n    /**\n     * Invoked to open a dialog for adding participants to the conference.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Whether is Atlaskit InlineDialog or a normal dialog.\n     */\n    isInlineDialog: boolean,\n\n    /**\n     * The current known URL for a live stream in progress.\n     */\n    liveStreamViewURL: string,\n\n    /**\n     * Callback invoked when the dialog should be closed.\n     */\n    onClose: Function,\n\n    /**\n     * Callback invoked when a mouse-related event has been detected.\n     */\n    onMouseOver: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link InfoDialog}.\n */\ntype State = {\n\n    /**\n     * Whether or not to show the password in editing mode.\n     */\n    passwordEditEnabled: boolean,\n\n    /**\n     * The conference dial-in number to display.\n     */\n    phoneNumber: ?string\n};\n\n/**\n * A React Component with the contents for a dialog that shows information about\n * the current conference.\n *\n * @extends Component\n */\nclass InfoDialog extends Component<Props, State> {\n    _copyElement: ?Object;\n    _copyUrlElement: ?Object;\n\n    /**\n     * Implements React's {@link Component#getDerivedStateFromProps()}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props, state) {\n        let phoneNumber = state.phoneNumber;\n\n        if (!state.phoneNumber && props.dialIn.numbers) {\n            phoneNumber = _getDefaultPhoneNumber(props.dialIn.numbers);\n        }\n\n        return {\n            // Exit edit mode when a password is set locally or remotely.\n            passwordEditEnabled: state.passwordEditEnabled && props._password\n                ? false : state.passwordEditEnabled,\n            phoneNumber\n        };\n    }\n\n    /**\n     * {@code InfoDialog} component's local state.\n     *\n     * @type {Object}\n     * @property {boolean} passwordEditEnabled - Whether or not to show the\n     * {@code PasswordForm} in its editing state.\n     * @property {string} phoneNumber - The number to display for dialing into\n     * the conference.\n     */\n    state = {\n        passwordEditEnabled: false,\n        phoneNumber: undefined\n    };\n\n    /**\n     * Initializes new {@code InfoDialog} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        if (props.dialIn && props.dialIn.numbers) {\n            this.state.phoneNumber\n                = _getDefaultPhoneNumber(props.dialIn.numbers);\n        }\n\n        /**\n         * The internal reference to the DOM/HTML element backing the React\n         * {@code Component} text area. It is necessary for the implementation\n         * of copying to the clipboard.\n         *\n         * @private\n         * @type {HTMLTextAreaElement}\n         */\n        this._copyElement = null;\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onClickURLText = this._onClickURLText.bind(this);\n        this._onCopyInviteInfo = this._onCopyInviteInfo.bind(this);\n        this._onCopyInviteUrl = this._onCopyInviteUrl.bind(this);\n        this._onPasswordRemove = this._onPasswordRemove.bind(this);\n        this._onPasswordSubmit = this._onPasswordSubmit.bind(this);\n        this._onTogglePasswordEditState\n            = this._onTogglePasswordEditState.bind(this);\n        this._setCopyElement = this._setCopyElement.bind(this);\n        this._setCopyUrlElement = this._setCopyUrlElement.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            isInlineDialog,\n            liveStreamViewURL,\n            onMouseOver,\n            t\n        } = this.props;\n\n        const inlineDialog = (\n            <div\n                className = 'info-dialog'\n                onMouseOver = { onMouseOver } >\n                <div className = 'info-dialog-column'>\n                    <h4 className = 'info-dialog-icon'>\n                        <Icon src = { IconInfo } />\n                    </h4>\n                </div>\n                <div className = 'info-dialog-column'>\n                    <div className = 'info-dialog-title'>\n                        { t('info.title') }\n                    </div>\n                    <div className = 'info-dialog-conference-url'>\n                        <span className = 'info-label'>\n                            { t('info.conferenceURL') }\n                        </span>\n                        <span className = 'spacer'>&nbsp;</span>\n                        <span className = 'info-value'>\n                            <a\n                                className = 'info-dialog-url-text info-dialog-url-text-unselectable'\n                                href = { this.props._inviteURL }\n                                onClick = { this._onClickURLText } >\n                                { decodeURI(this._getURLToDisplay()) }\n                            </a>\n                        </span>\n                        <span className = 'info-dialog-url-icon'>\n                            <Icon\n                                onClick = { this._onCopyInviteUrl }\n                                size = { 18 }\n                                src = { IconCopy } />\n                        </span>\n                    </div>\n                    <div className = 'info-dialog-dial-in'>\n                        { this._renderDialInDisplay() }\n                    </div>\n                    { liveStreamViewURL && this._renderLiveStreamURL() }\n                    <div className = 'info-dialog-password'>\n                        <PasswordForm\n                            editEnabled = { this.state.passwordEditEnabled }\n                            locked = { this.props._locked }\n                            onSubmit = { this._onPasswordSubmit }\n                            password = { this.props._password }\n                            passwordNumberOfDigits = { this.props._passwordNumberOfDigits } />\n                    </div>\n                    <div className = 'info-dialog-action-links'>\n                        <div className = 'info-dialog-action-link'>\n                            <a\n                                className = 'info-copy'\n                                onClick = { this._onCopyInviteInfo }>\n                                { t('dialog.copy') }\n                            </a>\n                        </div>\n                        { this._renderPasswordAction() }\n                    </div>\n                </div>\n                <textarea\n                    className = 'info-dialog-copy-element'\n                    readOnly = { true }\n                    ref = { this._setCopyElement }\n                    tabIndex = '-1'\n                    value = { this._getTextToCopy() } />\n                <textarea\n                    className = 'info-dialog-copy-element'\n                    readOnly = { true }\n                    ref = { this._setCopyUrlElement }\n                    tabIndex = '-1'\n                    value = { this.props._inviteURL } />\n            </div>\n        );\n\n        if (isInlineDialog) {\n            return inlineDialog;\n        }\n\n        return (\n            <Dialog\n                cancelTitleKey = 'dialog.close'\n                submitDisabled = { true }\n                titleKey = 'info.label'\n                width = 'small'>\n                { inlineDialog }\n            </Dialog>\n        );\n    }\n\n    /**\n     * Creates a message describing how to dial in to the conference.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getTextToCopy() {\n        const { _localParticipantName, liveStreamViewURL, t } = this.props;\n        const _inviteURL = _decodeRoomURI(this.props._inviteURL);\n\n        let invite = _localParticipantName\n            ? t('info.inviteURLFirstPartPersonal', { name: _localParticipantName })\n            : t('info.inviteURLFirstPartGeneral');\n\n        invite += t('info.inviteURLSecondPart', {\n            url: _inviteURL\n        });\n\n        if (liveStreamViewURL) {\n            const liveStream = t('info.inviteLiveStream', {\n                url: liveStreamViewURL\n            });\n\n            invite = `${invite}\\n${liveStream}`;\n        }\n\n        if (shouldDisplayDialIn(this.props.dialIn)) {\n            const dial = t('info.invitePhone', {\n                number: this.state.phoneNumber,\n                conferenceID: this.props.dialIn.conferenceID\n            });\n            const moreNumbers = t('info.invitePhoneAlternatives', {\n                url: getDialInfoPageURL(\n                    this.props._conferenceName,\n                    this.props._locationURL\n                ),\n                silentUrl: `${_inviteURL}#config.startSilent=true`\n            });\n\n            invite = `${invite}\\n${dial}\\n${moreNumbers}`;\n        }\n\n        return invite;\n    }\n\n    /**\n     * Modifies the inviteURL for display in the modal.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getURLToDisplay() {\n        return this.props._inviteURL.replace(/^https?:\\/\\//i, '');\n    }\n\n    _onClickURLText: (Object) => void;\n\n    /**\n     * Callback invoked when a displayed URL link is clicked to prevent actual\n     * navigation from happening. The URL links have an href to display the\n     * action \"Copy Link Address\" in the context menu but otherwise it should\n     * not behave like links.\n     *\n     * @param {Object} event - The click event from clicking on the link.\n     * @private\n     * @returns {void}\n     */\n    _onClickURLText(event) {\n        event.preventDefault();\n    }\n\n    _onCopyInviteInfo: () => void;\n\n    /**\n     * Callback invoked to copy the contents of {@code this._copyElement} to the\n     * clipboard.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onCopyInviteInfo() {\n        try {\n            if (!this._copyElement) {\n                throw new Error('No element to copy from.');\n            }\n\n            this._copyElement && this._copyElement.select();\n            document.execCommand('copy');\n            this._copyElement && this._copyElement.blur();\n        } catch (err) {\n            logger.error('error when copying the text', err);\n        }\n    }\n\n    _onCopyInviteUrl: () => void;\n\n    /**\n     * Callback invoked to copy the contents of {@code this._copyUrlElement} to the clipboard.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onCopyInviteUrl() {\n        try {\n            if (!this._copyUrlElement) {\n                throw new Error('No element to copy from.');\n            }\n\n            this._copyUrlElement && this._copyUrlElement.select();\n            document.execCommand('copy');\n            this._copyUrlElement && this._copyUrlElement.blur();\n        } catch (err) {\n            logger.error('error when copying the text', err);\n        }\n    }\n\n    _onPasswordRemove: () => void;\n\n    /**\n     * Callback invoked to unlock the current JitsiConference.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onPasswordRemove() {\n        this._onPasswordSubmit('');\n    }\n\n    _onPasswordSubmit: (string) => void;\n\n    /**\n     * Callback invoked to set a password on the current JitsiConference.\n     *\n     * @param {string} enteredPassword - The new password to be used to lock the\n     * current JitsiConference.\n     * @private\n     * @returns {void}\n     */\n    _onPasswordSubmit(enteredPassword) {\n        const { _conference } = this.props;\n\n        this.props.dispatch(setPassword(\n            _conference,\n            _conference.lock,\n            enteredPassword\n        ));\n    }\n\n    _onTogglePasswordEditState: () => void;\n\n    /**\n     * Toggles whether or not the password should currently be shown as being\n     * edited locally.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onTogglePasswordEditState() {\n        this.setState({\n            passwordEditEnabled: !this.state.passwordEditEnabled\n        });\n    }\n\n    /**\n     * Returns a ReactElement for showing how to dial into the conference, if\n     * dialing in is available.\n     *\n     * @private\n     * @returns {null|ReactElement}\n     */\n    _renderDialInDisplay() {\n        if (!shouldDisplayDialIn(this.props.dialIn)) {\n            return null;\n        }\n\n        return (\n            <div>\n                <DialInNumber\n                    conferenceID = { this.props.dialIn.conferenceID }\n                    phoneNumber = { this.state.phoneNumber } />\n                <a\n                    className = 'more-numbers'\n                    href = {\n                        getDialInfoPageURL(\n                            this.props._conferenceName,\n                            this.props._locationURL\n                        )\n                    }\n                    rel = 'noopener noreferrer'\n                    target = '_blank'>\n                    { this.props.t('info.moreNumbers') }\n                </a>\n            </div>\n        );\n    }\n\n    /**\n     * Returns a ReactElement for interacting with the password field.\n     *\n     * @private\n     * @returns {null|ReactElement}\n     */\n    _renderPasswordAction() {\n        const { t } = this.props;\n        let className, onClick, textKey;\n\n\n        if (!this.props._canEditPassword) {\n            // intentionally left blank to prevent rendering anything\n        } else if (this.state.passwordEditEnabled) {\n            className = 'cancel-password';\n            onClick = this._onTogglePasswordEditState;\n            textKey = 'info.cancelPassword';\n        } else if (this.props._locked) {\n            className = 'remove-password';\n            onClick = this._onPasswordRemove;\n            textKey = 'dialog.removePassword';\n        } else {\n            className = 'add-password';\n            onClick = this._onTogglePasswordEditState;\n            textKey = 'info.addPassword';\n        }\n\n        return className && onClick && textKey\n            ? <div className = 'info-dialog-action-link'>\n                <a\n                    className = { className }\n                    onClick = { onClick }>\n                    { t(textKey) }\n                </a>\n            </div>\n            : null;\n    }\n\n    /**\n     * Returns a ReactElement for display a link to the current url of a\n     * live stream in progress.\n     *\n     * @private\n     * @returns {null|ReactElement}\n     */\n    _renderLiveStreamURL() {\n        const { liveStreamViewURL, t } = this.props;\n\n        return (\n            <div className = 'info-dialog-live-stream-url'>\n                <span className = 'info-label'>\n                    { t('info.liveStreamURL') }\n                </span>\n                <span className = 'spacer'>&nbsp;</span>\n                <span className = 'info-value'>\n                    <a\n                        className = 'info-dialog-url-text'\n                        href = { liveStreamViewURL }\n                        onClick = { this._onClickURLText } >\n                        { liveStreamViewURL }\n                    </a>\n                </span>\n            </div>\n        );\n    }\n\n    _setCopyElement: () => void;\n\n    /**\n     * Sets the internal reference to the DOM/HTML element backing the React\n     * {@code Component} input.\n     *\n     * @param {HTMLInputElement} element - The DOM/HTML element for this\n     * {@code Component}'s input.\n     * @private\n     * @returns {void}\n     */\n    _setCopyElement(element: Object) {\n        this._copyElement = element;\n    }\n\n    _setCopyUrlElement: () => void;\n\n    /**\n     * Sets the internal reference to the DOM/HTML element backing the React\n     * {@code Component} input.\n     *\n     * @param {HTMLInputElement} element - The DOM/HTML element for this\n     * {@code Component}'s input.\n     * @private\n     * @returns {void}\n     */\n    _setCopyUrlElement(element: Object) {\n        this._copyUrlElement = element;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code InfoDialog} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _canEditPassword: boolean,\n *     _conference: Object,\n *     _conferenceName: string,\n *     _inviteURL: string,\n *     _localParticipantName: ?string,\n *     _locationURL: string,\n *     _locked: string,\n *     _password: string\n * }}\n */\nfunction _mapStateToProps(state) {\n    const {\n        conference,\n        locked,\n        password,\n        room\n    } = state['features/base/conference'];\n    const localParticipant = getLocalParticipant(state);\n\n    return {\n        _canEditPassword: isLocalParticipantModerator(state, state['features/base/config'].lockRoomGuestEnabled),\n        _conference: conference,\n        _conferenceName: room,\n        _passwordNumberOfDigits: state['features/base/config'].roomPasswordNumberOfDigits,\n        _inviteURL: getInviteURL(state),\n        _localParticipantName: localParticipant?.name,\n        _locationURL: state['features/base/connection'].locationURL,\n        _locked: locked,\n        _password: password\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(InfoDialog));\n","// @flow\n\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { createToolbarEvent, sendAnalytics } from '../../../../analytics';\nimport { openDialog } from '../../../../base/dialog';\nimport { translate } from '../../../../base/i18n';\nimport { IconInfo } from '../../../../base/icons';\nimport { JitsiRecordingConstants } from '../../../../base/lib-jitsi-meet';\nimport { getParticipantCount } from '../../../../base/participants';\nimport { OverflowMenuItem } from '../../../../base/toolbox';\nimport { connect } from '../../../../base/redux';\nimport { getActiveSession } from '../../../../recording';\nimport { ToolbarButton } from '../../../../toolbox';\nimport { updateDialInNumbers } from '../../../actions';\n\nimport InfoDialog from './InfoDialog';\n\n/**\n * The type of the React {@code Component} props of {@link InfoDialogButton}.\n */\ntype Props = {\n\n    /**\n     * The redux state representing the dial-in numbers feature.\n     */\n    _dialIn: Object,\n\n    /**\n     * Whether or not the {@code InfoDialog} should display automatically when\n     * in a lonely call.\n     */\n    _disableAutoShow: boolean,\n\n    /**\n     * Whether or not the local participant has joined a\n     * {@code JitsiConference}. Used to trigger auto showing of the\n     * {@code InfoDialog}.\n     */\n    _isConferenceJoined: Boolean,\n\n    /**\n     * The URL for a currently active live broadcast\n     */\n    _liveStreamViewURL: ?string,\n\n    /**\n     * True if the number of real participants in the call is less than 2. If in a lonely call, the\n     * {@code InfoDialog} will be automatically shown.\n     */\n    _isLonelyCall: boolean,\n\n    /**\n     * Whether or not the toolbox, in which this component exists, is visible.\n     */\n    _toolboxVisible: boolean,\n\n    /**\n     * Invoked to toggle display of the info dialog.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Whether to show the label or not.\n     */\n    showLabel: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link InfoDialogButton}.\n */\ntype State = {\n\n    /**\n     * Cache the conference connection state to derive when transitioning from\n     * not joined to join, in order to auto-show the InfoDialog.\n     */\n    hasConnectedToConference: boolean,\n\n    /**\n     * Whether or not {@code InfoDialog} should be visible.\n     */\n    showDialog: boolean\n};\n\n/**\n * A React Component for displaying a button which opens a dialog with\n * information about the conference and with ways to invite people.\n *\n * @extends Component\n */\nclass InfoDialogButton extends Component<Props, State> {\n    /**\n     * Implements React's {@link Component#getDerivedStateFromProps()}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props, state) {\n        return {\n            hasConnectedToConference: props._isConferenceJoined,\n            showDialog: (props._toolboxVisible && state.showDialog)\n                || (!state.hasConnectedToConference\n                    && props._isConferenceJoined\n                    && props._isLonelyCall\n                    && props._toolboxVisible\n                    && !props._disableAutoShow)\n        };\n    }\n\n    /**\n     * Initializes new {@code InfoDialogButton} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            hasConnectedToConference: props._isConferenceJoined,\n            showDialog: false\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onDialogClose = this._onDialogClose.bind(this);\n        this._onDialogToggle = this._onDialogToggle.bind(this);\n        this._onClickOverflowMenuButton\n            = this._onClickOverflowMenuButton.bind(this);\n    }\n\n    /**\n     * Update dial-in numbers {@code InfoDialog}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        if (!this.props._dialIn.numbers) {\n            this.props.dispatch(updateDialInNumbers());\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _dialIn, _liveStreamViewURL, showLabel, t } = this.props;\n        const { showDialog } = this.state;\n\n        if (showLabel) {\n            return (\n                <OverflowMenuItem\n                    accessibilityLabel = { t('info.accessibilityLabel') }\n                    icon = 'icon-info'\n                    key = 'info-button'\n                    onClick = { this._onClickOverflowMenuButton }\n                    text = { t('info.label') } />\n            );\n        }\n\n        return (\n            <div className = 'toolbox-button-wth-dialog'>\n                <InlineDialog\n                    content = {\n                        <InfoDialog\n                            dialIn = { _dialIn }\n                            isInlineDialog = { true }\n                            liveStreamViewURL = { _liveStreamViewURL }\n                            onClose = { this._onDialogClose } /> }\n                    isOpen = { showDialog }\n                    onClose = { this._onDialogClose }\n                    position = { 'top right' }>\n                    <ToolbarButton\n                        accessibilityLabel = { t('info.accessibilityLabel') }\n                        icon = { IconInfo }\n                        onClick = { this._onDialogToggle }\n                        tooltip = { t('info.tooltip') } />\n                </InlineDialog>\n            </div>\n        );\n    }\n\n    _onDialogClose: () => void;\n\n    /**\n     * Hides {@code InfoDialog}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onDialogClose() {\n        this.setState({ showDialog: false });\n    }\n\n    _onClickOverflowMenuButton: () => void;\n\n    /**\n     * Opens the Info dialog.\n     *\n     * @returns {void}\n     */\n    _onClickOverflowMenuButton() {\n        const { _dialIn, _liveStreamViewURL } = this.props;\n\n        this.props.dispatch(openDialog(InfoDialog, {\n            dialIn: _dialIn,\n            liveStreamViewURL: _liveStreamViewURL,\n            isInlineDialog: false\n        }));\n    }\n\n    _onDialogToggle: () => void;\n\n    /**\n     * Toggles the display of {@code InfoDialog}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onDialogToggle() {\n        sendAnalytics(createToolbarEvent('info'));\n\n        this.setState({ showDialog: !this.state.showDialog });\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code InfoDialogButton}\n * component's props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _dialIn: Object,\n *     _disableAutoShow: boolean,\n *     _isConferenceIsJoined: boolean,\n *     _liveStreamViewURL: string,\n *     _isLonelyCall: boolean,\n *     _toolboxVisible: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    const currentLiveStreamingSession\n        = getActiveSession(state, JitsiRecordingConstants.mode.STREAM);\n    const { iAmRecorder, iAmSipGateway } = state['features/base/config'];\n\n    return {\n        _dialIn: state['features/invite'],\n        _disableAutoShow: iAmRecorder || iAmSipGateway,\n        _isConferenceJoined:\n            Boolean(state['features/base/conference'].conference),\n        _liveStreamViewURL:\n            currentLiveStreamingSession\n                && currentLiveStreamingSession.liveStreamViewURL,\n        _isLonelyCall: getParticipantCount(state) < 2,\n        _toolboxVisible: state['features/toolbox'].visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(InfoDialogButton));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Avatar } from '../../../base/avatar';\nimport { MEDIA_TYPE } from '../../../base/media';\nimport {\n    getParticipants,\n    getParticipantDisplayName,\n    getParticipantPresenceStatus\n} from '../../../base/participants';\nimport { Container, Text } from '../../../base/react';\nimport { connect } from '../../../base/redux';\nimport { isLocalTrackMuted } from '../../../base/tracks';\nimport { CALLING, PresenceLabel } from '../../../presence-status';\n\nimport styles from './styles';\n\n/**\n * The type of the React {@code Component} props of {@link CalleeInfo}.\n */\ntype Props = {\n\n    /**\n     * The callee's information such as display name.\n     */\n    _callee: Object,\n\n    _isVideoMuted: boolean\n};\n\n\n/**\n * Implements a React {@link Component} which depicts the establishment of a\n * call with a specific remote callee.\n *\n * @extends Component\n */\nclass CalleeInfo extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            id,\n            name,\n            status = CALLING\n        } = this.props._callee;\n        const className = this.props._isVideoMuted ? 'solidBG' : undefined;\n\n        return (\n            <Container\n                { ...this._style('ringing', className) }\n                id = 'ringOverlay'>\n                <Container\n                    { ...this._style('ringing__content') }>\n                    <Avatar\n                        { ...this._style('ringing__avatar') }\n                        participantId = { id } />\n                    <Container { ...this._style('ringing__status') }>\n                        <PresenceLabel\n                            defaultPresence = { status }\n                            { ...this._style('ringing__text') } />\n                    </Container>\n                    <Container { ...this._style('ringing__name') }>\n                        <Text\n                            { ...this._style('ringing__text') }>\n                            { name }\n                        </Text>\n                    </Container>\n                </Container>\n            </Container>\n        );\n    }\n\n    /**\n     * Attempts to convert specified CSS class names into React\n     * {@link Component} props {@code style} or {@code className}.\n     *\n     * @param {Array<string>} classNames - The CSS class names to convert\n     * into React {@code Component} props {@code style} or {@code className}.\n     * @returns {{\n     *     className: string,\n     *     style: Object\n     * }}\n     */\n    _style(...classNames: Array<?string>) {\n        let className = '';\n        let style;\n\n        for (const aClassName of classNames) {\n            if (aClassName) {\n                // Attemp to convert aClassName into style.\n                if (styles && aClassName in styles) {\n                    // React Native will accept an Array as the value of the\n                    // style prop. However, I do not know about React.\n                    style = {\n                        ...style,\n                        ...styles[aClassName]\n                    };\n                } else {\n                    // Otherwise, leave it as className.\n                    className += `${aClassName} `;\n                }\n            }\n        }\n\n        // Choose which of the className and/or style props has a value and,\n        // consequently, must be returned.\n        const props = {};\n\n        if (className) {\n            props.className = className.trim();\n        }\n        if (style) {\n            props.style = style;\n        }\n\n        return props;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to {@code CalleeInfo}'s props.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _callee: Object\n * }}\n */\nfunction _mapStateToProps(state) {\n    const _isVideoMuted\n        = isLocalTrackMuted(state['features/base/tracks'], MEDIA_TYPE.VIDEO);\n    const poltergeist\n        = getParticipants(state).find(p => p.botType === 'poltergeist');\n\n    if (poltergeist) {\n        const { id } = poltergeist;\n\n        return {\n            _callee: {\n                id,\n                name: getParticipantDisplayName(state, id),\n                status: getParticipantPresenceStatus(state, id)\n            },\n            _isVideoMuted\n        };\n    }\n\n    return {\n        _callee: state['features/invite'].initialCalleeInfo,\n        _isVideoMuted\n    };\n}\n\nexport default connect(_mapStateToProps)(CalleeInfo);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { connect } from '../../../base/redux';\n\nimport CalleeInfo from './CalleeInfo';\n\n/**\n * The type of the React {@code Component} props of {@code CalleeInfoContainer}.\n */\ntype Props = {\n\n    /**\n     * The indicator which determines whether {@code CalleeInfo} is to be\n     * rendered.\n     *\n     * @private\n     */\n    _calleeInfoVisible: boolean\n};\n\n/**\n * Implements a React {@link Component} which depicts the establishment of a\n * call with a specific remote callee if there is such a remote callee.\n *\n * @extends Component\n */\nclass CalleeInfoContainer extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return this.props._calleeInfoVisible ? <CalleeInfo /> : null;\n    }\n}\n\n/**\n * Maps parts of the redux state to {@link CalleeInfoContainer} (React\n * {@code Component}) props.\n *\n * @param {Object} state - The redux state of which parts are to be mapped to\n * {@code CalleeInfoContainer} props.\n * @private\n * @returns {{\n *     _calleeInfoVisible: boolean\n * }}\n */\nfunction _mapStateToProps(state: Object): Object {\n    return {\n        /**\n         * The indicator which determines whether {@code CalleeInfo} is to be\n         * rendered.\n         *\n         * @private\n         * @type {boolean}\n         */\n        _calleeInfoVisible: state['features/invite'].calleeInfoVisible\n    };\n}\n\nexport default connect(_mapStateToProps)(CalleeInfoContainer);\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    ADD_PENDING_INVITE_REQUEST,\n    REMOVE_PENDING_INVITE_REQUESTS,\n    SET_CALLEE_INFO_VISIBLE,\n    UPDATE_DIAL_IN_NUMBERS_FAILED,\n    UPDATE_DIAL_IN_NUMBERS_SUCCESS\n} from './actionTypes';\nimport logger from './logger';\n\nconst DEFAULT_STATE = {\n    /**\n     * The indicator which determines whether (the) {@code CalleeInfo} is\n     * visible.\n     *\n     * @type {boolean|undefined}\n     */\n    calleeInfoVisible: false,\n    numbersEnabled: true,\n    pendingInviteRequests: []\n};\n\nReducerRegistry.register('features/invite', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case ADD_PENDING_INVITE_REQUEST:\n        return {\n            ...state,\n            pendingInviteRequests: [\n                ...state.pendingInviteRequests,\n                action.request\n            ]\n        };\n\n    case REMOVE_PENDING_INVITE_REQUESTS:\n        return {\n            ...state,\n            pendingInviteRequests: []\n        };\n\n    case SET_CALLEE_INFO_VISIBLE:\n        return {\n            ...state,\n            calleeInfoVisible: action.calleeInfoVisible,\n            initialCalleeInfo: action.initialCalleeInfo\n        };\n\n    case UPDATE_DIAL_IN_NUMBERS_FAILED:\n        return {\n            ...state,\n            error: action.error\n        };\n\n    case UPDATE_DIAL_IN_NUMBERS_SUCCESS: {\n        if (Array.isArray(action.dialInNumbers)) {\n            return {\n                ...state,\n                conferenceID: action.conferenceID,\n                numbers: action.dialInNumbers,\n                numbersEnabled: true\n            };\n        }\n\n        // this is the old format which is deprecated\n        logger.warn('Using deprecated API for retrieving phone numbers');\n\n        const { numbersEnabled } = action.dialInNumbers;\n\n        return {\n            ...state,\n            conferenceID: action.conferenceID,\n            numbers: action.dialInNumbers,\n            numbersEnabled\n        };\n    }\n    }\n\n    return state;\n});\n","// @flow\n\n/**\n * Modal ID for the AddPeopleDialog modal.\n */\nexport const ADD_PEOPLE_DIALOG_VIEW_ID = 'ADD_PEOPLE_DIALOG_VIEW_ID';\n\n/**\n * Modal ID for the DialInSummary modal.\n */\nexport const DIAL_IN_SUMMARY_VIEW_ID = 'DIAL_IN_SUMMARY_VIEW_ID';\n\n/**\n * The identifier of the sound to be played when the status of an outgoing call\n * is expired.\n *\n * @type {string}\n */\nexport const OUTGOING_CALL_EXPIRED_SOUND_ID\n    = 'OUTGOING_CALL_EXPIRED_SOUND_ID';\n\n/**\n * The identifier of the sound to be played when the status of an outgoing call\n * is rejected.\n *\n * @type {string}\n */\nexport const OUTGOING_CALL_REJECTED_SOUND_ID\n    = 'OUTGOING_CALL_REJECTED_SOUND_ID';\n\n/**\n * The identifier of the sound to be played when the status of an outgoing call\n * is ringing.\n *\n * @type {string}\n */\nexport const OUTGOING_CALL_RINGING_SOUND_ID = 'OUTGOING_CALL_RINGING_SOUND_ID';\n\n/**\n * The identifier of the sound to be played when outgoing call is started.\n *\n * @type {string}\n */\nexport const OUTGOING_CALL_START_SOUND_ID = 'OUTGOING_CALL_START_SOUND_ID';\n","import {\n    OUTGOING_CALL_EXPIRED_SOUND_ID,\n    OUTGOING_CALL_REJECTED_SOUND_ID,\n    OUTGOING_CALL_RINGING_SOUND_ID,\n    OUTGOING_CALL_START_SOUND_ID\n} from './constants';\n\n/**\n * Maps the sounds IDs with the filenames sounds associated with them.\n *\n * @type {Map<string, string>}\n */\nexport const sounds = new Map([\n\n    /**\n     * The name of the sound file which will be played when outgoing call is\n     * expired.\n     */\n    [ OUTGOING_CALL_EXPIRED_SOUND_ID, { file: 'rejected.wav' } ],\n\n    /**\n     * The name of the sound file which will be played when outgoing call is\n     * rejected.\n     */\n    [ OUTGOING_CALL_REJECTED_SOUND_ID, { file: 'rejected.wav' } ],\n\n    /**\n     * The name of the sound file which will be played when the status of an\n     * outgoing call is ringing.\n     */\n    [\n        OUTGOING_CALL_RINGING_SOUND_ID,\n        {\n            file: 'outgoingRinging.wav',\n            options: { loop: true }\n        }\n    ],\n\n    /**\n     * The name of the sound file which will be played when outgoing call is\n     * started.\n     */\n    [ OUTGOING_CALL_START_SOUND_ID, { file: 'outgoingStart.wav' } ]\n]);\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport {\n    CONFERENCE_JOINED\n} from '../base/conference';\nimport {\n    getLocalParticipant,\n    getParticipantPresenceStatus,\n    getParticipants,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_JOINED_SOUND_ID,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_UPDATED,\n    pinParticipant\n} from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\nimport {\n    playSound,\n    registerSound,\n    stopSound,\n    unregisterSound\n} from '../base/sounds';\nimport {\n    CALLING,\n    CONNECTED_USER,\n    EXPIRED,\n    INVITED,\n    REJECTED,\n    RINGING\n} from '../presence-status';\n\nimport {\n    SET_CALLEE_INFO_VISIBLE,\n    UPDATE_DIAL_IN_NUMBERS_FAILED\n} from './actionTypes';\nimport {\n    invite,\n    removePendingInviteRequests,\n    setCalleeInfoVisible\n} from './actions';\nimport {\n    OUTGOING_CALL_EXPIRED_SOUND_ID,\n    OUTGOING_CALL_REJECTED_SOUND_ID,\n    OUTGOING_CALL_RINGING_SOUND_ID,\n    OUTGOING_CALL_START_SOUND_ID\n} from './constants';\nimport logger from './logger';\nimport { sounds } from './sounds';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Maps the presence status with the ID of the sound that will be played when\n * the status is received.\n */\nconst statusToRingtone = {\n    [CALLING]: OUTGOING_CALL_START_SOUND_ID,\n    [CONNECTED_USER]: PARTICIPANT_JOINED_SOUND_ID,\n    [EXPIRED]: OUTGOING_CALL_EXPIRED_SOUND_ID,\n    [INVITED]: OUTGOING_CALL_START_SOUND_ID,\n    [REJECTED]: OUTGOING_CALL_REJECTED_SOUND_ID,\n    [RINGING]: OUTGOING_CALL_RINGING_SOUND_ID\n};\n\n/**\n * The middleware of the feature invite common to mobile/react-native and\n * Web/React.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    let oldParticipantPresence;\n    const { dispatch, getState } = store;\n    const state = getState();\n\n    if (action.type === PARTICIPANT_UPDATED\n        || action.type === PARTICIPANT_LEFT) {\n        oldParticipantPresence\n            = getParticipantPresenceStatus(state, action.participant.id);\n    }\n\n    if (action.type === SET_CALLEE_INFO_VISIBLE) {\n        if (action.calleeInfoVisible) {\n            dispatch(pinParticipant(getLocalParticipant(state).id));\n        } else {\n            // unpin participant\n            dispatch(pinParticipant());\n        }\n    }\n\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        for (const [ soundId, sound ] of sounds.entries()) {\n            dispatch(registerSound(soundId, sound.file, sound.options));\n        }\n        break;\n\n    case APP_WILL_UNMOUNT:\n        for (const soundId of sounds.keys()) {\n            dispatch(unregisterSound(soundId));\n        }\n        break;\n\n    case CONFERENCE_JOINED:\n        _onConferenceJoined(store);\n        break;\n\n    case PARTICIPANT_JOINED:\n    case PARTICIPANT_LEFT:\n    case PARTICIPANT_UPDATED: {\n        _maybeHideCalleeInfo(action, store);\n\n        const newParticipantPresence\n            = getParticipantPresenceStatus(state, action.participant.id);\n\n        if (oldParticipantPresence === newParticipantPresence) {\n            break;\n        }\n\n        const oldSoundId\n            = oldParticipantPresence\n                && statusToRingtone[oldParticipantPresence];\n        const newSoundId\n            = newParticipantPresence\n                && statusToRingtone[newParticipantPresence];\n\n\n        if (oldSoundId === newSoundId) {\n            break;\n        }\n\n        if (oldSoundId) {\n            dispatch(stopSound(oldSoundId));\n        }\n\n        if (newSoundId) {\n            dispatch(playSound(newSoundId));\n        }\n\n        break;\n    }\n    case UPDATE_DIAL_IN_NUMBERS_FAILED:\n        logger.error(\n            'Error encountered while fetching dial-in numbers:',\n            action.error);\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Hides the callee info layot if there are more than 1 real\n * (not poltergeist, shared video, etc.) participants in the call.\n *\n * @param {Object} action - The redux action.\n * @param {ReduxStore} store - The redux store.\n * @returns {void}\n */\nfunction _maybeHideCalleeInfo(action, store) {\n    const state = store.getState();\n\n    if (!state['features/invite'].calleeInfoVisible) {\n        return;\n    }\n    const participants = getParticipants(state);\n    const numberOfPoltergeists\n        = participants.filter(p => p.botType === 'poltergeist').length;\n    const numberOfRealParticipants = participants.length - numberOfPoltergeists;\n\n    if ((numberOfPoltergeists > 1 || numberOfRealParticipants > 1)\n        || (action.type === PARTICIPANT_LEFT && participants.length === 1)) {\n        store.dispatch(setCalleeInfoVisible(false));\n    }\n}\n\n/**\n * Executes the pending invitation requests if any.\n *\n * @param {ReduxStore} store - The redux store.\n * @returns {void}\n */\nfunction _onConferenceJoined(store) {\n    const { dispatch, getState } = store;\n\n    const pendingInviteRequests\n        = getState()['features/invite'].pendingInviteRequests || [];\n\n    pendingInviteRequests.forEach(({ invitees, callback }) => {\n        dispatch(invite(invitees))\n            .then(failedInvitees => {\n                callback(failedInvitees);\n            });\n    });\n\n    dispatch(removePendingInviteRequests());\n}\n","// @flow\n\nimport { openDialog } from '../base/dialog';\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport { BEGIN_ADD_PEOPLE } from './actionTypes';\nimport { AddPeopleDialog } from './components';\nimport './middleware.any';\n\n/**\n * The middleware of the feature invite specific to Web/React.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case BEGIN_ADD_PEOPLE:\n        return _beginAddPeople(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature invite that the action {@link BEGIN_ADD_PEOPLE} is being\n * dispatched within a specific redux {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code BEGIN_ADD_PEOPLE} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {*} The value returned by {@code next(action)}.\n */\nfunction _beginAddPeople({ dispatch }, next, action) {\n    const result = next(action);\n\n    dispatch(openDialog(AddPeopleDialog));\n\n    return result;\n}\n","export * from './actions';\nexport * from './components';\nexport * from './functions';\n\nimport './reducer';\nimport './middleware';\n","import React from 'react';\nexport var ReactReduxContext = React.createContext(null);\nexport default ReactReduxContext;","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n  callback();\n}\n\nvar batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport var setBatch = function setBatch(newBatch) {\n  return batch = newBatch;\n}; // Supply a getter just to skip dealing with ESM bindings\n\nexport var getBatch = function getBatch() {\n  return batch;\n};","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nvar CLEARED = null;\nvar nullListeners = {\n  notify: function notify() {}\n};\n\nfunction createListenerCollection() {\n  var batch = getBatch(); // the current/next pattern is copied from redux's createStore code.\n  // TODO: refactor+expose that code to be reusable here?\n\n  var current = [];\n  var next = [];\n  return {\n    clear: function clear() {\n      next = CLEARED;\n      current = CLEARED;\n    },\n    notify: function notify() {\n      var listeners = current = next;\n      batch(function () {\n        for (var i = 0; i < listeners.length; i++) {\n          listeners[i]();\n        }\n      });\n    },\n    get: function get() {\n      return next;\n    },\n    subscribe: function subscribe(listener) {\n      var isSubscribed = true;\n      if (next === current) next = current.slice();\n      next.push(listener);\n      return function unsubscribe() {\n        if (!isSubscribed || current === CLEARED) return;\n        isSubscribed = false;\n        if (next === current) next = current.slice();\n        next.splice(next.indexOf(listener), 1);\n      };\n    }\n  };\n}\n\nvar Subscription =\n/*#__PURE__*/\nfunction () {\n  function Subscription(store, parentSub) {\n    this.store = store;\n    this.parentSub = parentSub;\n    this.unsubscribe = null;\n    this.listeners = nullListeners;\n    this.handleChangeWrapper = this.handleChangeWrapper.bind(this);\n  }\n\n  var _proto = Subscription.prototype;\n\n  _proto.addNestedSub = function addNestedSub(listener) {\n    this.trySubscribe();\n    return this.listeners.subscribe(listener);\n  };\n\n  _proto.notifyNestedSubs = function notifyNestedSubs() {\n    this.listeners.notify();\n  };\n\n  _proto.handleChangeWrapper = function handleChangeWrapper() {\n    if (this.onStateChange) {\n      this.onStateChange();\n    }\n  };\n\n  _proto.isSubscribed = function isSubscribed() {\n    return Boolean(this.unsubscribe);\n  };\n\n  _proto.trySubscribe = function trySubscribe() {\n    if (!this.unsubscribe) {\n      this.unsubscribe = this.parentSub ? this.parentSub.addNestedSub(this.handleChangeWrapper) : this.store.subscribe(this.handleChangeWrapper);\n      this.listeners = createListenerCollection();\n    }\n  };\n\n  _proto.tryUnsubscribe = function tryUnsubscribe() {\n    if (this.unsubscribe) {\n      this.unsubscribe();\n      this.unsubscribe = null;\n      this.listeners.clear();\n      this.listeners = nullListeners;\n    }\n  };\n\n  return Subscription;\n}();\n\nexport { Subscription as default };","import _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { ReactReduxContext } from './Context';\nimport Subscription from '../utils/Subscription';\n\nvar Provider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inheritsLoose(Provider, _Component);\n\n  function Provider(props) {\n    var _this;\n\n    _this = _Component.call(this, props) || this;\n    var store = props.store;\n    _this.notifySubscribers = _this.notifySubscribers.bind(_assertThisInitialized(_this));\n    var subscription = new Subscription(store);\n    subscription.onStateChange = _this.notifySubscribers;\n    _this.state = {\n      store: store,\n      subscription: subscription\n    };\n    _this.previousState = store.getState();\n    return _this;\n  }\n\n  var _proto = Provider.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this._isMounted = true;\n    this.state.subscription.trySubscribe();\n\n    if (this.previousState !== this.props.store.getState()) {\n      this.state.subscription.notifyNestedSubs();\n    }\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    if (this.unsubscribe) this.unsubscribe();\n    this.state.subscription.tryUnsubscribe();\n    this._isMounted = false;\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (this.props.store !== prevProps.store) {\n      this.state.subscription.tryUnsubscribe();\n      var subscription = new Subscription(this.props.store);\n      subscription.onStateChange = this.notifySubscribers;\n      this.setState({\n        store: this.props.store,\n        subscription: subscription\n      });\n    }\n  };\n\n  _proto.notifySubscribers = function notifySubscribers() {\n    this.state.subscription.notifyNestedSubs();\n  };\n\n  _proto.render = function render() {\n    var Context = this.props.context || ReactReduxContext;\n    return React.createElement(Context.Provider, {\n      value: this.state\n    }, this.props.children);\n  };\n\n  return Provider;\n}(Component);\n\nProvider.propTypes = {\n  store: PropTypes.shape({\n    subscribe: PropTypes.func.isRequired,\n    dispatch: PropTypes.func.isRequired,\n    getState: PropTypes.func.isRequired\n  }),\n  context: PropTypes.object,\n  children: PropTypes.any\n};\nexport default Provider;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport hoistStatics from 'hoist-non-react-statics';\nimport invariant from 'invariant';\nimport React, { useContext, useMemo, useEffect, useLayoutEffect, useRef, useReducer } from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport Subscription from '../utils/Subscription';\nimport { ReactReduxContext } from './Context'; // Define some constant arrays just to avoid re-creating these\n\nvar EMPTY_ARRAY = [];\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\n\nvar stringifyComponent = function stringifyComponent(Comp) {\n  try {\n    return JSON.stringify(Comp);\n  } catch (err) {\n    return String(Comp);\n  }\n};\n\nfunction storeStateUpdatesReducer(state, action) {\n  var updateCount = state[1];\n  return [action.payload, updateCount + 1];\n}\n\nvar initStateUpdates = function initStateUpdates() {\n  return [null, 0];\n}; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect because we want\n// `connect` to perform sync updates to a ref to save the latest props after\n// a render is actually committed to the DOM.\n\n\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;\nexport default function connectAdvanced(\n/*\n  selectorFactory is a func that is responsible for returning the selector function used to\n  compute new props from state, props, and dispatch. For example:\n     export default connectAdvanced((dispatch, options) => (state, props) => ({\n      thing: state.things[props.thingId],\n      saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\n    }))(YourComponent)\n   Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\n  outside of their selector as an optimization. Options passed to connectAdvanced are passed to\n  the selectorFactory, along with displayName and WrappedComponent, as the second argument.\n   Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\n  props. Do not use connectAdvanced directly without memoizing results between calls to your\n  selector, otherwise the Connect component will re-render on every state or props change.\n*/\nselectorFactory, // options object:\n_ref) {\n  if (_ref === void 0) {\n    _ref = {};\n  }\n\n  var _ref2 = _ref,\n      _ref2$getDisplayName = _ref2.getDisplayName,\n      getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {\n    return \"ConnectAdvanced(\" + name + \")\";\n  } : _ref2$getDisplayName,\n      _ref2$methodName = _ref2.methodName,\n      methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,\n      _ref2$renderCountProp = _ref2.renderCountProp,\n      renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,\n      _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,\n      shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,\n      _ref2$storeKey = _ref2.storeKey,\n      storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,\n      _ref2$withRef = _ref2.withRef,\n      withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,\n      _ref2$forwardRef = _ref2.forwardRef,\n      forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef,\n      _ref2$context = _ref2.context,\n      context = _ref2$context === void 0 ? ReactReduxContext : _ref2$context,\n      connectOptions = _objectWithoutPropertiesLoose(_ref2, [\"getDisplayName\", \"methodName\", \"renderCountProp\", \"shouldHandleStateChanges\", \"storeKey\", \"withRef\", \"forwardRef\", \"context\"]);\n\n  invariant(renderCountProp === undefined, \"renderCountProp is removed. render counting is built into the latest React Dev Tools profiling extension\");\n  invariant(!withRef, 'withRef is removed. To access the wrapped instance, use a ref on the connected component');\n  var customStoreWarningMessage = 'To use a custom Redux store for specific components, create a custom React context with ' + \"React.createContext(), and pass the context object to React Redux's Provider and specific components\" + ' like: <Provider context={MyContext}><ConnectedComponent context={MyContext} /></Provider>. ' + 'You may also pass a {context : MyContext} option to connect';\n  invariant(storeKey === 'store', 'storeKey has been removed and does not do anything. ' + customStoreWarningMessage);\n  var Context = context;\n  return function wrapWithConnect(WrappedComponent) {\n    if (process.env.NODE_ENV !== 'production') {\n      invariant(isValidElementType(WrappedComponent), \"You must pass a component to the function returned by \" + (methodName + \". Instead received \" + stringifyComponent(WrappedComponent)));\n    }\n\n    var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n    var displayName = getDisplayName(wrappedComponentName);\n\n    var selectorFactoryOptions = _extends({}, connectOptions, {\n      getDisplayName: getDisplayName,\n      methodName: methodName,\n      renderCountProp: renderCountProp,\n      shouldHandleStateChanges: shouldHandleStateChanges,\n      storeKey: storeKey,\n      displayName: displayName,\n      wrappedComponentName: wrappedComponentName,\n      WrappedComponent: WrappedComponent\n    });\n\n    var pure = connectOptions.pure;\n\n    function createChildSelector(store) {\n      return selectorFactory(store.dispatch, selectorFactoryOptions);\n    } // If we aren't running in \"pure\" mode, we don't want to memoize values.\n    // To avoid conditionally calling hooks, we fall back to a tiny wrapper\n    // that just executes the given callback immediately.\n\n\n    var usePureOnlyMemo = pure ? useMemo : function (callback) {\n      return callback();\n    };\n\n    function ConnectFunction(props) {\n      var _useMemo = useMemo(function () {\n        // Distinguish between actual \"data\" props that were passed to the wrapper component,\n        // and values needed to control behavior (forwarded refs, alternate context instances).\n        // To maintain the wrapperProps object reference, memoize this destructuring.\n        var forwardedRef = props.forwardedRef,\n            wrapperProps = _objectWithoutPropertiesLoose(props, [\"forwardedRef\"]);\n\n        return [props.context, forwardedRef, wrapperProps];\n      }, [props]),\n          propsContext = _useMemo[0],\n          forwardedRef = _useMemo[1],\n          wrapperProps = _useMemo[2];\n\n      var ContextToUse = useMemo(function () {\n        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n        // Memoize the check that determines which context instance we should use.\n        return propsContext && propsContext.Consumer && isContextConsumer(React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n      }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n      var contextValue = useContext(ContextToUse); // The store _must_ exist as either a prop or in context\n\n      var didStoreComeFromProps = Boolean(props.store);\n      var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n      invariant(didStoreComeFromProps || didStoreComeFromContext, \"Could not find \\\"store\\\" in the context of \" + (\"\\\"\" + displayName + \"\\\". Either wrap the root component in a <Provider>, \") + \"or pass a custom React context provider to <Provider> and the corresponding \" + (\"React context consumer to \" + displayName + \" in connect options.\"));\n      var store = props.store || contextValue.store;\n      var childPropsSelector = useMemo(function () {\n        // The child props selector needs the store reference as an input.\n        // Re-create this selector whenever the store changes.\n        return createChildSelector(store);\n      }, [store]);\n\n      var _useMemo2 = useMemo(function () {\n        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n        // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n        var subscription = new Subscription(store, didStoreComeFromProps ? null : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n        // the middle of the notification loop, where `subscription` will then be null. This can\n        // probably be avoided if Subscription's listeners logic is changed to not call listeners\n        // that have been unsubscribed in the  middle of the notification loop.\n\n        var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n        return [subscription, notifyNestedSubs];\n      }, [store, didStoreComeFromProps, contextValue]),\n          subscription = _useMemo2[0],\n          notifyNestedSubs = _useMemo2[1]; // Determine what {store, subscription} value should be put into nested context, if necessary,\n      // and memoize that value to avoid unnecessary context updates.\n\n\n      var overriddenContextValue = useMemo(function () {\n        if (didStoreComeFromProps) {\n          // This component is directly subscribed to a store from props.\n          // We don't want descendants reading from this store - pass down whatever\n          // the existing context value is from the nearest connected ancestor.\n          return contextValue;\n        } // Otherwise, put this component's subscription instance into context, so that\n        // connected descendants won't update until after this component is done\n\n\n        return _extends({}, contextValue, {\n          subscription: subscription\n        });\n      }, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update\n      // causes a change to the calculated child component props (or we caught an error in mapState)\n\n      var _useReducer = useReducer(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates),\n          _useReducer$ = _useReducer[0],\n          previousStateUpdateResult = _useReducer$[0],\n          forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards\n\n\n      if (previousStateUpdateResult && previousStateUpdateResult.error) {\n        throw previousStateUpdateResult.error;\n      } // Set up refs to coordinate values between the subscription effect and the render logic\n\n\n      var lastChildProps = useRef();\n      var lastWrapperProps = useRef(wrapperProps);\n      var childPropsFromStoreUpdate = useRef();\n      var renderIsScheduled = useRef(false);\n      var actualChildProps = usePureOnlyMemo(function () {\n        // Tricky logic here:\n        // - This render may have been triggered by a Redux store update that produced new child props\n        // - However, we may have gotten new wrapper props after that\n        // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n        // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n        // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n        if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n          return childPropsFromStoreUpdate.current;\n        } // TODO We're reading the store directly in render() here. Bad idea?\n        // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n        // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n        // to determine what the child props should be.\n\n\n        return childPropsSelector(store.getState(), wrapperProps);\n      }, [store, previousStateUpdateResult, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n      // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n      // just useEffect instead to avoid the warning, since neither will run anyway.\n\n      useIsomorphicLayoutEffect(function () {\n        // We want to capture the wrapper props and child props we used for later comparisons\n        lastWrapperProps.current = wrapperProps;\n        lastChildProps.current = actualChildProps;\n        renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n        if (childPropsFromStoreUpdate.current) {\n          childPropsFromStoreUpdate.current = null;\n          notifyNestedSubs();\n        }\n      }); // Our re-subscribe logic only runs when the store/subscription setup changes\n\n      useIsomorphicLayoutEffect(function () {\n        // If we're not subscribed to the store, nothing to do here\n        if (!shouldHandleStateChanges) return; // Capture values for checking if and when this component unmounts\n\n        var didUnsubscribe = false;\n        var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n        var checkForUpdates = function checkForUpdates() {\n          if (didUnsubscribe) {\n            // Don't run stale listeners.\n            // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n            return;\n          }\n\n          var latestStoreState = store.getState();\n          var newChildProps, error;\n\n          try {\n            // Actually run the selector with the most recent store state and wrapper props\n            // to determine what the child props should be\n            newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n          } catch (e) {\n            error = e;\n            lastThrownError = e;\n          }\n\n          if (!error) {\n            lastThrownError = null;\n          } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n          if (newChildProps === lastChildProps.current) {\n            if (!renderIsScheduled.current) {\n              notifyNestedSubs();\n            }\n          } else {\n            // Save references to the new child props.  Note that we track the \"child props from store update\"\n            // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n            // been processed.  If this went into useState/useReducer, we couldn't clear out the value without\n            // forcing another re-render, which we don't want.\n            lastChildProps.current = newChildProps;\n            childPropsFromStoreUpdate.current = newChildProps;\n            renderIsScheduled.current = true; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render\n\n            forceComponentUpdateDispatch({\n              type: 'STORE_UPDATED',\n              payload: {\n                latestStoreState: latestStoreState,\n                error: error\n              }\n            });\n          }\n        }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n        subscription.onStateChange = checkForUpdates;\n        subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n        // changed since we began.\n\n        checkForUpdates();\n\n        var unsubscribeWrapper = function unsubscribeWrapper() {\n          didUnsubscribe = true;\n          subscription.tryUnsubscribe();\n\n          if (lastThrownError) {\n            // It's possible that we caught an error due to a bad mapState function, but the\n            // parent re-rendered without this component and we're about to unmount.\n            // This shouldn't happen as long as we do top-down subscriptions correctly, but\n            // if we ever do those wrong, this throw will surface the error in our tests.\n            // In that case, throw the error from here so it doesn't get lost.\n            throw lastThrownError;\n          }\n        };\n\n        return unsubscribeWrapper;\n      }, [store, subscription, childPropsSelector]); // Now that all that's done, we can finally try to actually render the child component.\n      // We memoize the elements for the rendered child component as an optimization.\n\n      var renderedWrappedComponent = useMemo(function () {\n        return React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n          ref: forwardedRef\n        }));\n      }, [forwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n      var renderedChild = useMemo(function () {\n        if (shouldHandleStateChanges) {\n          // If this component is subscribed to store updates, we need to pass its own\n          // subscription instance down to our descendants. That means rendering the same\n          // Context instance, and putting a different value into the context.\n          return React.createElement(ContextToUse.Provider, {\n            value: overriddenContextValue\n          }, renderedWrappedComponent);\n        }\n\n        return renderedWrappedComponent;\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n      return renderedChild;\n    } // If we're in \"pure\" mode, ensure our wrapper component only re-renders when incoming props have changed.\n\n\n    var Connect = pure ? React.memo(ConnectFunction) : ConnectFunction;\n    Connect.WrappedComponent = WrappedComponent;\n    Connect.displayName = displayName;\n\n    if (forwardRef) {\n      var forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n        return React.createElement(Connect, _extends({}, props, {\n          forwardedRef: ref\n        }));\n      });\n      forwarded.displayName = displayName;\n      forwarded.WrappedComponent = WrappedComponent;\n      return hoistStatics(forwarded, WrappedComponent);\n    }\n\n    return hoistStatics(Connect, WrappedComponent);\n  };\n}","var hasOwn = Object.prototype.hasOwnProperty;\n\nfunction is(x, y) {\n  if (x === y) {\n    return x !== 0 || y !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\n\nexport default function shallowEqual(objA, objB) {\n  if (is(objA, objB)) return true;\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return false;\n\n  for (var i = 0; i < keysA.length; i++) {\n    if (!hasOwn.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant(getConstant) {\n  return function initConstantSelector(dispatch, options) {\n    var constant = getConstant(dispatch, options);\n\n    function constantSelector() {\n      return constant;\n    }\n\n    constantSelector.dependsOnOwnProps = false;\n    return constantSelector;\n  };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n\nexport function getDependsOnOwnProps(mapToProps) {\n  return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n//  * Detects whether the mapToProps function being called depends on props, which\n//    is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n//  * On first call, handles mapToProps if returns another function, and treats that\n//    new function as the true mapToProps for subsequent calls.\n//\n//  * On first call, verifies the first result is a plain object, in order to warn\n//    the developer that their mapToProps function is not returning a valid result.\n//\n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n  return function initProxySelector(dispatch, _ref) {\n    var displayName = _ref.displayName;\n\n    var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n      return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n    }; // allow detectFactoryAndVerify to get ownProps\n\n\n    proxy.dependsOnOwnProps = true;\n\n    proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n      proxy.mapToProps = mapToProps;\n      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n      var props = proxy(stateOrDispatch, ownProps);\n\n      if (typeof props === 'function') {\n        proxy.mapToProps = props;\n        proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n        props = proxy(stateOrDispatch, ownProps);\n      }\n\n      if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n      return props;\n    };\n\n    return proxy;\n  };\n}","import { bindActionCreators } from 'redux';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n  return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n  return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n    return {\n      dispatch: dispatch\n    };\n  }) : undefined;\n}\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n  return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n    return bindActionCreators(mapDispatchToProps, dispatch);\n  }) : undefined;\n}\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n  return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n  return !mapStateToProps ? wrapMapToPropsConstant(function () {\n    return {};\n  }) : undefined;\n}\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n  return _extends({}, ownProps, stateProps, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n  return function initMergePropsProxy(dispatch, _ref) {\n    var displayName = _ref.displayName,\n        pure = _ref.pure,\n        areMergedPropsEqual = _ref.areMergedPropsEqual;\n    var hasRunOnce = false;\n    var mergedProps;\n    return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n      var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n      if (hasRunOnce) {\n        if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n      } else {\n        hasRunOnce = true;\n        mergedProps = nextMergedProps;\n        if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n      }\n\n      return mergedProps;\n    };\n  };\n}\nexport function whenMergePropsIsFunction(mergeProps) {\n  return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\nexport function whenMergePropsIsOmitted(mergeProps) {\n  return !mergeProps ? function () {\n    return defaultMergeProps;\n  } : undefined;\n}\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport verifySubselectors from './verifySubselectors';\nexport function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n  return function impureFinalPropsSelector(state, ownProps) {\n    return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n  };\n}\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n  var areStatesEqual = _ref.areStatesEqual,\n      areOwnPropsEqual = _ref.areOwnPropsEqual,\n      areStatePropsEqual = _ref.areStatePropsEqual;\n  var hasRunAtLeastOnce = false;\n  var state;\n  var ownProps;\n  var stateProps;\n  var dispatchProps;\n  var mergedProps;\n\n  function handleFirstCall(firstState, firstOwnProps) {\n    state = firstState;\n    ownProps = firstOwnProps;\n    stateProps = mapStateToProps(state, ownProps);\n    dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    hasRunAtLeastOnce = true;\n    return mergedProps;\n  }\n\n  function handleNewPropsAndNewState() {\n    stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewProps() {\n    if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewState() {\n    var nextStateProps = mapStateToProps(state, ownProps);\n    var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n    stateProps = nextStateProps;\n    if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleSubsequentCalls(nextState, nextOwnProps) {\n    var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n    var stateChanged = !areStatesEqual(nextState, state);\n    state = nextState;\n    ownProps = nextOwnProps;\n    if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n    if (propsChanged) return handleNewProps();\n    if (stateChanged) return handleNewState();\n    return mergedProps;\n  }\n\n  return function pureFinalPropsSelector(nextState, nextOwnProps) {\n    return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n  };\n} // TODO: Add more comments\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nexport default function finalPropsSelectorFactory(dispatch, _ref2) {\n  var initMapStateToProps = _ref2.initMapStateToProps,\n      initMapDispatchToProps = _ref2.initMapDispatchToProps,\n      initMergeProps = _ref2.initMergeProps,\n      options = _objectWithoutPropertiesLoose(_ref2, [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"]);\n\n  var mapStateToProps = initMapStateToProps(dispatch, options);\n  var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n  var mergeProps = initMergeProps(dispatch, options);\n\n  if (process.env.NODE_ENV !== 'production') {\n    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n  }\n\n  var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n  return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport connectAdvanced from '../components/connectAdvanced';\nimport shallowEqual from '../utils/shallowEqual';\nimport defaultMapDispatchToPropsFactories from './mapDispatchToProps';\nimport defaultMapStateToPropsFactories from './mapStateToProps';\nimport defaultMergePropsFactories from './mergeProps';\nimport defaultSelectorFactory from './selectorFactory';\n/*\n  connect is a facade over connectAdvanced. It turns its args into a compatible\n  selectorFactory, which has the signature:\n\n    (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\n  \n  connect passes its args to connectAdvanced as options, which will in turn pass them to\n  selectorFactory each time a Connect component instance is instantiated or hot reloaded.\n\n  selectorFactory returns a final props selector from its mapStateToProps,\n  mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\n  mergePropsFactories, and pure args.\n\n  The resulting final props selector is called by the Connect component instance whenever\n  it receives new props or store state.\n */\n\nfunction match(arg, factories, name) {\n  for (var i = factories.length - 1; i >= 0; i--) {\n    var result = factories[i](arg);\n    if (result) return result;\n  }\n\n  return function (dispatch, options) {\n    throw new Error(\"Invalid value of type \" + typeof arg + \" for \" + name + \" argument when connecting component \" + options.wrappedComponentName + \".\");\n  };\n}\n\nfunction strictEqual(a, b) {\n  return a === b;\n} // createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\n\n\nexport function createConnect(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      _ref$connectHOC = _ref.connectHOC,\n      connectHOC = _ref$connectHOC === void 0 ? connectAdvanced : _ref$connectHOC,\n      _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n      mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n      _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n      mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n      _ref$mergePropsFactor = _ref.mergePropsFactories,\n      mergePropsFactories = _ref$mergePropsFactor === void 0 ? defaultMergePropsFactories : _ref$mergePropsFactor,\n      _ref$selectorFactory = _ref.selectorFactory,\n      selectorFactory = _ref$selectorFactory === void 0 ? defaultSelectorFactory : _ref$selectorFactory;\n\n  return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {\n    if (_ref2 === void 0) {\n      _ref2 = {};\n    }\n\n    var _ref3 = _ref2,\n        _ref3$pure = _ref3.pure,\n        pure = _ref3$pure === void 0 ? true : _ref3$pure,\n        _ref3$areStatesEqual = _ref3.areStatesEqual,\n        areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,\n        _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,\n        areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? shallowEqual : _ref3$areOwnPropsEqua,\n        _ref3$areStatePropsEq = _ref3.areStatePropsEqual,\n        areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? shallowEqual : _ref3$areStatePropsEq,\n        _ref3$areMergedPropsE = _ref3.areMergedPropsEqual,\n        areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? shallowEqual : _ref3$areMergedPropsE,\n        extraOptions = _objectWithoutPropertiesLoose(_ref3, [\"pure\", \"areStatesEqual\", \"areOwnPropsEqual\", \"areStatePropsEqual\", \"areMergedPropsEqual\"]);\n\n    var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n    var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n    var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n    return connectHOC(selectorFactory, _extends({\n      // used in error messages\n      methodName: 'connect',\n      // used to compute Connect's displayName from the wrapped component's displayName.\n      getDisplayName: function getDisplayName(name) {\n        return \"Connect(\" + name + \")\";\n      },\n      // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n      shouldHandleStateChanges: Boolean(mapStateToProps),\n      // passed through to selectorFactory\n      initMapStateToProps: initMapStateToProps,\n      initMapDispatchToProps: initMapDispatchToProps,\n      initMergeProps: initMergeProps,\n      pure: pure,\n      areStatesEqual: areStatesEqual,\n      areOwnPropsEqual: areOwnPropsEqual,\n      areStatePropsEqual: areStatePropsEqual,\n      areMergedPropsEqual: areMergedPropsEqual\n    }, extraOptions));\n  };\n}\nexport default createConnect();","import { useReducer, useRef, useEffect, useMemo, useLayoutEffect } from 'react';\nimport invariant from 'invariant';\nimport { useReduxContext } from './useReduxContext';\nimport Subscription from '../utils/Subscription'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nvar refEquality = function refEquality(a, b) {\n  return a === b;\n};\n/**\n * A hook to access the redux store's state. This hook takes a selector function\n * as an argument. The selector is called with the store state.\n *\n * This hook takes an optional equality comparison function as the second parameter\n * that allows you to customize the way the selected state is compared to determine\n * whether the component needs to be re-rendered.\n *\n * @param {Function} selector the selector function\n * @param {Function=} equalityFn the function that will be used to determine equality\n *\n * @returns {any} the selected state\n *\n * @example\n *\n * import React from 'react'\n * import { useSelector } from 'react-redux'\n *\n * export const CounterComponent = () => {\n *   const counter = useSelector(state => state.counter)\n *   return <div>{counter}</div>\n * }\n */\n\n\nexport function useSelector(selector, equalityFn) {\n  if (equalityFn === void 0) {\n    equalityFn = refEquality;\n  }\n\n  invariant(selector, \"You must pass a selector to useSelectors\");\n\n  var _useReduxContext = useReduxContext(),\n      store = _useReduxContext.store,\n      contextSub = _useReduxContext.subscription;\n\n  var _useReducer = useReducer(function (s) {\n    return s + 1;\n  }, 0),\n      forceRender = _useReducer[1];\n\n  var subscription = useMemo(function () {\n    return new Subscription(store, contextSub);\n  }, [store, contextSub]);\n  var latestSubscriptionCallbackError = useRef();\n  var latestSelector = useRef();\n  var latestSelectedState = useRef();\n  var selectedState;\n\n  try {\n    if (selector !== latestSelector.current || latestSubscriptionCallbackError.current) {\n      selectedState = selector(store.getState());\n    } else {\n      selectedState = latestSelectedState.current;\n    }\n  } catch (err) {\n    var errorMessage = \"An error occured while selecting the store state: \" + err.message + \".\";\n\n    if (latestSubscriptionCallbackError.current) {\n      errorMessage += \"\\nThe error may be correlated with this previous error:\\n\" + latestSubscriptionCallbackError.current.stack + \"\\n\\nOriginal stack trace:\";\n    }\n\n    throw new Error(errorMessage);\n  }\n\n  useIsomorphicLayoutEffect(function () {\n    latestSelector.current = selector;\n    latestSelectedState.current = selectedState;\n    latestSubscriptionCallbackError.current = undefined;\n  });\n  useIsomorphicLayoutEffect(function () {\n    function checkForUpdates() {\n      try {\n        var newSelectedState = latestSelector.current(store.getState());\n\n        if (equalityFn(newSelectedState, latestSelectedState.current)) {\n          return;\n        }\n\n        latestSelectedState.current = newSelectedState;\n      } catch (err) {\n        // we ignore all errors here, since when the component\n        // is re-rendered, the selectors are called again, and\n        // will throw again, if neither props nor store state\n        // changed\n        latestSubscriptionCallbackError.current = err;\n      }\n\n      forceRender({});\n    }\n\n    subscription.onStateChange = checkForUpdates;\n    subscription.trySubscribe();\n    checkForUpdates();\n    return function () {\n      return subscription.tryUnsubscribe();\n    };\n  }, [store, subscription]);\n  return selectedState;\n}","import Provider from './components/Provider';\nimport connectAdvanced from './components/connectAdvanced';\nimport { ReactReduxContext } from './components/Context';\nimport connect from './connect/connect';\nimport { useDispatch } from './hooks/useDispatch';\nimport { useSelector } from './hooks/useSelector';\nimport { useStore } from './hooks/useStore';\nimport { setBatch } from './utils/batch';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport shallowEqual from './utils/shallowEqual';\nsetBatch(batch);\nexport { Provider, connectAdvanced, ReactReduxContext, connect, batch, useDispatch, useSelector, useStore, shallowEqual };","// @flow\n\nimport {\n    JOIN_GAME,\n    TAKE_OVER,\n    START_GAME,\n    STOP_GAME,\n    GIVE_CARDS,\n    NEW_STATE_RECEIVED, CHECK, RAISE, FOLD, CALL, SEND_GAME_STATE, SHOW_CARDS, THROW_AWAY_CARDS, COLLECT\n} from './actionTypes';\n\nexport function joinGame(nick: string) {\n    return {\n        type: JOIN_GAME,\n        nick\n    };\n}\n\nexport function takeOver(nick: string) {\n    return {\n        type: TAKE_OVER,\n        nick\n    };\n}\n\nexport function startGame() {\n    return {\n        type: START_GAME\n    };\n}\n\n\nexport function stopGame() {\n    return {\n        type: STOP_GAME\n    };\n}\n\nexport function giveCards() {\n    return {\n        type: GIVE_CARDS\n    };\n}\n\nexport function check() {\n    return {\n        type: CHECK\n    };\n}\n\nexport function call() {\n    return {\n        type: CALL\n    };\n}\nexport function raise(amount: number) {\n    return {\n        type: RAISE,\n        amount\n    };\n}\n\nexport function fold() {\n    return {\n        type: FOLD\n    };\n}\n\nexport function showCards() {\n    return {\n        type: SHOW_CARDS\n    };\n}\n\nexport function throwAwayCards(nick: string) {\n    return {\n        type: THROW_AWAY_CARDS,\n        nick\n    };\n}\n\nexport function collect(nick: string) {\n    return {\n        type: COLLECT,\n        nick\n    };\n}\n\nexport function newStateReceived(common: Object) {\n    return {\n        type: NEW_STATE_RECEIVED,\n        common\n    };\n}\n\nexport function sendGameState() {\n    return {\n        type: SEND_GAME_STATE\n    };\n}\n","// @flow\n\n/**\n * The standard time when auto-disappearing notifications should disappear.\n */\nexport const NOTIFICATION_TIMEOUT = 2500;\n\n/**\n * The set of possible notification types.\n *\n * @enum {string}\n */\nexport const NOTIFICATION_TYPE = {\n    ERROR: 'error',\n    INFO: 'info',\n    NORMAL: 'normal',\n    SUCCESS: 'success',\n    WARNING: 'warning'\n};\n\n/**\n * A mapping of notification type to priority of display.\n *\n * @enum {number}\n */\nexport const NOTIFICATION_TYPE_PRIORITIES = {\n    [NOTIFICATION_TYPE.ERROR]: 5,\n    [NOTIFICATION_TYPE.INFO]: 3,\n    [NOTIFICATION_TYPE.NORMAL]: 3,\n    [NOTIFICATION_TYPE.SUCCESS]: 3,\n    [NOTIFICATION_TYPE.WARNING]: 4\n};\n","/**\n * The type of (redux) action which sets whether the filmstrip is enabled.\n *\n * {\n *     type: SET_FILMSTRIP_ENABLED,\n *     enabled: boolean\n * }\n */\nexport const SET_FILMSTRIP_ENABLED = 'SET_FILMSTRIP_ENABLED';\n\n/**\n * The type of (redux) action which sets whether or not the filmstrip is being\n * hovered with the cursor.\n *\n * {\n *     type: SET_FILMSTRIP_HOVERED,\n *     hovered: boolean\n * }\n */\nexport const SET_FILMSTRIP_HOVERED = 'SET_FILMSTRIP_HOVERED';\n\n/**\n * The type of (redux) action which sets whether the filmstrip is visible.\n *\n * {\n *     type: SET_FILMSTRIP_VISIBLE,\n *     visible: boolean\n * }\n */\nexport const SET_FILMSTRIP_VISIBLE = 'SET_FILMSTRIP_VISIBLE';\n\n/**\n * The type of (redux) action which sets the dimensions of the tile view grid.\n *\n * {\n *     type: SET_TILE_VIEW_DIMENSIONS,\n *     dimensions: Object\n * }\n */\nexport const SET_TILE_VIEW_DIMENSIONS = 'SET_TILE_VIEW_DIMENSIONS';\n\n/**\n * The type of (redux) action which sets the dimensions of the thumbnails in horizontal view.\n *\n * {\n *     type: SET_HORIZONTAL_VIEW_DIMENSIONS,\n *     dimensions: Object\n * }\n */\nexport const SET_HORIZONTAL_VIEW_DIMENSIONS = 'SET_HORIZONTAL_VIEW_DIMENSIONS';\n","// @flow\n\nimport { IconPhone } from '../icons';\n\n/**\n * The relative path to the default/stock avatar (image) file used on both\n * Web/React and mobile/React Native (for the purposes of consistency).\n *\n * XXX (1) Web/React utilizes relativity on the Jitsi Meet deployment.\n * (2) Mobile/React Native utilizes relativity on the local file system at build\n * time. Unfortunately, the packager of React Native cannot deal with the\n * {@code const} early enough for {@code require} to succeed at runtime.\n * Anyway, be sure to synchronize the relative path on Web and mobile for the\n * purposes of consistency.\n *\n * @type {string}\n */\nexport const DEFAULT_AVATAR_RELATIVE_PATH = 'images/avatar.png';\n\n/**\n * Icon URL for jigasi participants.\n *\n * @type {string}\n */\nexport const JIGASI_PARTICIPANT_ICON = IconPhone;\n\n/**\n * The local participant might not have real ID until she joins a conference,\n * so use 'local' as her default ID.\n *\n * @type {string}\n */\nexport const LOCAL_PARTICIPANT_DEFAULT_ID = 'local';\n\n/**\n * Max length of the display names.\n *\n * @type {string}\n */\nexport const MAX_DISPLAY_NAME_LENGTH = 50;\n\n/**\n * The identifier of the sound to be played when new remote participant joins\n * the room.\n * @type {string}\n */\nexport const PARTICIPANT_JOINED_SOUND_ID = 'PARTICIPANT_JOINED_SOUND';\n\n/**\n * The identifier of the sound to be played when remote participant leaves\n * the room.\n * @type {string}\n */\nexport const PARTICIPANT_LEFT_SOUND_ID = 'PARTICIPANT_LEFT_SOUND';\n\n/**\n * The set of possible XMPP MUC roles for conference participants.\n *\n * @enum {string}\n */\nexport const PARTICIPANT_ROLE = {\n    MODERATOR: 'moderator',\n    NONE: 'none',\n    PARTICIPANT: 'participant'\n};\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/storage');\n","// @flow\n\nimport md5 from 'js-md5';\nimport { jitsiLocalStorage } from 'js-utils';\n\nimport logger from './logger';\n\ndeclare var __DEV__;\n\n/**\n * The name of the {@code localStorage} store where the app persists its values.\n */\nconst PERSISTED_STATE_NAME = 'jitsi-state';\n\n/**\n * Mixed type of the element (subtree) config. If it's a {@code boolean} (and is\n * {@code true}), we persist the entire subtree. If it's an {@code Object}, we\n * perist a filtered subtree based on the properties of the config object.\n */\ndeclare type ElementConfig = boolean | Object;\n\n/**\n * The type of the name-config pairs stored in {@code PersistenceRegistry}.\n */\ndeclare type PersistencyConfigMap = { [name: string]: ElementConfig };\n\n/**\n * A registry to allow features to register their redux store subtree to be\n * persisted and also handles the persistency calls too.\n */\nclass PersistenceRegistry {\n    _checksum: string;\n    _defaultStates: { [name: string ]: ?Object} = {};\n    _elements: PersistencyConfigMap = {};\n\n    /**\n     * Returns the persisted redux state. Takes the {@link #_elements} into\n     * account as we may have persisted something in the past that we don't want\n     * to retreive anymore. The next {@link #persistState} will remove such\n     * values.\n     *\n     * @returns {Object}\n     */\n    getPersistedState() {\n        let filteredPersistedState = {};\n\n        // localStorage key per feature\n        for (const subtreeName of Object.keys(this._elements)) {\n            // Assumes that the persisted value is stored under the same key as\n            // the feature's redux state name.\n            // TODO We'll need to introduce functions later that can control the\n            // persist key's name. Similar to control serialization and\n            // deserialization. But that should be a straightforward change.\n            const persistedSubtree\n                = this._getPersistedSubtree(\n                    subtreeName,\n                    this._elements[subtreeName],\n                    this._defaultStates[subtreeName]);\n\n            if (persistedSubtree !== undefined) {\n                filteredPersistedState[subtreeName] = persistedSubtree;\n            }\n        }\n\n        // legacy\n        if (Object.keys(filteredPersistedState).length === 0) {\n            let persistedState = jitsiLocalStorage.getItem(PERSISTED_STATE_NAME);\n\n            if (persistedState) {\n                try {\n                    persistedState = JSON.parse(persistedState);\n                } catch (error) {\n                    logger.error(\n                        'Error parsing persisted state',\n                        persistedState,\n                        error);\n                    persistedState = {};\n                }\n\n                filteredPersistedState = this._getFilteredState(persistedState);\n\n                // Store into the new format and delete the old format so that\n                // it's not used again.\n                this.persistState(filteredPersistedState);\n                jitsiLocalStorage.removeItem(PERSISTED_STATE_NAME);\n            }\n        }\n\n        // Initialize the checksum.\n        this._checksum = this._calculateChecksum(filteredPersistedState);\n\n        if (typeof __DEV__ !== 'undefined' && __DEV__) {\n            logger.info('redux state rehydrated as', filteredPersistedState);\n        }\n\n        return filteredPersistedState;\n    }\n\n    /**\n     * Initiates a persist operation, but its execution will depend on the\n     * current checksums (checks changes).\n     *\n     * @param {Object} state - The redux state.\n     * @returns {void}\n     */\n    persistState(state: Object) {\n        const filteredState = this._getFilteredState(state);\n        const checksum = this._calculateChecksum(filteredState);\n\n        if (checksum !== this._checksum) {\n            for (const subtreeName of Object.keys(filteredState)) {\n                try {\n                    jitsiLocalStorage.setItem(subtreeName, JSON.stringify(filteredState[subtreeName]));\n                } catch (error) {\n                    logger.error('Error persisting redux subtree', subtreeName, error);\n                }\n            }\n            logger.info(`redux state persisted. ${this._checksum} -> ${checksum}`);\n            this._checksum = checksum;\n        }\n    }\n\n    /**\n     * Registers a new subtree config to be used for the persistency.\n     *\n     * @param {string} name - The name of the subtree the config belongs to.\n     * @param {ElementConfig} config - The config {@code Object}, or\n     * {@code boolean} if the entire subtree needs to be persisted.\n     * @param {Object} defaultState - The default state of the component. If\n     * it's provided, the rehydrated state will be merged with it before it gets\n     * pushed into Redux.\n     * @returns {void}\n     */\n    register(\n            name: string,\n            config?: ElementConfig = true,\n            defaultState?: Object) {\n        this._elements[name] = config;\n        this._defaultStates[name] = defaultState;\n    }\n\n    /**\n     * Calculates the checksum of a specific state.\n     *\n     * @param {Object} state - The redux state to calculate the checksum of.\n     * @private\n     * @returns {string} The checksum of the specified {@code state}.\n     */\n    _calculateChecksum(state: Object) {\n        try {\n            return md5.hex(JSON.stringify(state) || '');\n        } catch (error) {\n            logger.error('Error calculating checksum for state', error);\n\n            return '';\n        }\n    }\n\n    /**\n     * Prepares a filtered state from the actual or the persisted redux state,\n     * based on this registry.\n     *\n     * @param {Object} state - The actual or persisted redux state.\n     * @private\n     * @returns {Object}\n     */\n    _getFilteredState(state: Object) {\n        const filteredState = {};\n\n        for (const name of Object.keys(this._elements)) {\n            if (state[name]) {\n                filteredState[name]\n                    = this._getFilteredSubtree(\n                        state[name],\n                        this._elements[name]);\n            }\n        }\n\n        return filteredState;\n    }\n\n    /**\n     * Prepares a filtered subtree based on the config for persisting or for\n     * retrieval.\n     *\n     * @param {Object} subtree - The redux state subtree.\n     * @param {ElementConfig} subtreeConfig - The related config.\n     * @private\n     * @returns {Object}\n     */\n    _getFilteredSubtree(subtree, subtreeConfig) {\n        let filteredSubtree;\n\n        if (typeof subtreeConfig === 'object') {\n            // Only a filtered subtree gets persisted as specified by\n            // subtreeConfig.\n            filteredSubtree = {};\n            for (const persistedKey of Object.keys(subtree)) {\n                if (subtreeConfig[persistedKey]) {\n                    filteredSubtree[persistedKey] = subtree[persistedKey];\n                }\n            }\n        } else if (subtreeConfig) {\n            // Persist the entire subtree.\n            filteredSubtree = subtree;\n        }\n\n        return filteredSubtree;\n    }\n\n    /**\n     * Retreives a persisted subtree from the storage.\n     *\n     * @param {string} subtreeName - The name of the subtree.\n     * @param {Object} subtreeConfig - The config of the subtree from\n     * {@link #_elements}.\n     * @param {Object} subtreeDefaults - The defaults of the persisted subtree.\n     * @private\n     * @returns {Object}\n     */\n    _getPersistedSubtree(subtreeName, subtreeConfig, subtreeDefaults) {\n        let persistedSubtree = jitsiLocalStorage.getItem(subtreeName);\n\n        if (persistedSubtree) {\n            try {\n                persistedSubtree = JSON.parse(persistedSubtree);\n\n                const filteredSubtree\n                    = this._getFilteredSubtree(persistedSubtree, subtreeConfig);\n\n                if (filteredSubtree !== undefined) {\n                    return this._mergeDefaults(\n                        filteredSubtree, subtreeDefaults);\n                }\n            } catch (error) {\n                logger.error(\n                    'Error parsing persisted subtree',\n                    subtreeName,\n                    persistedSubtree,\n                    error);\n            }\n        }\n\n        return undefined;\n    }\n\n    /**\n     * Merges the persisted subtree with its defaults before rehydrating the\n     * values.\n     *\n     * @private\n     * @param {Object} subtree - The Redux subtree.\n     * @param {?Object} defaults - The defaults, if any.\n     * @returns {Object}\n     */\n    _mergeDefaults(subtree: Object, defaults: ?Object) {\n        if (!defaults) {\n            return subtree;\n        }\n\n        // If the subtree is an array, we don't need to merge it with the\n        // defaults, because if it has a value, it will overwrite it, and if\n        // it's undefined, it won't be even returned, and Redux will natively\n        // use the default values instead.\n        if (!Array.isArray(subtree)) {\n            return {\n                ...defaults,\n                ...subtree\n            };\n        }\n    }\n}\n\nexport default new PersistenceRegistry();\n","// @flow\n\nimport _ from 'lodash';\n\nimport { MiddlewareRegistry, toState } from '../redux';\n\nimport PersistenceRegistry from './PersistenceRegistry';\n\n/**\n * The delay in milliseconds that passes between the last state change and the\n * persisting of that state in the storage.\n */\nconst PERSIST_STATE_DELAY = 2000;\n\n/**\n * A throttled function to avoid repetitive state persisting.\n */\nconst throttledPersistState\n    = _.throttle(\n        state => PersistenceRegistry.persistState(state),\n        PERSIST_STATE_DELAY);\n\n// Web only code.\n// We need the <tt>if</tt> beacuse it appears that on mobile the polyfill is not\n// executed yet.\nif (typeof window.addEventListener === 'function') {\n    window.addEventListener('unload', () => {\n        throttledPersistState.flush();\n    });\n}\n\n/**\n * A master MiddleWare to selectively persist state. Please use the\n * {@link persisterconfig.json} to set which subtrees of the redux state should\n * be persisted.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const oldState = toState(store);\n    const result = next(action);\n    const newState = toState(store);\n\n    oldState === newState || throttledPersistState(newState);\n\n    return result;\n});\n","export { default as PersistenceRegistry } from './PersistenceRegistry';\n\nimport './middleware';\n","/* global $ */\n\n/**\n * Created by hristo on 12/22/14.\n */\nconst UIUtil = {\n\n    /**\n     * Returns the available video width.\n     */\n    getAvailableVideoWidth() {\n        return window.innerWidth;\n    },\n\n    /**\n     * Escapes the given text.\n     */\n    escapeHtml(unsafeText) {\n        return $('<div/>').text(unsafeText)\n            .html();\n    },\n\n    /**\n     * Inserts given child element as the first one into the container.\n     * @param container the container to which new child element will be added\n     * @param newChild the new element that will be inserted into the container\n     */\n    prependChild(container, newChild) {\n        const firstChild = container.childNodes[0];\n        let result;\n\n        if (firstChild) {\n            result = container.insertBefore(newChild, firstChild);\n        } else {\n            result = container.appendChild(newChild);\n        }\n\n        return result;\n    },\n\n    /**\n     * Redirects to a given URL.\n     *\n     * @param {string} url - The redirect URL.\n     * NOTE: Currently used to redirect to 3rd party location for\n     * authentication. In most cases redirectWithStoredParams action must be\n     * used instead of this method in order to preserve curent URL params.\n     */\n    redirect(url) {\n        window.location.href = url;\n    },\n\n    /**\n     * Indicates if we're currently in full screen mode.\n     *\n     * @return {boolean} {true} to indicate that we're currently in full screen\n     * mode, {false} otherwise\n     */\n    isFullScreen() {\n        return Boolean(document.fullscreenElement\n            || document.mozFullScreenElement\n            || document.webkitFullscreenElement\n            || document.msFullscreenElement);\n    },\n\n    /**\n     * Checks if the given DOM element is currently visible. The offsetParent\n     * will be null if the \"display\" property of the element or any of its\n     * parent containers is set to \"none\". This method will NOT check the\n     * visibility property though.\n     * @param {el} The DOM element we'd like to check for visibility\n     */\n    isVisible(el) {\n        return el.offsetParent !== null;\n    }\n};\n\nexport default UIUtil;\n","// @flow\n\nimport {\n    ADD_MESSAGE,\n    CLEAR_MESSAGES,\n    SEND_MESSAGE,\n    SET_PRIVATE_MESSAGE_RECIPIENT,\n    TOGGLE_CHAT\n} from './actionTypes';\n\n/**\n * Adds a chat message to the collection of messages.\n *\n * @param {Object} messageDetails - The chat message to save.\n * @param {string} messageDetails.displayName - The displayName of the\n * participant that authored the message.\n * @param {boolean} messageDetails.hasRead - Whether or not to immediately mark\n * the message as read.\n * @param {string} messageDetails.message - The received message to display.\n * @param {string} messageDetails.messageType - The kind of message, such as\n * \"error\" or \"local\" or \"remote\".\n * @param {string} messageDetails.timestamp - A timestamp to display for when\n * the message was received.\n * @returns {{\n *     type: ADD_MESSAGE,\n *     displayName: string,\n *     hasRead: boolean,\n *     message: string,\n *     messageType: string,\n *     timestamp: string,\n * }}\n */\nexport function addMessage(messageDetails: Object) {\n    return {\n        type: ADD_MESSAGE,\n        ...messageDetails\n    };\n}\n\n/**\n * Clears the chat messages in Redux.\n *\n * @returns {{\n *     type: CLEAR_MESSAGES\n * }}\n */\nexport function clearMessages() {\n    return {\n        type: CLEAR_MESSAGES\n    };\n}\n\n/**\n * Sends a chat message to everyone in the conference.\n *\n * @param {string} message - The chat message to send out.\n * @param {boolean} ignorePrivacy - True if the privacy notification should be ignored.\n * @returns {{\n *     type: SEND_MESSAGE,\n *     ignorePrivacy: boolean,\n *     message: string\n * }}\n */\nexport function sendMessage(message: string, ignorePrivacy: boolean = false) {\n    return {\n        type: SEND_MESSAGE,\n        ignorePrivacy,\n        message\n    };\n}\n\n/**\n * Initiates the sending of a private message to the supplied participant.\n *\n * @param {Participant} participant - The participant to set the recipient to.\n * @returns {{\n *     participant: Participant,\n *     type: SET_PRIVATE_MESSAGE_RECIPIENT\n * }}\n */\nexport function setPrivateMessageRecipient(participant: Object) {\n    return {\n        participant,\n        type: SET_PRIVATE_MESSAGE_RECIPIENT\n    };\n}\n\n/**\n * Toggles display of the chat side panel.\n *\n * @returns {{\n *     type: TOGGLE_CHAT\n * }}\n */\nexport function toggleChat() {\n    return {\n        type: TOGGLE_CHAT\n    };\n}\n","/**\n * The type of (redux) action which sets the visibility of the audio settings popup.\n */\nexport const SET_AUDIO_SETTINGS_VISIBILITY = 'SET_AUDIO_SETTINGS_VISIBILITY';\n\n/**\n * The type of (redux) action which sets the visibility of the video settings popup.\n */\nexport const SET_VIDEO_SETTINGS_VISIBILITY = 'SET_VIDEO_SETTINGS_VISIBILITY';\n","export const SETTINGS_TABS = {\n    CALENDAR: 'calendar_tab',\n    DEVICES: 'devices_tab',\n    MORE: 'more_tab',\n    PROFILE: 'profile_tab'\n};\n\n/**\n * View ID for the Settings modal.\n */\nexport const SETTINGS_VIEW_ID = 'SETTINGS_VIEW_ID';\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../../analytics';\nimport { translate } from '../../../base/i18n';\nimport { IconSettings } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport { AbstractButton } from '../../../base/toolbox';\nimport type { AbstractButtonProps } from '../../../base/toolbox';\nimport { openDeviceSelectionPopup } from '../../../device-selection';\n\nimport { openSettingsDialog } from '../../actions';\nimport { SETTINGS_TABS } from '../../constants';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link SettingsButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether we are in filmstrip only mode or not.\n     */\n    _filmstripOnly: boolean,\n\n    /**\n     * The default tab at which the settings dialog will be opened.\n     */\n    defaultTab: string,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\n/**\n * An abstract implementation of a button for accessing settings.\n */\nclass SettingsButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.Settings';\n    icon = IconSettings;\n    label = 'toolbar.Settings';\n    tooltip = 'toolbar.Settings';\n\n    /**\n     * Handles clicking / pressing the button, and opens the appropriate dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const {\n            _filmstripOnly,\n            defaultTab = SETTINGS_TABS.DEVICES,\n            dispatch } = this.props;\n\n        sendAnalytics(createToolbarEvent('settings'));\n        if (_filmstripOnly) {\n            dispatch(openDeviceSelectionPopup());\n        } else {\n            dispatch(openSettingsDialog(defaultTab));\n        }\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code SettingsButton} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _filmstripOnly: boolean\n * }}\n */\nfunction _mapStateToProps(state): Object { // eslint-disable-line no-unused-vars\n    // XXX: We are not currently using state here, but in the future, when\n    // interfaceConfig is part of redux we will.\n\n    return {\n        _filmstripOnly: Boolean(interfaceConfig.filmStripOnly)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(SettingsButton));\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/settings');\n","// @flow\n\nimport Button from '@atlaskit/button';\nimport Spinner from '@atlaskit/spinner';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport {\n    CALENDAR_TYPE,\n    MicrosoftSignInButton,\n    clearCalendarIntegration,\n    bootstrapCalendarIntegration,\n    isCalendarEnabled,\n    signIn\n} from '../../../calendar-sync';\nimport { GoogleSignInButton } from '../../../google-api';\n\nimport logger from '../../logger';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link CalendarTab}.\n */\ntype Props = {\n\n    /**\n     * The name given to this Jitsi Application.\n     */\n    _appName: string,\n\n    /**\n     * Whether or not to display a button to sign in to Google.\n     */\n    _enableGoogleIntegration: boolean,\n\n    /**\n     * Whether or not to display a button to sign in to Microsoft.\n     */\n    _enableMicrosoftIntegration: boolean,\n\n    /**\n     * The current calendar integration in use, if any.\n     */\n    _isConnectedToCalendar: boolean,\n\n    /**\n     * The email address associated with the calendar integration in use.\n     */\n    _profileEmail: string,\n\n    /**\n     * Invoked to change the configured calendar integration.\n     */\n    dispatch: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link CalendarTab}.\n */\ntype State = {\n\n    /**\n     * Whether or not any third party APIs are being loaded.\n     */\n    loading: boolean\n};\n\n/**\n * React {@code Component} for modifying calendar integration.\n *\n * @extends Component\n */\nclass CalendarTab extends Component<Props, State> {\n    /**\n     * Initializes a new {@code CalendarTab} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            loading: true\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onClickDisconnect = this._onClickDisconnect.bind(this);\n        this._onClickGoogle = this._onClickGoogle.bind(this);\n        this._onClickMicrosoft = this._onClickMicrosoft.bind(this);\n    }\n\n    /**\n     * Loads third party APIs as needed and bootstraps the initial calendar\n     * state if not already set.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this.props.dispatch(bootstrapCalendarIntegration())\n            .catch(err => logger.error('CalendarTab bootstrap failed', err))\n            .then(() => this.setState({ loading: false }));\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        let view;\n\n        if (this.state.loading) {\n            view = this._renderLoadingState();\n        } else if (this.props._isConnectedToCalendar) {\n            view = this._renderSignOutState();\n        } else {\n            view = this._renderSignInState();\n        }\n\n        return (\n            <div className = 'calendar-tab'>\n                { view }\n            </div>\n        );\n    }\n\n    /**\n     * Dispatches the action to start the sign in flow for a given calendar\n     * integration type.\n     *\n     * @param {string} type - The calendar type to try integrating with.\n     * @private\n     * @returns {void}\n     */\n    _attemptSignIn(type) {\n        this.props.dispatch(signIn(type));\n    }\n\n    _onClickDisconnect: (Object) => void;\n\n    /**\n     * Dispatches an action to sign out of the currently connected third party\n     * used for calendar integration.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClickDisconnect() {\n        // We clear the integration state instead of actually signing out. This\n        // is for two primary reasons. Microsoft does not support a sign out and\n        // instead relies on clearing of local auth data. Google signout can\n        // also sign the user out of YouTube. So for now we've decided not to\n        // do an actual sign out.\n        this.props.dispatch(clearCalendarIntegration());\n    }\n\n    _onClickGoogle: () => void;\n\n    /**\n     * Starts the sign in flow for Google calendar integration.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClickGoogle() {\n        this._attemptSignIn(CALENDAR_TYPE.GOOGLE);\n    }\n\n    _onClickMicrosoft: () => void;\n\n    /**\n     * Starts the sign in flow for Microsoft calendar integration.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClickMicrosoft() {\n        this._attemptSignIn(CALENDAR_TYPE.MICROSOFT);\n    }\n\n    /**\n     * Render a React Element to indicate third party APIs are being loaded.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderLoadingState() {\n        return (\n            <Spinner\n                isCompleting = { false }\n                size = 'medium' />\n        );\n    }\n\n    /**\n     * Render a React Element to sign into a third party for calendar\n     * integration.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderSignInState() {\n        const {\n            _appName,\n            _enableGoogleIntegration,\n            _enableMicrosoftIntegration,\n            t\n        } = this.props;\n\n        return (\n            <div>\n                <p>\n                    { t('settings.calendar.about',\n                        { appName: _appName || '' }) }\n                </p>\n                { _enableGoogleIntegration\n                    && <div className = 'calendar-tab-sign-in'>\n                        <GoogleSignInButton\n                            onClick = { this._onClickGoogle }\n                            text = { t('liveStreaming.signIn') } />\n                    </div> }\n                { _enableMicrosoftIntegration\n                    && <div className = 'calendar-tab-sign-in'>\n                        <MicrosoftSignInButton\n                            onClick = { this._onClickMicrosoft }\n                            text = { t('settings.calendar.microsoftSignIn') } />\n                    </div> }\n            </div>\n        );\n    }\n\n    /**\n     * Render a React Element to sign out of the currently connected third\n     * party used for calendar integration.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderSignOutState() {\n        const { _profileEmail, t } = this.props;\n\n        return (\n            <div>\n                <div className = 'sign-out-cta'>\n                    { t('settings.calendar.signedIn',\n                        { email: _profileEmail }) }\n                </div>\n                <Button\n                    appearance = 'primary'\n                    id = 'calendar_logout'\n                    onClick = { this._onClickDisconnect }\n                    type = 'button'>\n                    { t('settings.calendar.disconnect') }\n                </Button>\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code CalendarTab} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _appName: string,\n *     _enableGoogleIntegration: boolean,\n *     _enableMicrosoftIntegration: boolean,\n *     _isConnectedToCalendar: boolean,\n *     _profileEmail: string\n * }}\n */\nfunction _mapStateToProps(state) {\n    const calendarState = state['features/calendar-sync'] || {};\n    const {\n        googleApiApplicationClientID,\n        microsoftApiApplicationClientID\n    } = state['features/base/config'];\n    const calendarEnabled = isCalendarEnabled(state);\n\n    return {\n        _appName: interfaceConfig.APP_NAME,\n        _enableGoogleIntegration: Boolean(\n            calendarEnabled && googleApiApplicationClientID),\n        _enableMicrosoftIntegration: Boolean(\n            calendarEnabled && microsoftApiApplicationClientID),\n        _isConnectedToCalendar: calendarState.integrationReady,\n        _profileEmail: calendarState.profileEmail\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(CalendarTab));\n","// @flow\n\nimport { Checkbox } from '@atlaskit/checkbox';\nimport DropdownMenu, {\n    DropdownItem,\n    DropdownItemGroup\n} from '@atlaskit/dropdown-menu';\nimport React from 'react';\n\nimport { AbstractDialogTab } from '../../../base/dialog';\nimport type { Props as AbstractDialogTabProps } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\n\n/**\n * The type of the React {@code Component} props of {@link MoreTab}.\n */\nexport type Props = {\n    ...$Exact<AbstractDialogTabProps>,\n\n    /**\n     * The currently selected language to display in the language select\n     * dropdown.\n     */\n    currentLanguage: string,\n\n    /**\n     * Whether or not follow me is currently active (enabled by some other participant).\n     */\n    followMeActive: boolean,\n\n    /**\n     * Whether or not the user has selected the Follow Me feature to be enabled.\n     */\n    followMeEnabled: boolean,\n\n    /**\n     * All available languages to display in the language select dropdown.\n     */\n    languages: Array<string>,\n\n    /**\n     * Whether or not to display the language select dropdown.\n     */\n    showLanguageSettings: boolean,\n\n    /**\n     * Whether or not to display moderator-only settings.\n     */\n    showModeratorSettings: boolean,\n\n    /**\n     * Whether or not the user has selected the Start Audio Muted feature to be\n     * enabled.\n     */\n    startAudioMuted: boolean,\n\n    /**\n     * Whether or not the user has selected the Start Video Muted feature to be\n     * enabled.\n     */\n    startVideoMuted: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link MoreTab}.\n */\ntype State = {\n\n    /**\n     * Whether or not the language select dropdown is open.\n     */\n    isLanguageSelectOpen: boolean\n};\n\n/**\n * React {@code Component} for modifying language and moderator settings.\n *\n * @extends Component\n */\nclass MoreTab extends AbstractDialogTab<Props, State> {\n    /**\n     * Initializes a new {@code MoreTab} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            isLanguageSelectOpen: false\n        };\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onLanguageDropdownOpenChange\n            = this._onLanguageDropdownOpenChange.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { showModeratorSettings, showLanguageSettings } = this.props;\n        const content = [];\n\n        if (showModeratorSettings) {\n            content.push(this._renderModeratorSettings());\n        }\n\n        if (showLanguageSettings) {\n            content.push(this._renderLangaugeSelect());\n        }\n\n        return <div className = 'more-tab'>{ content }</div>;\n    }\n\n    _onLanguageDropdownOpenChange: (Object) => void;\n\n    /**\n     * Callback invoked to toggle display of the language select dropdown.\n     *\n     * @param {Object} event - The event for opening or closing the dropdown.\n     * @private\n     * @returns {void}\n     */\n    _onLanguageDropdownOpenChange({ isOpen }) {\n        this.setState({ isLanguageSelectOpen: isOpen });\n    }\n\n    /**\n     * Returns the menu item for changing displayed language.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderLangaugeSelect() {\n        const {\n            currentLanguage,\n            languages,\n            t\n        } = this.props;\n\n        const languageItems\n            = languages.map(language => (\n                <DropdownItem\n                    key = { language }\n\n                    // eslint-disable-next-line react/jsx-no-bind\n                    onClick = {\n                        () => super._onChange({ currentLanguage: language }) }>\n                    { t(`languages:${language}`) }\n                </DropdownItem>));\n\n        return (\n            <div\n                className = 'settings-sub-pane language-settings'\n                key = 'language'>\n                <div className = 'mock-atlaskit-label'>\n                    { t('settings.language') }\n                </div>\n                <DropdownMenu\n                    isOpen = { this.state.isLanguageSelectOpen }\n                    onOpenChange = { this._onLanguageDropdownOpenChange }\n                    shouldFitContainer = { true }\n                    trigger = { currentLanguage\n                        ? t(`languages:${currentLanguage}`)\n                        : '' }\n                    triggerButtonProps = {{\n                        appearance: 'primary',\n                        shouldFitContainer: true\n                    }}\n                    triggerType = 'button'>\n                    <DropdownItemGroup>\n                        { languageItems }\n                    </DropdownItemGroup>\n                </DropdownMenu>\n            </div>\n        );\n    }\n\n    /**\n     * Returns the React Element for modifying conference-wide settings.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderModeratorSettings() {\n        const {\n            followMeActive,\n            followMeEnabled,\n            startAudioMuted,\n            startVideoMuted,\n            t\n        } = this.props;\n\n        return (\n            <div\n                className = 'settings-sub-pane'\n                key = 'moderator'>\n                <div className = 'mock-atlaskit-label'>\n                    { t('settings.moderator') }\n                </div>\n                <Checkbox\n                    isChecked = { startAudioMuted }\n                    label = { t('settings.startAudioMuted') }\n                    name = 'start-audio-muted'\n                    // eslint-disable-next-line react/jsx-no-bind\n                    onChange = {\n                        ({ target: { checked } }) =>\n                            super._onChange({ startAudioMuted: checked })\n                    } />\n                <Checkbox\n                    isChecked = { startVideoMuted }\n                    label = { t('settings.startVideoMuted') }\n                    name = 'start-video-muted'\n                    // eslint-disable-next-line react/jsx-no-bind\n                    onChange = {\n                        ({ target: { checked } }) =>\n                            super._onChange({ startVideoMuted: checked })\n                    } />\n                <Checkbox\n                    isChecked = { followMeEnabled && !followMeActive }\n                    isDisabled = { followMeActive }\n                    label = { t('settings.followMe') }\n                    name = 'follow-me'\n                    // eslint-disable-next-line react/jsx-no-bind\n                    onChange = {\n                        ({ target: { checked } }) =>\n                            super._onChange({ followMeEnabled: checked })\n                    } />\n            </div>\n        );\n    }\n}\n\nexport default translate(MoreTab);\n","// @flow\n\nimport Button from '@atlaskit/button';\nimport { FieldTextStateless } from '@atlaskit/field-text';\nimport React from 'react';\n\nimport { AbstractDialogTab } from '../../../base/dialog';\nimport type { Props as AbstractDialogTabProps } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport UIEvents from '../../../../../service/UI/UIEvents';\nimport {\n    sendAnalytics,\n    createProfilePanelButtonEvent\n} from '../../../analytics';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} props of {@link ProfileTab}.\n */\nexport type Props = {\n    ...$Exact<AbstractDialogTabProps>,\n\n    /**\n     * Whether or not server-side authentication is available.\n     */\n    authEnabled: boolean,\n\n    /**\n     * The name of the currently (server-side) authenticated user.\n     */\n    authLogin: string,\n\n    /**\n     * The display name to display for the local participant.\n     */\n    displayName: string,\n\n    /**\n     * The email to display for the local participant.\n     */\n    email: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n * React {@code Component} for modifying the local user's profile.\n *\n * @extends Component\n */\nclass ProfileTab extends AbstractDialogTab<Props> {\n    static defaultProps = {\n        displayName: '',\n        email: ''\n    };\n\n    /**\n     * Initializes a new {@code ConnectedSettingsDialog} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code ConnectedSettingsDialog} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onAuthToggle = this._onAuthToggle.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            authEnabled,\n            displayName,\n            email,\n            t\n        } = this.props;\n\n        return (\n            <div>\n                <div className = 'profile-edit'>\n                    <div className = 'profile-edit-field'>\n                        <FieldTextStateless\n                            autoFocus = { true }\n                            compact = { true }\n                            id = 'setDisplayName'\n                            label = { t('profile.setDisplayNameLabel') }\n                            // eslint-disable-next-line react/jsx-no-bind\n                            onChange = {\n                                ({ target: { value } }) =>\n                                    super._onChange({ displayName: value })\n                            }\n                            placeholder = { t('settings.name') }\n                            shouldFitContainer = { true }\n                            type = 'text'\n                            value = { displayName } />\n                    </div>\n                    <div className = 'profile-edit-field'>\n                        <FieldTextStateless\n                            compact = { true }\n                            id = 'setEmail'\n                            label = { t('profile.setEmailLabel') }\n                            // eslint-disable-next-line react/jsx-no-bind\n                            onChange = {\n                                ({ target: { value } }) =>\n                                    super._onChange({ email: value })\n                            }\n                            placeholder = { t('profile.setEmailInput') }\n                            shouldFitContainer = { true }\n                            type = 'text'\n                            value = { email } />\n                    </div>\n                </div>\n                { authEnabled && this._renderAuth() }\n            </div>\n        );\n    }\n\n    _onAuthToggle: () => void;\n\n    /**\n     * Shows the dialog for logging in or out of a server and closes this\n     * dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onAuthToggle() {\n        if (this.props.authLogin) {\n            sendAnalytics(createProfilePanelButtonEvent('logout.button'));\n\n            APP.UI.messageHandler.openTwoButtonDialog({\n                leftButtonKey: 'dialog.Yes',\n                msgKey: 'dialog.logoutQuestion',\n                submitFunction(evt, yes) {\n                    if (yes) {\n                        APP.UI.emitEvent(UIEvents.LOGOUT);\n                    }\n                },\n                titleKey: 'dialog.logoutTitle'\n            });\n        } else {\n            sendAnalytics(createProfilePanelButtonEvent('login.button'));\n\n            APP.UI.emitEvent(UIEvents.AUTH_CLICKED);\n        }\n\n        this.props.closeDialog();\n    }\n\n    /**\n     * Returns a React Element for interacting with server-side authentication.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderAuth() {\n        const {\n            authLogin,\n            t\n        } = this.props;\n\n        return (\n            <div>\n                <div className = 'mock-atlaskit-label'>\n                    { t('toolbar.authenticate') }\n                </div>\n                { authLogin\n                    && <div className = 'auth-name'>\n                        { t('settings.loggedIn', { name: authLogin }) }\n                    </div> }\n                <Button\n                    appearance = 'primary'\n                    id = 'login_button'\n                    onClick = { this._onAuthToggle }\n                    type = 'button'>\n                    { authLogin ? t('toolbar.logout') : t('toolbar.login') }\n                </Button>\n            </div>\n        );\n    }\n}\n\nexport default translate(ProfileTab);\n","// @flow\nimport { toState } from '../base/redux';\nimport { parseStandardURIString } from '../base/util';\nimport { i18next, DEFAULT_LANGUAGE, LANGUAGES } from '../base/i18n';\nimport { createLocalTrack } from '../base/lib-jitsi-meet/functions';\nimport {\n    getLocalParticipant,\n    isLocalParticipantModerator\n} from '../base/participants';\nimport { isFollowMeActive } from '../follow-me';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Used for web. Indicates if the setting section is enabled.\n *\n * @param {string} settingName - The name of the setting section as defined in\n * interface_config.js and SettingsMenu.js.\n * @returns {boolean} True to indicate that the given setting section\n * is enabled, false otherwise.\n */\nexport function isSettingEnabled(settingName: string) {\n    return interfaceConfig.SETTINGS_SECTIONS.includes(settingName);\n}\n\n/**\n * Normalizes a URL entered by the user.\n * FIXME: Consider adding this to base/util/uri.\n *\n * @param {string} url - The URL to validate.\n * @returns {string|null} - The normalized URL, or null if the URL is invalid.\n */\nexport function normalizeUserInputURL(url: string) {\n    /* eslint-disable no-param-reassign */\n\n    if (url) {\n        url = url.replace(/\\s/g, '').toLowerCase();\n\n        const urlRegExp = new RegExp('^(\\\\w+://)?(.+)$');\n        const urlComponents = urlRegExp.exec(url);\n\n        if (urlComponents && (!urlComponents[1]\n                || !urlComponents[1].startsWith('http'))) {\n            url = `https://${urlComponents[2]}`;\n        }\n\n        const parsedURI = parseStandardURIString(url);\n\n        if (!parsedURI.host) {\n            return null;\n        }\n\n        return parsedURI.toString();\n    }\n\n    return url;\n\n    /* eslint-enable no-param-reassign */\n}\n\n/**\n * Used for web. Returns whether or not only Device Selection is configured to\n * display as a setting.\n *\n * @returns {boolean}\n */\nexport function shouldShowOnlyDeviceSelection() {\n    return interfaceConfig.SETTINGS_SECTIONS.length === 1\n        && isSettingEnabled('devices');\n}\n\n/**\n * Returns the properties for the \"More\" tab from settings dialog from Redux\n * state.\n *\n * @param {(Function|Object)} stateful -The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state.\n * @returns {Object} - The properties for the \"More\" tab from settings dialog.\n */\nexport function getMoreTabProps(stateful: Object | Function) {\n    const state = toState(stateful);\n    const language = i18next.language || DEFAULT_LANGUAGE;\n    const {\n        conference,\n        followMeEnabled,\n        startAudioMutedPolicy,\n        startVideoMutedPolicy\n    } = state['features/base/conference'];\n    const followMeActive = isFollowMeActive(state);\n    const configuredTabs = interfaceConfig.SETTINGS_SECTIONS || [];\n\n    // The settings sections to display.\n    const showModeratorSettings = Boolean(\n        conference\n            && configuredTabs.includes('moderator')\n            && isLocalParticipantModerator(state));\n\n    return {\n        currentLanguage: language,\n        followMeActive: Boolean(conference && followMeActive),\n        followMeEnabled: Boolean(conference && followMeEnabled),\n        languages: LANGUAGES,\n        showLanguageSettings: configuredTabs.includes('language'),\n        showModeratorSettings,\n        startAudioMuted: Boolean(conference && startAudioMutedPolicy),\n        startVideoMuted: Boolean(conference && startVideoMutedPolicy)\n    };\n}\n\n/**\n * Returns the properties for the \"Profile\" tab from settings dialog from Redux\n * state.\n *\n * @param {(Function|Object)} stateful -The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state.\n * @returns {Object} - The properties for the \"Profile\" tab from settings\n * dialog.\n */\nexport function getProfileTabProps(stateful: Object | Function) {\n    const state = toState(stateful);\n    const {\n        authEnabled,\n        authLogin,\n        conference\n    } = state['features/base/conference'];\n    const localParticipant = getLocalParticipant(state);\n\n    return {\n        authEnabled: Boolean(conference && authEnabled),\n        authLogin,\n        displayName: localParticipant.name,\n        email: localParticipant.email\n    };\n}\n\n/**\n * Returns a promise which resolves with a list of objects containing\n * all the video jitsiTracks and appropriate errors for the given device ids.\n *\n * @param {string[]} ids - The list of the camera ids for wich to create tracks.\n *\n * @returns {Promise<Object[]>}\n */\nexport function createLocalVideoTracks(ids: string[]) {\n    return Promise.all(ids.map(deviceId => createLocalTrack('video', deviceId)\n                   .then(jitsiTrack => {\n                       return {\n                           jitsiTrack,\n                           deviceId\n                       };\n                   })\n                   .catch(() => {\n                       return {\n                           jitsiTrack: null,\n                           deviceId,\n                           error: 'deviceSelection.previewUnavailable'\n                       };\n                   })));\n}\n\n\n/**\n * Returns a promise which resolves with an object containing the corresponding\n * the audio jitsiTrack/error.\n *\n * @param {string} deviceId - The deviceId for the current microphone.\n *\n * @returns {Promise<Object>}\n */\nexport function createLocalAudioTrack(deviceId: string) {\n    return createLocalTrack('audio', deviceId)\n                   .then(jitsiTrack => {\n                       return {\n                           hasError: false,\n                           jitsiTrack\n                       };\n                   })\n                   .catch(() => {\n                       return {\n                           hasError: true,\n                           jitsiTrack: null\n                       };\n                   });\n}\n\n/**\n * Returns the visibility state of the audio settings.\n *\n * @param {Object} state - The state of the application.\n * @returns {boolean}\n */\nexport function getAudioSettingsVisibility(state: Object) {\n    return state['features/settings'].audioSettingsVisible;\n}\n\n/**\n * Returns the visibility state of the video settings.\n *\n * @param {Object} state - The state of the application.\n * @returns {boolean}\n */\nexport function getVideoSettingsVisibility(state: Object) {\n    return state['features/settings'].videoSettingsVisible;\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { getAvailableDevices } from '../../../base/devices';\nimport { DialogWithTabs, hideDialog } from '../../../base/dialog';\nimport { connect } from '../../../base/redux';\nimport { isCalendarEnabled } from '../../../calendar-sync';\nimport {\n    DeviceSelection,\n    getDeviceSelectionDialogProps,\n    submitDeviceSelectionTab\n} from '../../../device-selection';\n\nimport CalendarTab from './CalendarTab';\nimport MoreTab from './MoreTab';\nimport ProfileTab from './ProfileTab';\nimport { getMoreTabProps, getProfileTabProps } from '../../functions';\nimport { submitMoreTab, submitProfileTab } from '../../actions';\nimport { SETTINGS_TABS } from '../../constants';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of\n * {@link ConnectedSettingsDialog}.\n */\ntype Props = {\n\n    /**\n     * Which settings tab should be initially displayed. If not defined then\n     * the first tab will be displayed.\n     */\n    defaultTab: string,\n\n    /**\n     * Information about the tabs to be rendered.\n     */\n    _tabs: Array<Object>,\n\n    /**\n     * Invoked to save changed settings.\n     */\n    dispatch: Function\n};\n\n/**\n * A React {@code Component} for displaying a dialog to modify local settings\n * and conference-wide (moderator) settings. This version is connected to\n * redux to get the current settings.\n *\n * @extends Component\n */\nclass SettingsDialog extends Component<Props> {\n    /**\n     * Initializes a new {@code ConnectedSettingsDialog} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code ConnectedSettingsDialog} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._closeDialog = this._closeDialog.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _tabs, defaultTab, dispatch } = this.props;\n        const onSubmit = this._closeDialog;\n        const defaultTabIdx\n            = _tabs.findIndex(({ name }) => name === defaultTab);\n        const tabs = _tabs.map(tab => {\n            return {\n                ...tab,\n                onMount: tab.onMount\n                    ? (...args) => dispatch(tab.onMount(...args))\n                    : undefined,\n                submit: (...args) => tab.submit\n                    && dispatch(tab.submit(...args))\n            };\n        });\n\n        return (\n            <DialogWithTabs\n                closeDialog = { this._closeDialog }\n                cssClassName = 'settings-dialog'\n                defaultTab = {\n                    defaultTabIdx === -1 ? undefined : defaultTabIdx\n                }\n                onSubmit = { onSubmit }\n                tabs = { tabs }\n                titleKey = 'settings.title' />\n        );\n    }\n\n    _closeDialog: () => void;\n\n    /**\n     * Callback invoked to close the dialog without saving changes.\n     *\n     * @private\n     * @returns {void}\n     */\n    _closeDialog() {\n        this.props.dispatch(hideDialog());\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code ConnectedSettingsDialog} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     tabs: Array<Object>\n * }}\n */\nfunction _mapStateToProps(state) {\n    const configuredTabs = interfaceConfig.SETTINGS_SECTIONS || [];\n    const jwt = state['features/base/jwt'];\n\n    // The settings sections to display.\n    const showDeviceSettings = configuredTabs.includes('devices');\n    const moreTabProps = getMoreTabProps(state);\n    const { showModeratorSettings, showLanguageSettings } = moreTabProps;\n    const showProfileSettings\n        = configuredTabs.includes('profile') && jwt.isGuest;\n    const showCalendarSettings\n        = configuredTabs.includes('calendar') && isCalendarEnabled(state);\n    const tabs = [];\n\n    if (showDeviceSettings) {\n        tabs.push({\n            name: SETTINGS_TABS.DEVICES,\n            component: DeviceSelection,\n            label: 'settings.devices',\n            onMount: getAvailableDevices,\n            props: getDeviceSelectionDialogProps(state),\n            propsUpdateFunction: (tabState, newProps) => {\n                // Ensure the device selection tab gets updated when new devices\n                // are found by taking the new props and only preserving the\n                // current user selected devices. If this were not done, the\n                // tab would keep using a copy of the initial props it received,\n                // leaving the device list to become stale.\n\n                return {\n                    ...newProps,\n                    selectedAudioInputId: tabState.selectedAudioInputId,\n                    selectedAudioOutputId: tabState.selectedAudioOutputId,\n                    selectedVideoInputId: tabState.selectedVideoInputId\n                };\n            },\n            styles: 'settings-pane devices-pane',\n            submit: submitDeviceSelectionTab\n        });\n    }\n\n    if (showProfileSettings) {\n        tabs.push({\n            name: SETTINGS_TABS.PROFILE,\n            component: ProfileTab,\n            label: 'profile.title',\n            props: getProfileTabProps(state),\n            styles: 'settings-pane profile-pane',\n            submit: submitProfileTab\n        });\n    }\n\n    if (showCalendarSettings) {\n        tabs.push({\n            name: SETTINGS_TABS.CALENDAR,\n            component: CalendarTab,\n            label: 'settings.calendar.title',\n            styles: 'settings-pane calendar-pane'\n        });\n    }\n\n    if (showModeratorSettings || showLanguageSettings) {\n        tabs.push({\n            name: SETTINGS_TABS.MORE,\n            component: MoreTab,\n            label: 'settings.more',\n            props: moreTabProps,\n            propsUpdateFunction: (tabState, newProps) => {\n                // Updates tab props, keeping users selection\n\n                return {\n                    ...newProps,\n                    currentLanguage: tabState.currentLanguage,\n                    followMeEnabled: tabState.followMeEnabled,\n                    startAudioMuted: tabState.startAudioMuted,\n                    startVideoMuted: tabState.startVideoMuted\n                };\n            },\n            styles: 'settings-pane more-pane',\n            submit: submitMoreTab\n        });\n    }\n\n    return { _tabs: tabs };\n}\n\nexport default connect(_mapStateToProps)(SettingsDialog);\n","// @flow\n\nimport React from 'react';\nimport { Icon } from '../../../../base/icons';\n\n/**\n * The type of the React {@code Component} props of {@link AudioSettingsHeader}.\n */\ntype Props = {\n\n    /**\n     * The Icon used for the Header.\n     */\n    IconComponent: Function,\n\n    /**\n     * The text of the Header.\n     */\n    text: string,\n};\n\n/**\n * React {@code Component} representing the Header of an audio option group.\n *\n * @returns { ReactElement}\n */\nexport default function AudioSettingsHeader({ IconComponent, text }: Props) {\n    return (\n        <div className = 'audio-preview-header'>\n            <div className = 'audio-preview-header-icon'>\n                { <Icon\n                    size = { 24 }\n                    src = { IconComponent } />}\n            </div>\n            <div className = 'audio-preview-header-text'>{text}</div>\n        </div>\n    );\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Icon, IconCheck, IconExclamationSolid } from '../../../../base/icons';\n\n/**\n * The type of the React {@code Component} props of {@link AudioSettingsEntry}.\n */\nexport type Props = {\n\n    /**\n     * The text for this component.\n     */\n    children: React$Node,\n\n    /**\n     * Flag indicating an error.\n     */\n    hasError?: boolean,\n\n    /**\n     * Flag indicating the selection state.\n     */\n    isSelected: boolean,\n};\n\n/**\n * React {@code Component} representing an entry for the audio settings.\n *\n * @returns { ReactElement}\n */\nexport default function AudioSettingsEntry({ children, hasError, isSelected }: Props) {\n    const className = `audio-preview-entry ${isSelected\n        ? 'audio-preview-entry--selected' : ''}`;\n\n    return (\n        <div className = { className }>\n            {isSelected && (\n                <Icon\n                    className = 'audio-preview-icon audio-preview-icon--check'\n                    color = '#1C2025'\n                    size = { 14 }\n                    src = { IconCheck } />\n            )}\n            <span className = 'audio-preview-entry-text'>{children}</span>\n            {hasError && <Icon\n                className = 'audio-preview-icon audio-preview-icon--exclamation'\n                size = { 16 }\n                src = { IconExclamationSolid } />}\n        </div>\n    );\n}\n","// @flow\n\nimport React from 'react';\nimport { Icon, IconMeter } from '../../../../base/icons';\n\ntype Props = {\n\n    /**\n     * Own class name for the component.\n     */\n    className: string,\n\n    /**\n     * Flag indicating whether the component is greyed out/disabled.\n     */\n    isDisabled?: boolean,\n\n    /**\n     * The level of the meter.\n     * Should be between 0 and 7 as per the used SVG.\n     */\n    level: number,\n};\n\n/**\n * React {@code Component} representing an audio level meter.\n *\n * @returns { ReactElement}\n */\nexport default function({ className, isDisabled, level }: Props) {\n    let ownClassName;\n\n    if (level > -1) {\n        ownClassName = `metr metr-l-${level}`;\n    } else {\n        ownClassName = `metr ${isDisabled ? 'metr--disabled' : ''}`;\n    }\n\n    return (\n        <Icon\n            className = { `${ownClassName} ${className}` }\n            size = { 12 }\n            src = { IconMeter } />\n    );\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport AudioSettingsEntry, { type Props as AudioSettingsEntryProps } from './AudioSettingsEntry';\nimport JitsiMeetJS from '../../../../base/lib-jitsi-meet/_';\nimport Meter from './Meter';\n\nconst JitsiTrackEvents = JitsiMeetJS.events.track;\n\ntype Props = AudioSettingsEntryProps & {\n\n    /**\n     * The deviceId of the microphone.\n     */\n    deviceId: string,\n\n    /**\n     * Flag indicating if there is a problem with the device.\n     */\n    hasError?: boolean,\n\n    /**\n     * The audio track for the current entry.\n     */\n    jitsiTrack: Object,\n\n    /**\n     * Click handler for component.\n     */\n    onClick: Function,\n}\n\ntype State = {\n\n    /**\n     * The audio level.\n     */\n    level: number,\n}\n\n/**\n * React {@code Component} representing an entry for the microphone audio settings.\n *\n * @param {Props} props - The props of the component.\n * @returns { ReactElement}\n */\nexport default class MicrophoneEntry extends Component<Props, State> {\n    /**\n     * Initializes a new {@code MicrophoneEntry} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            level: -1\n        };\n        this._onClick = this._onClick.bind(this);\n        this._updateLevel = this._updateLevel.bind(this);\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Click handler for the entry.\n     *\n     * @returns {void}\n     */\n    _onClick() {\n        this.props.onClick(this.props.deviceId);\n    }\n\n    _updateLevel: (number) => void;\n\n    /**\n     * Updates the level of the meter.\n     *\n     * @param {number} num - The audio level provided by the jitsiTrack.\n     * @returns {void}\n     */\n    _updateLevel(num) {\n        this.setState({\n            level: Math.floor(num / 0.125)\n        });\n    }\n\n    /**\n     * Subscribes to audio level chanages comming from the jitsiTrack.\n     *\n     * @returns {void}\n     */\n    _startListening() {\n        const { jitsiTrack } = this.props;\n\n        jitsiTrack && jitsiTrack.on(\n            JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,\n            this._updateLevel);\n    }\n\n    /**\n     * Unsubscribes from chanages comming from the jitsiTrack.\n     *\n     * @param {Object} jitsiTrack - The jitsiTrack to unsubscribe from.\n     * @returns {void}\n     */\n    _stopListening(jitsiTrack) {\n        jitsiTrack && jitsiTrack.off(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED, this._updateLevel);\n        this.setState({\n            level: -1\n        });\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: Props) {\n        if (prevProps.jitsiTrack !== this.props.jitsiTrack) {\n            this._stopListening(prevProps.jitsiTrack);\n            this._startListening();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._startListening();\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount}.\n     *\n     * @inheritdoc\n     */\n    compmonentWillUnmount() {\n        this._stopListening(this.props.jitsiTrack);\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { children, hasError, isSelected } = this.props;\n\n        return (\n            <div\n                className = 'audio-preview-microphone'\n                onClick = { this._onClick }>\n                <AudioSettingsEntry\n                    hasError = { hasError }\n                    isSelected = { isSelected }>\n                    {children}\n                </AudioSettingsEntry>\n                <Meter\n                    className = 'audio-preview-meter-mic'\n                    isDisabled = { hasError }\n                    level = { this.state.level } />\n            </div>\n        );\n    }\n}\n","// @flow\n\nimport React from 'react';\n\ntype Props = {\n\n    /**\n     * Click handler for the button.\n     */\n    onClick: Function,\n};\n\n/**\n * React {@code Component} representing an button used for testing output sound.\n *\n * @returns { ReactElement}\n */\nexport default function TestButton({ onClick }: Props) {\n    return (\n        <div\n            className = 'audio-preview-test-button'\n            onClick = { onClick }>\n            Test\n        </div>\n    );\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport AudioSettingsEntry from './AudioSettingsEntry';\nimport logger from '../../../logger';\nimport TestButton from './TestButton';\n\nconst TEST_SOUND_PATH = 'sounds/ring.wav';\n\n/**\n * The type of the React {@code Component} props of {@link SpeakerEntry}.\n */\ntype Props = {\n\n    /**\n     * The text label for the entry.\n     */\n    children: React$Node,\n\n    /**\n     * Flag controlling the selection state of the entry.\n     */\n    isSelected: boolean,\n\n    /**\n     * The deviceId of the speaker.\n     */\n    deviceId: string,\n\n    /**\n     * Click handler for the component.\n     */\n    onClick: Function,\n};\n\n/**\n * Implements a React {@link Component} which displays an audio\n * output settings entry. The user can click and play a test sound.\n *\n * @extends Component\n */\nexport default class SpeakerEntry extends Component<Props> {\n    /**\n     * A React ref to the HTML element containing the {@code audio} instance.\n     */\n    audioRef: Object;\n\n    /**\n     * Initializes a new {@code SpeakerEntry} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.audioRef = React.createRef();\n        this._onTestButtonClick = this._onTestButtonClick.bind(this);\n        this._onClick = this._onClick.bind(this);\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Click handler for the entry.\n     *\n     * @returns {void}\n     */\n    _onClick() {\n        this.props.onClick(this.props.deviceId);\n    }\n\n    _onTestButtonClick: Object => void;\n\n    /**\n     * Click handler for Test button.\n     * Sets the current audio output id and plays a sound.\n     *\n     * @param {Object} e - The sythetic event.\n     * @returns {void}\n     */\n    async _onTestButtonClick(e) {\n        e.stopPropagation();\n\n        try {\n            await this.audioRef.current.setSinkId(this.props.deviceId);\n            this.audioRef.current.play();\n        } catch (err) {\n            logger.log('Could not set sink id', err);\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { children, isSelected, deviceId } = this.props;\n\n        return (\n            <div\n                className = 'audio-preview-speaker'\n                onClick = { this._onClick }>\n                <AudioSettingsEntry\n                    isSelected = { isSelected }\n                    key = { deviceId }>\n                    {children}\n                </AudioSettingsEntry>\n                <TestButton onClick = { this._onTestButtonClick } />\n                <audio\n                    preload = 'auto'\n                    ref = { this.audioRef }\n                    src = { TEST_SOUND_PATH } />\n            </div>\n        );\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport AudioSettingsHeader from './AudioSettingsHeader';\nimport { translate } from '../../../../base/i18n';\nimport { IconMicrophoneEmpty, IconVolumeEmpty } from '../../../../base/icons';\nimport { createLocalAudioTrack } from '../../../functions';\nimport MicrophoneEntry from './MicrophoneEntry';\nimport SpeakerEntry from './SpeakerEntry';\n\nexport type Props = {\n\n   /**\n    * The deviceId of the microphone in use.\n    */\n    currentMicDeviceId: string,\n\n   /**\n    * The deviceId of the output device in use.\n    */\n    currentOutputDeviceId: string,\n\n   /**\n    * Used to set a new microphone as the current one.\n    */\n    setAudioInputDevice: Function,\n\n   /**\n    * Used to set a new output device as the current one.\n    */\n    setAudioOutputDevice: Function,\n\n   /**\n    * A list of objects containing the labels and deviceIds\n    * of all the output devices.\n    */\n    outputDevices: Object[],\n\n   /**\n    * A list with objects containing the labels and deviceIds\n    * of all the input devices.\n    */\n    microphoneDevices: Object[],\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\ntype State = {\n\n   /**\n    * An object containing the jitsiTrack and the error (if the case)\n    * for the microphone that is in use.\n    */\n    currentMicData: Object\n}\n\n/**\n * Implements a React {@link Component} which displayes a list of all\n * the audio input & output devices to choose from.\n *\n * @extends Component\n */\nclass AudioSettingsContent extends Component<Props, State> {\n    _componentWasUnmounted: boolean;\n\n    /**\n     * Initializes a new {@code AudioSettingsContent} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        this._onMicrophoneEntryClick = this._onMicrophoneEntryClick.bind(this);\n        this._onSpeakerEntryClick = this._onSpeakerEntryClick.bind(this);\n\n        this.state = {\n            currentMicData: {\n                error: false,\n                jitsiTrack: null\n            }\n        };\n    }\n\n    _onMicrophoneEntryClick: (string) => void;\n\n    /**\n     * Click handler for the microphone entries.\n     *\n     * @param {string} deviceId - The deviceId for the clicked microphone.\n     * @returns {void}\n     */\n    _onMicrophoneEntryClick(deviceId) {\n        this.props.setAudioInputDevice(deviceId);\n    }\n\n    _onSpeakerEntryClick: (string) => void;\n\n    /**\n     * Click handler for the speaker entries.\n     *\n     * @param {string} deviceId - The deviceId for the clicked speaker.\n     * @returns {void}\n     */\n    _onSpeakerEntryClick(deviceId) {\n        this.props.setAudioOutputDevice(deviceId);\n    }\n\n    /**\n     * Renders a single microphone entry.\n     *\n     * @param {Object} data - An object with the deviceId and label of the microphone.\n     * @param {number} index - The index of the element, used for creating a key.\n     * @returns {React$Node}\n     */\n    _renderMicrophoneEntry(data, index) {\n        const { deviceId, label } = data;\n        const key = `me-${index}`;\n        const isSelected = deviceId === this.props.currentMicDeviceId;\n        let jitsiTrack = null;\n        let hasError = false;\n\n        if (isSelected) {\n            ({ jitsiTrack, hasError } = this.state.currentMicData);\n        }\n\n        return (\n            <MicrophoneEntry\n                deviceId = { deviceId }\n                hasError = { hasError }\n                isSelected = { isSelected }\n                jitsiTrack = { jitsiTrack }\n                key = { key }\n                onClick = { this._onMicrophoneEntryClick }>\n                {label}\n            </MicrophoneEntry>\n        );\n    }\n\n    /**\n     * Renders a single speaker entry.\n     *\n     * @param {Object} data - An object with the deviceId and label of the speaker.\n     * @param {number} index - The index of the element, used for creating a key.\n     * @returns {React$Node}\n     */\n    _renderSpeakerEntry(data, index) {\n        const { deviceId, label } = data;\n        const key = `se-${index}`;\n\n        return (\n            <SpeakerEntry\n                deviceId = { deviceId }\n                isSelected = { deviceId === this.props.currentOutputDeviceId }\n                key = { key }\n                onClick = { this._onSpeakerEntryClick }>\n                {label}\n            </SpeakerEntry>\n        );\n    }\n\n    /**\n     * Disposes the audio track for a given micData object.\n     *\n     * @param {Object} micData - The object holding the track.\n     * @returns {Promise<void>}\n     */\n    _disposeTrack(micData) {\n        const { jitsiTrack } = micData;\n\n        return jitsiTrack ? jitsiTrack.dispose() : Promise.resolve();\n    }\n\n    /**\n     * Updates the current microphone data.\n     * Disposes previously created track and creates a new one.\n     *\n     * @returns {void}\n     */\n    async _updateCurrentMicData() {\n        await this._disposeTrack(this.state.currentMicData);\n\n        const currentMicData = await createLocalAudioTrack(\n            this.props.currentMicDeviceId,\n        );\n\n        // In case the component gets unmounted before the track is created\n        // avoid a leak by not setting the state\n        if (this._componentWasUnmounted) {\n            this._disposeTrack(currentMicData);\n        } else {\n            this.setState({\n                currentMicData\n            });\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps) {\n        if (prevProps.currentMicDeviceId !== this.props.currentMicDeviceId) {\n            this._updateCurrentMicData();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._updateCurrentMicData();\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount}.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._componentWasUnmounted = true;\n        this._disposeTrack(this.state.currentMicData);\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { microphoneDevices, outputDevices, t } = this.props;\n\n        return (\n            <div>\n                <div className = 'audio-preview-content'>\n                    <AudioSettingsHeader\n                        IconComponent = { IconMicrophoneEmpty }\n                        text = { t('settings.microphones') } />\n                    {microphoneDevices.map((data, i) =>\n                        this._renderMicrophoneEntry(data, i),\n                    )}\n                    <AudioSettingsHeader\n                        IconComponent = { IconVolumeEmpty }\n                        text = { t('settings.speakers') } />\n                    {outputDevices.map((data, i) =>\n                        this._renderSpeakerEntry(data, i),\n                    )}\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default translate(AudioSettingsContent);\n","// @flow\n\nimport React from 'react';\nimport InlineDialog from '@atlaskit/inline-dialog';\n\nimport AudioSettingsContent, { type Props as AudioSettingsContentProps } from './AudioSettingsContent';\nimport { toggleAudioSettings } from '../../../actions';\nimport {\n    getAudioInputDeviceData,\n    getAudioOutputDeviceData,\n    setAudioInputDeviceAndUpdateSettings,\n    setAudioOutputDevice as setAudioOutputDeviceAction\n} from '../../../../base/devices';\nimport { connect } from '../../../../base/redux';\nimport { getAudioSettingsVisibility } from '../../../functions';\nimport {\n    getCurrentMicDeviceId,\n    getCurrentOutputDeviceId\n} from '../../../../base/settings';\n\n\ntype Props = AudioSettingsContentProps & {\n\n   /**\n    * Component's children (the audio button).\n    */\n    children: React$Node,\n\n   /**\n    * Flag controlling the visibility of the popup.\n    */\n    isOpen: boolean,\n\n   /**\n    * Callback executed when the popup closes.\n    */\n    onClose: Function,\n}\n\n/**\n * Popup with audio settings.\n *\n * @returns {ReactElement}\n */\nfunction AudioSettingsPopup({\n    children,\n    currentMicDeviceId,\n    currentOutputDeviceId,\n    isOpen,\n    microphoneDevices,\n    setAudioInputDevice,\n    setAudioOutputDevice,\n    onClose,\n    outputDevices\n}: Props) {\n    return (\n        <div className = 'audio-preview'>\n            <InlineDialog\n                content = { <AudioSettingsContent\n                    currentMicDeviceId = { currentMicDeviceId }\n                    currentOutputDeviceId = { currentOutputDeviceId }\n                    microphoneDevices = { microphoneDevices }\n                    outputDevices = { outputDevices }\n                    setAudioInputDevice = { setAudioInputDevice }\n                    setAudioOutputDevice = { setAudioOutputDevice } /> }\n                isOpen = { isOpen }\n                onClose = { onClose }\n                position = 'top left'>\n                {children}\n            </InlineDialog>\n        </div>\n    );\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    return {\n        currentMicDeviceId: getCurrentMicDeviceId(state),\n        currentOutputDeviceId: getCurrentOutputDeviceId(state),\n        isOpen: getAudioSettingsVisibility(state),\n        microphoneDevices: getAudioInputDeviceData(state),\n        outputDevices: getAudioOutputDeviceData(state)\n    };\n}\n\nconst mapDispatchToProps = {\n    onClose: toggleAudioSettings,\n    setAudioInputDevice: setAudioInputDeviceAndUpdateSettings,\n    setAudioOutputDevice: setAudioOutputDeviceAction\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AudioSettingsPopup);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { equals } from '../../../../base/redux';\nimport Video from '../../../../base/media/components/Video';\nimport { createLocalVideoTracks } from '../../../functions';\n\n\nconst videoClassName = 'video-preview-video flipVideoX';\n\n/**\n * The type of the React {@code Component} props of {@link VideoSettingsContent}.\n */\nexport type Props = {\n\n    /**\n     * The deviceId of the camera device currently being used.\n     */\n    currentCameraDeviceId: string,\n\n    /**\n     * Callback invoked to change current camera.\n     */\n    setVideoInputDevice: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * Callback invoked to toggle the settings popup visibility.\n     */\n    toggleVideoSettings: Function,\n\n    /**\n     * All the camera device ids currently connected.\n     */\n    videoDeviceIds: string[],\n};\n\n/**\n * The type of the React {@code Component} state of {@link VideoSettingsContent}.\n */\ntype State = {\n\n    /**\n     * An array of all the jitsiTracks and eventual errors.\n     */\n    trackData: Object[],\n};\n\n/**\n * Implements a React {@link Component} which displays a list of video\n * previews to choose from.\n *\n * @extends Component\n */\nclass VideoSettingsContent extends Component<Props, State> {\n    _componentWasUnmounted: boolean;\n\n    /**\n     * Initializes a new {@code VideoSettingsContent} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            trackData: new Array(props.videoDeviceIds.length).fill({\n                jitsiTrack: null\n            })\n        };\n    }\n\n    /**\n     * Creates and updates the track data.\n     *\n     * @returns {void}\n     */\n    async _setTracks() {\n        this._disposeTracks(this.state.trackData);\n\n        const trackData = await createLocalVideoTracks(\n            this.props.videoDeviceIds,\n        );\n\n        // In case the component gets unmounted before the tracks are created\n        // avoid a leak by not setting the state\n        if (this._componentWasUnmounted) {\n            this._disposeTracks(trackData);\n        } else {\n            this.setState({\n                trackData\n            });\n        }\n    }\n\n    /**\n     * Destroys all the tracks from trackData object.\n     *\n     * @param {Object[]} trackData - An array of tracks that are to be disposed.\n     * @returns {Promise<void>}\n     */\n    _disposeTracks(trackData) {\n        trackData.forEach(({ jitsiTrack }) => {\n            jitsiTrack && jitsiTrack.dispose();\n        });\n    }\n\n    /**\n     * Returns the click handler used when selecting the video preview.\n     *\n     * @param {string} deviceId - The id of the camera device.\n     * @returns {Function}\n     */\n    _onEntryClick(deviceId) {\n        return () => {\n            this.props.setVideoInputDevice(deviceId);\n            this.props.toggleVideoSettings();\n        };\n    }\n\n    /**\n     * Renders a preview entry.\n     *\n     * @param {Object} data - The track data.\n     * @param {number} index - The index of the entry.\n     * @returns {React$Node}\n     */\n    _renderPreviewEntry(data, index) {\n        const { error, jitsiTrack, deviceId } = data;\n        const { currentCameraDeviceId, t } = this.props;\n        const isSelected = deviceId === currentCameraDeviceId;\n        const key = `vp-${index}`;\n        const className = 'video-preview-entry';\n\n        if (error) {\n            return (\n                <div\n                    className = { className }\n                    key = { key }>\n                    <div className = 'video-preview-error'>{t(error)}</div>\n                </div>\n            );\n        }\n\n        const props: Object = {\n            className,\n            key\n        };\n        const label = jitsiTrack && jitsiTrack.getTrackLabel();\n\n        if (isSelected) {\n            props.className = `${className} video-preview-entry--selected`;\n        } else {\n            props.onClick = this._onEntryClick(deviceId);\n        }\n\n        return (\n            <div { ...props }>\n                <div className = 'video-preview-label'>{label}</div>\n                <div className = 'video-preview-overlay' />\n                <Video\n                    className = { videoClassName }\n                    videoTrack = {{ jitsiTrack }} />\n            </div>\n        );\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._setTracks();\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount}.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._componentWasUnmounted = true;\n        this._disposeTracks(this.state.trackData);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps) {\n        if (!equals(this.props.videoDeviceIds, prevProps.videoDeviceIds)) {\n            this._setTracks();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { trackData } = this.state;\n\n        return (\n            <div className = 'video-preview-container'>\n                <div className = 'video-preview'>\n                    {trackData.map((data, i) => this._renderPreviewEntry(data, i))}\n                </div>\n            </div>\n        );\n    }\n}\n\n\nexport default translate(VideoSettingsContent);\n","// @flow\n\nimport React from 'react';\nimport InlineDialog from '@atlaskit/inline-dialog';\n\nimport { toggleVideoSettings } from '../../../actions';\nimport {\n    getVideoDeviceIds,\n    setVideoInputDeviceAndUpdateSettings\n} from '../../../../base/devices';\nimport { getVideoSettingsVisibility } from '../../../functions';\nimport { connect } from '../../../../base/redux';\nimport { getCurrentCameraDeviceId } from '../../../../base/settings';\nimport VideoSettingsContent, { type Props as VideoSettingsProps } from './VideoSettingsContent';\n\n\ntype Props = VideoSettingsProps & {\n\n   /**\n    * Component children (the Video button).\n    */\n    children: React$Node,\n\n   /**\n    * Flag controlling the visibility of the popup.\n    */\n    isOpen: boolean,\n\n   /**\n    * Callback executed when the popup closes.\n    */\n    onClose: Function,\n}\n\n/**\n * Popup with a preview of all the video devices.\n *\n * @returns {ReactElement}\n */\nfunction VideoSettingsPopup({\n    currentCameraDeviceId,\n    children,\n    isOpen,\n    onClose,\n    setVideoInputDevice,\n    videoDeviceIds\n}: Props) {\n    return (\n        <div className = 'video-preview'>\n            <InlineDialog\n                content = { <VideoSettingsContent\n                    currentCameraDeviceId = { currentCameraDeviceId }\n                    setVideoInputDevice = { setVideoInputDevice }\n                    toggleVideoSettings = { onClose }\n                    videoDeviceIds = { videoDeviceIds } /> }\n                isOpen = { isOpen }\n                onClose = { onClose }\n                position = 'top right'>\n                { children }\n            </InlineDialog>\n        </div>\n    );\n}\n\n/**\n * Maps (parts of) the redux state to the associated {@code VideoSettingsPopup}'s\n * props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    return {\n        currentCameraDeviceId: getCurrentCameraDeviceId(state),\n        isOpen: getVideoSettingsVisibility(state),\n        videoDeviceIds: getVideoDeviceIds(state)\n    };\n}\n\nconst mapDispatchToProps = {\n    onClose: toggleVideoSettings,\n    setVideoInputDevice: setVideoInputDeviceAndUpdateSettings\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(VideoSettingsPopup);\n","// @flow\n\nimport { setFollowMe, setStartMutedPolicy } from '../base/conference';\nimport { openDialog } from '../base/dialog';\nimport { i18next } from '../base/i18n';\n\nimport {\n    SET_AUDIO_SETTINGS_VISIBILITY,\n    SET_VIDEO_SETTINGS_VISIBILITY\n} from './actionTypes';\nimport { SettingsDialog } from './components';\nimport { getMoreTabProps, getProfileTabProps } from './functions';\n\ndeclare var APP: Object;\n\n/**\n * Opens {@code SettingsDialog}.\n *\n * @param {string} defaultTab - The tab in {@code SettingsDialog} that should be\n * displayed initially.\n * @returns {Function}\n */\nexport function openSettingsDialog(defaultTab: string) {\n    return openDialog(SettingsDialog, { defaultTab });\n}\n\n/**\n * Sets the visiblity of the audio settings.\n *\n * @param {boolean} value - The new value.\n * @returns {Function}\n */\nfunction setAudioSettingsVisibility(value: boolean) {\n    return {\n        type: SET_AUDIO_SETTINGS_VISIBILITY,\n        value\n    };\n}\n\n/**\n * Sets the visiblity of the video settings.\n *\n * @param {boolean} value - The new value.\n * @returns {Function}\n */\nfunction setVideoSettingsVisibility(value: boolean) {\n    return {\n        type: SET_VIDEO_SETTINGS_VISIBILITY,\n        value\n    };\n}\n\n/**\n * Submits the settings from the \"More\" tab of the settings dialog.\n *\n * @param {Object} newState - The new settings.\n * @returns {Function}\n */\nexport function submitMoreTab(newState: Object): Function {\n    return (dispatch, getState) => {\n        const currentState = getMoreTabProps(getState());\n\n        if (newState.followMeEnabled !== currentState.followMeEnabled) {\n            dispatch(setFollowMe(newState.followMeEnabled));\n        }\n\n        if (newState.startAudioMuted !== currentState.startAudioMuted\n            || newState.startVideoMuted !== currentState.startVideoMuted) {\n            dispatch(setStartMutedPolicy(\n                newState.startAudioMuted, newState.startVideoMuted));\n        }\n\n        if (newState.currentLanguage !== currentState.currentLanguage) {\n            i18next.changeLanguage(newState.currentLanguage);\n        }\n    };\n}\n\n/**\n * Submits the settings from the \"Profile\" tab of the settings dialog.\n *\n * @param {Object} newState - The new settings.\n * @returns {Function}\n */\nexport function submitProfileTab(newState: Object): Function {\n    return (dispatch, getState) => {\n        const currentState = getProfileTabProps(getState());\n\n        if (newState.displayName !== currentState.displayName) {\n            APP.conference.changeLocalDisplayName(newState.displayName);\n        }\n\n        if (newState.email !== currentState.email) {\n            APP.conference.changeLocalEmail(newState.email);\n        }\n    };\n}\n\n/**\n * Toggles the visiblity of the audio settings.\n *\n * @returns {void}\n */\nexport function toggleAudioSettings() {\n    return (dispatch: Function, getState: Function) => {\n        const value = getState()['features/settings'].audioSettingsVisible;\n\n        dispatch(setAudioSettingsVisibility(!value));\n    };\n}\n\n/**\n * Toggles the visiblity of the video settings.\n *\n * @returns {void}\n */\nexport function toggleVideoSettings() {\n    return (dispatch: Function, getState: Function) => {\n        const value = getState()['features/settings'].videoSettingsVisible;\n\n        dispatch(setVideoSettingsVisibility(!value));\n    };\n}\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    SET_AUDIO_SETTINGS_VISIBILITY,\n    SET_VIDEO_SETTINGS_VISIBILITY\n} from './actionTypes';\n\nReducerRegistry.register('features/settings', (state = {}, action) => {\n    switch (action.type) {\n    case SET_AUDIO_SETTINGS_VISIBILITY:\n        return {\n            ...state,\n            audioSettingsVisible: action.value\n        };\n    case SET_VIDEO_SETTINGS_VISIBILITY:\n        return {\n            ...state,\n            videoSettingsVisible: action.value\n        };\n    }\n\n    return state;\n});\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './constants';\nexport * from './functions';\n\nimport './reducer';\n","var defineProperty = require(\"./defineProperty\");\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    var ownKeys = Object.keys(source);\n\n    if (typeof Object.getOwnPropertySymbols === 'function') {\n      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n      }));\n    }\n\n    ownKeys.forEach(function (key) {\n      defineProperty(target, key, source[key]);\n    });\n  }\n\n  return target;\n}\n\nmodule.exports = _objectSpread;","/**\n * The command type for updating a participant's avatar ID.\n *\n * @type {string}\n */\nexport const AVATAR_ID_COMMAND = 'avatar-id';\n\n/**\n * The command type for updating a participant's avatar URL.\n *\n * @type {string}\n */\nexport const AVATAR_URL_COMMAND = 'avatar-url';\n\n/**\n * The command type for updating a participant's e-mail address.\n *\n * @type {string}\n */\nexport const EMAIL_COMMAND = 'email';\n\n/**\n * The name of the {@code JitsiConference} property which identifies the URL of\n * the conference represented by the {@code JitsiConference} instance.\n *\n * TODO It was introduced in a moment of desperation. Jitsi Meet SDK for Android\n * and iOS needs to deliver events from the JavaScript side where they originate\n * to the Java and Objective-C sides, respectively, where they are to be\n * handled. The URL of the {@code JitsiConference} was chosen as the identifier\n * because the Java and Objective-C sides join by URL through their respective\n * loadURL methods. But features/base/connection's {@code locationURL} is not\n * guaranteed at the time of this writing to match the {@code JitsiConference}\n * instance when the events are to be fired. Patching {@code JitsiConference}\n * from the outside is not cool but it should suffice for now.\n */\nexport const JITSI_CONFERENCE_URL_KEY = Symbol('url');\n\n/**\n * The supported remote video resolutions. The values are currently based on\n * available simulcast layers.\n *\n * @type {object}\n */\nexport const VIDEO_QUALITY_LEVELS = {\n    HIGH: 1080,\n    STANDARD: 360,\n    LOW: 180\n};\n","/*!\n  Copyright (c) 2015 Jed Watson.\n  Based on code that is Copyright 2013-2015, Facebook, Inc.\n  All rights reserved.\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar canUseDOM = !!(\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.document &&\n\t\twindow.document.createElement\n\t);\n\n\tvar ExecutionEnvironment = {\n\n\t\tcanUseDOM: canUseDOM,\n\n\t\tcanUseWorkers: typeof Worker !== 'undefined',\n\n\t\tcanUseEventListeners:\n\t\t\tcanUseDOM && !!(window.addEventListener || window.attachEvent),\n\n\t\tcanUseViewport: canUseDOM && !!window.screen\n\n\t};\n\n\tif (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\tdefine(function () {\n\t\t\treturn ExecutionEnvironment;\n\t\t});\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = ExecutionEnvironment;\n\t} else {\n\t\twindow.ExecutionEnvironment = ExecutionEnvironment;\n\t}\n\n}());\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { getFixedPlatformStyle } from '../../styles';\n\n/**\n * {@code AbstractContainer} component's property types.\n */\nexport type Props = {\n\n    /**\n     * An optional accessibility label to apply to the container root.\n     */\n    accessibilityLabel?: string,\n\n    /**\n     * Whether or not this element is an accessibility element.\n     */\n    accessible?: boolean,\n\n    /**\n     * React Elements to display within the component.\n     */\n    children: React$Node,\n\n    /**\n     * Class names of the component (for web).\n     */\n    className?: string,\n\n    /**\n     * The event handler/listener to be invoked when this\n     * {@code AbstractContainer} is clicked on Web or pressed on React\n     * Native. If {@code onClick} is defined and {@link touchFeedback} is\n     * undefined, {@code touchFeedback} is considered defined as\n     * {@code true}.\n     */\n    onClick?: ?Function,\n\n    /**\n     * The style (as in stylesheet) to be applied to this\n     * {@code AbstractContainer}.\n     */\n    style?: Array<?string> | Object,\n\n    /**\n     * If this instance is to provide visual feedback when touched, then\n     * {@code true}; otherwise, {@code false}. If {@code touchFeedback} is\n     * undefined and {@link onClick} is defined, {@code touchFeedback} is\n     * considered defined as {@code true}.\n     */\n    touchFeedback?: ?Function,\n\n    /**\n     * Color to display when clicked.\n     */\n    underlayColor?: string,\n\n    /**\n     * If this {@code AbstractContainer} is to be visible, then {@code true}\n     * or {@code false} if this instance is to be hidden or not rendered at\n     * all.\n     */\n    visible?: ?boolean\n};\n\n/**\n * Abstract (base) class for container of React {@link Component} children with\n * a style.\n *\n * @extends Component\n */\nexport default class AbstractContainer<P: Props> extends Component<P> {\n    /**\n     * Renders this {@code AbstractContainer} as a React {@code Component} of a\n     * specific type.\n     *\n     * @param {string|ReactClass} type - The type of the React {@code Component}\n     * which is to be rendered.\n     * @param {Object|undefined} props - The read-only React {@code Component}\n     * properties, if any, to render. If undefined, the props of this instance\n     * will be rendered.\n     * @protected\n     * @returns {ReactElement}\n     */\n    _render(type, props?: P) {\n        const {\n            children,\n            style,\n\n            /* eslint-disable no-unused-vars */\n\n            // The following properties are defined for the benefit of\n            // AbstractContainer and its extenders so they are to not be\n            // propagated.\n            touchFeedback,\n            visible,\n\n            /* eslint-enable no-unused-vars */\n\n            ...filteredProps\n        } = props || this.props;\n\n        const _style = getFixedPlatformStyle(style);\n\n        // $FlowFixMe\n        return React.createElement(type, {\n            style: _style,\n            ...filteredProps\n        }, children);\n    }\n}\n","/* @flow */\n\nimport AbstractContainer from '../AbstractContainer';\nimport type { Props } from '../AbstractContainer';\n\n/**\n * Represents a container of React/Web {@link Component} children with a style.\n *\n * @extends AbstractContainer\n */\nexport default class Container<P: Props> extends AbstractContainer<P> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { visible = true } = this.props;\n\n        return visible ? super._render('div') : null;\n    }\n}\n","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nvar defaultOptions = {\n  bindI18n: 'languageChanging languageChanged',\n  bindI18nStore: '',\n  // nsMode: 'fallback' // loop through all namespaces given to hook, HOC, render prop for key lookup\n  transEmptyNodeValue: '',\n  transSupportBasicHtmlNodes: true,\n  transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n  // hashTransKey: key => key // calculate a key for Trans component based on defaultValue\n  useSuspense: true\n};\nvar i18nInstance;\nvar hasUsedI18nextProvider;\nexport var I18nContext = React.createContext();\nexport function usedI18nextProvider(used) {\n  hasUsedI18nextProvider = used;\n}\nexport function getHasUsedI18nextProvider() {\n  return hasUsedI18nextProvider;\n}\nexport function setDefaults() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  defaultOptions = _objectSpread({}, defaultOptions, options);\n}\nexport function getDefaults() {\n  return defaultOptions;\n}\nexport var ReportNamespaces =\n/*#__PURE__*/\nfunction () {\n  function ReportNamespaces() {\n    _classCallCheck(this, ReportNamespaces);\n\n    this.usedNamespaces = {};\n  }\n\n  _createClass(ReportNamespaces, [{\n    key: \"addUsedNamespaces\",\n    value: function addUsedNamespaces(namespaces) {\n      var _this = this;\n\n      namespaces.forEach(function (ns) {\n        if (!_this.usedNamespaces[ns]) _this.usedNamespaces[ns] = true;\n      });\n    }\n  }, {\n    key: \"getUsedNamespaces\",\n    value: function getUsedNamespaces() {\n      return Object.keys(this.usedNamespaces);\n    }\n  }]);\n\n  return ReportNamespaces;\n}();\nexport function setI18n(instance) {\n  i18nInstance = instance;\n}\nexport function getI18n() {\n  return i18nInstance;\n}\nexport var initReactI18next = {\n  type: '3rdParty',\n  init: function init(instance) {\n    setDefaults(instance.options.react);\n    setI18n(instance);\n  }\n};\nexport function composeInitialProps(ForComponent) {\n  return function (ctx) {\n    return new Promise(function (resolve) {\n      var i18nInitialProps = getInitialProps();\n\n      if (ForComponent.getInitialProps) {\n        ForComponent.getInitialProps(ctx).then(function (componentsInitialProps) {\n          resolve(_objectSpread({}, componentsInitialProps, i18nInitialProps));\n        });\n      } else {\n        resolve(i18nInitialProps);\n      }\n    });\n  }; // Avoid async for now - so we do not need to pull in regenerator\n  // return async ctx => {\n  //   const componentsInitialProps = ForComponent.getInitialProps\n  //     ? await ForComponent.getInitialProps(ctx)\n  //     : {};\n  //   const i18nInitialProps = getInitialProps();\n  //   return {\n  //     ...componentsInitialProps,\n  //     ...i18nInitialProps,\n  //   };\n  // };\n}\nexport function getInitialProps() {\n  var i18n = getI18n();\n  var namespaces = i18n.reportNamespaces ? i18n.reportNamespaces.getUsedNamespaces() : [];\n  var ret = {};\n  var initialI18nStore = {};\n  i18n.languages.forEach(function (l) {\n    initialI18nStore[l] = {};\n    namespaces.forEach(function (ns) {\n      initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n    });\n  });\n  ret.initialI18nStore = initialI18nStore;\n  ret.initialLanguage = i18n.language;\n  return ret;\n}","export function warn() {\n  if (console && console.warn) {\n    var _console;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (typeof args[0] === 'string') args[0] = \"react-i18next:: \".concat(args[0]);\n\n    (_console = console).warn.apply(_console, args);\n  }\n}\nvar alreadyWarned = {};\nexport function warnOnce() {\n  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n\n  if (typeof args[0] === 'string' && alreadyWarned[args[0]]) return;\n  if (typeof args[0] === 'string') alreadyWarned[args[0]] = new Date();\n  warn.apply(void 0, args);\n} // not needed right now\n//\n// export function deprecated(...args) {\n//   if (process && process.env && (!process.env.NODE_ENV || process.env.NODE_ENV === 'development')) {\n//     if (typeof args[0] === 'string') args[0] = `deprecation warning -> ${args[0]}`;\n//     warnOnce(...args);\n//   }\n// }\n\nexport function loadNamespaces(i18n, ns, cb) {\n  i18n.loadNamespaces(ns, function () {\n    // delay ready if not yet initialized i18n instance\n    if (i18n.isInitialized) {\n      cb();\n    } else {\n      var initialized = function initialized() {\n        // due to emitter removing issue in i18next we need to delay remove\n        setTimeout(function () {\n          i18n.off('initialized', initialized);\n        }, 0);\n        cb();\n      };\n\n      i18n.on('initialized', initialized);\n    }\n  });\n}\nexport function hasLoadedNamespace(ns, i18n) {\n  if (!i18n.languages || !i18n.languages.length) {\n    warnOnce('i18n.languages were undefined or empty', i18n.languages);\n    return true;\n  }\n\n  var lng = i18n.languages[0];\n  var fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n  var lastLng = i18n.languages[i18n.languages.length - 1]; // we're in cimode so this shall pass\n\n  if (lng.toLowerCase() === 'cimode') return true;\n\n  var loadNotPending = function loadNotPending(l, n) {\n    var loadState = i18n.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n    return loadState === -1 || loadState === 2;\n  }; // loaded -> SUCCESS\n\n\n  if (i18n.hasResourceBundle(lng, ns)) return true; // were not loading at all -> SEMI SUCCESS\n\n  if (!i18n.services.backendConnector.backend) return true; // failed loading ns - but at least fallback is not pending -> SEMI SUCCESS\n\n  if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n  return false;\n}\nexport function getDisplayName(Component) {\n  return Component.displayName || Component.name || (typeof Component === 'string' && Component.length > 0 ? Component : 'Unknown');\n}","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport { useState, useEffect, useContext } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, getHasUsedI18nextProvider, I18nContext } from './context';\nimport { warnOnce, loadNamespaces, hasLoadedNamespace } from './utils';\nexport function useTranslation(ns) {\n  var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  // assert we have the needed i18nInstance\n  var i18nFromProps = props.i18n;\n\n  var _ref = getHasUsedI18nextProvider() ? useContext(I18nContext) || {} : {},\n      i18nFromContext = _ref.i18n,\n      defaultNSFromContext = _ref.defaultNS;\n\n  var i18n = i18nFromProps || i18nFromContext || getI18n();\n  if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n\n  if (!i18n) {\n    warnOnce('You will need pass in an i18next instance by using initReactI18next');\n    var retNotReady = [function (k) {\n      return k;\n    }, {}, true];\n\n    retNotReady.t = function (k) {\n      return k;\n    };\n\n    retNotReady.i18n = {};\n    retNotReady.ready = true;\n    return retNotReady;\n  }\n\n  var i18nOptions = _objectSpread({}, getDefaults(), i18n.options.react);\n\n  var _props$useSuspense = props.useSuspense,\n      useSuspense = _props$useSuspense === void 0 ? i18nOptions.useSuspense : _props$useSuspense; // prepare having a namespace\n\n  var namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n  namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation']; // report namespaces as used\n\n  if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces); // are we ready? yes if all namespaces in first language are loaded already (either with data or empty object on failed load)\n\n  var ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(function (n) {\n    return hasLoadedNamespace(n, i18n);\n  }); // binding t function to namespace (acts also as rerender trigger)\n\n  function getT() {\n    return {\n      t: i18n.getFixedT(null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0])\n    };\n  }\n\n  var _useState = useState(getT()),\n      _useState2 = _slicedToArray(_useState, 2),\n      t = _useState2[0],\n      setT = _useState2[1]; // seems we can't have functions as value -> wrap it in obj\n\n\n  useEffect(function () {\n    var isMounted = true;\n    var bindI18n = i18nOptions.bindI18n,\n        bindI18nStore = i18nOptions.bindI18nStore; // if not ready and not using suspense load the namespaces\n    // in side effect and do not call resetT if unmounted\n\n    if (!ready && !useSuspense) {\n      loadNamespaces(i18n, namespaces, function () {\n        if (isMounted) setT(getT());\n      });\n    }\n\n    function boundReset() {\n      if (isMounted) setT(getT());\n    } // bind events to trigger change, like languageChanged\n\n\n    if (bindI18n && i18n) i18n.on(bindI18n, boundReset);\n    if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset); // unbinding on unmount\n\n    return function () {\n      isMounted = false;\n      if (bindI18n && i18n) bindI18n.split(' ').forEach(function (e) {\n        return i18n.off(e, boundReset);\n      });\n      if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(function (e) {\n        return i18n.store.off(e, boundReset);\n      });\n    };\n  }, [namespaces.join()]); // re-run effect whenever list of namespaces changes\n\n  var ret = [t.t, i18n, ready];\n  ret.t = t.t;\n  ret.i18n = i18n;\n  ret.ready = ready; // return hook stuff if ready\n\n  if (ready) return ret; // not yet loaded namespaces -> load them -> and return if useSuspense option set false\n\n  if (!ready && !useSuspense) return ret; // not yet loaded namespaces -> load them -> and trigger suspense\n\n  throw new Promise(function (resolve) {\n    loadNamespaces(i18n, namespaces, function () {\n      setT(getT());\n      resolve();\n    });\n  });\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport React from 'react';\nimport { useTranslation } from './useTranslation';\nimport { getDisplayName } from './utils';\nexport function withTranslation(ns) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return function Extend(WrappedComponent) {\n    function I18nextWithTranslation(props, ref) {\n      var _useTranslation = useTranslation(ns, props),\n          _useTranslation2 = _slicedToArray(_useTranslation, 3),\n          t = _useTranslation2[0],\n          i18n = _useTranslation2[1],\n          ready = _useTranslation2[2];\n\n      var passDownProps = _objectSpread({}, props, {\n        t: t,\n        i18n: i18n,\n        tReady: ready\n      });\n\n      if (options.withRef && ref) {\n        passDownProps.ref = ref;\n      }\n\n      return React.createElement(WrappedComponent, passDownProps);\n    }\n\n    I18nextWithTranslation.displayName = \"withI18nextTranslation(\".concat(getDisplayName(WrappedComponent), \")\");\n    I18nextWithTranslation.WrappedComponent = WrappedComponent;\n    return options.withRef ? React.forwardRef(I18nextWithTranslation) : I18nextWithTranslation;\n  };\n}","import React from 'react';\nimport { I18nContext, usedI18nextProvider } from './context';\nexport function I18nextProvider(_ref) {\n  var i18n = _ref.i18n,\n      defaultNS = _ref.defaultNS,\n      children = _ref.children;\n  usedI18nextProvider(true);\n  return React.createElement(I18nContext.Provider, {\n    value: {\n      i18n: i18n,\n      defaultNS: defaultNS\n    }\n  }, children);\n}","export { Trans } from './Trans';\nexport { useTranslation } from './useTranslation';\nexport { withTranslation } from './withTranslation';\nexport { Translation } from './Translation';\nexport { I18nextProvider } from './I18nextProvider';\nexport { withSSR } from './withSSR';\nexport { useSSR } from './useSSR';\nexport { I18nContext, initReactI18next, setDefaults, getDefaults, setI18n, getI18n, composeInitialProps, getInitialProps } from './context';","// User invite statuses\n\n/**\n * Тhe status for a participant when it's invited to a conference.\n *\n * @type {string}\n */\nexport const INVITED = 'Invited';\n\n/**\n * Тhe status for a participant when a call has been initiated.\n *\n * @type {string}\n */\nexport const CALLING = 'calling';\n\n/**\n * Тhe status for a participant when the invite is received and its device(s)\n * are ringing.\n *\n * @type {string}\n */\nexport const RINGING = 'ringing';\n\n/**\n * A status for a participant that indicates the call is connected.\n *\n * @type {string}\n */\nexport const CONNECTED_USER = 'connected';\n\n/**\n * The status for a participant when the invitation is received but the user\n * has responded with busy message.\n *\n * @type {string}\n */\nexport const BUSY = 'busy';\n\n/**\n * The status for a participant when the invitation is rejected.\n *\n * @type {string}\n */\nexport const REJECTED = 'rejected';\n\n/**\n * The status for a participant when the invitation is ignored.\n *\n * @type {string}\n */\nexport const IGNORED = 'ignored';\n\n/**\n  * The status for a participant when the invitation is expired.\n *\n * @type {string}\n */\nexport const EXPIRED = 'expired';\n\n// Phone call statuses\n\n/**\n * A status for a participant that indicates the call is in process of\n * initialization.\n * NOTE: Currently used for phone numbers only.\n *\n * @type {string}\n */\nexport const INITIALIZING_CALL = 'Initializing Call';\n\n/**\n * A status for a participant that indicates the call is in process of\n * connecting.\n * NOTE: Currently used for phone numbers only.\n *\n * @type {string}\n */\nexport const CONNECTING = 'Connecting';\n\n/**\n * A status for a participant that indicates the call is in process of\n * connecting.\n * NOTE: Currently used for phone numbers only.\n *\n * @type {string}\n */\nexport const CONNECTING2 = 'Connecting*';\n\n\n/**\n * A status for a phone number participant that indicates the call is connected.\n *\n * @type {string}\n */\nexport const CONNECTED_PHONE_NUMBER = 'Connected';\n\n\n/**\n * A status for a participant that indicates the call is disconnected.\n * NOTE: Currently used for phone numbers only.\n *\n * @type {string}\n */\nexport const DISCONNECTED = 'Disconnected';\n\n/**\n * Maps the presence status values to i18n translation keys.\n *\n * @type {Object<String, String>}\n */\nexport const STATUS_TO_I18N_KEY = {\n    [INVITED]: 'presenceStatus.invited',\n    [RINGING]: 'presenceStatus.ringing',\n    [CALLING]: 'presenceStatus.calling',\n    [BUSY]: 'presenceStatus.busy',\n    [REJECTED]: 'presenceStatus.rejected',\n    [IGNORED]: 'presenceStatus.ignored',\n    [EXPIRED]: 'presenceStatus.expired',\n\n    [INITIALIZING_CALL]: 'presenceStatus.initializingCall',\n    [CONNECTING]: 'presenceStatus.connecting',\n    [CONNECTING2]: 'presenceStatus.connecting2',\n    [CONNECTED_PHONE_NUMBER]: 'presenceStatus.connected',\n    [CONNECTED_USER]: 'presenceStatus.connected',\n    [DISCONNECTED]: 'presenceStatus.disconnected'\n};\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { getParticipantById } from '../../base/participants';\nimport { Text } from '../../base/react';\nimport { connect } from '../../base/redux';\n\nimport { STATUS_TO_I18N_KEY } from '../constants';\nimport { presenceStatusDisabled } from '../functions';\n\n/**\n * The type of the React {@code Component} props of {@link PresenceLabel}.\n */\ntype Props = {\n\n    /**\n     * The current present status associated with the passed in participantID\n     * prop.\n     */\n    _presence: string,\n\n    /**\n     * Class name for the presence label.\n     */\n    className: string,\n\n    /**\n     * Default presence status that will be displayed if user's presence status\n     * is not available.\n     */\n    defaultPresence: string,\n\n    /**\n     * The ID of the participant whose presence status should display.\n     */\n    participantID: string,\n\n    /**\n     * Styles for the presence label.\n     */\n    style: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React {@code Component} for displaying the current presence status of a\n * participant.\n *\n * @extends Component\n */\nclass PresenceLabel extends Component<Props> {\n    /**\n     * The default values for {@code PresenceLabel} component's property types.\n     *\n     * @static\n     */\n    static defaultProps = {\n        _presence: ''\n    };\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const text = this._getPresenceText();\n\n        if (text === null) {\n            return null;\n        }\n\n        const { style, className } = this.props;\n\n        return (\n            <Text\n                className = { className }\n                { ...style }>\n                { text }\n            </Text>);\n    }\n\n    /**\n     * Returns the text associated with the current presence status.\n     *\n     * @returns {string}\n     */\n    _getPresenceText() {\n        const { _presence, t } = this.props;\n\n        if (!_presence) {\n            return null;\n        }\n\n        const i18nKey = STATUS_TO_I18N_KEY[_presence];\n\n        if (!i18nKey) { // fallback to status value\n            return _presence;\n        }\n\n        return t(i18nKey);\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code PresenceLabel}'s\n * props.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The React Component props passed to the associated\n * instance of {@code PresenceLabel}.\n * @private\n * @returns {{\n *     _presence: (string|undefined)\n * }}\n */\nfunction _mapStateToProps(state, ownProps) {\n    const participant = getParticipantById(state, ownProps.participantID);\n\n    return {\n        _presence: presenceStatusDisabled() ? ''\n            : participant?.presence || ownProps.defaultPresence\n\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(PresenceLabel));\n","// @flow\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Tells wether presence status should be displayed.\n *\n * @returns {boolean}\n */\nexport function presenceStatusDisabled() {\n    return Boolean(typeof interfaceConfig !== 'undefined' && interfaceConfig?.DISABLE_PRESENCE_STATUS);\n}\n","export * from './components';\nexport * from './constants';\n","// @flow\n\n/**\n * The type of (redux) action which signals that a connection disconnected.\n *\n * {\n *     type: CONNECTION_DISCONNECTED,\n *     connection: JitsiConnection,\n *     message: string\n * }\n */\nexport const CONNECTION_DISCONNECTED = 'CONNECTION_DISCONNECTED';\n\n/**\n * The type of (redux) action which signals that a connection was successfully\n * established.\n *\n * {\n *     type: CONNECTION_ESTABLISHED,\n *     connection: JitsiConnection,\n *     timeEstablished: number,\n * }\n */\nexport const CONNECTION_ESTABLISHED = 'CONNECTION_ESTABLISHED';\n\n/**\n * The type of (redux) action which signals that a connection failed.\n *\n * {\n *     type: CONNECTION_FAILED,\n *     connection: JitsiConnection,\n *     error: Object | string\n * }\n */\nexport const CONNECTION_FAILED = 'CONNECTION_FAILED';\n\n/**\n * The type of (redux) action which signals that a connection will connect.\n *\n * {\n *     type: CONNECTION_WILL_CONNECT,\n *     connection: JitsiConnection\n * }\n */\nexport const CONNECTION_WILL_CONNECT = 'CONNECTION_WILL_CONNECT';\n\n/**\n * The type of (redux) action which sets the location URL of the application,\n * connection, conference, etc.\n *\n * {\n *     type: SET_LOCATION_URL,\n *     locationURL: ?URL\n * }\n */\nexport const SET_LOCATION_URL = 'SET_LOCATION_URL';\n","// @flow\n\n/**\n * The type of the action which signals to add a new chat message.\n *\n * {\n *     type: ADD_MESSAGE,\n *     displayName: string\n *     hasRead: boolean,\n *     id: string,\n *     messageType: string,\n *     message: string,\n *     timestamp: string,\n * }\n */\nexport const ADD_MESSAGE = 'ADD_MESSAGE';\n\n/**\n * The type of the action which signals to clear messages in Redux.\n *\n * {\n *     type: CLEAR_MESSAGES\n * }\n */\nexport const CLEAR_MESSAGES = 'CLEAR_MESSAGES';\n\n/**\n * The type of the action which signals a send a chat message to everyone in the\n * conference.\n *\n * {\n *     type: SEND_MESSAGE,\n *     ignorePrivacy: boolean,\n *     message: string\n * }\n */\nexport const SEND_MESSAGE = 'SEND_MESSAGE';\n\n/**\n * The type of action which signals the initiation of sending of as private message to the\n * supplied recipient.\n *\n * {\n *     participant: Participant,\n *     type: SET_PRIVATE_MESSAGE_RECIPIENT\n * }\n */\nexport const SET_PRIVATE_MESSAGE_RECIPIENT = 'SET_PRIVATE_MESSAGE_RECIPIENT';\n\n/**\n * The type of the action which signals to toggle the display of the chat panel.\n *\n * {\n *     type: TOGGLE_CHAT\n * }\n */\nexport const TOGGLE_CHAT = 'TOGGLE_CHAT';\n","/**\n * Events fired from the remote control module through the EventEmitter.\n */\n\n/**\n * Notifies about remote control active session status changes.\n */\nexport const ACTIVE_CHANGED = 'active-changed';\n","import Postis from 'postis';\n\n/**\n * The default options for postis.\n *\n * @type {Object}\n */\nconst DEFAULT_POSTIS_OPTIONS = {\n    window: window.opener || window.parent\n};\n\n/**\n * The postis method used for all messages.\n *\n * @type {string}\n */\nconst POSTIS_METHOD_NAME = 'message';\n\n/**\n * Implements message transport using the postMessage API.\n */\nexport default class PostMessageTransportBackend {\n    /**\n     * Creates new PostMessageTransportBackend instance.\n     *\n     * @param {Object} options - Optional parameters for configuration of the\n     * transport.\n     */\n    constructor({ postisOptions } = {}) {\n        // eslint-disable-next-line new-cap\n        this.postis = Postis({\n            ...DEFAULT_POSTIS_OPTIONS,\n            ...postisOptions\n        });\n\n        this._receiveCallback = () => {\n            // Do nothing until a callback is set by the consumer of\n            // PostMessageTransportBackend via setReceiveCallback.\n        };\n\n        this.postis.listen(\n            POSTIS_METHOD_NAME,\n            message => this._receiveCallback(message));\n    }\n\n    /**\n     * Disposes the allocated resources.\n     *\n     * @returns {void}\n     */\n    dispose() {\n        this.postis.destroy();\n    }\n\n    /**\n     * Sends the passed message.\n     *\n     * @param {Object} message - The message to be sent.\n     * @returns {void}\n     */\n    send(message) {\n        this.postis.send({\n            method: POSTIS_METHOD_NAME,\n            params: message\n        });\n    }\n\n    /**\n     * Sets the callback for receiving data.\n     *\n     * @param {Function} callback - The new callback.\n     * @returns {void}\n     */\n    setReceiveCallback(callback) {\n        this._receiveCallback = callback;\n    }\n}\n","/**\n * The message type for events.\n *\n * @type {string}\n */\nexport const MESSAGE_TYPE_EVENT = 'event';\n\n/**\n * The message type for requests.\n *\n * @type {string}\n */\nexport const MESSAGE_TYPE_REQUEST = 'request';\n\n/**\n * The message type for responses.\n *\n * @type {string}\n */\nexport const MESSAGE_TYPE_RESPONSE = 'response';\n","import {\n    MESSAGE_TYPE_EVENT,\n    MESSAGE_TYPE_REQUEST,\n    MESSAGE_TYPE_RESPONSE\n} from './constants';\n\n/**\n* Stores the currnet transport backend that have to be used. Also implements\n* request/response mechanism.\n*/\nexport default class Transport {\n    /**\n     * Creates new instance.\n     *\n     * @param {Object} options - Optional parameters for configuration of the\n     * transport backend.\n     */\n    constructor({ backend } = {}) {\n        /**\n         * Maps an event name and listener that have been added to the Transport\n         * instance.\n         *\n         * @type {Map<string, Function>}\n         */\n        this._listeners = new Map();\n\n        /**\n         * The request ID counter used for the id property of the request. This\n         * property is used to match the responses with the request.\n         *\n         * @type {number}\n         */\n        this._requestID = 0;\n\n        /**\n         * Maps an IDs of the requests and handlers that will process the\n         * responses of those requests.\n         *\n         * @type {Map<number, Function>}\n         */\n        this._responseHandlers = new Map();\n\n        /**\n         * A set with the events and requests that were received but not\n         * processed by any listener. They are later passed on every new\n         * listener until they are processed.\n         *\n         * @type {Set<Object>}\n         */\n        this._unprocessedMessages = new Set();\n\n        /**\n         * Alias.\n         */\n        this.addListener = this.on;\n\n        if (backend) {\n            this.setBackend(backend);\n        }\n    }\n\n    /**\n     * Disposes the current transport backend.\n     *\n     * @returns {void}\n     */\n    _disposeBackend() {\n        if (this._backend) {\n            this._backend.dispose();\n            this._backend = null;\n        }\n    }\n\n    /**\n     * Handles incoming messages from the transport backend.\n     *\n     * @param {Object} message - The message.\n     * @returns {void}\n     */\n    _onMessageReceived(message) {\n        if (message.type === MESSAGE_TYPE_RESPONSE) {\n            const handler = this._responseHandlers.get(message.id);\n\n            if (handler) {\n                handler(message);\n                this._responseHandlers.delete(message.id);\n            }\n        } else if (message.type === MESSAGE_TYPE_REQUEST) {\n            this.emit('request', message.data, (result, error) => {\n                this._backend.send({\n                    type: MESSAGE_TYPE_RESPONSE,\n                    error,\n                    id: message.id,\n                    result\n                });\n            });\n        } else {\n            this.emit('event', message.data);\n        }\n    }\n\n    /**\n     * Disposes the allocated resources.\n     *\n     * @returns {void}\n     */\n    dispose() {\n        this._responseHandlers.clear();\n        this._unprocessedMessages.clear();\n        this.removeAllListeners();\n        this._disposeBackend();\n    }\n\n    /**\n     * Calls each of the listeners registered for the event named eventName, in\n     * the order they were registered, passing the supplied arguments to each.\n     *\n     * @param {string} eventName -  The name of the event.\n     * @returns {boolean} True if the event has been processed by any listener,\n     * false otherwise.\n     */\n    emit(eventName, ...args) {\n        const listenersForEvent = this._listeners.get(eventName);\n        let isProcessed = false;\n\n        if (listenersForEvent && listenersForEvent.size) {\n            listenersForEvent.forEach(listener => {\n                isProcessed = listener(...args) || isProcessed;\n            });\n        }\n\n        if (!isProcessed) {\n            this._unprocessedMessages.add(args);\n        }\n\n        return isProcessed;\n    }\n\n    /**\n     * Adds the listener function to the listeners collection for the event\n     * named eventName.\n     *\n     * @param {string} eventName -  The name of the event.\n     * @param {Function} listener - The listener that will be added.\n     * @returns {Transport} References to the instance of Transport class, so\n     * that calls can be chained.\n     */\n    on(eventName, listener) {\n        let listenersForEvent = this._listeners.get(eventName);\n\n        if (!listenersForEvent) {\n            listenersForEvent = new Set();\n            this._listeners.set(eventName, listenersForEvent);\n        }\n\n        listenersForEvent.add(listener);\n\n        this._unprocessedMessages.forEach(args => {\n            if (listener(...args)) {\n                this._unprocessedMessages.delete(args);\n            }\n        });\n\n        return this;\n    }\n\n    /**\n     * Removes all listeners, or those of the specified eventName.\n     *\n     * @param {string} [eventName] - The name of the event. If this parameter is\n     * not specified all listeners will be removed.\n     * @returns {Transport} References to the instance of Transport class, so\n     * that calls can be chained.\n     */\n    removeAllListeners(eventName) {\n        if (eventName) {\n            this._listeners.delete(eventName);\n        } else {\n            this._listeners.clear();\n        }\n\n        return this;\n    }\n\n    /**\n     * Removes the listener function from the listeners collection for the event\n     * named eventName.\n     *\n     * @param {string} eventName -  The name of the event.\n     * @param {Function} listener - The listener that will be removed.\n     * @returns {Transport} References to the instance of Transport class, so\n     * that calls can be chained.\n     */\n    removeListener(eventName, listener) {\n        const listenersForEvent = this._listeners.get(eventName);\n\n        if (listenersForEvent) {\n            listenersForEvent.delete(listener);\n        }\n\n        return this;\n    }\n\n    /**\n     * Sends the passed event.\n     *\n     * @param {Object} event - The event to be sent.\n     * @returns {void}\n     */\n    sendEvent(event = {}) {\n        if (this._backend) {\n            this._backend.send({\n                type: MESSAGE_TYPE_EVENT,\n                data: event\n            });\n        }\n    }\n\n    /**\n     * Sending request.\n     *\n     * @param {Object} request - The request to be sent.\n     * @returns {Promise}\n     */\n    sendRequest(request) {\n        if (!this._backend) {\n            return Promise.reject(new Error('No transport backend defined!'));\n        }\n\n        this._requestID++;\n\n        const id = this._requestID;\n\n        return new Promise((resolve, reject) => {\n            this._responseHandlers.set(id, ({ error, result }) => {\n                if (typeof result !== 'undefined') {\n                    resolve(result);\n\n                // eslint-disable-next-line no-negated-condition\n                } else if (typeof error !== 'undefined') {\n                    reject(error);\n                } else { // no response\n                    reject(new Error('Unexpected response format!'));\n                }\n            });\n\n            this._backend.send({\n                type: MESSAGE_TYPE_REQUEST,\n                data: request,\n                id\n            });\n        });\n    }\n\n    /**\n     * Changes the current backend transport.\n     *\n     * @param {Object} backend - The new transport backend that will be used.\n     * @returns {void}\n     */\n    setBackend(backend) {\n        this._disposeBackend();\n\n        this._backend = backend;\n        this._backend.setReceiveCallback(this._onMessageReceived.bind(this));\n    }\n}\n","// FIXME: change to '../API' when we update to webpack2. If we do this now all\n// files from API modules will be included in external_api.js.\nimport { API_ID } from '../API/constants';\nimport { getJitsiMeetGlobalNS } from '../../react/features/base/util';\n\nimport { PostMessageTransportBackend, Transport } from 'js-utils/transport';\n\nexport {\n    PostMessageTransportBackend,\n    Transport\n};\n\n/**\n * Option for the default low level transport.\n *\n * @type {Object}\n */\nconst postisOptions = {};\n\nif (typeof API_ID === 'number') {\n    postisOptions.scope = `jitsi_meet_external_api_${API_ID}`;\n}\n\n/**\n * The instance of Transport class that will be used by Jitsi Meet.\n *\n * @type {Transport}\n */\nlet transport;\n\n/**\n * Returns the instance of Transport class that will be used by Jitsi Meet.\n *\n * @returns {Transport}\n */\nexport function getJitsiMeetTransport() {\n    if (!transport) {\n        transport = new Transport({ backend: new PostMessageTransportBackend({ postisOptions }) });\n    }\n\n    return transport;\n}\n\n/**\n * Sets the transport to passed transport.\n *\n * @param {Object} externalTransportBackend - The new transport.\n * @returns {void}\n */\ngetJitsiMeetGlobalNS().setExternalTransportBackend = externalTransportBackend =>\n    transport.setBackend(externalTransportBackend);\n","\"use strict\";\n\nexports.__esModule = true;\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};","/* global $, APP, interfaceConfig */\n\nimport { getVerticalFilmstripVisibleAreaWidth, isFilmstripVisible } from '../../../react/features/filmstrip';\n\nconst Filmstrip = {\n    /**\n     * Returns the height of filmstrip\n     * @returns {number} height\n     */\n    getFilmstripHeight() {\n        // FIXME Make it more clear the getFilmstripHeight check is used in\n        // horizontal film strip mode for calculating how tall large video\n        // display should be.\n        if (isFilmstripVisible(APP.store) && !interfaceConfig.VERTICAL_FILMSTRIP) {\n            return $('.filmstrip').outerHeight();\n        }\n\n        return 0;\n    },\n\n    /**\n     * Returns the width of the vertical filmstip if the filmstrip is visible and 0 otherwise.\n     *\n     * @returns {number} - The width of the vertical filmstip if the filmstrip is visible and 0 otherwise.\n     */\n    getVerticalFilmstripWidth() {\n        return isFilmstripVisible(APP.store) ? getVerticalFilmstripVisibleAreaWidth() : 0;\n    },\n\n    /**\n     * Resizes thumbnails for tile view.\n     *\n     * @param {number} width - The new width of the thumbnails.\n     * @param {number} height - The new height of the thumbnails.\n     * @param {boolean} forceUpdate\n     * @returns {void}\n     */\n    resizeThumbnailsForTileView(width, height, forceUpdate = false) {\n        const thumbs = this._getThumbs(!forceUpdate);\n        const avatarSize = height / 2;\n\n        if (thumbs.localThumb) {\n            thumbs.localThumb.css({\n                'padding-top': '',\n                height: `${height}px`,\n                'min-height': `${height}px`,\n                'min-width': `${width}px`,\n                width: `${width}px`\n            });\n        }\n\n        if (thumbs.remoteThumbs) {\n            thumbs.remoteThumbs.css({\n                'padding-top': '',\n                height: `${height}px`,\n                'min-height': `${height}px`,\n                'min-width': `${width}px`,\n                width: `${width}px`\n            });\n        }\n\n        $('.avatar-container').css({\n            height: `${avatarSize}px`,\n            width: `${avatarSize}px`\n        });\n    },\n\n    /**\n     * Resizes thumbnails for horizontal view.\n     *\n     * @param {Object} dimensions - The new dimensions of the thumbnails.\n     * @param {boolean} forceUpdate\n     * @returns {void}\n     */\n    resizeThumbnailsForHorizontalView({ local = {}, remote = {} }, forceUpdate = false) {\n        const thumbs = this._getThumbs(!forceUpdate);\n\n        if (thumbs.localThumb) {\n            const { height, width } = local;\n            const avatarSize = height / 2;\n\n            thumbs.localThumb.css({\n                height: `${height}px`,\n                'min-height': `${height}px`,\n                'min-width': `${width}px`,\n                width: `${width}px`\n            });\n            $('#localVideoContainer > .avatar-container').css({\n                height: `${avatarSize}px`,\n                width: `${avatarSize}px`\n            });\n        }\n\n        if (thumbs.remoteThumbs) {\n            const { height, width } = remote;\n            const avatarSize = height / 2;\n\n            thumbs.remoteThumbs.css({\n                height: `${height}px`,\n                'min-height': `${height}px`,\n                'min-width': `${width}px`,\n                width: `${width}px`\n            });\n            $('#filmstripRemoteVideosContainer > span > .avatar-container').css({\n                height: `${avatarSize}px`,\n                width: `${avatarSize}px`\n            });\n        }\n    },\n\n    /**\n     * Resizes thumbnails for vertical view.\n     *\n     * @returns {void}\n     */\n    resizeThumbnailsForVerticalView() {\n        const thumbs = this._getThumbs(true);\n\n        if (thumbs.localThumb) {\n            const heightToWidthPercent = 100 / interfaceConfig.LOCAL_THUMBNAIL_RATIO;\n\n            thumbs.localThumb.css({\n                'padding-top': `${heightToWidthPercent}%`,\n                width: '',\n                height: '',\n                'min-width': '',\n                'min-height': ''\n            });\n            $('#localVideoContainer > .avatar-container').css({\n                height: '50%',\n                width: `${heightToWidthPercent / 2}%`\n            });\n        }\n\n        if (thumbs.remoteThumbs) {\n            const heightToWidthPercent = 100 / interfaceConfig.REMOTE_THUMBNAIL_RATIO;\n\n            thumbs.remoteThumbs.css({\n                'padding-top': `${heightToWidthPercent}%`,\n                width: '',\n                height: '',\n                'min-width': '',\n                'min-height': ''\n            });\n            $('#filmstripRemoteVideosContainer > span > .avatar-container').css({\n                height: '50%',\n                width: `${heightToWidthPercent / 2}%`\n            });\n        }\n    },\n\n    /**\n     * Returns thumbnails of the filmstrip\n     * @param onlyVisible\n     * @returns {object} thumbnails\n     */\n    _getThumbs(onlyVisible = false) {\n        let selector = 'span';\n\n        if (onlyVisible) {\n            selector += ':visible';\n        }\n\n        const localThumb = $('#localVideoContainer');\n        const remoteThumbs = $('#filmstripRemoteVideosContainer').children(selector);\n\n        // Exclude the local video container if it has been hidden.\n        if (localThumb.hasClass('hidden')) {\n            return { remoteThumbs };\n        }\n\n        return { remoteThumbs,\n            localThumb };\n\n    }\n};\n\nexport default Filmstrip;\n","/* global $, APP */\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\nimport { jitsiLocalStorage } from 'js-utils';\n\nimport {\n    NOTIFICATION_TIMEOUT,\n    showErrorNotification,\n    showNotification,\n    showWarningNotification\n} from '../../../react/features/notifications';\n\n/**\n * Flag for enabling/disabling popups.\n * @type {boolean}\n */\nlet popupEnabled = true;\n\n/**\n * Currently displayed two button dialog.\n * @type {null}\n */\nlet twoButtonDialog = null;\n\n/**\n * Generates html for dont show again checkbox.\n * @param {object} options options\n * @param {string} options.id the id of the checkbox.\n * @param {string} options.textKey the key for the text displayed next to\n * checkbox\n * @param {boolean} options.checked if true the checkbox is foing to be checked\n * by default.\n * @returns {string}\n */\nfunction generateDontShowCheckbox(options) {\n    if (!isDontShowAgainEnabled(options)) {\n        return '';\n    }\n\n    const checked\n        = options.checked === true ? 'checked' : '';\n\n\n    return `<br />\n        <label>\n            <input type='checkbox' ${checked} id='${options.id}' />\n            <span data-i18n='${options.textKey}'></span>\n        </label>`;\n}\n\n/**\n * Checks whether the dont show again checkbox was checked before.\n * @param {object} options - options for dont show again checkbox.\n * @param {string} options.id the id of the checkbox.\n * @param {string} options.localStorageKey the key for the local storage. if\n * not provided options.id will be used.\n * @returns {boolean} true if the dialog mustn't be displayed and\n * false otherwise.\n */\nfunction dontShowTheDialog(options) {\n    if (isDontShowAgainEnabled(options)) {\n        if (jitsiLocalStorage.getItem(options.localStorageKey || options.id)\n            === 'true') {\n            return true;\n        }\n    }\n\n    return false;\n}\n\n/**\n * Wraps the submit function to process the dont show again status and store\n * it.\n * @param {object} options - options for dont show again checkbox.\n * @param {string} options.id the id of the checkbox.\n * @param {Array} options.buttonValues The button values that will trigger\n * storing he checkbox value\n * @param {string} options.localStorageKey the key for the local storage. if\n * not provided options.id will be used.\n * @param {Function} submitFunction the submit function to be wrapped\n * @returns {Function} wrapped function\n */\nfunction dontShowAgainSubmitFunctionWrapper(options, submitFunction) {\n    if (isDontShowAgainEnabled(options)) {\n        return (...args) => {\n            logger.debug(args, options.buttonValues);\n\n            // args[1] is the value associated with the pressed button\n            if (!options.buttonValues || options.buttonValues.length === 0\n                || options.buttonValues.indexOf(args[1]) !== -1) {\n                const checkbox = $(`#${options.id}`);\n\n                if (checkbox.length) {\n                    jitsiLocalStorage.setItem(\n                        options.localStorageKey || options.id,\n                        checkbox.prop('checked'));\n                }\n            }\n            submitFunction(...args);\n        };\n    }\n\n    return submitFunction;\n\n}\n\n/**\n * Check whether dont show again checkbox is enabled or not.\n * @param {object} options - options for dont show again checkbox.\n * @returns {boolean} true if enabled and false if not.\n */\nfunction isDontShowAgainEnabled(options) {\n    return typeof options === 'object';\n}\n\nconst messageHandler = {\n    OK: 'dialog.OK',\n    CANCEL: 'dialog.Cancel',\n\n    /**\n     * Shows a message to the user with two buttons: first is given as a\n     * parameter and the second is Cancel.\n     *\n     * @param titleKey the key for the title of the message\n     * @param msgKey the key for the message\n     * @param msgString the text of the message\n     * @param persistent boolean value which determines whether the message is\n     *        persistent or not\n     * @param leftButton the fist button's text\n     * @param submitFunction function to be called on submit\n     * @param loadedFunction function to be called after the prompt is fully\n     *        loaded\n     * @param closeFunction function to be called after the prompt is closed\n     * @param focus optional focus selector or button index to be focused after\n     *        the dialog is opened\n     * @param defaultButton index of default button which will be activated when\n     *        the user press 'enter'. Indexed from 0.\n     * @param {object} dontShowAgain - options for dont show again checkbox.\n     * @param {string} dontShowAgain.id the id of the checkbox.\n     * @param {string} dontShowAgain.textKey the key for the text displayed\n     * next to checkbox\n     * @param {boolean} dontShowAgain.checked if true the checkbox is foing to\n     * be checked\n     * @param {Array} dontShowAgain.buttonValues The button values that will\n     * trigger storing the checkbox value\n     * @param {string} dontShowAgain.localStorageKey the key for the local\n     * storage. if not provided dontShowAgain.id will be used.\n     * @return the prompt that was created, or null\n     */\n    openTwoButtonDialog(options) {\n        const {\n            titleKey,\n            msgKey,\n            msgString,\n            leftButtonKey,\n            submitFunction,\n            loadedFunction,\n            closeFunction,\n            focus,\n            size,\n            defaultButton,\n            wrapperClass,\n            dontShowAgain\n        } = options;\n\n        let { classes } = options;\n\n        if (!popupEnabled || twoButtonDialog) {\n            return null;\n        }\n\n        if (dontShowTheDialog(dontShowAgain)) {\n            // Maybe we should pass some parameters here? I'm not sure\n            // and currently we don't need any parameters.\n            submitFunction();\n\n            return null;\n        }\n\n        const buttons = [];\n\n        const leftButton = leftButtonKey\n            ? APP.translation.generateTranslationHTML(leftButtonKey)\n            : APP.translation.generateTranslationHTML('dialog.Submit');\n\n        buttons.push({ title: leftButton,\n            value: true });\n\n        const cancelButton\n            = APP.translation.generateTranslationHTML('dialog.Cancel');\n\n        buttons.push({ title: cancelButton,\n            value: false });\n\n        let message = msgString;\n\n        if (msgKey) {\n            message = APP.translation.generateTranslationHTML(msgKey);\n        }\n        message += generateDontShowCheckbox(dontShowAgain);\n        classes = classes || this._getDialogClasses(size);\n        if (wrapperClass) {\n            classes.prompt += ` ${wrapperClass}`;\n        }\n\n        twoButtonDialog = $.prompt(message, {\n            title: this._getFormattedTitleString(titleKey),\n            persistent: false,\n            buttons,\n            defaultButton,\n            focus,\n            loaded: loadedFunction,\n            promptspeed: 0,\n            classes,\n            submit: dontShowAgainSubmitFunctionWrapper(dontShowAgain,\n                (e, v, m, f) => { // eslint-disable-line max-params\n                    twoButtonDialog = null;\n                    if (v && submitFunction) {\n                        submitFunction(e, v, m, f);\n                    }\n                }),\n            close(e, v, m, f) { // eslint-disable-line max-params\n                twoButtonDialog = null;\n                if (closeFunction) {\n                    closeFunction(e, v, m, f);\n                }\n            }\n        });\n        APP.translation.translateElement(twoButtonDialog);\n\n        return $.prompt.getApi();\n    },\n\n    /**\n     * Shows a message to the user with two buttons: first is given as a\n     * parameter and the second is Cancel.\n     *\n     * @param titleKey the key for the title of the message\n     * @param msgString the text of the message\n     * @param persistent boolean value which determines whether the message is\n     *        persistent or not\n     * @param buttons object with the buttons. The keys must be the name of the\n     *        button and value is the value that will be passed to\n     *        submitFunction\n     * @param submitFunction function to be called on submit\n     * @param loadedFunction function to be called after the prompt is fully\n     *        loaded\n     * @param closeFunction function to be called on dialog close\n     * @param {object} dontShowAgain - options for dont show again checkbox.\n     * @param {string} dontShowAgain.id the id of the checkbox.\n     * @param {string} dontShowAgain.textKey the key for the text displayed\n     * next to checkbox\n     * @param {boolean} dontShowAgain.checked if true the checkbox is foing to\n     * be checked\n     * @param {Array} dontShowAgain.buttonValues The button values that will\n     * trigger storing the checkbox value\n     * @param {string} dontShowAgain.localStorageKey the key for the local\n     * storage. if not provided dontShowAgain.id will be used.\n     */\n    openDialog(// eslint-disable-line max-params\n            titleKey,\n            msgString,\n            persistent,\n            buttons,\n            submitFunction,\n            loadedFunction,\n            closeFunction,\n            dontShowAgain) {\n        if (!popupEnabled) {\n            return;\n        }\n\n        if (dontShowTheDialog(dontShowAgain)) {\n            // Maybe we should pass some parameters here? I'm not sure\n            // and currently we don't need any parameters.\n            submitFunction();\n\n            return;\n        }\n\n        const args = {\n            title: this._getFormattedTitleString(titleKey),\n            persistent,\n            buttons,\n            defaultButton: 1,\n            promptspeed: 0,\n            loaded() {\n                if (loadedFunction) {\n                    // eslint-disable-next-line prefer-rest-params\n                    loadedFunction.apply(this, arguments);\n                }\n\n                // Hide the close button\n                if (persistent) {\n                    $('.jqiclose', this).hide();\n                }\n            },\n            submit: dontShowAgainSubmitFunctionWrapper(\n                dontShowAgain, submitFunction),\n            close: closeFunction,\n            classes: this._getDialogClasses()\n        };\n\n        if (persistent) {\n            args.closeText = '';\n        }\n\n        const dialog = $.prompt(\n            msgString + generateDontShowCheckbox(dontShowAgain), args);\n\n        APP.translation.translateElement(dialog);\n\n        return $.prompt.getApi();\n    },\n\n    /**\n     * Returns the formatted title string.\n     *\n     * @return the title string formatted as a div.\n     */\n    _getFormattedTitleString(titleKey) {\n        const $titleString = $('<h2>');\n\n        $titleString.addClass('aui-dialog2-header-main');\n        $titleString.attr('data-i18n', titleKey);\n\n        return $('<div>').append($titleString)\n            .html();\n    },\n\n    /**\n     * Returns the dialog css classes.\n     *\n     * @return the dialog css classes\n     */\n    _getDialogClasses(size = 'small') {\n        return {\n            box: '',\n            form: '',\n            prompt: `dialog aui-layer aui-dialog2 aui-dialog2-${size}`,\n            close: 'aui-hide',\n            fade: 'aui-blanket',\n            button: 'button-control',\n            message: 'aui-dialog2-content',\n            buttons: 'aui-dialog2-footer',\n            defaultButton: 'button-control_primary',\n            title: 'aui-dialog2-header'\n        };\n    },\n\n    /**\n     * Shows a dialog with different states to the user.\n     *\n     * @param statesObject object containing all the states of the dialog.\n     * @param options impromptu options\n     * @param translateOptions options passed to translation\n     */\n    openDialogWithStates(statesObject, options, translateOptions) {\n        if (!popupEnabled) {\n            return;\n        }\n        const { classes, size } = options;\n        const defaultClasses = this._getDialogClasses(size);\n\n        options.classes = Object.assign({}, defaultClasses, classes);\n        options.promptspeed = options.promptspeed || 0;\n\n        for (const state in statesObject) { // eslint-disable-line guard-for-in\n            const currentState = statesObject[state];\n\n            if (currentState.titleKey) {\n                currentState.title\n                    = this._getFormattedTitleString(currentState.titleKey);\n            }\n        }\n        const dialog = $.prompt(statesObject, options);\n\n        APP.translation.translateElement(dialog, translateOptions);\n\n        return $.prompt.getApi();\n    },\n\n    /**\n     * Opens new popup window for given <tt>url</tt> centered over current\n     * window.\n     *\n     * @param url the URL to be displayed in the popup window\n     * @param w the width of the popup window\n     * @param h the height of the popup window\n     * @param onPopupClosed optional callback function called when popup window\n     *        has been closed.\n     *\n     * @returns {object} popup window object if opened successfully or undefined\n     *          in case we failed to open it(popup blocked)\n     */\n    // eslint-disable-next-line max-params\n    openCenteredPopup(url, w, h, onPopupClosed) {\n        if (!popupEnabled) {\n            return;\n        }\n\n        const l = window.screenX + (window.innerWidth / 2) - (w / 2);\n        const t = window.screenY + (window.innerHeight / 2) - (h / 2);\n        const popup = window.open(\n            url, '_blank',\n            String(`top=${t}, left=${l}, width=${w}, height=${h}`));\n\n        if (popup && onPopupClosed) {\n            const pollTimer = window.setInterval(() => {\n                if (popup.closed !== false) {\n                    window.clearInterval(pollTimer);\n                    onPopupClosed();\n                }\n            }, 200);\n        }\n\n        return popup;\n    },\n\n    /**\n     * Shows an error dialog to the user.\n     *\n     * @param {object} props - The properties to pass to the\n     * showErrorNotification action.\n     */\n    showError(props) {\n        APP.store.dispatch(showErrorNotification(props));\n    },\n\n    /**\n     * Shows a warning dialog to the user.\n     *\n     * @param {object} props - The properties to pass to the\n     * showWarningNotification action.\n     */\n    showWarning(props) {\n        APP.store.dispatch(showWarningNotification(props));\n    },\n\n    /**\n     * Displays a notification about participant action.\n     * @param displayName the display name of the participant that is\n     * associated with the notification.\n     * @param displayNameKey the key from the language file for the display\n     * name. Only used if displayName is not provided.\n     * @param cls css class for the notification\n     * @param messageKey the key from the language file for the text of the\n     * message.\n     * @param messageArguments object with the arguments for the message.\n     * @param optional configurations for the notification (e.g. timeout)\n     */\n    participantNotification( // eslint-disable-line max-params\n            displayName,\n            displayNameKey,\n            cls,\n            messageKey,\n            messageArguments,\n            timeout = NOTIFICATION_TIMEOUT) {\n        APP.store.dispatch(showNotification({\n            descriptionArguments: messageArguments,\n            descriptionKey: messageKey,\n            titleKey: displayNameKey,\n            title: displayName\n        },\n        timeout));\n    },\n\n    /**\n     * Displays a notification.\n     *\n     * @param {string} titleKey - The key from the language file for the title\n     * of the notification.\n     * @param {string} messageKey - The key from the language file for the text\n     * of the message.\n     * @param {Object} messageArguments - The arguments for the message\n     * translation.\n     * @returns {void}\n     */\n    notify(titleKey, messageKey, messageArguments) {\n        this.participantNotification(\n            null, titleKey, null, messageKey, messageArguments);\n    },\n\n    enablePopups(enable) {\n        popupEnabled = enable;\n    },\n\n    /**\n     * Returns true if dialog is opened\n     * false otherwise\n     * @returns {boolean} isOpened\n     */\n    isDialogOpened() {\n        return Boolean($.prompt.getCurrentStateName());\n    }\n};\n\nexport default messageHandler;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n\nvar _CSSTransition = require('./CSSTransition');\n\nvar _CSSTransition2 = _interopRequireDefault(_CSSTransition);\n\nvar _ReplaceTransition = require('./ReplaceTransition');\n\nvar _ReplaceTransition2 = _interopRequireDefault(_ReplaceTransition);\n\nvar _TransitionGroup = require('./TransitionGroup');\n\nvar _TransitionGroup2 = _interopRequireDefault(_TransitionGroup);\n\nvar _Transition = require('./Transition');\n\nvar _Transition2 = _interopRequireDefault(_Transition);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n  Transition: _Transition2.default,\n  TransitionGroup: _TransitionGroup2.default,\n  ReplaceTransition: _ReplaceTransition2.default,\n  CSSTransition: _CSSTransition2.default\n};","// @flow\n\nimport { PureComponent } from 'react';\n\nexport type Props = {\n\n    /**\n     * Color of the (initials based) avatar, if needed.\n     */\n    color?: string,\n\n    /**\n     * Initials to be used to render the initials based avatars.\n     */\n    initials?: string,\n\n    /**\n     * Callback to signal the failure of the loading of the URL.\n     */\n    onAvatarLoadError?: Function,\n\n    /**\n     * Expected size of the avatar.\n     */\n    size?: number;\n\n    /**\n     * The URL of the avatar to render.\n     */\n    url?: ?string | Object\n};\n\n/**\n * Implements an abstract stateless avatar component that renders an avatar purely from what gets passed through\n * props.\n */\nexport default class AbstractStatelessAvatar<P: Props> extends PureComponent<P> {\n    /**\n     * Checks if the passed prop is a loaded icon or not.\n     *\n     * @param {string? | Object?} iconProp - The prop to check.\n     * @returns {boolean}\n     */\n    _isIcon(iconProp: ?string | ?Object): boolean {\n        return Boolean(iconProp) && (typeof iconProp === 'object' || typeof iconProp === 'function');\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Icon } from '../../../icons';\n\nimport AbstractStatelessAvatar, { type Props as AbstractProps } from '../AbstractStatelessAvatar';\n\ntype Props = AbstractProps & {\n\n    /**\n     * External class name passed through props.\n     */\n    className?: string,\n\n    /**\n     * The default avatar URL if we want to override the app bundled one (e.g. AlwaysOnTop)\n     */\n    defaultAvatar?: string,\n\n    /**\n     * ID of the component to be rendered.\n     */\n    id?: string,\n\n    /**\n     * One of the expected status strings (e.g. 'available') to render a badge on the avatar, if necessary.\n     */\n    status?: ?string\n};\n\n/**\n * Implements a stateless avatar component that renders an avatar purely from what gets passed through\n * props.\n */\nexport default class StatelessAvatar extends AbstractStatelessAvatar<Props> {\n    /**\n     * Implements {@code Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { initials, url } = this.props;\n\n        if (this._isIcon(url)) {\n            return (\n                <div\n                    className = { `${this._getAvatarClassName()} ${this._getBadgeClassName()}` }\n                    id = { this.props.id }\n                    style = { this._getAvatarStyle(this.props.color) }>\n                    <Icon\n                        size = '50%'\n                        src = { url } />\n                </div>\n            );\n        }\n\n        if (url) {\n            return (\n                <div className = { this._getBadgeClassName() }>\n                    <img\n                        className = { this._getAvatarClassName() }\n                        id = { this.props.id }\n                        onError = { this.props.onAvatarLoadError }\n                        src = { url }\n                        style = { this._getAvatarStyle() } />\n                </div>\n            );\n        }\n\n        if (initials) {\n            return (\n                <div\n                    className = { `${this._getAvatarClassName()} ${this._getBadgeClassName()}` }\n                    id = { this.props.id }\n                    style = { this._getAvatarStyle(this.props.color) }>\n                    <svg\n                        className = 'avatar-svg'\n                        viewBox = '0 0 100 100'\n                        xmlns = 'http://www.w3.org/2000/svg'\n                        xmlnsXlink = 'http://www.w3.org/1999/xlink'>\n                        <text\n                            dominantBaseline = 'central'\n                            fill = 'rgba(255,255,255,.6)'\n                            fontSize = '40pt'\n                            textAnchor = 'middle'\n                            x = '50'\n                            y = '50'>\n                            { initials }\n                        </text>\n                    </svg>\n                </div>\n            );\n        }\n\n        // default avatar\n        return (\n            <div className = { this._getBadgeClassName() }>\n                <img\n                    className = { this._getAvatarClassName('defaultAvatar') }\n                    id = { this.props.id }\n                    src = { this.props.defaultAvatar || 'images/avatar.png' }\n                    style = { this._getAvatarStyle() } />\n            </div>\n        );\n    }\n\n    /**\n     * Constructs a style object to be used on the avatars.\n     *\n     * @param {string?} color - The desired background color.\n     * @returns {Object}\n     */\n    _getAvatarStyle(color) {\n        const { size } = this.props;\n\n        return {\n            backgroundColor: color || undefined,\n            fontSize: size ? size * 0.5 : '180%',\n            height: size || '100%',\n            width: size || '100%'\n        };\n    }\n\n    /**\n     * Constructs a list of class names required for the avatar component.\n     *\n     * @param {string} additional - Any additional class to add.\n     * @returns {string}\n     */\n    _getAvatarClassName(additional) {\n        return `avatar ${additional || ''} ${this.props.className || ''}`;\n    }\n\n    /**\n     * Generates a class name to render a badge on the avatar, if necessary.\n     *\n     * @returns {string}\n     */\n    _getBadgeClassName() {\n        const { status } = this.props;\n\n        if (status) {\n            return `avatar-badge avatar-badge-${status}`;\n        }\n\n        return '';\n    }\n\n    _isIcon: (?string | ?Object) => boolean\n}\n","// @flow\n\nimport _ from 'lodash';\n\nconst AVATAR_COLORS = [\n    '232, 105, 156',\n    '255, 198, 115',\n    '128, 128, 255',\n    '105, 232, 194',\n    '234, 255, 128'\n];\n\nconst AVATAR_OPACITY = 0.4;\n\n/**\n * Generates the background color of an initials based avatar.\n *\n * @param {string?} initials - The initials of the avatar.\n * @returns {string}\n */\nexport function getAvatarColor(initials: ?string) {\n    let colorIndex = 0;\n\n    if (initials) {\n        let nameHash = 0;\n\n        for (const s of initials) {\n            nameHash += s.codePointAt(0);\n        }\n\n        colorIndex = nameHash % AVATAR_COLORS.length;\n    }\n\n    return `rgba(${AVATAR_COLORS[colorIndex]}, ${AVATAR_OPACITY})`;\n}\n\n/**\n * Generates initials for a simple string.\n *\n * @param {string?} s - The string to generate initials for.\n * @returns {string?}\n */\nexport function getInitials(s: ?string) {\n    // We don't want to use the domain part of an email address, if it is one\n    const initialsBasis = _.split(s, '@')[0];\n    const words = _.words(initialsBasis);\n    let initials = '';\n\n    for (const w of words) {\n        (initials.length < 2) && (initials += w.substr(0, 1).toUpperCase());\n    }\n\n    return initials;\n}\n","// @flow\n\nimport React, { PureComponent } from 'react';\n\nimport { IconShareDesktop } from '../../icons';\nimport { getParticipantById } from '../../participants';\nimport { connect } from '../../redux';\n\nimport { getAvatarColor, getInitials } from '../functions';\n\nimport { StatelessAvatar } from '.';\n\nexport type Props = {\n\n    /**\n     * The string we base the initials on (this is generated from a list of precendences).\n     */\n    _initialsBase: ?string,\n\n    /**\n     * An URL that we validated that it can be loaded.\n     */\n    _loadableAvatarUrl: ?string,\n\n    /**\n     * A prop to maintain compatibility with web.\n     */\n    className?: string,\n\n    /**\n     * A string to override the initials to generate a color of. This is handy if you don't want to make\n     * the background color match the string that the initials are generated from.\n     */\n    colorBase?: string,\n\n    /**\n     * Display name of the entity to render an avatar for (if any). This is handy when we need\n     * an avatar for a non-participasnt entity (e.g. a recent list item).\n     */\n    displayName?: string,\n\n    /**\n     * ID of the element, if any.\n     */\n    id?: string,\n\n    /**\n     * The ID of the participant to render an avatar for (if it's a participant avatar).\n     */\n    participantId?: string,\n\n    /**\n     * The size of the avatar.\n     */\n    size: number,\n\n    /**\n     * One of the expected status strings (e.g. 'available') to render a badge on the avatar, if necessary.\n     */\n    status?: ?string,\n\n    /**\n     * URL of the avatar, if any.\n     */\n    url: ?string,\n}\n\ntype State = {\n    avatarFailed: boolean\n}\n\nexport const DEFAULT_SIZE = 65;\n\n/**\n * Implements a class to render avatars in the app.\n */\nclass Avatar<P: Props> extends PureComponent<P, State> {\n    /**\n     * Instantiates a new {@code Component}.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        this.state = {\n            avatarFailed: false\n        };\n\n        this._onAvatarLoadError = this._onAvatarLoadError.bind(this);\n    }\n\n    /**\n     * Implements {@code Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: P) {\n        if (prevProps.url !== this.props.url) {\n\n            // URI changed, so we need to try to fetch it again.\n            // Eslint doesn't like this statement, but based on the React doc, it's safe if it's\n            // wrapped in a condition: https://reactjs.org/docs/react-component.html#componentdidupdate\n\n            // eslint-disable-next-line react/no-did-update-set-state\n            this.setState({\n                avatarFailed: false\n            });\n        }\n    }\n\n    /**\n     * Implements {@code Componenr#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const {\n            _initialsBase,\n            _loadableAvatarUrl,\n            className,\n            colorBase,\n            id,\n            size,\n            status,\n            url\n        } = this.props;\n        const { avatarFailed } = this.state;\n\n        const avatarProps = {\n            className,\n            color: undefined,\n            id,\n            initials: undefined,\n            onAvatarLoadError: undefined,\n            size,\n            status,\n            url: undefined\n        };\n\n        // _loadableAvatarUrl is validated that it can be loaded, but uri (if present) is not, so\n        // we still need to do a check for that. And an explicitly provided URI is higher priority than\n        // an avatar URL anyhow.\n        const effectiveURL = (!avatarFailed && url) || _loadableAvatarUrl;\n\n        if (effectiveURL) {\n            avatarProps.onAvatarLoadError = this._onAvatarLoadError;\n            avatarProps.url = effectiveURL;\n        }\n\n        const initials = getInitials(_initialsBase);\n\n        if (initials) {\n            avatarProps.color = getAvatarColor(colorBase || _initialsBase);\n            avatarProps.initials = initials;\n        }\n\n        return (\n            <StatelessAvatar\n                { ...avatarProps } />\n        );\n    }\n\n    _onAvatarLoadError: () => void;\n\n    /**\n     * Callback to handle the error while loading of the avatar URI.\n     *\n     * @returns {void}\n     */\n    _onAvatarLoadError() {\n        this.setState({\n            avatarFailed: true\n        });\n    }\n}\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the component.\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const { colorBase, displayName, participantId } = ownProps;\n    const _participant: ?Object = participantId && getParticipantById(state, participantId);\n    const _initialsBase = _participant?.name ?? displayName;\n    const screenShares = state['features/video-layout'].screenShares || [];\n\n    let _loadableAvatarUrl = _participant?.loadableAvatarUrl;\n\n    if (participantId && screenShares.includes(participantId)) {\n        _loadableAvatarUrl = IconShareDesktop;\n    }\n\n    return {\n        _initialsBase,\n        _loadableAvatarUrl,\n        colorBase: !colorBase && _participant ? _participant.id : colorBase\n    };\n}\n\nexport default connect(_mapStateToProps)(Avatar);\n","// @flow\n\nexport * from './components';\nexport * from './functions';\n","// @flow\n\n/**\n * Resets the state of calendar integration so stored events and selected\n * calendar type are cleared.\n *\n * {\n *     type: CLEAR_CALENDAR_INTEGRATION\n * }\n */\nexport const CLEAR_CALENDAR_INTEGRATION = 'CLEAR_CALENDAR_INTEGRATION';\n\n/**\n * Action to refresh (re-fetch) the entry list.\n *\n * {\n *     type: REFRESH_CALENDAR,\n *     forcePermission: boolean,\n *     isInteractive: boolean\n * }\n */\nexport const REFRESH_CALENDAR = 'REFRESH_CALENDAR';\n\n/**\n * Action to signal that calendar access has already been requested since the\n * app started, so no new request should be done unless the user explicitly\n * tries to refresh the calendar view.\n *\n * {\n *     type: SET_CALENDAR_AUTHORIZATION,\n *     authorization: ?string\n * }\n */\nexport const SET_CALENDAR_AUTHORIZATION = 'SET_CALENDAR_AUTHORIZATION';\n\n/**\n * Action to update the last error that occurred while trying to authenticate\n * with or fetch data from the calendar integration.\n *\n * {\n *     type: SET_CALENDAR_ERROR,\n *     error: ?Object\n * }\n */\nexport const SET_CALENDAR_ERROR = 'SET_CALENDAR_ERROR';\n\n/**\n * Action to update the current calendar entry list in the store.\n *\n * {\n *     type: SET_CALENDAR_EVENTS,\n *     events: Array<Object>\n * }\n */\nexport const SET_CALENDAR_EVENTS = 'SET_CALENDAR_EVENTS';\n\n/**\n * Action to update calendar type to be used for web.\n *\n * {\n *     type: SET_CALENDAR_INTEGRATION,\n *     integrationReady: boolean,\n *     integrationType: string\n * }\n */\nexport const SET_CALENDAR_INTEGRATION = 'SET_CALENDAR_INTEGRATION';\n\n/**\n * The type of Redux action which changes Calendar API auth state.\n *\n * {\n *     type: SET_CALENDAR_AUTH_STATE\n * }\n * @public\n */\nexport const SET_CALENDAR_AUTH_STATE = 'SET_CALENDAR_AUTH_STATE';\n\n/**\n * The type of Redux action which changes Calendar Profile email state.\n *\n * {\n *     type: SET_CALENDAR_PROFILE_EMAIL,\n *     email: string\n * }\n * @public\n */\nexport const SET_CALENDAR_PROFILE_EMAIL = 'SET_CALENDAR_PROFILE_EMAIL';\n\n/**\n * The type of Redux action which denotes whether a request is in flight to get\n * updated calendar events.\n *\n * {\n *     type: SET_LOADING_CALENDAR_EVENTS,\n *     isLoadingEvents: string\n * }\n * @public\n */\nexport const SET_LOADING_CALENDAR_EVENTS\n    = 'SET_LOADING_CALENDAR_EVENTS';\n","// @flow\n\n/**\n * An enumeration of support calendar integration types.\n *\n * @enum {string}\n */\nexport const CALENDAR_TYPE = {\n    GOOGLE: 'google',\n    MICROSOFT: 'microsoft'\n};\n\n/**\n * An enumeration of known errors that can occur while interacting with the\n * calendar integration.\n *\n * @enum {string}\n */\nexport const ERRORS = {\n    AUTH_FAILED: 'sign_in_failed',\n    GOOGLE_APP_MISCONFIGURED: 'idpiframe_initialization_failed'\n};\n\n/**\n * The number of days to fetch.\n */\nexport const FETCH_END_DAYS = 10;\n\n/**\n * The number of days to go back when fetching.\n */\nexport const FETCH_START_DAYS = -1;\n\n/**\n * The max number of events to fetch from the calendar.\n */\nexport const MAX_LIST_LENGTH = 10;\n","// @flow\n\nimport md5 from 'js-md5';\n\nimport { setCalendarEvents } from './actions';\nimport { APP_LINK_SCHEME, parseURIString } from '../base/util';\nimport { MAX_LIST_LENGTH } from './constants';\n\nconst ALLDAY_EVENT_LENGTH = 23 * 60 * 60 * 1000;\n\n/**\n * Returns true of the calendar entry is to be displayed in the app, false\n * otherwise.\n *\n * @param {Object} entry - The calendar entry.\n * @returns {boolean}\n */\nfunction _isDisplayableCalendarEntry(entry) {\n    // Entries are displayable if:\n    //   - Ends in the future (future or ongoing events)\n    //   - Is not an all day event and there is only one attendee (these events\n    //     are usually placeholder events that don't need to be shown.)\n    return entry.endDate > Date.now()\n        && !((entry.allDay\n                || entry.endDate - entry.startDate > ALLDAY_EVENT_LENGTH)\n                    && (!entry.attendees || entry.attendees.length < 2));\n}\n\n/**\n * Updates the calendar entries in redux when new list is received. The feature\n * calendar-sync doesn't display all calendar events, it displays unique\n * title, URL, and start time tuples, and it doesn't display subsequent\n * occurrences of recurring events, and the repetitions of events coming from\n * multiple calendars.\n *\n * XXX The function's {@code this} is the redux store.\n *\n * @param {Array<CalendarEntry>} events - The new event list.\n * @private\n * @returns {void}\n */\nexport function _updateCalendarEntries(events: Array<Object>) {\n    if (!events || !events.length) {\n        return;\n    }\n\n    // eslint-disable-next-line no-invalid-this\n    const { dispatch, getState } = this;\n    const knownDomains = getState()['features/base/known-domains'];\n    const entryMap = new Map();\n\n    for (const event of events) {\n        const entry = _parseCalendarEntry(event, knownDomains);\n\n        if (entry && _isDisplayableCalendarEntry(entry)) {\n            // As was stated above, we don't display subsequent occurrences of\n            // recurring events, and the repetitions of events coming from\n            // multiple calendars.\n            const key = md5.hex(JSON.stringify([\n\n                // Obviously, we want to display different conference/meetings\n                // URLs. URLs are the very reason why we implemented the feature\n                // calendar-sync in the first place.\n                entry.url,\n\n                // We probably want to display one and the same URL to people if\n                // they have it under different titles in their Calendar.\n                // Because maybe they remember the title of the meeting, not the\n                // URL so they expect to see the title without realizing that\n                // they have the same URL already under a different title.\n                entry.title,\n\n                // XXX Eventually, given that the URL and the title are the\n                // same, what sets one event apart from another is the start\n                // time of the day (note the use of toTimeString() bellow)! The\n                // day itself is not important because we don't want multiple\n                // occurrences of a recurring event or repetitions of an even\n                // from multiple calendars.\n                new Date(entry.startDate).toTimeString()\n            ]));\n            const existingEntry = entryMap.get(key);\n\n            // We want only the earliest occurrence (which hasn't ended in the\n            // past, that is) of a recurring event.\n            if (!existingEntry || existingEntry.startDate > entry.startDate) {\n                entryMap.set(key, entry);\n            }\n        }\n    }\n\n    dispatch(\n        setCalendarEvents(\n            Array.from(entryMap.values())\n                .sort((a, b) => a.startDate - b.startDate)\n                .slice(0, MAX_LIST_LENGTH)));\n}\n\n/**\n * Checks a string against a positive pattern and a negative pattern. Returns\n * the string if it matches the positive pattern and doesn't provide any match\n * against the negative pattern. Null otherwise.\n *\n * @param {string} str - The string to check.\n * @param {string} positivePattern - The positive pattern.\n * @param {string} negativePattern - The negative pattern.\n * @returns {string}\n */\nfunction _checkPattern(str, positivePattern, negativePattern) {\n    const positiveRegExp = new RegExp(positivePattern, 'gi');\n    let positiveMatch = positiveRegExp.exec(str);\n\n    while (positiveMatch !== null) {\n        const url = positiveMatch[0];\n\n        if (!new RegExp(negativePattern, 'gi').exec(url)) {\n            return url;\n        }\n\n        positiveMatch = positiveRegExp.exec(str);\n    }\n}\n\n/**\n * Updates the calendar entries in Redux when new list is received.\n *\n * @param {Object} event - An event returned from the native calendar.\n * @param {Array<string>} knownDomains - The known domain list.\n * @private\n * @returns {CalendarEntry}\n */\nfunction _parseCalendarEntry(event, knownDomains) {\n    if (event) {\n        const url = _getURLFromEvent(event, knownDomains);\n        const startDate = Date.parse(event.startDate);\n        const endDate = Date.parse(event.endDate);\n\n        // we want to hide all events that\n        // - has no start or end date\n        // - for web, if there is no url and we cannot edit the event (has\n        // no calendarId)\n        if (isNaN(startDate)\n            || isNaN(endDate)\n            || (navigator.product !== 'ReactNative'\n                    && !url\n                    && !event.calendarId)) {\n            // Ignore the event.\n        } else {\n            return {\n                allDay: event.allDay,\n                attendees: event.attendees,\n                calendarId: event.calendarId,\n                endDate,\n                id: event.id,\n                startDate,\n                title: event.title,\n                url\n            };\n        }\n    }\n\n    return null;\n}\n\n/**\n * Retrieves a Jitsi Meet URL from an event if present.\n *\n * @param {Object} event - The event to parse.\n * @param {Array<string>} knownDomains - The known domain names.\n * @private\n * @returns {string}\n */\nfunction _getURLFromEvent(event, knownDomains) {\n    const linkTerminatorPattern = '[^\\\\s<>$]';\n    const urlRegExp\n        = `http(s)?://(${knownDomains.join('|')})/${linkTerminatorPattern}+`;\n    const schemeRegExp = `${APP_LINK_SCHEME}${linkTerminatorPattern}+`;\n    const excludePattern = '/static/';\n    const fieldsToSearch = [\n        event.title,\n        event.url,\n        event.location,\n        event.notes,\n        event.description\n    ];\n\n    for (const field of fieldsToSearch) {\n        if (typeof field === 'string') {\n            const match\n                = _checkPattern(field, urlRegExp, excludePattern)\n                || _checkPattern(field, schemeRegExp, excludePattern);\n\n            if (match) {\n                const url = parseURIString(match);\n\n                if (url) {\n                    return url.toString();\n                }\n            }\n        }\n    }\n\n    return null;\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    getCalendarEntries,\n    googleApi,\n    loadGoogleAPI,\n    signIn,\n    updateCalendarEvent,\n    updateProfile\n} from '../../google-api';\n\n/**\n * A stateless collection of action creators that implements the expected\n * interface for interacting with the Google API in order to get calendar data.\n *\n * @type {Object}\n */\nexport const googleCalendarApi = {\n    /**\n     * Retrieves the current calendar events.\n     *\n     * @param {number} fetchStartDays - The number of days to go back\n     * when fetching.\n     * @param {number} fetchEndDays - The number of days to fetch.\n     * @returns {function(): Promise<CalendarEntries>}\n     */\n    getCalendarEntries,\n\n    /**\n     * Returns the email address for the currently logged in user.\n     *\n     * @returns {function(Dispatch<any>): Promise<string|never>}\n     */\n    getCurrentEmail() {\n        return updateProfile();\n    },\n\n    /**\n     * Initializes the google api if needed.\n     *\n     * @returns {function(Dispatch<any>, Function): Promise<void>}\n     */\n    load() {\n        return (dispatch: Dispatch<any>) => dispatch(loadGoogleAPI());\n    },\n\n    /**\n     * Prompts the participant to sign in to the Google API Client Library.\n     *\n     * @returns {function(Dispatch<any>): Promise<string|never>}\n     */\n    signIn,\n\n    /**\n     * Returns whether or not the user is currently signed in.\n     *\n     * @returns {function(): Promise<boolean>}\n     */\n    _isSignedIn() {\n        return () => googleApi.isSignedIn();\n    },\n\n    /**\n     * Updates calendar event by generating new invite URL and editing the event\n     * adding some descriptive text and location.\n     *\n     * @param {string} id - The event id.\n     * @param {string} calendarId - The id of the calendar to use.\n     * @param {string} location - The location to save to the event.\n     * @returns {function(Dispatch<any>): Promise<string|never>}\n     */\n    updateCalendarEvent\n};\n","// @flow\n\nimport { Client } from '@microsoft/microsoft-graph-client';\nimport rs from 'jsrsasign';\nimport type { Dispatch } from 'redux';\n\nimport { createDeferred } from '../../../../modules/util/helpers';\n\nimport { parseStandardURIString, parseURLParams } from '../../base/util';\nimport { getShareInfoText } from '../../invite';\n\nimport { setCalendarAPIAuthState } from '../actions';\n\nimport { findWindows } from 'windows-iana';\n\n/**\n * Constants used for interacting with the Microsoft API.\n *\n * @private\n * @type {object}\n */\nconst MS_API_CONFIGURATION = {\n    /**\n     * The URL to use when authenticating using Microsoft API.\n     * @type {string}\n     */\n    AUTH_ENDPOINT:\n        'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?',\n\n    CALENDAR_ENDPOINT: '/me/calendars',\n\n    /**\n     * The Microsoft API scopes to request access for calendar.\n     *\n     * @type {string}\n     */\n    MS_API_SCOPES: 'openid profile Calendars.ReadWrite',\n\n    /**\n     * See https://docs.microsoft.com/en-us/azure/active-directory/develop/\n     * v2-oauth2-implicit-grant-flow#send-the-sign-in-request. This value is\n     * needed for passing in the proper domain_hint value when trying to refresh\n     * a token silently.\n     *\n     *\n     * @type {string}\n     */\n    MS_CONSUMER_TENANT: '9188040d-6c67-4c5b-b112-36a304b66dad',\n\n    /**\n     * The redirect URL to be used by the Microsoft API on successful\n     * authentication.\n     *\n     * @type {string}\n     */\n    REDIRECT_URI: `${window.location.origin}/static/msredirect.html`\n};\n\n/**\n * Store the window from an auth request. That way it can be reused if a new\n * request comes in and it can be used to indicate a request is in progress.\n *\n * @private\n * @type {Object|null}\n */\nlet popupAuthWindow = null;\n\n/**\n * A stateless collection of action creators that implements the expected\n * interface for interacting with the Microsoft API in order to get calendar\n * data.\n *\n * @type {Object}\n */\nexport const microsoftCalendarApi = {\n    /**\n     * Retrieves the current calendar events.\n     *\n     * @param {number} fetchStartDays - The number of days to go back\n     * when fetching.\n     * @param {number} fetchEndDays - The number of days to fetch.\n     * @returns {function(Dispatch<any>, Function): Promise<CalendarEntries>}\n     */\n    getCalendarEntries(fetchStartDays: ?number, fetchEndDays: ?number) {\n        return (dispatch: Dispatch<any>, getState: Function): Promise<*> => {\n            const state = getState()['features/calendar-sync'] || {};\n            const token = state.msAuthState && state.msAuthState.accessToken;\n\n            if (!token) {\n                return Promise.reject('Not authorized, please sign in!');\n            }\n\n            const client = Client.init({\n                authProvider: done => done(null, token)\n            });\n\n            return client\n                .api(MS_API_CONFIGURATION.CALENDAR_ENDPOINT)\n                .get()\n                .then(response => {\n                    const calendarIds = response.value.map(en => en.id);\n                    const getEventsPromises = calendarIds.map(id =>\n                        requestCalendarEvents(\n                            client, id, fetchStartDays, fetchEndDays));\n\n                    return Promise.all(getEventsPromises);\n                })\n\n                // get .value of every element from the array of results,\n                // which is an array of events and flatten it to one array\n                // of events\n                .then(result => [].concat(...result))\n                .then(entries => entries.map(e => formatCalendarEntry(e)));\n        };\n    },\n\n    /**\n     * Returns the email address for the currently logged in user.\n     *\n     * @returns {function(Dispatch<*, Function>): Promise<string>}\n     */\n    getCurrentEmail(): Function {\n        return (dispatch: Dispatch<any>, getState: Function) => {\n            const { msAuthState = {} }\n                = getState()['features/calendar-sync'] || {};\n            const email = msAuthState.userSigninName || '';\n\n            return Promise.resolve(email);\n        };\n    },\n\n    /**\n     * Sets the application ID to use for interacting with the Microsoft API.\n     *\n     * @returns {function(): Promise<void>}\n     */\n    load(): Function {\n        return () => Promise.resolve();\n    },\n\n    /**\n     * Prompts the participant to sign in to the Microsoft API Client Library.\n     *\n     * @returns {function(Dispatch<any>, Function): Promise<void>}\n     */\n    signIn(): Function {\n        return (dispatch: Dispatch<any>, getState: Function) => {\n            // Ensure only one popup window at a time.\n            if (popupAuthWindow) {\n                popupAuthWindow.focus();\n\n                return Promise.reject('Sign in already in progress.');\n            }\n\n            const signInDeferred = createDeferred();\n\n            const guids = {\n                authState: generateGuid(),\n                authNonce: generateGuid()\n            };\n\n            dispatch(setCalendarAPIAuthState(guids));\n\n            const { microsoftApiApplicationClientID }\n                = getState()['features/base/config'];\n            const authUrl = getAuthUrl(\n                microsoftApiApplicationClientID,\n                guids.authState,\n                guids.authNonce);\n            const h = 600;\n            const w = 480;\n\n            popupAuthWindow = window.open(\n                authUrl,\n                'Auth M$',\n                `width=${w}, height=${h}, top=${\n                    (screen.height / 2) - (h / 2)}, left=${\n                    (screen.width / 2) - (w / 2)}`);\n\n            const windowCloseCheck = setInterval(() => {\n                if (popupAuthWindow && popupAuthWindow.closed) {\n                    signInDeferred.reject(\n                        'Popup closed before completing auth.');\n                    popupAuthWindow = null;\n                    window.removeEventListener('message', handleAuth);\n                    clearInterval(windowCloseCheck);\n                } else if (!popupAuthWindow) {\n                    // This case probably happened because the user completed\n                    // auth.\n                    clearInterval(windowCloseCheck);\n                }\n            }, 500);\n\n            /**\n             * Callback with scope access to other variables that are part of\n             * the sign in request.\n             *\n             * @param {Object} event - The event from the post message.\n             * @private\n             * @returns {void}\n             */\n            function handleAuth({ data }) {\n                if (!data || data.type !== 'ms-login') {\n                    return;\n                }\n\n                window.removeEventListener('message', handleAuth);\n\n                popupAuthWindow && popupAuthWindow.close();\n                popupAuthWindow = null;\n\n                const params = getParamsFromHash(data.url);\n                const tokenParts = getValidatedTokenParts(\n                    params, guids, microsoftApiApplicationClientID);\n\n                if (!tokenParts) {\n                    signInDeferred.reject('Invalid token received');\n\n                    return;\n                }\n\n                dispatch(setCalendarAPIAuthState({\n                    authState: undefined,\n                    accessToken: tokenParts.accessToken,\n                    idToken: tokenParts.idToken,\n                    tokenExpires: params.tokenExpires,\n                    userDomainType: tokenParts.userDomainType,\n                    userSigninName: tokenParts.userSigninName\n                }));\n\n                signInDeferred.resolve();\n            }\n\n            window.addEventListener('message', handleAuth);\n\n            return signInDeferred.promise;\n        };\n    },\n\n    /**\n     * Returns whether or not the user is currently signed in.\n     *\n     * @returns {function(Dispatch<any>, Function): Promise<boolean>}\n     */\n    _isSignedIn(): Function {\n        return (dispatch: Dispatch<any>, getState: Function) => {\n            const now = new Date().getTime();\n            const state\n                = getState()['features/calendar-sync'].msAuthState || {};\n            const tokenExpires = parseInt(state.tokenExpires, 10);\n            const isExpired = now > tokenExpires && !isNaN(tokenExpires);\n\n            if (state.accessToken && isExpired) {\n                // token expired, let's refresh it\n                return dispatch(refreshAuthToken())\n                    .then(() => true)\n                    .catch(() => false);\n            }\n\n            return Promise.resolve(state.accessToken && !isExpired);\n        };\n    },\n\n    /**\n     * Updates calendar event by generating new invite URL and editing the event\n     * adding some descriptive text and location.\n     *\n     * @param {string} id - The event id.\n     * @param {string} calendarId - The id of the calendar to use.\n     * @param {string} location - The location to save to the event.\n     * @returns {function(Dispatch<any>): Promise<string|never>}\n     */\n    updateCalendarEvent(id: string, calendarId: string, location: string) {\n        return (dispatch: Dispatch<any>, getState: Function): Promise<*> => {\n            const state = getState()['features/calendar-sync'] || {};\n            const token = state.msAuthState && state.msAuthState.accessToken;\n\n            if (!token) {\n                return Promise.reject('Not authorized, please sign in!');\n            }\n\n            return getShareInfoText(getState(), location, true/* use html */)\n                .then(text => {\n                    const client = Client.init({\n                        authProvider: done => done(null, token)\n                    });\n\n                    return client\n                        .api(`/me/events/${id}`)\n                        .get()\n                        .then(description => {\n                            const body = description.body;\n\n                            if (description.bodyPreview) {\n                                body.content\n                                    = `${description.bodyPreview}<br><br>`;\n                            }\n\n                            // replace all new lines from the text with html\n                            // <br> to make it pretty\n                            body.content += text.split('\\n').join('<br>');\n\n                            return client\n                                .api(`/me/calendar/events/${id}`)\n                                .patch({\n                                    body,\n                                    location: {\n                                        'displayName': location\n                                    }\n                                });\n                        });\n                });\n        };\n    }\n};\n\n/**\n * Parses the Microsoft calendar entries to a known format.\n *\n * @param {Object} entry - The Microsoft calendar entry.\n * @private\n * @returns {{\n *     calendarId: string,\n *     description: string,\n *     endDate: string,\n *     id: string,\n *     location: string,\n *     startDate: string,\n *     title: string\n * }}\n */\nfunction formatCalendarEntry(entry) {\n    return {\n        calendarId: entry.calendarId,\n        description: entry.body.content,\n        endDate: entry.end.dateTime,\n        id: entry.id,\n        location: entry.location.displayName,\n        startDate: entry.start.dateTime,\n        title: entry.subject\n    };\n}\n\n/**\n * Generate a guid to be used for verifying token validity.\n *\n * @private\n * @returns {string} The generated string.\n */\nfunction generateGuid() {\n    const buf = new Uint16Array(8);\n\n    window.crypto.getRandomValues(buf);\n\n    return `${s4(buf[0])}${s4(buf[1])}-${s4(buf[2])}-${s4(buf[3])}-${\n        s4(buf[4])}-${s4(buf[5])}${s4(buf[6])}${s4(buf[7])}`;\n}\n\n/**\n * Constructs and returns the URL to use for renewing an auth token.\n *\n * @param {string} appId - The Microsoft application id to log into.\n * @param {string} userDomainType - The domain type of the application as\n * provided by Microsoft.\n * @param {string} userSigninName - The email of the user signed into the\n * integration with Microsoft.\n * @private\n * @returns {string} - The auth URL.\n */\nfunction getAuthRefreshUrl(appId, userDomainType, userSigninName) {\n    return [\n        getAuthUrl(appId, 'undefined', 'undefined'),\n        'prompt=none',\n        `domain_hint=${userDomainType}`,\n        `login_hint=${userSigninName}`\n    ].join('&');\n}\n\n/**\n * Constructs and returns the auth URL to use for login.\n *\n * @param {string} appId - The Microsoft application id to log into.\n * @param {string} authState - The authState guid to use.\n * @param {string} authNonce - The authNonce guid to use.\n * @private\n * @returns {string} - The auth URL.\n */\nfunction getAuthUrl(appId, authState, authNonce) {\n    const authParams = [\n        'response_type=id_token+token',\n        `client_id=${appId}`,\n        `redirect_uri=${MS_API_CONFIGURATION.REDIRECT_URI}`,\n        `scope=${MS_API_CONFIGURATION.MS_API_SCOPES}`,\n        `state=${authState}`,\n        `nonce=${authNonce}`,\n        'response_mode=fragment'\n    ].join('&');\n\n    return `${MS_API_CONFIGURATION.AUTH_ENDPOINT}${authParams}`;\n}\n\n/**\n * Converts a url from an auth redirect into an object of parameters passed\n * into the url.\n *\n * @param {string} url - The string to parse.\n * @private\n * @returns {Object}\n */\nfunction getParamsFromHash(url) {\n    const params = parseURLParams(parseStandardURIString(url), true, 'hash');\n\n    // Get the number of seconds the token is valid for, subtract 5 minutes\n    // to account for differences in clock settings and convert to ms.\n    const expiresIn = (parseInt(params.expires_in, 10) - 300) * 1000;\n    const now = new Date();\n    const expireDate = new Date(now.getTime() + expiresIn);\n\n    params.tokenExpires = expireDate.getTime().toString();\n\n    return params;\n}\n\n/**\n * Converts the parameters from a Microsoft auth redirect into an object of\n * token parts. The value \"null\" will be returned if the params do not produce\n * a valid token.\n *\n * @param {Object} tokenInfo - The token object.\n * @param {Object} guids - The guids for authState and authNonce that should\n * match in the token.\n * @param {Object} appId - The Microsoft application this token is for.\n * @private\n * @returns {Object|null}\n */\nfunction getValidatedTokenParts(tokenInfo, guids, appId) {\n    // Make sure the token matches the request source by matching the GUID.\n    if (tokenInfo.state !== guids.authState) {\n        return null;\n    }\n\n    const idToken = tokenInfo.id_token;\n\n    // A token must exist to be valid.\n    if (!idToken) {\n        return null;\n    }\n\n    const tokenParts = idToken.split('.');\n\n    if (tokenParts.length !== 3) {\n        return null;\n    }\n\n    const payload\n         = rs.KJUR.jws.JWS.readSafeJSONString(rs.b64utoutf8(tokenParts[1]));\n\n    if (payload.nonce !== guids.authNonce\n        || payload.aud !== appId\n        || payload.iss\n            !== `https://login.microsoftonline.com/${payload.tid}/v2.0`) {\n        return null;\n    }\n\n    const now = new Date();\n\n    // Adjust by 5 minutes to allow for inconsistencies in system clocks.\n    const notBefore = new Date((payload.nbf - 300) * 1000);\n    const expires = new Date((payload.exp + 300) * 1000);\n\n    if (now < notBefore || now > expires) {\n        return null;\n    }\n\n    return {\n        accessToken: tokenInfo.access_token,\n        idToken,\n        userDisplayName: payload.name,\n        userDomainType:\n            payload.tid === MS_API_CONFIGURATION.MS_CONSUMER_TENANT\n                ? 'consumers' : 'organizations',\n        userSigninName: payload.preferred_username\n    };\n}\n\n/**\n * Renews an existing auth token so it can continue to be used.\n *\n * @private\n * @returns {function(Dispatch<any>, Function): Promise<void>}\n */\nfunction refreshAuthToken(): Function {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { microsoftApiApplicationClientID }\n            = getState()['features/base/config'];\n        const { msAuthState = {} }\n            = getState()['features/calendar-sync'] || {};\n\n        const refreshAuthUrl = getAuthRefreshUrl(\n            microsoftApiApplicationClientID,\n            msAuthState.userDomainType,\n            msAuthState.userSigninName);\n\n        const iframe = document.createElement('iframe');\n\n        iframe.setAttribute('id', 'auth-iframe');\n        iframe.setAttribute('name', 'auth-iframe');\n        iframe.setAttribute('style', 'display: none');\n        iframe.setAttribute('src', refreshAuthUrl);\n\n        const signInPromise = new Promise(resolve => {\n            iframe.onload = () => {\n                resolve(iframe.contentWindow.location.hash);\n            };\n        });\n\n        // The check for body existence is done for flow, which also runs\n        // against native where document.body may not be defined.\n        if (!document.body) {\n            return Promise.reject(\n                'Cannot refresh auth token in this environment');\n        }\n\n        document.body.appendChild(iframe);\n\n        return signInPromise.then(hash => {\n            const params = getParamsFromHash(hash);\n\n            dispatch(setCalendarAPIAuthState({\n                accessToken: params.access_token,\n                idToken: params.id_token,\n                tokenExpires: params.tokenExpires\n            }));\n        });\n    };\n}\n\n/**\n * Retrieves calendar entries from a specific calendar.\n *\n * @param {Object} client - The Microsoft-graph-client initialized.\n * @param {string} calendarId - The calendar ID to use.\n * @param {number} fetchStartDays - The number of days to go back\n * when fetching.\n * @param {number} fetchEndDays - The number of days to fetch.\n * @returns {Promise<any> | Promise}\n * @private\n */\nfunction requestCalendarEvents( // eslint-disable-line max-params\n        client,\n        calendarId,\n        fetchStartDays,\n        fetchEndDays): Promise<*> {\n    const startDate = new Date();\n    const endDate = new Date();\n\n    startDate.setDate(startDate.getDate() + fetchStartDays);\n    endDate.setDate(endDate.getDate() + fetchEndDays);\n\n    const filter = `Start/DateTime ge '${\n        startDate.toISOString()}' and End/DateTime lt '${\n        endDate.toISOString()}'`;\n\n    const ianaTimeZone = new Intl.DateTimeFormat().resolvedOptions().timeZone;\n    const windowsTimeZone = findWindows(ianaTimeZone);\n\n    return client\n        .api(`/me/calendars/${calendarId}/events`)\n        .filter(filter)\n        .header('Prefer', `outlook.timezone=\"${windowsTimeZone}\"`)\n        .select('id,subject,start,end,location,body')\n        .orderby('createdDateTime DESC')\n        .get()\n        .then(result => result.value.map(item => {\n            return {\n                ...item,\n                calendarId\n            };\n        }));\n}\n\n/**\n * Converts the passed in number to a string and ensure it is at least 4\n * characters in length, prepending 0's as needed.\n *\n * @param {number} num - The number to pad and convert to a string.\n * @private\n * @returns {string} - The number converted to a string.\n */\nfunction s4(num) {\n    let ret = num.toString(16);\n\n    while (ret.length < 4) {\n        ret = `0${ret}`;\n    }\n\n    return ret;\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/calendar-sync');\n","// @flow\n\nimport {\n    clearCalendarIntegration,\n    setCalendarError,\n    setLoadingCalendarEvents\n} from './actions';\nexport * from './functions.any';\n\nimport {\n    CALENDAR_TYPE,\n    ERRORS,\n    FETCH_END_DAYS,\n    FETCH_START_DAYS\n} from './constants';\nimport { _updateCalendarEntries } from './functions';\nimport { googleCalendarApi } from './web/googleCalendar';\nimport { microsoftCalendarApi } from './web/microsoftCalendar';\nimport { toState } from '../base/redux';\n\nimport logger from './logger';\n\n/**\n * Determines whether the calendar feature is enabled by the web.\n *\n * @param {Function|Object} stateful - The redux store or {@code getState}\n * function.\n * @returns {boolean} If the app has enabled the calendar feature, {@code true};\n * otherwise, {@code false}.\n */\nexport function isCalendarEnabled(stateful: Function | Object) {\n    const {\n        enableCalendarIntegration,\n        googleApiApplicationClientID,\n        microsoftApiApplicationClientID\n    } = toState(stateful)['features/base/config'] || {};\n\n    return Boolean(enableCalendarIntegration && (googleApiApplicationClientID || microsoftApiApplicationClientID));\n}\n\n/* eslint-disable no-unused-vars */\n/**\n * Reads the user's calendar and updates the stored entries if need be.\n *\n * @param {Object} store - The redux store.\n * @param {boolean} maybePromptForPermission - Flag to tell the app if it should\n * prompt for a calendar permission if it wasn't granted yet.\n * @param {boolean|undefined} forcePermission - Whether to force to re-ask for\n * the permission or not.\n * @private\n * @returns {void}\n */\nexport function _fetchCalendarEntries(\n        store: Object,\n        maybePromptForPermission: boolean,\n        forcePermission: ?boolean) {\n    /* eslint-enable no-unused-vars */\n    const { dispatch, getState } = store;\n\n    const { integrationType } = getState()['features/calendar-sync'];\n    const integration = _getCalendarIntegration(integrationType);\n\n    if (!integration) {\n        logger.debug('No calendar type available');\n\n        return;\n    }\n\n    dispatch(setLoadingCalendarEvents(true));\n\n    dispatch(integration.load())\n        .then(() => dispatch(integration._isSignedIn()))\n        .then(signedIn => {\n            if (signedIn) {\n                return Promise.resolve();\n            }\n\n            return Promise.reject({\n                error: ERRORS.AUTH_FAILED\n            });\n        })\n        .then(() => dispatch(integration.getCalendarEntries(\n            FETCH_START_DAYS, FETCH_END_DAYS)))\n        .then(events => _updateCalendarEntries.call({\n            dispatch,\n            getState\n        }, events))\n        .then(() => {\n            dispatch(setCalendarError());\n        }, error => {\n            logger.error('Error fetching calendar.', error);\n\n            if (error.error === ERRORS.AUTH_FAILED) {\n                dispatch(clearCalendarIntegration());\n            }\n\n            dispatch(setCalendarError(error));\n        })\n        .then(() => dispatch(setLoadingCalendarEvents(false)));\n}\n\n/**\n * Returns the calendar API implementation by specified type.\n *\n * @param {string} calendarType - The calendar type API as defined in\n * the constant {@link CALENDAR_TYPE}.\n * @private\n * @returns {Object|undefined}\n */\nexport function _getCalendarIntegration(calendarType: string) {\n    switch (calendarType) {\n    case CALENDAR_TYPE.GOOGLE:\n        return googleCalendarApi;\n    case CALENDAR_TYPE.MICROSOFT:\n        return microsoftCalendarApi;\n    }\n}\n","// @flow\n\nimport {\n    REFRESH_CALENDAR,\n    SET_CALENDAR_AUTHORIZATION,\n    SET_CALENDAR_EVENTS\n} from './actionTypes';\n\n/**\n * Sends an action to refresh the entry list (fetches new data).\n *\n * @param {boolean} forcePermission - Whether to force to re-ask for\n * the permission or not.\n * @param {boolean} isInteractive - If true this refresh was caused by\n * direct user interaction, false otherwise.\n * @returns {{\n *     type: REFRESH_CALENDAR,\n *     forcePermission: boolean,\n *     isInteractive: boolean\n * }}\n */\nexport function refreshCalendar(\n        forcePermission: boolean = false, isInteractive: boolean = true) {\n    return {\n        type: REFRESH_CALENDAR,\n        forcePermission,\n        isInteractive\n    };\n}\n\n/**\n * Sends an action to signal that a calendar access has been requested. For more\n * info, see {@link SET_CALENDAR_AUTHORIZATION}.\n *\n * @param {string | undefined} authorization - The result of the last calendar\n * authorization request.\n * @returns {{\n *     type: SET_CALENDAR_AUTHORIZATION,\n *     authorization: ?string\n * }}\n */\nexport function setCalendarAuthorization(authorization: ?string) {\n    return {\n        type: SET_CALENDAR_AUTHORIZATION,\n        authorization\n    };\n}\n\n/**\n * Sends an action to update the current calendar list in redux.\n *\n * @param {Array<Object>} events - The new list.\n * @returns {{\n *     type: SET_CALENDAR_EVENTS,\n *     events: Array<Object>\n * }}\n */\nexport function setCalendarEvents(events: Array<Object>) {\n    return {\n        type: SET_CALENDAR_EVENTS,\n        events\n    };\n}\n","// @flow\n\nimport { generateRoomWithoutSeparator } from 'js-utils/random';\nimport type { Dispatch } from 'redux';\n\nimport { loadGoogleAPI } from '../google-api';\n\nimport { refreshCalendar, setCalendarEvents } from './actions';\nimport { createCalendarConnectedEvent, sendAnalytics } from '../analytics';\n\nimport {\n    CLEAR_CALENDAR_INTEGRATION,\n    SET_CALENDAR_AUTH_STATE,\n    SET_CALENDAR_ERROR,\n    SET_CALENDAR_INTEGRATION,\n    SET_CALENDAR_PROFILE_EMAIL,\n    SET_LOADING_CALENDAR_EVENTS\n} from './actionTypes';\nimport { _getCalendarIntegration, isCalendarEnabled } from './functions';\nimport logger from './logger';\n\nexport * from './actions.any';\n\n/**\n * Sets the initial state of calendar integration by loading third party APIs\n * and filling out any data that needs to be fetched.\n *\n * @returns {Function}\n */\nexport function bootstrapCalendarIntegration(): Function {\n    return (dispatch, getState) => {\n        const state = getState();\n\n        if (!isCalendarEnabled(state)) {\n            return Promise.reject();\n        }\n\n        const {\n            googleApiApplicationClientID\n        } = state['features/base/config'];\n        const {\n            integrationReady,\n            integrationType\n        } = state['features/calendar-sync'];\n\n        return Promise.resolve()\n            .then(() => {\n                if (googleApiApplicationClientID) {\n                    return dispatch(loadGoogleAPI());\n                }\n            })\n            .then(() => {\n                if (!integrationType || integrationReady) {\n                    return;\n                }\n\n                const integrationToLoad\n                    = _getCalendarIntegration(integrationType);\n\n                if (!integrationToLoad) {\n                    dispatch(clearCalendarIntegration());\n\n                    return;\n                }\n\n                return dispatch(integrationToLoad._isSignedIn())\n                    .then(signedIn => {\n                        if (signedIn) {\n                            dispatch(setIntegrationReady(integrationType));\n                            dispatch(updateProfile(integrationType));\n                        } else {\n                            dispatch(clearCalendarIntegration());\n                        }\n                    });\n            });\n    };\n}\n\n/**\n * Resets the state of calendar integration so stored events and selected\n * calendar type are cleared.\n *\n * @returns {{\n *     type: CLEAR_CALENDAR_INTEGRATION\n * }}\n */\nexport function clearCalendarIntegration() {\n    return {\n        type: CLEAR_CALENDAR_INTEGRATION\n    };\n}\n\n/**\n * Asks confirmation from the user to add a Jitsi link to the calendar event.\n *\n * NOTE: Currently there is no confirmation prompted on web, so this is just\n * a relaying method to avoid flow problems.\n *\n * @param {string} eventId - The event id.\n * @param {string} calendarId - The calendar id.\n * @returns {Function}\n */\nexport function openUpdateCalendarEventDialog(\n        eventId: string, calendarId: string) {\n    return updateCalendarEvent(eventId, calendarId);\n}\n\n/**\n * Sends an action to update the current calendar api auth state in redux.\n * This is used only for microsoft implementation to store it auth state.\n *\n * @param {number} newState - The new state.\n * @returns {{\n *     type: SET_CALENDAR_AUTH_STATE,\n *     msAuthState: Object\n * }}\n */\nexport function setCalendarAPIAuthState(newState: ?Object) {\n    return {\n        type: SET_CALENDAR_AUTH_STATE,\n        msAuthState: newState\n    };\n}\n\n/**\n * Sends an action to update the calendar error state in redux.\n *\n * @param {Object} error - An object with error details.\n * @returns {{\n *     type: SET_CALENDAR_ERROR,\n *     error: Object\n * }}\n */\nexport function setCalendarError(error: ?Object) {\n    return {\n        type: SET_CALENDAR_ERROR,\n        error\n    };\n}\n\n/**\n * Sends an action to update the current calendar profile email state in redux.\n *\n * @param {number} newEmail - The new email.\n * @returns {{\n *     type: SET_CALENDAR_PROFILE_EMAIL,\n *     email: string\n * }}\n */\nexport function setCalendarProfileEmail(newEmail: ?string) {\n    return {\n        type: SET_CALENDAR_PROFILE_EMAIL,\n        email: newEmail\n    };\n}\n\n/**\n * Sends an to denote a request in is flight to get calendar events.\n *\n * @param {boolean} isLoadingEvents - Whether or not calendar events are being\n * fetched.\n * @returns {{\n *     type: SET_LOADING_CALENDAR_EVENTS,\n *     isLoadingEvents: boolean\n * }}\n */\nexport function setLoadingCalendarEvents(isLoadingEvents: boolean) {\n    return {\n        type: SET_LOADING_CALENDAR_EVENTS,\n        isLoadingEvents\n    };\n}\n\n/**\n * Sets the calendar integration type to be used by web and signals that the\n * integration is ready to be used.\n *\n * @param {string|undefined} integrationType - The calendar type.\n * @returns {{\n *      type: SET_CALENDAR_INTEGRATION,\n *      integrationReady: boolean,\n *      integrationType: string\n * }}\n */\nexport function setIntegrationReady(integrationType: string) {\n    return {\n        type: SET_CALENDAR_INTEGRATION,\n        integrationReady: true,\n        integrationType\n    };\n}\n\n/**\n * Signals signing in to the specified calendar integration.\n *\n * @param {string} calendarType - The calendar integration which should be\n * signed into.\n * @returns {Function}\n */\nexport function signIn(calendarType: string): Function {\n    return (dispatch: Dispatch<any>) => {\n        const integration = _getCalendarIntegration(calendarType);\n\n        if (!integration) {\n            return Promise.reject('No supported integration found');\n        }\n\n        return dispatch(integration.load())\n            .then(() => dispatch(integration.signIn()))\n            .then(() => dispatch(setIntegrationReady(calendarType)))\n            .then(() => dispatch(updateProfile(calendarType)))\n            .then(() => dispatch(refreshCalendar()))\n            .then(() => sendAnalytics(createCalendarConnectedEvent()))\n            .catch(error => {\n                logger.error(\n                    'Error occurred while signing into calendar integration',\n                    error);\n\n                return Promise.reject(error);\n            });\n    };\n}\n\n/**\n * Updates calendar event by generating new invite URL and editing the event\n * adding some descriptive text and location.\n *\n * @param {string} id - The event id.\n * @param {string} calendarId - The id of the calendar to use.\n * @returns {Function}\n */\nexport function updateCalendarEvent(id: string, calendarId: string): Function {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n\n        const { integrationType } = getState()['features/calendar-sync'];\n        const integration = _getCalendarIntegration(integrationType);\n\n        if (!integration) {\n            return Promise.reject('No integration found');\n        }\n\n        const { locationURL } = getState()['features/base/connection'];\n        const newRoomName = generateRoomWithoutSeparator();\n        let href = locationURL.href;\n\n        href.endsWith('/') || (href += '/');\n\n        const roomURL = `${href}${newRoomName}`;\n\n        return dispatch(integration.updateCalendarEvent(\n                id, calendarId, roomURL))\n            .then(() => {\n                // make a copy of the array\n                const events\n                    = getState()['features/calendar-sync'].events.slice(0);\n\n                const eventIx = events.findIndex(\n                    e => e.id === id && e.calendarId === calendarId);\n\n                // clone the event we will modify\n                const newEvent = Object.assign({}, events[eventIx]);\n\n                newEvent.url = roomURL;\n                events[eventIx] = newEvent;\n\n                return dispatch(setCalendarEvents(events));\n            });\n    };\n}\n\n/**\n * Signals to get current profile data linked to the current calendar\n * integration that is in use.\n *\n * @param {string} calendarType - The calendar integration to which the profile\n * should be updated.\n * @returns {Function}\n */\nexport function updateProfile(calendarType: string): Function {\n    return (dispatch: Dispatch<any>) => {\n        const integration = _getCalendarIntegration(calendarType);\n\n        if (!integration) {\n            return Promise.reject('No integration found');\n        }\n\n        return dispatch(integration.getCurrentEmail())\n            .then(email => {\n                dispatch(setCalendarProfileEmail(email));\n            });\n    };\n}\n","// @flow\n\nimport Tooltip from '@atlaskit/tooltip';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport {\n    createCalendarClickedEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { Icon, IconAdd } from '../../base/icons';\nimport { connect } from '../../base/redux';\n\nimport { updateCalendarEvent } from '../actions';\n\n/**\n * The type of the React {@code Component} props of {@link AddMeetingUrlButton}.\n */\ntype Props = {\n\n    /**\n     * The calendar ID associated with the calendar event.\n     */\n    calendarId: string,\n\n    /**\n     * Invoked to add a meeting URL to a calendar event.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * The ID of the calendar event that will have a meeting URL added on click.\n     */\n    eventId: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * A React Component for adding a meeting URL to an existing calendar event.\n *\n * @extends Component\n */\nclass AddMeetingUrlButton extends Component<Props> {\n    /**\n     * Initializes a new {@code AddMeetingUrlButton} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (\n            <Tooltip content = { this.props.t('calendarSync.addMeetingURL') }>\n                <div\n                    className = 'button add-button'\n                    onClick = { this._onClick }>\n                    <Icon src = { IconAdd } />\n                </div>\n            </Tooltip>\n        );\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Dispatches an action to adding a meeting URL to a calendar event.\n     *\n     * @returns {void}\n     */\n    _onClick() {\n        const { calendarId, dispatch, eventId } = this.props;\n\n        sendAnalytics(createCalendarClickedEvent('calendar.add.url'));\n\n        dispatch(updateCalendarEvent(eventId, calendarId));\n    }\n}\n\nexport default translate(connect()(AddMeetingUrlButton));\n","// @flow\n\nimport React, { Component } from 'react';\nimport Tooltip from '@atlaskit/tooltip';\n\nimport { translate } from '../../base/i18n';\n\n/**\n * The type of the React {@code Component} props of {@link JoinButton}.\n */\ntype Props = {\n\n    /**\n     * The function called when the button is pressed.\n     */\n    onPress: Function,\n\n    /**\n     * The meeting URL associated with the {@link JoinButton} instance.\n     */\n    url: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * A React Component for joining an existing calendar meeting.\n *\n * @extends Component\n */\nclass JoinButton extends Component<Props> {\n\n    /**\n     * Initializes a new {@code JoinButton} instance.\n     *\n     * @param {*} props - The read-only properties with which the new instance\n     * is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <Tooltip\n                content = { t('calendarSync.joinTooltip') }>\n                <div\n                    className = 'button join-button'\n                    onClick = { this._onClick }>\n                    { t('calendarSync.join') }\n                </div>\n            </Tooltip>\n        );\n    }\n\n    _onClick: (Object) => void;\n\n    /**\n     * Callback invoked when the component is clicked.\n     *\n     * @param {Object} event - The DOM click event.\n     * @private\n     * @returns {void}\n     */\n    _onClick(event) {\n        this.props.onPress(event, this.props.url);\n    }\n}\n\nexport default translate(JoinButton);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { appNavigate } from '../../app';\nimport {\n    createCalendarClickedEvent,\n    createCalendarSelectedEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { MeetingsList } from '../../base/react';\nimport { connect } from '../../base/redux';\n\nimport AddMeetingUrlButton from './AddMeetingUrlButton';\nimport JoinButton from './JoinButton';\n\n/**\n * The type of the React {@code Component} props of\n * {@link CalendarListContent}.\n */\ntype Props = {\n\n    /**\n     * The calendar event list.\n     */\n    _eventList: Array<Object>,\n\n    /**\n     * Indicates if the list is disabled or not.\n     */\n    disabled: boolean,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     *\n     */\n    listEmptyComponent: React$Node,\n};\n\n/**\n * Component to display a list of events from a connected calendar.\n */\nclass CalendarListContent extends Component<Props> {\n    /**\n     * Default values for the component's props.\n     */\n    static defaultProps = {\n        _eventList: []\n    };\n\n    /**\n     * Initializes a new {@code CalendarListContent} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onJoinPress = this._onJoinPress.bind(this);\n        this._onPress = this._onPress.bind(this);\n        this._toDisplayableItem = this._toDisplayableItem.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}. Invoked\n     * immediately after this component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        sendAnalytics(createCalendarSelectedEvent());\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { disabled, listEmptyComponent } = this.props;\n        const { _eventList = [] } = this.props;\n        const meetings = _eventList.map(this._toDisplayableItem);\n\n        return (\n            <MeetingsList\n                disabled = { disabled }\n                listEmptyComponent = { listEmptyComponent }\n                meetings = { meetings }\n                onPress = { this._onPress } />\n        );\n    }\n\n    _onJoinPress: (Object, string) => Function;\n\n    /**\n     * Handles the list's navigate action.\n     *\n     * @private\n     * @param {Object} event - The click event.\n     * @param {string} url - The url string to navigate to.\n     * @returns {void}\n     */\n    _onJoinPress(event, url) {\n        event.stopPropagation();\n\n        this._onPress(url, 'calendar.meeting.join');\n    }\n\n    _onPress: (string, ?string) => Function;\n\n    /**\n     * Handles the list's navigate action.\n     *\n     * @private\n     * @param {string} url - The url string to navigate to.\n     * @param {string} analyticsEventName - Тhe name of the analytics event\n     * associated with this action.\n     * @returns {void}\n     */\n    _onPress(url, analyticsEventName = 'calendar.meeting.tile') {\n        sendAnalytics(createCalendarClickedEvent(analyticsEventName));\n\n        this.props.dispatch(appNavigate(url));\n    }\n\n    _toDisplayableItem: Object => Object;\n\n    /**\n     * Creates a displayable object from an event.\n     *\n     * @param {Object} event - The calendar event.\n     * @private\n     * @returns {Object}\n     */\n    _toDisplayableItem(event) {\n        return {\n            elementAfter: event.url\n                ? <JoinButton\n                    onPress = { this._onJoinPress }\n                    url = { event.url } />\n                : (<AddMeetingUrlButton\n                    calendarId = { event.calendarId }\n                    eventId = { event.id } />),\n            date: event.startDate,\n            time: [ event.startDate, event.endDate ],\n            description: event.url,\n            title: event.title,\n            url: event.url\n        };\n    }\n}\n\n/**\n * Maps redux state to component props.\n *\n * @param {Object} state - The redux state.\n * @returns {{\n *     _eventList: Array<Object>\n * }}\n */\nfunction _mapStateToProps(state: Object) {\n    return {\n        _eventList: state['features/calendar-sync'].events\n    };\n}\n\nexport default connect(_mapStateToProps)(CalendarListContent);\n","// @flow\n\nimport Spinner from '@atlaskit/spinner';\nimport React from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { AbstractPage } from '../../base/react';\nimport { connect } from '../../base/redux';\nimport { openSettingsDialog, SETTINGS_TABS } from '../../settings';\nimport {\n    createCalendarClickedEvent,\n    sendAnalytics\n} from '../../analytics';\n\nimport { refreshCalendar } from '../actions';\nimport { ERRORS } from '../constants';\n\nimport CalendarListContent from './CalendarListContent';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link CalendarList}.\n */\ntype Props = {\n\n    /**\n     * The error object containing details about any error that has occurred\n     * while interacting with calendar integration.\n     */\n    _calendarError: ?Object,\n\n    /**\n     * Whether or not a calendar may be connected for fetching calendar events.\n     */\n    _hasIntegrationSelected: boolean,\n\n    /**\n     * Whether or not events have been fetched from a calendar.\n     */\n    _hasLoadedEvents: boolean,\n\n    /**\n     * Indicates if the list is disabled or not.\n     */\n    disabled: boolean,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The translate function.\n     */\n    t: Function\n};\n\n/**\n * Component to display a list of events from the user's calendar.\n */\nclass CalendarList extends AbstractPage<Props> {\n    /**\n     * Initializes a new {@code CalendarList} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._getRenderListEmptyComponent\n            = this._getRenderListEmptyComponent.bind(this);\n        this._onOpenSettings = this._onOpenSettings.bind(this);\n        this._onRefreshEvents = this._onRefreshEvents.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { disabled } = this.props;\n\n        return (\n            CalendarListContent\n                ? <CalendarListContent\n                    disabled = { disabled }\n                    listEmptyComponent\n                        = { this._getRenderListEmptyComponent() } />\n                : null\n        );\n    }\n\n    /**\n     * Returns a component for showing the error message related to calendar\n     * sync.\n     *\n     * @private\n     * @returns {React$Component}\n     */\n    _getErrorMessage() {\n        const { _calendarError = {}, t } = this.props;\n\n        let errorMessageKey = 'calendarSync.error.generic';\n        let showRefreshButton = true;\n        let showSettingsButton = true;\n\n        if (_calendarError.error === ERRORS.GOOGLE_APP_MISCONFIGURED) {\n            errorMessageKey = 'calendarSync.error.appConfiguration';\n            showRefreshButton = false;\n            showSettingsButton = false;\n        } else if (_calendarError.error === ERRORS.AUTH_FAILED) {\n            errorMessageKey = 'calendarSync.error.notSignedIn';\n            showRefreshButton = false;\n        }\n\n        return (\n            <div className = 'meetings-list-empty'>\n                <p className = 'description'>\n                    { t(errorMessageKey) }\n                </p>\n                <div className = 'calendar-action-buttons'>\n                    { showSettingsButton\n                        && <div\n                            className = 'button'\n                            onClick = { this._onOpenSettings }>\n                            { t('calendarSync.permissionButton') }\n                        </div>\n                    }\n                    { showRefreshButton\n                        && <div\n                            className = 'button'\n                            onClick = { this._onRefreshEvents }>\n                            { t('calendarSync.refresh') }\n                        </div>\n                    }\n                </div>\n            </div>\n        );\n    }\n\n    _getRenderListEmptyComponent: () => Object;\n\n    /**\n     * Returns a list empty component if a custom one has to be rendered instead\n     * of the default one in the {@link NavigateSectionList}.\n     *\n     * @private\n     * @returns {React$Component}\n     */\n    _getRenderListEmptyComponent() {\n        const {\n            _calendarError,\n            _hasIntegrationSelected,\n            _hasLoadedEvents,\n            t\n        } = this.props;\n\n        if (_calendarError) {\n            return this._getErrorMessage();\n        } else if (_hasIntegrationSelected && _hasLoadedEvents) {\n            return (\n                <div className = 'meetings-list-empty'>\n                    <p className = 'description'>\n                        { t('calendarSync.noEvents') }\n                    </p>\n                    <div\n                        className = 'button'\n                        onClick = { this._onRefreshEvents }>\n                        { t('calendarSync.refresh') }\n                    </div>\n                </div>\n            );\n        } else if (_hasIntegrationSelected && !_hasLoadedEvents) {\n            return (\n                <div className = 'meetings-list-empty'>\n                    <Spinner\n                        invertColor = { true }\n                        isCompleting = { false }\n                        size = 'medium' />\n                </div>\n            );\n        }\n\n        return (\n            <div className = 'meetings-list-empty'>\n                <p className = 'description'>\n                    { t('welcomepage.connectCalendarText', {\n                        app: interfaceConfig.APP_NAME,\n                        provider: interfaceConfig.PROVIDER_NAME\n                    }) }\n                </p>\n                <div\n                    className = 'button'\n                    onClick = { this._onOpenSettings }>\n                    { t('welcomepage.connectCalendarButton') }\n                </div>\n            </div>\n        );\n    }\n\n    _onOpenSettings: () => void;\n\n    /**\n     * Opens {@code SettingsDialog}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onOpenSettings() {\n        sendAnalytics(createCalendarClickedEvent('calendar.connect'));\n\n        this.props.dispatch(openSettingsDialog(SETTINGS_TABS.CALENDAR));\n    }\n\n    _onRefreshEvents: () => void;\n\n\n    /**\n     * Gets an updated list of calendar events.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onRefreshEvents() {\n        this.props.dispatch(refreshCalendar(true));\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code CalendarList} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _calendarError: Object,\n *     _hasIntegrationSelected: boolean,\n *     _hasLoadedEvents: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    const {\n        error,\n        events,\n        integrationType,\n        isLoadingEvents\n    } = state['features/calendar-sync'];\n\n    return {\n        _calendarError: error,\n        _hasIntegrationSelected: Boolean(integrationType),\n        _hasLoadedEvents: Boolean(events) || !isLoadingEvents\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(CalendarList));\n","// @flow\n\nimport React, { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of\n * {@link MicrosoftSignInButton}.\n */\ntype Props = {\n\n    // The callback to invoke when {@code MicrosoftSignInButton} is clicked.\n    onClick: Function,\n\n    // The text to display within {@code MicrosoftSignInButton}.\n    text: string\n};\n\n/**\n * A React Component showing a button to sign in with Microsoft.\n *\n * @extends Component\n */\nexport default class MicrosoftSignInButton extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div\n                className = 'microsoft-sign-in'\n                onClick = { this.props.onClick }>\n                <img\n                    className = 'microsoft-logo'\n                    src = 'images/microsoftLogo.svg' />\n                <div className = 'microsoft-cta'>\n                    { this.props.text }\n                </div>\n            </div>\n        );\n    }\n}\n","// @flow\n\nimport { SET_CONFIG } from '../base/config';\nimport { ADD_KNOWN_DOMAINS } from '../base/known-domains';\nimport { equals, MiddlewareRegistry } from '../base/redux';\nimport { APP_STATE_CHANGED } from '../mobile/background/actionTypes';\n\nimport { setCalendarAuthorization } from './actions';\nimport { REFRESH_CALENDAR } from './actionTypes';\nimport { _fetchCalendarEntries, isCalendarEnabled } from './functions';\n\nMiddlewareRegistry.register(store => next => action => {\n    const { getState } = store;\n\n    if (!isCalendarEnabled(getState)) {\n        return next(action);\n    }\n\n    switch (action.type) {\n    case ADD_KNOWN_DOMAINS: {\n        // XXX Fetch new calendar entries only when an actual domain has\n        // become known.\n        const oldValue = getState()['features/base/known-domains'];\n        const result = next(action);\n        const newValue = getState()['features/base/known-domains'];\n\n        equals(oldValue, newValue)\n            || _fetchCalendarEntries(store, false, false);\n\n        return result;\n    }\n\n    case APP_STATE_CHANGED: {\n        const result = next(action);\n\n        _maybeClearAccessStatus(store, action);\n\n        return result;\n    }\n\n    case SET_CONFIG: {\n        const result = next(action);\n\n        _fetchCalendarEntries(store, false, false);\n\n        return result;\n    }\n\n    case REFRESH_CALENDAR: {\n        const result = next(action);\n\n        _fetchCalendarEntries(\n            store, action.isInteractive, action.forcePermission);\n\n        return result;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Clears the calendar access status when the app comes back from the\n * background. This is needed as some users may never quit the app, but puts it\n * into the background and we need to try to request for a permission as often\n * as possible, but not annoyingly often.\n *\n * @param {Object} store - The redux store.\n * @param {Object} action - The Redux action.\n * @private\n * @returns {void}\n */\nfunction _maybeClearAccessStatus(store, { appState }) {\n    appState === 'background'\n        && store.dispatch(setCalendarAuthorization(undefined));\n}\n","// @flow\n\nimport { ReducerRegistry, set } from '../base/redux';\nimport { PersistenceRegistry } from '../base/storage';\n\nimport {\n    CLEAR_CALENDAR_INTEGRATION,\n    SET_CALENDAR_AUTH_STATE,\n    SET_CALENDAR_AUTHORIZATION,\n    SET_CALENDAR_ERROR,\n    SET_CALENDAR_EVENTS,\n    SET_CALENDAR_INTEGRATION,\n    SET_CALENDAR_PROFILE_EMAIL,\n    SET_LOADING_CALENDAR_EVENTS\n} from './actionTypes';\n\n/**\n * The default state of the calendar feature.\n *\n * @type {Object}\n */\nconst DEFAULT_STATE = {\n    authorization: undefined,\n    events: [],\n    integrationReady: false,\n    integrationType: undefined,\n    msAuthState: undefined\n};\n\n/**\n * Constant for the Redux subtree of the calendar feature.\n *\n * NOTE: This feature can be disabled and in that case, accessing this subtree\n * directly will return undefined and will need a bunch of repetitive type\n * checks in other features. Make sure you take care of those checks, or\n * consider using the {@code isCalendarEnabled} value to gate features if\n * needed.\n */\nconst STORE_NAME = 'features/calendar-sync';\n\n/**\n * NOTE: Never persist the authorization value as it's needed to remain a\n * runtime value to see if we need to re-request the calendar permission from\n * the user.\n */\nPersistenceRegistry.register(STORE_NAME, {\n    integrationType: true,\n    msAuthState: true\n});\n\nReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case CLEAR_CALENDAR_INTEGRATION:\n        return DEFAULT_STATE;\n\n    case SET_CALENDAR_AUTH_STATE: {\n        if (!action.msAuthState) {\n            // received request to delete the state\n            return set(state, 'msAuthState', undefined);\n        }\n\n        return set(state, 'msAuthState', {\n            ...state.msAuthState,\n            ...action.msAuthState\n        });\n    }\n\n    case SET_CALENDAR_AUTHORIZATION:\n        return set(state, 'authorization', action.authorization);\n\n    case SET_CALENDAR_ERROR:\n        return set(state, 'error', action.error);\n\n    case SET_CALENDAR_EVENTS:\n        return set(state, 'events', action.events);\n\n    case SET_CALENDAR_INTEGRATION:\n        return {\n            ...state,\n            integrationReady: action.integrationReady,\n            integrationType: action.integrationType\n        };\n\n    case SET_CALENDAR_PROFILE_EMAIL:\n        return set(state, 'profileEmail', action.email);\n\n    case SET_LOADING_CALENDAR_EVENTS:\n        return set(state, 'isLoadingEvents', action.isLoadingEvents);\n    }\n\n    return state;\n});\n","export * from './actions';\nexport * from './components';\nexport * from './constants';\nexport { isCalendarEnabled } from './functions';\n\nimport './middleware';\nimport './reducer';\n","/**\n * The type of the action which sets the list of known participant IDs which\n * have an active screen share.\n *\n * @returns {{\n *     type: SCREEN_SHARE_PARTICIPANTS_UPDATED,\n *     participantIds: Array<string>\n * }}\n */\nexport const SCREEN_SHARE_PARTICIPANTS_UPDATED\n    = 'SCREEN_SHARE_PARTICIPANTS_UPDATED';\n\n/**\n * The type of the action which enables or disables the feature for showing\n * video thumbnails in a two-axis tile view.\n *\n * @returns {{\n *     type: SET_TILE_VIEW,\n *     enabled: boolean\n * }}\n */\nexport const SET_TILE_VIEW = 'SET_TILE_VIEW';\n","// @flow\n\n/**\n * The type of the Redux action which signals that the prompt for media\n * permission is visible or not.\n *\n * {\n *     type: MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED,\n *     isVisible: {boolean},\n *     browser: {string}\n * }\n * @public\n */\nexport const MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED\n    = 'MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED';\n\n/**\n * Adjust the state of the fatal error which shows/hides the reload screen. See\n * action methods's description for more info about each of the fields.\n *\n * {\n *     type: SET_FATAL_ERROR,\n *     fatalError: ?Object\n * }\n * @public\n */\nexport const SET_FATAL_ERROR = 'SET_FATAL_ERROR';\n","// @flow\n\nimport {\n    MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED,\n    SET_FATAL_ERROR\n} from './actionTypes';\n\n/**\n * Signals that the prompt for media permission is visible or not.\n *\n * @param {boolean} isVisible - If the value is true - the prompt for media\n * permission is visible otherwise the value is false/undefined.\n * @param {string} browser - The name of the current browser.\n * @public\n * @returns {{\n *     type: MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED,\n *     browser: {string},\n *     isVisible: {boolean}\n * }}\n */\nexport function mediaPermissionPromptVisibilityChanged(isVisible: boolean, browser: string) {\n    return {\n        type: MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED,\n        browser,\n        isVisible\n    };\n}\n\n/**\n * The action indicates that an unrecoverable error has occurred and the reload\n * screen will be displayed or hidden.\n *\n * @param {Object} fatalError - A critical error which was not claimed by any\n * feature for error recovery (the recoverable flag was not set). If\n * {@code undefined} then any fatal error currently stored will be discarded.\n * @returns {{\n *     type: SET_FATAL_ERROR,\n *     fatalError: ?Error\n * }}\n */\nexport function setFatalError(fatalError: Object) {\n    return {\n        type: SET_FATAL_ERROR,\n        fatalError\n    };\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link OverlayFrame}.\n */\ntype Props = {\n\n    /**\n     * The children components to be displayed into the overlay frame.\n     */\n    children: React$Node,\n\n    /**\n     * Indicates the css style of the overlay. If true, then lighter; darker,\n     * otherwise.\n     */\n    isLightOverlay?: boolean\n};\n\n/**\n * The type of the React {@code Component} state of {@link OverlayFrame}.\n */\ntype State = {\n\n    /**\n     * Whether or not the application is currently displaying in filmstrip only\n     * mode.\n     */\n    filmstripOnly: boolean\n};\n\n/**\n * Implements a React {@link Component} for the frame of the overlays.\n */\nexport default class OverlayFrame extends Component<Props, State> {\n    /**\n     * Initializes a new AbstractOverlay instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     * @public\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            /**\n             * Indicates whether the filmstrip only mode is enabled or not.\n             *\n             * @type {boolean}\n             */\n            filmstripOnly:\n                typeof interfaceConfig !== 'undefined'\n                    && interfaceConfig.filmStripOnly\n        };\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement|null}\n     */\n    render() {\n        let containerClass = this.props.isLightOverlay\n            ? 'overlay__container-light' : 'overlay__container';\n        let contentClass = 'overlay__content';\n\n        if (this.state.filmstripOnly) {\n            containerClass += ' filmstrip-only';\n            contentClass += ' filmstrip-only';\n        }\n\n        return (\n            <div\n                className = { containerClass }\n                id = 'overlay'>\n                <div className = { contentClass }>\n                    {\n                        this.props.children\n                    }\n                </div>\n            </div>\n        );\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Avatar } from '../../../base/avatar';\nimport { getLocalParticipant } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\n\nimport OverlayFrame from './OverlayFrame';\n\n/**\n * The type of the React {@code Component} props of\n * {@link FilmstripOnlyOverlayFrame}.\n */\ntype Props = {\n\n    /**\n     * The ID of the local participant.\n     */\n    _localParticipantId: string,\n\n    /**\n     * The children components to be displayed into the overlay frame for\n     * filmstrip only mode.\n     */\n    children: React$Node,\n\n    /**\n     * The css class name for the icon that will be displayed over the avatar.\n     */\n    icon: string,\n\n    /**\n     * Indicates the css style of the overlay. If true, then lighter; darker,\n     * otherwise.\n     */\n    isLightOverlay: boolean\n};\n\n/**\n * Implements a React Component for the frame of the overlays in filmstrip only\n * mode.\n */\nclass FilmstripOnlyOverlayFrame extends Component<Props> {\n    /**\n     * Renders content related to the icon.\n     *\n     * @returns {ReactElement|null}\n     * @private\n     */\n    _renderIcon() {\n        if (!this.props.icon) {\n            return null;\n        }\n\n        const iconClass = `inlay-filmstrip-only__icon ${this.props.icon}`;\n        const iconBGClass = 'inlay-filmstrip-only__icon-background';\n\n        return (\n            <div>\n                <div className = { iconBGClass } />\n                <div className = 'inlay-filmstrip-only__icon-container'>\n                    <span className = { iconClass } />\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <OverlayFrame isLightOverlay = { this.props.isLightOverlay }>\n                <div className = 'inlay-filmstrip-only'>\n                    <div className = 'inlay-filmstrip-only__content'>\n                        {\n                            this.props.children\n                        }\n                    </div>\n                    <div className = 'inlay-filmstrip-only__avatar-container'>\n                        <Avatar participantId = { this.props._localParticipantId } />\n                        {\n                            this._renderIcon()\n                        }\n                    </div>\n                </div>\n            </OverlayFrame>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated FilmstripOnlyOverlayFrame\n * props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _localParticipantId: string\n * }}\n */\nfunction _mapStateToProps(state) {\n    return {\n        _localParticipantId: (getLocalParticipant(state) || {}).id\n    };\n}\n\nexport default connect(_mapStateToProps)(FilmstripOnlyOverlayFrame);\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/overlay');\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { reloadNow } from '../../../app';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\n/**\n * The type of the React {@code Component} props of {@link ReloadButton}.\n */\ntype Props = {\n\n    /**\n     * Reloads the page.\n     */\n    _reloadNow: Function,\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function,\n\n    /**\n     * The translation key for the text in the button.\n     */\n    textKey: string\n};\n\n/**\n * Implements a React Component for button for the overlays that will reload\n * the page.\n */\nclass ReloadButton extends Component<Props> {\n    /**\n     * Renders the button for relaod the page if necessary.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    render() {\n        const className\n            = 'button-control button-control_overlay button-control_center';\n\n        /* eslint-disable react/jsx-handler-names */\n\n        return (\n            <button\n                className = { className }\n                onClick = { this.props._reloadNow }>\n                { this.props.t(this.props.textKey) }\n            </button>\n        );\n\n        /* eslint-enable react/jsx-handler-names */\n    }\n}\n\n/**\n * Maps part of redux actions to component's props.\n *\n * @param {Function} dispatch - Redux's {@code dispatch} function.\n * @private\n * @returns {Object}\n */\nfunction _mapDispatchToProps(dispatch: Function): Object {\n    return {\n        /**\n         * Dispatches the redux action to reload the page.\n         *\n         * @protected\n         * @returns {Object} Dispatched action.\n         */\n        _reloadNow() {\n            dispatch(reloadNow());\n        }\n    };\n}\n\nexport default translate(connect(undefined, _mapDispatchToProps)(ReloadButton));\n","// @flow\n\nimport { randomInt } from 'js-utils/random';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport {\n    createPageReloadScheduledEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { reloadNow } from '../../app';\nimport {\n    isFatalJitsiConferenceError,\n    isFatalJitsiConnectionError\n} from '../../base/lib-jitsi-meet';\n\nimport logger from '../logger';\nimport ReloadButton from './web/ReloadButton';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractPageReloadOverlay}.\n */\nexport type Props = {\n\n    /**\n     * The details is an object containing more information about the connection\n     * failed (shard changes, was the computer suspended, etc.)\n     */\n    details: Object,\n\n    dispatch: Dispatch<any>,\n\n    /**\n     * The indicator which determines whether the reload was caused by network\n     * failure.\n     */\n    isNetworkFailure: boolean,\n\n    /**\n     * The reason for the error that will cause the reload.\n     * NOTE: Used by PageReloadOverlay only.\n     */\n    reason: string,\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of\n * {@link AbstractPageReloadOverlay}.\n */\ntype State = {\n\n    /**\n     * The translation key for the title of the overlay.\n     */\n    message: string,\n\n    /**\n     * Current value(time) of the timer.\n     */\n    timeLeft: number,\n\n    /**\n     * How long the overlay dialog will be displayed before the conference will\n     * be reloaded.\n     */\n    timeoutSeconds: number,\n\n    /**\n     * The translation key for the title of the overlay.\n     */\n    title: string\n};\n\n/**\n * Implements an abstract React {@link Component} for the page reload overlays.\n *\n * FIXME: This is not really an abstract class as some components and functions are very web specific.\n */\nexport default class AbstractPageReloadOverlay<P: Props>\n    extends Component<P, State> {\n    /**\n     * Determines whether this overlay needs to be rendered (according to a\n     * specific redux state). Called by {@link OverlayContainer}.\n     *\n     * @param {Object} state - The redux state.\n     * @returns {boolean} - If this overlay needs to be rendered, {@code true};\n     * {@code false}, otherwise.\n     */\n    static needsRender(state: Object) {\n        // FIXME web does not rely on the 'recoverable' flag set on an error\n        // action, but on a predefined list of fatal errors. Because of that\n        // the value of 'fatalError' which relies on the flag should not be used\n        // on web yet (until conference/connection and their errors handling is\n        // not unified).\n        return typeof APP === 'undefined'\n            ? Boolean(state['features/overlay'].fatalError)\n            : this.needsRenderWeb(state);\n    }\n\n    /**\n     * Determines whether this overlay needs to be rendered (according to a\n     * specific redux state). Called by {@link OverlayContainer}.\n     *\n     * @param {Object} state - The redux state.\n     * @returns {boolean} - If this overlay needs to be rendered, {@code true};\n     * {@code false}, otherwise.\n     */\n    static needsRenderWeb(state: Object) {\n        const conferenceError = state['features/base/conference'].error;\n        const configError = state['features/base/config'].error;\n        const connectionError = state['features/base/connection'].error;\n\n        return (\n            (connectionError && isFatalJitsiConnectionError(connectionError))\n                || (conferenceError\n                    && isFatalJitsiConferenceError(conferenceError))\n                || configError);\n    }\n\n    _interval: ?IntervalID;\n\n    /**\n     * Initializes a new AbstractPageReloadOverlay instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     * @public\n     */\n    constructor(props: P) {\n        super(props);\n\n        /**\n         * How long the overlay dialog will be displayed, before the conference\n         * will be reloaded.\n         *\n         * @type {number}\n         */\n        const timeoutSeconds = 10 + randomInt(0, 20);\n\n        let message, title;\n\n        if (this.props.isNetworkFailure) {\n            title = 'dialog.conferenceDisconnectTitle';\n            message = 'dialog.conferenceDisconnectMsg';\n        } else {\n            title = 'dialog.conferenceReloadTitle';\n            message = 'dialog.conferenceReloadMsg';\n        }\n\n        this.state = {\n            message,\n            timeLeft: timeoutSeconds,\n            timeoutSeconds,\n            title\n        };\n    }\n\n    /**\n     * React Component method that executes once component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        // FIXME (CallStats - issue) This event will not make it to CallStats\n        // because the log queue is not flushed before \"fabric terminated\" is\n        // sent to the backed.\n        // FIXME: We should dispatch action for this.\n        if (typeof APP !== 'undefined') {\n            if (APP.conference && APP.conference._room) {\n                APP.conference._room.sendApplicationLog(JSON.stringify({\n                    name: 'page.reload',\n                    label: this.props.reason\n                }));\n            }\n        }\n\n        sendAnalytics(createPageReloadScheduledEvent(\n            this.props.reason,\n            this.state.timeoutSeconds,\n            this.props.details));\n\n        logger.info(\n            `The conference will be reloaded after ${\n                this.state.timeoutSeconds} seconds.`);\n\n        this._interval\n            = setInterval(\n                () => {\n                    if (this.state.timeLeft === 0) {\n                        if (this._interval) {\n                            clearInterval(this._interval);\n                            this._interval = undefined;\n                        }\n\n                        this.props.dispatch(reloadNow());\n                    } else {\n                        this.setState(prevState => {\n                            return {\n                                timeLeft: prevState.timeLeft - 1\n                            };\n                        });\n                    }\n                },\n                1000);\n    }\n\n    /**\n     * Clears the timer interval.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        if (this._interval) {\n            clearInterval(this._interval);\n            this._interval = undefined;\n        }\n    }\n\n    /**\n     * Renders the button for reloading the page if necessary.\n     *\n     * @protected\n     * @returns {ReactElement|null}\n     */\n    _renderButton() {\n        if (this.props.isNetworkFailure) {\n            return (\n                <ReloadButton textKey = 'dialog.rejoinNow' />\n            );\n        }\n\n        return null;\n    }\n\n    /**\n     * Renders the progress bar.\n     *\n     * @protected\n     * @returns {ReactElement}\n     */\n    _renderProgressBar() {\n        const { timeLeft, timeoutSeconds } = this.state;\n        const timeRemaining = timeoutSeconds - timeLeft;\n        const percentageComplete\n            = Math.floor((timeRemaining / timeoutSeconds) * 100);\n\n        return (\n            <div\n                className = 'progress-indicator'\n                id = 'reloadProgressBar'>\n                <div\n                    className = 'progress-indicator-fill'\n                    style = {{ width: `${percentageComplete}%` }} />\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated component's props.\n *\n * @param {Object} state - The redux state.\n * @protected\n * @returns {{\n *     details: Object,\n *     isNetworkFailure: boolean,\n *     reason: string\n * }}\n */\nexport function abstractMapStateToProps(state: Object) {\n    const { error: configError } = state['features/base/config'];\n    const { error: connectionError } = state['features/base/connection'];\n    const { fatalError } = state['features/overlay'];\n\n    return {\n        details: fatalError && fatalError.details,\n        isNetworkFailure:\n            fatalError === configError || fatalError === connectionError,\n        reason: fatalError && (fatalError.message || fatalError.name)\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\nimport AbstractPageReloadOverlay, { type Props, abstractMapStateToProps }\n    from '../AbstractPageReloadOverlay';\n\nimport FilmstripOnlyOverlayFrame from './FilmstripOnlyOverlayFrame';\n\n/**\n * Implements a React Component for page reload overlay for filmstrip only\n * mode. Shown before the conference is reloaded. Shows a warning message and\n * counts down towards the reload.\n */\nclass PageReloadFilmstripOnlyOverlay extends AbstractPageReloadOverlay<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n        const { message, timeLeft, title } = this.state;\n\n        return (\n            <FilmstripOnlyOverlayFrame>\n                <div className = 'inlay-filmstrip-only__container'>\n                    <div className = 'inlay-filmstrip-only__title'>\n                        { t(title) }\n                    </div>\n                    <div className = 'inlay-filmstrip-only__text'>\n                        { t(message, { seconds: timeLeft }) }\n                    </div>\n                </div>\n                { this._renderButton() }\n                { this._renderProgressBar() }\n            </FilmstripOnlyOverlayFrame>\n        );\n    }\n\n    _renderButton: () => React$Element<*> | null\n\n    _renderProgressBar: () => React$Element<*> | null\n}\n\nexport default translate(\n    connect(abstractMapStateToProps)(PageReloadFilmstripOnlyOverlay));\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\nimport AbstractPageReloadOverlay, {\n    abstractMapStateToProps,\n    type Props\n} from '../AbstractPageReloadOverlay';\n\nimport OverlayFrame from './OverlayFrame';\n\n/**\n * Implements a React Component for page reload overlay. Shown before the\n * conference is reloaded. Shows a warning message and counts down towards the\n * reload.\n */\nclass PageReloadOverlay extends AbstractPageReloadOverlay<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { isNetworkFailure, t } = this.props;\n        const { message, timeLeft, title } = this.state;\n\n        return (\n            <OverlayFrame isLightOverlay = { isNetworkFailure }>\n                <div className = 'inlay'>\n                    <span\n                        className = 'reload_overlay_title'>\n                        { t(title) }\n                    </span>\n                    <span className = 'reload_overlay_text'>\n                        { t(message, { seconds: timeLeft }) }\n                    </span>\n                    { this._renderProgressBar() }\n                    { this._renderButton() }\n                </div>\n            </OverlayFrame>\n        );\n    }\n\n    _renderButton: () => React$Element<*>\n\n    _renderProgressBar: () => React$Element<*>\n}\n\nexport default translate(connect(abstractMapStateToProps)(PageReloadOverlay));\n","// @flow\n\nimport { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractSuspendedOverlay}.\n */\ntype Props = {\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} for suspended overlay. Shown when a\n * suspend is detected.\n */\nexport default class AbstractSuspendedOverlay extends Component<Props> {\n    /**\n     * Determines whether this overlay needs to be rendered (according to a\n     * specific redux state). Called by {@link OverlayContainer}.\n     *\n     * @param {Object} state - The redux state.\n     * @returns {boolean} - If this overlay needs to be rendered, {@code true};\n     * {@code false}, otherwise.\n     */\n    static needsRender(state: Object) {\n        return state['features/power-monitor'].suspendDetected;\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate, translateToHTML } from '../../../base/i18n';\n\nimport AbstractSuspendedOverlay from './AbstractSuspendedOverlay';\nimport FilmstripOnlyOverlayFrame from './FilmstripOnlyOverlayFrame';\nimport ReloadButton from './ReloadButton';\n\n/**\n * Implements a React Component for suspended overlay for filmstrip only mode.\n * Shown when suspended is detected.\n */\nclass SuspendedFilmstripOnlyOverlay extends AbstractSuspendedOverlay {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <FilmstripOnlyOverlayFrame isLightOverlay = { true }>\n                <div className = 'inlay-filmstrip-only__container'>\n                    <div className = 'inlay-filmstrip-only__title'>\n                        { t('suspendedoverlay.title') }\n                    </div>\n                    <div className = 'inlay-filmstrip-only__text'>\n                        { translateToHTML(t, 'suspendedoverlay.text') }\n                    </div>\n                </div>\n                <ReloadButton textKey = 'suspendedoverlay.rejoinKeyTitle' />\n            </FilmstripOnlyOverlayFrame>\n        );\n    }\n}\n\nexport default translate(SuspendedFilmstripOnlyOverlay);\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\n\nimport AbstractSuspendedOverlay from './AbstractSuspendedOverlay';\nimport OverlayFrame from './OverlayFrame';\nimport ReloadButton from './ReloadButton';\n\n/**\n * Implements a React Component for suspended overlay. Shown when a suspend is\n * detected.\n */\nclass SuspendedOverlay extends AbstractSuspendedOverlay {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <OverlayFrame>\n                <div className = 'inlay'>\n                    <span className = 'inlay__icon icon-microphone' />\n                    <span className = 'inlay__icon icon-camera' />\n                    <h3\n                        className = 'inlay__title'>\n                        { t('suspendedoverlay.title') }\n                    </h3>\n                    <ReloadButton textKey = 'suspendedoverlay.rejoinKeyTitle' />\n                </div>\n            </OverlayFrame>\n        );\n    }\n}\n\nexport default translate(SuspendedOverlay);\n","// @flow\n\nimport { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractUserMediaPermissionsOverlay}.\n */\ntype Props = {\n\n    /**\n     * The browser which is used currently. The text is different for every\n     * browser.\n     */\n    browser: string,\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} for overlay with guidance how to proceed\n * with gUM prompt.\n */\nexport default class AbstractUserMediaPermissionsOverlay\n    extends Component<Props> {\n    /**\n     * Determines whether this overlay needs to be rendered (according to a\n     * specific redux state). Called by {@link OverlayContainer}.\n     *\n     * @param {Object} state - The redux state.\n     * @returns {boolean} - If this overlay needs to be rendered, {@code true};\n     * {@code false}, otherwise.\n     */\n    static needsRender(state: Object) {\n        return state['features/overlay'].isMediaPermissionPromptVisible;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated component's props.\n *\n * @param {Object} state - The redux state.\n * @protected\n * @returns {{\n *     browser: string\n * }}\n */\nexport function abstractMapStateToProps(state: Object) {\n    const { browser } = state['features/overlay'];\n\n    return {\n        browser\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate, translateToHTML } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\nimport AbstractUserMediaPermissionsOverlay, { abstractMapStateToProps }\n    from './AbstractUserMediaPermissionsOverlay';\nimport FilmstripOnlyOverlayFrame from './FilmstripOnlyOverlayFrame';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Implements a React Component for overlay with guidance how to proceed with\n * gUM prompt. This component will be displayed only for filmstrip only mode.\n */\nclass UserMediaPermissionsFilmstripOnlyOverlay\n    extends AbstractUserMediaPermissionsOverlay {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n        const textKey = `userMedia.${this.props.browser}GrantPermissions`;\n\n        return (\n            <FilmstripOnlyOverlayFrame\n                icon = 'icon-mic-camera-combined'\n                isLightOverlay = { true }>\n                <div className = 'inlay-filmstrip-only__container'>\n                    <div className = 'inlay-filmstrip-only__title'>\n                        {\n                            t('startupoverlay.title',\n                                { app: interfaceConfig.APP_NAME })\n                        }\n                    </div>\n                    <div className = 'inlay-filmstrip-only__text'>\n                        {\n                            translateToHTML(t, textKey)\n                        }\n                    </div>\n                </div>\n            </FilmstripOnlyOverlayFrame>\n        );\n    }\n}\n\nexport default translate(\n    connect(abstractMapStateToProps)(UserMediaPermissionsFilmstripOnlyOverlay));\n","// @flow\n\nimport React from 'react';\n\nimport { translate, translateToHTML } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\nimport AbstractUserMediaPermissionsOverlay, { abstractMapStateToProps }\n    from './AbstractUserMediaPermissionsOverlay';\nimport OverlayFrame from './OverlayFrame';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Implements a React Component for overlay with guidance how to proceed with\n * gUM prompt.\n */\nclass UserMediaPermissionsOverlay extends AbstractUserMediaPermissionsOverlay {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { browser, t } = this.props;\n\n        return (\n            <OverlayFrame>\n                <div className = 'inlay'>\n                    <span className = 'inlay__icon icon-microphone' />\n                    <span className = 'inlay__icon icon-camera' />\n                    <h3 className = 'inlay__title'>\n                        {\n                            t('startupoverlay.title',\n                                { app: interfaceConfig.APP_NAME })\n                        }\n                    </h3>\n                    <span className = 'inlay__text'>\n                        {\n                            translateToHTML(t,\n                                `userMedia.${browser}GrantPermissions`)\n                        }\n                    </span>\n                </div>\n                <div className = 'policy overlay__policy'>\n                    <p className = 'policy__text'>\n                        { translateToHTML(t, 'startupoverlay.policyText') }\n                    </p>\n                    {\n                        this._renderPolicyLogo()\n                    }\n                </div>\n            </OverlayFrame>\n        );\n    }\n\n    /**\n     * Renders the policy logo.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderPolicyLogo() {\n        const policyLogoSrc = interfaceConfig.POLICY_LOGO;\n\n        if (policyLogoSrc) {\n            return (\n                <div className = 'policy__logo'>\n                    <img src = { policyLogoSrc } />\n                </div>\n            );\n        }\n\n        return null;\n    }\n}\n\nexport default translate(\n    connect(abstractMapStateToProps)(UserMediaPermissionsOverlay));\n","// @flow\n\nimport { getOverlays } from './overlays';\n\n/**\n * Returns the overlay to be currently rendered.\n *\n * @param {Object} state - The Redux state.\n * @returns {?React$ComponentType<*>}\n */\nexport function getOverlayToRender(state: Object) {\n    for (const overlay of getOverlays()) {\n        // react-i18n / react-redux wrap components and thus we cannot access\n        // the wrapped component's static methods directly.\n        const component = overlay.WrappedComponent || overlay;\n\n        if (component.needsRender(state)) {\n            return overlay;\n        }\n    }\n\n    return undefined;\n}\n\n/**\n * Returns the visibility of the media permissions prompt.\n *\n * @param {Object} state - The Redux state.\n * @returns {boolean}\n */\nexport function getMediaPermissionPromptVisibility(state: Object) {\n    return state['features/overlay'].isMediaPermissionPromptVisible;\n}\n","// @flow\n\nimport {\n    PageReloadFilmstripOnlyOverlay,\n    PageReloadOverlay,\n    SuspendedFilmstripOnlyOverlay,\n    SuspendedOverlay,\n    UserMediaPermissionsFilmstripOnlyOverlay,\n    UserMediaPermissionsOverlay\n} from './components/web';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Returns the list of available platform specific overlays.\n *\n * @returns {Array<Object>}\n */\nexport function getOverlays(): Array<Object> {\n    const overlays = [\n        SuspendedOverlay,\n        UserMediaPermissionsOverlay\n    ];\n\n    const filmstripOnly\n            = typeof interfaceConfig === 'object' && interfaceConfig.filmStripOnly;\n\n    if (filmstripOnly) {\n        overlays.push(\n            PageReloadFilmstripOnlyOverlay,\n            SuspendedFilmstripOnlyOverlay,\n            UserMediaPermissionsFilmstripOnlyOverlay);\n    } else {\n        overlays.push(PageReloadOverlay);\n    }\n\n    return overlays;\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { connect } from '../../base/redux';\n\nimport { getOverlayToRender } from '../functions';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@link Component} props of {@code OverlayContainer}.\n */\ntype Props = {\n\n    /**\n     * The React {@link Component} type of overlay to be rendered by the\n     * associated {@code OverlayContainer}.\n     */\n    overlay: ?React$ComponentType<*>\n}\n\n/**\n * Implements a React {@link Component} that will display the correct overlay\n * when needed.\n */\nclass OverlayContainer extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @public\n     * @returns {ReactElement|null}\n     */\n    render() {\n        const { overlay } = this.props;\n\n        return overlay ? React.createElement(overlay, {}) : null;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated {@code OverlayContainer}'s\n * props.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     overlay: ?Object\n * }}\n */\nfunction _mapStateToProps(state) {\n    return {\n        /**\n         * The React {@link Component} type of overlay to be rendered by the\n         * associated {@code OverlayContainer}.\n         */\n        overlay: getOverlayToRender(state)\n    };\n}\n\nexport default connect(_mapStateToProps)(OverlayContainer);\n","// @flow\n\nimport { StateListenerRegistry } from '../base/redux';\n\nimport { setFatalError } from './actions';\n\ndeclare var APP: Object;\n\n/**\n * State listener which emits the {@code fatalErrorOccurred} action which works\n * as a catch all for critical errors which have not been claimed by any other\n * feature for error recovery (the recoverable flag is not set).\n */\nStateListenerRegistry.register(\n    /* selector */ state => {\n        const { error: conferenceError } = state['features/base/conference'];\n        const { error: configError } = state['features/base/config'];\n        const { error: connectionError } = state['features/base/connection'];\n\n        return configError || connectionError || conferenceError;\n    },\n    /* listener */ (error, { dispatch }) => {\n        error\n            && typeof error.recoverable === 'undefined'\n            && dispatch(setFatalError(error));\n    }\n);\n","// @flow\n\nimport { CONFIG_WILL_LOAD, LOAD_CONFIG_ERROR, SET_CONFIG } from '../base/config';\nimport { assign, ReducerRegistry, set } from '../base/redux';\n\nimport {\n    MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED,\n    SET_FATAL_ERROR\n} from './actionTypes';\n\n/**\n * Reduces the redux actions of the feature overlay.\n *\n * FIXME: these pieces of state should probably be in a different place.\n */\nReducerRegistry.register('features/overlay', (state = { }, action) => {\n    switch (action.type) {\n    case CONFIG_WILL_LOAD:\n        return _setShowLoadConfigOverlay(state, Boolean(action.room));\n\n    case LOAD_CONFIG_ERROR:\n    case SET_CONFIG:\n        return _setShowLoadConfigOverlay(false);\n\n    case MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED:\n        return _mediaPermissionPromptVisibilityChanged(state, action);\n\n    case SET_FATAL_ERROR:\n        return _setFatalError(state, action);\n\n    }\n\n    return state;\n});\n\n/**\n * Reduces a specific redux action MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED of\n * the feature overlay.\n *\n * @param {Object} state - The redux state of the feature overlay.\n * @param {Action} action - The redux action to reduce.\n * @private\n * @returns {Object} The new state of the feature overlay after the reduction of\n * the specified action.\n */\nfunction _mediaPermissionPromptVisibilityChanged(\n        state,\n        { browser, isVisible }) {\n    return assign(state, {\n        browser,\n        isMediaPermissionPromptVisible: isVisible\n    });\n}\n\n/**\n * Sets the {@code LoadConfigOverlay} overlay visible or not.\n *\n * @param {Object} state - The redux state of the feature overlay.\n * @param {boolean} show - Whether to show or not the overlay.\n * @returns {Object} The new state of the feature overlay after the reduction of\n * the specified action.\n */\nfunction _setShowLoadConfigOverlay(state, show) {\n    return set(state, 'loadConfigOverlayVisible', show);\n}\n\n/**\n * Reduces a specific redux action {@code SET_FATAL_ERROR} of the feature\n * overlay.\n *\n * @param {Object} state - The redux state of the feature overlay.\n * @param {Error} fatalError - If the value is set it indicates that a fatal\n * error has occurred and that the reload screen is to be displayed.\n * @returns {Object}\n * @private\n */\nfunction _setFatalError(state, { fatalError }) {\n    return set(state, 'fatalError', fatalError);\n}\n","// @flow\n\nexport * from './actions';\nexport * from './components';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","// @flow\n\nimport Platform from '../react/Platform';\n\n/**\n * Returns whether or not the current environment is a mobile device.\n *\n * @returns {boolean}\n */\nexport function isMobileBrowser() {\n    return Platform.OS === 'android' || Platform.OS === 'ios';\n}\n\n/**\n * Checks whether the chrome extensions defined in the config file are installed or not.\n *\n * @param {Object} config - Objects containing info about the configured extensions.\n *\n * @returns {Promise[]}\n */\nexport function checkChromeExtensionsInstalled(config: Object = {}) {\n    const isExtensionInstalled = info => new Promise(resolve => {\n        const img = new Image();\n\n        img.src = `chrome-extension://${info.id}/${info.path}`;\n        img.onload = function() {\n            resolve(true);\n        };\n        img.onerror = function() {\n            resolve(false);\n        };\n    });\n    const extensionInstalledFunction = info => isExtensionInstalled(info);\n\n    return Promise.all(\n        (config.chromeExtensionsInfo || []).map(info => extensionInstalledFunction(info))\n    );\n}\n","// @flow\n\nimport {\n    ADD_PREJOIN_AUDIO_TRACK,\n    ADD_PREJOIN_CONTENT_SHARING_TRACK,\n    ADD_PREJOIN_VIDEO_TRACK,\n    PREJOIN_START_CONFERENCE,\n    SET_DEVICE_STATUS,\n    SET_JOIN_BY_PHONE_DIALOG_VISIBLITY,\n    SET_PREJOIN_AUDIO_DISABLED,\n    SET_PREJOIN_AUDIO_MUTED,\n    SET_PREJOIN_DEVICE_ERRORS,\n    SET_PREJOIN_NAME,\n    SET_PREJOIN_PAGE_VISIBILITY,\n    SET_PREJOIN_VIDEO_DISABLED,\n    SET_PREJOIN_VIDEO_MUTED\n} from './actionTypes';\nimport { createLocalTrack } from '../base/lib-jitsi-meet';\nimport { getAudioTrack, getVideoTrack } from './functions';\nimport logger from './logger';\n\n/**\n * Action used to add an audio track to the store.\n *\n * @param {Object} value - The track to be added.\n * @returns {Object}\n */\nexport function addPrejoinAudioTrack(value: Object) {\n    return {\n        type: ADD_PREJOIN_AUDIO_TRACK,\n        value\n    };\n}\n\n/**\n * Action used to add a video track to the store.\n *\n * @param {Object} value - The track to be added.\n * @returns {Object}\n */\nexport function addPrejoinVideoTrack(value: Object) {\n    return {\n        type: ADD_PREJOIN_VIDEO_TRACK,\n        value\n    };\n}\n\n/**\n * Action used to add a content sharing track to the store.\n *\n * @param {Object} value - The track to be added.\n * @returns {Object}\n */\nexport function addPrejoinContentSharingTrack(value: Object) {\n    return {\n        type: ADD_PREJOIN_CONTENT_SHARING_TRACK,\n        value\n    };\n}\n\n/**\n * Adds all the newly created tracks to store on init.\n *\n * @param {Object[]} tracks - The newly created tracks.\n * @param {Object} errors - The errors from creating the tracks.\n *\n * @returns {Function}\n */\nexport function initPrejoin(tracks: Object[], errors: Object) {\n    return async function(dispatch: Function) {\n        const audioTrack = tracks.find(t => t.isAudioTrack());\n        const videoTrack = tracks.find(t => t.isVideoTrack());\n\n        dispatch(setPrejoinDeviceErrors(errors));\n\n        if (audioTrack) {\n            dispatch(addPrejoinAudioTrack(audioTrack));\n        } else {\n            dispatch(setAudioDisabled());\n        }\n\n        if (videoTrack) {\n            if (videoTrack.videoType === 'desktop') {\n                dispatch(addPrejoinContentSharingTrack(videoTrack));\n                dispatch(setPrejoinVideoDisabled(true));\n            } else {\n                dispatch(addPrejoinVideoTrack(videoTrack));\n            }\n        } else {\n            dispatch(setPrejoinVideoDisabled(true));\n        }\n    };\n}\n\n/**\n * Joins the conference.\n *\n * @returns {Function}\n */\nexport function joinConference() {\n    return function(dispatch: Function) {\n        dispatch(setPrejoinPageVisibility(false));\n        dispatch(startConference());\n    };\n}\n\n/**\n * Joins the conference without audio.\n *\n * @returns {Function}\n */\nexport function joinConferenceWithoutAudio() {\n    return async function(dispatch: Function, getState: Function) {\n        const audioTrack = getAudioTrack(getState());\n\n        if (audioTrack) {\n            await dispatch(replacePrejoinAudioTrack(null));\n        }\n        dispatch(setAudioDisabled());\n        dispatch(joinConference());\n    };\n}\n\n/**\n * Replaces the existing audio track with a new one.\n *\n * @param {Object} track - The new track.\n * @returns {Function}\n */\nexport function replacePrejoinAudioTrack(track: Object) {\n    return async (dispatch: Function, getState: Function) => {\n        const oldTrack = getAudioTrack(getState());\n\n        oldTrack && await oldTrack.dispose();\n        dispatch(addPrejoinAudioTrack(track));\n    };\n}\n\n/**\n * Creates a new audio track based on a device id and replaces the current one.\n *\n * @param {string} deviceId - The deviceId of the microphone.\n * @returns {Function}\n */\nexport function replaceAudioTrackById(deviceId: string) {\n    return async (dispatch: Function) => {\n        try {\n            const track = await createLocalTrack('audio', deviceId);\n\n            dispatch(replacePrejoinAudioTrack(track));\n        } catch (err) {\n            dispatch(setDeviceStatusWarning('prejoin.audioTrackError'));\n            logger.log('Error replacing audio track', err);\n        }\n    };\n}\n\n/**\n * Replaces the existing video track with a new one.\n *\n * @param {Object} track - The new track.\n * @returns {Function}\n */\nexport function replacePrejoinVideoTrack(track: Object) {\n    return async (dispatch: Function, getState: Function) => {\n        const oldTrack = getVideoTrack(getState());\n\n        oldTrack && await oldTrack.dispose();\n        dispatch(addPrejoinVideoTrack(track));\n    };\n}\n\n/**\n * Creates a new video track based on a device id and replaces the current one.\n *\n * @param {string} deviceId - The deviceId of the camera.\n * @returns {Function}\n */\nexport function replaceVideoTrackById(deviceId: Object) {\n    return async (dispatch: Function) => {\n        try {\n            const track = await createLocalTrack('video', deviceId);\n\n            dispatch(replacePrejoinVideoTrack(track));\n        } catch (err) {\n            dispatch(setDeviceStatusWarning('prejoin.videoTrackError'));\n            logger.log('Error replacing video track', err);\n        }\n    };\n}\n\n\n/**\n * Action used to mark audio muted.\n *\n * @param {boolean} value - True for muted.\n * @returns {Object}\n */\nexport function setPrejoinAudioMuted(value: boolean) {\n    return {\n        type: SET_PREJOIN_AUDIO_MUTED,\n        value\n    };\n}\n\n/**\n * Action used to mark video disabled.\n *\n * @param {boolean} value - True for muted.\n * @returns {Object}\n */\nexport function setPrejoinVideoDisabled(value: boolean) {\n    return {\n        type: SET_PREJOIN_VIDEO_DISABLED,\n        value\n    };\n}\n\n\n/**\n * Action used to mark video muted.\n *\n * @param {boolean} value - True for muted.\n * @returns {Object}\n */\nexport function setPrejoinVideoMuted(value: boolean) {\n    return {\n        type: SET_PREJOIN_VIDEO_MUTED,\n        value\n    };\n}\n\n/**\n * Action used to mark audio as disabled.\n *\n * @returns {Object}\n */\nexport function setAudioDisabled() {\n    return {\n        type: SET_PREJOIN_AUDIO_DISABLED\n    };\n}\n\n/**\n * Sets the device status as OK with the corresponding text.\n *\n * @param {string} deviceStatusText - The text to be set.\n * @returns {Object}\n */\nexport function setDeviceStatusOk(deviceStatusText: string) {\n    return {\n        type: SET_DEVICE_STATUS,\n        value: {\n            deviceStatusText,\n            deviceStatusType: 'ok'\n        }\n    };\n}\n\n/**\n * Sets the device status as 'warning' with the corresponding text.\n *\n * @param {string} deviceStatusText - The text to be set.\n * @returns {Object}\n */\nexport function setDeviceStatusWarning(deviceStatusText: string) {\n    return {\n        type: SET_DEVICE_STATUS,\n        value: {\n            deviceStatusText,\n            deviceStatusType: 'warning'\n        }\n    };\n}\n\n\n/**\n * Action used to set the visiblitiy of the 'JoinByPhoneDialog'.\n *\n * @param {boolean} value - The value.\n * @returns {Object}\n */\nexport function setJoinByPhoneDialogVisiblity(value: boolean) {\n    return {\n        type: SET_JOIN_BY_PHONE_DIALOG_VISIBLITY,\n        value\n    };\n}\n\n/**\n * Action used to set the initial errors after creating the tracks.\n *\n * @param {Object} value - The track errors.\n * @returns {Object}\n */\nexport function setPrejoinDeviceErrors(value: Object) {\n    return {\n        type: SET_PREJOIN_DEVICE_ERRORS,\n        value\n    };\n}\n\n/**\n * Action used to set the name of the guest user.\n *\n * @param {string} value - The name.\n * @returns {Object}\n */\nexport function setPrejoinName(value: string) {\n    return {\n        type: SET_PREJOIN_NAME,\n        value\n    };\n}\n\n/**\n * Action used to set the visiblity of the prejoin page.\n *\n * @param {boolean} value - The value.\n * @returns {Object}\n */\nexport function setPrejoinPageVisibility(value: boolean) {\n    return {\n        type: SET_PREJOIN_PAGE_VISIBILITY,\n        value\n    };\n}\n\n/**\n * Action used to mark the start of the conference.\n *\n * @returns {Object}\n */\nfunction startConference() {\n    return {\n        type: PREJOIN_START_CONFERENCE\n    };\n}\n","function _interopRequireWildcard(obj) {\n  if (obj && obj.__esModule) {\n    return obj;\n  } else {\n    var newObj = {};\n\n    if (obj != null) {\n      for (var key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\n          var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};\n\n          if (desc.get || desc.set) {\n            Object.defineProperty(newObj, key, desc);\n          } else {\n            newObj[key] = obj[key];\n          }\n        }\n      }\n    }\n\n    newObj[\"default\"] = obj;\n    return newObj;\n  }\n}\n\nmodule.exports = _interopRequireWildcard;","function _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \"default\": obj\n  };\n}\n\nmodule.exports = _interopRequireDefault;","import React from 'react';\nimport { withTranslation } from 'react-i18next';\n\n/**\n * Wraps a specific React Component in order to enable translations in it.\n *\n * @param {Component} component - The React Component to wrap.\n * @returns {Component} The React Component which wraps {@link component} and\n * enables translations in it.\n */\nexport function translate(component) {\n    // Use the default list of namespaces.\n    return withTranslation([ 'main', 'languages', 'countries' ])(component);\n}\n\n/**\n * Translates a specific key to text containing HTML via a specific translate\n * function.\n *\n * @param {Function} t - The translate function.\n * @param {string} key - The key to translate.\n * @param {Array<*>} options - The options, if any, to pass to {@link t}.\n * @returns {ReactElement} A ReactElement which depicts the translated HTML\n * text.\n */\nexport function translateToHTML(t, key, options = {}) {\n    // eslint-disable-next-line react/no-danger\n    return <span dangerouslySetInnerHTML = {{ __html: t(key, options) }} />;\n}\n","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};","\"use strict\";\n\nexports.__esModule = true;\n\nvar _setPrototypeOf = require(\"../core-js/object/set-prototype-of\");\n\nvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\n\nvar _create = require(\"../core-js/object/create\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n  }\n\n  subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};","/**\n * The type of redux action to set the AppState API change event listener.\n *\n * {\n *     type: _SET_APP_STATE_LISTENER,\n *     listener: Function\n * }\n *\n * @protected\n */\nexport const _SET_APP_STATE_LISTENER = '_SET_APP_STATE_LISTENER';\n\n/**\n * The type of redux action which signals that the app state has changed (in\n * terms of execution mode). The app state can be one of 'active', 'inactive',\n * or 'background'.\n *\n * {\n *     type: APP_STATE_CHANGED,\n *     appState: string\n * }\n *\n * @public\n * @see {@link https://facebook.github.io/react-native/docs/appstate.html}\n */\nexport const APP_STATE_CHANGED = 'APP_STATE_CHANGED';\n","// XXX The function parseURLParams is exported by the feature base/util (as\n// defined in the terminology of react/). However, this file is (very likely)\n// bundled in external_api in addition to app.bundle and, consequently, it is\n// best to import as little as possible here (rather than the whole feature\n// base/util) in order to minimize the amount of source code bundled into\n// multiple bundles.\nimport { parseURLParams } from '../../react/features/base/util/parseURLParams';\n\n/**\n * JitsiMeetExternalAPI id - unique for a webpage.\n */\nexport const API_ID = parseURLParams(window.location).jitsi_meet_external_api_id;\n\n/**\n * The payload name for the datachannel/endpoint text message event\n */\nexport const ENDPOINT_TEXT_MESSAGE_NAME = 'endpoint-text-message';\n","var positionMap = {\n  'top left': { position: 'top-start', animation: 'top' },\n  'top center': { position: 'top', animation: 'top' },\n  'top right': { position: 'top-end', animation: 'top' },\n  'right top': { position: 'right-start', animation: 'right' },\n  'right middle': { position: 'right', animation: 'right' },\n  'right bottom': { position: 'right-end', animation: 'right' },\n  'bottom left': { position: 'bottom-start', animation: 'bottom' },\n  'bottom center': { position: 'bottom', animation: 'bottom' },\n  'bottom right': { position: 'bottom-end', animation: 'bottom' },\n  'left top': { position: 'left-start', animation: 'left' },\n  'left middle': { position: 'left', animation: 'left' },\n  'left bottom': { position: 'left-end', animation: 'left' }\n};\n\nexport var POSITION_ATTRIBUTE_ENUM = {\n  values: ['top left', 'top center', 'top right', 'right top', 'right middle', 'right bottom', 'bottom left', 'bottom center', 'bottom right', 'left top', 'left middle', 'left bottom'],\n  default: 'right middle'\n};\n\nfunction positionToPopper(position) {\n  return position && positionMap[position] ? positionMap[position].position : null;\n}\n\n/* Convert the autoFlip property into the array format that Popper expects.\n * The first item must not include the edge-position variation, or Popper will not understand it.\n */\nexport function getFlipBehavior(props) {\n  return props.position && Array.isArray(props.autoFlip) ? [props.position.split(' ')[0]].concat(props.autoFlip) : null;\n}\n\nexport function positionPropToPopperPosition(position) {\n  return positionToPopper(position) || positionMap[POSITION_ATTRIBUTE_ENUM.default].position;\n}","import _taggedTemplateLiteral from 'babel-runtime/helpers/taggedTemplateLiteral';\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  [data-role=\\'droplistContent\\'] {\\n    ', ';\\n  }\\n'], ['\\n  [data-role=\\'droplistContent\\'] {\\n    ', ';\\n  }\\n']);\n\nimport styled from 'styled-components';\n\nexport default styled.div(_templateObject, function (_ref) {\n  var maxHeight = _ref.maxHeight;\n  return maxHeight ? 'max-height: ' + maxHeight + 'px' : '';\n});","import _extends from 'babel-runtime/helpers/extends';\nimport _typeof from 'babel-runtime/helpers/typeof';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React, { Component } from 'react';\n\nimport Popper from '../../popper/index-min';\nimport { getFlipBehavior, positionPropToPopperPosition } from './internal/helpers';\nimport ContentContainer from '../styledContentContainer';\n\n/* eslint-disable react/no-unused-prop-types */\n\nvar Layer = function (_Component) {\n  _inherits(Layer, _Component);\n\n  function Layer(props) {\n    _classCallCheck(this, Layer);\n\n    var _this = _possibleConstructorReturn(this, (Layer.__proto__ || _Object$getPrototypeOf(Layer)).call(this, props));\n\n    _this.extractStyles = function (state) {\n      if (state) {\n        var popperHeight = state.offsets.popper.height;\n        var left = Math.round(state.offsets.popper.left);\n        // The offset position is sometimes an object and sometimes just a string...\n        var _cssPosition = _typeof(state.offsets.popper.position) === 'object' ? state.offsets.popper.position.position : state.offsets.popper.position;\n        var top = _this.fixPositionTopUnderflow(state.offsets.popper.top, _cssPosition);\n\n        var _originalHeight = _this.state.originalHeight || popperHeight;\n        var _maxHeight = _this.calculateMaxHeight(_originalHeight, popperHeight, top, _cssPosition);\n        _this.setState({\n          // position: fixed or absolute\n          cssPosition: _cssPosition,\n          hasExtractedStyles: true,\n          transform: 'translate3d(' + left + 'px, ' + top + 'px, 0px)',\n          // state.flipped is either true or undefined\n          flipped: !!state.flipped,\n          actualPosition: state.position,\n          originalPosition: state.originalPosition,\n          originalHeight: _originalHeight,\n          maxHeight: _maxHeight\n        });\n      }\n    };\n\n    _this.state = {\n      hasExtractedStyles: false,\n      position: null,\n      transform: null,\n      flipped: false,\n      actualPosition: null,\n      // We set these default offsets to prevent a flash of popper content in the wrong position\n      // which can cause incorrect height calculations. Popper will calculate these values\n      offsets: {\n        popper: {\n          left: -9999,\n          top: -9999\n        }\n      },\n      originalPosition: null,\n      // fix Safari parent width: https://product-fabric.atlassian.net/browse/ED-1784\n      cssPosition: 'absolute',\n      originalHeight: null,\n      maxHeight: null\n    };\n    _this.extractStyles = _this.extractStyles.bind(_this);\n    return _this;\n  }\n\n  // TODO: get the value of zIndex from theme, not using it now as it is not\n  // working with extract-react-types\n\n\n  _createClass(Layer, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.applyPopper(this.props);\n    }\n  }, {\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps(nextProps) {\n      this.applyPopper(nextProps);\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps, prevState) {\n      if (prevState.flipped !== this.state.flipped && this.props.onFlippedChange) {\n        this.props.onFlippedChange({\n          flipped: this.state.flipped,\n          actualPosition: this.state.actualPosition,\n          originalPosition: this.state.originalPosition\n        });\n      }\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      if (this.popper) {\n        this.popper.destroy();\n      }\n    }\n\n    /* Calculate the max height of the popper if it's height is greater than the viewport to prevent\n     * the bottom of the popper not being viewable.\n     * Only works if the popper uses viewport as the boundary and has a fixed position ancestor.\n     */\n\n  }, {\n    key: 'calculateMaxHeight',\n    value: function calculateMaxHeight(originalHeight, currentHeight, positionTop, cssPosition) {\n      var DocumentElementClientHeight = 0;\n\n      if (document.documentElement) {\n        DocumentElementClientHeight = document.documentElement.clientHeight;\n      }\n      if (cssPosition !== 'fixed' || this.props.boundariesElement !== 'viewport') {\n        return null;\n      }\n      var viewportHeight = Math.max(DocumentElementClientHeight, window.innerHeight || 0);\n      return viewportHeight < originalHeight && currentHeight + positionTop >= viewportHeight - 50 ? // allow some spacing either side of viewport height\n      viewportHeight - 12 : null;\n    }\n\n    /* Clamp fixed position to the window for fixed position poppers that flow off the top of the\n     * window.\n     * A fixed position popper is a popper who has an ancestor with position: fixed.\n     *\n     * It is too difficult to fix this for non-fixed position poppers without re-implementing popper's\n     * offset functionality or fixing the issue upstream.\n     */\n    // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: 'fixPositionTopUnderflow',\n    value: function fixPositionTopUnderflow(popperTop, cssPosition) {\n      return popperTop >= 0 || cssPosition !== 'fixed' ? Math.round(popperTop) : 0;\n    }\n  }, {\n    key: 'applyPopper',\n    value: function applyPopper(props) {\n      if (!this.targetRef || !this.contentRef) {\n        return;\n      }\n\n      if (this.popper) {\n        this.popper.destroy();\n      }\n\n      // \"new Popper(...)\" operation is very expensive when called on virtual DOM.\n      // This condition reduces the number of calls so we can run our tests faster\n      // (time was reduced from 100s to 13s).\n      if (!props.content) {\n        return;\n      }\n\n      // we wrap our target in a div so that we can safely get a reference to it, but we pass the\n      // actual target to popper\n      var actualTarget = this.targetRef.firstChild;\n      var popperOpts = {\n        placement: positionPropToPopperPosition(props.position),\n        onCreate: this.extractStyles,\n        onUpdate: this.extractStyles,\n        modifiers: {\n          applyStyle: {\n            enabled: false\n          },\n          hide: {\n            enabled: false\n          },\n          offset: {\n            enabled: true,\n            offset: this.props.offset\n          },\n          flip: {\n            enabled: !!this.props.autoFlip,\n            flipVariations: true,\n            boundariesElement: this.props.boundariesElement,\n            padding: 0 // leave 0 pixels between popper and the boundariesElement\n          },\n          preventOverflow: {\n            enabled: !!this.props.autoFlip,\n            escapeWithReference: !(this.props.boundariesElement === 'scrollParent')\n          }\n        }\n      };\n\n      var flipBehavior = getFlipBehavior(props);\n      if (flipBehavior) {\n        popperOpts.modifiers.flip.behavior = flipBehavior;\n      }\n\n      this.popper = new Popper(actualTarget, this.contentRef, popperOpts);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      var zIndex = this.props.zIndex;\n      var _state = this.state,\n          cssPosition = _state.cssPosition,\n          transform = _state.transform,\n          hasExtractedStyles = _state.hasExtractedStyles,\n          maxHeight = _state.maxHeight;\n\n      var opacity = hasExtractedStyles ? {} : { opacity: 0 };\n\n      return React.createElement(\n        'div',\n        null,\n        React.createElement(\n          'div',\n          {\n            ref: function ref(_ref) {\n              _this2.targetRef = _ref;\n            }\n          },\n          this.props.children\n        ),\n        React.createElement(\n          ContentContainer,\n          { maxHeight: maxHeight },\n          React.createElement(\n            'div',\n            {\n              ref: function ref(_ref2) {\n                _this2.contentRef = _ref2;\n              },\n              style: _extends({\n                top: 0,\n                left: 0,\n                position: cssPosition,\n                transform: transform,\n                zIndex: zIndex\n              }, opacity)\n            },\n            this.props.content\n          )\n        )\n      );\n    }\n  }]);\n\n  return Layer;\n}(Component);\n\n/* eslint-enable react/no-unused-prop-types */\n\n\nLayer.defaultProps = {\n  autoFlip: true,\n  boundariesElement: 'viewport',\n  children: null,\n  content: null,\n  offset: '0 0',\n  onFlippedChange: function onFlippedChange() {},\n  position: 'right middle',\n  zIndex: 400\n};\nexport default Layer;","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","\n/* eslint-disable no-nested-ternary */\n\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants';\nimport '../types';\n\nvar defaultTheme = { mode: DEFAULT_THEME_MODE };\n\nexport default function getTheme(props) {\n  return props && props.theme && props.theme[CHANNEL] ? props.theme[CHANNEL] : defaultTheme;\n}","\n/* eslint-disable prefer-rest-params */\n\nimport getTheme from './getTheme';\nimport '../types';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","import themed from './utils/themed';\n\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600';\n\n// Yellows\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00';\n\n// Greens\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644';\n\n// Blues\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6';\n\n// Purples\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294';\n\n// Teals\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6';\n\n// Neutrals\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D';\n\n// ATTENTION: update the tints if you update this\nexport var N900 = '#091E42';\n\n// Each tint is made of N900 and an alpha channel\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)';\n\n// Dark Mode Neutrals\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624';\n\n// ATTENTION: update the tints if you update this\nexport var DN0 = '#0D1424';\n\n// Each dark tint is made of DN0 and an alpha channel\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)';\n\n// Themed colors\nexport var background = themed({ light: N0, dark: DN30 });\nexport var text = themed({ light: N900, dark: DN600 });\nexport var subtleText = themed({ light: N300, dark: DN300 });\nexport var placeholderText = themed({ light: N100, dark: DN200 });\nexport var heading = themed({ light: N800, dark: DN600 });\nexport var subtleHeading = themed({ light: N300, dark: DN300 });\nexport var codeBlock = themed({ light: N20, dark: DN50 });\nexport var link = themed({ light: B400, dark: B100 });\nexport var linkHover = themed({ light: B300, dark: B200 });\nexport var linkActive = themed({ light: B500, dark: B100 });\nexport var linkOutline = themed({ light: B100, dark: B200 });\nexport var primary = themed({ light: B400, dark: B100 });\nexport var blue = themed({ light: B400, dark: B100 });\nexport var teal = themed({ light: T300, dark: T200 });\nexport var purple = themed({ light: P300, dark: P100 });\nexport var red = themed({ light: R300, dark: R300 });\nexport var yellow = themed({ light: Y300, dark: Y300 });\nexport var green = themed({ light: G300, dark: G300 });","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\n\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\n\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\n\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import _taggedTemplateLiteral from 'babel-runtime/helpers/taggedTemplateLiteral';\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background-color: ', ';\\n  color: ', ';\\n\\n  a {\\n    color: ', ';\\n  }\\n  a:hover {\\n    color: ', ';\\n  }\\n  a:active {\\n    color: ', ';\\n  }\\n  a:focus {\\n    outline-color: ', ';\\n  }\\n  h1 {\\n    color: ', ';\\n  }\\n  h2 {\\n    color: ', ';\\n  }\\n  h3 {\\n    color: ', ';\\n  }\\n  h4 {\\n    color: ', ';\\n  }\\n  h5 {\\n    color: ', ';\\n  }\\n  h6 {\\n    color: ', ';\\n  }\\n  small {\\n    color: ', ';\\n  }\\n'], ['\\n  background-color: ', ';\\n  color: ', ';\\n\\n  a {\\n    color: ', ';\\n  }\\n  a:hover {\\n    color: ', ';\\n  }\\n  a:active {\\n    color: ', ';\\n  }\\n  a:focus {\\n    outline-color: ', ';\\n  }\\n  h1 {\\n    color: ', ';\\n  }\\n  h2 {\\n    color: ', ';\\n  }\\n  h3 {\\n    color: ', ';\\n  }\\n  h4 {\\n    color: ', ';\\n  }\\n  h5 {\\n    color: ', ';\\n  }\\n  h6 {\\n    color: ', ';\\n  }\\n  small {\\n    color: ', ';\\n  }\\n']);\n\nimport styled from 'styled-components';\nimport * as colors from '../colors';\n\nvar ThemeReset = styled.div(_templateObject, colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nexport default ThemeReset;","import _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport _defineProperty from 'babel-runtime/helpers/defineProperty';\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { ThemeProvider } from 'styled-components';\n\nimport { background } from '../colors';\nimport ThemeReset from './ThemeReset';\n\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = background(state);\n  return '\\n    body { background: ' + backgroundColor + '; }\\n  ';\n}\n\nfunction buildThemeState(mode) {\n  return { theme: _defineProperty({}, CHANNEL, { mode: mode }) };\n}\n\nvar AtlaskitThemeProvider = function (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    var _this = _possibleConstructorReturn(this, (AtlaskitThemeProvider.__proto__ || _Object$getPrototypeOf(AtlaskitThemeProvider)).call(this, props));\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: 'getChildContext',\n    value: function getChildContext() {\n      return { hasAtlaskitThemeProvider: true };\n    }\n  }, {\n    key: 'componentWillMount',\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var children = this.props.children;\n\n      var theme = this.state.theme;\n      return React.createElement(\n        ThemeProvider,\n        { theme: theme },\n        React.createElement(\n          ThemeReset,\n          null,\n          children\n        )\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\nAtlaskitThemeProvider.defaultProps = {\n  mode: DEFAULT_THEME_MODE\n};\nAtlaskitThemeProvider.childContextTypes = {\n  hasAtlaskitThemeProvider: PropTypes.bool\n};\nAtlaskitThemeProvider.contextTypes = {\n  hasAtlaskitThemeProvider: PropTypes.bool\n};\nexport default AtlaskitThemeProvider;","import * as colors from './colors';\n\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\n\nexport { colors, math, getTheme, themed, AtlaskitThemeProvider };\n\n// backwards-compatible export with old AtlasKit case\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Courier, monospace';\n};\n\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};","import _taggedTemplateLiteral from 'babel-runtime/helpers/taggedTemplateLiteral';\n\nvar _templateObject = _taggedTemplateLiteral(['\\n  background: ', ';\\n  border-radius: ', 'px;\\n  box-shadow: ', ';\\n  box-sizing: content-box; /* do not set this to border-box or it will break the overflow handling */\\n  color: ', ';\\n  max-height: ', 'px;\\n  max-width: ', 'px;\\n  padding: ', 'px ', 'px;\\n  z-index: 200;\\n'], ['\\n  background: ', ';\\n  border-radius: ', 'px;\\n  box-shadow: ', ';\\n  box-sizing: content-box; /* do not set this to border-box or it will break the overflow handling */\\n  color: ', ';\\n  max-height: ', 'px;\\n  max-width: ', 'px;\\n  padding: ', 'px ', 'px;\\n  z-index: 200;\\n']);\n\nimport styled from 'styled-components';\nimport { borderRadius, colors, gridSize, math, themed } from '@atlaskit/theme';\n\nvar backgroundColor = themed({\n  light: colors.N0,\n  dark: colors.DN50\n});\nvar borderColor = themed({\n  light: colors.N60A,\n  dark: colors.DN60A\n});\nvar shadowColor = themed({\n  light: colors.N50A,\n  dark: colors.DN50A\n});\n\nvar getBoxShadow = function getBoxShadow(props) {\n  var border = '0 0 1px ' + borderColor(props);\n  var shadow = '0 4px 8px -2px ' + shadowColor(props);\n\n  return [border, shadow].join(',');\n};\n\n// eslint-disable-next-line import/prefer-default-export\nexport var Container = styled.div(_templateObject, backgroundColor, borderRadius, getBoxShadow, colors.text, math.multiply(gridSize, 56), math.multiply(gridSize, 56), math.multiply(gridSize, 2), math.multiply(gridSize, 3));","import _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport Layer from '@atlaskit/layer';\nimport { gridSize } from '@atlaskit/theme';\nimport { Container } from './styled';\n\n// TODO: expose positions and flipPositions from Layer and pull in here\n\n// TODO: expose applicable props from Layer and pull in here\nvar InlineDialog = function (_Component) {\n  _inherits(InlineDialog, _Component);\n\n  function InlineDialog() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, InlineDialog);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = InlineDialog.__proto__ || _Object$getPrototypeOf(InlineDialog)).call.apply(_ref, [this].concat(args))), _this), _this.componentDidMount = function () {\n      document.addEventListener('click', _this.handleClickOutside);\n    }, _this.componentWillUnmount = function () {\n      document.removeEventListener('click', _this.handleClickOutside);\n    }, _this.handleClickOutside = function (event) {\n      if (event.defaultPrevented) return;\n\n      if (_this.props.isOpen) {\n        var domNode = ReactDOM.findDOMNode(_this); // eslint-disable-line react/no-find-dom-node\n        if (!domNode || event.target instanceof Node && !domNode.contains(event.target)) {\n          if (_this.props.onClose) _this.props.onClose({ isOpen: false, event: event });\n        }\n      }\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(InlineDialog, [{\n    key: 'render',\n    value: function render() {\n      var _props = this.props,\n          boundariesElement = _props.boundariesElement,\n          children = _props.children,\n          content = _props.content,\n          isOpen = _props.isOpen,\n          onContentBlur = _props.onContentBlur,\n          onContentClick = _props.onContentClick,\n          onContentFocus = _props.onContentFocus,\n          position = _props.position,\n          shouldFlip = _props.shouldFlip;\n\n      // this offset is passed to popper as two space separated numbers representing\n      // the offset from the target the first is distance along the same axis you are\n      // on (top or bottom aligned would move left/right) and the second is on the\n      // perpendicular axis (how far 'away' you are from the target) both are measured\n      // in pixels\n      // $FlowFixMe TEMPORARY\n\n      var dialogOffset = '0 ' + gridSize(this.props);\n\n      var layerContent = isOpen ? React.createElement(\n        Container,\n        {\n          onBlurCapture: onContentBlur,\n          onClick: onContentClick,\n          onFocusCapture: onContentFocus,\n          tabIndex: '-1'\n        },\n        content\n      ) : null;\n\n      return React.createElement(\n        Layer,\n        {\n          boundariesElement: boundariesElement,\n          autoFlip: shouldFlip,\n          content: layerContent,\n          offset: dialogOffset,\n          position: position\n        },\n        React.createElement(\n          'div',\n          null,\n          children\n        )\n      );\n    }\n  }]);\n\n  return InlineDialog;\n}(Component);\n\nInlineDialog.defaultProps = {\n  isOpen: false,\n  onContentBlur: function onContentBlur() {},\n  onContentClick: function onContentClick() {},\n  onContentFocus: function onContentFocus() {},\n  onClose: function onClose() {},\n  position: 'bottom center',\n  shouldFlip: false\n};\nexport default InlineDialog;","export { default } from './InlineDialog';","export default function _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}","// @flow\n\n/**\n * The type of (redux) action which signals that all the stored notifications\n * need to be cleared.\n *\n * {\n *     type: CLEAR_NOTIFICATIONS\n * }\n */\nexport const CLEAR_NOTIFICATIONS = 'CLEAR_NOTIFICATIONS';\n\n/**\n * The type of (redux) action which signals that a specific notification should\n * not be displayed anymore.\n *\n * {\n *     type: HIDE_NOTIFICATION,\n *     uid: number\n * }\n */\nexport const HIDE_NOTIFICATION = 'HIDE_NOTIFICATION';\n\n/**\n * The type of (redux) action which signals that a notification component should\n * be displayed.\n *\n * {\n *     type: SHOW_NOTIFICATION,\n *     component: ReactComponent,\n *     props: Object,\n *     timeout: number,\n *     uid: number\n * }\n */\nexport const SHOW_NOTIFICATION = 'SHOW_NOTIFICATION';\n\n/**\n * The type of (redux) action which signals that notifications should not\n * display.\n *\n * {\n *     type: SET_NOTIFICATIONS_ENABLED,\n *     enabled: Boolean\n * }\n */\nexport const SET_NOTIFICATIONS_ENABLED = 'SET_NOTIFICATIONS_ENABLED';\n","/**\n * The type of the action which signals document editing has stopped or started.\n *\n * {\n *     type: SET_DOCUMENT_EDITING_STATUS\n * }\n */\nexport const SET_DOCUMENT_EDITING_STATUS = 'SET_DOCUMENT_EDITING_STATUS';\n\n/**\n * The type of the action which updates the shared document URL.\n *\n * {\n *     type: SET_DOCUMENT_URL\n * }\n */\nexport const SET_DOCUMENT_URL = 'SET_DOCUMENT_URL';\n\n/**\n * The type of the action which signals to start or stop editing a shared\n * document.\n *\n * {\n *     type: TOGGLE_DOCUMENT_EDITING\n * }\n */\nexport const TOGGLE_DOCUMENT_EDITING = 'TOGGLE_DOCUMENT_EDITING';\n","// @flow\n\nimport {\n    SET_DOCUMENT_EDITING_STATUS,\n    SET_DOCUMENT_URL,\n    TOGGLE_DOCUMENT_EDITING\n} from './actionTypes';\n\n/**\n * Dispatches an action to set whether document editing has started or stopped.\n *\n * @param {boolean} editing - Whether or not a document is currently being\n * edited.\n * @returns {{\n *    type: SET_DOCUMENT_EDITING_STATUS,\n *    editing: boolean\n * }}\n */\nexport function setDocumentEditingState(editing: boolean) {\n    return {\n        type: SET_DOCUMENT_EDITING_STATUS,\n        editing\n    };\n}\n\n/**\n * Dispatches an action to set the shared document URL.\n *\n * @param {string} documentUrl - The shared document URL.\n * @returns {{\n *    type: SET_DOCUMENT_URL,\n *    documentUrl: string\n * }}\n */\nexport function setDocumentUrl(documentUrl: ?string) {\n    return {\n        type: SET_DOCUMENT_URL,\n        documentUrl\n    };\n}\n\n/**\n * Dispatches an action to show or hide Etherpad.\n *\n * @returns {{\n *    type: TOGGLE_DOCUMENT_EDITING\n * }}\n */\nexport function toggleDocument() {\n    return {\n        type: TOGGLE_DOCUMENT_EDITING\n    };\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { IconShareDoc } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox';\n\nimport { toggleDocument } from '../actions';\n\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether the shared document is being edited or not.\n     */\n    _editing: boolean,\n\n    /**\n     * Redux dispatch function.\n     */\n    dispatch: Dispatch<any>,\n};\n\n/**\n * Implements an {@link AbstractButton} to open the chat screen on mobile.\n */\nclass SharedDocumentButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.document';\n    icon = IconShareDoc;\n    label = 'toolbar.documentOpen';\n    toggledLabel = 'toolbar.documentClose';\n\n    /**\n     * Handles clicking / pressing the button, and opens / closes the appropriate dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        sendAnalytics(createToolbarEvent(\n            'toggle.etherpad',\n            {\n                enable: !this.props._editing\n            }));\n        this.props.dispatch(toggleDocument());\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._editing;\n    }\n}\n\n/**\n * Maps part of the redux state to the component's props.\n *\n * @param {Object} state - The redux store/state.\n * @param {Object} ownProps - The properties explicitly passed to the component\n * instance.\n * @returns {Object}\n */\nfunction _mapStateToProps(state: Object, ownProps: Object) {\n    const { documentUrl, editing } = state['features/etherpad'];\n    const { visible = Boolean(documentUrl) } = ownProps;\n\n    return {\n        _editing: editing,\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(SharedDocumentButton));\n","/**\n * Modal view ID of the SharedDocument view.\n */\nexport const SHARE_DOCUMENT_VIEW_ID = 'SHARE_DOCUMENT_VIEW_ID';\n","// @flow\n\nimport { toState } from '../base/redux';\n\nconst ETHERPAD_OPTIONS = {\n    showControls: 'true',\n    showChat: 'false',\n    showLineNumbers: 'true',\n    useMonospaceFont: 'false'\n};\n\n/**\n * Retrieves the current sahred document URL.\n *\n * @param {Function|Object} stateful - The redux store or {@code getState} function.\n * @returns {?string} - Current shared document URL or undefined.\n */\nexport function getSharedDocumentUrl(stateful: Function | Object) {\n    const state = toState(stateful);\n    const { documentUrl } = state['features/etherpad'];\n    const { displayName } = state['features/base/settings'];\n\n    if (!documentUrl) {\n        return undefined;\n    }\n\n    const params = new URLSearchParams(ETHERPAD_OPTIONS);\n\n    if (displayName) {\n        params.append('userName', displayName);\n    }\n\n    return `${documentUrl}?${params.toString()}`;\n}\n","// @flow\n\nimport { getCurrentConference } from '../base/conference';\nimport { setActiveModalId } from '../base/modal';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\nimport UIEvents from '../../../service/UI/UIEvents';\n\nimport { TOGGLE_DOCUMENT_EDITING } from './actionTypes';\nimport { setDocumentEditingState, setDocumentUrl } from './actions';\nimport { SHARE_DOCUMENT_VIEW_ID } from './constants';\n\ndeclare var APP: Object;\n\nconst ETHERPAD_COMMAND = 'etherpad';\n\n/**\n * Middleware that captures actions related to collaborative document editing\n * and notifies components not hooked into redux.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    switch (action.type) {\n    case TOGGLE_DOCUMENT_EDITING: {\n        if (typeof APP === 'undefined') {\n            const editing = !getState()['features/etherpad'].editing;\n\n            dispatch(setDocumentEditingState(editing));\n\n            if (editing) {\n                dispatch(setActiveModalId(SHARE_DOCUMENT_VIEW_ID));\n            } else if (getState()['features/base/modal'].activeModalId === SHARE_DOCUMENT_VIEW_ID) {\n                dispatch(setActiveModalId(undefined));\n            }\n        } else {\n            APP.UI.emitEvent(UIEvents.ETHERPAD_CLICKED);\n        }\n        break;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Set up state change listener to perform maintenance tasks when the conference\n * is left or failed, e.g. clear messages or close the chat modal if it's left\n * open.\n */\nStateListenerRegistry.register(\n    state => getCurrentConference(state),\n    (conference, { dispatch, getState }, previousConference) => {\n        if (conference) {\n            conference.addCommandListener(ETHERPAD_COMMAND,\n                ({ value }) => {\n                    let url;\n                    const { etherpad_base: etherpadBase } = getState()['features/base/config'];\n\n                    if (etherpadBase) {\n                        const u = new URL(value, etherpadBase);\n\n                        url = u.toString();\n                    }\n\n                    dispatch(setDocumentUrl(url));\n                }\n            );\n        }\n\n        if (previousConference) {\n            dispatch(setDocumentUrl(undefined));\n        }\n    });\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport { SET_DOCUMENT_EDITING_STATUS, SET_DOCUMENT_URL } from './actionTypes';\n\nconst DEFAULT_STATE = {\n\n    /**\n     * URL for the shared document.\n     */\n    documentUrl: undefined,\n\n    /**\n     * Whether or not Etherpad is currently open.\n     *\n     * @public\n     * @type {boolean}\n     */\n    editing: false\n};\n\n/**\n * Reduces the Redux actions of the feature features/etherpad.\n */\nReducerRegistry.register(\n    'features/etherpad',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case SET_DOCUMENT_EDITING_STATUS:\n            return {\n                ...state,\n                editing: action.editing\n            };\n\n        case SET_DOCUMENT_URL:\n            return {\n                ...state,\n                documentUrl: action.documentUrl\n            };\n\n        default:\n            return state;\n        }\n    });\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './constants';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","export { default } from './Spinner';","import $$observable from 'symbol-observable';\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n  return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n  INIT: \"@@redux/INIT\" + randomString(),\n  REPLACE: \"@@redux/REPLACE\" + randomString(),\n  PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n    return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n  }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n  if (typeof obj !== 'object' || obj === null) return false;\n  var proto = obj;\n\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n\n  return Object.getPrototypeOf(obj) === proto;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n  var _ref2;\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n    throw new Error('It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function.');\n  }\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = preloadedState;\n    preloadedState = undefined;\n  }\n\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error('Expected the enhancer to be a function.');\n    }\n\n    return enhancer(createStore)(reducer, preloadedState);\n  }\n\n  if (typeof reducer !== 'function') {\n    throw new Error('Expected the reducer to be a function.');\n  }\n\n  var currentReducer = reducer;\n  var currentState = preloadedState;\n  var currentListeners = [];\n  var nextListeners = currentListeners;\n  var isDispatching = false;\n  /**\n   * This makes a shallow copy of currentListeners so we can use\n   * nextListeners as a temporary list while dispatching.\n   *\n   * This prevents any bugs around consumers calling\n   * subscribe/unsubscribe in the middle of a dispatch.\n   */\n\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = currentListeners.slice();\n    }\n  }\n  /**\n   * Reads the state tree managed by the store.\n   *\n   * @returns {any} The current state tree of your application.\n   */\n\n\n  function getState() {\n    if (isDispatching) {\n      throw new Error('You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n    }\n\n    return currentState;\n  }\n  /**\n   * Adds a change listener. It will be called any time an action is dispatched,\n   * and some part of the state tree may potentially have changed. You may then\n   * call `getState()` to read the current state tree inside the callback.\n   *\n   * You may call `dispatch()` from a change listener, with the following\n   * caveats:\n   *\n   * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n   * If you subscribe or unsubscribe while the listeners are being invoked, this\n   * will not have any effect on the `dispatch()` that is currently in progress.\n   * However, the next `dispatch()` call, whether nested or not, will use a more\n   * recent snapshot of the subscription list.\n   *\n   * 2. The listener should not expect to see all state changes, as the state\n   * might have been updated multiple times during a nested `dispatch()` before\n   * the listener is called. It is, however, guaranteed that all subscribers\n   * registered before the `dispatch()` started will be called with the latest\n   * state by the time it exits.\n   *\n   * @param {Function} listener A callback to be invoked on every dispatch.\n   * @returns {Function} A function to remove this change listener.\n   */\n\n\n  function subscribe(listener) {\n    if (typeof listener !== 'function') {\n      throw new Error('Expected the listener to be a function.');\n    }\n\n    if (isDispatching) {\n      throw new Error('You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n    }\n\n    var isSubscribed = true;\n    ensureCanMutateNextListeners();\n    nextListeners.push(listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n\n      if (isDispatching) {\n        throw new Error('You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n      }\n\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      var index = nextListeners.indexOf(listener);\n      nextListeners.splice(index, 1);\n    };\n  }\n  /**\n   * Dispatches an action. It is the only way to trigger a state change.\n   *\n   * The `reducer` function, used to create the store, will be called with the\n   * current state tree and the given `action`. Its return value will\n   * be considered the **next** state of the tree, and the change listeners\n   * will be notified.\n   *\n   * The base implementation only supports plain object actions. If you want to\n   * dispatch a Promise, an Observable, a thunk, or something else, you need to\n   * wrap your store creating function into the corresponding middleware. For\n   * example, see the documentation for the `redux-thunk` package. Even the\n   * middleware will eventually dispatch plain object actions using this method.\n   *\n   * @param {Object} action A plain object representing “what changed”. It is\n   * a good idea to keep actions serializable so you can record and replay user\n   * sessions, or use the time travelling `redux-devtools`. An action must have\n   * a `type` property which may not be `undefined`. It is a good idea to use\n   * string constants for action types.\n   *\n   * @returns {Object} For convenience, the same action object you dispatched.\n   *\n   * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n   * return something else (for example, a Promise you can await).\n   */\n\n\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n    }\n\n    if (typeof action.type === 'undefined') {\n      throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n    }\n\n    if (isDispatching) {\n      throw new Error('Reducers may not dispatch actions.');\n    }\n\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n\n    var listeners = currentListeners = nextListeners;\n\n    for (var i = 0; i < listeners.length; i++) {\n      var listener = listeners[i];\n      listener();\n    }\n\n    return action;\n  }\n  /**\n   * Replaces the reducer currently used by the store to calculate the state.\n   *\n   * You might need this if your app implements code splitting and you want to\n   * load some of the reducers dynamically. You might also need this if you\n   * implement a hot reloading mechanism for Redux.\n   *\n   * @param {Function} nextReducer The reducer for the store to use instead.\n   * @returns {void}\n   */\n\n\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== 'function') {\n      throw new Error('Expected the nextReducer to be a function.');\n    }\n\n    currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n    // Any reducers that existed in both the new and old rootReducer\n    // will receive the previous state. This effectively populates\n    // the new state tree with any relevant data from the old one.\n\n    dispatch({\n      type: ActionTypes.REPLACE\n    });\n  }\n  /**\n   * Interoperability point for observable/reactive libraries.\n   * @returns {observable} A minimal observable of state changes.\n   * For more information, see the observable proposal:\n   * https://github.com/tc39/proposal-observable\n   */\n\n\n  function observable() {\n    var _ref;\n\n    var outerSubscribe = subscribe;\n    return _ref = {\n      /**\n       * The minimal observable subscription method.\n       * @param {Object} observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns {subscription} An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe: function subscribe(observer) {\n        if (typeof observer !== 'object' || observer === null) {\n          throw new TypeError('Expected the observer to be an object.');\n        }\n\n        function observeState() {\n          if (observer.next) {\n            observer.next(getState());\n          }\n        }\n\n        observeState();\n        var unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe: unsubscribe\n        };\n      }\n    }, _ref[$$observable] = function () {\n      return this;\n    }, _ref;\n  } // When a store is created, an \"INIT\" action is dispatched so that every\n  // reducer returns their initial state. This effectively populates\n  // the initial state tree.\n\n\n  dispatch({\n    type: ActionTypes.INIT\n  });\n  return _ref2 = {\n    dispatch: dispatch,\n    subscribe: subscribe,\n    getState: getState,\n    replaceReducer: replaceReducer\n  }, _ref2[$$observable] = observable, _ref2;\n}\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n  /* eslint-disable no-console */\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\n    console.error(message);\n  }\n  /* eslint-enable no-console */\n\n\n  try {\n    // This error was thrown as a convenience so that if you enable\n    // \"break on all exceptions\" in your console,\n    // it would pause the execution at this line.\n    throw new Error(message);\n  } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUndefinedStateErrorMessage(key, action) {\n  var actionType = action && action.type;\n  var actionDescription = actionType && \"action \\\"\" + String(actionType) + \"\\\"\" || 'an action';\n  return \"Given \" + actionDescription + \", reducer \\\"\" + key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\";\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n  var reducerKeys = Object.keys(reducers);\n  var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n  if (reducerKeys.length === 0) {\n    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n  }\n\n  if (!isPlainObject(inputState)) {\n    return \"The \" + argumentName + \" has unexpected type of \\\"\" + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n  }\n\n  var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n    return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n  });\n  unexpectedKeys.forEach(function (key) {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === ActionTypes.REPLACE) return;\n\n  if (unexpectedKeys.length > 0) {\n    return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n  }\n}\n\nfunction assertReducerShape(reducers) {\n  Object.keys(reducers).forEach(function (key) {\n    var reducer = reducers[key];\n    var initialState = reducer(undefined, {\n      type: ActionTypes.INIT\n    });\n\n    if (typeof initialState === 'undefined') {\n      throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n    }\n\n    if (typeof reducer(undefined, {\n      type: ActionTypes.PROBE_UNKNOWN_ACTION()\n    }) === 'undefined') {\n      throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle \" + ActionTypes.INIT + \" or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n    }\n  });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n  var reducerKeys = Object.keys(reducers);\n  var finalReducers = {};\n\n  for (var i = 0; i < reducerKeys.length; i++) {\n    var key = reducerKeys[i];\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof reducers[key] === 'undefined') {\n        warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n      }\n    }\n\n    if (typeof reducers[key] === 'function') {\n      finalReducers[key] = reducers[key];\n    }\n  }\n\n  var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n  // keys multiple times.\n\n  var unexpectedKeyCache;\n\n  if (process.env.NODE_ENV !== 'production') {\n    unexpectedKeyCache = {};\n  }\n\n  var shapeAssertionError;\n\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n\n  return function combination(state, action) {\n    if (state === void 0) {\n      state = {};\n    }\n\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n      if (warningMessage) {\n        warning(warningMessage);\n      }\n    }\n\n    var hasChanged = false;\n    var nextState = {};\n\n    for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n      var _key = finalReducerKeys[_i];\n      var reducer = finalReducers[_key];\n      var previousStateForKey = state[_key];\n      var nextStateForKey = reducer(previousStateForKey, action);\n\n      if (typeof nextStateForKey === 'undefined') {\n        var errorMessage = getUndefinedStateErrorMessage(_key, action);\n        throw new Error(errorMessage);\n      }\n\n      nextState[_key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n\n    return hasChanged ? nextState : state;\n  };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n  return function () {\n    return dispatch(actionCreator.apply(this, arguments));\n  };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n  if (typeof actionCreators === 'function') {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n\n  if (typeof actionCreators !== 'object' || actionCreators === null) {\n    throw new Error(\"bindActionCreators expected an object or a function, instead received \" + (actionCreators === null ? 'null' : typeof actionCreators) + \". \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n  }\n\n  var boundActionCreators = {};\n\n  for (var key in actionCreators) {\n    var actionCreator = actionCreators[key];\n\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n\n  return boundActionCreators;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    keys.push.apply(keys, Object.getOwnPropertySymbols(object));\n  }\n\n  if (enumerableOnly) keys = keys.filter(function (sym) {\n    return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n  });\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(source, true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(source).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  if (funcs.length === 0) {\n    return function (arg) {\n      return arg;\n    };\n  }\n\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n\n  return funcs.reduce(function (a, b) {\n    return function () {\n      return a(b.apply(void 0, arguments));\n    };\n  });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n  for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n    middlewares[_key] = arguments[_key];\n  }\n\n  return function (createStore) {\n    return function () {\n      var store = createStore.apply(void 0, arguments);\n\n      var _dispatch = function dispatch() {\n        throw new Error('Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n      };\n\n      var middlewareAPI = {\n        getState: store.getState,\n        dispatch: function dispatch() {\n          return _dispatch.apply(void 0, arguments);\n        }\n      };\n      var chain = middlewares.map(function (middleware) {\n        return middleware(middlewareAPI);\n      });\n      _dispatch = compose.apply(void 0, chain)(store.dispatch);\n      return _objectSpread2({}, store, {\n        dispatch: _dispatch\n      });\n    };\n  };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n  warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore };\n","\n/**\n * The type of (redux) action which indicates that an endpoint message\n * sent by another participant to the data channel is received.\n *\n * {\n *     type: ENDPOINT_MESSAGE_RECEIVED,\n *     participant: Object,\n *     json: Object\n * }\n */\nexport const ENDPOINT_MESSAGE_RECEIVED = 'ENDPOINT_MESSAGE_RECEIVED';\n\n/**\n * The type of (redux) action which indicates that an existing transcript\n * has to be removed from the state.\n *\n * {\n *      type: REMOVE_TRANSCRIPT_MESSAGE,\n *      transciptMessageID: string,\n * }\n */\nexport const REMOVE_TRANSCRIPT_MESSAGE = 'REMOVE_TRANSCRIPT_MESSAGE';\n\n/**\n * The type of (redux) action which indicates that a transcript with an\n * given message_id to be added or updated is received.\n *\n * {\n *      type: UPDATE_TRANSCRIPT_MESSAGE,\n *      transcriptMessageID: string,\n *      newTranscriptMessage: Object\n * }\n */\nexport const UPDATE_TRANSCRIPT_MESSAGE = 'UPDATE_TRANSCRIPT_MESSAGE';\n\n/**\n * The type of (redux) action which indicates that the user pressed the\n * ClosedCaption button, to either enable or disable subtitles based on the\n * current state.\n *\n * {\n *      type: TOGGLE_REQUESTING_SUBTITLES\n * }\n */\nexport const TOGGLE_REQUESTING_SUBTITLES\n    = 'TOGGLE_REQUESTING_SUBTITLES';\n","// @flow\n\nimport {\n    ENDPOINT_MESSAGE_RECEIVED,\n    REMOVE_TRANSCRIPT_MESSAGE,\n    TOGGLE_REQUESTING_SUBTITLES,\n    UPDATE_TRANSCRIPT_MESSAGE\n} from './actionTypes';\n\n/**\n * Signals that a participant sent an endpoint message on the data channel.\n *\n * @param {Object} participant - The participant details sending the message.\n * @param {Object} json - The json carried by the endpoint message.\n * @returns {{\n *      type: ENDPOINT_MESSAGE_RECEIVED,\n *      participant: Object,\n *      json: Object\n * }}\n */\nexport function endpointMessageReceived(participant: Object, json: Object) {\n    return {\n        type: ENDPOINT_MESSAGE_RECEIVED,\n        participant,\n        json\n    };\n}\n\n/**\n * Signals that a transcript has to be removed from the state.\n *\n * @param {string} transcriptMessageID - The message_id to be removed.\n * @returns {{\n *      type: REMOVE_TRANSCRIPT_MESSAGE,\n *      transcriptMessageID: string,\n * }}\n */\nexport function removeTranscriptMessage(transcriptMessageID: string) {\n    return {\n        type: REMOVE_TRANSCRIPT_MESSAGE,\n        transcriptMessageID\n    };\n}\n\n/**\n * Signals that a transcript with the given message_id to be added or updated\n * is received.\n *\n * @param {string} transcriptMessageID -The transcript message_id to be updated.\n * @param {Object} newTranscriptMessage - The updated transcript message.\n * @returns {{\n *      type: UPDATE_TRANSCRIPT_MESSAGE,\n *      transcriptMessageID: string,\n *      newTranscriptMessage: Object\n * }}\n */\nexport function updateTranscriptMessage(transcriptMessageID: string,\n        newTranscriptMessage: Object) {\n    return {\n        type: UPDATE_TRANSCRIPT_MESSAGE,\n        transcriptMessageID,\n        newTranscriptMessage\n    };\n}\n\n/**\n * Signals that the local user has toggled the ClosedCaption button.\n *\n * @returns {{\n *      type: TOGGLE_REQUESTING_SUBTITLES\n * }}\n */\nexport function toggleRequestingSubtitles() {\n    return {\n        type: TOGGLE_REQUESTING_SUBTITLES\n    };\n}\n","// @flow\n\nimport { Component } from 'react';\n\n/**\n * {@code AbstractCaptions} properties.\n */\nexport type AbstractCaptionsProps = {\n\n    /**\n     * Whether local participant is requesting to see subtitles.\n     */\n    _requestingSubtitles: boolean,\n\n    /**\n     * Transcript texts formatted with participant's name and final content.\n     * Mapped by id just to have the keys for convenience during the rendering\n     * process.\n     */\n    _transcripts: ?Map<string, string>\n};\n\n/**\n * Abstract React {@code Component} which can display speech-to-text results\n * from Jigasi as subtitles.\n */\nexport class AbstractCaptions<P: AbstractCaptionsProps>\n    extends Component<P> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {React$Element}\n     */\n    render() {\n        const { _requestingSubtitles, _transcripts } = this.props;\n\n        if (!_requestingSubtitles || !_transcripts || !_transcripts.size) {\n            return null;\n        }\n\n        const paragraphs = [];\n\n        for (const [ id, text ] of _transcripts) {\n            paragraphs.push(this._renderParagraph(id, text));\n        }\n\n        return this._renderSubtitlesContainer(paragraphs);\n    }\n\n    /**\n     * Renders the transcription text.\n     *\n     * @abstract\n     * @param {string} id - The ID of the transcript message from which the\n     * {@code text} has been created.\n     * @param {string} text - Subtitles text formatted with the participant's\n     * name.\n     * @protected\n     * @returns {React$Element} - The React element which displays the text.\n     */\n    _renderParagraph: (id: string, text: string) => React$Element<*>;\n\n    /**\n     * Renders the subtitles container.\n     *\n     * @abstract\n     * @param {Array<React$Element>} paragraphs - An array of elements created\n     * for each subtitle using the {@link _renderParagraph} method.\n     * @protected\n     * @returns {React$Element} - The subtitles container.\n     */\n    _renderSubtitlesContainer: (Array<React$Element<*>>) => React$Element<*>;\n}\n\n/**\n * Formats the transcript messages into text by prefixing participant's name to\n * avoid duplicating the effort on platform specific component.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {Map<string, string>} - Formatted transcript subtitles mapped by\n * transcript message IDs.\n */\nfunction _constructTranscripts(state: Object): Map<string, string> {\n    const { _transcriptMessages } = state['features/subtitles'];\n    const transcripts = new Map();\n\n    for (const [ id, transcriptMessage ] of _transcriptMessages) {\n        if (transcriptMessage) {\n            let text = `${transcriptMessage.participantName}: `;\n\n            if (transcriptMessage.final) {\n                text += transcriptMessage.final;\n            } else {\n                const stable = transcriptMessage.stable || '';\n                const unstable = transcriptMessage.unstable || '';\n\n                text += stable + unstable;\n            }\n\n            transcripts.set(id, text);\n        }\n    }\n\n    return transcripts;\n}\n\n/**\n * Maps the transcriptionSubtitles in the redux state to the associated props of\n * {@code AbstractCaptions}.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _requestingSubtitles: boolean,\n *     _transcripts: Map<string, string>\n * }}\n */\nexport function _abstractMapStateToProps(state: Object) {\n    const { _requestingSubtitles } = state['features/subtitles'];\n    const transcripts = _constructTranscripts(state);\n\n    return {\n        _requestingSubtitles,\n\n        // avoid rerenders by setting to props new empty Map instances.\n        _transcripts: transcripts.size === 0 ? undefined : transcripts\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { connect } from '../../base/redux';\n\nimport {\n    _abstractMapStateToProps,\n    AbstractCaptions,\n    type AbstractCaptionsProps as Props\n} from './AbstractCaptions';\n\n/**\n * React {@code Component} which can display speech-to-text results from\n * Jigasi as subtitles.\n */\nclass Captions\n    extends AbstractCaptions<Props> {\n\n    /**\n     * Renders the transcription text.\n     *\n     * @param {string} id - The ID of the transcript message from which the\n     * {@code text} has been created.\n     * @param {string} text - Subtitles text formatted with the participant's\n     * name.\n     * @protected\n     * @returns {React$Element} - The React element which displays the text.\n     */\n    _renderParagraph(id: string, text: string): React$Element<*> {\n        return (\n            <p key = { id }>\n                <span>{ text }</span>\n            </p>\n        );\n    }\n\n    /**\n     * Renders the subtitles container.\n     *\n     * @param {Array<React$Element>} paragraphs - An array of elements created\n     * for each subtitle using the {@link _renderParagraph} method.\n     * @protected\n     * @returns {React$Element} - The subtitles container.\n     */\n    _renderSubtitlesContainer(\n            paragraphs: Array<React$Element<*>>): React$Element<*> {\n        return (\n            <div className = 'transcription-subtitles' >\n                { paragraphs }\n            </div>\n        );\n    }\n}\n\nexport default connect(_abstractMapStateToProps)(Captions);\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox';\n\nimport { toggleRequestingSubtitles } from '../actions';\n\nexport type AbstractProps = AbstractButtonProps & {\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * Invoked to Dispatch an Action to the redux store.\n     */\n    dispatch: Function,\n\n    /**\n     * Whether the local participant is currently requesting subtitles.\n     */\n    _requestingSubtitles: Boolean\n};\n\n/**\n * The button component which starts/stops the transcription.\n */\nexport class AbstractClosedCaptionButton\n    extends AbstractButton<AbstractProps, *> {\n    /**\n     * Handles clicking / pressing the button.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { _requestingSubtitles, dispatch } = this.props;\n\n        sendAnalytics(createToolbarEvent('transcribing.ccButton',\n            {\n                'requesting_subtitles': Boolean(_requestingSubtitles)\n            }));\n\n        dispatch(toggleRequestingSubtitles());\n    }\n\n    /**\n     * Indicates whether this button is disabled or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return false;\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._requestingSubtitles;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code AbstractClosedCaptionButton} component.\n *\n * @param {Object} state - The redux state.\n * @param {Object} ownProps - The properties explicitly passed to the component\n * instance.\n * @private\n * @returns {{\n *     _requestingSubtitles: boolean,\n *     visible: boolean\n * }}\n */\nexport function _abstractMapStateToProps(state: Object, ownProps: Object) {\n    const { _requestingSubtitles } = state['features/subtitles'];\n    const { transcribingEnabled } = state['features/base/config'];\n    const { visible = Boolean(transcribingEnabled) } = ownProps;\n\n    return {\n        _requestingSubtitles,\n        visible\n    };\n}\n","// @flow\n\nimport { translate } from '../../base/i18n';\nimport { IconClosedCaption } from '../../base/icons';\nimport { connect } from '../../base/redux';\n\nimport {\n    AbstractClosedCaptionButton,\n    _abstractMapStateToProps\n} from './AbstractClosedCaptionButton';\n\n/**\n * A button which starts/stops the transcriptions.\n */\nclass ClosedCaptionButton\n    extends AbstractClosedCaptionButton {\n\n    accessibilityLabel = 'toolbar.accessibilityLabel.cc';\n    icon = IconClosedCaption;\n    tooltip = 'transcribing.ccButtonTooltip';\n    label = 'toolbar.startSubtitles';\n    toggledLabel = 'toolbar.stopSubtitles';\n}\n\nexport default translate(connect(_abstractMapStateToProps)(ClosedCaptionButton));\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/subtitles');\n","// @flow\n\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport {\n    removeTranscriptMessage,\n    updateTranscriptMessage\n} from './actions';\nimport {\n    ENDPOINT_MESSAGE_RECEIVED,\n    TOGGLE_REQUESTING_SUBTITLES\n} from './actionTypes';\nimport logger from './logger';\n\n/**\n * The type of json-message which indicates that json carries a\n * transcription result.\n */\nconst JSON_TYPE_TRANSCRIPTION_RESULT = 'transcription-result';\n\n/**\n * The type of json-message which indicates that json carries a\n * translation result.\n */\nconst JSON_TYPE_TRANSLATION_RESULT = 'translation-result';\n\n/**\n * The local participant property which is used to set whether the local\n * participant wants to have a transcriber in the room.\n */\nconst P_NAME_REQUESTING_TRANSCRIPTION = 'requestingTranscription';\n\n/**\n * The local participant property which is used to store the language\n * preference for translation for a participant.\n */\nconst P_NAME_TRANSLATION_LANGUAGE = 'translation_language';\n\n/**\n* Time after which the rendered subtitles will be removed.\n*/\nconst REMOVE_AFTER_MS = 3000;\n\n/**\n * Middleware that catches actions related to transcript messages to be rendered\n * in {@link Captions}.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case ENDPOINT_MESSAGE_RECEIVED:\n        return _endpointMessageReceived(store, next, action);\n\n    case TOGGLE_REQUESTING_SUBTITLES:\n        _requestingSubtitlesToggled(store);\n        break;\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature transcription that the action\n * {@code ENDPOINT_MESSAGE_RECEIVED} is being dispatched within a specific redux\n * store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to\n * dispatch the specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code ENDPOINT_MESSAGE_RECEIVED}\n * which is being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _endpointMessageReceived({ dispatch, getState }, next, action) {\n    const { json } = action;\n\n    if (!(json\n            && (json.type === JSON_TYPE_TRANSCRIPTION_RESULT\n                || json.type === JSON_TYPE_TRANSLATION_RESULT))) {\n        return next(action);\n    }\n\n    const state = getState();\n    const translationLanguage\n        = state['features/base/conference'].conference\n            .getLocalParticipantProperty(P_NAME_TRANSLATION_LANGUAGE);\n\n    try {\n        const transcriptMessageID = json.message_id;\n        const participantName = json.participant.name;\n\n        if (json.type === JSON_TYPE_TRANSLATION_RESULT\n                && json.language === translationLanguage) {\n            // Displays final results in the target language if translation is\n            // enabled.\n\n            const newTranscriptMessage = {\n                clearTimeOut: undefined,\n                final: json.text,\n                participantName\n            };\n\n            _setClearerOnTranscriptMessage(dispatch,\n                transcriptMessageID, newTranscriptMessage);\n            dispatch(updateTranscriptMessage(transcriptMessageID,\n                newTranscriptMessage));\n\n        } else if (json.type === JSON_TYPE_TRANSCRIPTION_RESULT\n                && !translationLanguage) {\n            // Displays interim and final results without any translation if\n            // translations are disabled.\n\n            const { text } = json.transcript[0];\n\n            // We update the previous transcript message with the same\n            // message ID or adds a new transcript message if it does not\n            // exist in the map.\n            const newTranscriptMessage = {\n                ...state['features/subtitles']._transcriptMessages\n                        .get(transcriptMessageID)\n                    || { participantName }\n            };\n\n            _setClearerOnTranscriptMessage(dispatch,\n                transcriptMessageID, newTranscriptMessage);\n\n            // If this is final result, update the state as a final result\n            // and start a count down to remove the subtitle from the state\n            if (!json.is_interim) {\n                newTranscriptMessage.final = text;\n\n            } else if (json.stability > 0.85) {\n                // If the message has a high stability, we can update the\n                // stable field of the state and remove the previously\n                // unstable results\n                newTranscriptMessage.stable = text;\n                newTranscriptMessage.unstable = undefined;\n\n            } else {\n                // Otherwise, this result has an unstable result, which we\n                // add to the state. The unstable result will be appended\n                // after the stable part.\n                newTranscriptMessage.unstable = text;\n            }\n\n            dispatch(\n                updateTranscriptMessage(\n                    transcriptMessageID,\n                    newTranscriptMessage));\n        }\n    } catch (error) {\n        logger.error('Error occurred while updating transcriptions\\n', error);\n    }\n\n    return next(action);\n}\n\n/**\n * Toggle the local property 'requestingTranscription'. This will cause Jicofo\n * and Jigasi to decide whether the transcriber needs to be in the room.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _requestingSubtitlesToggled({ getState }) {\n    const state = getState();\n    const { _requestingSubtitles } = state['features/subtitles'];\n    const { conference } = state['features/base/conference'];\n\n    conference.setLocalParticipantProperty(\n        P_NAME_REQUESTING_TRANSCRIPTION,\n        !_requestingSubtitles);\n}\n\n/**\n * Set a timeout on a TranscriptMessage object so it clears itself when it's not\n * updated.\n *\n * @param {Function} dispatch - Dispatch remove action to store.\n * @param {string} transcriptMessageID - The id of the message to remove.\n * @param {Object} transcriptMessage - The message to remove.\n * @returns {void}\n */\nfunction _setClearerOnTranscriptMessage(\n        dispatch,\n        transcriptMessageID,\n        transcriptMessage) {\n    if (transcriptMessage.clearTimeOut) {\n        clearTimeout(transcriptMessage.clearTimeOut);\n    }\n\n    transcriptMessage.clearTimeOut\n        = setTimeout(\n            () => dispatch(removeTranscriptMessage(transcriptMessageID)),\n            REMOVE_AFTER_MS);\n}\n","import { ReducerRegistry } from '../base/redux';\n\nimport {\n    REMOVE_TRANSCRIPT_MESSAGE, TOGGLE_REQUESTING_SUBTITLES,\n    UPDATE_TRANSCRIPT_MESSAGE\n} from './actionTypes';\n\n/**\n * Default State for 'features/transcription' feature\n */\nconst defaultState = {\n    _transcriptMessages: new Map(),\n    _requestingSubtitles: false\n};\n\n/**\n * Listen for actions for the transcription feature to be used by the actions\n * to update the rendered transcription subtitles.\n */\nReducerRegistry.register('features/subtitles', (\n        state = defaultState, action) => {\n    switch (action.type) {\n    case REMOVE_TRANSCRIPT_MESSAGE:\n        return _removeTranscriptMessage(state, action);\n    case UPDATE_TRANSCRIPT_MESSAGE:\n        return _updateTranscriptMessage(state, action);\n\n    case TOGGLE_REQUESTING_SUBTITLES:\n        return {\n            ...state,\n            _requestingSubtitles: !state._requestingSubtitles\n        };\n    }\n\n    return state;\n});\n\n/**\n * Reduces a specific Redux action REMOVE_TRANSCRIPT_MESSAGE of the feature\n * transcription.\n *\n * @param {Object} state - The Redux state of the feature transcription.\n * @param {Action} action -The Redux action REMOVE_TRANSCRIPT_MESSAGE to reduce.\n * @returns {Object} The new state of the feature transcription after the\n * reduction of the specified action.\n */\nfunction _removeTranscriptMessage(state, { transcriptMessageID }) {\n    const newTranscriptMessages = new Map(state._transcriptMessages);\n\n    // Deletes the key from Map once a final message arrives.\n    newTranscriptMessages.delete(transcriptMessageID);\n\n    return {\n        ...state,\n        _transcriptMessages: newTranscriptMessages\n    };\n}\n\n/**\n * Reduces a specific Redux action UPDATE_TRANSCRIPT_MESSAGE of the feature\n * transcription.\n *\n * @param {Object} state - The Redux state of the feature transcription.\n * @param {Action} action -The Redux action UPDATE_TRANSCRIPT_MESSAGE to reduce.\n * @returns {Object} The new state of the feature transcription after the\n * reduction of the specified action.\n */\nfunction _updateTranscriptMessage(state,\n        { transcriptMessageID, newTranscriptMessage }) {\n    const newTranscriptMessages = new Map(state._transcriptMessages);\n\n    // Updates the new message for the given key in the Map.\n    newTranscriptMessages.set(transcriptMessageID, newTranscriptMessage);\n\n    return {\n        ...state,\n        _transcriptMessages: newTranscriptMessages\n    };\n}\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\n\nimport './middleware';\nimport './reducer';\n","// @flow\n\n/**\n * Appends a suffix to the display name.\n *\n * @param {string} displayName - The display name.\n * @param {string} suffix - Suffix that will be appended.\n * @returns {string} The formatted display name.\n */\nexport function appendSuffix(displayName: string, suffix: string = '') {\n    return `${displayName || suffix}${\n        displayName && suffix && displayName !== suffix ? ` (${suffix})` : ''}`;\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\nimport { connect } from '../../../base/redux';\nimport type { Dispatch } from 'redux';\n\nimport { translate } from '../../../base/i18n';\nimport {\n    getParticipantDisplayName,\n    getParticipantById\n} from '../../../base/participants';\nimport { updateSettings } from '../../../base/settings';\n\nimport { appendSuffix } from '../../functions';\n\n/**\n * The type of the React {@code Component} props of {@link DisplayName}.\n */\ntype Props = {\n\n    /**\n     * The participant's current display name which should be shown when in\n     * edit mode. Can be different from what is shown when not editing.\n     */\n    _configuredDisplayName: string,\n\n    /**\n     * The participant's current display name which should be shown.\n     */\n    _nameToDisplay: string,\n\n    /**\n     * Whether or not the display name should be editable on click.\n     */\n    allowEditing: boolean,\n\n    /**\n     * Invoked to update the participant's display name.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * A string to append to the displayName, if provided.\n     */\n    displayNameSuffix: string,\n\n    /**\n     * The ID attribute to add to the component. Useful for global querying for\n     * the component by legacy components and torture tests.\n     */\n    elementID: string,\n\n    /**\n     * The ID of the participant whose name is being displayed.\n     */\n    participantID: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link DisplayName}.\n */\ntype State = {\n\n    /**\n     * The current value of the display name in the edit field.\n     */\n    editDisplayNameValue: string,\n\n    /**\n     * Whether or not the component should be displaying an editable input.\n     */\n    isEditing: boolean\n};\n\n/**\n * React {@code Component} for displaying and editing a participant's name.\n *\n * @extends Component\n */\nclass DisplayName extends Component<Props, State> {\n    _nameInput: ?HTMLInputElement;\n\n    static defaultProps = {\n        _configuredDisplayName: ''\n    };\n\n    /**\n     * Initializes a new {@code DisplayName} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            editDisplayNameValue: '',\n            isEditing: false\n        };\n\n        /**\n         * The internal reference to the HTML element backing the React\n         * {@code Component} input with id {@code editDisplayName}. It is\n         * necessary for automatically selecting the display name input field\n         * when starting to edit the display name.\n         *\n         * @private\n         * @type {HTMLInputElement}\n         */\n        this._nameInput = null;\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onChange = this._onChange.bind(this);\n        this._onKeyDown = this._onKeyDown.bind(this);\n        this._onStartEditing = this._onStartEditing.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n        this._setNameInputRef = this._setNameInputRef.bind(this);\n    }\n\n    /**\n     * Automatically selects the input field's value after starting to edit the\n     * display name.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidUpdate(previousProps, previousState) {\n        if (!previousState.isEditing\n            && this.state.isEditing\n            && this._nameInput) {\n            this._nameInput.select();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            _nameToDisplay,\n            allowEditing,\n            displayNameSuffix,\n            elementID,\n            t\n        } = this.props;\n\n        if (allowEditing && this.state.isEditing) {\n            return (\n                <input\n                    autoFocus = { true }\n                    className = 'editdisplayname'\n                    id = 'editDisplayName'\n                    onBlur = { this._onSubmit }\n                    onChange = { this._onChange }\n                    onKeyDown = { this._onKeyDown }\n                    placeholder = { t('defaultNickname') }\n                    ref = { this._setNameInputRef }\n                    spellCheck = { 'false' }\n                    type = 'text'\n                    value = { this.state.editDisplayNameValue } />\n            );\n        }\n\n        return (\n            <span\n                className = 'displayname'\n                id = { elementID }\n                onClick = { this._onStartEditing }>\n                { appendSuffix(_nameToDisplay, displayNameSuffix) }\n            </span>\n        );\n    }\n\n    _onChange: () => void;\n\n    /**\n     * Updates the internal state of the display name entered into the edit\n     * field.\n     *\n     * @param {Object} event - DOM Event for value change.\n     * @private\n     * @returns {void}\n     */\n    _onChange(event) {\n        this.setState({\n            editDisplayNameValue: event.target.value\n        });\n    }\n\n    _onKeyDown: () => void;\n\n    /**\n     * Submits the editted display name update if the enter key is pressed.\n     *\n     * @param {Event} event - Key down event object.\n     * @private\n     * @returns {void}\n     */\n    _onKeyDown(event) {\n        if (event.key === 'Enter') {\n            this._onSubmit();\n        }\n    }\n\n    _onStartEditing: () => void;\n\n    /**\n     * Updates the component to display an editable input field and sets the\n     * initial value to the current display name.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onStartEditing() {\n        if (this.props.allowEditing) {\n            this.setState({\n                isEditing: true,\n                editDisplayNameValue: this.props._configuredDisplayName\n            });\n        }\n    }\n\n    _onSubmit: () => void;\n\n    /**\n     * Dispatches an action to update the display name if any change has\n     * occurred after editing. Clears any temporary state used to keep track\n     * of pending display name changes and exits editing mode.\n     *\n     * @param {Event} event - Key down event object.\n     * @private\n     * @returns {void}\n     */\n    _onSubmit() {\n        const { editDisplayNameValue } = this.state;\n        const { dispatch } = this.props;\n\n        // Store display name in settings\n        dispatch(updateSettings({\n            displayName: editDisplayNameValue\n        }));\n\n        this.setState({\n            isEditing: false,\n            editDisplayNameValue: ''\n        });\n\n        this._nameInput = null;\n    }\n\n    _setNameInputRef: (HTMLInputElement | null) => void;\n\n    /**\n     * Sets the internal reference to the HTML element backing the React\n     * {@code Component} input with id {@code editDisplayName}.\n     *\n     * @param {HTMLInputElement} element - The DOM/HTML element for this\n     * {@code Component}'s input.\n     * @private\n     * @returns {void}\n     */\n    _setNameInputRef(element) {\n        this._nameInput = element;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the props of this component.\n *\n * @param {Object} state - The redux store/state.\n * @param {Props} ownProps - The own props of the component.\n * @private\n * @returns {{\n *     _configuredDisplayName: string,\n *     _nameToDisplay: string\n * }}\n */\nfunction _mapStateToProps(state, ownProps) {\n    const { participantID } = ownProps;\n    const participant = getParticipantById(state, participantID);\n\n    return {\n        _configuredDisplayName: participant && participant.name,\n        _nameToDisplay: getParticipantDisplayName(\n            state, participantID)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(DisplayName));\n","// @flow\n\nimport { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { updateSettings } from '../../base/settings';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractDisplayNamePrompt}.\n */\nexport type Props = {\n\n    /**\n     * Invoked to update the local participant's display name.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Function to be invoked after a successful display name change.\n     */\n    onPostSubmit: ?Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements an abstract class for {@code DisplayNamePrompt}.\n */\nexport default class AbstractDisplayNamePrompt<S: *>\n    extends Component<Props, S> {\n    /**\n     * Instantiates a new component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onSetDisplayName = this._onSetDisplayName.bind(this);\n    }\n\n    _onSetDisplayName: string => boolean;\n\n    /**\n     * Dispatches an action to update the local participant's display name. A\n     * name must be entered for the action to dispatch.\n     *\n     * It returns a boolean to comply the Dialog behaviour:\n     *     {@code true} - the dialog should be closed.\n     *     {@code false} - the dialog should be left open.\n     *\n     * @param {string} displayName - The display name to save.\n     * @returns {boolean}\n     */\n    _onSetDisplayName(displayName) {\n        if (!displayName || !displayName.trim()) {\n            return false;\n        }\n\n        const { dispatch, onPostSubmit } = this.props;\n\n        // Store display name in settings\n        dispatch(updateSettings({\n            displayName\n        }));\n\n        onPostSubmit && onPostSubmit();\n\n        return true;\n    }\n}\n","/* @flow */\n\nimport React from 'react';\nimport { FieldTextStateless as TextField } from '@atlaskit/field-text';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\nimport AbstractDisplayNamePrompt, {\n    type Props\n} from '../AbstractDisplayNamePrompt';\n\n/**\n * The type of the React {@code Component} props of {@link DisplayNamePrompt}.\n */\ntype State = {\n\n    /**\n     * The name to show in the display name text field.\n     */\n    displayName: string\n};\n\n/**\n * Implements a React {@code Component} for displaying a dialog with an field\n * for setting the local participant's display name.\n *\n * @extends Component\n */\nclass DisplayNamePrompt extends AbstractDisplayNamePrompt<State> {\n    /**\n     * Initializes a new {@code DisplayNamePrompt} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            displayName: ''\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onDisplayNameChange = this._onDisplayNameChange.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                isModal = { false }\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.displayNameRequired'\n                width = 'small'>\n                <TextField\n                    autoFocus = { true }\n                    compact = { true }\n                    label = { this.props.t('dialog.enterDisplayName') }\n                    name = 'displayName'\n                    onChange = { this._onDisplayNameChange }\n                    shouldFitContainer = { true }\n                    type = 'text'\n                    value = { this.state.displayName } />\n            </Dialog>);\n    }\n\n    _onDisplayNameChange: (Object) => void;\n\n    /**\n     * Updates the entered display name.\n     *\n     * @param {Object} event - The DOM event triggered from the entered display\n     * name value having changed.\n     * @private\n     * @returns {void}\n     */\n    _onDisplayNameChange(event) {\n        this.setState({\n            displayName: event.target.value\n        });\n    }\n\n    _onSetDisplayName: string => boolean;\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Dispatches an action to update the local participant's display name. A\n     * name must be entered for the action to dispatch.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _onSubmit() {\n        return this._onSetDisplayName(this.state.displayName);\n    }\n}\n\nexport default translate(connect()(DisplayNamePrompt));\n","// @flow\n\nimport { openDialog } from '../../features/base/dialog';\n\nimport { DisplayNamePrompt } from './components';\n\n/**\n * Signals to open a dialog with the {@code DisplayNamePrompt} component.\n *\n * @param {?Function} onPostSubmit - The function to invoke after a successful\n * submit of the dialog.\n * @returns {Object}\n */\nexport function openDisplayNamePrompt(onPostSubmit: ?Function) {\n    return openDialog(DisplayNamePrompt, {\n        onPostSubmit\n    });\n}\n","// @flow\n\nimport { hideDialog, isDialogOpen } from '../base/dialog';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { SETTINGS_UPDATED } from '../base/settings';\nimport { DisplayNamePrompt } from './components';\n\n/**\n * Middleware that captures actions related to display name setting.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    switch (action.type) {\n    case SETTINGS_UPDATED: {\n        if (action.settings.displayName\n            && isDialogOpen(getState, DisplayNamePrompt)) {\n            dispatch(hideDialog(DisplayNamePrompt));\n        }\n    }\n    }\n\n    return next(action);\n});\n","// @flow\n\nexport * from './actions';\nexport * from './components';\nexport * from './functions';\n\nimport './middleware';\n","/**\n * Create an action for when the settings are updated.\n *\n * {\n *     type: SETTINGS_UPDATED,\n *     settings: {\n *         audioOutputDeviceId: string,\n *         avatarID: string,\n *         avatarURL: string,\n *         cameraDeviceId: string,\n *         displayName: string,\n *         email: string,\n *         localFlipX: boolean,\n *         micDeviceId: string,\n *         serverURL: string,\n *         startAudioOnly: boolean,\n *         startWithAudioMuted: boolean,\n *         startWithVideoMuted: boolean\n *     }\n * }\n */\nexport const SETTINGS_UPDATED = 'SETTINGS_UPDATED';\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _NodeResolver = require('./NodeResolver');\n\nObject.defineProperty(exports, 'default', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_NodeResolver).default;\n  }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\n\nvar simpleIsEqual = function simpleIsEqual(a, b) {\n  return a === b;\n};\n\nexport default function (resultFn) {\n  var isEqual = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : simpleIsEqual;\n\n  var lastThis = void 0;\n  var lastArgs = [];\n  var lastResult = void 0;\n  var calledOnce = false;\n\n  var isNewArgEqualToLast = function isNewArgEqualToLast(newArg, index) {\n    return isEqual(newArg, lastArgs[index]);\n  };\n\n  var result = function result() {\n    for (var _len = arguments.length, newArgs = Array(_len), _key = 0; _key < _len; _key++) {\n      newArgs[_key] = arguments[_key];\n    }\n\n    if (calledOnce && lastThis === this && newArgs.length === lastArgs.length && newArgs.every(isNewArgEqualToLast)) {\n      return lastResult;\n    }\n\n    calledOnce = true;\n    lastThis = this;\n    lastArgs = newArgs;\n    lastResult = resultFn.apply(this, newArgs);\n    return lastResult;\n  };\n\n  return result;\n}","// @flow\n\nimport { Component } from 'react';\n\nexport type Props = {\n\n    /**\n     * String or component that will be rendered as the label itself.\n     */\n    label: string | React$Node\n};\n\n/**\n * Abstract class for the {@code CircularLabel} component.\n */\nexport default class AbstractCircularLabel<P: Props, S: *>\n    extends Component<P, S> {\n\n}\n","// @flow\n\nimport React from 'react';\n\nimport AbstractCircularLabel, {\n    type Props as AbstractProps\n} from './AbstractCircularLabel';\n\ntype Props = AbstractProps & {\n\n    /**\n     * Additional CSS class names to add to the root of {@code CircularLabel}.\n     */\n    className: string,\n\n    /**\n     * HTML ID attribute to add to the root of {@code CircularLabel}.\n     */\n    id: string\n\n};\n\n/**\n * React Component for showing short text in a circle.\n *\n * @extends Component\n */\nexport default class CircularLabel extends AbstractCircularLabel<Props, {}> {\n    /**\n     * Default values for {@code CircularLabel} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        className: ''\n    };\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            className,\n            id,\n            label\n        } = this.props;\n\n        return (\n            <div\n                className = { `circular-label ${className}` }\n                id = { id }>\n                { label }\n            </div>\n        );\n    }\n}\n","export * from './components';\n","/**\n * Alphanumeric characters.\n * @const\n */\nconst ALPHANUM\n    = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n/**\n * Hexadecimal digit characters.\n * @const\n */\nconst HEX_DIGITS = '0123456789abcdef';\n\n/**\n * Generate a string with random alphanumeric characters with a specific length.\n *\n * @param {number} length - The length of the string to return.\n * @returns {string} A string of random alphanumeric characters with the\n * specified length.\n */\nexport function randomAlphanumString(length) {\n    return _randomString(length, ALPHANUM);\n}\n\n/**\n * Get random element of array or string.\n *\n * @param {Array|string} arr - Source.\n * @returns {Array|string} Array element or string character.\n */\nexport function randomElement(arr) {\n    return arr[randomInt(0, arr.length - 1)];\n}\n\n/**\n * Returns a random hex digit.\n *\n * @returns {Array|string}\n */\nexport function randomHexDigit() {\n    return randomElement(HEX_DIGITS);\n}\n\n/**\n * Generates a string of random hexadecimal digits with a specific length.\n *\n * @param {number} length - The length of the string to return.\n * @returns {string} A string of random hexadecimal digits with the specified\n * length.\n */\nexport function randomHexString(length) {\n    return _randomString(length, HEX_DIGITS);\n}\n\n/**\n * Generates random int within the range [min, max].\n *\n * @param {number} min - The minimum value for the generated number.\n * @param {number} max - The maximum value for the generated number.\n * @returns {number} Random int number.\n */\nexport function randomInt(min, max) {\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\n/**\n * Generates a string of random characters with a specific length.\n *\n * @param {number} length - The length of the string to return.\n * @param {string} characters - The characters from which the returned string is\n * to be constructed.\n * @private\n * @returns {string} A string of random characters with the specified length.\n */\nfunction _randomString(length, characters) {\n    let result = '';\n\n    for (let i = 0; i < length; ++i) {\n        result += randomElement(characters);\n    }\n\n    return result;\n}\n","import { randomElement } from './randomUtil';\n\n/*\nconst _NOUN_ = [\n];\n*/\n\n/**\n * The list of plural nouns.\n * @const\n */\nconst _PLURALNOUN_ = [\n    'Abilities', 'Absences', 'Abundances', 'Academics',\n    'Academies', 'Accents', 'Acceptances', 'Accesses', 'Accidents',\n    'Accommodations', 'Accomplishments', 'Accordances', 'Accountabilities',\n    'Accountants', 'Accounts', 'Accumulations', 'Accuracies', 'Accusations',\n    'Accused', 'Achievements', 'Acids', 'Acquisitions', 'Acres', 'Actions',\n    'Activations', 'Activists', 'Activities', 'Actors', 'Actresses', 'Acts',\n    'Adaptations', 'Addictions', 'Additions', 'Addresses', 'Adjustments',\n    'Administrations', 'Administrators', 'Admissions', 'Adolescents',\n    'Adoptions', 'Ads', 'Adults', 'Advances', 'Advantages', 'Adventures',\n    'Advertisements', 'Advertisings', 'Advice', 'Advocates', 'Affairs',\n    'Affections', 'Aftermaths', 'Afternoons', 'Agencies', 'Agendas',\n    'Agents', 'Ages', 'Aggressions', 'Agreements', 'Agricultures', 'Aides',\n    'Alarms', 'Albums', 'Alerts', 'Aliens', 'Alignments',\n    'Allegations', 'Alliances', 'Allies', 'Allocations', 'Allowances',\n    'Alternatives', 'Aluminium', 'Amateurs', 'Ambassadors', 'Ambitions',\n    'Ambulances', 'Amendments', 'Amounts', 'Analogies', 'Analyses',\n    'Analysts', 'Ancestors', 'Anchors', 'Angels', 'Angers', 'Angles',\n    'Animals', 'Animations', 'Ankles', 'Anniversaries', 'Announcements',\n    'Answers', 'Anxieties', 'Apartments', 'Apologies', 'Apparatus',\n    'Appeals', 'Appearances', 'Appetites', 'Apples', 'Applicants',\n    'Applications', 'Appointments', 'Appreciations', 'Approaches',\n    'Approvals', 'Apps', 'Aprils', 'Architects', 'Architectures',\n    'Archives', 'Areas', 'Arenas', 'Arguments', 'Armies',\n    'Arrangements', 'Arrays', 'Arrests', 'Arrivals', 'Arrows', 'Articles',\n    'Artists', 'Arts', 'Artworks', 'Ashes', 'Aspects', 'Aspirations',\n    'Assaults', 'Assemblies', 'Assertions', 'Assessments',\n    'Assets', 'Assignments', 'Assistances', 'Assistants', 'Associations',\n    'Assumptions', 'Assurances', 'Asylums', 'Athletes', 'Atmospheres',\n    'Attachments', 'Attacks', 'Attempts', 'Attendances',\n    'Attentions', 'Attitudes', 'Attorneys', 'Attractions', 'Attributes',\n    'Auctions', 'Audiences', 'Audits', 'Augusts', 'Aunts', 'Authorities',\n    'Authors', 'Autonomies', 'Autos', 'Autumns', 'Availabilities',\n    'Averages', 'Awards', 'Awarenesses', 'Babies', 'Backdrops',\n    'Backgrounds', 'Backings', 'Backs', 'Backups', 'Bacterias', 'Badges',\n    'Bags', 'Bails', 'Balances', 'Ballets', 'Balloons', 'Ballots', 'Balls',\n    'Bananas', 'Bands', 'Banks', 'Banners', 'Bans', 'Bargains', 'Barrels',\n    'Barriers', 'Bars', 'Baseballs', 'Basements', 'Bases',\n    'Basketballs', 'Baskets', 'Basses', 'Bathrooms', 'Baths', 'Bats',\n    'Batteries', 'Battlefields', 'Battles', 'Bays', 'Beaches', 'Beams',\n    'Beans', 'Bears', 'Beasts', 'Beats', 'Beauties', 'Bedrooms', 'Beds',\n    'Beefs', 'Beers', 'Bees', 'Beginnings', 'Behalves', 'Behaviours',\n    'Beings', 'Beliefs', 'Bells', 'Belts', 'Benches', 'Benchmarks', 'Bends',\n    'Beneficiaries', 'Benefits', 'Bests', 'Bets', 'Betters', 'Biases',\n    'Bicycles', 'Bids', 'Bikes', 'Bills', 'Bins', 'Biographies',\n    'Biologies', 'Birds', 'Birthdays', 'Births', 'Biscuits', 'Bishops',\n    'Bites', 'Bits', 'Blades', 'Blames', 'Blankets', 'Blanks',\n    'Blasts', 'Blends', 'Blessings', 'Blocks', 'Blogs', 'Bloods', 'Blows',\n    'Blues', 'Boards', 'Boats', 'Bonds',\n    'Bones', 'Bonus', 'Bookings', 'Books', 'Booms', 'Boosts', 'Boots',\n    'Borders', 'Bosses', 'Bottles', 'Boundaries', 'Bowls',\n    'Bows', 'Boxes', 'Brains', 'Branches', 'Brands',\n    'Breaches', 'Breads', 'Breakdowns', 'Breakfasts', 'Breaks',\n    'Breakthroughs', 'Breathings', 'Breaths', 'Breeds',\n    'Brethren', 'Bricks', 'Brides', 'Bridges', 'Broadbands', 'Broadcasters',\n    'Broadcasts', 'Browsers', 'Brushes', 'Bubbles', 'Bucks',\n    'Buddies', 'Budgets', 'Buffers', 'Bugs', 'Buildings', 'Bulks',\n    'Bullets', 'Bunches', 'Burdens', 'Bureaucracies', 'Burials', 'Burns',\n    'Buses', 'Bushes', 'Businesses', 'Businessmen', 'Butters', 'Buttons',\n    'Cabinets', 'Cabins', 'Cables', 'Cafes', 'Cakes', 'Calculations',\n    'Calls', 'Calms', 'Cameras', 'Campaigns', 'Campings', 'Camps', 'Campus',\n    'Canals', 'Candidates', 'Candles', 'Cans', 'Canvas',\n    'Capabilities', 'Capacities', 'Capitalisms', 'Capitals', 'Caps',\n    'Captains', 'Captures', 'Carbons', 'Cards', 'Careers', 'Cares',\n    'Cargoes', 'Carpets', 'Carriages', 'Carrots', 'Cars', 'Cartoons',\n    'Cases', 'Cashes', 'Casinos', 'Castles', 'Casts',\n    'Catalogues', 'Catches', 'Categories', 'Cats', 'Cattle', 'Causes',\n    'Cautions', 'Caves', 'Cds', 'Ceilings', 'Celebrations', 'Celebrities',\n    'Cells', 'Cemeteries', 'Centres', 'Cents', 'Centuries', 'Ceremonies',\n    'Certainties', 'Certificates', 'Chains', 'Chairmen', 'Chairs',\n    'Challenges', 'Chambers', 'Champions', 'Championships', 'Chances',\n    'Changes', 'Channels', 'Chaos', 'Chapters', 'Characteristics',\n    'Characters', 'Charges', 'Charities', 'Charms', 'Charters', 'Charts',\n    'Chases', 'Chats', 'Cheats', 'Checks', 'Cheeks', 'Cheers', 'Cheeses',\n    'Chefs', 'Chemicals', 'Chemistries', 'Chests', 'Chickens', 'Chiefs',\n    'Childhoods', 'Chips', 'Chocolates', 'Choices', 'Choirs', 'Chunks',\n    'Churches', 'Cigarettes', 'Cinemas', 'Circles', 'Circuits',\n    'Circulations', 'Circumstances', 'Cities', 'Citizens', 'Citizenships',\n    'Civilians', 'Civilizations', 'Claims', 'Clarities', 'Clashes',\n    'Classes', 'Classics', 'Classifications', 'Classrooms', 'Clauses',\n    'Clerks', 'Clicks', 'Clients', 'Cliffs', 'Climates', 'Climbs',\n    'Clinics', 'Clips', 'Clocks', 'Closes', 'Closures', 'Clothes',\n    'Clothings', 'Cloths', 'Clouds', 'Clubs', 'Clues', 'Clusters',\n    'Coaches', 'Coalitions', 'Coals', 'Coasts', 'Coats', 'Cocktails',\n    'Codes', 'Coffees', 'Coincidences', 'Coins', 'Colds', 'Collaborations',\n    'Collapses', 'Colleagues', 'Collections', 'Collectors', 'Colleges',\n    'Collisions', 'Colonies', 'Colours', 'Columnists', 'Columns', 'Combats',\n    'Combinations', 'Comedies', 'Comforts', 'Comics', 'Commanders',\n    'Commands', 'Commentaries', 'Commentators', 'Comments', 'Commerces',\n    'Commercials', 'Commissioners', 'Commissions', 'Commitments',\n    'Committees', 'Commodities', 'Communications', 'Communities',\n    'Companies', 'Companions', 'Comparisons', 'Compassions',\n    'Compensations', 'Competences', 'Competitions', 'Competitors',\n    'Complaints', 'Completions', 'Complexes', 'Complexities', 'Compliances',\n    'Complications', 'Components', 'Composers', 'Compositions', 'Compounds',\n    'Compromises', 'Computers', 'Concentrations', 'Conceptions', 'Concepts',\n    'Concerns', 'Concerts', 'Concessions', 'Conclusions', 'Concretes',\n    'Conditions', 'Conducts', 'Conferences', 'Confessions', 'Confidences',\n    'Configurations', 'Confirmations', 'Conflicts', 'Confrontations',\n    'Confusions', 'Congregations', 'Connections', 'Consciences',\n    'Consciousnesses', 'Consensus', 'Consents', 'Consequences',\n    'Conservations', 'Conservatives', 'Considerations', 'Consistencies',\n    'Conspiracies', 'Constituencies', 'Constitutions', 'Constraints',\n    'Constructions', 'Consultants', 'Consultations', 'Consumers',\n    'Consumptions', 'Contacts', 'Containers', 'Contempts', 'Contenders',\n    'Contentions', 'Contents', 'Contests', 'Contexts', 'Continents',\n    'Contractors', 'Contracts', 'Contradictions', 'Contraries', 'Contrasts',\n    'Contributions', 'Contributors', 'Controls', 'Controversies',\n    'Conveniences', 'Conventions', 'Conversations', 'Conversions',\n    'Convictions', 'Cookers', 'Cookings', 'Cooks', 'Coordinations',\n    'Coordinators', 'Copies', 'Coppers', 'Cops', 'Copyrights', 'Cores',\n    'Corners', 'Corporations', 'Corrections', 'Correlations',\n    'Correspondences', 'Correspondents', 'Corridors', 'Corruptions',\n    'Costs', 'Costumes', 'Cottages', 'Cottons', 'Councillors', 'Councils',\n    'Counsellings', 'Counsellors', 'Counterparts', 'Counters', 'Counties',\n    'Countries', 'Countrysides', 'Counts', 'Couples', 'Coups', 'Courages',\n    'Courses', 'Courtesies', 'Courts', 'Cousins', 'Coverages', 'Covers',\n    'Cows', 'Cracks', 'Crafts', 'Crashes', 'Creams', 'Creations',\n    'Creativities', 'Creators', 'Creatures', 'Credibilities', 'Credits',\n    'Crews', 'Cries', 'Crises', 'Criteria',\n    'Criticisms', 'Critics', 'Critiques', 'Crops', 'Crosses', 'Crowds',\n    'Crowns', 'Cruises', 'Crystals', 'Cues', 'Cults', 'Cultures',\n    'Cupboards', 'Cups', 'Cures', 'Curiosities', 'Currencies', 'Currents',\n    'Curricula', 'Curtains', 'Custodies', 'Customers', 'Customs',\n    'Cuts', 'Cuttings', 'Cycles', 'Dads', 'Dairies', 'Damages', 'Dams',\n    'Dancers', 'Dances', 'Dancings', 'Dangers', 'Darknesses', 'Darks',\n    'Databases', 'Dates', 'Daughters', 'Dawns', 'Days',\n    'Deadlines', 'Dealers', 'Deals', 'Debates', 'Debris', 'Debts',\n    'Debuts', 'Decades', 'Decembers', 'DecisionMakings', 'Decisions',\n    'Decks', 'Declarations', 'Declines', 'Decorations', 'Decreases',\n    'Dedications', 'Deeds', 'Defaults', 'Defeats', 'Defects', 'Defences',\n    'Defenders', 'Deficiencies', 'Deficits', 'Definitions', 'Degrees',\n    'Delays', 'Delegates', 'Delegations', 'Delights', 'Deliveries',\n    'Demands', 'Democracies', 'Demons', 'Demonstrations', 'Denials',\n    'Densities', 'Dentists', 'Departments', 'Departures', 'Dependences',\n    'Deployments', 'Deposits', 'Depressions', 'Depths', 'Deputies',\n    'Descents', 'Descriptions', 'Deserts', 'Designers', 'Designs',\n    'Desires', 'Desks', 'Desktops', 'Destinations', 'Destructions',\n    'Details', 'Detections', 'Detectives', 'Detentions', 'Determinations',\n    'Developments', 'Devices', 'Devils', 'Diagnoses', 'Diagrams',\n    'Dialogues', 'Diamonds', 'Diaries', 'Dictators', 'Dictionaries',\n    'Diets', 'Differences', 'Difficulties', 'Dignities', 'Dilemmas',\n    'Dimensions', 'Dinners', 'Diplomats', 'Directions', 'Directories',\n    'Directors', 'Dirts', 'Disabilities', 'Disadvantages', 'Disagreements',\n    'Disappointments', 'Disciplines', 'Disclosures',\n    'Discounts', 'Discourses', 'Discoveries', 'Discretions',\n    'Discs', 'Discussions', 'Dishes',\n    'Disks', 'Dislikes', 'Dismissals', 'Disorders', 'Displays', 'Disposals',\n    'Disputes', 'Disruptions', 'Distances', 'Distinctions', 'Distresses',\n    'Distributions', 'Districts', 'Diversities', 'Dives', 'Divides',\n    'Divisions', 'Divorces', 'Doctors', 'Doctrines', 'Documentaries',\n    'Documentations', 'Documents', 'Dogs', 'Dollars', 'Domains',\n    'Dominances', 'Donations', 'Donors', 'Doors', 'Doses', 'Dots', 'Doubts',\n    'Downloads', 'Downtowns', 'Dozens', 'Drafts', 'Dramas', 'Drawings',\n    'Dreams', 'Dresses', 'Drinks', 'Drivers', 'Drives', 'Drivings', 'Drops',\n    'Droughts', 'Drums', 'Duos', 'Durations', 'Dusts', 'Duties',\n    'Dvds', 'Dynamics', 'Earnings', 'Ears', 'Earthquakes', 'Earths',\n    'Eases', 'Easts', 'Echoes', 'Economics', 'Economies', 'Economists',\n    'Edges', 'Editions', 'Editors', 'Educations', 'Educators',\n    'Effectivenesses', 'Effects', 'Efficiencies', 'Efforts', 'Eggs', 'Egos',\n    'Elbows', 'Elections', 'Electricities', 'Electronics', 'Elements',\n    'Elephants', 'Elites', 'Emails', 'Embarrassments', 'Embassies',\n    'Emergences', 'Emergencies', 'Emissions', 'Emotions', 'Emphases',\n    'Empires', 'Employees', 'Employers', 'Employments', 'Encounters',\n    'Encouragements', 'Endeavours', 'Endings', 'Endorsements', 'Ends',\n    'Enemies', 'Energies', 'Enforcements', 'Engagements', 'Engineerings',\n    'Engineers', 'Engines', 'Enquiries', 'Enterprises', 'Entertainments',\n    'Enthusiasms', 'Enthusiasts', 'Entities', 'Entrances', 'Entrepreneurs',\n    'Entries', 'Envelopes', 'Environments', 'Epidemics', 'Episodes',\n    'Equalities', 'Equals', 'Equations', 'Equipment', 'Equivalents', 'Eras',\n    'Errors', 'Escapes', 'Essays', 'Essences', 'Establishments', 'Estates',\n    'Estimates', 'Ethics', 'Euros', 'Evaluations', 'Evenings', 'Events',\n    'Evidence', 'Evils', 'Evolutions', 'Examinations', 'Examples', 'Exams',\n    'Excellences', 'Exceptions', 'Excesses', 'Exchanges', 'Excitements',\n    'Exclusions', 'Excuses', 'Executives', 'Exercises',\n    'Exhibitions', 'Exhibits', 'Exiles', 'Existences', 'Exits',\n    'Expansions', 'Expectations', 'Expeditions', 'Expenditures', 'Expenses',\n    'Experiences', 'Experiments', 'Expertises', 'Experts', 'Explanations',\n    'Exploitations', 'Explorations', 'Explosions', 'Explosives', 'Exports',\n    'Exposures', 'Expressions', 'Extensions', 'Extents', 'Extracts',\n    'Extras', 'Extremes', 'Eyes', 'Fabrics', 'Faces',\n    'Facilities', 'Factions', 'Factories', 'Factors', 'Facts', 'Faculties',\n    'Failures', 'Fairnesses', 'Faiths', 'Falls', 'Fames', 'Families',\n    'Fans', 'Fantasies', 'Fares', 'Farmers', 'Farmings', 'Farms',\n    'Fashions', 'Fates', 'Fats', 'Faults', 'Favourites', 'Favours', 'Fears',\n    'Feathers', 'Feats', 'Features', 'Februaries', 'Feedbacks', 'Feeds',\n    'Feelings', 'Feels', 'Fees', 'Feet', 'Feminists', 'Fences',\n    'Festivals', 'Fevers', 'Fibres', 'Fictions', 'Fields', 'Fightings',\n    'Fights', 'Figures', 'Files', 'FilmMakers', 'Films', 'Filters',\n    'Finals', 'Finances', 'Findings', 'Fines', 'Fingers', 'Finishes',\n    'Firefighters', 'Fires', 'Fireworks', 'Firms', 'Firsts',\n    'Fish', 'Fishings', 'Fitnesses', 'Fits', 'Fixes', 'Fixtures', 'Flags',\n    'Flames', 'Flashes', 'Flats', 'Flavours', 'Flaws', 'Fleets', 'Fleshes',\n    'Flexibilities', 'Flies', 'Flights', 'Floods', 'Floors', 'Flours',\n    'Flowers', 'Flows', 'Fluids', 'Flus', 'Flyings', 'Foci', 'Folds',\n    'Folks', 'Followings', 'Foods', 'Fools', 'Footages', 'Footballs',\n    'Forces', 'Forecasts', 'Foreigners', 'Forests', 'Forks', 'Formations',\n    'Formats', 'Forms', 'Formulae', 'Fortunes', 'Forums', 'Fossils',\n    'Foundations', 'Founders', 'Fractions', 'Fragments', 'Frames',\n    'Frameworks', 'Franchises', 'Frauds', 'Freedoms', 'Frequencies',\n    'Fridays', 'Fridges', 'Friends', 'Friendships', 'Frogs', 'Fronts',\n    'Fruits', 'Frustrations', 'Fuels', 'Functions', 'Fundings',\n    'Fundraisings', 'Funds', 'Funerals', 'Funs', 'Furnitures', 'Furs',\n    'Futures', 'Gains', 'Galleries', 'Gallons', 'Gamblings', 'Games',\n    'Gamings', 'Gaps', 'Garages', 'Gardens', 'Gases', 'Gates',\n    'Gatherings', 'Gazes', 'Gears', 'Genders', 'Generations', 'Genes',\n    'Genius', 'Genres', 'Gentlemen', 'Geographies', 'Gestures',\n    'Ghosts', 'Giants', 'Gifts', 'Gigs', 'Glances', 'Glasses', 'Glimpses',\n    'Globalizations', 'Globes', 'Glories', 'Gloves', 'Goals', 'Gods',\n    'Goes', 'Gold', 'Golfs', 'Goodbyes', 'Goodnesses', 'Goods',\n    'Governances', 'Governments', 'Governors', 'Graces', 'Grades',\n    'Graduates', 'Grains', 'Grandfathers', 'Grandmothers', 'Grandparents',\n    'Grants', 'Graphics', 'Grasps', 'Grasses', 'Graves', 'Gravities',\n    'Greenhouses', 'Greens', 'Greys', 'Grids', 'Griefs', 'Grins', 'Grips',\n    'Groceries', 'Grounds', 'Groups', 'Growths', 'Guarantees', 'Guards',\n    'Guerrillas', 'Guesses', 'Guests', 'Guidances', 'Guidelines', 'Guides',\n    'Guilts', 'Guitars', 'Guts', 'Guys', 'Gyms', 'Habitats',\n    'Habits', 'Hairs', 'Halls', 'Halts', 'Halves', 'Handfuls', 'Handles',\n    'Handlings', 'Hands', 'Happinesses', 'Harassments', 'Harbours',\n    'Hardwares', 'Harmonies', 'Harms', 'Harvests',\n    'Hats', 'Hazards', 'Headaches', 'Headlines', 'Headquarters', 'Heads',\n    'Healthcares', 'Healths', 'Hearings', 'Hearts', 'Heatings', 'Heats',\n    'Heavens', 'Heels', 'Heights', 'Helicopters', 'Hellos', 'Hells',\n    'Helmets', 'Helps', 'Herbs', 'Heritages', 'Heroes', 'Hierarchies',\n    'Highlights', 'Highs', 'Highways', 'Hills', 'Hints', 'Hips', 'Hires',\n    'Historians', 'Histories', 'Hits', 'Hobbies', 'Hockeys', 'Holds',\n    'Holes', 'Holidays', 'Homelands', 'Homes', 'Homework', 'Honesties',\n    'Honours', 'Hooks', 'Hopes', 'Horizons', 'Horns', 'Horrors', 'Horses',\n    'Hospitals', 'Hosts', 'Hotels', 'Hours',\n    'Households', 'Houses', 'Housings', 'Humanities', 'Humans', 'Humours',\n    'Hungers', 'Huntings', 'Hunts', 'Hurricanes', 'Hurries', 'Hurts',\n    'Hydrogens', 'Hypotheses', 'Ices', 'Icons', 'Ideals', 'Ideas',\n    'Identifications', 'Identities', 'Ideologies', 'Ids',\n    'Ignorances', 'Illusions', 'Illustrations', 'Imageries',\n    'Images', 'Imaginations', 'Immigrations', 'Impacts',\n    'Implementations', 'Implications', 'Importances', 'Imports',\n    'Impressions', 'Imprisonments', 'Improvements', 'Inabilities',\n    'Incentives', 'Inches', 'Incidences', 'Incidents', 'Inclusions',\n    'Incomes', 'Increases', 'Independences', 'Indications', 'Indicators',\n    'Indices', 'Indictments', 'Individuals', 'Industries', 'Inequalities',\n    'Infections', 'Inflations', 'Influences', 'Information',\n    'Infos', 'Infrastructures', 'Ingredients', 'Inhabitants', 'Initiatives',\n    'Injections', 'Injuries', 'Injustices', 'Inks',\n    'Innovations', 'Inputs', 'Inquiries', 'Insects', 'Insertions',\n    'Insiders', 'Insides', 'Insights', 'Inspections', 'Inspectors',\n    'Inspirations', 'Installations', 'Instances', 'Instincts', 'Institutes',\n    'Institutions', 'Instructions', 'Instructors', 'Instruments', 'Insults',\n    'Insurances', 'Intakes', 'Integrations', 'Integrities', 'Intellectuals',\n    'Intelligences', 'Intensities', 'Intentions', 'Intents', 'Interactions',\n    'Interests', 'Interfaces', 'Interferences', 'Interiors',\n    'Interpretations', 'Intervals', 'Interventions', 'Interviews',\n    'Introductions', 'Invasions', 'Inventions', 'Investigations',\n    'Investigators', 'Investments', 'Investors', 'Invitations',\n    'Involvements', 'Ironies', 'Irons', 'Islands', 'Isolations', 'Issues',\n    'Items', 'Its', 'Jackets', 'Jails', 'Jams', 'Januaries', 'Jazzes',\n    'Jeans', 'Jets', 'Jewelleries', 'Jobs', 'Joints', 'Jokes',\n    'Journalisms', 'Journalists', 'Journals', 'Journeys', 'Joys',\n    'Judgements', 'Judges', 'Juices', 'Julies', 'Jumps', 'Junctions',\n    'Junes', 'Juries', 'Jurisdictions', 'Justices', 'Justifications',\n    'Keyboards', 'Keys', 'Kicks', 'Kidneys', 'Kilometres',\n    'Kinds', 'Kingdoms', 'Kings', 'Kisses', 'Kitchens', 'Kits', 'Knees',\n    'Knives', 'Knocks', 'Knowledges', 'Labels', 'Laboratories', 'Labours',\n    'Labs', 'Lacks', 'Ladders', 'Lakes', 'Lamps',\n    'Landings', 'Landlords', 'Landmarks', 'Lands', 'Landscapes', 'Lanes',\n    'Languages', 'Laps', 'Laptops', 'Lasers', 'Lasts', 'Latests', 'Laughs',\n    'Laughters', 'Launches', 'Lawns', 'Laws', 'Lawsuits', 'Lawyers',\n    'Layers', 'Layouts', 'Leaders', 'Leaderships', 'Leads', 'Leaflets',\n    'Leagues', 'Leaks', 'Leaps', 'Learnings', 'Leathers',\n    'Leaves', 'Lectures', 'Lefts', 'Legacies', 'Legends', 'Legislations',\n    'Legislatures', 'Legs', 'Leisures', 'Lemons', 'Lengths', 'Lens',\n    'Lessons', 'Letters', 'Levels', 'Liberals', 'Liberations', 'Liberties',\n    'Libraries', 'Licences', 'Lies', 'Lifestyles', 'Lifetimes', 'Lifts',\n    'Lightings', 'Lights', 'Likelihoods', 'Likes', 'Limbs', 'Limitations',\n    'Limits', 'LineUps', 'Lines', 'Links', 'Lions', 'Lips', 'Liquids',\n    'Listeners', 'Listings', 'Lists', 'Literacies', 'Literatures', 'Litres',\n    'Litters', 'Livers', 'Lives', 'Livings', 'Loads', 'Loans', 'Lobbies',\n    'Locals', 'Locations', 'Locks', 'Logics', 'Logos', 'Logs', 'Looks',\n    'Loops', 'Lords', 'Lorries', 'Losses', 'Lotteries', 'Loves', 'Lows',\n    'Loyalties', 'Luck', 'Lunches', 'Lungs', 'Luxuries', 'Lyrics',\n    'Machineries', 'Machines', 'Magazines', 'Magics', 'Magistrates',\n    'Magnitudes', 'Mails', 'Mainlands', 'Mainstreams', 'Maintenances',\n    'Majorities', 'MakeUps', 'Makes', 'Makings', 'Malls',\n    'Managements', 'Managers', 'Mandates', 'Manipulations', 'Manners',\n    'Manufacturings', 'Manuscripts', 'Maps', 'Marathons',\n    'Marches', 'Margins', 'Markers', 'Marketings', 'Marketplaces',\n    'Markets', 'Marks', 'Marriages', 'Masks', 'Masses',\n    'Masters', 'Matches', 'Materials', 'Mates', 'Mathematics', 'Maths',\n    'Matters', 'Maximums', 'Mayors', 'Mays', 'Meals', 'Meanings', 'Means',\n    'Meantimes', 'Measurements', 'Measures', 'Meats', 'Mechanics',\n    'Mechanisms', 'Medals', 'Media', 'Medications', 'Medicines',\n    'Meditations', 'Meetings', 'Melodies', 'Members', 'Memberships',\n    'Memoirs', 'Memorials', 'Memories', 'Memos', 'Mentions',\n    'Mentors', 'Menus', 'Merchants', 'Mercies', 'Mergers', 'Merits',\n    'Messages', 'Messes', 'Metals', 'Metaphors', 'Methodologies', 'Methods',\n    'Metres', 'Mice', 'Middles', 'Midnights', 'Midsts', 'Migrations',\n    'Miles', 'Milks', 'Mills',\n    'Minds', 'Minerals', 'Miners', 'Mines', 'Minimums', 'Minings',\n    'Ministers', 'Ministries', 'Minutes', 'Miracles',\n    'Mirrors', 'Miseries', 'Missiles', 'Missions', 'Mistakes', 'Mixes',\n    'Mixtures', 'Mobiles', 'Mobilities', 'Mobs', 'Modes',\n    'Modifications', 'Momenta', 'Moments', 'Mondays', 'Moneys', 'Monitors',\n    'Monkeys', 'Monks', 'Monopolies', 'Monsters', 'Months', 'Monuments',\n    'Moods', 'Moons', 'Moralities', 'Morals', 'Mornings', 'Mortgages',\n    'Mothers', 'Motions', 'Motivations', 'Motives',\n    'Motorcycles', 'Motorists', 'Motors', 'Mountains', 'Mouths',\n    'Movements', 'Moves', 'Movies', 'Muds', 'Mums', 'Muscles',\n    'Museums', 'Music', 'Musicals', 'Musicians', 'Mysteries', 'Myths',\n    'Nails', 'Names', 'Narratives', 'Nationals', 'Nations',\n    'Natures', 'Navigations', 'Necessities', 'Necks', 'Needles', 'Needs',\n    'Negatives', 'Neglects', 'Negotiations', 'Neighbourhoods', 'Neighbours',\n    'Nerves', 'Nests', 'Nets', 'Networks', 'News', 'Newsletters',\n    'Newspapers', 'Niches', 'Nightmares', 'Nights', 'Noises', 'Nominations',\n    'Nominees', 'Nonsenses', 'Noons', 'Normals', 'Norms', 'Norths', 'Noses',\n    'Notebooks', 'Notes', 'Notices', 'Notions', 'Novelists', 'Novels',\n    'Novembers', 'Numbers', 'Nurseries', 'Nurses', 'Nursings', 'Nutritions',\n    'Nuts', 'Obesities', 'Objections', 'Objectives', 'Objects',\n    'Obligations', 'Observations', 'Observers', 'Obsessions', 'Obstacles',\n    'Occasions', 'Occupations', 'Occurrences', 'Oceans', 'Octobers', 'Odds',\n    'Offences', 'Offerings', 'Offers', 'Officers', 'Offices',\n    'Officials', 'Offspring', 'Oils', 'Onions', 'Openings', 'Operas',\n    'Operations', 'Operators', 'Opinions', 'Opponents', 'Opportunities',\n    'Opposites', 'Oppositions', 'Optimisms', 'Options', 'Oranges',\n    'Orchestras', 'Orders', 'Organizations', 'Organizers', 'Organs',\n    'Orientations', 'Originals', 'Origins', 'Outbreaks', 'Outcomes',\n    'Outfits', 'Outings', 'Outlets', 'Outlines', 'Outlooks', 'Outputs',\n    'Outrages', 'Outsiders', 'Outsides', 'Ovens', 'Owners', 'Ownerships',\n    'Oxygens', 'Paces', 'Packages', 'Packets', 'Packs', 'Pads', 'Pages',\n    'Pains', 'Painters', 'Paintings', 'Paints', 'Pairs', 'Palaces', 'Palms',\n    'Panels', 'Panics', 'Pans', 'Pants', 'Papers', 'Parades', 'Paragraphs',\n    'Parallels', 'Parameters', 'Parents', 'Parishes', 'Parkings', 'Parks',\n    'Parliaments', 'Participants', 'Participations', 'Parties', 'Partners',\n    'Partnerships', 'Parts', 'Passages', 'Passengers', 'Passes', 'Passings',\n    'Passions', 'Passports', 'Passwords', 'Pastors', 'Pasts', 'Patches',\n    'Patents', 'Paths', 'Pathways', 'Patiences', 'Patients', 'Patrols',\n    'Patrons', 'Patterns', 'Pauses', 'Payments', 'Pays', 'Peaces', 'Peaks',\n    'Peasants', 'Peers', 'Penalties', 'Pencils', 'Pennies', 'Pens',\n    'Pensions', 'People', 'Peoples', 'Peppers', 'Percentages',\n    'Perceptions', 'Performances', 'Periods', 'Permissions', 'Permits',\n    'Personalities', 'Personnels', 'Perspectives', 'Petitions', 'Petrols',\n    'Pets', 'Phases', 'Phenomena', 'Philosophers', 'Philosophies', 'Phones',\n    'Photographers', 'Photographies', 'Photographs', 'Photos', 'Phrases',\n    'Physicians', 'Physics', 'Pianos', 'Picks', 'Pictures', 'Pieces',\n    'Pigs', 'Piles', 'Pills', 'Pilots', 'Pinks', 'Pins', 'Pioneers',\n    'Pipelines', 'Pipes', 'Pirates', 'Pitches', 'Pities', 'Pits',\n    'Placements', 'Places', 'Planes', 'Planets', 'Plannings', 'Plans',\n    'Plants', 'Plastics', 'Plates', 'Platforms', 'Players', 'Plays',\n    'Pleas', 'Pleasures', 'Pledges', 'Plots', 'Plugs', 'Plus', 'Pockets',\n    'Poems', 'Poetries', 'Poets', 'Points', 'Poisons', 'Poles', 'Police',\n    'Policemen', 'Policies', 'Politicians', 'Politics', 'Polls',\n    'Pollutions', 'Ponds', 'Pools', 'Pops', 'Popularities', 'Populations',\n    'Portfolios', 'Portions', 'Portraits', 'Ports', 'Positions',\n    'Positives', 'Possessions', 'Possibilities', 'Posters', 'Posts',\n    'Potatoes', 'Potentials', 'Pots', 'Pounds', 'Poverties', 'Powders',\n    'Powers', 'Practices', 'Practitioners', 'Praises', 'Prayers',\n    'Precedents', 'Precisions', 'Predators', 'Predecessors', 'Predictions',\n    'Preferences', 'Pregnancies', 'Prejudices', 'Premises', 'Premiums',\n    'Preparations', 'Prescriptions', 'Presences', 'Presentations',\n    'Presents', 'Preservations', 'Presidencies', 'Presidents', 'Presses',\n    'Pressures', 'Prevalences', 'Preventions', 'Preys', 'Prices', 'Prides',\n    'Priests', 'Princes', 'Princesses', 'Principals', 'Principles',\n    'Printers', 'Printings', 'Prints', 'Priorities', 'Prisons',\n    'Privacies', 'Privatizations', 'Privileges', 'Prizes', 'Probabilities',\n    'Probes', 'Problems', 'Procedures', 'Proceedings', 'Proceeds',\n    'Processes', 'Processings', 'Processors', 'Producers', 'Produces',\n    'Productions', 'Productivities', 'Products', 'Professionals',\n    'Professions', 'Professors', 'Profiles', 'Profits', 'Programmes',\n    'Programmings', 'Programs', 'Progresses', 'Projections', 'Projects',\n    'Promises', 'Promotions', 'Proofs', 'Propagandas', 'Properties',\n    'Proportions', 'Proposals', 'Propositions', 'Prosecutions',\n    'Prosecutors', 'Prospects', 'Prosperities', 'Protections', 'Proteins',\n    'Protesters', 'Protests', 'Protocols', 'Provinces', 'Provisions',\n    'Psychologies', 'Psychologists', 'Publications', 'Publicities',\n    'Publics', 'Publishings', 'Pubs', 'Pulls', 'Pulses', 'Pumps', 'Punches',\n    'Punishments', 'Punks', 'Pupils', 'Purchases', 'Purples', 'Purposes',\n    'Pursuits', 'Pushes', 'Puzzles', 'Qualifications', 'Qualities',\n    'Quantities', 'Quarters', 'Queens', 'Queries', 'Questionnaires',\n    'Questions', 'Quests', 'Queues', 'Quotas', 'Quotations', 'Quotes',\n    'Races', 'Racings', 'Radars', 'Radiations',\n    'Radios', 'Rages', 'Raids', 'Rails', 'Railways', 'Rains', 'Rallies',\n    'Ranges', 'Rankings', 'Ranks', 'Rates', 'Ratings', 'Ratios',\n    'Rats', 'Rays', 'Reaches', 'Reactions', 'Readers', 'Readings',\n    'Realities', 'Realizations', 'Realms', 'Rears', 'Reasonings', 'Reasons',\n    'Rebellions', 'Rebels', 'Receipts', 'Receivers', 'Receptions',\n    'Recessions', 'Recipes', 'Recipients', 'Recognitions',\n    'Recommendations', 'Reconstructions', 'Recordings', 'Records',\n    'Recoveries', 'Recruitments', 'Recruits', 'Reductions',\n    'Referees', 'References', 'Referendums', 'Reflections', 'Reforms',\n    'Refusals', 'Regards', 'Regimes', 'Regions',\n    'Registers', 'Registrations', 'Regrets', 'Regulations', 'Regulators',\n    'Rehabilitations', 'Reigns', 'Rejections', 'Relations', 'Relationships',\n    'Relatives', 'Releases', 'Relevances', 'Reliabilities', 'Reliefs',\n    'Religions', 'Remainders', 'Remains', 'Remarks', 'Remedies',\n    'Reminders', 'Removals', 'Rentals', 'Rents', 'Repairs', 'Repeats',\n    'Replacements', 'Replies', 'Reporters', 'Reportings', 'Reports',\n    'Representations', 'Representatives', 'Reproductions', 'Republics',\n    'Reputations', 'Requests', 'Requirements', 'Rescues', 'Researchers',\n    'Researches', 'Reservations', 'Reserves', 'Residences', 'Residents',\n    'Residues', 'Resignations', 'Resistances', 'Resolutions', 'Resorts',\n    'Resources', 'Respects', 'Responses', 'Responsibilities', 'Restaurants',\n    'Restorations', 'Restraints', 'Restrictions', 'Rests', 'Results',\n    'Retails', 'Retirements', 'Retreats', 'Returns', 'Revelations',\n    'Revenges', 'Revenues', 'Reverses', 'Reviews', 'Revisions', 'Revivals',\n    'Revolutions', 'Rewards', 'Rhetorics', 'Rhythms', 'Rices', 'Rides',\n    'Rifles', 'Rights', 'Rings', 'Riots', 'Rises', 'Risks', 'Rituals',\n    'Rivals', 'Rivers', 'Roads', 'Robberies', 'Robots', 'Rockets', 'Rocks',\n    'Rods', 'Roles', 'Rolls', 'Romances', 'Roofs', 'Rooms', 'Roots',\n    'Ropes', 'Roses', 'Rotations', 'Rounds', 'Routes', 'Routines', 'Rows',\n    'Rubbers', 'Rubbishes', 'Rugbies', 'Ruins', 'Rules', 'Rulings',\n    'Rumours', 'Runners', 'Runnings', 'Runs', 'Rushes', 'Sacrifices',\n    'Safeties', 'Sailings', 'Sailors', 'Sails', 'Saints', 'Sakes', 'Salads',\n    'Salaries', 'Sales', 'Salts', 'Samples', 'Sanctions', 'Sands',\n    'Sandwiches', 'Satellites', 'Satisfactions', 'Saturdays', 'Sauces',\n    'Savings', 'Says', 'Scales', 'Scandals', 'Scares', 'Scenarios',\n    'Scenes', 'Schedules', 'Schemes', 'Scholars', 'Scholarships', 'Schools',\n    'Sciences', 'Scientists', 'Scopes', 'Scores', 'Scratches', 'Screams',\n    'Screenings', 'Screens', 'Screws', 'Scripts', 'Scrutinies',\n    'Sculptures', 'Seals', 'Searches', 'Seas', 'Seasons', 'Seats',\n    'Seconds', 'Secretaries', 'Secrets', 'Sections', 'Sectors',\n    'Securities', 'Seeds', 'Seekers', 'Segments', 'Selections', 'Selves',\n    'Seminars', 'Senators', 'Sensations', 'Senses', 'Sensitivities',\n    'Sentences', 'Sentiments', 'Separations', 'Septembers', 'Sequences',\n    'Series', 'Servants', 'Services', 'Sessions', 'SetUps', 'Sets',\n    'Settings', 'Settlements', 'Settlers', 'Shades',\n    'Shadows', 'Shakes', 'Shames', 'Shapes', 'Shareholders', 'Shares',\n    'Sheep', 'Sheets', 'Shells', 'Shelters', 'Shelves', 'Shifts',\n    'Shippings', 'Ships', 'Shirts', 'Shocks', 'Shoes', 'Shootings',\n    'Shoots', 'Shoppings', 'Shops', 'Shores', 'Shortages', 'Shots',\n    'Shoulders', 'Shouts', 'Showers', 'Shows', 'Siblings', 'Sides', 'Sighs',\n    'Sights', 'Signals', 'Signatures', 'Significances', 'Signs', 'Silences',\n    'Silks', 'Silver', 'Similarities', 'Simulations', 'Singers', 'Singings',\n    'Singles', 'Sins', 'Sirs', 'Sites', 'Situations', 'Sizes',\n    'Sketches', 'Skies', 'Skiings', 'Skills', 'Skins', 'Skirts', 'Skis',\n    'Skulls', 'Sleeps', 'Slices', 'Slides',\n    'Slogans', 'Slopes', 'Slots', 'Smartphones', 'Smells', 'Smiles',\n    'Smokes', 'Smokings', 'Snakes', 'Snows', 'Soaps', 'Soccers',\n    'Societies', 'Socks', 'Softwares', 'Soils', 'Soldiers', 'Solicitors',\n    'Solidarities', 'Solids', 'Solos', 'Solutions', 'Songs', 'Sons',\n    'Sorts', 'Souls', 'Sounds', 'Soups', 'Sources',\n    'Sovereignties', 'Spaces', 'Spams', 'Spans', 'Speakers', 'Specialists',\n    'Species', 'Specifications', 'Specimens', 'Spectacles', 'Spectators',\n    'Spectra', 'Speculations', 'Speeches', 'Speeds', 'Spellings', 'Spells',\n    'Spendings', 'Spheres', 'Spices', 'Spiders', 'Spies', 'Spines', 'Spins',\n    'Spirits', 'Spites', 'Splits', 'Spokesmen', 'Spokespeople', 'Sponsors',\n    'Sponsorships', 'Spoons', 'Sports', 'Spotlights', 'Spots', 'Spouses',\n    'Spreads', 'Springs', 'Squads', 'Squares', 'Stabilities', 'Stadiums',\n    'Staffs', 'Stages', 'Stairs', 'Stakes', 'Stalls', 'Stamps', 'Stances',\n    'Standards', 'Stands', 'Stars', 'Starts', 'Statements', 'States',\n    'Stations', 'Statistics', 'Statues', 'Status', 'Stays', 'Steams',\n    'Steels', 'Stems', 'Steps', 'Stereotypes', 'Sticks', 'Stimuli',\n    'Stocks', 'Stomachs', 'Stones', 'Stops', 'Storages', 'Stores',\n    'Stories', 'Storms', 'Strains', 'Strands', 'Strangers', 'Strategies',\n    'Streams', 'Streets', 'Strengths', 'Stresses', 'Stretches', 'Strikes',\n    'Strings', 'Strips', 'Strokes', 'Structures', 'Struggles', 'Students',\n    'Studies', 'Studios', 'Stuffs', 'Styles', 'Subjects', 'Submissions',\n    'Subscribers', 'Subscriptions', 'Subsidies', 'Substances',\n    'Substitutes', 'Substitutions', 'Suburbs', 'Successes', 'Successions',\n    'Successors', 'Sufferings', 'Sugars', 'Suggestions',\n    'Suites', 'Suits', 'Summaries', 'Summers', 'Summits', 'Sums', 'Sundays',\n    'Suns', 'Supermarkets', 'Supervisions', 'Supervisors', 'Supplements',\n    'Supplies', 'Supporters', 'Supports', 'Surfaces', 'Surgeons',\n    'Surgeries', 'Surges', 'Surplus', 'Surprises', 'Surveillances',\n    'Surveys', 'Survivals', 'Survivors', 'Suspects', 'Suspensions',\n    'Suspicions', 'Sweaters', 'Sweets', 'Swimmings', 'Swims', 'Swings',\n    'Switches', 'Swords', 'Symbols', 'Sympathies', 'Symptoms', 'Syndromes',\n    'Syntheses', 'Systems', 'TShirts', 'Tables', 'Tablets', 'Tackles',\n    'Tactics', 'Tags', 'Tails', 'Talents', 'Tales', 'Talks', 'Tanks',\n    'Tapes', 'Taps', 'Targets', 'Tasks', 'Tastes', 'Taxes', 'Taxis',\n    'Taxpayers', 'Teachers', 'Teachings', 'Teams', 'Tears', 'Teas',\n    'Techniques', 'Technologies', 'Teenagers', 'Teens', 'Teeth',\n    'Telephones', 'Televisions', 'Temperatures', 'Temples', 'Tenants',\n    'Tendencies', 'Tennis', 'Tensions', 'Tents', 'Tenures', 'Terminals',\n    'Terms', 'Terrains', 'Territories',\n    'Testimonies', 'Testings', 'Tests', 'Textbooks', 'Texts',\n    'Textures', 'Thanks', 'Theatres', 'Thefts', 'Themes', 'Theologies',\n    'Theories', 'Therapies', 'Therapists', 'Theses', 'Thieves', 'Things',\n    'Thinkings', 'Thirds', 'Thoughts', 'Threads', 'Threats', 'Thresholds',\n    'Throats', 'Thumbs', 'Thursdays', 'Tickets', 'Tides', 'Ties', 'Timbers',\n    'Times', 'Timings', 'Tins', 'Tips', 'Tissues', 'Titles', 'Tobaccos',\n    'Todays', 'Toes', 'Toilets', 'Tolerances', 'Tolls', 'Tomatoes',\n    'Tomorrows', 'Tones', 'Tongues', 'Tonights', 'Tonnes', 'Tons', 'Tools',\n    'Topics', 'Tops', 'Tortures', 'Totals', 'Touches', 'Tourisms',\n    'Tourists', 'Tournaments', 'Tours', 'Towels', 'Towers', 'Towns', 'Toys',\n    'Traces', 'Tracks', 'Trademarks', 'Trades', 'Tradings', 'Traditions',\n    'Traffics', 'Tragedies', 'Trailers', 'Trails', 'Trainers', 'Trainings',\n    'Trains', 'Traits', 'Transactions', 'Transcripts', 'Transfers',\n    'Transformations', 'Transitions', 'Transits', 'Translations',\n    'Transmissions', 'Transparencies', 'Transportations', 'Transports',\n    'Traps', 'Traumas', 'Travellers', 'Travels', 'Treasures', 'Treaties',\n    'Treatments', 'Trees', 'Trends', 'Trials', 'Tribes', 'Tribunals',\n    'Tributes', 'Tricks', 'Tries', 'Triggers', 'Trios', 'Trips', 'Triumphs',\n    'Troops', 'Trophies', 'Troubles', 'Trousers', 'Trucks', 'Trustees',\n    'Trusts', 'Truths', 'Tsunamis', 'Tubes', 'Tuesdays', 'Tuitions',\n    'Tunes', 'Tunnels', 'Turnouts', 'Turnovers', 'Turns', 'Tvs',\n    'Twists', 'Types', 'Tyres', 'Umbrellas', 'Uncertainties', 'Uncles',\n    'Undergraduates', 'Understandings', 'Underwears', 'Unemployments',\n    'Uniforms', 'Unions', 'Unities', 'Units', 'Universes', 'Universities',\n    'Updates', 'Upgrades', 'Usages', 'Users', 'Uses', 'Utilities',\n    'Vacations', 'Vacuums', 'Validities', 'Valleys', 'Values', 'Vans',\n    'Variables', 'Variations', 'Varieties', 'Vegetables', 'Vehicles',\n    'Veins', 'Ventures', 'Venues', 'Verdicts', 'Verses', 'Versions',\n    'Vessels', 'Veterans', 'Vices', 'Victories', 'Videos',\n    'Viewers', 'Viewpoints', 'Views', 'Villagers', 'Villages', 'Violations',\n    'Violences', 'Virtues', 'Viruses', 'Visas', 'Visions', 'Visitors',\n    'Visits', 'Vitamins', 'Voices', 'Volumes', 'Volunteers', 'Votes',\n    'Votings', 'Vulnerabilities', 'Wages', 'Waiters', 'Waits', 'Walks',\n    'Walls', 'Wards', 'Warehouses', 'Warfares', 'Warmings', 'Warnings',\n    'Warrants', 'Warriors', 'Washes', 'Washings', 'Wastes',\n    'Watches', 'Waters', 'Waves', 'Ways', 'Weaknesses', 'Wealths',\n    'Weathers', 'Webs', 'Websites', 'Weddings', 'Wednesdays',\n    'Weeds', 'Weekends', 'Weeks', 'Weights', 'Welcomes', 'Welfares',\n    'WellBeings', 'Wells', 'Wests', 'Wheat', 'Wheels', 'Whispers',\n    'Wholes', 'Widows', 'Widths', 'Wildlives', 'Willingnesses',\n    'Wills', 'Windows', 'Winds', 'Wines', 'Wings', 'Winners', 'Wins',\n    'Winters', 'Wires', 'Wisdoms', 'Wishes', 'Withdrawals', 'Witnesses',\n    'Wits', 'Wonders', 'Woods', 'Wools', 'Words', 'Workers', 'Workforces',\n    'Workouts', 'Workplaces', 'Works', 'Workshops', 'Worlds', 'Worms',\n    'Worries', 'Worses', 'Worships', 'Worsts', 'Worths', 'Wounds', 'Wrists',\n    'Writers', 'Writings', 'Wrongs', 'Yards', 'Years', 'Yellows',\n    'Yesterdays', 'Yields', 'Zones'\n];\n\n/*\nconst _PLACE_ = [\n    'Pub', 'University', 'Airport', 'Library', 'Mall', 'Theater', 'Stadium',\n    'Office', 'Show', 'Gallows', 'Beach', 'Cemetery', 'Hospital', 'Reception',\n    'Restaurant', 'Bar', 'Church', 'House', 'School', 'Square', 'Village',\n    'Cinema', 'Movies', 'Party', 'Restroom', 'End', 'Jail', 'PostOffice',\n    'Station', 'Circus', 'Gates', 'Entrance', 'Bridge'\n];\n*/\n\n/**\n * The list of verbs.\n * @const\n */\nconst _VERB_ = [\n    'Abolish', 'Absorb', 'Accelerate', 'Accept',\n    'Access', 'Accommodate', 'Accompany', 'Accomplish', 'Account',\n    'Accumulate', 'Accuse', 'Achieve', 'Acknowledge', 'Acquire', 'Act',\n    'Activate', 'Adapt', 'Add', 'Address', 'Adhere', 'Adjust', 'Administer',\n    'Admire', 'Admit', 'Adopt', 'Advance', 'Advertise', 'Advise',\n    'Advocate', 'Affect', 'Afford', 'Age', 'Agree', 'Aid', 'Aim', 'Alarm',\n    'Alert', 'Align', 'Allege', 'Allocate', 'Allow', 'Alter', 'Amend',\n    'Amount', 'Analyse', 'Announce', 'Annoy', 'Answer', 'Anticipate',\n    'Apologize', 'Appeal', 'Appear', 'Applaud', 'Apply', 'Appoint',\n    'Appreciate', 'Approach', 'Approve', 'Argue', 'Arise', 'Arm', 'Arrange',\n    'Arrest', 'Arrive', 'Articulate', 'Ask', 'Aspire',\n    'Assemble', 'Assert', 'Assess', 'Assign', 'Assist', 'Associate',\n    'Assume', 'Assure', 'Attach', 'Attain', 'Attempt', 'Attend',\n    'Attract', 'Attribute', 'Authorize', 'Average', 'Avoid', 'Await',\n    'Award', 'Back', 'Bake', 'Balance', 'Ban', 'Bar', 'Base', 'Bat',\n    'Battle', 'Be', 'Bear', 'Beat', 'Become', 'Beg', 'Begin', 'Behave',\n    'Believe', 'Belong', 'Bend', 'Benefit', 'Bet', 'Betray', 'Bid', 'Bill',\n    'Bind', 'Bite', 'Blame', 'Blast', 'Blend', 'Bless', 'Block',\n    'Blow', 'Board', 'Boast', 'Boil', 'Book', 'Boost', 'Border',\n    'Borrow', 'Bother', 'Bounce', 'Bow', 'Brand', 'Breach', 'Break',\n    'Breathe', 'Breed', 'Bring', 'Broadcast', 'Brush', 'Build', 'Burn',\n    'Burst', 'Bury', 'Buy', 'Calculate', 'Call', 'Calm', 'Camp', 'Campaign',\n    'Cancel', 'Capture', 'Care', 'Carry', 'Carve', 'Cast', 'Catch', 'Cater',\n    'Cause', 'Cease', 'Celebrate', 'Centre', 'Chain', 'Chair', 'Challenge',\n    'Change', 'Characterize', 'Charge', 'Chart', 'Chase', 'Chat', 'Cheat',\n    'Check', 'Cheer', 'Choose', 'Chop', 'Circle', 'Circulate', 'Cite',\n    'Claim', 'Clarify', 'Classify', 'Clean', 'Clear', 'Click', 'Climb',\n    'Cling', 'Close', 'Coach', 'Coincide', 'Collaborate', 'Collapse',\n    'Collect', 'Combat', 'Combine', 'Come', 'Comfort', 'Command',\n    'Commence', 'Comment', 'Commission', 'Commit', 'Communicate', 'Compare',\n    'Compel', 'Compensate', 'Compete', 'Compile', 'Complain', 'Complement',\n    'Complete', 'Comply', 'Compose', 'Comprise', 'Compromise', 'Compute',\n    'Conceal', 'Concede', 'Conceive', 'Concentrate', 'Concern', 'Conclude',\n    'Condemn', 'Conduct', 'Confer', 'Confess', 'Confine', 'Confirm',\n    'Conflict', 'Confront', 'Confuse', 'Congratulate', 'Connect', 'Conquer',\n    'Consent', 'Conserve', 'Consider', 'Consist', 'Consolidate',\n    'Constitute', 'Construct', 'Consult', 'Consume', 'Contact', 'Contain',\n    'Contemplate', 'Contend', 'Contest', 'Continue', 'Contract', 'Contrast',\n    'Contribute', 'Control', 'Convert', 'Convey', 'Convict', 'Convince',\n    'Cook', 'Cool', 'Cooperate', 'Coordinate', 'Cope', 'Copy', 'Correct',\n    'Correlate', 'Correspond', 'Cost', 'Count', 'Counter', 'Cover', 'Crack',\n    'Craft', 'Crash', 'Crawl', 'Create', 'Credit', 'Creep', 'Criticize',\n    'Cross', 'Cruise', 'Crush', 'Cry', 'Cultivate', 'Cure', 'Curve', 'Cut',\n    'Cycle', 'Damage', 'Dance', 'Dare', 'Date', 'Deal', 'Debate', 'Decide',\n    'Declare', 'Decline', 'Decorate', 'Decrease', 'Deem', 'Defeat',\n    'Defend', 'Define', 'Defy', 'Delay', 'Delete', 'Delight', 'Deliver',\n    'Demand', 'Demonstrate', 'Denounce', 'Deny', 'Depart', 'Depend',\n    'Depict', 'Deploy', 'Deposit', 'Deprive', 'Derive', 'Descend',\n    'Describe', 'Desert', 'Deserve', 'Design', 'Designate', 'Desire',\n    'Destroy', 'Detail', 'Detain', 'Detect', 'Deteriorate', 'Determine',\n    'Devastate', 'Develop', 'Devise', 'Devote', 'Diagnose', 'Dictate',\n    'Differ', 'Differentiate', 'Dig', 'Diminish', 'Dip', 'Direct',\n    'Disagree', 'Disappear', 'Disappoint', 'Discard', 'Discharge',\n    'Disclose', 'Discount', 'Discourage', 'Discover', 'Discuss', 'Dislike',\n    'Dismiss', 'Displace', 'Display', 'Dispose', 'Dispute', 'Disrupt',\n    'Dissolve', 'Distinguish', 'Distort', 'Distract', 'Distress',\n    'Distribute', 'Disturb', 'Dive', 'Divert', 'Divide', 'Divorce', 'Do',\n    'Document', 'Dominate', 'Donate', 'Double', 'Doubt', 'Download',\n    'Draft', 'Drag', 'Drain', 'Draw', 'Dream', 'Dress', 'Drift', 'Drink',\n    'Drive', 'Drop', 'Dry', 'Dub', 'Dump', 'Earn', 'Ease', 'Eat',\n    'Echo', 'Edit', 'Educate', 'Elect', 'Elevate', 'Eliminate', 'Email',\n    'Embark', 'Embed', 'Embody', 'Embrace', 'Emerge', 'Emphasize', 'Employ',\n    'Empower', 'Empty', 'Enable', 'Enact', 'Encompass', 'Encounter',\n    'Encourage', 'End', 'Endorse', 'Endure', 'Enforce', 'Engage', 'Enhance',\n    'Enjoy', 'Enquire', 'Enrich', 'Enrol', 'Ensue', 'Ensure', 'Enter',\n    'Entertain', 'Entitle', 'Equal', 'Equip', 'Erect', 'Erupt', 'Escalate',\n    'Escape', 'Establish', 'Estimate', 'Evacuate', 'Evaluate', 'Evoke',\n    'Evolve', 'Exaggerate', 'Examine', 'Exceed', 'Exchange', 'Exclude',\n    'Excuse', 'Execute', 'Exercise', 'Exert', 'Exhibit', 'Exist', 'Exit',\n    'Expand', 'Expect', 'Experience', 'Experiment', 'Expire', 'Explain',\n    'Explode', 'Exploit', 'Explore', 'Export', 'Expose', 'Express',\n    'Extend', 'Extract', 'Face', 'Facilitate', 'Fade', 'Fail', 'Fall',\n    'Fancy', 'Farm', 'Fasten', 'Favour', 'Fear', 'Feature', 'Feed', 'Feel',\n    'Fight', 'Figure', 'File', 'Fill', 'Film', 'Filter', 'Finance', 'Find',\n    'Fine', 'Finish', 'Fire', 'Fish', 'Fit', 'Fix', 'Flash', 'Flee',\n    'Float', 'Flood', 'Flourish', 'Flow', 'Fly', 'Focus', 'Fold', 'Follow',\n    'Forbid', 'Force', 'Forecast', 'Forge', 'Forget', 'Forgive', 'Form',\n    'Formulate', 'Foster', 'Found', 'Frame', 'Free', 'Freeze', 'Frighten',\n    'Fry', 'Fuel', 'Fulfil', 'Function', 'Fund', 'Gain', 'Gather', 'Gaze',\n    'Generate', 'Get', 'Give', 'Glance', 'Go', 'Govern', 'Grab', 'Grade',\n    'Graduate', 'Grant', 'Grasp', 'Greet', 'Grin', 'Grind', 'Grip', 'Grow',\n    'Guarantee', 'Guard', 'Guess', 'Guide', 'Hail', 'Halt', 'Hand',\n    'Handle', 'Hang', 'Happen', 'Harvest', 'Haunt', 'Have',\n    'Head', 'Heal', 'Hear', 'Heat', 'Heighten', 'Help', 'Hesitate', 'Hide',\n    'Highlight', 'Hint', 'Hire', 'Hit', 'Hold', 'Honour', 'Hook', 'Hope',\n    'Host', 'House', 'Hunt', 'Hurry', 'Identify', 'Ignore',\n    'Illustrate', 'Imagine', 'Impact', 'Implement', 'Imply', 'Import',\n    'Impose', 'Impress', 'Improve', 'Include', 'Incorporate',\n    'Increase', 'Incur', 'Indicate', 'Induce', 'Indulge', 'Infect', 'Infer',\n    'Inflict', 'Influence', 'Inform', 'Inherit', 'Inhibit', 'Initiate',\n    'Inject', 'Injure', 'Insert', 'Insist', 'Inspect', 'Inspire', 'Install',\n    'Instruct', 'Insult', 'Integrate', 'Intend', 'Intensify', 'Interact',\n    'Interest', 'Interfere', 'Interpret', 'Interrupt', 'Intervene',\n    'Interview', 'Introduce', 'Invade', 'Invent', 'Invest', 'Investigate',\n    'Invite', 'Invoke', 'Involve', 'Iron', 'Isolate', 'Issue',\n    'Join', 'Joke', 'Judge', 'Jump', 'Justify', 'Keep', 'Key', 'Kick',\n    'Kiss', 'Knock', 'Know', 'Label', 'Lack', 'Land',\n    'Last', 'Laugh', 'Launch', 'Lay', 'Lead', 'Leak', 'Lean', 'Leap',\n    'Learn', 'Leave', 'Lecture', 'Lend', 'Let', 'Level', 'License', 'Lift',\n    'Light', 'Like', 'Limit', 'Line', 'Linger', 'Link', 'List', 'Listen',\n    'Live', 'Load', 'Lobby', 'Locate', 'Lock', 'Log', 'Look', 'Loom',\n    'Lose', 'Love', 'Lower', 'Mail', 'Maintain', 'Make', 'Manage',\n    'Manifest', 'Manipulate', 'Manufacture', 'Map', 'March', 'Mark',\n    'Market', 'Marry', 'Master', 'Match', 'Mate', 'Matter', 'Mature',\n    'Maximize', 'Mean', 'Measure', 'Meet', 'Melt', 'Mention', 'Merge',\n    'Mind', 'Minimize', 'Miss', 'Mistake', 'Mix', 'Mobilize', 'Model',\n    'Modify', 'Monitor', 'Motivate', 'Mount', 'Move', 'Multiply',\n    'Name', 'Narrow', 'Need', 'Neglect', 'Negotiate', 'Nod', 'Nominate',\n    'Note', 'Notice', 'Notify', 'Number', 'Obey', 'Object', 'Oblige',\n    'Observe', 'Obsess', 'Obtain', 'Occupy', 'Occur', 'Offend', 'Offer',\n    'Open', 'Operate', 'Oppose', 'Opt', 'Order', 'Organize', 'Originate',\n    'Outline', 'Outrage', 'Overcome', 'Overlook', 'Oversee', 'Overturn',\n    'Overwhelm', 'Owe', 'Own', 'Pace', 'Pack', 'Package', 'Paint', 'Park',\n    'Participate', 'Pass', 'Patrol', 'Pause', 'Pay', 'Perceive', 'Perform',\n    'Permit', 'Persist', 'Persuade', 'Phone', 'Photograph', 'Pick',\n    'Picture', 'Pile', 'Pin', 'Pioneer', 'Place', 'Plan', 'Plant', 'Play',\n    'Plead', 'Please', 'Pledge', 'Plot', 'Plug', 'Plunge', 'Point',\n    'Pop', 'Portray', 'Pose', 'Position', 'Possess', 'Post',\n    'Postpone', 'Pour', 'Power', 'Practise', 'Praise', 'Pray', 'Preach',\n    'Precede', 'Predict', 'Prefer', 'Prepare', 'Prescribe', 'Present',\n    'Preserve', 'Preside', 'Press', 'Presume', 'Pretend', 'Prevail',\n    'Prevent', 'Price', 'Print', 'Probe', 'Proceed', 'Process', 'Proclaim',\n    'Produce', 'Program', 'Progress', 'Prohibit', 'Project', 'Promise',\n    'Promote', 'Prompt', 'Pronounce', 'Propose', 'Prosecute', 'Protect',\n    'Protest', 'Prove', 'Provide', 'Provoke', 'Publish', 'Pull', 'Pump',\n    'Punch', 'Punish', 'Purchase', 'Pursue', 'Push', 'Put', 'Qualify',\n    'Question', 'Queue', 'Quit', 'Quote', 'Race', 'Raid', 'Rain', 'Raise',\n    'Rally', 'Range', 'Rank', 'Rate', 'Reach', 'React', 'Read',\n    'Realize', 'Reassure', 'Rebuild', 'Recall', 'Receive', 'Reckon',\n    'Recognize', 'Recommend', 'Record', 'Recount', 'Recover', 'Recruit',\n    'Recycle', 'Reduce', 'Refer', 'Reflect', 'Reform', 'Refuse', 'Regain',\n    'Regard', 'Register', 'Regret', 'Regulate', 'Reign', 'Reinforce',\n    'Reject', 'Relate', 'Relax', 'Release', 'Relieve', 'Rely', 'Remain',\n    'Remark', 'Remember', 'Remind', 'Remove', 'Render', 'Renew', 'Rent',\n    'Repair', 'Repeat', 'Replace', 'Reply', 'Report', 'Represent',\n    'Reproduce', 'Request', 'Require', 'Rescue', 'Research', 'Resemble',\n    'Reserve', 'Reside', 'Resign', 'Resist', 'Resolve', 'Respect',\n    'Respond', 'Rest', 'Restore', 'Restrict', 'Result', 'Resume', 'Retain',\n    'Retire', 'Retreat', 'Retrieve', 'Return', 'Reveal', 'Reverse',\n    'Review', 'Revise', 'Revive', 'Reward', 'Rid', 'Ride', 'Ring', 'Rip',\n    'Rise', 'Risk', 'Rob', 'Rock', 'Roll', 'Rotate', 'Rub', 'Ruin', 'Rule',\n    'Run', 'Rush', 'Sack', 'Sacrifice', 'Sail', 'Sample', 'Satisfy', 'Save',\n    'Say', 'Scan', 'Scare', 'Schedule', 'Score', 'Scratch', 'Scream',\n    'Screen', 'Screw', 'Seal', 'Search', 'Seat', 'Secure', 'See', 'Seek',\n    'Seize', 'Select', 'Sell', 'Send', 'Sense', 'Sentence', 'Separate',\n    'Serve', 'Set', 'Settle', 'Shake', 'Shape', 'Share', 'Shatter', 'Shed',\n    'Shelter', 'Shift', 'Shine', 'Ship', 'Shock', 'Shoot', 'Shop', 'Shout',\n    'Show', 'Shrink', 'Shrug', 'Shut', 'Sigh', 'Sign', 'Signal', 'Simulate',\n    'Sing', 'Sink', 'Sit', 'Ski', 'Skip', 'Slam', 'Slap', 'Slash', 'Sleep',\n    'Slice', 'Slide', 'Slip', 'Slope', 'Slow', 'Smash', 'Smell', 'Smile',\n    'Smoke', 'Snap', 'Snow', 'Soak', 'Soar', 'Solve', 'Sort', 'Sound',\n    'Span', 'Spare', 'Spark', 'Speak', 'Specialize', 'Specify', 'Speculate',\n    'Speed', 'Spell', 'Spend', 'Spill', 'Spin', 'Split', 'Spoil', 'Sponsor',\n    'Spot', 'Spread', 'Spring', 'Spy', 'Squeeze', 'Stab', 'Stabilize',\n    'Stage', 'Stand', 'Star', 'Stare', 'Start', 'Starve', 'State', 'Stay',\n    'Steal', 'Steer', 'Stem', 'Step', 'Stick', 'Stimulate', 'Stir', 'Stop',\n    'Store', 'Strengthen', 'Stress', 'Stretch', 'Strike', 'Strip', 'Strive',\n    'Structure', 'Struggle', 'Study', 'Stuff', 'Stumble', 'Stun', 'Submit',\n    'Substitute', 'Succeed', 'Sue', 'Suffer', 'Suggest', 'Suit',\n    'Sum', 'Summarize', 'Supervise', 'Supplement', 'Supply', 'Support',\n    'Suppose', 'Suppress', 'Surge', 'Surprise', 'Surrender', 'Surround',\n    'Survey', 'Survive', 'Suspect', 'Suspend', 'Sustain', 'Swallow',\n    'Swear', 'Sweep', 'Swim', 'Swing', 'Switch', 'Tackle', 'Tag', 'Take',\n    'Talk', 'Tap', 'Target', 'Taste', 'Tax', 'Teach', 'Tear', 'Telephone',\n    'Tell', 'Tempt', 'Tend', 'Term', 'Terminate', 'Terrify', 'Test',\n    'Testify', 'Text', 'Thank', 'Think', 'Thrive', 'Throw',\n    'Tidy', 'Tie', 'Tighten', 'Time', 'Tip', 'Title', 'Tolerate', 'Top',\n    'Toss', 'Total', 'Touch', 'Tour', 'Trace', 'Track', 'Trade',\n    'Trail', 'Train', 'Transfer', 'Transform', 'Translate', 'Transmit',\n    'Transport', 'Trap', 'Travel', 'Treat', 'Trick', 'Trigger', 'Trip',\n    'Trouble', 'Trust', 'Try', 'Turn', 'Twist', 'Type', 'Undergo',\n    'Undermine', 'Understand', 'Undertake', 'Unfold', 'Unify', 'Unite',\n    'Unveil', 'Update', 'Upgrade', 'Uphold', 'Upset', 'Urge', 'Use',\n    'Utilize', 'Value', 'Vanish', 'Vary', 'Venture', 'Verify', 'View',\n    'Visit', 'Volunteer', 'Vote', 'Vow', 'Wait', 'Wake', 'Walk',\n    'Wander', 'Want', 'Warm', 'Warn', 'Warrant', 'Wash', 'Waste', 'Watch',\n    'Water', 'Wave', 'Weaken', 'Wear', 'Weave', 'Weigh', 'Welcome', 'Whip',\n    'Whisper', 'Widen', 'Win', 'Wind', 'Wipe', 'Wish', 'Withdraw',\n    'Witness', 'Wonder', 'Work', 'Worry', 'Worship', 'Wound', 'Wrap',\n    'Write', 'Yell', 'Yield'\n];\n\n/**\n * The list of adverbs.\n * @const\n */\nconst _ADVERB_ = [\n    'About', 'Above', 'Abroad', 'Absently', 'Absolutely', 'Accidentally',\n    'Accordingly', 'Accurately', 'Accusingly', 'Across', 'Actually',\n    'Additionally', 'Adequately', 'Adorably', 'After', 'Afterwards',\n    'Again', 'Ago', 'Ahead', 'Alike', 'All', 'Allegedly', 'AllTheTime',\n    'Almost', 'Alone', 'Along', 'Already', 'Also', 'Altogether', 'Always',\n    'Amazingly', 'Angrily', 'Annually', 'Anxiously', 'Any', 'Anyway',\n    'Anywhere', 'Apart', 'Appallingly', 'Apparently', 'Appropriately',\n    'Approximately', 'Arguably', 'Around', 'Articulately', 'As', 'Aside',\n    'Astonishingly', 'Automatically', 'Away', 'Back', 'Backwards', 'Badly',\n    'Barely', 'Basically', 'Beautifully', 'Before', 'Behind', 'Below',\n    'Besides', 'Best', 'Better', 'Between', 'Beyond', 'Blindly', 'Bravely',\n    'Briefly', 'Brightly', 'Briskly', 'Broadly', 'By', 'Calmly',\n    'Carefully', 'Casually', 'Cautiously', 'Certainly', 'Cheaply', 'Clearly',\n    'Cleverly', 'Close', 'Closely', 'Commonly', 'Completely',\n    'Consequently', 'Considerably', 'Consistently', 'Constantly',\n    'Continually', 'Correctly', 'Crazily', 'Critically', 'Curiously',\n    'Currently', 'Cynically', 'Daily', 'Dangerously', 'Deeply',\n    'Definitely', 'Deliberately', 'Delicately', 'Desperately',\n    'Differently', 'Directly', 'Discreetly', 'Double', 'Down',\n    'Downstairs', 'Downtown', 'Downwards', 'Dramatically', 'Each',\n    'Eagerly', 'Early', 'Easily', 'East', 'Effectively', 'Efficiently',\n    'Either', 'Else', 'Elsewhere', 'Emotionally', 'Enough', 'Entirely',\n    'Equally', 'Especially', 'Essentially', 'Euphoricly', 'Even', 'Evenly',\n    'Eventually', 'Ever', 'Everywhere', 'Exactly', 'Exclusively',\n    'Expectantly', 'Explicitly', 'Extensively', 'Extra', 'Extremely',\n    'Fairly', 'Far', 'Fast', 'Ferociously', 'Fiercely', 'Finally', 'Finely',\n    'Firmly', 'First', 'Firstly', 'Flatly', 'Forever', 'Formerly', 'Forth',\n    'Fortunately', 'Forward', 'Frankly', 'Free', 'Freely', 'Frequently',\n    'Frighteningly', 'FullTime', 'Fully', 'Fundamentally', 'Further',\n    'Furthermore', 'Generally', 'Gently', 'Genuinely', 'Gloriously',\n    'Gradually', 'Greatly', 'Grimly', 'Guiltily', 'Half', 'Halfway',\n    'Happily', 'Hard', 'Hardly', 'Hastily', 'Heavily', 'Hence', 'Here',\n    'Heroically', 'High', 'Highly', 'Home', 'Hopefully', 'Hourly', 'How',\n    'However', 'Humbly', 'Hysterically', 'Immediately', 'Immensely',\n    'Impartially', 'Impolitely', 'In', 'Increasingly', 'Incredibly',\n    'Indeed', 'Indifferently', 'Indoors', 'Inevitably', 'Initially',\n    'Inside', 'Instantly', 'Instead', 'Intensely', 'Ironically',\n    'Jealously', 'Jovially', 'Just', 'Kindly', 'Largely', 'Last', 'Late',\n    'Lately', 'Later', 'Lazily', 'Least', 'Left', 'Less', 'Lightly',\n    'Likewise', 'Literally', 'Little', 'Live', 'Long', 'LongTerm', 'Lot',\n    'Loud', 'Loudly', 'Lovingly', 'Low', 'Loyally', 'Magnificently',\n    'Mainly', 'Maybe', 'Meanwhile', 'Merely', 'Merrily',\n    'Mightily', 'Miserably', 'More', 'Moreover', 'Most', 'Mostly', 'Much',\n    'Mysteriously', 'Namely', 'Naturally', 'Near', 'Nearby', 'Nearly',\n    'Necessarily', 'Neither', 'Nervously', 'Never', 'Nevertheless', 'Newly',\n    'Next', 'Nicely', 'Nonetheless', 'Nor', 'Normally', 'North', 'Not',\n    'NOT', 'Notably', 'Now', 'Nowadays', 'Nowhere',\n    'Objectively', 'Obnoxiously', 'Obsessively', 'Obviously',\n    'Occasionally', 'Off', 'Often', 'Ok', 'On', 'Once', 'Online', 'Only',\n    'Openly', 'Opposite', 'Originally', 'Otherwise', 'Out', 'Outdoors',\n    'Outside', 'Over', 'Overall', 'Overly', 'Overnight', 'Overseas',\n    'Painfully', 'Partially', 'Particularly', 'Partly', 'Past', 'Patiently',\n    'Perfectly', 'Perhaps', 'Permanently', 'Personally', 'Playfully',\n    'Politely', 'Poorly', 'Possibly', 'Potentially', 'Precisely',\n    'Predominantly', 'Presently', 'Presumably', 'Pretty', 'Previously',\n    'Primarily', 'Probably', 'Promptly', 'Properly', 'Purely', 'Quickly',\n    'Quietly', 'Quite', 'Randomly', 'Rapidly', 'Rarely', 'Rather',\n    'Readily', 'Really', 'Reasonably', 'Recently', 'Recklessly',\n    'Regardless', 'Regularly', 'Relatively', 'Remarkably', 'Remorsefully',\n    'Reportedly', 'Respectively', 'Responsibly', 'Right', 'Roughly',\n    'Round', 'Rudely', 'Ruthlessly', 'Sadly', 'Same', 'Scornfully',\n    'Seamlessly', 'Second', 'Secondly', 'Seemingly', 'Seldom', 'Selfishly',\n    'Seriously', 'Severely', 'Shakily', 'Sharply', 'Shortly', 'Sideways',\n    'Significantly', 'Silently', 'Similarly', 'Simply', 'Simultaneously',\n    'Since', 'Sleepily', 'Slightly', 'Slowly', 'Slyly', 'Smoothly', 'So',\n    'Softly', 'Solely', 'Solemnly', 'Somehow', 'Sometime', 'Sometimes',\n    'Somewhat', 'Somewhere', 'Soon', 'South', 'Specifically', 'Steadily',\n    'Sternly', 'Still', 'Straight', 'Strangely', 'Strictly', 'Strongly',\n    'Stunningly', 'Subsequently', 'Substantially', 'Successfully',\n    'Suddenly', 'Sufficiently', 'Supposedly', 'Sure', 'Surely',\n    'Temporarily', 'Tenderly', 'Terribly', 'Thankfully', 'That', 'Then',\n    'There', 'Thereafter', 'Thereby', 'Therefore', 'This', 'Thoroughly',\n    'Though', 'Thoughtfully', 'Through', 'Throughout', 'Thus', 'Tightly',\n    'Today', 'Together', 'Tomorrow', 'Tonight', 'Too', 'Totally', 'Truly',\n    'Twice', 'Typically', 'Ultimately', 'Under', 'Underground',\n    'Undoubtedly', 'Uneasily', 'Unfortunately', 'Up', 'Upstairs', 'Upwards',\n    'Usually', 'Utterly', 'Vanishingly', 'Very', 'Warmly',\n    'Way', 'Weakly', 'Wearily', 'Weekly', 'Weirdly', 'Well', 'West',\n    'Whatever', 'Whatsoever', 'When', 'Where', 'Whereby', 'Wholly', 'Why',\n    'Wickedly', 'Widely', 'Wildly', 'Wisely', 'Wonderfully', 'Worldwide',\n    'Worse', 'Worst', 'Wrong', 'Yearly', 'Yesterday', 'Yet'\n];\n\n/**\n * The list of adjectives.\n * @const\n */\nconst _ADJECTIVE_ = [\n    'Able', 'Absent', 'Absolute', 'Abstract', 'Absurd', 'Academic',\n    'Acceptable', 'Accessible', 'Accountable', 'Accurate', 'Acid', 'Active',\n    'Actual', 'Acute', 'Additional', 'Adequate', 'Adjacent',\n    'Administrative', 'Adult', 'Advance', 'Advanced', 'Adverse',\n    'Aesthetic', 'Affordable', 'Afraid', 'Aged',\n    'Agricultural', 'Alert', 'Alien', 'Alike', 'Alive',\n    'Alone', 'Alternative', 'Amateur', 'Amazed', 'Amazing', 'Ambitious',\n    'Amusing', 'Ancient', 'Angry', 'Annoyed', 'Annoying', 'Annual',\n    'Anonymous', 'Anxious', 'Apparent', 'Appealing', 'Applicable',\n    'Appropriate', 'Arbitrary', 'Architectural', 'Artificial',\n    'Artistic', 'Ashamed', 'Asleep', 'Assistant', 'Associated',\n    'Astonishing', 'Attractive', 'Audio', 'Authentic', 'Automatic',\n    'Available', 'Average', 'Aware', 'Awful', 'Awkward', 'Back', 'Bad',\n    'Balanced', 'Bare', 'Based', 'Basic', 'Beautiful', 'Beloved',\n    'Beneficial', 'Bent', 'Best', 'Better', 'Big', 'Biological', 'Bitter',\n    'Bizarre', 'Blank', 'Blind', 'Blonde', 'Blue', 'Bold', 'Bored',\n    'Boring', 'Bottom', 'Bound', 'Brave', 'Brief', 'Bright', 'Brilliant',\n    'Broad', 'Broken', 'Brown', 'Busy', 'Calm', 'Capable',\n    'Capital', 'Capitalist', 'Careful', 'Careless', 'Casual', 'Cautious',\n    'Central', 'Certain', 'Challenging', 'Characteristic', 'Charming',\n    'Cheap', 'Cheerful', 'Chemical', 'Chief', 'Chronic', 'Civic', 'Civil',\n    'Civilian', 'Classic', 'Classical', 'Clean', 'Clear', 'Clever',\n    'Clinical', 'Close', 'Closed', 'Coastal', 'Cognitive', 'Cold',\n    'Collective', 'Colonial', 'Coloured', 'Colourful', 'Comfortable',\n    'Comic', 'Commercial', 'Common', 'Communist', 'Comparable',\n    'Comparative', 'Compelling', 'Competent', 'Competitive', 'Complete',\n    'Complex', 'Complicated', 'Comprehensive', 'Compulsory', 'Concerned',\n    'Concrete', 'Confident', 'Confused', 'Confusing', 'Congressional',\n    'Connected', 'Conscious', 'Consecutive', 'Conservative', 'Considerable',\n    'Consistent', 'Constant', 'Constitutional', 'Contemporary', 'Content',\n    'Continuous', 'Contrary', 'Controversial', 'Convenient', 'Conventional',\n    'Convinced', 'Convincing', 'Cool', 'Cooperative', 'Core', 'Corporate',\n    'Correct', 'Corresponding', 'Costly', 'Countless', 'Covered',\n    'Cream', 'Creative', 'Credible', 'Critical',\n    'Crowded', 'Crucial', 'Crude', 'Cruel', 'Cult', 'Cultural', 'Curious',\n    'Curly', 'Current', 'Curved', 'Cute', 'Cynical', 'Daily', 'Dairy',\n    'Damaging', 'Dangerous', 'Dark', 'Dead', 'Dear', 'Decent',\n    'Decisive', 'Dedicated', 'Deep', 'Defensive', 'Definite', 'Deliberate',\n    'Delicate', 'Delicious', 'Delighted', 'Democratic', 'Dense',\n    'Dependent', 'Depressed', 'Depressing', 'Desirable', 'Desperate',\n    'Destructive', 'Detailed', 'Determined', 'Different', 'Difficult',\n    'Digital', 'Diplomatic', 'Direct', 'Dirty', 'Disabled', 'Disappointed',\n    'Disappointing', 'Disastrous', 'Dishonest', 'Distant', 'Distinct',\n    'Distinctive', 'Disturbing', 'Diverse', 'Divine', 'Divorced',\n    'Domestic', 'Dominant', 'Double', 'Downstairs', 'Downtown', 'Dramatic',\n    'Dressed', 'Driving', 'Dry', 'Dual', 'Due', 'Dull', 'Dumb',\n    'Dynamic', 'Eager', 'Early', 'East', 'Eastern', 'Easy', 'Ecological',\n    'Economic', 'Editorial', 'Educated', 'Educational', 'Effective',\n    'Efficient', 'Elaborate', 'Elderly', 'Electoral', 'Electric',\n    'Electrical', 'Electronic', 'Elegant', 'Elementary', 'Eligible',\n    'Embarrassed', 'Embarrassing', 'Emotional', 'Empirical', 'Empty',\n    'Encouraging', 'Endless', 'Engaged', 'Engaging', 'Enjoyable',\n    'Enormous', 'Entertaining', 'Enthusiastic', 'Entire', 'Environmental',\n    'Equal', 'Equivalent', 'Essential', 'Eternal', 'Ethical', 'Ethnic',\n    'Even', 'Everyday', 'Evident', 'Evil', 'Evolutionary', 'Exact',\n    'Excellent', 'Exceptional', 'Excess', 'Excessive', 'Excited',\n    'Exciting', 'Exclusive', 'Executive', 'Exotic', 'Expected', 'Expensive',\n    'Experienced', 'Experimental', 'Expert', 'Explicit', 'Explosive',\n    'Extensive', 'External', 'Extra', 'Extraordinary', 'Extreme',\n    'Fabulous', 'Failed', 'Fair', 'Fake', 'False', 'Familiar', 'Family',\n    'Famous', 'Fancy', 'Fantastic', 'Far', 'Fascinating', 'Fashionable',\n    'Fast', 'Fat', 'Fatal', 'Favourable', 'Favourite', 'Federal', 'Fellow',\n    'Feminist', 'Few', 'Fierce', 'Final', 'Financial', 'Fine',\n    'Firm', 'Fit', 'Fixed', 'Flat', 'Flawed', 'Flexible', 'Flying',\n    'Folding', 'Folk', 'Following', 'Fond', 'Foreign', 'Formal', 'Former',\n    'Forthcoming', 'Fortunate', 'Forward', 'Fragile', 'Free', 'Frequent',\n    'Fresh', 'Friendly', 'Frightened', 'Frightening', 'Front', 'Frozen',\n    'Frustrated', 'Frustrating', 'Full', 'FullTime', 'Fun', 'Functional',\n    'Fundamental', 'Funny', 'Furious', 'Further', 'Future',\n    'General', 'Generic', 'Generous', 'Genetic', 'Gentle', 'Genuine',\n    'Giant', 'Glad', 'Global', 'Glorious', 'Gold', 'Golden', 'Good',\n    'Gorgeous', 'Grand', 'Graphic', 'Grateful', 'Grave', 'Great', 'Green',\n    'Grey', 'Gross', 'Guilty', 'Handy', 'Happy', 'Hard', 'Harmful', 'Harsh',\n    'Healthy', 'Heavy', 'Helpful', 'Hidden', 'High', 'HighProfile',\n    'Hilarious', 'Historic', 'Historical', 'Hollow', 'Holy', 'Home',\n    'Homeless', 'Honest', 'Hopeful', 'Horrible', 'Hot', 'Huge',\n    'Human', 'Humanitarian', 'Humble', 'Humorous', 'Hungry', 'Hurt',\n    'Ideal', 'Identical', 'Ideological', 'Ill', 'Illegal', 'Imaginary',\n    'Immediate', 'Immense', 'Imminent', 'Immune', 'Impatient', 'Important',\n    'Impossible', 'Impressed', 'Impressive', 'Inadequate', 'Inappropriate',\n    'Inclined', 'Included', 'Incorrect', 'Incredible', 'Independent',\n    'Indigenous', 'Indirect', 'Individual', 'Indoor', 'Industrial',\n    'Inevitable', 'Infamous', 'Influential', 'Informal', 'Inherent',\n    'Initial', 'Injured', 'Inner', 'Innocent', 'Innovative', 'Inside',\n    'Instant', 'Institutional', 'Instrumental', 'Insufficient', 'Intact',\n    'Integral', 'Integrated', 'Intellectual', 'Intelligent', 'Intended',\n    'Intense', 'Intensive', 'Interactive', 'Interested', 'Interesting',\n    'Interim', 'Interior', 'Intermediate', 'Internal', 'International',\n    'Intimate', 'Intriguing', 'Invisible', 'Involved', 'Ironic',\n    'Irrelevant', 'Isolated', 'Joint', 'Judicial', 'Junior', 'Just', 'Keen',\n    'Key', 'Kind', 'Large', 'LargeScale', 'Late', 'Later', 'Latest',\n    'Latter', 'Lazy', 'Leading', 'Left', 'Legal', 'Legendary',\n    'Legislative', 'Legitimate', 'Lengthy', 'Lesser',\n    'Level', 'Liable', 'Liberal', 'Lifelong', 'Light', 'Likely', 'Limited',\n    'Linear', 'Liquid', 'Literary', 'Little', 'Live', 'Lively', 'Living',\n    'Local', 'Located', 'Logical', 'Lonely', 'Long', 'LongStanding',\n    'LongTerm', 'LongTime', 'Loose', 'Lost', 'Loud', 'Lovely', 'Low',\n    'Loyal', 'Lucky', 'Luxury', 'Mad', 'Magic', 'Magical', 'Magnetic',\n    'Magnificent', 'Main', 'Mainstream', 'Major', 'Mandatory',\n    'Marginal', 'Marine', 'Married', 'Martial', 'Mass', 'Massive',\n    'Matching', 'Material', 'Mathematical', 'Mature', 'Maximum',\n    'Meaningful', 'Mechanical', 'Medical', 'Medieval', 'Medium',\n    'Memorable', 'Mental', 'Mere', 'Middle', 'Mild',\n    'Minimal', 'Minimum', 'Minute', 'Miserable', 'Misleading',\n    'Missing', 'Mixed', 'Mobile', 'Moderate', 'Modern', 'Modest', 'Monthly',\n    'Moral', 'Motor', 'Moving', 'Multiple', 'Municipal', 'Musical',\n    'Mutual', 'Mysterious', 'Narrative', 'Narrow',\n    'National', 'Nationwide', 'Native', 'Natural', 'Naval', 'Near',\n    'Nearby', 'Neat', 'Necessary', 'Negative', 'Neighbouring', 'Nervous',\n    'Net', 'Neutral', 'New', 'Next', 'Nice', 'Noble', 'Noisy', 'NonProfit',\n    'Normal', 'North', 'Northern', 'Notable', 'Notorious', 'Novel',\n    'Nuclear', 'Numerous', 'Objective', 'Obvious', 'Occasional', 'Odd',\n    'Offensive', 'Official', 'Ok', 'Old', 'OldFashioned', 'Ongoing',\n    'Online', 'Only', 'Open', 'Operational', 'Opposed', 'Opposite',\n    'Optical', 'Optimistic', 'Orange', 'Ordinary', 'Organic',\n    'Organizational', 'Organized', 'Original', 'Other', 'Outdoor', 'Outer',\n    'Outside', 'Outstanding', 'Overall', 'Overseas', 'Overwhelming', 'Own',\n    'Painful', 'Pale', 'Parallel', 'Parental', 'Parliamentary', 'PartTime',\n    'Partial', 'Particular', 'Passionate', 'Passive', 'Past', 'Patient',\n    'Peaceful', 'Peculiar', 'Perfect', 'Permanent', 'Persistent',\n    'Personal', 'Philosophical', 'Physical', 'Pink', 'Plain', 'Plastic',\n    'Pleasant', 'Pleased', 'Plus', 'Pointed', 'Poisonous', 'Polite',\n    'Political', 'Poor', 'Pop', 'Popular', 'Positive', 'Possible',\n    'PostWar', 'Potential', 'Powerful', 'Practical', 'Precious', 'Precise',\n    'Predictable', 'Preliminary', 'Premier', 'Prepared',\n    'Present', 'Presidential', 'Prestigious', 'Pretty', 'Previous',\n    'Primary', 'Prime', 'Principal', 'Prior', 'Private', 'Probable',\n    'Problematic', 'Productive', 'Professional', 'Profitable', 'Profound',\n    'Progressive', 'Prominent', 'Promising', 'Pronounced', 'Proper',\n    'Prospective', 'Protective', 'Proud', 'Provincial', 'Psychiatric',\n    'Psychological', 'Public', 'Pure', 'Purple', 'Qualified', 'Quick',\n    'Quiet', 'Radical', 'Random', 'Rapid', 'Rare',\n    'Rational', 'Raw', 'Ready', 'Real', 'Realistic', 'Rear', 'Reasonable',\n    'Recent', 'Red', 'Regional', 'Regular', 'Regulatory', 'Related',\n    'Relative', 'Relaxed', 'Relaxing', 'Relevant', 'Reliable', 'Relieved',\n    'Religious', 'Reluctant', 'Remarkable', 'Remote', 'Renowned',\n    'Repeated', 'Representative', 'Resident', 'Residential', 'Respective',\n    'Responsible', 'Retired', 'Reverse', 'Revolutionary', 'Rich',\n    'Ridiculous', 'Right', 'Risky', 'Rival', 'Robust', 'Romantic', 'Rough',\n    'Round', 'Routine', 'Royal', 'Rubber', 'Rude', 'Rural', 'Sacred', 'Sad',\n    'Safe', 'Same', 'Satisfied', 'Scary', 'Scattered',\n    'Sceptical', 'Scientific', 'Secondary', 'Secret', 'Secular', 'Secure',\n    'Selective', 'Senior', 'Sensible', 'Sensitive', 'Separate', 'Serial',\n    'Serious', 'Severe', 'Shallow', 'Shaped', 'Sharp',\n    'Sheer', 'Shiny', 'Shocked', 'Shocking', 'Short', 'ShortTerm', 'Shut',\n    'Shy', 'Significant', 'Silent', 'Silly', 'Silver', 'Similar',\n    'Simple', 'Sincere', 'Single', 'Situated', 'Ski', 'Skilled', 'Slight',\n    'Slow', 'Small', 'Smart', 'Smooth', 'SoCalled', 'Social', 'Socialist',\n    'Soft', 'Solar', 'Sole', 'Solid', 'Solo', 'Sophisticated',\n    'Sound', 'South', 'Spare', 'Special', 'Specialist',\n    'Specialized', 'Specific', 'Spectacular', 'Spicy', 'Spiritual',\n    'Spoken', 'Sporting', 'Square', 'Stable', 'Standard', 'Standing',\n    'Stark', 'State', 'Statistical', 'Steady', 'Steep', 'Sticky', 'Stiff',\n    'Still', 'Straight', 'Straightforward', 'Strange', 'Strategic',\n    'Strict', 'Striking', 'Strong', 'Structural', 'Stunning',\n    'Subject', 'Subsequent', 'Substantial', 'Subtle', 'Suburban',\n    'Successful', 'Successive', 'Sudden', 'Sufficient', 'Suitable', 'Super',\n    'Superb', 'Superior', 'Supportive', 'Supreme', 'Sure', 'Surgical',\n    'Surprised', 'Surprising', 'Surrounding', 'Suspicious', 'Sustainable',\n    'Sweet', 'Symbolic', 'Sympathetic', 'Systematic', 'Tactical',\n    'Talented', 'Tall', 'Technical', 'Technological',\n    'Temporary', 'Tender', 'Terminal', 'Terrible', 'Terrific', 'Theatrical',\n    'Theoretical', 'Thick', 'Thin', 'Thirsty', 'Thorough',\n    'ThoughtProvoking', 'Thoughtful', 'Thrilled', 'Tidy', 'Tight',\n    'Timely', 'Tiny', 'Tired', 'Top', 'Total', 'Tough', 'Toxic', 'Toy',\n    'Traditional', 'Transparent', 'Tremendous', 'Tribal',\n    'Tropical', 'True', 'Twin', 'Typical', 'Ultimate',\n    'Unable', 'Unacceptable', 'Uncomfortable', 'Underground',\n    'Underlying', 'Unemployed', 'Unexpected', 'Unfair', 'Unfortunate',\n    'Unique', 'United', 'Universal', 'Unknown', 'Unlikely',\n    'Unnecessary', 'Unpleasant', 'Unprecedented', 'Unusual', 'Upcoming',\n    'Upper', 'Upset', 'Upstairs', 'Urban', 'Urgent', 'Used', 'Useful',\n    'Useless', 'Usual', 'Vague', 'Valid', 'Valuable', 'Variable', 'Varied',\n    'Various', 'Vast', 'Verbal', 'Vertical', 'Very', 'Viable', 'Vibrant',\n    'Virtual', 'Visible', 'Visual', 'Vital', 'Vocal',\n    'Voluntary', 'Vulnerable', 'Warm', 'Waste', 'Weak', 'Wealthy', 'Weekly',\n    'Weird', 'Welcome', 'Well', 'West', 'Western', 'Wet', 'White', 'Whole',\n    'Wide', 'Widespread', 'Wild', 'Willing', 'Wise', 'Wonderful', 'Wooden',\n    'Working', 'Worldwide', 'Worried', 'Worse', 'Worst', 'Worth',\n    'Worthwhile', 'Worthy', 'Written', 'Wrong', 'Yellow'\n];\n\n/*\nconst _PRONOUN_ = [\n];\n*/\n\n/*\nconst _CONJUNCTION_ = [\n    'And', 'Or', 'For', 'Above', 'Before', 'Against', 'Between'\n];\n*/\n\n/**\n * Maps a string (category name) to the array of words from that category.\n * @const\n */\nconst CATEGORIES = {\n    _ADJECTIVE_,\n    _ADVERB_,\n    _PLURALNOUN_,\n    _VERB_\n\n//    _CONJUNCTION_,\n//    _NOUN_,\n//    _PLACE_,\n//    _PRONOUN_,\n};\n\n/**\n * The list of room name patterns.\n * @const\n */\nconst PATTERNS = [\n    '_ADJECTIVE__PLURALNOUN__VERB__ADVERB_'\n\n    // BeautifulFungiOrSpaghetti\n    //    '_ADJECTIVE__PLURALNOUN__CONJUNCTION__PLURALNOUN_',\n\n    // AmazinglyScaryToy\n    //    '_ADVERB__ADJECTIVE__NOUN_',\n\n    // NeitherTrashNorRifle\n    //    'Neither_NOUN_Nor_NOUN_',\n    //    'Either_NOUN_Or_NOUN_',\n\n    // EitherCopulateOrInvestigate\n    //    'Either_VERB_Or_VERB_',\n    //    'Neither_VERB_Nor_VERB_',\n\n    //    'The_ADJECTIVE__ADJECTIVE__NOUN_',\n    //    'The_ADVERB__ADJECTIVE__NOUN_',\n    //    'The_ADVERB__ADJECTIVE__NOUN_s',\n    //    'The_ADVERB__ADJECTIVE__PLURALNOUN__VERB_',\n\n    // WolvesComputeBadly\n    //    '_PLURALNOUN__VERB__ADVERB_',\n\n    // UniteFacilitateAndMerge\n    //    '_VERB__VERB_And_VERB_',\n\n    // NastyWitchesAtThePub\n    //    '_ADJECTIVE__PLURALNOUN_AtThe_PLACE_',\n];\n\n/**\n * Generates a new room name.\n *\n * @returns {string} A newly-generated room name.\n */\nexport function generateRoomWithoutSeparator() {\n    // XXX Note that if more than one pattern is available, the choice of 'name'\n    // won't have a uniform distribution amongst all patterns (names from\n    // patterns with fewer options will have higher probability of being chosen\n    // that names from patterns with more options).\n    let name = randomElement(PATTERNS);\n\n    while (_hasTemplate(name)) {\n        for (const template in CATEGORIES) { // eslint-disable-line guard-for-in\n            const word = randomElement(CATEGORIES[template]);\n\n            name = name.replace(template, word);\n        }\n    }\n\n    return name;\n}\n\n/**\n * Determines whether a specific string contains at least one of the\n * templates/categories.\n *\n * @param {string} s - String containing categories.\n * @private\n * @returns {boolean} True if the specified string contains at least one of the\n * templates/categories; otherwise, false.\n */\nfunction _hasTemplate(s) {\n    for (const template in CATEGORIES) {\n        if (s.indexOf(template) >= 0) {\n            return true;\n        }\n    }\n\n    return false;\n}\n\n/*\nfunction findDuplicates(array) {\n    var dups = array.reduce(function (acc, cur) {\n        if (!acc[cur]) {\n            acc[cur] = 1;\n        } else {\n            acc[cur] += 1;\n        }\n\n        return acc;\n    }, {});\n    for (const word in dups) {\n        if (dups[word] > 1) {\n            console.log(`Duplicate: ${word} ${dups[word]}`);\n        }\n    }\n}\nfindDuplicates(_ADJECTIVE_);\nfindDuplicates(_PLURALNOUN_);\nfindDuplicates(_VERB_);\nfindDuplicates(_ADVERB_);\nvar combinations = _ADJECTIVE_.length * _PLURALNOUN_.length * _VERB_.length * _ADVERB_.length;\nconsole.log(`${combinations} combinations (${Math.log2(combinations)} bits of entropy)`)\n*/\n","export * from './randomUtil';\nexport * from './roomNameGenerator';\n","// @flow\n\nimport { toState } from '../redux';\nimport JitsiMeetJS from './_';\n\nconst JitsiConferenceErrors = JitsiMeetJS.errors.conference;\nconst JitsiConnectionErrors = JitsiMeetJS.errors.connection;\n\n/**\n * Creates a {@link JitsiLocalTrack} model from the given device id.\n *\n * @param {string} type - The media type of track being created. Expected values\n * are \"video\" or \"audio\".\n * @param {string} deviceId - The id of the target media source.\n * @returns {Promise<JitsiLocalTrack>}\n */\nexport function createLocalTrack(type: string, deviceId: string) {\n    return (\n        JitsiMeetJS.createLocalTracks({\n            cameraDeviceId: deviceId,\n            devices: [ type ],\n\n            // eslint-disable-next-line camelcase\n            firefox_fake_device:\n                window.config && window.config.firefox_fake_device,\n            micDeviceId: deviceId\n        })\n            .then(([ jitsiLocalTrack ]) => jitsiLocalTrack));\n}\n\n/**\n * Determines whether analytics is enabled in a specific redux {@code store}.\n *\n * @param {Function|Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @returns {boolean} If analytics is enabled, {@code true}; {@code false},\n * otherwise.\n */\nexport function isAnalyticsEnabled(stateful: Function | Object) {\n    const { disableThirdPartyRequests, analytics = {} } = toState(stateful)['features/base/config'];\n\n    return !(disableThirdPartyRequests || analytics.disabled);\n}\n\n/**\n * Determines whether a specific {@link JitsiConferenceErrors} instance\n * indicates a fatal {@link JitsiConference} error.\n *\n * FIXME Figure out the category of errors defined by the function and describe\n * that category. I've currently named the category fatal because it appears to\n * be used in the cases of unrecoverable errors that necessitate a reload.\n *\n * @param {Object|string} error - The {@code JitsiConferenceErrors} instance to\n * categorize/classify or an {@link Error}-like object.\n * @returns {boolean} If the specified {@code JitsiConferenceErrors} instance\n * indicates a fatal {@code JitsiConference} error, {@code true}; otherwise,\n * {@code false}.\n */\nexport function isFatalJitsiConferenceError(error: Object | string) {\n    if (typeof error !== 'string') {\n        error = error.name; // eslint-disable-line no-param-reassign\n    }\n\n    return (\n        error === JitsiConferenceErrors.FOCUS_DISCONNECTED\n            || error === JitsiConferenceErrors.FOCUS_LEFT\n            || error === JitsiConferenceErrors.ICE_FAILED\n            || error === JitsiConferenceErrors.OFFER_ANSWER_FAILED\n            || error === JitsiConferenceErrors.VIDEOBRIDGE_NOT_AVAILABLE);\n}\n\n/**\n * Determines whether a specific {@link JitsiConnectionErrors} instance\n * indicates a fatal {@link JitsiConnection} error.\n *\n * FIXME Figure out the category of errors defined by the function and describe\n * that category. I've currently named the category fatal because it appears to\n * be used in the cases of unrecoverable errors that necessitate a reload.\n *\n * @param {Object|string} error - The {@code JitsiConnectionErrors} instance to\n * categorize/classify or an {@link Error}-like object.\n * @returns {boolean} If the specified {@code JitsiConnectionErrors} instance\n * indicates a fatal {@code JitsiConnection} error, {@code true}; otherwise,\n * {@code false}.\n */\nexport function isFatalJitsiConnectionError(error: Object | string) {\n    if (typeof error !== 'string') {\n        error = error.name; // eslint-disable-line no-param-reassign\n    }\n\n    return (\n        error === JitsiConnectionErrors.CONNECTION_DROPPED_ERROR\n            || error === JitsiConnectionErrors.OTHER_ERROR\n            || error === JitsiConnectionErrors.SERVER_ERROR);\n}\n","// @flow\n\nexport * from './functions.any';\n\n/**\n * Loads config.js from a specific remote server.\n *\n * @param {string} url - The URL to load.\n * @returns {Promise<Object>}\n */\nexport async function loadConfig(url: string): Promise<Object> { // eslint-disable-line no-unused-vars\n    // Return \"the config.js file\" from the global scope - that is how the\n    // Web app on both the client and the server was implemented before the\n    // React Native app was even conceived.\n    return window.config;\n}\n","// @flow\n\nimport throttle from 'lodash/throttle';\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    CLEAR_NOTIFICATIONS,\n    HIDE_NOTIFICATION,\n    SET_NOTIFICATIONS_ENABLED,\n    SHOW_NOTIFICATION\n} from './actionTypes';\n\nimport { NOTIFICATION_TIMEOUT, NOTIFICATION_TYPE } from './constants';\n\n/**\n * Clears (removes) all the notifications.\n *\n * @returns {{\n *     type: CLEAR_NOTIFICATIONS\n * }}\n */\nexport function clearNotifications() {\n    return {\n        type: CLEAR_NOTIFICATIONS\n    };\n}\n\n/**\n * Removes the notification with the passed in id.\n *\n * @param {string} uid - The unique identifier for the notification to be\n * removed.\n * @returns {{\n *     type: HIDE_NOTIFICATION,\n *     uid: number\n * }}\n */\nexport function hideNotification(uid: number) {\n    return {\n        type: HIDE_NOTIFICATION,\n        uid\n    };\n}\n\n/**\n * Stops notifications from being displayed.\n *\n * @param {boolean} enabled - Whether or not notifications should display.\n * @returns {{\n *     type: SET_NOTIFICATIONS_ENABLED,\n *     enabled: boolean\n * }}\n */\nexport function setNotificationsEnabled(enabled: boolean) {\n    return {\n        type: SET_NOTIFICATIONS_ENABLED,\n        enabled\n    };\n}\n\n/**\n * Queues an error notification for display.\n *\n * @param {Object} props - The props needed to show the notification component.\n * @returns {Object}\n */\nexport function showErrorNotification(props: Object) {\n    return showNotification({\n        ...props,\n        appearance: NOTIFICATION_TYPE.ERROR\n    });\n}\n\n/**\n * Queues a notification for display.\n *\n * @param {Object} props - The props needed to show the notification component.\n * @param {number} timeout - How long the notification should display before\n * automatically being hidden.\n * @returns {{\n *     type: SHOW_NOTIFICATION,\n *     props: Object,\n *     timeout: number,\n *     uid: number\n * }}\n */\nexport function showNotification(props: Object = {}, timeout: ?number) {\n    return {\n        type: SHOW_NOTIFICATION,\n        props,\n        timeout,\n        uid: window.Date.now()\n    };\n}\n\n/**\n * Queues a warning notification for display.\n *\n * @param {Object} props - The props needed to show the notification component.\n * @returns {Object}\n */\nexport function showWarningNotification(props: Object) {\n    return showNotification({\n        ...props,\n        appearance: NOTIFICATION_TYPE.WARNING\n    });\n}\n\n/**\n * An array of names of participants that have joined the conference. The array\n * is replaced with an empty array as notifications are displayed.\n *\n * @private\n * @type {string[]}\n */\nlet joinedParticipantsNames = [];\n\n/**\n * A throttled internal function that takes the internal list of participant\n * names, {@code joinedParticipantsNames}, and triggers the display of a\n * notification informing of their joining.\n *\n * @private\n * @type {Function}\n */\nconst _throttledNotifyParticipantConnected = throttle((dispatch: Dispatch<any>) => {\n    const joinedParticipantsCount = joinedParticipantsNames.length;\n\n    let notificationProps;\n\n    if (joinedParticipantsCount >= 3) {\n        notificationProps = {\n            titleArguments: {\n                name: joinedParticipantsNames[0],\n                count: joinedParticipantsCount - 1\n            },\n            titleKey: 'notify.connectedThreePlusMembers'\n        };\n    } else if (joinedParticipantsCount === 2) {\n        notificationProps = {\n            titleArguments: {\n                first: joinedParticipantsNames[0],\n                second: joinedParticipantsNames[1]\n            },\n            titleKey: 'notify.connectedTwoMembers'\n        };\n    } else if (joinedParticipantsCount) {\n        notificationProps = {\n            titleArguments: {\n                name: joinedParticipantsNames[0]\n            },\n            titleKey: 'notify.connectedOneMember'\n        };\n    }\n\n    if (notificationProps) {\n        dispatch(\n            showNotification(notificationProps, NOTIFICATION_TIMEOUT));\n    }\n\n    joinedParticipantsNames = [];\n\n}, 500, { leading: false });\n\n/**\n * Queues the display of a notification of a participant having connected to\n * the meeting. The notifications are batched so that quick consecutive\n * connection events are shown in one notification.\n *\n * @param {string} displayName - The name of the participant that connected.\n * @returns {Function}\n */\nexport function showParticipantJoinedNotification(displayName: string) {\n    joinedParticipantsNames.push(displayName);\n\n    return (dispatch: Dispatch<any>) => _throttledNotifyParticipantConnected(dispatch);\n}\n","\"use strict\";\n\nexports.__esModule = true;\n\nvar _assign = require(\"../core-js/object/assign\");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};","/* global $, APP, config, interfaceConfig */\n\n/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { I18nextProvider } from 'react-i18next';\nimport { AtlasKitThemeProvider } from '@atlaskit/theme';\nimport { Provider } from 'react-redux';\n\nimport { i18next } from '../../../react/features/base/i18n';\nimport { AudioLevelIndicator } from '../../../react/features/audio-level-indicator';\nimport { Avatar as AvatarDisplay } from '../../../react/features/base/avatar';\nimport {\n    getParticipantCount,\n    getPinnedParticipant,\n    pinParticipant\n} from '../../../react/features/base/participants';\nimport { ConnectionIndicator } from '../../../react/features/connection-indicator';\nimport { DisplayName } from '../../../react/features/display-name';\nimport {\n    DominantSpeakerIndicator,\n    RaisedHandIndicator,\n    StatusIndicators\n} from '../../../react/features/filmstrip';\nimport {\n    LAYOUTS,\n    getCurrentLayout,\n    setTileView,\n    shouldDisplayTileView\n} from '../../../react/features/video-layout';\nimport { Poker } from '../../../react/features/poker/components';\n/* eslint-enable no-unused-vars */\n\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\n/**\n * Display mode constant used when video is being displayed on the small video.\n * @type {number}\n * @constant\n */\nconst DISPLAY_VIDEO = 0;\n\n/**\n * Display mode constant used when the user's avatar is being displayed on\n * the small video.\n * @type {number}\n * @constant\n */\nconst DISPLAY_AVATAR = 1;\n\n/**\n * Display mode constant used when neither video nor avatar is being displayed\n * on the small video. And we just show the display name.\n * @type {number}\n * @constant\n */\nconst DISPLAY_BLACKNESS_WITH_NAME = 2;\n\n/**\n * Display mode constant used when video is displayed and display name\n * at the same time.\n * @type {number}\n * @constant\n */\nconst DISPLAY_VIDEO_WITH_NAME = 3;\n\n/**\n * Display mode constant used when neither video nor avatar is being displayed\n * on the small video. And we just show the display name.\n * @type {number}\n * @constant\n */\nconst DISPLAY_AVATAR_WITH_NAME = 4;\n\n\n/**\n *\n */\nexport default class SmallVideo {\n    /**\n     * Constructor.\n     */\n    constructor(VideoLayout) {\n        this.isAudioMuted = false;\n        this.isVideoMuted = false;\n        this.videoStream = null;\n        this.audioStream = null;\n        this.VideoLayout = VideoLayout;\n        this.videoIsHovered = false;\n\n        /**\n         * The current state of the user's bridge connection. The value should be\n         * a string as enumerated in the library's participantConnectionStatus\n         * constants.\n         *\n         * @private\n         * @type {string|null}\n         */\n        this._connectionStatus = null;\n\n        /**\n         * Whether or not the ConnectionIndicator's popover is hovered. Modifies\n         * how the video overlays display based on hover state.\n         *\n         * @private\n         * @type {boolean}\n         */\n        this._popoverIsHovered = false;\n\n        /**\n         * Whether or not the connection indicator should be displayed.\n         *\n         * @private\n         * @type {boolean}\n         */\n        this._showConnectionIndicator = !interfaceConfig.CONNECTION_INDICATOR_DISABLED;\n\n        /**\n         * Whether or not the dominant speaker indicator should be displayed.\n         *\n         * @private\n         * @type {boolean}\n         */\n        this._showDominantSpeaker = false;\n\n        /**\n         * Whether or not the raised hand indicator should be displayed.\n         *\n         * @private\n         * @type {boolean}\n         */\n        this._showRaisedHand = false;\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onPopoverHover = this._onPopoverHover.bind(this);\n        this.updateView = this.updateView.bind(this);\n\n        this._onContainerClick = this._onContainerClick.bind(this);\n    }\n\n    /**\n     * Returns the identifier of this small video.\n     *\n     * @returns the identifier of this small video\n     */\n    getId() {\n        return this.id;\n    }\n\n    /**\n     * Indicates if this small video is currently visible.\n     *\n     * @return <tt>true</tt> if this small video isn't currently visible and\n     * <tt>false</tt> - otherwise.\n     */\n    isVisible() {\n        return this.$container.is(':visible');\n    }\n\n    /**\n     * Creates an audio or video element for a particular MediaStream.\n     */\n    static createStreamElement(stream) {\n        const isVideo = stream.isVideoTrack();\n        const element = isVideo ? document.createElement('video') : document.createElement('audio');\n\n        if (isVideo) {\n            element.setAttribute('muted', 'true');\n            element.setAttribute('playsInline', 'true'); /* for Safari on iOS to work */\n        } else if (config.startSilent) {\n            element.muted = true;\n        }\n\n        element.autoplay = !config.testing?.noAutoPlayVideo;\n        element.id = SmallVideo.getStreamElementID(stream);\n\n        return element;\n    }\n\n    /**\n     * Returns the element id for a particular MediaStream.\n     */\n    static getStreamElementID(stream) {\n        return (stream.isVideoTrack() ? 'remoteVideo_' : 'remoteAudio_') + stream.getId();\n    }\n\n    /**\n     * Configures hoverIn/hoverOut handlers. Depends on connection indicator.\n     */\n    bindHoverHandler() {\n        // Add hover handler\n        this.$container.hover(\n            () => {\n                this.videoIsHovered = true;\n                this.updateView();\n                this.updateIndicators();\n            },\n            () => {\n                this.videoIsHovered = false;\n                this.updateView();\n                this.updateIndicators();\n            }\n        );\n    }\n\n    /**\n     * Unmounts the ConnectionIndicator component.\n\n    * @returns {void}\n    */\n    removeConnectionIndicator() {\n        this._showConnectionIndicator = false;\n        this.updateIndicators();\n    }\n\n    /**\n     * Updates the connectionStatus stat which displays in the ConnectionIndicator.\n\n    * @returns {void}\n    */\n    updateConnectionStatus(connectionStatus) {\n        this._connectionStatus = connectionStatus;\n        this.updateIndicators();\n    }\n\n    /**\n     * Shows / hides the audio muted indicator over small videos.\n     *\n     * @param {boolean} isMuted indicates if the muted element should be shown\n     * or hidden\n     */\n    showAudioIndicator(isMuted) {\n        this.isAudioMuted = isMuted;\n        this.updateStatusBar();\n    }\n\n    /**\n     * Shows video muted indicator over small videos and disables/enables avatar\n     * if video muted.\n     *\n     * @param {boolean} isMuted indicates if we should set the view to muted view\n     * or not\n     */\n    setVideoMutedView(isMuted) {\n        this.isVideoMuted = isMuted;\n        this.updateView();\n        this.updateStatusBar();\n    }\n\n    /**\n     * Create or updates the ReactElement for displaying status indicators about\n     * audio mute, video mute, and moderator status.\n     *\n     * @returns {void}\n     */\n    updateStatusBar() {\n        const statusBarContainer = this.container.querySelector('.videocontainer__toolbar');\n\n        if (!statusBarContainer) {\n            return;\n        }\n\n        ReactDOM.render(\n            <Provider store = { APP.store }>\n                <I18nextProvider i18n = { i18next }>\n                    <StatusIndicators\n                        showAudioMutedIndicator = { this.isAudioMuted }\n                        showVideoMutedIndicator = { this.isVideoMuted }\n                        participantID = { this.id } />\n                </I18nextProvider>\n            </Provider>,\n            statusBarContainer);\n    }\n\n    /**\n     * Adds the element indicating the audio level of the participant.\n     *\n     * @returns {void}\n     */\n    addAudioLevelIndicator() {\n        let audioLevelContainer = this._getAudioLevelContainer();\n\n        if (audioLevelContainer) {\n            return;\n        }\n\n        audioLevelContainer = document.createElement('span');\n        audioLevelContainer.className = 'audioindicator-container';\n        this.container.appendChild(audioLevelContainer);\n        this.updateAudioLevelIndicator();\n    }\n\n    /**\n     * Removes the element indicating the audio level of the participant.\n     *\n     * @returns {void}\n     */\n    removeAudioLevelIndicator() {\n        const audioLevelContainer = this._getAudioLevelContainer();\n\n        if (audioLevelContainer) {\n            ReactDOM.unmountComponentAtNode(audioLevelContainer);\n        }\n    }\n\n    /**\n     * Updates the audio level for this small video.\n     *\n     * @param lvl the new audio level to set\n     * @returns {void}\n     */\n    updateAudioLevelIndicator(lvl = 0) {\n        const audioLevelContainer = this._getAudioLevelContainer();\n\n        if (audioLevelContainer) {\n            ReactDOM.render(<AudioLevelIndicator audioLevel = { lvl }/>, audioLevelContainer);\n        }\n    }\n\n    /**\n     * Queries the component's DOM for the element that should be the parent to the\n     * AudioLevelIndicator.\n     *\n     * @returns {HTMLElement} The DOM element that holds the AudioLevelIndicator.\n     */\n    _getAudioLevelContainer() {\n        return this.container.querySelector('.audioindicator-container');\n    }\n\n    /**\n     * This is an especially interesting function. A naive reader might think that\n     * it returns this SmallVideo's \"video\" element. But it is much more exciting.\n     * It first finds this video's parent element using jquery, then uses a utility\n     * from lib-jitsi-meet to extract the video element from it (with two more\n     * jquery calls), and finally uses jquery again to encapsulate the video element\n     * in an array. This last step allows (some might prefer \"forces\") users of\n     * this function to access the video element via the 0th element of the returned\n     * array (after checking its length of course!).\n     */\n    selectVideoElement() {\n        return $($(this.container).find('video')[0]);\n    }\n\n    /**\n     * Selects the HTML image element which displays user's avatar.\n     *\n     * @return {jQuery|HTMLElement} a jQuery selector pointing to the HTML image\n     * element which displays the user's avatar.\n     */\n    $avatar() {\n        return this.$container.find('.avatar-container');\n    }\n\n    $poker() {\n        return this.$container.find('.poker-container');\n    }\n\n    /**\n     * Returns the display name element, which appears on the video thumbnail.\n     *\n     * @return {jQuery} a jQuery selector pointing to the display name element of\n     * the video thumbnail\n     */\n    $displayName() {\n        return this.$container.find('.displayNameContainer');\n    }\n\n    /**\n     * Creates or updates the participant's display name that is shown over the\n     * video preview.\n     *\n     * @param {Object} props - The React {@code Component} props to pass into the\n     * {@code DisplayName} component.\n     * @returns {void}\n     */\n    _renderDisplayName(props) {\n        const displayNameContainer = this.container.querySelector('.displayNameContainer');\n\n        if (displayNameContainer) {\n            ReactDOM.render(\n                <Provider store = { APP.store }>\n                    <I18nextProvider i18n = { i18next }>\n                        <DisplayName { ...props } />\n                    </I18nextProvider>\n                </Provider>,\n                displayNameContainer);\n        }\n    }\n\n    /**\n     * Removes the component responsible for showing the participant's display name,\n     * if its container is present.\n     *\n     * @returns {void}\n     */\n    removeDisplayName() {\n        const displayNameContainer = this.container.querySelector('.displayNameContainer');\n\n        if (displayNameContainer) {\n            ReactDOM.unmountComponentAtNode(displayNameContainer);\n        }\n    }\n\n    /**\n     * Enables / disables the css responsible for focusing/pinning a video\n     * thumbnail.\n     *\n     * @param isFocused indicates if the thumbnail should be focused/pinned or not\n     */\n    focus(isFocused) {\n        const focusedCssClass = 'videoContainerFocused';\n        const isFocusClassEnabled = this.$container.hasClass(focusedCssClass);\n\n        if (!isFocused && isFocusClassEnabled) {\n            this.$container.removeClass(focusedCssClass);\n        } else if (isFocused && !isFocusClassEnabled) {\n            this.$container.addClass(focusedCssClass);\n        }\n    }\n\n    /**\n     *\n     */\n    hasVideo() {\n        return this.selectVideoElement().length !== 0;\n    }\n\n    /**\n     * Checks whether the user associated with this <tt>SmallVideo</tt> is currently\n     * being displayed on the \"large video\".\n     *\n     * @return {boolean} <tt>true</tt> if the user is displayed on the large video\n     * or <tt>false</tt> otherwise.\n     */\n    isCurrentlyOnLargeVideo() {\n        return APP.store.getState()['features/large-video']?.participantId === this.id;\n    }\n\n    /**\n     * Checks whether there is a playable video stream available for the user\n     * associated with this <tt>SmallVideo</tt>.\n     *\n     * @return {boolean} <tt>true</tt> if there is a playable video stream available\n     * or <tt>false</tt> otherwise.\n     */\n    isVideoPlayable() {\n        return this.videoStream && !this.isVideoMuted && !APP.conference.isAudioOnly();\n    }\n\n    /**\n     * Determines what should be display on the thumbnail.\n     *\n     * @return {number} one of <tt>DISPLAY_VIDEO</tt>,<tt>DISPLAY_AVATAR</tt>\n     * or <tt>DISPLAY_BLACKNESS_WITH_NAME</tt>.\n     */\n    selectDisplayMode(input) {\n        // Display name is always and only displayed when user is on the stage\n        if (input.isCurrentlyOnLargeVideo && !input.tileViewEnabled) {\n            return input.isVideoPlayable && !input.isAudioOnly ? DISPLAY_BLACKNESS_WITH_NAME : DISPLAY_AVATAR_WITH_NAME;\n        } else if (input.isVideoPlayable && input.hasVideo && !input.isAudioOnly) {\n            // check hovering and change state to video with name\n            return input.isHovered ? DISPLAY_VIDEO_WITH_NAME : DISPLAY_VIDEO;\n        }\n\n        // check hovering and change state to avatar with name\n        return input.isHovered ? DISPLAY_AVATAR_WITH_NAME : DISPLAY_AVATAR;\n    }\n\n    /**\n     * Computes information that determine the display mode.\n     *\n     * @returns {Object}\n     */\n    computeDisplayModeInput() {\n        return {\n            isCurrentlyOnLargeVideo: this.isCurrentlyOnLargeVideo(),\n            isHovered: this._isHovered(),\n            isAudioOnly: APP.conference.isAudioOnly(),\n            tileViewEnabled: shouldDisplayTileView(APP.store.getState()),\n            isVideoPlayable: this.isVideoPlayable(),\n            hasVideo: Boolean(this.selectVideoElement().length),\n            connectionStatus: APP.conference.getParticipantConnectionStatus(this.id),\n            mutedWhileDisconnected: this.mutedWhileDisconnected,\n            canPlayEventReceived: this._canPlayEventReceived,\n            videoStream: Boolean(this.videoStream),\n            isVideoMuted: this.isVideoMuted,\n            videoStreamMuted: this.videoStream ? this.videoStream.isMuted() : 'no stream'\n        };\n    }\n\n    /**\n     * Checks whether current video is considered hovered. Currently it is hovered\n     * if the mouse is over the video, or if the connection\n     * indicator is shown(hovered).\n     * @private\n     */\n    _isHovered() {\n        return this.videoIsHovered || this._popoverIsHovered;\n    }\n\n    /**\n     * Updates the css classes of the thumbnail based on the current state.\n     */\n    updateView() {\n        this.$container.removeClass((index, classNames) =>\n            classNames.split(' ').filter(name => name.startsWith('display-')));\n\n        const oldDisplayMode = this.displayMode;\n        let displayModeString = '';\n\n        const displayModeInput = this.computeDisplayModeInput();\n\n        // Determine whether video, avatar or blackness should be displayed\n        this.displayMode = this.selectDisplayMode(displayModeInput);\n\n        switch (this.displayMode) {\n        case DISPLAY_AVATAR_WITH_NAME:\n            displayModeString = 'avatar-with-name';\n            this.$container.addClass('display-avatar-with-name');\n            break;\n        case DISPLAY_BLACKNESS_WITH_NAME:\n            displayModeString = 'blackness-with-name';\n            this.$container.addClass('display-name-on-black');\n            break;\n        case DISPLAY_VIDEO:\n            displayModeString = 'video';\n            this.$container.addClass('display-video');\n            break;\n        case DISPLAY_VIDEO_WITH_NAME:\n            displayModeString = 'video-with-name';\n            this.$container.addClass('display-name-on-video');\n            break;\n        case DISPLAY_AVATAR:\n        default:\n            displayModeString = 'avatar';\n            this.$container.addClass('display-avatar-only');\n            break;\n        }\n\n        if (this.displayMode !== oldDisplayMode) {\n            logger.debug(`Displaying ${displayModeString} for ${this.id}, data: [${JSON.stringify(displayModeInput)}]`);\n        }\n    }\n\n    /**\n     * Updates the react component displaying the avatar with the passed in avatar\n     * url.\n     *\n     * @returns {void}\n     */\n    initializeAvatar() {\n        const thumbnail = this.$avatar().get(0);\n\n        if (thumbnail) {\n            // Maybe add a special case for local participant, as on init of\n            // LocalVideo.js the id is set to \"local\" but will get updated later.\n            ReactDOM.render(\n                <Provider store = { APP.store }>\n                    <AvatarDisplay\n                        className = 'userAvatar'\n                        participantId = { this.id } />\n                </Provider>,\n                thumbnail\n            );\n        }\n    }\n\n    /**\n     * Unmounts any attached react components (particular the avatar image) from\n     * the avatar container.\n     *\n     * @returns {void}\n     */\n    removeAvatar() {\n        const thumbnail = this.$avatar().get(0);\n\n        if (thumbnail) {\n            ReactDOM.unmountComponentAtNode(thumbnail);\n        }\n    }\n\n    /**\n     * Shows or hides the dominant speaker indicator.\n     * @param show whether to show or hide.\n     */\n    showDominantSpeakerIndicator(show) {\n        // Don't create and show dominant speaker indicator if\n        // DISABLE_DOMINANT_SPEAKER_INDICATOR is true\n        if (interfaceConfig.DISABLE_DOMINANT_SPEAKER_INDICATOR) {\n            return;\n        }\n\n        if (!this.container) {\n            logger.warn(`Unable to set dominant speaker indicator - ${this.videoSpanId} does not exist`);\n\n            return;\n        }\n        if (this._showDominantSpeaker === show) {\n            return;\n        }\n\n        this._showDominantSpeaker = show;\n        this.$container.toggleClass('active-speaker', this._showDominantSpeaker);\n        this.updateIndicators();\n        this.updateView();\n    }\n\n    /**\n     * Shows or hides the raised hand indicator.\n     * @param show whether to show or hide.\n     */\n    showRaisedHandIndicator(show) {\n        if (!this.container) {\n            logger.warn(`Unable to raised hand indication - ${\n                this.videoSpanId} does not exist`);\n\n            return;\n        }\n\n        this._showRaisedHand = show;\n        this.updateIndicators();\n    }\n\n    /**\n     * Initalizes any browser specific properties. Currently sets the overflow\n     * property for Qt browsers on Windows to hidden, thus fixing the following\n     * problem:\n     * Some browsers don't have full support of the object-fit property for the\n     * video element and when we set video object-fit to \"cover\" the video\n     * actually overflows the boundaries of its container, so it's important\n     * to indicate that the \"overflow\" should be hidden.\n     *\n     * Setting this property for all browsers will result in broken audio levels,\n     * which makes this a temporary solution, before reworking audio levels.\n     */\n    initBrowserSpecificProperties() {\n        const userAgent = window.navigator.userAgent;\n\n        if (userAgent.indexOf('QtWebEngine') > -1\n                && (userAgent.indexOf('Windows') > -1 || userAgent.indexOf('Linux') > -1)) {\n            this.$container.css('overflow', 'hidden');\n        }\n    }\n\n    /**\n     * Cleans up components on {@code SmallVideo} and removes itself from the DOM.\n     *\n     * @returns {void}\n     */\n    remove() {\n        logger.log('Remove thumbnail', this.id);\n        this.removeAudioLevelIndicator();\n\n        const toolbarContainer\n            = this.container.querySelector('.videocontainer__toolbar');\n\n        if (toolbarContainer) {\n            ReactDOM.unmountComponentAtNode(toolbarContainer);\n        }\n\n        this.removeConnectionIndicator();\n        this.removeDisplayName();\n        this.removeAvatar();\n        this._unmountIndicators();\n\n        // Remove whole container\n        if (this.container.parentNode) {\n            this.container.parentNode.removeChild(this.container);\n        }\n    }\n\n    /**\n     * Helper function for re-rendering multiple react components of the small\n     * video.\n     *\n     * @returns {void}\n     */\n    rerender() {\n        this.updateIndicators();\n        this.updateStatusBar();\n        this.updateView();\n    }\n\n    /**\n     * Updates the React element responsible for showing connection status, dominant\n     * speaker, and raised hand icons. Uses instance variables to get the necessary\n     * state to display. Will create the React element if not already created.\n     *\n     * @private\n     * @returns {void}\n     */\n    updateIndicators() {\n        const indicatorToolbar = this.container.querySelector('.videocontainer__toptoolbar');\n\n        if (!indicatorToolbar) {\n            return;\n        }\n\n        const { NORMAL = 8 } = interfaceConfig.INDICATOR_FONT_SIZES || {};\n        const iconSize = NORMAL;\n        const showConnectionIndicator = this.videoIsHovered || !interfaceConfig.CONNECTION_INDICATOR_AUTO_HIDE_ENABLED;\n        const state = APP.store.getState();\n        const currentLayout = getCurrentLayout(state);\n        const participantCount = getParticipantCount(state);\n        let statsPopoverPosition, tooltipPosition;\n\n        if (currentLayout === LAYOUTS.TILE_VIEW) {\n            statsPopoverPosition = 'right top';\n            tooltipPosition = 'right';\n        } else if (currentLayout === LAYOUTS.VERTICAL_FILMSTRIP_VIEW) {\n            statsPopoverPosition = this.statsPopoverLocation;\n            tooltipPosition = 'left';\n        } else {\n            statsPopoverPosition = this.statsPopoverLocation;\n            tooltipPosition = 'top';\n        }\n\n        ReactDOM.render(\n            <Provider store = { APP.store }>\n                <I18nextProvider i18n = { i18next }>\n                    <div>\n                        <AtlasKitThemeProvider mode = 'dark'>\n                            { this._showConnectionIndicator\n                                ? <ConnectionIndicator\n                                    alwaysVisible = { showConnectionIndicator }\n                                    connectionStatus = { this._connectionStatus }\n                                    iconSize = { iconSize }\n                                    isLocalVideo = { this.isLocal }\n                                    enableStatsDisplay = { !interfaceConfig.filmStripOnly }\n                                    participantId = { this.id }\n                                    statsPopoverPosition = { statsPopoverPosition } />\n                                : null }\n                            <RaisedHandIndicator\n                                iconSize = { iconSize }\n                                participantId = { this.id }\n                                tooltipPosition = { tooltipPosition } />\n                            { this._showDominantSpeaker && participantCount > 2\n                                ? <DominantSpeakerIndicator\n                                    iconSize = { iconSize }\n                                    tooltipPosition = { tooltipPosition } />\n                                : null }\n                            {/* <Poker participantId = { this.id }></Poker>*/}\n                        </AtlasKitThemeProvider>\n                    </div>\n                </I18nextProvider>\n            </Provider>,\n            indicatorToolbar\n        );\n\n        const poker = this.$poker().get(0);\n\n        ReactDOM.render(\n            <Provider store = { APP.store }>\n                <I18nextProvider i18n = { i18next }>\n                    <Poker participantId={ this.id }/>\n                </I18nextProvider>\n            </Provider>,\n            poker\n        );\n    }\n\n    /**\n     * Callback invoked when the thumbnail is clicked and potentially trigger\n     * pinning of the participant.\n     *\n     * @param {MouseEvent} event - The click event to intercept.\n     * @private\n     * @returns {void}\n     */\n    _onContainerClick(event) {\n        const triggerPin = this._shouldTriggerPin(event);\n\n        if (event.stopPropagation && triggerPin) {\n            event.stopPropagation();\n            event.preventDefault();\n        }\n        if (triggerPin) {\n            this.togglePin();\n        }\n\n        return false;\n    }\n\n    /**\n     * Returns whether or not a click event is targeted at certain elements which\n     * should not trigger a pin.\n     *\n     * @param {MouseEvent} event - The click event to intercept.\n     * @private\n     * @returns {boolean}\n     */\n    _shouldTriggerPin(event) {\n        // TODO Checking the classes is a workround to allow events to bubble into\n        // the DisplayName component if it was clicked. React's synthetic events\n        // will fire after jQuery handlers execute, so stop propogation at this\n        // point will prevent DisplayName from getting click events. This workaround\n        // should be removeable once LocalVideo is a React Component because then\n        // the components share the same eventing system.\n        const $source = $(event.target || event.srcElement);\n\n        return $source.parents('.displayNameContainer').length === 0\n            && $source.parents('.popover').length === 0\n            && !event.target.classList.contains('popover');\n    }\n\n    /**\n     * Pins the participant displayed by this thumbnail or unpins if already pinned.\n     *\n     * @returns {void}\n     */\n    togglePin() {\n        const pinnedParticipant = getPinnedParticipant(APP.store.getState()) || {};\n        const participantIdToPin = pinnedParticipant && pinnedParticipant.id === this.id ? null : this.id;\n\n        APP.store.dispatch(pinParticipant(participantIdToPin));\n    }\n\n    /**\n     * Removes the React element responsible for showing connection status, dominant\n     * speaker, and raised hand icons.\n     *\n     * @private\n     * @returns {void}\n     */\n    _unmountIndicators() {\n        const indicatorToolbar = this.container.querySelector('.videocontainer__toptoolbar');\n\n        if (indicatorToolbar) {\n            ReactDOM.unmountComponentAtNode(indicatorToolbar);\n        }\n    }\n\n    /**\n     * Updates the current state of the connection indicator popover being hovered.\n     * If hovered, display the small video as if it is hovered.\n     *\n     * @param {boolean} popoverIsHovered - Whether or not the mouse cursor is\n     * currently over the connection indicator popover.\n     * @returns {void}\n     */\n    _onPopoverHover(popoverIsHovered) {\n        this._popoverIsHovered = popoverIsHovered;\n        this.updateView();\n    }\n\n    /**\n     * Sets the size of the thumbnail.\n     */\n    _setThumbnailSize() {\n        const layout = getCurrentLayout(APP.store.getState());\n        const heightToWidthPercent = 100\n                / (this.isLocal ? interfaceConfig.LOCAL_THUMBNAIL_RATIO : interfaceConfig.REMOTE_THUMBNAIL_RATIO);\n\n        switch (layout) {\n        case LAYOUTS.VERTICAL_FILMSTRIP_VIEW: {\n            this.$container.css('padding-top', `${heightToWidthPercent}%`);\n            this.$avatar().css({\n                height: '50%',\n                width: `${heightToWidthPercent / 2}%`\n            });\n            break;\n        }\n        case LAYOUTS.HORIZONTAL_FILMSTRIP_VIEW: {\n            const state = APP.store.getState();\n            const { local, remote } = state['features/filmstrip'].horizontalViewDimensions;\n            const size = this.isLocal ? local : remote;\n\n            if (typeof size !== 'undefined') {\n                const { height, width } = size;\n                const avatarSize = height / 2;\n\n                this.$container.css({\n                    height: `${height}px`,\n                    'min-height': `${height}px`,\n                    'min-width': `${width}px`,\n                    width: `${width}px`\n                });\n                this.$avatar().css({\n                    height: `${avatarSize}px`,\n                    width: `${avatarSize}px`\n                });\n            }\n            break;\n        }\n        case LAYOUTS.TILE_VIEW: {\n            const state = APP.store.getState();\n            const { thumbnailSize } = state['features/filmstrip'].tileViewDimensions;\n\n            if (typeof thumbnailSize !== 'undefined') {\n                const { height, width } = thumbnailSize;\n                const avatarSize = height / 2;\n\n                this.$container.css({\n                    height: `${height}px`,\n                    'min-height': `${height}px`,\n                    'min-width': `${width}px`,\n                    width: `${width}px`\n                });\n                this.$avatar().css({\n                    height: `${avatarSize}px`,\n                    width: `${avatarSize}px`\n                });\n            }\n            break;\n        }\n        }\n    }\n}\n","/**\n * A list of all UI errors.\n */\n\n/**\n * Indicates that a Feedback request is currently in progress.\n *\n * @type {{FEEDBACK_REQUEST_IN_PROGRESS: string}}\n */\nexport const FEEDBACK_REQUEST_IN_PROGRESS = 'FeedbackRequestInProgress';\n","/**\n * The type of the action which signals feedback was closed without submitting.\n *\n * {\n *     type: CANCEL_FEEDBACK,\n *     message: string,\n *     score: number\n * }\n */\nexport const CANCEL_FEEDBACK = 'CANCEL_FEEDBACK';\n\n/**\n * The type of the action which signals feedback failed to be recorded.\n *\n * {\n *     type: SUBMIT_FEEDBACK_ERROR\n *     error: string\n * }\n */\nexport const SUBMIT_FEEDBACK_ERROR = 'SUBMIT_FEEDBACK_ERROR';\n\n/**\n * The type of the action which signals feedback has been recorded.\n *\n * {\n *     type: SUBMIT_FEEDBACK_SUCCESS,\n * }\n */\nexport const SUBMIT_FEEDBACK_SUCCESS = 'SUBMIT_FEEDBACK_SUCCESS';\n","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return _toConsumableArray(ancestorData).concat([data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_assertThisInitialized(_this)), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}","import styled, { css } from 'styled-components';\nimport { colors, themed, gridSize } from '@atlaskit/theme';\nvar spacing = gridSize();\nvar fontSize = 12;\nvar innerHeight = spacing * 2; // 16px\n\nvar lineHeight = innerHeight / fontSize;\n\nvar getPadding = function getPadding(_ref) {\n  var firstChild = _ref.firstChild,\n      inlineEdit = _ref.inlineEdit;\n  var right = 0;\n  var bottom = spacing / 2;\n  var left = 0;\n  var top = spacing * 2.5;\n\n  if (inlineEdit) {\n    bottom = 0;\n    left = spacing;\n    top = spacing;\n  }\n\n  if (firstChild) {\n    top = spacing / 2;\n  }\n\n  return css([\"\\n    padding: \", \"px \", \"px \", \"px \", \"px;\\n  \"], top, right, bottom, left);\n};\n\nexport var LabelWrapper = styled.label.withConfig({\n  displayName: \"Label__LabelWrapper\",\n  componentId: \"sc-17towfw-0\"\n})([\"\\n  display: block;\\n\"]);\nvar getColor = themed({\n  light: colors.N200,\n  dark: colors.DN90\n});\nvar getDisabledColor = themed({\n  light: colors.N60,\n  dark: colors.DN300\n});\nexport var LabelInner = styled.div.withConfig({\n  displayName: \"Label__LabelInner\",\n  componentId: \"sc-17towfw-1\"\n})([\"\\n  color: \", \";\\n  font-size: \", \"px;\\n  font-weight: 600;\\n  line-height: \", \";\\n  \", \";\\n\\n  \", \";\\n\"], function (props) {\n  return props.isDisabled ? getDisabledColor(props) : getColor(props);\n}, fontSize, lineHeight, getPadding, function (p) {\n  return p.isHidden && 'display: none;';\n});\nexport var RequiredIndicator = styled.span.withConfig({\n  displayName: \"Label__RequiredIndicator\",\n  componentId: \"sc-17towfw-2\"\n})([\"\\n  color: \", \";\\n  padding-left: 2px;\\n\"], colors.red);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { LabelWrapper, RequiredIndicator, LabelInner } from '../styled/Label';\n\nvar Label =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Label, _Component);\n\n  function Label() {\n    _classCallCheck(this, Label);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(Label).apply(this, arguments));\n  }\n\n  _createClass(Label, [{\n    key: \"render\",\n\n    /* eslint-disable jsx-a11y/no-static-element-interactions */\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          children = _this$props.children,\n          htmlFor = _this$props.htmlFor,\n          isFirstChild = _this$props.isFirstChild,\n          isLabelHidden = _this$props.isLabelHidden,\n          isDisabled = _this$props.isDisabled,\n          isRequired = _this$props.isRequired,\n          label = _this$props.label,\n          onClick = _this$props.onClick;\n      return React.createElement(LabelWrapper, {\n        htmlFor: htmlFor\n      }, React.createElement(LabelInner, {\n        isHidden: isLabelHidden,\n        inlineEdit: appearance === 'inline-edit',\n        firstChild: isFirstChild,\n        isDisabled: isDisabled\n      }, React.createElement(\"span\", {\n        onClick: onClick\n      }, label), isRequired ? React.createElement(RequiredIndicator, {\n        role: \"presentation\"\n      }, \"*\") : null), children);\n    }\n  }]);\n\n  return Label;\n}(Component);\n\n_defineProperty(Label, \"defaultProps\", {\n  appearance: 'default'\n});\n\nexport { Label as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport memoizeOne from 'memoize-one';\nimport { Popper as ReactPopper } from 'react-popper';\nexport { Manager, Reference } from 'react-popper';\n\nvar getFlipBehavior = function getFlipBehavior(side) {\n  return {\n    auto: [],\n    top: ['top', 'bottom', 'top'],\n    right: ['right', 'left', 'right'],\n    bottom: ['bottom', 'top', 'bottom'],\n    left: ['left', 'right', 'left']\n  }[side];\n};\n\nexport var Popper =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Popper, _Component);\n\n  function Popper() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Popper);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Popper)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getModifiers\", memoizeOne(function (placement) {\n      var flipBehavior = getFlipBehavior(placement.split('-')[0]);\n      var modifiers = {\n        flip: {\n          enabled: true,\n          behavior: flipBehavior,\n          boundariesElement: 'viewport'\n        },\n        hide: {\n          enabled: true,\n          boundariesElement: 'scrollParent'\n        },\n        offset: {\n          enabled: true,\n          offset: _this.props.offset\n        },\n        preventOverflow: {\n          enabled: true,\n          escapeWithReference: false,\n          boundariesElement: 'window'\n        }\n      };\n      return modifiers;\n    }));\n\n    return _this;\n  }\n\n  _createClass(Popper, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          placement = _this$props.placement,\n          children = _this$props.children,\n          referenceElement = _this$props.referenceElement;\n      var modifiers = this.getModifiers(this.props.placement);\n      return React.createElement(ReactPopper, _extends({\n        positionFixed: true,\n        modifiers: modifiers,\n        placement: placement\n      }, referenceElement ? {\n        referenceElement: referenceElement\n      } : {}), children);\n    }\n  }]);\n\n  return Popper;\n}(Component);\n\n_defineProperty(Popper, \"defaultProps\", {\n  children: function children() {},\n  offset: '0, 8px',\n  placement: 'bottom-start'\n});","import styled from 'styled-components';\nimport { borderRadius, colors, gridSize, math, themed, elevation, layers } from '@atlaskit/theme';\nvar backgroundColor = themed({\n  light: colors.N0,\n  dark: colors.DN50\n});\nvar textColor = themed({\n  light: colors.N900,\n  dark: colors.DN600\n}); // eslint-disable-next-line import/prefer-default-export\n\nexport var Container = styled.div.withConfig({\n  displayName: \"styled__Container\",\n  componentId: \"sc-1v7azd6-0\"\n})([\"\\n  background: \", \";\\n  border-radius: \", \"px;\\n  box-sizing: content-box; /* do not set this to border-box or it will break the overflow handling */\\n  color: \", \";\\n  max-height: \", \"px;\\n  max-width: \", \"px;\\n  padding: \", \"px \", \"px;\\n  z-index: \", \";\\n\\n  \", \";\\n\\n  &:focus {\\n    outline: none;\\n  }\\n\"], backgroundColor, borderRadius, textColor, math.multiply(gridSize, 56), math.multiply(gridSize, 56), math.multiply(gridSize, 2), math.multiply(gridSize, 3), layers.dialog, elevation.e200);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport NodeResolver from 'react-node-resolver';\nimport { Manager, Reference, Popper } from '@atlaskit/popper';\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport { Container } from './styled';\n\nvar InlineDialog =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(InlineDialog, _Component);\n\n  function InlineDialog() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, InlineDialog);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(InlineDialog)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"containerRef\", null);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"triggerRef\", null);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleClickOutside\", function (event) {\n      var _this$props = _this.props,\n          isOpen = _this$props.isOpen,\n          onClose = _this$props.onClose;\n      if (event.defaultPrevented) return;\n      var container = _this.containerRef;\n      var trigger = _this.triggerRef;\n      var target = event.target; // exit if we click outside but on the trigger — it can handle the clicks itself\n\n      if (trigger && trigger.contains(target)) return; // call onClose if the click originated from outside the dialog\n\n      if (isOpen && container && !container.contains(target)) {\n        onClose({\n          isOpen: false,\n          event: event\n        });\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(InlineDialog, [{\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (typeof window === 'undefined') return;\n\n      if (!prevProps.isOpen && this.props.isOpen) {\n        window.addEventListener('click', this.handleClickOutside, true);\n      } else if (prevProps.isOpen && !this.props.isOpen) {\n        window.removeEventListener('click', this.handleClickOutside);\n      }\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      if (typeof window === 'undefined') return;\n\n      if (this.props.isOpen) {\n        window.addEventListener('click', this.handleClickOutside, true);\n      }\n    }\n  }, {\n    key: \"componentWillUnMount\",\n    value: function componentWillUnMount() {\n      if (typeof window === 'undefined') return;\n      window.removeEventListener('click', this.handleClickOutside);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          children = _this$props2.children,\n          placement = _this$props2.placement,\n          isOpen = _this$props2.isOpen,\n          content = _this$props2.content,\n          onContentBlur = _this$props2.onContentBlur,\n          onContentFocus = _this$props2.onContentFocus,\n          onContentClick = _this$props2.onContentClick;\n      var popper = isOpen ? React.createElement(Popper, {\n        placement: placement\n      }, function (_ref) {\n        var ref = _ref.ref,\n            style = _ref.style,\n            outOfBoundaries = _ref.outOfBoundaries;\n        return React.createElement(Container, {\n          onBlur: onContentBlur,\n          onFocus: onContentFocus,\n          onClick: onContentClick,\n          outOfBoundaries: outOfBoundaries,\n          innerRef: function innerRef(node) {\n            _this2.containerRef = node;\n            ref(node);\n          },\n          style: style\n        }, content);\n      }) : null;\n      return React.createElement(Manager, null, React.createElement(Reference, null, function (_ref2) {\n        var ref = _ref2.ref;\n        return React.createElement(NodeResolver, {\n          innerRef: function innerRef(node) {\n            _this2.triggerRef = node;\n            ref(node);\n          }\n        }, children);\n      }), popper);\n    }\n  }]);\n\n  return InlineDialog;\n}(Component);\n\n_defineProperty(InlineDialog, \"defaultProps\", {\n  children: null,\n  content: null,\n  isOpen: false,\n  onContentBlur: function onContentBlur() {},\n  onContentClick: function onContentClick() {},\n  onContentFocus: function onContentFocus() {},\n  onClose: function onClose() {},\n  placement: 'bottom-start'\n});\n\nexport { InlineDialog as InlineDialogWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'inlineDialog',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onClose: createAndFireEventOnAtlaskit({\n    action: 'closed',\n    actionSubject: 'inlineDialog',\n    attributes: {\n      componentName: 'inlineDialog',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(InlineDialog));","import { colors, themed } from '@atlaskit/theme'; // The following are the name for color mappings in @atlaskit/themes\n// The exports are the functions, not the objects, so could not be used here\n\nvar disabled = {\n  light: colors.N20,\n  dark: colors.DN20\n}; // For validation red is the new 'yellow' which was { light: colors.Y300, dark: colors.Y300 }\n\nvar red = {\n  light: colors.R400,\n  dark: colors.R400\n}; // The following do not yet have a darkmode 'map': N20A, N10\n\nexport var getBackgroundColor = themed('appearance', {\n  standard: {\n    light: colors.N10,\n    dark: colors.DN10\n  },\n  disabled: disabled,\n  invalid: {\n    light: colors.N10,\n    dark: colors.DN10\n  },\n  subtle: {\n    light: 'transparent',\n    dark: 'transparent'\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBackgroundColorFocus = themed('appearance', {\n  standard: {\n    light: colors.N0,\n    dark: colors.DN10\n  },\n  disabled: disabled,\n  invalid: {\n    light: colors.N0,\n    dark: colors.DN10\n  },\n  subtle: {\n    light: colors.N0,\n    dark: colors.DN10\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBackgroundColorHover = themed('appearance', {\n  standard: {\n    light: colors.N30,\n    dark: colors.DN30\n  },\n  disabled: disabled,\n  invalid: {\n    light: colors.N30,\n    dark: colors.DN30\n  },\n  subtle: {\n    light: colors.N30,\n    dark: colors.DN30\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBorderColor = themed('appearance', {\n  standard: {\n    light: colors.N40,\n    dark: colors.DN40\n  },\n  disabled: {\n    light: colors.N40,\n    dark: colors.DN40\n  },\n  invalid: red,\n  subtle: {\n    light: 'transparent',\n    dark: 'transparent'\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBorderColorFocus = themed('appearance', {\n  standard: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  disabled: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  invalid: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  subtle: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});","import styled, { css } from 'styled-components';\nimport { gridSize, fontSize, colors, themed } from '@atlaskit/theme';\nimport { getBackgroundColor, getBackgroundColorFocus, getBackgroundColorHover, getBorderColor, getBorderColorFocus } from './theme';\nvar borderRadius = '3px';\nvar borderWidth = 2;\nvar grid = gridSize();\nvar lineHeightBase = grid * 2.5;\nvar lineHeightCompact = grid * 2;\nvar heightBase = grid * 5;\nvar heightCompact = grid * 4;\nvar horizontalPadding = grid;\nvar innerHeight = grid * 3;\nvar transitionDuration = '0.2s';\n\nvar getBorderAndPadding = function getBorderAndPadding(_ref) {\n  var paddingDisabled = _ref.paddingDisabled,\n      compact = _ref.compact;\n  var height = compact ? heightCompact : heightBase;\n  var padding = paddingDisabled ? \"0\" : \"\".concat((height - 2 * borderWidth - innerHeight) / 2, \"px \").concat(horizontalPadding - borderWidth, \"px\");\n  return css([\"\\n    border-width: \", \"px;\\n    padding: \", \";\\n  \"], borderWidth, padding);\n};\n\nvar getLineHeight = function getLineHeight(props) {\n  var currentLineHeight = props.compact ? lineHeightCompact : lineHeightBase;\n  return currentLineHeight / fontSize();\n};\n\nvar getDisabledColor = themed({\n  light: colors.N70,\n  dark: colors.DN90\n});\n\nvar getDisabledState = function getDisabledState(props) {\n  return props.disabled && css([\"\\n    color: \", \";\\n    pointer-events: none;\\n  \"], getDisabledColor(props));\n};\n\nvar getHoverState = function getHoverState(props) {\n  if (props.readOnly || props.isFocused || props.none) return null;\n  return css([\"\\n    &:hover {\\n      background-color: \", \";\\n    }\\n  \"], getBackgroundColorHover(props));\n};\n\nvar getBorderStyle = function getBorderStyle(props) {\n  return props.appearance === 'none' ? 'none' : 'solid';\n};\n\nvar getMinHeight = function getMinHeight(_ref2) {\n  var compact = _ref2.compact;\n  var minHeight = compact ? heightCompact : heightBase;\n  return css([\"\\n    min-height: \", \"px;\\n  \"], minHeight);\n}; // need an element wrapping the children because IE11 doesn't apply min-height correctly\n// to flex-elements. See https://github.com/philipwalton/flexbugs#3-min-height-on-a-flex-container-wont-apply-to-its-flex-items\n\n\nexport var ChildWrapper = styled.div.withConfig({\n  displayName: \"Content__ChildWrapper\",\n  componentId: \"ve26fj-0\"\n})([\"\\n  display: flex;\\n  flex-direction: column;\\n  flex: 1 0 auto;\\n  max-width: 100%;\\n  \", \";\\n\"], function (p) {\n  return getMinHeight(p);\n});\nvar getColor = themed({\n  light: colors.N900,\n  dark: colors.DN600\n});\nexport var Content = styled.div.withConfig({\n  displayName: \"Content\",\n  componentId: \"ve26fj-1\"\n})([\"\\n  align-items: center;\\n  background-color: \", \";\\n  border-color: \", \";\\n  border-radius: \", \";\\n  border-style: \", \";\\n  box-sizing: border-box;\\n  color: \", \";\\n  display: flex;\\n  flex: 1 0 auto;\\n  font-size: \", \"px;\\n  justify-content: space-between;\\n  line-height: \", \";\\n  max-width: 100%;\\n  overflow: hidden;\\n  transition: background-color \", \" ease-in-out,\\n    border-color \", \" ease-in-out;\\n  word-wrap: break-word;\\n  \", \" \", \" \", \";\\n\"], function (props) {\n  return props.isFocused ? getBackgroundColorFocus(props) : getBackgroundColor(props);\n}, function (props) {\n  return props.isFocused ? getBorderColorFocus(props) : getBorderColor(props);\n}, borderRadius, getBorderStyle, getColor, fontSize, getLineHeight, transitionDuration, transitionDuration, getBorderAndPadding, getHoverState, getDisabledState);\n\nvar getMaxWidth = function getMaxWidth(maxWidth) {\n  return maxWidth ? \"\".concat(maxWidth, \"px\") : '100%';\n};\n/* IE11 does not respect max-width when using flex-grow + nested flex content, similar to https://github.com/philipwalton/flexbugs#flexbug-11\n * and https://github.com/philipwalton/flexbugs#flexbug-17.\n * This can be fixed by setting the basis to 100%, allowing shrinking and setting the min-width to the original flex-basis value\n * (or 0 if it was auto).\n * Alternatively since we're just setting the contents to fit parent container when grow is set to true, we can just change flex-basis\n * to 100% and not worry about shrinking or growing.\n * See AK-4285.\n */\n\n\nexport var ContentWrapper = styled.div.withConfig({\n  displayName: \"Content__ContentWrapper\",\n  componentId: \"ve26fj-2\"\n})([\"\\n  \", \" \", \" \", \" max-width: \", \";\\n\"], function (props) {\n  return props.disabled && \"\\n      cursor: not-allowed;\\n    \";\n}, function (props) {\n  return props.grow ? css([\"\\n        flex: 0 0 \", \";\\n      \"], getMaxWidth(props.maxWidth)) : \"\\n          flex: 0 0 auto;\\n        \";\n}, function (props) {\n  return props.grow ? \"\\n          display: block;\\n        \" : \"\\n          display: inline-block;\\n          vertical-align: top;\\n        \";\n}, function (props) {\n  return getMaxWidth(props.maxWidth);\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport styled from 'styled-components';\nimport React, { Component } from 'react';\nimport { colors } from '@atlaskit/theme';\nimport Spinner from '@atlaskit/spinner';\nimport Icon from '@atlaskit/icon/glyph/warning'; // exported for testing\n\nexport var WarningIcon = styled.div.withConfig({\n  displayName: \"ValidationElement__WarningIcon\",\n  componentId: \"sc-1fk9yms-0\"\n})([\"\\n  align-items: center;\\n  color: \", \";\\n  display: flex;\\n  flex-shrink: 0;\\n\"], colors.yellow); // Spinner needs set height to avoid height jumping\n// Also needs a margin so there is space between it and preceding text\n\nvar SpinnerParent = styled.div.withConfig({\n  displayName: \"ValidationElement__SpinnerParent\",\n  componentId: \"sc-1fk9yms-1\"\n})([\"\\n  height: 20px;\\n  margin-left: 10px;\\n\"]);\n\nvar ValidationElement =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(ValidationElement, _Component);\n\n  function ValidationElement() {\n    _classCallCheck(this, ValidationElement);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(ValidationElement).apply(this, arguments));\n  }\n\n  _createClass(ValidationElement, [{\n    key: \"render\",\n    value: function render() {\n      if (!this.props.isDisabled && this.props.isInvalid) {\n        return React.createElement(WarningIcon, null, React.createElement(Icon, {\n          label: \"warning\"\n        }));\n      }\n\n      return this.props.isLoading ? React.createElement(SpinnerParent, null, React.createElement(Spinner, {\n        size: \"small\"\n      })) : null;\n    }\n  }]);\n\n  return ValidationElement;\n}(Component);\n\n_defineProperty(ValidationElement, \"defaultProps\", {\n  isDisabled: false,\n  isInvalid: false,\n  isLoading: false\n});\n\nexport { ValidationElement as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport { Content, ContentWrapper, ChildWrapper } from '../styled/Content';\nimport ValidationElement from './ValidationElement';\n\nvar FieldBaseStateless =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(FieldBaseStateless, _Component);\n\n  function FieldBaseStateless() {\n    _classCallCheck(this, FieldBaseStateless);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(FieldBaseStateless).apply(this, arguments));\n  }\n\n  _createClass(FieldBaseStateless, [{\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      if (this.props.shouldReset) {\n        this.props.onBlur();\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          children = _this$props.children,\n          invalidMessage = _this$props.invalidMessage,\n          isCompact = _this$props.isCompact,\n          isDialogOpen = _this$props.isDialogOpen,\n          isDisabled = _this$props.isDisabled,\n          isFitContainerWidthEnabled = _this$props.isFitContainerWidthEnabled,\n          isFocused = _this$props.isFocused,\n          isInvalid = _this$props.isInvalid,\n          isLoading = _this$props.isLoading,\n          isPaddingDisabled = _this$props.isPaddingDisabled,\n          isReadOnly = _this$props.isReadOnly,\n          maxWidth = _this$props.maxWidth,\n          onBlur = _this$props.onBlur,\n          onDialogBlur = _this$props.onDialogBlur,\n          onDialogClick = _this$props.onDialogClick,\n          onDialogFocus = _this$props.onDialogFocus,\n          onFocus = _this$props.onFocus,\n          isValidationHidden = _this$props.isValidationHidden;\n\n      function getAppearance(a) {\n        if (isDisabled) return 'disabled';\n        if (isInvalid) return 'invalid';\n        return a;\n      }\n\n      return React.createElement(ContentWrapper, {\n        disabled: isDisabled,\n        maxWidth: maxWidth,\n        grow: isFitContainerWidthEnabled\n      }, React.createElement(InlineDialog, {\n        content: invalidMessage,\n        isOpen: isDialogOpen && !!invalidMessage && !isValidationHidden,\n        onContentBlur: onDialogBlur,\n        onContentClick: onDialogClick,\n        onContentFocus: onDialogFocus,\n        placement: \"right\"\n      }, React.createElement(ChildWrapper, {\n        compact: isCompact\n      }, React.createElement(Content, {\n        appearance: getAppearance(appearance),\n        compact: isCompact,\n        disabled: isDisabled,\n        isFocused: isFocused,\n        invalid: isInvalid && !isFocused,\n        none: appearance === 'none',\n        onBlurCapture: onBlur,\n        onFocusCapture: onFocus,\n        paddingDisabled: isPaddingDisabled,\n        readOnly: isReadOnly,\n        subtle: appearance === 'subtle'\n      }, children, !isValidationHidden ? React.createElement(ValidationElement, {\n        isDisabled: isDisabled,\n        isInvalid: isInvalid,\n        isLoading: isLoading\n      }) : null))));\n    }\n  }]);\n\n  return FieldBaseStateless;\n}(Component);\n\n_defineProperty(FieldBaseStateless, \"defaultProps\", {\n  appearance: 'standard',\n  invalidMessage: '',\n  isCompact: false,\n  isDialogOpen: false,\n  isDisabled: false,\n  isFitContainerWidthEnabled: false,\n  isFocused: false,\n  isInvalid: false,\n  isLoading: false,\n  isPaddingDisabled: false,\n  isReadOnly: false,\n  onDialogBlur: function onDialogBlur() {},\n  onDialogClick: function onDialogClick() {},\n  onDialogFocus: function onDialogFocus() {},\n  shouldReset: false,\n  isValidationHidden: false\n});\n\nexport { FieldBaseStateless as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport FieldBaseStateless from './FieldBaseStateless';\nvar ON_BLUR_KEY = 'onBlurKey';\nvar ON_CONTENT_BLUR_KEY = 'onContentBlurKey';\n\nfunction waitForRender(cb) {\n  // Execute the callback after any upcoming render calls in the execution queue\n  setTimeout(cb, 0);\n}\n\nvar FieldBase =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(FieldBase, _Component);\n\n  function FieldBase() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, FieldBase);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(FieldBase)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      isFocused: _this.props.defaultIsFocused,\n      isDialogFocused: false,\n      shouldIgnoreNextDialogBlur: false\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"timers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onFocus\", function (e) {\n      _this.setState({\n        isFocused: true\n      });\n\n      _this.props.onFocus(e); // Escape from a possible race-condition when blur and focus happen one by one\n      // (otherwise the dialog might be left closed)\n\n\n      _this.cancelSchedule(ON_BLUR_KEY);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onBlur\", function (e) {\n      // Because the blur event fires before the focus event, we want to make sure that we don't\n      // render and close the dialog before we can check if the dialog is focused.\n      _this.reschedule(ON_BLUR_KEY, function () {\n        _this.setState({\n          isFocused: false\n        });\n\n        _this.props.onBlur(e);\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onContentFocus\", function () {\n      if (_this.state.isDialogFocused) {\n        // If we are tabbing between two elements in the warning dialog, we need to prevent the\n        // dialog from closing.\n        _this.setState({\n          shouldIgnoreNextDialogBlur: true\n        });\n      } else {\n        _this.setState({\n          isDialogFocused: true\n        });\n      } // Escape from a possible race-condition when blur and focus happen one by one\n      // (otherwise the dialog might be left closed)\n\n\n      _this.cancelSchedule(ON_CONTENT_BLUR_KEY);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onContentBlur\", function () {\n      waitForRender(function () {\n        if (_this.state.shouldIgnoreNextDialogBlur) {\n          // Ignore the blur event if we are still focused in the dialog.\n          _this.setState({\n            shouldIgnoreNextDialogBlur: false\n          });\n        } else {\n          _this.setState({\n            isDialogFocused: false\n          });\n        }\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(FieldBase, [{\n    key: \"cancelSchedule\",\n    value: function cancelSchedule(key) {\n      this.timers = this.timers || {};\n\n      if (this.timers[key]) {\n        clearTimeout(this.timers[key]);\n        delete this.timers[key];\n      }\n    }\n  }, {\n    key: \"reschedule\",\n    value: function reschedule(key, callback) {\n      var _this2 = this;\n\n      // Use reschedule (not just schedule) to avoid race conditions when multiple blur events\n      // happen one by one.\n      this.timers = this.timers || {};\n      this.cancelSchedule(key);\n      this.timers[key] = setTimeout(function () {\n        callback();\n\n        _this2.cancelSchedule(key);\n      }, 0);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          defaultIsFocused = _this$props.defaultIsFocused,\n          props = _objectWithoutProperties(_this$props, [\"defaultIsFocused\"]);\n\n      var _this$state = this.state,\n          isFocused = _this$state.isFocused,\n          isDialogFocused = _this$state.isDialogFocused;\n      return React.createElement(FieldBaseStateless, _extends({}, props, {\n        isDialogOpen: isFocused || isDialogFocused,\n        isFocused: isFocused,\n        onBlur: this.onBlur,\n        onFocus: this.onFocus,\n        onDialogFocus: this.onContentFocus,\n        onDialogBlur: this.onContentBlur\n      }));\n    }\n  }]);\n\n  return FieldBase;\n}(Component);\n\n_defineProperty(FieldBase, \"defaultProps\", {\n  defaultIsFocused: false,\n  onFocus: function onFocus() {},\n  onBlur: function onBlur() {}\n});\n\nexport { FieldBase as default };","import styled, { css } from 'styled-components';\nimport { codeFontFamily, colors, fontSize } from '@atlaskit/theme';\n\nvar getPlaceholderStyle = function getPlaceholderStyle(style) {\n  return css([\"\\n  &::-webkit-input-placeholder {\\n    /* WebKit, Blink, Edge */\\n    \", \";\\n  }\\n  &::-moz-placeholder {\\n    /* Mozilla Firefox 19+ */\\n    \", \" opacity: 1;\\n  }\\n  &::-ms-input-placeholder {\\n    /* Microsoft Edge */\\n    \", \";\\n  }\\n  &:-moz-placeholder {\\n    /* Mozilla Firefox 4 to 18 */\\n    \", \" opacity: 1;\\n  }\\n  &:-ms-input-placeholder {\\n    /* Internet Explorer 10-11 */\\n    \", \";\\n  }\\n\"], style, style, style, style, style);\n};\n\nvar getPlaceholderColor = css([\"\\n  color: \", \";\\n\"], colors.placeholderText); // Safari puts on some difficult to remove styles, mainly for disabled inputs\n// but we want full control so need to override them in all cases\n\nvar overrideSafariDisabledStyles = \"\\n  -webkit-text-fill-color: unset;\\n  -webkit-opacity: 1;\\n\";\n\nvar getMinimumRowsHeight = function getMinimumRowsHeight(_ref) {\n  var minimumRows = _ref.minimumRows;\n  return \"min-height: \".concat(20 * minimumRows, \"px;\");\n};\n\nvar getResizeStyles = function getResizeStyles(_ref2) {\n  var enableResize = _ref2.enableResize;\n\n  if (!enableResize) {\n    return \"resize: none;\";\n  }\n\n  if (enableResize === 'horizontal') {\n    return \"resize: horizontal;\";\n  }\n\n  if (enableResize === 'vertical') {\n    return \"resize: vertical;\";\n  }\n\n  return null;\n};\n\nvar TextArea = styled.textarea.withConfig({\n  displayName: \"TextArea\",\n  componentId: \"l4fqfr-0\"\n})([\"\\n  background: transparent;\\n  padding: 0;\\n  margin: 0;\\n  border: 0;\\n  box-sizing: border-box;\\n  color: inherit;\\n  cursor: inherit;\\n  font-family: \", \";\\n  font-size: \", \"px;\\n  line-height: \", \";\\n  min-width: 0;\\n  outline: none;\\n  width: 100%;\\n\\n  [disabled] {\\n    \", \";\\n  }\\n\\n  \", \" \", \"\\n\\n  &::-ms-clear {\\n    display: none;\\n  }\\n\\n  &:invalid {\\n    box-shadow: none;\\n  }\\n\\n  \", \";\\n\"], function (p) {\n  return p.isMonospaced ? codeFontFamily() : 'inherit';\n}, fontSize, 20 / fontSize(), overrideSafariDisabledStyles, getMinimumRowsHeight, getResizeStyles, getPlaceholderStyle(getPlaceholderColor));\nexport default TextArea;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport styled from 'styled-components';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport Base, { Label } from '@atlaskit/field-base';\nimport { name as packageName, version as packageVersion } from '../package.json';\nimport TextArea from './styled/TextArea';\nvar Wrapper = styled.div.withConfig({\n  displayName: \"FieldTextAreaStateless__Wrapper\",\n  componentId: \"sc-159dr31-0\"\n})([\"\\n  flex: 1 1 100%;\\n\"]);\n\nvar FieldTextAreaStateless =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(FieldTextAreaStateless, _Component);\n\n  function FieldTextAreaStateless() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, FieldTextAreaStateless);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(FieldTextAreaStateless)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"input\", void 0);\n\n    return _this;\n  }\n\n  _createClass(FieldTextAreaStateless, [{\n    key: \"focus\",\n    value: function focus() {\n      this.input.focus();\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          autoFocus = _this$props.autoFocus,\n          compact = _this$props.compact,\n          disabled = _this$props.disabled,\n          id = _this$props.id,\n          invalidMessage = _this$props.invalidMessage,\n          isInvalid = _this$props.isInvalid,\n          isLabelHidden = _this$props.isLabelHidden,\n          isMonospaced = _this$props.isMonospaced,\n          isReadOnly = _this$props.isReadOnly,\n          isSpellCheckEnabled = _this$props.isSpellCheckEnabled,\n          label = _this$props.label,\n          maxLength = _this$props.maxLength,\n          minimumRows = _this$props.minimumRows,\n          name = _this$props.name,\n          onBlur = _this$props.onBlur,\n          onChange = _this$props.onChange,\n          onFocus = _this$props.onFocus,\n          placeholder = _this$props.placeholder,\n          enableResize = _this$props.enableResize,\n          required = _this$props.required,\n          shouldFitContainer = _this$props.shouldFitContainer,\n          value = _this$props.value,\n          isValidationHidden = _this$props.isValidationHidden;\n      return React.createElement(Wrapper, null, !isLabelHidden && React.createElement(Label, {\n        htmlFor: id,\n        isDisabled: disabled,\n        isLabelHidden: isLabelHidden,\n        isRequired: required,\n        label: label\n      }), React.createElement(Base, {\n        isCompact: compact,\n        isDisabled: disabled,\n        isInvalid: isInvalid,\n        isReadOnly: isReadOnly,\n        isRequired: required,\n        invalidMessage: invalidMessage,\n        isFitContainerWidthEnabled: shouldFitContainer,\n        isValidationHidden: isValidationHidden\n      }, React.createElement(TextArea, {\n        disabled: disabled,\n        readOnly: isReadOnly,\n        name: name,\n        placeholder: placeholder,\n        value: value,\n        required: required,\n        isMonospaced: isMonospaced,\n        minimumRows: minimumRows,\n        enableResize: enableResize,\n        onBlur: onBlur,\n        onChange: onChange,\n        onFocus: onFocus,\n        id: id,\n        autoFocus: autoFocus,\n        spellCheck: isSpellCheckEnabled,\n        maxLength: maxLength,\n        innerRef: function innerRef(input) {\n          _this2.input = input;\n        }\n      })));\n    }\n  }]);\n\n  return FieldTextAreaStateless;\n}(Component);\n\n_defineProperty(FieldTextAreaStateless, \"defaultProps\", {\n  compact: false,\n  disabled: false,\n  isReadOnly: false,\n  required: false,\n  isInvalid: false,\n  label: '',\n  type: 'text',\n  isSpellCheckEnabled: true,\n  minimumRows: 1,\n  isValidationHidden: false\n});\n\nexport { FieldTextAreaStateless as FieldTextAreaStatelessWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'fieldTextArea',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onBlur: createAndFireEventOnAtlaskit({\n    action: 'blurred',\n    actionSubject: 'textArea',\n    attributes: {\n      componentName: 'fieldTextArea',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  }),\n  onFocus: createAndFireEventOnAtlaskit({\n    action: 'focused',\n    actionSubject: 'textArea',\n    attributes: {\n      componentName: 'fieldTextArea',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(FieldTextAreaStateless));","// @flow\n\nimport { FieldTextAreaStateless } from '@atlaskit/field-text-area';\nimport StarIcon from '@atlaskit/icon/glyph/star';\nimport StarFilledIcon from '@atlaskit/icon/glyph/star-filled';\nimport React, { Component } from 'react';\nimport { connect } from '../../base/redux';\nimport type { Dispatch } from 'redux';\n\nimport {\n    createFeedbackOpenEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { Dialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\n\nimport { cancelFeedback, submitFeedback } from '../actions';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\nconst scoreAnimationClass\n    = interfaceConfig.ENABLE_FEEDBACK_ANIMATION ? 'shake-rotate' : '';\n\n/**\n * The scores to display for selecting. The score is the index in the array and\n * the value of the index is a translation key used for display in the dialog.\n *\n * @types {string[]}\n */\nconst SCORES = [\n    'feedback.veryBad',\n    'feedback.bad',\n    'feedback.average',\n    'feedback.good',\n    'feedback.veryGood'\n];\n\n/**\n * The type of the React {@code Component} props of {@link FeedbackDialog}.\n */\ntype Props = {\n\n    /**\n     * The cached feedback message, if any, that was set when closing a previous\n     * instance of {@code FeedbackDialog}.\n     */\n    _message: string,\n\n    /**\n     * The cached feedback score, if any, that was set when closing a previous\n     * instance of {@code FeedbackDialog}.\n     */\n    _score: number,\n\n    /**\n     * The JitsiConference that is being rated. The conference is passed in\n     * because feedback can occur after a conference has been left, so\n     * references to it may no longer exist in redux.\n     */\n    conference: Object,\n\n    /**\n     * Invoked to signal feedback submission or canceling.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Callback invoked when {@code FeedbackDialog} is unmounted.\n     */\n    onClose: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link FeedbackDialog}.\n */\ntype State = {\n\n    /**\n     * The currently entered feedback message.\n     */\n    message: string,\n\n    /**\n     * The score selection index which is currently being hovered. The value -1\n     * is used as a sentinel value to match store behavior of using -1 for no\n     * score having been selected.\n     */\n    mousedOverScore: number,\n\n    /**\n     * The currently selected score selection index. The score will not be 0\n     * indexed so subtract one to map with SCORES.\n     */\n    score: number\n};\n\n/**\n * A React {@code Component} for displaying a dialog to rate the current\n * conference quality, write a message describing the experience, and submit\n * the feedback.\n *\n * @extends Component\n */\nclass FeedbackDialog extends Component<Props, State> {\n    /**\n     * An array of objects with click handlers for each of the scores listed in\n     * the constant SCORES. This pattern is used for binding event handlers only\n     * once for each score selection icon.\n     */\n    _scoreClickConfigurations: Array<Object>;\n\n    /**\n     * Initializes a new {@code FeedbackDialog} instance.\n     *\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        const { _message, _score } = this.props;\n\n        this.state = {\n            /**\n             * The currently entered feedback message.\n             *\n             * @type {string}\n             */\n            message: _message,\n\n            /**\n             * The score selection index which is currently being hovered. The\n             * value -1 is used as a sentinel value to match store behavior of\n             * using -1 for no score having been selected.\n             *\n             * @type {number}\n             */\n            mousedOverScore: -1,\n\n            /**\n             * The currently selected score selection index. The score will not\n             * be 0 indexed so subtract one to map with SCORES.\n             *\n             * @type {number}\n             */\n            score: _score > -1 ? _score - 1 : _score\n        };\n\n        this._scoreClickConfigurations = SCORES.map((textKey, index) => {\n            return {\n                _onClick: () => this._onScoreSelect(index),\n                _onMouseOver: () => this._onScoreMouseOver(index)\n            };\n        });\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onCancel = this._onCancel.bind(this);\n        this._onMessageChange = this._onMessageChange.bind(this);\n        this._onScoreContainerMouseLeave\n            = this._onScoreContainerMouseLeave.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Emits an analytics event to notify feedback has been opened.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        sendAnalytics(createFeedbackOpenEvent());\n        if (typeof APP !== 'undefined') {\n            APP.API.notifyFeedbackPromptDisplayed();\n        }\n    }\n\n    /**\n     * Invokes the onClose callback, if defined, to notify of the close event.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        if (this.props.onClose) {\n            this.props.onClose();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { message, mousedOverScore, score } = this.state;\n        const scoreToDisplayAsSelected\n            = mousedOverScore > -1 ? mousedOverScore : score;\n\n        const scoreIcons = this._scoreClickConfigurations.map(\n            (config, index) => {\n                const isFilled = index <= scoreToDisplayAsSelected;\n                const activeClass = isFilled ? 'active' : '';\n                const className\n                    = `star-btn ${scoreAnimationClass} ${activeClass}`;\n\n                return (\n                    <a\n                        className = { className }\n                        key = { index }\n                        onClick = { config._onClick }\n                        onMouseOver = { config._onMouseOver }>\n                        { isFilled\n                            ? <StarFilledIcon\n                                label = 'star-filled'\n                                size = 'xlarge' />\n                            : <StarIcon\n                                label = 'star'\n                                size = 'xlarge' /> }\n                    </a>\n                );\n            });\n\n        const { t } = this.props;\n\n        return (\n            <Dialog\n                okKey = 'dialog.Submit'\n                onCancel = { this._onCancel }\n                onSubmit = { this._onSubmit }\n                titleKey = 'feedback.rateExperience'>\n                <div className = 'feedback-dialog'>\n                    <div className = 'rating'>\n                        <div className = 'star-label'>\n                            <p id = 'starLabel'>\n                                { t(SCORES[scoreToDisplayAsSelected]) }\n                            </p>\n                        </div>\n                        <div\n                            className = 'stars'\n                            onMouseLeave = { this._onScoreContainerMouseLeave }>\n                            { scoreIcons }\n                        </div>\n                    </div>\n                    <div className = 'details'>\n                        <FieldTextAreaStateless\n                            autoFocus = { true }\n                            className = 'input-control'\n                            id = 'feedbackTextArea'\n                            label = { t('feedback.detailsLabel') }\n                            onChange = { this._onMessageChange }\n                            shouldFitContainer = { true }\n                            value = { message } />\n                    </div>\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onCancel: () => boolean;\n\n    /**\n     * Dispatches an action notifying feedback was not submitted. The submitted\n     * score will have one added as the rest of the app does not expect 0\n     * indexing.\n     *\n     * @private\n     * @returns {boolean} Returns true to close the dialog.\n     */\n    _onCancel() {\n        const { message, score } = this.state;\n        const scoreToSubmit = score > -1 ? score + 1 : score;\n\n        this.props.dispatch(cancelFeedback(scoreToSubmit, message));\n\n        return true;\n    }\n\n    _onMessageChange: (Object) => void;\n\n    /**\n     * Updates the known entered feedback message.\n     *\n     * @param {Object} event - The DOM event from updating the textfield for the\n     * feedback message.\n     * @private\n     * @returns {void}\n     */\n    _onMessageChange(event) {\n        this.setState({ message: event.target.value });\n    }\n\n    /**\n     * Updates the currently selected score.\n     *\n     * @param {number} score - The index of the selected score in SCORES.\n     * @private\n     * @returns {void}\n     */\n    _onScoreSelect(score) {\n        this.setState({ score });\n    }\n\n    _onScoreContainerMouseLeave: () => void;\n\n    /**\n     * Sets the currently hovered score to null to indicate no hover is\n     * occurring.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onScoreContainerMouseLeave() {\n        this.setState({ mousedOverScore: -1 });\n    }\n\n    /**\n     * Updates the known state of the score icon currently behind hovered over.\n     *\n     * @param {number} mousedOverScore - The index of the SCORES value currently\n     * being moused over.\n     * @private\n     * @returns {void}\n     */\n    _onScoreMouseOver(mousedOverScore) {\n        this.setState({ mousedOverScore });\n    }\n\n    _onSubmit: () => void;\n\n    /**\n     * Dispatches the entered feedback for submission. The submitted score will\n     * have one added as the rest of the app does not expect 0 indexing.\n     *\n     * @private\n     * @returns {boolean} Returns true to close the dialog.\n     */\n    _onSubmit() {\n        const { conference, dispatch } = this.props;\n        const { message, score } = this.state;\n\n        const scoreToSubmit = score > -1 ? score + 1 : score;\n\n        dispatch(submitFeedback(scoreToSubmit, message, conference));\n\n        return true;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code FeedbackDialog}'s\n * props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n * }}\n */\nfunction _mapStateToProps(state) {\n    const { message, score } = state['features/feedback'];\n\n    return {\n        /**\n         * The cached feedback message, if any, that was set when closing a\n         * previous instance of {@code FeedbackDialog}.\n         *\n         * @type {string}\n         */\n        _message: message,\n\n        /**\n         * The currently selected score selection index.\n         *\n         * @type {number}\n         */\n        _score: score\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(FeedbackDialog));\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { openDialog } from '../base/dialog';\nimport { FEEDBACK_REQUEST_IN_PROGRESS } from '../../../modules/UI/UIErrors';\n\nimport {\n    CANCEL_FEEDBACK,\n    SUBMIT_FEEDBACK_ERROR,\n    SUBMIT_FEEDBACK_SUCCESS\n} from './actionTypes';\nimport { FeedbackDialog } from './components';\n\ndeclare var config: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * Caches the passed in feedback in the redux store.\n *\n * @param {number} score - The quality score given to the conference.\n * @param {string} message - A description entered by the participant that\n * explains the rating.\n * @returns {{\n *     type: CANCEL_FEEDBACK,\n *     message: string,\n *     score: number\n * }}\n */\nexport function cancelFeedback(score: number, message: string) {\n    return {\n        type: CANCEL_FEEDBACK,\n        message,\n        score\n    };\n}\n\n/**\n * Potentially open the {@code FeedbackDialog}. It will not be opened if it is\n * already open or feedback has already been submitted.\n *\n * @param {JistiConference} conference - The conference for which the feedback\n * would be about. The conference is passed in because feedback can occur after\n * a conference has been left, so references to it may no longer exist in redux.\n * @returns {Promise} Resolved with value - false if the dialog is enabled and\n * resolved with true if the dialog is disabled or the feedback was already\n * submitted. Rejected if another dialog is already displayed.\n */\nexport function maybeOpenFeedbackDialog(conference: Object) {\n    type R = {\n        feedbackSubmitted: boolean,\n        showThankYou: boolean\n    };\n\n    return (dispatch: Dispatch<any>, getState: Function): Promise<R> => {\n        const state = getState();\n        const { feedbackPercentage = 100 } = state['features/base/config'];\n\n        if (interfaceConfig.filmStripOnly || config.iAmRecorder) {\n            // Intentionally fall through the if chain to prevent further action\n            // from being taken with regards to showing feedback.\n        } else if (state['features/base/dialog'].component === FeedbackDialog) {\n            // Feedback is currently being displayed.\n\n            return Promise.reject(FEEDBACK_REQUEST_IN_PROGRESS);\n        } else if (state['features/feedback'].submitted) {\n            // Feedback has been submitted already.\n\n            return Promise.resolve({\n                feedbackSubmitted: true,\n                showThankYou: true\n            });\n        } else if (conference.isCallstatsEnabled() && feedbackPercentage > Math.random() * 100) {\n            return new Promise(resolve => {\n                dispatch(openFeedbackDialog(conference, () => {\n                    const { submitted } = getState()['features/feedback'];\n\n                    resolve({\n                        feedbackSubmitted: submitted,\n                        showThankYou: false\n                    });\n                }));\n            });\n        }\n\n        // If the feedback functionality isn't enabled we show a \"thank you\"\n        // message. Signaling it (true), so the caller of requestFeedback can\n        // act on it.\n        return Promise.resolve({\n            feedbackSubmitted: false,\n            showThankYou: true\n        });\n    };\n}\n\n/**\n * Opens {@code FeedbackDialog}.\n *\n * @param {JitsiConference} conference - The JitsiConference that is being\n * rated. The conference is passed in because feedback can occur after a\n * conference has been left, so references to it may no longer exist in redux.\n * @param {Function} [onClose] - An optional callback to invoke when the dialog\n * is closed.\n * @returns {Object}\n */\nexport function openFeedbackDialog(conference: Object, onClose: ?Function) {\n    return openDialog(FeedbackDialog, {\n        conference,\n        onClose\n    });\n}\n\n/**\n * Send the passed in feedback.\n *\n * @param {number} score - An integer between 1 and 5 indicating the user\n * feedback. The negative integer -1 is used to denote no score was selected.\n * @param {string} message - Detailed feedback from the user to explain the\n * rating.\n * @param {JitsiConference} conference - The JitsiConference for which the\n * feedback is being left.\n * @returns {Function}\n */\nexport function submitFeedback(\n        score: number,\n        message: string,\n        conference: Object) {\n    return (dispatch: Dispatch<any>) => conference.sendFeedback(score, message)\n        .then(\n            () => dispatch({ type: SUBMIT_FEEDBACK_SUCCESS }),\n            error => {\n                dispatch({\n                    type: SUBMIT_FEEDBACK_ERROR,\n                    error\n                });\n\n                return Promise.reject(error);\n            }\n        );\n}\n","import {\n    ReducerRegistry\n} from '../base/redux';\n\nimport {\n    CANCEL_FEEDBACK,\n    SUBMIT_FEEDBACK_ERROR,\n    SUBMIT_FEEDBACK_SUCCESS\n} from './actionTypes';\n\nconst DEFAULT_STATE = {\n    message: '',\n\n    // The sentinel value -1 is used to denote no rating has been set and to\n    // preserve pre-redux behavior.\n    score: -1,\n    submitted: false\n};\n\n/**\n * Reduces the Redux actions of the feature features/feedback.\n */\nReducerRegistry.register(\n    'features/feedback',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case CANCEL_FEEDBACK: {\n            return {\n                ...state,\n                message: action.message,\n                score: action.score\n            };\n        }\n\n        case SUBMIT_FEEDBACK_ERROR:\n        case SUBMIT_FEEDBACK_SUCCESS: {\n            return {\n                ...state,\n                message: '',\n                score: -1,\n                submitted: true\n            };\n        }\n        }\n\n        return state;\n    });\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\n\nimport './reducer';\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    createSelectParticipantFailedEvent,\n    sendAnalytics\n} from '../analytics';\nimport { _handleParticipantError } from '../base/conference';\nimport { MEDIA_TYPE } from '../base/media';\nimport { getParticipants } from '../base/participants';\nimport { reportError } from '../base/util';\nimport { shouldDisplayTileView } from '../video-layout';\n\nimport {\n    SELECT_LARGE_VIDEO_PARTICIPANT,\n    UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION\n} from './actionTypes';\n\ndeclare var APP: Object;\n\n/**\n * Signals conference to select a participant.\n *\n * @returns {Function}\n */\nexport function selectParticipant() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const { conference } = state['features/base/conference'];\n\n        if (conference) {\n            const ids = shouldDisplayTileView(state)\n                ? getParticipants(state).map(participant => participant.id)\n                : [ state['features/large-video'].participantId ];\n\n            try {\n                conference.selectParticipants(ids);\n            } catch (err) {\n                _handleParticipantError(err);\n\n                sendAnalytics(createSelectParticipantFailedEvent(err));\n\n                reportError(\n                    err, `Failed to select participants ${ids.toString()}`);\n            }\n        }\n    };\n}\n\n/**\n * Action to select the participant to be displayed in LargeVideo based on a\n * variety of factors: If there is a dominant or pinned speaker, or if there are\n * remote tracks, etc.\n *\n * @returns {Function}\n */\nexport function selectParticipantInLargeVideo() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const participantId = _electParticipantInLargeVideo(state);\n        const largeVideo = state['features/large-video'];\n\n        if (participantId !== largeVideo.participantId) {\n            dispatch({\n                type: SELECT_LARGE_VIDEO_PARTICIPANT,\n                participantId\n            });\n\n            dispatch(selectParticipant());\n        }\n    };\n}\n\n/**\n * Updates the currently seen resolution of the video displayed on large video.\n *\n * @param {number} resolution - The current resolution (height) of the video.\n * @returns {{\n *     type: UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION,\n *     resolution: number\n * }}\n */\nexport function updateKnownLargeVideoResolution(resolution: number) {\n    return {\n        type: UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION,\n        resolution\n    };\n}\n\n/**\n * Returns the most recent existing remote video track.\n *\n * @param {Track[]} tracks - All current tracks.\n * @private\n * @returns {(Track|undefined)}\n */\nfunction _electLastVisibleRemoteVideo(tracks) {\n    // First we try to get most recent remote video track.\n    for (let i = tracks.length - 1; i >= 0; --i) {\n        const track = tracks[i];\n\n        if (!track.local && track.mediaType === MEDIA_TYPE.VIDEO) {\n            return track;\n        }\n    }\n}\n\n/**\n * Returns the identifier of the participant who is to be on the stage and\n * should be displayed in {@code LargeVideo}.\n *\n * @param {Object} state - The Redux state from which the participant to be\n * displayed in {@code LargeVideo} is to be elected.\n * @private\n * @returns {(string|undefined)}\n */\nfunction _electParticipantInLargeVideo(state) {\n    // 1. If a participant is pinned, they will be shown in the LargeVideo (\n    //    regardless of whether they are local or remote).\n    const participants = state['features/base/participants'];\n    let participant = participants.find(p => p.pinned);\n    let id = participant && participant.id;\n\n    if (!id) {\n        // 2. No participant is pinned so get the dominant speaker. But the\n        //    local participant won't be displayed in LargeVideo even if she is\n        //    the dominant speaker.\n        participant = participants.find(p => p.dominantSpeaker && !p.local);\n        id = participant && participant.id;\n\n        if (!id) {\n            // 3. There is no dominant speaker so select the remote participant\n            //    who last had visible video.\n            const tracks = state['features/base/tracks'];\n            const videoTrack = _electLastVisibleRemoteVideo(tracks);\n\n            id = videoTrack && videoTrack.participantId;\n\n            if (!id) {\n                // 4. It's possible there is no participant with visible video.\n                //    This can happen for a number of reasons:\n                //    - there is only one participant (i.e. the local user),\n                //    - other participants joined with video muted.\n                //    As a last resort, pick the last participant who joined the\n                //    conference (regardless of whether they are local or\n                //    remote).\n                //\n                // HOWEVER: We don't want to show poltergeist or other bot type participants on stage\n                // automatically, because it's misleading (users may think they are already\n                // joined and maybe speaking).\n                for (let i = participants.length; i > 0 && !participant; i--) {\n                    const p = participants[i - 1];\n\n                    !p.botType && (participant = p);\n                }\n\n                id = participant && participant.id;\n            }\n        }\n    }\n\n    return id;\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Watermarks } from '../../base/react';\nimport { Captions } from '../../subtitles/';\nimport { connect } from '../../base/redux';\n\ndeclare var interfaceConfig: Object;\n\ntype Props = {\n\n    /**\n     * Used to determine the value of the autoplay attribute of the underlying\n     * video element.\n     */\n    _noAutoPlayVideo: boolean\n}\n\n/**\n * Implements a React {@link Component} which represents the large video (a.k.a.\n * the conference participant who is on the local stage) on Web/React.\n *\n * @extends Component\n */\nclass LargeVideo extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {React$Element}\n     */\n    render() {\n        return (\n            <div\n                className = 'videocontainer'\n                id = 'largeVideoContainer'>\n                <div id = 'sharedVideo'>\n                    <div id = 'sharedVideoIFrame' />\n                </div>\n                <div id = 'etherpad' />\n\n                <Watermarks />\n\n                <div id = 'dominantSpeaker'>\n                    <div className = 'dynamic-shadow' />\n                    <div id = 'dominantSpeakerAvatarContainer' />\n                </div>\n\n                <div className = 'poker-container' />\n\n                <div id = 'remotePresenceMessage' />\n                <span id = 'remoteConnectionMessage' />\n                <div id = 'largeVideoElementsContainer'>\n                    <div id = 'largeVideoBackgroundContainer' />\n\n                    {/*\n                      * FIXME: the architecture of elements related to the large\n                      * video and the naming. The background is not part of\n                      * largeVideoWrapper because we are controlling the size of\n                      * the video through largeVideoWrapper. That's why we need\n                      * another container for the background and the\n                      * largeVideoWrapper in order to hide/show them.\n                      */}\n                    <div id = 'largeVideoWrapper'>\n                        <video\n                            autoPlay = { !this.props._noAutoPlayVideo }\n                            id = 'largeVideo'\n                            muted = { true }\n                            playsInline = { true } /* for Safari on iOS to work */ />\n                    </div>\n                </div>\n                { interfaceConfig.DISABLE_TRANSCRIPTION_SUBTITLES\n                    || <Captions /> }\n            </div>\n        );\n    }\n}\n\n\n/**\n * Maps (parts of) the Redux state to the associated LargeVideo props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _noAutoPlayVideo: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    const testingConfig = state['features/base/config'].testing;\n\n    return {\n        _noAutoPlayVideo: testingConfig?.noAutoPlayVideo\n    };\n}\n\n\nexport default connect(_mapStateToProps)(LargeVideo);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { connect } from '../../base/redux';\nimport { shouldDisplayTileView } from '../../video-layout';\n\n/**\n * Constants to describe the dimensions of the video. Landscape videos\n * are wider than they are taller and portrait videos are taller than they\n * are wider. The dimensions will determine how {@code LargeVideoBackground}\n * will strech to fill its container.\n *\n * @type {Object}\n */\nexport const ORIENTATION = {\n    LANDSCAPE: 'landscape',\n    PORTRAIT: 'portrait'\n};\n\n/**\n * The type of the React {@code Component} props of\n * {@link LargeVideoBackgroundCanvas}.\n */\ntype Props = {\n\n   /**\n     * Whether or not the layout should change to support tile view mode.\n     *\n     * @protected\n     * @type {boolean}\n     */\n    _shouldDisplayTileView: boolean,\n\n    /**\n     * Additional CSS class names to add to the root of the component.\n     */\n    className: String,\n\n    /**\n     * Whether or not the background should have its visibility hidden.\n     */\n    hidden: boolean,\n\n    /**\n     * Whether or not the video should display flipped horizontally, so left\n     * becomes right and right becomes left.\n     */\n    mirror: boolean,\n\n    /**\n     * Whether the component should ensure full width of the video is displayed\n     * (landscape) or full height (portrait).\n     */\n    orientationFit: string,\n\n    /**\n     * The video stream to display.\n     */\n    videoElement: Object\n};\n\n\n/**\n * Implements a React Component which shows a video element intended to be used\n * as a background to fill the empty space of container with another video.\n *\n * @extends Component\n */\nexport class LargeVideoBackground extends Component<Props> {\n    _canvasEl: Object;\n\n    _updateCanvasInterval: *;\n\n    /**\n     * Initializes new {@code LargeVideoBackground} instance.\n     *\n     * @param {*} props - The read-only properties with which the new instance\n     * is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._setCanvasEl = this._setCanvasEl.bind(this);\n        this._updateCanvas = this._updateCanvas.bind(this);\n    }\n\n    /**\n     * If the canvas is not hidden, sets the initial interval to update the\n     * image displayed in the canvas.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        const { _shouldDisplayTileView, hidden, videoElement } = this.props;\n\n        if (videoElement && !hidden && !_shouldDisplayTileView) {\n            this._updateCanvas();\n            this._setUpdateCanvasInterval();\n        }\n    }\n\n    /**\n     * Starts or stops the interval to update the image displayed in the canvas.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: Props) {\n        const wasCanvasUpdating = !prevProps.hidden && !prevProps._shouldDisplayTileView && prevProps.videoElement;\n        const shouldCanvasUpdating\n            = !this.props.hidden && !this.props._shouldDisplayTileView && this.props.videoElement;\n\n        if (wasCanvasUpdating !== shouldCanvasUpdating) {\n            if (shouldCanvasUpdating) {\n                this._clearCanvas();\n                this._setUpdateCanvasInterval();\n            } else {\n                this._clearCanvas();\n                this._clearUpdateCanvasInterval();\n            }\n        }\n    }\n\n    /**\n     * Clears the interval for updating the image displayed in the canvas.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._clearUpdateCanvasInterval();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            hidden,\n            mirror\n        } = this.props;\n        const classNames = `large-video-background ${mirror ? 'flip-x' : ''} ${hidden ? 'invisible' : ''}`;\n\n        return (\n            <div className = { classNames }>\n                <canvas\n                    id = 'largeVideoBackground'\n                    ref = { this._setCanvasEl } />\n            </div>\n        );\n    }\n\n    /**\n     * Removes any image displayed on the canvas.\n     *\n     * @private\n     * @returns {void}\n     */\n    _clearCanvas() {\n        const cavnasContext = this._canvasEl.getContext('2d');\n\n        cavnasContext.clearRect(\n            0, 0, this._canvasEl.width, this._canvasEl.height);\n    }\n\n    /**\n     * Clears the interval for updating the image displayed in the canvas.\n     *\n     * @private\n     * @returns {void}\n     */\n    _clearUpdateCanvasInterval() {\n        clearInterval(this._updateCanvasInterval);\n    }\n\n    _setCanvasEl: () => void;\n\n    /**\n     * Sets the instance variable for the component's canvas element so it can\n     * be accessed directly for drawing on.\n     *\n     * @param {Object} element - The DOM element for the component's canvas.\n     * @private\n     * @returns {void}\n     */\n    _setCanvasEl(element) {\n        this._canvasEl = element;\n    }\n\n    /**\n     * Starts the interval for updating the image displayed in the canvas.\n     *\n     * @private\n     * @returns {void}\n     */\n    _setUpdateCanvasInterval() {\n        this._clearUpdateCanvasInterval();\n        this._updateCanvasInterval = setInterval(this._updateCanvas, 200);\n    }\n\n    _updateCanvas: () => void;\n\n    /**\n     * Draws the current frame of the passed in video element onto the canvas.\n     *\n     * @private\n     * @returns {void}\n     */\n    _updateCanvas() {\n        // On Electron 7 there is a memory leak if we try to draw into a hidden canvas that is part of the DOM tree.\n        // See: https://github.com/electron/electron/issues/22417\n        // Trying to detect all the cases when the page will be hidden because of something not in our control\n        // (for example when the page is loaded in an iframe which is hidden due to the host page styles) to solve\n        // the memory leak. Currently we are not handling the use case when the page is hidden with visibility:hidden\n        // because we don't have a good way to do it.\n        // All other cases when the canvas is not visible are handled trough the component props\n        // (hidden, _shouldDisplayTileView).\n        if (!this._canvasEl || this._canvasEl.offsetParent === null\n                || window.innerHeight === 0 || window.innerWidth === 0) {\n            return;\n        }\n\n        const { videoElement } = this.props;\n        const { videoWidth, videoHeight } = videoElement;\n        const {\n            height: canvasHeight,\n            width: canvasWidth\n        } = this._canvasEl;\n        const cavnasContext = this._canvasEl.getContext('2d');\n\n        if (this.props.orientationFit === ORIENTATION.LANDSCAPE) {\n            const heightScaledToFit = (canvasWidth / videoWidth) * videoHeight;\n\n            cavnasContext.drawImage(\n                videoElement, 0, 0, canvasWidth, heightScaledToFit);\n        } else {\n            const widthScaledToFit = (canvasHeight / videoHeight) * videoWidth;\n\n            cavnasContext.drawImage(\n                videoElement, 0, 0, widthScaledToFit, canvasHeight);\n        }\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated LargeVideoBackground props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _shouldDisplayTileView: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    return {\n        _shouldDisplayTileView: shouldDisplayTileView(state)\n    };\n}\n\n\nexport default connect(_mapStateToProps)(LargeVideoBackground);\n\n","// @flow\n\nimport { CONFERENCE_JOINED } from '../base/conference';\nimport {\n    DOMINANT_SPEAKER_CHANGED,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_LEFT,\n    PIN_PARTICIPANT,\n    getLocalParticipant\n} from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\nimport {\n    getTrackByJitsiTrack,\n    TRACK_ADDED,\n    TRACK_REMOVED,\n    TRACK_UPDATED\n} from '../base/tracks';\n\nimport { selectParticipant, selectParticipantInLargeVideo } from './actions';\n\n/**\n * Middleware that catches actions related to participants and tracks and\n * dispatches an action to select a participant depicted by LargeVideo.\n *\n * @param {Store} store - Redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case DOMINANT_SPEAKER_CHANGED: {\n        const localParticipant = getLocalParticipant(store.getState());\n\n        if (localParticipant && localParticipant.id !== action.participant.id) {\n            store.dispatch(selectParticipantInLargeVideo());\n        }\n\n        break;\n    }\n    case PARTICIPANT_JOINED:\n    case PARTICIPANT_LEFT:\n    case PIN_PARTICIPANT:\n    case TRACK_ADDED:\n    case TRACK_REMOVED:\n        store.dispatch(selectParticipantInLargeVideo());\n        break;\n\n    case CONFERENCE_JOINED:\n        // Ensure a participant is selected on conference join. This addresses\n        // the case where video tracks were received before CONFERENCE_JOINED\n        // fired; without the conference selection may not happen.\n        store.dispatch(selectParticipant());\n        break;\n\n    case TRACK_UPDATED:\n        // In order to minimize re-calculations, we need to select participant\n        // only if the videoType of the current participant rendered in\n        // LargeVideo has changed.\n        if ('videoType' in action.track) {\n            const state = store.getState();\n            const track\n                = getTrackByJitsiTrack(\n                    state['features/base/tracks'],\n                    action.track.jitsiTrack);\n            const participantId = state['features/large-video'].participantId;\n\n            (track.participantId === participantId)\n                && store.dispatch(selectParticipant());\n        }\n        break;\n    }\n\n    return result;\n});\n","// @flow\n\nimport { PARTICIPANT_ID_CHANGED } from '../base/participants';\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    SELECT_LARGE_VIDEO_PARTICIPANT,\n    UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION\n} from './actionTypes';\n\nReducerRegistry.register('features/large-video', (state = {}, action) => {\n    switch (action.type) {\n\n    // When conference is joined, we update ID of local participant from default\n    // 'local' to real ID. However, in large video we might have already\n    // selected 'local' as participant on stage. So in this case we must update\n    // ID of participant on stage to match ID in 'participants' state to avoid\n    // additional changes in state and (re)renders.\n    case PARTICIPANT_ID_CHANGED:\n        if (state.participantId === action.oldValue) {\n            return {\n                ...state,\n                participantId: action.newValue\n            };\n        }\n        break;\n\n    case SELECT_LARGE_VIDEO_PARTICIPANT:\n        return {\n            ...state,\n            participantId: action.participantId\n        };\n\n    case UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION:\n        return {\n            ...state,\n            resolution: action.resolution\n        };\n    }\n\n    return state;\n});\n","// @flow\n\nimport { StateListenerRegistry } from '../base/redux';\nimport VideoLayout from '../../../modules/UI/videolayout/VideoLayout';\n\n/**\n * Updates the on stage participant video.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/large-video'].participantId,\n    /* listener */ participantId => {\n        VideoLayout.updateLargeVideo(participantId, true);\n    }\n);\n","export * from './actions';\nexport * from './components';\n\nimport './middleware';\nimport './reducer';\nimport './subscriber';\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/audio-only');\n","// @flow\n\nimport UIEvents from '../../../../service/UI/UIEvents';\n\nimport { createAudioOnlyChangedEvent, sendAnalytics } from '../../analytics';\n\nimport { SET_AUDIO_ONLY } from './actionTypes';\nimport logger from './logger';\n\nimport type { Dispatch } from 'redux';\n\ndeclare var APP: Object;\n\n/**\n * Sets the audio-only flag for the current JitsiConference.\n *\n * @param {boolean} audioOnly - True if the conference should be audio only;\n * false, otherwise.\n * @param {boolean} ensureVideoTrack - Define if conference should ensure\n * to create a video track.\n * @returns {{\n *     type: SET_AUDIO_ONLY,\n *     audioOnly: boolean,\n *     ensureVideoTrack: boolean\n * }}\n */\nexport function setAudioOnly(audioOnly: boolean, ensureVideoTrack: boolean = false) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { enabled: oldValue } = getState()['features/base/audio-only'];\n\n        if (oldValue !== audioOnly) {\n            sendAnalytics(createAudioOnlyChangedEvent(audioOnly));\n            logger.log(`Audio-only ${audioOnly ? 'enabled' : 'disabled'}`);\n\n            dispatch({\n                type: SET_AUDIO_ONLY,\n                audioOnly,\n                ensureVideoTrack\n            });\n\n            if (typeof APP !== 'undefined') {\n                // TODO This should be a temporary solution that lasts only until video\n                // tracks and all ui is moved into react/redux on the web.\n                APP.UI.emitEvent(UIEvents.TOGGLE_AUDIO_ONLY, audioOnly);\n            }\n        }\n    };\n}\n\n/**\n * Toggles the audio-only flag for the current JitsiConference.\n *\n * @returns {Function}\n */\nexport function toggleAudioOnly() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { enabled } = getState()['features/base/audio-only'];\n\n        return dispatch(setAudioOnly(!enabled, true));\n    };\n}\n","// @flow\n\nimport { ReducerRegistry } from '../redux';\n\nimport { SET_AUDIO_ONLY } from './actionTypes';\n\n\nconst DEFAULT_STATE = {\n    enabled: false\n};\n\n\nReducerRegistry.register('features/base/audio-only', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case SET_AUDIO_ONLY:\n        return {\n            ...state,\n            enabled: action.audioOnly\n        };\n    default:\n        return state;\n    }\n});\n","// @flow\n\nexport * from './actions';\nexport * from './actionTypes';\n\nimport './reducer';\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction $getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = $getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  var args = [];\n  for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    ReflectApply(this.listener, this.target, args);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      if (typeof listener !== 'function') {\n        throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n      }\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      if (typeof listener !== 'function') {\n        throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n      }\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}","// @flow\n\n/**\n * The type of (redux) action to add known domains to the list of domains known\n * to the feature base/known-domains.\n *\n * {\n *     type: ADD_KNOWN_DOMAINS,\n *     knownDomains: Array<string>\n * }\n */\nexport const ADD_KNOWN_DOMAINS = 'ADD_KNOWN_DOMAINS';\n","// @flow\n\nimport { ADD_KNOWN_DOMAINS } from './actionTypes';\n\n/**\n * Creates a (redux) action to add known domains to the list of domains known to\n * the feature base/known-domains.\n *\n * @param {string | Array<string>} knownDomains - The known domain(s) to add to\n * the list of domains known to the feature base/known-domains.\n * @returns {{\n *     type: ADD_KNOWN_DOMAINS,\n *     knownDomains: Array<string>\n * }}\n */\nexport function addKnownDomains(knownDomains: string | Array<string>) {\n    return {\n        type: ADD_KNOWN_DOMAINS,\n        knownDomains:\n            typeof knownDomains === 'string' ? [ knownDomains ] : knownDomains\n    };\n}\n","// @flow\n\nimport { getDefaultURL } from '../../app';\n\nimport { APP_WILL_MOUNT } from '../app';\nimport { SET_ROOM } from '../conference';\nimport { MiddlewareRegistry } from '../redux';\nimport { parseURIString } from '../util';\n\nimport { addKnownDomains } from './actions';\n\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        _appWillMount(store);\n        break;\n\n    case SET_ROOM:\n        _setRoom(store);\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Adds the domain of the app's {@code defaultURL} to the list of domains known\n * to the feature base/known-domains.\n *\n * @param {Object} store - The redux store.\n * @private\n * @returns {Promise}\n */\nfunction _appWillMount({ dispatch, getState }) {\n    const defaultURL = parseURIString(getDefaultURL(getState));\n\n    dispatch(addKnownDomains(defaultURL.host));\n}\n\n/**\n * Adds the domain of {@code locationURL} to the list of domains known to the\n * feature base/known-domains.\n *\n * @param {Object} store - The redux store.\n * @private\n * @returns {Promise}\n */\nfunction _setRoom({ dispatch, getState }) {\n    const { locationURL } = getState()['features/base/connection'];\n    let host;\n\n    locationURL\n        && (host = locationURL.host)\n        && dispatch(addKnownDomains(host));\n}\n","// @flow\n\nimport { APP_WILL_MOUNT } from '../app';\nimport { ReducerRegistry } from '../redux';\nimport { PersistenceRegistry } from '../storage';\n\nimport { ADD_KNOWN_DOMAINS } from './actionTypes';\n\n/**\n * The default list of domains known to the feature base/known-domains.\n * Generally, it should be in sync with the domains associated with the app\n * through its manifest (in other words, Universal Links, deep linking). Anyway,\n * we need a hardcoded list because it has proven impossible to programmatically\n * read the information out of the app's manifests: App Store strips the\n * associated domains manifest out of the app so it's never downloaded on the\n * client and we did not spend a lot of effort to read the associated domains\n * out of the Andorid manifest.\n */\nexport const DEFAULT_STATE = [\n    'alpha.jitsi.net',\n    'beta.meet.jit.si',\n    'meet.jit.si',\n    '8x8.vc'\n];\n\nconst STORE_NAME = 'features/base/known-domains';\n\nPersistenceRegistry.register(STORE_NAME);\n\nReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case ADD_KNOWN_DOMAINS:\n        return _addKnownDomains(state, action.knownDomains);\n\n    case APP_WILL_MOUNT:\n        // In case persistence has deserialized a weird redux state:\n        return _addKnownDomains(state, DEFAULT_STATE);\n\n    default:\n        return state;\n    }\n});\n\n/**\n * Adds an array of known domains to the list of domains known to the feature\n * base/known-domains.\n *\n * @param {Object} state - The redux state.\n * @param {Array<string>} knownDomains - The array of known domains to add to\n * the list of domains known to the feature base/known-domains.\n * @private\n * @returns {Object} The next redux state.\n */\nfunction _addKnownDomains(state, knownDomains) {\n    // In case persistence has deserialized a weird redux state:\n    let nextState = Array.isArray(state) ? state : [];\n\n    if (Array.isArray(knownDomains)) {\n        nextState = Array.from(state);\n        for (let knownDomain of knownDomains) {\n            knownDomain = knownDomain.toLowerCase();\n            !nextState.includes(knownDomain) && nextState.push(knownDomain);\n        }\n    }\n\n    return nextState;\n}\n","export * from './actions';\nexport * from './actionTypes';\n\nimport './middleware';\nimport './reducer';\n","// @flow\n\n/**\n * Action type to set the ID of the active modal (or undefined if needs to be hidden).\n */\nexport const SET_ACTIVE_MODAL_ID = 'SET_ACTIVE_MODAL_ID';\n","// @flow\n\nimport { SET_ACTIVE_MODAL_ID } from './actionTypes';\n\n/**\n * Action to set the ID of the active modal (or undefined if needs to be hidden).\n *\n * @param {string} activeModalId - The new modal ID or undefined.\n * @param {Object} modalProps - The props to pass to the modal.\n * @returns {{\n *     activeModalId: string,\n *     type: SET_ACTIVE_MODAL_ID\n * }}\n */\nexport function setActiveModalId(activeModalId: ?string, modalProps: Object = {}) {\n    return {\n        activeModalId,\n        modalProps,\n        type: SET_ACTIVE_MODAL_ID\n    };\n}\n","// @flow\n\nimport { ReducerRegistry } from '../redux';\n\nimport { SET_ACTIVE_MODAL_ID } from './actionTypes';\n\nReducerRegistry.register('features/base/modal', (state = {}, action) => {\n    switch (action.type) {\n    case SET_ACTIVE_MODAL_ID:\n        return {\n            ...state,\n            activeModalId: action.activeModalId,\n            modalProps: action.modalProps\n        };\n    }\n\n    return state;\n});\n","// @flow\n\nimport { Component } from 'react';\n\nexport const JitsiModal = Component;\n\n","// @flow\n\nimport './reducer';\n\nexport * from './actions';\nexport * from './actionTypes';\nexport * from './components';\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n","/**\n * Notifies interested parties that hangup procedure will start.\n */\nexport const BEFORE_HANGUP = 'conference.before_hangup';\n\n/**\n * Notifies interested parties that desktop sharing enable/disable state is\n * changed.\n */\nexport const DESKTOP_SHARING_ENABLED_CHANGED\n    = 'conference.desktop_sharing_enabled_changed';\n","// @flow\n\nimport { FieldTextStateless as TextField } from '@atlaskit/field-text';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { setPassword } from '../../base/conference';\nimport { Dialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { connect } from '../../base/redux';\n\nimport { _cancelPasswordRequiredPrompt } from '../actions';\n\n/**\n * The type of the React {@code Component} props of\n * {@link PasswordRequiredPrompt}.\n */\ntype Props = {\n\n    /**\n     * The JitsiConference which requires a password.\n     */\n    conference: Object,\n\n    /**\n     * The redux store's {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * The translate function.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of\n * {@link PasswordRequiredPrompt}.\n */\ntype State = {\n\n    /**\n     * The password entered by the local participant.\n     */\n    password: string\n}\n\n/**\n * Implements a React Component which prompts the user when a password is\n * required to join a conference.\n */\nclass PasswordRequiredPrompt extends Component<Props, State> {\n    state = {\n        password: ''\n    };\n\n    /**\n     * Initializes a new PasswordRequiredPrompt instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onPasswordChanged = this._onPasswordChanged.bind(this);\n        this._onCancel = this._onCancel.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                disableBlanketClickDismiss = { true }\n                isModal = { false }\n                onCancel = { this._onCancel }\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.passwordRequired'\n                width = 'small'>\n                { this._renderBody() }\n            </Dialog>\n        );\n    }\n\n    /**\n     * Display component in dialog body.\n     *\n     * @returns {ReactElement}\n     * @protected\n     */\n    _renderBody() {\n        return (\n            <div>\n                <TextField\n                    autoFocus = { true }\n                    compact = { true }\n                    label = { this.props.t('dialog.passwordLabel') }\n                    name = 'lockKey'\n                    onChange = { this._onPasswordChanged }\n                    shouldFitContainer = { true }\n                    type = 'text'\n                    value = { this.state.password } />\n            </div>\n        );\n    }\n\n    _onPasswordChanged: ({ target: { value: * }}) => void;\n\n    /**\n     * Notifies this dialog that password has changed.\n     *\n     * @param {Object} event - The details of the notification/event.\n     * @private\n     * @returns {void}\n     */\n    _onPasswordChanged({ target: { value } }) {\n        this.setState({\n            password: value\n        });\n    }\n\n    _onCancel: () => boolean;\n\n    /**\n     * Dispatches action to cancel and dismiss this dialog.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _onCancel() {\n\n        this.props.dispatch(\n            _cancelPasswordRequiredPrompt(this.props.conference));\n\n        return true;\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Dispatches action to submit value from this dialog.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _onSubmit() {\n        const { conference } = this.props;\n\n        // We received that password is required, but user is trying anyway to\n        // login without a password. Mark the room as not locked in case she\n        // succeeds (maybe someone removed the password meanwhile). If it is\n        // still locked, another password required will be received and the room\n        // again will be marked as locked.\n        this.props.dispatch(\n            setPassword(conference, conference.join, this.state.password));\n\n        // We have used the password so let's clean it.\n        this.setState({\n            password: undefined\n        });\n\n        return true;\n    }\n}\n\nexport default translate(connect()(PasswordRequiredPrompt));\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    appNavigate,\n    maybeRedirectToWelcomePage\n} from '../app';\nimport {\n    conferenceLeft,\n    JITSI_CONFERENCE_URL_KEY,\n    setPassword\n} from '../base/conference';\nimport { hideDialog, openDialog } from '../base/dialog';\nimport { PasswordRequiredPrompt, RoomLockPrompt } from './components';\n\ndeclare var APP: Object;\n\n/**\n * Begins a (user) request to lock a specific conference/room.\n *\n * @param {JitsiConference|undefined} conference - The JitsiConference to lock\n * if specified or undefined if the current JitsiConference is to be locked.\n * @returns {Function}\n */\nexport function beginRoomLockRequest(conference: ?Object) {\n    return (dispatch: Function, getState: Function) => {\n        if (typeof conference === 'undefined') {\n            // eslint-disable-next-line no-param-reassign\n            conference = getState()['features/base/conference'].conference;\n        }\n        if (conference) {\n            const passwordNumberOfDigits = getState()['features/base/config'].roomPasswordNumberOfDigits;\n\n            dispatch(openDialog(RoomLockPrompt, {\n                conference,\n                passwordNumberOfDigits }));\n        }\n    };\n}\n\n/**\n * Cancels a prompt for a password to join a specific conference/room.\n *\n * @param {JitsiConference} conference - The {@code JitsiConference} requesting\n * the password to join.\n * @protected\n * @returns {Function}\n */\nexport function _cancelPasswordRequiredPrompt(conference: Object) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n\n        if (typeof APP !== 'undefined') {\n            // when we are redirecting the library should handle any\n            // unload and clean of the connection.\n            APP.API.notifyReadyToClose();\n            dispatch(maybeRedirectToWelcomePage());\n\n            return;\n        }\n\n        // Canceling PasswordRequiredPrompt is to navigate the app/user to\n        // WelcomePage. In other words, the canceling invalidates the\n        // locationURL. Make sure that the canceling indeed has the intent to\n        // invalidate the locationURL.\n        const state = getState();\n\n        if (conference === state['features/base/conference'].passwordRequired\n                && conference[JITSI_CONFERENCE_URL_KEY]\n                    === state['features/base/connection'].locationURL) {\n            // XXX The error associated with CONFERENCE_FAILED was marked as\n            // recoverable by the feature room-lock and, consequently,\n            // recoverable-aware features such as mobile's external-api did not\n            // deliver the CONFERENCE_FAILED to the SDK clients/consumers. Since\n            // the app/user is going to nativate to WelcomePage, the SDK\n            // clients/consumers need an event.\n            dispatch(conferenceLeft(conference));\n\n            dispatch(appNavigate(undefined));\n        }\n    };\n}\n\n/**\n * Ends a (user) request to lock a specific conference/room.\n *\n * @param {JitsiConference} conference - The JitsiConference to lock.\n * @param {string|undefined} password - The password with which the specified\n * conference is to be locked or undefined to cancel the (user) request to lock\n * the specified conference.\n * @returns {Function}\n */\nexport function endRoomLockRequest(\n        conference: { lock: Function },\n        password: ?string) {\n    return (dispatch: Function) => {\n        const setPassword_\n            = password\n                ? dispatch(setPassword(conference, conference.lock, password))\n                : Promise.resolve();\n        const endRoomLockRequest_ = () => dispatch(hideDialog(RoomLockPrompt));\n\n        setPassword_.then(endRoomLockRequest_, endRoomLockRequest_);\n    };\n}\n\n/**\n * Begins a prompt for a password to join a specific conference/room.\n *\n * @param {JitsiConference} conference - The {@code JitsiConference}\n * requesting the password to join.\n * @protected\n * @returns {{\n *     type: OPEN_DIALOG,\n *     component: Component,\n *     props: PropTypes\n * }}\n */\nexport function _openPasswordRequiredPrompt(conference: Object) {\n    return openDialog(PasswordRequiredPrompt, { conference });\n}\n\n/**\n * Unlocks the current jitsi conference.\n *\n * @returns {Function}\n */\nexport function unlockRoom() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { conference } = getState()['features/base/conference'];\n\n        return dispatch(setPassword(\n            conference,\n            conference.lock,\n            ''\n        ));\n    };\n}\n","// @flow\n\nimport { MEETING_PASSWORD_ENABLED, getFeatureFlag } from '../../base/flags';\nimport { translate } from '../../base/i18n';\nimport { IconRoomLock, IconRoomUnlock } from '../../base/icons';\nimport { isLocalParticipantModerator } from '../../base/participants';\nimport { connect } from '../../base/redux';\nimport { AbstractButton } from '../../base/toolbox';\nimport type { AbstractButtonProps } from '../../base/toolbox';\n\nimport { beginRoomLockRequest, unlockRoom } from '../actions';\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether the current local participant is a moderator, therefore is\n     * allowed to lock or unlock the conference.\n     */\n    _localParticipantModerator: boolean,\n\n    /**\n     * Whether the current conference is locked or not.\n     */\n    _locked: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\n/**\n * An implementation of a button for locking / unlocking a room.\n */\nclass RoomLockButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.lockRoom';\n    icon = IconRoomLock;\n    label = 'dialog.lockRoom';\n    toggledIcon = IconRoomUnlock;\n    toggledLabel = 'dialog.unlockRoom';\n\n    /**\n     * Handles clicking / pressing the button.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, _locked } = this.props;\n\n        if (_locked) {\n            dispatch(unlockRoom());\n        } else {\n            dispatch(beginRoomLockRequest());\n        }\n    }\n\n    /**\n     * Indicates whether this button is disabled or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return !this.props._localParticipantModerator;\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._locked;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code RoomLockButton} component.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The properties explicitly passed to the component instance.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state, ownProps): Object {\n    const { conference, locked } = state['features/base/conference'];\n    const enabled = getFeatureFlag(state, MEETING_PASSWORD_ENABLED, true);\n    const { visible = enabled } = ownProps;\n\n    return {\n        _localParticipantModerator: Boolean(conference && isLocalParticipantModerator(state)),\n        _locked: Boolean(conference && locked),\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(RoomLockButton));\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/room-lock');\n","// @flow\n\nimport {\n    CONFERENCE_FAILED,\n    CONFERENCE_JOINED,\n    LOCK_STATE_CHANGED,\n    SET_PASSWORD_FAILED\n} from '../base/conference';\nimport { hideDialog } from '../base/dialog';\nimport { JitsiConferenceErrors } from '../base/lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../base/redux';\nimport {\n    NOTIFICATION_TIMEOUT,\n    showNotification\n} from '../notifications';\nimport UIEvents from '../../../service/UI/UIEvents';\n\nimport { _openPasswordRequiredPrompt } from './actions';\nimport { PasswordRequiredPrompt, RoomLockPrompt } from './components';\nimport { LOCKED_REMOTELY } from './constants';\nimport logger from './logger';\n\ndeclare var APP: Object;\n\n/**\n * Middleware that captures conference failed and checks for password required\n * error and requests a dialog for user to enter password.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONFERENCE_FAILED:\n        return _conferenceFailed(store, next, action);\n\n    case CONFERENCE_JOINED:\n        return _conferenceJoined(store, next, action);\n\n    case LOCK_STATE_CHANGED: {\n        // TODO Remove this logic when all components interested in the lock\n        // state change event are moved into react/redux.\n        if (typeof APP !== 'undefined') {\n            APP.UI.emitEvent(UIEvents.TOGGLE_ROOM_LOCK, action.locked);\n        }\n\n        const previousLockedState = store.getState()['features/base/conference'].locked;\n\n        const result = next(action);\n\n        const currentLockedState = store.getState()['features/base/conference'].locked;\n\n        if (currentLockedState === LOCKED_REMOTELY) {\n            store.dispatch(\n                showNotification({\n                    titleKey: 'notify.passwordSetRemotely'\n                }, NOTIFICATION_TIMEOUT));\n        } else if (previousLockedState === LOCKED_REMOTELY && !currentLockedState) {\n            store.dispatch(\n                showNotification({\n                    titleKey: 'notify.passwordRemovedRemotely'\n                }, NOTIFICATION_TIMEOUT));\n        }\n\n        return result;\n    }\n    case SET_PASSWORD_FAILED:\n        return _setPasswordFailed(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Handles cleanup of lock prompt state when a conference is joined.\n *\n * @param {Store} store - The redux store in which the specified action is being\n * dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The redux action {@code CONFERENCE_JOINED} which\n * specifies the details associated with joining the conference.\n * @private\n * @returns {*}\n */\nfunction _conferenceJoined({ dispatch }, next, action) {\n    dispatch(hideDialog(PasswordRequiredPrompt));\n    dispatch(hideDialog(RoomLockPrompt));\n\n    return next(action);\n}\n\n/**\n * Handles errors that occur when a conference fails.\n *\n * @param {Store} store - The redux store in which the specified action is being\n * dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The redux action {@code CONFERENCE_FAILED} which\n * specifies the details associated with the error and the failed conference.\n * @private\n * @returns {*}\n */\nfunction _conferenceFailed({ dispatch }, next, action) {\n    const { conference, error } = action;\n\n    if (conference && error.name === JitsiConferenceErrors.PASSWORD_REQUIRED) {\n        // XXX The feature room-lock affords recovery after CONFERENCE_FAILED\n        // caused by JitsiConferenceErrors.PASSWORD_REQUIRED.\n        if (typeof error.recoverable === 'undefined') {\n            error.recoverable = true;\n        }\n        if (error.recoverable) {\n            dispatch(_openPasswordRequiredPrompt(conference));\n        }\n    } else {\n        dispatch(hideDialog(PasswordRequiredPrompt));\n        dispatch(hideDialog(RoomLockPrompt));\n    }\n\n    return next(action);\n}\n\n/**\n * Handles errors that occur when a password fails to be set.\n *\n * @param {Store} store - The redux store in which the specified action is being\n * dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The redux action {@code SET_PASSWORD_ERROR} which\n * has the error type that should be handled.\n * @private\n * @returns {*}\n */\nfunction _setPasswordFailed(store, next, action) {\n    if (typeof APP !== 'undefined') {\n        // TODO Remove this logic when displaying of error messages on web is\n        // handled through react/redux.\n        const { error } = action;\n        let descriptionKey;\n        let titleKey;\n\n        if (error === JitsiConferenceErrors.PASSWORD_NOT_SUPPORTED) {\n            logger.warn('room passwords not supported');\n            descriptionKey = 'dialog.passwordNotSupported';\n            titleKey = 'dialog.passwordNotSupportedTitle';\n        } else {\n            logger.warn('setting password failed', error);\n            descriptionKey = 'dialog.lockMessage';\n            titleKey = 'dialog.lockTitle';\n        }\n        APP.UI.messageHandler.showError({\n            descriptionKey,\n            titleKey\n        });\n    }\n\n    return next(action);\n}\n","/**\n * The conference/room lock state which identifies that the password was set by\n * the current/local participant/user.\n *\n * @type {string}\n */\nexport const LOCKED_LOCALLY = 'LOCKED_LOCALLY';\n\n/**\n * The conference/room lock state which identifies that the password was set by\n * a remote participant/user.\n *\n * @type {string}\n */\nexport const LOCKED_REMOTELY = 'LOCKED_REMOTELY';\n","export * from './actions';\nexport * from './components';\nexport * from './constants';\n\nimport './middleware';\n","/**\n * The type of Redux action which updates the feature flags.\n *\n * {\n *     type: UPDATE_FLAGS,\n *     flags: Object\n * }\n *\n */\nexport const UPDATE_FLAGS = 'UPDATE_FLAGS';\n","// @flow\n\nimport { getAppProp } from '../app';\nimport { toState } from '../redux';\n\n/**\n * Gets the value of a specific feature flag.\n *\n * @param {Function|Object} stateful - The redux store or {@code getState}\n * function.\n * @param {string} flag - The name of the React {@code Component} prop of\n * the currently mounted {@code App} to get.\n * @param {*} defaultValue - A default value for the flag, in case it's not defined.\n * @returns {*} The value of the specified React {@code Compoennt} prop of the\n * currently mounted {@code App}.\n */\nexport function getFeatureFlag(stateful: Function | Object, flag: string, defaultValue: any) {\n    const state = toState(stateful)['features/base/flags'];\n\n    if (state) {\n        const value = state[flag];\n\n        if (typeof value !== 'undefined') {\n            return value;\n        }\n    }\n\n    // Maybe the value hasn't made it to the redux store yet, check the app props.\n    const flags = getAppProp(stateful, 'flags') || {};\n\n    return flags[flag] || defaultValue;\n}\n","// @flow\n\nimport _ from 'lodash';\n\nimport { ReducerRegistry } from '../redux';\n\nimport { UPDATE_FLAGS } from './actionTypes';\n\n/**\n * Default state value for the feature flags.\n */\nconst DEFAULT_STATE = {};\n\n/**\n * Reduces redux actions which handle feature flags.\n *\n * @param {State} state - The current redux state.\n * @param {Action} action - The redux action to reduce.\n * @param {string} action.type - The type of the redux action to reduce.\n * @returns {State} The next redux state that is the result of reducing the\n * specified action.\n */\nReducerRegistry.register('features/base/flags', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case UPDATE_FLAGS: {\n        const newState = _.merge({}, state, action.flags);\n\n        return _.isEqual(state, newState) ? state : newState;\n    }\n    }\n\n    return state;\n});\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './constants';\nexport * from './functions';\n\nimport './reducer';\n","// @flow\n\n/**\n * Flag indicating if add-people functionality should be enabled.\n * Default: enabled (true).\n */\nexport const ADD_PEOPLE_ENABLED = 'add-people.enabled';\n\n/**\n * Flag indicating if calendar integration should be enabled.\n * Default: enabled (true) on Android, auto-detected on iOS.\n */\nexport const CALENDAR_ENABLED = 'calendar.enabled';\n\n/**\n * Flag indicating if call integration (CallKit on iOS, ConnectionService on Android)\n * should be enabled.\n * Default: enabled (true).\n */\nexport const CALL_INTEGRATION_ENABLED = 'call-integration.enabled';\n\n/**\n * Flag indicating if chat should be enabled.\n * Default: enabled (true).\n */\nexport const CLOSE_CAPTIONS_ENABLED = 'close-captions.enabled';\n\n/**\n * Flag indicating if chat should be enabled.\n * Default: enabled (true).\n */\nexport const CHAT_ENABLED = 'chat.enabled';\n\n/**\n * Flag indicating if invite functionality should be enabled.\n * Default: enabled (true).\n */\nexport const INVITE_ENABLED = 'invite.enabled';\n\n/**\n * Flag indicating if recording should be enabled in iOS.\n * Default: disabled (false).\n */\nexport const IOS_RECORDING_ENABLED = 'ios.recording.enabled';\n\n/**\n * Flag indicating if live-streaming should be enabled.\n * Default: auto-detected.\n */\nexport const LIVE_STREAMING_ENABLED = 'live-streaming.enabled';\n\n/**\n * Flag indicating if displaying the meeting name should be enabled.\n * Default: enabled (true).\n */\nexport const MEETING_NAME_ENABLED = 'meeting-name.enabled';\n\n/**\n * Flag indicating if the meeting password button should be enabled.\n * Note that this flag just decides on the buttton, if a meeting has a password\n * set, the password ddialog will still show up.\n * Default: enabled (true).\n */\nexport const MEETING_PASSWORD_ENABLED = 'meeting-password.enabled';\n\n/**\n * Flag indicating if Picture-in-Picture should be enabled.\n * Default: auto-detected.\n */\nexport const PIP_ENABLED = 'pip.enabled';\n\n/**\n * Flag indicating if raise hand feature should be enabled.\n * Default: enabled.\n */\nexport const RAISE_HAND_ENABLED = 'raise-hand.enabled';\n\n/**\n * Flag indicating if recording should be enabled.\n * Default: auto-detected.\n */\nexport const RECORDING_ENABLED = 'recording.enabled';\n\n/**\n * Flag indicating if tile view feature should be enabled.\n * Default: enabled.\n */\nexport const TILE_VIEW_ENABLED = 'tile-view.enabled';\n\n/**\n * Flag indicating if the welcome page should be enabled.\n * Default: disabled (false).\n */\nexport const WELCOME_PAGE_ENABLED = 'welcomepage.enabled';\n","/* global $, APP, interfaceConfig */\n\n/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { browser } from '../../../react/features/base/lib-jitsi-meet';\nimport { ORIENTATION, LargeVideoBackground } from '../../../react/features/large-video';\nimport { LAYOUTS, getCurrentLayout } from '../../../react/features/video-layout';\n/* eslint-enable no-unused-vars */\n\nimport Filmstrip from './Filmstrip';\nimport LargeContainer from './LargeContainer';\nimport UIEvents from '../../../service/UI/UIEvents';\nimport UIUtil from '../util/UIUtil';\n\n// FIXME should be 'video'\nexport const VIDEO_CONTAINER_TYPE = 'camera';\n\nconst FADE_DURATION_MS = 300;\n\n/**\n * Returns an array of the video dimensions, so that it keeps it's aspect\n * ratio and fits available area with it's larger dimension. This method\n * ensures that whole video will be visible and can leave empty areas.\n *\n * @param videoWidth the width of the video to position\n * @param videoHeight the height of the video to position\n * @param videoSpaceWidth the width of the available space\n * @param videoSpaceHeight the height of the available space\n * @return an array with 2 elements, the video width and the video height\n */\nfunction computeDesktopVideoSize( // eslint-disable-line max-params\n        videoWidth,\n        videoHeight,\n        videoSpaceWidth,\n        videoSpaceHeight) {\n    if (videoWidth === 0 || videoHeight === 0 || videoSpaceWidth === 0 || videoSpaceHeight === 0) {\n        // Avoid NaN values caused by devision by 0.\n        return [ 0, 0 ];\n    }\n\n    const aspectRatio = videoWidth / videoHeight;\n    let availableWidth = Math.max(videoWidth, videoSpaceWidth);\n    let availableHeight = Math.max(videoHeight, videoSpaceHeight);\n\n    if (interfaceConfig.VERTICAL_FILMSTRIP) {\n        // eslint-disable-next-line no-param-reassign\n        videoSpaceWidth -= Filmstrip.getVerticalFilmstripWidth();\n    } else {\n        // eslint-disable-next-line no-param-reassign\n        videoSpaceHeight -= Filmstrip.getFilmstripHeight();\n    }\n\n    if (availableWidth / aspectRatio >= videoSpaceHeight) {\n        availableHeight = videoSpaceHeight;\n        availableWidth = availableHeight * aspectRatio;\n    }\n\n    if (availableHeight * aspectRatio >= videoSpaceWidth) {\n        availableWidth = videoSpaceWidth;\n        availableHeight = availableWidth / aspectRatio;\n    }\n\n    return [ availableWidth, availableHeight ];\n}\n\n\n/**\n * Returns an array of the video dimensions. It respects the\n * VIDEO_LAYOUT_FIT config, to fit the video to the screen, by hiding some parts\n * of it, or to fit it to the height or width.\n *\n * @param videoWidth the original video width\n * @param videoHeight the original video height\n * @param videoSpaceWidth the width of the video space\n * @param videoSpaceHeight the height of the video space\n * @return an array with 2 elements, the video width and the video height\n */\nfunction computeCameraVideoSize( // eslint-disable-line max-params\n        videoWidth,\n        videoHeight,\n        videoSpaceWidth,\n        videoSpaceHeight,\n        videoLayoutFit) {\n    if (videoWidth === 0 || videoHeight === 0 || videoSpaceWidth === 0 || videoSpaceHeight === 0) {\n        // Avoid NaN values caused by devision by 0.\n        return [ 0, 0 ];\n    }\n\n    const aspectRatio = videoWidth / videoHeight;\n\n    switch (videoLayoutFit) {\n    case 'height':\n        return [ videoSpaceHeight * aspectRatio, videoSpaceHeight ];\n    case 'width':\n        return [ videoSpaceWidth, videoSpaceWidth / aspectRatio ];\n    case 'both': {\n        const videoSpaceRatio = videoSpaceWidth / videoSpaceHeight;\n        const maxZoomCoefficient = interfaceConfig.MAXIMUM_ZOOMING_COEFFICIENT\n            || Infinity;\n\n        if (videoSpaceRatio === aspectRatio) {\n            return [ videoSpaceWidth, videoSpaceHeight ];\n        }\n\n        let [ width, height ] = computeCameraVideoSize(\n            videoWidth,\n            videoHeight,\n            videoSpaceWidth,\n            videoSpaceHeight,\n            videoSpaceRatio < aspectRatio ? 'height' : 'width');\n        const maxWidth = videoSpaceWidth * maxZoomCoefficient;\n        const maxHeight = videoSpaceHeight * maxZoomCoefficient;\n\n        if (width > maxWidth) {\n            width = maxWidth;\n            height = width / aspectRatio;\n        } else if (height > maxHeight) {\n            height = maxHeight;\n            width = height * aspectRatio;\n        }\n\n        return [ width, height ];\n    }\n    default:\n        return [ videoWidth, videoHeight ];\n    }\n}\n\n/**\n * Returns an array of the video horizontal and vertical indents,\n * so that if fits its parent.\n *\n * @return an array with 2 elements, the horizontal indent and the vertical\n * indent\n */\nfunction getCameraVideoPosition( // eslint-disable-line max-params\n        videoWidth,\n        videoHeight,\n        videoSpaceWidth,\n        videoSpaceHeight) {\n    // Parent height isn't completely calculated when we position the video in\n    // full screen mode and this is why we use the screen height in this case.\n    // Need to think it further at some point and implement it properly.\n    if (UIUtil.isFullScreen()) {\n        // eslint-disable-next-line no-param-reassign\n        videoSpaceHeight = window.innerHeight;\n    }\n\n    const horizontalIndent = (videoSpaceWidth - videoWidth) / 2;\n    const verticalIndent = (videoSpaceHeight - videoHeight) / 2;\n\n    return { horizontalIndent,\n        verticalIndent };\n}\n\n/**\n * Container for user video.\n */\nexport class VideoContainer extends LargeContainer {\n    /**\n     *\n     */\n    get $video() {\n        return $('#largeVideo');\n    }\n\n    /**\n     *\n     */\n    get id() {\n        return this.userId;\n    }\n\n    /**\n     * Creates new VideoContainer instance.\n     * @param resizeContainer {Function} function that takes care of the size\n     * of the video container.\n     * @param emitter {EventEmitter} the event emitter that will be used by\n     * this instance.\n     */\n    constructor(resizeContainer, emitter) {\n        super();\n        this.stream = null;\n        this.userId = null;\n        this.videoType = null;\n        this.localFlipX = true;\n        this.emitter = emitter;\n        this.resizeContainer = resizeContainer;\n\n        /**\n         * Whether the background should fit the height of the container\n         * (portrait) or fit the width of the container (landscape).\n         *\n         * @private\n         * @type {string|null}\n         */\n        this._backgroundOrientation = null;\n\n        /**\n         * Flag indicates whether or not the background should be rendered.\n         * If the background will not be visible then it is hidden to save\n         * on performance.\n         * @type {boolean}\n         */\n        this._hideBackground = true;\n\n        this._isHidden = false;\n\n        /**\n         * Flag indicates whether or not the avatar is currently displayed.\n         * @type {boolean}\n         */\n        this.avatarDisplayed = false;\n        this.$avatar = $('#dominantSpeaker');\n\n        /**\n         * A jQuery selector of the remote connection message.\n         * @type {jQuery|HTMLElement}\n         */\n        this.$remoteConnectionMessage = $('#remoteConnectionMessage');\n\n        this.$remotePresenceMessage = $('#remotePresenceMessage');\n\n        /**\n         * Indicates whether or not the video stream attached to the video\n         * element has started(which means that there is any image rendered\n         * even if the video is stalled).\n         * @type {boolean}\n         */\n        this.wasVideoRendered = false;\n\n        this.$wrapper = $('#largeVideoWrapper');\n\n        /**\n         * FIXME: currently using parent() because I can't come up with name\n         * for id. We'll need to probably refactor the HTML related to the large\n         * video anyway.\n         */\n        this.$wrapperParent = this.$wrapper.parent();\n\n        this.avatarHeight = $('#dominantSpeakerAvatarContainer').height();\n\n        const onPlayingCallback = function(event) {\n            if (typeof resizeContainer === 'function') {\n                resizeContainer(event);\n            }\n            this.wasVideoRendered = true;\n        }.bind(this);\n\n        this.$video[0].onplaying = onPlayingCallback;\n\n        /**\n         * A Set of functions to invoke when the video element resizes.\n         *\n         * @private\n         */\n        this._resizeListeners = new Set();\n\n        this.$video[0].onresize = this._onResize.bind(this);\n    }\n\n    /**\n     * Adds a function to the known subscribers of video element resize\n     * events.\n     *\n     * @param {Function} callback - The subscriber to notify when the video\n     * element resizes.\n     * @returns {void}\n     */\n    addResizeListener(callback) {\n        this._resizeListeners.add(callback);\n    }\n\n    /**\n     * Obtains media stream ID of the underlying {@link JitsiTrack}.\n     * @return {string|null}\n     */\n    getStreamID() {\n        return this.stream ? this.stream.getId() : null;\n    }\n\n    /**\n     * Get size of video element.\n     * @returns {{width, height}}\n     */\n    getStreamSize() {\n        const video = this.$video[0];\n\n\n        return {\n            width: video.videoWidth,\n            height: video.videoHeight\n        };\n    }\n\n    /**\n     * Calculate optimal video size for specified container size.\n     * @param {number} containerWidth container width\n     * @param {number} containerHeight container height\n     * @returns {{availableWidth, availableHeight}}\n     */\n    _getVideoSize(containerWidth, containerHeight) {\n        const { width, height } = this.getStreamSize();\n\n        if (this.stream && this.isScreenSharing()) {\n            return computeDesktopVideoSize(width,\n                height,\n                containerWidth,\n                containerHeight);\n        }\n\n        return computeCameraVideoSize(width,\n            height,\n            containerWidth,\n            containerHeight,\n            interfaceConfig.VIDEO_LAYOUT_FIT);\n    }\n\n    /* eslint-disable max-params */\n    /**\n     * Calculate optimal video position (offset for top left corner)\n     * for specified video size and container size.\n     * @param {number} width video width\n     * @param {number} height video height\n     * @param {number} containerWidth container width\n     * @param {number} containerHeight container height\n     * @returns {{horizontalIndent, verticalIndent}}\n     */\n    getVideoPosition(width, height, containerWidth, containerHeight) {\n        let containerWidthToUse = containerWidth;\n\n        /* eslint-enable max-params */\n        if (this.stream && this.isScreenSharing()) {\n            if (interfaceConfig.VERTICAL_FILMSTRIP) {\n                containerWidthToUse -= Filmstrip.getVerticalFilmstripWidth();\n            }\n\n            return getCameraVideoPosition(width,\n                height,\n                containerWidthToUse,\n                containerHeight);\n        }\n\n        return getCameraVideoPosition(width,\n                height,\n                containerWidthToUse,\n                containerHeight);\n\n    }\n\n    /**\n     * Updates the positioning of the remote connection presence message and the\n     * connection status message which escribes that the remote user is having\n     * connectivity issues.\n     *\n     * @returns {void}\n     */\n    positionRemoteStatusMessages() {\n        this._positionParticipantStatus(this.$remoteConnectionMessage);\n        this._positionParticipantStatus(this.$remotePresenceMessage);\n    }\n\n    /**\n     * Modifies the position of the passed in jQuery object so it displays\n     * in the middle of the video container or below the avatar.\n     *\n     * @private\n     * @returns {void}\n     */\n    _positionParticipantStatus($element) {\n        if (this.avatarDisplayed) {\n            const $avatarImage = $('#dominantSpeakerAvatarContainer');\n\n            $element.css(\n                'top',\n                $avatarImage.offset().top + $avatarImage.height() + 10);\n        } else {\n            const height = $element.height();\n            const parentHeight = $element.parent().height();\n\n            $element.css('top', (parentHeight / 2) - (height / 2));\n        }\n    }\n\n    /**\n     *\n     */\n    resize(containerWidth, containerHeight, animate = false) {\n        // XXX Prevent TypeError: undefined is not an object when the Web\n        // browser does not support WebRTC (yet).\n        if (this.$video.length === 0) {\n            return;\n        }\n        const currentLayout = getCurrentLayout(APP.store.getState());\n\n        if (currentLayout === LAYOUTS.TILE_VIEW) {\n            // We don't need to resize the large video since it won't be displayed and we'll resize when returning back\n            // to stage view.\n            return;\n        }\n\n        this.positionRemoteStatusMessages();\n\n        const [ width, height ] = this._getVideoSize(containerWidth, containerHeight);\n\n        if (width === 0 || height === 0) {\n            // We don't need to set 0 for width or height since the visibility is controled by the visibility css prop\n            // on the largeVideoElementsContainer. Also if the width/height of the video element is 0 the attached\n            // stream won't be played. Normally if we attach a new stream we won't resize the video element until the\n            // stream has been played. But setting width/height to 0 will prevent the video from playing.\n\n            return;\n        }\n\n        if ((containerWidth > width) || (containerHeight > height)) {\n            this._backgroundOrientation = containerWidth > width ? ORIENTATION.LANDSCAPE : ORIENTATION.PORTRAIT;\n            this._hideBackground = false;\n        } else {\n            this._hideBackground = true;\n        }\n\n        this._updateBackground();\n\n        const { horizontalIndent, verticalIndent }\n            = this.getVideoPosition(width, height, containerWidth, containerHeight);\n\n        this.$wrapper.animate({\n            width,\n            height,\n\n            top: verticalIndent,\n            bottom: verticalIndent,\n\n            left: horizontalIndent,\n            right: horizontalIndent\n        }, {\n            queue: false,\n            duration: animate ? 500 : 0\n        });\n    }\n\n    /**\n     * Removes a function from the known subscribers of video element resize\n     * events.\n     *\n     * @param {Function} callback - The callback to remove from known\n     * subscribers of video resize events.\n     * @returns {void}\n     */\n    removeResizeListener(callback) {\n        this._resizeListeners.delete(callback);\n    }\n\n    /**\n     * Update video stream.\n     * @param {string} userID\n     * @param {JitsiTrack?} stream new stream\n     * @param {string} videoType video type\n     */\n    setStream(userID, stream, videoType) {\n        this.userId = userID;\n        if (this.stream === stream) {\n            // Handles the use case for the remote participants when the\n            // videoType is received with delay after turning on/off the\n            // desktop sharing.\n            if (this.videoType !== videoType) {\n                this.videoType = videoType;\n                this.resizeContainer();\n            }\n\n            return;\n        }\n\n        // The stream has changed, so the image will be lost on detach\n        this.wasVideoRendered = false;\n\n\n        // detach old stream\n        if (this.stream) {\n            this.stream.detach(this.$video[0]);\n        }\n\n        this.stream = stream;\n        this.videoType = videoType;\n\n        if (!stream) {\n            return;\n        }\n\n        stream.attach(this.$video[0]);\n\n        const flipX = stream.isLocal() && this.localFlipX;\n\n        this.$video.css({\n            transform: flipX ? 'scaleX(-1)' : 'none'\n        });\n\n        this._updateBackground();\n\n        // Reset the large video background depending on the stream.\n        this.setLargeVideoBackground(this.avatarDisplayed);\n    }\n\n    /**\n     * Changes the flipX state of the local video.\n     * @param val {boolean} true if flipped.\n     */\n    setLocalFlipX(val) {\n        this.localFlipX = val;\n        if (!this.$video || !this.stream || !this.stream.isLocal()) {\n            return;\n        }\n        this.$video.css({\n            transform: this.localFlipX ? 'scaleX(-1)' : 'none'\n        });\n\n        this._updateBackground();\n    }\n\n\n    /**\n     * Check if current video stream is screen sharing.\n     * @returns {boolean}\n     */\n    isScreenSharing() {\n        return this.videoType === 'desktop';\n    }\n\n    /**\n     * Show or hide user avatar.\n     * @param {boolean} show\n     */\n    showAvatar(show) {\n        // TO FIX: Video background need to be black, so that we don't have a\n        // flickering effect when scrolling between videos and have the screen\n        // move to grey before going back to video. Avatars though can have the\n        // default background set.\n        // In order to fix this code we need to introduce video background or\n        // find a workaround for the video flickering.\n        this.setLargeVideoBackground(show);\n\n        this.$avatar.css('visibility', show ? 'visible' : 'hidden');\n        this.avatarDisplayed = show;\n\n        this.emitter.emit(UIEvents.LARGE_VIDEO_AVATAR_VISIBLE, show);\n        APP.API.notifyLargeVideoVisibilityChanged(show);\n    }\n\n    /**\n     * We are doing fadeOut/fadeIn animations on parent div which wraps\n     * largeVideo, because when Temasys plugin is in use it replaces\n     * <video> elements with plugin <object> tag. In Safari jQuery is\n     * unable to store values on this plugin object which breaks all\n     * animation effects performed on it directly.\n     *\n     * TODO: refactor this since Temasys is no longer supported.\n     */\n    show() {\n        return new Promise(resolve => {\n            this.$wrapperParent.css('visibility', 'visible').fadeTo(\n                FADE_DURATION_MS,\n                1,\n                () => {\n                    this._isHidden = false;\n                    this._updateBackground();\n                    resolve();\n                }\n            );\n        });\n    }\n\n    /**\n     *\n     */\n    hide() {\n        // as the container is hidden/replaced by another container\n        // hide its avatar\n        this.showAvatar(false);\n\n        return new Promise(resolve => {\n            this.$wrapperParent.fadeTo(FADE_DURATION_MS, 0, () => {\n                this.$wrapperParent.css('visibility', 'hidden');\n                this._isHidden = true;\n                this._updateBackground();\n                resolve();\n            });\n        });\n    }\n\n    /**\n     * @return {boolean} switch on dominant speaker event if on stage.\n     */\n    stayOnStage() {\n        return false;\n    }\n\n    /**\n     * Sets the large video container background depending on the container\n     * type and the parameter indicating if an avatar is currently shown on\n     * large.\n     *\n     * @param {boolean} isAvatar - Indicates if the avatar is currently shown\n     * on the large video.\n     * @returns {void}\n     */\n    setLargeVideoBackground(isAvatar) {\n        $('#largeVideoContainer').css('background',\n            this.videoType === VIDEO_CONTAINER_TYPE && !isAvatar\n                ? '#000' : interfaceConfig.DEFAULT_BACKGROUND);\n    }\n\n    /**\n     * Callback invoked when the video element changes dimensions.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onResize() {\n        this._resizeListeners.forEach(callback => callback());\n    }\n\n    /**\n     * Attaches and/or updates a React Component to be used as a background for\n     * the large video, to display blurred video and fill up empty space not\n     * taken up by the large video.\n     *\n     * @private\n     * @returns {void}\n     */\n    _updateBackground() {\n        // Do not the background display on browsers that might experience\n        // performance issues from the presence of the background or if\n        // explicitly disabled.\n        if (interfaceConfig.DISABLE_VIDEO_BACKGROUND\n                || browser.isFirefox()\n                || browser.isSafari()) {\n            return;\n        }\n\n        ReactDOM.render(\n            <LargeVideoBackground\n                hidden = { this._hideBackground || this._isHidden }\n                mirror = {\n                    this.stream\n                    && this.stream.isLocal()\n                    && this.localFlipX\n                }\n                orientationFit = { this._backgroundOrientation }\n                videoElement = { this.$video && this.$video[0] }\n                videoTrack = { this.stream } />,\n            document.getElementById('largeVideoBackgroundContainer')\n        );\n    }\n}\n","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.size = exports.default = exports.IconWrapper = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _uuid = _interopRequireDefault(require(\"uuid\"));\n\nvar _theme = require(\"@atlaskit/theme\");\n\nvar _constants = require(\"../constants\");\n\nvar getSize = function getSize(props) {\n  if (props.size) {\n    return \"height: \".concat(_constants.sizes[props.size], \"; width: \").concat(_constants.sizes[props.size], \";\");\n  }\n\n  return null;\n};\n\nvar IconWrapper = _styledComponents.default.span.withConfig({\n  displayName: \"Icon__IconWrapper\",\n  componentId: \"dyhwwi-0\"\n})([\"\\n  \", \" color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \" max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n  /* Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"], getSize, function (p) {\n  return p.primaryColor || 'currentColor';\n}, function (p) {\n  return p.secondaryColor || _theme.colors.background;\n}, getSize);\n\nexports.IconWrapper = IconWrapper;\n\nvar Icon =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inherits2.default)(Icon, _Component);\n\n  function Icon() {\n    (0, _classCallCheck2.default)(this, Icon);\n    return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Icon).apply(this, arguments));\n  }\n\n  (0, _createClass2.default)(Icon, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          Glyph = _this$props.glyph,\n          dangerouslySetGlyph = _this$props.dangerouslySetGlyph,\n          onClick = _this$props.onClick,\n          primaryColor = _this$props.primaryColor,\n          secondaryColor = _this$props.secondaryColor,\n          size = _this$props.size; // handling the glyphs as strings\n\n      if (dangerouslySetGlyph) {\n        return _react.default.createElement(IconWrapper, {\n          onClick: onClick,\n          primaryColor: primaryColor,\n          secondaryColor: secondaryColor,\n          size: size,\n          \"aria-label\": this.props.label,\n          dangerouslySetInnerHTML: {\n            __html: Icon.insertDynamicGradientID(dangerouslySetGlyph)\n          }\n        });\n      } // handling the glyphs when passed through as functions\n\n\n      return _react.default.createElement(IconWrapper, {\n        onClick: onClick,\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        size: size,\n        \"aria-label\": this.props.label\n      }, Glyph ? _react.default.createElement(Glyph, {\n        role: \"presentation\"\n      }) : null);\n    }\n  }], [{\n    key: \"insertDynamicGradientID\",\n\n    /* Icons need unique gradient IDs across instances for different gradient definitions to work\n     * correctly.\n     * A step in the icon build process replaces linear gradient IDs and their references in paths\n     * to a placeholder string so we can replace them with a dynamic ID here.\n     * Replacing the original IDs with placeholders in the build process is more robust than not\n     * using placeholders as we do not have to rely on regular expressions to find specific element\n     * to replace.\n     */\n    value: function insertDynamicGradientID(svgStr) {\n      var id = (0, _uuid.default)();\n      var replacedSvgStr = svgStr.replace(/id=\"([^\"]+)-idPlaceholder\"/g, \"id=$1-\".concat(id)).replace(/fill=\"url\\(#([^\"]+)-idPlaceholder\\)\"/g, \"fill=\\\"url(#$1-\".concat(id, \")\\\"\"));\n      return replacedSvgStr;\n    }\n  }]);\n  return Icon;\n}(_react.Component);\n\nexports.default = Icon;\n(0, _defineProperty2.default)(Icon, \"defaultProps\", {\n  onClick: function onClick() {}\n});\nvar size = Object.keys(_constants.sizes).reduce(function (p, c) {\n  return Object.assign(p, (0, _defineProperty2.default)({}, c, c));\n}, {});\nexports.size = size;","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && key in exports) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","// @flow\n\n/**\n * The type of (redux) action which sets the audio-only flag for the current\n * conference.\n *\n * {\n *     type: SET_AUDIO_ONLY,\n *     audioOnly: boolean\n * }\n */\nexport const SET_AUDIO_ONLY = 'SET_AUDIO_ONLY';\n","import { css } from 'styled-components';\nimport { B100 } from './colors';\nexport var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\";\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return \"'SFMono-Medium', 'SF Mono', 'Segoe UI Mono', 'Roboto Mono', 'Ubuntu Mono', Menlo, Consolas, Courier, monospace\";\n};\nexport var focusRing = function focusRing() {\n  var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : B100;\n  var outlineWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : gridSize() / 4;\n  return \"\\n  &:focus {\\n    outline: none;\\n    box-shadow: 0px 0px 0px \".concat(outlineWidth, \"px \").concat(color, \";\\n  }\\n\");\n};\nexport var noFocusRing = function noFocusRing() {\n  return \"\\n  box-shadow: none;\\n\";\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 300;\n  },\n  navigation: function navigation() {\n    return 200;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n};","/**\n * An enumeration of the different display layouts supported by the application.\n *\n * @type {Object}\n */\nexport const LAYOUTS = {\n    HORIZONTAL_FILMSTRIP_VIEW: 'horizontal-filmstrip-view',\n    TILE_VIEW: 'tile-view',\n    VERTICAL_FILMSTRIP_VIEW: 'vertical-filmstrip-view'\n};\n","// @flow\n\nimport { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { getLocalParticipant } from '../../base/participants';\n\nimport { sendMessage, toggleChat } from '../actions';\n\n/**\n * The type of the React {@code Component} props of {@code AbstractChat}.\n */\nexport type Props = {\n\n    /**\n     * True if the chat window should be rendered.\n     */\n    _isOpen: boolean,\n\n    /**\n     * All the chat messages in the conference.\n     */\n    _messages: Array<Object>,\n\n    /**\n     * Function to send a text message.\n     *\n     * @protected\n     */\n    _onSendMessage: Function,\n\n    /**\n     * Function to toggle the chat window.\n     */\n    _onToggleChat: Function,\n\n    /**\n     * Whether or not to block chat access with a nickname input form.\n     */\n    _showNamePrompt: boolean,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * Implements an abstract chat panel.\n */\nexport default class AbstractChat<P: Props> extends Component<P> {}\n\n/**\n * Maps redux actions to the props of the component.\n *\n * @param {Function} dispatch - The redux action {@code dispatch} function.\n * @returns {{\n *     _onSendMessage: Function,\n *     _onToggleChat: Function\n * }}\n * @private\n */\nexport function _mapDispatchToProps(dispatch: Dispatch<any>) {\n    return {\n        /**\n         * Toggles the chat window.\n         *\n         * @returns {Function}\n         */\n        _onToggleChat() {\n            dispatch(toggleChat());\n        },\n\n        /**\n         * Sends a text message.\n         *\n         * @private\n         * @param {string} text - The text message to be sent.\n         * @returns {void}\n         * @type {Function}\n         */\n        _onSendMessage(text: string) {\n            dispatch(sendMessage(text));\n        }\n    };\n}\n\n/**\n * Maps (parts of) the redux state to {@link Chat} React {@code Component}\n * props.\n *\n * @param {Object} state - The redux store/state.\n * @private\n * @returns {{\n *     _isOpen: boolean,\n *     _messages: Array<Object>,\n *     _showNamePrompt: boolean\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    const { isOpen, messages } = state['features/chat'];\n    const _localParticipant = getLocalParticipant(state);\n\n    return {\n        _isOpen: isOpen,\n        _messages: messages,\n        _showNamePrompt: !_localParticipant.name\n    };\n}\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nvar isIE = !!document.documentElement.currentStyle;\nvar HIDDEN_TEXTAREA_STYLE = {\n  'min-height': '0',\n  'max-height': 'none',\n  height: '0',\n  visibility: 'hidden',\n  overflow: 'hidden',\n  position: 'absolute',\n  'z-index': '-1000',\n  top: '0',\n  right: '0'\n};\nvar SIZING_STYLE = ['letter-spacing', 'line-height', 'font-family', 'font-weight', 'font-size', 'font-style', 'tab-size', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-top', 'padding-right', 'padding-bottom', 'padding-left', 'border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width', 'box-sizing'];\nvar computedStyleCache = {};\nvar hiddenTextarea = document.createElement('textarea');\n\nvar forceHiddenStyles = function forceHiddenStyles(node) {\n  Object.keys(HIDDEN_TEXTAREA_STYLE).forEach(function (key) {\n    node.style.setProperty(key, HIDDEN_TEXTAREA_STYLE[key], 'important');\n  });\n};\n\n{\n  forceHiddenStyles(hiddenTextarea);\n}\n\nfunction calculateNodeHeight(uiTextNode, uid, useCache, minRows, maxRows) {\n  if (useCache === void 0) {\n    useCache = false;\n  }\n\n  if (minRows === void 0) {\n    minRows = null;\n  }\n\n  if (maxRows === void 0) {\n    maxRows = null;\n  }\n\n  if (hiddenTextarea.parentNode === null) {\n    document.body.appendChild(hiddenTextarea);\n  } // Copy all CSS properties that have an impact on the height of the content in\n  // the textbox\n\n\n  var nodeStyling = calculateNodeStyling(uiTextNode, uid, useCache);\n\n  if (nodeStyling === null) {\n    return null;\n  }\n\n  var paddingSize = nodeStyling.paddingSize,\n      borderSize = nodeStyling.borderSize,\n      boxSizing = nodeStyling.boxSizing,\n      sizingStyle = nodeStyling.sizingStyle; // Need to have the overflow attribute to hide the scrollbar otherwise\n  // text-lines will not calculated properly as the shadow will technically be\n  // narrower for content\n\n  Object.keys(sizingStyle).forEach(function (key) {\n    hiddenTextarea.style[key] = sizingStyle[key];\n  });\n  forceHiddenStyles(hiddenTextarea);\n  hiddenTextarea.value = uiTextNode.value || uiTextNode.placeholder || 'x';\n  var minHeight = -Infinity;\n  var maxHeight = Infinity;\n  var height = hiddenTextarea.scrollHeight;\n\n  if (boxSizing === 'border-box') {\n    // border-box: add border, since height = content + padding + border\n    height = height + borderSize;\n  } else if (boxSizing === 'content-box') {\n    // remove padding, since height = content\n    height = height - paddingSize;\n  } // measure height of a textarea with a single row\n\n\n  hiddenTextarea.value = 'x';\n  var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize; // Stores the value's rows count rendered in `hiddenTextarea`,\n  // regardless if `maxRows` or `minRows` props are passed\n\n  var valueRowCount = Math.floor(height / singleRowHeight);\n\n  if (minRows !== null) {\n    minHeight = singleRowHeight * minRows;\n\n    if (boxSizing === 'border-box') {\n      minHeight = minHeight + paddingSize + borderSize;\n    }\n\n    height = Math.max(minHeight, height);\n  }\n\n  if (maxRows !== null) {\n    maxHeight = singleRowHeight * maxRows;\n\n    if (boxSizing === 'border-box') {\n      maxHeight = maxHeight + paddingSize + borderSize;\n    }\n\n    height = Math.min(maxHeight, height);\n  }\n\n  var rowCount = Math.floor(height / singleRowHeight);\n  return {\n    height: height,\n    minHeight: minHeight,\n    maxHeight: maxHeight,\n    rowCount: rowCount,\n    valueRowCount: valueRowCount\n  };\n}\n\nfunction calculateNodeStyling(node, uid, useCache) {\n  if (useCache === void 0) {\n    useCache = false;\n  }\n\n  if (useCache && computedStyleCache[uid]) {\n    return computedStyleCache[uid];\n  }\n\n  var style = window.getComputedStyle(node);\n\n  if (style === null) {\n    return null;\n  }\n\n  var sizingStyle = SIZING_STYLE.reduce(function (obj, name) {\n    obj[name] = style.getPropertyValue(name);\n    return obj;\n  }, {});\n  var boxSizing = sizingStyle['box-sizing']; // probably node is detached from DOM, can't read computed dimensions\n\n  if (boxSizing === '') {\n    return null;\n  } // IE (Edge has already correct behaviour) returns content width as computed width\n  // so we need to add manually padding and border widths\n\n\n  if (isIE && boxSizing === 'border-box') {\n    sizingStyle.width = parseFloat(sizingStyle.width) + parseFloat(style['border-right-width']) + parseFloat(style['border-left-width']) + parseFloat(style['padding-right']) + parseFloat(style['padding-left']) + 'px';\n  }\n\n  var paddingSize = parseFloat(sizingStyle['padding-bottom']) + parseFloat(sizingStyle['padding-top']);\n  var borderSize = parseFloat(sizingStyle['border-bottom-width']) + parseFloat(sizingStyle['border-top-width']);\n  var nodeInfo = {\n    sizingStyle: sizingStyle,\n    paddingSize: paddingSize,\n    borderSize: borderSize,\n    boxSizing: boxSizing\n  };\n\n  if (useCache) {\n    computedStyleCache[uid] = nodeInfo;\n  }\n\n  return nodeInfo;\n}\n\nvar purgeCache = function purgeCache(uid) {\n  delete computedStyleCache[uid];\n};\n\nvar noop = function noop() {};\n\nvar uid = 0;\n\nvar TextareaAutosize =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(TextareaAutosize, _React$Component);\n\n  function TextareaAutosize(props) {\n    var _this;\n\n    _this = _React$Component.call(this, props) || this;\n\n    _this._onRef = function (node) {\n      _this._ref = node;\n      var inputRef = _this.props.inputRef;\n\n      if (typeof inputRef === 'function') {\n        inputRef(node);\n        return;\n      }\n\n      inputRef.current = node;\n    };\n\n    _this._onChange = function (event) {\n      if (!_this._controlled) {\n        _this._resizeComponent();\n      }\n\n      _this.props.onChange(event, _assertThisInitialized(_assertThisInitialized(_this)));\n    };\n\n    _this._resizeComponent = function (callback) {\n      if (callback === void 0) {\n        callback = noop;\n      }\n\n      var nodeHeight = calculateNodeHeight(_this._ref, _this._uid, _this.props.useCacheForDOMMeasurements, _this.props.minRows, _this.props.maxRows);\n\n      if (nodeHeight === null) {\n        callback();\n        return;\n      }\n\n      var height = nodeHeight.height,\n          minHeight = nodeHeight.minHeight,\n          maxHeight = nodeHeight.maxHeight,\n          rowCount = nodeHeight.rowCount,\n          valueRowCount = nodeHeight.valueRowCount;\n      _this.rowCount = rowCount;\n      _this.valueRowCount = valueRowCount;\n\n      if (_this.state.height !== height || _this.state.minHeight !== minHeight || _this.state.maxHeight !== maxHeight) {\n        _this.setState({\n          height: height,\n          minHeight: minHeight,\n          maxHeight: maxHeight\n        }, callback);\n\n        return;\n      }\n\n      callback();\n    };\n\n    _this.state = {\n      height: props.style && props.style.height || 0,\n      minHeight: -Infinity,\n      maxHeight: Infinity\n    };\n    _this._uid = uid++;\n    _this._controlled = props.value !== undefined;\n    _this._resizeLock = false;\n    return _this;\n  }\n\n  var _proto = TextareaAutosize.prototype;\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        _inputRef = _this$props.inputRef,\n        _maxRows = _this$props.maxRows,\n        _minRows = _this$props.minRows,\n        _onHeightChange = _this$props.onHeightChange,\n        _useCacheForDOMMeasurements = _this$props.useCacheForDOMMeasurements,\n        props = _objectWithoutPropertiesLoose(_this$props, [\"inputRef\", \"maxRows\", \"minRows\", \"onHeightChange\", \"useCacheForDOMMeasurements\"]);\n\n    props.style = _extends({}, props.style, {\n      height: this.state.height\n    });\n    var maxHeight = Math.max(props.style.maxHeight || Infinity, this.state.maxHeight);\n\n    if (maxHeight < this.state.height) {\n      props.style.overflow = 'hidden';\n    }\n\n    return React.createElement(\"textarea\", _extends({}, props, {\n      onChange: this._onChange,\n      ref: this._onRef\n    }));\n  };\n\n  _proto.componentDidMount = function componentDidMount() {\n    var _this2 = this;\n\n    this._resizeComponent(); // Working around Firefox bug which runs resize listeners even when other JS is running at the same moment\n    // causing competing rerenders (due to setState in the listener) in React.\n    // More can be found here - facebook/react#6324\n\n\n    this._resizeListener = function () {\n      if (_this2._resizeLock) {\n        return;\n      }\n\n      _this2._resizeLock = true;\n\n      _this2._resizeComponent(function () {\n        _this2._resizeLock = false;\n      });\n    };\n\n    window.addEventListener('resize', this._resizeListener);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n    if (prevProps !== this.props) {\n      this._resizeComponent();\n    }\n\n    if (this.state.height !== prevState.height) {\n      this.props.onHeightChange(this.state.height, this);\n    }\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    window.removeEventListener('resize', this._resizeListener);\n    purgeCache(this._uid);\n  };\n\n  return TextareaAutosize;\n}(React.Component);\n\nTextareaAutosize.defaultProps = {\n  inputRef: noop,\n  onChange: noop,\n  onHeightChange: noop,\n  useCacheForDOMMeasurements: false\n};\nprocess.env.NODE_ENV !== \"production\" ? TextareaAutosize.propTypes = {\n  inputRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n    current: PropTypes.any\n  })]),\n  maxRows: PropTypes.number,\n  minRows: PropTypes.number,\n  onChange: PropTypes.func,\n  onHeightChange: PropTypes.func,\n  style: PropTypes.object,\n  useCacheForDOMMeasurements: PropTypes.bool,\n  value: PropTypes.string\n} : void 0;\n\nexport default TextareaAutosize;\n","export const smileys = {\n    smiley1: ':)',\n    smiley2: ':(',\n    smiley3: ':D',\n    smiley4: ':+1:',\n    smiley5: ':P',\n    smiley6: ':wave:',\n    smiley7: ':blush:',\n    smiley8: ':slightly_smiling_face:',\n    smiley9: ':scream:',\n    smiley10: ':*',\n    smiley11: ':-1:',\n    smiley12: ':mag:',\n    smiley13: ':heart:',\n    smiley14: ':innocent:',\n    smiley15: ':angry:',\n    smiley16: ':angel:',\n    smiley17: ';(',\n    smiley18: ':clap:',\n    smiley19: ';)',\n    smiley20: ':beer:'\n};\n","// @flow\n\nimport React, { PureComponent } from 'react';\nimport Emoji from 'react-emoji-render';\nimport { smileys } from '../../smileys';\n\n/**\n * The type of the React {@code Component} props of {@link SmileysPanel}.\n */\ntype Props = {\n\n    /**\n     * Callback to invoke when a smiley is selected. The smiley will be passed\n     * back.\n     */\n    onSmileySelect: Function\n};\n\n/**\n * Implements a React Component showing smileys that can be be shown in chat.\n *\n * @extends Component\n */\nclass SmileysPanel extends PureComponent<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const smileyItems = Object.keys(smileys).map(smileyKey => {\n            const onSelectFunction = this._getOnSmileySelectCallback(smileyKey);\n\n            return (\n                <div\n                    className = 'smileyContainer'\n                    id = { smileyKey }\n                    key = { smileyKey }>\n                    <Emoji\n                        onClick = { onSelectFunction }\n                        onlyEmojiClassName = 'smiley'\n                        text = { smileys[smileyKey] } />\n                </div>\n            );\n        });\n\n        return (\n            <div id = 'smileysContainer'>\n                { smileyItems }\n            </div>\n        );\n    }\n\n    /**\n     * Helper method to bind a smiley's click handler.\n     *\n     * @param {string} smileyKey - The key from the {@link smileys} object\n     * that should be added to the chat message.\n     * @private\n     * @returns {Function}\n     */\n    _getOnSmileySelectCallback(smileyKey) {\n        return () => this.props.onSmileySelect(smileys[smileyKey]);\n    }\n}\n\nexport default SmileysPanel;\n","// @flow\n\nimport React, { Component } from 'react';\nimport Emoji from 'react-emoji-render';\nimport TextareaAutosize from 'react-textarea-autosize';\nimport type { Dispatch } from 'redux';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\nimport SmileysPanel from './SmileysPanel';\n\n/**\n * The type of the React {@code Component} props of {@link ChatInput}.\n */\ntype Props = {\n\n    /**\n     * Invoked to send chat messages.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Optional callback to invoke when the chat textarea has auto-resized to\n     * fit overflowing text.\n     */\n    onResize: ?Function,\n\n    /**\n     * Callback to invoke on message send.\n     */\n    onSend: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link ChatInput}.\n */\ntype State = {\n\n    /**\n     * User provided nickname when the input text is provided in the view.\n     */\n    message: string,\n\n    /**\n     * Whether or not the smiley selector is visible.\n     */\n    showSmileysPanel: boolean\n};\n\n/**\n * Implements a React Component for drafting and submitting a chat message.\n *\n * @extends Component\n */\nclass ChatInput extends Component<Props, State> {\n    _textArea: ?HTMLTextAreaElement;\n\n    state = {\n        message: '',\n        showSmileysPanel: false\n    };\n\n    /**\n     * Initializes a new {@code ChatInput} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._textArea = null;\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onDetectSubmit = this._onDetectSubmit.bind(this);\n        this._onMessageChange = this._onMessageChange.bind(this);\n        this._onSmileySelect = this._onSmileySelect.bind(this);\n        this._onToggleSmileysPanel = this._onToggleSmileysPanel.bind(this);\n        this._setTextAreaRef = this._setTextAreaRef.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        /**\n         * HTML Textareas do not support autofocus. Simulate autofocus by\n         * manually focusing.\n         */\n        this._focus();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const smileysPanelClassName = `${this.state.showSmileysPanel\n            ? 'show-smileys' : 'hide-smileys'} smileys-panel`;\n\n        return (\n            <div id = 'chat-input' >\n                <div className = 'smiley-input'>\n                    <div id = 'smileysarea'>\n                        <div id = 'smileys'>\n                            <Emoji\n                                onClick = { this._onToggleSmileysPanel }\n                                text = ':)' />\n                        </div>\n                    </div>\n                    <div className = { smileysPanelClassName }>\n                        <SmileysPanel\n                            onSmileySelect = { this._onSmileySelect } />\n                    </div>\n                </div>\n                <div className = 'usrmsg-form'>\n                    <TextareaAutosize\n                        id = 'usermsg'\n                        inputRef = { this._setTextAreaRef }\n                        maxRows = { 5 }\n                        onChange = { this._onMessageChange }\n                        onHeightChange = { this.props.onResize }\n                        onKeyDown = { this._onDetectSubmit }\n                        placeholder = { this.props.t('chat.messagebox') }\n                        value = { this.state.message } />\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Place cursor focus on this component's text area.\n     *\n     * @private\n     * @returns {void}\n     */\n    _focus() {\n        this._textArea && this._textArea.focus();\n    }\n\n    _onDetectSubmit: (Object) => void;\n\n    /**\n     * Detects if enter has been pressed. If so, submit the message in the chat\n     * window.\n     *\n     * @param {string} event - Keyboard event.\n     * @private\n     * @returns {void}\n     */\n    _onDetectSubmit(event) {\n        if (event.keyCode === 13\n            && event.shiftKey === false) {\n            event.preventDefault();\n\n            const trimmed = this.state.message.trim();\n\n            if (trimmed) {\n                this.props.onSend(trimmed);\n\n                this.setState({ message: '' });\n            }\n        }\n    }\n\n    _onMessageChange: (Object) => void;\n\n    /**\n     * Updates the known message the user is drafting.\n     *\n     * @param {string} event - Keyboard event.\n     * @private\n     * @returns {void}\n     */\n    _onMessageChange(event) {\n        this.setState({ message: event.target.value });\n    }\n\n    _onSmileySelect: (string) => void;\n\n    /**\n     * Appends a selected smileys to the chat message draft.\n     *\n     * @param {string} smileyText - The value of the smiley to append to the\n     * chat message.\n     * @private\n     * @returns {void}\n     */\n    _onSmileySelect(smileyText) {\n        this.setState({\n            message: `${this.state.message} ${smileyText}`,\n            showSmileysPanel: false\n        });\n\n        this._focus();\n    }\n\n    _onToggleSmileysPanel: () => void;\n\n    /**\n     * Callback invoked to hide or show the smileys selector.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToggleSmileysPanel() {\n        this.setState({ showSmileysPanel: !this.state.showSmileysPanel });\n\n        this._focus();\n    }\n\n    _setTextAreaRef: (?HTMLTextAreaElement) => void;\n\n    /**\n     * Sets the reference to the HTML TextArea.\n     *\n     * @param {HTMLAudioElement} textAreaElement - The HTML text area element.\n     * @private\n     * @returns {void}\n     */\n    _setTextAreaRef(textAreaElement: ?HTMLTextAreaElement) {\n        this._textArea = textAreaElement;\n    }\n}\n\nexport default translate(connect()(ChatInput));\n","// @flow\n\nimport { FieldTextStateless } from '@atlaskit/field-text';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport { updateSettings } from '../../../base/settings';\n\n/**\n * The type of the React {@code Component} props of {@DisplayNameForm}.\n */\ntype Props = {\n\n    /**\n     * Invoked to set the local participant display name.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@DisplayNameForm}.\n */\ntype State = {\n\n    /**\n     * User provided display name when the input text is provided in the view.\n     */\n    displayName: string\n};\n\n/**\n * React Component for requesting the local participant to set a display name.\n *\n * @extends Component\n */\nclass DisplayNameForm extends Component<Props, State> {\n    state = {\n        displayName: ''\n    };\n\n    /**\n     * Initializes a new {@code DisplayNameForm} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onDisplayNameChange = this._onDisplayNameChange.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <div id = 'nickname'>\n                <span>{ this.props.t('chat.nickname.title') }</span>\n                <form onSubmit = { this._onSubmit }>\n                    <FieldTextStateless\n                        autoFocus = { true }\n                        id = 'nickinput'\n                        onChange = { this._onDisplayNameChange }\n                        placeholder = { t('chat.nickname.popover') }\n                        type = 'text'\n                        value = { this.state.displayName } />\n                </form>\n            </div>\n        );\n    }\n\n    _onDisplayNameChange: (Object) => void;\n\n    /**\n     * Dispatches an action update the entered display name.\n     *\n     * @param {event} event - Keyboard event.\n     * @private\n     * @returns {void}\n     */\n    _onDisplayNameChange(event: Object) {\n        this.setState({ displayName: event.target.value });\n    }\n\n    _onSubmit: (Object) => void;\n\n    /**\n     * Dispatches an action to hit enter to change your display name.\n     *\n     * @param {event} event - Keyboard event\n     * that will check if user has pushed the enter key.\n     * @private\n     * @returns {void}\n     */\n    _onSubmit(event: Object) {\n        event.preventDefault();\n\n        // Store display name in settings\n        this.props.dispatch(updateSettings({\n            displayName: this.state.displayName\n        }));\n    }\n}\n\nexport default translate(connect()(DisplayNameForm));\n","// @flow\n\nexport const CHAT_VIEW_MODAL_ID = 'chatView';\n\n/**\n * The audio ID of the audio element for which the {@link playAudio} action is\n * triggered when new chat message is received.\n *\n * @type {string}\n */\nexport const INCOMING_MSG_SOUND_ID = 'INCOMING_MSG_SOUND';\n\n/**\n * The {@code messageType} of error (system) messages.\n */\nexport const MESSAGE_TYPE_ERROR = 'error';\n\n/**\n * The {@code messageType} of local messages.\n */\nexport const MESSAGE_TYPE_LOCAL = 'local';\n\n/**\n * The {@code messageType} of remote messages.\n */\nexport const MESSAGE_TYPE_REMOTE = 'remote';\n","// @flow\n\nimport { PureComponent } from 'react';\n\nexport type Props = {\n\n    /**\n     * The messages array to render.\n     */\n    messages: Array<Object>\n}\n\n/**\n * Abstract component to display a list of chat messages, grouped by sender.\n *\n * @extends PureComponent\n */\nexport default class AbstractMessageContainer<P: Props> extends PureComponent<P> {\n    static defaultProps = {\n        messages: []\n    };\n\n    /**\n     * Iterates over all the messages and creates nested arrays which hold\n     * consecutive messages sent by the same participant.\n     *\n     * @private\n     * @returns {Array<Array<Object>>}\n     */\n    _getMessagesGroupedBySender() {\n        const messagesCount = this.props.messages.length;\n        const groups = [];\n        let currentGrouping = [];\n        let currentGroupParticipantId;\n\n        for (let i = 0; i < messagesCount; i++) {\n            const message = this.props.messages[i];\n\n            if (message.id === currentGroupParticipantId) {\n                currentGrouping.push(message);\n            } else {\n                currentGrouping.length && groups.push(currentGrouping);\n\n                currentGrouping = [ message ];\n                currentGroupParticipantId = message.id;\n            }\n        }\n\n        currentGrouping.length && groups.push(currentGrouping);\n\n        return groups;\n    }\n}\n","// @flow\n\nimport { PureComponent } from 'react';\n\nimport { getLocalizedDateFormatter } from '../../base/i18n';\n\nimport { MESSAGE_TYPE_ERROR, MESSAGE_TYPE_LOCAL } from '../constants';\n\n/**\n * Formatter string to display the message timestamp.\n */\nconst TIMESTAMP_FORMAT = 'H:mm';\n\n/**\n * The type of the React {@code Component} props of {@code AbstractChatMessage}.\n */\nexport type Props = {\n\n    /**\n     * The representation of a chat message.\n     */\n    message: Object,\n\n    /**\n     * Whether or not the avatar image of the participant which sent the message\n     * should be displayed.\n     */\n    showAvatar: boolean,\n\n    /**\n     * Whether or not the name of the participant which sent the message should\n     * be displayed.\n     */\n    showDisplayName: boolean,\n\n    /**\n     * Whether or not the time at which the message was sent should be\n     * displayed.\n     */\n    showTimestamp: boolean,\n\n    /**\n     * Invoked to receive translated strings.\n     */\n    t: Function\n};\n\n/**\n * Abstract component to display a chat message.\n */\nexport default class AbstractChatMessage<P: Props> extends PureComponent<P> {\n    /**\n     * Returns the timestamp to display for the message.\n     *\n     * @returns {string}\n     */\n    _getFormattedTimestamp() {\n        return getLocalizedDateFormatter(new Date(this.props.message.timestamp))\n            .format(TIMESTAMP_FORMAT);\n    }\n\n    /**\n     * Generates the message text to be redered in the component.\n     *\n     * @returns {string}\n     */\n    _getMessageText() {\n        const { message } = this.props;\n\n        return message.messageType === MESSAGE_TYPE_ERROR\n            ? this.props.t('chat.error', {\n                error: message.message\n            })\n            : message.message;\n    }\n\n    /**\n     * Returns the message that is displayed as a notice for private messages.\n     *\n     * @returns {string}\n     */\n    _getPrivateNoticeMessage() {\n        const { message, t } = this.props;\n\n        return t('chat.privateNotice', {\n            recipient: message.messageType === MESSAGE_TYPE_LOCAL ? message.recipient : t('chat.you')\n        });\n    }\n}\n","// @flow\n\nimport React from 'react';\nimport { toArray } from 'react-emoji-render';\n\n\nimport { translate } from '../../../base/i18n';\nimport { Linkify } from '../../../base/react';\n\nimport { MESSAGE_TYPE_LOCAL } from '../../constants';\n\nimport AbstractChatMessage, {\n    type Props\n} from '../AbstractChatMessage';\nimport PrivateMessageButton from '../PrivateMessageButton';\n\n/**\n * Renders a single chat message.\n */\nclass ChatMessage extends AbstractChatMessage<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { message } = this.props;\n        const processedMessage = [];\n\n        // content is an array of text and emoji components\n        const content = toArray(this._getMessageText(), { className: 'smiley' });\n\n        content.forEach(i => {\n            if (typeof i === 'string') {\n                processedMessage.push(<Linkify key = { i }>{ i }</Linkify>);\n            } else {\n                processedMessage.push(i);\n            }\n        });\n\n        return (\n            <div className = 'chatmessage-wrapper'>\n                <div className = { `chatmessage ${message.privateMessage ? 'privatemessage' : ''}` }>\n                    <div className = 'replywrapper'>\n                        <div className = 'messagecontent'>\n                            { this.props.showDisplayName && this._renderDisplayName() }\n                            <div className = 'usermessage'>\n                                { processedMessage }\n                            </div>\n                            { message.privateMessage && this._renderPrivateNotice() }\n                        </div>\n                        { message.privateMessage && message.messageType !== MESSAGE_TYPE_LOCAL\n                            && (\n                                <div className = 'messageactions'>\n                                    <PrivateMessageButton\n                                        participantID = { message.id }\n                                        reply = { true }\n                                        showLabel = { false } />\n                                </div>\n                            ) }\n                    </div>\n                </div>\n                { this.props.showTimestamp && this._renderTimestamp() }\n            </div>\n        );\n    }\n\n    _getFormattedTimestamp: () => string;\n\n    _getMessageText: () => string;\n\n    _getPrivateNoticeMessage: () => string;\n\n    /**\n     * Renders the display name of the sender.\n     *\n     * @returns {React$Element<*>}\n     */\n    _renderDisplayName() {\n        return (\n            <div className = 'display-name'>\n                { this.props.message.displayName }\n            </div>\n        );\n    }\n\n    /**\n     * Renders the message privacy notice.\n     *\n     * @returns {React$Element<*>}\n     */\n    _renderPrivateNotice() {\n        return (\n            <div className = 'privatemessagenotice'>\n                { this._getPrivateNoticeMessage() }\n            </div>\n        );\n    }\n\n    /**\n     * Renders the time at which the message was sent.\n     *\n     * @returns {React$Element<*>}\n     */\n    _renderTimestamp() {\n        return (\n            <div className = 'timestamp'>\n                { this._getFormattedTimestamp() }\n            </div>\n        );\n    }\n}\n\nexport default translate(ChatMessage);\n","// @flow\n\nimport React, { Component } from 'react';\nimport ChatMessage from './ChatMessage';\n\ntype Props = {\n\n    /**\n     * Additional CSS classes to apply to the root element.\n     */\n    className: string,\n\n    /**\n     * The messages to display as a group.\n     */\n    messages: Array<Object>,\n};\n\n/**\n * Displays a list of chat messages. Will show only the display name for the\n * first chat message and the timestamp for the last chat message.\n *\n * @extends React.Component\n */\nclass ChatMessageGroup extends Component<Props> {\n    static defaultProps = {\n        className: ''\n    };\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { className, messages } = this.props;\n\n        const messagesLength = messages.length;\n\n        if (!messagesLength) {\n            return null;\n        }\n\n        return (\n            <div className = { `chat-message-group ${className}` }>\n                {\n                    messages.map((message, i) => (\n                        <ChatMessage\n                            key = { i }\n                            message = { message }\n                            showDisplayName = { i === 0 }\n                            showTimestamp = { i === messages.length - 1 } />\n                    ))\n                }\n            </div>\n        );\n    }\n}\n\nexport default ChatMessageGroup;\n","// @flow\n\nimport React from 'react';\n\nimport { MESSAGE_TYPE_REMOTE } from '../../constants';\n\nimport AbstractMessageContainer, { type Props }\n    from '../AbstractMessageContainer';\n\nimport ChatMessageGroup from './ChatMessageGroup';\n\n/**\n * Displays all received chat messages, grouped by sender.\n *\n * @extends AbstractMessageContainer\n */\nexport default class MessageContainer extends AbstractMessageContainer<Props> {\n    /**\n     * Whether or not chat has been scrolled to the bottom of the screen. Used\n     * to determine if chat should be scrolled automatically to the bottom when\n     * the {@code ChatInput} resizes.\n     */\n    _isScrolledToBottom: boolean;\n\n    /**\n     * Reference to the HTML element at the end of the list of displayed chat\n     * messages. Used for scrolling to the end of the chat messages.\n     */\n    _messagesListEndRef: Object;\n\n    /**\n     * A React ref to the HTML element containing all {@code ChatMessageGroup}\n     * instances.\n     */\n    _messageListRef: Object;\n\n    /**\n     * Initializes a new {@code MessageContainer} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code MessageContainer} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._isScrolledToBottom = true;\n\n        this._messageListRef = React.createRef();\n        this._messagesListEndRef = React.createRef();\n\n        this._onChatScroll = this._onChatScroll.bind(this);\n    }\n\n    /**\n     * Implements {@code Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const groupedMessages = this._getMessagesGroupedBySender();\n        const messages = groupedMessages.map((group, index) => {\n            const messageType = group[0] && group[0].messageType;\n\n            return (\n                <ChatMessageGroup\n                    className = { messageType || MESSAGE_TYPE_REMOTE }\n                    key = { index }\n                    messages = { group } />\n            );\n        });\n\n        return (\n            <div\n                id = 'chatconversation'\n                onScroll = { this._onChatScroll }\n                ref = { this._messageListRef }>\n                { messages }\n                <div ref = { this._messagesListEndRef } />\n            </div>\n        );\n    }\n\n    /**\n     * Scrolls to the bottom again if the instance had previously been scrolled\n     * to the bottom. This method is used when a resize has occurred below the\n     * instance and bottom scroll needs to be maintained.\n     *\n     * @returns {void}\n     */\n    maybeUpdateBottomScroll() {\n        if (this._isScrolledToBottom) {\n            this.scrollToBottom(false);\n        }\n    }\n\n    /**\n     * Automatically scrolls the displayed chat messages down to the latest.\n     *\n     * @param {boolean} withAnimation - Whether or not to show a scrolling\n     * animation.\n     * @returns {void}\n     */\n    scrollToBottom(withAnimation: boolean) {\n        this._messagesListEndRef.current.scrollIntoView({\n            behavior: withAnimation ? 'smooth' : 'auto',\n            block: 'nearest'\n        });\n    }\n\n    _getMessagesGroupedBySender: () => Array<Array<Object>>;\n\n    _onChatScroll: () => void;\n\n    /**\n     * Callback invoked to listen to the current scroll location.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onChatScroll() {\n        const element = this._messageListRef.current;\n\n        this._isScrolledToBottom\n            = element.scrollHeight - element.scrollTop === element.clientHeight;\n    }\n}\n","// @flow\n\nimport { PureComponent } from 'react';\n\nimport { getParticipantDisplayName } from '../../base/participants';\n\nimport { setPrivateMessageRecipient } from '../actions';\n\nexport type Props = {\n\n    /**\n     * Function used to translate i18n labels.\n     */\n    t: Function,\n\n    /**\n     * Function to remove the recipent setting of the chat window.\n     */\n    _onRemovePrivateMessageRecipient: Function,\n\n    /**\n     * The name of the message recipient, if any.\n     */\n    _privateMessageRecipient: ?string\n};\n\n/**\n * Abstract class for the {@code MessageRecipient} component.\n */\nexport default class AbstractMessageRecipient<P: Props> extends PureComponent<P> {\n\n}\n\n/**\n * Maps part of the props of this component to Redux actions.\n *\n * @param {Function} dispatch - The Redux dispatch function.\n * @returns {Props}\n */\nexport function _mapDispatchToProps(dispatch: Function): $Shape<Props> {\n    return {\n        _onRemovePrivateMessageRecipient: () => {\n            dispatch(setPrivateMessageRecipient());\n        }\n    };\n}\n\n/**\n * Maps part of the Redux store to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object): $Shape<Props> {\n    const { privateMessageRecipient } = state['features/chat'];\n\n    return {\n        _privateMessageRecipient:\n            privateMessageRecipient ? getParticipantDisplayName(state, privateMessageRecipient.id) : undefined\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconCancelSelection } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\n\nimport AbstractMessageRecipient, {\n    _mapDispatchToProps,\n    _mapStateToProps,\n    type Props\n} from '../AbstractMessageRecipient';\n\n/**\n * Class to implement the displaying of the recipient of the next message.\n */\nclass MessageRecipient extends AbstractMessageRecipient<Props> {\n    /**\n     * Implements {@code PureComponent#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { _privateMessageRecipient } = this.props;\n\n        if (!_privateMessageRecipient) {\n            return null;\n        }\n\n        const { t } = this.props;\n\n        return (\n            <div id = 'chat-recipient'>\n                <span>\n                    { t('chat.messageTo', {\n                        recipient: _privateMessageRecipient\n                    }) }\n                </span>\n                <div onClick = { this.props._onRemovePrivateMessageRecipient }>\n                    <Icon\n                        src = { IconCancelSelection } />\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default translate(connect(_mapStateToProps, _mapDispatchToProps)(MessageRecipient));\n","// @flow\n\nimport React from 'react';\nimport Transition from 'react-transition-group/Transition';\n\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconClose } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\n\nimport AbstractChat, {\n    _mapDispatchToProps,\n    _mapStateToProps,\n    type Props\n} from '../AbstractChat';\nimport ChatInput from './ChatInput';\nimport DisplayNameForm from './DisplayNameForm';\nimport MessageContainer from './MessageContainer';\nimport MessageRecipient from './MessageRecipient';\n\n/**\n * React Component for holding the chat feature in a side panel that slides in\n * and out of view.\n */\nclass Chat extends AbstractChat<Props> {\n\n    /**\n     * Whether or not the {@code Chat} component is off-screen, having finished\n     * its hiding animation.\n     */\n    _isExited: boolean;\n\n    /**\n     * Reference to the React Component for displaying chat messages. Used for\n     * scrolling to the end of the chat messages.\n     */\n    _messageContainerRef: Object;\n\n    /**\n     * Initializes a new {@code Chat} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._isExited = true;\n        this._messageContainerRef = React.createRef();\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._renderPanelContent = this._renderPanelContent.bind(this);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onChatInputResize = this._onChatInputResize.bind(this);\n    }\n\n    /**\n     * Implements {@code Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._scrollMessageContainerToBottom(true);\n    }\n\n    /**\n     * Implements {@code Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps) {\n        if (this.props._messages !== prevProps._messages) {\n            this._scrollMessageContainerToBottom(true);\n        } else if (this.props._isOpen && !prevProps._isOpen) {\n            this._scrollMessageContainerToBottom(false);\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Transition\n                in = { this.props._isOpen }\n                timeout = { 500 }>\n                { this._renderPanelContent }\n            </Transition>\n        );\n    }\n\n    _onChatInputResize: () => void;\n\n    /**\n     * Callback invoked when {@code ChatInput} changes height. Preserves\n     * displaying the latest message if it is scrolled to.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onChatInputResize() {\n        this._messageContainerRef.current.maybeUpdateBottomScroll();\n    }\n\n    /**\n     * Returns a React Element for showing chat messages and a form to send new\n     * chat messages.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderChat() {\n        return (\n            <>\n                <MessageContainer\n                    messages = { this.props._messages }\n                    ref = { this._messageContainerRef } />\n                <MessageRecipient />\n                <ChatInput\n                    onResize = { this._onChatInputResize }\n                    onSend = { this.props._onSendMessage } />\n            </>\n        );\n    }\n\n    /**\n     * Instantiates a React Element to display at the top of {@code Chat} to\n     * close {@code Chat}.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderChatHeader() {\n        return (\n            <div className = 'chat-header'>\n                <div\n                    className = 'chat-close'\n                    onClick = { this.props._onToggleChat }>\n                    <Icon src = { IconClose } />\n                </div>\n            </div>\n        );\n    }\n\n    _renderPanelContent: (string) => React$Node | null;\n\n    /**\n     * Renders the contents of the chat panel, depending on the current\n     * animation state provided by {@code Transition}.\n     *\n     * @param {string} state - The current display transition state of the\n     * {@code Chat} component, as provided by {@code Transition}.\n     * @private\n     * @returns {ReactElement | null}\n     */\n    _renderPanelContent(state) {\n        this._isExited = state === 'exited';\n\n        const { _isOpen, _showNamePrompt } = this.props;\n        const ComponentToRender = !_isOpen && state === 'exited'\n            ? null\n            : (\n                <>\n                    { this._renderChatHeader() }\n                    { _showNamePrompt\n                        ? <DisplayNameForm /> : this._renderChat() }\n                </>\n            );\n        let className = '';\n\n        if (_isOpen) {\n            className = 'slideInExt';\n        } else if (this._isExited) {\n            className = 'invisible';\n        }\n\n        return (\n            <div\n                className = { `sideToolbarContainer ${className}` }\n                id = 'sideToolbarContainer'>\n                { ComponentToRender }\n            </div>\n        );\n    }\n\n    /**\n     * Scrolls the chat messages so the latest message is visible.\n     *\n     * @param {boolean} withAnimation - Whether or not to show a scrolling\n     * animation.\n     * @private\n     * @returns {void}\n     */\n    _scrollMessageContainerToBottom(withAnimation) {\n        if (this._messageContainerRef.current) {\n            this._messageContainerRef.current.scrollToBottom(withAnimation);\n        }\n    }\n}\n\nexport default translate(connect(_mapStateToProps, _mapDispatchToProps)(Chat));\n","// @flow\n\nimport aliases from 'react-emoji-render/data/aliases';\nimport emojiAsciiAliases from 'react-emoji-render/data/asciiAliases';\n\nimport { escapeRegexp } from '../base/util';\n\n/**\n * An ASCII emoticon regexp array to find and replace old-style ASCII\n * emoticons (such as :O) to new Unicode representation, so then devices\n * and browsers that support them can render these natively without\n * a 3rd party component.\n *\n * NOTE: this is currently only used on mobile, but it can be used\n * on web too once we drop support for browsers that don't support\n * unicode emoji rendering.\n */\nconst EMOTICON_REGEXP_ARRAY: Array<Array<Object>> = [];\n\n(function() {\n    for (const [ key, value ] of Object.entries(aliases)) {\n        let escapedValues;\n        const asciiEmojies = emojiAsciiAliases[key];\n\n        // Adding ascii emoticons\n        if (asciiEmojies) {\n            escapedValues = asciiEmojies.map(v => escapeRegexp(v));\n        } else {\n            escapedValues = [];\n        }\n\n        // Adding slack-type emoji format\n        escapedValues.push(escapeRegexp(`:${key}:`));\n\n        const regexp = `\\\\B(${escapedValues.join('|')})\\\\B`;\n\n        EMOTICON_REGEXP_ARRAY.push([ new RegExp(regexp, 'g'), value ]);\n    }\n})();\n\n/**\n * Replaces ascii and other non-unicode emoticons with unicode emojis to let the emojis be rendered\n * by the platform native renderer.\n *\n * @param {string} message - The message to parse and replace.\n * @returns {string}\n */\nexport function replaceNonUnicodeEmojis(message: string) {\n    let replacedMessage = message;\n\n    for (const [ regexp, replaceValue ] of EMOTICON_REGEXP_ARRAY) {\n        replacedMessage = replacedMessage.replace(regexp, replaceValue);\n    }\n\n    return replacedMessage;\n}\n\n/**\n * Selector for calculating the number of unread chat messages.\n *\n * @param {Object} state - The redux state.\n * @returns {number} The number of unread messages.\n */\nexport function getUnreadCount(state: Object) {\n    const { lastReadMessage, messages } = state['features/chat'];\n    const messagesCount = messages.length;\n\n    if (!messagesCount) {\n        return 0;\n    }\n\n    if (navigator.product === 'ReactNative') {\n        // React native stores the messages in a reversed order.\n        return messages.indexOf(lastReadMessage);\n    }\n\n    const lastReadIndex = messages.lastIndexOf(lastReadMessage);\n\n    return messagesCount - (lastReadIndex + 1);\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { connect } from '../../../base/redux';\n\nimport { getUnreadCount } from '../../functions';\n\n/**\n * The type of the React {@code Component} props of {@link ChatCounter}.\n */\ntype Props = {\n\n    /**\n     * The value of to display as a count.\n     */\n    _count: number\n};\n\n/**\n * Implements a React {@link Component} which displays a count of the number of\n * unread chat messages.\n *\n * @extends Component\n */\nclass ChatCounter extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <span className = 'badge-round'>\n                <span>\n                    { this.props._count || null }\n                </span>\n            </span>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code ChatCounter}'s\n * props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _count: number\n * }}\n */\nfunction _mapStateToProps(state) {\n    return {\n        _count: getUnreadCount(state)\n    };\n}\n\nexport default connect(_mapStateToProps)(ChatCounter);\n","// @flow\n\nimport { PureComponent } from 'react';\n\nimport { sendMessage, setPrivateMessageRecipient } from '../actions';\nimport { getParticipantById } from '../../base/participants';\n\ntype Props = {\n\n    /**\n     * The message that is about to be sent.\n     */\n    message: Object,\n\n    /**\n     * The ID of the participant that we think the message may be intended to.\n     */\n    participantID: string,\n\n    /**\n     * Function to be used to translate i18n keys.\n     */\n    t: Function,\n\n    /**\n     * Prop to be invoked on sending the message.\n     */\n    _onSendMessage: Function,\n\n    /**\n     * Prop to be invoked when the user wants to set a private recipient.\n     */\n    _onSetMessageRecipient: Function,\n\n    /**\n     * The participant retreived from Redux by the participanrID prop.\n     */\n    _participant: Object\n};\n\n/**\n * Abstract class for the dialog displayed to avoid mis-sending private messages.\n */\nexport class AbstractChatPrivacyDialog extends PureComponent<Props> {\n    /**\n     * Instantiates a new instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onSendGroupMessage = this._onSendGroupMessage.bind(this);\n        this._onSendPrivateMessage = this._onSendPrivateMessage.bind(this);\n    }\n\n    _onSendGroupMessage: () => boolean;\n\n    /**\n     * Callback to be invoked for cancel action (user wants to send a group message).\n     *\n     * @returns {boolean}\n     */\n    _onSendGroupMessage() {\n        this.props._onSendMessage(this.props.message);\n\n        return true;\n    }\n\n    _onSendPrivateMessage: () => boolean;\n\n    /**\n     * Callback to be invoked for submit action (user wants to send a private message).\n     *\n     * @returns {void}\n     */\n    _onSendPrivateMessage() {\n        const { message, _onSendMessage, _onSetMessageRecipient, _participant } = this.props;\n\n        _onSetMessageRecipient(_participant);\n        _onSendMessage(message);\n\n        return true;\n    }\n}\n\n/**\n * Maps part of the props of this component to Redux actions.\n *\n * @param {Function} dispatch - The Redux dispatch function.\n * @returns {Props}\n */\nexport function _mapDispatchToProps(dispatch: Function): $Shape<Props> {\n    return {\n        _onSendMessage: (message: Object) => {\n            dispatch(sendMessage(message, true));\n        },\n\n        _onSetMessageRecipient: participant => {\n            dispatch(setPrivateMessageRecipient(participant));\n        }\n    };\n}\n\n/**\n * Maps part of the Redux store to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the component.\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props): $Shape<Props> {\n    return {\n        _participant: getParticipantById(state, ownProps.participantID)\n    };\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\nimport { AbstractChatPrivacyDialog, _mapDispatchToProps, _mapStateToProps } from '../AbstractChatPrivacyDialog';\n\n/**\n * Implements a component for the dialog displayed to avoid mis-sending private messages.\n */\nclass ChatPrivacyDialog extends AbstractChatPrivacyDialog {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                cancelKey = 'dialog.sendPrivateMessageCancel'\n                okKey = 'dialog.sendPrivateMessageOk'\n                onCancel = { this._onSendGroupMessage }\n                onSubmit = { this._onSendPrivateMessage }\n                titleKey = 'dialog.sendPrivateMessageTitle'\n                width = 'small'>\n                <div>\n                    { this.props.t('dialog.sendPrivateMessage') }\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onSendGroupMessage: () => boolean;\n\n    _onSendPrivateMessage: () => boolean;\n}\n\nexport default translate(connect(_mapStateToProps, _mapDispatchToProps)(ChatPrivacyDialog));\n","/**\n * The name of the bundled audio file which will be played for the incoming chat\n * message sound.\n *\n * @type {string}\n */\nexport const INCOMING_MSG_SOUND_FILE = 'incomingMessage.wav';\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport {\n    CONFERENCE_JOINED,\n    getCurrentConference\n} from '../base/conference';\nimport { openDialog } from '../base/dialog';\nimport {\n    JitsiConferenceErrors,\n    JitsiConferenceEvents\n} from '../base/lib-jitsi-meet';\nimport { setActiveModalId } from '../base/modal';\nimport {\n    getLocalParticipant,\n    getParticipantById,\n    getParticipantDisplayName\n} from '../base/participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\nimport { playSound, registerSound, unregisterSound } from '../base/sounds';\nimport { isButtonEnabled, showToolbox } from '../toolbox';\n\nimport { SEND_MESSAGE, SET_PRIVATE_MESSAGE_RECIPIENT } from './actionTypes';\nimport { addMessage, clearMessages, toggleChat } from './actions';\nimport { ChatPrivacyDialog } from './components';\nimport {\n    CHAT_VIEW_MODAL_ID,\n    INCOMING_MSG_SOUND_ID,\n    MESSAGE_TYPE_ERROR,\n    MESSAGE_TYPE_LOCAL,\n    MESSAGE_TYPE_REMOTE\n} from './constants';\nimport { INCOMING_MSG_SOUND_FILE } from './sounds';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig : Object;\n\n/**\n * Timeout for when to show the privacy notice after a private message was received.\n *\n * E.g. if this value is 20 secs (20000ms), then we show the privacy notice when sending a non private\n * message after we have received a private message in the last 20 seconds.\n */\nconst PRIVACY_NOTICE_TIMEOUT = 20 * 1000;\n\n/**\n * Implements the middleware of the chat feature.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const { dispatch } = store;\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        dispatch(\n                registerSound(INCOMING_MSG_SOUND_ID, INCOMING_MSG_SOUND_FILE));\n        break;\n\n    case APP_WILL_UNMOUNT:\n        dispatch(unregisterSound(INCOMING_MSG_SOUND_ID));\n        break;\n\n    case CONFERENCE_JOINED:\n        _addChatMsgListener(action.conference, store);\n        break;\n\n    case SEND_MESSAGE: {\n        const state = store.getState();\n        const { conference } = state['features/base/conference'];\n\n        if (conference) {\n            // There may be cases when we intend to send a private message but we forget to set the\n            // recipient. This logic tries to mitigate this risk.\n            const shouldSendPrivateMessageTo = _shouldSendPrivateMessageTo(state, action);\n\n            if (shouldSendPrivateMessageTo) {\n                dispatch(openDialog(ChatPrivacyDialog, {\n                    message: action.message,\n                    participantID: shouldSendPrivateMessageTo\n                }));\n            } else {\n                // Sending the message if privacy notice doesn't need to be shown.\n\n                const { privateMessageRecipient } = state['features/chat'];\n\n                if (typeof APP !== 'undefined') {\n                    APP.API.notifySendingChatMessage(action.message, Boolean(privateMessageRecipient));\n                }\n\n                if (privateMessageRecipient) {\n                    conference.sendPrivateTextMessage(privateMessageRecipient.id, action.message);\n                    _persistSentPrivateMessage(store, privateMessageRecipient.id, action.message);\n                } else {\n                    conference.sendTextMessage(action.message);\n                }\n            }\n        }\n        break;\n    }\n\n    case SET_PRIVATE_MESSAGE_RECIPIENT: {\n        Boolean(action.participant) && dispatch(setActiveModalId(CHAT_VIEW_MODAL_ID));\n        _maybeFocusField();\n        break;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Set up state change listener to perform maintenance tasks when the conference\n * is left or failed, e.g. clear messages or close the chat modal if it's left\n * open.\n */\nStateListenerRegistry.register(\n    state => getCurrentConference(state),\n    (conference, { dispatch, getState }, previousConference) => {\n        if (conference !== previousConference) {\n            // conference changed, left or failed...\n\n            if (getState()['features/chat'].isOpen) {\n                // Closes the chat if it's left open.\n                dispatch(toggleChat());\n            }\n\n            // Clear chat messages.\n            dispatch(clearMessages());\n        }\n    });\n\nStateListenerRegistry.register(\n    state => state['features/chat'].isOpen,\n    (isOpen, { dispatch }) => {\n        if (typeof APP !== 'undefined' && isOpen) {\n            dispatch(showToolbox());\n        }\n    }\n);\n\n/**\n * Registers listener for {@link JitsiConferenceEvents.MESSAGE_RECEIVED} that\n * will perform various chat related activities.\n *\n * @param {JitsiConference} conference - The conference instance on which the\n * new event listener will be registered.\n * @param {Object} store - The redux store object.\n * @private\n * @returns {void}\n */\nfunction _addChatMsgListener(conference, store) {\n    if ((typeof interfaceConfig === 'object' && interfaceConfig.filmStripOnly)\n        || (typeof APP !== 'undefined' && !isButtonEnabled('chat'))\n        || store.getState()['features/base/config'].iAmRecorder) {\n        // We don't register anything on web if we're in filmStripOnly mode, or\n        // the chat button is not enabled in interfaceConfig.\n        // or we are in iAmRecorder mode\n        return;\n    }\n\n    conference.on(\n        JitsiConferenceEvents.MESSAGE_RECEIVED,\n        (id, message, timestamp, nick) => {\n            _handleReceivedMessage(store, {\n                id,\n                message,\n                nick,\n                privateMessage: false,\n                timestamp\n            });\n        }\n    );\n\n    conference.on(\n        JitsiConferenceEvents.PRIVATE_MESSAGE_RECEIVED,\n        (id, message, timestamp) => {\n            _handleReceivedMessage(store, {\n                id,\n                message,\n                privateMessage: true,\n                timestamp,\n                nick: undefined\n            });\n        }\n    );\n\n    conference.on(\n        JitsiConferenceEvents.CONFERENCE_ERROR, (errorType, error) => {\n            errorType === JitsiConferenceErrors.CHAT_ERROR && _handleChatError(store, error);\n        });\n}\n\n/**\n * Handles a chat error received from the xmpp server.\n *\n * @param {Store} store - The Redux store.\n * @param  {string} error - The error message.\n * @returns {void}\n */\nfunction _handleChatError({ dispatch }, error) {\n    dispatch(addMessage({\n        hasRead: true,\n        messageType: MESSAGE_TYPE_ERROR,\n        message: error,\n        privateMessage: false,\n        timestamp: Date.now()\n    }));\n}\n\n/**\n * Function to handle an incoming chat message.\n *\n * @param {Store} store - The Redux store.\n * @param {Object} message - The message object.\n * @returns {void}\n */\nfunction _handleReceivedMessage({ dispatch, getState }, { id, message, nick, privateMessage, timestamp }) {\n    // Logic for all platforms:\n    const state = getState();\n    const { isOpen: isChatOpen } = state['features/chat'];\n\n    if (!isChatOpen) {\n        dispatch(playSound(INCOMING_MSG_SOUND_ID));\n    }\n\n    // Provide a default for for the case when a message is being\n    // backfilled for a participant that has left the conference.\n    const participant = getParticipantById(state, id) || {};\n    const localParticipant = getLocalParticipant(getState);\n    const displayName = participant.name || nick || getParticipantDisplayName(state, id);\n    const hasRead = participant.local || isChatOpen;\n    const timestampToDate = timestamp\n        ? new Date(timestamp) : new Date();\n    const millisecondsTimestamp = timestampToDate.getTime();\n\n    dispatch(addMessage({\n        displayName,\n        hasRead,\n        id,\n        messageType: participant.local ? MESSAGE_TYPE_LOCAL : MESSAGE_TYPE_REMOTE,\n        message,\n        privateMessage,\n        recipient: getParticipantDisplayName(state, localParticipant.id),\n        timestamp: millisecondsTimestamp\n    }));\n\n    if (typeof APP !== 'undefined') {\n        // Logic for web only:\n\n        APP.API.notifyReceivedChatMessage({\n            body: message,\n            id,\n            nick: displayName,\n            ts: timestamp\n        });\n\n        dispatch(showToolbox(4000));\n    }\n}\n\n/**\n * Focuses the chat text field on web after the message recipient was updated, if needed.\n *\n * @returns {void}\n */\nfunction _maybeFocusField() {\n    if (navigator.product !== 'ReactNative') {\n        const textField = document.getElementById('usermsg');\n\n        textField && textField.focus();\n    }\n}\n\n/**\n * Persists the sent private messages as if they were received over the muc.\n *\n * This is required as we rely on the fact that we receive all messages from the muc that we send\n * (as they are sent to everybody), but we don't receive the private messages we send to another participant.\n * But those messages should be in the store as well, otherwise they don't appear in the chat window.\n *\n * @param {Store} store - The Redux store.\n * @param {string} recipientID - The ID of the recipient the private message was sent to.\n * @param {string} message - The sent message.\n * @returns {void}\n */\nfunction _persistSentPrivateMessage({ dispatch, getState }, recipientID, message) {\n    const localParticipant = getLocalParticipant(getState);\n    const displayName = getParticipantDisplayName(getState, localParticipant.id);\n\n    dispatch(addMessage({\n        displayName,\n        hasRead: true,\n        id: localParticipant.id,\n        messageType: MESSAGE_TYPE_LOCAL,\n        message,\n        privateMessage: true,\n        recipient: getParticipantDisplayName(getState, recipientID),\n        timestamp: Date.now()\n    }));\n}\n\n/**\n * Returns the ID of the participant who we may have wanted to send the message\n * that we're about to send.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} action - The action being dispatched now.\n * @returns {string?}\n */\nfunction _shouldSendPrivateMessageTo(state, action): ?string {\n    if (action.ignorePrivacy) {\n        // Shortcut: this is only true, if we already displayed the notice, so no need to show it again.\n        return undefined;\n    }\n\n    const { messages, privateMessageRecipient } = state['features/chat'];\n\n    if (privateMessageRecipient) {\n        // We're already sending a private message, no need to warn about privacy.\n        return undefined;\n    }\n\n    if (!messages.length) {\n        // No messages yet, no need to warn for privacy.\n        return undefined;\n    }\n\n    // Platforms sort messages differently\n    const lastMessage = navigator.product === 'ReactNative'\n        ? messages[0] : messages[messages.length - 1];\n\n    if (lastMessage.messageType === MESSAGE_TYPE_LOCAL) {\n        // The sender is probably aware of any private messages as already sent\n        // a message since then. Doesn't make sense to display the notice now.\n        return undefined;\n    }\n\n    if (lastMessage.privateMessage) {\n        // We show the notice if the last received message was private.\n        return lastMessage.id;\n    }\n\n    // But messages may come rapidly, we want to protect our users from mis-sending a message\n    // even when there was a reasonable recently received private message.\n    const now = Date.now();\n    const recentPrivateMessages = messages.filter(\n        message =>\n            message.messageType !== MESSAGE_TYPE_LOCAL\n            && message.privateMessage\n            && message.timestamp + PRIVACY_NOTICE_TIMEOUT > now);\n    const recentPrivateMessage = navigator.product === 'ReactNative'\n        ? recentPrivateMessages[0] : recentPrivateMessages[recentPrivateMessages.length - 1];\n\n    if (recentPrivateMessage) {\n        return recentPrivateMessage.id;\n    }\n\n    return undefined;\n}\n","// @flow\n\nimport { SET_ACTIVE_MODAL_ID } from '../base/modal';\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    ADD_MESSAGE,\n    CLEAR_MESSAGES,\n    SET_PRIVATE_MESSAGE_RECIPIENT,\n    TOGGLE_CHAT\n} from './actionTypes';\nimport { CHAT_VIEW_MODAL_ID } from './constants';\n\nconst DEFAULT_STATE = {\n    isOpen: false,\n    lastReadMessage: undefined,\n    messages: [],\n    privateMessageRecipient: undefined\n};\n\nReducerRegistry.register('features/chat', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case ADD_MESSAGE: {\n        const newMessage = {\n            displayName: action.displayName,\n            error: action.error,\n            id: action.id,\n            messageType: action.messageType,\n            message: action.message,\n            privateMessage: action.privateMessage,\n            recipient: action.recipient,\n            timestamp: action.timestamp\n        };\n\n        // React native, unlike web, needs a reverse sorted message list.\n        const messages = navigator.product === 'ReactNative'\n            ? [\n                newMessage,\n                ...state.messages\n            ]\n            : [\n                ...state.messages,\n                newMessage\n            ];\n\n        return {\n            ...state,\n            lastReadMessage:\n                action.hasRead ? newMessage : state.lastReadMessage,\n            messages\n        };\n    }\n\n    case CLEAR_MESSAGES:\n        return {\n            ...state,\n            lastReadMessage: undefined,\n            messages: []\n        };\n\n    case SET_ACTIVE_MODAL_ID:\n        if (action.activeModalId === CHAT_VIEW_MODAL_ID) {\n            return updateChatState(state);\n        }\n\n        break;\n    case SET_PRIVATE_MESSAGE_RECIPIENT:\n        return {\n            ...state,\n            isOpen: Boolean(action.participant) || state.isOpen,\n            privateMessageRecipient: action.participant\n        };\n\n    case TOGGLE_CHAT:\n        return updateChatState(state);\n    }\n\n    return state;\n});\n\n/**\n * Updates the chat status on opening the chat view.\n *\n * @param {Object} state - The Redux state of the feature.\n * @returns {Object}\n */\nfunction updateChatState(state) {\n    return {\n        ...state,\n        isOpen: !state.isOpen,\n        lastReadMessage: state.messages[\n            navigator.product === 'ReactNative' ? 0 : state.messages.length - 1],\n        privateMessageRecipient: state.isOpen ? undefined : state.privateMessageRecipient\n    };\n}\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './constants';\n\nimport './middleware';\nimport './reducer';\n","/**\n * The type of the action which signals the E2EE key has changed.\n *\n * {\n *     type: SET_E2EE_KEY\n * }\n */\nexport const SET_E2EE_KEY = 'SET_E2EE_KEY';\n","// @flow\n\nimport { SET_E2EE_KEY } from './actionTypes';\n\n/**\n * Dispatches an action to set the E2EE key.\n *\n * @param {string|undefined} key - The new key to be used for E2EE.\n * @returns {Object}\n */\nexport function setE2EEKey(key: ?string) {\n    return {\n        type: SET_E2EE_KEY,\n        key\n    };\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\nimport { FieldTextStateless as TextField } from '@atlaskit/field-text';\n\nimport { createE2EEEvent, sendAnalytics } from '../../analytics';\nimport { Dialog } from '../../base/dialog';\nimport { translate, translateToHTML } from '../../base/i18n';\nimport { getParticipants } from '../../base/participants';\nimport { connect } from '../../base/redux';\n\nimport { setE2EEKey } from '../actions';\n\n\ntype Props = {\n\n    /**\n     * Indicates whether all participants in the conference currently support E2EE.\n     */\n    _everyoneSupportsE2EE: boolean,\n\n    /**\n     * The current E2EE key.\n     */\n    _key: string,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\ntype State = {\n\n    /**\n     * The current E2EE key.\n     */\n    key: string\n};\n\n/**\n * Implements a React {@code Component} for displaying a dialog with a field\n * for setting the E2EE key.\n *\n * @extends Component\n */\nclass E2EEDialog extends Component<Props, State> {\n    /**\n     * Initializes a new {@code E2EEDialog  } instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            key: this.props._key\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onKeyChange = this._onKeyChange.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _everyoneSupportsE2EE, t } = this.props;\n\n        return (\n            <Dialog\n                isModal = { false }\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.e2eeTitle'\n                width = 'small'>\n                <div className = 'e2ee-destription'>\n                    { translateToHTML(t, 'dialog.e2eeDescription') }\n                </div>\n                {\n                    !_everyoneSupportsE2EE\n                        && <div className = 'e2ee-warn'>\n                            { translateToHTML(t, 'dialog.e2eeWarning') }\n                        </div>\n                }\n                <TextField\n                    autoFocus = { true }\n                    compact = { true }\n                    label = { t('dialog.e2eeLabel') }\n                    name = 'e2eeKey'\n                    onChange = { this._onKeyChange }\n                    shouldFitContainer = { true }\n                    type = 'password'\n                    value = { this.state.key } />\n            </Dialog>);\n    }\n\n    _onKeyChange: (Object) => void;\n\n    /**\n     * Updates the entered key.\n     *\n     * @param {Object} event - The DOM event triggered from the entered value having changed.\n     * @private\n     * @returns {void}\n     */\n    _onKeyChange(event) {\n        this.setState({ key: event.target.value.trim() });\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Dispatches an action to update the E2EE key.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _onSubmit() {\n        const { key } = this.state;\n\n        sendAnalytics(createE2EEEvent(`key.${key ? 'set' : 'unset'}`));\n        this.props.dispatch(setE2EEKey(key));\n\n        return true;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for this component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction mapStateToProps(state) {\n    const { e2eeKey } = state['features/e2ee'];\n    const participants = getParticipants(state).filter(p => !p.local);\n\n    return {\n        _everyoneSupportsE2EE: participants.every(p => Boolean(p.e2eeSupported)),\n        _key: e2eeKey || ''\n    };\n}\n\nexport default translate(connect(mapStateToProps)(E2EEDialog));\n","// @flow\n\nimport React from 'react';\n\nimport { createE2EEEvent, sendAnalytics } from '../../analytics';\nimport { openDialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { IconRoomUnlock } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, BetaTag } from '../../base/toolbox';\nimport type { AbstractButtonProps } from '../../base/toolbox';\n\nimport E2EEDialog from './E2EEDialog';\n\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n\n};\n\n/**\n * Button that open a dialog to set the E2EE key.\n */\nclass E2EEButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.e2ee';\n    icon = IconRoomUnlock;\n    label = 'toolbar.e2ee';\n    tooltip = 'toolbar.e2ee';\n\n    /**\n     * Helper function to be implemented by subclasses, which returns\n     * a React Element to display (a beta tag) at the end of the button.\n     *\n     * @override\n     * @protected\n     * @returns {ReactElement}\n     */\n    _getElementAfter() {\n        return <BetaTag />;\n    }\n\n    /**\n     * Handles clicking / pressing the button, and opens the E2EE dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        sendAnalytics(createE2EEEvent('dialog.open'));\n        this.props.dispatch(openDialog(E2EEDialog));\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the Component.\n * @private\n * @returns {Props}\n */\nexport function mapStateToProps(state: Object, ownProps: Props) {\n    const { e2eeSupported } = state['features/base/conference'];\n    const { visible = Boolean(e2eeSupported) } = ownProps;\n\n    return {\n        visible\n    };\n}\n\n\nexport default translate(connect(mapStateToProps)(E2EEButton));\n","// @flow\n\nimport Tooltip from '@atlaskit/tooltip';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { Icon, IconE2EE } from '../../base/icons';\nimport { CircularLabel } from '../../base/label';\nimport { connect } from '../../base/redux';\n\nimport { _mapStateToProps, type Props } from './AbstractE2EELabel';\n\n\n/**\n * React {@code Component} for displaying a label when everyone has E2EE enabled in a conferene.\n *\n * @extends Component\n */\nclass E2EELabel extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (!this.props._showLabel) {\n            return null;\n        }\n\n        // eslint-disable-next-line react/jsx-max-props-per-line\n        const icon = <Icon size = { 22 } src = { IconE2EE } />;\n\n        return (\n            <Tooltip\n                content = { this.props.t('e2ee.labelToolTip') }\n                position = { 'left' }>\n                <CircularLabel\n                    className = 'e2ee'\n                    label = { icon } />\n            </Tooltip>\n        );\n    }\n}\n\nexport default translate(connect(_mapStateToProps)(E2EELabel));\n","// @flow\n\n\nexport type Props = {\n\n    /**\n     * True if the label needs to be rendered, false otherwise.\n     */\n    _showLabel: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Maps (parts of) the redux state to the associated props of this {@code Component}.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object) {\n    const participants = state['features/base/participants'];\n\n    return {\n        _showLabel: participants.every(p => p.e2eeEnabled)\n    };\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/e2ee');\n","// @flow\n\nimport { getCurrentConference } from '../base/conference';\nimport { getLocalParticipant, participantUpdated } from '../base/participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\n\nimport { SET_E2EE_KEY } from './actionTypes';\nimport { setE2EEKey } from './actions';\nimport logger from './logger';\n\n/**\n * Middleware that captures actions related to E2EE.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    switch (action.type) {\n    case SET_E2EE_KEY: {\n        const conference = getCurrentConference(getState);\n\n        if (conference) {\n            logger.debug(`New E2EE key: ${action.key}`);\n            conference.setE2EEKey(action.key);\n\n            // Broadccast that we enabled / disabled E2EE.\n            const participant = getLocalParticipant(getState);\n\n            dispatch(participantUpdated({\n                e2eeEnabled: Boolean(action.key),\n                id: participant.id,\n                local: true\n            }));\n        }\n\n        break;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Set up state change listener to perform maintenance tasks when the conference\n * is left or failed.\n */\nStateListenerRegistry.register(\n    state => getCurrentConference(state),\n    (conference, { dispatch }, previousConference) => {\n        if (previousConference) {\n            dispatch(setE2EEKey(undefined));\n        }\n    });\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport { SET_E2EE_KEY } from './actionTypes';\n\nconst DEFAULT_STATE = {\n\n    /**\n     * E2EE key.\n     */\n    e2eeKey: undefined\n};\n\n/**\n * Reduces the Redux actions of the feature features/e2ee.\n */\nReducerRegistry.register('features/e2ee', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case SET_E2EE_KEY:\n        return {\n            ...state,\n            e2eeKey: action.key\n        };\n\n    default:\n        return state;\n    }\n});\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\n\nimport './middleware';\nimport './reducer';\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/conference');\n","/**\n * Action to select the participant to be displayed in LargeVideo.\n *\n * {\n *     type: SELECT_LARGE_VIDEO_PARTICIPANT,\n *     participantId: (string|undefined)\n * }\n */\nexport const SELECT_LARGE_VIDEO_PARTICIPANT\n    = 'SELECT_LARGE_VIDEO_PARTICIPANT';\n\n/**\n * Action to update the redux store with the current resolution of large video.\n *\n * @returns {{\n *     type: UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION,\n *     resolution: number\n * }}\n */\nexport const UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION\n    = 'UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION';\n","/**\n * The type of Redux action which Sets information about device selection popup.\n *\n * {{\n *     type: SET_DEVICE_SELECTION_POPUP_DATA,\n *     popupDialogData: Object\n * }}\n */\nexport const SET_DEVICE_SELECTION_POPUP_DATA\n    = 'SET_DEVICE_SELECTION_POPUP_DATA';\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/device-selection');\n","import { API_ID } from '../../../modules/API/constants';\nimport {\n    PostMessageTransportBackend,\n    Transport\n} from '../../../modules/transport';\n\nimport { createDeviceChangedEvent, sendAnalytics } from '../analytics';\nimport {\n    getDeviceLabelById,\n    setAudioInputDevice,\n    setAudioOutputDeviceId,\n    setVideoInputDevice\n} from '../base/devices';\nimport { i18next } from '../base/i18n';\nimport { updateSettings } from '../base/settings';\n\nimport { SET_DEVICE_SELECTION_POPUP_DATA } from './actionTypes';\nimport { getDeviceSelectionDialogProps, processExternalDeviceRequest } from './functions';\nimport logger from './logger';\n\n/**\n * Opens a popup window with the device selection dialog in it.\n *\n * @returns {Function}\n */\nexport function openDeviceSelectionPopup() {\n    return (dispatch, getState) => {\n        const { popupDialogData } = getState()['features/device-selection'];\n\n        if (popupDialogData) {\n            popupDialogData.popup.focus();\n\n            return;\n        }\n\n        // API_ID will always be defined because the iframe api is enabled\n        const scope = `dialog_${API_ID}`;\n        const url = `${\n            window.location.origin}/static/deviceSelectionPopup.html#scope=${\n            encodeURIComponent(JSON.stringify(scope))}`;\n        const popup\n            = window.open(\n                url,\n                'device-selection-popup',\n                'toolbar=no,scrollbars=no,resizable=no,width=720,height=458');\n\n        popup.addEventListener('DOMContentLoaded', () => {\n            popup.init(i18next);\n        });\n\n        const transport = new Transport({\n            backend: new PostMessageTransportBackend({\n                postisOptions: {\n                    scope,\n                    window: popup\n                }\n            })\n        });\n\n        transport.on('request',\n            processExternalDeviceRequest.bind(undefined, dispatch, getState));\n        transport.on('event', event => {\n            if (event.type === 'devices-dialog' && event.name === 'close') {\n                popup.close();\n                transport.dispose();\n                dispatch(_setDeviceSelectionPopupData());\n\n                return true;\n            }\n\n            return false;\n        });\n\n        dispatch(_setDeviceSelectionPopupData({\n            popup,\n            transport\n        }));\n    };\n}\n\n/**\n * Sets information about device selection popup in the store.\n *\n * @param {Object} popupDialogData - Information about the popup.\n * @param {Object} popupDialog.popup - The popup object returned from\n * window.open.\n * @param {Object} popupDialogData.transport - The transport instance used for\n * communication with the popup window.\n * @returns {{\n *     type: SET_DEVICE_SELECTION_POPUP_DATA,\n *     popupDialogData: Object\n * }}\n */\nfunction _setDeviceSelectionPopupData(popupDialogData) {\n    return {\n        type: SET_DEVICE_SELECTION_POPUP_DATA,\n        popupDialogData\n    };\n}\n\n/**\n * Submits the settings related to device selection.\n *\n * @param {Object} newState - The new settings.\n * @returns {Function}\n */\nexport function submitDeviceSelectionTab(newState) {\n    return (dispatch, getState) => {\n        const currentState = getDeviceSelectionDialogProps(getState());\n\n        if (newState.selectedVideoInputId\n            && newState.selectedVideoInputId\n                !== currentState.selectedVideoInputId) {\n            dispatch(updateSettings({\n                userSelectedCameraDeviceId: newState.selectedVideoInputId,\n                userSelectedCameraDeviceLabel:\n                    getDeviceLabelById(getState(), newState.selectedVideoInputId, 'videoInput')\n            }));\n\n            dispatch(\n                setVideoInputDevice(newState.selectedVideoInputId));\n        }\n\n        if (newState.selectedAudioInputId\n                && newState.selectedAudioInputId\n                  !== currentState.selectedAudioInputId) {\n            dispatch(updateSettings({\n                userSelectedMicDeviceId: newState.selectedAudioInputId,\n                userSelectedMicDeviceLabel:\n                    getDeviceLabelById(getState(), newState.selectedAudioInputId, 'audioInput')\n            }));\n\n            dispatch(\n                setAudioInputDevice(newState.selectedAudioInputId));\n        }\n\n        if (newState.selectedAudioOutputId\n                && newState.selectedAudioOutputId\n                    !== currentState.selectedAudioOutputId) {\n            sendAnalytics(createDeviceChangedEvent('audio', 'output'));\n\n            setAudioOutputDeviceId(\n                newState.selectedAudioOutputId,\n                dispatch,\n                true,\n                getDeviceLabelById(getState(), newState.selectedAudioOutputId, 'audioOutput'))\n                .then(() => logger.log('changed audio output device'))\n                .catch(err => {\n                    logger.warn(\n                        'Failed to change audio output device.',\n                        'Default or previously set audio output device will',\n                        ' be used instead.',\n                        err);\n                });\n        }\n    };\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport JitsiMeetJS from '../../base/lib-jitsi-meet/_';\n\nconst JitsiTrackEvents = JitsiMeetJS.events.track;\n\n/**\n * The type of the React {@code Component} props of {@link AudioInputPreview}.\n */\ntype Props = {\n\n    /**\n     * The JitsiLocalTrack to show an audio level meter for.\n     */\n    track: Object\n};\n\n/**\n * The type of the React {@code Component} props of {@link AudioInputPreview}.\n */\ntype State = {\n\n    /**\n     * The current audio input level being received, from 0 to 1.\n     */\n    audioLevel: number\n};\n\n/**\n * React component for displaying a audio level meter for a JitsiLocalTrack.\n */\nclass AudioInputPreview extends Component<Props, State> {\n    /**\n     * Initializes a new AudioInputPreview instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            audioLevel: 0\n        };\n\n        this._updateAudioLevel = this._updateAudioLevel.bind(this);\n    }\n\n    /**\n     * Starts listening for audio level updates after the initial render.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        this._listenForAudioUpdates(this.props.track);\n    }\n\n    /**\n     * Stops listening for audio level updates on the old track and starts\n     * listening instead on the new track.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidUpdate(prevProps: Props) {\n        if (prevProps.track !== this.props.track) {\n            this._listenForAudioUpdates(this.props.track);\n            this._updateAudioLevel(0);\n        }\n    }\n\n    /**\n     * Unsubscribe from audio level updates.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        this._stopListeningForAudioUpdates();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const audioMeterFill = {\n            width: `${Math.floor(this.state.audioLevel * 100)}%`\n        };\n\n        return (\n            <div className = 'audio-input-preview' >\n                <div\n                    className = 'audio-input-preview-level'\n                    style = { audioMeterFill } />\n            </div>\n        );\n    }\n\n    /**\n     * Starts listening for audio level updates from the library.\n     *\n     * @param {JitstiLocalTrack} track - The track to listen to for audio level\n     * updates.\n     * @private\n     * @returns {void}\n     */\n    _listenForAudioUpdates(track) {\n        this._stopListeningForAudioUpdates();\n\n        track && track.on(\n            JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,\n            this._updateAudioLevel);\n    }\n\n    /**\n     * Stops listening to further updates from the current track.\n     *\n     * @private\n     * @returns {void}\n     */\n    _stopListeningForAudioUpdates() {\n        this.props.track && this.props.track.off(\n            JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,\n            this._updateAudioLevel);\n    }\n\n    _updateAudioLevel: (number) => void;\n\n    /**\n     * Updates the internal state of the last know audio level. The level should\n     * be between 0 and 1, as the level will be used as a percentage out of 1.\n     *\n     * @param {number} audioLevel - The new audio level for the track.\n     * @private\n     * @returns {void}\n     */\n    _updateAudioLevel(audioLevel) {\n        this.setState({\n            audioLevel\n        });\n    }\n}\n\nexport default AudioInputPreview;\n","// @flow\n\nimport Audio from './web/Audio';\n\nexport default Audio;\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n/functions';\nimport Audio from '../../base/media/components/Audio';\n\nconst TEST_SOUND_PATH = 'sounds/ring.wav';\n\n/**\n * The type of the React {@code Component} props of {@link AudioOutputPreview}.\n */\ntype Props = {\n\n    /**\n     * The device id of the audio output device to use.\n     */\n    deviceId: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React component for playing a test sound through a specified audio device.\n *\n * @extends Component\n */\nclass AudioOutputPreview extends Component<Props> {\n    _audioElement: ?Object;\n\n    /**\n     * Initializes a new AudioOutputPreview instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._audioElement = null;\n\n        this._audioElementReady = this._audioElementReady.bind(this);\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Updates the audio element when the target output device changes and the\n     * audio element has re-rendered.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidUpdate() {\n        this._setAudioSink();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div className = 'audio-output-preview'>\n                <a onClick = { this._onClick }>\n                    { this.props.t('deviceSelection.testAudio') }\n                </a>\n                <Audio\n                    setRef = { this._audioElementReady }\n                    src = { TEST_SOUND_PATH } />\n            </div>\n        );\n    }\n\n    _audioElementReady: (Object) => void;\n\n    /**\n     * Sets the instance variable for the component's audio element so it can be\n     * accessed directly.\n     *\n     * @param {Object} element - The DOM element for the component's audio.\n     * @private\n     * @returns {void}\n     */\n    _audioElementReady(element: Object) {\n        this._audioElement = element;\n\n        this._setAudioSink();\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Plays a test sound.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClick() {\n        this._audioElement\n            && this._audioElement.play();\n    }\n\n    /**\n     * Updates the target output device for playing the test sound.\n     *\n     * @private\n     * @returns {void}\n     */\n    _setAudioSink() {\n        this._audioElement\n            && this.props.deviceId\n            && this._audioElement.setSinkId(this.props.deviceId);\n    }\n}\n\nexport default translate(AudioOutputPreview);\n","/* @flow */\n\nimport AKDropdownMenu from '@atlaskit/dropdown-menu';\nimport ChevronDownIcon from '@atlaskit/icon/glyph/chevron-down';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n/functions';\n\n/**\n * The type of the React {@code Component} props of {@link DeviceSelector}.\n */\ntype Props = {\n\n    /**\n     * MediaDeviceInfos used for display in the select element.\n     */\n    devices: Array<Object>,\n\n    /**\n     * If false, will return a selector with no selection options.\n     */\n    hasPermission: boolean,\n\n    /**\n     * CSS class for the icon to the left of the dropdown trigger.\n     */\n    icon: string,\n\n    /**\n     * If true, will render the selector disabled with a default selection.\n     */\n    isDisabled: boolean,\n\n    /**\n     * The translation key to display as a menu label.\n     */\n    label: string,\n\n    /**\n     * The callback to invoke when a selection is made.\n     */\n    onSelect: Function,\n\n    /**\n     * The default device to display as selected.\n     */\n    selectedDeviceId: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React component for selecting a device from a select element. Wraps\n * AKDropdownMenu with device selection specific logic.\n *\n * @extends Component\n */\nclass DeviceSelector extends Component<Props> {\n    /**\n     * Initializes a new DeviceSelector instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        this._onSelect = this._onSelect.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (!this.props.hasPermission) {\n            return this._renderNoPermission();\n        }\n\n        if (!this.props.devices || !this.props.devices.length) {\n            return this._renderNoDevices();\n        }\n\n        const items = this.props.devices.map(this._createDropdownItem);\n        const defaultSelected = items.find(item =>\n            item.value === this.props.selectedDeviceId\n        );\n\n        return this._createDropdown({\n            defaultSelected,\n            isDisabled: this.props.isDisabled,\n            items,\n            placeholder: this.props.t('deviceSelection.selectADevice')\n        });\n    }\n\n    /**\n     * Creates a React Element for displaying the passed in text surrounded by\n     * two icons. The left icon is the icon class passed in through props and\n     * the right icon is AtlasKit ExpandIcon.\n     *\n     * @param {string} triggerText - The text to display within the element.\n     * @private\n     * @returns {ReactElement}\n     */\n    _createDropdownTrigger(triggerText) {\n        return (\n            <div className = 'device-selector-trigger'>\n                <span\n                    className = { `device-selector-icon ${this.props.icon}` } />\n                <span className = 'device-selector-trigger-text'>\n                    { triggerText }\n                </span>\n                <ChevronDownIcon\n                    label = 'expand'\n                    size = 'large' />\n            </div>\n        );\n    }\n\n    /**\n     * Creates an object in the format expected by AKDropdownMenu for an option.\n     *\n     * @param {MediaDeviceInfo} device - An object with a label and a deviceId.\n     * @private\n     * @returns {Object} The passed in media device description converted to a\n     * format recognized as a valid AKDropdownMenu item.\n     */\n    _createDropdownItem(device) {\n        return {\n            content: device.label,\n            value: device.deviceId\n        };\n    }\n\n    /**\n     * Creates a AKDropdownMenu Component using passed in props and options. If\n     * the dropdown needs to be disabled, then only the AKDropdownMenu trigger\n     * element is returned to simulate a disabled state.\n     *\n     * @param {Object} options - Additional configuration for display.\n     * @param {Object} options.defaultSelected - The option that should be set\n     * as currently chosen.\n     * @param {boolean} options.isDisabled - If true, only the AKDropdownMenu\n     * trigger component will be returned to simulate a disabled dropdown.\n     * @param {Array} options.items - All the selectable options to display.\n     * @param {string} options.placeholder - The translation key to display when\n     * no selection has been made.\n     * @private\n     * @returns {ReactElement}\n     */\n    _createDropdown(options) {\n        const triggerText\n            = (options.defaultSelected && options.defaultSelected.content)\n                || options.placeholder;\n        const trigger = this._createDropdownTrigger(triggerText);\n\n        if (options.isDisabled) {\n            return (\n                <div className = 'device-selector-trigger-disabled'>\n                    { trigger }\n                </div>\n            );\n        }\n\n        return (\n            <AKDropdownMenu\n                items = { [ { items: options.items || [] } ] }\n                onItemActivated = { this._onSelect }\n                shouldFitContainer = { true }>\n                { trigger }\n            </AKDropdownMenu>\n        );\n    }\n\n    _onSelect: (Object) => void;\n\n    /**\n     * Invokes the passed in callback to notify of selection changes.\n     *\n     * @param {Object} selection - Event from choosing a AKDropdownMenu option.\n     * @private\n     * @returns {void}\n     */\n    _onSelect(selection) {\n        const newDeviceId = selection.item.value;\n\n        if (this.props.selectedDeviceId !== newDeviceId) {\n            this.props.onSelect(selection.item.value);\n        }\n    }\n\n    /**\n     * Creates a Select Component that is disabled and has a placeholder\n     * indicating there are no devices to select.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderNoDevices() {\n        return this._createDropdown({\n            isDisabled: true,\n            placeholder: this.props.t('settings.noDevice')\n        });\n    }\n\n    /**\n     * Creates a AKDropdownMenu Component that is disabled and has a placeholder\n     * stating there is no permission to display the devices.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderNoPermission() {\n        return this._createDropdown({\n            isDisabled: true,\n            placeholder: this.props.t('deviceSelection.noPermission')\n        });\n    }\n}\n\nexport default translate(DeviceSelector);\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport Video from '../../base/media/components/Video';\n\nconst VIDEO_ERROR_CLASS = 'video-preview-has-error';\n\n/**\n * The type of the React {@code Component} props of {@link VideoInputPreview}.\n */\ntype Props = {\n\n    /**\n     * An error message to display instead of a preview. Displaying an error\n     * will take priority over displaying a video preview.\n     */\n    error: ?string,\n\n    /**\n     * The JitsiLocalTrack to display.\n     */\n    track: Object\n};\n\n/**\n * React component for displaying video. This component defers to lib-jitsi-meet\n * logic for rendering the video.\n *\n * @extends Component\n */\nclass VideoInputPreview extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { error } = this.props;\n        const errorClass = error ? VIDEO_ERROR_CLASS : '';\n        const className = `video-input-preview ${errorClass}`;\n\n        return (\n            <div className = { className }>\n                <Video\n                    className = 'video-input-preview-display flipVideoX'\n                    videoTrack = {{ jitsiTrack: this.props.track }} />\n                <div className = 'video-input-preview-error'>\n                    { error || '' }\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default VideoInputPreview;\n","// @flow\n\nimport React from 'react';\n\nimport AbstractDialogTab, {\n    type Props as AbstractDialogTabProps\n} from '../../base/dialog/components/web/AbstractDialogTab';\nimport { translate } from '../../base/i18n/functions';\nimport JitsiMeetJS from '../../base/lib-jitsi-meet/_';\nimport { createLocalTrack } from '../../base/lib-jitsi-meet/functions';\n\nimport logger from '../logger';\n\nimport AudioInputPreview from './AudioInputPreview';\nimport AudioOutputPreview from './AudioOutputPreview';\nimport DeviceSelector from './DeviceSelector';\nimport VideoInputPreview from './VideoInputPreview';\n\n/**\n * The type of the React {@code Component} props of {@link DeviceSelection}.\n */\nexport type Props = {\n    ...$Exact<AbstractDialogTabProps>,\n\n    /**\n     * All known audio and video devices split by type. This prop comes from\n     * the app state.\n     */\n    availableDevices: Object,\n\n    /**\n     * Whether or not the audio selector can be interacted with. If true,\n     * the audio input selector will be rendered as disabled. This is\n     * specifically used to prevent audio device changing in Firefox, which\n     * currently does not work due to a browser-side regression.\n     */\n    disableAudioInputChange: boolean,\n\n    /**\n     * True if device changing is configured to be disallowed. Selectors\n     * will display as disabled.\n     */\n    disableDeviceChange: boolean,\n\n    /**\n     * If true, the audio meter will not display. Necessary for browsers or\n     * configurations that do not support local stats to prevent a\n     * non-responsive mic preview from displaying.\n     */\n    hideAudioInputPreview: boolean,\n\n    /**\n     * Whether or not the audio output source selector should display. If\n     * true, the audio output selector and test audio link will not be\n     * rendered.\n     */\n    hideAudioOutputSelect: boolean,\n\n    /**\n     * An optional callback to invoke after the component has completed its\n     * mount logic.\n     */\n    mountCallback?: Function,\n\n    /**\n     * The id of the audio input device to preview.\n     */\n    selectedAudioInputId: string,\n\n    /**\n     * The id of the audio output device to preview.\n     */\n    selectedAudioOutputId: string,\n\n    /**\n     * The id of the video input device to preview.\n     */\n    selectedVideoInputId: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link DeviceSelection}.\n */\ntype State = {\n\n    /**\n     * Whether or not the audio permission was granted.\n     */\n    hasAudioPermission: boolean,\n\n    /**\n     * Whether or not the audio permission was granted.\n     */\n    hasVideoPermission: boolean,\n\n    /**\n     * The JitsiTrack to use for previewing audio input.\n     */\n    previewAudioTrack: ?Object,\n\n    /**\n     * The JitsiTrack to use for previewing video input.\n     */\n    previewVideoTrack: ?Object,\n\n    /**\n     * The error message from trying to use a video input device.\n     */\n    previewVideoTrackError: ?string\n};\n\n/**\n * React {@code Component} for previewing audio and video input/output devices.\n *\n * @extends Component\n */\nclass DeviceSelection extends AbstractDialogTab<Props, State> {\n\n    /**\n     * Whether current component is mounted or not.\n     *\n     * In component did mount we start a Promise to create tracks and\n     * set the tracks in the state, if we unmount the component in the meanwhile\n     * tracks will be created and will never been disposed (dispose tracks is\n     * in componentWillUnmount). When tracks are created and component is\n     * unmounted we dispose the tracks.\n     */\n    _unMounted: boolean;\n\n    /**\n     * Initializes a new DeviceSelection instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            hasAudioPermission: false,\n            hasVideoPermission: false,\n            previewAudioTrack: null,\n            previewVideoTrack: null,\n            previewVideoTrackError: null\n        };\n        this._unMounted = true;\n    }\n\n    /**\n     * Generate the initial previews for audio input and video input.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._unMounted = false;\n        Promise.all([\n            this._createAudioInputTrack(this.props.selectedAudioInputId),\n            this._createVideoInputTrack(this.props.selectedVideoInputId)\n        ])\n        .catch(err => logger.warn('Failed to initialize preview tracks', err))\n        .then(() => this.props.mountCallback && this.props.mountCallback());\n    }\n\n    /**\n     * Checks if audio / video permissions were granted. Updates audio input and\n     * video input previews.\n     *\n     * @param {Object} prevProps - Previous props this component received.\n     * @param {Object} prevState - Previous state this component had.\n     * @returns {void}\n     */\n    componentDidUpdate(prevProps, prevState) {\n        const { previewAudioTrack, previewVideoTrack } = prevState;\n\n        if ((!previewAudioTrack && this.state.previewAudioTrack)\n                || (!previewVideoTrack && this.state.previewVideoTrack)) {\n            Promise.all([\n                JitsiMeetJS.mediaDevices.isDevicePermissionGranted('audio'),\n                JitsiMeetJS.mediaDevices.isDevicePermissionGranted('video')\n            ]).then(r => {\n                const [ hasAudioPermission, hasVideoPermission ] = r;\n\n                this.setState({\n                    hasAudioPermission,\n                    hasVideoPermission\n                });\n            });\n        }\n\n        if (prevProps.selectedAudioInputId\n            !== this.props.selectedAudioInputId) {\n            this._createAudioInputTrack(this.props.selectedAudioInputId);\n        }\n\n        if (prevProps.selectedVideoInputId\n            !== this.props.selectedVideoInputId) {\n            this._createVideoInputTrack(this.props.selectedVideoInputId);\n        }\n    }\n\n    /**\n     * Ensure preview tracks are destroyed to prevent continued use.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._unMounted = true;\n        this._disposeAudioInputPreview();\n        this._disposeVideoInputPreview();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const {\n            hideAudioInputPreview,\n            hideAudioOutputSelect,\n            selectedAudioOutputId\n        } = this.props;\n\n        return (\n            <div className = 'device-selection'>\n                <div className = 'device-selection-column column-video'>\n                    <div className = 'device-selection-video-container'>\n                        <VideoInputPreview\n                            error = { this.state.previewVideoTrackError }\n                            track = { this.state.previewVideoTrack } />\n                    </div>\n                    { !hideAudioInputPreview\n                        && <AudioInputPreview\n                            track = { this.state.previewAudioTrack } /> }\n                </div>\n                <div className = 'device-selection-column column-selectors'>\n                    <div className = 'device-selectors'>\n                        { this._renderSelectors() }\n                    </div>\n                    { !hideAudioOutputSelect\n                        && <AudioOutputPreview\n                            deviceId = { selectedAudioOutputId } /> }\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Creates the JitiTrack for the audio input preview.\n     *\n     * @param {string} deviceId - The id of audio input device to preview.\n     * @private\n     * @returns {void}\n     */\n    _createAudioInputTrack(deviceId) {\n        return this._disposeAudioInputPreview()\n            .then(() => createLocalTrack('audio', deviceId))\n            .then(jitsiLocalTrack => {\n                if (this._unMounted) {\n                    jitsiLocalTrack.dispose();\n\n                    return;\n                }\n\n                this.setState({\n                    previewAudioTrack: jitsiLocalTrack\n                });\n            })\n            .catch(() => {\n                this.setState({\n                    previewAudioTrack: null\n                });\n            });\n    }\n\n    /**\n     * Creates the JitiTrack for the video input preview.\n     *\n     * @param {string} deviceId - The id of video device to preview.\n     * @private\n     * @returns {void}\n     */\n    _createVideoInputTrack(deviceId) {\n        return this._disposeVideoInputPreview()\n            .then(() => createLocalTrack('video', deviceId))\n            .then(jitsiLocalTrack => {\n                if (!jitsiLocalTrack) {\n                    return Promise.reject();\n                }\n\n                if (this._unMounted) {\n                    jitsiLocalTrack.dispose();\n\n                    return;\n                }\n\n                this.setState({\n                    previewVideoTrack: jitsiLocalTrack,\n                    previewVideoTrackError: null\n                });\n            })\n            .catch(() => {\n                this.setState({\n                    previewVideoTrack: null,\n                    previewVideoTrackError:\n                        this.props.t('deviceSelection.previewUnavailable')\n                });\n            });\n    }\n\n    /**\n     * Utility function for disposing the current audio input preview.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _disposeAudioInputPreview(): Promise<*> {\n        return this.state.previewAudioTrack\n            ? this.state.previewAudioTrack.dispose() : Promise.resolve();\n    }\n\n    /**\n     * Utility function for disposing the current video input preview.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _disposeVideoInputPreview(): Promise<*> {\n        return this.state.previewVideoTrack\n            ? this.state.previewVideoTrack.dispose() : Promise.resolve();\n    }\n\n    /**\n     * Creates a DeviceSelector instance based on the passed in configuration.\n     *\n     * @private\n     * @param {Object} deviceSelectorProps - The props for the DeviceSelector.\n     * @returns {ReactElement}\n     */\n    _renderSelector(deviceSelectorProps) {\n        return (\n            <div key = { deviceSelectorProps.label }>\n                <div className = 'device-selector-label'>\n                    { this.props.t(deviceSelectorProps.label) }\n                </div>\n                <DeviceSelector { ...deviceSelectorProps } />\n            </div>\n        );\n    }\n\n    /**\n     * Creates DeviceSelector instances for video output, audio input, and audio\n     * output.\n     *\n     * @private\n     * @returns {Array<ReactElement>} DeviceSelector instances.\n     */\n    _renderSelectors() {\n        const { availableDevices } = this.props;\n        const { hasAudioPermission, hasVideoPermission } = this.state;\n\n        const configurations = [\n            {\n                devices: availableDevices.videoInput,\n                hasPermission: hasVideoPermission,\n                icon: 'icon-camera',\n                isDisabled: this.props.disableDeviceChange,\n                key: 'videoInput',\n                label: 'settings.selectCamera',\n                onSelect: selectedVideoInputId =>\n                    super._onChange({ selectedVideoInputId }),\n                selectedDeviceId: this.state.previewVideoTrack\n                    ? this.state.previewVideoTrack.getDeviceId() : null\n            },\n            {\n                devices: availableDevices.audioInput,\n                hasPermission: hasAudioPermission,\n                icon: 'icon-microphone',\n                isDisabled: this.props.disableAudioInputChange\n                    || this.props.disableDeviceChange,\n                key: 'audioInput',\n                label: 'settings.selectMic',\n                onSelect: selectedAudioInputId =>\n                    super._onChange({ selectedAudioInputId }),\n                selectedDeviceId: this.state.previewAudioTrack\n                    ? this.state.previewAudioTrack.getDeviceId() : null\n            }\n        ];\n\n        if (!this.props.hideAudioOutputSelect) {\n            configurations.push({\n                devices: availableDevices.audioOutput,\n                hasPermission: hasAudioPermission || hasVideoPermission,\n                icon: 'icon-speaker',\n                isDisabled: this.props.disableDeviceChange,\n                key: 'audioOutput',\n                label: 'settings.selectAudioOutput',\n                onSelect: selectedAudioOutputId =>\n                    super._onChange({ selectedAudioOutputId }),\n                selectedDeviceId: this.props.selectedAudioOutputId\n            });\n        }\n\n        return configurations.map(config => this._renderSelector(config));\n    }\n}\n\nexport default translate(DeviceSelection);\n","// @flow\n\nimport { UPDATE_DEVICE_LIST } from '../base/devices';\nimport { MiddlewareRegistry } from '../base/redux';\n\ndeclare var APP: Object;\n\n/**\n * Implements the middleware of the feature device-selection.\n *\n * @param {Store} store - Redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    if (action.type === UPDATE_DEVICE_LIST) {\n        const state = store.getState();\n        const { popupDialogData } = state['features/device-selection'];\n        const { availableDevices } = state['features/base/devices'];\n\n        if (popupDialogData) {\n            popupDialogData.transport.sendEvent({\n                name: 'deviceListChanged',\n                devices: availableDevices\n            });\n        }\n\n        if (typeof APP !== 'undefined') {\n            APP.API.notifyDeviceListChanged(availableDevices);\n        }\n    }\n\n    return result;\n});\n","import { ReducerRegistry } from '../base/redux';\n\nimport { SET_DEVICE_SELECTION_POPUP_DATA } from './actionTypes';\n\n/**\n * Listen for actions which changes the state of the popup window for the device\n * selection.\n *\n * @param {Object} state - The Redux state of the feature\n * features/device-selection.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @param {Object} action.popupDialogData - Object that stores the current\n * Window object of the popup and the Transport instance. If no popup is shown\n * the value will be undefined.\n * @returns {Object}\n */\nReducerRegistry.register('features/device-selection',\n    (state = {}, action) => {\n        if (action.type === SET_DEVICE_SELECTION_POPUP_DATA) {\n            return {\n                ...state,\n                popupDialogData: action.popupDialogData\n            };\n        }\n\n        return state;\n    });\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { VIDEO_QUALITY_LEVELS } from '../../base/conference';\nimport { translate } from '../../base/i18n';\nimport {\n    Icon,\n    IconVideoQualityAudioOnly,\n    IconVideoQualityHD,\n    IconVideoQualityLD,\n    IconVideoQualitySD\n} from '../../base/icons';\nimport { connect } from '../../base/redux';\n\n/**\n * A map of of selectable receive resolutions to corresponding icons.\n *\n * @private\n * @type {Object}\n */\nconst VIDEO_QUALITY_TO_ICON = {\n    [VIDEO_QUALITY_LEVELS.HIGH]: IconVideoQualityHD,\n    [VIDEO_QUALITY_LEVELS.STANDARD]: IconVideoQualitySD,\n    [VIDEO_QUALITY_LEVELS.LOW]: IconVideoQualityLD\n};\n\n/**\n * The type of the React {@code Component} props of\n * {@link OverflowMenuVideoQualityItem}.\n */\ntype Props = {\n\n    /**\n     * Whether or not audio only mode is currently enabled.\n     */\n    _audioOnly: boolean,\n\n    /**\n     * The currently configured maximum quality resolution to be received from\n     * and sent to remote participants.\n     */\n    _videoQuality: number,\n\n    /**\n     * Callback to invoke when {@link OverflowMenuVideoQualityItem} is clicked.\n     */\n    onClick: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React {@code Component} responsible for displaying a button in the overflow\n * menu of the toolbar, including an icon showing the currently selected\n * max receive quality.\n *\n * @extends Component\n */\nclass OverflowMenuVideoQualityItem extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _audioOnly, _videoQuality } = this.props;\n        const icon = _audioOnly || !_videoQuality\n            ? IconVideoQualityAudioOnly\n            : VIDEO_QUALITY_TO_ICON[_videoQuality];\n\n        return (\n            <li\n                aria-label =\n                    { this.props.t('toolbar.accessibilityLabel.callQuality') }\n                className = 'overflow-menu-item'\n                onClick = { this.props.onClick }>\n                <span className = 'overflow-menu-item-icon'>\n                    <Icon src = { icon } />\n                </span>\n                <span className = 'profile-text'>\n                    { this.props.t('toolbar.callQuality') }\n                </span>\n            </li>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code OverflowMenuVideoQualityItem} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _audioOnly: boolean,\n *     _videoQuality: number\n * }}\n */\nfunction _mapStateToProps(state) {\n    return {\n        _audioOnly: state['features/base/audio-only'].enabled,\n        _videoQuality: state['features/base/conference'].preferredVideoQuality\n    };\n}\n\nexport default translate(\n    connect(_mapStateToProps)(OverflowMenuVideoQualityItem));\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/video-quality');\n","// @flow\n\nimport InlineMessage from '@atlaskit/inline-message';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { setAudioOnly } from '../../base/audio-only';\nimport { VIDEO_QUALITY_LEVELS, setPreferredVideoQuality } from '../../base/conference';\nimport { translate } from '../../base/i18n';\nimport JitsiMeetJS from '../../base/lib-jitsi-meet';\nimport { connect } from '../../base/redux';\n\nimport logger from '../logger';\n\nconst {\n    HIGH,\n    STANDARD,\n    LOW\n} = VIDEO_QUALITY_LEVELS;\n\n/**\n * Creates an analytics event for a press of one of the buttons in the video\n * quality dialog.\n *\n * @param {string} quality - The quality which was selected.\n * @returns {Object} The event in a format suitable for sending via\n *      sendAnalytics.\n */\nconst createEvent = function(quality) {\n    return createToolbarEvent(\n        'video.quality',\n        {\n            quality\n        });\n};\n\n/**\n * The type of the React {@code Component} props of {@link VideoQualitySlider}.\n */\ntype Props = {\n\n    /**\n     * Whether or not the conference is in audio only mode.\n     */\n    _audioOnly: Boolean,\n\n    /**\n     * Whether or not the conference is in peer to peer mode.\n     */\n    _p2p: Boolean,\n\n    /**\n     * The currently configured maximum quality resolution to be sent and\n     * received from the remote participants.\n     */\n    _sendrecvVideoQuality: Number,\n\n    /**\n     * Whether or not displaying video is supported in the current\n     * environment. If false, the slider will be disabled.\n     */\n    _videoSupported: Boolean,\n\n    /**\n     * Invoked to request toggling of audio only mode.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} which displays a slider for selecting a\n * new receive video quality.\n *\n * @extends Component\n */\nclass VideoQualitySlider extends Component<Props> {\n    _sliderOptions: Array<Object>;\n\n    /**\n     * Initializes a new {@code VideoQualitySlider} instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._enableAudioOnly = this._enableAudioOnly.bind(this);\n        this._enableHighDefinition = this._enableHighDefinition.bind(this);\n        this._enableLowDefinition = this._enableLowDefinition.bind(this);\n        this._enableStandardDefinition\n            = this._enableStandardDefinition.bind(this);\n        this._onSliderChange = this._onSliderChange.bind(this);\n\n        /**\n         * An array of configuration options for displaying a choice in the\n         * input. The onSelect callback will be invoked when the option is\n         * selected and videoQuality helps determine which choice matches with\n         * the currently active quality level.\n         *\n         * @private\n         * @type {Object[]}\n         */\n        this._sliderOptions = [\n            {\n                audioOnly: true,\n                onSelect: this._enableAudioOnly,\n                textKey: 'audioOnly.audioOnly'\n            },\n            {\n                onSelect: this._enableLowDefinition,\n                textKey: 'videoStatus.lowDefinition',\n                videoQuality: LOW\n            },\n            {\n                onSelect: this._enableStandardDefinition,\n                textKey: 'videoStatus.standardDefinition',\n                videoQuality: STANDARD\n            },\n            {\n                onSelect: this._enableHighDefinition,\n                textKey: 'videoStatus.highDefinition',\n                videoQuality: HIGH\n            }\n        ];\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _audioOnly, _p2p, _videoSupported, t } = this.props;\n        const activeSliderOption = this._mapCurrentQualityToSliderValue();\n\n        let classNames = 'video-quality-dialog';\n        let warning = null;\n\n        if (!_videoSupported) {\n            classNames += ' video-not-supported';\n            warning = this._renderAudioOnlyLockedMessage();\n        } else if (_p2p && !_audioOnly) {\n            warning = this._renderP2PMessage();\n        }\n\n        return (\n            <div className = { classNames }>\n                <h3 className = 'video-quality-dialog-title'>\n                    { t('videoStatus.callQuality') }\n                </h3>\n                <div className = { warning ? '' : 'hide-warning' }>\n                    { warning }\n                </div>\n                <div className = 'video-quality-dialog-contents'>\n                    <div className = 'video-quality-dialog-slider-container'>\n                        { /* FIXME: onChange and onMouseUp are both used for\n                           * compatibility with IE11. This workaround can be\n                           * removed after upgrading to React 16.\n                           */ }\n                        <input\n                            className = 'video-quality-dialog-slider'\n                            disabled = { !_videoSupported }\n                            max = { this._sliderOptions.length - 1 }\n                            min = '0'\n                            onChange = { this._onSliderChange }\n                            onMouseUp = { this._onSliderChange }\n                            step = '1'\n                            type = 'range'\n                            value\n                                = { activeSliderOption } />\n\n                    </div>\n                    <div className = 'video-quality-dialog-labels'>\n                        { this._createLabels(activeSliderOption) }\n                    </div>\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Creates a React Element for notifying that the browser is in audio only\n     * and cannot be changed.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderAudioOnlyLockedMessage() {\n        const { t } = this.props;\n\n        return (\n            <InlineMessage\n                title = { t('videoStatus.onlyAudioAvailable') }>\n                { t('videoStatus.onlyAudioSupported') }\n            </InlineMessage>\n        );\n    }\n\n    /**\n     * Creates React Elements for notifying that peer to peer is enabled.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderP2PMessage() {\n        const { t } = this.props;\n\n        return (\n            <InlineMessage\n                secondaryText = { t('videoStatus.recHighDefinitionOnly') }\n                title = { t('videoStatus.p2pEnabled') }>\n                { t('videoStatus.p2pVideoQualityDescription') }\n            </InlineMessage>\n        );\n    }\n\n    /**\n     * Creates React Elements to display mock tick marks with associated labels.\n     *\n     * @param {number} activeLabelIndex - Which of the sliderOptions should\n     * display as currently active.\n     * @private\n     * @returns {ReactElement[]}\n     */\n    _createLabels(activeLabelIndex) {\n        const labelsCount = this._sliderOptions.length;\n        const maxWidthOfLabel = `${100 / labelsCount}%`;\n\n        return this._sliderOptions.map((sliderOption, index) => {\n            const style = {\n                maxWidth: maxWidthOfLabel,\n                left: `${(index * 100) / (labelsCount - 1)}%`\n            };\n\n            const isActiveClass = activeLabelIndex === index ? 'active' : '';\n            const className\n                = `video-quality-dialog-label-container ${isActiveClass}`;\n\n            return (\n                <div\n                    className = { className }\n                    key = { index }\n                    style = { style }>\n                    <div className = 'video-quality-dialog-label'>\n                        { this.props.t(sliderOption.textKey) }\n                    </div>\n                </div>\n            );\n        });\n    }\n\n    _enableAudioOnly: () => void;\n\n    /**\n     * Dispatches an action to enable audio only mode.\n     *\n     * @private\n     * @returns {void}\n     */\n    _enableAudioOnly() {\n        sendAnalytics(createEvent('audio.only'));\n        logger.log('Video quality: audio only enabled');\n        this.props.dispatch(setAudioOnly(true));\n    }\n\n    _enableHighDefinition: () => void;\n\n    /**\n     * Handles the action of the high definition video being selected.\n     * Dispatches an action to receive high quality video from remote\n     * participants.\n     *\n     * @private\n     * @returns {void}\n     */\n    _enableHighDefinition() {\n        sendAnalytics(createEvent('high'));\n        logger.log('Video quality: high enabled');\n        this._setPreferredVideoQuality(HIGH);\n    }\n\n    _enableLowDefinition: () => void;\n\n    /**\n     * Dispatches an action to receive low quality video from remote\n     * participants.\n     *\n     * @private\n     * @returns {void}\n     */\n    _enableLowDefinition() {\n        sendAnalytics(createEvent('low'));\n        logger.log('Video quality: low enabled');\n        this._setPreferredVideoQuality(LOW);\n    }\n\n    _enableStandardDefinition: () => void;\n\n    /**\n     * Dispatches an action to receive standard quality video from remote\n     * participants.\n     *\n     * @private\n     * @returns {void}\n     */\n    _enableStandardDefinition() {\n        sendAnalytics(createEvent('standard'));\n        logger.log('Video quality: standard enabled');\n        this._setPreferredVideoQuality(STANDARD);\n    }\n\n    /**\n     * Matches the current video quality state with corresponding index of the\n     * component's slider options.\n     *\n     * @private\n     * @returns {void}\n     */\n    _mapCurrentQualityToSliderValue() {\n        const { _audioOnly, _sendrecvVideoQuality } = this.props;\n        const { _sliderOptions } = this;\n\n        if (_audioOnly) {\n            const audioOnlyOption = _sliderOptions.find(\n                ({ audioOnly }) => audioOnly);\n\n            return _sliderOptions.indexOf(audioOnlyOption);\n        }\n\n        const matchingOption = _sliderOptions.find(\n            ({ videoQuality }) => videoQuality === _sendrecvVideoQuality);\n\n        return _sliderOptions.indexOf(matchingOption);\n    }\n\n    _onSliderChange: () => void;\n\n    /**\n     * Invokes a callback when the selected video quality changes.\n     *\n     * @param {Object} event - The slider's change event.\n     * @private\n     * @returns {void}\n     */\n    _onSliderChange(event) {\n        const { _audioOnly, _sendrecvVideoQuality } = this.props;\n        const {\n            audioOnly,\n            onSelect,\n            videoQuality\n        } = this._sliderOptions[event.target.value];\n\n        // Take no action if the newly chosen option does not change audio only\n        // or video quality state.\n        if ((_audioOnly && audioOnly)\n            || (!_audioOnly && videoQuality === _sendrecvVideoQuality)) {\n            return;\n        }\n\n        onSelect();\n    }\n\n    /**\n     * Helper for changing the preferred maximum video quality to receive and\n     * disable audio only.\n     *\n     * @param {number} qualityLevel - The new maximum video quality. Should be\n     * a value enumerated in {@code VIDEO_QUALITY_LEVELS}.\n     * @private\n     * @returns {void}\n     */\n    _setPreferredVideoQuality(qualityLevel) {\n        this.props.dispatch(setPreferredVideoQuality(qualityLevel));\n\n        if (this.props._audioOnly) {\n            this.props.dispatch(setAudioOnly(false));\n        }\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code VideoQualitySlider} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _audioOnly: boolean,\n *     _p2p: boolean,\n *     _sendrecvVideoQuality: number\n * }}\n */\nfunction _mapStateToProps(state) {\n    const { enabled: audioOnly } = state['features/base/audio-only'];\n    const { p2p, preferredVideoQuality } = state['features/base/conference'];\n\n    return {\n        _audioOnly: audioOnly,\n        _p2p: p2p,\n        _sendrecvVideoQuality: preferredVideoQuality,\n        _videoSupported: JitsiMeetJS.mediaDevices.supportsVideo()\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(VideoQualitySlider));\n","import React, { Component } from 'react';\n\nimport { Dialog } from '../../base/dialog';\n\nimport VideoQualitySlider from './VideoQualitySlider';\n\n/**\n * Implements a React {@link Component} which displays the component\n * {@code VideoQualitySlider} in a dialog.\n *\n * @extends Component\n */\nexport default class VideoQualityDialog extends Component {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                hideCancelButton = { true }\n                okKey = 'dialog.done'\n                titleKey = 'videoStatus.callQuality'\n                width = 'small'>\n                <VideoQualitySlider />\n            </Dialog>\n        );\n    }\n}\n","// @flow\n\nimport { Component } from 'react';\n\nexport type Props = {\n\n    /**\n     * Whether or not the conference is in audio only mode.\n     */\n    _audioOnly: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Abstract class for the {@code VideoQualityLabel} component.\n */\nexport default class AbstractVideoQualityLabel<P: Props> extends Component<P> {\n\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code AbstractVideoQualityLabel}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _audioOnly: boolean\n * }}\n */\nexport function _abstractMapStateToProps(state: Object) {\n    const { enabled: audioOnly } = state['features/base/audio-only'];\n\n    return {\n        _audioOnly: audioOnly\n    };\n}\n","// @flow\n\nimport Tooltip from '@atlaskit/tooltip';\nimport React from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { CircularLabel } from '../../base/label';\nimport { MEDIA_TYPE } from '../../base/media';\nimport { connect } from '../../base/redux';\nimport { getTrackByMediaTypeAndParticipant } from '../../base/tracks';\n\nimport AbstractVideoQualityLabel, {\n    _abstractMapStateToProps,\n    type Props as AbstractProps\n} from './AbstractVideoQualityLabel';\n\ntype Props = AbstractProps & {\n\n    /**\n     * The message to show within the label.\n     */\n    _labelKey: string,\n\n    /**\n     * The message to show within the label's tooltip.\n     */\n    _tooltipKey: string,\n\n    /**\n     * The redux representation of the JitsiTrack displayed on large video.\n     */\n    _videoTrack: Object\n};\n\n/**\n * A map of video resolution (number) to translation key.\n *\n * @type {Object}\n */\nconst RESOLUTION_TO_TRANSLATION_KEY = {\n    '720': 'videoStatus.hd',\n    '360': 'videoStatus.sd',\n    '180': 'videoStatus.ld'\n};\n\n/**\n * Expected video resolutions placed into an array, sorted from lowest to\n * highest resolution.\n *\n * @type {number[]}\n */\nconst RESOLUTIONS\n    = Object.keys(RESOLUTION_TO_TRANSLATION_KEY)\n        .map(resolution => parseInt(resolution, 10))\n        .sort((a, b) => a - b);\n\n/**\n * React {@code Component} responsible for displaying a label that indicates\n * the displayed video state of the current conference. {@code AudioOnlyLabel}\n * will display when the conference is in audio only mode. {@code HDVideoLabel}\n * will display if not in audio only mode and a high-definition large video is\n * being displayed.\n */\nexport class VideoQualityLabel extends AbstractVideoQualityLabel<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            _audioOnly,\n            _labelKey,\n            _tooltipKey,\n            _videoTrack,\n            t\n        } = this.props;\n\n\n        let className, labelContent, tooltipKey;\n\n        if (_audioOnly) {\n            className = 'audio-only';\n            labelContent = t('videoStatus.audioOnly');\n            tooltipKey = 'videoStatus.labelTooltipAudioOnly';\n        } else if (!_videoTrack || _videoTrack.muted) {\n            className = 'no-video';\n            labelContent = t('videoStatus.audioOnly');\n            tooltipKey = 'videoStatus.labelTooiltipNoVideo';\n        } else {\n            className = 'current-video-quality';\n            labelContent = t(_labelKey);\n            tooltipKey = _tooltipKey;\n        }\n\n\n        return (\n            <Tooltip\n                content = { t(tooltipKey) }\n                position = { 'left' }>\n                <CircularLabel\n                    className = { className }\n                    id = 'videoResolutionLabel'\n                    label = { labelContent } />\n            </Tooltip>\n        );\n    }\n}\n\n/**\n * Matches the passed in resolution with a translation keys for describing\n * the resolution. The passed in resolution will be matched with a known\n * resolution that it is at least greater than or equal to.\n *\n * @param {number} resolution - The video height to match with a\n * translation.\n * @private\n * @returns {Object}\n */\nfunction _mapResolutionToTranslationsKeys(resolution) {\n    // Set the default matching resolution of the lowest just in case a match is\n    // not found.\n    let highestMatchingResolution = RESOLUTIONS[0];\n\n    for (let i = 0; i < RESOLUTIONS.length; i++) {\n        const knownResolution = RESOLUTIONS[i];\n\n        if (resolution >= knownResolution) {\n            highestMatchingResolution = knownResolution;\n        } else {\n            break;\n        }\n    }\n\n    const labelKey\n        = RESOLUTION_TO_TRANSLATION_KEY[highestMatchingResolution];\n\n    return {\n        labelKey,\n        tooltipKey: `${labelKey}Tooltip`\n    };\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code VideoQualityLabel}'s\n * props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _labelKey: string,\n *     _tooltipKey: string,\n *     _videoTrack: Object\n * }}\n */\nfunction _mapStateToProps(state) {\n    const { enabled: audioOnly } = state['features/base/audio-only'];\n    const { resolution, participantId } = state['features/large-video'];\n    const videoTrackOnLargeVideo = getTrackByMediaTypeAndParticipant(\n        state['features/base/tracks'],\n        MEDIA_TYPE.VIDEO,\n        participantId\n    );\n\n    const translationKeys\n        = audioOnly ? {} : _mapResolutionToTranslationsKeys(resolution);\n\n    return {\n        ..._abstractMapStateToProps(state),\n        _labelKey: translationKeys.labelKey,\n        _tooltipKey: translationKeys.tooltipKey,\n        _videoTrack: videoTrackOnLargeVideo\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(VideoQualityLabel));\n","// @flow\n\nimport { VIDEO_QUALITY_LEVELS } from '../base/conference';\nimport logger from './logger';\n\nimport type { Dispatch } from 'redux';\n\n/**\n * Sets the maximum video size the local participant should send and receive from\n * remote participants.\n *\n * @param {number} frameHeight - The user preferred max frame height for send and\n * receive video.\n * @returns {void}\n */\nexport function setVideoQuality(frameHeight: number) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { conference, maxReceiverVideoQuality } = getState()['features/base/conference'];\n\n        if (frameHeight < VIDEO_QUALITY_LEVELS.LOW) {\n            logger.error(`Invalid frame height for video quality - ${frameHeight}`);\n\n            return;\n        }\n        conference.setReceiverVideoConstraint(Math.min(frameHeight, maxReceiverVideoQuality));\n        conference.setSenderVideoConstraint(Math.min(frameHeight, VIDEO_QUALITY_LEVELS.HIGH))\n            .catch(err => {\n                logger.error(`Set video quality command failed - ${err}`);\n            });\n    };\n}\n","export * from './components';\nexport * from './actions';\n","function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nexport default function _typeof(obj) {\n  if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return _typeof2(obj);\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n    };\n  }\n\n  return _typeof(obj);\n}","export default function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}","import defineProperty from \"./defineProperty\";\nexport default function _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    var ownKeys = Object.keys(source);\n\n    if (typeof Object.getOwnPropertySymbols === 'function') {\n      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n      }));\n    }\n\n    ownKeys.forEach(function (key) {\n      defineProperty(target, key, source[key]);\n    });\n  }\n\n  return target;\n}","export default function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}","function _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}","export default function _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}","import _typeof from \"../../helpers/esm/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}","export default function _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) setPrototypeOf(subClass, superClass);\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}","export default function _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n      arr2[i] = arr[i];\n    }\n\n    return arr2;\n  }\n}","export default function _iterableToArray(iter) {\n  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}","export default function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}","export default function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}","import _typeof from '@babel/runtime/helpers/esm/typeof';\nimport _objectSpread from '@babel/runtime/helpers/esm/objectSpread';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\n\nvar consoleLogger = {\n  type: 'logger',\n  log: function log(args) {\n    this.output('log', args);\n  },\n  warn: function warn(args) {\n    this.output('warn', args);\n  },\n  error: function error(args) {\n    this.output('error', args);\n  },\n  output: function output(type, args) {\n    var _console;\n\n    /* eslint no-console: 0 */\n    if (console && console[type]) (_console = console)[type].apply(_console, _toConsumableArray(args));\n  }\n};\n\nvar Logger =\n/*#__PURE__*/\nfunction () {\n  function Logger(concreteLogger) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Logger);\n\n    this.init(concreteLogger, options);\n  }\n\n  _createClass(Logger, [{\n    key: \"init\",\n    value: function init(concreteLogger) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      this.prefix = options.prefix || 'i18next:';\n      this.logger = concreteLogger || consoleLogger;\n      this.options = options;\n      this.debug = options.debug;\n    }\n  }, {\n    key: \"setDebug\",\n    value: function setDebug(bool) {\n      this.debug = bool;\n    }\n  }, {\n    key: \"log\",\n    value: function log() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return this.forward(args, 'log', '', true);\n    }\n  }, {\n    key: \"warn\",\n    value: function warn() {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return this.forward(args, 'warn', '', true);\n    }\n  }, {\n    key: \"error\",\n    value: function error() {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      return this.forward(args, 'error', '');\n    }\n  }, {\n    key: \"deprecate\",\n    value: function deprecate() {\n      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n\n      return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n    }\n  }, {\n    key: \"forward\",\n    value: function forward(args, lvl, prefix, debugOnly) {\n      if (debugOnly && !this.debug) return null;\n      if (typeof args[0] === 'string') args[0] = \"\".concat(prefix).concat(this.prefix, \" \").concat(args[0]);\n      return this.logger[lvl](args);\n    }\n  }, {\n    key: \"create\",\n    value: function create(moduleName) {\n      return new Logger(this.logger, _objectSpread({}, {\n        prefix: \"\".concat(this.prefix, \":\").concat(moduleName, \":\")\n      }, this.options));\n    }\n  }]);\n\n  return Logger;\n}();\n\nvar baseLogger = new Logger();\n\nvar EventEmitter =\n/*#__PURE__*/\nfunction () {\n  function EventEmitter() {\n    _classCallCheck(this, EventEmitter);\n\n    this.observers = {};\n  }\n\n  _createClass(EventEmitter, [{\n    key: \"on\",\n    value: function on(events, listener) {\n      var _this = this;\n\n      events.split(' ').forEach(function (event) {\n        _this.observers[event] = _this.observers[event] || [];\n\n        _this.observers[event].push(listener);\n      });\n      return this;\n    }\n  }, {\n    key: \"off\",\n    value: function off(event, listener) {\n      var _this2 = this;\n\n      if (!this.observers[event]) {\n        return;\n      }\n\n      this.observers[event].forEach(function () {\n        if (!listener) {\n          delete _this2.observers[event];\n        } else {\n          var index = _this2.observers[event].indexOf(listener);\n\n          if (index > -1) {\n            _this2.observers[event].splice(index, 1);\n          }\n        }\n      });\n    }\n  }, {\n    key: \"emit\",\n    value: function emit(event) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      if (this.observers[event]) {\n        var cloned = [].concat(this.observers[event]);\n        cloned.forEach(function (observer) {\n          observer.apply(void 0, args);\n        });\n      }\n\n      if (this.observers['*']) {\n        var _cloned = [].concat(this.observers['*']);\n\n        _cloned.forEach(function (observer) {\n          observer.apply(observer, [event].concat(args));\n        });\n      }\n    }\n  }]);\n\n  return EventEmitter;\n}();\n\n// http://lea.verou.me/2016/12/resolve-promises-externally-with-this-one-weird-trick/\nfunction defer() {\n  var res;\n  var rej;\n  var promise = new Promise(function (resolve, reject) {\n    res = resolve;\n    rej = reject;\n  });\n  promise.resolve = res;\n  promise.reject = rej;\n  return promise;\n}\nfunction makeString(object) {\n  if (object == null) return '';\n  /* eslint prefer-template: 0 */\n\n  return '' + object;\n}\nfunction copy(a, s, t) {\n  a.forEach(function (m) {\n    if (s[m]) t[m] = s[m];\n  });\n}\n\nfunction getLastOfPath(object, path, Empty) {\n  function cleanKey(key) {\n    return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n  }\n\n  function canNotTraverseDeeper() {\n    return !object || typeof object === 'string';\n  }\n\n  var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n\n  while (stack.length > 1) {\n    if (canNotTraverseDeeper()) return {};\n    var key = cleanKey(stack.shift());\n    if (!object[key] && Empty) object[key] = new Empty();\n    object = object[key];\n  }\n\n  if (canNotTraverseDeeper()) return {};\n  return {\n    obj: object,\n    k: cleanKey(stack.shift())\n  };\n}\n\nfunction setPath(object, path, newValue) {\n  var _getLastOfPath = getLastOfPath(object, path, Object),\n      obj = _getLastOfPath.obj,\n      k = _getLastOfPath.k;\n\n  obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n  var _getLastOfPath2 = getLastOfPath(object, path, Object),\n      obj = _getLastOfPath2.obj,\n      k = _getLastOfPath2.k;\n\n  obj[k] = obj[k] || [];\n  if (concat) obj[k] = obj[k].concat(newValue);\n  if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n  var _getLastOfPath3 = getLastOfPath(object, path),\n      obj = _getLastOfPath3.obj,\n      k = _getLastOfPath3.k;\n\n  if (!obj) return undefined;\n  return obj[k];\n}\nfunction deepExtend(target, source, overwrite) {\n  /* eslint no-restricted-syntax: 0 */\n  for (var prop in source) {\n    if (prop in target) {\n      // If we reached a leaf string in target or source then replace with source or skip depending on the 'overwrite' switch\n      if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n        if (overwrite) target[prop] = source[prop];\n      } else {\n        deepExtend(target[prop], source[prop], overwrite);\n      }\n    } else {\n      target[prop] = source[prop];\n    }\n  }\n\n  return target;\n}\nfunction regexEscape(str) {\n  /* eslint no-useless-escape: 0 */\n  return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\n/* eslint-disable */\n\nvar _entityMap = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  '/': '&#x2F;'\n};\n/* eslint-enable */\n\nfunction escape(data) {\n  if (typeof data === 'string') {\n    return data.replace(/[&<>\"'\\/]/g, function (s) {\n      return _entityMap[s];\n    });\n  }\n\n  return data;\n}\n\nvar ResourceStore =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n  _inherits(ResourceStore, _EventEmitter);\n\n  function ResourceStore(data) {\n    var _this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      ns: ['translation'],\n      defaultNS: 'translation'\n    };\n\n    _classCallCheck(this, ResourceStore);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(ResourceStore).call(this));\n    EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)\n\n    _this.data = data || {};\n    _this.options = options;\n\n    if (_this.options.keySeparator === undefined) {\n      _this.options.keySeparator = '.';\n    }\n\n    return _this;\n  }\n\n  _createClass(ResourceStore, [{\n    key: \"addNamespaces\",\n    value: function addNamespaces(ns) {\n      if (this.options.ns.indexOf(ns) < 0) {\n        this.options.ns.push(ns);\n      }\n    }\n  }, {\n    key: \"removeNamespaces\",\n    value: function removeNamespaces(ns) {\n      var index = this.options.ns.indexOf(ns);\n\n      if (index > -1) {\n        this.options.ns.splice(index, 1);\n      }\n    }\n  }, {\n    key: \"getResource\",\n    value: function getResource(lng, ns, key) {\n      var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n      var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n      var path = [lng, ns];\n      if (key && typeof key !== 'string') path = path.concat(key);\n      if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n      if (lng.indexOf('.') > -1) {\n        path = lng.split('.');\n      }\n\n      return getPath(this.data, path);\n    }\n  }, {\n    key: \"addResource\",\n    value: function addResource(lng, ns, key, value) {\n      var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n        silent: false\n      };\n      var keySeparator = this.options.keySeparator;\n      if (keySeparator === undefined) keySeparator = '.';\n      var path = [lng, ns];\n      if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n      if (lng.indexOf('.') > -1) {\n        path = lng.split('.');\n        value = ns;\n        ns = path[1];\n      }\n\n      this.addNamespaces(ns);\n      setPath(this.data, path, value);\n      if (!options.silent) this.emit('added', lng, ns, key, value);\n    }\n  }, {\n    key: \"addResources\",\n    value: function addResources(lng, ns, resources) {\n      var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n        silent: false\n      };\n\n      /* eslint no-restricted-syntax: 0 */\n      for (var m in resources) {\n        if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n          silent: true\n        });\n      }\n\n      if (!options.silent) this.emit('added', lng, ns, resources);\n    }\n  }, {\n    key: \"addResourceBundle\",\n    value: function addResourceBundle(lng, ns, resources, deep, overwrite) {\n      var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n        silent: false\n      };\n      var path = [lng, ns];\n\n      if (lng.indexOf('.') > -1) {\n        path = lng.split('.');\n        deep = resources;\n        resources = ns;\n        ns = path[1];\n      }\n\n      this.addNamespaces(ns);\n      var pack = getPath(this.data, path) || {};\n\n      if (deep) {\n        deepExtend(pack, resources, overwrite);\n      } else {\n        pack = _objectSpread({}, pack, resources);\n      }\n\n      setPath(this.data, path, pack);\n      if (!options.silent) this.emit('added', lng, ns, resources);\n    }\n  }, {\n    key: \"removeResourceBundle\",\n    value: function removeResourceBundle(lng, ns) {\n      if (this.hasResourceBundle(lng, ns)) {\n        delete this.data[lng][ns];\n      }\n\n      this.removeNamespaces(ns);\n      this.emit('removed', lng, ns);\n    }\n  }, {\n    key: \"hasResourceBundle\",\n    value: function hasResourceBundle(lng, ns) {\n      return this.getResource(lng, ns) !== undefined;\n    }\n  }, {\n    key: \"getResourceBundle\",\n    value: function getResourceBundle(lng, ns) {\n      if (!ns) ns = this.options.defaultNS; // COMPATIBILITY: remove extend in v2.1.0\n\n      if (this.options.compatibilityAPI === 'v1') return _objectSpread({}, {}, this.getResource(lng, ns));\n      return this.getResource(lng, ns);\n    }\n  }, {\n    key: \"getDataByLanguage\",\n    value: function getDataByLanguage(lng) {\n      return this.data[lng];\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.data;\n    }\n  }]);\n\n  return ResourceStore;\n}(EventEmitter);\n\nvar postProcessor = {\n  processors: {},\n  addPostProcessor: function addPostProcessor(module) {\n    this.processors[module.name] = module;\n  },\n  handle: function handle(processors, value, key, options, translator) {\n    var _this = this;\n\n    processors.forEach(function (processor) {\n      if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n    });\n    return value;\n  }\n};\n\nvar Translator =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n  _inherits(Translator, _EventEmitter);\n\n  function Translator(services) {\n    var _this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Translator);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Translator).call(this));\n    EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)\n\n    copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat'], services, _assertThisInitialized(_this));\n    _this.options = options;\n\n    if (_this.options.keySeparator === undefined) {\n      _this.options.keySeparator = '.';\n    }\n\n    _this.logger = baseLogger.create('translator');\n    return _this;\n  }\n\n  _createClass(Translator, [{\n    key: \"changeLanguage\",\n    value: function changeLanguage(lng) {\n      if (lng) this.language = lng;\n    }\n  }, {\n    key: \"exists\",\n    value: function exists(key) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        interpolation: {}\n      };\n      var resolved = this.resolve(key, options);\n      return resolved && resolved.res !== undefined;\n    }\n  }, {\n    key: \"extractFromKey\",\n    value: function extractFromKey(key, options) {\n      var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n      if (nsSeparator === undefined) nsSeparator = ':';\n      var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n      var namespaces = options.ns || this.options.defaultNS;\n\n      if (nsSeparator && key.indexOf(nsSeparator) > -1) {\n        var parts = key.split(nsSeparator);\n        if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n        key = parts.join(keySeparator);\n      }\n\n      if (typeof namespaces === 'string') namespaces = [namespaces];\n      return {\n        key: key,\n        namespaces: namespaces\n      };\n    }\n  }, {\n    key: \"translate\",\n    value: function translate(keys, options) {\n      var _this2 = this;\n\n      if (_typeof(options) !== 'object' && this.options.overloadTranslationOptionHandler) {\n        /* eslint prefer-rest-params: 0 */\n        options = this.options.overloadTranslationOptionHandler(arguments);\n      }\n\n      if (!options) options = {}; // non valid keys handling\n\n      if (keys === undefined || keys === null) return '';\n      if (!Array.isArray(keys)) keys = [String(keys)]; // separators\n\n      var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; // get namespace(s)\n\n      var _this$extractFromKey = this.extractFromKey(keys[keys.length - 1], options),\n          key = _this$extractFromKey.key,\n          namespaces = _this$extractFromKey.namespaces;\n\n      var namespace = namespaces[namespaces.length - 1]; // return key on CIMode\n\n      var lng = options.lng || this.language;\n      var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n\n      if (lng && lng.toLowerCase() === 'cimode') {\n        if (appendNamespaceToCIMode) {\n          var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n          return namespace + nsSeparator + key;\n        }\n\n        return key;\n      } // resolve from store\n\n\n      var resolved = this.resolve(keys, options);\n      var res = resolved && resolved.res;\n      var resUsedKey = resolved && resolved.usedKey || key;\n      var resExactUsedKey = resolved && resolved.exactUsedKey || key;\n      var resType = Object.prototype.toString.apply(res);\n      var noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n      var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays; // object\n\n      var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n      var handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n\n      if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n        if (!options.returnObjects && !this.options.returnObjects) {\n          this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n          return this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, options) : \"key '\".concat(key, \" (\").concat(this.language, \")' returned an object instead of string.\");\n        } // if we got a separator we loop over children - else we just return object as is\n        // as having it set to false means no hierarchy so no lookup for nested values\n\n\n        if (keySeparator) {\n          var resTypeIsArray = resType === '[object Array]';\n          var copy$$1 = resTypeIsArray ? [] : {}; // apply child translation on a copy\n\n          /* eslint no-restricted-syntax: 0 */\n\n          var newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n\n          for (var m in res) {\n            if (Object.prototype.hasOwnProperty.call(res, m)) {\n              var deepKey = \"\".concat(newKeyToUse).concat(keySeparator).concat(m);\n              copy$$1[m] = this.translate(deepKey, _objectSpread({}, options, {\n                joinArrays: false,\n                ns: namespaces\n              }));\n              if (copy$$1[m] === deepKey) copy$$1[m] = res[m]; // if nothing found use orginal value as fallback\n            }\n          }\n\n          res = copy$$1;\n        }\n      } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n        // array special treatment\n        res = res.join(joinArrays);\n        if (res) res = this.extendTranslation(res, keys, options);\n      } else {\n        // string, empty or null\n        var usedDefault = false;\n        var usedKey = false; // fallback value\n\n        if (!this.isValidLookup(res) && options.defaultValue !== undefined) {\n          usedDefault = true;\n\n          if (options.count !== undefined) {\n            var suffix = this.pluralResolver.getSuffix(lng, options.count);\n            res = options[\"defaultValue\".concat(suffix)];\n          }\n\n          if (!res) res = options.defaultValue;\n        }\n\n        if (!this.isValidLookup(res)) {\n          usedKey = true;\n          res = key;\n        } // save missing\n\n\n        var updateMissing = options.defaultValue && options.defaultValue !== res && this.options.updateMissing;\n\n        if (usedKey || usedDefault || updateMissing) {\n          this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? options.defaultValue : res);\n          var lngs = [];\n          var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n\n          if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n            for (var i = 0; i < fallbackLngs.length; i++) {\n              lngs.push(fallbackLngs[i]);\n            }\n          } else if (this.options.saveMissingTo === 'all') {\n            lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n          } else {\n            lngs.push(options.lng || this.language);\n          }\n\n          var send = function send(l, k) {\n            if (_this2.options.missingKeyHandler) {\n              _this2.options.missingKeyHandler(l, namespace, k, updateMissing ? options.defaultValue : res, updateMissing, options);\n            } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) {\n              _this2.backendConnector.saveMissing(l, namespace, k, updateMissing ? options.defaultValue : res, updateMissing, options);\n            }\n\n            _this2.emit('missingKey', l, namespace, k, res);\n          };\n\n          if (this.options.saveMissing) {\n            var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n\n            if (this.options.saveMissingPlurals && needsPluralHandling) {\n              lngs.forEach(function (l) {\n                var plurals = _this2.pluralResolver.getPluralFormsOfKey(l, key);\n\n                plurals.forEach(function (p) {\n                  return send([l], p);\n                });\n              });\n            } else {\n              send(lngs, key);\n            }\n          }\n        } // extend\n\n\n        res = this.extendTranslation(res, keys, options, resolved); // append namespace if still key\n\n        if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = \"\".concat(namespace, \":\").concat(key); // parseMissingKeyHandler\n\n        if (usedKey && this.options.parseMissingKeyHandler) res = this.options.parseMissingKeyHandler(res);\n      } // return\n\n\n      return res;\n    }\n  }, {\n    key: \"extendTranslation\",\n    value: function extendTranslation(res, key, options, resolved) {\n      var _this3 = this;\n\n      if (this.i18nFormat && this.i18nFormat.parse) {\n        res = this.i18nFormat.parse(res, options, resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n          resolved: resolved\n        });\n      } else if (!options.skipInterpolation) {\n        // i18next.parsing\n        if (options.interpolation) this.interpolator.init(_objectSpread({}, options, {\n          interpolation: _objectSpread({}, this.options.interpolation, options.interpolation)\n        })); // interpolate\n\n        var data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n        if (this.options.interpolation.defaultVariables) data = _objectSpread({}, this.options.interpolation.defaultVariables, data);\n        res = this.interpolator.interpolate(res, data, options.lng || this.language, options); // nesting\n\n        if (options.nest !== false) res = this.interpolator.nest(res, function () {\n          return _this3.translate.apply(_this3, arguments);\n        }, options);\n        if (options.interpolation) this.interpolator.reset();\n      } // post process\n\n\n      var postProcess = options.postProcess || this.options.postProcess;\n      var postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n\n      if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n        res = postProcessor.handle(postProcessorNames, res, key, options, this);\n      }\n\n      return res;\n    }\n  }, {\n    key: \"resolve\",\n    value: function resolve(keys) {\n      var _this4 = this;\n\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var found;\n      var usedKey; // plain key\n\n      var exactUsedKey; // key with context / plural\n\n      var usedLng;\n      var usedNS;\n      if (typeof keys === 'string') keys = [keys]; // forEach possible key\n\n      keys.forEach(function (k) {\n        if (_this4.isValidLookup(found)) return;\n\n        var extracted = _this4.extractFromKey(k, options);\n\n        var key = extracted.key;\n        usedKey = key;\n        var namespaces = extracted.namespaces;\n        if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS);\n        var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n        var needsContextHandling = options.context !== undefined && typeof options.context === 'string' && options.context !== '';\n        var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng);\n        namespaces.forEach(function (ns) {\n          if (_this4.isValidLookup(found)) return;\n          usedNS = ns;\n          codes.forEach(function (code) {\n            if (_this4.isValidLookup(found)) return;\n            usedLng = code;\n            var finalKey = key;\n            var finalKeys = [finalKey];\n\n            if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {\n              _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n            } else {\n              var pluralSuffix;\n              if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count); // fallback for plural if context not found\n\n              if (needsPluralHandling && needsContextHandling) finalKeys.push(finalKey + pluralSuffix); // get key for context if needed\n\n              if (needsContextHandling) finalKeys.push(finalKey += \"\".concat(_this4.options.contextSeparator).concat(options.context)); // get key for plural if needed\n\n              if (needsPluralHandling) finalKeys.push(finalKey += pluralSuffix);\n            } // iterate over finalKeys starting with most specific pluralkey (-> contextkey only) -> singularkey only\n\n\n            var possibleKey;\n            /* eslint no-cond-assign: 0 */\n\n            while (possibleKey = finalKeys.pop()) {\n              if (!_this4.isValidLookup(found)) {\n                exactUsedKey = possibleKey;\n                found = _this4.getResource(code, ns, possibleKey, options);\n              }\n            }\n          });\n        });\n      });\n      return {\n        res: found,\n        usedKey: usedKey,\n        exactUsedKey: exactUsedKey,\n        usedLng: usedLng,\n        usedNS: usedNS\n      };\n    }\n  }, {\n    key: \"isValidLookup\",\n    value: function isValidLookup(res) {\n      return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n    }\n  }, {\n    key: \"getResource\",\n    value: function getResource(code, ns, key) {\n      var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n      if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n      return this.resourceStore.getResource(code, ns, key, options);\n    }\n  }]);\n\n  return Translator;\n}(EventEmitter);\n\nfunction capitalize(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar LanguageUtil =\n/*#__PURE__*/\nfunction () {\n  function LanguageUtil(options) {\n    _classCallCheck(this, LanguageUtil);\n\n    this.options = options;\n    this.whitelist = this.options.whitelist || false;\n    this.logger = baseLogger.create('languageUtils');\n  }\n\n  _createClass(LanguageUtil, [{\n    key: \"getScriptPartFromCode\",\n    value: function getScriptPartFromCode(code) {\n      if (!code || code.indexOf('-') < 0) return null;\n      var p = code.split('-');\n      if (p.length === 2) return null;\n      p.pop();\n      return this.formatLanguageCode(p.join('-'));\n    }\n  }, {\n    key: \"getLanguagePartFromCode\",\n    value: function getLanguagePartFromCode(code) {\n      if (!code || code.indexOf('-') < 0) return code;\n      var p = code.split('-');\n      return this.formatLanguageCode(p[0]);\n    }\n  }, {\n    key: \"formatLanguageCode\",\n    value: function formatLanguageCode(code) {\n      // http://www.iana.org/assignments/language-tags/language-tags.xhtml\n      if (typeof code === 'string' && code.indexOf('-') > -1) {\n        var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n        var p = code.split('-');\n\n        if (this.options.lowerCaseLng) {\n          p = p.map(function (part) {\n            return part.toLowerCase();\n          });\n        } else if (p.length === 2) {\n          p[0] = p[0].toLowerCase();\n          p[1] = p[1].toUpperCase();\n          if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n        } else if (p.length === 3) {\n          p[0] = p[0].toLowerCase(); // if lenght 2 guess it's a country\n\n          if (p[1].length === 2) p[1] = p[1].toUpperCase();\n          if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n          if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n          if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n        }\n\n        return p.join('-');\n      }\n\n      return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n    }\n  }, {\n    key: \"isWhitelisted\",\n    value: function isWhitelisted(code) {\n      if (this.options.load === 'languageOnly' || this.options.nonExplicitWhitelist) {\n        code = this.getLanguagePartFromCode(code);\n      }\n\n      return !this.whitelist || !this.whitelist.length || this.whitelist.indexOf(code) > -1;\n    }\n  }, {\n    key: \"getFallbackCodes\",\n    value: function getFallbackCodes(fallbacks, code) {\n      if (!fallbacks) return [];\n      if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n      if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n      if (!code) return fallbacks[\"default\"] || []; // asume we have an object defining fallbacks\n\n      var found = fallbacks[code];\n      if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n      if (!found) found = fallbacks[this.formatLanguageCode(code)];\n      if (!found) found = fallbacks[\"default\"];\n      return found || [];\n    }\n  }, {\n    key: \"toResolveHierarchy\",\n    value: function toResolveHierarchy(code, fallbackCode) {\n      var _this = this;\n\n      var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n      var codes = [];\n\n      var addCode = function addCode(c) {\n        if (!c) return;\n\n        if (_this.isWhitelisted(c)) {\n          codes.push(c);\n        } else {\n          _this.logger.warn(\"rejecting non-whitelisted language code: \".concat(c));\n        }\n      };\n\n      if (typeof code === 'string' && code.indexOf('-') > -1) {\n        if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n        if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n        if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n      } else if (typeof code === 'string') {\n        addCode(this.formatLanguageCode(code));\n      }\n\n      fallbackCodes.forEach(function (fc) {\n        if (codes.indexOf(fc) < 0) addCode(_this.formatLanguageCode(fc));\n      });\n      return codes;\n    }\n  }]);\n\n  return LanguageUtil;\n}();\n\n/* eslint-disable */\n\nvar sets = [{\n  lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'ti', 'tr', 'uz', 'wa'],\n  nr: [1, 2],\n  fc: 1\n}, {\n  lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n  nr: [1, 2],\n  fc: 2\n}, {\n  lngs: ['ay', 'bo', 'cgg', 'fa', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n  nr: [1],\n  fc: 3\n}, {\n  lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n  nr: [1, 2, 5],\n  fc: 4\n}, {\n  lngs: ['ar'],\n  nr: [0, 1, 2, 3, 11, 100],\n  fc: 5\n}, {\n  lngs: ['cs', 'sk'],\n  nr: [1, 2, 5],\n  fc: 6\n}, {\n  lngs: ['csb', 'pl'],\n  nr: [1, 2, 5],\n  fc: 7\n}, {\n  lngs: ['cy'],\n  nr: [1, 2, 3, 8],\n  fc: 8\n}, {\n  lngs: ['fr'],\n  nr: [1, 2],\n  fc: 9\n}, {\n  lngs: ['ga'],\n  nr: [1, 2, 3, 7, 11],\n  fc: 10\n}, {\n  lngs: ['gd'],\n  nr: [1, 2, 3, 20],\n  fc: 11\n}, {\n  lngs: ['is'],\n  nr: [1, 2],\n  fc: 12\n}, {\n  lngs: ['jv'],\n  nr: [0, 1],\n  fc: 13\n}, {\n  lngs: ['kw'],\n  nr: [1, 2, 3, 4],\n  fc: 14\n}, {\n  lngs: ['lt'],\n  nr: [1, 2, 10],\n  fc: 15\n}, {\n  lngs: ['lv'],\n  nr: [1, 2, 0],\n  fc: 16\n}, {\n  lngs: ['mk'],\n  nr: [1, 2],\n  fc: 17\n}, {\n  lngs: ['mnk'],\n  nr: [0, 1, 2],\n  fc: 18\n}, {\n  lngs: ['mt'],\n  nr: [1, 2, 11, 20],\n  fc: 19\n}, {\n  lngs: ['or'],\n  nr: [2, 1],\n  fc: 2\n}, {\n  lngs: ['ro'],\n  nr: [1, 2, 20],\n  fc: 20\n}, {\n  lngs: ['sl'],\n  nr: [5, 1, 2, 3],\n  fc: 21\n}, {\n  lngs: ['he'],\n  nr: [1, 2, 20, 21],\n  fc: 22\n}];\nvar _rulesPluralsTypes = {\n  1: function _(n) {\n    return Number(n > 1);\n  },\n  2: function _(n) {\n    return Number(n != 1);\n  },\n  3: function _(n) {\n    return 0;\n  },\n  4: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  5: function _(n) {\n    return Number(n === 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n  },\n  6: function _(n) {\n    return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n  },\n  7: function _(n) {\n    return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  8: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n  },\n  9: function _(n) {\n    return Number(n >= 2);\n  },\n  10: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n  },\n  11: function _(n) {\n    return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n  },\n  12: function _(n) {\n    return Number(n % 10 != 1 || n % 100 == 11);\n  },\n  13: function _(n) {\n    return Number(n !== 0);\n  },\n  14: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n  },\n  15: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  16: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n  },\n  17: function _(n) {\n    return Number(n == 1 || n % 10 == 1 ? 0 : 1);\n  },\n  18: function _(n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n  },\n  19: function _(n) {\n    return Number(n == 1 ? 0 : n === 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n  },\n  20: function _(n) {\n    return Number(n == 1 ? 0 : n === 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n  },\n  21: function _(n) {\n    return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n  },\n  22: function _(n) {\n    return Number(n === 1 ? 0 : n === 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n  }\n};\n/* eslint-enable */\n\nfunction createRules() {\n  var rules = {};\n  sets.forEach(function (set) {\n    set.lngs.forEach(function (l) {\n      rules[l] = {\n        numbers: set.nr,\n        plurals: _rulesPluralsTypes[set.fc]\n      };\n    });\n  });\n  return rules;\n}\n\nvar PluralResolver =\n/*#__PURE__*/\nfunction () {\n  function PluralResolver(languageUtils) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, PluralResolver);\n\n    this.languageUtils = languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('pluralResolver');\n    this.rules = createRules();\n  }\n\n  _createClass(PluralResolver, [{\n    key: \"addRule\",\n    value: function addRule(lng, obj) {\n      this.rules[lng] = obj;\n    }\n  }, {\n    key: \"getRule\",\n    value: function getRule(code) {\n      return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n    }\n  }, {\n    key: \"needsPlural\",\n    value: function needsPlural(code) {\n      var rule = this.getRule(code);\n      return rule && rule.numbers.length > 1;\n    }\n  }, {\n    key: \"getPluralFormsOfKey\",\n    value: function getPluralFormsOfKey(code, key) {\n      var _this = this;\n\n      var ret = [];\n      var rule = this.getRule(code);\n      if (!rule) return ret;\n      rule.numbers.forEach(function (n) {\n        var suffix = _this.getSuffix(code, n);\n\n        ret.push(\"\".concat(key).concat(suffix));\n      });\n      return ret;\n    }\n  }, {\n    key: \"getSuffix\",\n    value: function getSuffix(code, count) {\n      var _this2 = this;\n\n      var rule = this.getRule(code);\n\n      if (rule) {\n        // if (rule.numbers.length === 1) return ''; // only singular\n        var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n        var suffix = rule.numbers[idx]; // special treatment for lngs only having singular and plural\n\n        if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n          if (suffix === 2) {\n            suffix = 'plural';\n          } else if (suffix === 1) {\n            suffix = '';\n          }\n        }\n\n        var returnSuffix = function returnSuffix() {\n          return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString();\n        }; // COMPATIBILITY JSON\n        // v1\n\n\n        if (this.options.compatibilityJSON === 'v1') {\n          if (suffix === 1) return '';\n          if (typeof suffix === 'number') return \"_plural_\".concat(suffix.toString());\n          return returnSuffix();\n        } else if (\n        /* v2 */\n        this.options.compatibilityJSON === 'v2') {\n          return returnSuffix();\n        } else if (\n        /* v3 - gettext index */\n        this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n          return returnSuffix();\n        }\n\n        return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n      }\n\n      this.logger.warn(\"no plural rule found for: \".concat(code));\n      return '';\n    }\n  }]);\n\n  return PluralResolver;\n}();\n\nvar Interpolator =\n/*#__PURE__*/\nfunction () {\n  function Interpolator() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, Interpolator);\n\n    this.logger = baseLogger.create('interpolator');\n    this.init(options, true);\n  }\n  /* eslint no-param-reassign: 0 */\n\n\n  _createClass(Interpolator, [{\n    key: \"init\",\n    value: function init() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var reset = arguments.length > 1 ? arguments[1] : undefined;\n\n      if (reset) {\n        this.options = options;\n\n        this.format = options.interpolation && options.interpolation.format || function (value) {\n          return value;\n        };\n      }\n\n      if (!options.interpolation) options.interpolation = {\n        escapeValue: true\n      };\n      var iOpts = options.interpolation;\n      this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n      this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n      this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n      this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n      this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n      this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n      this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n      this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n      this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n      this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n      this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000; // the regexp\n\n      this.resetRegExp();\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      if (this.options) this.init(this.options);\n    }\n  }, {\n    key: \"resetRegExp\",\n    value: function resetRegExp() {\n      // the regexp\n      var regexpStr = \"\".concat(this.prefix, \"(.+?)\").concat(this.suffix);\n      this.regexp = new RegExp(regexpStr, 'g');\n      var regexpUnescapeStr = \"\".concat(this.prefix).concat(this.unescapePrefix, \"(.+?)\").concat(this.unescapeSuffix).concat(this.suffix);\n      this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n      var nestingRegexpStr = \"\".concat(this.nestingPrefix, \"(.+?)\").concat(this.nestingSuffix);\n      this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n    }\n  }, {\n    key: \"interpolate\",\n    value: function interpolate(str, data, lng, options) {\n      var _this = this;\n\n      var match;\n      var value;\n      var replaces;\n\n      function regexSafe(val) {\n        return val.replace(/\\$/g, '$$$$');\n      }\n\n      var handleFormat = function handleFormat(key) {\n        if (key.indexOf(_this.formatSeparator) < 0) return getPath(data, key);\n        var p = key.split(_this.formatSeparator);\n        var k = p.shift().trim();\n        var f = p.join(_this.formatSeparator).trim();\n        return _this.format(getPath(data, k), f, lng);\n      };\n\n      this.resetRegExp();\n      var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n      replaces = 0; // unescape if has unescapePrefix/Suffix\n\n      /* eslint no-cond-assign: 0 */\n\n      while (match = this.regexpUnescape.exec(str)) {\n        value = handleFormat(match[1].trim());\n        str = str.replace(match[0], value);\n        this.regexpUnescape.lastIndex = 0;\n        replaces++;\n\n        if (replaces >= this.maxReplaces) {\n          break;\n        }\n      }\n\n      replaces = 0; // regular escape on demand\n\n      while (match = this.regexp.exec(str)) {\n        value = handleFormat(match[1].trim());\n\n        if (value === undefined) {\n          if (typeof missingInterpolationHandler === 'function') {\n            var temp = missingInterpolationHandler(str, match, options);\n            value = typeof temp === 'string' ? temp : '';\n          } else {\n            this.logger.warn(\"missed to pass in variable \".concat(match[1], \" for interpolating \").concat(str));\n            value = '';\n          }\n        } else if (typeof value !== 'string' && !this.useRawValueToEscape) {\n          value = makeString(value);\n        }\n\n        value = this.escapeValue ? regexSafe(this.escape(value)) : regexSafe(value);\n        str = str.replace(match[0], value);\n        this.regexp.lastIndex = 0;\n        replaces++;\n\n        if (replaces >= this.maxReplaces) {\n          break;\n        }\n      }\n\n      return str;\n    }\n  }, {\n    key: \"nest\",\n    value: function nest(str, fc) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var match;\n      var value;\n\n      var clonedOptions = _objectSpread({}, options);\n\n      clonedOptions.applyPostProcessor = false; // avoid post processing on nested lookup\n      // if value is something like \"myKey\": \"lorem $(anotherKey, { \"count\": {{aValueInOptions}} })\"\n\n      function handleHasOptions(key, inheritedOptions) {\n        if (key.indexOf(',') < 0) return key;\n        var p = key.split(',');\n        key = p.shift();\n        var optionsString = p.join(',');\n        optionsString = this.interpolate(optionsString, clonedOptions);\n        optionsString = optionsString.replace(/'/g, '\"');\n\n        try {\n          clonedOptions = JSON.parse(optionsString);\n          if (inheritedOptions) clonedOptions = _objectSpread({}, inheritedOptions, clonedOptions);\n        } catch (e) {\n          this.logger.error(\"failed parsing options string in nesting for key \".concat(key), e);\n        }\n\n        return key;\n      } // regular escape on demand\n\n\n      while (match = this.nestingRegexp.exec(str)) {\n        value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions); // is only the nesting key (key1 = '$(key2)') return the value without stringify\n\n        if (value && match[0] === str && typeof value !== 'string') return value; // no string to include or empty\n\n        if (typeof value !== 'string') value = makeString(value);\n\n        if (!value) {\n          this.logger.warn(\"missed to resolve \".concat(match[1], \" for nesting \").concat(str));\n          value = '';\n        } // Nested keys should not be escaped by default #854\n        // value = this.escapeValue ? regexSafe(utils.escape(value)) : regexSafe(value);\n\n\n        str = str.replace(match[0], value);\n        this.regexp.lastIndex = 0;\n      }\n\n      return str;\n    }\n  }]);\n\n  return Interpolator;\n}();\n\nfunction remove(arr, what) {\n  var found = arr.indexOf(what);\n\n  while (found !== -1) {\n    arr.splice(found, 1);\n    found = arr.indexOf(what);\n  }\n}\n\nvar Connector =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n  _inherits(Connector, _EventEmitter);\n\n  function Connector(backend, store, services) {\n    var _this;\n\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n    _classCallCheck(this, Connector);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Connector).call(this));\n    EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)\n\n    _this.backend = backend;\n    _this.store = store;\n    _this.languageUtils = services.languageUtils;\n    _this.options = options;\n    _this.logger = baseLogger.create('backendConnector');\n    _this.state = {};\n    _this.queue = [];\n\n    if (_this.backend && _this.backend.init) {\n      _this.backend.init(services, options.backend, options);\n    }\n\n    return _this;\n  }\n\n  _createClass(Connector, [{\n    key: \"queueLoad\",\n    value: function queueLoad(languages, namespaces, options, callback) {\n      var _this2 = this;\n\n      // find what needs to be loaded\n      var toLoad = [];\n      var pending = [];\n      var toLoadLanguages = [];\n      var toLoadNamespaces = [];\n      languages.forEach(function (lng) {\n        var hasAllNamespaces = true;\n        namespaces.forEach(function (ns) {\n          var name = \"\".concat(lng, \"|\").concat(ns);\n\n          if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {\n            _this2.state[name] = 2; // loaded\n          } else if (_this2.state[name] < 0) ; else if (_this2.state[name] === 1) {\n            if (pending.indexOf(name) < 0) pending.push(name);\n          } else {\n            _this2.state[name] = 1; // pending\n\n            hasAllNamespaces = false;\n            if (pending.indexOf(name) < 0) pending.push(name);\n            if (toLoad.indexOf(name) < 0) toLoad.push(name);\n            if (toLoadNamespaces.indexOf(ns) < 0) toLoadNamespaces.push(ns);\n          }\n        });\n        if (!hasAllNamespaces) toLoadLanguages.push(lng);\n      });\n\n      if (toLoad.length || pending.length) {\n        this.queue.push({\n          pending: pending,\n          loaded: {},\n          errors: [],\n          callback: callback\n        });\n      }\n\n      return {\n        toLoad: toLoad,\n        pending: pending,\n        toLoadLanguages: toLoadLanguages,\n        toLoadNamespaces: toLoadNamespaces\n      };\n    }\n  }, {\n    key: \"loaded\",\n    value: function loaded(name, err, data) {\n      var _name$split = name.split('|'),\n          _name$split2 = _slicedToArray(_name$split, 2),\n          lng = _name$split2[0],\n          ns = _name$split2[1];\n\n      if (err) this.emit('failedLoading', lng, ns, err);\n\n      if (data) {\n        this.store.addResourceBundle(lng, ns, data);\n      } // set loaded\n\n\n      this.state[name] = err ? -1 : 2; // consolidated loading done in this run - only emit once for a loaded namespace\n\n      var loaded = {}; // callback if ready\n\n      this.queue.forEach(function (q) {\n        pushPath(q.loaded, [lng], ns);\n        remove(q.pending, name);\n        if (err) q.errors.push(err);\n\n        if (q.pending.length === 0 && !q.done) {\n          // only do once per loaded -> this.emit('loaded', q.loaded);\n          Object.keys(q.loaded).forEach(function (l) {\n            if (!loaded[l]) loaded[l] = [];\n\n            if (q.loaded[l].length) {\n              q.loaded[l].forEach(function (ns) {\n                if (loaded[l].indexOf(ns) < 0) loaded[l].push(ns);\n              });\n            }\n          });\n          /* eslint no-param-reassign: 0 */\n\n          q.done = true;\n\n          if (q.errors.length) {\n            q.callback(q.errors);\n          } else {\n            q.callback();\n          }\n        }\n      }); // emit consolidated loaded event\n\n      this.emit('loaded', loaded); // remove done load requests\n\n      this.queue = this.queue.filter(function (q) {\n        return !q.done;\n      });\n    }\n  }, {\n    key: \"read\",\n    value: function read(lng, ns, fcName) {\n      var _this3 = this;\n\n      var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n      var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;\n      var callback = arguments.length > 5 ? arguments[5] : undefined;\n      if (!lng.length) return callback(null, {}); // noting to load\n\n      return this.backend[fcName](lng, ns, function (err, data) {\n        if (err && data\n        /* = retryFlag */\n        && tried < 5) {\n          setTimeout(function () {\n            _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);\n          }, wait);\n          return;\n        }\n\n        callback(err, data);\n      });\n    }\n    /* eslint consistent-return: 0 */\n\n  }, {\n    key: \"prepareLoading\",\n    value: function prepareLoading(languages, namespaces) {\n      var _this4 = this;\n\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var callback = arguments.length > 3 ? arguments[3] : undefined;\n\n      if (!this.backend) {\n        this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n        return callback && callback();\n      }\n\n      if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n      if (typeof namespaces === 'string') namespaces = [namespaces];\n      var toLoad = this.queueLoad(languages, namespaces, options, callback);\n\n      if (!toLoad.toLoad.length) {\n        if (!toLoad.pending.length) callback(); // nothing to load and no pendings...callback now\n\n        return null; // pendings will trigger callback\n      }\n\n      toLoad.toLoad.forEach(function (name) {\n        _this4.loadOne(name);\n      });\n    }\n  }, {\n    key: \"load\",\n    value: function load(languages, namespaces, callback) {\n      this.prepareLoading(languages, namespaces, {}, callback);\n    }\n  }, {\n    key: \"reload\",\n    value: function reload(languages, namespaces, callback) {\n      this.prepareLoading(languages, namespaces, {\n        reload: true\n      }, callback);\n    }\n  }, {\n    key: \"loadOne\",\n    value: function loadOne(name) {\n      var _this5 = this;\n\n      var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n      var _name$split3 = name.split('|'),\n          _name$split4 = _slicedToArray(_name$split3, 2),\n          lng = _name$split4[0],\n          ns = _name$split4[1];\n\n      this.read(lng, ns, 'read', null, null, function (err, data) {\n        if (err) _this5.logger.warn(\"\".concat(prefix, \"loading namespace \").concat(ns, \" for language \").concat(lng, \" failed\"), err);\n        if (!err && data) _this5.logger.log(\"\".concat(prefix, \"loaded namespace \").concat(ns, \" for language \").concat(lng), data);\n\n        _this5.loaded(name, err, data);\n      });\n    }\n  }, {\n    key: \"saveMissing\",\n    value: function saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n      var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n\n      if (this.backend && this.backend.create) {\n        this.backend.create(languages, namespace, key, fallbackValue, null\n        /* unused callback */\n        , _objectSpread({}, options, {\n          isUpdate: isUpdate\n        }));\n      } // write to store to avoid resending\n\n\n      if (!languages || !languages[0]) return;\n      this.store.addResource(languages[0], namespace, key, fallbackValue);\n    }\n  }]);\n\n  return Connector;\n}(EventEmitter);\n\nfunction get() {\n  return {\n    debug: false,\n    initImmediate: true,\n    ns: ['translation'],\n    defaultNS: ['translation'],\n    fallbackLng: ['dev'],\n    fallbackNS: false,\n    // string or array of namespaces\n    whitelist: false,\n    // array with whitelisted languages\n    nonExplicitWhitelist: false,\n    load: 'all',\n    // | currentOnly | languageOnly\n    preload: false,\n    // array with preload languages\n    simplifyPluralSuffix: true,\n    keySeparator: '.',\n    nsSeparator: ':',\n    pluralSeparator: '_',\n    contextSeparator: '_',\n    partialBundledLanguages: false,\n    // allow bundling certain languages that are not remotely fetched\n    saveMissing: false,\n    // enable to send missing values\n    updateMissing: false,\n    // enable to update default values if different from translated value (only useful on initial development, or when keeping code as source of truth)\n    saveMissingTo: 'fallback',\n    // 'current' || 'all'\n    saveMissingPlurals: true,\n    // will save all forms not only singular key\n    missingKeyHandler: false,\n    // function(lng, ns, key, fallbackValue) -> override if prefer on handling\n    missingInterpolationHandler: false,\n    // function(str, match)\n    postProcess: false,\n    // string or array of postProcessor names\n    returnNull: true,\n    // allows null value as valid translation\n    returnEmptyString: true,\n    // allows empty string value as valid translation\n    returnObjects: false,\n    joinArrays: false,\n    // or string to join array\n    returnedObjectHandler: function returnedObjectHandler() {},\n    // function(key, value, options) triggered if key returns object but returnObjects is set to false\n    parseMissingKeyHandler: false,\n    // function(key) parsed a key that was not found in t() before returning\n    appendNamespaceToMissingKey: false,\n    appendNamespaceToCIMode: false,\n    overloadTranslationOptionHandler: function handle(args) {\n      var ret = {};\n      if (_typeof(args[1]) === 'object') ret = args[1];\n      if (typeof args[1] === 'string') ret.defaultValue = args[1];\n      if (typeof args[2] === 'string') ret.tDescription = args[2];\n\n      if (_typeof(args[2]) === 'object' || _typeof(args[3]) === 'object') {\n        var options = args[3] || args[2];\n        Object.keys(options).forEach(function (key) {\n          ret[key] = options[key];\n        });\n      }\n\n      return ret;\n    },\n    interpolation: {\n      escapeValue: true,\n      format: function format(value, _format, lng) {\n        return value;\n      },\n      prefix: '{{',\n      suffix: '}}',\n      formatSeparator: ',',\n      // prefixEscaped: '{{',\n      // suffixEscaped: '}}',\n      // unescapeSuffix: '',\n      unescapePrefix: '-',\n      nestingPrefix: '$t(',\n      nestingSuffix: ')',\n      // nestingPrefixEscaped: '$t(',\n      // nestingSuffixEscaped: ')',\n      // defaultVariables: undefined // object that can have values to interpolate on - extends passed in interpolation data\n      maxReplaces: 1000 // max replaces to prevent endless loop\n\n    }\n  };\n}\n/* eslint no-param-reassign: 0 */\n\nfunction transformOptions(options) {\n  // create namespace object if namespace is passed in as string\n  if (typeof options.ns === 'string') options.ns = [options.ns];\n  if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n  if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS]; // extend whitelist with cimode\n\n  if (options.whitelist && options.whitelist.indexOf('cimode') < 0) {\n    options.whitelist = options.whitelist.concat(['cimode']);\n  }\n\n  return options;\n}\n\nfunction noop() {}\n\nvar I18n =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n  _inherits(I18n, _EventEmitter);\n\n  function I18n() {\n    var _this;\n\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n    _classCallCheck(this, I18n);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(I18n).call(this));\n    EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)\n\n    _this.options = transformOptions(options);\n    _this.services = {};\n    _this.logger = baseLogger;\n    _this.modules = {\n      external: []\n    };\n\n    if (callback && !_this.isInitialized && !options.isClone) {\n      // https://github.com/i18next/i18next/issues/879\n      if (!_this.options.initImmediate) {\n        _this.init(options, callback);\n\n        return _possibleConstructorReturn(_this, _assertThisInitialized(_this));\n      }\n\n      setTimeout(function () {\n        _this.init(options, callback);\n      }, 0);\n    }\n\n    return _this;\n  }\n\n  _createClass(I18n, [{\n    key: \"init\",\n    value: function init() {\n      var _this2 = this;\n\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n      if (typeof options === 'function') {\n        callback = options;\n        options = {};\n      }\n\n      this.options = _objectSpread({}, get(), this.options, transformOptions(options));\n      this.format = this.options.interpolation.format;\n      if (!callback) callback = noop;\n\n      function createClassOnDemand(ClassOrObject) {\n        if (!ClassOrObject) return null;\n        if (typeof ClassOrObject === 'function') return new ClassOrObject();\n        return ClassOrObject;\n      } // init services\n\n\n      if (!this.options.isClone) {\n        if (this.modules.logger) {\n          baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n        } else {\n          baseLogger.init(null, this.options);\n        }\n\n        var lu = new LanguageUtil(this.options);\n        this.store = new ResourceStore(this.options.resources, this.options);\n        var s = this.services;\n        s.logger = baseLogger;\n        s.resourceStore = this.store;\n        s.languageUtils = lu;\n        s.pluralResolver = new PluralResolver(lu, {\n          prepend: this.options.pluralSeparator,\n          compatibilityJSON: this.options.compatibilityJSON,\n          simplifyPluralSuffix: this.options.simplifyPluralSuffix\n        });\n        s.interpolator = new Interpolator(this.options);\n        s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options); // pipe events from backendConnector\n\n        s.backendConnector.on('*', function (event) {\n          for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n            args[_key - 1] = arguments[_key];\n          }\n\n          _this2.emit.apply(_this2, [event].concat(args));\n        });\n\n        if (this.modules.languageDetector) {\n          s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n          s.languageDetector.init(s, this.options.detection, this.options);\n        }\n\n        if (this.modules.i18nFormat) {\n          s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n          if (s.i18nFormat.init) s.i18nFormat.init(this);\n        }\n\n        this.translator = new Translator(this.services, this.options); // pipe events from translator\n\n        this.translator.on('*', function (event) {\n          for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n            args[_key2 - 1] = arguments[_key2];\n          }\n\n          _this2.emit.apply(_this2, [event].concat(args));\n        });\n        this.modules.external.forEach(function (m) {\n          if (m.init) m.init(_this2);\n        });\n      } // append api\n\n\n      var storeApi = ['getResource', 'addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n      storeApi.forEach(function (fcName) {\n        _this2[fcName] = function () {\n          var _this2$store;\n\n          return (_this2$store = _this2.store)[fcName].apply(_this2$store, arguments);\n        };\n      });\n      var deferred = defer();\n\n      var load = function load() {\n        _this2.changeLanguage(_this2.options.lng, function (err, t) {\n          _this2.isInitialized = true;\n\n          _this2.logger.log('initialized', _this2.options);\n\n          _this2.emit('initialized', _this2.options);\n\n          deferred.resolve(t); // not rejecting on err (as err is only a loading translation failed warning)\n\n          callback(err, t);\n        });\n      };\n\n      if (this.options.resources || !this.options.initImmediate) {\n        load();\n      } else {\n        setTimeout(load, 0);\n      }\n\n      return deferred;\n    }\n    /* eslint consistent-return: 0 */\n\n  }, {\n    key: \"loadResources\",\n    value: function loadResources() {\n      var _this3 = this;\n\n      var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : noop;\n\n      if (!this.options.resources || this.options.partialBundledLanguages) {\n        if (this.language && this.language.toLowerCase() === 'cimode') return callback(); // avoid loading resources for cimode\n\n        var toLoad = [];\n\n        var append = function append(lng) {\n          if (!lng) return;\n\n          var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n\n          lngs.forEach(function (l) {\n            if (toLoad.indexOf(l) < 0) toLoad.push(l);\n          });\n        };\n\n        if (!this.language) {\n          // at least load fallbacks in this case\n          var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n          fallbacks.forEach(function (l) {\n            return append(l);\n          });\n        } else {\n          append(this.language);\n        }\n\n        if (this.options.preload) {\n          this.options.preload.forEach(function (l) {\n            return append(l);\n          });\n        }\n\n        this.services.backendConnector.load(toLoad, this.options.ns, callback);\n      } else {\n        callback(null);\n      }\n    }\n  }, {\n    key: \"reloadResources\",\n    value: function reloadResources(lngs, ns, callback) {\n      var deferred = defer();\n      if (!lngs) lngs = this.languages;\n      if (!ns) ns = this.options.ns;\n      if (!callback) callback = noop;\n      this.services.backendConnector.reload(lngs, ns, function (err) {\n        deferred.resolve(); // not rejecting on err (as err is only a loading translation failed warning)\n\n        callback(err);\n      });\n      return deferred;\n    }\n  }, {\n    key: \"use\",\n    value: function use(module) {\n      if (module.type === 'backend') {\n        this.modules.backend = module;\n      }\n\n      if (module.type === 'logger' || module.log && module.warn && module.error) {\n        this.modules.logger = module;\n      }\n\n      if (module.type === 'languageDetector') {\n        this.modules.languageDetector = module;\n      }\n\n      if (module.type === 'i18nFormat') {\n        this.modules.i18nFormat = module;\n      }\n\n      if (module.type === 'postProcessor') {\n        postProcessor.addPostProcessor(module);\n      }\n\n      if (module.type === '3rdParty') {\n        this.modules.external.push(module);\n      }\n\n      return this;\n    }\n  }, {\n    key: \"changeLanguage\",\n    value: function changeLanguage(lng, callback) {\n      var _this4 = this;\n\n      var deferred = defer();\n      this.emit('languageChanging', lng);\n\n      var done = function done(err, l) {\n        _this4.translator.changeLanguage(l);\n\n        if (l) {\n          _this4.emit('languageChanged', l);\n\n          _this4.logger.log('languageChanged', l);\n        }\n\n        deferred.resolve(function () {\n          return _this4.t.apply(_this4, arguments);\n        });\n        if (callback) callback(err, function () {\n          return _this4.t.apply(_this4, arguments);\n        });\n      };\n\n      var setLng = function setLng(l) {\n        if (l) {\n          _this4.language = l;\n          _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n          if (!_this4.translator.language) _this4.translator.changeLanguage(l);\n          if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);\n        }\n\n        _this4.loadResources(function (err) {\n          done(err, l);\n        });\n      };\n\n      if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n        setLng(this.services.languageDetector.detect());\n      } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n        this.services.languageDetector.detect(setLng);\n      } else {\n        setLng(lng);\n      }\n\n      return deferred;\n    }\n  }, {\n    key: \"getFixedT\",\n    value: function getFixedT(lng, ns) {\n      var _this5 = this;\n\n      var fixedT = function fixedT(key, opts) {\n        var options = _objectSpread({}, opts);\n\n        if (_typeof(opts) !== 'object') {\n          for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n            rest[_key3 - 2] = arguments[_key3];\n          }\n\n          options = _this5.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n        }\n\n        options.lng = options.lng || fixedT.lng;\n        options.lngs = options.lngs || fixedT.lngs;\n        options.ns = options.ns || fixedT.ns;\n        return _this5.t(key, options);\n      };\n\n      if (typeof lng === 'string') {\n        fixedT.lng = lng;\n      } else {\n        fixedT.lngs = lng;\n      }\n\n      fixedT.ns = ns;\n      return fixedT;\n    }\n  }, {\n    key: \"t\",\n    value: function t() {\n      var _this$translator;\n\n      return this.translator && (_this$translator = this.translator).translate.apply(_this$translator, arguments);\n    }\n  }, {\n    key: \"exists\",\n    value: function exists() {\n      var _this$translator2;\n\n      return this.translator && (_this$translator2 = this.translator).exists.apply(_this$translator2, arguments);\n    }\n  }, {\n    key: \"setDefaultNamespace\",\n    value: function setDefaultNamespace(ns) {\n      this.options.defaultNS = ns;\n    }\n  }, {\n    key: \"loadNamespaces\",\n    value: function loadNamespaces(ns, callback) {\n      var _this6 = this;\n\n      var deferred = defer();\n\n      if (!this.options.ns) {\n        callback && callback();\n        return Promise.resolve();\n      }\n\n      if (typeof ns === 'string') ns = [ns];\n      ns.forEach(function (n) {\n        if (_this6.options.ns.indexOf(n) < 0) _this6.options.ns.push(n);\n      });\n      this.loadResources(function (err) {\n        deferred.resolve();\n        if (callback) callback(err);\n      });\n      return deferred;\n    }\n  }, {\n    key: \"loadLanguages\",\n    value: function loadLanguages(lngs, callback) {\n      var deferred = defer();\n      if (typeof lngs === 'string') lngs = [lngs];\n      var preloaded = this.options.preload || [];\n      var newLngs = lngs.filter(function (lng) {\n        return preloaded.indexOf(lng) < 0;\n      }); // Exit early if all given languages are already preloaded\n\n      if (!newLngs.length) {\n        if (callback) callback();\n        return Promise.resolve();\n      }\n\n      this.options.preload = preloaded.concat(newLngs);\n      this.loadResources(function (err) {\n        deferred.resolve();\n        if (callback) callback(err);\n      });\n      return deferred;\n    }\n  }, {\n    key: \"dir\",\n    value: function dir(lng) {\n      if (!lng) lng = this.languages && this.languages.length > 0 ? this.languages[0] : this.language;\n      if (!lng) return 'rtl';\n      var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam'];\n      return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) >= 0 ? 'rtl' : 'ltr';\n    }\n    /* eslint class-methods-use-this: 0 */\n\n  }, {\n    key: \"createInstance\",\n    value: function createInstance() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var callback = arguments.length > 1 ? arguments[1] : undefined;\n      return new I18n(options, callback);\n    }\n  }, {\n    key: \"cloneInstance\",\n    value: function cloneInstance() {\n      var _this7 = this;\n\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n\n      var mergedOptions = _objectSpread({}, this.options, options, {\n        isClone: true\n      });\n\n      var clone = new I18n(mergedOptions);\n      var membersToCopy = ['store', 'services', 'language'];\n      membersToCopy.forEach(function (m) {\n        clone[m] = _this7[m];\n      });\n      clone.translator = new Translator(clone.services, clone.options);\n      clone.translator.on('*', function (event) {\n        for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n          args[_key4 - 1] = arguments[_key4];\n        }\n\n        clone.emit.apply(clone, [event].concat(args));\n      });\n      clone.init(mergedOptions, callback);\n      clone.translator.options = clone.options; // sync options\n\n      return clone;\n    }\n  }]);\n\n  return I18n;\n}(EventEmitter);\n\nvar i18next = new I18n();\n\nexport default i18next;\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n","// @flow\n\nimport { toState } from '../base/redux';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Tells whether or not the notifications are enabled and if there are any\n * notifications to be displayed based on the current Redux state.\n *\n * @param {Object|Function} stateful - The redux store state.\n * @returns {boolean}\n */\nexport function areThereNotifications(stateful: Object | Function) {\n    const state = toState(stateful);\n    const { enabled, notifications } = state['features/notifications'];\n\n    return enabled && notifications.length > 0;\n}\n\n/**\n * Tells wether join/leave notifications are enabled in interface_config.\n *\n * @returns {boolean}\n */\nexport function joinLeaveNotificationsDisabled() {\n    return Boolean(typeof interfaceConfig !== 'undefined' && interfaceConfig?.DISABLE_JOIN_LEAVE_NOTIFICATIONS);\n}\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\n\nvar index = (function (condition, message) {\n  if (condition) {\n    return;\n  }\n\n  if (isProduction) {\n    throw new Error(prefix);\n  }\n\n  throw new Error(prefix + ': ' + (message || ''));\n});\n\nexport default index;\n","/* @flow */\n\nconst { userAgent } = navigator;\nlet OS;\n\nif (userAgent.match(/Android/i)) {\n    OS = 'android';\n} else if (userAgent.match(/iP(ad|hone|od)/i)) {\n    OS = 'ios';\n} else if (userAgent.match(/Mac(intosh| OS X)/i)) {\n    OS = 'macos';\n} else if (userAgent.match(/Windows/i)) {\n    OS = 'windows';\n}\n\n/**\n * Provides a minimal equivalent of react-native's Platform abstraction.\n */\nexport default {\n    /**\n     * The operating system on which the application is executing.\n     *\n     * @type {string}\n     */\n    OS,\n\n    /**\n     * The operating system version on which the application is executing.\n     * This is intentionally set to undefined so we can tell mobile and mobile web\n     * appart easier.\n     *\n     * @type {number|undefined}\n     */\n    Version: undefined\n};\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    addPendingDeviceRequest,\n    areDeviceLabelsInitialized,\n    getAudioOutputDeviceId,\n    getAvailableDevices,\n    getDeviceIdByLabel,\n    groupDevicesByKind,\n    setAudioInputDevice,\n    setAudioOutputDeviceId,\n    setVideoInputDevice\n} from '../base/devices';\nimport JitsiMeetJS from '../base/lib-jitsi-meet';\nimport { toState } from '../base/redux';\nimport {\n    getUserSelectedCameraDeviceId,\n    getUserSelectedMicDeviceId,\n    getUserSelectedOutputDeviceId\n} from '../base/settings';\n\n/**\n * Returns the properties for the device selection dialog from Redux state.\n *\n * @param {(Function|Object)} stateful -The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state.\n * @returns {Object} - The properties for the device selection dialog.\n */\nexport function getDeviceSelectionDialogProps(stateful: Object | Function) {\n    const state = toState(stateful);\n    const settings = state['features/base/settings'];\n    const { conference } = state['features/base/conference'];\n    let disableAudioInputChange = !JitsiMeetJS.mediaDevices.isMultipleAudioInputSupported();\n    let selectedAudioInputId = settings.micDeviceId;\n    let selectedAudioOutputId = getAudioOutputDeviceId();\n    let selectedVideoInputId = settings.cameraDeviceId;\n\n    // audio input change will be a problem only when we are in a\n    // conference and this is not supported, when we open device selection on\n    // welcome page changing input devices will not be a problem\n    // on welcome page we also show only what we have saved as user selected devices\n    if (!conference) {\n        disableAudioInputChange = false;\n        selectedAudioInputId = getUserSelectedMicDeviceId(state);\n        selectedAudioOutputId = getUserSelectedOutputDeviceId(state);\n        selectedVideoInputId = getUserSelectedCameraDeviceId(state);\n    }\n\n    // we fill the device selection dialog with the devices that are currently\n    // used or if none are currently used with what we have in settings(user selected)\n    return {\n        availableDevices: state['features/base/devices'].availableDevices,\n        disableAudioInputChange,\n        disableDeviceChange:\n            !JitsiMeetJS.mediaDevices.isDeviceChangeAvailable(),\n        hideAudioInputPreview:\n            !JitsiMeetJS.isCollectingLocalStats(),\n        hideAudioOutputSelect: !JitsiMeetJS.mediaDevices\n                            .isDeviceChangeAvailable('output'),\n        selectedAudioInputId,\n        selectedAudioOutputId,\n        selectedVideoInputId\n    };\n}\n\n/**\n * Processes device requests from external applications.\n *\n * @param {Dispatch} dispatch - The redux {@code dispatch} function.\n * @param {Function} getState - The redux function that gets/retrieves the redux\n * state.\n * @param {Object} request - The request to be processed.\n * @param {Function} responseCallback - The callback that will send the\n * response.\n * @returns {boolean} - True if the request has been processed and false otherwise.\n */\nexport function processExternalDeviceRequest( // eslint-disable-line max-params\n        dispatch: Dispatch<any>,\n        getState: Function,\n        request: Object,\n        responseCallback: Function) {\n    if (request.type !== 'devices') {\n        return false;\n    }\n    const state = getState();\n    const settings = state['features/base/settings'];\n    const { conference } = state['features/base/conference'];\n    let result = true;\n\n    switch (request.name) {\n    case 'isDeviceListAvailable':\n        responseCallback(JitsiMeetJS.mediaDevices.isDeviceListAvailable());\n        break;\n    case 'isDeviceChangeAvailable':\n        responseCallback(\n            JitsiMeetJS.mediaDevices.isDeviceChangeAvailable(\n                request.deviceType));\n        break;\n    case 'isMultipleAudioInputSupported':\n        responseCallback(JitsiMeetJS.isMultipleAudioInputSupported());\n        break;\n    case 'getCurrentDevices':\n        dispatch(getAvailableDevices()).then(devices => {\n            if (areDeviceLabelsInitialized(state)) {\n                const deviceDescriptions = {\n                    audioInput: undefined,\n                    audioOutput: undefined,\n                    videoInput: undefined\n                };\n                const currentlyUsedDeviceIds = new Set([\n                    getAudioOutputDeviceId(),\n                    settings.micDeviceId,\n                    settings.cameraDeviceId\n                ]);\n\n                devices.forEach(device => {\n                    const { deviceId, kind } = device;\n\n                    if (currentlyUsedDeviceIds.has(deviceId)) {\n                        switch (kind) {\n                        case 'audioinput':\n                            deviceDescriptions.audioInput = device;\n                            break;\n                        case 'audiooutput':\n                            deviceDescriptions.audioOutput = device;\n                            break;\n                        case 'videoinput':\n                            deviceDescriptions.videoInput = device;\n                            break;\n                        }\n                    }\n                });\n\n                responseCallback(deviceDescriptions);\n            } else {\n                // The labels are not available if the A/V permissions are\n                // not yet granted.\n                dispatch(addPendingDeviceRequest({\n                    type: 'devices',\n                    name: 'getCurrentDevices',\n                    responseCallback\n                }));\n            }\n        });\n\n        break;\n    case 'getAvailableDevices':\n        dispatch(getAvailableDevices()).then(devices => {\n            if (areDeviceLabelsInitialized(state)) {\n                responseCallback(groupDevicesByKind(devices));\n            } else {\n                // The labels are not available if the A/V permissions are\n                // not yet granted.\n                dispatch(addPendingDeviceRequest({\n                    type: 'devices',\n                    name: 'getAvailableDevices',\n                    responseCallback\n                }));\n            }\n        });\n\n        break;\n    case 'setDevice': {\n        const { device } = request;\n\n        if (!conference) {\n            dispatch(addPendingDeviceRequest({\n                type: 'devices',\n                name: 'setDevice',\n                device,\n                responseCallback\n            }));\n\n            return true;\n        }\n\n        const { label, id } = device;\n        const deviceId = label\n            ? getDeviceIdByLabel(state, device.label, device.kind)\n            : id;\n\n        if (deviceId) {\n            switch (device.kind) {\n            case 'audioinput': {\n                dispatch(setAudioInputDevice(deviceId));\n                break;\n            }\n            case 'audiooutput':\n                setAudioOutputDeviceId(deviceId, dispatch);\n                break;\n            case 'videoinput':\n                dispatch(setVideoInputDevice(deviceId));\n                break;\n            default:\n                result = false;\n            }\n        } else {\n            result = false;\n        }\n\n        responseCallback(result);\n        break;\n    }\n    default:\n        return false;\n    }\n\n    return true;\n}\n\n","// @flow\n\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox';\n\nimport { translate } from '../../base/i18n';\nimport { IconMessage, IconReply } from '../../base/icons';\nimport { getParticipantById } from '../../base/participants';\nimport { connect } from '../../base/redux';\n\nimport { setPrivateMessageRecipient } from '../actions';\n\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * The ID of the participant that the message is to be sent.\n     */\n    participantID: string,\n\n    /**\n     * True if the button is rendered as a reply button.\n     */\n    reply: boolean,\n\n    /**\n     * Function to be used to translate i18n labels.\n     */\n    t: Function,\n\n    /**\n     * The participant object retreived from Redux.\n     */\n    _participant: Object,\n\n    /**\n     * Function to dispatch the result of the participant selection to send a private message.\n     */\n    _setPrivateMessageRecipient: Function\n};\n\n/**\n * Class to render a button that initiates the sending of a private message through chet.\n */\nclass PrivateMessageButton extends AbstractButton<Props, any> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.privateMessage';\n    icon = IconMessage;\n    label = 'toolbar.privateMessage';\n    toggledIcon = IconReply;\n\n    /**\n     * Handles clicking / pressing the button, and kicks the participant.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        const { _participant, _setPrivateMessageRecipient } = this.props;\n\n        _setPrivateMessageRecipient(_participant);\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * {@code boolean} value indicating if this button is toggled or not.\n     *\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props.reply;\n    }\n\n}\n\n/**\n * Maps part of the props of this component to Redux actions.\n *\n * @param {Function} dispatch - The Redux dispatch function.\n * @returns {Props}\n */\nexport function _mapDispatchToProps(dispatch: Function): $Shape<Props> {\n    return {\n        _setPrivateMessageRecipient: participant => {\n            dispatch(setPrivateMessageRecipient(participant));\n        }\n    };\n}\n\n/**\n * Maps part of the Redux store to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the component.\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props): $Shape<Props> {\n    return {\n        _participant: getParticipantById(state, ownProps.participantID)\n    };\n}\n\nexport default translate(connect(_mapStateToProps, _mapDispatchToProps)(PrivateMessageButton));\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.14.4\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n  if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n    timeoutDuration = 1;\n    break;\n  }\n}\n\nfunction microtaskDebounce(fn) {\n  var called = false;\n  return function () {\n    if (called) {\n      return;\n    }\n    called = true;\n    window.Promise.resolve().then(function () {\n      called = false;\n      fn();\n    });\n  };\n}\n\nfunction taskDebounce(fn) {\n  var scheduled = false;\n  return function () {\n    if (!scheduled) {\n      scheduled = true;\n      setTimeout(function () {\n        scheduled = false;\n        fn();\n      }, timeoutDuration);\n    }\n  };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n  var getType = {};\n  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  var css = getComputedStyle(element, null);\n  return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n  return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element) {\n    return document.body;\n  }\n\n  switch (element.nodeName) {\n    case 'HTML':\n    case 'BODY':\n      return element.ownerDocument.body;\n    case '#document':\n      return element.body;\n  }\n\n  // Firefox want us to check `-x` and `-y` variations as well\n\n  var _getStyleComputedProp = getStyleComputedProperty(element),\n      overflow = _getStyleComputedProp.overflow,\n      overflowX = _getStyleComputedProp.overflowX,\n      overflowY = _getStyleComputedProp.overflowY;\n\n  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n    return element;\n  }\n\n  return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n  if (version === 11) {\n    return isIE11;\n  }\n  if (version === 10) {\n    return isIE10;\n  }\n  return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n\n  var noOffsetParent = isIE(10) ? document.body : null;\n\n  // NOTE: 1 DOM access here\n  var offsetParent = element.offsetParent;\n  // Skip hidden elements which don't have an offsetParent\n  while (offsetParent === noOffsetParent && element.nextElementSibling) {\n    offsetParent = (element = element.nextElementSibling).offsetParent;\n  }\n\n  var nodeName = offsetParent && offsetParent.nodeName;\n\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return element ? element.ownerDocument.documentElement : document.documentElement;\n  }\n\n  // .offsetParent will return the closest TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n  if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n    return getOffsetParent(offsetParent);\n  }\n\n  return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY') {\n    return false;\n  }\n  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return document.documentElement;\n  }\n\n  // Here we make sure to give as \"start\" the element that comes first in the DOM\n  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n  var start = order ? element1 : element2;\n  var end = order ? element2 : element1;\n\n  // Get common ancestor container\n  var range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  var commonAncestorContainer = range.commonAncestorContainer;\n\n  // Both nodes are inside #document\n\n  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n\n    return getOffsetParent(commonAncestorContainer);\n  }\n\n  // one of the nodes is inside shadowDOM, find which one\n  var element1root = getRoot(element1);\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n  var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    var html = element.ownerDocument.documentElement;\n    var scrollingElement = element.ownerDocument.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n\n  return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var scrollTop = getScroll(element, 'top');\n  var scrollLeft = getScroll(element, 'left');\n  var modifier = subtract ? -1 : 1;\n  rect.top += scrollTop * modifier;\n  rect.bottom += scrollTop * modifier;\n  rect.left += scrollLeft * modifier;\n  rect.right += scrollLeft * modifier;\n  return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n  var sideA = axis === 'x' ? 'Left' : 'Top';\n  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n  return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n  return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n  var body = document.body;\n  var html = document.documentElement;\n  var computedStyle = isIE(10) && getComputedStyle(html);\n\n  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle)\n  };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n  return _extends({}, offsets, {\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height\n  });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n  var rect = {};\n\n  // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n  try {\n    if (isIE(10)) {\n      rect = element.getBoundingClientRect();\n      var scrollTop = getScroll(element, 'top');\n      var scrollLeft = getScroll(element, 'left');\n      rect.top += scrollTop;\n      rect.left += scrollLeft;\n      rect.bottom += scrollTop;\n      rect.right += scrollLeft;\n    } else {\n      rect = element.getBoundingClientRect();\n    }\n  } catch (e) {}\n\n  var result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n\n  // subtract scrollbar size from sizes\n  var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n  var width = sizes.width || element.clientWidth || result.right - result.left;\n  var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n  var horizScrollbar = element.offsetWidth - width;\n  var vertScrollbar = element.offsetHeight - height;\n\n  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n  if (horizScrollbar || vertScrollbar) {\n    var styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n\n  return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n  var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var isIE10 = isIE(10);\n  var isHTML = parent.nodeName === 'HTML';\n  var childrenRect = getBoundingClientRect(children);\n  var parentRect = getBoundingClientRect(parent);\n  var scrollParent = getScrollParent(children);\n\n  var styles = getStyleComputedProperty(parent);\n  var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n  var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n  // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n  if (fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top, 0);\n    parentRect.left = Math.max(parentRect.left, 0);\n  }\n  var offsets = getClientRect({\n    top: childrenRect.top - parentRect.top - borderTopWidth,\n    left: childrenRect.left - parentRect.left - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0;\n\n  // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n  if (!isIE10 && isHTML) {\n    var marginTop = parseFloat(styles.marginTop, 10);\n    var marginLeft = parseFloat(styles.marginLeft, 10);\n\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft;\n\n    // Attach marginTop and marginLeft because in some circumstances we may need them\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n\n  if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n    offsets = includeScroll(offsets, parent);\n  }\n\n  return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n  var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var html = element.ownerDocument.documentElement;\n  var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  var width = Math.max(html.clientWidth, window.innerWidth || 0);\n  var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n  var scrollTop = !excludeScroll ? getScroll(html) : 0;\n  var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n  var offset = {\n    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n    width: width,\n    height: height\n  };\n\n  return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n  var nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n  return isFixed(getParentNode(element));\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element || !element.parentElement || isIE()) {\n    return document.documentElement;\n  }\n  var el = element.parentElement;\n  while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n  return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n  var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n  // NOTE: 1 DOM access here\n\n  var boundaries = { top: 0, left: 0 };\n  var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n  // Handle viewport case\n  if (boundariesElement === 'viewport') {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n  } else {\n    // Handle other cases based on DOM element used as boundaries\n    var boundariesNode = void 0;\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(reference));\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = popper.ownerDocument.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n\n    var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n    // In case of HTML, we need a different computation\n    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n          height = _getWindowSizes.height,\n          width = _getWindowSizes.width;\n\n      boundaries.top += offsets.top - offsets.marginTop;\n      boundaries.bottom = height + offsets.top;\n      boundaries.left += offsets.left - offsets.marginLeft;\n      boundaries.right = width + offsets.left;\n    } else {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  }\n\n  // Add paddings\n  padding = padding || 0;\n  var isPaddingNumber = typeof padding === 'number';\n  boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n  boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n  boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n  return boundaries;\n}\n\nfunction getArea(_ref) {\n  var width = _ref.width,\n      height = _ref.height;\n\n  return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n  var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n\n  var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n  var rects = {\n    top: {\n      width: boundaries.width,\n      height: refRect.top - boundaries.top\n    },\n    right: {\n      width: boundaries.right - refRect.right,\n      height: boundaries.height\n    },\n    bottom: {\n      width: boundaries.width,\n      height: boundaries.bottom - refRect.bottom\n    },\n    left: {\n      width: refRect.left - boundaries.left,\n      height: boundaries.height\n    }\n  };\n\n  var sortedAreas = Object.keys(rects).map(function (key) {\n    return _extends({\n      key: key\n    }, rects[key], {\n      area: getArea(rects[key])\n    });\n  }).sort(function (a, b) {\n    return b.area - a.area;\n  });\n\n  var filteredAreas = sortedAreas.filter(function (_ref2) {\n    var width = _ref2.width,\n        height = _ref2.height;\n    return width >= popper.clientWidth && height >= popper.clientHeight;\n  });\n\n  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n  var variation = placement.split('-')[1];\n\n  return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n  var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n  var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n  var styles = getComputedStyle(element);\n  var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n  var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n  var result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x\n  };\n  return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n  var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0];\n\n  // Get popper node sizes\n  var popperRect = getOuterSizes(popper);\n\n  // Add position, width and height to our offsets object\n  var popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height\n  };\n\n  // depending by the popper placement we have to compute its offsets slightly differently\n  var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  var mainSide = isHoriz ? 'top' : 'left';\n  var secondarySide = isHoriz ? 'left' : 'top';\n  var measurement = isHoriz ? 'height' : 'width';\n  var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n  if (placement === secondarySide) {\n    popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n  } else {\n    popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n  }\n\n  return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  }\n\n  // use `filter` to obtain the same behavior of `find`\n  return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n  // use native findIndex if supported\n  if (Array.prototype.findIndex) {\n    return arr.findIndex(function (cur) {\n      return cur[prop] === value;\n    });\n  }\n\n  // use `find` + `indexOf` if `findIndex` isn't supported\n  var match = find(arr, function (obj) {\n    return obj[prop] === value;\n  });\n  return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n  modifiersToRun.forEach(function (modifier) {\n    if (modifier['function']) {\n      // eslint-disable-line dot-notation\n      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n    }\n    var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n    if (modifier.enabled && isFunction(fn)) {\n      // Add properties to offsets to make them a complete clientRect object\n      // we do this before each modifier to make sure the previous one doesn't\n      // mess with these values\n      data.offsets.popper = getClientRect(data.offsets.popper);\n      data.offsets.reference = getClientRect(data.offsets.reference);\n\n      data = fn(data, modifier);\n    }\n  });\n\n  return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n  // if popper is destroyed, don't perform any further update\n  if (this.state.isDestroyed) {\n    return;\n  }\n\n  var data = {\n    instance: this,\n    styles: {},\n    arrowStyles: {},\n    attributes: {},\n    flipped: false,\n    offsets: {}\n  };\n\n  // compute reference element offsets\n  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n  // store the computed placement inside `originalPlacement`\n  data.originalPlacement = data.placement;\n\n  data.positionFixed = this.options.positionFixed;\n\n  // compute the popper offsets\n  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n  data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n  // run the modifiers\n  data = runModifiers(this.modifiers, data);\n\n  // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n  if (!this.state.isCreated) {\n    this.state.isCreated = true;\n    this.options.onCreate(data);\n  } else {\n    this.options.onUpdate(data);\n  }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n  return modifiers.some(function (_ref) {\n    var name = _ref.name,\n        enabled = _ref.enabled;\n    return enabled && name === modifierName;\n  });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n  var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n  var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n  for (var i = 0; i < prefixes.length; i++) {\n    var prefix = prefixes[i];\n    var toCheck = prefix ? '' + prefix + upperProp : property;\n    if (typeof document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n  return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n  this.state.isDestroyed = true;\n\n  // touch DOM only if `applyStyle` modifier is enabled\n  if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n    this.popper.removeAttribute('x-placement');\n    this.popper.style.position = '';\n    this.popper.style.top = '';\n    this.popper.style.left = '';\n    this.popper.style.right = '';\n    this.popper.style.bottom = '';\n    this.popper.style.willChange = '';\n    this.popper.style[getSupportedPropertyName('transform')] = '';\n  }\n\n  this.disableEventListeners();\n\n  // remove the popper if user explicity asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n  return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n  var ownerDocument = element.ownerDocument;\n  return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n  var isBody = scrollParent.nodeName === 'BODY';\n  var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n  target.addEventListener(event, callback, { passive: true });\n\n  if (!isBody) {\n    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n  }\n  scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n  // Scroll event listener on scroll parents\n  var scrollElement = getScrollParent(reference);\n  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n\n  return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n  }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  getWindow(reference).removeEventListener('resize', state.updateBound);\n\n  // Remove scroll event listener on scroll parents\n  state.scrollParents.forEach(function (target) {\n    target.removeEventListener('scroll', state.updateBound);\n  });\n\n  // Reset state\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\n  }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n  Object.keys(styles).forEach(function (prop) {\n    var unit = '';\n    // add unit if the value is numeric and is one of the following\n    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n      unit = 'px';\n    }\n    element.style[prop] = styles[prop] + unit;\n  });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function (prop) {\n    var value = attributes[prop];\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\n    }\n  });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n  // any property present in `data.styles` will be applied to the popper,\n  // in this way we can make the 3rd party modifiers add custom styles to it\n  // Be aware, modifiers could override the properties defined in the previous\n  // lines of this modifier!\n  setStyles(data.instance.popper, data.styles);\n\n  // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n  setAttributes(data.instance.popper, data.attributes);\n\n  // if arrowElement is defined and arrowStyles has some properties\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n  // compute reference element offsets\n  var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n  popper.setAttribute('x-placement', placement);\n\n  // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n  return options;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n  var x = options.x,\n      y = options.y;\n  var popper = data.offsets.popper;\n\n  // Remove this legacy support in Popper.js v2\n\n  var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'applyStyle';\n  }).gpuAcceleration;\n  if (legacyGpuAccelerationOption !== undefined) {\n    console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n  }\n  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n  var offsetParent = getOffsetParent(data.instance.popper);\n  var offsetParentRect = getBoundingClientRect(offsetParent);\n\n  // Styles\n  var styles = {\n    position: popper.position\n  };\n\n  // Avoid blurry text by using full pixel integers.\n  // For pixel-perfect positioning, top/bottom prefers rounded\n  // values, while left/right prefers floored values.\n  var offsets = {\n    left: Math.floor(popper.left),\n    top: Math.round(popper.top),\n    bottom: Math.round(popper.bottom),\n    right: Math.floor(popper.right)\n  };\n\n  var sideA = x === 'bottom' ? 'top' : 'bottom';\n  var sideB = y === 'right' ? 'left' : 'right';\n\n  // if gpuAcceleration is set to `true` and transform is supported,\n  //  we use `translate3d` to apply the position to the popper we\n  // automatically use the supported prefixed version if needed\n  var prefixedProperty = getSupportedPropertyName('transform');\n\n  // now, let's make a step back and look at this code closely (wtf?)\n  // If the content of the popper grows once it's been positioned, it\n  // may happen that the popper gets misplaced because of the new content\n  // overflowing its reference element\n  // To avoid this problem, we provide two options (x and y), which allow\n  // the consumer to define the offset origin.\n  // If we position a popper on top of a reference element, we can set\n  // `x` to `top` to make the popper grow towards its top instead of\n  // its bottom.\n  var left = void 0,\n      top = void 0;\n  if (sideA === 'bottom') {\n    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n    // and not the bottom of the html element\n    if (offsetParent.nodeName === 'HTML') {\n      top = -offsetParent.clientHeight + offsets.bottom;\n    } else {\n      top = -offsetParentRect.height + offsets.bottom;\n    }\n  } else {\n    top = offsets.top;\n  }\n  if (sideB === 'right') {\n    if (offsetParent.nodeName === 'HTML') {\n      left = -offsetParent.clientWidth + offsets.right;\n    } else {\n      left = -offsetParentRect.width + offsets.right;\n    }\n  } else {\n    left = offsets.left;\n  }\n  if (gpuAcceleration && prefixedProperty) {\n    styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n    styles[sideA] = 0;\n    styles[sideB] = 0;\n    styles.willChange = 'transform';\n  } else {\n    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n    var invertTop = sideA === 'bottom' ? -1 : 1;\n    var invertLeft = sideB === 'right' ? -1 : 1;\n    styles[sideA] = top * invertTop;\n    styles[sideB] = left * invertLeft;\n    styles.willChange = sideA + ', ' + sideB;\n  }\n\n  // Attributes\n  var attributes = {\n    'x-placement': data.placement\n  };\n\n  // Update `data` attributes, styles and arrowStyles\n  data.attributes = _extends({}, attributes, data.attributes);\n  data.styles = _extends({}, styles, data.styles);\n  data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n  return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n  var requesting = find(modifiers, function (_ref) {\n    var name = _ref.name;\n    return name === requestingName;\n  });\n\n  var isRequired = !!requesting && modifiers.some(function (modifier) {\n    return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n  });\n\n  if (!isRequired) {\n    var _requesting = '`' + requestingName + '`';\n    var requested = '`' + requestedName + '`';\n    console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n  }\n  return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n  var _data$offsets$arrow;\n\n  // arrow depends on keepTogether in order to work\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  var arrowElement = options.element;\n\n  // if arrowElement is a string, suppose it's a CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement);\n\n    // if arrowElement is not found, don't run the modifier\n    if (!arrowElement) {\n      return data;\n    }\n  } else {\n    // if the arrowElement isn't a query selector we must check that the\n    // provided DOM node is child of its popper node\n    if (!data.instance.popper.contains(arrowElement)) {\n      console.warn('WARNING: `arrow.element` must be child of its popper element!');\n      return data;\n    }\n  }\n\n  var placement = data.placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n  var len = isVertical ? 'height' : 'width';\n  var sideCapitalized = isVertical ? 'Top' : 'Left';\n  var side = sideCapitalized.toLowerCase();\n  var altSide = isVertical ? 'left' : 'top';\n  var opSide = isVertical ? 'bottom' : 'right';\n  var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n  //\n  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjunction\n  //\n\n  // top/left side\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n  }\n  // bottom/right side\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n  }\n  data.offsets.popper = getClientRect(data.offsets.popper);\n\n  // compute center of the popper\n  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n  // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n  var css = getStyleComputedProperty(data.instance.popper);\n  var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n  var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n  var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n  // prevent arrowElement from being placed not contiguously to its popper\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n  data.arrowElement = arrowElement;\n  data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n  return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n  return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var index = validPlacements.indexOf(placement);\n  var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n  return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n  FLIP: 'flip',\n  CLOCKWISE: 'clockwise',\n  COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n  // if `inner` modifier is enabled, we can't use the `flip` modifier\n  if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n    return data;\n  }\n\n  if (data.flipped && data.placement === data.originalPlacement) {\n    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n    return data;\n  }\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n  var placement = data.placement.split('-')[0];\n  var placementOpposite = getOppositePlacement(placement);\n  var variation = data.placement.split('-')[1] || '';\n\n  var flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n    default:\n      flipOrder = options.behavior;\n  }\n\n  flipOrder.forEach(function (step, index) {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return data;\n    }\n\n    placement = data.placement.split('-')[0];\n    placementOpposite = getOppositePlacement(placement);\n\n    var popperOffsets = data.offsets.popper;\n    var refOffsets = data.offsets.reference;\n\n    // using floor because the reference offsets may contain decimals we are not going to consider here\n    var floor = Math.floor;\n    var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n    var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n    var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n    var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n    var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n    // flip the variation if required\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n    var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      // this boolean to detect any flip loop\n      data.flipped = true;\n\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n\n      data.placement = placement + (variation ? '-' + variation : '');\n\n      // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n      data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var placement = data.placement.split('-')[0];\n  var floor = Math.floor;\n  var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n  var side = isVertical ? 'right' : 'bottom';\n  var opSide = isVertical ? 'left' : 'top';\n  var measurement = isVertical ? 'width' : 'height';\n\n  if (popper[side] < floor(reference[opSide])) {\n    data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n  }\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n  // separate value from unit\n  var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n  var value = +split[1];\n  var unit = split[2];\n\n  // If it's not a number it's an operator, I guess\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    var element = void 0;\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n      case '%':\n      case '%r':\n      default:\n        element = referenceOffsets;\n    }\n\n    var rect = getClientRect(element);\n    return rect[measurement] / 100 * value;\n  } else if (unit === 'vh' || unit === 'vw') {\n    // if is a vh or vw, we calculate the size based on the viewport\n    var size = void 0;\n    if (unit === 'vh') {\n      size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n    } else {\n      size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n    }\n    return size / 100 * value;\n  } else {\n    // if is an explicit pixel unit, we get rid of the unit and keep the value\n    // if is an implicit unit, it's px, and we return just the value\n    return value;\n  }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n  var offsets = [0, 0];\n\n  // Use height if placement is left or right and index is 0 otherwise use width\n  // in this way the first offset will use an axis and the second one\n  // will use the other one\n  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n  // Split the offset string to obtain a list of values and operands\n  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n  var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n    return frag.trim();\n  });\n\n  // Detect if the offset string contains a pair of values or a single one\n  // they could be separated by comma or space\n  var divider = fragments.indexOf(find(fragments, function (frag) {\n    return frag.search(/,|\\s/) !== -1;\n  }));\n\n  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n    console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n  }\n\n  // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n  var splitRegex = /\\s*,\\s*|\\s+/;\n  var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n  // Convert the values with units to absolute pixels to allow our computations\n  ops = ops.map(function (op, index) {\n    // Most of the units rely on the orientation of the popper\n    var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n    var mergeWithPrevious = false;\n    return op\n    // This aggregates any `+` or `-` sign that aren't considered operators\n    // e.g.: 10 + +5 => [10, +, +5]\n    .reduce(function (a, b) {\n      if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n        a[a.length - 1] = b;\n        mergeWithPrevious = true;\n        return a;\n      } else if (mergeWithPrevious) {\n        a[a.length - 1] += b;\n        mergeWithPrevious = false;\n        return a;\n      } else {\n        return a.concat(b);\n      }\n    }, [])\n    // Here we convert the string values into number values (in px)\n    .map(function (str) {\n      return toValue(str, measurement, popperOffsets, referenceOffsets);\n    });\n  });\n\n  // Loop trough the offsets arrays and execute the operations\n  ops.forEach(function (op, index) {\n    op.forEach(function (frag, index2) {\n      if (isNumeric(frag)) {\n        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n      }\n    });\n  });\n  return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n  var offset = _ref.offset;\n  var placement = data.placement,\n      _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var basePlacement = placement.split('-')[0];\n\n  var offsets = void 0;\n  if (isNumeric(+offset)) {\n    offsets = [+offset, 0];\n  } else {\n    offsets = parseOffset(offset, popper, reference, basePlacement);\n  }\n\n  if (basePlacement === 'left') {\n    popper.top += offsets[0];\n    popper.left -= offsets[1];\n  } else if (basePlacement === 'right') {\n    popper.top += offsets[0];\n    popper.left += offsets[1];\n  } else if (basePlacement === 'top') {\n    popper.left += offsets[0];\n    popper.top -= offsets[1];\n  } else if (basePlacement === 'bottom') {\n    popper.left += offsets[0];\n    popper.top += offsets[1];\n  }\n\n  data.popper = popper;\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n  // If offsetParent is the reference element, we really want to\n  // go one step up and use the next offsetParent as reference to\n  // avoid to make this modifier completely useless and look like broken\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\n  }\n\n  // NOTE: DOM access here\n  // resets the popper's position so that the document size can be calculated excluding\n  // the size of the popper element itself\n  var transformProp = getSupportedPropertyName('transform');\n  var popperStyles = data.instance.popper.style; // assignment to help minification\n  var top = popperStyles.top,\n      left = popperStyles.left,\n      transform = popperStyles[transformProp];\n\n  popperStyles.top = '';\n  popperStyles.left = '';\n  popperStyles[transformProp] = '';\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n  // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n  popperStyles.top = top;\n  popperStyles.left = left;\n  popperStyles[transformProp] = transform;\n\n  options.boundaries = boundaries;\n\n  var order = options.priority;\n  var popper = data.offsets.popper;\n\n  var check = {\n    primary: function primary(placement) {\n      var value = popper[placement];\n      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\n      return defineProperty({}, placement, value);\n    },\n    secondary: function secondary(placement) {\n      var mainSide = placement === 'right' ? 'left' : 'top';\n      var value = popper[mainSide];\n      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n      }\n      return defineProperty({}, mainSide, value);\n    }\n  };\n\n  order.forEach(function (placement) {\n    var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n    popper = _extends({}, popper, check[side](placement));\n  });\n\n  data.offsets.popper = popper;\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var shiftvariation = placement.split('-')[1];\n\n  // if shift shiftvariation is specified, run the modifier\n  if (shiftvariation) {\n    var _data$offsets = data.offsets,\n        reference = _data$offsets.reference,\n        popper = _data$offsets.popper;\n\n    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    var side = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    var shiftOffsets = {\n      start: defineProperty({}, side, reference[side]),\n      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n    };\n\n    data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n    return data;\n  }\n\n  var refRect = data.offsets.reference;\n  var bound = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'preventOverflow';\n  }).boundaries;\n\n  if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === true) {\n      return data;\n    }\n\n    data.hide = true;\n    data.attributes['x-out-of-boundaries'] = '';\n  } else {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === false) {\n      return data;\n    }\n\n    data.hide = false;\n    data.attributes['x-out-of-boundaries'] = false;\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n\n  return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n  /**\n   * Modifier used to shift the popper on the start or end of its reference\n   * element.<br />\n   * It will read the variation of the `placement` property.<br />\n   * It can be one either `-end` or `-start`.\n   * @memberof modifiers\n   * @inner\n   */\n  shift: {\n    /** @prop {number} order=100 - Index used to define the order of execution */\n    order: 100,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: shift\n  },\n\n  /**\n   * The `offset` modifier can shift your popper on both its axis.\n   *\n   * It accepts the following units:\n   * - `px` or unit-less, interpreted as pixels\n   * - `%` or `%r`, percentage relative to the length of the reference element\n   * - `%p`, percentage relative to the length of the popper element\n   * - `vw`, CSS viewport width unit\n   * - `vh`, CSS viewport height unit\n   *\n   * For length is intended the main axis relative to the placement of the popper.<br />\n   * This means that if the placement is `top` or `bottom`, the length will be the\n   * `width`. In case of `left` or `right`, it will be the `height`.\n   *\n   * You can provide a single value (as `Number` or `String`), or a pair of values\n   * as `String` divided by a comma or one (or more) white spaces.<br />\n   * The latter is a deprecated method because it leads to confusion and will be\n   * removed in v2.<br />\n   * Additionally, it accepts additions and subtractions between different units.\n   * Note that multiplications and divisions aren't supported.\n   *\n   * Valid examples are:\n   * ```\n   * 10\n   * '10%'\n   * '10, 10'\n   * '10%, 10'\n   * '10 + 10%'\n   * '10 - 5vh + 3%'\n   * '-10px + 5vh, 5px - 6%'\n   * ```\n   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  offset: {\n    /** @prop {number} order=200 - Index used to define the order of execution */\n    order: 200,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: offset,\n    /** @prop {Number|String} offset=0\n     * The offset value as described in the modifier description\n     */\n    offset: 0\n  },\n\n  /**\n   * Modifier used to prevent the popper from being positioned outside the boundary.\n   *\n   * A scenario exists where the reference itself is not within the boundaries.<br />\n   * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n   * In this case we need to decide whether the popper should either:\n   *\n   * - detach from the reference and remain \"trapped\" in the boundaries, or\n   * - if it should ignore the boundary and \"escape with its reference\"\n   *\n   * When `escapeWithReference` is set to`true` and reference is completely\n   * outside its boundaries, the popper will overflow (or completely leave)\n   * the boundaries in order to remain attached to the edge of the reference.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  preventOverflow: {\n    /** @prop {number} order=300 - Index used to define the order of execution */\n    order: 300,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n    /**\n     * @prop {Array} [priority=['left','right','top','bottom']]\n     * Popper will try to prevent overflow following these priorities by default,\n     * then, it could overflow on the left and on top of the `boundariesElement`\n     */\n    priority: ['left', 'right', 'top', 'bottom'],\n    /**\n     * @prop {number} padding=5\n     * Amount of pixel used to define a minimum distance between the boundaries\n     * and the popper. This makes sure the popper always has a little padding\n     * between the edges of its container\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='scrollParent'\n     * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n     * `viewport` or any DOM element.\n     */\n    boundariesElement: 'scrollParent'\n  },\n\n  /**\n   * Modifier used to make sure the reference and its popper stay near each other\n   * without leaving any gap between the two. Especially useful when the arrow is\n   * enabled and you want to ensure that it points to its reference element.\n   * It cares only about the first axis. You can still have poppers with margin\n   * between the popper and its reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  keepTogether: {\n    /** @prop {number} order=400 - Index used to define the order of execution */\n    order: 400,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: keepTogether\n  },\n\n  /**\n   * This modifier is used to move the `arrowElement` of the popper to make\n   * sure it is positioned between the reference element and its popper element.\n   * It will read the outer size of the `arrowElement` node to detect how many\n   * pixels of conjunction are needed.\n   *\n   * It has no effect if no `arrowElement` is provided.\n   * @memberof modifiers\n   * @inner\n   */\n  arrow: {\n    /** @prop {number} order=500 - Index used to define the order of execution */\n    order: 500,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: arrow,\n    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n    element: '[x-arrow]'\n  },\n\n  /**\n   * Modifier used to flip the popper's placement when it starts to overlap its\n   * reference element.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   *\n   * **NOTE:** this modifier will interrupt the current update cycle and will\n   * restart it if it detects the need to flip the placement.\n   * @memberof modifiers\n   * @inner\n   */\n  flip: {\n    /** @prop {number} order=600 - Index used to define the order of execution */\n    order: 600,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: flip,\n    /**\n     * @prop {String|Array} behavior='flip'\n     * The behavior used to change the popper's placement. It can be one of\n     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n     * placements (with optional variations)\n     */\n    behavior: 'flip',\n    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='viewport'\n     * The element which will define the boundaries of the popper position.\n     * The popper will never be placed outside of the defined boundaries\n     * (except if `keepTogether` is enabled)\n     */\n    boundariesElement: 'viewport'\n  },\n\n  /**\n   * Modifier used to make the popper flow toward the inner of the reference element.\n   * By default, when this modifier is disabled, the popper will be placed outside\n   * the reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  inner: {\n    /** @prop {number} order=700 - Index used to define the order of execution */\n    order: 700,\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n    /** @prop {ModifierFn} */\n    fn: inner\n  },\n\n  /**\n   * Modifier used to hide the popper when its reference element is outside of the\n   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n   * be used to hide with a CSS selector the popper when its reference is\n   * out of boundaries.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   * @memberof modifiers\n   * @inner\n   */\n  hide: {\n    /** @prop {number} order=800 - Index used to define the order of execution */\n    order: 800,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: hide\n  },\n\n  /**\n   * Computes the style that will be applied to the popper element to gets\n   * properly positioned.\n   *\n   * Note that this modifier will not touch the DOM, it just prepares the styles\n   * so that `applyStyle` modifier can apply it. This separation is useful\n   * in case you need to replace `applyStyle` with a custom implementation.\n   *\n   * This modifier has `850` as `order` value to maintain backward compatibility\n   * with previous versions of Popper.js. Expect the modifiers ordering method\n   * to change in future major versions of the library.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  computeStyle: {\n    /** @prop {number} order=850 - Index used to define the order of execution */\n    order: 850,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n    /**\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: true,\n    /**\n     * @prop {string} [x='bottom']\n     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n     * Change this if your popper should grow in a direction different from `bottom`\n     */\n    x: 'bottom',\n    /**\n     * @prop {string} [x='left']\n     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n     * Change this if your popper should grow in a direction different from `right`\n     */\n    y: 'right'\n  },\n\n  /**\n   * Applies the computed styles to the popper element.\n   *\n   * All the DOM manipulations are limited to this modifier. This is useful in case\n   * you want to integrate Popper.js inside a framework or view library and you\n   * want to delegate all the DOM manipulations to it.\n   *\n   * Note that if you disable this modifier, you must make sure the popper element\n   * has its position set to `absolute` before Popper.js can do its work!\n   *\n   * Just disable this modifier and define your own to achieve the desired effect.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  applyStyle: {\n    /** @prop {number} order=900 - Index used to define the order of execution */\n    order: 900,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n    /**\n     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: undefined\n  }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n *   modifiers: {\n *     preventOverflow: { enabled: false }\n *   }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n  /**\n   * Popper's placement.\n   * @prop {Popper.placements} placement='bottom'\n   */\n  placement: 'bottom',\n\n  /**\n   * Set this to true if you want popper to position it self in 'fixed' mode\n   * @prop {Boolean} positionFixed=false\n   */\n  positionFixed: false,\n\n  /**\n   * Whether events (resize, scroll) are initially enabled.\n   * @prop {Boolean} eventsEnabled=true\n   */\n  eventsEnabled: true,\n\n  /**\n   * Set to true if you want to automatically remove the popper when\n   * you call the `destroy` method.\n   * @prop {Boolean} removeOnDestroy=false\n   */\n  removeOnDestroy: false,\n\n  /**\n   * Callback called when the popper is created.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onCreate}\n   */\n  onCreate: function onCreate() {},\n\n  /**\n   * Callback called when the popper is updated. This callback is not called\n   * on the initialization/creation of the popper, but only on subsequent\n   * updates.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onUpdate}\n   */\n  onUpdate: function onUpdate() {},\n\n  /**\n   * List of modifiers used to modify the offsets before they are applied to the popper.\n   * They provide most of the functionalities of Popper.js.\n   * @prop {modifiers}\n   */\n  modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n  /**\n   * Creates a new Popper.js instance.\n   * @class Popper\n   * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n   * @param {HTMLElement} popper - The HTML element used as the popper\n   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n   * @return {Object} instance - The generated Popper.js instance\n   */\n  function Popper(reference, popper) {\n    var _this = this;\n\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    classCallCheck(this, Popper);\n\n    this.scheduleUpdate = function () {\n      return requestAnimationFrame(_this.update);\n    };\n\n    // make update() debounced, so that it only runs at most once-per-tick\n    this.update = debounce(this.update.bind(this));\n\n    // with {} we create a new object with the options inside it\n    this.options = _extends({}, Popper.Defaults, options);\n\n    // init state\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: []\n    };\n\n    // get reference and popper elements (allow jQuery wrappers)\n    this.reference = reference && reference.jquery ? reference[0] : reference;\n    this.popper = popper && popper.jquery ? popper[0] : popper;\n\n    // Deep merge modifiers options\n    this.options.modifiers = {};\n    Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n      _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n    });\n\n    // Refactoring modifiers' list (Object => Array)\n    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n      return _extends({\n        name: name\n      }, _this.options.modifiers[name]);\n    })\n    // sort the modifiers by order\n    .sort(function (a, b) {\n      return a.order - b.order;\n    });\n\n    // modifiers have the ability to execute arbitrary code when Popper.js get inited\n    // such code is executed in the same order of its modifier\n    // they could add new properties to their options configuration\n    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n    this.modifiers.forEach(function (modifierOptions) {\n      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n        modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n      }\n    });\n\n    // fire the first update to position the popper in the right place\n    this.update();\n\n    var eventsEnabled = this.options.eventsEnabled;\n    if (eventsEnabled) {\n      // setup event listeners, they will take care of update the position in specific situations\n      this.enableEventListeners();\n    }\n\n    this.state.eventsEnabled = eventsEnabled;\n  }\n\n  // We can't use class properties because they don't get listed in the\n  // class prototype and break stuff like Sinon stubs\n\n\n  createClass(Popper, [{\n    key: 'update',\n    value: function update$$1() {\n      return update.call(this);\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy$$1() {\n      return destroy.call(this);\n    }\n  }, {\n    key: 'enableEventListeners',\n    value: function enableEventListeners$$1() {\n      return enableEventListeners.call(this);\n    }\n  }, {\n    key: 'disableEventListeners',\n    value: function disableEventListeners$$1() {\n      return disableEventListeners.call(this);\n    }\n\n    /**\n     * Schedules an update. It will run on the next UI update available.\n     * @method scheduleUpdate\n     * @memberof Popper\n     */\n\n\n    /**\n     * Collection of utilities useful when writing custom modifiers.\n     * Starting from version 1.7, this method is available only if you\n     * include `popper-utils.js` before `popper.js`.\n     *\n     * **DEPRECATION**: This way to access PopperUtils is deprecated\n     * and will be removed in v2! Use the PopperUtils module directly instead.\n     * Due to the high instability of the methods contained in Utils, we can't\n     * guarantee them to follow semver. Use them at your own risk!\n     * @static\n     * @private\n     * @type {Object}\n     * @deprecated since version 1.8\n     * @member Utils\n     * @memberof Popper\n     */\n\n  }]);\n  return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","import { TaskQueue } from './TaskQueue';\n\n/**\n * Create deferred object.\n *\n * @returns {{promise, resolve, reject}}\n */\nexport function createDeferred() {\n    const deferred = {};\n\n    deferred.promise = new Promise((resolve, reject) => {\n        deferred.resolve = resolve;\n        deferred.reject = reject;\n    });\n\n    return deferred;\n}\n\n/**\n * Returns an instance of {@link TaskQueue}.\n *\n * @returns {Object}\n */\nexport function createTaskQueue() {\n    return new TaskQueue();\n}\n","// @flow\n\n/**\n * The type of Redux action which clears all the data of every sessions.\n *\n * {\n *     type: CLEAR_RECORDING_SESSIONS\n * }\n * @public\n */\nexport const CLEAR_RECORDING_SESSIONS = 'CLEAR_RECORDING_SESSIONS';\n\n/**\n * The type of Redux action which updates the current known state of a recording\n * session.\n *\n * {\n *     type: RECORDING_SESSION_UPDATED,\n *     sessionData: Object\n * }\n * @public\n */\nexport const RECORDING_SESSION_UPDATED = 'RECORDING_SESSION_UPDATED';\n\n/**\n * The type of Redux action which sets the pending recording notification UID to\n * use it for when hiding the notification is necessary, or unsets it when\n * undefined (or no param) is passed.\n *\n * {\n *     type: SET_PENDING_RECORDING_NOTIFICATION_UID,\n *     streamType: string,\n *     uid: ?number\n * }\n * @public\n */\nexport const SET_PENDING_RECORDING_NOTIFICATION_UID\n    = 'SET_PENDING_RECORDING_NOTIFICATION_UID';\n\n/**\n * Sets the stream key last used by the user for later reuse.\n *\n * {\n *     type: SET_STREAM_KEY,\n *     streamKey: string\n * }\n */\nexport const SET_STREAM_KEY = 'SET_STREAM_KEY';\n","// @flow\n\nimport JitsiMeetJS, { JitsiRecordingConstants } from '../base/lib-jitsi-meet';\nimport {\n    NOTIFICATION_TIMEOUT,\n    hideNotification,\n    showErrorNotification,\n    showNotification\n} from '../notifications';\n\nimport {\n    CLEAR_RECORDING_SESSIONS,\n    RECORDING_SESSION_UPDATED,\n    SET_PENDING_RECORDING_NOTIFICATION_UID,\n    SET_STREAM_KEY\n} from './actionTypes';\n\n/**\n * Clears the data of every recording sessions.\n *\n * @returns {{\n *     type: CLEAR_RECORDING_SESSIONS\n * }}\n */\nexport function clearRecordingSessions() {\n    return {\n        type: CLEAR_RECORDING_SESSIONS\n    };\n}\n\n/**\n * Signals that the pending recording notification should be removed from the\n * screen.\n *\n * @param {string} streamType - The type of the stream ({@code 'file'} or\n * {@code 'stream'}).\n * @returns {Function}\n */\nexport function hidePendingRecordingNotification(streamType: string) {\n    return (dispatch: Function, getState: Function) => {\n        const { pendingNotificationUids } = getState()['features/recording'];\n        const pendingNotificationUid = pendingNotificationUids[streamType];\n\n        if (pendingNotificationUid) {\n            dispatch(hideNotification(pendingNotificationUid));\n            dispatch(\n                _setPendingRecordingNotificationUid(\n                    undefined, streamType));\n        }\n    };\n}\n\n/**\n * Sets the stream key last used by the user for later reuse.\n *\n * @param {string} streamKey - The stream key to set.\n * @returns {{\n *     type: SET_STREAM_KEY,\n *     streamKey: string\n * }}\n */\nexport function setLiveStreamKey(streamKey: string) {\n    return {\n        type: SET_STREAM_KEY,\n        streamKey\n    };\n}\n\n/**\n * Signals that the pending recording notification should be shown on the\n * screen.\n *\n * @param {string} streamType - The type of the stream ({@code file} or\n * {@code stream}).\n * @returns {Function}\n */\nexport function showPendingRecordingNotification(streamType: string) {\n    return (dispatch: Function) => {\n        const isLiveStreaming\n            = streamType === JitsiMeetJS.constants.recording.mode.STREAM;\n        const dialogProps = isLiveStreaming ? {\n            descriptionKey: 'liveStreaming.pending',\n            titleKey: 'dialog.liveStreaming'\n        } : {\n            descriptionKey: 'recording.pending',\n            titleKey: 'dialog.recording'\n        };\n        const showNotificationAction = showNotification({\n            isDismissAllowed: false,\n            ...dialogProps\n        });\n\n        dispatch(showNotificationAction);\n\n        dispatch(_setPendingRecordingNotificationUid(\n            showNotificationAction.uid, streamType));\n    };\n}\n\n/**\n * Signals that the recording error notification should be shown.\n *\n * @param {Object} props - The Props needed to render the notification.\n * @returns {showErrorNotification}\n */\nexport function showRecordingError(props: Object) {\n    return showErrorNotification(props);\n}\n\n/**\n * Signals that the stopped recording notification should be shown on the\n * screen for a given period.\n *\n * @param {string} streamType - The type of the stream ({@code file} or\n * {@code stream}).\n * @param {string?} participantName - The participant name stopping the recording.\n * @returns {showNotification}\n */\nexport function showStoppedRecordingNotification(streamType: string, participantName?: string) {\n    const isLiveStreaming\n        = streamType === JitsiMeetJS.constants.recording.mode.STREAM;\n    const descriptionArguments = { name: participantName };\n    const dialogProps = isLiveStreaming ? {\n        descriptionKey: participantName ? 'liveStreaming.offBy' : 'liveStreaming.off',\n        descriptionArguments,\n        titleKey: 'dialog.liveStreaming'\n    } : {\n        descriptionKey: participantName ? 'recording.offBy' : 'recording.off',\n        descriptionArguments,\n        titleKey: 'dialog.recording'\n    };\n\n    return showNotification(dialogProps, NOTIFICATION_TIMEOUT);\n}\n\n/**\n * Signals that a started recording notification should be shown on the\n * screen for a given period.\n *\n * @param {string} streamType - The type of the stream ({@code file} or\n * {@code stream}).\n * @param {string} participantName - The participant name that started the recording.\n * @returns {showNotification}\n */\nexport function showStartedRecordingNotification(streamType: string, participantName: string) {\n    const isLiveStreaming\n        = streamType === JitsiMeetJS.constants.recording.mode.STREAM;\n    const descriptionArguments = { name: participantName };\n    const dialogProps = isLiveStreaming ? {\n        descriptionKey: 'liveStreaming.onBy',\n        descriptionArguments,\n        titleKey: 'dialog.liveStreaming'\n    } : {\n        descriptionKey: 'recording.onBy',\n        descriptionArguments,\n        titleKey: 'dialog.recording'\n    };\n\n    return showNotification(dialogProps, NOTIFICATION_TIMEOUT);\n}\n\n/**\n * Updates the known state for a given recording session.\n *\n * @param {Object} session - The new state to merge with the existing state in\n * redux.\n * @returns {{\n *     type: RECORDING_SESSION_UPDATED,\n *     sessionData: Object\n * }}\n */\nexport function updateRecordingSessionData(session: Object) {\n    const status = session.getStatus();\n    const timestamp\n        = status === JitsiRecordingConstants.status.ON\n            ? Date.now() / 1000\n            : undefined;\n\n    return {\n        type: RECORDING_SESSION_UPDATED,\n        sessionData: {\n            error: session.getError(),\n            id: session.getID(),\n            initiator: session.getInitiator(),\n            liveStreamViewURL: session.getLiveStreamViewURL(),\n            mode: session.getMode(),\n            status,\n            terminator: session.getTerminator(),\n            timestamp\n        }\n    };\n}\n\n/**\n * Sets UID of the the pending streaming notification to use it when hinding\n * the notification is necessary, or unsets it when undefined (or no param) is\n * passed.\n *\n * @param {?number} uid - The UID of the notification.\n * @param {string} streamType - The type of the stream ({@code file} or\n * {@code stream}).\n * @returns {{\n *     type: SET_PENDING_RECORDING_NOTIFICATION_UID,\n *     streamType: string,\n *     uid: number\n * }}\n */\nfunction _setPendingRecordingNotificationUid(uid: ?number, streamType: string) {\n    return {\n        type: SET_PENDING_RECORDING_NOTIFICATION_UID,\n        streamType,\n        uid\n    };\n}\n","// @flow\n\nimport { JitsiRecordingConstants } from '../base/lib-jitsi-meet';\n\n\n/**\n * The identifier of the sound to be played when a live streaming session is stopped.\n *\n * @type {string}\n */\nexport const LIVE_STREAMING_OFF_SOUND_ID = 'LIVE_STREAMING_OFF_SOUND';\n\n/**\n * The identifier of the sound to be played when a live streaming session is started.\n *\n * @type {string}\n */\nexport const LIVE_STREAMING_ON_SOUND_ID = 'LIVE_STREAMING_ON_SOUND';\n\n/**\n * The identifier of the sound to be played when a recording session is stopped.\n *\n * @type {string}\n */\nexport const RECORDING_OFF_SOUND_ID = 'RECORDING_OFF_SOUND';\n\n/**\n * The identifier of the sound to be played when a recording session is started.\n *\n * @type {string}\n */\nexport const RECORDING_ON_SOUND_ID = 'RECORDING_ON_SOUND';\n\n/**\n * Expected supported recording types.\n *\n * @enum {string}\n */\nexport const RECORDING_TYPES = {\n    JITSI_REC_SERVICE: 'recording-service',\n    DROPBOX: 'dropbox'\n};\n\n/**\n * An array defining the priorities of the recording (or live streaming)\n * statuses, where the index of the array is the priority itself.\n *\n * @type {Array<string>}\n */\nexport const RECORDING_STATUS_PRIORITIES = [\n    JitsiRecordingConstants.status.OFF,\n    JitsiRecordingConstants.status.PENDING,\n    JitsiRecordingConstants.status.ON\n];\n","// @flow\n\nimport { JitsiRecordingConstants } from '../base/lib-jitsi-meet';\n\nimport { RECORDING_STATUS_PRIORITIES } from './constants';\n\n/**\n * Searches in the passed in redux state for an active recording session of the\n * passed in mode.\n *\n * @param {Object} state - The redux state to search in.\n * @param {string} mode - Find an active recording session of the given mode.\n * @returns {Object|undefined}\n */\nexport function getActiveSession(state: Object, mode: string) {\n    const { sessionDatas } = state['features/recording'];\n    const { status: statusConstants } = JitsiRecordingConstants;\n\n    return sessionDatas.find(sessionData => sessionData.mode === mode\n        && (sessionData.status === statusConstants.ON\n            || sessionData.status === statusConstants.PENDING));\n}\n\n/**\n * Returns an estimated recording duration based on the size of the video file\n * in MB. The estimate is calculated under the assumption that 1 min of recorded\n * video needs 10MB of storage on avarage.\n *\n * @param {number} size - The size in MB of the recorded video.\n * @returns {number} - The estimated duration in minutes.\n */\nexport function getRecordingDurationEstimation(size: ?number) {\n    return Math.floor((size || 0) / 10);\n}\n\n/**\n * Searches in the passed in redux state for a recording session that matches\n * the passed in recording session ID.\n *\n * @param {Object} state - The redux state to search in.\n * @param {string} id - The ID of the recording session to find.\n * @returns {Object|undefined}\n */\nexport function getSessionById(state: Object, id: string) {\n    return state['features/recording'].sessionDatas.find(\n        sessionData => sessionData.id === id);\n}\n\n/**\n * Returns the recording session status that is to be shown in a label. E.g. If\n * there is a session with the status OFF and one with PENDING, then the PENDING\n * one will be shown, because that is likely more important for the user to see.\n *\n * @param {Object} state - The redux state to search in.\n * @param {string} mode - The recording mode to get status for.\n * @returns {string|undefined}\n */\nexport function getSessionStatusToShow(state: Object, mode: string): ?string {\n    const recordingSessions = state['features/recording'].sessionDatas;\n    let status;\n\n    if (Array.isArray(recordingSessions)) {\n        for (const session of recordingSessions) {\n            if (session.mode === mode\n                    && (!status\n                        || (RECORDING_STATUS_PRIORITIES.indexOf(session.status)\n                            > RECORDING_STATUS_PRIORITIES.indexOf(status)))) {\n                status = session.status;\n            }\n        }\n    }\n\n    return status;\n}\n","// @flow\n\nimport { Component } from 'react';\n\nimport { JitsiRecordingConstants } from '../../base/lib-jitsi-meet';\n\nimport { getSessionStatusToShow } from '../functions';\n\n/**\n * NOTE: Web currently renders multiple indicators if multiple recording\n * sessions are running. This is however may not be a good UX as it's not\n * obvious why there are multiple similar 'REC' indicators rendered. Mobile\n * only renders one indicator if there is at least one recording session\n * running. These boolean are shared across the two components to make it\n * easier to align web's behaviour to mobile's later if necessary.\n */\ntype Props = {\n\n    /**\n     * The status of the highermost priority session.\n     */\n    _status: ?string,\n\n    /**\n     * The recording mode this indicator should display.\n     */\n    mode: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * State of the component.\n */\ntype State = {\n\n    /**\n     * True if the label status is stale, so it needs to be removed.\n     */\n    staleLabel: boolean\n};\n\n/**\n * The timeout after a label is considered stale. See {@code _updateStaleStatus}\n * for more details.\n */\nconst STALE_TIMEOUT = 10 * 1000;\n\n/**\n * Abstract class for the {@code RecordingLabel} component.\n */\nexport default class AbstractRecordingLabel\n    extends Component<Props, State> {\n    /**\n     * Implements {@code Component#getDerivedStateFromProps}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props: Props, prevState: State) {\n        return {\n            staleLabel: props._status !== JitsiRecordingConstants.status.OFF\n                && prevState.staleLabel ? false : prevState.staleLabel\n        };\n    }\n\n    /**\n     * Initializes a new {@code AbstractRecordingLabel} component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            staleLabel: false\n        };\n\n        this._updateStaleStatus({}, props);\n    }\n\n    /**\n     * Implements {@code Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: Props) {\n        this._updateStaleStatus(prevProps, this.props);\n    }\n\n    /**\n     * Implements React {@code Component}'s render.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return this.props._status && !this.state.staleLabel\n            ? this._renderLabel() : null;\n    }\n\n    _getLabelKey: () => ?string\n\n    /**\n     * Returns the label key that this indicator should render.\n     *\n     * @protected\n     * @returns {?string}\n     */\n    _getLabelKey() {\n        switch (this.props.mode) {\n        case JitsiRecordingConstants.mode.STREAM:\n            return 'recording.live';\n        case JitsiRecordingConstants.mode.FILE:\n            return 'recording.rec';\n        default:\n            // Invalid mode is passed to the component.\n            return undefined;\n        }\n    }\n\n    /**\n     * Renders the platform specific label component.\n     *\n     * @protected\n     * @returns {React$Element}\n     */\n    _renderLabel: () => React$Element<*>\n\n    /**\n     * Updates the stale status of the label on a prop change. A label is stale\n     * if it's in a {@code _status} that doesn't need to be rendered anymore.\n     *\n     * @param {Props} oldProps - The previous props of the component.\n     * @param {Props} newProps - The new props of the component.\n     * @returns {void}\n     */\n    _updateStaleStatus(oldProps, newProps) {\n        if (newProps._status === JitsiRecordingConstants.status.OFF) {\n            if (oldProps._status !== JitsiRecordingConstants.status.OFF) {\n                setTimeout(() => {\n                    // Only if it's still OFF.\n                    if (this.props._status\n                            === JitsiRecordingConstants.status.OFF) {\n                        this.setState({\n                            staleLabel: true\n                        });\n                    }\n                }, STALE_TIMEOUT);\n            }\n        }\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code AbstractRecordingLabel}'s props.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The component's own props.\n * @private\n * @returns {{\n *     _status: ?string\n * }}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const { mode } = ownProps;\n\n    return {\n        _status: getSessionStatusToShow(state, mode)\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { CircularLabel } from '../../../base/label';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\nimport AbstractRecordingLabel, {\n    _mapStateToProps\n} from '../AbstractRecordingLabel';\n\n/**\n * Implements a React {@link Component} which displays the current state of\n * conference recording.\n *\n * @extends {Component}\n */\nclass RecordingLabel extends AbstractRecordingLabel {\n    /**\n     * Renders the platform specific label component.\n     *\n     * @inheritdoc\n     */\n    _renderLabel() {\n        if (this.props._status !== JitsiRecordingConstants.status.ON) {\n            // Since there are no expanded labels on web, we only render this\n            // label when the recording status is ON.\n            return null;\n        }\n\n        return (\n            <div>\n                <CircularLabel\n                    className = { this.props.mode }\n                    label = { this.props.t(this._getLabelKey()) } />\n            </div>\n        );\n    }\n\n    _getLabelKey: () => ?string\n}\n\nexport default translate(connect(_mapStateToProps)(RecordingLabel));\n","// @flow\n\nimport { openDialog } from '../../../base/dialog';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\nimport { getLocalParticipant } from '../../../base/participants';\nimport {\n    AbstractButton,\n    type AbstractButtonProps\n} from '../../../base/toolbox';\n\nimport { getActiveSession } from '../../functions';\n\nimport {\n    StartLiveStreamDialog,\n    StopLiveStreamDialog\n} from './_';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractLiveStreamButton}.\n */\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * True if there is a running active live stream, false otherwise.\n     */\n    _isLiveStreamRunning: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * The i18n translate function.\n     */\n    t: Function\n};\n\n/**\n * An abstract class of a button for starting and stopping live streaming.\n */\nexport default class AbstractLiveStreamButton<P: Props>\n    extends AbstractButton<P, *> {\n    accessibilityLabel = 'dialog.accessibilityLabel.liveStreaming';\n    label = 'dialog.startLiveStreaming';\n    toggledLabel = 'dialog.stopLiveStreaming';\n\n    /**\n     * Handles clicking / pressing the button.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { _isLiveStreamRunning, dispatch } = this.props;\n\n        dispatch(openDialog(\n            _isLiveStreamRunning ? StopLiveStreamDialog : StartLiveStreamDialog\n        ));\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._isLiveStreamRunning;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code AbstractLiveStreamButton} component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the Component.\n * @private\n * @returns {{\n *     _isLiveStreamRunning: boolean,\n *     visible: boolean\n * }}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    let { visible } = ownProps;\n\n    // a button can be disabled/enabled only if enableFeaturesBasedOnToken\n    // is on\n    let disabledByFeatures;\n\n    if (typeof visible === 'undefined') {\n        // If the containing component provides the visible prop, that is one\n        // above all, but if not, the button should be autonomus and decide on\n        // its own to be visible or not.\n        const {\n            enableFeaturesBasedOnToken,\n            liveStreamingEnabled\n        } = state['features/base/config'];\n        const { features = {} } = getLocalParticipant(state);\n\n        visible = liveStreamingEnabled;\n\n        if (enableFeaturesBasedOnToken) {\n            visible = visible && String(features.livestreaming) === 'true';\n            disabledByFeatures = String(features.livestreaming) === 'disabled';\n        }\n    }\n\n    return {\n        _isLiveStreamRunning: Boolean(\n            getActiveSession(state, JitsiRecordingConstants.mode.STREAM)),\n        disabledByFeatures,\n        visible\n    };\n}\n","// @flow\n\nimport { translate } from '../../../../base/i18n';\nimport { IconLiveStreaming } from '../../../../base/icons';\nimport { connect } from '../../../../base/redux';\n\nimport AbstractLiveStreamButton, {\n    _mapStateToProps as _abstractMapStateToProps,\n    type Props as AbstractProps\n} from '../AbstractLiveStreamButton';\n\ndeclare var interfaceConfig: Object;\n\ntype Props = AbstractProps & {\n\n    /**\n     * True if the button should be disabled, false otherwise.\n     *\n     * NOTE: On web, if the feature is not disabled on purpose, then we still\n     * show the button but disabled and with a tooltip rendered on it,\n     * explaining why it's not available.\n     */\n    _disabled: boolean,\n\n    /**\n     * Tooltip for the button when it's disabled in a certain way.\n     */\n    _liveStreamDisabledTooltipKey: ?string\n}\n\n/**\n * An implementation of a button for starting and stopping live streaming.\n */\nclass LiveStreamButton extends AbstractLiveStreamButton<Props> {\n    icon = IconLiveStreaming;\n\n    /**\n     * Returns the tooltip that should be displayed when the button is disabled.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getTooltip() {\n        return this.props._liveStreamDisabledTooltipKey || '';\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * boolean value indicating if this button is disabled or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return this.props._disabled;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code LiveStreamButton} component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the Component.\n * @private\n * @returns {{\n *     _conference: Object,\n *     _isLiveStreamRunning: boolean,\n *     _disabled: boolean,\n *     visible: boolean\n * }}\n */\nfunction _mapStateToProps(state: Object, ownProps: Props) {\n    const abstractProps = _abstractMapStateToProps(state, ownProps);\n    let { visible } = ownProps;\n\n    const _disabledByFeatures = abstractProps.disabledByFeatures;\n    let _disabled = false;\n    let _liveStreamDisabledTooltipKey;\n\n    if (!abstractProps.visible\n            && _disabledByFeatures !== undefined && !_disabledByFeatures) {\n        _disabled = true;\n\n        // button and tooltip\n        if (state['features/base/jwt'].isGuest) {\n            _liveStreamDisabledTooltipKey\n                = 'dialog.liveStreamingDisabledForGuestTooltip';\n        } else {\n            _liveStreamDisabledTooltipKey\n                = 'dialog.liveStreamingDisabledTooltip';\n        }\n    }\n\n    if (typeof visible === 'undefined') {\n        visible = interfaceConfig.TOOLBAR_BUTTONS.includes('livestreaming')\n            && (abstractProps.visible\n                    || Boolean(_liveStreamDisabledTooltipKey));\n    }\n\n    return {\n        ...abstractProps,\n        _disabled,\n        _liveStreamDisabledTooltipKey,\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(LiveStreamButton));\n","// @flow\n\nimport { Component } from 'react';\n\nimport {\n    createLiveStreamingDialogEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractStartLiveStreamDialog}.\n */\nexport type Props = {\n\n    /**\n     * The {@code JitsiConference} for the current conference.\n     */\n    _conference: Object,\n\n    /**\n     * The current state of interactions with the Google API. Determines what\n     * Google related UI should display.\n     */\n    _googleAPIState: number,\n\n    /**\n     * The email of the user currently logged in to the Google web client\n     * application.\n     */\n    _googleProfileEmail: string,\n\n    /**\n     * The live stream key that was used before.\n     */\n    _streamKey: string,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n * The type of the React {@code Component} state of\n * {@link AbstractStartLiveStreamDialog}.\n */\nexport type State = {\n\n    /**\n     * Details about the broadcasts available for use for the logged in Google\n     * user's YouTube account.\n     */\n    broadcasts: ?Array<Object>,\n\n    /**\n     * The error type, as provided by Google, for the most recent error\n     * encountered by the Google API.\n     */\n    errorType: ?string,\n\n    /**\n     * The boundStreamID of the broadcast currently selected in the broadcast\n     * dropdown.\n     */\n    selectedBoundStreamID: ?string,\n\n    /**\n     * The selected or entered stream key to use for YouTube live streaming.\n     */\n    streamKey: string\n};\n\n/**\n * Implements an abstract class for the StartLiveStreamDialog on both platforms.\n *\n * NOTE: Google log-in is not supported for mobile yet for later implementation\n * but the abstraction of its properties are already present in this abstract\n * class.\n */\nexport default class AbstractStartLiveStreamDialog<P: Props>\n    extends Component<P, State> {\n    _isMounted: boolean;\n\n    /**\n     * Constructor of the component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        this.state = {\n            broadcasts: undefined,\n            errorType: undefined,\n            selectedBoundStreamID: undefined,\n            streamKey: ''\n        };\n\n        /**\n         * Instance variable used to flag whether the component is or is not\n         * mounted. Used as a hack to avoid setting state on an unmounted\n         * component.\n         *\n         * @private\n         * @type {boolean}\n         */\n        this._isMounted = false;\n\n        this._onCancel = this._onCancel.bind(this);\n        this._onStreamKeyChange = this._onStreamKeyChange.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Implements {@link Component#componentDidMount()}. Invoked immediately\n     * after this component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        this._isMounted = true;\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount()}. Invoked\n     * immediately before this component is unmounted and destroyed.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._isMounted = false;\n    }\n\n    _onCancel: () => boolean;\n\n    /**\n     * Invokes the passed in {@link onCancel} callback and closes\n     * {@code StartLiveStreamDialog}.\n     *\n     * @private\n     * @returns {boolean} True is returned to close the modal.\n     */\n    _onCancel() {\n        sendAnalytics(createLiveStreamingDialogEvent('start', 'cancel.button'));\n\n        return true;\n    }\n\n    /**\n     * Asks the user to sign in, if not already signed in, and then requests a\n     * list of the user's YouTube broadcasts.\n     *\n     * NOTE: To be implemented by platforms.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _onGetYouTubeBroadcasts: () => Promise<*>;\n\n    _onStreamKeyChange: string => void;\n\n    /**\n     * Callback invoked to update the {@code StartLiveStreamDialog} component's\n     * display of the entered YouTube stream key.\n     *\n     * @param {string} streamKey - The stream key entered in the field.\n     * @private\n     * @returns {void}\n     */\n    _onStreamKeyChange(streamKey) {\n        this._setStateIfMounted({\n            streamKey,\n            selectedBoundStreamID: undefined\n        });\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Invokes the passed in {@link onSubmit} callback with the entered stream\n     * key, and then closes {@code StartLiveStreamDialog}.\n     *\n     * @private\n     * @returns {boolean} False if no stream key is entered to preventing\n     * closing, true to close the modal.\n     */\n    _onSubmit() {\n        const { broadcasts, selectedBoundStreamID } = this.state;\n        const key\n            = (this.state.streamKey || this.props._streamKey || '').trim();\n\n        if (!key) {\n            return false;\n        }\n\n        let selectedBroadcastID = null;\n\n        if (selectedBoundStreamID) {\n            const selectedBroadcast = broadcasts && broadcasts.find(\n                broadcast => broadcast.boundStreamID === selectedBoundStreamID);\n\n            selectedBroadcastID = selectedBroadcast && selectedBroadcast.id;\n        }\n\n        sendAnalytics(\n            createLiveStreamingDialogEvent('start', 'confirm.button'));\n\n        this.props._conference.startRecording({\n            broadcastId: selectedBroadcastID,\n            mode: JitsiRecordingConstants.mode.STREAM,\n            streamId: key\n        });\n\n        return true;\n    }\n\n    /**\n     * Updates the internal state if the component is still mounted. This is a\n     * workaround for all the state setting that occurs after ajax.\n     *\n     * @param {Object} newState - The new state to merge into the existing\n     * state.\n     * @private\n     * @returns {void}\n     */\n    _setStateIfMounted(newState) {\n        if (this._isMounted) {\n            this.setState(newState);\n        }\n    }\n}\n\n/**\n * Maps part of the Redux state to the component's props.\n *\n * @param {Object} state - The Redux state.\n * @returns {{\n *     _conference: Object,\n *     _googleAPIState: number,\n *     _googleProfileEmail: string,\n *     _streamKey: string\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    return {\n        _conference: state['features/base/conference'].conference,\n        _googleAPIState: state['features/google-api'].googleAPIState,\n        _googleProfileEmail: state['features/google-api'].profileEmail,\n        _streamKey: state['features/recording'].streamKey\n    };\n}\n","/**\n * The URL for Google Privacy Policy.\n */\nexport const GOOGLE_PRIVACY_POLICY = 'https://policies.google.com/privacy';\n\n/**\n * The URL that is the main landing page for YouTube live streaming and should\n * have a user's live stream key.\n */\nexport const YOUTUBE_LIVE_DASHBOARD_URL = 'https://www.youtube.com/live_dashboard';\n\n/**\n * The URL for YouTube terms and conditions.\n */\nexport const YOUTUBE_TERMS_URL = 'https://www.youtube.com/t/terms';\n","/* @flow */\n\nimport {\n    DropdownItem,\n    DropdownItemGroup,\n    DropdownMenuStateless\n} from '@atlaskit/dropdown-menu';\nimport React, { PureComponent } from 'react';\n\nimport { translate } from '../../../../base/i18n';\n\nimport { YOUTUBE_LIVE_DASHBOARD_URL } from '../constants';\n\n/**\n * The type of the React {@code Component} props of {@link StreamKeyPicker}.\n */\ntype Props = {\n\n    /**\n     * Broadcasts available for selection. Each broadcast item should be an\n     * object with a title for display in the dropdown and a boundStreamID to\n     * return in the {@link onBroadcastSelected} callback.\n     */\n    broadcasts: Array<Object>,\n\n    /**\n     * Callback invoked when an item in the dropdown is selected. The selected\n     * broadcast's boundStreamID will be passed back.\n     */\n    onBroadcastSelected: Function,\n\n    /**\n     * The boundStreamID of the broadcast that should display as selected in the\n     * dropdown.\n     */\n    selectedBoundStreamID: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link StreamKeyPicker}.\n */\ntype State = {\n\n    /**\n     * Whether or not to display the dropdown menu to pick a YouTube broadcast.\n     */\n    isDropdownOpen: boolean\n};\n\n/**\n * A dropdown to select a YouTube broadcast.\n *\n * @extends Component\n */\nclass StreamKeyPicker extends PureComponent<Props, State> {\n    /**\n     * Default values for {@code StreamKeyForm} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        broadcasts: []\n    };\n\n    /**\n     * The initial state of a {@code StreamKeyForm} instance.\n     */\n    state = {\n        isDropdownOpen: false\n    };\n\n    /**\n     * Initializes a new {@code StreamKeyPicker} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code StreamKeyPicker} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onDropdownOpenChange = this._onDropdownOpenChange.bind(this);\n        this._onSelect = this._onSelect.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { broadcasts, selectedBoundStreamID, t } = this.props;\n\n        if (!broadcasts.length) {\n            return (\n                <a\n                    className = 'warning-text'\n                    href = { YOUTUBE_LIVE_DASHBOARD_URL }\n                    rel = 'noopener noreferrer'\n                    target = '_blank'>\n                    { t('liveStreaming.getStreamKeyManually') }\n                </a>\n            );\n        }\n\n        const dropdownItems\n            = broadcasts.map(broadcast => (\n                <DropdownItem\n                    key = { broadcast.boundStreamID }\n\n                    // eslint-disable-next-line react/jsx-no-bind\n                    onClick = { () => this._onSelect(broadcast.boundStreamID) }>\n                    { broadcast.title }\n                </DropdownItem>));\n        const selected\n            = this.props.broadcasts.find(\n                broadcast => broadcast.boundStreamID === selectedBoundStreamID);\n        const triggerText\n            = (selected && selected.title) || t('liveStreaming.choose');\n\n        return (\n            <div className = 'broadcast-dropdown'>\n                <DropdownMenuStateless\n                    isOpen = { this.state.isDropdownOpen }\n                    onItemActivated = { this._onSelect }\n                    onOpenChange = { this._onDropdownOpenChange }\n                    shouldFitContainer = { true }\n                    trigger = { triggerText }\n                    triggerButtonProps = {{\n                        className: 'broadcast-dropdown-trigger',\n                        shouldFitContainer: true\n                    }}\n                    triggerType = 'button'>\n                    <DropdownItemGroup>\n                        { dropdownItems }\n                    </DropdownItemGroup>\n                </DropdownMenuStateless>\n            </div>\n        );\n    }\n\n    /**\n     * Transforms the passed in broadcasts into an array of objects that can\n     * be parsed by {@code DropdownMenuStateless}.\n     *\n     * @param {Array<Object>} broadcasts - The YouTube broadcasts to display.\n     * @private\n     * @returns {Array<Object>}\n     */\n    _formatBroadcasts(broadcasts) {\n        return broadcasts.map(broadcast => {\n            return {\n                content: broadcast.title,\n                value: broadcast\n            };\n        });\n    }\n\n    _onDropdownOpenChange: (Object) => void;\n\n    /**\n     * Sets the dropdown to be displayed or not based on the passed in event.\n     *\n     * @param {Object} dropdownEvent - The event passed from\n     * {@code DropdownMenuStateless} indicating if the dropdown should be open\n     * or closed.\n     * @private\n     * @returns {void}\n     */\n    _onDropdownOpenChange(dropdownEvent) {\n        this.setState({\n            isDropdownOpen: dropdownEvent.isOpen\n        });\n    }\n\n    _onSelect: (string) => void;\n\n    /**\n     * Callback invoked when an item has been clicked in the dropdown menu.\n     *\n     * @param {Object} boundStreamID - The bound stream ID for the selected\n     * broadcast.\n     * @returns {void}\n     */\n    _onSelect(boundStreamID) {\n        this.props.onBroadcastSelected(boundStreamID);\n    }\n}\n\nexport default translate(StreamKeyPicker);\n","// @flow\n\nimport debounce from 'lodash/debounce';\nimport { Component } from 'react';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The live streaming help link to display. On web it comes from\n * interfaceConfig, but we don't have that on mobile.\n *\n * FIXME: This is in props now to prepare for the Redux-based interfaceConfig\n */\nconst LIVE_STREAMING_HELP_LINK = 'https://jitsi.org/live';\n\n/**\n * The props of the component.\n */\nexport type Props = {\n\n    /**\n     * Callback invoked when the entered stream key has changed.\n     */\n    onChange: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * The stream key value to display as having been entered so far.\n     */\n    value: string\n};\n\n/**\n * The state of the component.\n */\ntype State = {\n\n    /**\n     * Whether or not to show the warnings that the passed in value seems like\n     * an improperly formatted stream key.\n     */\n    showValidationError: boolean\n};\n\n/**\n * An abstract React Component for entering a key for starting a YouTube live\n * stream.\n *\n * @extends Component\n */\nexport default class AbstractStreamKeyForm<P: Props>\n    extends Component<P, State> {\n    helpURL: string;\n    _debouncedUpdateValidationErrorVisibility: Function;\n\n    /**\n     * Constructor for the component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        this.state = {\n            showValidationError: Boolean(this.props.value)\n                && !this._validateStreamKey(this.props.value)\n        };\n\n        this.helpURL = (typeof interfaceConfig !== 'undefined'\n            && interfaceConfig.LIVE_STREAMING_HELP_LINK)\n            || LIVE_STREAMING_HELP_LINK;\n\n        this._debouncedUpdateValidationErrorVisibility = debounce(\n            this._updateValidationErrorVisibility.bind(this),\n            800,\n            { leading: false }\n        );\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onInputChange = this._onInputChange.bind(this);\n    }\n\n    /**\n     * Implements React Component's componentDidUpdate.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: P) {\n        if (this.props.value !== prevProps.value) {\n            this._debouncedUpdateValidationErrorVisibility();\n        }\n    }\n\n    /**\n     * Implements React Component's componentWillUnmount.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._debouncedUpdateValidationErrorVisibility.cancel();\n    }\n\n    _onInputChange: Object => void\n\n    /**\n     * Callback invoked when the value of the input field has updated through\n     * user input. This forwards the value (string only, even if it was a dom\n     * event) to the onChange prop provided to the component.\n     *\n     * @param {Object | string} change - DOM Event for value change or the\n     * changed text.\n     * @private\n     * @returns {void}\n     */\n    _onInputChange(change) {\n        const value = typeof change === 'object' ? change.target.value : change;\n\n        this.props.onChange(value);\n    }\n\n    /**\n     * Checks if the stream key value seems like a valid stream key and sets the\n     * state for showing or hiding the notification about the stream key seeming\n     * invalid.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _updateValidationErrorVisibility() {\n        const newShowValidationError = Boolean(this.props.value)\n            && !this._validateStreamKey(this.props.value);\n\n        if (newShowValidationError !== this.state.showValidationError) {\n            this.setState({\n                showValidationError: newShowValidationError\n            });\n        }\n    }\n\n    /**\n     * Checks if a passed in stream key appears to be in a valid format.\n     *\n     * @param {string} streamKey - The stream key to check for valid formatting.\n     * @returns {void}\n     * @returns {boolean}\n     */\n    _validateStreamKey(streamKey = '') {\n        const trimmedKey = streamKey.trim();\n        const fourGroupsDashSeparated = /^(?:[a-zA-Z0-9]{4}(?:-(?!$)|$)){4}/;\n        const match = fourGroupsDashSeparated.exec(trimmedKey);\n\n        return Boolean(match);\n    }\n}\n","// @flow\n\nimport { FieldTextStateless } from '@atlaskit/field-text';\nimport React from 'react';\n\nimport { translate } from '../../../../base/i18n';\n\nimport AbstractStreamKeyForm, {\n    type Props\n} from '../AbstractStreamKeyForm';\nimport { GOOGLE_PRIVACY_POLICY, YOUTUBE_TERMS_URL } from '../constants';\n\n/**\n * A React Component for entering a key for starting a YouTube live stream.\n *\n * @extends Component\n */\nclass StreamKeyForm extends AbstractStreamKeyForm<Props> {\n\n    /**\n     * Initializes a new {@code StreamKeyForm} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code StreamKeyForm} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onOpenHelp = this._onOpenHelp.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t, value } = this.props;\n\n        return (\n            <div className = 'stream-key-form'>\n                <FieldTextStateless\n                    autoFocus = { true }\n                    compact = { true }\n                    isSpellCheckEnabled = { false }\n                    label = { t('dialog.streamKey') }\n                    name = 'streamId'\n                    okDisabled = { !value }\n                    onChange = { this._onInputChange }\n                    placeholder = { t('liveStreaming.enterStreamKey') }\n                    shouldFitContainer = { true }\n                    type = 'text'\n                    value = { this.props.value } />\n                <div className = 'form-footer'>\n                    <div className = 'help-container'>\n                        {\n                            this.state.showValidationError\n                                ? <span className = 'warning-text'>\n                                    { t('liveStreaming.invalidStreamKey') }\n                                </span>\n                                : null\n                        }\n                        { this.helpURL\n                            ? <a\n                                className = 'helper-link'\n                                onClick = { this._onOpenHelp }>\n                                { t('liveStreaming.streamIdHelp') }\n                            </a>\n                            : null\n                        }\n                    </div>\n                    <a\n                        className = 'helper-link'\n                        href = { YOUTUBE_TERMS_URL }\n                        rel = 'noopener noreferrer'\n                        target = '_blank'>\n                        { t('liveStreaming.youtubeTerms') }\n                    </a>\n                    <a\n                        className = 'helper-link'\n                        href = { GOOGLE_PRIVACY_POLICY }\n                        rel = 'noopener noreferrer'\n                        target = '_blank'>\n                        { t('liveStreaming.googlePrivacyPolicy') }\n                    </a>\n                </div>\n            </div>\n        );\n    }\n\n    _onInputChange: Object => void\n\n    _onOpenHelp: () => void\n\n    /**\n     * Opens a new tab with information on how to manually locate a YouTube\n     * broadcast stream key.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onOpenHelp() {\n        window.open(this.helpURL, '_blank', 'noopener');\n    }\n}\n\nexport default translate(StreamKeyForm);\n","// @flow\n\nimport Spinner from '@atlaskit/spinner';\nimport React from 'react';\n\nimport { Dialog } from '../../../../base/dialog';\nimport { translate } from '../../../../base/i18n';\nimport { connect } from '../../../../base/redux';\n\nimport {\n    GOOGLE_API_STATES,\n    GoogleSignInButton,\n    loadGoogleAPI,\n    requestAvailableYouTubeBroadcasts,\n    requestLiveStreamsForYouTubeBroadcast,\n    showAccountSelection,\n    signIn,\n    updateProfile\n} from '../../../../google-api';\n\nimport AbstractStartLiveStreamDialog, {\n    _mapStateToProps as _abstractMapStateToProps,\n    type Props as AbstractProps\n} from '../AbstractStartLiveStreamDialog';\n\nimport StreamKeyPicker from './StreamKeyPicker';\nimport StreamKeyForm from './StreamKeyForm';\n\ntype Props = AbstractProps & {\n\n    /**\n     * The ID for the Google client application used for making stream key\n     * related requests.\n     */\n    _googleApiApplicationClientID: string\n}\n\n/**\n * A React Component for requesting a YouTube stream key to use for live\n * streaming of the current conference.\n *\n * @extends Component\n */\nclass StartLiveStreamDialog\n    extends AbstractStartLiveStreamDialog<Props> {\n\n    /**\n     * Initializes a new {@code StartLiveStreamDialog} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code StartLiveStreamDialog} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onGetYouTubeBroadcasts = this._onGetYouTubeBroadcasts.bind(this);\n        this._onInitializeGoogleApi = this._onInitializeGoogleApi.bind(this);\n        this._onGoogleSignIn = this._onGoogleSignIn.bind(this);\n        this._onRequestGoogleSignIn = this._onRequestGoogleSignIn.bind(this);\n        this._onYouTubeBroadcastIDSelected\n            = this._onYouTubeBroadcastIDSelected.bind(this);\n    }\n\n    /**\n     * Implements {@link Component#componentDidMount()}. Invoked immediately\n     * after this component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        super.componentDidMount();\n\n        if (this.props._googleApiApplicationClientID) {\n            this._onInitializeGoogleApi();\n        }\n    }\n\n    /**\n     * Implements {@code Component}'s render.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { _googleApiApplicationClientID } = this.props;\n\n        return (\n            <Dialog\n                cancelKey = 'dialog.Cancel'\n                okKey = 'dialog.startLiveStreaming'\n                onCancel = { this._onCancel }\n                onSubmit = { this._onSubmit }\n                titleKey = 'liveStreaming.start'\n                width = { 'small' }>\n                <div className = 'live-stream-dialog'>\n                    { _googleApiApplicationClientID\n                        ? this._renderYouTubePanel() : null }\n                    <StreamKeyForm\n                        onChange = { this._onStreamKeyChange }\n                        value = {\n                            this.state.streamKey || this.props._streamKey\n                        } />\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onCancel: () => boolean;\n\n    _onSubmit: () => boolean;\n\n    _onInitializeGoogleApi: () => void;\n\n    /**\n     * Loads the Google web client application used for fetching stream keys.\n     * If the user is already logged in, then a request for available YouTube\n     * broadcasts is also made.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onInitializeGoogleApi() {\n        this.props.dispatch(loadGoogleAPI())\n        .catch(response => this._parseErrorFromResponse(response));\n    }\n\n    /**\n     * Automatically selects the input field's value after starting to edit the\n     * display name.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidUpdate(previousProps) {\n        if (previousProps._googleAPIState === GOOGLE_API_STATES.LOADED\n            && this.props._googleAPIState === GOOGLE_API_STATES.SIGNED_IN) {\n            this._onGetYouTubeBroadcasts();\n        }\n    }\n\n    _onGetYouTubeBroadcasts: () => void;\n\n    /**\n     * Asks the user to sign in, if not already signed in, and then requests a\n     * list of the user's YouTube broadcasts.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onGetYouTubeBroadcasts() {\n        this.props.dispatch(updateProfile())\n            .catch(response => this._parseErrorFromResponse(response));\n\n        this.props.dispatch(requestAvailableYouTubeBroadcasts())\n            .then(broadcasts => {\n                this._setStateIfMounted({\n                    broadcasts\n                });\n\n                if (broadcasts.length === 1) {\n                    const broadcast = broadcasts[0];\n\n                    this._onYouTubeBroadcastIDSelected(broadcast.boundStreamID);\n                }\n            })\n            .catch(response => this._parseErrorFromResponse(response));\n    }\n\n    _onGoogleSignIn: () => Object;\n\n    /**\n     * Forces the Google web client application to prompt for a sign in, such as\n     * when changing account, and will then fetch available YouTube broadcasts.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _onGoogleSignIn() {\n        this.props.dispatch(signIn())\n            .catch(response => this._parseErrorFromResponse(response));\n    }\n\n    _onRequestGoogleSignIn: () => Object;\n\n    /**\n     * Forces the Google web client application to prompt for a sign in, such as\n     * when changing account, and will then fetch available YouTube broadcasts.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _onRequestGoogleSignIn() {\n        // when there is an error we show the google sign-in button.\n        // once we click it we want to clear the error from the state\n        this.props.dispatch(showAccountSelection())\n            .then(() =>\n                this._setStateIfMounted({\n                    broadcasts: undefined,\n                    errorType: undefined\n                }))\n            .then(() => this._onGetYouTubeBroadcasts());\n    }\n\n    _onStreamKeyChange: string => void;\n\n    _onYouTubeBroadcastIDSelected: (string) => Object;\n\n    /**\n     * Fetches the stream key for a YouTube broadcast and updates the internal\n     * state to display the associated stream key as being entered.\n     *\n     * @param {string} boundStreamID - The bound stream ID associated with the\n     * broadcast from which to get the stream key.\n     * @private\n     * @returns {Promise}\n     */\n    _onYouTubeBroadcastIDSelected(boundStreamID) {\n        this.props.dispatch(\n            requestLiveStreamsForYouTubeBroadcast(boundStreamID))\n            .then(({ streamKey, selectedBoundStreamID }) =>\n                this._setStateIfMounted({\n                    streamKey,\n                    selectedBoundStreamID\n                }));\n\n    }\n\n    /**\n     * Only show an error if an external request was made with the Google api.\n     * Do not error if the login in canceled.\n     * And searches in a Google API error response for the error type.\n     *\n     * @param {Object} response - The Google API response that may contain an\n     * error.\n     * @private\n     * @returns {string|null}\n     */\n    _parseErrorFromResponse(response) {\n\n        if (!response || !response.result) {\n            return;\n        }\n\n        const result = response.result;\n        const error = result.error;\n        const errors = error && error.errors;\n        const firstError = errors && errors[0];\n\n        this._setStateIfMounted({\n            errorType: (firstError && firstError.reason) || null\n        });\n    }\n\n    /**\n     * Renders a React Element for authenticating with the Google web client.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderYouTubePanel() {\n        const {\n            t,\n            _googleProfileEmail\n        } = this.props;\n        const {\n            broadcasts,\n            selectedBoundStreamID\n        } = this.state;\n\n        let googleContent, helpText;\n\n        switch (this.props._googleAPIState) {\n        case GOOGLE_API_STATES.LOADED:\n            googleContent\n                = <GoogleSignInButton onClick = { this._onGoogleSignIn } />;\n            helpText = t('liveStreaming.signInCTA');\n\n            break;\n\n        case GOOGLE_API_STATES.SIGNED_IN:\n            if (broadcasts) {\n                googleContent = (\n                    <StreamKeyPicker\n                        broadcasts = { broadcasts }\n                        onBroadcastSelected\n                            = { this._onYouTubeBroadcastIDSelected }\n                        selectedBoundStreamID = { selectedBoundStreamID } />\n                );\n            } else {\n                googleContent = (\n                    <Spinner\n                        isCompleting = { false }\n                        size = 'medium' />\n                );\n            }\n\n            /**\n             * FIXME: Ideally this help text would be one translation string\n             * that also accepts the anchor. This can be done using the Trans\n             * component of react-i18next but I couldn't get it working...\n             */\n            helpText = (\n                <div>\n                    { `${t('liveStreaming.chooseCTA',\n                        { email: _googleProfileEmail })} ` }\n                    <a onClick = { this._onRequestGoogleSignIn }>\n                        { t('liveStreaming.changeSignIn') }\n                    </a>\n                </div>\n            );\n\n            break;\n\n        case GOOGLE_API_STATES.NEEDS_LOADING:\n        default:\n            googleContent = (\n                <Spinner\n                    isCompleting = { false }\n                    size = 'medium' />\n            );\n\n            break;\n        }\n\n        if (this.state.errorType !== undefined) {\n            googleContent = (\n                <GoogleSignInButton\n                    onClick = { this._onRequestGoogleSignIn } />\n            );\n            helpText = this._getGoogleErrorMessageToDisplay();\n        }\n\n        return (\n            <div className = 'google-panel'>\n                <div className = 'live-stream-cta'>\n                    { helpText }\n                </div>\n                <div className = 'google-api'>\n                    { googleContent }\n                </div>\n            </div>\n        );\n    }\n\n    _setStateIfMounted: Object => void\n\n    /**\n     * Returns the error message to display for the current error state.\n     *\n     * @private\n     * @returns {string} The error message to display.\n     */\n    _getGoogleErrorMessageToDisplay() {\n        let text;\n\n        switch (this.state.errorType) {\n        case 'liveStreamingNotEnabled':\n            text = this.props.t(\n                'liveStreaming.errorLiveStreamNotEnabled',\n                { email: this.props._googleProfileEmail });\n            break;\n        default:\n            text = this.props.t('liveStreaming.errorAPI');\n            break;\n        }\n\n        return <div className = 'google-error'>{ text }</div>;\n    }\n}\n\n/**\n * Maps part of the Redux state to the component's props.\n *\n * @param {Object} state - The Redux state.\n * @returns {{\n *     _googleApiApplicationClientID: string\n * }}\n*/\nfunction _mapStateToProps(state: Object) {\n    return {\n        ..._abstractMapStateToProps(state),\n        _googleApiApplicationClientID:\n        state['features/base/config'].googleApiApplicationClientID\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(StartLiveStreamDialog));\n","// @flow\n\nimport { Component } from 'react';\n\nimport {\n    createLiveStreamingDialogEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\n\nimport { getActiveSession } from '../../functions';\n\n/**\n * The type of the React {@code Component} props of\n * {@link StopLiveStreamDialog}.\n */\ntype Props = {\n\n    /**\n     * The {@code JitsiConference} for the current conference.\n     */\n    _conference: Object,\n\n    /**\n     * The redux representation of the live stremaing to be stopped.\n     */\n    _session: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * A React Component for confirming the participant wishes to stop the currently\n * active live stream of the conference.\n *\n * @extends Component\n */\nexport default class AbstractStopLiveStreamDialog extends Component<Props> {\n    /**\n     * Initializes a new {@code StopLiveStreamDialog} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Callback invoked when stopping of live streaming is confirmed.\n     *\n     * @private\n     * @returns {boolean} True to close the modal.\n     */\n    _onSubmit() {\n        sendAnalytics(createLiveStreamingDialogEvent('stop', 'confirm.button'));\n\n        const { _session } = this.props;\n\n        if (_session) {\n            this.props._conference.stopRecording(_session.id);\n        }\n\n        return true;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props of\n * {@code StopLiveStreamDialog}.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _conference: Object,\n *     _session: Object\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    return {\n        _conference: state['features/base/conference'].conference,\n        _session: getActiveSession(state, JitsiRecordingConstants.mode.STREAM)\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Dialog } from '../../../../base/dialog';\nimport { translate } from '../../../../base/i18n';\nimport { connect } from '../../../../base/redux';\n\nimport AbstractStopLiveStreamDialog, {\n    _mapStateToProps\n} from '../AbstractStopLiveStreamDialog';\n\n/**\n * A React Component for confirming the participant wishes to stop the currently\n * active live stream of the conference.\n *\n * @extends Component\n */\nclass StopLiveStreamDialog extends AbstractStopLiveStreamDialog {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                okKey = 'dialog.stopLiveStreaming'\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.liveStreaming'\n                width = 'small'>\n                { this.props.t('dialog.stopStreamingWarning') }\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean;\n}\n\nexport default translate(connect(_mapStateToProps)(StopLiveStreamDialog));\n","// @flow\n\nimport {\n    createToolbarEvent,\n    sendAnalytics\n} from '../../../analytics';\n\nimport { openDialog } from '../../../base/dialog';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\nimport {\n    getLocalParticipant,\n    isLocalParticipantModerator\n} from '../../../base/participants';\nimport {\n    AbstractButton,\n    type AbstractButtonProps\n} from '../../../base/toolbox';\n\nimport { getActiveSession } from '../../functions';\n\nimport { StartRecordingDialog, StopRecordingDialog } from './_';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractRecordButton}.\n */\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * True if there is a running active recording, false otherwise.\n     */\n    _isRecordingRunning: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * The i18n translate function.\n     */\n    t: Function\n};\n\n/**\n * An abstract implementation of a button for starting and stopping recording.\n */\nexport default class AbstractRecordButton<P: Props>\n    extends AbstractButton<P, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.recording';\n    label = 'dialog.startRecording';\n    toggledLabel = 'dialog.stopRecording';\n\n    /**\n     * Handles clicking / pressing the button.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { _isRecordingRunning, dispatch } = this.props;\n\n        sendAnalytics(createToolbarEvent(\n            'recording.button',\n            {\n                'is_recording': _isRecordingRunning,\n                type: JitsiRecordingConstants.mode.FILE\n            }));\n\n        dispatch(openDialog(\n            _isRecordingRunning ? StopRecordingDialog : StartRecordingDialog\n        ));\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * boolean value indicating if this button is disabled or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return false;\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._isRecordingRunning;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code RecordButton} component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the Component.\n * @private\n * @returns {{\n *     _isRecordingRunning: boolean,\n *     disabledByFeatures: boolean,\n *     visible: boolean\n * }}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props): Object {\n    let { visible } = ownProps;\n\n    // a button can be disabled/enabled only if enableFeaturesBasedOnToken\n    // is on\n    let disabledByFeatures;\n\n    if (typeof visible === 'undefined') {\n        // If the containing component provides the visible prop, that is one\n        // above all, but if not, the button should be autonomus and decide on\n        // its own to be visible or not.\n        const isModerator = isLocalParticipantModerator(state);\n        const {\n            enableFeaturesBasedOnToken,\n            fileRecordingsEnabled\n        } = state['features/base/config'];\n        const { features = {} } = getLocalParticipant(state);\n\n        visible = isModerator\n            && fileRecordingsEnabled;\n\n        if (enableFeaturesBasedOnToken) {\n            visible = visible && String(features.recording) === 'true';\n            disabledByFeatures = String(features.recording) === 'disabled';\n        }\n    }\n\n    return {\n        _isRecordingRunning:\n            Boolean(getActiveSession(state, JitsiRecordingConstants.mode.FILE)),\n        disabledByFeatures,\n        visible\n    };\n}\n","// @flow\n\nimport { translate } from '../../../../base/i18n';\nimport { IconToggleRecording } from '../../../../base/icons';\nimport { connect } from '../../../../base/redux';\n\nimport AbstractRecordButton, {\n    _mapStateToProps as _abstractMapStateToProps,\n    type Props as AbstractProps\n} from '../AbstractRecordButton';\n\ndeclare var interfaceConfig: Object;\n\ntype Props = AbstractProps & {\n\n    /**\n     * True if the button should be disabled, false otherwise.\n     *\n     * NOTE: On web, if the feature is not disabled on purpose, then we still\n     * show the button but disabled and with a tooltip rendered on it,\n     * explaining why it's not available.\n     */\n    _disabled: boolean,\n\n    /**\n     * Tooltip for the button when it's disabled in a certain way.\n     */\n    _fileRecordingsDisabledTooltipKey: ?string\n}\n\n/**\n * An implementation of a button for starting and stopping recording.\n */\nclass RecordButton extends AbstractRecordButton<Props> {\n    icon = IconToggleRecording;\n\n    /**\n     * Returns the tooltip that should be displayed when the button is disabled.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getTooltip() {\n        return this.tooltip || '';\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * boolean value indicating if this button is disabled or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return this.props._disabled;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code RecordButton} component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the Component.\n * @private\n * @returns {{\n *     _fileRecordingsDisabledTooltipKey: ?string,\n *     _isRecordingRunning: boolean,\n *     _disabled: boolean,\n *     visible: boolean\n * }}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props): Object {\n    const abstractProps = _abstractMapStateToProps(state, ownProps);\n    let { visible } = ownProps;\n\n    const _disabledByFeatures = abstractProps.disabledByFeatures;\n    let _disabled = false;\n    let _fileRecordingsDisabledTooltipKey;\n\n    if (!abstractProps.visible\n            && _disabledByFeatures !== undefined && !_disabledByFeatures) {\n        _disabled = true;\n\n        // button and tooltip\n        if (state['features/base/jwt'].isGuest) {\n            _fileRecordingsDisabledTooltipKey\n                = 'dialog.recordingDisabledForGuestTooltip';\n        } else {\n            _fileRecordingsDisabledTooltipKey\n                = 'dialog.recordingDisabledTooltip';\n        }\n    }\n\n    if (typeof visible === 'undefined') {\n        visible = interfaceConfig.TOOLBAR_BUTTONS.includes('recording')\n            && (abstractProps.visible\n                    || Boolean(_fileRecordingsDisabledTooltipKey));\n    }\n\n    return {\n        ...abstractProps,\n        visible,\n        _disabled,\n        _fileRecordingsDisabledTooltipKey\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(RecordButton));\n","// @flow\n\n/**\n * The type of (redux) action to update the dropbox access token.\n *\n * {\n *     type: UPDATE_DROPBOX_TOKEN,\n *     token: string\n * }\n */\nexport const UPDATE_DROPBOX_TOKEN = 'UPDATE_DROPBOX_TOKEN';\n","// @flow\n\nimport { Dropbox } from 'dropbox';\n\nimport {\n    getJitsiMeetGlobalNS,\n    parseStandardURIString,\n    parseURLParams\n} from '../base/util';\n\n/**\n * Executes the oauth flow.\n *\n * @param {string} authUrl - The URL to oauth service.\n * @returns {Promise<string>} - The URL with the authorization details.\n */\nfunction authorize(authUrl: string): Promise<string> {\n    const windowName = `oauth${Date.now()}`;\n    const gloabalNS = getJitsiMeetGlobalNS();\n\n    gloabalNS.oauthCallbacks = gloabalNS.oauthCallbacks || {};\n\n    return new Promise(resolve => {\n        const popup = window.open(authUrl, windowName);\n\n        gloabalNS.oauthCallbacks[windowName] = url => {\n            popup.close();\n            delete gloabalNS.oauthCallbacks.windowName;\n            resolve(url);\n        };\n    });\n}\n\n/**\n * Action to authorize the Jitsi Recording app in dropbox.\n *\n * @param {string} appKey - The Jitsi Recorder dropbox app key.\n * @param {string} redirectURI - The return URL.\n * @returns {Promise<string>}\n */\nexport function _authorizeDropbox(\n        appKey: string,\n        redirectURI: string\n): Promise<string> {\n    const dropboxAPI = new Dropbox({ clientId: appKey });\n    const url = dropboxAPI.getAuthenticationUrl(redirectURI);\n\n    return authorize(url).then(returnUrl => {\n        const params\n            = parseURLParams(parseStandardURIString(returnUrl), true) || {};\n\n        return params.access_token;\n    });\n}\n\n/**\n * Returns the display name for the current dropbox account.\n *\n * @param {string} token - The dropbox access token.\n * @param {string} appKey - The Jitsi Recorder dropbox app key.\n * @returns {Promise<string>}\n */\nexport function getDisplayName(token: string, appKey: string) {\n    const dropboxAPI = new Dropbox({\n        accessToken: token,\n        clientId: appKey\n    });\n\n    return (\n        dropboxAPI.usersGetCurrentAccount()\n            .then(account => account.name.display_name));\n}\n\n/**\n * Returns information about the space usage for the current dropbox account.\n *\n * @param {string} token - The dropbox access token.\n * @param {string} appKey - The Jitsi Recorder dropbox app key.\n * @returns {Promise<Object>}\n */\nexport function getSpaceUsage(token: string, appKey: string) {\n    const dropboxAPI = new Dropbox({\n        accessToken: token,\n        clientId: appKey\n    });\n\n    return dropboxAPI.usersGetSpaceUsage().then(space => {\n        const { allocation, used } = space;\n        const { allocated } = allocation;\n\n        return {\n            allocated,\n            used\n        };\n    });\n}\n\n/**\n * Returns <tt>true</tt> if the dropbox features is enabled and <tt>false</tt>\n * otherwise.\n *\n * @param {Object} state - The redux state.\n * @returns {boolean}\n */\nexport function isEnabled(state: Object) {\n    const { dropbox = {} } = state['features/base/config'];\n\n    return typeof dropbox.appKey === 'string';\n}\n","// @flow\n\nimport { UPDATE_DROPBOX_TOKEN } from './actionTypes';\nimport { _authorizeDropbox } from './functions';\n\n/**\n * Action to authorize the Jitsi Recording app in dropbox.\n *\n * @returns {Function}\n */\nexport function authorizeDropbox() {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { locationURL } = state['features/base/connection'];\n        const { dropbox = {} } = state['features/base/config'];\n\n        // By default we use the static page on the main domain for redirection.\n        // So we need to setup only one redirect URI in dropbox app\n        // configuration (not multiple for all the tenants).\n        // In case deployment is running in subfolder dropbox.redirectURI\n        // can be configured.\n        const redirectURI\n            = dropbox.redirectURI || `${locationURL.origin}/static/oauth.html`;\n\n        _authorizeDropbox(dropbox.appKey, redirectURI)\n            .then(\n                token => dispatch(updateDropboxToken(token)));\n    };\n}\n\n/**\n * Action to update the dropbox access token.\n *\n * @param {string} token - The new token.\n * @returns {{\n *     type: UPDATE_DROPBOX_TOKEN,\n *     token: string\n * }}\n */\nexport function updateDropboxToken(token: string) {\n    return {\n        type: UPDATE_DROPBOX_TOKEN,\n        token\n    };\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/dropbox');\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\nimport { PersistenceRegistry } from '../base/storage';\n\nimport { UPDATE_DROPBOX_TOKEN } from './actionTypes';\n\n/**\n * The redux subtree of this feature.\n */\nconst STORE_NAME = 'features/dropbox';\n\n/**\n * Sets up the persistence of the feature {@code dropbox}.\n */\nPersistenceRegistry.register(STORE_NAME);\n\nReducerRegistry.register(STORE_NAME, (state = {}, action) => {\n    switch (action.type) {\n    case UPDATE_DROPBOX_TOKEN:\n        return {\n            ...state,\n            token: action.token\n        };\n    default:\n        return state;\n    }\n});\n","// @flow\n\nimport { Component } from 'react';\n\nimport {\n    createRecordingDialogEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\nimport {\n    getDropboxData,\n    isEnabled as isDropboxEnabled\n} from '../../../dropbox';\nimport { RECORDING_TYPES } from '../../constants';\nimport { toggleRequestingSubtitles } from '../../../subtitles';\n\ntype Props = {\n\n    /**\n     * Requests subtitles when recording is turned on.\n     */\n    _autoCaptionOnRecord: boolean,\n\n    /**\n     * The {@code JitsiConference} for the current conference.\n     */\n    _conference: Object,\n\n    /**\n     * The app key for the dropbox authentication.\n     */\n    _appKey: string,\n\n    /**\n     * Whether to show file recordings service, even if integrations\n     * are enabled.\n     */\n    _fileRecordingsServiceEnabled: boolean,\n\n    /**\n     * Whether to show the possibility to share file recording with other people (e.g. meeting participants), based on\n     * the actual implementation on the backend.\n     */\n    _fileRecordingsServiceSharingEnabled: boolean,\n\n    /**\n     * If true the dropbox integration is enabled, otherwise - disabled.\n     */\n    _isDropboxEnabled: boolean,\n\n    /**\n     * The dropbox access token.\n     */\n    _token: string,\n\n    /**\n     * The redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\ntype State = {\n\n    /**\n     * <tt>true</tt> if we have valid oauth token.\n     */\n    isTokenValid: boolean,\n\n    /**\n     * <tt>true</tt> if we are in process of validating the oauth token.\n     */\n    isValidating: boolean,\n\n    /**\n     * The currently selected recording service of type: RECORDING_TYPES.\n     */\n    selectedRecordingService: ?string,\n\n    /**\n     * True if the user requested the service to share the recording with others.\n     */\n    sharingEnabled: boolean,\n\n    /**\n     * Number of MiB of available space in user's Dropbox account.\n     */\n    spaceLeft: ?number,\n\n    /**\n     * The display name of the user's Dropbox account.\n     */\n    userName: ?string\n};\n\n/**\n * Component for the recording start dialog.\n */\nclass AbstractStartRecordingDialog extends Component<Props, State> {\n    /**\n     * Initializes a new {@code StartRecordingDialog} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onSubmit = this._onSubmit.bind(this);\n        this._onSelectedRecordingServiceChanged\n            = this._onSelectedRecordingServiceChanged.bind(this);\n        this._onSharingSettingChanged = this._onSharingSettingChanged.bind(this);\n\n        let selectedRecordingService;\n\n        // TODO: Potentially check if we need to handle changes of\n        // _fileRecordingsServiceEnabled and _areIntegrationsEnabled()\n        if (this.props._fileRecordingsServiceEnabled\n                || !this._areIntegrationsEnabled()) {\n            selectedRecordingService = RECORDING_TYPES.JITSI_REC_SERVICE;\n        } else if (this._areIntegrationsEnabled()) {\n            selectedRecordingService = RECORDING_TYPES.DROPBOX;\n        }\n\n        this.state = {\n            isTokenValid: false,\n            isValidating: false,\n            userName: undefined,\n            sharingEnabled: true,\n            spaceLeft: undefined,\n            selectedRecordingService\n        };\n    }\n\n    /**\n     * Validates the oauth access token.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        if (typeof this.props._token !== 'undefined') {\n            this._onTokenUpdated();\n        }\n    }\n\n    /**\n     * Validates the oauth access token.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidUpdate(prevProps: Props) {\n        if (this.props._token !== prevProps._token) {\n            this._onTokenUpdated();\n        }\n    }\n\n    _areIntegrationsEnabled: () => boolean;\n\n    /**\n     * Returns true if the integrations with third party services are enabled\n     * and false otherwise.\n     *\n     * @returns {boolean} - True if the integrations with third party services\n     * are enabled and false otherwise.\n     */\n    _areIntegrationsEnabled() {\n        return this.props._isDropboxEnabled;\n    }\n\n    _onSharingSettingChanged: () => void;\n\n    /**\n     * Callback to handle sharing setting change from the dialog.\n     *\n     * @returns {void}\n     */\n    _onSharingSettingChanged() {\n        this.setState({\n            sharingEnabled: !this.state.sharingEnabled\n        });\n    }\n\n    _onSelectedRecordingServiceChanged: (string) => void;\n\n    /**\n     * Handles selected recording service changes.\n     *\n     * @param {string} selectedRecordingService - The new selected recording\n     * service.\n     * @returns {void}\n     */\n    _onSelectedRecordingServiceChanged(selectedRecordingService) {\n        this.setState({ selectedRecordingService });\n    }\n\n    /**\n     * Validates the dropbox access token and fetches account information.\n     *\n     * @returns {void}\n     */\n    _onTokenUpdated() {\n        const { _appKey, _isDropboxEnabled, _token } = this.props;\n\n        if (!_isDropboxEnabled) {\n            return;\n        }\n\n        if (typeof _token === 'undefined') {\n            this.setState({\n                isTokenValid: false,\n                isValidating: false\n            });\n        } else {\n            this.setState({\n                isTokenValid: false,\n                isValidating: true\n            });\n            getDropboxData(_token, _appKey).then(data => {\n                if (typeof data === 'undefined') {\n                    this.setState({\n                        isTokenValid: false,\n                        isValidating: false\n                    });\n                } else {\n                    this.setState({\n                        isTokenValid: true,\n                        isValidating: false,\n                        ...data\n                    });\n                }\n            });\n        }\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Starts a file recording session.\n     *\n     * @private\n     * @returns {boolean} - True (to note that the modal should be closed).\n     */\n    _onSubmit() {\n        const { _autoCaptionOnRecord, _conference, _isDropboxEnabled, _token, dispatch } = this.props;\n        let appData;\n        const attributes = {};\n\n        if (_isDropboxEnabled\n                && _token\n                && this.state.selectedRecordingService\n                    === RECORDING_TYPES.DROPBOX) {\n            appData = JSON.stringify({\n                'file_recording_metadata': {\n                    'upload_credentials': {\n                        'service_name': RECORDING_TYPES.DROPBOX,\n                        'token': _token\n                    }\n                }\n            });\n            attributes.type = RECORDING_TYPES.DROPBOX;\n        } else {\n            appData = JSON.stringify({\n                'file_recording_metadata': {\n                    'share': this.state.sharingEnabled\n                }\n            });\n            attributes.type = RECORDING_TYPES.JITSI_REC_SERVICE;\n        }\n\n        sendAnalytics(\n            createRecordingDialogEvent('start', 'confirm.button', attributes)\n        );\n\n        _conference.startRecording({\n            mode: JitsiRecordingConstants.mode.FILE,\n            appData\n        });\n\n        if (_autoCaptionOnRecord) {\n            dispatch(toggleRequestingSubtitles());\n        }\n\n        return true;\n    }\n\n    /**\n     * Renders the platform specific dialog content.\n     *\n     * @protected\n     * @returns {React$Component}\n     */\n    _renderDialogContent: () => React$Component<*>\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code StartRecordingDialog} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _appKey: string,\n *     _autoCaptionOnRecord: boolean,\n *     _conference: JitsiConference,\n *     _fileRecordingsServiceEnabled: boolean,\n *     _fileRecordingsServiceSharingEnabled: boolean,\n *     _isDropboxEnabled: boolean,\n *     _token: string\n * }}\n */\nexport function mapStateToProps(state: Object) {\n    const {\n        autoCaptionOnRecord = false,\n        fileRecordingsServiceEnabled = false,\n        fileRecordingsServiceSharingEnabled = false,\n        dropbox = {}\n    } = state['features/base/config'];\n\n    return {\n        _appKey: dropbox.appKey,\n        _autoCaptionOnRecord: autoCaptionOnRecord,\n        _conference: state['features/base/conference'].conference,\n        _fileRecordingsServiceEnabled: fileRecordingsServiceEnabled,\n        _fileRecordingsServiceSharingEnabled: fileRecordingsServiceSharingEnabled,\n        _isDropboxEnabled: isDropboxEnabled(state),\n        _token: state['features/dropbox'].token\n    };\n}\n\nexport default AbstractStartRecordingDialog;\n","// @flow\nexport * from './functions';\n\nimport { getDisplayName, getSpaceUsage } from './functions';\nimport logger from './logger';\n\n/**\n * Information related to the user's dropbox account.\n */\ntype DropboxUserData = {\n\n    /**\n     * The available space left in MB into the user's Dropbox account.\n     */\n    spaceLeft: number,\n\n    /**\n     * The display name of the user in Dropbox.\n     */\n    userName: string\n};\n\n/**\n * Fetches information about the user's dropbox account.\n *\n * @param {string} token - The dropbox access token.\n * @param {string} appKey - The Jitsi Recorder dropbox app key.\n * @returns {Promise<DropboxUserData|undefined>}\n */\nexport function getDropboxData(\n        token: string,\n        appKey: string\n): Promise<?DropboxUserData> {\n    return Promise.all(\n        [ getDisplayName(token, appKey), getSpaceUsage(token, appKey) ]\n    ).then(([ userName, space ]) => {\n        const { allocated, used } = space;\n\n        return {\n            userName,\n            spaceLeft: Math.floor((allocated - used) / 1048576)// 1MiB=1048576B\n        };\n\n    }, error => {\n        logger.error(error);\n\n        return undefined;\n    });\n}\n","// XXX CSS is used on Web, JavaScript styles are use only for mobile. Export an\n// (empty) object so that styles[*] statements on Web don't trigger errors.\nexport default {};\n\nexport const DROPBOX_LOGO = 'images/dropboxLogo_square.png';\n\nexport const ICON_SHARE = 'images/icon-users.png';\n\nexport const JITSI_LOGO = 'images/jitsiLogo_square.png';\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport {\n    createRecordingDialogEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { ColorSchemeRegistry } from '../../../base/color-scheme';\nimport {\n    _abstractMapStateToProps\n} from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport {\n    Button,\n    Container,\n    Image,\n    LoadingIndicator,\n    Switch,\n    Text\n} from '../../../base/react';\nimport { connect } from '../../../base/redux';\nimport { ColorPalette, StyleType } from '../../../base/styles';\nimport { authorizeDropbox, updateDropboxToken } from '../../../dropbox';\n\nimport { RECORDING_TYPES } from '../../constants';\nimport { getRecordingDurationEstimation } from '../../functions';\n\nimport { DROPBOX_LOGO, ICON_SHARE, JITSI_LOGO } from './styles';\n\n\ntype Props = {\n\n    /**\n     * Style of the dialogs feature.\n     */\n    _dialogStyles: StyleType,\n\n    /**\n     * The color-schemed stylesheet of this component.\n     */\n    _styles: StyleType,\n\n    /**\n     * The redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * Whether to show file recordings service, even if integrations\n     * are enabled.\n     */\n    fileRecordingsServiceEnabled: boolean,\n\n    /**\n     * Whether to show the possibility to share file recording with other people (e.g. meeting participants), based on\n     * the actual implementation on the backend.\n     */\n    fileRecordingsServiceSharingEnabled: boolean,\n\n    /**\n     * If true the content related to the integrations will be shown.\n     */\n    integrationsEnabled: boolean,\n\n    /**\n     * <tt>true</tt> if we have valid oauth token.\n     */\n    isTokenValid: boolean,\n\n    /**\n     * <tt>true</tt> if we are in process of validating the oauth token.\n     */\n    isValidating: boolean,\n\n    /**\n     * The function will be called when there are changes related to the\n     * switches.\n     */\n    onChange: Function,\n\n    /**\n     * Callback to be invoked on sharing setting change.\n     */\n    onSharingSettingChanged: Function,\n\n    /**\n     * The currently selected recording service of type: RECORDING_TYPES.\n     */\n    selectedRecordingService: ?string,\n\n    /**\n     * Boolean to set file recording sharing on or off.\n     */\n    sharingSetting: boolean,\n\n    /**\n     * Number of MiB of available space in user's Dropbox account.\n     */\n    spaceLeft: ?number,\n\n    /**\n     * The translate function.\n     */\n    t: Function,\n\n    /**\n     * The display name of the user's Dropbox account.\n     */\n    userName: ?string\n};\n\n/**\n * React Component for getting confirmation to start a file recording session.\n *\n * @extends Component\n */\nclass StartRecordingDialogContent extends Component<Props> {\n    /**\n     * Initializes a new {@code StartRecordingDialogContent} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onSignIn = this._onSignIn.bind(this);\n        this._onSignOut = this._onSignOut.bind(this);\n        this._onDropboxSwitchChange = this._onDropboxSwitchChange.bind(this);\n        this._onRecordingServiceSwitchChange = this._onRecordingServiceSwitchChange.bind(this);\n    }\n\n    /**\n     * Renders the component.\n     *\n     * @protected\n     * @returns {React$Component}\n     */\n    render() {\n        const { _styles: styles } = this.props;\n\n        return (\n            <Container\n                className = 'recording-dialog'\n                style = { styles.container }>\n                { this._renderNoIntegrationsContent() }\n                { this._renderIntegrationsContent() }\n                { this._renderFileSharingContent() }\n            </Container>\n        );\n    }\n\n    /**\n     * Renders the file recording service sharing options, if enabled.\n     *\n     * @returns {React$Component}\n     */\n    _renderFileSharingContent() {\n        if (!this.props.fileRecordingsServiceSharingEnabled) {\n            return null;\n        }\n\n        const {\n            _dialogStyles,\n            _styles: styles,\n            isValidating,\n            onSharingSettingChanged,\n            selectedRecordingService,\n            sharingSetting,\n            t\n        } = this.props;\n\n        const controlDisabled = selectedRecordingService !== RECORDING_TYPES.JITSI_REC_SERVICE;\n        let mainContainerClasses = 'recording-header recording-header-line';\n\n        if (controlDisabled) {\n            mainContainerClasses += ' recording-switch-disabled';\n        }\n\n        return (\n            <Container\n                className = { mainContainerClasses }\n                key = 'fileSharingSetting'\n                style = { [\n                    styles.header,\n                    _dialogStyles.topBorderContainer,\n                    controlDisabled ? styles.controlDisabled : null\n                ] }>\n                <Container className = 'recording-icon-container'>\n                    <Image\n                        className = 'recording-icon'\n                        src = { ICON_SHARE }\n                        style = { styles.recordingIcon } />\n                </Container>\n                <Text\n                    className = 'recording-title'\n                    style = {{\n                        ..._dialogStyles.text,\n                        ...styles.title\n                    }}>\n                    { t('recording.fileSharingdescription') }\n                </Text>\n                <Switch\n                    className = 'recording-switch'\n                    disabled = { controlDisabled || isValidating }\n                    onValueChange\n                        = { onSharingSettingChanged }\n                    style = { styles.switch }\n                    trackColor = {{ false: ColorPalette.lightGrey }}\n                    value = { !controlDisabled && sharingSetting } />\n            </Container>\n        );\n    }\n\n    /**\n     * Renders the content in case no integrations were enabled.\n     *\n     * @returns {React$Component}\n     */\n    _renderNoIntegrationsContent() {\n\n        // show the non integrations part only if fileRecordingsServiceEnabled\n        // is enabled or when there are no integrations enabled\n        if (!(this.props.fileRecordingsServiceEnabled\n            || !this.props.integrationsEnabled)) {\n            return null;\n        }\n\n        const { _dialogStyles, _styles: styles, isValidating, t } = this.props;\n\n        const switchContent\n            = this.props.integrationsEnabled\n                ? (\n                    <Switch\n                        className = 'recording-switch'\n                        disabled = { isValidating }\n                        onValueChange = { this._onRecordingServiceSwitchChange }\n                        style = { styles.switch }\n                        trackColor = {{ false: ColorPalette.lightGrey }}\n                        value = { this.props.selectedRecordingService === RECORDING_TYPES.JITSI_REC_SERVICE } />\n                ) : null;\n\n        return (\n            <Container\n                className = 'recording-header'\n                key = 'noIntegrationSetting'\n                style = { styles.header }>\n                <Container className = 'recording-icon-container'>\n                    <Image\n                        className = 'recording-icon'\n                        src = { JITSI_LOGO }\n                        style = { styles.recordingIcon } />\n                </Container>\n                <Text\n                    className = 'recording-title'\n                    style = {{\n                        ..._dialogStyles.text,\n                        ...styles.title\n                    }}>\n                    { t('recording.serviceDescription') }\n                </Text>\n                { switchContent }\n            </Container>\n        );\n    }\n\n    /**\n     * Renders the content in case integrations were enabled.\n     *\n     * @protected\n     * @returns {React$Component}\n     */\n    _renderIntegrationsContent() {\n        if (!this.props.integrationsEnabled) {\n            return null;\n        }\n\n        const { _dialogStyles, _styles: styles, isTokenValid, isValidating, t } = this.props;\n\n        let content = null;\n        let switchContent = null;\n\n        if (isValidating) {\n            content = this._renderSpinner();\n            switchContent = <Container className = 'recording-switch' />;\n        } else if (isTokenValid) {\n            content = this._renderSignOut();\n            switchContent = (\n                <Container className = 'recording-switch'>\n                    <Button\n                        onValueChange = { this._onSignOut }\n                        style = { styles.signButton }>\n                        { t('recording.signOut') }\n                    </Button>\n                </Container>\n            );\n\n        } else {\n            switchContent = (\n                <Container className = 'recording-switch'>\n                    <Button\n                        onValueChange = { this._onSignIn }\n                        style = { styles.signButton }>\n                        { t('recording.signIn') }\n                    </Button>\n                </Container>\n            );\n        }\n\n        if (this.props.fileRecordingsServiceEnabled) {\n            switchContent = (\n                <Switch\n                    className = 'recording-switch'\n                    disabled = { isValidating }\n                    onValueChange = { this._onDropboxSwitchChange }\n                    style = { styles.switch }\n                    trackColor = {{ false: ColorPalette.lightGrey }}\n                    value = { this.props.selectedRecordingService\n                        === RECORDING_TYPES.DROPBOX } />\n            );\n        }\n\n        return (\n            <Container>\n                <Container\n                    className = 'recording-header'\n                    style = { styles.header }>\n                    <Container\n                        className = 'recording-icon-container'>\n                        <Image\n                            className = 'recording-icon'\n                            src = { DROPBOX_LOGO }\n                            style = { styles.recordingIcon } />\n                    </Container>\n                    <Text\n                        className = 'recording-title'\n                        style = {{\n                            ..._dialogStyles.text,\n                            ...styles.title\n                        }}>\n                        { t('recording.authDropboxText') }\n                    </Text>\n                    { switchContent }\n                </Container>\n                <Container\n                    className = 'authorization-panel'>\n                    { content }\n                </Container>\n            </Container>\n        );\n    }\n\n    _onDropboxSwitchChange: () => void;\n    _onRecordingServiceSwitchChange: () => void;\n\n    /**\n     * Handler for onValueChange events from the Switch component.\n     *\n     * @returns {void}\n     */\n    _onRecordingServiceSwitchChange() {\n        const {\n            isTokenValid,\n            onChange,\n            selectedRecordingService\n        } = this.props;\n\n        // act like group, cannot toggle off\n        if (selectedRecordingService\n                === RECORDING_TYPES.JITSI_REC_SERVICE) {\n            return;\n        }\n\n        onChange(RECORDING_TYPES.JITSI_REC_SERVICE);\n\n        if (isTokenValid) {\n            this._onSignOut();\n        }\n    }\n\n    /**\n     * Handler for onValueChange events from the Switch component.\n     *\n     * @returns {void}\n     */\n    _onDropboxSwitchChange() {\n        const {\n            isTokenValid,\n            onChange,\n            selectedRecordingService\n        } = this.props;\n\n        // act like group, cannot toggle off\n        if (selectedRecordingService\n                === RECORDING_TYPES.DROPBOX) {\n            return;\n        }\n\n        onChange(RECORDING_TYPES.DROPBOX);\n\n        if (!isTokenValid) {\n            this._onSignIn();\n        }\n    }\n\n    /**\n     * Renders a spinner component.\n     *\n     * @returns {React$Component}\n     */\n    _renderSpinner() {\n        return (\n            <LoadingIndicator\n                isCompleting = { false }\n                size = 'small' />\n        );\n    }\n\n    /**\n     * Renders the screen with the account information of a logged in user.\n     *\n     * @returns {React$Component}\n     */\n    _renderSignOut() {\n        const { _styles: styles, spaceLeft, t, userName } = this.props;\n        const duration = getRecordingDurationEstimation(spaceLeft);\n\n        return (\n            <Container>\n                <Container\n                    className = 'logged-in-panel'\n                    style = { styles.loggedIn }>\n                    <Container>\n                        <Text style = { styles.text }>\n                            { t('recording.loggedIn', { userName }) }\n                        </Text>\n                    </Container>\n                    <Container>\n                        <Text style = { styles.text }>\n                            {\n                                t('recording.availableSpace', {\n                                    spaceLeft,\n                                    duration\n                                })\n                            }\n                        </Text>\n                    </Container>\n                </Container>\n            </Container>\n        );\n    }\n\n    _onSignIn: () => void;\n\n    /**\n     * Sings in a user.\n     *\n     * @returns {void}\n     */\n    _onSignIn() {\n        sendAnalytics(createRecordingDialogEvent('start', 'signIn.button'));\n        this.props.dispatch(authorizeDropbox());\n    }\n\n    _onSignOut: () => void;\n\n    /**\n     * Sings out an user from dropbox.\n     *\n     * @returns {void}\n     */\n    _onSignOut() {\n        sendAnalytics(createRecordingDialogEvent('start', 'signOut.button'));\n        this.props.dispatch(updateDropboxToken());\n    }\n}\n\n/**\n * Maps part of the redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    return {\n        ..._abstractMapStateToProps(state),\n        _styles: ColorSchemeRegistry.get(state, 'StartRecordingDialogContent')\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(StartRecordingDialogContent));\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { Dialog } from '../../../../base/dialog';\nimport { connect } from '../../../../base/redux';\n\nimport AbstractStartRecordingDialog, {\n    mapStateToProps\n} from '../AbstractStartRecordingDialog';\nimport StartRecordingDialogContent from '../StartRecordingDialogContent';\n\n/**\n * React Component for getting confirmation to start a file recording session in\n * progress.\n *\n * @extends Component\n */\nclass StartRecordingDialog extends AbstractStartRecordingDialog {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const {\n            isTokenValid,\n            isValidating,\n            selectedRecordingService,\n            sharingEnabled,\n            spaceLeft,\n            userName\n        } = this.state;\n        const { _fileRecordingsServiceEnabled, _fileRecordingsServiceSharingEnabled, _isDropboxEnabled } = this.props;\n\n        // disable ok button id recording service is shown only, when\n        // validating dropbox token, if that is not enabled we either always\n        // show the ok button or if just dropbox is enabled ok is available\n        // when there is token\n        const isOkDisabled\n            = _fileRecordingsServiceEnabled ? isValidating\n                : _isDropboxEnabled ? !isTokenValid : false;\n\n        return (\n            <Dialog\n                okDisabled = { isOkDisabled }\n                okKey = 'dialog.startRecording'\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.startRecording'\n                width = 'small'>\n                <StartRecordingDialogContent\n                    fileRecordingsServiceEnabled = { _fileRecordingsServiceEnabled }\n                    fileRecordingsServiceSharingEnabled = { _fileRecordingsServiceSharingEnabled }\n                    integrationsEnabled = { this._areIntegrationsEnabled() }\n                    isTokenValid = { isTokenValid }\n                    isValidating = { isValidating }\n                    onChange = { this._onSelectedRecordingServiceChanged }\n                    onSharingSettingChanged = { this._onSharingSettingChanged }\n                    selectedRecordingService = { selectedRecordingService }\n                    sharingSetting = { sharingEnabled }\n                    spaceLeft = { spaceLeft }\n                    userName = { userName } />\n            </Dialog>\n        );\n    }\n\n    _areIntegrationsEnabled: () => boolean;\n    _onSubmit: () => boolean;\n    _onSelectedRecordingServiceChanged: (string) => void;\n    _onSharingSettingChanged: () => void;\n}\n\nexport default translate(connect(mapStateToProps)(StartRecordingDialog));\n","// @flow\n\nimport { Component } from 'react';\n\nimport {\n    createRecordingDialogEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\n\nimport { getActiveSession } from '../../functions';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractStopRecordingDialog}.\n */\nexport type Props = {\n\n    /**\n     * The {@code JitsiConference} for the current conference.\n     */\n    _conference: Object,\n\n    /**\n     * The redux representation of the recording session to be stopped.\n     */\n    _fileRecordingSession: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Abstract React Component for getting confirmation to stop a file recording\n * session in progress.\n *\n * @extends Component\n */\nexport default class AbstractStopRecordingDialog<P: Props>\n    extends Component<P> {\n    /**\n     * Initializes a new {@code AbstrStopRecordingDialog} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Stops the recording session.\n     *\n     * @private\n     * @returns {boolean} - True (to note that the modal should be closed).\n     */\n    _onSubmit() {\n        sendAnalytics(createRecordingDialogEvent('stop', 'confirm.button'));\n\n        const { _fileRecordingSession } = this.props;\n\n        if (_fileRecordingSession) {\n            this.props._conference.stopRecording(_fileRecordingSession.id);\n        }\n\n        return true;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code StopRecordingDialog} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _conference: JitsiConference,\n *     _fileRecordingSession: Object\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    return {\n        _conference: state['features/base/conference'].conference,\n        _fileRecordingSession:\n            getActiveSession(state, JitsiRecordingConstants.mode.FILE)\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { Dialog } from '../../../../base/dialog';\nimport { connect } from '../../../../base/redux';\n\nimport AbstractStopRecordingDialog, {\n    type Props,\n    _mapStateToProps\n} from '../AbstractStopRecordingDialog';\n\n/**\n * React Component for getting confirmation to stop a file recording session in\n * progress.\n *\n * @extends Component\n */\nclass StopRecordingDialog extends AbstractStopRecordingDialog<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <Dialog\n                okKey = 'dialog.confirm'\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.recording'\n                width = 'small'>\n                { t('dialog.stopRecordingWarning') }\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean\n}\n\nexport default translate(connect(_mapStateToProps)(StopRecordingDialog));\n","/* @flow */\n\n\nimport {\n    createRecordingEvent,\n    sendAnalytics\n} from '../analytics';\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport { CONFERENCE_WILL_JOIN, getCurrentConference } from '../base/conference';\nimport JitsiMeetJS, {\n    JitsiConferenceEvents,\n    JitsiRecordingConstants\n} from '../base/lib-jitsi-meet';\nimport { getParticipantDisplayName } from '../base/participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\nimport {\n    playSound,\n    registerSound,\n    stopSound,\n    unregisterSound\n} from '../base/sounds';\n\nimport {\n    clearRecordingSessions,\n    hidePendingRecordingNotification,\n    showPendingRecordingNotification,\n    showRecordingError,\n    showStartedRecordingNotification,\n    showStoppedRecordingNotification,\n    updateRecordingSessionData\n} from './actions';\nimport { RECORDING_SESSION_UPDATED } from './actionTypes';\nimport {\n    LIVE_STREAMING_OFF_SOUND_ID,\n    LIVE_STREAMING_ON_SOUND_ID,\n    RECORDING_OFF_SOUND_ID,\n    RECORDING_ON_SOUND_ID\n} from './constants';\nimport { getSessionById } from './functions';\nimport {\n    LIVE_STREAMING_OFF_SOUND_FILE,\n    LIVE_STREAMING_ON_SOUND_FILE,\n    RECORDING_OFF_SOUND_FILE,\n    RECORDING_ON_SOUND_FILE\n} from './sounds';\n\n/**\n * StateListenerRegistry provides a reliable way to detect the leaving of a\n * conference, where we need to clean up the recording sessions.\n */\nStateListenerRegistry.register(\n    /* selector */ state => getCurrentConference(state),\n    /* listener */ (conference, { dispatch }) => {\n        if (!conference) {\n            dispatch(clearRecordingSessions());\n        }\n    }\n);\n\n/**\n * The redux middleware to handle the recorder updates in a React way.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    let oldSessionData;\n\n    if (action.type === RECORDING_SESSION_UPDATED) {\n        oldSessionData\n            = getSessionById(getState(), action.sessionData.id);\n    }\n\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        dispatch(registerSound(\n            LIVE_STREAMING_OFF_SOUND_ID,\n            LIVE_STREAMING_OFF_SOUND_FILE));\n\n        dispatch(registerSound(\n            LIVE_STREAMING_ON_SOUND_ID,\n            LIVE_STREAMING_ON_SOUND_FILE));\n\n        dispatch(registerSound(\n            RECORDING_OFF_SOUND_ID,\n            RECORDING_OFF_SOUND_FILE));\n\n        dispatch(registerSound(\n            RECORDING_ON_SOUND_ID,\n            RECORDING_ON_SOUND_FILE));\n\n        break;\n\n    case APP_WILL_UNMOUNT:\n        dispatch(unregisterSound(LIVE_STREAMING_OFF_SOUND_ID));\n        dispatch(unregisterSound(LIVE_STREAMING_ON_SOUND_ID));\n        dispatch(unregisterSound(RECORDING_OFF_SOUND_ID));\n        dispatch(unregisterSound(RECORDING_ON_SOUND_ID));\n\n        break;\n\n    case CONFERENCE_WILL_JOIN: {\n        const { conference } = action;\n\n        conference.on(\n            JitsiConferenceEvents.RECORDER_STATE_CHANGED,\n            recorderSession => {\n\n                if (recorderSession) {\n                    recorderSession.getID()\n                        && dispatch(\n                            updateRecordingSessionData(recorderSession));\n\n                    recorderSession.getError()\n                        && _showRecordingErrorNotification(\n                            recorderSession, dispatch);\n                }\n\n                return;\n            });\n\n        break;\n    }\n\n    case RECORDING_SESSION_UPDATED: {\n        // When in recorder mode no notifications are shown\n        // or extra sounds are also not desired\n        // but we want to indicate those in case of sip gateway\n        const {\n            iAmRecorder,\n            iAmSipGateway,\n            disableRecordAudioNotification\n        } = getState()['features/base/config'];\n\n        if (iAmRecorder && !iAmSipGateway) {\n            break;\n        }\n\n        const updatedSessionData\n            = getSessionById(getState(), action.sessionData.id);\n        const { initiator, mode, terminator } = updatedSessionData;\n        const { PENDING, OFF, ON } = JitsiRecordingConstants.status;\n\n        if (updatedSessionData.status === PENDING\n            && (!oldSessionData || oldSessionData.status !== PENDING)) {\n            dispatch(showPendingRecordingNotification(mode));\n        } else if (updatedSessionData.status !== PENDING) {\n            dispatch(hidePendingRecordingNotification(mode));\n\n            if (updatedSessionData.status === ON\n                && (!oldSessionData || oldSessionData.status !== ON)) {\n                const initiatorName = initiator && getParticipantDisplayName(getState, initiator.getId());\n\n                initiatorName && dispatch(showStartedRecordingNotification(mode, initiatorName));\n                sendAnalytics(createRecordingEvent('start', mode));\n\n                if (disableRecordAudioNotification) {\n                    break;\n                }\n\n                let soundID;\n\n                if (mode === JitsiRecordingConstants.mode.FILE) {\n                    soundID = RECORDING_ON_SOUND_ID;\n                } else if (mode === JitsiRecordingConstants.mode.STREAM) {\n                    soundID = LIVE_STREAMING_ON_SOUND_ID;\n                }\n\n                if (soundID) {\n                    dispatch(playSound(soundID));\n                }\n            } else if (updatedSessionData.status === OFF\n                && (!oldSessionData || oldSessionData.status !== OFF)) {\n                dispatch(showStoppedRecordingNotification(\n                    mode, terminator && getParticipantDisplayName(getState, terminator.getId())));\n                let duration = 0, soundOff, soundOn;\n\n                if (oldSessionData && oldSessionData.timestamp) {\n                    duration\n                        = (Date.now() / 1000) - oldSessionData.timestamp;\n                }\n                sendAnalytics(createRecordingEvent('stop', mode, duration));\n\n                if (disableRecordAudioNotification) {\n                    break;\n                }\n\n                if (mode === JitsiRecordingConstants.mode.FILE) {\n                    soundOff = RECORDING_OFF_SOUND_ID;\n                    soundOn = RECORDING_ON_SOUND_ID;\n                } else if (mode === JitsiRecordingConstants.mode.STREAM) {\n                    soundOff = LIVE_STREAMING_OFF_SOUND_ID;\n                    soundOn = LIVE_STREAMING_ON_SOUND_ID;\n                }\n\n                if (soundOff && soundOn) {\n                    dispatch(stopSound(soundOn));\n                    dispatch(playSound(soundOff));\n                }\n            }\n        }\n\n        break;\n    }\n    }\n\n    return result;\n});\n\n/**\n * Shows a notification about an error in the recording session. A\n * default notification will display if no error is specified in the passed\n * in recording session.\n *\n * @private\n * @param {Object} recorderSession - The recorder session model from the\n * lib.\n * @param {Dispatch} dispatch - The Redux Dispatch function.\n * @returns {void}\n */\nfunction _showRecordingErrorNotification(recorderSession, dispatch) {\n    const isStreamMode\n        = recorderSession.getMode()\n            === JitsiMeetJS.constants.recording.mode.STREAM;\n\n    switch (recorderSession.getError()) {\n    case JitsiMeetJS.constants.recording.error.SERVICE_UNAVAILABLE:\n        dispatch(showRecordingError({\n            descriptionKey: 'recording.unavailable',\n            descriptionArguments: {\n                serviceName: isStreamMode\n                    ? '$t(liveStreaming.serviceName)'\n                    : '$t(recording.serviceName)'\n            },\n            titleKey: isStreamMode\n                ? 'liveStreaming.unavailableTitle'\n                : 'recording.unavailableTitle'\n        }));\n        break;\n    case JitsiMeetJS.constants.recording.error.RESOURCE_CONSTRAINT:\n        dispatch(showRecordingError({\n            descriptionKey: isStreamMode\n                ? 'liveStreaming.busy'\n                : 'recording.busy',\n            titleKey: isStreamMode\n                ? 'liveStreaming.busyTitle'\n                : 'recording.busyTitle'\n        }));\n        break;\n    default:\n        dispatch(showRecordingError({\n            descriptionKey: isStreamMode\n                ? 'liveStreaming.error'\n                : 'recording.error',\n            titleKey: isStreamMode\n                ? 'liveStreaming.failedToStart'\n                : 'recording.failedToStart'\n        }));\n        break;\n    }\n}\n","/**\n * The name of the bundled audio file which will be played for when live streaming is stopped.\n *\n * @type {string}\n */\nexport const LIVE_STREAMING_OFF_SOUND_FILE = 'liveStreamingOff.mp3';\n\n/**\n * The name of the bundled audio file which will be played for when a live streaming is started.\n *\n * @type {string}\n */\nexport const LIVE_STREAMING_ON_SOUND_FILE = 'liveStreamingOn.mp3';\n\n/**\n * The name of the bundled audio file which will be played for when a recording is stopped.\n *\n * @type {string}\n */\nexport const RECORDING_OFF_SOUND_FILE = 'recordingOff.mp3';\n\n/**\n * The name of the bundled audio file which will be played for when a recording is started.\n *\n * @type {string}\n */\nexport const RECORDING_ON_SOUND_FILE = 'recordingOn.mp3';\n","import { ReducerRegistry } from '../base/redux';\nimport {\n    CLEAR_RECORDING_SESSIONS,\n    RECORDING_SESSION_UPDATED,\n    SET_PENDING_RECORDING_NOTIFICATION_UID,\n    SET_STREAM_KEY\n} from './actionTypes';\n\nconst DEFAULT_STATE = {\n    pendingNotificationUids: {},\n    sessionDatas: []\n};\n\n/**\n * The name of the Redux store this feature stores its state in.\n */\nconst STORE_NAME = 'features/recording';\n\n/**\n * Reduces the Redux actions of the feature features/recording.\n */\nReducerRegistry.register(STORE_NAME,\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n\n        case CLEAR_RECORDING_SESSIONS:\n            return {\n                ...state,\n                sessionDatas: []\n            };\n\n        case RECORDING_SESSION_UPDATED:\n            return {\n                ...state,\n                sessionDatas:\n                    _updateSessionDatas(state.sessionDatas, action.sessionData)\n            };\n\n        case SET_PENDING_RECORDING_NOTIFICATION_UID: {\n            const pendingNotificationUids = {\n                ...state.pendingNotificationUids\n            };\n\n            pendingNotificationUids[action.streamType] = action.uid;\n\n            return {\n                ...state,\n                pendingNotificationUids\n            };\n        }\n\n        case SET_STREAM_KEY:\n            return {\n                ...state,\n                streamKey: action.streamKey\n            };\n\n        default:\n            return state;\n        }\n    });\n\n/**\n * Updates the known information on recording sessions.\n *\n * @param {Array} sessionDatas - The current sessions in the redux store.\n * @param {Object} newSessionData - The updated session data.\n * @private\n * @returns {Array} The session datas with the updated session data added.\n */\nfunction _updateSessionDatas(sessionDatas, newSessionData) {\n    const hasExistingSessionData = sessionDatas.find(\n        sessionData => sessionData.id === newSessionData.id);\n    let newSessionDatas;\n\n    if (hasExistingSessionData) {\n        newSessionDatas = sessionDatas.map(sessionData => {\n            if (sessionData.id === newSessionData.id) {\n                return {\n                    ...newSessionData\n                };\n            }\n\n            // Nothing to update for this session data so pass it back in.\n            return sessionData;\n        });\n    } else {\n        // If the session data is not present, then there is nothing to update\n        // and instead it needs to be added to the known session datas.\n        newSessionDatas = [\n            ...sessionDatas,\n            { ...newSessionData }\n        ];\n    }\n\n    return newSessionDatas;\n}\n","export * from './actions';\nexport * from './components';\nexport * from './constants';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","/* global APP, config, JitsiMeetJS, Promise */\n\nimport { openConnection } from '../../../connection';\nimport { setJWT } from '../../../react/features/base/jwt';\nimport {\n    JitsiConnectionErrors\n} from '../../../react/features/base/lib-jitsi-meet';\nimport UIUtil from '../util/UIUtil';\n\nimport LoginDialog from './LoginDialog';\n\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\nlet externalAuthWindow;\nlet authRequiredDialog;\n\nconst isTokenAuthEnabled\n    = typeof config.tokenAuthUrl === 'string' && config.tokenAuthUrl.length;\nconst getTokenAuthUrl\n    = JitsiMeetJS.util.AuthUtil.getTokenAuthUrl.bind(null, config.tokenAuthUrl);\n\n/**\n * Authenticate using external service or just focus\n * external auth window if there is one already.\n *\n * @param {JitsiConference} room\n * @param {string} [lockPassword] password to use if the conference is locked\n */\nfunction doExternalAuth(room, lockPassword) {\n    if (externalAuthWindow) {\n        externalAuthWindow.focus();\n\n        return;\n    }\n    if (room.isJoined()) {\n        let getUrl;\n\n        if (isTokenAuthEnabled) {\n            getUrl = Promise.resolve(getTokenAuthUrl(room.getName(), true));\n            initJWTTokenListener(room);\n        } else {\n            getUrl = room.getExternalAuthUrl(true);\n        }\n        getUrl.then(url => {\n            externalAuthWindow = LoginDialog.showExternalAuthDialog(\n                url,\n                () => {\n                    externalAuthWindow = null;\n                    if (!isTokenAuthEnabled) {\n                        room.join(lockPassword);\n                    }\n                }\n            );\n        });\n    } else if (isTokenAuthEnabled) {\n        redirectToTokenAuthService(room.getName());\n    } else {\n        room.getExternalAuthUrl().then(UIUtil.redirect);\n    }\n}\n\n/**\n * Redirect the user to the token authentication service for the login to be\n * performed. Once complete it is expected that the service wil bring the user\n * back with \"?jwt={the JWT token}\" query parameter added.\n * @param {string} [roomName] the name of the conference room.\n */\nfunction redirectToTokenAuthService(roomName) {\n    // FIXME: This method will not preserve the other URL params that were\n    // originally passed.\n    UIUtil.redirect(getTokenAuthUrl(roomName, false));\n}\n\n/**\n * Initializes 'message' listener that will wait for a JWT token to be received\n * from the token authentication service opened in a popup window.\n * @param room the name fo the conference room.\n */\nfunction initJWTTokenListener(room) {\n    /**\n     *\n     */\n    function listener({ data, source }) {\n        if (externalAuthWindow !== source) {\n            logger.warn('Ignored message not coming '\n                + 'from external authnetication window');\n\n            return;\n        }\n\n        let jwt;\n\n        if (data && (jwt = data.jwtToken)) {\n            logger.info('Received JSON Web Token (JWT):', jwt);\n\n            APP.store.dispatch(setJWT(jwt));\n\n            const roomName = room.getName();\n\n            openConnection({\n                retry: false,\n                roomName\n            }).then(connection => {\n                // Start new connection\n                const newRoom = connection.initJitsiConference(\n                    roomName, APP.conference._getConferenceOptions());\n\n                // Authenticate from the new connection to get\n                // the session-ID from the focus, which wil then be used\n                // to upgrade current connection's user role\n\n                newRoom.room.moderator.authenticate()\n                .then(() => {\n                    connection.disconnect();\n\n                    // At this point we'll have session-ID stored in\n                    // the settings. It wil be used in the call below\n                    // to upgrade user's role\n                    room.room.moderator.authenticate()\n                        .then(() => {\n                            logger.info('User role upgrade done !');\n                            // eslint-disable-line no-use-before-define\n                            unregister();\n                        })\n                        .catch((err, errCode) => {\n                            logger.error('Authentication failed: ',\n                                err, errCode);\n                            unregister();\n                        });\n                })\n                .catch((error, code) => {\n                    unregister();\n                    connection.disconnect();\n                    logger.error(\n                        'Authentication failed on the new connection',\n                        error, code);\n                });\n            }, err => {\n                unregister();\n                logger.error('Failed to open new connection', err);\n            });\n        }\n    }\n\n    /**\n     *\n     */\n    function unregister() {\n        window.removeEventListener('message', listener);\n    }\n\n    if (window.addEventListener) {\n        window.addEventListener('message', listener, false);\n    }\n}\n\n/**\n * Authenticate on the server.\n * @param {JitsiConference} room\n * @param {string} [lockPassword] password to use if the conference is locked\n */\nfunction doXmppAuth(room, lockPassword) {\n    const loginDialog = LoginDialog.showAuthDialog(\n        /* successCallback */ (id, password) => {\n            room.authenticateAndUpgradeRole({\n                id,\n                password,\n                roomPassword: lockPassword,\n\n                /** Called when the XMPP login succeeds. */\n                onLoginSuccessful() {\n                    loginDialog.displayConnectionStatus(\n                        'connection.FETCH_SESSION_ID');\n                }\n            })\n            .then(\n                /* onFulfilled */ () => {\n                    loginDialog.displayConnectionStatus(\n                        'connection.GOT_SESSION_ID');\n                    loginDialog.close();\n                },\n                /* onRejected */ error => {\n                    logger.error('authenticateAndUpgradeRole failed', error);\n\n                    const { authenticationError, connectionError } = error;\n\n                    if (authenticationError) {\n                        loginDialog.displayError(\n                            'connection.GET_SESSION_ID_ERROR',\n                            { msg: authenticationError });\n                    } else if (connectionError) {\n                        loginDialog.displayError(connectionError);\n                    }\n                });\n        },\n        /* cancelCallback */ () => loginDialog.close());\n}\n\n/**\n * Authenticate for the conference.\n * Uses external service for auth if conference supports that.\n * @param {JitsiConference} room\n * @param {string} [lockPassword] password to use if the conference is locked\n */\nfunction authenticate(room, lockPassword) {\n    if (isTokenAuthEnabled || room.isExternalAuthEnabled()) {\n        doExternalAuth(room, lockPassword);\n    } else {\n        doXmppAuth(room, lockPassword);\n    }\n}\n\n/**\n * De-authenticate local user.\n *\n * @param {JitsiConference} room\n * @param {string} [lockPassword] password to use if the conference is locked\n * @returns {Promise}\n */\nfunction logout(room) {\n    return new Promise(resolve => {\n        room.room.moderator.logout(resolve);\n    }).then(url => {\n        // de-authenticate conference on the fly\n        if (room.isJoined()) {\n            room.join();\n        }\n\n        return url;\n    });\n}\n\n/**\n * Notify user that authentication is required to create the conference.\n * @param {JitsiConference} room\n * @param {string} [lockPassword] password to use if the conference is locked\n */\nfunction requireAuth(room, lockPassword) {\n    if (authRequiredDialog) {\n        return;\n    }\n\n    authRequiredDialog = LoginDialog.showAuthRequiredDialog(\n        room.getName(), authenticate.bind(null, room, lockPassword)\n    );\n}\n\n/**\n * Close auth-related dialogs if there are any.\n */\nfunction closeAuth() {\n    if (externalAuthWindow) {\n        externalAuthWindow.close();\n        externalAuthWindow = null;\n    }\n\n    if (authRequiredDialog) {\n        authRequiredDialog.close();\n        authRequiredDialog = null;\n    }\n}\n\n/**\n *\n */\nfunction showXmppPasswordPrompt(roomName, connect) {\n    return new Promise((resolve, reject) => {\n        const authDialog = LoginDialog.showAuthDialog(\n            (id, password) => {\n                connect(id, password, roomName).then(connection => {\n                    authDialog.close();\n                    resolve(connection);\n                }, err => {\n                    if (err === JitsiConnectionErrors.PASSWORD_REQUIRED) {\n                        authDialog.displayError(err);\n                    } else {\n                        authDialog.close();\n                        reject(err);\n                    }\n                });\n            }\n        );\n    });\n}\n\n/**\n * Show Authentication Dialog and try to connect with new credentials.\n * If failed to connect because of PASSWORD_REQUIRED error\n * then ask for password again.\n * @param {string} [roomName] name of the conference room\n * @param {function(id, password, roomName)} [connect] function that returns\n * a Promise which resolves with JitsiConnection or fails with one of\n * JitsiConnectionErrors.\n * @returns {Promise<JitsiConnection>}\n */\nfunction requestAuth(roomName, connect) {\n    if (isTokenAuthEnabled) {\n        // This Promise never resolves as user gets redirected to another URL\n        return new Promise(() => redirectToTokenAuthService(roomName));\n    }\n\n    return showXmppPasswordPrompt(roomName, connect);\n\n}\n\nexport default {\n    authenticate,\n    requireAuth,\n    requestAuth,\n    closeAuth,\n    logout\n};\n","export * from './components';\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\n\n/**\n * The type of the React {@code Component} props of\n * {@link ConnectionStatsTable}.\n */\ntype Props = {\n\n    /**\n     * Statistics related to bandwidth.\n     * {{\n     *     download: Number,\n     *     upload: Number\n     * }}\n     */\n    bandwidth: Object,\n\n    /**\n     * Statistics related to bitrate.\n     * {{\n     *     download: Number,\n     *     upload: Number\n     * }}\n     */\n    bitrate: Object,\n\n    /**\n     * The number of bridges (aka media servers) currently used in the\n     * conference.\n     */\n    bridgeCount: number,\n\n    /**\n     * A message describing the connection quality.\n     */\n    connectionSummary: string,\n\n    /**\n     * The end-to-end round-trip-time.\n     */\n    e2eRtt: number,\n\n    /**\n     * Statistics related to frame rates for each ssrc.\n     * {{\n     *     [ ssrc ]: Number\n     * }}\n     */\n    framerate: Object,\n\n    /**\n     * Whether or not the statistics are for local video.\n     */\n    isLocalVideo: boolean,\n\n    /**\n     * Callback to invoke when the show additional stats link is clicked.\n     */\n    onShowMore: Function,\n\n    /**\n     * Statistics related to packet loss.\n     * {{\n     *     download: Number,\n     *     upload: Number\n     * }}\n     */\n    packetLoss: Object,\n\n    /**\n     * The region that we think the client is in.\n     */\n    region: string,\n\n    /**\n     * Statistics related to display resolutions for each ssrc.\n     * {{\n     *     [ ssrc ]: {\n     *         height: Number,\n     *         width: Number\n     *     }\n     * }}\n     */\n    resolution: Object,\n\n    /**\n     * The region of the media server that we are connected to.\n     */\n    serverRegion: string,\n\n    /**\n     * Whether or not additional stats about bandwidth and transport should be\n     * displayed. Will not display even if true for remote participants.\n     */\n    shouldShowMore: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * Statistics related to transports.\n     */\n    transport: Array<Object>\n};\n\n/**\n * React {@code Component} for displaying connection statistics.\n *\n * @extends Component\n */\nclass ConnectionStatsTable extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { isLocalVideo } = this.props;\n\n        return (\n            <div className = 'connection-info'>\n                { this._renderStatistics() }\n                { isLocalVideo ? this._renderShowMoreLink() : null }\n                { isLocalVideo && this.props.shouldShowMore\n                    ? this._renderAdditionalStats() : null }\n            </div>\n        );\n    }\n\n    /**\n     * Creates a table as ReactElement that will display additional statistics\n     * related to bandwidth and transport for the local user.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderAdditionalStats() {\n        return (\n            <table className = 'connection-info__container'>\n                <tbody>\n                    { this._renderBandwidth() }\n                    { this._renderTransport() }\n                    { this._renderRegion() }\n                </tbody>\n            </table>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying bandwidth related\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderBandwidth() {\n        const { download, upload } = this.props.bandwidth || {};\n\n        return (\n            <tr>\n                <td>\n                    { this.props.t('connectionindicator.bandwidth') }\n                </td>\n                <td>\n                    <span className = 'connection-info__download'>\n                        &darr;\n                    </span>\n                    { download ? `${download} Kbps` : 'N/A' }\n                    <span className = 'connection-info__upload'>\n                        &uarr;\n                    </span>\n                    { upload ? `${upload} Kbps` : 'N/A' }\n                </td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a a table row as a ReactElement for displaying bitrate related\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderBitrate() {\n        const { download, upload } = this.props.bitrate || {};\n\n        return (\n            <tr>\n                <td>\n                    <span>\n                        { this.props.t('connectionindicator.bitrate') }\n                    </span>\n                </td>\n                <td>\n                    <span className = 'connection-info__download'>\n                        &darr;\n                    </span>\n                    { download ? `${download} Kbps` : 'N/A' }\n                    <span className = 'connection-info__upload'>\n                        &uarr;\n                    </span>\n                    { upload ? `${upload} Kbps` : 'N/A' }\n                </td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying a summary message\n     * about the current connection status.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderConnectionSummary() {\n        return (\n            <tr className = 'connection-info__status'>\n                <td>\n                    <span>{ this.props.t('connectionindicator.status') }</span>\n                </td>\n                <td>{ this.props.connectionSummary }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying end-to-end RTT and\n     * the region.\n     *\n     * @returns {ReactElement}\n     * @private\n     */\n    _renderE2eRtt() {\n        const { e2eRtt, t } = this.props;\n        const str = e2eRtt ? `${e2eRtt.toFixed(0)}ms` : 'N/A';\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.e2e_rtt') }</span>\n                </td>\n                <td>{ str }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying the \"connected to\"\n     * information.\n     *\n     * @returns {ReactElement}\n     * @private\n     */\n    _renderRegion() {\n        const { region, serverRegion, t } = this.props;\n        let str = serverRegion;\n\n        if (!serverRegion) {\n            return;\n        }\n\n\n        if (region && serverRegion && region !== serverRegion) {\n            str += ` from ${region}`;\n        }\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.connectedTo') }</span>\n                </td>\n                <td>{ str }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying the \"bridge count\"\n     * information.\n     *\n     * @returns {*}\n     * @private\n     */\n    _renderBridgeCount() {\n        const { bridgeCount, t } = this.props;\n\n        // 0 is valid, but undefined/null/NaN aren't.\n        if (!bridgeCount && bridgeCount !== 0) {\n            return;\n        }\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.bridgeCount') }</span>\n                </td>\n                <td>{ bridgeCount }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying frame rate related\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderFrameRate() {\n        const { framerate, t } = this.props;\n        const frameRateString = Object.keys(framerate || {})\n            .map(ssrc => framerate[ssrc])\n            .join(', ') || 'N/A';\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.framerate') }</span>\n                </td>\n                <td>{ frameRateString }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a tables row as a ReactElement for displaying packet loss related\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderPacketLoss() {\n        const { packetLoss, t } = this.props;\n        let packetLossTableData;\n\n        if (packetLoss) {\n            const { download, upload } = packetLoss;\n\n            packetLossTableData = (\n                <td>\n                    <span className = 'connection-info__download'>\n                        &darr;\n                    </span>\n                    { download === null ? 'N/A' : `${download}%` }\n                    <span className = 'connection-info__upload'>\n                        &uarr;\n                    </span>\n                    { upload === null ? 'N/A' : `${upload}%` }\n                </td>\n            );\n        } else {\n            packetLossTableData = <td>N/A</td>;\n        }\n\n        return (\n            <tr>\n                <td>\n                    <span>\n                        { t('connectionindicator.packetloss') }\n                    </span>\n                </td>\n                { packetLossTableData }\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying resolution related\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderResolution() {\n        const { resolution, t } = this.props;\n        const resolutionString = Object.keys(resolution || {})\n            .map(ssrc => {\n                const { width, height } = resolution[ssrc];\n\n                return `${width}x${height}`;\n            })\n            .join(', ') || 'N/A';\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.resolution') }</span>\n                </td>\n                <td>{ resolutionString }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a ReactElement for display a link to toggle showing additional\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderShowMoreLink() {\n        const translationKey\n            = this.props.shouldShowMore\n                ? 'connectionindicator.less'\n                : 'connectionindicator.more';\n\n        return (\n            <a\n                className = 'showmore link'\n                onClick = { this.props.onShowMore } >\n                { this.props.t(translationKey) }\n            </a>\n        );\n    }\n\n    /**\n     * Creates a table as a ReactElement for displaying connection statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderStatistics() {\n        const isRemoteVideo = !this.props.isLocalVideo;\n\n        return (\n            <table className = 'connection-info__container'>\n                <tbody>\n                    { this._renderConnectionSummary() }\n                    { this._renderBitrate() }\n                    { this._renderPacketLoss() }\n                    { isRemoteVideo ? this._renderE2eRtt() : null }\n                    { isRemoteVideo ? this._renderRegion() : null }\n                    { this._renderResolution() }\n                    { this._renderFrameRate() }\n                    { isRemoteVideo ? null : this._renderBridgeCount() }\n                </tbody>\n            </table>\n        );\n    }\n\n    /**\n     * Creates table rows as ReactElements for displaying transport related\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement[]}\n     */\n    _renderTransport() {\n        const { t, transport } = this.props;\n\n        if (!transport || transport.length === 0) {\n            const NA = (\n                <tr key = 'address'>\n                    <td>\n                        <span>{ t('connectionindicator.address') }</span>\n                    </td>\n                    <td>\n                        N/A\n                    </td>\n                </tr>\n            );\n\n            return [ NA ];\n        }\n\n        const data = {\n            localIP: [],\n            localPort: [],\n            remoteIP: [],\n            remotePort: [],\n            transportType: []\n        };\n\n        for (let i = 0; i < transport.length; i++) {\n            const ip = getIP(transport[i].ip);\n            const localIP = getIP(transport[i].localip);\n            const localPort = getPort(transport[i].localip);\n            const port = getPort(transport[i].ip);\n\n            if (!data.remoteIP.includes(ip)) {\n                data.remoteIP.push(ip);\n            }\n\n            if (!data.localIP.includes(localIP)) {\n                data.localIP.push(localIP);\n            }\n\n            if (!data.localPort.includes(localPort)) {\n                data.localPort.push(localPort);\n            }\n\n            if (!data.remotePort.includes(port)) {\n                data.remotePort.push(port);\n            }\n\n            if (!data.transportType.includes(transport[i].type)) {\n                data.transportType.push(transport[i].type);\n            }\n        }\n\n        // All of the transports should be either P2P or JVB\n        let isP2P = false, isTURN = false;\n\n        if (transport.length) {\n            isP2P = transport[0].p2p;\n            isTURN = transport[0].localCandidateType === 'relay'\n                || transport[0].remoteCandidateType === 'relay';\n        }\n\n        const additionalData = [];\n\n        if (isP2P) {\n            additionalData.push(\n                <span> (p2p)</span>);\n        }\n        if (isTURN) {\n            additionalData.push(<span> (turn)</span>);\n        }\n\n        // First show remote statistics, then local, and then transport type.\n        const tableRowConfigurations = [\n            {\n                additionalData,\n                data: data.remoteIP,\n                key: 'remoteaddress',\n                label: t('connectionindicator.remoteaddress',\n                    { count: data.remoteIP.length })\n            },\n            {\n                data: data.remotePort,\n                key: 'remoteport',\n                label: t('connectionindicator.remoteport',\n                        { count: transport.length })\n            },\n            {\n                data: data.localIP,\n                key: 'localaddress',\n                label: t('connectionindicator.localaddress',\n                    { count: data.localIP.length })\n            },\n            {\n                data: data.localPort,\n                key: 'localport',\n                label: t('connectionindicator.localport',\n                    { count: transport.length })\n            },\n            {\n                data: data.transportType,\n                key: 'transport',\n                label: t('connectionindicator.transport',\n                    { count: data.transportType.length })\n            }\n        ];\n\n        return tableRowConfigurations.map(this._renderTransportTableRow);\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying a transport related\n     * statistic.\n     *\n     * @param {Object} config - Describes the contents of the row.\n     * @param {ReactElement} config.additionalData - Extra data to display next\n     * to the passed in config.data.\n     * @param {Array} config.data - The transport statistics to display.\n     * @param {string} config.key - The ReactElement's key. Must be unique for\n     * iterating over multiple child rows.\n     * @param {string} config.label - The text to display describing the data.\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderTransportTableRow(config: Object) {\n        const { additionalData, data, key, label } = config;\n\n        return (\n            <tr key = { key }>\n                <td>\n                    <span>\n                        { label }\n                    </span>\n                </td>\n                <td>\n                    { getStringFromArray(data) }\n                    { additionalData || null }\n                </td>\n            </tr>\n        );\n    }\n}\n\n/**\n * Utility for getting the IP from a transport statistics object's\n * representation of an IP.\n *\n * @param {string} value - The transport's IP to parse.\n * @private\n * @returns {string}\n */\nfunction getIP(value) {\n    if (!value) {\n        return '';\n    }\n\n    return value.substring(0, value.lastIndexOf(':'));\n}\n\n/**\n * Utility for getting the port from a transport statistics object's\n * representation of an IP.\n *\n * @param {string} value - The transport's IP to parse.\n * @private\n * @returns {string}\n */\nfunction getPort(value) {\n    if (!value) {\n        return '';\n    }\n\n    return value.substring(value.lastIndexOf(':') + 1, value.length);\n}\n\n/**\n * Utility for concatenating values in an array into a comma separated string.\n *\n * @param {Array} array - Transport statistics to concatenate.\n * @private\n * @returns {string}\n */\nfunction getStringFromArray(array) {\n    let res = '';\n\n    for (let i = 0; i < array.length; i++) {\n        res += (i === 0 ? '' : ', ') + array[i];\n    }\n\n    return res;\n}\n\nexport default translate(ConnectionStatsTable);\n","// @flow\n\nimport _ from 'lodash';\n\nimport {\n    JitsiConnectionQualityEvents,\n    JitsiE2ePingEvents\n} from '../base/lib-jitsi-meet';\n\n/**\n * Contains all the callbacks to be notified when stats are updated.\n *\n * {\n *     userId: Function[]\n * }\n */\nconst subscribers = {};\n\n/**\n * A singleton that acts as a pub/sub service for connection stat updates.\n */\nconst statsEmitter = {\n    /**\n     * Have {@code statsEmitter} subscribe to stat updates from a given\n     * conference.\n     *\n     * @param {JitsiConference} conference - The conference for which\n     * {@code statsEmitter} should subscribe for stat updates.\n     * @returns {void}\n     */\n    startListeningForStats(conference: Object) {\n        conference.on(JitsiConnectionQualityEvents.LOCAL_STATS_UPDATED,\n            stats => this._onStatsUpdated(conference.myUserId(), stats));\n\n        conference.on(JitsiConnectionQualityEvents.REMOTE_STATS_UPDATED,\n            (id, stats) => this._emitStatsUpdate(id, stats));\n\n        conference.on(\n            JitsiE2ePingEvents.E2E_RTT_CHANGED,\n            (participant, e2eRtt) => {\n                const stats = {\n                    e2eRtt,\n                    region: participant.getProperty('region')\n                };\n\n                this._emitStatsUpdate(participant.getId(), stats);\n            });\n    },\n\n    /**\n     * Add a subscriber to be notified when stats are updated for a specified\n     * user id.\n     *\n     * @param {string} id - The user id whose stats updates are of interest.\n     * @param {Function} callback - The function to invoke when stats for the\n     * user have been updated.\n     * @returns {void}\n     */\n    subscribeToClientStats(id: ?string, callback: Function) {\n        if (!id) {\n            return;\n        }\n\n        if (!subscribers[id]) {\n            subscribers[id] = [];\n        }\n\n        subscribers[id].push(callback);\n    },\n\n    /**\n     * Remove a subscriber that is listening for stats updates for a specified\n     * user id.\n     *\n     * @param {string} id - The user id whose stats updates are no longer of\n     * interest.\n     * @param {Function} callback - The function that is currently subscribed to\n     * stat updates for the specified user id.\n     * @returns {void}\n     */\n    unsubscribeToClientStats(id: string, callback: Function) {\n        if (!subscribers[id]) {\n            return;\n        }\n\n        const filteredSubscribers = subscribers[id].filter(\n            subscriber => subscriber !== callback);\n\n        if (filteredSubscribers.length) {\n            subscribers[id] = filteredSubscribers;\n        } else {\n            delete subscribers[id];\n        }\n    },\n\n    /**\n     * Emit a stat update to all those listening for a specific user's\n     * connection stats.\n     *\n     * @param {string} id - The user id the stats are associated with.\n     * @param {Object} stats - New connection stats for the user.\n     * @returns {void}\n     */\n    _emitStatsUpdate(id: string, stats: Object = {}) {\n        const callbacks = subscribers[id] || [];\n\n        callbacks.forEach(callback => {\n            callback(stats);\n        });\n    },\n\n    /**\n     * Emit a stat update to all those listening for local stat updates. Will\n     * also update listeners of remote user stats of changes related to their\n     * stats.\n     *\n     * @param {string} localUserId - The user id for the local user.\n     * @param {Object} stats - Connection stats for the local user as provided\n     * by the library.\n     * @returns {void}\n     */\n    _onStatsUpdated(localUserId: string, stats: Object) {\n        const allUserFramerates = stats.framerate || {};\n        const allUserResolutions = stats.resolution || {};\n\n        // FIXME resolution and framerate are maps keyed off of user ids with\n        // stat values. Receivers of stats expect resolution and framerate to\n        // be primitives, not maps, so here we override the 'lib-jitsi-meet'\n        // stats objects.\n        const modifiedLocalStats = Object.assign({}, stats, {\n            framerate: allUserFramerates[localUserId],\n            resolution: allUserResolutions[localUserId]\n        });\n\n        this._emitStatsUpdate(localUserId, modifiedLocalStats);\n\n        // Get all the unique user ids from the framerate and resolution stats\n        // and update remote user stats as needed.\n        const framerateUserIds = Object.keys(allUserFramerates);\n        const resolutionUserIds = Object.keys(allUserResolutions);\n\n        _.union(framerateUserIds, resolutionUserIds)\n            .filter(id => id !== localUserId)\n            .forEach(id => {\n                const remoteUserStats = {};\n\n                const framerate = allUserFramerates[id];\n\n                if (framerate) {\n                    remoteUserStats.framerate = framerate;\n                }\n\n                const resolution = allUserResolutions[id];\n\n                if (resolution) {\n                    remoteUserStats.resolution = resolution;\n                }\n\n                this._emitStatsUpdate(id, remoteUserStats);\n            });\n    }\n};\n\nexport default statsEmitter;\n","// @flow\n\nimport { Component } from 'react';\n\nimport statsEmitter from '../statsEmitter';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The connection quality percentage that must be reached to be considered of\n * good quality and can result in the connection indicator being hidden.\n *\n * @type {number}\n */\nexport const INDICATOR_DISPLAY_THRESHOLD = 30;\n\n/**\n * The type of the React {@code Component} props of {@link ConnectionIndicator}.\n */\nexport type Props = {\n\n    /**\n     * The ID of the participant associated with the displayed connection indication and\n     * stats.\n     */\n    participantId: string\n};\n\n/**\n * The type of the React {@code Component} state of {@link ConnectionIndicator}.\n */\nexport type State = {\n\n    /**\n     * Whether or not a CSS class should be applied to the root for hiding the\n     * connection indicator. By default the indicator should start out hidden\n     * because the current connection status is not known at mount.\n     */\n    showIndicator: boolean,\n\n    /**\n     * Cache of the stats received from subscribing to stats emitting. The keys\n     * should be the name of the stat. With each stat update, updates stats are\n     * mixed in with cached stats and a new stats object is set in state.\n     */\n    stats: Object\n};\n\n/**\n * Implements a React {@link Component} which displays the current connection\n * quality.\n *\n * @extends {Component}\n */\nexport default class AbstractConnectionIndicator<P: Props, S: State> extends Component<P, S> {\n    /**\n     * The timeout for automatically hiding the indicator.\n     */\n    autoHideTimeout: ?TimeoutID\n\n    /**\n     * Initializes a new {@code ConnectionIndicator} instance.\n     *\n     * @param {P} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onStatsUpdated = this._onStatsUpdated.bind(this);\n    }\n\n    /**\n     * Starts listening for stat updates.\n     *\n     * @inheritdoc\n     * returns {void}\n     */\n    componentDidMount() {\n        statsEmitter.subscribeToClientStats(\n            this.props.participantId, this._onStatsUpdated);\n    }\n\n    /**\n     * Updates which user's stats are being listened to.\n     *\n     * @inheritdoc\n     * returns {void}\n     */\n    componentDidUpdate(prevProps: Props) {\n        if (prevProps.participantId !== this.props.participantId) {\n            statsEmitter.unsubscribeToClientStats(\n                prevProps.participantId, this._onStatsUpdated);\n            statsEmitter.subscribeToClientStats(\n                this.props.participantId, this._onStatsUpdated);\n        }\n    }\n\n    /**\n     * Cleans up any queued processes, which includes listening for new stats\n     * and clearing any timeout to hide the indicator.\n     *\n     * @private\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        statsEmitter.unsubscribeToClientStats(\n            this.props.participantId, this._onStatsUpdated);\n\n        clearTimeout(this.autoHideTimeout);\n    }\n\n    _onStatsUpdated: (Object) => void;\n\n    /**\n     * Callback invoked when new connection stats associated with the passed in\n     * user ID are available. Will update the component's display of current\n     * statistics.\n     *\n     * @param {Object} stats - Connection stats from the library.\n     * @private\n     * @returns {void}\n     */\n    _onStatsUpdated(stats = {}) {\n        // Rely on React to batch setState actions.\n        const { connectionQuality } = stats;\n        const newPercentageState = typeof connectionQuality === 'undefined'\n            ? {} : { percent: connectionQuality };\n        const newStats = Object.assign(\n            {},\n            this.state.stats,\n            stats,\n            newPercentageState);\n\n        this.setState({\n            stats: newStats\n        });\n\n        this._updateIndicatorAutoHide(newStats.percent);\n    }\n\n    /**\n     * Updates the internal state for automatically hiding the indicator.\n     *\n     * @param {number} percent - The current connection quality percentage\n     * between the values 0 and 100.\n     * @private\n     * @returns {void}\n     */\n    _updateIndicatorAutoHide(percent) {\n        if (percent < INDICATOR_DISPLAY_THRESHOLD) {\n            clearTimeout(this.autoHideTimeout);\n            this.autoHideTimeout = undefined;\n\n            this.setState({\n                showIndicator: true\n            });\n        } else if (this.autoHideTimeout) {\n            // This clause is intentionally left blank because no further action\n            // is needed if the percent is below the threshold and there is an\n            // autoHideTimeout set.\n        } else {\n            this.autoHideTimeout = setTimeout(() => {\n                this.setState({\n                    showIndicator: false\n                });\n            }, typeof interfaceConfig === 'undefined'\n                ? 5000\n                : interfaceConfig.CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT);\n        }\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconConnectionActive, IconConnectionInactive } from '../../../base/icons';\nimport { JitsiParticipantConnectionStatus } from '../../../base/lib-jitsi-meet';\nimport { Popover } from '../../../base/popover';\nimport { ConnectionStatsTable } from '../../../connection-stats';\n\nimport AbstractConnectionIndicator, {\n    INDICATOR_DISPLAY_THRESHOLD,\n    type Props as AbstractProps,\n    type State as AbstractState\n} from '../AbstractConnectionIndicator';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * An array of display configurations for the connection indicator and its bars.\n * The ordering is done specifically for faster iteration to find a matching\n * configuration to the current connection strength percentage.\n *\n * @type {Object[]}\n */\nconst QUALITY_TO_WIDTH: Array<Object> = [\n\n    // Full (3 bars)\n    {\n        colorClass: 'status-high',\n        percent: INDICATOR_DISPLAY_THRESHOLD,\n        tip: 'connectionindicator.quality.good',\n        width: '100%'\n    },\n\n    // 2 bars\n    {\n        colorClass: 'status-med',\n        percent: 10,\n        tip: 'connectionindicator.quality.nonoptimal',\n        width: '66%'\n    },\n\n    // 1 bar\n    {\n        colorClass: 'status-low',\n        percent: 0,\n        tip: 'connectionindicator.quality.poor',\n        width: '33%'\n    }\n\n    // Note: we never show 0 bars as long as there is a connection.\n];\n\n/**\n * The type of the React {@code Component} props of {@link ConnectionIndicator}.\n */\ntype Props = AbstractProps & {\n\n    /**\n     * Whether or not the component should ignore setting a visibility class for\n     * hiding the component when the connection quality is not strong.\n     */\n    alwaysVisible: boolean,\n\n    /**\n     * The current condition of the user's connection, matching one of the\n     * enumerated values in the library.\n     */\n    connectionStatus: string,\n\n    /**\n     * Whether or not clicking the indicator should display a popover for more\n     * details.\n     */\n    enableStatsDisplay: boolean,\n\n    /**\n     * The font-size for the icon.\n     */\n    iconSize: number,\n\n    /**\n     * Whether or not the displays stats are for local video.\n     */\n    isLocalVideo: boolean,\n\n    /**\n     * Relative to the icon from where the popover for more connection details\n     * should display.\n     */\n    statsPopoverPosition: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link ConnectionIndicator}.\n */\ntype State = AbstractState & {\n\n    /**\n     * Whether or not the popover content should display additional statistics.\n     */\n    showMoreStats: boolean\n};\n\n/**\n * Implements a React {@link Component} which displays the current connection\n * quality percentage and has a popover to show more detailed connection stats.\n *\n * @extends {Component}\n */\nclass ConnectionIndicator extends AbstractConnectionIndicator<Props, State> {\n    /**\n     * Initializes a new {@code ConnectionIndicator} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            autoHideTimeout: undefined,\n            showIndicator: false,\n            showMoreStats: false,\n            stats: {}\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onToggleShowMore = this._onToggleShowMore.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const visibilityClass = this._getVisibilityClass();\n        const rootClassNames = `indicator-container ${visibilityClass}`;\n\n        const colorClass = this._getConnectionColorClass();\n        const indicatorContainerClassNames\n            = `connection-indicator indicator ${colorClass}`;\n\n        return (\n            <Popover\n                className = { rootClassNames }\n                content = { this._renderStatisticsTable() }\n                disablePopover = { !this.props.enableStatsDisplay }\n                position = { this.props.statsPopoverPosition }>\n                <div className = 'popover-trigger'>\n                    <div\n                        className = { indicatorContainerClassNames }\n                        style = {{ fontSize: this.props.iconSize }}>\n                        <div className = 'connection indicatoricon'>\n                            { this._renderIcon() }\n                        </div>\n                    </div>\n                </div>\n            </Popover>\n        );\n    }\n\n    /**\n     * Returns a CSS class that interprets the current connection status as a\n     * color.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getConnectionColorClass() {\n        const { connectionStatus } = this.props;\n        const { percent } = this.state.stats;\n        const { INACTIVE, INTERRUPTED } = JitsiParticipantConnectionStatus;\n\n        if (connectionStatus === INACTIVE) {\n            return 'status-other';\n        } else if (connectionStatus === INTERRUPTED) {\n            return 'status-lost';\n        } else if (typeof percent === 'undefined') {\n            return 'status-high';\n        }\n\n        return this._getDisplayConfiguration(percent).colorClass;\n    }\n\n    /**\n     * Returns a string that describes the current connection status.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getConnectionStatusTip() {\n        let tipKey;\n\n        switch (this.props.connectionStatus) {\n        case JitsiParticipantConnectionStatus.INTERRUPTED:\n            tipKey = 'connectionindicator.quality.lost';\n            break;\n\n        case JitsiParticipantConnectionStatus.INACTIVE:\n            tipKey = 'connectionindicator.quality.inactive';\n            break;\n\n        default: {\n            const { percent } = this.state.stats;\n\n            if (typeof percent === 'undefined') {\n                // If percentage is undefined then there are no stats available\n                // yet, likely because only a local connection has been\n                // established so far. Assume a strong connection to start.\n                tipKey = 'connectionindicator.quality.good';\n            } else {\n                const config = this._getDisplayConfiguration(percent);\n\n                tipKey = config.tip;\n            }\n        }\n        }\n\n        return this.props.t(tipKey);\n    }\n\n    /**\n     * Get the icon configuration from QUALITY_TO_WIDTH which has a percentage\n     * that matches or exceeds the passed in percentage. The implementation\n     * assumes QUALITY_TO_WIDTH is already sorted by highest to lowest\n     * percentage.\n     *\n     * @param {number} percent - The connection percentage, out of 100, to find\n     * the closest matching configuration for.\n     * @private\n     * @returns {Object}\n     */\n    _getDisplayConfiguration(percent: number): Object {\n        return QUALITY_TO_WIDTH.find(x => percent >= x.percent) || {};\n    }\n\n    /**\n     * Returns additional class names to add to the root of the component. The\n     * class names are intended to be used for hiding or showing the indicator.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getVisibilityClass() {\n        const { connectionStatus } = this.props;\n\n        return this.state.showIndicator\n            || this.props.alwaysVisible\n            || connectionStatus === JitsiParticipantConnectionStatus.INTERRUPTED\n            || connectionStatus === JitsiParticipantConnectionStatus.INACTIVE\n            ? 'show-connection-indicator' : 'hide-connection-indicator';\n    }\n\n    _onToggleShowMore: () => void;\n\n    /**\n     * Callback to invoke when the show more link in the popover content is\n     * clicked. Sets the state which will determine if the popover should show\n     * additional statistics about the connection.\n     *\n     * @returns {void}\n     */\n    _onToggleShowMore() {\n        this.setState({ showMoreStats: !this.state.showMoreStats });\n    }\n\n    /**\n     * Creates a ReactElement for displaying an icon that represents the current\n     * connection quality.\n     *\n     * @returns {ReactElement}\n     */\n    _renderIcon() {\n        if (this.props.connectionStatus\n            === JitsiParticipantConnectionStatus.INACTIVE) {\n            return (\n                <span className = 'connection_ninja'>\n                    <Icon\n                        className = 'icon-ninja'\n                        size = '1.5em'\n                        src = { IconConnectionInactive } />\n                </span>\n            );\n        }\n\n        let iconWidth;\n        let emptyIconWrapperClassName = 'connection_empty';\n\n        if (this.props.connectionStatus\n            === JitsiParticipantConnectionStatus.INTERRUPTED) {\n\n            // emptyIconWrapperClassName is used by the torture tests to\n            // identify lost connection status handling.\n            emptyIconWrapperClassName = 'connection_lost';\n            iconWidth = '0%';\n        } else if (typeof this.state.stats.percent === 'undefined') {\n            iconWidth = '100%';\n        } else {\n            const { percent } = this.state.stats;\n\n            iconWidth = this._getDisplayConfiguration(percent).width;\n        }\n\n        return [\n            <span\n                className = { emptyIconWrapperClassName }\n                key = 'icon-empty'>\n                <Icon\n                    className = 'icon-gsm-bars'\n                    size = '1em'\n                    src = { IconConnectionActive } />\n            </span>,\n            <span\n                className = 'connection_full'\n                key = 'icon-full'\n                style = {{ width: iconWidth }}>\n                <Icon\n                    className = 'icon-gsm-bars'\n                    size = '1em'\n                    src = { IconConnectionActive } />\n            </span>\n        ];\n    }\n\n    /**\n     * Creates a {@code ConnectionStatisticsTable} instance.\n     *\n     * @returns {ReactElement}\n     */\n    _renderStatisticsTable() {\n        const {\n            bandwidth,\n            bitrate,\n            bridgeCount,\n            e2eRtt,\n            framerate,\n            packetLoss,\n            region,\n            resolution,\n            serverRegion,\n            transport\n        } = this.state.stats;\n\n        return (\n            <ConnectionStatsTable\n                bandwidth = { bandwidth }\n                bitrate = { bitrate }\n                bridgeCount = { bridgeCount }\n                connectionSummary = { this._getConnectionStatusTip() }\n                e2eRtt = { e2eRtt }\n                framerate = { framerate }\n                isLocalVideo = { this.props.isLocalVideo }\n                onShowMore = { this._onToggleShowMore }\n                packetLoss = { packetLoss }\n                region = { region }\n                resolution = { resolution }\n                serverRegion = { serverRegion }\n                shouldShowMore = { this.state.showMoreStats }\n                transport = { transport } />\n        );\n    }\n}\n\nexport default translate(ConnectionIndicator);\n","// @flow\n\nimport { MiddlewareRegistry } from '../base/redux';\nimport { CONFERENCE_JOINED } from '../base/conference';\n\nimport { statsEmitter } from './index';\n\n/**\n * Implements the middleware of the feature connection-indicator.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONFERENCE_JOINED: {\n        statsEmitter.startListeningForStats(action.conference);\n        break;\n    }\n    }\n\n    return next(action);\n});\n\n","// @flow\n\nexport * from './components';\n\nexport { default as statsEmitter } from './statsEmitter';\n\nimport './middleware';\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","/* @flow */\n\nimport { reportError } from './helpers';\n\n/**\n * Parses the query/search or fragment/hash parameters out of a specific URL and\n * returns them as a JS object.\n *\n * @param {URL} url - The URL to parse.\n * @param {boolean} dontParse - If falsy, some transformations (for parsing the\n * value as JSON) will be executed.\n * @param {string} source - If {@code 'search'}, the parameters will parsed out\n * of {@code url.search}; otherwise, out of {@code url.hash}.\n * @returns {Object}\n */\nexport function parseURLParams(\n        url: URL,\n        dontParse: boolean = false,\n        source: string = 'hash'): Object {\n    const paramStr = source === 'search' ? url.search : url.hash;\n    const params = {};\n    const paramParts = (paramStr && paramStr.substr(1).split('&')) || [];\n\n    // Detect and ignore hash params for hash routers.\n    if (source === 'hash' && paramParts.length === 1) {\n        const firstParam = paramParts[0];\n\n        if (firstParam.startsWith('/') && firstParam.split('&').length === 1) {\n            return params;\n        }\n    }\n\n    paramParts.forEach(part => {\n        const param = part.split('=');\n        const key = param[0];\n\n        if (!key) {\n            return;\n        }\n\n        let value;\n\n        try {\n            value = param[1];\n\n            if (!dontParse) {\n                const decoded = decodeURIComponent(value).replace(/\\\\&/, '&');\n\n                value = decoded === 'undefined' ? undefined : JSON.parse(decoded);\n            }\n        } catch (e) {\n            reportError(\n                e, `Failed to parse URL parameter value: ${String(value)}`);\n\n            return;\n        }\n        params[key] = value;\n    });\n\n    return params;\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of {@link Video}.\n */\ntype Props = {\n\n    /**\n     * CSS classes to add to the video element.\n     */\n    className: string,\n\n    /**\n     * The value of the id attribute of the video. Used by the torture tests to\n     * locate video elements.\n     */\n    id: string,\n\n    /**\n     * Optional callback to invoke once the video starts playing.\n     */\n    onVideoPlaying?: Function,\n\n    /**\n     * The JitsiLocalTrack to display.\n     */\n    videoTrack: ?Object,\n\n    /**\n     * Used to determine the value of the autoplay attribute of the underlying\n     * video element.\n     */\n    autoPlay: boolean\n};\n\n/**\n * Component that renders a video element for a passed in video track.\n *\n * @extends Component\n */\nclass Video extends Component<Props> {\n    _videoElement: ?Object;\n\n    /**\n     * Default values for {@code Video} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        className: '',\n        autoPlay: true,\n        id: ''\n    };\n\n    /**\n     * Initializes a new {@code Video} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        /**\n         * The internal reference to the DOM/HTML element intended for\n         * displaying a video.\n         *\n         * @private\n         * @type {HTMLVideoElement}\n         */\n        this._videoElement = null;\n\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onVideoPlaying = this._onVideoPlaying.bind(this);\n        this._setVideoElement = this._setVideoElement.bind(this);\n    }\n\n    /**\n     * Invokes the library for rendering the video on initial display. Sets the\n     * volume level to zero to ensure no sound plays.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        if (this._videoElement) {\n            this._videoElement.volume = 0;\n            this._videoElement.onplaying = this._onVideoPlaying;\n        }\n\n        this._attachTrack(this.props.videoTrack);\n    }\n\n    /**\n     * Remove any existing associations between the current video track and the\n     * component's video element.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        this._detachTrack(this.props.videoTrack);\n    }\n\n    /**\n     * Updates the video display only if a new track is added. This component's\n     * updating is blackboxed from React to prevent re-rendering of video\n     * element, as the lib uses {@code track.attach(videoElement)} instead.\n     *\n     * @inheritdoc\n     * @returns {boolean} - False is always returned to blackbox this component\n     * from React.\n     */\n    shouldComponentUpdate(nextProps: Props) {\n        const currentJitsiTrack = this.props.videoTrack\n            && this.props.videoTrack.jitsiTrack;\n        const nextJitsiTrack = nextProps.videoTrack\n            && nextProps.videoTrack.jitsiTrack;\n\n        if (currentJitsiTrack !== nextJitsiTrack) {\n            this._detachTrack(this.props.videoTrack);\n            this._attachTrack(nextProps.videoTrack);\n        }\n\n        return false;\n    }\n\n    /**\n     * Renders the video element.\n     *\n     * @override\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <video\n                autoPlay = { this.props.autoPlay }\n                className = { this.props.className }\n                id = { this.props.id }\n                ref = { this._setVideoElement } />\n        );\n    }\n\n    /**\n     * Calls into the passed in track to associate the track with the\n     * component's video element and render video.\n     *\n     * @param {Object} videoTrack - The redux representation of the\n     * {@code JitsiLocalTrack}.\n     * @private\n     * @returns {void}\n     */\n    _attachTrack(videoTrack) {\n        if (!videoTrack || !videoTrack.jitsiTrack) {\n            return;\n        }\n\n        videoTrack.jitsiTrack.attach(this._videoElement);\n    }\n\n    /**\n     * Removes the association to the component's video element from the passed\n     * in redux representation of jitsi video track to stop the track from\n     * rendering.\n     *\n     * @param {Object} videoTrack -  The redux representation of the\n     * {@code JitsiLocalTrack}.\n     * @private\n     * @returns {void}\n     */\n    _detachTrack(videoTrack) {\n        if (this._videoElement && videoTrack && videoTrack.jitsiTrack) {\n            videoTrack.jitsiTrack.detach(this._videoElement);\n        }\n    }\n\n    _onVideoPlaying: () => void;\n\n    /**\n     * Invokes the onvideoplaying callback if defined.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onVideoPlaying() {\n        if (this.props.onVideoPlaying) {\n            this.props.onVideoPlaying();\n        }\n    }\n\n    _setVideoElement: () => void;\n\n    /**\n     * Sets an instance variable for the component's video element so it can be\n     * referenced later for attaching and detaching a JitsiLocalTrack.\n     *\n     * @param {Object} element - DOM element for the component's video display.\n     * @private\n     * @returns {void}\n     */\n    _setVideoElement(element) {\n        this._videoElement = element;\n    }\n}\n\nexport default Video;\n","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose\");\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutProperties;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","module.exports = { \"default\": require(\"core-js/library/fn/object/get-prototype-of\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperties = require(\"../core-js/object/define-properties\");\n\nvar _defineProperties2 = _interopRequireDefault(_defineProperties);\n\nvar _freeze = require(\"../core-js/object/freeze\");\n\nvar _freeze2 = _interopRequireDefault(_freeze);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (strings, raw) {\n  return (0, _freeze2.default)((0, _defineProperties2.default)(strings, {\n    raw: {\n      value: (0, _freeze2.default)(raw)\n    }\n  }));\n};","\n\nexport default (function (fn) {\n  var lastArgs = [];\n  var frameId = null;\n\n  var wrapperFn = function wrapperFn() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    lastArgs = args;\n\n    if (frameId) {\n      return frameId;\n    }\n\n    frameId = requestAnimationFrame(function () {\n      frameId = null;\n      fn.apply(undefined, lastArgs);\n    });\n\n    return frameId;\n  };\n\n  wrapperFn.cancel = function () {\n    if (!frameId) {\n      return;\n    }\n\n    cancelAnimationFrame(frameId);\n    frameId = null;\n  };\n\n  var resultFn = wrapperFn;\n\n  return resultFn;\n});","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _ScrollLock = require('./ScrollLock');\n\nObject.defineProperty(exports, 'default', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_ScrollLock).default;\n  }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","function _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nmodule.exports = _inheritsLoose;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.toArray = undefined;\n\nvar _extends = Object.assign || 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; };\n\nvar _renderer = require(\"./renderer\");\n\nObject.defineProperty(exports, \"toArray\", {\n  enumerable: true,\n  get: function get() {\n    return _renderer.toArray;\n  }\n});\nexports.Twemoji = Twemoji;\nexports.Emojione = Emojione;\nexports.EmojioneV4 = EmojioneV4;\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _renderer2 = _interopRequireDefault(_renderer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar protocol = \"https\";\n\nif (typeof location !== \"undefined\" && location.protocol === \"http:\") {\n  protocol = \"http\";\n}\n\nexports.default = _renderer2.default;\nfunction Twemoji(_ref) {\n  var svg = _ref.svg,\n      options = _ref.options,\n      rest = _objectWithoutProperties(_ref, [\"svg\", \"options\"]);\n\n  var size = svg ? \"\" : \"72x72\";\n  var ext = svg ? \"svg\" : \"png\";\n\n  options = _extends({\n    protocol: protocol,\n    baseUrl: \"//twemoji.maxcdn.com/2/\" + (svg ? \"svg/\" : \"\"),\n    size: size,\n    ext: ext\n  }, options);\n\n  return _react2.default.createElement(_renderer2.default, _extends({ options: options }, rest));\n}\n\nTwemoji.propTypes = {\n  text: _propTypes2.default.string,\n  options: _propTypes2.default.object,\n  svg: _propTypes2.default.bool\n};\n\nfunction Emojione(_ref2) {\n  var svg = _ref2.svg,\n      options = _ref2.options,\n      rest = _objectWithoutProperties(_ref2, [\"svg\", \"options\"]);\n\n  var ext = svg ? \"svg\" : \"png\";\n\n  options = _extends({\n    protocol: protocol,\n    baseUrl: \"//cdnjs.cloudflare.com/ajax/libs/emojione/2.2.7/assets/\" + ext + \"/\",\n    size: \"\",\n    ext: ext,\n    emojione: true\n  }, options);\n\n  return _react2.default.createElement(_renderer2.default, _extends({ options: options }, rest));\n}\n\nEmojione.propTypes = {\n  text: _propTypes2.default.string,\n  options: _propTypes2.default.object,\n  svg: _propTypes2.default.bool\n};\n\nfunction EmojioneV4(_ref3) {\n  var size = _ref3.size,\n      options = _ref3.options,\n      rest = _objectWithoutProperties(_ref3, [\"size\", \"options\"]);\n\n  var ext = \"png\";\n\n  options = _extends({\n    protocol: protocol,\n    baseUrl: \"//cdn.jsdelivr.net/emojione/assets/4.0/\" + ext + \"/\",\n    size: size,\n    ext: ext,\n    emojione: true\n  }, options);\n\n  return _react2.default.createElement(_renderer2.default, _extends({ options: options }, rest));\n}\n\nEmojioneV4.propTypes = {\n  text: _propTypes2.default.string,\n  options: _propTypes2.default.object,\n  size: _propTypes2.default.oneOf([32, 64, 128])\n};\nEmojioneV4.defaultProps = {\n  size: 64\n};","// @flow\nimport type { Dispatch } from 'redux';\n\nimport {\n    AUDIO_MUTE,\n    createRemoteMuteConfirmedEvent,\n    createToolbarEvent,\n    sendAnalytics\n} from '../analytics';\nimport { hideDialog } from '../base/dialog';\nimport {\n    getLocalParticipant,\n    muteRemoteParticipant\n} from '../base/participants';\nimport { setAudioMuted } from '../base/media';\nimport UIEvents from '../../../service/UI/UIEvents';\n\nimport { RemoteVideoMenu } from './components';\n\ndeclare var APP: Object;\n\n/**\n * Hides the remote video menu.\n *\n * @returns {Function}\n */\nexport function hideRemoteVideoMenu() {\n    return hideDialog(RemoteVideoMenu);\n}\n\n/**\n * Mutes the local participant.\n *\n * @param {boolean} enable - Whether to mute or unmute.\n * @returns {Function}\n */\nexport function muteLocal(enable: boolean) {\n    return (dispatch: Dispatch<any>) => {\n        sendAnalytics(createToolbarEvent(AUDIO_MUTE, { enable }));\n        dispatch(setAudioMuted(enable, /* ensureTrack */ true));\n\n        // FIXME: The old conference logic as well as the shared video feature\n        // still rely on this event being emitted.\n        typeof APP === 'undefined'\n            || APP.UI.emitEvent(UIEvents.AUDIO_MUTED, enable, true);\n    };\n}\n\n/**\n * Mutes the remote participant with the given ID.\n *\n * @param {string} participantId - ID of the participant to mute.\n * @returns {Function}\n */\nexport function muteRemote(participantId: string) {\n    return (dispatch: Dispatch<any>) => {\n        sendAnalytics(createRemoteMuteConfirmedEvent(participantId));\n        dispatch(muteRemoteParticipant(participantId));\n    };\n}\n\n/**\n * Mutes all participants.\n *\n * @param {Array<string>} exclude - Array of participant IDs to not mute.\n * @returns {Function}\n */\nexport function muteAllParticipants(exclude: Array<string>) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const localId = getLocalParticipant(state).id;\n        const participantIds = state['features/base/participants']\n            .map(p => p.id);\n\n        /* eslint-disable no-confusing-arrow */\n        participantIds\n            .filter(id => !exclude.includes(id))\n            .map(id => id === localId ? muteLocal(true) : muteRemote(id))\n            .map(dispatch);\n        /* eslint-enable no-confusing-arrow */\n    };\n}\n","\n/**\n * Base class for all Large containers which we can show.\n */\nexport default class LargeContainer {\n    /* eslint-disable no-unused-vars, no-empty-function */\n    /**\n     * Show this container.\n     * @returns Promise\n     */\n    show() {\n    }\n\n    /**\n     * Hide this container.\n     * @returns Promise\n     */\n    hide() {\n    }\n\n    /**\n     * Resize this container.\n     * @param {number} containerWidth available width\n     * @param {number} containerHeight available height\n     * @param {boolean} animate if container should animate it's resize process\n     */\n    resize(containerWidth, containerHeight, animate) {\n    }\n\n    /**\n     * Handler for \"hover in\" events.\n     */\n    onHoverIn(e) {\n    }\n\n    /**\n     * Handler for \"hover out\" events.\n     */\n    onHoverOut(e) {\n    }\n\n    /**\n     * Update video stream.\n     * @param {string} userID\n     * @param {JitsiTrack?} stream new stream\n     * @param {string} videoType video type\n     */\n    setStream(userID, stream, videoType) {\n    }\n\n    /**\n     * Show or hide user avatar.\n     * @param {boolean} show\n     */\n    showAvatar(show) {\n    }\n\n    /**\n     * Whether current container needs to be switched on dominant speaker event\n     * when the container is on stage.\n     * @return {boolean}\n     */\n    stayOnStage() {\n    }\n\n    /* eslint-enable no-unused-vars, no-empty-function */\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\n\n/**\n * The type of the React {@code Component} props of {@link TimeElapsed}.\n */\ntype Props = {\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function,\n\n    /**\n     * The milliseconds to be converted into a human-readable format.\n     */\n    time: number\n};\n\n/**\n * React component for displaying total time elapsed. Converts a total count of\n * milliseconds into a more humanized form: \"# hours, # minutes, # seconds\".\n * With a time of 0, \"0s\" will be displayed.\n *\n * @extends Component\n */\nclass TimeElapsed extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { time } = this.props;\n        const hours = _getHoursCount(time);\n        const minutes = _getMinutesCount(time);\n        const seconds = _getSecondsCount(time);\n        const timeElapsed = [];\n\n        if (hours) {\n            const hourPassed\n                = this._createTimeDisplay(hours, 'speakerStats.hours', 'hours');\n\n            timeElapsed.push(hourPassed);\n        }\n\n        if (hours || minutes) {\n            const minutesPassed\n                = this._createTimeDisplay(\n                    minutes,\n                    'speakerStats.minutes',\n                    'minutes');\n\n            timeElapsed.push(minutesPassed);\n        }\n\n        const secondsPassed\n            = this._createTimeDisplay(\n                seconds,\n                'speakerStats.seconds',\n                'seconds');\n\n        timeElapsed.push(secondsPassed);\n\n        return (\n            <div>\n                { timeElapsed }\n            </div>\n        );\n    }\n\n    /**\n     * Returns a ReactElement to display the passed in count and a count noun.\n     *\n     * @private\n     * @param {number} count - The number used for display and to check for\n     * count noun plurality.\n     * @param {string} countNounKey - Translation key for the time's count noun.\n     * @param {string} countType - What is being counted. Used as the element's\n     * key for react to iterate upon.\n     * @returns {ReactElement}\n     */\n    _createTimeDisplay(count, countNounKey, countType) {\n        const { t } = this.props;\n\n        return (\n            <span key = { countType } >\n                { t(countNounKey, { count }) }\n            </span>\n        );\n    }\n}\n\nexport default translate(TimeElapsed);\n\n/**\n * Counts how many whole hours are included in the given time total.\n *\n * @param {number} milliseconds - The millisecond total to get hours from.\n * @private\n * @returns {number}\n */\nfunction _getHoursCount(milliseconds) {\n    return Math.floor(milliseconds / (60 * 60 * 1000));\n}\n\n/**\n * Counts how many whole minutes are included in the given time total.\n *\n * @param {number} milliseconds - The millisecond total to get minutes from.\n * @private\n * @returns {number}\n */\nfunction _getMinutesCount(milliseconds) {\n    return Math.floor(milliseconds / (60 * 1000) % 60);\n}\n\n/**\n * Counts how many whole seconds are included in the given time total.\n *\n * @param {number} milliseconds - The millisecond total to get seconds from.\n * @private\n * @returns {number}\n */\nfunction _getSecondsCount(milliseconds) {\n    return Math.floor(milliseconds / 1000 % 60);\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport TimeElapsed from './TimeElapsed';\n\n/**\n * The type of the React {@code Component} props of {@link SpeakerStatsItem}.\n */\ntype Props = {\n\n    /**\n     * The name of the participant.\n     */\n    displayName: string,\n\n    /**\n     * The total milliseconds the participant has been dominant speaker.\n     */\n    dominantSpeakerTime: number,\n\n    /**\n     * True if the participant is no longer in the meeting.\n     */\n    hasLeft: boolean,\n\n    /**\n     * True if the participant is currently the dominant speaker.\n     */\n    isDominantSpeaker: boolean\n};\n\n/**\n * React component for display an individual user's speaker stats.\n *\n * @extends Component\n */\nclass SpeakerStatsItem extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const hasLeftClass = this.props.hasLeft ? 'status-user-left' : '';\n        const rowDisplayClass = `speaker-stats-item ${hasLeftClass}`;\n\n        const dotClass = this.props.isDominantSpeaker\n            ? 'status-active' : 'status-inactive';\n        const speakerStatusClass = `speaker-stats-item__status-dot ${dotClass}`;\n\n        return (\n            <div className = { rowDisplayClass }>\n                <div className = 'speaker-stats-item__status'>\n                    <span className = { speakerStatusClass } />\n                </div>\n                <div className = 'speaker-stats-item__name'>\n                    { this.props.displayName }\n                </div>\n                <div className = 'speaker-stats-item__time'>\n                    <TimeElapsed\n                        time = { this.props.dominantSpeakerTime } />\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default SpeakerStatsItem;\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\n\n/**\n * The type of the React {@code Component} props of {@link SpeakerStatsLabels}.\n */\ntype Props = {\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * React component for labeling speaker stats column items.\n *\n * @extends Component\n */\nclass SpeakerStatsLabels extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <div className = 'speaker-stats-item__labels'>\n                <div className = 'speaker-stats-item__status' />\n                <div className = 'speaker-stats-item__name'>\n                    { t('speakerStats.name') }\n                </div>\n                <div className = 'speaker-stats-item__time'>\n                    { t('speakerStats.speakerTime') }\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default translate(SpeakerStatsLabels);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Dialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { getLocalParticipant } from '../../base/participants';\nimport { connect } from '../../base/redux';\n\nimport SpeakerStatsItem from './SpeakerStatsItem';\nimport SpeakerStatsLabels from './SpeakerStatsLabels';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link SpeakerStats}.\n */\ntype Props = {\n\n    /**\n     * The display name for the local participant obtained from the redux store.\n     */\n    _localDisplayName: string,\n\n    /**\n     * The JitsiConference from which stats will be pulled.\n     */\n    conference: Object,\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link SpeakerStats}.\n */\ntype State = {\n\n    /**\n     * The stats summary provided by the JitsiConference.\n     */\n    stats: Object\n};\n\n/**\n * React component for displaying a list of speaker stats.\n *\n * @extends Component\n */\nclass SpeakerStats extends Component<Props, State> {\n    _updateInterval: IntervalID;\n\n    /**\n     * Initializes a new SpeakerStats instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            stats: this.props.conference.getSpeakerStats()\n        };\n\n        // Bind event handlers so they are only bound once per instance.\n        this._updateStats = this._updateStats.bind(this);\n    }\n\n    /**\n     * Begin polling for speaker stats updates.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._updateInterval = setInterval(this._updateStats, 1000);\n    }\n\n    /**\n     * Stop polling for speaker stats updates.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        clearInterval(this._updateInterval);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const userIds = Object.keys(this.state.stats);\n        const items = userIds.map(userId => this._createStatsItem(userId));\n\n        return (\n            <Dialog\n                cancelKey = { 'dialog.close' }\n                submitDisabled = { true }\n                titleKey = 'speakerStats.speakerStats'>\n                <div className = 'speaker-stats'>\n                    <SpeakerStatsLabels />\n                    { items }\n                </div>\n            </Dialog>\n        );\n    }\n\n    /**\n     * Create a SpeakerStatsItem instance for the passed in user id.\n     *\n     * @param {string} userId -  User id used to look up the associated\n     * speaker stats from the jitsi library.\n     * @returns {SpeakerStatsItem|null}\n     * @private\n     */\n    _createStatsItem(userId) {\n        const statsModel = this.state.stats[userId];\n\n        if (!statsModel) {\n            return null;\n        }\n\n        const isDominantSpeaker = statsModel.isDominantSpeaker();\n        const dominantSpeakerTime = statsModel.getTotalDominantSpeakerTime();\n        const hasLeft = statsModel.hasLeft();\n\n        let displayName;\n\n        if (statsModel.isLocalStats()) {\n            const { t } = this.props;\n            const meString = t('me');\n\n            displayName = this.props._localDisplayName;\n            displayName\n                = displayName ? `${displayName} (${meString})` : meString;\n        } else {\n            displayName\n                = this.state.stats[userId].getDisplayName()\n                    || interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME;\n        }\n\n        return (\n            <SpeakerStatsItem\n                displayName = { displayName }\n                dominantSpeakerTime = { dominantSpeakerTime }\n                hasLeft = { hasLeft }\n                isDominantSpeaker = { isDominantSpeaker }\n                key = { userId } />\n        );\n    }\n\n    _updateStats: () => void;\n\n    /**\n     * Update the internal state with the latest speaker stats.\n     *\n     * @returns {void}\n     * @private\n     */\n    _updateStats() {\n        const stats = this.props.conference.getSpeakerStats();\n\n        this.setState({ stats });\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated SpeakerStats's props.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _localDisplayName: ?string\n * }}\n */\nfunction _mapStateToProps(state) {\n    const localParticipant = getLocalParticipant(state);\n\n    return {\n        /**\n         * The local display name.\n         *\n         * @private\n         * @type {string|undefined}\n         */\n        _localDisplayName: localParticipant && localParticipant.name\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(SpeakerStats));\n","export * from './components';\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/media');\n","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n    Symbol.for &&\n    Symbol.for('react.element')) ||\n    0xeac7;\n\n  var isValidElement = function(object) {\n    return typeof object === 'object' &&\n      object !== null &&\n      object.$$typeof === REACT_ELEMENT_TYPE;\n  };\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\n// random #'s we need to init node and clockseq\nvar _seedBytes = rng();\n\n// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\nvar _nodeId = [\n  _seedBytes[0] | 0x01,\n  _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]\n];\n\n// Per 4.2.2, randomize (14 bit) clockseq\nvar _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\n\n// Previous uuid creation time\nvar _lastMSecs = 0, _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  var node = options.node || _nodeId;\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","import { DEFAULT_THEME_MODE } from '../constants';\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  }\n\n  if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return {\n    mode: DEFAULT_THEME_MODE\n  };\n}","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","// @flow\n\nimport { toState } from '../base/redux';\n\n/**\n * Returns true if follow me is active and false otherwise.\n *\n * @param {Object|Function} stateful - Object or function that can be resolved\n * to the Redux state.\n * @returns {boolean} - True if follow me is active and false otherwise.\n */\nexport function isFollowMeActive(stateful: Object | Function) {\n    const state = toState(stateful);\n\n    return Boolean(state['features/follow-me'].moderator);\n}\n","// @flow\n\n/**\n * The id of the Follow Me moderator.\n *\n * {\n *     type: SET_FOLLOW_ME_MODERATOR,\n *     id: boolean\n * }\n */\nexport const SET_FOLLOW_ME_MODERATOR = 'SET_FOLLOW_ME_MODERATOR';\n\n/**\n * The type of (redux) action which updates the current known state of the\n * Follow Me feature.\n *\n *\n * {\n *     type: SET_FOLLOW_ME_STATE,\n *     state: boolean\n * }\n */\nexport const SET_FOLLOW_ME_STATE = 'SET_FOLLOW_ME_STATE';\n","// @flow\n\nimport {\n    SET_FOLLOW_ME_MODERATOR,\n    SET_FOLLOW_ME_STATE\n} from './actionTypes';\n\n/**\n * Sets the current moderator id or clears it.\n *\n * @param {?string} id - The Follow Me moderator participant id.\n * @returns {{\n *     type: SET_FOLLOW_ME_MODERATOR,\n *     id, string\n * }}\n */\nexport function setFollowMeModerator(id: ?string) {\n    return {\n        type: SET_FOLLOW_ME_MODERATOR,\n        id\n    };\n}\n\n/**\n * Sets the Follow Me feature state.\n *\n * @param {?Object} state - The current state.\n * @returns {{\n *     type: SET_FOLLOW_ME_STATE,\n *     state: Object\n * }}\n */\nexport function setFollowMeState(state: ?Object) {\n    return {\n        type: SET_FOLLOW_ME_STATE,\n        state\n    };\n}\n","/**\n * The (name of the) command which transports the state (represented by\n * {State} for the local state at the time of this writing) of a {FollowMe}\n * (instance) between participants.\n */\nexport const FOLLOW_ME_COMMAND = 'follow-me';\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/follow-me');\n","// @flow\n\nimport {\n    setFollowMeModerator,\n    setFollowMeState\n} from './actions';\nimport { CONFERENCE_WILL_JOIN } from '../base/conference';\nimport {\n    getParticipantById,\n    getPinnedParticipant,\n    PARTICIPANT_LEFT,\n    pinParticipant\n} from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { setFilmstripVisible } from '../filmstrip';\nimport { setTileView } from '../video-layout';\n\nimport { FOLLOW_ME_COMMAND } from './constants';\nimport { isFollowMeActive } from './functions';\nimport logger from './logger';\n\ndeclare var APP: Object;\n\n/**\n * The timeout after which a follow-me command that has been received will be\n * ignored if not consumed.\n *\n * @type {number} in seconds\n * @private\n */\nconst _FOLLOW_ME_RECEIVED_TIMEOUT = 30;\n\n/**\n * An instance of a timeout used as a workaround when attempting to pin a\n * non-existent particapant, which may be caused by participant join information\n * not being received yet.\n *\n * @type {TimeoutID}\n */\nlet nextOnStageTimeout;\n\n/**\n * A count of how many seconds the nextOnStageTimeout has ticked while waiting\n * for a participant to be discovered that should be pinned. This variable\n * works in conjunction with {@code _FOLLOW_ME_RECEIVED_TIMEOUT} and\n * {@code nextOnStageTimeout}.\n *\n * @type {number}\n */\nlet nextOnStageTimer = 0;\n\n/**\n * Represents \"Follow Me\" feature which enables a moderator to (partially)\n * control the user experience/interface (e.g. filmstrip visibility) of (other)\n * non-moderator participant.\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONFERENCE_WILL_JOIN: {\n        const { conference } = action;\n\n        conference.addCommandListener(\n            FOLLOW_ME_COMMAND, ({ attributes }, id) => {\n                _onFollowMeCommand(attributes, id, store);\n            });\n        break;\n    }\n    case PARTICIPANT_LEFT:\n        if (store.getState()['features/follow-me'].moderator === action.participant.id) {\n            store.dispatch(setFollowMeModerator());\n        }\n        break;\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies this instance about a \"Follow Me\" command received by the Jitsi\n * conference.\n *\n * @param {Object} attributes - The attributes carried by the command.\n * @param {string} id - The identifier of the participant who issuing the\n * command. A notable idiosyncrasy to be mindful of here is that the command\n * may be issued by the local participant.\n * @param {Object} store - The redux store. Used to calculate and dispatch\n * updates.\n * @private\n * @returns {void}\n */\nfunction _onFollowMeCommand(attributes = {}, id, store) {\n    const state = store.getState();\n\n    // We require to know who issued the command because (1) only a\n    // moderator is allowed to send commands and (2) a command MUST be\n    // issued by a defined commander.\n    if (typeof id === 'undefined') {\n        return;\n    }\n\n    const participantSendingCommand = getParticipantById(state, id);\n\n    // The Command(s) API will send us our own commands and we don't want\n    // to act upon them.\n    if (participantSendingCommand.local) {\n        return;\n    }\n\n    if (participantSendingCommand.role !== 'moderator') {\n        logger.warn('Received follow-me command not from moderator');\n\n        return;\n    }\n\n    if (!isFollowMeActive(state)) {\n        store.dispatch(setFollowMeModerator(id));\n    }\n\n    // just a command that follow me was turned off\n    if (attributes.off) {\n        store.dispatch(setFollowMeModerator());\n\n        return;\n    }\n\n    const oldState = state['features/follow-me'].state || {};\n\n    store.dispatch(setFollowMeState(attributes));\n\n    // XMPP will translate all booleans to strings, so explicitly check against\n    // the string form of the boolean {@code true}.\n    if (oldState.filmstripVisible !== attributes.filmstripVisible) {\n        store.dispatch(setFilmstripVisible(attributes.filmstripVisible === 'true'));\n    }\n\n    if (oldState.tileViewEnabled !== attributes.tileViewEnabled) {\n        store.dispatch(setTileView(attributes.tileViewEnabled === 'true'));\n    }\n\n    // For now gate etherpad checks behind a web-app check to be extra safe\n    // against calling a web-app global.\n    if (typeof APP !== 'undefined'\n        && oldState.sharedDocumentVisible !== attributes.sharedDocumentVisible) {\n        const isEtherpadVisible = attributes.sharedDocumentVisible === 'true';\n        const documentManager = APP.UI.getSharedDocumentManager();\n\n        if (documentManager\n                && isEtherpadVisible !== state['features/etherpad'].editing) {\n            documentManager.toggleEtherpad();\n        }\n    }\n\n    const pinnedParticipant\n        = getPinnedParticipant(state, attributes.nextOnStage);\n    const idOfParticipantToPin = attributes.nextOnStage;\n\n    if (typeof idOfParticipantToPin !== 'undefined'\n            && (!pinnedParticipant\n                || idOfParticipantToPin !== pinnedParticipant.id)\n            && oldState.nextOnStage !== attributes.nextOnStage) {\n        _pinVideoThumbnailById(store, idOfParticipantToPin);\n    } else if (typeof idOfParticipantToPin === 'undefined'\n            && pinnedParticipant) {\n        store.dispatch(pinParticipant(null));\n    }\n}\n\n/**\n * Pins the video thumbnail given by clickId.\n *\n * @param {Object} store - The redux store.\n * @param {string} clickId - The identifier of the participant to pin.\n * @private\n * @returns {void}\n */\nfunction _pinVideoThumbnailById(store, clickId) {\n    if (getParticipantById(store.getState(), clickId)) {\n        clearTimeout(nextOnStageTimeout);\n        nextOnStageTimer = 0;\n\n        store.dispatch(pinParticipant(clickId));\n    } else {\n        nextOnStageTimeout = setTimeout(() => {\n            if (nextOnStageTimer > _FOLLOW_ME_RECEIVED_TIMEOUT) {\n                nextOnStageTimer = 0;\n\n                return;\n            }\n\n            nextOnStageTimer++;\n\n            _pinVideoThumbnailById(store, clickId);\n        }, 1000);\n    }\n}\n","// @flow\n\nimport { StateListenerRegistry } from '../base/redux';\nimport { getCurrentConference } from '../base/conference';\nimport {\n    getPinnedParticipant,\n    isLocalParticipantModerator\n} from '../base/participants';\n\nimport { FOLLOW_ME_COMMAND } from './constants';\n\n/**\n * Subscribes to changes to the Follow Me setting for the local participant to\n * notify remote participants of current user interface status.\n * Changing newSelectedValue param to off, when feature is turned of so we can\n * notify all listeners.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/base/conference'].followMeEnabled,\n    /* listener */ (newSelectedValue, store) => _sendFollowMeCommand(newSelectedValue || 'off', store));\n\n/**\n * Subscribes to changes to the currently pinned participant in the user\n * interface of the local participant.\n */\nStateListenerRegistry.register(\n    /* selector */ state => {\n        const pinnedParticipant = getPinnedParticipant(state);\n\n        return pinnedParticipant ? pinnedParticipant.id : null;\n    },\n    /* listener */ _sendFollowMeCommand);\n\n/**\n * Subscribes to changes to the shared document (etherpad) visibility in the\n * user interface of the local participant.\n *\n * @param sharedDocumentVisible {Boolean} {true} if the shared document was\n * shown (as a result of the toggle) or {false} if it was hidden\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/etherpad'].editing,\n    /* listener */ _sendFollowMeCommand);\n\n/**\n * Subscribes to changes to the filmstrip visibility in the user interface of\n * the local participant.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/filmstrip'].visible,\n    /* listener */ _sendFollowMeCommand);\n\n/**\n * Subscribes to changes to the tile view setting in the user interface of the\n * local participant.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/video-layout'].tileViewEnabled,\n    /* listener */ _sendFollowMeCommand);\n\n/**\n * Private selector for returning state from redux that should be respected by\n * other participants while follow me is enabled.\n *\n * @param {Object} state - The redux state.\n * @returns {Object}\n */\nfunction _getFollowMeState(state) {\n    const pinnedParticipant = getPinnedParticipant(state);\n\n    return {\n        filmstripVisible: state['features/filmstrip'].visible,\n        nextOnStage: pinnedParticipant && pinnedParticipant.id,\n        sharedDocumentVisible: state['features/etherpad'].editing,\n        tileViewEnabled: state['features/video-layout'].tileViewEnabled\n    };\n}\n\n/**\n * Sends the follow-me command, when a local property change occurs.\n *\n * @param {*} newSelectedValue - The changed selected value from the selector.\n * @param {Object} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _sendFollowMeCommand(\n        newSelectedValue, store) { // eslint-disable-line no-unused-vars\n    const state = store.getState();\n    const conference = getCurrentConference(state);\n\n    if (!conference) {\n        return;\n    }\n\n    // Only a moderator is allowed to send commands.\n    if (!isLocalParticipantModerator(state)) {\n        return;\n    }\n\n    if (newSelectedValue === 'off') {\n        // if the change is to off, local user turned off follow me and\n        // we want to signal this\n\n        conference.sendCommandOnce(\n            FOLLOW_ME_COMMAND,\n            { attributes: { off: true } }\n        );\n\n        return;\n    } else if (!state['features/base/conference'].followMeEnabled) {\n        return;\n    }\n\n    conference.sendCommand(\n        FOLLOW_ME_COMMAND,\n        { attributes: _getFollowMeState(state) }\n    );\n}\n","// @flow\n\nimport {\n    SET_FOLLOW_ME_MODERATOR,\n    SET_FOLLOW_ME_STATE\n} from './actionTypes';\nimport { ReducerRegistry, set } from '../base/redux';\n\n/**\n * Listen for actions that contain the Follow Me feature active state, so that it can be stored.\n */\nReducerRegistry.register(\n    'features/follow-me',\n    (state = {}, action) => {\n        switch (action.type) {\n\n        case SET_FOLLOW_ME_MODERATOR: {\n            let newState = set(state, 'moderator', action.id);\n\n            if (!action.id) {\n                // clear the state if feature becomes disabled\n                newState = set(newState, 'state', undefined);\n            }\n\n            return newState;\n        }\n        case SET_FOLLOW_ME_STATE: {\n            return set(state, 'state', action.state);\n        }\n        }\n\n        return state;\n    });\n","export * from './functions';\nexport * from './middleware';\nexport * from './subscriber';\n\nimport './reducer';\n","export default function _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/prejoin');\n","/* global $, APP, YT, interfaceConfig, onPlayerReady, onPlayerStateChange,\nonPlayerError */\n\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\nimport UIUtil from '../util/UIUtil';\nimport UIEvents from '../../../service/UI/UIEvents';\n\nimport VideoLayout from '../videolayout/VideoLayout';\nimport LargeContainer from '../videolayout/LargeContainer';\nimport Filmstrip from '../videolayout/Filmstrip';\n\nimport {\n    createSharedVideoEvent as createEvent,\n    sendAnalytics\n} from '../../../react/features/analytics';\nimport {\n    participantJoined,\n    participantLeft,\n    pinParticipant\n} from '../../../react/features/base/participants';\nimport {\n    dockToolbox,\n    getToolboxHeight,\n    showToolbox\n} from '../../../react/features/toolbox';\n\nexport const SHARED_VIDEO_CONTAINER_TYPE = 'sharedvideo';\n\n/**\n * Example shared video link.\n * @type {string}\n */\nconst defaultSharedVideoLink = 'https://www.youtube.com/watch?v=xNXN7CZk8X0';\nconst updateInterval = 5000; // milliseconds\n\n/**\n * The dialog for user input (video link).\n * @type {null}\n */\nlet dialog = null;\n\n/**\n * Manager of shared video.\n */\nexport default class SharedVideoManager {\n    /**\n     *\n     */\n    constructor(emitter) {\n        this.emitter = emitter;\n        this.isSharedVideoShown = false;\n        this.isPlayerAPILoaded = false;\n        this.mutedWithUserInteraction = false;\n    }\n\n    /**\n     * Indicates if the player volume is currently on. This will return true if\n     * we have an available player, which is currently in a PLAYING state,\n     * which isn't muted and has it's volume greater than 0.\n     *\n     * @returns {boolean} indicating if the volume of the shared video is\n     * currently on.\n     */\n    isSharedVideoVolumeOn() {\n        return this.player\n                && this.player.getPlayerState() === YT.PlayerState.PLAYING\n                && !this.player.isMuted()\n                && this.player.getVolume() > 0;\n    }\n\n    /**\n     * Indicates if the local user is the owner of the shared video.\n     * @returns {*|boolean}\n     */\n    isSharedVideoOwner() {\n        return this.from && APP.conference.isLocalId(this.from);\n    }\n\n    /**\n     * Starts shared video by asking user for url, or if its already working\n     * asks whether the user wants to stop sharing the video.\n     */\n    toggleSharedVideo() {\n        if (dialog) {\n            return;\n        }\n\n        if (!this.isSharedVideoShown) {\n            requestVideoLink().then(\n                    url => {\n                        this.emitter.emit(\n                            UIEvents.UPDATE_SHARED_VIDEO, url, 'start');\n                        sendAnalytics(createEvent('started'));\n                    },\n                    err => {\n                        logger.log('SHARED VIDEO CANCELED', err);\n                        sendAnalytics(createEvent('canceled'));\n                    }\n            );\n\n            return;\n        }\n\n        if (APP.conference.isLocalId(this.from)) {\n            showStopVideoPropmpt().then(\n                () => {\n                    // make sure we stop updates for playing before we send stop\n                    // if we stop it after receiving self presence, we can end\n                    // up sending stop playing, and on the other end it will not\n                    // stop\n                    if (this.intervalId) {\n                        clearInterval(this.intervalId);\n                        this.intervalId = null;\n                    }\n                    this.emitter.emit(\n                        UIEvents.UPDATE_SHARED_VIDEO, this.url, 'stop');\n                    sendAnalytics(createEvent('stopped'));\n                },\n                () => {}); // eslint-disable-line no-empty-function\n        } else {\n            APP.UI.messageHandler.showWarning({\n                descriptionKey: 'dialog.alreadySharedVideoMsg',\n                titleKey: 'dialog.alreadySharedVideoTitle'\n            });\n            sendAnalytics(createEvent('already.shared'));\n        }\n    }\n\n    /**\n     * Shows the player component and starts the process that will be sending\n     * updates, if we are the one shared the video.\n     *\n     * @param id the id of the sender of the command\n     * @param url the video url\n     * @param attributes\n     */\n    onSharedVideoStart(id, url, attributes) {\n        if (this.isSharedVideoShown) {\n            return;\n        }\n\n        this.isSharedVideoShown = true;\n\n        // the video url\n        this.url = url;\n\n        // the owner of the video\n        this.from = id;\n\n        this.mutedWithUserInteraction = APP.conference.isLocalAudioMuted();\n\n        // listen for local audio mute events\n        this.localAudioMutedListener = this.onLocalAudioMuted.bind(this);\n        this.emitter.on(UIEvents.AUDIO_MUTED, this.localAudioMutedListener);\n\n        // This code loads the IFrame Player API code asynchronously.\n        const tag = document.createElement('script');\n\n        tag.src = 'https://www.youtube.com/iframe_api';\n        const firstScriptTag = document.getElementsByTagName('script')[0];\n\n        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n\n        // sometimes we receive errors like player not defined\n        // or player.pauseVideo is not a function\n        // we need to operate with player after start playing\n        // self.player will be defined once it start playing\n        // and will process any initial attributes if any\n        this.initialAttributes = attributes;\n\n        const self = this;\n\n        if (self.isPlayerAPILoaded) {\n            window.onYouTubeIframeAPIReady();\n        } else {\n            window.onYouTubeIframeAPIReady = function() {\n                self.isPlayerAPILoaded = true;\n                const showControls\n                    = APP.conference.isLocalId(self.from) ? 1 : 0;\n                const p = new YT.Player('sharedVideoIFrame', {\n                    height: '100%',\n                    width: '100%',\n                    videoId: self.url,\n                    playerVars: {\n                        'origin': location.origin,\n                        'fs': '0',\n                        'autoplay': 0,\n                        'controls': showControls,\n                        'rel': 0\n                    },\n                    events: {\n                        'onReady': onPlayerReady,\n                        'onStateChange': onPlayerStateChange,\n                        'onError': onPlayerError\n                    }\n                });\n\n                // add listener for volume changes\n                p.addEventListener(\n                    'onVolumeChange', 'onVolumeChange');\n\n                if (APP.conference.isLocalId(self.from)) {\n                // adds progress listener that will be firing events\n                // while we are paused and we change the progress of the\n                // video (seeking forward or backward on the video)\n                    p.addEventListener(\n                        'onVideoProgress', 'onVideoProgress');\n                }\n            };\n        }\n\n        /**\n         * Indicates that a change in state has occurred for the shared video.\n         * @param event the event notifying us of the change\n         */\n        window.onPlayerStateChange = function(event) {\n            // eslint-disable-next-line eqeqeq\n            if (event.data == YT.PlayerState.PLAYING) {\n                self.player = event.target;\n\n                if (self.initialAttributes) {\n                    // If a network update has occurred already now is the\n                    // time to process it.\n                    self.processVideoUpdate(\n                        self.player,\n                        self.initialAttributes);\n\n                    self.initialAttributes = null;\n                }\n                self.smartAudioMute();\n                // eslint-disable-next-line eqeqeq\n            } else if (event.data == YT.PlayerState.PAUSED) {\n                self.smartAudioUnmute();\n                sendAnalytics(createEvent('paused'));\n            }\n            // eslint-disable-next-line eqeqeq\n            self.fireSharedVideoEvent(event.data == YT.PlayerState.PAUSED);\n        };\n\n        /**\n         * Track player progress while paused.\n         * @param event\n         */\n        window.onVideoProgress = function(event) {\n            const state = event.target.getPlayerState();\n\n            // eslint-disable-next-line eqeqeq\n            if (state == YT.PlayerState.PAUSED) {\n                self.fireSharedVideoEvent(true);\n            }\n        };\n\n        /**\n         * Gets notified for volume state changed.\n         * @param event\n         */\n        window.onVolumeChange = function(event) {\n            self.fireSharedVideoEvent();\n\n            // let's check, if player is not muted lets mute locally\n            if (event.data.volume > 0 && !event.data.muted) {\n                self.smartAudioMute();\n            } else if (event.data.volume <= 0 || event.data.muted) {\n                self.smartAudioUnmute();\n            }\n            sendAnalytics(createEvent(\n                'volume.changed',\n                {\n                    volume: event.data.volume,\n                    muted: event.data.muted\n                }));\n        };\n\n        window.onPlayerReady = function(event) {\n            const player = event.target;\n\n            // do not relay on autoplay as it is not sending all of the events\n            // in onPlayerStateChange\n\n            player.playVideo();\n\n            const iframe = player.getIframe();\n\n            // eslint-disable-next-line no-use-before-define\n            self.sharedVideo = new SharedVideoContainer(\n                { url,\n                    iframe,\n                    player });\n\n            // prevents pausing participants not sharing the video\n            // to pause the video\n            if (!APP.conference.isLocalId(self.from)) {\n                $('#sharedVideo').css('pointer-events', 'none');\n            }\n\n            VideoLayout.addLargeVideoContainer(\n                SHARED_VIDEO_CONTAINER_TYPE, self.sharedVideo);\n\n            APP.store.dispatch(participantJoined({\n\n                // FIXME The cat is out of the bag already or rather _room is\n                // not private because it is used in multiple other places\n                // already such as AbstractPageReloadOverlay.\n                conference: APP.conference._room,\n                id: self.url,\n                isFakeParticipant: true,\n                name: 'YouTube'\n            }));\n\n            APP.store.dispatch(pinParticipant(self.url));\n\n            // If we are sending the command and we are starting the player\n            // we need to continuously send the player current time position\n            if (APP.conference.isLocalId(self.from)) {\n                self.intervalId = setInterval(\n                    self.fireSharedVideoEvent.bind(self),\n                    updateInterval);\n            }\n        };\n\n        window.onPlayerError = function(event) {\n            logger.error('Error in the player:', event.data);\n\n            // store the error player, so we can remove it\n            self.errorInPlayer = event.target;\n        };\n    }\n\n    /**\n     * Process attributes, whether player needs to be paused or seek.\n     * @param player the player to operate over\n     * @param attributes the attributes with the player state we want\n     */\n    processVideoUpdate(player, attributes) {\n        if (!attributes) {\n            return;\n        }\n\n        // eslint-disable-next-line eqeqeq\n        if (attributes.state == 'playing') {\n\n            const isPlayerPaused\n                = this.player.getPlayerState() === YT.PlayerState.PAUSED;\n\n            // If our player is currently paused force the seek.\n            this.processTime(player, attributes, isPlayerPaused);\n\n            // Process mute.\n            const isAttrMuted = attributes.muted === 'true';\n\n            if (player.isMuted() !== isAttrMuted) {\n                this.smartPlayerMute(isAttrMuted, true);\n            }\n\n            // Process volume\n            if (!isAttrMuted\n                && attributes.volume !== undefined\n                // eslint-disable-next-line eqeqeq\n                && player.getVolume() != attributes.volume) {\n\n                player.setVolume(attributes.volume);\n                logger.info(`Player change of volume:${attributes.volume}`);\n            }\n\n            if (isPlayerPaused) {\n                player.playVideo();\n            }\n            // eslint-disable-next-line eqeqeq\n        } else if (attributes.state == 'pause') {\n            // if its not paused, pause it\n            player.pauseVideo();\n\n            this.processTime(player, attributes, true);\n        }\n    }\n\n    /**\n     * Check for time in attributes and if needed seek in current player\n     * @param player the player to operate over\n     * @param attributes the attributes with the player state we want\n     * @param forceSeek whether seek should be forced\n     */\n    processTime(player, attributes, forceSeek) {\n        if (forceSeek) {\n            logger.info('Player seekTo:', attributes.time);\n            player.seekTo(attributes.time);\n\n            return;\n        }\n\n        // check received time and current time\n        const currentPosition = player.getCurrentTime();\n        const diff = Math.abs(attributes.time - currentPosition);\n\n        // if we drift more than the interval for checking\n        // sync, the interval is in milliseconds\n        if (diff > updateInterval / 1000) {\n            logger.info('Player seekTo:', attributes.time,\n                ' current time is:', currentPosition, ' diff:', diff);\n            player.seekTo(attributes.time);\n        }\n    }\n\n    /**\n     * Checks current state of the player and fire an event with the values.\n     */\n    fireSharedVideoEvent(sendPauseEvent) {\n        // ignore update checks if we are not the owner of the video\n        // or there is still no player defined or we are stopped\n        // (in a process of stopping)\n        if (!APP.conference.isLocalId(this.from) || !this.player\n            || !this.isSharedVideoShown) {\n            return;\n        }\n\n        const state = this.player.getPlayerState();\n\n        // if its paused and haven't been pause - send paused\n\n        if (state === YT.PlayerState.PAUSED && sendPauseEvent) {\n            this.emitter.emit(UIEvents.UPDATE_SHARED_VIDEO,\n                this.url, 'pause', this.player.getCurrentTime());\n        } else if (state === YT.PlayerState.PLAYING) {\n            // if its playing and it was paused - send update with time\n            // if its playing and was playing just send update with time\n            this.emitter.emit(UIEvents.UPDATE_SHARED_VIDEO,\n                this.url, 'playing',\n                this.player.getCurrentTime(),\n                this.player.isMuted(),\n                this.player.getVolume());\n        }\n    }\n\n    /**\n     * Updates video, if it's not playing and needs starting or if it's playing\n     * and needs to be paused.\n     * @param id the id of the sender of the command\n     * @param url the video url\n     * @param attributes\n     */\n    onSharedVideoUpdate(id, url, attributes) {\n        // if we are sending the event ignore\n        if (APP.conference.isLocalId(this.from)) {\n            return;\n        }\n\n        if (!this.isSharedVideoShown) {\n            this.onSharedVideoStart(id, url, attributes);\n\n            return;\n        }\n\n        // eslint-disable-next-line no-negated-condition\n        if (!this.player) {\n            this.initialAttributes = attributes;\n        } else {\n            this.processVideoUpdate(this.player, attributes);\n        }\n    }\n\n    /**\n     * Stop shared video if it is currently showed. If the user started the\n     * shared video is the one in the id (called when user\n     * left and we want to remove video if the user sharing it left).\n     * @param id the id of the sender of the command\n     */\n    onSharedVideoStop(id, attributes) {\n        if (!this.isSharedVideoShown) {\n            return;\n        }\n\n        if (this.from !== id) {\n            return;\n        }\n\n        if (!this.player) {\n            // if there is no error in the player till now,\n            // store the initial attributes\n            if (!this.errorInPlayer) {\n                this.initialAttributes = attributes;\n\n                return;\n            }\n        }\n\n        this.emitter.removeListener(UIEvents.AUDIO_MUTED,\n            this.localAudioMutedListener);\n        this.localAudioMutedListener = null;\n\n        APP.store.dispatch(participantLeft(this.url, APP.conference._room));\n\n        VideoLayout.showLargeVideoContainer(SHARED_VIDEO_CONTAINER_TYPE, false)\n            .then(() => {\n                VideoLayout.removeLargeVideoContainer(\n                    SHARED_VIDEO_CONTAINER_TYPE);\n\n                if (this.player) {\n                    this.player.destroy();\n                    this.player = null;\n                } else if (this.errorInPlayer) {\n                    // if there is an error in player, remove that instance\n                    this.errorInPlayer.destroy();\n                    this.errorInPlayer = null;\n                }\n                this.smartAudioUnmute();\n\n                // revert to original behavior (prevents pausing\n                // for participants not sharing the video to pause it)\n                $('#sharedVideo').css('pointer-events', 'auto');\n\n                this.emitter.emit(\n                    UIEvents.UPDATE_SHARED_VIDEO, null, 'removed');\n            });\n\n        this.url = null;\n        this.isSharedVideoShown = false;\n        this.initialAttributes = null;\n    }\n\n    /**\n     * Receives events for local audio mute/unmute by local user.\n     * @param muted boolena whether it is muted or not.\n     * @param {boolean} indicates if this mute was a result of user interaction,\n     * i.e. pressing the mute button or it was programatically triggerred\n     */\n    onLocalAudioMuted(muted, userInteraction) {\n        if (!this.player) {\n            return;\n        }\n\n        if (muted) {\n            this.mutedWithUserInteraction = userInteraction;\n        } else if (this.player.getPlayerState() !== YT.PlayerState.PAUSED) {\n            this.smartPlayerMute(true, false);\n\n            // Check if we need to update other participants\n            this.fireSharedVideoEvent();\n        }\n    }\n\n    /**\n     * Mutes / unmutes the player.\n     * @param mute true to mute the shared video, false - otherwise.\n     * @param {boolean} Indicates if this mute is a consequence of a network\n     * video update or is called locally.\n     */\n    smartPlayerMute(mute, isVideoUpdate) {\n        if (!this.player.isMuted() && mute) {\n            this.player.mute();\n\n            if (isVideoUpdate) {\n                this.smartAudioUnmute();\n            }\n        } else if (this.player.isMuted() && !mute) {\n            this.player.unMute();\n            if (isVideoUpdate) {\n                this.smartAudioMute();\n            }\n        }\n    }\n\n    /**\n     * Smart mike unmute. If the mike is currently muted and it wasn't muted\n     * by the user via the mike button and the volume of the shared video is on\n     * we're unmuting the mike automatically.\n     */\n    smartAudioUnmute() {\n        if (APP.conference.isLocalAudioMuted()\n            && !this.mutedWithUserInteraction\n            && !this.isSharedVideoVolumeOn()) {\n            sendAnalytics(createEvent('audio.unmuted'));\n            logger.log('Shared video: audio unmuted');\n            this.emitter.emit(UIEvents.AUDIO_MUTED, false, false);\n        }\n    }\n\n    /**\n     * Smart mike mute. If the mike isn't currently muted and the shared video\n     * volume is on we mute the mike.\n     */\n    smartAudioMute() {\n        if (!APP.conference.isLocalAudioMuted()\n            && this.isSharedVideoVolumeOn()) {\n            sendAnalytics(createEvent('audio.muted'));\n            logger.log('Shared video: audio muted');\n            this.emitter.emit(UIEvents.AUDIO_MUTED, true, false);\n        }\n    }\n}\n\n/**\n * Container for shared video iframe.\n */\nclass SharedVideoContainer extends LargeContainer {\n    /**\n     *\n     */\n    constructor({ url, iframe, player }) {\n        super();\n\n        this.$iframe = $(iframe);\n        this.url = url;\n        this.player = player;\n    }\n\n    /**\n     *\n     */\n    show() {\n        const self = this;\n\n\n        return new Promise(resolve => {\n            this.$iframe.fadeIn(300, () => {\n                self.bodyBackground = document.body.style.background;\n                document.body.style.background = 'black';\n                this.$iframe.css({ opacity: 1 });\n                APP.store.dispatch(dockToolbox(true));\n                resolve();\n            });\n        });\n    }\n\n    /**\n     *\n     */\n    hide() {\n        const self = this;\n\n        APP.store.dispatch(dockToolbox(false));\n\n        return new Promise(resolve => {\n            this.$iframe.fadeOut(300, () => {\n                document.body.style.background = self.bodyBackground;\n                this.$iframe.css({ opacity: 0 });\n                resolve();\n            });\n        });\n    }\n\n    /**\n     *\n     */\n    onHoverIn() {\n        APP.store.dispatch(showToolbox());\n    }\n\n    /**\n     *\n     */\n    get id() {\n        return this.url;\n    }\n\n    /**\n     *\n     */\n    resize(containerWidth, containerHeight) {\n        let height, width;\n\n        if (interfaceConfig.VERTICAL_FILMSTRIP) {\n            height = containerHeight - getToolboxHeight();\n            width = containerWidth - Filmstrip.getVerticalFilmstripWidth();\n        } else {\n            height = containerHeight - Filmstrip.getFilmstripHeight();\n            width = containerWidth;\n        }\n\n        this.$iframe.width(width).height(height);\n    }\n\n    /**\n     * @return {boolean} do not switch on dominant speaker event if on stage.\n     */\n    stayOnStage() {\n        return false;\n    }\n}\n\n/**\n * Checks if given string is youtube url.\n * @param {string} url string to check.\n * @returns {boolean}\n */\nfunction getYoutubeLink(url) {\n    const p = /^(?:https?:\\/\\/)?(?:www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;// eslint-disable-line max-len\n\n\n    return url.match(p) ? RegExp.$1 : false;\n}\n\n/**\n * Ask user if he want to close shared video.\n */\nfunction showStopVideoPropmpt() {\n    return new Promise((resolve, reject) => {\n        const submitFunction = function(e, v) {\n            if (v) {\n                resolve();\n            } else {\n                reject();\n            }\n        };\n\n        const closeFunction = function() {\n            dialog = null;\n        };\n\n        dialog = APP.UI.messageHandler.openTwoButtonDialog({\n            titleKey: 'dialog.removeSharedVideoTitle',\n            msgKey: 'dialog.removeSharedVideoMsg',\n            leftButtonKey: 'dialog.Remove',\n            submitFunction,\n            closeFunction\n        });\n    });\n}\n\n/**\n * Ask user for shared video url to share with others.\n * Dialog validates client input to allow only youtube urls.\n */\nfunction requestVideoLink() {\n    const i18n = APP.translation;\n    const cancelButton = i18n.generateTranslationHTML('dialog.Cancel');\n    const shareButton = i18n.generateTranslationHTML('dialog.Share');\n    const backButton = i18n.generateTranslationHTML('dialog.Back');\n    const linkError\n        = i18n.generateTranslationHTML('dialog.shareVideoLinkError');\n\n    return new Promise((resolve, reject) => {\n        dialog = APP.UI.messageHandler.openDialogWithStates({\n            state0: {\n                titleKey: 'dialog.shareVideoTitle',\n                html: `\n                    <input name='sharedVideoUrl' type='text'\n                           class='input-control'\n                           data-i18n='[placeholder]defaultLink'\n                           autofocus>`,\n                persistent: false,\n                buttons: [\n                    { title: cancelButton,\n                        value: false },\n                    { title: shareButton,\n                        value: true }\n                ],\n                focus: ':input:first',\n                defaultButton: 1,\n                submit(e, v, m, f) { // eslint-disable-line max-params\n                    e.preventDefault();\n                    if (!v) {\n                        reject('cancelled');\n                        dialog.close();\n\n                        return;\n                    }\n\n                    const sharedVideoUrl = f.sharedVideoUrl;\n\n                    if (!sharedVideoUrl) {\n                        return;\n                    }\n\n                    const urlValue\n                        = encodeURI(UIUtil.escapeHtml(sharedVideoUrl));\n                    const yVideoId = getYoutubeLink(urlValue);\n\n                    if (!yVideoId) {\n                        dialog.goToState('state1');\n\n                        return false;\n                    }\n\n                    resolve(yVideoId);\n                    dialog.close();\n                }\n            },\n\n            state1: {\n                titleKey: 'dialog.shareVideoTitle',\n                html: linkError,\n                persistent: false,\n                buttons: [\n                    { title: cancelButton,\n                        value: false },\n                    { title: backButton,\n                        value: true }\n                ],\n                focus: ':input:first',\n                defaultButton: 1,\n                submit(e, v) {\n                    e.preventDefault();\n                    if (v === 0) {\n                        reject();\n                        dialog.close();\n                    } else {\n                        dialog.goToState('state0');\n                    }\n                }\n            }\n        }, {\n            close() {\n                dialog = null;\n            }\n        }, {\n            url: defaultSharedVideoLink\n        });\n    });\n}\n","/**\n * Action to signal that the local client has started to perform recording,\n * (as in: {@code RecordingAdapter} is actively collecting audio data).\n *\n * {\n *     type: LOCAL_RECORDING_ENGAGED,\n *     recordingEngagedAt: Date\n * }\n */\nexport const LOCAL_RECORDING_ENGAGED = 'LOCAL_RECORDING_ENGAGED';\n\n/**\n * Action to signal that the local client has stopped recording,\n * (as in: {@code RecordingAdapter} is no longer collecting audio data).\n *\n * {\n *     type: LOCAL_RECORDING_UNENGAGED\n * }\n */\nexport const LOCAL_RECORDING_UNENGAGED = 'LOCAL_RECORDING_UNENGAGED';\n\n/**\n * Action to update {@code LocalRecordingInfoDialog} with stats from all\n * clients.\n *\n * {\n *     type: LOCAL_RECORDING_STATS_UPDATE,\n *     stats: Object\n * }\n */\nexport const LOCAL_RECORDING_STATS_UPDATE\n    = 'LOCAL_RECORDING_STATS_UPDATE';\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { IconRec } from '../../base/icons';\nimport { ToolbarButton } from '../../toolbox';\n\n/**\n * The type of the React {@code Component} state of\n * {@link LocalRecordingButton}.\n */\ntype Props = {\n\n    /**\n     * Whether or not {@link LocalRecordingInfoDialog} should be displayed.\n     */\n    isDialogShown: boolean,\n\n    /**\n     * Callback function called when {@link LocalRecordingButton} is clicked.\n     */\n    onClick: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n * A React {@code Component} for opening or closing the\n * {@code LocalRecordingInfoDialog}.\n *\n * @extends Component\n */\nclass LocalRecordingButton extends Component<Props> {\n\n    /**\n     * Initializes a new {@code LocalRecordingButton} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { isDialogShown, t } = this.props;\n\n        return (\n            <ToolbarButton\n                accessibilityLabel\n                    = { t('toolbar.accessibilityLabel.localRecording') }\n                icon = { IconRec }\n                onClick = { this._onClick }\n                toggled = { isDialogShown }\n                tooltip = { t('localRecording.dialogTitle') } />\n        );\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Callback invoked when the Toolbar button is clicked.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClick() {\n        this.props.onClick();\n    }\n}\n\nexport default translate(LocalRecordingButton);\n","// @flow\n\nimport Tooltip from '@atlaskit/tooltip';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n/index';\nimport { CircularLabel } from '../../base/label/index';\nimport { connect } from '../../base/redux';\n\n\n/**\n * The type of the React {@code Component} props of {@link LocalRecordingLabel}.\n */\ntype Props = {\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * Whether local recording is engaged or not.\n     */\n    isEngaged: boolean\n};\n\n/**\n * React Component for displaying a label when local recording is engaged.\n *\n * @extends Component\n */\nclass LocalRecordingLabel extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (!this.props.isEngaged) {\n            return null;\n        }\n\n        return (\n            <Tooltip\n                content = { this.props.t('localRecording.labelToolTip') }\n                position = { 'left' }>\n                <CircularLabel\n                    className = 'local-rec'\n                    label = { this.props.t('localRecording.label') } />\n            </Tooltip>\n        );\n    }\n\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code LocalRecordingLabel} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n * }}\n */\nfunction _mapStateToProps(state) {\n    const { isEngaged } = state['features/local-recording'];\n\n    return {\n        isEngaged\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(LocalRecordingLabel));\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/local-recording');\n","import JitsiMeetJS from '../../base/lib-jitsi-meet';\n\n/**\n * Base class for recording backends.\n */\nexport class RecordingAdapter {\n\n    /**\n     * Starts recording.\n     *\n     * @param {string} micDeviceId - The microphone to record on.\n     * @returns {Promise}\n     */\n    start(/* eslint-disable no-unused-vars */\n            micDeviceId/* eslint-enable no-unused-vars */) {\n        throw new Error('Not implemented');\n    }\n\n    /**\n     * Stops recording.\n     *\n     * @returns {Promise}\n     */\n    stop() {\n        throw new Error('Not implemented');\n    }\n\n    /**\n     * Export the recorded and encoded audio file.\n     *\n     * @returns {Promise<Object>}\n     */\n    exportRecordedData() {\n        throw new Error('Not implemented');\n    }\n\n    /**\n     * Mutes or unmutes the current recording.\n     *\n     * @param {boolean} muted - Whether to mute or to unmute.\n     * @returns {Promise}\n     */\n    setMuted(/* eslint-disable no-unused-vars */\n            muted/* eslint-enable no-unused-vars */) {\n        throw new Error('Not implemented');\n    }\n\n    /**\n     * Changes the current microphone.\n     *\n     * @param {string} micDeviceId - The new microphone device ID.\n     * @returns {Promise}\n     */\n    setMicDevice(/* eslint-disable no-unused-vars */\n            micDeviceId/* eslint-enable no-unused-vars */) {\n        throw new Error('Not implemented');\n    }\n\n    /**\n     * Helper method for getting an audio {@code MediaStream}. Use this instead\n     * of calling browser APIs directly.\n     *\n     * @protected\n     * @param {number} micDeviceId - The ID of the current audio device.\n     * @returns {Promise}\n     */\n    _getAudioStream(micDeviceId) {\n        return JitsiMeetJS.createLocalTracks({\n            devices: [ 'audio' ],\n            micDeviceId\n        }).then(result => {\n            if (result.length !== 1) {\n                throw new Error('Unexpected number of streams '\n                    + 'from createLocalTracks.');\n            }\n            const mediaStream = result[0].stream;\n\n            if (mediaStream === undefined) {\n                throw new Error('Failed to create local track.');\n            }\n\n            return mediaStream;\n        });\n    }\n}\n","import logger from '../logger';\nimport { RecordingAdapter } from './RecordingAdapter';\n\n/**\n * Recording adapter that uses {@code MediaRecorder} (default browser encoding\n * with Opus codec).\n */\nexport class OggAdapter extends RecordingAdapter {\n\n    /**\n     * Instance of MediaRecorder.\n     * @private\n     */\n    _mediaRecorder = null;\n\n    /**\n     * Initialization promise.\n     * @private\n     */\n    _initPromise = null;\n\n    /**\n     * The recorded audio file.\n     * @private\n     */\n    _recordedData = null;\n\n    /**\n     * Implements {@link RecordingAdapter#start()}.\n     *\n     * @inheritdoc\n     */\n    start(micDeviceId) {\n        if (!this._initPromise) {\n            this._initPromise = this._initialize(micDeviceId);\n        }\n\n        return this._initPromise.then(() =>\n            new Promise(resolve => {\n                this._mediaRecorder.start();\n                resolve();\n            })\n        );\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#stop()}.\n     *\n     * @inheritdoc\n     */\n    stop() {\n        return new Promise(\n            resolve => {\n                this._mediaRecorder.onstop = () => resolve();\n                this._mediaRecorder.stop();\n            }\n        );\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#exportRecordedData()}.\n     *\n     * @inheritdoc\n     */\n    exportRecordedData() {\n        if (this._recordedData !== null) {\n            return Promise.resolve({\n                data: this._recordedData,\n                format: 'ogg'\n            });\n        }\n\n        return Promise.reject('No audio data recorded.');\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#setMuted()}.\n     *\n     * @inheritdoc\n     */\n    setMuted(muted) {\n        const shouldEnable = !muted;\n\n        if (!this._stream) {\n            return Promise.resolve();\n        }\n\n        const track = this._stream.getAudioTracks()[0];\n\n        if (!track) {\n            logger.error('Cannot mute/unmute. Track not found!');\n\n            return Promise.resolve();\n        }\n\n        if (track.enabled !== shouldEnable) {\n            track.enabled = shouldEnable;\n            logger.log(muted ? 'Mute' : 'Unmute');\n        }\n\n        return Promise.resolve();\n    }\n\n    /**\n     * Initialize the adapter.\n     *\n     * @private\n     * @param {string} micDeviceId - The current microphone device ID.\n     * @returns {Promise}\n     */\n    _initialize(micDeviceId) {\n        if (this._mediaRecorder) {\n            return Promise.resolve();\n        }\n\n        return new Promise((resolve, error) => {\n            this._getAudioStream(micDeviceId)\n            .then(stream => {\n                this._stream = stream;\n                this._mediaRecorder = new MediaRecorder(stream);\n                this._mediaRecorder.ondataavailable\n                    = e => this._saveMediaData(e.data);\n                resolve();\n            })\n            .catch(err => {\n                logger.error(`Error calling getUserMedia(): ${err}`);\n                error();\n            });\n        });\n    }\n\n    /**\n     * Callback for storing the encoded data.\n     *\n     * @private\n     * @param {Blob} data - Encoded data.\n     * @returns {void}\n     */\n    _saveMediaData(data) {\n        this._recordedData = data;\n    }\n}\n","import logger from '../logger';\nimport { RecordingAdapter } from './RecordingAdapter';\n\n/**\n * Base class for {@code AudioContext}-based recording adapters.\n */\nexport class AbstractAudioContextAdapter extends RecordingAdapter {\n    /**\n     * The {@code AudioContext} instance.\n     */\n    _audioContext = null;\n\n    /**\n     * The {@code ScriptProcessorNode} instance.\n     */\n    _audioProcessingNode = null;\n\n    /**\n     * The {@code MediaStreamAudioSourceNode} instance.\n     */\n    _audioSource = null;\n\n    /**\n     * The {@code MediaStream} instance, representing the current audio device.\n     */\n    _stream = null;\n\n    /**\n     * Sample rate.\n     */\n    _sampleRate = 44100;\n\n    /**\n     * Constructor.\n     */\n    constructor() {\n        super();\n\n        // sampleRate is browser and OS dependent.\n        // Setting sampleRate explicitly is in the specs but not implemented\n        // by browsers.\n        // See: https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/\n        //    AudioContext#Browser_compatibility\n        // And https://bugs.chromium.org/p/chromium/issues/detail?id=432248\n\n        this._audioContext = new AudioContext();\n        this._sampleRate = this._audioContext.sampleRate;\n        logger.log(`Current sampleRate ${this._sampleRate}.`);\n    }\n\n    /**\n     * Sets up the audio graph in the AudioContext.\n     *\n     * @protected\n     * @param {string} micDeviceId - The current microphone device ID.\n     * @param {Function} callback - Callback function to\n     * handle AudioProcessingEvents.\n     * @returns {Promise}\n     */\n    _initializeAudioContext(micDeviceId, callback) {\n        if (typeof callback !== 'function') {\n            return Promise.reject('a callback function is required.');\n        }\n\n        return this._getAudioStream(micDeviceId)\n        .then(stream => {\n            this._stream = stream;\n            this._audioSource\n                = this._audioContext.createMediaStreamSource(stream);\n            this._audioProcessingNode\n                = this._audioContext.createScriptProcessor(4096, 1, 1);\n            this._audioProcessingNode.onaudioprocess = callback;\n            logger.debug('AudioContext is set up.');\n        })\n        .catch(err => {\n            logger.error(`Error calling getUserMedia(): ${err}`);\n\n            return Promise.reject(err);\n        });\n    }\n\n    /**\n     * Connects the nodes in the {@code AudioContext} to start the flow of\n     * audio data.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _connectAudioGraph() {\n        this._audioSource.connect(this._audioProcessingNode);\n        this._audioProcessingNode.connect(this._audioContext.destination);\n    }\n\n    /**\n     * Disconnects the nodes in the {@code AudioContext}.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _disconnectAudioGraph() {\n        this._audioProcessingNode.onaudioprocess = undefined;\n        this._audioProcessingNode.disconnect();\n        this._audioSource.disconnect();\n    }\n\n    /**\n     * Replaces the current microphone MediaStream.\n     *\n     * @protected\n     * @param {string} micDeviceId - New microphone ID.\n     * @returns {Promise}\n     */\n    _replaceMic(micDeviceId) {\n        if (this._audioContext && this._audioProcessingNode) {\n            return this._getAudioStream(micDeviceId).then(newStream => {\n                const newSource = this._audioContext\n                    .createMediaStreamSource(newStream);\n\n                this._audioSource.disconnect();\n                newSource.connect(this._audioProcessingNode);\n                this._stream = newStream;\n                this._audioSource = newSource;\n            });\n        }\n\n        return Promise.resolve();\n    }\n}\n","import logger from '../logger';\nimport { AbstractAudioContextAdapter } from './AbstractAudioContextAdapter';\n\nconst WAV_BITS_PER_SAMPLE = 16;\n\n/**\n * Recording adapter for raw WAVE format.\n */\nexport class WavAdapter extends AbstractAudioContextAdapter {\n\n    /**\n     * Length of the WAVE file, in number of samples.\n     */\n    _wavLength = 0;\n\n    /**\n     * The {@code ArrayBuffer}s that stores the PCM bits.\n     */\n    _wavBuffers = [];\n\n    /**\n     * Whether or not the {@code WavAdapter} is in a ready state.\n     */\n    _isInitialized = false;\n\n    /**\n     * Initialization promise.\n     */\n    _initPromise = null;\n\n    /**\n     * Constructor.\n     */\n    constructor() {\n        super();\n        this._onAudioProcess = this._onAudioProcess.bind(this);\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#start()}.\n     *\n     * @inheritdoc\n     */\n    start(micDeviceId) {\n        if (!this._initPromise) {\n            this._initPromise = this._initialize(micDeviceId);\n        }\n\n        return this._initPromise.then(() => {\n            this._wavBuffers = [];\n            this._wavLength = 0;\n\n            this._connectAudioGraph();\n        });\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#stop()}.\n     *\n     * @inheritdoc\n     */\n    stop() {\n        this._disconnectAudioGraph();\n        this._data = this._exportMonoWAV(this._wavBuffers, this._wavLength);\n        this._audioProcessingNode = null;\n        this._audioSource = null;\n        this._isInitialized = false;\n\n        return Promise.resolve();\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#exportRecordedData()}.\n     *\n     * @inheritdoc\n     */\n    exportRecordedData() {\n        if (this._data !== null) {\n            return Promise.resolve({\n                data: this._data,\n                format: 'wav'\n            });\n        }\n\n        return Promise.reject('No audio data recorded.');\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#setMuted()}.\n     *\n     * @inheritdoc\n     */\n    setMuted(muted) {\n        const shouldEnable = !muted;\n\n        if (!this._stream) {\n            return Promise.resolve();\n        }\n\n        const track = this._stream.getAudioTracks()[0];\n\n        if (!track) {\n            logger.error('Cannot mute/unmute. Track not found!');\n\n            return Promise.resolve();\n        }\n\n        if (track.enabled !== shouldEnable) {\n            track.enabled = shouldEnable;\n            logger.log(muted ? 'Mute' : 'Unmute');\n        }\n\n        return Promise.resolve();\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#setMicDevice()}.\n     *\n     * @inheritdoc\n     */\n    setMicDevice(micDeviceId) {\n        return this._replaceMic(micDeviceId);\n    }\n\n    /**\n     * Creates a WAVE file header.\n     *\n     * @private\n     * @param {number} dataLength - Length of the payload (PCM data), in bytes.\n     * @returns {Uint8Array}\n     */\n    _createWavHeader(dataLength) {\n        // adapted from\n        // https://github.com/mmig/speech-to-flac/blob/master/encoder.js\n\n        // ref: http://soundfile.sapp.org/doc/WaveFormat/\n\n        // create our WAVE file header\n        const buffer = new ArrayBuffer(44);\n        const view = new DataView(buffer);\n\n        // RIFF chunk descriptor\n        writeUTFBytes(view, 0, 'RIFF');\n\n        // set file size at the end\n        writeUTFBytes(view, 8, 'WAVE');\n\n        // FMT sub-chunk\n        writeUTFBytes(view, 12, 'fmt ');\n        view.setUint32(16, 16, true);\n        view.setUint16(20, 1, true);\n\n        // NumChannels\n        view.setUint16(22, 1, true);\n\n        // SampleRate\n        view.setUint32(24, this._sampleRate, true);\n\n        // ByteRate\n        view.setUint32(28,\n            Number(this._sampleRate) * 1 * WAV_BITS_PER_SAMPLE / 8, true);\n\n        // BlockAlign\n        view.setUint16(32, 1 * Number(WAV_BITS_PER_SAMPLE) / 8, true);\n\n        view.setUint16(34, WAV_BITS_PER_SAMPLE, true);\n\n        // data sub-chunk\n        writeUTFBytes(view, 36, 'data');\n\n        // file length\n        view.setUint32(4, 32 + dataLength, true);\n\n        // data chunk length\n        view.setUint32(40, dataLength, true);\n\n        return new Uint8Array(buffer);\n    }\n\n    /**\n     * Initialize the adapter.\n     *\n     * @private\n     * @param {string} micDeviceId - The current microphone device ID.\n     * @returns {Promise}\n     */\n    _initialize(micDeviceId) {\n        if (this._isInitialized) {\n            return Promise.resolve();\n        }\n\n        return this._initializeAudioContext(micDeviceId, this._onAudioProcess)\n            .then(() => {\n                this._isInitialized = true;\n            });\n    }\n\n    /**\n     * Callback function for handling AudioProcessingEvents.\n     *\n     * @private\n     * @param {AudioProcessingEvent} e - The event containing the raw PCM.\n     * @returns {void}\n     */\n    _onAudioProcess(e) {\n        // See: https://developer.mozilla.org/en-US/docs/Web/API/\n        //      AudioBuffer/getChannelData\n        // The returned value is an Float32Array.\n        const channelLeft = e.inputBuffer.getChannelData(0);\n\n        // Need to copy the Float32Array:\n        // unlike passing to WebWorker, this data is passed by reference,\n        // so we need to copy it, otherwise the resulting audio file will be\n        // just repeating the last segment.\n        this._wavBuffers.push(new Float32Array(channelLeft));\n        this._wavLength += channelLeft.length;\n    }\n\n    /**\n     * Combines buffers and export to a wav file.\n     *\n     * @private\n     * @param {Float32Array[]} buffers - The stored buffers.\n     * @param {number} length - Total length (number of samples).\n     * @returns {Blob}\n     */\n    _exportMonoWAV(buffers, length) {\n        const dataLength = length * 2; // each sample = 16 bit = 2 bytes\n        const buffer = new ArrayBuffer(44 + dataLength);\n        const view = new DataView(buffer);\n\n        // copy WAV header data into the array buffer\n        const header = this._createWavHeader(dataLength);\n        const len = header.length;\n\n        for (let i = 0; i < len; ++i) {\n            view.setUint8(i, header[i]);\n        }\n\n        // write audio data\n        floatTo16BitPCM(view, 44, buffers);\n\n        return new Blob([ view ], { type: 'audio/wav' });\n    }\n}\n\n\n/**\n * Helper function. Writes a UTF string to memory\n * using big endianness. Required by WAVE headers.\n *\n * @param {ArrayBuffer} view - The view to memory.\n * @param {number} offset - Offset.\n * @param {string} string - The string to be written.\n * @returns {void}\n */\nfunction writeUTFBytes(view, offset, string) {\n    const lng = string.length;\n\n    // convert to big endianness\n    for (let i = 0; i < lng; ++i) {\n        view.setUint8(offset + i, string.charCodeAt(i));\n    }\n}\n\n/**\n * Helper function for converting Float32Array to Int16Array.\n *\n * @param {DataView} output - View to the output buffer.\n * @param {number} offset - The offset in output buffer to write from.\n * @param {Float32Array[]} inputBuffers - The input buffers.\n * @returns {void}\n */\nfunction floatTo16BitPCM(output, offset, inputBuffers) {\n\n    let i, j;\n    let input, s, sampleCount;\n    const bufferCount = inputBuffers.length;\n    let o = offset;\n\n    for (i = 0; i < bufferCount; ++i) {\n        input = inputBuffers[i];\n        sampleCount = input.length;\n        for (j = 0; j < sampleCount; ++j, o += 2) {\n            s = Math.max(-1, Math.min(1, input[j]));\n            output.setInt16(o, s < 0 ? s * 0x8000 : s * 0x7FFF, true);\n        }\n    }\n}\n","/**\n * Types of messages that are passed between the main thread and the WebWorker\n * ({@code flacEncodeWorker})\n */\n\n// Messages sent by the main thread\n\n/**\n * Message type that signals the termination of encoding,\n * after which no new audio bits should be sent to the\n * WebWorker.\n */\nexport const MAIN_THREAD_FINISH = 'MAIN_THREAD_FINISH';\n\n/**\n * Message type that carries initial parameters for\n * the WebWorker.\n */\nexport const MAIN_THREAD_INIT = 'MAIN_THREAD_INIT';\n\n/**\n * Message type that carries the newly received raw audio bits\n * for the WebWorker to encode.\n */\nexport const MAIN_THREAD_NEW_DATA_ARRIVED = 'MAIN_THREAD_NEW_DATA_ARRIVED';\n\n// Messages sent by the WebWorker\n\n/**\n * Message type that signals libflac is ready to receive audio bits.\n */\nexport const WORKER_LIBFLAC_READY = 'WORKER_LIBFLAC_READY';\n\n/**\n * Message type that carries the encoded FLAC file as a Blob.\n */\nexport const WORKER_BLOB_READY = 'WORKER_BLOB_READY';\n\n// Messages sent by either the main thread or the WebWorker\n\n/**\n * Debug messages.\n */\nexport const DEBUG = 'DEBUG';\n","import logger from '../../logger';\nimport {\n    DEBUG,\n    MAIN_THREAD_FINISH,\n    MAIN_THREAD_INIT,\n    MAIN_THREAD_NEW_DATA_ARRIVED,\n    WORKER_BLOB_READY,\n    WORKER_LIBFLAC_READY\n} from './messageTypes';\n\nimport { AbstractAudioContextAdapter } from '../AbstractAudioContextAdapter';\n\n/**\n * Recording adapter that uses libflac.js in the background.\n */\nexport class FlacAdapter extends AbstractAudioContextAdapter {\n\n    /**\n     * Instance of WebWorker (flacEncodeWorker).\n     */\n    _encoder = null;\n\n    /**\n     * Resolve function of the Promise returned by {@code stop()}.\n     * This is called after the WebWorker sends back {@code WORKER_BLOB_READY}.\n     */\n    _stopPromiseResolver = null;\n\n    /**\n     * Resolve function of the Promise that initializes the flacEncodeWorker.\n     */\n    _initWorkerPromiseResolver = null;\n\n    /**\n     * Initialization promise.\n     */\n    _initPromise = null;\n\n    /**\n     * Constructor.\n     */\n    constructor() {\n        super();\n        this._onAudioProcess = this._onAudioProcess.bind(this);\n        this._onWorkerMessage = this._onWorkerMessage.bind(this);\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#start()}.\n     *\n     * @inheritdoc\n     */\n    start(micDeviceId) {\n        if (!this._initPromise) {\n            this._initPromise = this._initialize(micDeviceId);\n        }\n\n        return this._initPromise.then(() => {\n            this._connectAudioGraph();\n        });\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#stop()}.\n     *\n     * @inheritdoc\n     */\n    stop() {\n        if (!this._encoder) {\n            logger.error('Attempting to stop but has nothing to stop.');\n\n            return Promise.reject();\n        }\n\n        return new Promise(resolve => {\n            this._initPromise = null;\n            this._disconnectAudioGraph();\n            this._stopPromiseResolver = resolve;\n            this._encoder.postMessage({\n                command: MAIN_THREAD_FINISH\n            });\n        });\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#exportRecordedData()}.\n     *\n     * @inheritdoc\n     */\n    exportRecordedData() {\n        if (this._data !== null) {\n            return Promise.resolve({\n                data: this._data,\n                format: 'flac'\n            });\n        }\n\n        return Promise.reject('No audio data recorded.');\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#setMuted()}.\n     *\n     * @inheritdoc\n     */\n    setMuted(muted) {\n        const shouldEnable = !muted;\n\n        if (!this._stream) {\n            return Promise.resolve();\n        }\n\n        const track = this._stream.getAudioTracks()[0];\n\n        if (!track) {\n            logger.error('Cannot mute/unmute. Track not found!');\n\n            return Promise.resolve();\n        }\n\n        if (track.enabled !== shouldEnable) {\n            track.enabled = shouldEnable;\n            logger.log(muted ? 'Mute' : 'Unmute');\n        }\n\n        return Promise.resolve();\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#setMicDevice()}.\n     *\n     * @inheritdoc\n     */\n    setMicDevice(micDeviceId) {\n        return this._replaceMic(micDeviceId);\n    }\n\n    /**\n     * Initialize the adapter.\n     *\n     * @private\n     * @param {string} micDeviceId - The current microphone device ID.\n     * @returns {Promise}\n     */\n    _initialize(micDeviceId) {\n        if (this._encoder !== null) {\n            return Promise.resolve();\n        }\n\n        const promiseInitWorker = new Promise((resolve, reject) => {\n            try {\n                this._loadWebWorker();\n            } catch (e) {\n                reject();\n            }\n\n            // Save the Promise's resolver to resolve it later.\n            // This Promise is only resolved in _onWorkerMessage when we\n            // receive WORKER_LIBFLAC_READY from the WebWorker.\n            this._initWorkerPromiseResolver = resolve;\n\n            // set up listener for messages from the WebWorker\n            this._encoder.onmessage = this._onWorkerMessage;\n\n            this._encoder.postMessage({\n                command: MAIN_THREAD_INIT,\n                config: {\n                    sampleRate: this._sampleRate,\n                    bps: 16\n                }\n            });\n        });\n\n        // Arrow function is used here because we want AudioContext to be\n        // initialized only **after** promiseInitWorker is resolved.\n        return promiseInitWorker\n            .then(() =>\n                this._initializeAudioContext(\n                    micDeviceId,\n                    this._onAudioProcess\n                ));\n    }\n\n    /**\n     * Callback function for handling AudioProcessingEvents.\n     *\n     * @private\n     * @param {AudioProcessingEvent} e - The event containing the raw PCM.\n     * @returns {void}\n     */\n    _onAudioProcess(e) {\n        // Delegates to the WebWorker to do the encoding.\n        // The return of getChannelData() is a Float32Array,\n        // each element representing one sample.\n        const channelLeft = e.inputBuffer.getChannelData(0);\n\n        this._encoder.postMessage({\n            command: MAIN_THREAD_NEW_DATA_ARRIVED,\n            buf: channelLeft\n        });\n    }\n\n    /**\n     * Handler for messages from flacEncodeWorker.\n     *\n     * @private\n     * @param {MessageEvent} e - The event sent by the WebWorker.\n     * @returns {void}\n     */\n    _onWorkerMessage(e) {\n        switch (e.data.command) {\n        case WORKER_BLOB_READY:\n            // Received a Blob representing an encoded FLAC file.\n            this._data = e.data.buf;\n            if (this._stopPromiseResolver !== null) {\n                this._stopPromiseResolver();\n                this._stopPromiseResolver = null;\n                this._encoder.terminate();\n                this._encoder = null;\n            }\n            break;\n        case DEBUG:\n            logger.log(e.data);\n            break;\n        case WORKER_LIBFLAC_READY:\n            logger.log('libflac is ready.');\n            this._initWorkerPromiseResolver();\n            break;\n        default:\n            logger.error(\n                `Unknown event\n                from encoder (WebWorker): \"${e.data.command}\"!`);\n            break;\n        }\n    }\n\n    /**\n     * Loads the WebWorker.\n     *\n     * @private\n     * @returns {void}\n     */\n    _loadWebWorker() {\n        // FIXME: Workaround for different file names in development/\n        // production environments.\n        // We cannot import flacEncodeWorker as a webpack module,\n        // because it is in a different bundle and should be lazy-loaded\n        // only when flac recording is in use.\n        try {\n            // try load the minified version first\n            this._encoder = new Worker('/libs/flacEncodeWorker.min.js', { name: 'FLAC encoder worker' });\n        } catch (exception1) {\n            // if failed, try unminified version\n            try {\n                this._encoder = new Worker('/libs/flacEncodeWorker.js', { name: 'FLAC encoder worker' });\n            } catch (exception2) {\n                throw new Error('Failed to load flacEncodeWorker.');\n            }\n        }\n    }\n}\n","/* @flow */\n\nimport { jitsiLocalStorage } from 'js-utils';\n\nimport logger from '../logger';\n\n/**\n * Gets high precision system time.\n *\n * @returns {number}\n */\nfunction highPrecisionTime(): number {\n    return window.performance\n        && window.performance.now\n        && window.performance.timing\n        && window.performance.timing.navigationStart\n        ? window.performance.now() + window.performance.timing.navigationStart\n        : Date.now();\n}\n\n// Have to use string literal here, instead of Symbols,\n// because these values need to be JSON-serializible.\n\n/**\n * Types of SessionEvents.\n */\nconst SessionEventType = Object.freeze({\n    /**\n     * Start of local recording session. This is recorded when the\n     * {@code RecordingController} receives the signal to start local recording,\n     * before the actual adapter is engaged.\n     */\n    SESSION_STARTED: 'SESSION_STARTED',\n\n    /**\n     * Start of a continuous segment. This is recorded when the adapter is\n     * engaged. Can happen multiple times in a local recording session,\n     * due to browser reloads or switching of recording device.\n     */\n    SEGMENT_STARTED: 'SEGMENT_STARTED',\n\n    /**\n     * End of a continuous segment. This is recorded when the adapter unengages.\n     */\n    SEGMENT_ENDED: 'SEGMENT_ENDED'\n});\n\n/**\n * Represents an event during a local recording session.\n * The event can be either that the adapter started recording, or stopped\n * recording.\n */\ntype SessionEvent = {\n\n    /**\n     * The type of the event.\n     * Should be one of the values in {@code SessionEventType}.\n     */\n    type: string,\n\n    /**\n     * The timestamp of the event.\n     */\n    timestamp: number\n};\n\n/**\n * Representation of the metadata of a segment.\n */\ntype SegmentInfo = {\n\n    /**\n     * The length of gap before this segment, in milliseconds.\n     * mull if unknown.\n     */\n    gapBefore?: ?number,\n\n    /**\n     * The duration of this segment, in milliseconds.\n     * null if unknown or the segment is not finished.\n     */\n    duration?: ?number,\n\n    /**\n     * The start time, in milliseconds.\n     */\n    start?: ?number,\n\n    /**\n     * The end time, in milliseconds.\n     * null if unknown, the segment is not finished, or the recording is\n     * interrupted (e.g. browser reload).\n     */\n    end?: ?number\n};\n\n/**\n * Representation of metadata of a local recording session.\n */\ntype SessionInfo = {\n\n    /**\n     * The session token.\n     */\n    sessionToken: string,\n\n    /**\n     * The start time of the session.\n     */\n    start: ?number,\n\n    /**\n     * The recording format.\n     */\n    format: string,\n\n    /**\n     * Array of segments in the session.\n     */\n    segments: SegmentInfo[]\n}\n\n/**\n * {@code localStorage} key.\n */\nconst LOCAL_STORAGE_KEY = 'localRecordingMetadataVersion1';\n\n/**\n * SessionManager manages the metadata of each segment during each local\n * recording session.\n *\n * A segment is a continous portion of recording done using the same adapter\n * on the same microphone device.\n *\n * Browser refreshes, switching of microphone will cause new segments to be\n * created.\n *\n * A recording session can consist of one or more segments.\n */\nclass SessionManager {\n\n    /**\n     * The metadata.\n     */\n    _sessionsMetadata = {\n    };\n\n    /**\n     * Constructor.\n     */\n    constructor() {\n        this._loadMetadata();\n    }\n\n    /**\n     * Loads metadata from localStorage.\n     *\n     * @private\n     * @returns {void}\n     */\n    _loadMetadata() {\n        const dataStr = jitsiLocalStorage.getItem(LOCAL_STORAGE_KEY);\n\n        if (dataStr !== null) {\n            try {\n                const dataObject = JSON.parse(dataStr);\n\n                this._sessionsMetadata = dataObject;\n            } catch (e) {\n                logger.warn('Failed to parse localStorage item.');\n\n                return;\n            }\n        }\n    }\n\n    /**\n     * Persists metadata to localStorage.\n     *\n     * @private\n     * @returns {void}\n     */\n    _saveMetadata() {\n        jitsiLocalStorage.setItem(LOCAL_STORAGE_KEY,\n            JSON.stringify(this._sessionsMetadata));\n    }\n\n    /**\n     * Creates a session if not exists.\n     *\n     * @param {string} sessionToken - The local recording session token.\n     * @param {string} format - The local recording format.\n     * @returns {void}\n     */\n    createSession(sessionToken: string, format: string) {\n        if (this._sessionsMetadata[sessionToken] === undefined) {\n            this._sessionsMetadata[sessionToken] = {\n                format,\n                events: []\n            };\n            this._sessionsMetadata[sessionToken].events.push({\n                type: SessionEventType.SESSION_STARTED,\n                timestamp: highPrecisionTime()\n            });\n            this._saveMetadata();\n        } else {\n            logger.warn(`Session ${sessionToken} already exists`);\n        }\n    }\n\n    /**\n     * Gets all the Sessions.\n     *\n     * @returns {SessionInfo[]}\n     */\n    getSessions(): SessionInfo[] {\n        const sessionTokens = Object.keys(this._sessionsMetadata);\n        const output = [];\n\n        for (let i = 0; i < sessionTokens.length; ++i) {\n            const thisSession = this._sessionsMetadata[sessionTokens[i]];\n            const newSessionInfo: SessionInfo = {\n                start: thisSession.events[0].timestamp,\n                format: thisSession.format,\n                sessionToken: sessionTokens[i],\n                segments: this.getSegments(sessionTokens[i])\n            };\n\n            output.push(newSessionInfo);\n        }\n\n        output.sort((a, b) => (a.start || 0) - (b.start || 0));\n\n        return output;\n    }\n\n    /**\n     * Removes session metadata.\n     *\n     * @param {string} sessionToken - The session token.\n     * @returns {void}\n     */\n    removeSession(sessionToken: string) {\n        delete this._sessionsMetadata[sessionToken];\n        this._saveMetadata();\n    }\n\n    /**\n     * Get segments of a given Session.\n     *\n     * @param {string} sessionToken - The session token.\n     * @returns {SegmentInfo[]}\n     */\n    getSegments(sessionToken: string): SegmentInfo[] {\n        const thisSession = this._sessionsMetadata[sessionToken];\n\n        if (thisSession) {\n            return this._constructSegments(thisSession.events);\n        }\n\n        return [];\n    }\n\n    /**\n     * Marks the start of a new segment.\n     * This should be invoked by {@code RecordingAdapter}s when they need to\n     * start asynchronous operations (such as switching tracks) that interrupts\n     * recording.\n     *\n     * @param {string} sessionToken - The token of the session to start a new\n     * segment in.\n     * @returns {number} - Current segment index.\n     */\n    beginSegment(sessionToken: string): number {\n        if (this._sessionsMetadata[sessionToken] === undefined) {\n            logger.warn('Attempting to add segments to nonexistent'\n                + ` session ${sessionToken}`);\n\n            return -1;\n        }\n        this._sessionsMetadata[sessionToken].events.push({\n            type: SessionEventType.SEGMENT_STARTED,\n            timestamp: highPrecisionTime()\n        });\n        this._saveMetadata();\n\n        return this.getSegments(sessionToken).length - 1;\n    }\n\n    /**\n     * Gets the current segment index. Starting from 0 for the first\n     * segment.\n     *\n     * @param {string} sessionToken - The session token.\n     * @returns {number}\n     */\n    getCurrentSegmentIndex(sessionToken: string): number {\n        if (this._sessionsMetadata[sessionToken] === undefined) {\n            return -1;\n        }\n        const segments = this.getSegments(sessionToken);\n\n        if (segments.length === 0) {\n            return -1;\n        }\n\n        const lastSegment = segments[segments.length - 1];\n\n        if (lastSegment.end) {\n            // last segment is already ended\n            return -1;\n        }\n\n        return segments.length - 1;\n    }\n\n    /**\n     * Marks the end of the last segment in a session.\n     *\n     * @param {string} sessionToken - The session token.\n     * @returns {void}\n     */\n    endSegment(sessionToken: string) {\n        if (this._sessionsMetadata[sessionToken] === undefined) {\n            logger.warn('Attempting to end a segment in nonexistent'\n                + ` session ${sessionToken}`);\n        } else {\n            this._sessionsMetadata[sessionToken].events.push({\n                type: SessionEventType.SEGMENT_ENDED,\n                timestamp: highPrecisionTime()\n            });\n            this._saveMetadata();\n        }\n    }\n\n    /**\n     * Constructs an array of {@code SegmentInfo} from an array of\n     * {@code SessionEvent}s.\n     *\n     * @private\n     * @param {SessionEvent[]} events - The array of {@code SessionEvent}s.\n     * @returns {SegmentInfo[]}\n     */\n    _constructSegments(events: SessionEvent[]): SegmentInfo[] {\n        if (events.length === 0) {\n            return [];\n        }\n\n        const output = [];\n        let sessionStartTime = null;\n        let currentSegment: SegmentInfo = {};\n\n        /**\n         * Helper function for adding a new {@code SegmentInfo} object to the\n         * output.\n         *\n         * @returns {void}\n         */\n        function commit() {\n            if (currentSegment.gapBefore === undefined\n                || currentSegment.gapBefore === null) {\n                if (output.length > 0 && output[output.length - 1].end) {\n                    const lastSegment = output[output.length - 1];\n\n                    if (currentSegment.start && lastSegment.end) {\n                        currentSegment.gapBefore = currentSegment.start\n                            - lastSegment.end;\n                    } else {\n                        currentSegment.gapBefore = null;\n                    }\n                } else if (sessionStartTime !== null && output.length === 0) {\n                    currentSegment.gapBefore = currentSegment.start\n                        ? currentSegment.start - sessionStartTime\n                        : null;\n                } else {\n                    currentSegment.gapBefore = null;\n                }\n            }\n            currentSegment.duration = currentSegment.end && currentSegment.start\n                ? currentSegment.end - currentSegment.start\n                : null;\n            output.push(currentSegment);\n            currentSegment = {};\n        }\n\n        for (let i = 0; i < events.length; ++i) {\n            const currentEvent = events[i];\n\n            switch (currentEvent.type) {\n            case SessionEventType.SESSION_STARTED:\n                if (sessionStartTime === null) {\n                    sessionStartTime = currentEvent.timestamp;\n                } else {\n                    logger.warn('Unexpected SESSION_STARTED event.'\n                        , currentEvent);\n                }\n                break;\n            case SessionEventType.SEGMENT_STARTED:\n                if (currentSegment.start === undefined\n                    || currentSegment.start === null) {\n                    currentSegment.start = currentEvent.timestamp;\n                } else {\n                    commit();\n                    currentSegment.start = currentEvent.timestamp;\n                }\n                break;\n\n            case SessionEventType.SEGMENT_ENDED:\n                if (currentSegment.start === undefined\n                    || currentSegment.start === null) {\n                    logger.warn('Unexpected SEGMENT_ENDED event', currentEvent);\n                } else {\n                    currentSegment.end = currentEvent.timestamp;\n                    commit();\n                }\n                break;\n\n            default:\n                logger.warn('Unexpected error during _constructSegments');\n                break;\n            }\n        }\n        if (currentSegment.start) {\n            commit();\n        }\n\n        return output;\n    }\n\n}\n\n/**\n * Global singleton of {@code SessionManager}.\n */\nexport const sessionManager = new SessionManager();\n\n// For debug only. To remove later.\nwindow.sessionManager = sessionManager;\n","/* @flow */\n\nimport { i18next } from '../../base/i18n';\n\nimport logger from '../logger';\nimport {\n    FlacAdapter,\n    OggAdapter,\n    WavAdapter,\n    downloadBlob\n} from '../recording';\nimport { sessionManager } from '../session';\n\n/**\n * XMPP command for signaling the start of local recording to all clients.\n * Should be sent by the moderator only.\n */\nconst COMMAND_START = 'localRecStart';\n\n/**\n * XMPP command for signaling the stop of local recording to all clients.\n * Should be sent by the moderator only.\n */\nconst COMMAND_STOP = 'localRecStop';\n\n/**\n * One-time command used to trigger the moderator to resend the commands.\n * This is a workaround for newly-joined clients to receive remote presence.\n */\nconst COMMAND_PING = 'localRecPing';\n\n/**\n * One-time command sent upon receiving a {@code COMMAND_PING}.\n * Only the moderator sends this command.\n * This command does not carry any information itself, but rather forces the\n * XMPP server to resend the remote presence.\n */\nconst COMMAND_PONG = 'localRecPong';\n\n/**\n * Participant property key for local recording stats.\n */\nconst PROPERTY_STATS = 'localRecStats';\n\n/**\n * Supported recording formats.\n */\nconst RECORDING_FORMATS = new Set([ 'flac', 'wav', 'ogg' ]);\n\n/**\n * Default recording format.\n */\nconst DEFAULT_RECORDING_FORMAT = 'flac';\n\n/**\n * States of the {@code RecordingController}.\n */\nconst ControllerState = Object.freeze({\n    /**\n     * Idle (not recording).\n     */\n    IDLE: Symbol('IDLE'),\n\n    /**\n     * Starting.\n     */\n    STARTING: Symbol('STARTING'),\n\n    /**\n     * Engaged (recording).\n     */\n    RECORDING: Symbol('RECORDING'),\n\n    /**\n     * Stopping.\n     */\n    STOPPING: Symbol('STOPPING'),\n\n    /**\n     * Failed, due to error during starting / stopping process.\n     */\n    FAILED: Symbol('FAILED')\n});\n\n/**\n * Type of the stats reported by each participant (client).\n */\ntype RecordingStats = {\n\n    /**\n     * Current local recording session token used by the participant.\n     */\n    currentSessionToken: number,\n\n    /**\n     * Whether local recording is engaged on the participant's device.\n     */\n    isRecording: boolean,\n\n    /**\n     * Total recorded bytes. (Reserved for future use.)\n     */\n    recordedBytes: number,\n\n    /**\n     * Total recording duration. (Reserved for future use.)\n     */\n    recordedLength: number\n}\n\n/**\n * The component responsible for the coordination of local recording, across\n * multiple participants.\n * Current implementation requires that there is only one moderator in a room.\n */\nclass RecordingController {\n\n    /**\n     * For each recording session, there is a separate @{code RecordingAdapter}\n     * instance so that encoded bits from the previous sessions can still be\n     * retrieved after they ended.\n     *\n     * @private\n     */\n    _adapters = {};\n\n    /**\n     * The {@code JitsiConference} instance.\n     *\n     * @private\n     */\n    _conference: * = null;\n\n    /**\n     * Current recording session token.\n     * Session token is a number generated by the moderator, to ensure every\n     * client is in the same recording state.\n     *\n     * @private\n     */\n    _currentSessionToken: number = -1;\n\n    /**\n     * Current state of {@code RecordingController}.\n     *\n     * @private\n     */\n    _state = ControllerState.IDLE;\n\n    /**\n     * Whether or not the audio is muted in the UI. This is stored as internal\n     * state of {@code RecordingController} because we might have recording\n     * sessions that start muted.\n     */\n    _isMuted = false;\n\n    /**\n     * The ID of the active microphone.\n     *\n     * @private\n     */\n    _micDeviceId = 'default';\n\n    /**\n     * Current recording format. This will be in effect from the next\n     * recording session, i.e., if this value is changed during an on-going\n     * recording session, that on-going session will not use the new format.\n     *\n     * @private\n     */\n    _format = DEFAULT_RECORDING_FORMAT;\n\n    /**\n     * Whether or not the {@code RecordingController} has registered for\n     * XMPP events. Prevents initialization from happening multiple times.\n     *\n     * @private\n     */\n    _registered = false;\n\n    /**\n     * FIXME: callback function for the {@code RecordingController} to notify\n     * UI it wants to display a notice. Keeps {@code RecordingController}\n     * decoupled from UI.\n     */\n    _onNotify: ?(messageKey: string, messageParams?: Object) => void;\n\n    /**\n     * FIXME: callback function for the {@code RecordingController} to notify\n     * UI it wants to display a warning. Keeps {@code RecordingController}\n     * decoupled from UI.\n     */\n    _onWarning: ?(messageKey: string, messageParams?: Object) => void;\n\n    /**\n     * FIXME: callback function for the {@code RecordingController} to notify\n     * UI that the local recording state has changed.\n     */\n    _onStateChanged: ?(boolean) => void;\n\n    /**\n     * Constructor.\n     *\n     * @returns {void}\n     */\n    constructor() {\n        this.registerEvents = this.registerEvents.bind(this);\n        this.getParticipantsStats = this.getParticipantsStats.bind(this);\n        this._onStartCommand = this._onStartCommand.bind(this);\n        this._onStopCommand = this._onStopCommand.bind(this);\n        this._onPingCommand = this._onPingCommand.bind(this);\n        this._doStartRecording = this._doStartRecording.bind(this);\n        this._doStopRecording = this._doStopRecording.bind(this);\n        this._updateStats = this._updateStats.bind(this);\n        this._switchToNewSession = this._switchToNewSession.bind(this);\n    }\n\n    registerEvents: () => void;\n\n    /**\n     * Registers listeners for XMPP events.\n     *\n     * @param {JitsiConference} conference - A {@code JitsiConference} instance.\n     * @returns {void}\n     */\n    registerEvents(conference: Object) {\n        if (!this._registered) {\n            this._conference = conference;\n            if (this._conference) {\n                this._conference\n                    .addCommandListener(COMMAND_STOP, this._onStopCommand);\n                this._conference\n                    .addCommandListener(COMMAND_START, this._onStartCommand);\n                this._conference\n                    .addCommandListener(COMMAND_PING, this._onPingCommand);\n                this._registered = true;\n            }\n            if (!this._conference.isModerator()) {\n                this._conference.sendCommandOnce(COMMAND_PING, {});\n            }\n        }\n    }\n\n    /**\n     * Sets the event handler for {@code onStateChanged}.\n     *\n     * @param {Function} delegate - The event handler.\n     * @returns {void}\n     */\n    set onStateChanged(delegate: Function) {\n        this._onStateChanged = delegate;\n    }\n\n    /**\n     * Sets the event handler for {@code onNotify}.\n     *\n     * @param {Function} delegate - The event handler.\n     * @returns {void}\n     */\n    set onNotify(delegate: Function) {\n        this._onNotify = delegate;\n    }\n\n    /**\n     * Sets the event handler for {@code onWarning}.\n     *\n     * @param {Function} delegate - The event handler.\n     * @returns {void}\n     */\n    set onWarning(delegate: Function) {\n        this._onWarning = delegate;\n    }\n\n    /**\n     * Signals the participants to start local recording.\n     *\n     * @returns {void}\n     */\n    startRecording() {\n        this.registerEvents();\n        if (this._conference && this._conference.isModerator()) {\n            this._conference.removeCommand(COMMAND_STOP);\n            this._conference.sendCommand(COMMAND_START, {\n                attributes: {\n                    sessionToken: this._getRandomToken(),\n                    format: this._format\n                }\n            });\n        } else if (this._onWarning) {\n            this._onWarning('localRecording.messages.notModerator');\n        }\n    }\n\n    /**\n     * Signals the participants to stop local recording.\n     *\n     * @returns {void}\n     */\n    stopRecording() {\n        if (this._conference) {\n            if (this._conference.isModerator()) {\n                this._conference.removeCommand(COMMAND_START);\n                this._conference.sendCommand(COMMAND_STOP, {\n                    attributes: {\n                        sessionToken: this._currentSessionToken\n                    }\n                });\n            } else if (this._onWarning) {\n                this._onWarning('localRecording.messages.notModerator');\n            }\n        }\n    }\n\n    /**\n     * Triggers the download of recorded data.\n     * Browser only.\n     *\n     * @param {number} sessionToken - The token of the session to download.\n     * @returns {void}\n     */\n    downloadRecordedData(sessionToken: number) {\n        if (this._adapters[sessionToken]) {\n            this._adapters[sessionToken].exportRecordedData()\n                .then(args => {\n                    const { data, format } = args;\n\n                    const filename = `session_${sessionToken}`\n                        + `_${this._conference.myUserId()}.${format}`;\n\n                    downloadBlob(data, filename);\n                })\n                .catch(error => {\n                    logger.error('Failed to download audio for'\n                        + ` session ${sessionToken}. Error: ${error}`);\n                });\n        } else {\n            logger.error(`Invalid session token for download ${sessionToken}`);\n        }\n    }\n\n    /**\n     * Changes the current microphone.\n     *\n     * @param {string} micDeviceId - The new microphone device ID.\n     * @returns {void}\n     */\n    setMicDevice(micDeviceId: string) {\n        if (micDeviceId !== this._micDeviceId) {\n            this._micDeviceId = String(micDeviceId);\n\n            if (this._state === ControllerState.RECORDING) {\n                // sessionManager.endSegment(this._currentSessionToken);\n                logger.log('Before switching microphone...');\n                this._adapters[this._currentSessionToken]\n                    .setMicDevice(this._micDeviceId)\n                    .then(() => {\n                        logger.log('Finished switching microphone.');\n\n                        // sessionManager.beginSegment(this._currentSesoken);\n                    })\n                    .catch(() => {\n                        logger.error('Failed to switch microphone');\n                    });\n            }\n            logger.log(`Switch microphone to ${this._micDeviceId}`);\n        }\n    }\n\n    /**\n     * Mute or unmute audio. When muted, the ongoing local recording should\n     * produce silence.\n     *\n     * @param {boolean} muted - If the audio should be muted.\n     * @returns {void}\n     */\n    setMuted(muted: boolean) {\n        this._isMuted = Boolean(muted);\n\n        if (this._state === ControllerState.RECORDING) {\n            this._adapters[this._currentSessionToken].setMuted(this._isMuted);\n        }\n    }\n\n    /**\n     * Switches the recording format.\n     *\n     * @param {string} newFormat - The new format.\n     * @returns {void}\n     */\n    switchFormat(newFormat: string) {\n        if (!RECORDING_FORMATS.has(newFormat)) {\n            logger.log(`Unknown format ${newFormat}. Ignoring...`);\n\n            return;\n        }\n        this._format = newFormat;\n        logger.log(`Recording format switched to ${newFormat}`);\n\n        // the new format will be used in the next recording session\n    }\n\n    /**\n     * Returns the local recording stats.\n     *\n     * @returns {RecordingStats}\n     */\n    getLocalStats(): RecordingStats {\n        return {\n            currentSessionToken: this._currentSessionToken,\n            isRecording: this._state === ControllerState.RECORDING,\n            recordedBytes: 0,\n            recordedLength: 0\n        };\n    }\n\n    getParticipantsStats: () => *;\n\n    /**\n     * Returns the remote participants' local recording stats.\n     *\n     * @returns {*}\n     */\n    getParticipantsStats() {\n        const members\n            = this._conference.getParticipants()\n            .map(member => {\n                return {\n                    id: member.getId(),\n                    displayName: member.getDisplayName(),\n                    recordingStats:\n                        JSON.parse(member.getProperty(PROPERTY_STATS) || '{}'),\n                    isSelf: false\n                };\n            });\n\n        // transform into a dictionary for consistent ordering\n        const result = {};\n\n        for (let i = 0; i < members.length; ++i) {\n            result[members[i].id] = members[i];\n        }\n        const localId = this._conference.myUserId();\n\n        result[localId] = {\n            id: localId,\n            displayName: i18next.t('localRecording.me'),\n            recordingStats: this.getLocalStats(),\n            isSelf: true\n        };\n\n        return result;\n    }\n\n    _changeState: (Symbol) => void;\n\n    /**\n     * Changes the current state of {@code RecordingController}.\n     *\n     * @private\n     * @param {Symbol} newState - The new state.\n     * @returns {void}\n     */\n    _changeState(newState: Symbol) {\n        if (this._state !== newState) {\n            logger.log(`state change: ${this._state.toString()} -> `\n                + `${newState.toString()}`);\n            this._state = newState;\n        }\n    }\n\n    _updateStats: () => void;\n\n    /**\n     * Sends out updates about the local recording stats via XMPP.\n     *\n     * @private\n     * @returns {void}\n     */\n    _updateStats() {\n        if (this._conference) {\n            this._conference.setLocalParticipantProperty(PROPERTY_STATS,\n                JSON.stringify(this.getLocalStats()));\n        }\n    }\n\n    _onStartCommand: (*) => void;\n\n    /**\n     * Callback function for XMPP event.\n     *\n     * @private\n     * @param {*} value - The event args.\n     * @returns {void}\n     */\n    _onStartCommand(value) {\n        const { sessionToken, format } = value.attributes;\n\n        if (this._state === ControllerState.IDLE) {\n            this._changeState(ControllerState.STARTING);\n            this._switchToNewSession(sessionToken, format);\n            this._doStartRecording();\n        } else if (this._state === ControllerState.RECORDING\n            && this._currentSessionToken !== sessionToken) {\n            // There is local recording going on, but not for the same session.\n            // This means the current state might be out-of-sync with the\n            // moderator's, so we need to restart the recording.\n            this._changeState(ControllerState.STOPPING);\n            this._doStopRecording().then(() => {\n                this._changeState(ControllerState.STARTING);\n                this._switchToNewSession(sessionToken, format);\n                this._doStartRecording();\n            });\n        }\n    }\n\n    _onStopCommand: (*) => void;\n\n    /**\n     * Callback function for XMPP event.\n     *\n     * @private\n     * @param {*} value - The event args.\n     * @returns {void}\n     */\n    _onStopCommand(value) {\n        if (this._state === ControllerState.RECORDING\n            && this._currentSessionToken === value.attributes.sessionToken) {\n            this._changeState(ControllerState.STOPPING);\n            this._doStopRecording();\n        }\n    }\n\n    _onPingCommand: () => void;\n\n    /**\n     * Callback function for XMPP event.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onPingCommand() {\n        if (this._conference.isModerator()) {\n            logger.log('Received ping, sending pong.');\n            this._conference.sendCommandOnce(COMMAND_PONG, {});\n        }\n    }\n\n    /**\n     * Generates a token that can be used to distinguish each local recording\n     * session.\n     *\n     * @returns {number}\n     */\n    _getRandomToken() {\n        return Math.floor(Math.random() * 100000000) + 1;\n    }\n\n    _doStartRecording: () => void;\n\n    /**\n     * Starts the recording locally.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doStartRecording() {\n        if (this._state === ControllerState.STARTING) {\n            const delegate = this._adapters[this._currentSessionToken];\n\n            delegate.start(this._micDeviceId)\n            .then(() => {\n                this._changeState(ControllerState.RECORDING);\n                sessionManager.beginSegment(this._currentSessionToken);\n                logger.log('Local recording engaged.');\n\n                if (this._onNotify) {\n                    this._onNotify('localRecording.messages.engaged');\n                }\n                if (this._onStateChanged) {\n                    this._onStateChanged(true);\n                }\n\n                delegate.setMuted(this._isMuted);\n                this._updateStats();\n            })\n            .catch(err => {\n                logger.error('Failed to start local recording.', err);\n            });\n        }\n\n    }\n\n    _doStopRecording: () => Promise<void>;\n\n    /**\n     * Stops the recording locally.\n     *\n     * @private\n     * @returns {Promise<void>}\n     */\n    _doStopRecording() {\n        if (this._state === ControllerState.STOPPING) {\n            const token = this._currentSessionToken;\n\n            return this._adapters[this._currentSessionToken]\n                .stop()\n                .then(() => {\n                    this._changeState(ControllerState.IDLE);\n                    sessionManager.endSegment(this._currentSessionToken);\n                    logger.log('Local recording unengaged.');\n                    this.downloadRecordedData(token);\n\n                    const messageKey\n                        = this._conference.isModerator()\n                            ? 'localRecording.messages.finishedModerator'\n                            : 'localRecording.messages.finished';\n                    const messageParams = {\n                        token\n                    };\n\n                    if (this._onNotify) {\n                        this._onNotify(messageKey, messageParams);\n                    }\n                    if (this._onStateChanged) {\n                        this._onStateChanged(false);\n                    }\n                    this._updateStats();\n                })\n                .catch(err => {\n                    logger.error('Failed to stop local recording.', err);\n                });\n        }\n\n        /* eslint-disable */\n        return (Promise.resolve(): Promise<void>);\n        // FIXME: better ways to satisfy flow and ESLint at the same time?\n        /* eslint-enable */\n\n    }\n\n    _switchToNewSession: (string, string) => void;\n\n    /**\n     * Switches to a new local recording session.\n     *\n     * @param {string} sessionToken - The session Token.\n     * @param {string} format - The recording format for the session.\n     * @returns {void}\n     */\n    _switchToNewSession(sessionToken, format) {\n        this._format = format;\n        this._currentSessionToken = sessionToken;\n        logger.log(`New session: ${this._currentSessionToken}, `\n            + `format: ${this._format}`);\n        this._adapters[sessionToken]\n             = this._createRecordingAdapter();\n        sessionManager.createSession(sessionToken, this._format);\n    }\n\n    /**\n     * Creates a recording adapter according to the current recording format.\n     *\n     * @private\n     * @returns {RecordingAdapter}\n     */\n    _createRecordingAdapter() {\n        logger.debug('[RecordingController] creating recording'\n            + ` adapter for ${this._format} format.`);\n\n        switch (this._format) {\n        case 'ogg':\n            return new OggAdapter();\n        case 'flac':\n            return new FlacAdapter();\n        case 'wav':\n            return new WavAdapter();\n        default:\n            throw new Error(`Unknown format: ${this._format}`);\n        }\n    }\n}\n\n/**\n * Global singleton of {@code RecordingController}.\n */\nexport const recordingController = new RecordingController();\n","/**\n * Force download of Blob in browser by faking an <a> tag.\n *\n * @param {Blob} blob - Base64 URL.\n * @param {string} fileName - The filename to appear in the download dialog.\n * @returns {void}\n */\nexport function downloadBlob(blob, fileName = 'recording.ogg') {\n    const base64Url = window.URL.createObjectURL(blob);\n\n    // fake a anchor tag\n    const a = document.createElement('a');\n\n    a.style = 'display: none';\n    a.href = base64Url;\n    a.download = fileName;\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n}\n","// @flow\n\nimport moment from 'moment';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { Dialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport {\n    PARTICIPANT_ROLE,\n    getLocalParticipant\n} from '../../base/participants';\nimport { connect } from '../../base/redux';\n\nimport { statsUpdate } from '../actions';\nimport { recordingController } from '../controller';\n\n\n/**\n * The type of the React {@code Component} props of\n * {@link LocalRecordingInfoDialog}.\n */\ntype Props = {\n\n    /**\n     * Redux store dispatch function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Current encoding format.\n     */\n    encodingFormat: string,\n\n    /**\n     * Whether the local user is the moderator.\n     */\n    isModerator: boolean,\n\n    /**\n     * Whether local recording is engaged.\n     */\n    isEngaged: boolean,\n\n    /**\n     * The start time of the current local recording session.\n     * Used to calculate the duration of recording.\n     */\n    recordingEngagedAt: Date,\n\n    /**\n     * Stats of all the participant.\n     */\n    stats: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n * The type of the React {@code Component} state of\n * {@link LocalRecordingInfoDialog}.\n */\ntype State = {\n\n    /**\n     * The recording duration string to be displayed on the UI.\n     */\n    durationString: string\n}\n\n/**\n * A React Component with the contents for a dialog that shows information about\n * local recording. For users with moderator rights, this is also the \"control\n * panel\" for starting/stopping local recording on all clients.\n *\n * @extends Component\n */\nclass LocalRecordingInfoDialog extends Component<Props, State> {\n\n    /**\n     * Saves a handle to the timer for UI updates,\n     * so that it can be cancelled when the component unmounts.\n     */\n    _timer: ?IntervalID;\n\n    /**\n     * Initializes a new {@code LocalRecordingInfoDialog} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code LocalRecordingInfoDialog} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n        this.state = {\n            durationString: ''\n        };\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}.\n     *\n     * @returns {void}\n     */\n    componentDidMount() {\n        this._timer = setInterval(\n            () => {\n                this.setState((_prevState, props) => {\n                    const nowTime = new Date();\n\n                    return {\n                        durationString: this._getDuration(nowTime,\n                            props.recordingEngagedAt)\n                    };\n                });\n                try {\n                    this.props.dispatch(\n                        statsUpdate(recordingController\n                            .getParticipantsStats()));\n                } catch (e) {\n                    // do nothing\n                }\n            },\n            1000\n        );\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount()}.\n     *\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        if (this._timer) {\n            clearInterval(this._timer);\n            this._timer = null;\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { isModerator, t } = this.props;\n\n        return (\n            <Dialog\n                cancelKey = { 'dialog.close' }\n                submitDisabled = { true }\n                titleKey = 'localRecording.dialogTitle'>\n                <div className = 'localrec-control'>\n                    <span className = 'localrec-control-info-label'>\n                        {`${t('localRecording.moderator')}:`}\n                    </span>\n                    <span className = 'info-value'>\n                        { isModerator\n                            ? t('localRecording.yes')\n                            : t('localRecording.no') }\n                    </span>\n                </div>\n                { this._renderModeratorControls() }\n                { this._renderDurationAndFormat() }\n            </Dialog>\n        );\n    }\n\n    /**\n     * Renders the recording duration and encoding format. Only shown if local\n     * recording is engaged.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderDurationAndFormat() {\n        const { encodingFormat, isEngaged, t } = this.props;\n        const { durationString } = this.state;\n\n        if (!isEngaged) {\n            return null;\n        }\n\n        return (\n            <div>\n                <div>\n                    <span className = 'localrec-control-info-label'>\n                        {`${t('localRecording.duration')}:`}\n                    </span>\n                    <span className = 'info-value'>\n                        { durationString === ''\n                            ? t('localRecording.durationNA')\n                            : durationString }\n                    </span>\n                </div>\n                <div>\n                    <span className = 'localrec-control-info-label'>\n                        {`${t('localRecording.encoding')}:`}\n                    </span>\n                    <span className = 'info-value'>\n                        { encodingFormat }\n                    </span>\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Returns React elements for displaying the local recording stats of\n     * each participant.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderStats() {\n        const { stats } = this.props;\n\n        if (stats === undefined) {\n            return null;\n        }\n        const ids = Object.keys(stats);\n\n        return (\n            <div className = 'localrec-participant-stats' >\n                { this._renderStatsHeader() }\n                { ids.map((id, i) => this._renderStatsLine(i, id)) }\n            </div>\n        );\n    }\n\n    /**\n     * Renders the stats for one participant.\n     *\n     * @private\n     * @param {*} lineKey - The key required by React for elements in lists.\n     * @param {*} id - The ID of the participant.\n     * @returns {ReactElement}\n     */\n    _renderStatsLine(lineKey, id) {\n        const { stats } = this.props;\n        let statusClass = 'localrec-participant-stats-item__status-dot ';\n\n        statusClass += stats[id].recordingStats\n            ? stats[id].recordingStats.isRecording\n                ? 'status-on'\n                : 'status-off'\n            : 'status-unknown';\n\n        return (\n            <div\n                className = 'localrec-participant-stats-item'\n                key = { lineKey } >\n                <div className = 'localrec-participant-stats-item__status'>\n                    <span className = { statusClass } />\n                </div>\n                <div className = 'localrec-participant-stats-item__name'>\n                    { stats[id].displayName || id }\n                </div>\n                <div className = 'localrec-participant-stats-item__sessionid'>\n                    { stats[id].recordingStats.currentSessionToken }\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Renders the participant stats header line.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderStatsHeader() {\n        const { t } = this.props;\n\n        return (\n            <div className = 'localrec-participant-stats-item'>\n                <div className = 'localrec-participant-stats-item__status' />\n                <div className = 'localrec-participant-stats-item__name'>\n                    { t('localRecording.participant') }\n                </div>\n                <div className = 'localrec-participant-stats-item__sessionid'>\n                    { t('localRecording.sessionToken') }\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Renders the moderator-only controls: The stats of all users and the\n     * action links.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderModeratorControls() {\n        const { isModerator, isEngaged, t } = this.props;\n\n        if (!isModerator) {\n            return null;\n        }\n\n        return (\n            <div>\n                <div className = 'localrec-control-action-links'>\n                    <div className = 'localrec-control-action-link'>\n                        { isEngaged ? <a\n                            onClick = { this._onStop }>\n                            { t('localRecording.stop') }\n                        </a>\n                            : <a\n                                onClick = { this._onStart }>\n                                { t('localRecording.start') }\n                            </a>\n                        }\n                    </div>\n                </div>\n                <div>\n                    <span className = 'localrec-control-info-label'>\n                        {`${t('localRecording.participantStats')}:`}\n                    </span>\n                </div>\n                { this._renderStats() }\n            </div>\n        );\n    }\n\n    /**\n     * Creates a duration string \"HH:MM:SS\" from two Date objects.\n     *\n     * @param {Date} now - Current time.\n     * @param {Date} prev - Previous time, the time to be subtracted.\n     * @returns {string}\n     */\n    _getDuration(now, prev) {\n        if (prev === null || prev === undefined) {\n            return '';\n        }\n\n        // Still a hack, as moment.js does not support formatting of duration\n        // (i.e. TimeDelta). Only works if total duration < 24 hours.\n        // But who is going to have a 24-hour long conference?\n        return moment(now - prev).utc()\n            .format('HH:mm:ss');\n    }\n\n    /**\n     * Callback function for the Start UI action.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onStart() {\n        recordingController.startRecording();\n    }\n\n    /**\n     * Callback function for the Stop UI action.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onStop() {\n        recordingController.stopRecording();\n    }\n\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code LocalRecordingInfoDialog} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     encodingFormat: string,\n *     isModerator: boolean,\n *     isEngaged: boolean,\n *     recordingEngagedAt: Date,\n *     stats: Object\n * }}\n */\nfunction _mapStateToProps(state) {\n    const {\n        encodingFormat,\n        isEngaged,\n        recordingEngagedAt,\n        stats\n    } = state['features/local-recording'];\n    const isModerator\n        = getLocalParticipant(state).role === PARTICIPANT_ROLE.MODERATOR;\n\n    return {\n        encodingFormat,\n        isModerator,\n        isEngaged,\n        recordingEngagedAt,\n        stats\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(LocalRecordingInfoDialog));\n","/* @flow */\n\nimport {\n    LOCAL_RECORDING_ENGAGED,\n    LOCAL_RECORDING_UNENGAGED,\n    LOCAL_RECORDING_STATS_UPDATE\n} from './actionTypes';\n\n// The following two actions signal state changes in local recording engagement.\n// In other words, the events of the local WebWorker / MediaRecorder starting to\n// record and finishing recording.\n// Note that this is not the event fired when the users tries to start the\n// recording in the UI.\n\n/**\n * Signals that local recording has been engaged.\n *\n * @param {Date} startTime - Time when the recording is engaged.\n * @returns {{\n *     type: LOCAL_RECORDING_ENGAGED,\n *     recordingEngagedAt: Date\n * }}\n */\nexport function localRecordingEngaged(startTime: Date) {\n    return {\n        type: LOCAL_RECORDING_ENGAGED,\n        recordingEngagedAt: startTime\n    };\n}\n\n/**\n * Signals that local recording has finished.\n *\n * @returns {{\n *     type: LOCAL_RECORDING_UNENGAGED\n * }}\n */\nexport function localRecordingUnengaged() {\n    return {\n        type: LOCAL_RECORDING_UNENGAGED\n    };\n}\n\n/**\n * Updates the the local recording stats from each client,\n * to be displayed on {@code LocalRecordingInfoDialog}.\n *\n * @param {*} stats - The stats object.\n * @returns {{\n *     type: LOCAL_RECORDING_STATS_UPDATE,\n *     stats: Object\n * }}\n */\nexport function statsUpdate(stats: Object) {\n    return {\n        type: LOCAL_RECORDING_STATS_UPDATE,\n        stats\n    };\n}\n","/* @flow */\n\nimport { createShortcutEvent, sendAnalytics } from '../analytics';\nimport { APP_WILL_UNMOUNT } from '../base/app';\nimport { CONFERENCE_JOINED } from '../base/conference';\nimport { toggleDialog } from '../base/dialog';\nimport { i18next } from '../base/i18n';\nimport { SET_AUDIO_MUTED } from '../base/media';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { SETTINGS_UPDATED } from '../base/settings/actionTypes';\nimport { showNotification } from '../notifications';\n\nimport { localRecordingEngaged, localRecordingUnengaged } from './actions';\nimport { LocalRecordingInfoDialog } from './components';\nimport { recordingController } from './controller';\n\ndeclare var APP: Object;\n\nMiddlewareRegistry.register(({ getState, dispatch }) => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case CONFERENCE_JOINED: {\n        const { localRecording } = getState()['features/base/config'];\n        const isLocalRecordingEnabled = Boolean(\n            localRecording\n            && localRecording.enabled\n            && typeof APP === 'object'\n        );\n\n        if (!isLocalRecordingEnabled) {\n            break;\n        }\n\n        // realize the delegates on recordingController, allowing the UI to\n        // react to state changes in recordingController.\n        recordingController.onStateChanged = isEngaged => {\n            if (isEngaged) {\n                const nowTime = new Date();\n\n                dispatch(localRecordingEngaged(nowTime));\n            } else {\n                dispatch(localRecordingUnengaged());\n            }\n        };\n\n        recordingController.onWarning = (messageKey, messageParams) => {\n            dispatch(showNotification({\n                title: i18next.t('localRecording.localRecording'),\n                description: i18next.t(messageKey, messageParams)\n            }, 10000));\n        };\n\n        recordingController.onNotify = (messageKey, messageParams) => {\n            dispatch(showNotification({\n                title: i18next.t('localRecording.localRecording'),\n                description: i18next.t(messageKey, messageParams)\n            }, 10000));\n        };\n\n        typeof APP === 'object' && typeof APP.keyboardshortcut === 'object'\n            && APP.keyboardshortcut.registerShortcut('L', null, () => {\n                sendAnalytics(createShortcutEvent('local.recording'));\n                dispatch(toggleDialog(LocalRecordingInfoDialog));\n            }, 'keyboardShortcuts.localRecording');\n\n        if (localRecording.format) {\n            recordingController.switchFormat(localRecording.format);\n        }\n\n        const { conference } = getState()['features/base/conference'];\n\n        recordingController.registerEvents(conference);\n\n        break;\n    }\n    case APP_WILL_UNMOUNT:\n        recordingController.onStateChanged = null;\n        recordingController.onNotify = null;\n        recordingController.onWarning = null;\n        break;\n    case SET_AUDIO_MUTED:\n        recordingController.setMuted(action.muted);\n        break;\n    case SETTINGS_UPDATED: {\n        const { micDeviceId } = getState()['features/base/settings'];\n\n        if (micDeviceId) {\n            recordingController.setMicDevice(micDeviceId);\n        }\n        break;\n    }\n    }\n\n    return result;\n});\n","/* @flow */\n\nimport { ReducerRegistry } from '../base/redux';\nimport {\n    LOCAL_RECORDING_ENGAGED,\n    LOCAL_RECORDING_STATS_UPDATE,\n    LOCAL_RECORDING_UNENGAGED\n} from './actionTypes';\nimport { recordingController } from './controller';\n\nReducerRegistry.register('features/local-recording', (state = {}, action) => {\n    switch (action.type) {\n    case LOCAL_RECORDING_ENGAGED: {\n        return {\n            ...state,\n            isEngaged: true,\n            recordingEngagedAt: action.recordingEngagedAt,\n            encodingFormat: recordingController._format\n        };\n    }\n    case LOCAL_RECORDING_UNENGAGED:\n        return {\n            ...state,\n            isEngaged: false,\n            recordingEngagedAt: null\n        };\n    case LOCAL_RECORDING_STATS_UPDATE:\n        return {\n            ...state,\n            stats: action.stats\n        };\n    default:\n        return state;\n    }\n});\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './controller';\n\nimport './middleware';\nimport './reducer';\n","function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n  if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n    module.exports = _typeof = function _typeof(obj) {\n      return _typeof2(obj);\n    };\n  } else {\n    module.exports = _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n    };\n  }\n\n  return _typeof(obj);\n}\n\nmodule.exports = _typeof;","/* global $, APP, config */\n\nimport { toJid } from '../../../react/features/base/connection';\nimport {\n    JitsiConnectionErrors\n} from '../../../react/features/base/lib-jitsi-meet';\n\n/**\n * Build html for \"password required\" dialog.\n * @returns {string} html string\n */\nfunction getPasswordInputHtml() {\n    const placeholder = config.hosts.authdomain\n        ? 'user identity'\n        : 'user@domain.net';\n\n    return `\n        <input name=\"username\" type=\"text\"\n               class=\"input-control\"\n               placeholder=${placeholder} autofocus>\n        <input name=\"password\" type=\"password\"\n               class=\"input-control\"\n               data-i18n=\"[placeholder]dialog.userPassword\">`;\n}\n\n/**\n * Generate cancel button config for the dialog.\n * @returns {Object}\n */\nfunction cancelButton() {\n    return {\n        title: APP.translation.generateTranslationHTML('dialog.Cancel'),\n        value: false\n    };\n}\n\n/**\n * Auth dialog for JitsiConnection which supports retries.\n * If no cancelCallback provided then there will be\n * no cancel button on the dialog.\n *\n * @class LoginDialog\n * @constructor\n *\n * @param {function(jid, password)} successCallback\n * @param {function} [cancelCallback] callback to invoke if user canceled.\n */\nfunction LoginDialog(successCallback, cancelCallback) {\n    const loginButtons = [ {\n        title: APP.translation.generateTranslationHTML('dialog.Ok'),\n        value: true\n    } ];\n    const finishedButtons = [ {\n        title: APP.translation.generateTranslationHTML('dialog.retry'),\n        value: 'retry'\n    } ];\n\n    // show \"cancel\" button only if cancelCallback provided\n    if (cancelCallback) {\n        loginButtons.push(cancelButton());\n        finishedButtons.push(cancelButton());\n    }\n\n    const states = {\n        login: {\n            buttons: loginButtons,\n            focus: ':input:first',\n            html: getPasswordInputHtml(),\n            titleKey: 'dialog.passwordRequired',\n\n            submit(e, v, m, f) { // eslint-disable-line max-params\n                e.preventDefault();\n                if (v) {\n                    const jid = f.username;\n                    const password = f.password;\n\n                    if (jid && password) {\n                        // eslint-disable-next-line no-use-before-define\n                        connDialog.goToState('connecting');\n                        successCallback(toJid(jid, config.hosts), password);\n                    }\n                } else {\n                    // User cancelled\n                    cancelCallback();\n                }\n            }\n        },\n        connecting: {\n            buttons: [],\n            defaultButton: 0,\n            html: '<div id=\"connectionStatus\"></div>',\n            titleKey: 'dialog.connecting'\n        },\n        finished: {\n            buttons: finishedButtons,\n            defaultButton: 0,\n            html: '<div id=\"errorMessage\"></div>',\n            titleKey: 'dialog.error',\n\n            submit(e, v) {\n                e.preventDefault();\n                if (v === 'retry') {\n                    // eslint-disable-next-line no-use-before-define\n                    connDialog.goToState('login');\n                } else {\n                    // User cancelled\n                    cancelCallback();\n                }\n            }\n        }\n    };\n    const connDialog = APP.UI.messageHandler.openDialogWithStates(\n        states,\n        {\n            closeText: '',\n            persistent: true,\n            zIndex: 1020\n        },\n        null\n    );\n\n    /**\n     * Displays error message in 'finished' state which allows either to cancel\n     * or retry.\n     * @param error the key to the error to be displayed.\n     * @param options the options to the error message (optional)\n     */\n    this.displayError = function(error, options) {\n\n        const finishedState = connDialog.getState('finished');\n\n        const errorMessageElem = finishedState.find('#errorMessage');\n\n        let messageKey;\n\n        if (error === JitsiConnectionErrors.PASSWORD_REQUIRED) {\n            // this is a password required error, as login window was already\n            // open once, this means username or password is wrong\n            messageKey = 'dialog.incorrectPassword';\n        } else {\n            messageKey = 'dialog.connectErrorWithMsg';\n\n            if (!options) {\n                options = {};// eslint-disable-line no-param-reassign\n            }\n\n            options.msg = error;\n        }\n\n        errorMessageElem.attr('data-i18n', messageKey);\n\n        APP.translation.translateElement($(errorMessageElem), options);\n\n        connDialog.goToState('finished');\n    };\n\n    /**\n     *  Show message as connection status.\n     * @param {string} messageKey the key to the message\n     */\n    this.displayConnectionStatus = function(messageKey) {\n        const connectingState = connDialog.getState('connecting');\n\n        const connectionStatus = connectingState.find('#connectionStatus');\n\n        connectionStatus.attr('data-i18n', messageKey);\n        APP.translation.translateElement($(connectionStatus));\n    };\n\n    /**\n     * Closes LoginDialog.\n     */\n    this.close = function() {\n        connDialog.close();\n    };\n}\n\nexport default {\n\n    /**\n     * Show new auth dialog for JitsiConnection.\n     *\n     * @param {function(jid, password)} successCallback\n     * @param {function} [cancelCallback] callback to invoke if user canceled.\n     *\n     * @returns {LoginDialog}\n     */\n    showAuthDialog(successCallback, cancelCallback) {\n        return new LoginDialog(successCallback, cancelCallback);\n    },\n\n    /**\n     * Show notification that external auth is required (using provided url).\n     * @param {string} url URL to use for external auth.\n     * @param {function} callback callback to invoke when auth popup is closed.\n     * @returns auth dialog\n     */\n    showExternalAuthDialog(url, callback) {\n        const dialog = APP.UI.messageHandler.openCenteredPopup(\n            url, 910, 660,\n\n            // On closed\n            callback\n        );\n\n        if (!dialog) {\n            APP.UI.messageHandler.showWarning({\n                descriptionKey: 'dialog.popupError',\n                titleKey: 'dialog.popupErrorTitle'\n            });\n        }\n\n        return dialog;\n    },\n\n    /**\n     * Shows a notification that authentication is required to create the\n     * conference, so the local participant should authenticate or wait for a\n     * host.\n     *\n     * @param {string} room - The name of the conference.\n     * @param {function} onAuthNow - The callback to invoke if the local\n     * participant wants to authenticate.\n     * @returns dialog\n     */\n    showAuthRequiredDialog(room, onAuthNow) {\n        const msg = APP.translation.generateTranslationHTML(\n            '[html]dialog.WaitForHostMsg',\n            { room }\n        );\n        const buttonTxt = APP.translation.generateTranslationHTML(\n            'dialog.IamHost'\n        );\n        const buttons = [ {\n            title: buttonTxt,\n            value: 'authNow'\n        } ];\n\n        return APP.UI.messageHandler.openDialog(\n            'dialog.WaitingForHost',\n            msg,\n            true,\n            buttons,\n            (e, submitValue) => {\n                // Do not close the dialog yet.\n                e.preventDefault();\n\n                // Open login popup.\n                if (submitValue === 'authNow') {\n                    onAuthNow();\n                }\n            }\n        );\n    }\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","exports.f = {}.propertyIsEnumerable;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.size = exports.default = exports.IconWrapper = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _uuid = _interopRequireDefault(require(\"uuid\"));\n\nvar _theme = require(\"@atlaskit/theme\");\n\nvar _constants = require(\"../constants\");\n\nvar getSize = function getSize(props) {\n  if (props.size) {\n    return \"height: \".concat(_constants.sizes[props.size], \"; width: \").concat(_constants.sizes[props.size], \";\");\n  }\n\n  return null;\n};\n\nvar IconWrapper = _styledComponents.default.span.withConfig({\n  displayName: \"Icon__IconWrapper\",\n  componentId: \"dyhwwi-0\"\n})([\"\\n  \", \" color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \" max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n  /* Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"], getSize, function (p) {\n  return p.primaryColor || 'currentColor';\n}, function (p) {\n  return p.secondaryColor || _theme.colors.background;\n}, getSize);\n\nexports.IconWrapper = IconWrapper;\n\nvar Icon =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inherits2.default)(Icon, _Component);\n\n  function Icon() {\n    (0, _classCallCheck2.default)(this, Icon);\n    return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Icon).apply(this, arguments));\n  }\n\n  (0, _createClass2.default)(Icon, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          Glyph = _this$props.glyph,\n          dangerouslySetGlyph = _this$props.dangerouslySetGlyph,\n          onClick = _this$props.onClick,\n          primaryColor = _this$props.primaryColor,\n          secondaryColor = _this$props.secondaryColor,\n          size = _this$props.size; // handling the glyphs as strings\n\n      if (dangerouslySetGlyph) {\n        return _react.default.createElement(IconWrapper, {\n          onClick: onClick,\n          primaryColor: primaryColor,\n          secondaryColor: secondaryColor,\n          size: size,\n          \"aria-label\": this.props.label,\n          dangerouslySetInnerHTML: {\n            __html: Icon.insertDynamicGradientID(dangerouslySetGlyph)\n          }\n        });\n      } // handling the glyphs when passed through as functions\n\n\n      return _react.default.createElement(IconWrapper, {\n        onClick: onClick,\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        size: size,\n        \"aria-label\": this.props.label\n      }, Glyph ? _react.default.createElement(Glyph, {\n        role: \"presentation\"\n      }) : null);\n    }\n  }], [{\n    key: \"insertDynamicGradientID\",\n\n    /* Icons need unique gradient IDs across instances for different gradient definitions to work\n     * correctly.\n     * A step in the icon build process replaces linear gradient IDs and their references in paths\n     * to a placeholder string so we can replace them with a dynamic ID here.\n     * Replacing the original IDs with placeholders in the build process is more robust than not\n     * using placeholders as we do not have to rely on regular expressions to find specific element\n     * to replace.\n     */\n    value: function insertDynamicGradientID(svgStr) {\n      var id = (0, _uuid.default)();\n      var replacedSvgStr = svgStr.replace(/id=\"([^\"]+)-idPlaceholder\"/g, \"id=$1-\".concat(id)).replace(/fill=\"url\\(#([^\"]+)-idPlaceholder\\)\"/g, \"fill=\\\"url(#$1-\".concat(id, \")\\\"\"));\n      return replacedSvgStr;\n    }\n  }]);\n  return Icon;\n}(_react.Component);\n\nexports.default = Icon;\n(0, _defineProperty2.default)(Icon, \"defaultProps\", {\n  onClick: function onClick() {}\n});\nvar size = Object.keys(_constants.sizes).reduce(function (p, c) {\n  return Object.assign(p, (0, _defineProperty2.default)({}, c, c));\n}, {});\nexports.size = size;","// @flow\n\nimport md5 from 'js-md5';\n\n/**\n * Returns the Avatar URL to be used for the participant.\n *\n * @param {string} [participant.avatarID] - Participant's avatar ID.\n * @param {string} [participant.email] - Participant's e-mail address.\n * @param {string} [participant.id] - Participant's ID.\n * @param {string} [avatarService.urlPrefix] - URL Prefix of the avatar service.\n * @param {string} [avatarService.urlSuffix] - URL Suffix of the avatar service.\n * @returns {string} - Avatar URL.\n */\nexport function getAvatarURL({ avatarID, email, id }: {\n        avatarID: string,\n        email: string,\n        id: string\n}, { urlPrefix, urlSuffix }: {\n        urlPrefix: string,\n        urlSuffix: string\n} = {\n    urlPrefix: 'https://abotars.jitsi.net/meeple/',\n    urlSuffix: ''\n}) {\n    return getGravatarURL(email)\n        || generateAvatarURL(avatarID || id, urlPrefix, urlSuffix);\n}\n\n/**\n * Returns the Avatar URL generated from the given avatar service.\n *\n * @param {string} key - Key using which avatar has to be generated.\n * @param {string} urlPrefix - URL Prefix of the avatar service to be used.\n * @param {string} urlSuffix - URL Suffix of the avatar service to be used.\n * @returns {string}\n */\nfunction generateAvatarURL(key: string, urlPrefix: string, urlSuffix: string) {\n    return urlPrefix + md5.hex(key.trim().toLowerCase()) + urlSuffix;\n}\n\n/**\n * Returns the Gravatar URL of a given email id.\n *\n * @param {string} key - Email or id for which we need gravatar url.\n * @returns {string} - Gravatar URL.\n */\nexport function getGravatarURL(key: string) {\n    const urlPrefix = 'https://www.gravatar.com/avatar/';\n    const urlSuffix = '?d=404&size=200';\n\n    // If the key is a valid email, we hash it. If it's not, we assume it's already a hashed format\n    const avatarKey = isValidEmail(key) ? md5.hex(key.trim().toLowerCase()) : key;\n\n    return `${urlPrefix}${avatarKey}${urlSuffix}`;\n}\n\n/**\n * Returns if the email id is valid.\n *\n * @param {string} email - Email id to be checked.\n * @returns {boolean}\n */\nfunction isValidEmail(email: string) {\n    return email && email.indexOf('@') > 0;\n}\n","// @flow\n\n/**\n * Creates a deferred object.\n *\n * @returns {{promise, resolve, reject}}\n */\nexport function createDeferred(): Object {\n    const deferred = {};\n\n    deferred.promise = new Promise((resolve, reject) => {\n        deferred.resolve = resolve;\n        deferred.reject = reject;\n    });\n\n    return deferred;\n}\n\nconst MATCH_OPERATOR_REGEXP = /[|\\\\{}()[\\]^$+*?.-]/g;\n\n/**\n * Escape RegExp special characters.\n *\n * Based on https://github.com/sindresorhus/escape-string-regexp.\n *\n * @param {string} s - The regexp string to escape.\n * @returns {string}\n */\nexport function escapeRegexp(s: string) {\n    if (typeof s !== 'string') {\n        throw new TypeError('Expected a string');\n    }\n\n    return s.replace(MATCH_OPERATOR_REGEXP, '\\\\$&');\n}\n\n/**\n * Returns the base URL of the app.\n *\n * @param {Object} w - Window object to use instead of the built in one.\n * @returns {string}\n */\nexport function getBaseUrl(w: Object = window) {\n    const doc = w.document;\n    const base = doc.querySelector('base');\n\n    if (base && base.href) {\n        return base.href;\n    }\n\n    const { protocol, host } = w.location;\n\n    return `${protocol}//${host}`;\n}\n\n/**\n * Returns the namespace for all global variables, functions, etc that we need.\n *\n * @returns {Object} The namespace.\n *\n * NOTE: After React-ifying everything this should be the only global.\n */\nexport function getJitsiMeetGlobalNS() {\n    if (!window.JitsiMeetJS) {\n        window.JitsiMeetJS = {};\n    }\n\n    if (!window.JitsiMeetJS.app) {\n        window.JitsiMeetJS.app = {};\n    }\n\n    return window.JitsiMeetJS.app;\n}\n\n/**\n * A helper function that behaves similar to Object.assign, but only reassigns a\n * property in target if it's defined in source.\n *\n * @param {Object} target - The target object to assign the values into.\n * @param {Object} source - The source object.\n * @returns {Object}\n */\nexport function assignIfDefined(target: Object, source: Object) {\n    const to = Object(target);\n\n    for (const nextKey in source) {\n        if (source.hasOwnProperty(nextKey)) {\n            const value = source[nextKey];\n\n            if (typeof value !== 'undefined') {\n                to[nextKey] = value;\n            }\n        }\n    }\n\n    return to;\n}\n\n/**\n * Prints the error and reports it to the global error handler.\n *\n * @param {Error} e - The error object.\n * @param {string} msg - A custom message to print in addition to the error.\n * @returns {void}\n */\nexport function reportError(e: Object, msg: string = '') {\n    console.error(msg, e);\n    window.onerror && window.onerror(msg, null, null, null, e);\n}\n","'use strict';\n\nexports.__esModule = true;\nexports.EXITING = exports.ENTERED = exports.ENTERING = exports.EXITED = exports.UNMOUNTED = undefined;\n\nvar _propTypes = require('prop-types');\n\nvar PropTypes = _interopRequireWildcard(_propTypes);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactLifecyclesCompat = require('react-lifecycles-compat');\n\nvar _PropTypes = require('./utils/PropTypes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar UNMOUNTED = exports.UNMOUNTED = 'unmounted';\nvar EXITED = exports.EXITED = 'exited';\nvar ENTERING = exports.ENTERING = 'entering';\nvar ENTERED = exports.ENTERED = 'entered';\nvar EXITING = exports.EXITING = 'exiting';\n\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the components.\n * It's up to you to give meaning and effect to those states. For example we can\n * add styles to a component when it enters or exits:\n *\n * ```jsx\n * import Transition from 'react-transition-group/Transition';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n *   transition: `opacity ${duration}ms ease-in-out`,\n *   opacity: 0,\n * }\n *\n * const transitionStyles = {\n *   entering: { opacity: 0 },\n *   entered:  { opacity: 1 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n *   <Transition in={inProp} timeout={duration}>\n *     {(state) => (\n *       <div style={{\n *         ...defaultStyle,\n *         ...transitionStyles[state]\n *       }}>\n *         I'm a fade Transition!\n *       </div>\n *     )}\n *   </Transition>\n * );\n * ```\n *\n * As noted the `Transition` component doesn't _do_ anything by itself to its child component.\n * What it does do is track transition states over time so you can update the\n * component (such as by adding styles or classes) when it changes states.\n *\n * There are 4 main states a Transition can be in:\n *  - `'entering'`\n *  - `'entered'`\n *  - `'exiting'`\n *  - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component begins the\n * \"Enter\" stage. During this stage, the component will shift from its current transition state,\n * to `'entering'` for the duration of the transition and then to the `'entered'` stage once\n * it's complete. Let's take the following example:\n *\n * ```jsx\n * state = { in: false };\n *\n * toggleEnterState = () => {\n *   this.setState({ in: true });\n * }\n *\n * render() {\n *   return (\n *     <div>\n *       <Transition in={this.state.in} timeout={500} />\n *       <button onClick={this.toggleEnterState}>Click to Enter</button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state and\n * stay there for 500ms (the value of `timeout`) before it finally switches to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from `'exiting'` to `'exited'`.\n *\n * ## Timing\n *\n * Timing is often the trickiest part of animation, mistakes can result in slight delays\n * that are hard to pin down. A common example is when you want to add an exit transition,\n * you should set the desired final styles when the state is `'exiting'`. That's when the\n * transition to those styles will start and, if you matched the `timeout` prop with the\n * CSS Transition duration, it will end exactly when the state changes to `'exited'`.\n *\n * > **Note**: For simpler transitions the `Transition` component might be enough, but\n * > take into account that it's platform-agnostic, while the `CSSTransition` component\n * > [forces reflows](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * > in order to make more complex transitions more predictable. For example, even though\n * > classes `example-enter` and `example-enter-active` are applied immediately one after\n * > another, you can still transition from one to the other because of the forced reflow\n * > (read [this issue](https://github.com/reactjs/react-transition-group/issues/159#issuecomment-322761171)\n * > for more info). Take this into account when choosing between `Transition` and\n * > `CSSTransition`.\n *\n * ## Example\n *\n * <iframe src=\"https://codesandbox.io/embed/741op4mmj0?fontsize=14\" style=\"width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;\" sandbox=\"allow-modals allow-forms allow-popups allow-scripts allow-same-origin\"></iframe>\n *\n */\n\nvar Transition = function (_React$Component) {\n  _inherits(Transition, _React$Component);\n\n  function Transition(props, context) {\n    _classCallCheck(this, Transition);\n\n    var _this = _possibleConstructorReturn(this, _React$Component.call(this, props, context));\n\n    var parentGroup = context.transitionGroup;\n    // In the context of a TransitionGroup all enters are really appears\n    var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n\n    var initialStatus = void 0;\n\n    _this.appearStatus = null;\n\n    if (props.in) {\n      if (appear) {\n        initialStatus = EXITED;\n        _this.appearStatus = ENTERING;\n      } else {\n        initialStatus = ENTERED;\n      }\n    } else {\n      if (props.unmountOnExit || props.mountOnEnter) {\n        initialStatus = UNMOUNTED;\n      } else {\n        initialStatus = EXITED;\n      }\n    }\n\n    _this.state = { status: initialStatus };\n\n    _this.nextCallback = null;\n    return _this;\n  }\n\n  Transition.prototype.getChildContext = function getChildContext() {\n    return { transitionGroup: null // allows for nested Transitions\n    };\n  };\n\n  Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n    var nextIn = _ref.in;\n\n    if (nextIn && prevState.status === UNMOUNTED) {\n      return { status: EXITED };\n    }\n    return null;\n  };\n\n  // getSnapshotBeforeUpdate(prevProps) {\n  //   let nextStatus = null\n\n  //   if (prevProps !== this.props) {\n  //     const { status } = this.state\n\n  //     if (this.props.in) {\n  //       if (status !== ENTERING && status !== ENTERED) {\n  //         nextStatus = ENTERING\n  //       }\n  //     } else {\n  //       if (status === ENTERING || status === ENTERED) {\n  //         nextStatus = EXITING\n  //       }\n  //     }\n  //   }\n\n  //   return { nextStatus }\n  // }\n\n  Transition.prototype.componentDidMount = function componentDidMount() {\n    this.updateStatus(true, this.appearStatus);\n  };\n\n  Transition.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var nextStatus = null;\n    if (prevProps !== this.props) {\n      var status = this.state.status;\n\n\n      if (this.props.in) {\n        if (status !== ENTERING && status !== ENTERED) {\n          nextStatus = ENTERING;\n        }\n      } else {\n        if (status === ENTERING || status === ENTERED) {\n          nextStatus = EXITING;\n        }\n      }\n    }\n    this.updateStatus(false, nextStatus);\n  };\n\n  Transition.prototype.componentWillUnmount = function componentWillUnmount() {\n    this.cancelNextCallback();\n  };\n\n  Transition.prototype.getTimeouts = function getTimeouts() {\n    var timeout = this.props.timeout;\n\n    var exit = void 0,\n        enter = void 0,\n        appear = void 0;\n\n    exit = enter = appear = timeout;\n\n    if (timeout != null && typeof timeout !== 'number') {\n      exit = timeout.exit;\n      enter = timeout.enter;\n      appear = timeout.appear;\n    }\n    return { exit: exit, enter: enter, appear: appear };\n  };\n\n  Transition.prototype.updateStatus = function updateStatus() {\n    var mounting = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var nextStatus = arguments[1];\n\n    if (nextStatus !== null) {\n      // nextStatus will always be ENTERING or EXITING.\n      this.cancelNextCallback();\n      var node = _reactDom2.default.findDOMNode(this);\n\n      if (nextStatus === ENTERING) {\n        this.performEnter(node, mounting);\n      } else {\n        this.performExit(node);\n      }\n    } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n      this.setState({ status: UNMOUNTED });\n    }\n  };\n\n  Transition.prototype.performEnter = function performEnter(node, mounting) {\n    var _this2 = this;\n\n    var enter = this.props.enter;\n\n    var appearing = this.context.transitionGroup ? this.context.transitionGroup.isMounting : mounting;\n\n    var timeouts = this.getTimeouts();\n\n    // no enter animation skip right to ENTERED\n    // if we are mounting and running this it means appear _must_ be set\n    if (!mounting && !enter) {\n      this.safeSetState({ status: ENTERED }, function () {\n        _this2.props.onEntered(node);\n      });\n      return;\n    }\n\n    this.props.onEnter(node, appearing);\n\n    this.safeSetState({ status: ENTERING }, function () {\n      _this2.props.onEntering(node, appearing);\n\n      // FIXME: appear timeout?\n      _this2.onTransitionEnd(node, timeouts.enter, function () {\n        _this2.safeSetState({ status: ENTERED }, function () {\n          _this2.props.onEntered(node, appearing);\n        });\n      });\n    });\n  };\n\n  Transition.prototype.performExit = function performExit(node) {\n    var _this3 = this;\n\n    var exit = this.props.exit;\n\n    var timeouts = this.getTimeouts();\n\n    // no exit animation skip right to EXITED\n    if (!exit) {\n      this.safeSetState({ status: EXITED }, function () {\n        _this3.props.onExited(node);\n      });\n      return;\n    }\n    this.props.onExit(node);\n\n    this.safeSetState({ status: EXITING }, function () {\n      _this3.props.onExiting(node);\n\n      _this3.onTransitionEnd(node, timeouts.exit, function () {\n        _this3.safeSetState({ status: EXITED }, function () {\n          _this3.props.onExited(node);\n        });\n      });\n    });\n  };\n\n  Transition.prototype.cancelNextCallback = function cancelNextCallback() {\n    if (this.nextCallback !== null) {\n      this.nextCallback.cancel();\n      this.nextCallback = null;\n    }\n  };\n\n  Transition.prototype.safeSetState = function safeSetState(nextState, callback) {\n    // This shouldn't be necessary, but there are weird race conditions with\n    // setState callbacks and unmounting in testing, so always make sure that\n    // we can cancel any pending setState callbacks after we unmount.\n    callback = this.setNextCallback(callback);\n    this.setState(nextState, callback);\n  };\n\n  Transition.prototype.setNextCallback = function setNextCallback(callback) {\n    var _this4 = this;\n\n    var active = true;\n\n    this.nextCallback = function (event) {\n      if (active) {\n        active = false;\n        _this4.nextCallback = null;\n\n        callback(event);\n      }\n    };\n\n    this.nextCallback.cancel = function () {\n      active = false;\n    };\n\n    return this.nextCallback;\n  };\n\n  Transition.prototype.onTransitionEnd = function onTransitionEnd(node, timeout, handler) {\n    this.setNextCallback(handler);\n\n    if (node) {\n      if (this.props.addEndListener) {\n        this.props.addEndListener(node, this.nextCallback);\n      }\n      if (timeout != null) {\n        setTimeout(this.nextCallback, timeout);\n      }\n    } else {\n      setTimeout(this.nextCallback, 0);\n    }\n  };\n\n  Transition.prototype.render = function render() {\n    var status = this.state.status;\n    if (status === UNMOUNTED) {\n      return null;\n    }\n\n    var _props = this.props,\n        children = _props.children,\n        childProps = _objectWithoutProperties(_props, ['children']);\n    // filter props for Transtition\n\n\n    delete childProps.in;\n    delete childProps.mountOnEnter;\n    delete childProps.unmountOnExit;\n    delete childProps.appear;\n    delete childProps.enter;\n    delete childProps.exit;\n    delete childProps.timeout;\n    delete childProps.addEndListener;\n    delete childProps.onEnter;\n    delete childProps.onEntering;\n    delete childProps.onEntered;\n    delete childProps.onExit;\n    delete childProps.onExiting;\n    delete childProps.onExited;\n\n    if (typeof children === 'function') {\n      return children(status, childProps);\n    }\n\n    var child = _react2.default.Children.only(children);\n    return _react2.default.cloneElement(child, childProps);\n  };\n\n  return Transition;\n}(_react2.default.Component);\n\nTransition.contextTypes = {\n  transitionGroup: PropTypes.object\n};\nTransition.childContextTypes = {\n  transitionGroup: function transitionGroup() {}\n};\n\n\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * A `function` child can be used instead of a React element.\n   * This function is called with the current transition status\n   * ('entering', 'entered', 'exiting', 'exited', 'unmounted'), which can be used\n   * to apply context specific props to a component.\n   *\n   * ```jsx\n   * <Transition timeout={150}>\n   *   {(status) => (\n   *     <MyComponent className={`fade fade-${status}`} />\n   *   )}\n   * </Transition>\n   * ```\n   */\n  children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n  /**\n   * Show the component; triggers the enter or exit states\n   */\n  in: PropTypes.bool,\n\n  /**\n   * By default the child component is mounted immediately along with\n   * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n   * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n   * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n   */\n  mountOnEnter: PropTypes.bool,\n\n  /**\n   * By default the child component stays mounted after it reaches the `'exited'` state.\n   * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n   */\n  unmountOnExit: PropTypes.bool,\n\n  /**\n   * Normally a component is not transitioned if it is shown when the `<Transition>` component mounts.\n   * If you want to transition on the first mount set `appear` to `true`, and the\n   * component will transition in as soon as the `<Transition>` mounts.\n   *\n   * > Note: there are no specific \"appear\" states. `appear` only adds an additional `enter` transition.\n   */\n  appear: PropTypes.bool,\n\n  /**\n   * Enable or disable enter transitions.\n   */\n  enter: PropTypes.bool,\n\n  /**\n   * Enable or disable exit transitions.\n   */\n  exit: PropTypes.bool,\n\n  /**\n   * The duration of the transition, in milliseconds.\n   * Required unless `addEndListener` is provided\n   *\n   * You may specify a single timeout for all transitions like: `timeout={500}`,\n   * or individually like:\n   *\n   * ```jsx\n   * timeout={{\n   *  enter: 300,\n   *  exit: 500,\n   * }}\n   * ```\n   *\n   * @type {number | { enter?: number, exit?: number }}\n   */\n  timeout: function timeout(props) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    var pt = _PropTypes.timeoutsShape;\n    if (!props.addEndListener) pt = pt.isRequired;\n    return pt.apply(undefined, [props].concat(args));\n  },\n\n  /**\n   * Add a custom transition end trigger. Called with the transitioning\n   * DOM node and a `done` callback. Allows for more fine grained transition end\n   * logic. **Note:** Timeouts are still used as a fallback if provided.\n   *\n   * ```jsx\n   * addEndListener={(node, done) => {\n   *   // use the css transitionend event to mark the finish of a transition\n   *   node.addEventListener('transitionend', done, false);\n   * }}\n   * ```\n   */\n  addEndListener: PropTypes.func,\n\n  /**\n   * Callback fired before the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entered\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * Callback fired before the \"exiting\" status is applied.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exiting\" status is applied.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exited\" status is applied.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExited: PropTypes.func\n\n  // Name the function so it is clearer in the documentation\n} : {};function noop() {}\n\nTransition.defaultProps = {\n  in: false,\n  mountOnEnter: false,\n  unmountOnExit: false,\n  appear: false,\n  enter: true,\n  exit: true,\n\n  onEnter: noop,\n  onEntering: noop,\n  onEntered: noop,\n\n  onExit: noop,\n  onExiting: noop,\n  onExited: noop\n};\n\nTransition.UNMOUNTED = 0;\nTransition.EXITED = 1;\nTransition.ENTERING = 2;\nTransition.ENTERED = 3;\nTransition.EXITING = 4;\n\nexports.default = (0, _reactLifecyclesCompat.polyfill)(Transition);","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || 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; };\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactLifecyclesCompat = require('react-lifecycles-compat');\n\nvar _ChildMapping = require('./utils/ChildMapping');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar values = Object.values || function (obj) {\n  return Object.keys(obj).map(function (k) {\n    return obj[k];\n  });\n};\n\nvar propTypes = {\n  /**\n   * `<TransitionGroup>` renders a `<div>` by default. You can change this\n   * behavior by providing a `component` prop.\n   * If you use React v16+ and would like to avoid a wrapping `<div>` element\n   * you can pass in `component={null}`. This is useful if the wrapping div\n   * borks your css styles.\n   */\n  component: _propTypes2.default.any,\n  /**\n   * A set of `<Transition>` components, that are toggled `in` and out as they\n   * leave. the `<TransitionGroup>` will inject specific transition props, so\n   * remember to spread them through if you are wrapping the `<Transition>` as\n   * with our `<Fade>` example.\n   */\n  children: _propTypes2.default.node,\n\n  /**\n   * A convenience prop that enables or disables appear animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  appear: _propTypes2.default.bool,\n  /**\n   * A convenience prop that enables or disables enter animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  enter: _propTypes2.default.bool,\n  /**\n   * A convenience prop that enables or disables exit animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  exit: _propTypes2.default.bool,\n\n  /**\n   * You may need to apply reactive updates to a child as it is exiting.\n   * This is generally done by using `cloneElement` however in the case of an exiting\n   * child the element has already been removed and not accessible to the consumer.\n   *\n   * If you do need to update a child as it leaves you can provide a `childFactory`\n   * to wrap every child, even the ones that are leaving.\n   *\n   * @type Function(child: ReactElement) -> ReactElement\n   */\n  childFactory: _propTypes2.default.func\n};\n\nvar defaultProps = {\n  component: 'div',\n  childFactory: function childFactory(child) {\n    return child;\n  }\n\n  /**\n   * The `<TransitionGroup>` component manages a set of `<Transition>` components\n   * in a list. Like with the `<Transition>` component, `<TransitionGroup>`, is a\n   * state machine for managing the mounting and unmounting of components over\n   * time.\n   *\n   * Consider the example below using the `Fade` CSS transition from before.\n   * As items are removed or added to the TodoList the `in` prop is toggled\n   * automatically by the `<TransitionGroup>`. You can use _any_ `<Transition>`\n   * component in a `<TransitionGroup>`, not just css.\n   *\n   * ## Example\n   *\n   * <iframe src=\"https://codesandbox.io/embed/00rqyo26kn?fontsize=14\" style=\"width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;\" sandbox=\"allow-modals allow-forms allow-popups allow-scripts allow-same-origin\"></iframe>\n   *\n   * Note that `<TransitionGroup>`  does not define any animation behavior!\n   * Exactly _how_ a list item animates is up to the individual `<Transition>`\n   * components. This means you can mix and match animations across different\n   * list items.\n   */\n};\nvar TransitionGroup = function (_React$Component) {\n  _inherits(TransitionGroup, _React$Component);\n\n  function TransitionGroup(props, context) {\n    _classCallCheck(this, TransitionGroup);\n\n    var _this = _possibleConstructorReturn(this, _React$Component.call(this, props, context));\n\n    var handleExited = _this.handleExited.bind(_this);\n\n    // Initial children should all be entering, dependent on appear\n    _this.state = {\n      handleExited: handleExited,\n      firstRender: true\n    };\n    return _this;\n  }\n\n  TransitionGroup.prototype.getChildContext = function getChildContext() {\n    return {\n      transitionGroup: { isMounting: !this.appeared }\n    };\n  };\n\n  TransitionGroup.prototype.componentDidMount = function componentDidMount() {\n    this.appeared = true;\n  };\n\n  TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n    var prevChildMapping = _ref.children,\n        handleExited = _ref.handleExited,\n        firstRender = _ref.firstRender;\n\n    return {\n      children: firstRender ? (0, _ChildMapping.getInitialChildMapping)(nextProps, handleExited) : (0, _ChildMapping.getNextChildMapping)(nextProps, prevChildMapping, handleExited),\n      firstRender: false\n    };\n  };\n\n  TransitionGroup.prototype.handleExited = function handleExited(child, node) {\n    var currentChildMapping = (0, _ChildMapping.getChildMapping)(this.props.children);\n\n    if (child.key in currentChildMapping) return;\n\n    if (child.props.onExited) {\n      child.props.onExited(node);\n    }\n\n    this.setState(function (state) {\n      var children = _extends({}, state.children);\n\n      delete children[child.key];\n      return { children: children };\n    });\n  };\n\n  TransitionGroup.prototype.render = function render() {\n    var _props = this.props,\n        Component = _props.component,\n        childFactory = _props.childFactory,\n        props = _objectWithoutProperties(_props, ['component', 'childFactory']);\n\n    var children = values(this.state.children).map(childFactory);\n\n    delete props.appear;\n    delete props.enter;\n    delete props.exit;\n\n    if (Component === null) {\n      return children;\n    }\n    return _react2.default.createElement(\n      Component,\n      props,\n      children\n    );\n  };\n\n  return TransitionGroup;\n}(_react2.default.Component);\n\nTransitionGroup.childContextTypes = {\n  transitionGroup: _propTypes2.default.object.isRequired\n};\n\n\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nTransitionGroup.defaultProps = defaultProps;\n\nexports.default = (0, _reactLifecyclesCompat.polyfill)(TransitionGroup);\nmodule.exports = exports['default'];","\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = require(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n  return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};","// @flow\n\nimport { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of {@link AbstractDialogTab}.\n */\nexport type Props = {\n\n    /**\n     * Function that closes the dialog.\n     */\n    closeDialog: Function,\n\n    /**\n     * Callback to invoke on change.\n     */\n    onTabStateChange: Function,\n\n    /**\n     * The id of the tab.\n     */\n    tabId: number\n};\n\n\n/**\n * Abstract React {@code Component} for tabs of the DialogWithTabs component.\n *\n * @extends Component\n */\nclass AbstractDialogTab<P: Props, S: *> extends Component<P, S> {\n    /**\n     * Initializes a new {@code AbstractDialogTab} instance.\n     *\n     * @param {P} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onChange = this._onChange.bind(this);\n    }\n\n    _onChange: (Object) => void;\n\n    /**\n     * Uses the onTabStateChange function to pass the changed state of the\n     * controlled tab component to the controlling DialogWithTabs component.\n     *\n     * @param {Object} change - Object that contains the changed property and\n     * value.\n     * @returns {void}\n     */\n    _onChange(change) {\n        const { onTabStateChange, tabId } = this.props;\n\n        onTabStateChange(tabId, {\n            ...this.props,\n            ...change\n        });\n    }\n\n}\n\nexport default AbstractDialogTab;\n","module.exports = {\n  angry: [\">:(\", \">:-(\"],\n  blush: [':\")', ':-\")'],\n  broken_heart: [\"</3\", \"<\\\\3\"],\n  confused: [\":/\", \":-/\"],\n  cry: [\":'(\", \":'-(\", \":,(\", \":,-(\"],\n  frowning: [\":(\", \":-(\"],\n  heart: [\"<3\"],\n  imp: [\"]:(\", \"]:-(\"],\n  innocent: [\"o:)\", \"O:)\", \"o:-)\", \"O:-)\", \"0:)\", \"0:-)\"],\n  joy: [\":')\", \":'-)\", \":,)\", \":,-)\", \":'D\", \":'-D\", \":,D\", \":,-D\"],\n  kissing: [\":*\", \":-*\"],\n  laughing: [\"x-)\", \"X-)\"],\n  neutral_face: [\":|\", \":-|\"],\n  open_mouth: [\":o\", \":-o\", \":O\", \":-O\"],\n  rage: [\":@\", \":-@\"],\n  smile: [\":D\", \":-D\"],\n  smiley: [\":)\", \":-)\"],\n  smiling_imp: [\"]:)\", \"]:-)\"],\n  sob: [\":,'(\", \":,'-(\", \";(\", \";-(\"],\n  stuck_out_tongue: [\":P\", \":-P\", \":p\", \":-p\"],\n  sunglasses: [\"8-)\", \"B-)\"],\n  sweat: [\",:(\", \",:-(\"],\n  sweat_smile: [\",:)\", \",:-)\"],\n  unamused: [\":s\", \":-S\", \":z\", \":-Z\", \":$\", \":-$\"],\n  wink: [\";)\", \";-)\"]\n};\n","// @flow\n\nimport type { Card as CardType, CommonState } from '../types';\n\nimport React, { Component } from 'react';\nimport { connect } from '../../base/redux';\nimport { getParticipantDisplayName } from '../../base/participants';\nimport { translate } from '../../base/i18n';\nimport { cards, getFontPercentage, playerState, playerStateI18nParams } from '../functions';\nimport Card from './Card';\nimport { getCurrentLayout } from '../../video-layout';\n\nexport type Props = {\n    participantId: string,\n    dispatch: Function,\n    t: Function,\n    _amount: number,\n    _bet: number,\n    _folded: boolean,\n    _cards: Array<CardType>,\n    _dealer: boolean,\n    _state: string,\n    _playerState: string,\n    _playerStateI18nParams: Object,\n    _currentLayout: string,\n    _fontPercentage: number\n}\n\ntype State = {\n\n}\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Implements a class to render poker in the app.\n */\nclass Poker extends Component<Props, State> {\n\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            // value: false\n        };\n    }\n\n    render() {\n\n        const { t } = this.props;\n\n        if (this.props.participantId === 'table') {\n            return <div />;\n        }\n\n        return (\n            <div\n                className = { this._pokerClasses() }\n                style = {{ fontSize: `${this.props._fontPercentage}%` }}>\n                <div\n                    className = 'info'\n                    style = {{ right: `${(interfaceConfig.FILM_STRIP_MAX_HEIGHT || 120) + 25 + 100}px` }}>\n\n                    {this.props._amount > 0\n                    && <div>{ t('poker.stack') }: {this.props._amount}</div>}\n\n                    {this.props._bet > 0\n                    && <div>{ t('poker.bet') }: {this.props._bet}</div>}\n\n                    <div className = { `state ${this.props._playerState}` }>\n                        { t(`poker.state.${this.props._playerState}`, this.props._playerStateI18nParams) }\n                    </div>\n\n                    {this.props._dealer\n                    && <span className = 'dealer-button'><span>Dealer</span></span>}\n                </div>\n                {this.props._cards.map((card, i) => (<Card\n                    card = { card }\n                    key = { i } />))}\n            </div>\n        );\n    }\n\n    // _pokerClasses: () => string;\n    _pokerClasses() {\n        return [ 'player', this.props._playerState, this.props._currentLayout ].join(' ');\n    }\n}\n\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const commonState: CommonState = state['features/poker'].common;\n    const { players } = commonState;\n    const { participantId } = ownProps;\n\n    const nick = getParticipantDisplayName(state, participantId);\n    const player = players[nick];\n\n    return {\n        _amount: player ? player.amount : null,\n        _bet: player ? player.bet : null,\n        _folded: player ? player.fold : null,\n        _cards: cards(state, nick, true),\n        _dealer: commonState.game.dealer === nick,\n        _state: JSON.stringify(state['features/poker']),\n        _playerState: playerState(state, nick),\n        _playerStateI18nParams: playerStateI18nParams(state, nick),\n        _currentLayout: getCurrentLayout(state),\n        _fontPercentage: getFontPercentage(state)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(Poker));\n","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return _toConsumableArray(ancestorData).concat([data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_assertThisInitialized(_this)), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport { colors, themed } from '@atlaskit/theme';\nimport { themeNamespace as buttonThemeNamespace } from '@atlaskit/button';\nvar lightButtonBackground = 'rgba(255, 255, 255, 0.08)';\nexport var flagBackgroundColor = themed('appearance', {\n  error: {\n    light: colors.R400,\n    dark: colors.R300\n  },\n  info: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  normal: {\n    light: colors.N0,\n    dark: colors.DN50\n  },\n  success: {\n    light: colors.G400,\n    dark: colors.G300\n  },\n  warning: {\n    light: colors.Y200,\n    dark: colors.Y300\n  }\n});\nexport var flagBorderColor = themed('appearance', {\n  // $FlowFixMe - theme is not found in props\n  normal: {\n    light: colors.N60A\n  }\n});\nexport var flagTextColor = themed('appearance', {\n  error: {\n    light: colors.N0,\n    dark: colors.DN40\n  },\n  info: {\n    light: colors.N0,\n    dark: colors.DN600\n  },\n  normal: {\n    light: colors.N500,\n    dark: colors.DN600\n  },\n  success: {\n    light: colors.N0,\n    dark: colors.DN40\n  },\n  warning: {\n    light: colors.N700,\n    dark: colors.DN40\n  }\n});\nexport var flagShadowColor = themed('appearance', {\n  error: {\n    light: colors.N50A,\n    dark: colors.N50A\n  },\n  info: {\n    light: colors.N50A,\n    dark: colors.N50A\n  },\n  normal: {\n    light: colors.N50A,\n    dark: colors.N50A\n  },\n  success: {\n    light: colors.N50A,\n    dark: colors.N50A\n  },\n  warning: {\n    light: colors.N50A,\n    dark: colors.N50A\n  }\n}); // $FlowFixMe - theme is not found in props\n\nexport var flagFocusRingColor = themed('appearance', {\n  error: {\n    light: colors.N40,\n    dark: colors.N40\n  },\n  info: {\n    light: colors.N40,\n    dark: colors.N40\n  },\n  normal: {\n    light: colors.B100,\n    dark: colors.link\n  },\n  success: {\n    light: colors.N40,\n    dark: colors.N40\n  },\n  warning: {\n    light: colors.N200,\n    dark: colors.N200\n  }\n});\nvar shared = {\n  textDecoration: {\n    hover: 'underline',\n    active: 'underline'\n  }\n};\nexport var getFlagTheme = function getFlagTheme(theme) {\n  return _objectSpread({}, theme, _defineProperty({}, buttonThemeNamespace, _objectSpread({}, theme && theme[buttonThemeNamespace], {\n    success: _objectSpread({}, shared, {\n      color: {\n        default: themed({\n          light: colors.N0,\n          dark: colors.DN40\n        }),\n        hover: themed({\n          light: colors.N0,\n          dark: colors.DN40\n        }),\n        active: themed({\n          light: colors.N0,\n          dark: colors.DN40\n        })\n      },\n      background: {\n        default: themed({\n          light: lightButtonBackground,\n          dark: colors.N30A\n        })\n      }\n    }),\n    info: _objectSpread({}, shared, {\n      color: {\n        default: themed({\n          light: colors.N0,\n          dark: colors.DN600\n        }),\n        hover: themed({\n          light: colors.N0,\n          dark: colors.DN600\n        }),\n        active: themed({\n          light: colors.N0,\n          dark: colors.DN600\n        })\n      },\n      background: {\n        default: themed({\n          light: lightButtonBackground,\n          dark: lightButtonBackground\n        })\n      }\n    }),\n    error: _objectSpread({}, shared, {\n      color: {\n        default: themed({\n          light: colors.N0,\n          dark: colors.DN600\n        }),\n        hover: themed({\n          light: colors.N0,\n          dark: colors.DN600\n        }),\n        active: themed({\n          light: colors.N0,\n          dark: colors.DN600\n        })\n      },\n      background: {\n        default: themed({\n          light: lightButtonBackground,\n          dark: colors.N30A\n        })\n      }\n    }),\n    warning: _objectSpread({}, shared, {\n      color: {\n        default: themed({\n          light: colors.N700,\n          dark: colors.DN40\n        }),\n        hover: themed({\n          light: colors.N700,\n          dark: colors.DN40\n        }),\n        active: themed({\n          light: colors.N700,\n          dark: colors.DN40\n        })\n      },\n      background: {\n        default: themed({\n          light: colors.N30A,\n          dark: colors.N30A\n        })\n      }\n    }),\n    normal: {}\n  })));\n};","import styled from 'styled-components';\nimport { borderRadius, gridSize, math } from '@atlaskit/theme';\nimport { flagBackgroundColor, flagBorderColor, flagTextColor, flagShadowColor, flagFocusRingColor } from '../../theme';\n\nvar getBoxShadow = function getBoxShadow(props) {\n  var borderColor = flagBorderColor(props);\n  var shadowColor = flagShadowColor(props);\n  var border = borderColor && \"0 0 1px \".concat(borderColor);\n  var shadow = \"0 20px 32px -8px \".concat(shadowColor);\n  return [border, shadow].filter(function (p) {\n    return p;\n  }).join(',');\n};\n\nexport default styled.div.withConfig({\n  displayName: \"styledFlag\",\n  componentId: \"qhniyv-0\"\n})([\"\\n  background-color: \", \";\\n  border-radius: \", \"px;\\n  box-sizing: border-box;\\n  box-shadow: \", \";\\n  color: \", \";\\n  padding: \", \"px;\\n  transition: background-color 200ms;\\n  width: 100%;\\n  z-index: 600;\\n\\n  &:focus {\\n    outline: none;\\n    box-shadow: 0 0 0 2px \", \";\\n  }\\n\"], flagBackgroundColor, borderRadius, getBoxShadow, flagTextColor, math.multiply(gridSize, 2), flagFocusRingColor); // Header\n\nexport var Header = styled.div.withConfig({\n  displayName: \"styledFlag__Header\",\n  componentId: \"qhniyv-1\"\n})([\"\\n  display: flex;\\n  align-items: center;\\n  height: \", \"px;\\n\"], math.multiply(gridSize, 4));\nexport var Icon = styled.div.withConfig({\n  displayName: \"styledFlag__Icon\",\n  componentId: \"qhniyv-2\"\n})([\"\\n  flex: 0 0 auto;\\n  width: \", \"px;\\n\"], math.multiply(gridSize, 5));\nexport var Title = styled.span.withConfig({\n  displayName: \"styledFlag__Title\",\n  componentId: \"qhniyv-3\"\n})([\"\\n  color: \", \";\\n  font-weight: 600;\\n  flex: 1;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n\"], flagTextColor);\nexport var DismissButton = styled.button.withConfig({\n  displayName: \"styledFlag__DismissButton\",\n  componentId: \"qhniyv-4\"\n})([\"\\n  appearance: none;\\n  background: none;\\n  border: none;\\n  border-radius: \", \"px;\\n  color: \", \";\\n  cursor: pointer;\\n  flex: 0 0 auto;\\n  margin-left: \", \"px;\\n  padding: 0;\\n  white-space: nowrap;\\n\\n  &:focus {\\n    outline: none;\\n    box-shadow: 0 0 0 2px \", \";\\n  }\\n\"], borderRadius, flagTextColor, gridSize, flagFocusRingColor); // Content\n\nexport var Content = styled.div.withConfig({\n  displayName: \"styledFlag__Content\",\n  componentId: \"qhniyv-5\"\n})([\"\\n  display: flex;\\n  flex: 1 1 100%;\\n  flex-direction: column;\\n  justify-content: center;\\n  min-width: 0;\\n  padding: 0 0 0 \", \"px;\\n\"], math.multiply(gridSize, 5));\nexport var Expander = styled.div.withConfig({\n  displayName: \"styledFlag__Expander\",\n  componentId: \"qhniyv-6\"\n})([\"\\n  max-height: \", \"px;\\n  opacity: \", \";\\n  overflow: \", \";\\n  transition: max-height 0.3s, opacity 0.3s;\\n\"], function (_ref) {\n  var isExpanded = _ref.isExpanded;\n  return isExpanded ? 150 : 0;\n}, function (_ref2) {\n  var isExpanded = _ref2.isExpanded;\n  return isExpanded ? 1 : 0;\n}, function (_ref3) {\n  var isExpanded = _ref3.isExpanded;\n  return isExpanded ? 'visible' : 'hidden';\n});\nexport var Description = styled.div.withConfig({\n  displayName: \"styledFlag__Description\",\n  componentId: \"qhniyv-7\"\n})([\"\\n  color: \", \";\\n  word-wrap: break-word;\\n\"], flagTextColor);","import styled from 'styled-components';\nexport default styled.div.withConfig({\n  displayName: \"styledExpander\",\n  componentId: \"ps1py7-0\"\n})([\"\\n  max-height: \", \"px;\\n  opacity: \", \";\\n  overflow: \", \";\\n  transition: max-height 0.3s, opacity 0.3s;\\n\"], function (_ref) {\n  var isExpanded = _ref.isExpanded;\n  return isExpanded ? 150 : 0;\n}, function (_ref2) {\n  var isExpanded = _ref2.isExpanded;\n  return isExpanded ? 1 : 0;\n}, function (_ref3) {\n  var isExpanded = _ref3.isExpanded;\n  return isExpanded ? 'visible' : 'hidden';\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport ExpanderInternal from './styledExpander';\n\nvar Expander =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Expander, _Component);\n\n  function Expander() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Expander);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Expander)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"props\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      isAnimating: false\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleTransitionEnd\", function () {\n      _this.setState({\n        isAnimating: false\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(Expander, [{\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(nextProps) {\n      if (this.props.isExpanded !== nextProps.isExpanded) {\n        this.setState({\n          isAnimating: true\n        });\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          children = _this$props.children,\n          isExpanded = _this$props.isExpanded;\n      var isAnimating = this.state.isAnimating; // Need to always render the ExpanderInternal otherwise the\n      // reveal transiton doesn't happen. We can't use CSS animation for\n      // the the reveal because we don't know the height of the content.\n\n      var childrenIfExpanded = isAnimating || isExpanded ? children : null;\n      return React.createElement(ExpanderInternal, {\n        \"aria-hidden\": !isExpanded,\n        isExpanded: isExpanded,\n        onTransitionEnd: this.handleTransitionEnd\n      }, childrenIfExpanded);\n    }\n  }]);\n\n  return Expander;\n}(Component);\n\n_defineProperty(Expander, \"defaultProps\", {\n  isExpanded: false\n});\n\nexport { Expander as default };","/* eslint-disable no-confusing-arrow */\nimport styled, { css } from 'styled-components';\nimport { gridSize, math } from '@atlaskit/theme';\nimport Button from '@atlaskit/button';\nimport { flagTextColor, flagFocusRingColor } from '../../theme'; // Outputs the styles for actions separator: mid-dot for non-bold flags, or space for bold flags.\n\nvar getDivider = function getDivider(_ref) {\n  var hasDivider = _ref.hasDivider,\n      useMidDot = _ref.useMidDot;\n  return css([\"\\n  display: \", \";\\n  content: \\\"\", \"\\\";\\n  width: \", \"px;\\n\"], hasDivider ? 'inline-block' : 'none', useMidDot ? \"\\xB7\" : '', useMidDot ? math.multiply(gridSize, 2) : gridSize);\n};\n\nexport default styled.div.withConfig({\n  displayName: \"styledFlagActions\",\n  componentId: \"sc-11oivld-0\"\n})([\"\\n  display: flex;\\n  flex-wrap: wrap;\\n  padding-top: \", \"px;\\n\"], gridSize);\nexport var Action = styled.div.withConfig({\n  displayName: \"styledFlagActions__Action\",\n  componentId: \"sc-11oivld-1\"\n})([\"\\n  &::before {\\n    color: \", \";\\n    text-align: center;\\n    vertical-align: middle;\\n\\n    \", \";\\n  }\\n\"], flagTextColor, getDivider);\nexport var StyledButton = styled(Button).withConfig({\n  displayName: \"styledFlagActions__StyledButton\",\n  componentId: \"sc-11oivld-2\"\n})([\"\\n  &,\\n  a& {\\n    font-weight: 500;\\n    padding: 0 \", \"px !important;\\n    &:focus {\\n      box-shadow: 0 0 0 2px \", \";\\n    }\\n  }\\n\"], function (p) {\n  return p.appearance === 'link' ? 0 : gridSize();\n}, flagFocusRingColor);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport uuid from 'uuid/v1';\nimport { ThemeProvider } from 'styled-components';\nimport Container, { Action, StyledButton } from './styledFlagActions';\nimport { getFlagTheme } from '../../theme';\nimport { DEFAULT_APPEARANCE } from '../Flag';\n\nvar FlagActions =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(FlagActions, _Component);\n\n  function FlagActions() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, FlagActions);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(FlagActions)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"props\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getButtonFocusRingColor\", function () {\n      return 'focusRingColor';\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getButtonTheme\", function () {\n      return 'buttonTheme';\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getButtonAppearance\", function (b) {\n      return b ? 'default' : 'subtle-link';\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getButtonSpacing\", function (b) {\n      return b ? 'compact' : 'none';\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getUniqueId\", function (prefix) {\n      return \"\".concat(prefix, \"-\").concat(uuid());\n    });\n\n    return _this;\n  }\n\n  _createClass(FlagActions, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          actions = _this$props.actions,\n          appearance = _this$props.appearance,\n          linkComponent = _this$props.linkComponent;\n      var isBold = appearance !== DEFAULT_APPEARANCE;\n      if (!actions.length) return null;\n      var items = actions.map(function (action, index) {\n        return React.createElement(Action, {\n          key: _this2.getUniqueId('flag-action'),\n          hasDivider: !!index,\n          useMidDot: !isBold\n        }, React.createElement(StyledButton, {\n          onClick: action.onClick,\n          href: action.href,\n          target: action.target // This is verymuch a hack\n          // This should be tidied up when the appearance prop of flag is aligned\n          // with other appearance props.\n          ,\n          appearance: appearance === 'normal' ? 'link' : appearance,\n          component: linkComponent,\n          spacing: \"compact\"\n        }, action.content));\n      });\n      return React.createElement(ThemeProvider, {\n        theme: getFlagTheme\n      }, React.createElement(Container, null, items));\n    }\n  }]);\n\n  return FlagActions;\n}(Component);\n\n_defineProperty(FlagActions, \"defaultProps\", {\n  appearance: DEFAULT_APPEARANCE,\n  actions: []\n});\n\nexport { FlagActions as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport CrossIcon from '@atlaskit/icon/glyph/cross';\nimport ChevronUpIcon from '@atlaskit/icon/glyph/chevron-up';\nimport ChevronDownIcon from '@atlaskit/icon/glyph/chevron-down';\nimport { name as packageName, version as packageVersion } from '../../../package.json';\nimport Container, { Description, DismissButton, Icon, Content, Title, Header } from './styledFlag';\nimport Expander from '../Expander';\nimport Actions from '../FlagActions';\nimport { flagFocusRingColor } from '../../theme';\nexport var DEFAULT_APPEARANCE = 'normal';\n\nvar Flag =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Flag, _Component);\n\n  function Flag() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Flag);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Flag)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"props\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      isExpanded: false\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"dismissFlag\", function () {\n      if (_this.props.isDismissAllowed && _this.props.onDismissed) {\n        _this.props.onDismissed(_this.props.id);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"isBold\", function () {\n      return _this.props.appearance !== DEFAULT_APPEARANCE;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"toggleExpand\", function () {\n      _this.setState({\n        isExpanded: !_this.state.isExpanded\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"renderToggleOrDismissButton\", function () {\n      var _this$props = _this.props,\n          appearance = _this$props.appearance,\n          description = _this$props.description,\n          actions = _this$props.actions,\n          isDismissAllowed = _this$props.isDismissAllowed,\n          onDismissed = _this$props.onDismissed;\n\n      var isBold = _this.isBold();\n\n      if (!isDismissAllowed || !isBold && !onDismissed || isBold && !description && (!actions || !actions.length)) {\n        return null;\n      }\n\n      var ChevronIcon = _this.state.isExpanded ? ChevronUpIcon : ChevronDownIcon;\n      var ButtonIcon = isBold ? ChevronIcon : CrossIcon;\n      var buttonLabel = isBold ? 'Toggle flag body' : 'Dismiss flag';\n      var buttonAction = isBold ? _this.toggleExpand : _this.dismissFlag;\n      var size = ButtonIcon === ChevronIcon ? 'large' : 'small';\n      return React.createElement(DismissButton, {\n        appearance: appearance,\n        \"aria-expanded\": _this.state.isExpanded // $FlowFixMe - theme is not found in props\n        ,\n        focusRingColor: flagFocusRingColor(_this.props),\n        onClick: buttonAction,\n        type: \"button\"\n      }, React.createElement(ButtonIcon, {\n        label: buttonLabel,\n        size: size\n      }));\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"renderBody\", function () {\n      var _this$props2 = _this.props,\n          actions = _this$props2.actions,\n          appearance = _this$props2.appearance,\n          description = _this$props2.description,\n          linkComponent = _this$props2.linkComponent;\n      var isExpanded = !_this.isBold() || _this.state.isExpanded;\n      return React.createElement(Expander, {\n        isExpanded: isExpanded\n      }, description && React.createElement(Description, {\n        appearance: appearance\n      }, description), React.createElement(Actions, {\n        actions: actions,\n        appearance: appearance,\n        linkComponent: linkComponent\n      }));\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseDown\", function (e) {\n      e.preventDefault();\n    });\n\n    return _this;\n  }\n\n  _createClass(Flag, [{\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(nextProps) {\n      var actions = nextProps.actions,\n          description = nextProps.description;\n\n      if (this.isBold() && this.state.isExpanded && !description && (!actions || !actions.length)) {\n        this.toggleExpand();\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props3 = this.props,\n          appearance = _this$props3.appearance,\n          icon = _this$props3.icon,\n          title = _this$props3.title,\n          onMouseOver = _this$props3.onMouseOver,\n          onFocus = _this$props3.onFocus,\n          onMouseOut = _this$props3.onMouseOut,\n          onBlur = _this$props3.onBlur;\n      var autoDismissProps = {\n        onMouseOver: onMouseOver,\n        onFocus: onFocus,\n        onMouseOut: onMouseOut,\n        onBlur: onBlur\n      };\n      var OptionalDismissButton = this.renderToggleOrDismissButton;\n      var Body = this.renderBody;\n      return React.createElement(Container, _extends({\n        appearance: appearance,\n        role: \"alert\",\n        tabIndex: \"0\",\n        onMouseDown: this.handleMouseDown\n      }, autoDismissProps), React.createElement(Header, null, React.createElement(Icon, null, icon), React.createElement(Title, {\n        appearance: appearance\n      }, title), React.createElement(OptionalDismissButton, null)), React.createElement(Content, null, React.createElement(Body, null)));\n    }\n  }]);\n\n  return Flag;\n}(Component);\n\n_defineProperty(Flag, \"defaultProps\", {\n  actions: [],\n  appearance: DEFAULT_APPEARANCE,\n  isDismissAllowed: false\n});\n\nexport { Flag as FlagWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'flag',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onBlur: createAndFireEventOnAtlaskit({\n    action: 'blurred',\n    actionSubject: 'flag',\n    attributes: {\n      componentName: 'flag',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  }),\n  onDismissed: createAndFireEventOnAtlaskit({\n    action: 'dismissed',\n    actionSubject: 'flag',\n    attributes: {\n      componentName: 'flag',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  }),\n  onFocus: createAndFireEventOnAtlaskit({\n    action: 'focused',\n    actionSubject: 'flag',\n    attributes: {\n      componentName: 'flag',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Flag));","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","// @flow\n\nimport { Component } from 'react';\n\nimport { NOTIFICATION_TYPE } from '../constants';\n\nexport type Props = {\n\n    /**\n     * Display appearance for the component, passed directly to the\n     * notification.\n     */\n    appearance: string,\n\n    /**\n     * Callback invoked when the custom button is clicked.\n     */\n    customActionHandler: Function,\n\n    /**\n     * The text to display as button in the notification for the custom action.\n     */\n    customActionNameKey: string,\n\n    /**\n     * The text to display in the body of the notification. If not passed\n     * in, the passed in descriptionKey will be used.\n     */\n    defaultTitleKey: string,\n\n    /**\n     * A description string that can be used in addition to the prop\n     * descriptionKey.\n     */\n    description: string,\n\n    /**\n     * The translation arguments that may be necessary for the description.\n     */\n    descriptionArguments: Object,\n\n    /**\n     * The translation key to use as the body of the notification.\n     */\n    descriptionKey: string,\n\n    /**\n     * Whether the support link should be hidden in the case of an error\n     * message.\n     */\n    hideErrorSupportLink: boolean,\n\n    /**\n     * Whether or not the dismiss button should be displayed.\n     */\n    isDismissAllowed: boolean,\n\n    /**\n     * Callback invoked when the user clicks to dismiss the notification.\n     */\n    onDismissed: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * The text to display at the top of the notification. If not passed in,\n     * the passed in titleKey will be used.\n     */\n    title: string,\n\n    /**\n     * The translation arguments that may be necessary for the title.\n     */\n    titleArguments: Object,\n\n    /**\n     * The translation key to display as the title of the notification if\n     * no title is provided.\n     */\n    titleKey: string,\n\n    /**\n     * The unique identifier for the notification.\n     */\n    uid: number\n};\n\n/**\n * Abstract class for {@code Notification} component.\n *\n * @extends Component\n */\nexport default class AbstractNotification<P: Props> extends Component<P> {\n    /**\n     * Default values for {@code Notification} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        appearance: NOTIFICATION_TYPE.NORMAL,\n        isDismissAllowed: true\n    };\n\n    /**\n     * Initializes a new {@code Notification} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onDismissed = this._onDismissed.bind(this);\n    }\n\n    _getDescription: () => Array<string>\n\n    /**\n     * Returns the description array to be displayed.\n     *\n     * @protected\n     * @returns {Array<string>}\n     */\n    _getDescription() {\n        const {\n            description,\n            descriptionArguments,\n            descriptionKey,\n            t\n        } = this.props;\n\n        const descriptionArray = [];\n\n        descriptionKey\n            && descriptionArray.push(t(descriptionKey, descriptionArguments));\n\n        description && descriptionArray.push(description);\n\n        return descriptionArray;\n    }\n\n    _onDismissed: () => void;\n\n    /**\n     * Callback to dismiss the notification.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onDismissed() {\n        this.props.onDismissed(this.props.uid);\n    }\n}\n","// @flow\n\nimport Flag from '@atlaskit/flag';\nimport EditorInfoIcon from '@atlaskit/icon/glyph/editor/info';\nimport ErrorIcon from '@atlaskit/icon/glyph/error';\nimport WarningIcon from '@atlaskit/icon/glyph/warning';\nimport { colors } from '@atlaskit/theme';\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\n\nimport { NOTIFICATION_TYPE } from '../../constants';\n\nimport AbstractNotification, {\n    type Props\n} from '../AbstractNotification';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Secondary colors for notification icons.\n *\n * @type {{error, info, normal, success, warning}}\n */\nconst ICON_COLOR = {\n    error: colors.R400,\n    info: colors.N500,\n    normal: colors.N0,\n    success: colors.G400,\n    warning: colors.Y200\n};\n\n/**\n * Implements a React {@link Component} to display a notification.\n *\n * @extends Component\n */\nclass Notification extends AbstractNotification<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            appearance,\n            hideErrorSupportLink,\n            isDismissAllowed,\n            onDismissed,\n            t,\n            title,\n            titleArguments,\n            titleKey,\n            uid\n        } = this.props;\n\n        return (\n            <Flag\n                actions = { this._mapAppearanceToButtons(hideErrorSupportLink) }\n                appearance = { appearance }\n                description = { this._renderDescription() }\n                icon = { this._mapAppearanceToIcon() }\n                id = { uid }\n                isDismissAllowed = { isDismissAllowed }\n                onDismissed = { onDismissed }\n                title = { title || t(titleKey, titleArguments) } />\n        );\n    }\n\n    _getDescription: () => Array<string>\n\n    _onDismissed: () => void;\n\n    /**\n     * Creates a {@code ReactElement} for displaying the contents of the\n     * notification.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderDescription() {\n        return (\n            <div>\n                {\n                    this._getDescription()\n                }\n            </div>\n        );\n    }\n\n    /**\n     * Opens the support page.\n     *\n     * @returns {void}\n     * @private\n     */\n    _onOpenSupportLink() {\n        window.open(interfaceConfig.SUPPORT_URL, '_blank', 'noopener');\n    }\n\n    /**\n     * Creates action button configurations for the notification based on\n     * notification appearance.\n     *\n     * @param {boolean} hideErrorSupportLink - Indicates if the support link\n     * should be hidden in the error messages.\n     * @private\n     * @returns {Object[]}\n     */\n    _mapAppearanceToButtons(hideErrorSupportLink) {\n        switch (this.props.appearance) {\n        case NOTIFICATION_TYPE.ERROR: {\n            const buttons = [\n                {\n                    content: this.props.t('dialog.dismiss'),\n                    onClick: this._onDismissed\n                }\n            ];\n\n            if (!hideErrorSupportLink) {\n                buttons.push({\n                    content: this.props.t('dialog.contactSupport'),\n                    onClick: this._onOpenSupportLink\n                });\n            }\n\n            return buttons;\n        }\n        case NOTIFICATION_TYPE.WARNING:\n            return [\n                {\n                    content: this.props.t('dialog.Ok'),\n                    onClick: this._onDismissed\n                }\n            ];\n\n        default:\n            if (this.props.customActionNameKey && this.props.customActionHandler) {\n                return [\n                    {\n                        content: this.props.t(this.props.customActionNameKey),\n                        onClick: () => {\n                            if (this.props.customActionHandler()) {\n                                this._onDismissed();\n                            }\n                        }\n                    }\n                ];\n            }\n\n            return [];\n        }\n    }\n\n    /**\n     * Creates an icon component depending on the configured notification\n     * appearance.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _mapAppearanceToIcon() {\n        const appearance = this.props.appearance;\n        const secIconColor = ICON_COLOR[this.props.appearance];\n        const iconSize = 'medium';\n\n        switch (appearance) {\n        case NOTIFICATION_TYPE.ERROR:\n            return (\n                <ErrorIcon\n                    label = { appearance }\n                    secondaryColor = { secIconColor }\n                    size = { iconSize } />\n            );\n\n        case NOTIFICATION_TYPE.WARNING:\n            return (\n                <WarningIcon\n                    label = { appearance }\n                    secondaryColor = { secIconColor }\n                    size = { iconSize } />\n            );\n\n        default:\n            return (\n                <EditorInfoIcon\n                    label = { appearance }\n                    secondaryColor = { secIconColor }\n                    size = { iconSize } />\n            );\n        }\n    }\n}\n\nexport default translate(Notification);\n","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport invariant from 'tiny-invariant';\nimport { canUseDOM } from 'exenv';\n\nvar createContainer = function createContainer(zIndex) {\n  var container = document.createElement('div');\n  container.setAttribute('class', 'atlaskit-portal');\n  container.setAttribute('style', \"z-index: \".concat(zIndex, \";\"));\n  return container;\n};\n\nvar body = function body() {\n  invariant(document && document.body, 'cannot find document.body');\n  return document.body;\n};\n\nvar portalParent = function portalParent() {\n  var parentElement = document.querySelector('body > .atlaskit-portal-container');\n\n  if (!parentElement) {\n    var parent = document.createElement('div');\n    parent.setAttribute('class', 'atlaskit-portal-container');\n    parent.setAttribute('style', \"display: flex;\");\n    body().appendChild(parent);\n    return parent;\n  }\n\n  return parentElement;\n}; // This is a generic component does two things:\n// 1. Portals it's children using React.createPortal\n// 2. Creates the DOM node container for the portal based on props\n// 3. Ensures DOM the container creates it's own stacking context\n\n\nvar Portal =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inherits(Portal, _React$Component);\n\n  function Portal() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Portal);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Portal)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      container: canUseDOM ? createContainer(_this.props.zIndex) : undefined\n    });\n\n    return _this;\n  }\n\n  _createClass(Portal, [{\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps, prevState) {\n      var container = this.state.container;\n      var zIndex = this.props.zIndex;\n\n      if (container && prevProps.zIndex !== zIndex) {\n        var newContainer = createContainer(zIndex);\n        portalParent().replaceChild(container, newContainer); // eslint-disable-next-line react/no-did-update-set-state\n\n        this.setState({\n          container: newContainer\n        });\n      } else if (!prevState.container && container) {\n        // SSR path\n        portalParent().appendChild(container);\n      }\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var container = this.state.container;\n      var zIndex = this.props.zIndex;\n\n      if (container) {\n        portalParent().appendChild(container);\n      } else {\n        // SSR path\n        var newContainer = createContainer(zIndex); // eslint-disable-next-line react/no-did-mount-set-state\n\n        this.setState({\n          container: newContainer\n        });\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      var container = this.state.container;\n\n      if (container) {\n        portalParent().removeChild(container); // clean up parent element if there are no more portals\n\n        var portals = !!document.querySelector('body > .atlaskit-portal-container > .atlaskit-portal');\n\n        if (!portals) {\n          body().removeChild(portalParent());\n        }\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var container = this.state.container;\n      return container ? ReactDOM.createPortal(this.props.children, container) : this.props.children;\n    }\n  }]);\n\n  return Portal;\n}(React.Component);\n\n_defineProperty(Portal, \"defaultProps\", {\n  zIndex: 0\n});\n\nexport default Portal;","import styled, { keyframes } from 'styled-components';\nimport { gridSize } from '@atlaskit/theme';\nexport var flagWidth = gridSize() * 50; // This is the translateX position that we target when animating a card out\n// towards the left of screen.\n\nvar exitXPosition = \"\".concat(0 - flagWidth / 2, \"px\");\nvar flagAnimationDuration = '0.4s';\nvar animationEnter = keyframes([\"\\n    from {\\n      opacity: 0;\\n      transform: translate(\", \", 0);\\n    }\\n    to {\\n      opacity: 1;\\n      transform: translate(0, 0);\\n    }\\n\"], exitXPosition);\nvar animationLeave = keyframes([\"\\n  from {\\n    opacity: 1;\\n    transform: translate(0, 0);\\n  }\\n  to {\\n    opacity: 0;\\n    transform: translate(\", \", 0);\\n  }\\n\"], exitXPosition);\n\nvar getAnimation = function getAnimation(_ref) {\n  var transitionState = _ref.transitionState;\n\n  if (transitionState === 'entering') {\n    return \"\".concat(animationEnter, \" \").concat(flagAnimationDuration);\n  }\n\n  if (transitionState === 'exiting') {\n    return \"\".concat(animationLeave, \" \").concat(flagAnimationDuration);\n  }\n\n  return 'initial';\n};\n\nvar Wrapper = styled.div.withConfig({\n  displayName: \"Wrapper\",\n  componentId: \"sc-19lmueh-0\"\n})([\"\\n  bottom: 0;\\n  position: absolute;\\n  transition: transform \", \" ease-in-out;\\n  width: \", \"px;\\n\\n  &:first-child {\\n    animation: \", \";\\n  }\\n\\n  &:nth-child(n + 2) {\\n    transform: translateX(0) translateY(100%) translateY(\", \"px);\\n  }\\n\\n  /* Layer the 'primary' flag above the 'secondary' flag */\\n  &:nth-child(1) {\\n    z-index: 5;\\n  }\\n  &:nth-child(2) {\\n    z-index: 4;\\n  }\\n\\n  /* The 2nd flag should be placed at 0,0 position when the 1st flag is animating out. */\\n  \", \" &:nth-child(n+4) {\\n    display: none;\\n  }\\n\"], flagAnimationDuration, flagWidth, getAnimation, 2 * gridSize(), function (_ref2) {\n  var transitionState = _ref2.transitionState;\n  return transitionState === 'exiting' ? \"\\n    && + * {\\n      transform: translate(0, 0);\\n    }\\n  \" : null;\n});\nWrapper.displayName = 'Wrapper';\nexport default Wrapper;","import styled from 'styled-components';\nimport TransitionGroup from 'react-transition-group/TransitionGroup';\nimport { gridSize, math, layers } from '@atlaskit/theme';\nexport default styled.div.withConfig({\n  displayName: \"styledFlagGroup\",\n  componentId: \"sc-1dirlpz-0\"\n})([\"\\n  bottom: \", \"px;\\n  left: \", \"px;\\n  position: fixed;\\n  z-index: \", \";\\n\"], math.multiply(gridSize, 6), math.multiply(gridSize, 10), layers.flag);\nexport var SROnly = styled.h1.withConfig({\n  displayName: \"styledFlagGroup__SROnly\",\n  componentId: \"sc-1dirlpz-1\"\n})([\"\\n  border: 0;\\n  clip: rect(1px, 1px, 1px, 1px);\\n  height: 1px;\\n  overflow: hidden;\\n  padding: 0;\\n  position: absolute;\\n  white-space: nowrap;\\n  width: 1px;\\n\"]);\nexport var Inner = styled(TransitionGroup).withConfig({\n  displayName: \"styledFlagGroup__Inner\",\n  componentId: \"sc-1dirlpz-2\"\n})([\"\\n  position: relative;\\n\"]);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Children, cloneElement, Component } from 'react';\nimport { Transition } from 'react-transition-group';\nimport Portal from '@atlaskit/portal';\nimport { layers } from '@atlaskit/theme';\nimport Wrapper from '../../styled/Wrapper';\nimport Group, { SROnly, Inner } from './styledFlagGroup';\n\nvar FlagGroup =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(FlagGroup, _Component);\n\n  function FlagGroup() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, FlagGroup);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(FlagGroup)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"props\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"renderChildren\", function () {\n      var _this$props = _this.props,\n          children = _this$props.children,\n          onDismissed = _this$props.onDismissed;\n      return Children.map(children, function (flag, idx) {\n        var isDismissAllowed = idx === 0;\n        var id = flag.props.id;\n        return React.createElement(Transition, {\n          key: id,\n          addEndListener: function addEndListener(node, done) {\n            node.addEventListener('animationend', done);\n          }\n        }, function (transitionState) {\n          return React.createElement(Wrapper, {\n            transitionState: transitionState\n          }, cloneElement(flag, {\n            onDismissed: onDismissed,\n            isDismissAllowed: isDismissAllowed\n          }));\n        });\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(FlagGroup, [{\n    key: \"render\",\n    value: function render() {\n      return React.createElement(Portal, {\n        zIndex: layers.flag()\n      }, React.createElement(Group, null, React.createElement(SROnly, null, \"Flag notifications\"), React.createElement(Inner, {\n        component: \"div\"\n      }, this.renderChildren())));\n    }\n  }]);\n\n  return FlagGroup;\n}(Component);\n\nexport { FlagGroup as default };","// @flow\n\nimport { Component } from 'react';\n\nimport { hideNotification } from '../actions';\nimport { areThereNotifications } from '../functions';\n\nexport type Props = {\n\n    /**\n     * The notifications to be displayed, with the first index being the\n     * notification at the top and the rest shown below it in order.\n     */\n    _notifications: Array<Object>,\n\n    /**\n     * The length, in milliseconds, to use as a default timeout for all\n     * dismissable timeouts that do not have a timeout specified.\n     */\n    autoDismissTimeout: number,\n\n    /**\n     * Invoked to update the redux store in order to remove notifications.\n     */\n    dispatch: Function\n};\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Abstract class for {@code NotificationsContainer} component.\n */\nexport default class AbstractNotificationsContainer<P: Props>\n    extends Component<P> {\n    /**\n     * A timeout id returned by setTimeout.\n     */\n    _notificationDismissTimeout: ?TimeoutID;\n\n    /**\n     * Initializes a new {@code AbstractNotificationsContainer} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        /**\n         * The timeout set for automatically dismissing a displayed\n         * notification. This value is set on the instance and not state to\n         * avoid additional re-renders.\n         *\n         * @type {number|null}\n         */\n        this._notificationDismissTimeout = null;\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onDismissed = this._onDismissed.bind(this);\n    }\n\n    /**\n     * Sets a timeout for the first notification (if applicable).\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        // Set the initial dismiss timeout (if any)\n        this._manageDismissTimeout();\n    }\n\n    /**\n     * Sets a timeout if the currently displayed notification has changed.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: P) {\n        this._manageDismissTimeout(prevProps);\n    }\n\n    /**\n     * Sets/clears the dismiss timeout for the top notification.\n     *\n     * @param {P} [prevProps] - The previous properties (if called from\n     * {@code componentDidUpdate}).\n     * @returns {void}\n     * @private\n     */\n    _manageDismissTimeout(prevProps: ?P) {\n        const { _notifications, autoDismissTimeout } = this.props;\n\n        if (_notifications.length) {\n            const notification = _notifications[0];\n            const previousNotification\n                = prevProps && prevProps._notifications.length\n                    ? prevProps._notifications[0]\n                    : undefined;\n\n            if (notification !== previousNotification) {\n                this._clearNotificationDismissTimeout();\n\n                if (notification\n                        && (notification.timeout\n                            || typeof autoDismissTimeout === 'number')\n                        && notification.props.isDismissAllowed !== false) {\n                    const {\n                        timeout = autoDismissTimeout,\n                        uid\n                    } = notification;\n\n                    this._notificationDismissTimeout = setTimeout(() => {\n                        // Perform a no-op if a timeout is not specified.\n                        this._onDismissed(uid);\n                    }, timeout);\n                }\n            }\n        } else if (this._notificationDismissTimeout) {\n            // Clear timeout when all notifications are cleared (e.g external\n            // call to clear them)\n            this._clearNotificationDismissTimeout();\n        }\n    }\n\n    /**\n     * Clear any dismissal timeout that is still active.\n     *\n     * @inheritdoc\n     * returns {void}\n     */\n    componentWillUnmount() {\n        this._clearNotificationDismissTimeout();\n    }\n\n    _onDismissed: number => void;\n\n    /**\n     * Clears the running notification dismiss timeout, if any.\n     *\n     * @returns {void}\n     */\n    _clearNotificationDismissTimeout() {\n        this._notificationDismissTimeout\n            && clearTimeout(this._notificationDismissTimeout);\n\n        this._notificationDismissTimeout = null;\n    }\n\n    /**\n     * Emits an action to remove the notification from the redux store so it\n     * stops displaying.\n     *\n     * @param {number} uid - The id of the notification to be removed.\n     * @private\n     * @returns {void}\n     */\n    _onDismissed(uid) {\n        const { _notifications } = this.props;\n\n        // Clear the timeout only if it's the top notification that's being\n        // dismissed (the timeout is set only for the top one).\n        if (!_notifications.length || _notifications[0].uid === uid) {\n            this._clearNotificationDismissTimeout();\n        }\n\n        this.props.dispatch(hideNotification(uid));\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated NotificationsContainer's\n * props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _notifications: Array\n * }}\n */\nexport function _abstractMapStateToProps(state: Object) {\n    const { notifications } = state['features/notifications'];\n    const _visible = areThereNotifications(state);\n\n    return {\n        _notifications: _visible ? notifications : [],\n        autoDismissTimeout: typeof interfaceConfig === 'undefined'\n            ? undefined // Ignore for the case of mobile\n            : interfaceConfig.ENFORCE_NOTIFICATION_AUTO_DISMISS_TIMEOUT\n    };\n}\n","// @flow\n\nimport { FlagGroup } from '@atlaskit/flag';\nimport React from 'react';\n\nimport { connect } from '../../../base/redux';\n\nimport AbstractNotificationsContainer, {\n    _abstractMapStateToProps,\n    type Props as AbstractProps\n} from '../AbstractNotificationsContainer';\n\nimport Notification from './Notification';\n\ntype Props = AbstractProps & {\n\n    /**\n     * Whther we are a SIP gateway or not.\n     */\n     _iAmSipGateway: boolean\n};\n\n/**\n * Implements a React {@link Component} which displays notifications and handles\n * automatic dismissmal after a notification is shown for a defined timeout\n * period.\n *\n * @extends {Component}\n */\nclass NotificationsContainer extends AbstractNotificationsContainer<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (this.props._iAmSipGateway) {\n            return null;\n        }\n\n        return (\n            <FlagGroup onDismissed = { this._onDismissed }>\n                { this._renderFlags() }\n            </FlagGroup>\n        );\n    }\n\n    _onDismissed: number => void;\n\n    /**\n     * Renders notifications to display as ReactElements. An empty array will\n     * be returned if notifications are disabled.\n     *\n     * @private\n     * @returns {ReactElement[]}\n     */\n    _renderFlags() {\n        const { _notifications } = this.props;\n\n        return _notifications.map(notification => {\n            const { props, uid } = notification;\n\n            // The id attribute is necessary as {@code FlagGroup} looks for\n            // either id or key to set a key on notifications, but accessing\n            // props.key will cause React to print an error.\n            return (\n                <Notification\n                    { ...props }\n                    id = { uid }\n                    key = { uid }\n                    uid = { uid } />\n\n            );\n        });\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for this component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    const { iAmSipGateway } = state['features/base/config'];\n\n    return {\n        ..._abstractMapStateToProps(state),\n        _iAmSipGateway: Boolean(iAmSipGateway)\n    };\n}\n\n\nexport default connect(_mapStateToProps)(NotificationsContainer);\n","// @flow\n\nexport * from './web';\n","// @flow\n\nimport { openDialog } from '../../base/dialog';\nimport { IconKick } from '../../base/icons';\nimport { AbstractButton } from '../../base/toolbox';\nimport type { AbstractButtonProps } from '../../base/toolbox';\n\nimport { KickRemoteParticipantDialog } from '.';\n\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the participant that this button is supposed to kick.\n     */\n    participantID: string,\n\n    /**\n     * The function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * An abstract remote video menu button which kicks the remote participant.\n */\nexport default class AbstractKickButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.kick';\n    icon = IconKick;\n    label = 'videothumbnail.kick';\n\n    /**\n     * Handles clicking / pressing the button, and kicks the participant.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, participantID } = this.props;\n\n        dispatch(openDialog(KickRemoteParticipantDialog, { participantID }));\n    }\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { Icon } from '../../../base/icons';\n\n/**\n * The type of the React {@code Component} props of\n * {@link RemoteVideoMenuButton}.\n */\ntype Props = {\n\n    /**\n     * Text to display within the component that describes the onClick action.\n     */\n    buttonText: string,\n\n    /**\n     * Additional CSS classes to add to the component.\n     */\n    displayClass?: string,\n\n    /**\n     * The icon that will display within the component.\n     */\n    icon: Object,\n\n    /**\n     * The id attribute to be added to the component's DOM for retrieval when\n     * querying the DOM. Not used directly by the component.\n     */\n    id: string,\n\n    /**\n     * Callback to invoke when the component is clicked.\n     */\n    onClick: Function,\n};\n\n/**\n * React {@code Component} for displaying an action in {@code RemoteVideoMenu}.\n *\n * @extends {Component}\n */\nexport default class RemoteVideoMenuButton extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            buttonText,\n            displayClass,\n            icon,\n            id,\n            onClick\n        } = this.props;\n\n        const linkClassName = `popupmenu__link ${displayClass || ''}`;\n\n        return (\n            <li className = 'popupmenu__item'>\n                <a\n                    className = { linkClassName }\n                    id = { id }\n                    onClick = { onClick }>\n                    <span className = 'popupmenu__icon'>\n                        <Icon src = { icon } />\n                    </span>\n                    <span className = 'popupmenu__text'>\n                        { buttonText }\n                    </span>\n                </a>\n            </li>\n        );\n    }\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconKick } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\n\nimport AbstractKickButton, {\n    type Props\n} from '../AbstractKickButton';\n\nimport RemoteVideoMenuButton from './RemoteVideoMenuButton';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Implements a React {@link Component} which displays a button for kicking out\n * a participant from the conference.\n *\n * NOTE: At the time of writing this is a button that doesn't use the\n * {@code AbstractButton} base component, but is inherited from the same\n * super class ({@code AbstractKickButton} that extends {@code AbstractButton})\n * for the sake of code sharing between web and mobile. Once web uses the\n * {@code AbstractButton} base component, this can be fully removed.\n */\nclass KickButton extends AbstractKickButton {\n    /**\n     * Instantiates a new {@code Component}.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._handleClick = this._handleClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { participantID, t, visible } = this.props;\n\n        if (!visible) {\n            return null;\n        }\n\n        return (\n            <RemoteVideoMenuButton\n                buttonText = { t('videothumbnail.kick') }\n                displayClass = 'kicklink'\n                icon = { IconKick }\n                id = { `ejectlink_${participantID}` }\n                // eslint-disable-next-line react/jsx-handler-names\n                onClick = { this._handleClick } />\n        );\n    }\n\n    _handleClick: () => void\n}\n\n/**\n * Maps (parts of) the redux state to {@link KickButton}'s React {@code Component}\n * props.\n *\n * @param {Object} state - The redux store/state.\n * @private\n * @returns {Object}\n */\nfunction _mapStateToProps(state: Object) {\n    const shouldHide = interfaceConfig.HIDE_KICK_BUTTON_FOR_GUESTS && state['features/base/jwt'].isGuest;\n\n    return {\n        visible: !shouldHide\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(KickButton));\n\n","// @flow\n\nimport { Component } from 'react';\n\nimport {\n    createRemoteVideoMenuButtonEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { kickParticipant } from '../../base/participants';\n\ntype Props = {\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the remote participant to be kicked.\n     */\n    participantID: string,\n\n    /**\n     * Function to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * Abstract dialog to confirm a remote participant kick action.\n */\nexport default class AbstractKickRemoteParticipantDialog\n    extends Component<Props> {\n    /**\n     * Initializes a new {@code AbstractKickRemoteParticipantDialog} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Callback for the confirm button.\n     *\n     * @private\n     * @returns {boolean} - True (to note that the modal should be closed).\n     */\n    _onSubmit() {\n        const { dispatch, participantID } = this.props;\n\n        sendAnalytics(createRemoteVideoMenuButtonEvent(\n            'kick.button',\n            {\n                'participant_id': participantID\n            }));\n\n        dispatch(kickParticipant(participantID));\n\n        return true;\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\nimport AbstractKickRemoteParticipantDialog\n    from '../AbstractKickRemoteParticipantDialog';\n\n/**\n * Dialog to confirm a remote participant kick action.\n */\nclass KickRemoteParticipantDialog extends AbstractKickRemoteParticipantDialog {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                okKey = 'dialog.kickParticipantButton'\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.kickParticipantTitle'\n                width = 'small'>\n                <div>\n                    { this.props.t('dialog.kickParticipantDialog') }\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean;\n}\n\nexport default translate(connect()(KickRemoteParticipantDialog));\n","// @flow\n\nimport {\n    createRemoteVideoMenuButtonEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { openDialog } from '../../base/dialog';\nimport { IconMicDisabled } from '../../base/icons';\nimport { MEDIA_TYPE } from '../../base/media';\nimport {\n    AbstractButton,\n    type AbstractButtonProps\n} from '../../base/toolbox';\nimport { isRemoteTrackMuted } from '../../base/tracks';\n\nimport { MuteRemoteParticipantDialog } from '.';\n\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * Boolean to indicate if the audio track of the participant is muted or\n     * not.\n     */\n    _audioTrackMuted: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the participant object that this button is supposed to\n     * mute/unmute.\n     */\n    participantID: string,\n\n    /**\n     * The function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * An abstract remote video menu button which mutes the remote participant.\n */\nexport default class AbstractMuteButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.remoteMute';\n    icon = IconMicDisabled;\n    label = 'videothumbnail.domute';\n    toggledLabel = 'videothumbnail.muted';\n\n    /**\n     * Handles clicking / pressing the button, and mutes the participant.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, participantID } = this.props;\n\n        sendAnalytics(createRemoteVideoMenuButtonEvent(\n            'mute.button',\n            {\n                'participant_id': participantID\n            }));\n\n        dispatch(openDialog(MuteRemoteParticipantDialog, { participantID }));\n    }\n\n    /**\n     * Renders the item disabled if the participant is muted.\n     *\n     * @inheritdoc\n     */\n    _isDisabled() {\n        return this.props._audioTrackMuted;\n    }\n\n    /**\n     * Renders the item toggled if the participant is muted.\n     *\n     * @inheritdoc\n     */\n    _isToggled() {\n        return this.props._audioTrackMuted;\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @param {Object} ownProps - Properties of component.\n * @private\n * @returns {{\n *      _audioTrackMuted: boolean\n *  }}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const tracks = state['features/base/tracks'];\n\n    return {\n        _audioTrackMuted: isRemoteTrackMuted(\n            tracks, MEDIA_TYPE.AUDIO, ownProps.participantID)\n    };\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconMicDisabled } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\n\nimport AbstractMuteButton, {\n    _mapStateToProps,\n    type Props\n} from '../AbstractMuteButton';\n\nimport RemoteVideoMenuButton from './RemoteVideoMenuButton';\n\n/**\n * Implements a React {@link Component} which displays a button for audio muting\n * a participant in the conference.\n *\n * NOTE: At the time of writing this is a button that doesn't use the\n * {@code AbstractButton} base component, but is inherited from the same\n * super class ({@code AbstractMuteButton} that extends {@code AbstractButton})\n * for the sake of code sharing between web and mobile. Once web uses the\n * {@code AbstractButton} base component, this can be fully removed.\n */\nclass MuteButton extends AbstractMuteButton {\n    /**\n     * Instantiates a new {@code Component}.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._handleClick = this._handleClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _audioTrackMuted, participantID, t } = this.props;\n        const muteConfig = _audioTrackMuted ? {\n            translationKey: 'videothumbnail.muted',\n            muteClassName: 'mutelink disabled'\n        } : {\n            translationKey: 'videothumbnail.domute',\n            muteClassName: 'mutelink'\n        };\n\n        return (\n            <RemoteVideoMenuButton\n                buttonText = { t(muteConfig.translationKey) }\n                displayClass = { muteConfig.muteClassName }\n                icon = { IconMicDisabled }\n                id = { `mutelink_${participantID}` }\n                // eslint-disable-next-line react/jsx-handler-names\n                onClick = { this._handleClick } />\n        );\n    }\n\n    _handleClick: () => void\n}\n\nexport default translate(connect(_mapStateToProps)(MuteButton));\n","// @flow\n\nimport { Component } from 'react';\n\nimport { muteRemote } from '../actions';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractMuteRemoteParticipantDialog}.\n */\nexport type Props = {\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the remote participant to be muted.\n     */\n    participantID: string,\n\n    /**\n     * Function to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * Abstract dialog to confirm a remote participant mute action.\n *\n * @extends Component\n */\nexport default class AbstractMuteRemoteParticipantDialog<P:Props = Props>\n    extends Component<P> {\n    /**\n     * Initializes a new {@code AbstractMuteRemoteParticipantDialog} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Handles the submit button action.\n     *\n     * @private\n     * @returns {boolean} - True (to note that the modal should be closed).\n     */\n    _onSubmit() {\n        const { dispatch, participantID } = this.props;\n\n        dispatch(muteRemote(participantID));\n\n        return true;\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\nimport AbstractMuteRemoteParticipantDialog, {\n    type Props as AbstractProps\n} from '../AbstractMuteRemoteParticipantDialog';\nimport { muteAllParticipants } from '../../actions';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} props of\n * {@link MuteEveryoneDialog}.\n */\ntype Props = AbstractProps & {\n\n    /**\n     * The IDs of the remote participants to exclude from being muted.\n     */\n    exclude: Array<string>\n};\n\n/**\n * Translations needed for dialog rendering.\n */\ntype Translations = {\n\n    /**\n     * Content text.\n     */\n    content: string,\n\n    /**\n     * Title text.\n     */\n    title: string\n}\n\n/**\n * A React Component with the contents for a dialog that asks for confirmation\n * from the user before muting a remote participant.\n *\n * @extends Component\n */\nclass MuteEveryoneDialog extends AbstractMuteRemoteParticipantDialog<Props> {\n    static defaultProps = {\n        exclude: [],\n        muteLocal: false\n    };\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { content, title } = this._getTranslations();\n\n        return (\n            <Dialog\n                okKey = 'dialog.muteParticipantButton'\n                onSubmit = { this._onSubmit }\n                titleString = { title }\n                width = 'small'>\n                <div>\n                    { content }\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Callback to be invoked when the value of this dialog is submitted.\n     *\n     * @returns {boolean}\n     */\n    _onSubmit() {\n        const {\n            dispatch,\n            exclude\n        } = this.props;\n\n        dispatch(muteAllParticipants(exclude));\n\n        return true;\n    }\n\n    /**\n     * Method to get translations depending on whether we have an exclusive\n     * mute or not.\n     *\n     * @returns {Translations}\n     * @private\n     */\n    _getTranslations(): Translations {\n        const { exclude, t } = this.props;\n        const { conference } = APP;\n        const whom = exclude\n            // eslint-disable-next-line no-confusing-arrow\n            .map(id => conference.isLocalId(id)\n                ? t('dialog.muteEveryoneSelf')\n                : conference.getParticipantDisplayName(id))\n            .join(', ');\n\n        return whom.length ? {\n            content: t('dialog.muteEveryoneElseDialog'),\n            title: t('dialog.muteEveryoneElseTitle', { whom })\n        } : {\n            content: t('dialog.muteEveryoneDialog'),\n            title: t('dialog.muteEveryoneTitle')\n        };\n    }\n}\n\nexport default translate(connect()(MuteEveryoneDialog));\n","// @flow\n\nimport React from 'react';\n\nimport { createToolbarEvent, sendAnalytics } from '../../../analytics';\nimport { openDialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { IconMuteEveryoneElse } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\n\nimport AbstractMuteButton, {\n    _mapStateToProps,\n    type Props\n} from '../AbstractMuteButton';\nimport MuteEveryoneDialog from './MuteEveryoneDialog';\nimport RemoteVideoMenuButton from './RemoteVideoMenuButton';\n\n/**\n * Implements a React {@link Component} which displays a button for audio muting\n * every participant in the conference except the one with the given\n * participantID\n */\nclass MuteEveryoneElseButton extends AbstractMuteButton {\n    /**\n     * Instantiates a new {@code MuteEveryoneElseButton}.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._handleClick = this._handleClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { participantID, t } = this.props;\n\n        return (\n            <RemoteVideoMenuButton\n                buttonText = { t('videothumbnail.domuteOthers') }\n                displayClass = { 'mutelink' }\n                icon = { IconMuteEveryoneElse }\n                id = { `mutelink_${participantID}` }\n                // eslint-disable-next-line react/jsx-handler-names\n                onClick = { this._handleClick } />\n        );\n    }\n\n    _handleClick: () => void;\n\n    /**\n     * Handles clicking / pressing the button, and opens a confirmation dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, participantID } = this.props;\n\n        sendAnalytics(createToolbarEvent('mute.everyoneelse.pressed'));\n        dispatch(openDialog(MuteEveryoneDialog, { exclude: [ participantID ] }));\n    }\n}\n\nexport default translate(connect(_mapStateToProps)(MuteEveryoneElseButton));\n","/* @flow */\n\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\nimport AbstractMuteRemoteParticipantDialog\n    from '../AbstractMuteRemoteParticipantDialog';\n\n/**\n * A React Component with the contents for a dialog that asks for confirmation\n * from the user before muting a remote participant.\n *\n * @extends Component\n */\nclass MuteRemoteParticipantDialog extends AbstractMuteRemoteParticipantDialog {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                okKey = 'dialog.muteParticipantButton'\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.muteParticipantTitle'\n                width = 'small'>\n                <div>\n                    { this.props.t('dialog.muteParticipantBody') }\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean;\n}\n\nexport default translate(connect()(MuteRemoteParticipantDialog));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconMessage } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport {\n    _mapDispatchToProps,\n    _mapStateToProps as _abstractMapStateToProps,\n    type Props as AbstractProps\n} from '../../../chat/components/PrivateMessageButton';\nimport { isButtonEnabled } from '../../../toolbox';\n\nimport RemoteVideoMenuButton from './RemoteVideoMenuButton';\n\ndeclare var interfaceConfig: Object;\n\ntype Props = AbstractProps & {\n\n    /**\n     * True if the private chat functionality is disabled, hence the button is not visible.\n     */\n    _hidden: boolean\n};\n\n/**\n * A custom implementation of the PrivateMessageButton specialized for\n * the web version of the remote video menu. When the web platform starts to use\n * the {@code AbstractButton} component for the remote video menu, we can get rid\n * of this component and use the generic button in the chat feature.\n */\nclass PrivateMessageMenuButton extends Component<Props> {\n    /**\n     * Instantiates a new Component instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { participantID, t, _hidden } = this.props;\n\n        if (_hidden) {\n            return null;\n        }\n\n        return (\n            <RemoteVideoMenuButton\n                buttonText = { t('toolbar.privateMessage') }\n                icon = { IconMessage }\n                id = { `privmsglink_${participantID}` }\n                onClick = { this._onClick } />\n        );\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Callback to be invoked on pressing the button.\n     *\n     * @returns {void}\n     */\n    _onClick() {\n        const { _participant, _setPrivateMessageRecipient } = this.props;\n\n        _setPrivateMessageRecipient(_participant);\n    }\n}\n\n/**\n * Maps part of the Redux store to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the component.\n * @returns {Props}\n */\nfunction _mapStateToProps(state: Object, ownProps: Props): $Shape<Props> {\n    return {\n        ..._abstractMapStateToProps(state, ownProps),\n        _hidden: typeof interfaceConfig !== 'undefined'\n            && (interfaceConfig.DISABLE_PRIVATE_MESSAGES || !isButtonEnabled('chat'))\n    };\n}\n\nexport default translate(connect(_mapStateToProps, _mapDispatchToProps)(PrivateMessageMenuButton));\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport {\n    createRemoteVideoMenuButtonEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { translate } from '../../../base/i18n';\nimport { IconRemoteControlStart, IconRemoteControlStop } from '../../../base/icons';\n\nimport RemoteVideoMenuButton from './RemoteVideoMenuButton';\n\n// TODO: Move these enums into the store after further reactification of the\n// non-react RemoteVideo component.\nexport const REMOTE_CONTROL_MENU_STATES = {\n    NOT_SUPPORTED: 0,\n    NOT_STARTED: 1,\n    REQUESTING: 2,\n    STARTED: 3\n};\n\n/**\n * The type of the React {@code Component} props of {@link RemoteControlButton}.\n */\ntype Props = {\n\n    /**\n     * The callback to invoke when the component is clicked.\n     */\n    onClick: Function,\n\n    /**\n     * The ID of the participant linked to the onClick callback.\n     */\n    participantID: string,\n\n    /**\n     * The current status of remote control. Should be a number listed in the\n     * enum REMOTE_CONTROL_MENU_STATES.\n     */\n    remoteControlState: number,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} which displays a button showing the\n * current state of remote control for a participant and can start or stop a\n * remote control session.\n *\n * @extends Component\n */\nclass RemoteControlButton extends Component<Props> {\n    /**\n     * Initializes a new {@code RemoteControlButton} instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {null|ReactElement}\n     */\n    render() {\n        const {\n            participantID,\n            remoteControlState,\n            t\n        } = this.props;\n\n        let className, icon;\n\n        switch (remoteControlState) {\n        case REMOTE_CONTROL_MENU_STATES.NOT_STARTED:\n            icon = IconRemoteControlStart;\n            break;\n        case REMOTE_CONTROL_MENU_STATES.REQUESTING:\n            className = ' disabled';\n            icon = IconRemoteControlStart;\n            break;\n        case REMOTE_CONTROL_MENU_STATES.STARTED:\n            icon = IconRemoteControlStop;\n            break;\n        case REMOTE_CONTROL_MENU_STATES.NOT_SUPPORTED:\n\n            // Intentionally fall through.\n        default:\n            return null;\n        }\n\n        return (\n            <RemoteVideoMenuButton\n                buttonText = { t('videothumbnail.remoteControl') }\n                displayClass = { className }\n                icon = { icon }\n                id = { `remoteControl_${participantID}` }\n                onClick = { this._onClick } />\n        );\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Sends analytics event for pressing the button and executes the passed\n     * onClick handler.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClick() {\n        const { onClick, participantID, remoteControlState } = this.props;\n\n        // TODO: What do we do in case the state is e.g. \"requesting\"?\n        if (remoteControlState === REMOTE_CONTROL_MENU_STATES.STARTED\n            || remoteControlState === REMOTE_CONTROL_MENU_STATES.NOT_STARTED) {\n\n            const enable\n                = remoteControlState === REMOTE_CONTROL_MENU_STATES.NOT_STARTED;\n\n            sendAnalytics(createRemoteVideoMenuButtonEvent(\n                'remote.control.button',\n                {\n                    enable,\n                    'participant_id': participantID\n                }));\n        }\n\n        if (onClick) {\n            onClick();\n        }\n    }\n}\n\nexport default translate(RemoteControlButton);\n","/* @flow */\n\nimport React, { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of {@link RemoteVideoMenu}.\n */\ntype Props = {\n\n    /**\n     * The components to place as the body of the {@code RemoteVideoMenu}.\n     */\n    children: React$Node,\n\n    /**\n     * The id attribute to be added to the component's DOM for retrieval when\n     * querying the DOM. Not used directly by the component.\n     */\n    id: string\n};\n\n/**\n * React {@code Component} responsible for displaying other components as a menu\n * for manipulating remote participant state.\n *\n * @extends {Component}\n */\nexport default class RemoteVideoMenu extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <ul\n                className = 'popupmenu'\n                id = { this.props.id }>\n                { this.props.children }\n            </ul>\n        );\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Icon, IconMenuThumb } from '../../../base/icons';\nimport { getLocalParticipant, PARTICIPANT_ROLE } from '../../../base/participants';\nimport { Popover } from '../../../base/popover';\nimport { connect } from '../../../base/redux';\n\nimport {\n    MuteButton,\n    MuteEveryoneElseButton,\n    KickButton,\n    PrivateMessageMenuButton,\n    RemoteControlButton,\n    RemoteVideoMenu,\n    VolumeSlider\n} from './';\n\ndeclare var $: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of\n * {@link RemoteVideoMenuTriggerButton}.\n */\ntype Props = {\n\n    /**\n     * Whether or not to display the kick button.\n     */\n    _disableKick: boolean,\n\n    /**\n     * Whether or not to display the remote mute buttons.\n     */\n    _disableRemoteMute: Boolean,\n\n    /**\n     * Whether or not the participant is a conference moderator.\n     */\n    _isModerator: boolean,\n\n    /**\n     * A value between 0 and 1 indicating the volume of the participant's\n     * audio element.\n     */\n    initialVolumeValue: number,\n\n    /**\n     * Whether or not the participant is currently muted.\n     */\n    isAudioMuted: boolean,\n\n    /**\n     * Callback to invoke when the popover has been displayed.\n     */\n    onMenuDisplay: Function,\n\n    /**\n     * Callback to invoke choosing to start a remote control session with\n     * the participant.\n     */\n    onRemoteControlToggle: Function,\n\n    /**\n     * Callback to invoke when changing the level of the participant's\n     * audio element.\n     */\n    onVolumeChange: Function,\n\n    /**\n     * The position relative to the trigger the remote menu should display\n     * from. Valid values are those supported by AtlasKit\n     * {@code InlineDialog}.\n     */\n    menuPosition: string,\n\n    /**\n     * The ID for the participant on which the remote video menu will act.\n     */\n    participantID: string,\n\n    /**\n     * The current state of the participant's remote control session.\n     */\n    remoteControlState: number\n};\n\n/**\n * React {@code Component} for displaying an icon associated with opening the\n * the {@code RemoteVideoMenu}.\n *\n * @extends {Component}\n */\nclass RemoteVideoMenuTriggerButton extends Component<Props> {\n    /**\n     * The internal reference to topmost DOM/HTML element backing the React\n     * {@code Component}. Accessed directly for associating an element as\n     * the trigger for a popover.\n     *\n     * @private\n     * @type {HTMLDivElement}\n     */\n    _rootElement = null;\n\n    /**\n     * Initializes a new {#@code RemoteVideoMenuTriggerButton} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Object) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onShowRemoteMenu = this._onShowRemoteMenu.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const content = this._renderRemoteVideoMenu();\n\n        if (!content) {\n            return null;\n        }\n\n        return (\n            <Popover\n                content = { content }\n                onPopoverOpen = { this._onShowRemoteMenu }\n                position = { this.props.menuPosition }>\n                <span\n                    className = 'popover-trigger remote-video-menu-trigger'>\n                    <Icon\n                        size = '1em'\n                        src = { IconMenuThumb }\n                        title = 'Remote user controls' />\n                </span>\n            </Popover>\n        );\n    }\n\n    _onShowRemoteMenu: () => void;\n\n    /**\n     * Opens the {@code RemoteVideoMenu}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShowRemoteMenu() {\n        this.props.onMenuDisplay();\n    }\n\n    /**\n     * Creates a new {@code RemoteVideoMenu} with buttons for interacting with\n     * the remote participant.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderRemoteVideoMenu() {\n        const {\n            _disableKick,\n            _disableRemoteMute,\n            _isModerator,\n            initialVolumeValue,\n            isAudioMuted,\n            onRemoteControlToggle,\n            onVolumeChange,\n            remoteControlState,\n            participantID\n        } = this.props;\n\n        const buttons = [];\n\n        if (_isModerator) {\n            if (!_disableRemoteMute) {\n                buttons.push(\n                    <MuteButton\n                        isAudioMuted = { isAudioMuted }\n                        key = 'mute'\n                        participantID = { participantID } />\n                );\n                buttons.push(\n                    <MuteEveryoneElseButton\n                        key = 'mute-others'\n                        participantID = { participantID } />\n                );\n            }\n\n            if (!_disableKick) {\n                buttons.push(\n                    <KickButton\n                        key = 'kick'\n                        participantID = { participantID } />\n                );\n            }\n        }\n\n        if (remoteControlState) {\n            buttons.push(\n                <RemoteControlButton\n                    key = 'remote-control'\n                    onClick = { onRemoteControlToggle }\n                    participantID = { participantID }\n                    remoteControlState = { remoteControlState } />\n            );\n        }\n\n        buttons.push(\n            <PrivateMessageMenuButton\n                key = 'privateMessage'\n                participantID = { participantID } />\n        );\n\n        if (onVolumeChange) {\n            buttons.push(\n                <VolumeSlider\n                    initialValue = { initialVolumeValue }\n                    key = 'volume-slider'\n                    onChange = { onVolumeChange } />\n            );\n        }\n\n        if (buttons.length > 0) {\n            return (\n                <RemoteVideoMenu id = { participantID }>\n                    { buttons }\n                </RemoteVideoMenu>\n            );\n        }\n\n        return null;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code RemoteVideoMenuTriggerButton}'s props.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The own props of the component.\n * @private\n * @returns {{\n *     _isModerator: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    const participant = getLocalParticipant(state);\n    const { remoteVideoMenu = {}, disableRemoteMute } = state['features/base/config'];\n    const { disableKick } = remoteVideoMenu;\n\n    return {\n        _isModerator: Boolean(participant?.role === PARTICIPANT_ROLE.MODERATOR),\n        _disableKick: Boolean(disableKick),\n        _disableRemoteMute: Boolean(disableRemoteMute)\n    };\n}\n\nexport default connect(_mapStateToProps)(RemoteVideoMenuTriggerButton);\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { Icon, IconVolume } from '../../../base/icons';\n\n/**\n * Used to modify initialValue, which is expected to be a decimal value between\n * 0 and 1, and converts it to a number representable by an input slider, which\n * recognizes whole numbers.\n */\nconst VOLUME_SLIDER_SCALE = 100;\n\n/**\n * The type of the React {@code Component} props of {@link VolumeSlider}.\n */\ntype Props = {\n\n    /**\n     * The value of the audio slider should display at when the component first\n     * mounts. Changes will be stored in state. The value should be a number\n     * between 0 and 1.\n     */\n    initialValue: number,\n\n    /**\n     * The callback to invoke when the audio slider value changes.\n     */\n    onChange: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link VolumeSlider}.\n */\ntype State = {\n\n    /**\n     * The volume of the participant's audio element. The value will\n     * be represented by a slider.\n     */\n    volumeLevel: number\n};\n\n/**\n * Implements a React {@link Component} which displays an input slider for\n * adjusting the local volume of a remote participant.\n *\n * @extends Component\n */\nclass VolumeSlider extends Component<Props, State> {\n    /**\n     * Initializes a new {@code VolumeSlider} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            volumeLevel: (props.initialValue || 0) * VOLUME_SLIDER_SCALE\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onVolumeChange = this._onVolumeChange.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <li className = 'popupmenu__item'>\n                <div className = 'popupmenu__contents'>\n                    <span className = 'popupmenu__icon'>\n                        <Icon src = { IconVolume } />\n                    </span>\n                    <div className = 'popupmenu__slider_container'>\n                        <input\n                            className = 'popupmenu__slider'\n                            max = { VOLUME_SLIDER_SCALE }\n                            min = { 0 }\n                            onChange = { this._onVolumeChange }\n                            type = 'range'\n                            value = { this.state.volumeLevel } />\n                    </div>\n                </div>\n            </li>\n        );\n    }\n\n    _onVolumeChange: (Object) => void;\n\n    /**\n     * Sets the internal state of the volume level for the volume slider.\n     * Invokes the prop onVolumeChange to notify of volume changes.\n     *\n     * @param {Object} event - DOM Event for slider change.\n     * @private\n     * @returns {void}\n     */\n    _onVolumeChange(event) {\n        const volumeLevel = event.currentTarget.value;\n\n        this.props.onChange(volumeLevel / VOLUME_SLIDER_SCALE);\n        this.setState({ volumeLevel });\n    }\n}\n\nexport default VolumeSlider;\n","// @flow\n\nexport * from './web';\n","// @flow\n\nimport { Component } from 'react';\n\nimport logger from '../logger';\n\n/**\n * Describes audio element interface used in the base/media feature for audio\n * playback.\n */\nexport type AudioElement = {\n    currentTime: number,\n    pause: () => void,\n    play: () => void,\n    setSinkId?: string => Function,\n    stop: () => void\n};\n\n/**\n * {@code AbstractAudio} component's property types.\n */\ntype Props = {\n\n    /**\n     * A callback which will be called with {@code AbstractAudio} instance once\n     * the audio element is loaded.\n     */\n    setRef?: ?AudioElement => void,\n\n    /**\n     * The URL of a media resource to use in the element.\n     *\n     * NOTE on react-native sound files are imported through 'require' and then\n     * passed as the 'src' parameter which means their type will be 'any'.\n     *\n     * @type {Object | string}\n     */\n    src: Object | string,\n    stream?: Object,\n    loop?: ?boolean\n}\n\n/**\n * The React {@link Component} which is similar to Web's\n * {@code HTMLAudioElement}.\n */\nexport default class AbstractAudio extends Component<Props> {\n    /**\n     * The {@link AudioElement} instance which implements the audio playback\n     * functionality.\n     */\n    _audioElementImpl: ?AudioElement;\n\n    /**\n     * Initializes a new {@code AbstractAudio} instance.\n     *\n     * @param {Props} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this.setAudioElementImpl = this.setAudioElementImpl.bind(this);\n    }\n\n    /**\n     * Attempts to pause the playback of the media.\n     *\n     * @public\n     * @returns {void}\n     */\n    pause(): void {\n        this._audioElementImpl && this._audioElementImpl.pause();\n    }\n\n    /**\n     * Attempts to begin the playback of the media.\n     *\n     * @public\n     * @returns {void}\n     */\n    play(): void {\n        this._audioElementImpl && this._audioElementImpl.play();\n    }\n\n    setAudioElementImpl: ?AudioElement => void;\n\n    /**\n     * Set the (reference to the) {@link AudioElement} object which implements\n     * the audio playback functionality.\n     *\n     * @param {AudioElement} element - The {@link AudioElement} instance\n     * which implements the audio playback functionality.\n     * @protected\n     * @returns {void}\n     */\n    setAudioElementImpl(element: ?AudioElement): void {\n        this._audioElementImpl = element;\n\n        // setRef\n        const { setRef } = this.props;\n\n        // $FlowFixMe\n        typeof setRef === 'function' && setRef(element ? this : null);\n    }\n\n    /**\n     * Sets the sink ID (output device ID) on the underlying audio element.\n     * NOTE: Currently, implemented only on Web.\n     *\n     * @param {string} sinkId - The sink ID (output device ID).\n     * @returns {void}\n     */\n    setSinkId(sinkId: string): void {\n        this._audioElementImpl\n            && typeof this._audioElementImpl.setSinkId === 'function'\n            && this._audioElementImpl.setSinkId(sinkId)\n                .catch(error => logger.error('Error setting sink', error));\n    }\n\n    /**\n     * Attempts to stop the playback of the media.\n     *\n     * @public\n     * @returns {void}\n     */\n    stop(): void {\n        this._audioElementImpl && this._audioElementImpl.stop();\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport AbstractAudio from '../AbstractAudio';\nimport type { AudioElement } from '../AbstractAudio';\n\n/**\n * The React/Web {@link Component} which is similar to and wraps around\n * {@code HTMLAudioElement} in order to facilitate cross-platform source code.\n */\nexport default class Audio extends AbstractAudio {\n    /**\n     * Set to <code>true</code> when the whole file is loaded.\n     */\n    _audioFileLoaded: boolean;\n\n    /**\n     * Reference to the HTML audio element, stored until the file is ready.\n     */\n    _ref: ?AudioElement;\n\n    /**\n     * Creates new <code>Audio</code> element instance with given props.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Object) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onCanPlayThrough = this._onCanPlayThrough.bind(this);\n        this._setRef = this._setRef.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <audio\n                loop = { Boolean(this.props.loop) }\n                onCanPlayThrough = { this._onCanPlayThrough }\n                preload = 'auto'\n\n                // $FlowFixMe\n                ref = { this._setRef }\n                src = { this.props.src } />\n        );\n    }\n\n    /**\n     * Stops the audio HTML element.\n     *\n     * @returns {void}\n     */\n    stop() {\n        if (this._ref) {\n            this._ref.pause();\n\n            // $FlowFixMe\n            this._ref.currentTime = 0;\n        }\n    }\n\n    /**\n     * If audio element reference has been set and the file has been\n     * loaded then {@link setAudioElementImpl} will be called to eventually add\n     * the audio to the Redux store.\n     *\n     * @private\n     * @returns {void}\n     */\n    _maybeSetAudioElementImpl() {\n        if (this._ref && this._audioFileLoaded) {\n            this.setAudioElementImpl(this._ref);\n        }\n    }\n\n    _onCanPlayThrough: () => void;\n\n    /**\n     * Called when 'canplaythrough' event is triggered on the audio element,\n     * which means that the whole file has been loaded.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onCanPlayThrough() {\n        this._audioFileLoaded = true;\n        this._maybeSetAudioElementImpl();\n    }\n\n    _setRef: (?AudioElement) => void;\n\n    /**\n     * Sets the reference to the HTML audio element.\n     *\n     * @param {HTMLAudioElement} audioElement - The HTML audio element instance.\n     * @private\n     * @returns {void}\n     */\n    _setRef(audioElement: ?AudioElement) {\n        this._ref = audioElement;\n\n        if (audioElement) {\n            this._maybeSetAudioElementImpl();\n        } else {\n            // AbstractAudioElement is supposed to trigger \"removeAudio\" only if\n            // it was previously added, so it's safe to just call it.\n            this.setAudioElementImpl(null);\n\n            // Reset the loaded flag, as the audio element is being removed from\n            // the DOM tree.\n            this._audioFileLoaded = false;\n        }\n    }\n}\n","/* global APP, JitsiMeetJS, config */\n\nimport { jitsiLocalStorage } from 'js-utils';\n\nimport AuthHandler from './modules/UI/authentication/AuthHandler';\n\nimport {\n    connectionEstablished,\n    connectionFailed\n} from './react/features/base/connection';\nimport {\n    isFatalJitsiConnectionError,\n    JitsiConnectionErrors,\n    JitsiConnectionEvents\n} from './react/features/base/lib-jitsi-meet';\n\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\n/**\n * The feature announced so we can distinguish jibri participants.\n *\n * @type {string}\n */\nexport const DISCO_JIBRI_FEATURE = 'http://jitsi.org/protocol/jibri';\n\n/**\n * Checks if we have data to use attach instead of connect. If we have the data\n * executes attach otherwise check if we have to wait for the data. If we have\n * to wait for the attach data we are setting handler to APP.connect.handler\n * which is going to be called when the attach data is received otherwise\n * executes connect.\n *\n * @param {string} [id] user id\n * @param {string} [password] password\n * @param {string} [roomName] the name of the conference.\n */\nfunction checkForAttachParametersAndConnect(id, password, connection) {\n    if (window.XMPPAttachInfo) {\n        APP.connect.status = 'connecting';\n\n        // When connection optimization is not deployed or enabled the default\n        // value will be window.XMPPAttachInfo.status = \"error\"\n        // If the connection optimization is deployed and enabled and there is\n        // a failure the value will be window.XMPPAttachInfo.status = \"error\"\n        if (window.XMPPAttachInfo.status === 'error') {\n            connection.connect({\n                id,\n                password\n            });\n\n            return;\n        }\n\n        const attachOptions = window.XMPPAttachInfo.data;\n\n        if (attachOptions) {\n            connection.attach(attachOptions);\n            delete window.XMPPAttachInfo.data;\n        } else {\n            connection.connect({\n                id,\n                password\n            });\n        }\n    } else {\n        APP.connect.status = 'ready';\n        APP.connect.handler\n            = checkForAttachParametersAndConnect.bind(\n                null,\n                id, password, connection);\n    }\n}\n\n/**\n * Try to open connection using provided credentials.\n * @param {string} [id]\n * @param {string} [password]\n * @param {string} [roomName]\n * @returns {Promise<JitsiConnection>} connection if\n * everything is ok, else error.\n */\nfunction connect(id, password, roomName) {\n    const connectionConfig = Object.assign({}, config);\n    const { issuer, jwt } = APP.store.getState()['features/base/jwt'];\n\n    // Use Websocket URL for the web app if configured. Note that there is no 'isWeb' check, because there's assumption\n    // that this code executes only on web browsers/electron. This needs to be changed when mobile and web are unified.\n    let serviceUrl = connectionConfig.websocket || connectionConfig.bosh;\n\n    serviceUrl += `?room=${roomName}`;\n\n    // FIXME Remove deprecated 'bosh' option assignment at some point(LJM will be accepting only 'serviceUrl' option\n    //  in future). It's included for the time being for Jitsi Meet and lib-jitsi-meet versions interoperability.\n    connectionConfig.serviceUrl = connectionConfig.bosh = serviceUrl;\n\n    const connection\n        = new JitsiMeetJS.JitsiConnection(\n            null,\n            jwt && issuer && issuer !== 'anonymous' ? jwt : undefined,\n            connectionConfig);\n\n    if (config.iAmRecorder) {\n        connection.addFeature(DISCO_JIBRI_FEATURE);\n    }\n\n    return new Promise((resolve, reject) => {\n        connection.addEventListener(\n            JitsiConnectionEvents.CONNECTION_ESTABLISHED,\n            handleConnectionEstablished);\n        connection.addEventListener(\n            JitsiConnectionEvents.CONNECTION_FAILED,\n            handleConnectionFailed);\n        connection.addEventListener(\n            JitsiConnectionEvents.CONNECTION_FAILED,\n            connectionFailedHandler);\n\n        /* eslint-disable max-params */\n        /**\n         *\n         */\n        function connectionFailedHandler(error, message, credentials, details) {\n        /* eslint-enable max-params */\n            APP.store.dispatch(\n                connectionFailed(\n                    connection, {\n                        credentials,\n                        details,\n                        message,\n                        name: error\n                    }));\n\n            if (isFatalJitsiConnectionError(error)) {\n                connection.removeEventListener(\n                    JitsiConnectionEvents.CONNECTION_FAILED,\n                    connectionFailedHandler);\n            }\n        }\n\n        /**\n         *\n         */\n        function unsubscribe() {\n            connection.removeEventListener(\n                JitsiConnectionEvents.CONNECTION_ESTABLISHED,\n                handleConnectionEstablished);\n            connection.removeEventListener(\n                JitsiConnectionEvents.CONNECTION_FAILED,\n                handleConnectionFailed);\n        }\n\n        /**\n         *\n         */\n        function handleConnectionEstablished() {\n            APP.store.dispatch(connectionEstablished(connection, Date.now()));\n            unsubscribe();\n            resolve(connection);\n        }\n\n        /**\n         *\n         */\n        function handleConnectionFailed(err) {\n            unsubscribe();\n            logger.error('CONNECTION FAILED:', err);\n            reject(err);\n        }\n\n        checkForAttachParametersAndConnect(id, password, connection);\n    });\n}\n\n/**\n * Open JitsiConnection using provided credentials.\n * If retry option is true it will show auth dialog on PASSWORD_REQUIRED error.\n *\n * @param {object} options\n * @param {string} [options.id]\n * @param {string} [options.password]\n * @param {string} [options.roomName]\n * @param {boolean} [retry] if we should show auth dialog\n * on PASSWORD_REQUIRED error.\n *\n * @returns {Promise<JitsiConnection>}\n */\nexport function openConnection({ id, password, retry, roomName }) {\n    const usernameOverride\n        = jitsiLocalStorage.getItem('xmpp_username_override');\n    const passwordOverride\n        = jitsiLocalStorage.getItem('xmpp_password_override');\n\n    if (usernameOverride && usernameOverride.length > 0) {\n        id = usernameOverride; // eslint-disable-line no-param-reassign\n    }\n    if (passwordOverride && passwordOverride.length > 0) {\n        password = passwordOverride; // eslint-disable-line no-param-reassign\n    }\n\n    return connect(id, password, roomName).catch(err => {\n        if (retry) {\n            const { issuer, jwt } = APP.store.getState()['features/base/jwt'];\n\n            if (err === JitsiConnectionErrors.PASSWORD_REQUIRED\n                    && (!jwt || issuer === 'anonymous')) {\n                return AuthHandler.requestAuth(roomName, connect);\n            }\n        }\n\n        throw err;\n    });\n}\n","export default function _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar ChevronDownIcon = function ChevronDownIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M8.292 10.293a1.009 1.009 0 0 0 0 1.419l2.939 2.965c.218.215.5.322.779.322s.556-.107.769-.322l2.93-2.955a1.01 1.01 0 0 0 0-1.419.987.987 0 0 0-1.406 0l-2.298 2.317-2.307-2.327a.99.99 0 0 0-1.406 0z\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\"/></svg>\"\n  }, props));\n};\n\nChevronDownIcon.displayName = 'ChevronDownIcon';\nvar _default = ChevronDownIcon;\nexports.default = _default;","export var withDefaultProps = function (defaultProps, Component) {\n    Component.defaultProps = defaultProps;\n    return Component;\n};\n//# sourceMappingURL=index.js.map","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nvar getComponentName = function (target) {\n    if (target.displayName && typeof target.displayName === 'string') {\n        return target.displayName;\n    }\n    return target.name || 'Component';\n};\nvar warnIfDeprecatedAppearance = function (appearance) {\n    var deprecatedAppearances = ['help'];\n    if (appearance && deprecatedAppearances.indexOf(appearance) !== -1) {\n        // tslint:disable-next-line:no-console\n        console.warn(\"Atlaskit: The Button appearance \\\"\" + appearance + \"\\\" is deprecated. Please use styled-components' ThemeProvider to provide a custom theme for Button instead.\");\n    }\n};\nvar withDeprecationWarnings = function (Component) {\n    var _a;\n    return _a = /** @class */ (function (_super) {\n            tslib_1.__extends(WithDeprecationWarnings, _super);\n            function WithDeprecationWarnings() {\n                return _super !== null && _super.apply(this, arguments) || this;\n            }\n            WithDeprecationWarnings.prototype.componentWillMount = function () {\n                warnIfDeprecatedAppearance(this.props.appearance);\n            };\n            WithDeprecationWarnings.prototype.componentWillReceiveProps = function (newProps) {\n                if (newProps.appearance !== this.props.appearance) {\n                    warnIfDeprecatedAppearance(newProps.appearance);\n                }\n            };\n            WithDeprecationWarnings.prototype.render = function () {\n                return React.createElement(Component, this.props);\n            };\n            return WithDeprecationWarnings;\n        }(React.Component)),\n        _a.displayName = \"WithDeprecationWarnings(\" + getComponentName(Component) + \")\",\n        _a;\n};\nexport default withDeprecationWarnings;\n//# sourceMappingURL=withDeprecationWarnings.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar ChevronDownIcon = function ChevronDownIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M8.292 10.293a1.009 1.009 0 0 0 0 1.419l2.939 2.965c.218.215.5.322.779.322s.556-.107.769-.322l2.93-2.955a1.01 1.01 0 0 0 0-1.419.987.987 0 0 0-1.406 0l-2.298 2.317-2.307-2.327a.99.99 0 0 0-1.406 0z\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\"/></svg>\"\n  }, props));\n};\n\nChevronDownIcon.displayName = 'ChevronDownIcon';\nvar _default = ChevronDownIcon;\nexports.default = _default;","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.6.1\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n  'use strict';\n\n  var ERROR = 'input is invalid type';\n  var WINDOW = typeof window === 'object';\n  var root = WINDOW ? window : {};\n  if (root.JS_MD5_NO_WINDOW) {\n    WINDOW = false;\n  }\n  var WEB_WORKER = !WINDOW && typeof self === 'object';\n  var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n  if (NODE_JS) {\n    root = global;\n  } else if (WEB_WORKER) {\n    root = self;\n  }\n  var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n  var AMD = typeof define === 'function' && define.amd;\n  var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n  var HEX_CHARS = '0123456789abcdef'.split('');\n  var EXTRA = [128, 32768, 8388608, -2147483648];\n  var SHIFT = [0, 8, 16, 24];\n  var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n  var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n  var blocks = [], buffer8;\n  if (ARRAY_BUFFER) {\n    var buffer = new ArrayBuffer(68);\n    buffer8 = new Uint8Array(buffer);\n    blocks = new Uint32Array(buffer);\n  }\n\n  if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n    Array.isArray = function (obj) {\n      return Object.prototype.toString.call(obj) === '[object Array]';\n    };\n  }\n\n  if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n    ArrayBuffer.isView = function (obj) {\n      return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n    };\n  }\n\n  /**\n   * @method hex\n   * @memberof md5\n   * @description Output hash as hex string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} Hex string\n   * @example\n   * md5.hex('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * md5('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method digest\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.digest('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method array\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.array('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method arrayBuffer\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.buffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method base64\n   * @memberof md5\n   * @description Output hash as base64 string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} base64 string\n   * @example\n   * md5.base64('The quick brown fox jumps over the lazy dog');\n   */\n  var createOutputMethod = function (outputType) {\n    return function (message) {\n      return new Md5(true).update(message)[outputType]();\n    };\n  };\n\n  /**\n   * @method create\n   * @memberof md5\n   * @description Create Md5 object\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.create();\n   */\n  /**\n   * @method update\n   * @memberof md5\n   * @description Create and update Md5 object\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * var hash = md5.create();\n   * hash.update('The quick brown fox jumps over the lazy dog');\n   */\n  var createMethod = function () {\n    var method = createOutputMethod('hex');\n    if (NODE_JS) {\n      method = nodeWrap(method);\n    }\n    method.create = function () {\n      return new Md5();\n    };\n    method.update = function (message) {\n      return method.create().update(message);\n    };\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createOutputMethod(type);\n    }\n    return method;\n  };\n\n  var nodeWrap = function (method) {\n    var crypto = eval(\"require('crypto')\");\n    var Buffer = eval(\"require('buffer').Buffer\");\n    var nodeMethod = function (message) {\n      if (typeof message === 'string') {\n        return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n      } else {\n        if (message === null || message === undefined) {\n          throw ERROR;\n        } else if (message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        }\n      }\n      if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n        message.constructor === Buffer) {\n        return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n      } else {\n        return method(message);\n      }\n    };\n    return nodeMethod;\n  };\n\n  /**\n   * Md5 class\n   * @class Md5\n   * @description This is internal class.\n   * @see {@link md5.create}\n   */\n  function Md5(sharedMemory) {\n    if (sharedMemory) {\n      blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      this.blocks = blocks;\n      this.buffer8 = buffer8;\n    } else {\n      if (ARRAY_BUFFER) {\n        var buffer = new ArrayBuffer(68);\n        this.buffer8 = new Uint8Array(buffer);\n        this.blocks = new Uint32Array(buffer);\n      } else {\n        this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n      }\n    }\n    this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = 0;\n    this.finalized = this.hashed = false;\n    this.first = true;\n  }\n\n  /**\n   * @method update\n   * @memberof Md5\n   * @instance\n   * @description Update hash\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @see {@link md5.update}\n   */\n  Md5.prototype.update = function (message) {\n    if (this.finalized) {\n      return;\n    }\n\n    var notString, type = typeof message;\n    if (type !== 'string') {\n      if (type === 'object') {\n        if (message === null) {\n          throw ERROR;\n        } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        } else if (!Array.isArray(message)) {\n          if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n            throw ERROR;\n          }\n        }\n      } else {\n        throw ERROR;\n      }\n      notString = true;\n    }\n    var code, index = 0, i, length = message.length, blocks = this.blocks;\n    var buffer8 = this.buffer8;\n\n    while (index < length) {\n      if (this.hashed) {\n        this.hashed = false;\n        blocks[0] = blocks[16];\n        blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n        blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n        blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n        blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      }\n\n      if (notString) {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            buffer8[i++] = message[index];\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n          }\n        }\n      } else {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              buffer8[i++] = code;\n            } else if (code < 0x800) {\n              buffer8[i++] = 0xc0 | (code >> 6);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else if (code < 0xd800 || code >= 0xe000) {\n              buffer8[i++] = 0xe0 | (code >> 12);\n              buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              buffer8[i++] = 0xf0 | (code >> 18);\n              buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n              buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            }\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              blocks[i >> 2] |= code << SHIFT[i++ & 3];\n            } else if (code < 0x800) {\n              blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else if (code < 0xd800 || code >= 0xe000) {\n              blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            }\n          }\n        }\n      }\n      this.lastByteIndex = i;\n      this.bytes += i - this.start;\n      if (i >= 64) {\n        this.start = i - 64;\n        this.hash();\n        this.hashed = true;\n      } else {\n        this.start = i;\n      }\n    }\n    return this;\n  };\n\n  Md5.prototype.finalize = function () {\n    if (this.finalized) {\n      return;\n    }\n    this.finalized = true;\n    var blocks = this.blocks, i = this.lastByteIndex;\n    blocks[i >> 2] |= EXTRA[i & 3];\n    if (i >= 56) {\n      if (!this.hashed) {\n        this.hash();\n      }\n      blocks[0] = blocks[16];\n      blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n    }\n    blocks[14] = this.bytes << 3;\n    this.hash();\n  };\n\n  Md5.prototype.hash = function () {\n    var a, b, c, d, bc, da, blocks = this.blocks;\n\n    if (this.first) {\n      a = blocks[0] - 680876937;\n      a = (a << 7 | a >>> 25) - 271733879 << 0;\n      d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n      b = (b << 22 | b >>> 10) + c << 0;\n    } else {\n      a = this.h0;\n      b = this.h1;\n      c = this.h2;\n      d = this.h3;\n      a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n      a = (a << 7 | a >>> 25) + b << 0;\n      d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n      b = (b << 22 | b >>> 10) + c << 0;\n    }\n\n    a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n    b = (b << 20 | b >>> 12) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[5] - 378558;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[8] - 2022574463;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[11] + 1839030562;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[14] - 35309556;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[1] - 1530992060;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[4] + 1272893353;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[7] - 155497632;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[10] - 1094730640;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[13] + 681279174;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[0] - 358537222;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[3] - 722521979;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[6] + 76029189;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[9] - 640364487;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[12] - 421815835;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[15] + 530742520;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[2] - 995338651;\n    b = (b << 23 | b >>> 9) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n    b = (b << 21 | b >>> 11) + c << 0;\n\n    if (this.first) {\n      this.h0 = a + 1732584193 << 0;\n      this.h1 = b - 271733879 << 0;\n      this.h2 = c - 1732584194 << 0;\n      this.h3 = d + 271733878 << 0;\n      this.first = false;\n    } else {\n      this.h0 = this.h0 + a << 0;\n      this.h1 = this.h1 + b << 0;\n      this.h2 = this.h2 + c << 0;\n      this.h3 = this.h3 + d << 0;\n    }\n  };\n\n  /**\n   * @method hex\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.hex();\n   */\n  Md5.prototype.hex = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n    return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n      HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n      HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n      HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n      HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n      HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n      HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n      HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n      HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n      HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n      HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n      HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n      HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n      HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n      HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n      HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n  };\n\n  /**\n   * @method toString\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.toString();\n   */\n  Md5.prototype.toString = Md5.prototype.hex;\n\n  /**\n   * @method digest\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.digest}\n   * @example\n   * hash.digest();\n   */\n  Md5.prototype.digest = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n    return [\n      h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n      h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n      h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n      h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n    ];\n  };\n\n  /**\n   * @method array\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.array}\n   * @example\n   * hash.array();\n   */\n  Md5.prototype.array = Md5.prototype.digest;\n\n  /**\n   * @method arrayBuffer\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.arrayBuffer}\n   * @example\n   * hash.arrayBuffer();\n   */\n  Md5.prototype.arrayBuffer = function () {\n    this.finalize();\n\n    var buffer = new ArrayBuffer(16);\n    var blocks = new Uint32Array(buffer);\n    blocks[0] = this.h0;\n    blocks[1] = this.h1;\n    blocks[2] = this.h2;\n    blocks[3] = this.h3;\n    return buffer;\n  };\n\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.buffer}\n   * @example\n   * hash.buffer();\n   */\n  Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n  /**\n   * @method base64\n   * @memberof Md5\n   * @instance\n   * @description Output hash as base64 string\n   * @returns {String} base64 string\n   * @see {@link md5.base64}\n   * @example\n   * hash.base64();\n   */\n  Md5.prototype.base64 = function () {\n    var v1, v2, v3, base64Str = '', bytes = this.array();\n    for (var i = 0; i < 15;) {\n      v1 = bytes[i++];\n      v2 = bytes[i++];\n      v3 = bytes[i++];\n      base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n        BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n        BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n        BASE64_ENCODE_CHAR[v3 & 63];\n    }\n    v1 = bytes[i];\n    base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n      BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n      '==';\n    return base64Str;\n  };\n\n  var exports = createMethod();\n\n  if (COMMON_JS) {\n    module.exports = exports;\n  } else {\n    /**\n     * @method md5\b\n     * @description Md5 hash function, export to global in browsers.\n     * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n     * @returns {String} md5 hashes\n     * @example\n     * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n     * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n     * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n     *\n     * // It also supports UTF-8 encoding\n     * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n     *\n     * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n     * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n     * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n     */\n    root.md5 = exports;\n    if (AMD) {\n      define(function () {\n        return exports;\n      });\n    }\n  }\n})();\n","// @flow\n\nimport Video from './web/Video';\n\nexport default Video;\n","// @flow\n\nimport type { Card as CardType } from '../types';\n\nimport React, { Component } from 'react';\nimport { SYMBOLS } from '../constants';\n\nexport type Props = {\n    card: CardType,\n}\n\nexport default class Card extends Component<Props> {\n\n    render() {\n        return (\n            <div className = 'poker-card'>\n                <div className = 'suite'>\n                    { this.props.card.suit === 'club' && <span>&clubs;</span> }\n                    { this.props.card.suit === 'diamond' && <span>&diams;</span> }\n                    { this.props.card.suit === 'heart' && <span>&hearts;</span> }\n                    { this.props.card.suit === 'spade' && <span>&spades;</span> }\n                </div>\n                <div className = 'symbol'>\n                    <span>{SYMBOLS[this.props.card.symbol]}</span>\n                </div>\n            </div>\n        );\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\nimport { connect } from '../../base/redux';\nimport { translate } from '../../base/i18n';\nimport { cards } from '../functions';\nimport Card from './Card';\nimport type { Card as CardType } from '../types';\n\nexport type Props = {\n    dispatch: Function,\n    t: Function,\n    _cards: Array<CardType>\n}\n\ntype State = {\n\n}\n\n/**\n * Implements a class to render poker in the app.\n */\nclass Table extends Component<Props, State> {\n\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            // value: false\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        // this._onAction = this._onAction.bind(this);\n    }\n\n    render() {\n        return (\n            <div className = 'poker-table'>\n                {this.props._cards.map((card, i) => (<Card\n                    card = { card }\n                    key = { i } />))}\n            </div>\n        );\n    }\n\n}\n\nexport function _mapStateToProps(state: Object) {\n    return {\n        _cards: cards(state, 'table')\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(Table));\n","/* @flow */\n\nimport EventEmitter from 'events';\nimport { getLogger } from 'jitsi-meet-logger';\n\nimport {\n    REMOTE_CONTROL_MESSAGE_NAME\n} from '../../service/remotecontrol/Constants';\n\nconst logger = getLogger(__filename);\n\ndeclare var APP: Object;\n\n/**\n * Implements common logic for Receiver class and Controller class.\n */\nexport default class RemoteControlParticipant extends EventEmitter {\n    _enabled: boolean;\n\n    /**\n     * Creates new instance.\n     */\n    constructor() {\n        super();\n        this._enabled = false;\n    }\n\n    /**\n     * Enables / Disables the remote control.\n     *\n     * @param {boolean} enabled - The new state.\n     * @returns {void}\n     */\n    enable(enabled: boolean) {\n        this._enabled = enabled;\n    }\n\n    /**\n     * Sends remote control message to other participant trough data channel.\n     *\n     * @param {string} to - The participant who will receive the event.\n     * @param {RemoteControlEvent} event - The remote control event.\n     * @param {Function} onDataChannelFail - Handler for data channel failure.\n     * @returns {void}\n     */\n    sendRemoteControlEndpointMessage(\n            to: ?string,\n            event: Object,\n            onDataChannelFail: ?Function) {\n        if (!this._enabled || !to) {\n            logger.warn(\n                'Remote control: Skip sending remote control event. Params:',\n                this.enable,\n                to);\n\n            return;\n        }\n        try {\n            APP.conference.sendEndpointMessage(to, {\n                name: REMOTE_CONTROL_MESSAGE_NAME,\n                ...event\n            });\n        } catch (e) {\n            logger.error(\n                'Failed to send EndpointMessage via the datachannels',\n                e);\n            if (typeof onDataChannelFail === 'function') {\n                onDataChannelFail(e);\n            }\n        }\n    }\n}\n","/**\n * The type of the action which signals the keyboard shortcuts dialog should\n * be displayed.\n *\n * {\n *     type: OPEN_KEYBOARD_SHORTCUTS_DIALOG\n * }\n */\nexport const OPEN_KEYBOARD_SHORTCUTS_DIALOG\n    = 'OPEN_KEYBOARD_SHORTCUTS_DIALOG';\n","import { OPEN_KEYBOARD_SHORTCUTS_DIALOG } from './actionTypes';\n\n/**\n * Opens the dialog showing available keyboard shortcuts.\n *\n * @returns {{\n *     type: OPEN_KEYBOARD_SHORTCUTS_DIALOG\n * }}\n */\nexport function openKeyboardShortcutsDialog() {\n    return {\n        type: OPEN_KEYBOARD_SHORTCUTS_DIALOG\n    };\n}\n","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","import styled from 'styled-components';\nimport { borderRadius } from '@atlaskit/theme';\nexport default styled.span.withConfig({\n  displayName: \"styledContainer\",\n  componentId: \"sc-1vjy1uk-0\"\n})([\"\\n  \", \";\\n  border-radius: \", \"px;\\n  box-sizing: border-box;\\n  display: inline-block;\\n  font-size: 11px;\\n  font-weight: 700;\\n  line-height: 1;\\n  max-width: 100%;\\n  padding: 2px 0 3px 0;\\n  text-transform: uppercase;\\n  vertical-align: baseline;\\n\"], function (props) {\n  return \"\\n    background-color: \".concat(props.backgroundColor, \";\\n    color: \").concat(props.textColor, \";\\n  \");\n}, borderRadius());","import styled from 'styled-components';\nimport { gridSize } from '@atlaskit/theme';\nvar HORIZONTAL_SPACING = \"\".concat(gridSize() / 2, \"px\");\nexport default styled.span.withConfig({\n  displayName: \"styledContent\",\n  componentId: \"ku88a7-0\"\n})([\"\\n  display: inline-block;\\n  vertical-align: top;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n  box-sizing: border-box;\\n  padding: 0 \", \";\\n  max-width: \", \";\\n  width: 100%;\\n\"], HORIZONTAL_SPACING, function (props) {\n  return typeof props.maxWidth === 'number' ? \"\".concat(props.maxWidth, \"px\") : props.maxWidth;\n});","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport { colors, createTheme } from '@atlaskit/theme';\n/* Note:\n Lozenge does not support dark mode at the moment,\n it will be implemented later.\n Hence, color values are the same.\n */\n\nexport var backgroundColor = {\n  default: {\n    light: colors.N40,\n    dark: colors.N40\n  },\n  inprogress: {\n    light: colors.B50,\n    dark: colors.B50\n  },\n  moved: {\n    light: colors.Y75,\n    dark: colors.Y75\n  },\n  new: {\n    light: colors.P50,\n    dark: colors.P50\n  },\n  removed: {\n    light: colors.R50,\n    dark: colors.R50\n  },\n  success: {\n    light: colors.G50,\n    dark: colors.G50\n  }\n};\nexport var textColor = {\n  default: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  inprogress: {\n    light: colors.B500,\n    dark: colors.B500\n  },\n  moved: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  new: {\n    light: colors.P500,\n    dark: colors.P500\n  },\n  removed: {\n    light: colors.R500,\n    dark: colors.R500\n  },\n  success: {\n    light: colors.G500,\n    dark: colors.G500\n  }\n};\nexport var boldBackgroundColor = {\n  default: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  inprogress: {\n    light: colors.B400,\n    dark: colors.B400\n  },\n  moved: {\n    light: colors.Y500,\n    dark: colors.Y500\n  },\n  new: {\n    light: colors.P400,\n    dark: colors.P400\n  },\n  removed: {\n    light: colors.R400,\n    dark: colors.R400\n  },\n  success: {\n    light: colors.G400,\n    dark: colors.G400\n  }\n};\nexport var boldTextColor = {\n  default: {\n    light: colors.N0,\n    dark: colors.N0\n  },\n  inprogress: {\n    light: colors.N0,\n    dark: colors.N0\n  },\n  moved: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  new: {\n    light: colors.N0,\n    dark: colors.N0\n  },\n  removed: {\n    light: colors.N0,\n    dark: colors.N0\n  },\n  success: {\n    light: colors.N0,\n    dark: colors.N0\n  }\n};\nexport var Theme = createTheme(function (_ref) {\n  var appearance = _ref.appearance,\n      isBold = _ref.isBold,\n      maxWidth = _ref.maxWidth;\n  return _objectSpread({}, _typeof(appearance) === 'object' ? _objectSpread({\n    backgroundColor: (isBold ? boldBackgroundColor : backgroundColor).default.light,\n    textColor: (isBold ? boldTextColor : textColor).default.light\n  }, appearance) : {\n    backgroundColor: (isBold ? boldBackgroundColor[appearance] : backgroundColor[appearance]).light,\n    textColor: (isBold ? boldTextColor[appearance] : textColor[appearance]).light\n  }, {\n    maxWidth: maxWidth\n  });\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { PureComponent } from 'react';\nimport Container from './styledContainer';\nimport Content from './styledContent';\nimport { Theme } from '../theme';\n\nvar Lozenge =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(Lozenge, _PureComponent);\n\n  function Lozenge() {\n    _classCallCheck(this, Lozenge);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(Lozenge).apply(this, arguments));\n  }\n\n  _createClass(Lozenge, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      return React.createElement(Theme.Provider, {\n        value: props.theme\n      }, React.createElement(Theme.Consumer, props, function (tokens) {\n        return React.createElement(Container, tokens, React.createElement(Content, tokens, props.children));\n      }));\n    }\n  }]);\n\n  return Lozenge;\n}(PureComponent);\n\n_defineProperty(Lozenge, \"defaultProps\", {\n  isBold: false,\n  appearance: 'default',\n  maxWidth: 200\n});\n\nexport { Lozenge as default };","/* @flow */\n\nimport Lozenge from '@atlaskit/lozenge';\nimport React, { Component } from 'react';\n\nimport { Dialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\n\n/**\n * The type of the React {@code Component} props of\n * {@link KeyboardShortcutsDialog}.\n */\ntype Props = {\n\n    /**\n     * A Map with keyboard keys as keys and translation keys as values.\n     */\n    shortcutDescriptions: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} which displays a dialog describing\n * registered keyboard shortcuts.\n *\n * @extends Component\n */\nclass KeyboardShortcutsDialog extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const shortcuts = Array.from(this.props.shortcutDescriptions)\n            .map(description => this._renderShortcutsListItem(...description));\n\n        return (\n            <Dialog\n                cancelKey = { 'dialog.close' }\n                submitDisabled = { true }\n                titleKey = 'keyboardShortcuts.keyboardShortcuts'\n                width = 'small'>\n                <div\n                    id = 'keyboard-shortcuts'>\n                    <ul\n                        className = 'shortcuts-list'\n                        id = 'keyboard-shortcuts-list'>\n                        { shortcuts }\n                    </ul>\n                </div>\n            </Dialog>\n        );\n    }\n\n    /**\n     * Creates a {@code ReactElement} for describing a single keyboard shortcut.\n     *\n     * @param {string} keyboardKey - The keyboard key that triggers an action.\n     * @param {string} translationKey - A description of what the action does.\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderShortcutsListItem(keyboardKey, translationKey) {\n        return (\n            <li\n                className = 'shortcuts-list__item'\n                key = { keyboardKey }>\n                <span className = 'shortcuts-list__description'>\n                    { this.props.t(translationKey) }\n                </span>\n                <span className = 'item-action'>\n                    <Lozenge isBold = { true }>\n                        { keyboardKey }\n                    </Lozenge>\n                </span>\n            </li>\n        );\n    }\n}\n\nexport default translate(KeyboardShortcutsDialog);\n","// @flow\n\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport { OPEN_KEYBOARD_SHORTCUTS_DIALOG } from './actionTypes';\n\ndeclare var APP: Object;\n\n/**\n * Implements the middleware of the feature keyboard-shortcuts.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case OPEN_KEYBOARD_SHORTCUTS_DIALOG:\n        if (typeof APP === 'object') {\n            APP.keyboardshortcut.openDialog();\n        }\n        break;\n    }\n\n    return next(action);\n});\n","export * from './actions';\nexport * from './components';\n\nimport './middleware';\n","/**\n * The type of (redux) action which indicates that the client window has been resized.\n *\n * {\n *     type: CLIENT_RESIZED\n * }\n */\nexport const CLIENT_RESIZED = 'CLIENT_RESIZED';\n\n/**\n * The type of (redux) action which sets the aspect ratio of the app's user\n * interface.\n *\n * {\n *     type: SET_ASPECT_RATIO,\n *     aspectRatio: Symbol\n * }\n */\nexport const SET_ASPECT_RATIO = 'SET_ASPECT_RATIO';\n\n/**\n * The type of redux action which signals that the reduces UI mode was enabled\n * or disabled.\n *\n * {\n *     type: SET_REDUCED_UI,\n *     reducedUI: boolean\n * }\n *\n * @public\n */\nexport const SET_REDUCED_UI = 'SET_REDUCED_UI';\n","/**\n * The aspect ratio constant which indicates that the width (of whatever the\n * aspect ratio constant is used for) is smaller than the height.\n *\n * @type {Symbol}\n */\nexport const ASPECT_RATIO_NARROW = Symbol('ASPECT_RATIO_NARROW');\n\n/**\n * The aspect ratio constant which indicates that the width (of whatever the\n * aspect ratio constant is used for) is larger than the height.\n *\n * @type {Symbol}\n */\nexport const ASPECT_RATIO_WIDE = Symbol('ASPECT_RATIO_WIDE');\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../../base/app';\nimport { MiddlewareRegistry } from '../../base/redux';\n\nimport { clientResized } from './actions';\n\n/**\n * Dimensions change handler.\n */\nlet handler;\n\n/**\n * Middleware that handles window dimension changes.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_UNMOUNT: {\n        _appWillUnmount();\n        break;\n    }\n    case APP_WILL_MOUNT:\n        _appWillMount(store);\n        break;\n\n    }\n\n    return result;\n});\n\n/**\n * Notifies this feature that the action {@link APP_WILL_MOUNT} is being\n * dispatched within a specific redux {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @private\n * @returns {void}\n */\nfunction _appWillMount(store) {\n    handler = () => {\n        const {\n            innerHeight,\n            innerWidth\n        } = window;\n\n        store.dispatch(clientResized(innerWidth, innerHeight));\n    };\n\n    window.addEventListener('resize', handler);\n}\n\n/**\n * Notifies this feature that the action {@link APP_WILL_UNMOUNT} is being\n * dispatched within a specific redux {@code store}.\n *\n * @private\n * @returns {void}\n */\nfunction _appWillUnmount() {\n    window.removeEventListener('resize', handler);\n\n    handler = undefined;\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { CLIENT_RESIZED, SET_ASPECT_RATIO, SET_REDUCED_UI } from './actionTypes';\nimport { ASPECT_RATIO_NARROW, ASPECT_RATIO_WIDE } from './constants';\n\n/**\n * Size threshold for determining if we are in reduced UI mode or not.\n *\n * FIXME The logic to base {@code reducedUI} on a hardcoded width or height is\n * very brittle because it's completely disconnected from the UI which wants to\n * be rendered and, naturally, it broke on iPad where even the secondary Toolbar\n * didn't fit in the height. We do need to measure the actual UI at runtime and\n * determine whether and how to render it.\n */\nconst REDUCED_UI_THRESHOLD = 300;\n\n/**\n * Indicates a resize of the window.\n *\n * @param {number} clientWidth - The width of the window.\n * @param {number} clientHeight - The height of the window.\n * @returns {Object}\n */\nexport function clientResized(clientWidth: number, clientHeight: number) {\n    return {\n        type: CLIENT_RESIZED,\n        clientHeight,\n        clientWidth\n    };\n}\n\n/**\n * Sets the aspect ratio of the app's user interface based on specific width and\n * height.\n *\n * @param {number} width - The width of the app's user interface.\n * @param {number} height - The height of the app's user interface.\n * @returns {{\n *     type: SET_ASPECT_RATIO,\n *     aspectRatio: Symbol\n * }}\n */\nexport function setAspectRatio(width: number, height: number): Function {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        // Don't change the aspect ratio if width and height are the same, that\n        // is, if we transition to a 1:1 aspect ratio.\n        if (width !== height) {\n            const aspectRatio\n                = width < height ? ASPECT_RATIO_NARROW : ASPECT_RATIO_WIDE;\n\n            if (aspectRatio\n                    !== getState()['features/base/responsive-ui'].aspectRatio) {\n                return dispatch({\n                    type: SET_ASPECT_RATIO,\n                    aspectRatio\n                });\n            }\n        }\n    };\n}\n\n/**\n * Sets the \"reduced UI\" property. In reduced UI mode some components will\n * be hidden if there is no space to render them.\n *\n * @param {number} width - Current usable width.\n * @param {number} height - Current usable height.\n * @returns {{\n *     type: SET_REDUCED_UI,\n *     reducedUI: boolean\n * }}\n */\nexport function setReducedUI(width: number, height: number): Function {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const reducedUI = Math.min(width, height) < REDUCED_UI_THRESHOLD;\n\n        if (reducedUI !== getState()['features/base/responsive-ui'].reducedUI) {\n            return dispatch({\n                type: SET_REDUCED_UI,\n                reducedUI\n            });\n        }\n    };\n}\n","// @flow\n\nimport { ReducerRegistry, set } from '../redux';\n\nimport { CLIENT_RESIZED, SET_ASPECT_RATIO, SET_REDUCED_UI } from './actionTypes';\nimport { ASPECT_RATIO_NARROW } from './constants';\n\nconst {\n    innerHeight = 0,\n    innerWidth = 0\n} = window;\n\n/**\n * The default/initial redux state of the feature base/responsive-ui.\n */\nconst DEFAULT_STATE = {\n    aspectRatio: ASPECT_RATIO_NARROW,\n    clientHeight: innerHeight,\n    clientWidth: innerWidth,\n    reducedUI: false\n};\n\nReducerRegistry.register('features/base/responsive-ui', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case CLIENT_RESIZED: {\n\n        return {\n            ...state,\n            clientWidth: action.clientWidth,\n            clientHeight: action.clientHeight\n        };\n    }\n    case SET_ASPECT_RATIO:\n        return set(state, 'aspectRatio', action.aspectRatio);\n\n    case SET_REDUCED_UI:\n        return set(state, 'reducedUI', action.reducedUI);\n    }\n\n    return state;\n});\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './constants';\n\nimport './middleware';\nimport './reducer';\n","// @flow\n\n/**\n * The type of redux action dispatched which represents that the blur\n * is enabled.\n *\n * {\n *      type: BLUR_ENABLED\n * }\n */\nexport const BLUR_ENABLED = 'BLUR_ENABLED';\n\n/**\n * The type of redux action dispatched which represents that the blur\n * is disabled.\n *\n * {\n *      type: BLUR_DISABLED\n * }\n */\nexport const BLUR_DISABLED = 'BLUR_DISABLED';\n","// @flow\n\nimport { getJitsiMeetGlobalNS, loadScript } from '../base/util';\n\n/**\n * Returns promise that resolves with the blur effect instance.\n *\n * @returns {Promise<JitsiStreamBlurEffect>} - Resolves with the blur effect instance.\n */\nexport function getBlurEffect() {\n    const ns = getJitsiMeetGlobalNS();\n\n    if (ns.effects && ns.effects.createBlurEffect) {\n        return ns.effects.createBlurEffect();\n    }\n\n    return loadScript('libs/video-blur-effect.min.js').then(() => ns.effects.createBlurEffect());\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/blur');\n","// @flow\n\nimport { getLocalVideoTrack } from '../../features/base/tracks';\n\nimport { BLUR_DISABLED, BLUR_ENABLED } from './actionTypes';\nimport { getBlurEffect } from './functions';\nimport logger from './logger';\n\n/**\n* Signals the local participant is switching between blurred or non blurred video.\n*\n* @param {boolean} enabled - If true enables video blur, false otherwise.\n* @returns {Promise}\n*/\nexport function toggleBlurEffect(enabled: boolean) {\n    return function(dispatch: (Object) => Object, getState: () => any) {\n        const state = getState();\n\n        if (state['features/blur'].blurEnabled !== enabled) {\n            const { jitsiTrack } = getLocalVideoTrack(state['features/base/tracks']);\n\n            return getBlurEffect()\n                .then(blurEffectInstance =>\n                    jitsiTrack.setEffect(enabled ? blurEffectInstance : undefined)\n                        .then(() => {\n                            enabled ? dispatch(blurEnabled()) : dispatch(blurDisabled());\n                        })\n                        .catch(error => {\n                            enabled ? dispatch(blurDisabled()) : dispatch(blurEnabled());\n                            logger.error('setEffect failed with error:', error);\n                        })\n                )\n                .catch(error => {\n                    dispatch(blurDisabled());\n                    logger.error('getBlurEffect failed with error:', error);\n                });\n        }\n\n        return Promise.resolve();\n    };\n}\n\n/**\n * Signals the local participant that the blur has been enabled.\n *\n * @returns {{\n *      type: BLUR_ENABLED\n * }}\n */\nexport function blurEnabled() {\n    return {\n        type: BLUR_ENABLED\n    };\n}\n\n/**\n * Signals the local participant that the blur has been disabled.\n *\n * @returns {{\n *      type: BLUR_DISABLED\n * }}\n */\nexport function blurDisabled() {\n    return {\n        type: BLUR_DISABLED\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { createVideoBlurEvent, sendAnalytics } from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { IconBlurBackground } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, BetaTag } from '../../base/toolbox';\nimport type { AbstractButtonProps } from '../../base/toolbox';\n\nimport { toggleBlurEffect } from '../actions';\n\n/**\n * The type of the React {@code Component} props of {@link VideoBlurButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * True if the video background is blurred or false if it is not.\n     */\n    _isVideoBlurred: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n\n};\n\n/**\n * An abstract implementation of a button that toggles the video blur effect.\n */\nclass VideoBlurButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.videoblur';\n    icon = IconBlurBackground;\n    label = 'toolbar.startvideoblur';\n    tooltip = 'toolbar.startvideoblur';\n    toggledLabel = 'toolbar.stopvideoblur';\n\n    /**\n     * Helper function to be implemented by subclasses, which returns\n     * a React Element to display (a beta tag) at the end of the button.\n     *\n     * @override\n     * @protected\n     * @returns {ReactElement}\n     */\n    _getElementAfter() {\n        return <BetaTag />;\n    }\n\n    /**\n     * Handles clicking / pressing the button, and toggles the blur effect\n     * state accordingly.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { _isVideoBlurred, dispatch } = this.props;\n        const value = !_isVideoBlurred;\n\n        sendAnalytics(createVideoBlurEvent(value ? 'started' : 'stopped'));\n        dispatch(toggleBlurEffect(value));\n    }\n\n    /**\n     * Returns {@code boolean} value indicating if the blur effect is\n     * enabled or not.\n     *\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._isVideoBlurred;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code VideoBlurButton} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _isVideoBlurred: boolean\n * }}\n */\nfunction _mapStateToProps(state): Object {\n    return {\n        _isVideoBlurred: Boolean(state['features/blur'].blurEnabled)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(VideoBlurButton));\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport { BLUR_ENABLED, BLUR_DISABLED } from './actionTypes';\n\n\nReducerRegistry.register('features/blur', (state = {}, action) => {\n\n    switch (action.type) {\n    case BLUR_ENABLED: {\n        return {\n            ...state,\n            blurEnabled: true\n        };\n    }\n    case BLUR_DISABLED: {\n        return {\n            ...state,\n            blurEnabled: false\n        };\n    }\n    }\n\n    return state;\n});\n","export * from './actions';\nexport * from './components';\nexport * from './functions';\n\nimport './reducer';\n","// @flow\n\n/**\n * Redux action to signal a color scheme change in the app/sdk.\n *\n * {\n *     type: SET_COLOR_SCHEME\n *     colorScheme: Object\n * }\n */\nexport const SET_COLOR_SCHEME = 'SET_COLOR_SCHEME';\n","// @flow\n\nimport { ColorPalette, getRGBAFormat } from '../styles';\n\n/**\n * The default color scheme of the application.\n */\nexport default {\n    '_defaultTheme': {\n        // Generic app theme colors that are used accross the entire app.\n        // All scheme definitions below inherit these values.\n        background: 'rgb(255, 255, 255)',\n        errorText: ColorPalette.red,\n        icon: 'rgb(28, 32, 37)',\n        text: 'rgb(28, 32, 37)'\n    },\n    'Chat': {\n        displayName: 'rgb(94, 109, 121)',\n        localMsgBackground: 'rgb(215, 230, 249)',\n        privateMsgBackground: 'rgb(250, 219, 219)',\n        privateMsgNotice: 'rgb(186, 39, 58)',\n        remoteMsgBackground: 'rgb(241, 242, 246)',\n        replyBorder: 'rgb(219, 197, 200)',\n        replyIcon: 'rgb(94, 109, 121)'\n    },\n    'Conference': {\n        inviteButtonBackground: 'rgb(0, 119, 225)',\n        onVideoText: 'white'\n    },\n    'Dialog': {\n        border: 'rgba(0, 3, 6, 0.6)',\n        buttonBackground: ColorPalette.blue,\n        buttonLabel: ColorPalette.white\n    },\n    'Header': {\n        background: ColorPalette.blue,\n        icon: ColorPalette.white,\n        statusBar: ColorPalette.blueHighlight,\n        statusBarContent: ColorPalette.white,\n        text: ColorPalette.white\n    },\n    'Modal': {},\n    'LargeVideo': {\n        background: 'rgb(42, 58, 75)'\n    },\n    'LoadConfigOverlay': {\n        background: 'rgb(249, 249, 249)'\n    },\n    'Thumbnail': {\n        activeParticipantHighlight: 'rgb(81, 214, 170)',\n        activeParticipantTint: 'rgba(49, 183, 106, 0.3)',\n        background: 'rgb(94, 109, 122)'\n    },\n    'Toolbox': {\n        button: 'rgb(255, 255, 255)',\n        buttonToggled: 'rgb(38, 58, 76)',\n        buttonToggledBorder: getRGBAFormat('#a4b8d1', 0.6),\n        hangup: 'rgb(225, 45, 45)'\n    }\n};\n","// @flow\n\nimport { toState } from '../redux';\nimport { StyleType } from '../styles';\n\nimport defaultScheme from './defaultScheme';\n\n/**\n * A registry class to register styles that need to be color-schemed.\n *\n * This class uses lazy initialization for scheme-ified style definitions on\n * request.\n */\nclass ColorSchemeRegistry {\n    /**\n     * A map of already scheme-ified style definitions.\n     */\n    _schemedStyles = new Map();\n\n    /**\n     * A map of registered style templates.\n     */\n    _styleTemplates = new Map();\n\n    /**\n     * Clears the already scheme-ified style definitions. This is useful when\n     * the {@code SET_COLOR_SCHEME} action is dispatched (again).\n     *\n     * @returns {void}\n     */\n    clear() {\n        this._schemedStyles.clear();\n    }\n\n    /**\n     * Retreives the color-scheme applied style definition of a component.\n     *\n     * @param {Object | Function} stateful - An object or function that can be\n     * resolved to Redux state using the {@code toState} function.\n     * @param {string} componentName - The name of the component whose style we\n     * want to retreive.\n     * @returns {StyleType}\n     */\n    get(stateful: Object | Function, componentName: string): StyleType {\n        let schemedStyle = this._schemedStyles.get(componentName);\n\n        if (!schemedStyle) {\n            schemedStyle\n                = this._applyColorScheme(\n                    stateful,\n                    componentName,\n                    this._styleTemplates.get(componentName));\n            this._schemedStyles.set(componentName, schemedStyle);\n        }\n\n        return schemedStyle;\n    }\n\n    /**\n     * Registers a style definition to the registry for color-scheming.\n     *\n     * NOTE: It's suggested to only use this registry on styles where color\n     * scheming is needed, otherwise just use a static style object as before.\n     *\n     * @param {string} componentName - The name of the component to register the\n     * style to (e.g. {@code 'Toolbox'}).\n     * @param {StyleType} style - The style definition to register.\n     * @returns {void}\n     */\n    register(componentName: string, style: StyleType): void {\n        this._styleTemplates.set(componentName, style);\n\n        // If this is a style overwrite, we need to delete the processed version\n        // of the style from the other map\n        this._schemedStyles.delete(componentName);\n    }\n\n    /**\n     * Creates a color schemed style object applying the color scheme to every\n     * colors in the style object prepared in a special way.\n     *\n     * @param {Object | Function} stateful - An object or function that can be\n     * resolved to Redux state using the {@code toState} function.\n     * @param {string} componentName - The name of the component to apply the\n     * color scheme to.\n     * @param {StyleType} style - The style definition to apply the color scheme\n     * to.\n     * @returns {StyleType}\n     */\n    _applyColorScheme(\n            stateful: Object | Function,\n            componentName: string,\n            style: StyleType): StyleType {\n        let schemedStyle;\n\n        if (Array.isArray(style)) {\n            // The style is an array of styles, we apply the same transformation\n            // to each, recursively.\n            schemedStyle = [];\n\n            for (const entry of style) {\n                schemedStyle.push(this._applyColorScheme(\n                    stateful, componentName, entry));\n            }\n        } else {\n            // The style is an object, we create a copy of it to avoid in-place\n            // modification.\n            schemedStyle = {\n                ...style\n            };\n\n            for (const [\n                styleName,\n                styleValue\n            ] of Object.entries(schemedStyle)) {\n                if (typeof styleValue === 'object') {\n                    // The value is another style object, we apply the same\n                    // transformation recusively.\n                    schemedStyle[styleName]\n                        = this._applyColorScheme(\n                            stateful, componentName, styleValue);\n                } else if (typeof styleValue === 'function') {\n                    // The value is a function, which indicates that it's a\n                    // dynamic, schemed color we need to resolve.\n                    // $FlowExpectedError\n                    const value = styleValue();\n\n                    schemedStyle[styleName]\n                        = this._getColor(stateful, componentName, value);\n                }\n\n            }\n        }\n\n        return schemedStyle;\n    }\n\n    /**\n     * Function to get the color value for the provided identifier.\n     *\n     * @param {Object | Function} stateful - An object or function that can be\n     * resolved to Redux state using the {@code toState} function.\n     * @param {string} componentName - The name of the component to get the\n     * color value for.\n     * @param {string} colorDefinition - The string identifier of the color,\n     * e.g. {@code appBackground}.\n     * @returns {string}\n     */\n    _getColor(\n            stateful: Object | Function,\n            componentName: string,\n            colorDefinition: string): string {\n        const colorScheme = toState(stateful)['features/base/color-scheme'];\n\n        return {\n            ...defaultScheme._defaultTheme,\n            ...colorScheme._defaultTheme,\n            ...defaultScheme[componentName],\n            ...colorScheme[componentName]\n        }[colorDefinition];\n    }\n\n}\n\nexport default new ColorSchemeRegistry();\n","// @flow\n\nimport _ from 'lodash';\n\nimport { ReducerRegistry } from '../redux';\n\nimport { SET_COLOR_SCHEME } from './actionTypes';\n\n/**\n * The reducer of the feature {@code base/color-scheme}.\n *\n * @returns {Function}\n */\nReducerRegistry.register('features/base/color-scheme', (state = {}, action) => {\n    switch (action.type) {\n    case SET_COLOR_SCHEME:\n        return _.cloneDeep(action.colorScheme) || state;\n    }\n\n    return state;\n});\n","// @flow\n\nexport * from './actions';\nexport * from './actionTypes';\nexport * from './functions';\nexport { default as ColorSchemeRegistry } from './ColorSchemeRegistry';\n\nimport './reducer';\n","/**\n * The type of redux action which stores a specific JSON Web Token (JWT) into\n * the redux store.\n *\n * {\n *     type: SET_JWT,\n *     jwt: string\n * }\n */\nexport const SET_JWT = 'SET_JWT';\n","// @flow\n\nimport { SET_JWT } from './actionTypes';\n\n/**\n * Stores a specific JSON Web Token (JWT) into the redux store.\n *\n * @param {string} [jwt] - The JSON Web Token (JWT) to store.\n * @returns {{\n *     type: SET_TOKEN_DATA,\n *     jwt: (string|undefined)\n * }}\n */\nexport function setJWT(jwt: ?string) {\n    return {\n        type: SET_JWT,\n        jwt\n    };\n}\n","/* @flow */\n\nimport { parseURLParams } from '../util';\n\n/**\n * Retrieves the JSON Web Token (JWT), if any, defined by a specific\n * {@link URL}.\n *\n * @param {URL} url - The {@code URL} to parse and retrieve the JSON Web Token\n * (JWT), if any, from.\n * @returns {string} The JSON Web Token (JWT), if any, defined by the specified\n * {@code url}; otherwise, {@code undefined}.\n */\nexport function parseJWTFromURLParams(url: URL = window.location) {\n    return parseURLParams(url, true, 'search').jwt;\n}\n","// @flow\n\nimport jwtDecode from 'jwt-decode';\n\nimport { SET_CONFIG } from '../config';\nimport { SET_LOCATION_URL } from '../connection';\nimport {\n    getLocalParticipant,\n    participantUpdated\n} from '../participants';\nimport { MiddlewareRegistry } from '../redux';\n\nimport { setJWT } from './actions';\nimport { SET_JWT } from './actionTypes';\nimport { parseJWTFromURLParams } from './functions';\n\ndeclare var APP: Object;\n\n/**\n * Middleware to parse token data upon setting a new room URL.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case SET_CONFIG:\n    case SET_LOCATION_URL:\n        // XXX The JSON Web Token (JWT) is not the only piece of state that we\n        // have decided to store in the feature jwt, there is isGuest as well\n        // which depends on the states of the features base/config and jwt. So\n        // the JSON Web Token comes from the conference/room's URL and isGuest\n        // needs a recalculation upon SET_CONFIG as well.\n        return _setConfigOrLocationURL(store, next, action);\n\n    case SET_JWT:\n        return _setJWT(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Overwrites the properties {@code avatarURL}, {@code email}, and {@code name}\n * of the local participant stored in the redux state base/participants.\n *\n * @param {Store} store - The redux store.\n * @param {Object} localParticipant - The {@code Participant} structure to\n * overwrite the local participant stored in the redux store base/participants\n * with.\n * @private\n * @returns {void}\n */\nfunction _overwriteLocalParticipant(\n        { dispatch, getState },\n        { avatarURL, email, name, features }) {\n    let localParticipant;\n\n    if ((avatarURL || email || name)\n            && (localParticipant = getLocalParticipant(getState))) {\n        const newProperties: Object = {\n            id: localParticipant.id,\n            local: true\n        };\n\n        if (avatarURL) {\n            newProperties.avatarURL = avatarURL;\n        }\n        if (email) {\n            newProperties.email = email;\n        }\n        if (name) {\n            newProperties.name = name;\n        }\n        if (features) {\n            newProperties.features = features;\n        }\n        dispatch(participantUpdated(newProperties));\n    }\n}\n\n/**\n * Notifies the feature jwt that the action {@link SET_CONFIG} or\n * {@link SET_LOCATION_URL} is being dispatched within a specific redux\n * {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux dispatch function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code SET_CONFIG} or\n * {@code SET_LOCATION_URL} which is being dispatched in the specified\n * {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _setConfigOrLocationURL({ dispatch, getState }, next, action) {\n    const result = next(action);\n\n    const { locationURL } = getState()['features/base/connection'];\n\n    dispatch(\n        setJWT(locationURL ? parseJWTFromURLParams(locationURL) : undefined));\n\n    return result;\n}\n\n/**\n * Notifies the feature jwt that the action {@link SET_JWT} is being dispatched\n * within a specific redux {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux dispatch function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code SET_JWT} which is being\n * dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _setJWT(store, next, action) {\n    // eslint-disable-next-line no-unused-vars\n    const { jwt, type, ...actionPayload } = action;\n\n    if (!Object.keys(actionPayload).length) {\n        if (jwt) {\n            const {\n                enableUserRolesBasedOnToken\n            } = store.getState()['features/base/config'];\n\n            action.isGuest = !enableUserRolesBasedOnToken;\n\n            const jwtPayload = jwtDecode(jwt);\n\n            if (jwtPayload) {\n                const { context, iss } = jwtPayload;\n\n                action.jwt = jwt;\n                action.issuer = iss;\n                if (context) {\n                    const user = _user2participant(context.user);\n\n                    action.callee = context.callee;\n                    action.group = context.group;\n                    action.server = context.server;\n                    action.user = user;\n\n                    user && _overwriteLocalParticipant(\n                        store, { ...user,\n                            features: context.features });\n                }\n            }\n        } else if (typeof APP === 'undefined') {\n            // The logic of restoring JWT overrides make sense only on mobile.\n            // On Web it should eventually be restored from storage, but there's\n            // no such use case yet.\n\n            const { user } = store.getState()['features/base/jwt'];\n\n            user && _undoOverwriteLocalParticipant(store, user);\n        }\n    }\n\n    return next(action);\n}\n\n/**\n * Undoes/resets the values overwritten by {@link _overwriteLocalParticipant}\n * by either clearing them or setting to default values. Only the values that\n * have not changed since the overwrite happened will be restored.\n *\n * NOTE Once it is possible to edit and save participant properties, this\n * function should restore values from the storage instead.\n *\n * @param {Store} store - The redux store.\n * @param {Object} localParticipant - The {@code Participant} structure used\n * previously to {@link _overwriteLocalParticipant}.\n * @private\n * @returns {void}\n */\nfunction _undoOverwriteLocalParticipant(\n        { dispatch, getState },\n        { avatarURL, name, email }) {\n    let localParticipant;\n\n    if ((avatarURL || name || email)\n            && (localParticipant = getLocalParticipant(getState))) {\n        const newProperties: Object = {\n            id: localParticipant.id,\n            local: true\n        };\n\n        if (avatarURL === localParticipant.avatarURL) {\n            newProperties.avatarURL = undefined;\n        }\n        if (email === localParticipant.email) {\n            newProperties.email = undefined;\n        }\n        if (name === localParticipant.name) {\n            newProperties.name = undefined;\n        }\n        newProperties.features = undefined;\n\n        dispatch(participantUpdated(newProperties));\n    }\n}\n\n/**\n * Converts the JWT {@code context.user} structure to the {@code Participant}\n * structure stored in the redux state base/participants.\n *\n * @param {Object} user - The JWT {@code context.user} structure to convert.\n * @private\n * @returns {{\n *     avatarURL: ?string,\n *     email: ?string,\n *     id: ?string,\n *     name: ?string\n * }}\n */\nfunction _user2participant({ avatar, avatarUrl, email, id, name }) {\n    const participant = {};\n\n    if (typeof avatarUrl === 'string') {\n        participant.avatarURL = avatarUrl.trim();\n    } else if (typeof avatar === 'string') {\n        participant.avatarURL = avatar.trim();\n    }\n    if (typeof email === 'string') {\n        participant.email = email.trim();\n    }\n    if (typeof id === 'string') {\n        participant.id = id.trim();\n    }\n    if (typeof name === 'string') {\n        participant.name = name.trim();\n    }\n\n    return Object.keys(participant).length ? participant : undefined;\n}\n","// @flow\n\nimport { equals, ReducerRegistry } from '../redux';\n\nimport { SET_JWT } from './actionTypes';\n\n/**\n * The default/initial redux state of the feature jwt.\n *\n * @private\n * @type {{\n *     isGuest: boolean\n * }}\n */\nconst DEFAULT_STATE = {\n    /**\n     * The indicator which determines whether the local participant is a guest\n     * in the conference.\n     *\n     * @type {boolean}\n     */\n    isGuest: true\n};\n\n/**\n * Reduces redux actions which affect the JSON Web Token (JWT) stored in the\n * redux store.\n *\n * @param {Object} state - The current redux state.\n * @param {Object} action - The redux action to reduce.\n * @returns {Object} The next redux state which is the result of reducing the\n * specified {@code action}.\n */\nReducerRegistry.register(\n    'features/base/jwt',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case SET_JWT: {\n            // eslint-disable-next-line no-unused-vars\n            const { type, ...payload } = action;\n            const nextState = {\n                ...DEFAULT_STATE,\n                ...payload\n            };\n\n            return equals(state, nextState) ? state : nextState;\n        }\n        }\n\n        return state;\n    });\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './functions';\n\nimport './middleware';\nimport './reducer';\n","// @flow\n\n/**\n * Number of pixels that signal if two images should be considered different.\n */\nexport const PIXEL_LOWER_BOUND = 100000;\n\n/**\n * Number of milliseconds that represent how often screenshots should be taken.\n */\nexport const POLL_INTERVAL = 30000;\n\n/**\n * SET_INTERVAL constant is used to set interval and it is set in\n * the id property of the request.data property. timeMs property must\n * also be set. request.data example:\n *\n * {\n *      id: SET_INTERVAL,\n *      timeMs: 33\n * }\n */\nexport const SET_INTERVAL = 1;\n\n/**\n * CLEAR_INTERVAL constant is used to clear the interval and it is set in\n * the id property of the request.data property.\n *\n * {\n *      id: CLEAR_INTERVAL\n * }\n */\nexport const CLEAR_INTERVAL = 2;\n\n/**\n * INTERVAL_TIMEOUT constant is used as response and it is set in the id property.\n *\n * {\n *      id: INTERVAL_TIMEOUT\n * }\n */\nexport const INTERVAL_TIMEOUT = 3;\n","// @flow\n\nimport {\n    CLEAR_INTERVAL,\n    INTERVAL_TIMEOUT,\n    SET_INTERVAL\n} from './constants';\n\nconst code = `\n    var timer;\n\n    onmessage = function(request) {\n        switch (request.data.id) {\n        case ${SET_INTERVAL}: {\n            timer = setInterval(() => {\n                postMessage({ id: ${INTERVAL_TIMEOUT} });\n            }, request.data.timeMs);\n            break;\n        }\n        case ${CLEAR_INTERVAL}: {\n            if (timer) {\n                clearInterval(timer);\n            }\n            break;\n        }\n        }\n    };\n`;\n\nexport const timerWorkerScript = URL.createObjectURL(new Blob([ code ], { type: 'application/javascript' }));\n","// @flow\n\nimport pixelmatch from 'pixelmatch';\n\nimport {\n    CLEAR_INTERVAL,\n    INTERVAL_TIMEOUT,\n    PIXEL_LOWER_BOUND,\n    POLL_INTERVAL,\n    SET_INTERVAL\n} from './constants';\n\nimport { getCurrentConference } from '../../base/conference';\nimport { processScreenshot } from './processScreenshot';\nimport { timerWorkerScript } from './worker';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Effect that wraps {@code MediaStream} adding periodic screenshot captures.\n * Manipulates the original desktop stream and performs custom processing operations, if implemented.\n */\nexport default class ScreenshotCaptureEffect {\n    _state: Object;\n    _currentCanvas: HTMLCanvasElement;\n    _currentCanvasContext: CanvasRenderingContext2D;\n    _videoElement: HTMLVideoElement;\n    _handleWorkerAction: Function;\n    _initScreenshotCapture: Function;\n    _streamWorker: Worker;\n    _streamHeight: any;\n    _streamWidth: any;\n    _storedImageData: Uint8ClampedArray;\n\n    /**\n     * Initializes a new {@code ScreenshotCaptureEffect} instance.\n     *\n     * @param {Object} state - The redux state.\n     */\n    constructor(state: Object) {\n        this._state = state;\n        this._currentCanvas = document.createElement('canvas');\n        this._currentCanvasContext = this._currentCanvas.getContext('2d');\n        this._videoElement = document.createElement('video');\n\n        // Bind handlers such that they access the same instance.\n        this._handleWorkerAction = this._handleWorkerAction.bind(this);\n        this._initScreenshotCapture = this._initScreenshotCapture.bind(this);\n        this._streamWorker = new Worker(timerWorkerScript, { name: 'Screenshot capture worker' });\n        this._streamWorker.onmessage = this._handleWorkerAction;\n    }\n\n    /**\n     * Starts the screenshot capture event on a loop.\n     *\n     * @param {MediaStream} stream - The desktop stream from which screenshots are to be sent.\n     * @param {string} videoType - The type of the media stream.\n     * @returns {Promise} - Promise that resolves once effect has started or rejects if the\n     * videoType parameter is not desktop.\n     */\n    startEffect(stream: MediaStream, videoType: string) {\n        return new Promise<void>((resolve, reject) => {\n            if (videoType !== 'desktop') {\n                reject();\n            }\n            const desktopTrack = stream.getVideoTracks()[0];\n            const { height, width }\n                = desktopTrack.getSettings() ?? desktopTrack.getConstraints();\n\n            this._streamHeight = height;\n            this._streamWidth = width;\n            this._currentCanvas.height = parseInt(height, 10);\n            this._currentCanvas.width = parseInt(width, 10);\n            this._videoElement.height = parseInt(height, 10);\n            this._videoElement.width = parseInt(width, 10);\n            this._videoElement.srcObject = stream;\n            this._videoElement.play();\n\n            // Store first capture for comparisons in {@code this._handleScreenshot}.\n            this._videoElement.addEventListener('loadeddata', this._initScreenshotCapture);\n            resolve();\n        });\n    }\n\n    /**\n     * Stops the ongoing {@code ScreenshotCaptureEffect} by clearing the {@code Worker} interval.\n     *\n     * @returns {void}\n     */\n    stopEffect() {\n        this._streamWorker.postMessage({ id: CLEAR_INTERVAL });\n        this._videoElement.removeEventListener('loadeddata', this._initScreenshotCapture);\n    }\n\n    /**\n     * Method that is called as soon as the first frame of the video loads from stream.\n     * The method is used to store the {@code ImageData} object from the first frames\n     * in order to use it for future comparisons based on which we can process only certain\n     * screenshots.\n     *\n     * @private\n     * @returns {void}\n     */\n    _initScreenshotCapture() {\n        const storedCanvas = document.createElement('canvas');\n        const storedCanvasContext = storedCanvas.getContext('2d');\n\n        storedCanvasContext.drawImage(this._videoElement, 0, 0, this._streamWidth, this._streamHeight);\n        const { data } = storedCanvasContext.getImageData(0, 0, this._streamWidth, this._streamHeight);\n\n        this._storedImageData = data;\n        this._streamWorker.postMessage({\n            id: SET_INTERVAL,\n            timeMs: POLL_INTERVAL\n        });\n    }\n\n    /**\n     * Handler of the {@code EventHandler} message that calls the appropriate method based on the parameter's id.\n     *\n     * @private\n     * @param {EventHandler} message - Message received from the Worker.\n     * @returns {void}\n     */\n    _handleWorkerAction(message: Object) {\n        return message.data.id === INTERVAL_TIMEOUT && this._handleScreenshot();\n    }\n\n    /**\n     * Method that decides whether an image should be processed based on a preset pixel lower bound.\n     *\n     * @private\n     * @param {integer} nbPixels - The number of pixels of the candidate image.\n     * @returns {boolean} - Whether the image should be processed or not.\n     */\n    _shouldProcessScreenshot(nbPixels: number) {\n        return nbPixels >= PIXEL_LOWER_BOUND;\n    }\n\n    /**\n     * Screenshot handler.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleScreenshot() {\n        this._currentCanvasContext.drawImage(this._videoElement, 0, 0, this._streamWidth, this._streamHeight);\n        const { data } = this._currentCanvasContext.getImageData(0, 0, this._streamWidth, this._streamHeight);\n        const diffPixels = pixelmatch(data, this._storedImageData, null, this._streamWidth, this._streamHeight);\n\n        if (this._shouldProcessScreenshot(diffPixels)) {\n            const conference = getCurrentConference(this._state);\n            const sessionId = conference.getMeetingUniqueId();\n            const { connection, timeEstablished } = this._state['features/base/connection'];\n            const jid = connection.getJid();\n            const timeLapseSeconds = timeEstablished && Math.floor((Date.now() - timeEstablished) / 1000);\n            const { jwt } = this._state['features/base/jwt'];\n\n            this._storedImageData = data;\n            processScreenshot(this._currentCanvas, {\n                jid,\n                jwt,\n                sessionId,\n                timeLapseSeconds\n            });\n        }\n    }\n}\n","// @flow\n\nimport ScreenshotCaptureEffect from './ScreenshotCaptureEffect';\nimport { toState } from '../../base/redux';\n\n/**\n * Creates a new instance of ScreenshotCaptureEffect.\n *\n * @param {Object | Function} stateful - The redux store, state, or\n * {@code getState} function.\n * @returns {Promise<ScreenshotCaptureEffect>}\n */\nexport function createScreenshotCaptureEffect(stateful: Object | Function) {\n    if (!MediaStreamTrack.prototype.getSettings && !MediaStreamTrack.prototype.getConstraints) {\n        return Promise.reject(new Error('ScreenshotCaptureEffect not supported!'));\n    }\n\n    return Promise.resolve(new ScreenshotCaptureEffect(toState(stateful)));\n}\n","/**\n * The type of the action which signals to update the current known state of the\n * shared YouTube video.\n *\n * {\n *     type: SET_SHARED_VIDEO_STATUS,\n *     status: string\n * }\n */\nexport const SET_SHARED_VIDEO_STATUS = 'SET_SHARED_VIDEO_STATUS';\n\n/**\n * The type of the action which signals to start the flow for starting or\n * stopping a shared YouTube video.\n *\n * {\n *     type: TOGGLE_SHARED_VIDEO\n * }\n */\nexport const TOGGLE_SHARED_VIDEO = 'TOGGLE_SHARED_VIDEO';\n","import { SET_SHARED_VIDEO_STATUS, TOGGLE_SHARED_VIDEO } from './actionTypes';\n\n/**\n * Updates the current known status of the shared YouTube video.\n *\n * @param {string} status - The current status of the YouTube video being\n * shared.\n * @returns {{\n *     type: SET_SHARED_VIDEO_STATUS,\n *     status: string\n * }}\n */\nexport function setSharedVideoStatus(status) {\n    return {\n        type: SET_SHARED_VIDEO_STATUS,\n        status\n    };\n}\n\n/**\n * Starts the flow for starting or stopping a shared YouTube video.\n *\n * @returns {{\n *     type: TOGGLE_SHARED_VIDEO\n * }}\n */\nexport function toggleSharedVideo() {\n    return {\n        type: TOGGLE_SHARED_VIDEO\n    };\n}\n","// @flow\n\nimport UIEvents from '../../../service/UI/UIEvents';\n\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport { TOGGLE_SHARED_VIDEO } from './actionTypes';\n\ndeclare var APP: Object;\n\n/**\n * Middleware that captures actions related to YouTube video sharing and updates\n * components not hooked into redux.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    if (typeof APP === 'undefined') {\n        return next(action);\n    }\n\n    switch (action.type) {\n    case TOGGLE_SHARED_VIDEO:\n        APP.UI.emitEvent(UIEvents.SHARED_VIDEO_CLICKED);\n        break;\n    }\n\n    return next(action);\n});\n","import { ReducerRegistry } from '../base/redux';\n\nimport { SET_SHARED_VIDEO_STATUS } from './actionTypes';\n\n/**\n * Reduces the Redux actions of the feature features/shared-video.\n */\nReducerRegistry.register('features/shared-video', (state = {}, action) => {\n    switch (action.type) {\n    case SET_SHARED_VIDEO_STATUS:\n        return {\n            ...state,\n            status: action.status\n        };\n\n    default:\n        return state;\n    }\n});\n","export * from './actions';\nexport * from './actionTypes';\n\nimport './middleware';\nimport './reducer';\n","/* @flow */\n\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport React, { Component } from 'react';\n\n/**\n * A map of dialog positions, relative to trigger, to css classes used to\n * manipulate elements for handling mouse events.\n *\n * @private\n * @type {object}\n */\nconst DIALOG_TO_PADDING_POSITION = {\n    'left': 'popover-mousemove-padding-right',\n    'right': 'popover-mousemove-padding-left',\n    'top': 'popover-mousemove-padding-bottom'\n};\n\n/**\n * Takes the position expected by {@code InlineDialog} and maps it to a CSS\n * class that can be used styling the elements used for preventing mouseleave\n * events when moving from the trigger to the dialog.\n *\n * @param {string} position - From which position the dialog will display.\n * @private\n * @returns {string}\n */\nfunction _mapPositionToPaddingClass(position = 'left') {\n    return DIALOG_TO_PADDING_POSITION[position.split(' ')[0]];\n}\n\n/**\n * The type of the React {@code Component} props of {@link Popover}.\n */\ntype Props = {\n\n    /**\n     * A child React Element to use as the trigger for showing the dialog.\n     */\n    children: React$Node,\n\n    /**\n     * Additional CSS classnames to apply to the root of the {@code Popover}\n     * component.\n     */\n    className: string,\n\n    /**\n     * The ReactElement to display within the dialog.\n     */\n    content: Object,\n\n    /**\n     * Whether displaying of the popover should be prevented.\n     */\n    disablePopover: boolean,\n\n    /**\n     * An id attribute to apply to the root of the {@code Popover}\n     * component.\n     */\n    id: string,\n\n    /**\n     * Callback to invoke when the popover has opened.\n     */\n    onPopoverOpen: Function,\n\n    /**\n     * From which side of the dialog trigger the dialog should display. The\n     * value will be passed to {@code InlineDialog}.\n     */\n    position: string\n};\n\n/**\n * The type of the React {@code Component} state of {@link Popover}.\n */\ntype State = {\n\n    /**\n     * Whether or not the {@code InlineDialog} should be displayed.\n     */\n    showDialog: boolean\n};\n\n/**\n * Implements a React {@code Component} for showing an {@code InlineDialog} on\n * mouseenter of the trigger and contents, and hiding the dialog on mouseleave.\n *\n * @extends Component\n */\nclass Popover extends Component<Props, State> {\n    /**\n     * Default values for {@code Popover} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        className: '',\n        id: ''\n    };\n\n    /**\n     * Initializes a new {@code Popover} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            showDialog: false\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onHideDialog = this._onHideDialog.bind(this);\n        this._onShowDialog = this._onShowDialog.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div\n                className = { this.props.className }\n                id = { this.props.id }\n                onMouseEnter = { this._onShowDialog }\n                onMouseLeave = { this._onHideDialog }>\n                <InlineDialog\n                    content = { this._renderContent() }\n                    isOpen = { this.state.showDialog }\n                    position = { this.props.position }>\n                    { this.props.children }\n                </InlineDialog>\n            </div>\n        );\n    }\n\n    _onHideDialog: () => void;\n\n    /**\n     * Stops displaying the {@code InlineDialog}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onHideDialog() {\n        this.setState({ showDialog: false });\n    }\n\n    _onShowDialog: () => void;\n\n    /**\n     * Displays the {@code InlineDialog} and calls any registered onPopoverOpen\n     * callbacks.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShowDialog() {\n        if (!this.props.disablePopover) {\n            this.setState({ showDialog: true });\n\n            if (this.props.onPopoverOpen) {\n                this.props.onPopoverOpen();\n            }\n        }\n    }\n\n    /**\n     * Renders the React Element to be displayed in the {@code InlineDialog}.\n     * Also adds padding to support moving the mouse from the trigger to the\n     * dialog to prevent mouseleave events.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderContent() {\n        const { content, position } = this.props;\n\n        return (\n            <div className = 'popover'>\n                { content }\n                <div className = 'popover-mouse-padding-top' />\n                <div className = { _mapPositionToPaddingClass(position) } />\n            </div>\n        );\n    }\n}\n\nexport default Popover;\n","export * from './components';\n","// @flow\n\nimport React, { Component } from 'react';\nimport type { CommonState, Player, PlayerState } from '../types';\nimport { translate } from '../../base/i18n';\nimport { connect } from '../../base/redux';\nimport { playerState, playerStateI18nParams } from '../functions';\n\nexport type Props = {\n    nick: string,\n    t: Function,\n    _amount: number,\n    _bet: number,\n    _state: PlayerState,\n    _playerStateI18nParams: Object,\n    _dealer: boolean\n}\n\nexport class PlayerListEntry extends Component<Props> {\n\n    render() {\n\n        const { t } = this.props;\n\n        return (\n            <div className = 'player-list-entry table-row'>\n                <div className = 'table-cell dealer'>\n                    {this.props._dealer\n                    && <span className = 'dealer-button'><span>Dealer</span></span>}\n                </div>\n                <div className = 'table-cell nick'>{ this.props.nick }</div>\n                <div className = 'table-cell amount'>{ this.props._amount }</div>\n                <div className = 'table-cell bet'>{ this.props._bet }</div>\n                <div className = { `table-cell state ${this.props._state}` }>\n                    { t(`poker.state.${this.props._state}`, this.props._playerStateI18nParams) }\n                </div>\n            </div>\n        );\n    }\n}\n\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const common: CommonState = state['features/poker'].common;\n    const player: Player = common.players[ownProps.nick];\n\n    return {\n        _amount: player.amount,\n        _bet: player.bet,\n        _state: playerState(state, ownProps.nick),\n        _playerStateI18nParams: playerStateI18nParams(state, ownProps.nick),\n        _dealer: common.game.dealer === ownProps.nick\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(PlayerListEntry));\n","// @flow\n\nimport React, { Component } from 'react';\nimport { connect } from '../../base/redux';\nimport { translate } from '../../base/i18n';\nimport Table from './Table';\nimport type { CommonState } from '../types';\nimport PlayerListEntry from './PlayerListEntry';\nimport { getCurrentLayout } from '../../video-layout';\nimport { getFontPercentage } from '../functions';\n\nexport type Props = {\n    dispatch: Function,\n    t: Function,\n    _nicks: Array<string>,\n    _currentLayout: string,\n    _fontPercentage: number\n}\n\ntype State = {\n\n}\n\n/**\n * Implements a class to render poker in the app.\n */\nclass Game extends Component<Props, State> {\n\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            // value: false\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        // this._onAction = this._onAction.bind(this);\n    }\n\n    render() {\n        return (\n            <div\n                className = { `game ${this.props._currentLayout}` }\n                style = {{ fontSize: `${this.props._fontPercentage * 60 / 100}%` }}>\n                <div className = 'player-list table'>\n                    <div className = 'table-row'>\n                        <div className = 'table-cell dealer'>Name</div>\n                        <div className = 'table-cell nick'>Name</div>\n                        <div className = 'table-cell'>Amount</div>\n                        <div className = 'table-cell'>Bet</div>\n                        <div className = 'table-cell'>State</div>\n                    </div>\n                    {this.props._nicks.map(nick => (<PlayerListEntry\n                        key = { nick }\n                        nick = { nick } />))}\n                </div>\n                <div className = 'gameTable'>\n                    <Table />\n                </div>\n            </div>\n        );\n    }\n\n}\n\nexport function _mapStateToProps(state: Object) {\n    const commonState: CommonState = state['features/poker'].common;\n    const nicks: Array<string> = Object.keys(commonState.players);\n\n    return {\n        _nicks: nicks,\n        _currentLayout: getCurrentLayout(state),\n        _fontPercentage: getFontPercentage(state)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(Game));\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):e.Dropbox=t()}(this,function(){\"use strict\";function e(){return\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope||\"undefined\"==typeof module||\"undefined\"!=typeof window}function t(e){return\"https://\"+e+\".dropboxapi.com/2/\"}function r(e){return JSON.stringify(e).replace(/[\\u007f-\\uffff]/g,function(e){return\"\\\\u\"+(\"000\"+e.charCodeAt(0).toString(16)).slice(-4)})}function n(e){var t=e.length;if(t%4>0)throw Error(\"Invalid string. Length must be a multiple of 4\");return\"=\"===e[t-2]?2:\"=\"===e[t-1]?1:0}var i={};i.authTokenFromOauth1=function(e){return this.request(\"auth/token/from_oauth1\",e,\"app\",\"api\",\"rpc\")},i.authTokenRevoke=function(e){return this.request(\"auth/token/revoke\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesPropertiesAdd=function(e){return this.request(\"file_properties/properties/add\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesPropertiesOverwrite=function(e){return this.request(\"file_properties/properties/overwrite\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesPropertiesRemove=function(e){return this.request(\"file_properties/properties/remove\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesPropertiesSearch=function(e){return this.request(\"file_properties/properties/search\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesPropertiesSearchContinue=function(e){return this.request(\"file_properties/properties/search/continue\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesPropertiesUpdate=function(e){return this.request(\"file_properties/properties/update\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesTemplatesAddForTeam=function(e){return this.request(\"file_properties/templates/add_for_team\",e,\"team\",\"api\",\"rpc\")},i.filePropertiesTemplatesAddForUser=function(e){return this.request(\"file_properties/templates/add_for_user\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesTemplatesGetForTeam=function(e){return this.request(\"file_properties/templates/get_for_team\",e,\"team\",\"api\",\"rpc\")},i.filePropertiesTemplatesGetForUser=function(e){return this.request(\"file_properties/templates/get_for_user\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesTemplatesListForTeam=function(e){return this.request(\"file_properties/templates/list_for_team\",e,\"team\",\"api\",\"rpc\")},i.filePropertiesTemplatesListForUser=function(e){return this.request(\"file_properties/templates/list_for_user\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesTemplatesRemoveForTeam=function(e){return this.request(\"file_properties/templates/remove_for_team\",e,\"team\",\"api\",\"rpc\")},i.filePropertiesTemplatesRemoveForUser=function(e){return this.request(\"file_properties/templates/remove_for_user\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesTemplatesUpdateForTeam=function(e){return this.request(\"file_properties/templates/update_for_team\",e,\"team\",\"api\",\"rpc\")},i.filePropertiesTemplatesUpdateForUser=function(e){return this.request(\"file_properties/templates/update_for_user\",e,\"user\",\"api\",\"rpc\")},i.fileRequestsCreate=function(e){return this.request(\"file_requests/create\",e,\"user\",\"api\",\"rpc\")},i.fileRequestsGet=function(e){return this.request(\"file_requests/get\",e,\"user\",\"api\",\"rpc\")},i.fileRequestsList=function(e){return this.request(\"file_requests/list\",e,\"user\",\"api\",\"rpc\")},i.fileRequestsUpdate=function(e){return this.request(\"file_requests/update\",e,\"user\",\"api\",\"rpc\")},i.filesAlphaGetMetadata=function(e){return this.request(\"files/alpha/get_metadata\",e,\"user\",\"api\",\"rpc\")},i.filesAlphaUpload=function(e){return this.request(\"files/alpha/upload\",e,\"user\",\"content\",\"upload\")},i.filesCopy=function(e){return this.request(\"files/copy\",e,\"user\",\"api\",\"rpc\")},i.filesCopyBatch=function(e){return this.request(\"files/copy_batch\",e,\"user\",\"api\",\"rpc\")},i.filesCopyBatchCheck=function(e){return this.request(\"files/copy_batch/check\",e,\"user\",\"api\",\"rpc\")},i.filesCopyReferenceGet=function(e){return this.request(\"files/copy_reference/get\",e,\"user\",\"api\",\"rpc\")},i.filesCopyReferenceSave=function(e){return this.request(\"files/copy_reference/save\",e,\"user\",\"api\",\"rpc\")},i.filesCopyV2=function(e){return this.request(\"files/copy_v2\",e,\"user\",\"api\",\"rpc\")},i.filesCreateFolder=function(e){return this.request(\"files/create_folder\",e,\"user\",\"api\",\"rpc\")},i.filesCreateFolderBatch=function(e){return this.request(\"files/create_folder_batch\",e,\"user\",\"api\",\"rpc\")},i.filesCreateFolderBatchCheck=function(e){return this.request(\"files/create_folder_batch/check\",e,\"user\",\"api\",\"rpc\")},i.filesCreateFolderV2=function(e){return this.request(\"files/create_folder_v2\",e,\"user\",\"api\",\"rpc\")},i.filesDelete=function(e){return this.request(\"files/delete\",e,\"user\",\"api\",\"rpc\")},i.filesDeleteBatch=function(e){return this.request(\"files/delete_batch\",e,\"user\",\"api\",\"rpc\")},i.filesDeleteBatchCheck=function(e){return this.request(\"files/delete_batch/check\",e,\"user\",\"api\",\"rpc\")},i.filesDeleteV2=function(e){return this.request(\"files/delete_v2\",e,\"user\",\"api\",\"rpc\")},i.filesDownload=function(e){return this.request(\"files/download\",e,\"user\",\"content\",\"download\")},i.filesDownloadZip=function(e){return this.request(\"files/download_zip\",e,\"user\",\"content\",\"download\")},i.filesGetMetadata=function(e){return this.request(\"files/get_metadata\",e,\"user\",\"api\",\"rpc\")},i.filesGetPreview=function(e){return this.request(\"files/get_preview\",e,\"user\",\"content\",\"download\")},i.filesGetTemporaryLink=function(e){return this.request(\"files/get_temporary_link\",e,\"user\",\"api\",\"rpc\")},i.filesGetThumbnail=function(e){return this.request(\"files/get_thumbnail\",e,\"user\",\"content\",\"download\")},i.filesGetThumbnailBatch=function(e){return this.request(\"files/get_thumbnail_batch\",e,\"user\",\"content\",\"rpc\")},i.filesListFolder=function(e){return this.request(\"files/list_folder\",e,\"user\",\"api\",\"rpc\")},i.filesListFolderContinue=function(e){return this.request(\"files/list_folder/continue\",e,\"user\",\"api\",\"rpc\")},i.filesListFolderGetLatestCursor=function(e){return this.request(\"files/list_folder/get_latest_cursor\",e,\"user\",\"api\",\"rpc\")},i.filesListFolderLongpoll=function(e){return this.request(\"files/list_folder/longpoll\",e,\"noauth\",\"notify\",\"rpc\")},i.filesListRevisions=function(e){return this.request(\"files/list_revisions\",e,\"user\",\"api\",\"rpc\")},i.filesMove=function(e){return this.request(\"files/move\",e,\"user\",\"api\",\"rpc\")},i.filesMoveBatch=function(e){return this.request(\"files/move_batch\",e,\"user\",\"api\",\"rpc\")},i.filesMoveBatchCheck=function(e){return this.request(\"files/move_batch/check\",e,\"user\",\"api\",\"rpc\")},i.filesMoveV2=function(e){return this.request(\"files/move_v2\",e,\"user\",\"api\",\"rpc\")},i.filesPermanentlyDelete=function(e){return this.request(\"files/permanently_delete\",e,\"user\",\"api\",\"rpc\")},i.filesPropertiesAdd=function(e){return this.request(\"files/properties/add\",e,\"user\",\"api\",\"rpc\")},i.filesPropertiesOverwrite=function(e){return this.request(\"files/properties/overwrite\",e,\"user\",\"api\",\"rpc\")},i.filesPropertiesRemove=function(e){return this.request(\"files/properties/remove\",e,\"user\",\"api\",\"rpc\")},i.filesPropertiesTemplateGet=function(e){return this.request(\"files/properties/template/get\",e,\"user\",\"api\",\"rpc\")},i.filesPropertiesTemplateList=function(e){return this.request(\"files/properties/template/list\",e,\"user\",\"api\",\"rpc\")},i.filesPropertiesUpdate=function(e){return this.request(\"files/properties/update\",e,\"user\",\"api\",\"rpc\")},i.filesRestore=function(e){return this.request(\"files/restore\",e,\"user\",\"api\",\"rpc\")},i.filesSaveUrl=function(e){return this.request(\"files/save_url\",e,\"user\",\"api\",\"rpc\")},i.filesSaveUrlCheckJobStatus=function(e){return this.request(\"files/save_url/check_job_status\",e,\"user\",\"api\",\"rpc\")},i.filesSearch=function(e){return this.request(\"files/search\",e,\"user\",\"api\",\"rpc\")},i.filesUpload=function(e){return this.request(\"files/upload\",e,\"user\",\"content\",\"upload\")},i.filesUploadSessionAppend=function(e){return this.request(\"files/upload_session/append\",e,\"user\",\"content\",\"upload\")},i.filesUploadSessionAppendV2=function(e){return this.request(\"files/upload_session/append_v2\",e,\"user\",\"content\",\"upload\")},i.filesUploadSessionFinish=function(e){return this.request(\"files/upload_session/finish\",e,\"user\",\"content\",\"upload\")},i.filesUploadSessionFinishBatch=function(e){return this.request(\"files/upload_session/finish_batch\",e,\"user\",\"api\",\"rpc\")},i.filesUploadSessionFinishBatchCheck=function(e){return this.request(\"files/upload_session/finish_batch/check\",e,\"user\",\"api\",\"rpc\")},i.filesUploadSessionStart=function(e){return this.request(\"files/upload_session/start\",e,\"user\",\"content\",\"upload\")},i.paperDocsArchive=function(e){return this.request(\"paper/docs/archive\",e,\"user\",\"api\",\"rpc\")},i.paperDocsCreate=function(e){return this.request(\"paper/docs/create\",e,\"user\",\"api\",\"upload\")},i.paperDocsDownload=function(e){return this.request(\"paper/docs/download\",e,\"user\",\"api\",\"download\")},i.paperDocsFolderUsersList=function(e){return this.request(\"paper/docs/folder_users/list\",e,\"user\",\"api\",\"rpc\")},i.paperDocsFolderUsersListContinue=function(e){return this.request(\"paper/docs/folder_users/list/continue\",e,\"user\",\"api\",\"rpc\")},i.paperDocsGetFolderInfo=function(e){return this.request(\"paper/docs/get_folder_info\",e,\"user\",\"api\",\"rpc\")},i.paperDocsList=function(e){return this.request(\"paper/docs/list\",e,\"user\",\"api\",\"rpc\")},i.paperDocsListContinue=function(e){return this.request(\"paper/docs/list/continue\",e,\"user\",\"api\",\"rpc\")},i.paperDocsPermanentlyDelete=function(e){return this.request(\"paper/docs/permanently_delete\",e,\"user\",\"api\",\"rpc\")},i.paperDocsSharingPolicyGet=function(e){return this.request(\"paper/docs/sharing_policy/get\",e,\"user\",\"api\",\"rpc\")},i.paperDocsSharingPolicySet=function(e){return this.request(\"paper/docs/sharing_policy/set\",e,\"user\",\"api\",\"rpc\")},i.paperDocsUpdate=function(e){return this.request(\"paper/docs/update\",e,\"user\",\"api\",\"upload\")},i.paperDocsUsersAdd=function(e){return this.request(\"paper/docs/users/add\",e,\"user\",\"api\",\"rpc\")},i.paperDocsUsersList=function(e){return this.request(\"paper/docs/users/list\",e,\"user\",\"api\",\"rpc\")},i.paperDocsUsersListContinue=function(e){return this.request(\"paper/docs/users/list/continue\",e,\"user\",\"api\",\"rpc\")},i.paperDocsUsersRemove=function(e){return this.request(\"paper/docs/users/remove\",e,\"user\",\"api\",\"rpc\")},i.sharingAddFileMember=function(e){return this.request(\"sharing/add_file_member\",e,\"user\",\"api\",\"rpc\")},i.sharingAddFolderMember=function(e){return this.request(\"sharing/add_folder_member\",e,\"user\",\"api\",\"rpc\")},i.sharingChangeFileMemberAccess=function(e){return this.request(\"sharing/change_file_member_access\",e,\"user\",\"api\",\"rpc\")},i.sharingCheckJobStatus=function(e){return this.request(\"sharing/check_job_status\",e,\"user\",\"api\",\"rpc\")},i.sharingCheckRemoveMemberJobStatus=function(e){return this.request(\"sharing/check_remove_member_job_status\",e,\"user\",\"api\",\"rpc\")},i.sharingCheckShareJobStatus=function(e){return this.request(\"sharing/check_share_job_status\",e,\"user\",\"api\",\"rpc\")},i.sharingCreateSharedLink=function(e){return this.request(\"sharing/create_shared_link\",e,\"user\",\"api\",\"rpc\")},i.sharingCreateSharedLinkWithSettings=function(e){return this.request(\"sharing/create_shared_link_with_settings\",e,\"user\",\"api\",\"rpc\")},i.sharingGetFileMetadata=function(e){return this.request(\"sharing/get_file_metadata\",e,\"user\",\"api\",\"rpc\")},i.sharingGetFileMetadataBatch=function(e){return this.request(\"sharing/get_file_metadata/batch\",e,\"user\",\"api\",\"rpc\")},i.sharingGetFolderMetadata=function(e){return this.request(\"sharing/get_folder_metadata\",e,\"user\",\"api\",\"rpc\")},i.sharingGetSharedLinkFile=function(e){return this.request(\"sharing/get_shared_link_file\",e,\"user\",\"content\",\"download\")},i.sharingGetSharedLinkMetadata=function(e){return this.request(\"sharing/get_shared_link_metadata\",e,\"user\",\"api\",\"rpc\")},i.sharingGetSharedLinks=function(e){return this.request(\"sharing/get_shared_links\",e,\"user\",\"api\",\"rpc\")},i.sharingListFileMembers=function(e){return this.request(\"sharing/list_file_members\",e,\"user\",\"api\",\"rpc\")},i.sharingListFileMembersBatch=function(e){return this.request(\"sharing/list_file_members/batch\",e,\"user\",\"api\",\"rpc\")},i.sharingListFileMembersContinue=function(e){return this.request(\"sharing/list_file_members/continue\",e,\"user\",\"api\",\"rpc\")},i.sharingListFolderMembers=function(e){return this.request(\"sharing/list_folder_members\",e,\"user\",\"api\",\"rpc\")},i.sharingListFolderMembersContinue=function(e){return this.request(\"sharing/list_folder_members/continue\",e,\"user\",\"api\",\"rpc\")},i.sharingListFolders=function(e){return this.request(\"sharing/list_folders\",e,\"user\",\"api\",\"rpc\")},i.sharingListFoldersContinue=function(e){return this.request(\"sharing/list_folders/continue\",e,\"user\",\"api\",\"rpc\")},i.sharingListMountableFolders=function(e){return this.request(\"sharing/list_mountable_folders\",e,\"user\",\"api\",\"rpc\")},i.sharingListMountableFoldersContinue=function(e){return this.request(\"sharing/list_mountable_folders/continue\",e,\"user\",\"api\",\"rpc\")},i.sharingListReceivedFiles=function(e){return this.request(\"sharing/list_received_files\",e,\"user\",\"api\",\"rpc\")},i.sharingListReceivedFilesContinue=function(e){return this.request(\"sharing/list_received_files/continue\",e,\"user\",\"api\",\"rpc\")},i.sharingListSharedLinks=function(e){return this.request(\"sharing/list_shared_links\",e,\"user\",\"api\",\"rpc\")},i.sharingModifySharedLinkSettings=function(e){return this.request(\"sharing/modify_shared_link_settings\",e,\"user\",\"api\",\"rpc\")},i.sharingMountFolder=function(e){return this.request(\"sharing/mount_folder\",e,\"user\",\"api\",\"rpc\")},i.sharingRelinquishFileMembership=function(e){return this.request(\"sharing/relinquish_file_membership\",e,\"user\",\"api\",\"rpc\")},i.sharingRelinquishFolderMembership=function(e){return this.request(\"sharing/relinquish_folder_membership\",e,\"user\",\"api\",\"rpc\")},i.sharingRemoveFileMember=function(e){return this.request(\"sharing/remove_file_member\",e,\"user\",\"api\",\"rpc\")},i.sharingRemoveFileMember2=function(e){return this.request(\"sharing/remove_file_member_2\",e,\"user\",\"api\",\"rpc\")},i.sharingRemoveFolderMember=function(e){return this.request(\"sharing/remove_folder_member\",e,\"user\",\"api\",\"rpc\")},i.sharingRevokeSharedLink=function(e){return this.request(\"sharing/revoke_shared_link\",e,\"user\",\"api\",\"rpc\")},i.sharingSetAccessInheritance=function(e){return this.request(\"sharing/set_access_inheritance\",e,\"user\",\"api\",\"rpc\")},i.sharingShareFolder=function(e){return this.request(\"sharing/share_folder\",e,\"user\",\"api\",\"rpc\")},i.sharingTransferFolder=function(e){return this.request(\"sharing/transfer_folder\",e,\"user\",\"api\",\"rpc\")},i.sharingUnmountFolder=function(e){return this.request(\"sharing/unmount_folder\",e,\"user\",\"api\",\"rpc\")},i.sharingUnshareFile=function(e){return this.request(\"sharing/unshare_file\",e,\"user\",\"api\",\"rpc\")},i.sharingUnshareFolder=function(e){return this.request(\"sharing/unshare_folder\",e,\"user\",\"api\",\"rpc\")},i.sharingUpdateFileMember=function(e){return this.request(\"sharing/update_file_member\",e,\"user\",\"api\",\"rpc\")},i.sharingUpdateFolderMember=function(e){return this.request(\"sharing/update_folder_member\",e,\"user\",\"api\",\"rpc\")},i.sharingUpdateFolderPolicy=function(e){return this.request(\"sharing/update_folder_policy\",e,\"user\",\"api\",\"rpc\")},i.teamLogGetEvents=function(e){return this.request(\"team_log/get_events\",e,\"team\",\"api\",\"rpc\")},i.teamLogGetEventsContinue=function(e){return this.request(\"team_log/get_events/continue\",e,\"team\",\"api\",\"rpc\")},i.usersGetAccount=function(e){return this.request(\"users/get_account\",e,\"user\",\"api\",\"rpc\")},i.usersGetAccountBatch=function(e){return this.request(\"users/get_account_batch\",e,\"user\",\"api\",\"rpc\")},i.usersGetCurrentAccount=function(e){return this.request(\"users/get_current_account\",e,\"user\",\"api\",\"rpc\")},i.usersGetSpaceUsage=function(e){return this.request(\"users/get_space_usage\",e,\"user\",\"api\",\"rpc\")};for(var s=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")},o=function(){function e(e,t){for(var r=0;t.length>r;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}(),u=function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)},a=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t},c=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var r=[],n=!0,i=!1,s=void 0;try{for(var o,u=e[Symbol.iterator]();!(n=(o=u.next()).done)&&(r.push(o.value),!t||r.length!==t);n=!0);}catch(e){i=!0,s=e}finally{try{!n&&u.return&&u.return()}finally{if(i)throw s}}return r}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),p=function(e){return 3*e.length/4-n(e)},f=function(e){var t,r,i,s,o,u=e.length;s=n(e),o=new d(3*u/4-s),r=s>0?u-4:u;var a=0;for(t=0;r>t;t+=4)i=m[e.charCodeAt(t)]<<18|m[e.charCodeAt(t+1)]<<12|m[e.charCodeAt(t+2)]<<6|m[e.charCodeAt(t+3)],o[a++]=i>>16&255,o[a++]=i>>8&255,o[a++]=255&i;return 2===s?(i=m[e.charCodeAt(t)]<<2|m[e.charCodeAt(t+1)]>>4,o[a++]=255&i):1===s&&(i=m[e.charCodeAt(t)]<<10|m[e.charCodeAt(t+1)]<<4|m[e.charCodeAt(t+2)]>>2,o[a++]=i>>8&255,o[a++]=255&i),o},h=function(e){for(var t,r=e.length,n=r%3,i=\"\",s=[],o=0,u=r-n;u>o;o+=16383)s.push(function(e,t,r){for(var n=[],i=t;r>i;i+=3)n.push(function(e){return l[e>>18&63]+l[e>>12&63]+l[e>>6&63]+l[63&e]}((e[i]<<16)+(e[i+1]<<8)+e[i+2]));return n.join(\"\")}(e,o,o+16383>u?u:o+16383));return 1===n?(i+=l[(t=e[r-1])>>2],i+=l[t<<4&63],i+=\"==\"):2===n&&(i+=l[(t=(e[r-2]<<8)+e[r-1])>>10],i+=l[t>>4&63],i+=l[t<<2&63],i+=\"=\"),s.push(i),s.join(\"\")},l=[],m=[],d=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,g=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",_=0;64>_;++_)l[_]=g[_],m[g.charCodeAt(_)]=_;m[45]=62,m[95]=63;var v={byteLength:p,toByteArray:f,fromByteArray:h},b={read:function(e,t,r,n,i){var s,o,u=8*i-n-1,a=(1<<u)-1,c=a>>1,p=-7,f=r?i-1:0,h=r?-1:1,l=e[t+f];for(f+=h,s=l&(1<<-p)-1,l>>=-p,p+=u;p>0;s=256*s+e[t+f],f+=h,p-=8);for(o=s&(1<<-p)-1,s>>=-p,p+=n;p>0;o=256*o+e[t+f],f+=h,p-=8);if(0===s)s=1-c;else{if(s===a)return o?NaN:1/0*(l?-1:1);o+=Math.pow(2,n),s-=c}return(l?-1:1)*o*Math.pow(2,s-n)},write:function(e,t,r,n,i,s){var o,u,a,c=8*s-i-1,p=(1<<c)-1,f=p>>1,h=23===i?5.960464477539062e-8:0,l=n?0:s-1,m=n?1:-1,d=0>t||0===t&&0>1/t?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(u=isNaN(t)?1:0,o=p):(o=Math.floor(Math.log(t)/Math.LN2),1>t*(a=Math.pow(2,-o))&&(o--,a*=2),2>(t+=1>o+f?h*Math.pow(2,1-f):h/a)*a||(o++,a/=2),p>o+f?1>o+f?(u=t*Math.pow(2,f-1)*Math.pow(2,i),o=0):(u=(t*a-1)*Math.pow(2,i),o+=f):(u=0,o=p));i>=8;e[r+l]=255&u,l+=m,u/=256,i-=8);for(o=o<<i|u,c+=i;c>0;e[r+l]=255&o,l+=m,o/=256,c-=8);e[r+l-m]|=128*d}},y=function(e,t){return t={exports:{}},e(t,t.exports),t.exports}(function(e,t){function r(e){if(e>U)throw new RangeError(\"Invalid typed array length\");var t=new Uint8Array(e);return t.__proto__=n.prototype,t}function n(e,t,r){if(\"number\"==typeof e){if(\"string\"==typeof t)throw Error(\"If encoding is specified then the first argument must be a string\");return o(e)}return i(e,t,r)}function i(e,t,i){if(\"number\"==typeof e)throw new TypeError('\"value\" argument must not be a number');return S(e)?function(e,t,r){if(0>t||t>e.byteLength)throw new RangeError(\"'offset' is out of bounds\");if(t+(r||0)>e.byteLength)throw new RangeError(\"'length' is out of bounds\");var i;i=void 0===t&&void 0===r?new Uint8Array(e):void 0===r?new Uint8Array(e,t):new Uint8Array(e,t,r);return i.__proto__=n.prototype,i}(e,t,i):\"string\"==typeof e?function(e,t){\"string\"==typeof t&&\"\"!==t||(t=\"utf8\");if(!n.isEncoding(t))throw new TypeError('\"encoding\" must be a valid string encoding');var i=0|c(e,t),s=r(i),o=s.write(e,t);o!==i&&(s=s.slice(0,o));return s}(e,t):function(e){if(n.isBuffer(e)){var t=0|a(e.length),i=r(t);return 0===i.length?i:(e.copy(i,0,0,t),i)}if(e){if(L(e)||\"length\"in e)return\"number\"!=typeof e.length||E(e.length)?r(0):u(e);if(\"Buffer\"===e.type&&Array.isArray(e.data))return u(e.data)}throw new TypeError(\"First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.\")}(e)}function s(e){if(\"number\"!=typeof e)throw new TypeError('\"size\" argument must be a number');if(0>e)throw new RangeError('\"size\" argument must not be negative')}function o(e){return s(e),r(0>e?0:0|a(e))}function u(e){for(var t=0>e.length?0:0|a(e.length),n=r(t),i=0;t>i;i+=1)n[i]=255&e[i];return n}function a(e){if(e>=U)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+U.toString(16)+\" bytes\");return 0|e}function c(e,t){if(n.isBuffer(e))return e.length;if(L(e)||S(e))return e.byteLength;\"string\"!=typeof e&&(e=\"\"+e);var r=e.length;if(0===r)return 0;for(var i=!1;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":case void 0:return w(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r>>>1;case\"base64\":return k(e).length;default:if(i)return w(e).length;t=(\"\"+t).toLowerCase(),i=!0}}function p(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function f(e,t,r,i,s){if(0===e.length)return-1;if(\"string\"==typeof r?(i=r,r=0):r>2147483647?r=2147483647:-2147483648>r&&(r=-2147483648),r=+r,E(r)&&(r=s?0:e.length-1),0>r&&(r=e.length+r),e.length>r){if(0>r){if(!s)return-1;r=0}}else{if(s)return-1;r=e.length-1}if(\"string\"==typeof t&&(t=n.from(t,i)),n.isBuffer(t))return 0===t.length?-1:h(e,t,r,i,s);if(\"number\"==typeof t)return t&=255,\"function\"==typeof Uint8Array.prototype.indexOf?s?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):h(e,[t],r,i,s);throw new TypeError(\"val must be string, number or Buffer\")}function h(e,t,r,n,i){function s(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}var o=1,u=e.length,a=t.length;if(void 0!==n&&(\"ucs2\"===(n=(n+\"\").toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(2>e.length||2>t.length)return-1;o=2,u/=2,a/=2,r/=2}var c;if(i){var p=-1;for(c=r;u>c;c++)if(s(e,c)===s(t,-1===p?0:c-p)){if(-1===p&&(p=c),c-p+1===a)return p*o}else-1!==p&&(c-=c-p),p=-1}else for(r+a>u&&(r=u-a),c=r;c>=0;c--){for(var f=!0,h=0;a>h;h++)if(s(e,c+h)!==s(t,h)){f=!1;break}if(f)return c}return-1}function l(e,t,r,n){return A(function(e){for(var t=[],r=0;e.length>r;++r)t.push(255&e.charCodeAt(r));return t}(t),e,r,n)}function m(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;r>i;){var s=e[i],o=null,u=s>239?4:s>223?3:s>191?2:1;if(r>=i+u){var a,c,p,f;switch(u){case 1:128>s&&(o=s);break;case 2:128==(192&(a=e[i+1]))&&(f=(31&s)<<6|63&a)>127&&(o=f);break;case 3:c=e[i+2],128==(192&(a=e[i+1]))&&128==(192&c)&&(f=(15&s)<<12|(63&a)<<6|63&c)>2047&&(55296>f||f>57343)&&(o=f);break;case 4:c=e[i+2],p=e[i+3],128==(192&(a=e[i+1]))&&128==(192&c)&&128==(192&p)&&(f=(15&s)<<18|(63&a)<<12|(63&c)<<6|63&p)>65535&&1114112>f&&(o=f)}}null===o?(o=65533,u=1):o>65535&&(n.push((o-=65536)>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=u}return function(e){var t=e.length;if(C>=t)return String.fromCharCode.apply(String,e);var r=\"\",n=0;for(;t>n;)r+=String.fromCharCode.apply(String,e.slice(n,n+=C));return r}(n)}function d(e,t,r){if(e%1!=0||0>e)throw new RangeError(\"offset is not uint\");if(e+t>r)throw new RangeError(\"Trying to access beyond buffer length\")}function g(e,t,r,i,s,o){if(!n.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>s||o>t)throw new RangeError('\"value\" argument is out of bounds');if(r+i>e.length)throw new RangeError(\"Index out of range\")}function _(e,t,r,n,i,s){if(r+n>e.length)throw new RangeError(\"Index out of range\");if(0>r)throw new RangeError(\"Index out of range\")}function y(e,t,r,n,i){return t=+t,r>>>=0,i||_(e,0,r,4),b.write(e,t,r,n,23,4),r+4}function q(e,t,r,n,i){return t=+t,r>>>=0,i||_(e,0,r,8),b.write(e,t,r,n,52,8),r+8}function w(e,t){t=t||1/0;for(var r,n=e.length,i=null,s=[],o=0;n>o;++o){if((r=e.charCodeAt(o))>55295&&57344>r){if(!i){if(r>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&s.push(239,191,189);continue}i=r;continue}if(56320>r){(t-=3)>-1&&s.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&s.push(239,191,189);if(i=null,128>r){if(0>(t-=1))break;s.push(r)}else if(2048>r){if(0>(t-=2))break;s.push(r>>6|192,63&r|128)}else if(65536>r){if(0>(t-=3))break;s.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(r>=1114112)throw Error(\"Invalid code point\");if(0>(t-=4))break;s.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return s}function k(e){return v.toByteArray(function(e){if(2>(e=e.trim().replace(T,\"\")).length)return\"\";for(;e.length%4!=0;)e+=\"=\";return e}(e))}function A(e,t,r,n){for(var i=0;n>i&&(i+r<t.length&&i<e.length);++i)t[i+r]=e[i];return i}function S(e){return e instanceof ArrayBuffer||null!=e&&null!=e.constructor&&\"ArrayBuffer\"===e.constructor.name&&\"number\"==typeof e.byteLength}function L(e){return\"function\"==typeof ArrayBuffer.isView&&ArrayBuffer.isView(e)}function E(e){return e!=e}t.Buffer=n,t.SlowBuffer=function(e){return+e!=e&&(e=0),n.alloc(+e)},t.INSPECT_MAX_BYTES=50;var U=2147483647;t.kMaxLength=U,(n.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()}catch(e){return!1}}())||void 0===console||\"function\"!=typeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),\"undefined\"!=typeof Symbol&&Symbol.species&&n[Symbol.species]===n&&Object.defineProperty(n,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),n.poolSize=8192,n.from=function(e,t,r){return i(e,t,r)},n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array,n.alloc=function(e,t,n){return function(e,t,n){return s(e),e>0&&void 0!==t?\"string\"==typeof n?r(e).fill(t,n):r(e).fill(t):r(e)}(e,t,n)},n.allocUnsafe=function(e){return o(e)},n.allocUnsafeSlow=function(e){return o(e)},n.isBuffer=function(e){return null!=e&&!0===e._isBuffer},n.compare=function(e,t){if(!n.isBuffer(e)||!n.isBuffer(t))throw new TypeError(\"Arguments must be Buffers\");if(e===t)return 0;for(var r=e.length,i=t.length,s=0,o=Math.min(r,i);o>s;++s)if(e[s]!==t[s]){r=e[s],i=t[s];break}return i>r?-1:r>i?1:0},n.isEncoding=function(e){switch((e+\"\").toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},n.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===e.length)return n.alloc(0);var r;if(void 0===t)for(t=0,r=0;e.length>r;++r)t+=e[r].length;var i=n.allocUnsafe(t),s=0;for(r=0;e.length>r;++r){var o=e[r];if(!n.isBuffer(o))throw new TypeError('\"list\" argument must be an Array of Buffers');o.copy(i,s),s+=o.length}return i},n.byteLength=c,n.prototype._isBuffer=!0,n.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(var t=0;e>t;t+=2)p(this,t,t+1);return this},n.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(var t=0;e>t;t+=4)p(this,t,t+3),p(this,t+1,t+2);return this},n.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(var t=0;e>t;t+=8)p(this,t,t+7),p(this,t+1,t+6),p(this,t+2,t+5),p(this,t+3,t+4);return this},n.prototype.toString=function(){var e=this.length;return 0===e?\"\":0===arguments.length?m(this,0,e):function(e,t,r){var n=!1;if((void 0===t||0>t)&&(t=0),t>this.length)return\"\";if((void 0===r||r>this.length)&&(r=this.length),0>=r)return\"\";if(r>>>=0,(t>>>=0)>=r)return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return function(e,t,r){var n=e.length;t&&t>=0||(t=0),(!r||0>r||r>n)&&(r=n);for(var i=\"\",s=t;r>s;++s)i+=function(e){return 16>e?\"0\"+e.toString(16):e.toString(16)}(e[s]);return i}(this,t,r);case\"utf8\":case\"utf-8\":return m(this,t,r);case\"ascii\":return function(e,t,r){var n=\"\";r=Math.min(e.length,r);for(var i=t;r>i;++i)n+=String.fromCharCode(127&e[i]);return n}(this,t,r);case\"latin1\":case\"binary\":return function(e,t,r){var n=\"\";r=Math.min(e.length,r);for(var i=t;r>i;++i)n+=String.fromCharCode(e[i]);return n}(this,t,r);case\"base64\":return function(e,t,r){return v.fromByteArray(0===t&&r===e.length?e:e.slice(t,r))}(this,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return function(e,t,r){for(var n=e.slice(t,r),i=\"\",s=0;n.length>s;s+=2)i+=String.fromCharCode(n[s]+256*n[s+1]);return i}(this,t,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}.apply(this,arguments)},n.prototype.equals=function(e){if(!n.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e||0===n.compare(this,e)},n.prototype.inspect=function(){var e=\"\",r=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString(\"hex\",0,r).match(/.{2}/g).join(\" \"),this.length>r&&(e+=\" ... \")),\"<Buffer \"+e+\">\"},n.prototype.compare=function(e,t,r,i,s){if(!n.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===i&&(i=0),void 0===s&&(s=this.length),0>t||r>e.length||0>i||s>this.length)throw new RangeError(\"out of range index\");if(i>=s&&t>=r)return 0;if(i>=s)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,i>>>=0,s>>>=0,this===e)return 0;for(var o=s-i,u=r-t,a=Math.min(o,u),c=this.slice(i,s),p=e.slice(t,r),f=0;a>f;++f)if(c[f]!==p[f]){o=c[f],u=p[f];break}return u>o?-1:o>u?1:0},n.prototype.includes=function(e,t,r){return-1!==this.indexOf(e,t,r)},n.prototype.indexOf=function(e,t,r){return f(this,e,t,r,!0)},n.prototype.lastIndexOf=function(e,t,r){return f(this,e,t,r,!1)},n.prototype.write=function(e,t,r,n){if(void 0===t)n=\"utf8\",r=this.length,t=0;else if(void 0===r&&\"string\"==typeof t)n=t,r=this.length,t=0;else{if(!isFinite(t))throw Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");t>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n=\"utf8\")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(0>r||0>t)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");for(var s=!1;;)switch(n){case\"hex\":return function(e,t,r,n){var i=e.length-(r=+r||0);n?(n=+n)>i&&(n=i):n=i;var s=t.length;if(s%2!=0)throw new TypeError(\"Invalid hex string\");n>s/2&&(n=s/2);for(var o=0;n>o;++o){var u=parseInt(t.substr(2*o,2),16);if(E(u))return o;e[r+o]=u}return o}(this,e,t,r);case\"utf8\":case\"utf-8\":return function(e,t,r,n){return A(w(t,e.length-r),e,r,n)}(this,e,t,r);case\"ascii\":return l(this,e,t,r);case\"latin1\":case\"binary\":return function(e,t,r,n){return l(e,t,r,n)}(this,e,t,r);case\"base64\":return function(e,t,r,n){return A(k(t),e,r,n)}(this,e,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return function(e,t,r,n){return A(function(e,t){for(var r,n,i=[],s=0;e.length>s&&(t-=2)>=0;++s)r=e.charCodeAt(s),n=r>>8,i.push(r%256),i.push(n);return i}(t,e.length-r),e,r,n)}(this,e,t,r);default:if(s)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),s=!0}},n.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};var C=4096;n.prototype.slice=function(e,t){var r=this.length;e=~~e,t=void 0===t?r:~~t,0>e?0>(e+=r)&&(e=0):e>r&&(e=r),0>t?0>(t+=r)&&(t=0):t>r&&(t=r),e>t&&(t=e);var i=this.subarray(e,t);return i.__proto__=n.prototype,i},n.prototype.readUIntLE=function(e,t,r){e>>>=0,t>>>=0,r||d(e,t,this.length);for(var n=this[e],i=1,s=0;++s<t&&(i*=256);)n+=this[e+s]*i;return n},n.prototype.readUIntBE=function(e,t,r){e>>>=0,t>>>=0,r||d(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},n.prototype.readUInt8=function(e,t){return e>>>=0,t||d(e,1,this.length),this[e]},n.prototype.readUInt16LE=function(e,t){return e>>>=0,t||d(e,2,this.length),this[e]|this[e+1]<<8},n.prototype.readUInt16BE=function(e,t){return e>>>=0,t||d(e,2,this.length),this[e]<<8|this[e+1]},n.prototype.readUInt32LE=function(e,t){return e>>>=0,t||d(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},n.prototype.readUInt32BE=function(e,t){return e>>>=0,t||d(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},n.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||d(e,t,this.length);for(var n=this[e],i=1,s=0;++s<t&&(i*=256);)n+=this[e+s]*i;return(i*=128)>n||(n-=Math.pow(2,8*t)),n},n.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||d(e,t,this.length);for(var n=t,i=1,s=this[e+--n];n>0&&(i*=256);)s+=this[e+--n]*i;return(i*=128)>s||(s-=Math.pow(2,8*t)),s},n.prototype.readInt8=function(e,t){return e>>>=0,t||d(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},n.prototype.readInt16LE=function(e,t){e>>>=0,t||d(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},n.prototype.readInt16BE=function(e,t){e>>>=0,t||d(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},n.prototype.readInt32LE=function(e,t){return e>>>=0,t||d(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},n.prototype.readInt32BE=function(e,t){return e>>>=0,t||d(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},n.prototype.readFloatLE=function(e,t){return e>>>=0,t||d(e,4,this.length),b.read(this,e,!0,23,4)},n.prototype.readFloatBE=function(e,t){return e>>>=0,t||d(e,4,this.length),b.read(this,e,!1,23,4)},n.prototype.readDoubleLE=function(e,t){return e>>>=0,t||d(e,8,this.length),b.read(this,e,!0,52,8)},n.prototype.readDoubleBE=function(e,t){return e>>>=0,t||d(e,8,this.length),b.read(this,e,!1,52,8)},n.prototype.writeUIntLE=function(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){g(this,e,t,r,Math.pow(2,8*r)-1,0)}var i=1,s=0;for(this[t]=255&e;++s<r&&(i*=256);)this[t+s]=e/i&255;return t+r},n.prototype.writeUIntBE=function(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){g(this,e,t,r,Math.pow(2,8*r)-1,0)}var i=r-1,s=1;for(this[t+i]=255&e;--i>=0&&(s*=256);)this[t+i]=e/s&255;return t+r},n.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,1,255,0),this[t]=255&e,t+1},n.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},n.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},n.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},n.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},n.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);g(this,e,t,r,i-1,-i)}var s=0,o=1,u=0;for(this[t]=255&e;++s<r&&(o*=256);)0>e&&0===u&&0!==this[t+s-1]&&(u=1),this[t+s]=(e/o>>0)-u&255;return t+r},n.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);g(this,e,t,r,i-1,-i)}var s=r-1,o=1,u=0;for(this[t+s]=255&e;--s>=0&&(o*=256);)0>e&&0===u&&0!==this[t+s+1]&&(u=1),this[t+s]=(e/o>>0)-u&255;return t+r},n.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,1,127,-128),0>e&&(e=255+e+1),this[t]=255&e,t+1},n.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},n.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},n.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},n.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},n.prototype.writeFloatLE=function(e,t,r){return y(this,e,t,!0,r)},n.prototype.writeFloatBE=function(e,t,r){return y(this,e,t,!1,r)},n.prototype.writeDoubleLE=function(e,t,r){return q(this,e,t,!0,r)},n.prototype.writeDoubleBE=function(e,t,r){return q(this,e,t,!1,r)},n.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),e.length>t||(t=e.length),t||(t=0),n>0&&r>n&&(n=r),n===r)return 0;if(0===e.length||0===this.length)return 0;if(0>t)throw new RangeError(\"targetStart out of bounds\");if(0>r||r>=this.length)throw new RangeError(\"sourceStart out of bounds\");if(0>n)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),n-r>e.length-t&&(n=e.length-t+r);var i,s=n-r;if(this===e&&t>r&&n>t)for(i=s-1;i>=0;--i)e[i+t]=this[i+r];else if(1e3>s)for(i=0;s>i;++i)e[i+t]=this[i+r];else Uint8Array.prototype.set.call(e,this.subarray(r,r+s),t);return s},n.prototype.fill=function(e,t,r,i){if(\"string\"==typeof e){if(\"string\"==typeof t?(i=t,t=0,r=this.length):\"string\"==typeof r&&(i=r,r=this.length),1===e.length){var s=e.charCodeAt(0);256>s&&(e=s)}if(void 0!==i&&\"string\"!=typeof i)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof i&&!n.isEncoding(i))throw new TypeError(\"Unknown encoding: \"+i)}else\"number\"==typeof e&&(e&=255);if(0>t||t>this.length||r>this.length)throw new RangeError(\"Out of range index\");if(t>=r)return this;t>>>=0,r=void 0===r?this.length:r>>>0,e||(e=0);var o;if(\"number\"==typeof e)for(o=t;r>o;++o)this[o]=e;else{var u=n.isBuffer(e)?e:new n(e,i),a=u.length;for(o=0;r-t>o;++o)this[o+t]=u[o%a]}return this};var T=/[^+/0-9A-Za-z-_]/g}).Buffer;\"function\"!=typeof Object.assign&&(Object.assign=function(e){var t,r,n,i;if(void 0===e||null===e)throw new TypeError(\"Cannot convert undefined or null to object\");for(t=Object(e),r=1;arguments.length>r;r++)if(void 0!==(n=arguments[r])&&null!==n)for(i in n)n.hasOwnProperty(i)&&(t[i]=n[i]);return t}),Array.prototype.includes||Object.defineProperty(Array.prototype,\"includes\",{value:function(e,t){if(null==this)throw new TypeError('\"this\" is null or not defined');var r=Object(this),n=r.length>>>0;if(0===n)return!1;for(var i=0|t,s=Math.max(0>i?n-Math.abs(i):i,0);n>s;){if(function(e,t){return e===t||\"number\"==typeof e&&\"number\"==typeof t&&isNaN(e)&&isNaN(t)}(r[s],e))return!0;s++}return!1}});var q=function(){function n(e){s(this,n),this.accessToken=(e=e||{}).accessToken,this.clientId=e.clientId,this.clientSecret=e.clientSecret,this.selectUser=e.selectUser,this.selectAdmin=e.selectAdmin}return o(n,[{key:\"setAccessToken\",value:function(e){this.accessToken=e}},{key:\"getAccessToken\",value:function(){return this.accessToken}},{key:\"setClientId\",value:function(e){this.clientId=e}},{key:\"getClientId\",value:function(){return this.clientId}},{key:\"setClientSecret\",value:function(e){this.clientSecret=e}},{key:\"getClientSecret\",value:function(){return this.clientSecret}},{key:\"getAuthenticationUrl\",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"token\",n=this.getClientId(),i=\"https://www.dropbox.com/oauth2/authorize\";if(!n)throw Error(\"A client id is required. You can set the client id using .setClientId().\");if(\"code\"!==r&&!e)throw Error(\"A redirect uri is required.\");if(![\"code\",\"token\"].includes(r))throw Error(\"Authorization type must be code or token\");var s=void 0;return s=\"code\"===r?i+\"?response_type=code&client_id=\"+n:i+\"?response_type=token&client_id=\"+n,e&&(s+=\"&redirect_uri=\"+e),t&&(s+=\"&state=\"+t),s}},{key:\"getAccessTokenFromCode\",value:function(e,t){var r=this.getClientId(),n=this.getClientSecret();if(!r)throw Error(\"A client id is required. You can set the client id using .setClientId().\");if(!n)throw Error(\"A client secret is required. You can set the client id using .setClientSecret().\");var i=\"https://api.dropboxapi.com/oauth2/token?code=\"+t+\"&grant_type=authorization_code&redirect_uri=\"+e+\"&client_id=\"+r+\"&client_secret=\"+n;return fetch(i,{method:\"POST\",headers:{\"Content-Type\":\"application/x-www-form-urlencoded\"}}).then(function(e){return function(e){var t=e.clone();return new Promise(function(r){e.json().then(function(e){return r(e)}).catch(function(){return t.text().then(function(e){return r(e)})})}).then(function(t){return[e,t]})}(e)}).then(function(e){var t=c(e,2),r=t[0],n=t[1];if(!r.ok)throw{error:n,response:r,status:r.status};return n.access_token})}},{key:\"authenticateWithCordova\",value:function(e,t){function r(){window.setTimeout(function(){u.close()},10),t()}function n(r){if(r.url.indexOf(\"&error=\")>-1)window.setTimeout(function(){u.close()},10),t();else{var n=r.url.indexOf(\"#access_token=\"),i=r.url.indexOf(\"&token_type=\");if(n>-1){n+=14,window.setTimeout(function(){u.close()},10);var s=r.url.substring(n,i);e(s)}}}function i(){o||(u.removeEventListener(\"loaderror\",r),u.removeEventListener(\"loadstop\",n),u.removeEventListener(\"exit\",i),o=!0)}var s=this.getAuthenticationUrl(\"https://www.dropbox.com/1/oauth2/redirect_receiver\"),o=!1,u=window.open(s,\"_blank\");u.addEventListener(\"loaderror\",r),u.addEventListener(\"loadstop\",n),u.addEventListener(\"exit\",i)}},{key:\"request\",value:function(e,t,r,n,i){var s=null;switch(i){case\"rpc\":s=this.getRpcRequest();break;case\"download\":s=this.getDownloadRequest();break;case\"upload\":s=this.getUploadRequest();break;default:throw Error(\"Invalid request style: \"+i)}var o={selectUser:this.selectUser,selectAdmin:this.selectAdmin,clientId:this.getClientId(),clientSecret:this.getClientSecret()};return s(e,t,r,n,this.getAccessToken(),o)}},{key:\"setRpcRequest\",value:function(e){this.rpcRequest=e}},{key:\"getRpcRequest\",value:function(){return void 0===this.rpcRequest&&(this.rpcRequest=function(e,r,n,i,s,o){var u={method:\"POST\",body:r?JSON.stringify(r):null},a={};r&&(a[\"Content-Type\"]=\"application/json\");var p=\"\";switch(n){case\"app\":if(!o.clientId||!o.clientSecret)throw Error(\"A client id and secret is required for this function\");p=new y(o.clientId+\":\"+o.clientSecret).toString(\"base64\"),a.Authorization=\"Basic \"+p;break;case\"team\":case\"user\":a.Authorization=\"Bearer \"+s;break;case\"noauth\":break;default:throw Error(\"Unhandled auth type: \"+n)}return o&&(o.selectUser&&(a[\"Dropbox-API-Select-User\"]=o.selectUser),o.selectAdmin&&(a[\"Dropbox-API-Select-Admin\"]=o.selectAdmin)),u.headers=a,fetch(t(i)+e,u).then(function(e){return function(e){return\"application/json\"===e.headers.get(\"Content-Type\")?e.json().then(function(t){return[e,t]}):e.text().then(function(t){return[e,t]})}(e)}).then(function(e){var t=c(e,2),r=t[0],n=t[1];if(!r.ok)throw{error:n,response:r,status:r.status};return n})}),this.rpcRequest}},{key:\"setDownloadRequest\",value:function(e){this.downloadRequest=e}},{key:\"getDownloadRequest\",value:function(){return void 0===this.downloadRequest&&(this.downloadRequest=function(n,i,s,o,u,a){if(\"user\"!==s)throw Error(\"Unexpected auth type: \"+s);var p={method:\"POST\",headers:{Authorization:\"Bearer \"+u,\"Dropbox-API-Arg\":r(i)}};return a&&(a.selectUser&&(p.headers[\"Dropbox-API-Select-User\"]=a.selectUser),a.selectAdmin&&(p.headers[\"Dropbox-API-Select-Admin\"]=a.selectAdmin)),fetch(t(o)+n,p).then(function(t){return function(t){return t.ok?e()?t.blob():t.buffer():t.text()}(t).then(function(e){return[t,e]})}).then(function(t){var r=c(t,2);return function(t,r){if(!t.ok)throw{error:r,response:t,status:t.status};var n=JSON.parse(t.headers.get(\"dropbox-api-result\"));return e()?n.fileBlob=r:n.fileBinary=r,n}(r[0],r[1])})}),this.downloadRequest}},{key:\"setUploadRequest\",value:function(e){this.uploadRequest=e}},{key:\"getUploadRequest\",value:function(){return void 0===this.uploadRequest&&(this.uploadRequest=function(e,n,i,s,o,u){if(\"user\"!==i)throw Error(\"Unexpected auth type: \"+i);var a=n.contents;delete n.contents;var p={body:a,method:\"POST\",headers:{Authorization:\"Bearer \"+o,\"Content-Type\":\"application/octet-stream\",\"Dropbox-API-Arg\":r(n)}};return u&&(u.selectUser&&(p.headers[\"Dropbox-API-Select-User\"]=u.selectUser),u.selectAdmin&&(p.headers[\"Dropbox-API-Select-Admin\"]=u.selectAdmin)),fetch(t(s)+e,p).then(function(e){return function(e){var t=e.clone();return new Promise(function(r){e.json().then(function(e){return r(e)}).catch(function(){return t.text().then(function(e){return r(e)})})}).then(function(t){return[e,t]})}(e)}).then(function(e){var t=c(e,2),r=t[0],n=t[1];if(!r.ok)throw{error:n,response:r,status:r.status};return n})}),this.uploadRequest}}]),n}(),w=function(e){function t(e){s(this,t);var r=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return Object.assign(r,i),r}return u(t,q),o(t,[{key:\"filesGetSharedLinkFile\",value:function(e){return this.request(\"sharing/get_shared_link_file\",e,\"api\",\"download\")}}]),t}(),k=Object.freeze({Dropbox:w}),A={};A.teamDevicesListMemberDevices=function(e){return this.request(\"team/devices/list_member_devices\",e,\"team\",\"api\",\"rpc\")},A.teamDevicesListMembersDevices=function(e){return this.request(\"team/devices/list_members_devices\",e,\"team\",\"api\",\"rpc\")},A.teamDevicesListTeamDevices=function(e){return this.request(\"team/devices/list_team_devices\",e,\"team\",\"api\",\"rpc\")},A.teamDevicesRevokeDeviceSession=function(e){return this.request(\"team/devices/revoke_device_session\",e,\"team\",\"api\",\"rpc\")},A.teamDevicesRevokeDeviceSessionBatch=function(e){return this.request(\"team/devices/revoke_device_session_batch\",e,\"team\",\"api\",\"rpc\")},A.teamFeaturesGetValues=function(e){return this.request(\"team/features/get_values\",e,\"team\",\"api\",\"rpc\")},A.teamGetInfo=function(e){return this.request(\"team/get_info\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsCreate=function(e){return this.request(\"team/groups/create\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsDelete=function(e){return this.request(\"team/groups/delete\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsGetInfo=function(e){return this.request(\"team/groups/get_info\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsJobStatusGet=function(e){return this.request(\"team/groups/job_status/get\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsList=function(e){return this.request(\"team/groups/list\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsListContinue=function(e){return this.request(\"team/groups/list/continue\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsMembersAdd=function(e){return this.request(\"team/groups/members/add\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsMembersList=function(e){return this.request(\"team/groups/members/list\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsMembersListContinue=function(e){return this.request(\"team/groups/members/list/continue\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsMembersRemove=function(e){return this.request(\"team/groups/members/remove\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsMembersSetAccessType=function(e){return this.request(\"team/groups/members/set_access_type\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsUpdate=function(e){return this.request(\"team/groups/update\",e,\"team\",\"api\",\"rpc\")},A.teamLinkedAppsListMemberLinkedApps=function(e){return this.request(\"team/linked_apps/list_member_linked_apps\",e,\"team\",\"api\",\"rpc\")},A.teamLinkedAppsListMembersLinkedApps=function(e){return this.request(\"team/linked_apps/list_members_linked_apps\",e,\"team\",\"api\",\"rpc\")},A.teamLinkedAppsListTeamLinkedApps=function(e){return this.request(\"team/linked_apps/list_team_linked_apps\",e,\"team\",\"api\",\"rpc\")},A.teamLinkedAppsRevokeLinkedApp=function(e){return this.request(\"team/linked_apps/revoke_linked_app\",e,\"team\",\"api\",\"rpc\")},A.teamLinkedAppsRevokeLinkedAppBatch=function(e){return this.request(\"team/linked_apps/revoke_linked_app_batch\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsExcludedUsersAdd=function(e){return this.request(\"team/member_space_limits/excluded_users/add\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsExcludedUsersList=function(e){return this.request(\"team/member_space_limits/excluded_users/list\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsExcludedUsersListContinue=function(e){return this.request(\"team/member_space_limits/excluded_users/list/continue\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsExcludedUsersRemove=function(e){return this.request(\"team/member_space_limits/excluded_users/remove\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsGetCustomQuota=function(e){return this.request(\"team/member_space_limits/get_custom_quota\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsRemoveCustomQuota=function(e){return this.request(\"team/member_space_limits/remove_custom_quota\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsSetCustomQuota=function(e){return this.request(\"team/member_space_limits/set_custom_quota\",e,\"team\",\"api\",\"rpc\")},A.teamMembersAdd=function(e){return this.request(\"team/members/add\",e,\"team\",\"api\",\"rpc\")},A.teamMembersAddJobStatusGet=function(e){return this.request(\"team/members/add/job_status/get\",e,\"team\",\"api\",\"rpc\")},A.teamMembersGetInfo=function(e){return this.request(\"team/members/get_info\",e,\"team\",\"api\",\"rpc\")},A.teamMembersList=function(e){return this.request(\"team/members/list\",e,\"team\",\"api\",\"rpc\")},A.teamMembersListContinue=function(e){return this.request(\"team/members/list/continue\",e,\"team\",\"api\",\"rpc\")},A.teamMembersRecover=function(e){return this.request(\"team/members/recover\",e,\"team\",\"api\",\"rpc\")},A.teamMembersRemove=function(e){return this.request(\"team/members/remove\",e,\"team\",\"api\",\"rpc\")},A.teamMembersRemoveJobStatusGet=function(e){return this.request(\"team/members/remove/job_status/get\",e,\"team\",\"api\",\"rpc\")},A.teamMembersSendWelcomeEmail=function(e){return this.request(\"team/members/send_welcome_email\",e,\"team\",\"api\",\"rpc\")},A.teamMembersSetAdminPermissions=function(e){return this.request(\"team/members/set_admin_permissions\",e,\"team\",\"api\",\"rpc\")},A.teamMembersSetProfile=function(e){return this.request(\"team/members/set_profile\",e,\"team\",\"api\",\"rpc\")},A.teamMembersSuspend=function(e){return this.request(\"team/members/suspend\",e,\"team\",\"api\",\"rpc\")},A.teamMembersUnsuspend=function(e){return this.request(\"team/members/unsuspend\",e,\"team\",\"api\",\"rpc\")},A.teamNamespacesList=function(e){return this.request(\"team/namespaces/list\",e,\"team\",\"api\",\"rpc\")},A.teamNamespacesListContinue=function(e){return this.request(\"team/namespaces/list/continue\",e,\"team\",\"api\",\"rpc\")},A.teamPropertiesTemplateAdd=function(e){return this.request(\"team/properties/template/add\",e,\"team\",\"api\",\"rpc\")},A.teamPropertiesTemplateGet=function(e){return this.request(\"team/properties/template/get\",e,\"team\",\"api\",\"rpc\")},A.teamPropertiesTemplateList=function(e){return this.request(\"team/properties/template/list\",e,\"team\",\"api\",\"rpc\")},A.teamPropertiesTemplateUpdate=function(e){return this.request(\"team/properties/template/update\",e,\"team\",\"api\",\"rpc\")},A.teamReportsGetActivity=function(e){return this.request(\"team/reports/get_activity\",e,\"team\",\"api\",\"rpc\")},A.teamReportsGetDevices=function(e){return this.request(\"team/reports/get_devices\",e,\"team\",\"api\",\"rpc\")},A.teamReportsGetMembership=function(e){return this.request(\"team/reports/get_membership\",e,\"team\",\"api\",\"rpc\")},A.teamReportsGetStorage=function(e){return this.request(\"team/reports/get_storage\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderActivate=function(e){return this.request(\"team/team_folder/activate\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderArchive=function(e){return this.request(\"team/team_folder/archive\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderArchiveCheck=function(e){return this.request(\"team/team_folder/archive/check\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderCreate=function(e){return this.request(\"team/team_folder/create\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderGetInfo=function(e){return this.request(\"team/team_folder/get_info\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderList=function(e){return this.request(\"team/team_folder/list\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderListContinue=function(e){return this.request(\"team/team_folder/list/continue\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderPermanentlyDelete=function(e){return this.request(\"team/team_folder/permanently_delete\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderRename=function(e){return this.request(\"team/team_folder/rename\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderUpdateSyncSettings=function(e){return this.request(\"team/team_folder/update_sync_settings\",e,\"team\",\"api\",\"rpc\")},A.teamTokenGetAuthenticatedAdmin=function(e){return this.request(\"team/token/get_authenticated_admin\",e,\"team\",\"api\",\"rpc\")};var S=function(e){function t(e){s(this,t);var r=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return Object.assign(r,A),r}return u(t,q),o(t,[{key:\"actAsUser\",value:function(e){return new w({accessToken:this.accessToken,clientId:this.clientId,selectUser:e})}}]),t}(),L=Object.freeze({DropboxTeam:S});return{Dropbox:k.Dropbox,DropboxTeam:L.DropboxTeam}});\n","module.exports = global[\"$\"] = require(\"-!/home/honegs/development/jitsi-poker/node_modules/expose-loader/index.js?jQuery!./jquery.min.js\");","//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar bg = moment.defineLocale('bg', {\n    months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n    monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n    weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n    weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n    weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'D.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY H:mm',\n        LLLL : 'dddd, D MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay : '[Днес в] LT',\n        nextDay : '[Утре в] LT',\n        nextWeek : 'dddd [в] LT',\n        lastDay : '[Вчера в] LT',\n        lastWeek : function () {\n            switch (this.day()) {\n                case 0:\n                case 3:\n                case 6:\n                    return '[В изминалата] dddd [в] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[В изминалия] dddd [в] LT';\n            }\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'след %s',\n        past : 'преди %s',\n        s : 'няколко секунди',\n        m : 'минута',\n        mm : '%d минути',\n        h : 'час',\n        hh : '%d часа',\n        d : 'ден',\n        dd : '%d дни',\n        M : 'месец',\n        MM : '%d месеца',\n        y : 'година',\n        yy : '%d години'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n    ordinal : function (number) {\n        var lastDigit = number % 10,\n            last2Digits = number % 100;\n        if (number === 0) {\n            return number + '-ев';\n        } else if (last2Digits === 0) {\n            return number + '-ен';\n        } else if (last2Digits > 10 && last2Digits < 20) {\n            return number + '-ти';\n        } else if (lastDigit === 1) {\n            return number + '-ви';\n        } else if (lastDigit === 2) {\n            return number + '-ри';\n        } else if (lastDigit === 7 || lastDigit === 8) {\n            return number + '-ми';\n        } else {\n            return number + '-ти';\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn bg;\n\n})));\n","//! moment.js locale configuration\n//! locale : German [de]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        'm': ['eine Minute', 'einer Minute'],\n        'h': ['eine Stunde', 'einer Stunde'],\n        'd': ['ein Tag', 'einem Tag'],\n        'dd': [number + ' Tage', number + ' Tagen'],\n        'M': ['ein Monat', 'einem Monat'],\n        'MM': [number + ' Monate', number + ' Monaten'],\n        'y': ['ein Jahr', 'einem Jahr'],\n        'yy': [number + ' Jahre', number + ' Jahren']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n}\n\nvar de = moment.defineLocale('de', {\n    months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n    weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n    weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT: 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY HH:mm',\n        LLLL : 'dddd, D. MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[heute um] LT [Uhr]',\n        sameElse: 'L',\n        nextDay: '[morgen um] LT [Uhr]',\n        nextWeek: 'dddd [um] LT [Uhr]',\n        lastDay: '[gestern um] LT [Uhr]',\n        lastWeek: '[letzten] dddd [um] LT [Uhr]'\n    },\n    relativeTime : {\n        future : 'in %s',\n        past : 'vor %s',\n        s : 'ein paar Sekunden',\n        m : processRelativeTime,\n        mm : '%d Minuten',\n        h : processRelativeTime,\n        hh : '%d Stunden',\n        d : processRelativeTime,\n        dd : processRelativeTime,\n        M : processRelativeTime,\n        MM : processRelativeTime,\n        y : processRelativeTime,\n        yy : processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn de;\n\n})));\n","//! moment.js locale configuration\n//! locale : Esperanto [eo]\n//! author : Colin Dean : https://github.com/colindean\n//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n//! comment : miestasmia corrected the translation by colindean\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar eo = moment.defineLocale('eo', {\n    months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n    weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n    weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n    weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY-MM-DD',\n        LL : 'D[-a de] MMMM, YYYY',\n        LLL : 'D[-a de] MMMM, YYYY HH:mm',\n        LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n    },\n    meridiemParse: /[ap]\\.t\\.m/i,\n    isPM: function (input) {\n        return input.charAt(0).toLowerCase() === 'p';\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'p.t.m.' : 'P.T.M.';\n        } else {\n            return isLower ? 'a.t.m.' : 'A.T.M.';\n        }\n    },\n    calendar : {\n        sameDay : '[Hodiaŭ je] LT',\n        nextDay : '[Morgaŭ je] LT',\n        nextWeek : 'dddd [je] LT',\n        lastDay : '[Hieraŭ je] LT',\n        lastWeek : '[pasinta] dddd [je] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'post %s',\n        past : 'antaŭ %s',\n        s : 'sekundoj',\n        m : 'minuto',\n        mm : '%d minutoj',\n        h : 'horo',\n        hh : '%d horoj',\n        d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n        dd : '%d tagoj',\n        M : 'monato',\n        MM : '%d monatoj',\n        y : 'jaro',\n        yy : '%d jaroj'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}a/,\n    ordinal : '%da',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn eo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');\nvar monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\nvar monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\nvar monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\nvar es = moment.defineLocale('es', {\n    months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n    monthsShort : function (m, format) {\n        if (!m) {\n            return monthsShortDot;\n        } else if (/-MMM-/.test(format)) {\n            return monthsShort[m.month()];\n        } else {\n            return monthsShortDot[m.month()];\n        }\n    },\n    monthsRegex : monthsRegex,\n    monthsShortRegex : monthsRegex,\n    monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n    monthsShortStrictRegex : /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n    monthsParse : monthsParse,\n    longMonthsParse : monthsParse,\n    shortMonthsParse : monthsParse,\n    weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n    weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n    weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D [de] MMMM [de] YYYY',\n        LLL : 'D [de] MMMM [de] YYYY H:mm',\n        LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n    },\n    calendar : {\n        sameDay : function () {\n            return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        nextDay : function () {\n            return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        nextWeek : function () {\n            return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        lastDay : function () {\n            return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        lastWeek : function () {\n            return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'en %s',\n        past : 'hace %s',\n        s : 'unos segundos',\n        m : 'un minuto',\n        mm : '%d minutos',\n        h : 'una hora',\n        hh : '%d horas',\n        d : 'un día',\n        dd : '%d días',\n        M : 'un mes',\n        MM : '%d meses',\n        y : 'un año',\n        yy : '%d años'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n    ordinal : '%dº',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn es;\n\n})));\n","//! moment.js locale configuration\n//! locale : French [fr]\n//! author : John Fischer : https://github.com/jfroffice\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar fr = moment.defineLocale('fr', {\n    months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n    monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n    weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n    weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Aujourd’hui à] LT',\n        nextDay : '[Demain à] LT',\n        nextWeek : 'dddd [à] LT',\n        lastDay : '[Hier à] LT',\n        lastWeek : 'dddd [dernier à] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'dans %s',\n        past : 'il y a %s',\n        s : 'quelques secondes',\n        m : 'une minute',\n        mm : '%d minutes',\n        h : 'une heure',\n        hh : '%d heures',\n        d : 'un jour',\n        dd : '%d jours',\n        M : 'un mois',\n        MM : '%d mois',\n        y : 'un an',\n        yy : '%d ans'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            // TODO: Return 'e' when day of month > 1. Move this case inside\n            // block for masculine words below.\n            // See https://github.com/moment/moment/issues/3375\n            case 'D':\n                return number + (number === 1 ? 'er' : '');\n\n            // Words with masculine grammatical gender: mois, trimestre, jour\n            default:\n            case 'M':\n            case 'Q':\n            case 'DDD':\n            case 'd':\n                return number + (number === 1 ? 'er' : 'e');\n\n            // Words with feminine grammatical gender: semaine\n            case 'w':\n            case 'W':\n                return number + (number === 1 ? 're' : 'e');\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn fr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar hyAm = moment.defineLocale('hy-am', {\n    months : {\n        format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n        standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n    },\n    monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n    weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n    weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n    weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY թ.',\n        LLL : 'D MMMM YYYY թ., HH:mm',\n        LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n    },\n    calendar : {\n        sameDay: '[այսօր] LT',\n        nextDay: '[վաղը] LT',\n        lastDay: '[երեկ] LT',\n        nextWeek: function () {\n            return 'dddd [օրը ժամը] LT';\n        },\n        lastWeek: function () {\n            return '[անցած] dddd [օրը ժամը] LT';\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : '%s հետո',\n        past : '%s առաջ',\n        s : 'մի քանի վայրկյան',\n        m : 'րոպե',\n        mm : '%d րոպե',\n        h : 'ժամ',\n        hh : '%d ժամ',\n        d : 'օր',\n        dd : '%d օր',\n        M : 'ամիս',\n        MM : '%d ամիս',\n        y : 'տարի',\n        yy : '%d տարի'\n    },\n    meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n    isPM: function (input) {\n        return /^(ցերեկվա|երեկոյան)$/.test(input);\n    },\n    meridiem : function (hour) {\n        if (hour < 4) {\n            return 'գիշերվա';\n        } else if (hour < 12) {\n            return 'առավոտվա';\n        } else if (hour < 17) {\n            return 'ցերեկվա';\n        } else {\n            return 'երեկոյան';\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n    ordinal: function (number, period) {\n        switch (period) {\n            case 'DDD':\n            case 'w':\n            case 'W':\n            case 'DDDo':\n                if (number === 1) {\n                    return number + '-ին';\n                }\n                return number + '-րդ';\n            default:\n                return number;\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn hyAm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian [it]\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar it = moment.defineLocale('it', {\n    months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n    monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n    weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n    weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n    weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[Oggi alle] LT',\n        nextDay: '[Domani alle] LT',\n        nextWeek: 'dddd [alle] LT',\n        lastDay: '[Ieri alle] LT',\n        lastWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[la scorsa] dddd [alle] LT';\n                default:\n                    return '[lo scorso] dddd [alle] LT';\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : function (s) {\n            return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n        },\n        past : '%s fa',\n        s : 'alcuni secondi',\n        m : 'un minuto',\n        mm : '%d minuti',\n        h : 'un\\'ora',\n        hh : '%d ore',\n        d : 'un giorno',\n        dd : '%d giorni',\n        M : 'un mese',\n        MM : '%d mesi',\n        y : 'un anno',\n        yy : '%d anni'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n    ordinal: '%dº',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn it;\n\n})));\n","//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//!           Sigurd Gartmann : https://github.com/sigurdga\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar nb = moment.defineLocale('nb', {\n    months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n    monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n    weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n    weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY [kl.] HH:mm',\n        LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n    },\n    calendar : {\n        sameDay: '[i dag kl.] LT',\n        nextDay: '[i morgen kl.] LT',\n        nextWeek: 'dddd [kl.] LT',\n        lastDay: '[i går kl.] LT',\n        lastWeek: '[forrige] dddd [kl.] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'om %s',\n        past : '%s siden',\n        s : 'noen sekunder',\n        m : 'ett minutt',\n        mm : '%d minutter',\n        h : 'en time',\n        hh : '%d timer',\n        d : 'en dag',\n        dd : '%d dager',\n        M : 'en måned',\n        MM : '%d måneder',\n        y : 'ett år',\n        yy : '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn nb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_');\nvar monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\nfunction plural(n) {\n    return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n}\nfunction translate(number, withoutSuffix, key) {\n    var result = number + ' ';\n    switch (key) {\n        case 'm':\n            return withoutSuffix ? 'minuta' : 'minutę';\n        case 'mm':\n            return result + (plural(number) ? 'minuty' : 'minut');\n        case 'h':\n            return withoutSuffix  ? 'godzina'  : 'godzinę';\n        case 'hh':\n            return result + (plural(number) ? 'godziny' : 'godzin');\n        case 'MM':\n            return result + (plural(number) ? 'miesiące' : 'miesięcy');\n        case 'yy':\n            return result + (plural(number) ? 'lata' : 'lat');\n    }\n}\n\nvar pl = moment.defineLocale('pl', {\n    months : function (momentToFormat, format) {\n        if (!momentToFormat) {\n            return monthsNominative;\n        } else if (format === '') {\n            // Hack: if format empty we know this is used to generate\n            // RegExp by moment. Give then back both valid forms of months\n            // in RegExp ready format.\n            return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n        } else if (/D MMMM/.test(format)) {\n            return monthsSubjective[momentToFormat.month()];\n        } else {\n            return monthsNominative[momentToFormat.month()];\n        }\n    },\n    monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n    weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n    weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n    weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[Dziś o] LT',\n        nextDay: '[Jutro o] LT',\n        nextWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[W niedzielę o] LT';\n\n                case 2:\n                    return '[We wtorek o] LT';\n\n                case 3:\n                    return '[W środę o] LT';\n\n                case 6:\n                    return '[W sobotę o] LT';\n\n                default:\n                    return '[W] dddd [o] LT';\n            }\n        },\n        lastDay: '[Wczoraj o] LT',\n        lastWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[W zeszłą niedzielę o] LT';\n                case 3:\n                    return '[W zeszłą środę o] LT';\n                case 6:\n                    return '[W zeszłą sobotę o] LT';\n                default:\n                    return '[W zeszły] dddd [o] LT';\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past : '%s temu',\n        s : 'kilka sekund',\n        m : translate,\n        mm : translate,\n        h : translate,\n        hh : translate,\n        d : '1 dzień',\n        dd : '%d dni',\n        M : 'miesiąc',\n        MM : translate,\n        y : 'rok',\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn pl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar pt = moment.defineLocale('pt', {\n    months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n    monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n    weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n    weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n    weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D [de] MMMM [de] YYYY',\n        LLL : 'D [de] MMMM [de] YYYY HH:mm',\n        LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[Hoje às] LT',\n        nextDay: '[Amanhã às] LT',\n        nextWeek: 'dddd [às] LT',\n        lastDay: '[Ontem às] LT',\n        lastWeek: function () {\n            return (this.day() === 0 || this.day() === 6) ?\n                '[Último] dddd [às] LT' : // Saturday + Sunday\n                '[Última] dddd [às] LT'; // Monday - Friday\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'em %s',\n        past : 'há %s',\n        s : 'segundos',\n        m : 'um minuto',\n        mm : '%d minutos',\n        h : 'uma hora',\n        hh : '%d horas',\n        d : 'um dia',\n        dd : '%d dias',\n        M : 'um mês',\n        MM : '%d meses',\n        y : 'um ano',\n        yy : '%d anos'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal : '%dº',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn pt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar ptBr = moment.defineLocale('pt-br', {\n    months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n    monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n    weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n    weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n    weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D [de] MMMM [de] YYYY',\n        LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n        LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n    },\n    calendar : {\n        sameDay: '[Hoje às] LT',\n        nextDay: '[Amanhã às] LT',\n        nextWeek: 'dddd [às] LT',\n        lastDay: '[Ontem às] LT',\n        lastWeek: function () {\n            return (this.day() === 0 || this.day() === 6) ?\n                '[Último] dddd [às] LT' : // Saturday + Sunday\n                '[Última] dddd [às] LT'; // Monday - Friday\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'em %s',\n        past : '%s atrás',\n        s : 'poucos segundos',\n        ss : '%d segundos',\n        m : 'um minuto',\n        mm : '%d minutos',\n        h : 'uma hora',\n        hh : '%d horas',\n        d : 'um dia',\n        dd : '%d dias',\n        M : 'um mês',\n        MM : '%d meses',\n        y : 'um ano',\n        yy : '%d anos'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal : '%dº'\n});\n\nreturn ptBr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! Author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction plural(word, num) {\n    var forms = word.split('_');\n    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n}\nfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n    var format = {\n        'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n        'hh': 'час_часа_часов',\n        'dd': 'день_дня_дней',\n        'MM': 'месяц_месяца_месяцев',\n        'yy': 'год_года_лет'\n    };\n    if (key === 'm') {\n        return withoutSuffix ? 'минута' : 'минуту';\n    }\n    else {\n        return number + ' ' + plural(format[key], +number);\n    }\n}\nvar monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\n// http://new.gramota.ru/spravka/rules/139-prop : § 103\n// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n// CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\nvar ru = moment.defineLocale('ru', {\n    months : {\n        format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n        standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n    },\n    monthsShort : {\n        // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n        format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n        standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n    },\n    weekdays : {\n        standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n        format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n        isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n    },\n    weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n    weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n    monthsParse : monthsParse,\n    longMonthsParse : monthsParse,\n    shortMonthsParse : monthsParse,\n\n    // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n    monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n    // копия предыдущего\n    monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n    // полные названия с падежами\n    monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n    // Выражение, которое соотвествует только сокращённым формам\n    monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY г.',\n        LLL : 'D MMMM YYYY г., HH:mm',\n        LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n    },\n    calendar : {\n        sameDay: '[Сегодня в] LT',\n        nextDay: '[Завтра в] LT',\n        lastDay: '[Вчера в] LT',\n        nextWeek: function (now) {\n            if (now.week() !== this.week()) {\n                switch (this.day()) {\n                    case 0:\n                        return '[В следующее] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[В следующий] dddd [в] LT';\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[В следующую] dddd [в] LT';\n                }\n            } else {\n                if (this.day() === 2) {\n                    return '[Во] dddd [в] LT';\n                } else {\n                    return '[В] dddd [в] LT';\n                }\n            }\n        },\n        lastWeek: function (now) {\n            if (now.week() !== this.week()) {\n                switch (this.day()) {\n                    case 0:\n                        return '[В прошлое] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[В прошлый] dddd [в] LT';\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[В прошлую] dddd [в] LT';\n                }\n            } else {\n                if (this.day() === 2) {\n                    return '[Во] dddd [в] LT';\n                } else {\n                    return '[В] dddd [в] LT';\n                }\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'через %s',\n        past : '%s назад',\n        s : 'несколько секунд',\n        m : relativeTimeWithPlural,\n        mm : relativeTimeWithPlural,\n        h : 'час',\n        hh : relativeTimeWithPlural,\n        d : 'день',\n        dd : relativeTimeWithPlural,\n        M : 'месяц',\n        MM : relativeTimeWithPlural,\n        y : 'год',\n        yy : relativeTimeWithPlural\n    },\n    meridiemParse: /ночи|утра|дня|вечера/i,\n    isPM : function (input) {\n        return /^(дня|вечера)$/.test(input);\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'ночи';\n        } else if (hour < 12) {\n            return 'утра';\n        } else if (hour < 17) {\n            return 'дня';\n        } else {\n            return 'вечера';\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n    ordinal: function (number, period) {\n        switch (period) {\n            case 'M':\n            case 'd':\n            case 'DDD':\n                return number + '-й';\n            case 'D':\n                return number + '-го';\n            case 'w':\n            case 'W':\n                return number + '-я';\n            default:\n                return number;\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn ru;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_');\nvar monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\nfunction plural(n) {\n    return (n > 1) && (n < 5);\n}\nfunction translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    switch (key) {\n        case 's':  // a few seconds / in a few seconds / a few seconds ago\n            return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n        case 'm':  // a minute / in a minute / a minute ago\n            return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'minúty' : 'minút');\n            } else {\n                return result + 'minútami';\n            }\n            break;\n        case 'h':  // an hour / in an hour / an hour ago\n            return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n        case 'hh': // 9 hours / in 9 hours / 9 hours ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'hodiny' : 'hodín');\n            } else {\n                return result + 'hodinami';\n            }\n            break;\n        case 'd':  // a day / in a day / a day ago\n            return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n        case 'dd': // 9 days / in 9 days / 9 days ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'dni' : 'dní');\n            } else {\n                return result + 'dňami';\n            }\n            break;\n        case 'M':  // a month / in a month / a month ago\n            return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n        case 'MM': // 9 months / in 9 months / 9 months ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'mesiace' : 'mesiacov');\n            } else {\n                return result + 'mesiacmi';\n            }\n            break;\n        case 'y':  // a year / in a year / a year ago\n            return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n        case 'yy': // 9 years / in 9 years / 9 years ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'roky' : 'rokov');\n            } else {\n                return result + 'rokmi';\n            }\n            break;\n    }\n}\n\nvar sk = moment.defineLocale('sk', {\n    months : months,\n    monthsShort : monthsShort,\n    weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n    weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n    weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n    longDateFormat : {\n        LT: 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY H:mm',\n        LLLL : 'dddd D. MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay: '[dnes o] LT',\n        nextDay: '[zajtra o] LT',\n        nextWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[v nedeľu o] LT';\n                case 1:\n                case 2:\n                    return '[v] dddd [o] LT';\n                case 3:\n                    return '[v stredu o] LT';\n                case 4:\n                    return '[vo štvrtok o] LT';\n                case 5:\n                    return '[v piatok o] LT';\n                case 6:\n                    return '[v sobotu o] LT';\n            }\n        },\n        lastDay: '[včera o] LT',\n        lastWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[minulú nedeľu o] LT';\n                case 1:\n                case 2:\n                    return '[minulý] dddd [o] LT';\n                case 3:\n                    return '[minulú stredu o] LT';\n                case 4:\n                case 5:\n                    return '[minulý] dddd [o] LT';\n                case 6:\n                    return '[minulú sobotu o] LT';\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past : 'pred %s',\n        s : translate,\n        m : translate,\n        mm : translate,\n        h : translate,\n        hh : translate,\n        d : translate,\n        dd : translate,\n        M : translate,\n        MM : translate,\n        y : translate,\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn sk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    switch (key) {\n        case 's':\n            return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n        case 'm':\n            return withoutSuffix ? 'ena minuta' : 'eno minuto';\n        case 'mm':\n            if (number === 1) {\n                result += withoutSuffix ? 'minuta' : 'minuto';\n            } else if (number === 2) {\n                result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n            } else if (number < 5) {\n                result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n            } else {\n                result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n            }\n            return result;\n        case 'h':\n            return withoutSuffix ? 'ena ura' : 'eno uro';\n        case 'hh':\n            if (number === 1) {\n                result += withoutSuffix ? 'ura' : 'uro';\n            } else if (number === 2) {\n                result += withoutSuffix || isFuture ? 'uri' : 'urama';\n            } else if (number < 5) {\n                result += withoutSuffix || isFuture ? 'ure' : 'urami';\n            } else {\n                result += withoutSuffix || isFuture ? 'ur' : 'urami';\n            }\n            return result;\n        case 'd':\n            return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n        case 'dd':\n            if (number === 1) {\n                result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n            } else if (number === 2) {\n                result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n            } else {\n                result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n            }\n            return result;\n        case 'M':\n            return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n        case 'MM':\n            if (number === 1) {\n                result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n            } else if (number === 2) {\n                result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n            } else if (number < 5) {\n                result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n            } else {\n                result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n            }\n            return result;\n        case 'y':\n            return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n        case 'yy':\n            if (number === 1) {\n                result += withoutSuffix || isFuture ? 'leto' : 'letom';\n            } else if (number === 2) {\n                result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n            } else if (number < 5) {\n                result += withoutSuffix || isFuture ? 'leta' : 'leti';\n            } else {\n                result += withoutSuffix || isFuture ? 'let' : 'leti';\n            }\n            return result;\n    }\n}\n\nvar sl = moment.defineLocale('sl', {\n    months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n    monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n    weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n    weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY H:mm',\n        LLLL : 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay  : '[danes ob] LT',\n        nextDay  : '[jutri ob] LT',\n\n        nextWeek : function () {\n            switch (this.day()) {\n                case 0:\n                    return '[v] [nedeljo] [ob] LT';\n                case 3:\n                    return '[v] [sredo] [ob] LT';\n                case 6:\n                    return '[v] [soboto] [ob] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[v] dddd [ob] LT';\n            }\n        },\n        lastDay  : '[včeraj ob] LT',\n        lastWeek : function () {\n            switch (this.day()) {\n                case 0:\n                    return '[prejšnjo] [nedeljo] [ob] LT';\n                case 3:\n                    return '[prejšnjo] [sredo] [ob] LT';\n                case 6:\n                    return '[prejšnjo] [soboto] [ob] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[prejšnji] dddd [ob] LT';\n            }\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'čez %s',\n        past   : 'pred %s',\n        s      : processRelativeTime,\n        m      : processRelativeTime,\n        mm     : processRelativeTime,\n        h      : processRelativeTime,\n        hh     : processRelativeTime,\n        d      : processRelativeTime,\n        dd     : processRelativeTime,\n        M      : processRelativeTime,\n        MM     : processRelativeTime,\n        y      : processRelativeTime,\n        yy     : processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn sl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar sv = moment.defineLocale('sv', {\n    months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n    weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n    weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n    weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY-MM-DD',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY [kl.] HH:mm',\n        LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n        lll : 'D MMM YYYY HH:mm',\n        llll : 'ddd D MMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[Idag] LT',\n        nextDay: '[Imorgon] LT',\n        lastDay: '[Igår] LT',\n        nextWeek: '[På] dddd LT',\n        lastWeek: '[I] dddd[s] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'om %s',\n        past : 'för %s sedan',\n        s : 'några sekunder',\n        m : 'en minut',\n        mm : '%d minuter',\n        h : 'en timme',\n        hh : '%d timmar',\n        d : 'en dag',\n        dd : '%d dagar',\n        M : 'en månad',\n        MM : '%d månader',\n        y : 'ett år',\n        yy : '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'e' :\n            (b === 1) ? 'a' :\n            (b === 2) ? 'a' :\n            (b === 3) ? 'e' : 'e';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn sv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//!           Burak Yiğit Kaya: https://github.com/BYK\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar suffixes = {\n    1: '\\'inci',\n    5: '\\'inci',\n    8: '\\'inci',\n    70: '\\'inci',\n    80: '\\'inci',\n    2: '\\'nci',\n    7: '\\'nci',\n    20: '\\'nci',\n    50: '\\'nci',\n    3: '\\'üncü',\n    4: '\\'üncü',\n    100: '\\'üncü',\n    6: '\\'ncı',\n    9: '\\'uncu',\n    10: '\\'uncu',\n    30: '\\'uncu',\n    60: '\\'ıncı',\n    90: '\\'ıncı'\n};\n\nvar tr = moment.defineLocale('tr', {\n    months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n    monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n    weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n    weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n    weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[bugün saat] LT',\n        nextDay : '[yarın saat] LT',\n        nextWeek : '[gelecek] dddd [saat] LT',\n        lastDay : '[dün] LT',\n        lastWeek : '[geçen] dddd [saat] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s sonra',\n        past : '%s önce',\n        s : 'birkaç saniye',\n        m : 'bir dakika',\n        mm : '%d dakika',\n        h : 'bir saat',\n        hh : '%d saat',\n        d : 'bir gün',\n        dd : '%d gün',\n        M : 'bir ay',\n        MM : '%d ay',\n        y : 'bir yıl',\n        yy : '%d yıl'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,\n    ordinal : function (number) {\n        if (number === 0) {  // special case for zero\n            return number + '\\'ıncı';\n        }\n        var a = number % 10,\n            b = number % 100 - a,\n            c = number >= 100 ? 100 : null;\n        return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn tr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar zhCn = moment.defineLocale('zh-cn', {\n    months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n    weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n    weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY年MMMD日',\n        LL : 'YYYY年MMMD日',\n        LLL : 'YYYY年MMMD日Ah点mm分',\n        LLLL : 'YYYY年MMMD日ddddAh点mm分',\n        l : 'YYYY年MMMD日',\n        ll : 'YYYY年MMMD日',\n        lll : 'YYYY年MMMD日 HH:mm',\n        llll : 'YYYY年MMMD日dddd HH:mm'\n    },\n    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n    meridiemHour: function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === '凌晨' || meridiem === '早上' ||\n                meridiem === '上午') {\n            return hour;\n        } else if (meridiem === '下午' || meridiem === '晚上') {\n            return hour + 12;\n        } else {\n            // '中午'\n            return hour >= 11 ? hour : hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        var hm = hour * 100 + minute;\n        if (hm < 600) {\n            return '凌晨';\n        } else if (hm < 900) {\n            return '早上';\n        } else if (hm < 1130) {\n            return '上午';\n        } else if (hm < 1230) {\n            return '中午';\n        } else if (hm < 1800) {\n            return '下午';\n        } else {\n            return '晚上';\n        }\n    },\n    calendar : {\n        sameDay : '[今天]LT',\n        nextDay : '[明天]LT',\n        nextWeek : '[下]ddddLT',\n        lastDay : '[昨天]LT',\n        lastWeek : '[上]ddddLT',\n        sameElse : 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            case 'd':\n            case 'D':\n            case 'DDD':\n                return number + '日';\n            case 'M':\n                return number + '月';\n            case 'w':\n            case 'W':\n                return number + '周';\n            default:\n                return number;\n        }\n    },\n    relativeTime : {\n        future : '%s内',\n        past : '%s前',\n        s : '几秒',\n        m : '1 分钟',\n        mm : '%d 分钟',\n        h : '1 小时',\n        hh : '%d 小时',\n        d : '1 天',\n        dd : '%d 天',\n        M : '1 个月',\n        MM : '%d 个月',\n        y : '1 年',\n        yy : '%d 年'\n    },\n    week : {\n        // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn zhCn;\n\n})));\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n  return store[key] || (store[key] = {});\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","exports.f = Object.getOwnPropertySymbols;\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","module.exports = true;\n","module.exports = {};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.preventTouchMove = preventTouchMove;\nexports.allowTouchMove = allowTouchMove;\nexports.preventInertiaScroll = preventInertiaScroll;\nexports.isTouchDevice = isTouchDevice;\nexports.getPadding = getPadding;\nexports.camelToKebab = camelToKebab;\nexports.getWindowHeight = getWindowHeight;\nexports.getDocumentHeight = getDocumentHeight;\nexports.parse = parse;\nexports.makeStyleTag = makeStyleTag;\nexports.injectStyles = injectStyles;\nexports.insertStyleTag = insertStyleTag;\nfunction preventTouchMove(e) {\n  e.preventDefault();\n}\n\nfunction allowTouchMove(e) {\n  e.stopPropagation();\n}\n\nfunction preventInertiaScroll() {\n  var top = this.scrollTop;\n  var totalScroll = this.scrollHeight;\n  var currentScroll = top + this.offsetHeight;\n\n  if (top === 0) {\n    this.scrollTop = 1;\n  } else if (currentScroll === totalScroll) {\n    this.scrollTop = top - 1;\n  }\n}\n\n// `ontouchstart` check works on most browsers\n// `maxTouchPoints` works on IE10/11 and Surface\nfunction isTouchDevice() {\n  if (typeof window === 'undefined' || !window) return false;\n  return 'ontouchstart' in window || navigator.maxTouchPoints;\n}\n\nfunction getPadding() {\n  if (typeof window === 'undefined' || !window || !document) return 0;\n\n  var currentPadding = parseInt(document.body.paddingRight, 10) || 0;\n  var clientWidth = document.body ? document.body.clientWidth : 0;\n  var adjustedPadding = window.innerWidth - clientWidth + currentPadding || 0;\n\n  return adjustedPadding;\n}\n\nfunction camelToKebab(str) {\n  return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction getWindowHeight() {\n  var multiplier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n  if (typeof window !== 'undefined' && window && window.innerHeight) {\n    return window.innerHeight * multiplier;\n  }\n}\n\nfunction getDocumentHeight() {\n  if (typeof window !== 'undefined' && document && document.body) {\n    return document.body.clientHeight;\n  }\n}\n\nfunction parse(val) {\n  return isNaN(val) ? val : val + 'px';\n}\n\n// ==============================\n// Style Sheets\n// ==============================\n\nfunction makeStyleTag(id) {\n  var tag = document.createElement('style');\n  tag.type = 'text/css';\n  tag.setAttribute('data-react-scrolllock', '');\n\n  return tag;\n}\nfunction injectStyles(tag, css) {\n  if (tag.styleSheet) {\n    tag.styleSheet.cssText = css;\n  } else {\n    tag.appendChild(document.createTextNode(css));\n  }\n}\nfunction insertStyleTag(tag) {\n  var head = document.head || document.getElementsByTagName('head')[0];\n  head.appendChild(tag);\n}","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.size = exports.default = exports.IconWrapper = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _uuid = _interopRequireDefault(require(\"uuid\"));\n\nvar _theme = require(\"@atlaskit/theme\");\n\nvar _constants = require(\"../constants\");\n\nvar getSize = function getSize(props) {\n  if (props.size) {\n    return \"height: \".concat(_constants.sizes[props.size], \"; width: \").concat(_constants.sizes[props.size], \";\");\n  }\n\n  return null;\n};\n\nvar IconWrapper = _styledComponents.default.span.withConfig({\n  displayName: \"Icon__IconWrapper\",\n  componentId: \"dyhwwi-0\"\n})([\"\\n  \", \" color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \" max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n  /* Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"], getSize, function (p) {\n  return p.primaryColor || 'currentColor';\n}, function (p) {\n  return p.secondaryColor || _theme.colors.background;\n}, getSize);\n\nexports.IconWrapper = IconWrapper;\n\nvar Icon =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inherits2.default)(Icon, _Component);\n\n  function Icon() {\n    (0, _classCallCheck2.default)(this, Icon);\n    return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Icon).apply(this, arguments));\n  }\n\n  (0, _createClass2.default)(Icon, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          Glyph = _this$props.glyph,\n          dangerouslySetGlyph = _this$props.dangerouslySetGlyph,\n          onClick = _this$props.onClick,\n          primaryColor = _this$props.primaryColor,\n          secondaryColor = _this$props.secondaryColor,\n          size = _this$props.size; // handling the glyphs as strings\n\n      if (dangerouslySetGlyph) {\n        return _react.default.createElement(IconWrapper, {\n          onClick: onClick,\n          primaryColor: primaryColor,\n          secondaryColor: secondaryColor,\n          size: size,\n          \"aria-label\": this.props.label,\n          dangerouslySetInnerHTML: {\n            __html: Icon.insertDynamicGradientID(dangerouslySetGlyph)\n          }\n        });\n      } // handling the glyphs when passed through as functions\n\n\n      return _react.default.createElement(IconWrapper, {\n        onClick: onClick,\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        size: size,\n        \"aria-label\": this.props.label\n      }, Glyph ? _react.default.createElement(Glyph, {\n        role: \"presentation\"\n      }) : null);\n    }\n  }], [{\n    key: \"insertDynamicGradientID\",\n\n    /* Icons need unique gradient IDs across instances for different gradient definitions to work\n     * correctly.\n     * A step in the icon build process replaces linear gradient IDs and their references in paths\n     * to a placeholder string so we can replace them with a dynamic ID here.\n     * Replacing the original IDs with placeholders in the build process is more robust than not\n     * using placeholders as we do not have to rely on regular expressions to find specific element\n     * to replace.\n     */\n    value: function insertDynamicGradientID(svgStr) {\n      var id = (0, _uuid.default)();\n      var replacedSvgStr = svgStr.replace(/id=\"([^\"]+)-idPlaceholder\"/g, \"id=$1-\".concat(id)).replace(/fill=\"url\\(#([^\"]+)-idPlaceholder\\)\"/g, \"fill=\\\"url(#$1-\".concat(id, \")\\\"\"));\n      return replacedSvgStr;\n    }\n  }]);\n  return Icon;\n}(_react.Component);\n\nexports.default = Icon;\n(0, _defineProperty2.default)(Icon, \"defaultProps\", {\n  onClick: function onClick() {}\n});\nvar size = Object.keys(_constants.sizes).reduce(function (p, c) {\n  return Object.assign(p, (0, _defineProperty2.default)({}, c, c));\n}, {});\nexports.size = size;","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.oDataQueryNames = [\"select\", \"expand\", \"orderby\", \"filter\", \"top\", \"skip\", \"skipToken\", \"count\"];\r\nexports.DEFAULT_VERSION = \"v1.0\";\r\nexports.GRAPH_BASE_URL = \"https://graph.microsoft.com/\";\r\nexports.PACKAGE_VERSION = \"1.0.0\";\r\nexports.oDataQueryNames = exports.oDataQueryNames.concat(exports.oDataQueryNames.map(function (s) { return \"$\" + s; }));\r\n//# sourceMappingURL=common.js.map","module.exports = {\n\t\"hash\": \"#️⃣\",\n\t\"keycap_star\": \"*️⃣\",\n\t\"zero\": \"0️⃣\",\n\t\"one\": \"1️⃣\",\n\t\"two\": \"2️⃣\",\n\t\"three\": \"3️⃣\",\n\t\"four\": \"4️⃣\",\n\t\"five\": \"5️⃣\",\n\t\"six\": \"6️⃣\",\n\t\"seven\": \"7️⃣\",\n\t\"eight\": \"8️⃣\",\n\t\"nine\": \"9️⃣\",\n\t\"copyright\": \"©️\",\n\t\"registered\": \"®️\",\n\t\"mahjong\": \"🀄\",\n\t\"black_joker\": \"🃏\",\n\t\"a\": \"🅰️\",\n\t\"b\": \"🅱️\",\n\t\"o2\": \"🅾️\",\n\t\"parking\": \"🅿️\",\n\t\"ab\": \"🆎\",\n\t\"cl\": \"🆑\",\n\t\"cool\": \"🆒\",\n\t\"free\": \"🆓\",\n\t\"id\": \"🆔\",\n\t\"new\": \"🆕\",\n\t\"ng\": \"🆖\",\n\t\"ok\": \"🆗\",\n\t\"sos\": \"🆘\",\n\t\"up\": \"🆙\",\n\t\"vs\": \"🆚\",\n\t\"flag-ac\": \"🇦🇨\",\n\t\"flag-ad\": \"🇦🇩\",\n\t\"flag-ae\": \"🇦🇪\",\n\t\"flag-af\": \"🇦🇫\",\n\t\"flag-ag\": \"🇦🇬\",\n\t\"flag-ai\": \"🇦🇮\",\n\t\"flag-al\": \"🇦🇱\",\n\t\"flag-am\": \"🇦🇲\",\n\t\"flag-ao\": \"🇦🇴\",\n\t\"flag-aq\": \"🇦🇶\",\n\t\"flag-ar\": \"🇦🇷\",\n\t\"flag-as\": \"🇦🇸\",\n\t\"flag-at\": \"🇦🇹\",\n\t\"flag-au\": \"🇦🇺\",\n\t\"flag-aw\": \"🇦🇼\",\n\t\"flag-ax\": \"🇦🇽\",\n\t\"flag-az\": \"🇦🇿\",\n\t\"flag-ba\": \"🇧🇦\",\n\t\"flag-bb\": \"🇧🇧\",\n\t\"flag-bd\": \"🇧🇩\",\n\t\"flag-be\": \"🇧🇪\",\n\t\"flag-bf\": \"🇧🇫\",\n\t\"flag-bg\": \"🇧🇬\",\n\t\"flag-bh\": \"🇧🇭\",\n\t\"flag-bi\": \"🇧🇮\",\n\t\"flag-bj\": \"🇧🇯\",\n\t\"flag-bl\": \"🇧🇱\",\n\t\"flag-bm\": \"🇧🇲\",\n\t\"flag-bn\": \"🇧🇳\",\n\t\"flag-bo\": \"🇧🇴\",\n\t\"flag-bq\": \"🇧🇶\",\n\t\"flag-br\": \"🇧🇷\",\n\t\"flag-bs\": \"🇧🇸\",\n\t\"flag-bt\": \"🇧🇹\",\n\t\"flag-bv\": \"🇧🇻\",\n\t\"flag-bw\": \"🇧🇼\",\n\t\"flag-by\": \"🇧🇾\",\n\t\"flag-bz\": \"🇧🇿\",\n\t\"flag-ca\": \"🇨🇦\",\n\t\"flag-cc\": \"🇨🇨\",\n\t\"flag-cd\": \"🇨🇩\",\n\t\"flag-cf\": \"🇨🇫\",\n\t\"flag-cg\": \"🇨🇬\",\n\t\"flag-ch\": \"🇨🇭\",\n\t\"flag-ci\": \"🇨🇮\",\n\t\"flag-ck\": \"🇨🇰\",\n\t\"flag-cl\": \"🇨🇱\",\n\t\"flag-cm\": \"🇨🇲\",\n\t\"cn\": \"🇨🇳\",\n\t\"flag-co\": \"🇨🇴\",\n\t\"flag-cp\": \"🇨🇵\",\n\t\"flag-cr\": \"🇨🇷\",\n\t\"flag-cu\": \"🇨🇺\",\n\t\"flag-cv\": \"🇨🇻\",\n\t\"flag-cw\": \"🇨🇼\",\n\t\"flag-cx\": \"🇨🇽\",\n\t\"flag-cy\": \"🇨🇾\",\n\t\"flag-cz\": \"🇨🇿\",\n\t\"de\": \"🇩🇪\",\n\t\"flag-dg\": \"🇩🇬\",\n\t\"flag-dj\": \"🇩🇯\",\n\t\"flag-dk\": \"🇩🇰\",\n\t\"flag-dm\": \"🇩🇲\",\n\t\"flag-do\": \"🇩🇴\",\n\t\"flag-dz\": \"🇩🇿\",\n\t\"flag-ea\": \"🇪🇦\",\n\t\"flag-ec\": \"🇪🇨\",\n\t\"flag-ee\": \"🇪🇪\",\n\t\"flag-eg\": \"🇪🇬\",\n\t\"flag-eh\": \"🇪🇭\",\n\t\"flag-er\": \"🇪🇷\",\n\t\"es\": \"🇪🇸\",\n\t\"flag-et\": \"🇪🇹\",\n\t\"flag-eu\": \"🇪🇺\",\n\t\"flag-fi\": \"🇫🇮\",\n\t\"flag-fj\": \"🇫🇯\",\n\t\"flag-fk\": \"🇫🇰\",\n\t\"flag-fm\": \"🇫🇲\",\n\t\"flag-fo\": \"🇫🇴\",\n\t\"fr\": \"🇫🇷\",\n\t\"flag-ga\": \"🇬🇦\",\n\t\"gb\": \"🇬🇧\",\n\t\"flag-gd\": \"🇬🇩\",\n\t\"flag-ge\": \"🇬🇪\",\n\t\"flag-gf\": \"🇬🇫\",\n\t\"flag-gg\": \"🇬🇬\",\n\t\"flag-gh\": \"🇬🇭\",\n\t\"flag-gi\": \"🇬🇮\",\n\t\"flag-gl\": \"🇬🇱\",\n\t\"flag-gm\": \"🇬🇲\",\n\t\"flag-gn\": \"🇬🇳\",\n\t\"flag-gp\": \"🇬🇵\",\n\t\"flag-gq\": \"🇬🇶\",\n\t\"flag-gr\": \"🇬🇷\",\n\t\"flag-gs\": \"🇬🇸\",\n\t\"flag-gt\": \"🇬🇹\",\n\t\"flag-gu\": \"🇬🇺\",\n\t\"flag-gw\": \"🇬🇼\",\n\t\"flag-gy\": \"🇬🇾\",\n\t\"flag-hk\": \"🇭🇰\",\n\t\"flag-hm\": \"🇭🇲\",\n\t\"flag-hn\": \"🇭🇳\",\n\t\"flag-hr\": \"🇭🇷\",\n\t\"flag-ht\": \"🇭🇹\",\n\t\"flag-hu\": \"🇭🇺\",\n\t\"flag-ic\": \"🇮🇨\",\n\t\"flag-id\": \"🇮🇩\",\n\t\"flag-ie\": \"🇮🇪\",\n\t\"flag-il\": \"🇮🇱\",\n\t\"flag-im\": \"🇮🇲\",\n\t\"flag-in\": \"🇮🇳\",\n\t\"flag-io\": \"🇮🇴\",\n\t\"flag-iq\": \"🇮🇶\",\n\t\"flag-ir\": \"🇮🇷\",\n\t\"flag-is\": \"🇮🇸\",\n\t\"it\": \"🇮🇹\",\n\t\"flag-je\": \"🇯🇪\",\n\t\"flag-jm\": \"🇯🇲\",\n\t\"flag-jo\": \"🇯🇴\",\n\t\"jp\": \"🇯🇵\",\n\t\"flag-ke\": \"🇰🇪\",\n\t\"flag-kg\": \"🇰🇬\",\n\t\"flag-kh\": \"🇰🇭\",\n\t\"flag-ki\": \"🇰🇮\",\n\t\"flag-km\": \"🇰🇲\",\n\t\"flag-kn\": \"🇰🇳\",\n\t\"flag-kp\": \"🇰🇵\",\n\t\"kr\": \"🇰🇷\",\n\t\"flag-kw\": \"🇰🇼\",\n\t\"flag-ky\": \"🇰🇾\",\n\t\"flag-kz\": \"🇰🇿\",\n\t\"flag-la\": \"🇱🇦\",\n\t\"flag-lb\": \"🇱🇧\",\n\t\"flag-lc\": \"🇱🇨\",\n\t\"flag-li\": \"🇱🇮\",\n\t\"flag-lk\": \"🇱🇰\",\n\t\"flag-lr\": \"🇱🇷\",\n\t\"flag-ls\": \"🇱🇸\",\n\t\"flag-lt\": \"🇱🇹\",\n\t\"flag-lu\": \"🇱🇺\",\n\t\"flag-lv\": \"🇱🇻\",\n\t\"flag-ly\": \"🇱🇾\",\n\t\"flag-ma\": \"🇲🇦\",\n\t\"flag-mc\": \"🇲🇨\",\n\t\"flag-md\": \"🇲🇩\",\n\t\"flag-me\": \"🇲🇪\",\n\t\"flag-mf\": \"🇲🇫\",\n\t\"flag-mg\": \"🇲🇬\",\n\t\"flag-mh\": \"🇲🇭\",\n\t\"flag-mk\": \"🇲🇰\",\n\t\"flag-ml\": \"🇲🇱\",\n\t\"flag-mm\": \"🇲🇲\",\n\t\"flag-mn\": \"🇲🇳\",\n\t\"flag-mo\": \"🇲🇴\",\n\t\"flag-mp\": \"🇲🇵\",\n\t\"flag-mq\": \"🇲🇶\",\n\t\"flag-mr\": \"🇲🇷\",\n\t\"flag-ms\": \"🇲🇸\",\n\t\"flag-mt\": \"🇲🇹\",\n\t\"flag-mu\": \"🇲🇺\",\n\t\"flag-mv\": \"🇲🇻\",\n\t\"flag-mw\": \"🇲🇼\",\n\t\"flag-mx\": \"🇲🇽\",\n\t\"flag-my\": \"🇲🇾\",\n\t\"flag-mz\": \"🇲🇿\",\n\t\"flag-na\": \"🇳🇦\",\n\t\"flag-nc\": \"🇳🇨\",\n\t\"flag-ne\": \"🇳🇪\",\n\t\"flag-nf\": \"🇳🇫\",\n\t\"flag-ng\": \"🇳🇬\",\n\t\"flag-ni\": \"🇳🇮\",\n\t\"flag-nl\": \"🇳🇱\",\n\t\"flag-no\": \"🇳🇴\",\n\t\"flag-np\": \"🇳🇵\",\n\t\"flag-nr\": \"🇳🇷\",\n\t\"flag-nu\": \"🇳🇺\",\n\t\"flag-nz\": \"🇳🇿\",\n\t\"flag-om\": \"🇴🇲\",\n\t\"flag-pa\": \"🇵🇦\",\n\t\"flag-pe\": \"🇵🇪\",\n\t\"flag-pf\": \"🇵🇫\",\n\t\"flag-pg\": \"🇵🇬\",\n\t\"flag-ph\": \"🇵🇭\",\n\t\"flag-pk\": \"🇵🇰\",\n\t\"flag-pl\": \"🇵🇱\",\n\t\"flag-pm\": \"🇵🇲\",\n\t\"flag-pn\": \"🇵🇳\",\n\t\"flag-pr\": \"🇵🇷\",\n\t\"flag-ps\": \"🇵🇸\",\n\t\"flag-pt\": \"🇵🇹\",\n\t\"flag-pw\": \"🇵🇼\",\n\t\"flag-py\": \"🇵🇾\",\n\t\"flag-qa\": \"🇶🇦\",\n\t\"flag-re\": \"🇷🇪\",\n\t\"flag-ro\": \"🇷🇴\",\n\t\"flag-rs\": \"🇷🇸\",\n\t\"ru\": \"🇷🇺\",\n\t\"flag-rw\": \"🇷🇼\",\n\t\"flag-sa\": \"🇸🇦\",\n\t\"flag-sb\": \"🇸🇧\",\n\t\"flag-sc\": \"🇸🇨\",\n\t\"flag-sd\": \"🇸🇩\",\n\t\"flag-se\": \"🇸🇪\",\n\t\"flag-sg\": \"🇸🇬\",\n\t\"flag-sh\": \"🇸🇭\",\n\t\"flag-si\": \"🇸🇮\",\n\t\"flag-sj\": \"🇸🇯\",\n\t\"flag-sk\": \"🇸🇰\",\n\t\"flag-sl\": \"🇸🇱\",\n\t\"flag-sm\": \"🇸🇲\",\n\t\"flag-sn\": \"🇸🇳\",\n\t\"flag-so\": \"🇸🇴\",\n\t\"flag-sr\": \"🇸🇷\",\n\t\"flag-ss\": \"🇸🇸\",\n\t\"flag-st\": \"🇸🇹\",\n\t\"flag-sv\": \"🇸🇻\",\n\t\"flag-sx\": \"🇸🇽\",\n\t\"flag-sy\": \"🇸🇾\",\n\t\"flag-sz\": \"🇸🇿\",\n\t\"flag-ta\": \"🇹🇦\",\n\t\"flag-tc\": \"🇹🇨\",\n\t\"flag-td\": \"🇹🇩\",\n\t\"flag-tf\": \"🇹🇫\",\n\t\"flag-tg\": \"🇹🇬\",\n\t\"flag-th\": \"🇹🇭\",\n\t\"flag-tj\": \"🇹🇯\",\n\t\"flag-tk\": \"🇹🇰\",\n\t\"flag-tl\": \"🇹🇱\",\n\t\"flag-tm\": \"🇹🇲\",\n\t\"flag-tn\": \"🇹🇳\",\n\t\"flag-to\": \"🇹🇴\",\n\t\"flag-tr\": \"🇹🇷\",\n\t\"flag-tt\": \"🇹🇹\",\n\t\"flag-tv\": \"🇹🇻\",\n\t\"flag-tw\": \"🇹🇼\",\n\t\"flag-tz\": \"🇹🇿\",\n\t\"flag-ua\": \"🇺🇦\",\n\t\"flag-ug\": \"🇺🇬\",\n\t\"flag-um\": \"🇺🇲\",\n\t\"flag-un\": \"🇺🇳\",\n\t\"us\": \"🇺🇸\",\n\t\"flag-uy\": \"🇺🇾\",\n\t\"flag-uz\": \"🇺🇿\",\n\t\"flag-va\": \"🇻🇦\",\n\t\"flag-vc\": \"🇻🇨\",\n\t\"flag-ve\": \"🇻🇪\",\n\t\"flag-vg\": \"🇻🇬\",\n\t\"flag-vi\": \"🇻🇮\",\n\t\"flag-vn\": \"🇻🇳\",\n\t\"flag-vu\": \"🇻🇺\",\n\t\"flag-wf\": \"🇼🇫\",\n\t\"flag-ws\": \"🇼🇸\",\n\t\"flag-xk\": \"🇽🇰\",\n\t\"flag-ye\": \"🇾🇪\",\n\t\"flag-yt\": \"🇾🇹\",\n\t\"flag-za\": \"🇿🇦\",\n\t\"flag-zm\": \"🇿🇲\",\n\t\"flag-zw\": \"🇿🇼\",\n\t\"koko\": \"🈁\",\n\t\"sa\": \"🈂️\",\n\t\"u7121\": \"🈚\",\n\t\"u6307\": \"🈯\",\n\t\"u7981\": \"🈲\",\n\t\"u7a7a\": \"🈳\",\n\t\"u5408\": \"🈴\",\n\t\"u6e80\": \"🈵\",\n\t\"u6709\": \"🈶\",\n\t\"u6708\": \"🈷️\",\n\t\"u7533\": \"🈸\",\n\t\"u5272\": \"🈹\",\n\t\"u55b6\": \"🈺\",\n\t\"ideograph_advantage\": \"🉐\",\n\t\"accept\": \"🉑\",\n\t\"cyclone\": \"🌀\",\n\t\"foggy\": \"🌁\",\n\t\"closed_umbrella\": \"🌂\",\n\t\"night_with_stars\": \"🌃\",\n\t\"sunrise_over_mountains\": \"🌄\",\n\t\"sunrise\": \"🌅\",\n\t\"city_sunset\": \"🌆\",\n\t\"city_sunrise\": \"🌇\",\n\t\"rainbow\": \"🌈\",\n\t\"bridge_at_night\": \"🌉\",\n\t\"ocean\": \"🌊\",\n\t\"volcano\": \"🌋\",\n\t\"milky_way\": \"🌌\",\n\t\"earth_africa\": \"🌍\",\n\t\"earth_americas\": \"🌎\",\n\t\"earth_asia\": \"🌏\",\n\t\"globe_with_meridians\": \"🌐\",\n\t\"new_moon\": \"🌑\",\n\t\"waxing_crescent_moon\": \"🌒\",\n\t\"first_quarter_moon\": \"🌓\",\n\t\"moon\": \"🌔\",\n\t\"full_moon\": \"🌕\",\n\t\"waning_gibbous_moon\": \"🌖\",\n\t\"last_quarter_moon\": \"🌗\",\n\t\"waning_crescent_moon\": \"🌘\",\n\t\"crescent_moon\": \"🌙\",\n\t\"new_moon_with_face\": \"🌚\",\n\t\"first_quarter_moon_with_face\": \"🌛\",\n\t\"last_quarter_moon_with_face\": \"🌜\",\n\t\"full_moon_with_face\": \"🌝\",\n\t\"sun_with_face\": \"🌞\",\n\t\"star2\": \"🌟\",\n\t\"stars\": \"🌠\",\n\t\"thermometer\": \"🌡️\",\n\t\"mostly_sunny\": \"🌤️\",\n\t\"barely_sunny\": \"🌥️\",\n\t\"partly_sunny_rain\": \"🌦️\",\n\t\"rain_cloud\": \"🌧️\",\n\t\"snow_cloud\": \"🌨️\",\n\t\"lightning\": \"🌩️\",\n\t\"tornado\": \"🌪️\",\n\t\"fog\": \"🌫️\",\n\t\"wind_blowing_face\": \"🌬️\",\n\t\"hotdog\": \"🌭\",\n\t\"taco\": \"🌮\",\n\t\"burrito\": \"🌯\",\n\t\"chestnut\": \"🌰\",\n\t\"seedling\": \"🌱\",\n\t\"evergreen_tree\": \"🌲\",\n\t\"deciduous_tree\": \"🌳\",\n\t\"palm_tree\": \"🌴\",\n\t\"cactus\": \"🌵\",\n\t\"hot_pepper\": \"🌶️\",\n\t\"tulip\": \"🌷\",\n\t\"cherry_blossom\": \"🌸\",\n\t\"rose\": \"🌹\",\n\t\"hibiscus\": \"🌺\",\n\t\"sunflower\": \"🌻\",\n\t\"blossom\": \"🌼\",\n\t\"corn\": \"🌽\",\n\t\"ear_of_rice\": \"🌾\",\n\t\"herb\": \"🌿\",\n\t\"four_leaf_clover\": \"🍀\",\n\t\"maple_leaf\": \"🍁\",\n\t\"fallen_leaf\": \"🍂\",\n\t\"leaves\": \"🍃\",\n\t\"mushroom\": \"🍄\",\n\t\"tomato\": \"🍅\",\n\t\"eggplant\": \"🍆\",\n\t\"grapes\": \"🍇\",\n\t\"melon\": \"🍈\",\n\t\"watermelon\": \"🍉\",\n\t\"tangerine\": \"🍊\",\n\t\"lemon\": \"🍋\",\n\t\"banana\": \"🍌\",\n\t\"pineapple\": \"🍍\",\n\t\"apple\": \"🍎\",\n\t\"green_apple\": \"🍏\",\n\t\"pear\": \"🍐\",\n\t\"peach\": \"🍑\",\n\t\"cherries\": \"🍒\",\n\t\"strawberry\": \"🍓\",\n\t\"hamburger\": \"🍔\",\n\t\"pizza\": \"🍕\",\n\t\"meat_on_bone\": \"🍖\",\n\t\"poultry_leg\": \"🍗\",\n\t\"rice_cracker\": \"🍘\",\n\t\"rice_ball\": \"🍙\",\n\t\"rice\": \"🍚\",\n\t\"curry\": \"🍛\",\n\t\"ramen\": \"🍜\",\n\t\"spaghetti\": \"🍝\",\n\t\"bread\": \"🍞\",\n\t\"fries\": \"🍟\",\n\t\"sweet_potato\": \"🍠\",\n\t\"dango\": \"🍡\",\n\t\"oden\": \"🍢\",\n\t\"sushi\": \"🍣\",\n\t\"fried_shrimp\": \"🍤\",\n\t\"fish_cake\": \"🍥\",\n\t\"icecream\": \"🍦\",\n\t\"shaved_ice\": \"🍧\",\n\t\"ice_cream\": \"🍨\",\n\t\"doughnut\": \"🍩\",\n\t\"cookie\": \"🍪\",\n\t\"chocolate_bar\": \"🍫\",\n\t\"candy\": \"🍬\",\n\t\"lollipop\": \"🍭\",\n\t\"custard\": \"🍮\",\n\t\"honey_pot\": \"🍯\",\n\t\"cake\": \"🍰\",\n\t\"bento\": \"🍱\",\n\t\"stew\": \"🍲\",\n\t\"fried_egg\": \"🍳\",\n\t\"fork_and_knife\": \"🍴\",\n\t\"tea\": \"🍵\",\n\t\"sake\": \"🍶\",\n\t\"wine_glass\": \"🍷\",\n\t\"cocktail\": \"🍸\",\n\t\"tropical_drink\": \"🍹\",\n\t\"beer\": \"🍺\",\n\t\"beers\": \"🍻\",\n\t\"baby_bottle\": \"🍼\",\n\t\"knife_fork_plate\": \"🍽️\",\n\t\"champagne\": \"🍾\",\n\t\"popcorn\": \"🍿\",\n\t\"ribbon\": \"🎀\",\n\t\"gift\": \"🎁\",\n\t\"birthday\": \"🎂\",\n\t\"jack_o_lantern\": \"🎃\",\n\t\"christmas_tree\": \"🎄\",\n\t\"santa\": \"🎅\",\n\t\"fireworks\": \"🎆\",\n\t\"sparkler\": \"🎇\",\n\t\"balloon\": \"🎈\",\n\t\"tada\": \"🎉\",\n\t\"confetti_ball\": \"🎊\",\n\t\"tanabata_tree\": \"🎋\",\n\t\"crossed_flags\": \"🎌\",\n\t\"bamboo\": \"🎍\",\n\t\"dolls\": \"🎎\",\n\t\"flags\": \"🎏\",\n\t\"wind_chime\": \"🎐\",\n\t\"rice_scene\": \"🎑\",\n\t\"school_satchel\": \"🎒\",\n\t\"mortar_board\": \"🎓\",\n\t\"medal\": \"🎖️\",\n\t\"reminder_ribbon\": \"🎗️\",\n\t\"studio_microphone\": \"🎙️\",\n\t\"level_slider\": \"🎚️\",\n\t\"control_knobs\": \"🎛️\",\n\t\"film_frames\": \"🎞️\",\n\t\"admission_tickets\": \"🎟️\",\n\t\"carousel_horse\": \"🎠\",\n\t\"ferris_wheel\": \"🎡\",\n\t\"roller_coaster\": \"🎢\",\n\t\"fishing_pole_and_fish\": \"🎣\",\n\t\"microphone\": \"🎤\",\n\t\"movie_camera\": \"🎥\",\n\t\"cinema\": \"🎦\",\n\t\"headphones\": \"🎧\",\n\t\"art\": \"🎨\",\n\t\"tophat\": \"🎩\",\n\t\"circus_tent\": \"🎪\",\n\t\"ticket\": \"🎫\",\n\t\"clapper\": \"🎬\",\n\t\"performing_arts\": \"🎭\",\n\t\"video_game\": \"🎮\",\n\t\"dart\": \"🎯\",\n\t\"slot_machine\": \"🎰\",\n\t\"8ball\": \"🎱\",\n\t\"game_die\": \"🎲\",\n\t\"bowling\": \"🎳\",\n\t\"flower_playing_cards\": \"🎴\",\n\t\"musical_note\": \"🎵\",\n\t\"notes\": \"🎶\",\n\t\"saxophone\": \"🎷\",\n\t\"guitar\": \"🎸\",\n\t\"musical_keyboard\": \"🎹\",\n\t\"trumpet\": \"🎺\",\n\t\"violin\": \"🎻\",\n\t\"musical_score\": \"🎼\",\n\t\"running_shirt_with_sash\": \"🎽\",\n\t\"tennis\": \"🎾\",\n\t\"ski\": \"🎿\",\n\t\"basketball\": \"🏀\",\n\t\"checkered_flag\": \"🏁\",\n\t\"snowboarder\": \"🏂\",\n\t\"woman-running\": \"🏃‍♀️\",\n\t\"man-running\": \"🏃‍♂️\",\n\t\"runner\": \"🏃\",\n\t\"woman-surfing\": \"🏄‍♀️\",\n\t\"man-surfing\": \"🏄‍♂️\",\n\t\"surfer\": \"🏄\",\n\t\"sports_medal\": \"🏅\",\n\t\"trophy\": \"🏆\",\n\t\"horse_racing\": \"🏇\",\n\t\"football\": \"🏈\",\n\t\"rugby_football\": \"🏉\",\n\t\"woman-swimming\": \"🏊‍♀️\",\n\t\"man-swimming\": \"🏊‍♂️\",\n\t\"swimmer\": \"🏊\",\n\t\"woman-lifting-weights\": \"🏋️‍♀️\",\n\t\"man-lifting-weights\": \"🏋️‍♂️\",\n\t\"weight_lifter\": \"🏋️\",\n\t\"woman-golfing\": \"🏌️‍♀️\",\n\t\"man-golfing\": \"🏌️‍♂️\",\n\t\"golfer\": \"🏌️\",\n\t\"racing_motorcycle\": \"🏍️\",\n\t\"racing_car\": \"🏎️\",\n\t\"cricket_bat_and_ball\": \"🏏\",\n\t\"volleyball\": \"🏐\",\n\t\"field_hockey_stick_and_ball\": \"🏑\",\n\t\"ice_hockey_stick_and_puck\": \"🏒\",\n\t\"table_tennis_paddle_and_ball\": \"🏓\",\n\t\"snow_capped_mountain\": \"🏔️\",\n\t\"camping\": \"🏕️\",\n\t\"beach_with_umbrella\": \"🏖️\",\n\t\"building_construction\": \"🏗️\",\n\t\"house_buildings\": \"🏘️\",\n\t\"cityscape\": \"🏙️\",\n\t\"derelict_house_building\": \"🏚️\",\n\t\"classical_building\": \"🏛️\",\n\t\"desert\": \"🏜️\",\n\t\"desert_island\": \"🏝️\",\n\t\"national_park\": \"🏞️\",\n\t\"stadium\": \"🏟️\",\n\t\"house\": \"🏠\",\n\t\"house_with_garden\": \"🏡\",\n\t\"office\": \"🏢\",\n\t\"post_office\": \"🏣\",\n\t\"european_post_office\": \"🏤\",\n\t\"hospital\": \"🏥\",\n\t\"bank\": \"🏦\",\n\t\"atm\": \"🏧\",\n\t\"hotel\": \"🏨\",\n\t\"love_hotel\": \"🏩\",\n\t\"convenience_store\": \"🏪\",\n\t\"school\": \"🏫\",\n\t\"department_store\": \"🏬\",\n\t\"factory\": \"🏭\",\n\t\"izakaya_lantern\": \"🏮\",\n\t\"japanese_castle\": \"🏯\",\n\t\"european_castle\": \"🏰\",\n\t\"rainbow-flag\": \"🏳️‍🌈\",\n\t\"waving_white_flag\": \"🏳️\",\n\t\"flag-england\": \"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\n\t\"flag-scotland\": \"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\n\t\"flag-wales\": \"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",\n\t\"waving_black_flag\": \"🏴\",\n\t\"rosette\": \"🏵️\",\n\t\"label\": \"🏷️\",\n\t\"badminton_racquet_and_shuttlecock\": \"🏸\",\n\t\"bow_and_arrow\": \"🏹\",\n\t\"amphora\": \"🏺\",\n\t\"skin-tone-2\": \"🏻\",\n\t\"skin-tone-3\": \"🏼\",\n\t\"skin-tone-4\": \"🏽\",\n\t\"skin-tone-5\": \"🏾\",\n\t\"skin-tone-6\": \"🏿\",\n\t\"rat\": \"🐀\",\n\t\"mouse2\": \"🐁\",\n\t\"ox\": \"🐂\",\n\t\"water_buffalo\": \"🐃\",\n\t\"cow2\": \"🐄\",\n\t\"tiger2\": \"🐅\",\n\t\"leopard\": \"🐆\",\n\t\"rabbit2\": \"🐇\",\n\t\"cat2\": \"🐈\",\n\t\"dragon\": \"🐉\",\n\t\"crocodile\": \"🐊\",\n\t\"whale2\": \"🐋\",\n\t\"snail\": \"🐌\",\n\t\"snake\": \"🐍\",\n\t\"racehorse\": \"🐎\",\n\t\"ram\": \"🐏\",\n\t\"goat\": \"🐐\",\n\t\"sheep\": \"🐑\",\n\t\"monkey\": \"🐒\",\n\t\"rooster\": \"🐓\",\n\t\"chicken\": \"🐔\",\n\t\"dog2\": \"🐕\",\n\t\"pig2\": \"🐖\",\n\t\"boar\": \"🐗\",\n\t\"elephant\": \"🐘\",\n\t\"octopus\": \"🐙\",\n\t\"shell\": \"🐚\",\n\t\"bug\": \"🐛\",\n\t\"ant\": \"🐜\",\n\t\"bee\": \"🐝\",\n\t\"beetle\": \"🐞\",\n\t\"fish\": \"🐟\",\n\t\"tropical_fish\": \"🐠\",\n\t\"blowfish\": \"🐡\",\n\t\"turtle\": \"🐢\",\n\t\"hatching_chick\": \"🐣\",\n\t\"baby_chick\": \"🐤\",\n\t\"hatched_chick\": \"🐥\",\n\t\"bird\": \"🐦\",\n\t\"penguin\": \"🐧\",\n\t\"koala\": \"🐨\",\n\t\"poodle\": \"🐩\",\n\t\"dromedary_camel\": \"🐪\",\n\t\"camel\": \"🐫\",\n\t\"dolphin\": \"🐬\",\n\t\"mouse\": \"🐭\",\n\t\"cow\": \"🐮\",\n\t\"tiger\": \"🐯\",\n\t\"rabbit\": \"🐰\",\n\t\"cat\": \"🐱\",\n\t\"dragon_face\": \"🐲\",\n\t\"whale\": \"🐳\",\n\t\"horse\": \"🐴\",\n\t\"monkey_face\": \"🐵\",\n\t\"dog\": \"🐶\",\n\t\"pig\": \"🐷\",\n\t\"frog\": \"🐸\",\n\t\"hamster\": \"🐹\",\n\t\"wolf\": \"🐺\",\n\t\"bear\": \"🐻\",\n\t\"panda_face\": \"🐼\",\n\t\"pig_nose\": \"🐽\",\n\t\"feet\": \"🐾\",\n\t\"chipmunk\": \"🐿️\",\n\t\"eyes\": \"👀\",\n\t\"eye-in-speech-bubble\": \"👁️‍🗨️\",\n\t\"eye\": \"👁️\",\n\t\"ear\": \"👂\",\n\t\"nose\": \"👃\",\n\t\"lips\": \"👄\",\n\t\"tongue\": \"👅\",\n\t\"point_up_2\": \"👆\",\n\t\"point_down\": \"👇\",\n\t\"point_left\": \"👈\",\n\t\"point_right\": \"👉\",\n\t\"facepunch\": \"👊\",\n\t\"wave\": \"👋\",\n\t\"ok_hand\": \"👌\",\n\t\"+1\": \"👍\",\n\t\"-1\": \"👎\",\n\t\"clap\": \"👏\",\n\t\"open_hands\": \"👐\",\n\t\"crown\": \"👑\",\n\t\"womans_hat\": \"👒\",\n\t\"eyeglasses\": \"👓\",\n\t\"necktie\": \"👔\",\n\t\"shirt\": \"👕\",\n\t\"jeans\": \"👖\",\n\t\"dress\": \"👗\",\n\t\"kimono\": \"👘\",\n\t\"bikini\": \"👙\",\n\t\"womans_clothes\": \"👚\",\n\t\"purse\": \"👛\",\n\t\"handbag\": \"👜\",\n\t\"pouch\": \"👝\",\n\t\"mans_shoe\": \"👞\",\n\t\"athletic_shoe\": \"👟\",\n\t\"high_heel\": \"👠\",\n\t\"sandal\": \"👡\",\n\t\"boot\": \"👢\",\n\t\"footprints\": \"👣\",\n\t\"bust_in_silhouette\": \"👤\",\n\t\"busts_in_silhouette\": \"👥\",\n\t\"boy\": \"👦\",\n\t\"girl\": \"👧\",\n\t\"male-farmer\": \"👨‍🌾\",\n\t\"male-cook\": \"👨‍🍳\",\n\t\"male-student\": \"👨‍🎓\",\n\t\"male-singer\": \"👨‍🎤\",\n\t\"male-artist\": \"👨‍🎨\",\n\t\"male-teacher\": \"👨‍🏫\",\n\t\"male-factory-worker\": \"👨‍🏭\",\n\t\"man-boy-boy\": \"👨‍👦‍👦\",\n\t\"man-boy\": \"👨‍👦\",\n\t\"man-girl-boy\": \"👨‍👧‍👦\",\n\t\"man-girl-girl\": \"👨‍👧‍👧\",\n\t\"man-girl\": \"👨‍👧\",\n\t\"man-man-boy\": \"👨‍👨‍👦\",\n\t\"man-man-boy-boy\": \"👨‍👨‍👦‍👦\",\n\t\"man-man-girl\": \"👨‍👨‍👧\",\n\t\"man-man-girl-boy\": \"👨‍👨‍👧‍👦\",\n\t\"man-man-girl-girl\": \"👨‍👨‍👧‍👧\",\n\t\"man-woman-boy\": \"👨‍👩‍👦\",\n\t\"man-woman-boy-boy\": \"👨‍👩‍👦‍👦\",\n\t\"man-woman-girl\": \"👨‍👩‍👧\",\n\t\"man-woman-girl-boy\": \"👨‍👩‍👧‍👦\",\n\t\"man-woman-girl-girl\": \"👨‍👩‍👧‍👧\",\n\t\"male-technologist\": \"👨‍💻\",\n\t\"male-office-worker\": \"👨‍💼\",\n\t\"male-mechanic\": \"👨‍🔧\",\n\t\"male-scientist\": \"👨‍🔬\",\n\t\"male-astronaut\": \"👨‍🚀\",\n\t\"male-firefighter\": \"👨‍🚒\",\n\t\"male-doctor\": \"👨‍⚕️\",\n\t\"male-judge\": \"👨‍⚖️\",\n\t\"male-pilot\": \"👨‍✈️\",\n\t\"man-heart-man\": \"👨‍❤️‍👨\",\n\t\"man-kiss-man\": \"👨‍❤️‍💋‍👨\",\n\t\"man\": \"👨\",\n\t\"female-farmer\": \"👩‍🌾\",\n\t\"female-cook\": \"👩‍🍳\",\n\t\"female-student\": \"👩‍🎓\",\n\t\"female-singer\": \"👩‍🎤\",\n\t\"female-artist\": \"👩‍🎨\",\n\t\"female-teacher\": \"👩‍🏫\",\n\t\"female-factory-worker\": \"👩‍🏭\",\n\t\"woman-boy-boy\": \"👩‍👦‍👦\",\n\t\"woman-boy\": \"👩‍👦\",\n\t\"woman-girl-boy\": \"👩‍👧‍👦\",\n\t\"woman-girl-girl\": \"👩‍👧‍👧\",\n\t\"woman-girl\": \"👩‍👧\",\n\t\"woman-woman-boy\": \"👩‍👩‍👦\",\n\t\"woman-woman-boy-boy\": \"👩‍👩‍👦‍👦\",\n\t\"woman-woman-girl\": \"👩‍👩‍👧\",\n\t\"woman-woman-girl-boy\": \"👩‍👩‍👧‍👦\",\n\t\"woman-woman-girl-girl\": \"👩‍👩‍👧‍👧\",\n\t\"female-technologist\": \"👩‍💻\",\n\t\"female-office-worker\": \"👩‍💼\",\n\t\"female-mechanic\": \"👩‍🔧\",\n\t\"female-scientist\": \"👩‍🔬\",\n\t\"female-astronaut\": \"👩‍🚀\",\n\t\"female-firefighter\": \"👩‍🚒\",\n\t\"female-doctor\": \"👩‍⚕️\",\n\t\"female-judge\": \"👩‍⚖️\",\n\t\"female-pilot\": \"👩‍✈️\",\n\t\"woman-heart-man\": \"👩‍❤️‍👨\",\n\t\"woman-heart-woman\": \"👩‍❤️‍👩\",\n\t\"woman-kiss-man\": \"👩‍❤️‍💋‍👨\",\n\t\"woman-kiss-woman\": \"👩‍❤️‍💋‍👩\",\n\t\"woman\": \"👩\",\n\t\"family\": \"👪\",\n\t\"couple\": \"👫\",\n\t\"two_men_holding_hands\": \"👬\",\n\t\"two_women_holding_hands\": \"👭\",\n\t\"female-police-officer\": \"👮‍♀️\",\n\t\"male-police-officer\": \"👮‍♂️\",\n\t\"cop\": \"👮\",\n\t\"woman-with-bunny-ears-partying\": \"👯‍♀️\",\n\t\"man-with-bunny-ears-partying\": \"👯‍♂️\",\n\t\"dancers\": \"👯\",\n\t\"bride_with_veil\": \"👰\",\n\t\"blond-haired-woman\": \"👱‍♀️\",\n\t\"blond-haired-man\": \"👱‍♂️\",\n\t\"person_with_blond_hair\": \"👱\",\n\t\"man_with_gua_pi_mao\": \"👲\",\n\t\"woman-wearing-turban\": \"👳‍♀️\",\n\t\"man-wearing-turban\": \"👳‍♂️\",\n\t\"man_with_turban\": \"👳\",\n\t\"older_man\": \"👴\",\n\t\"older_woman\": \"👵\",\n\t\"baby\": \"👶\",\n\t\"female-construction-worker\": \"👷‍♀️\",\n\t\"male-construction-worker\": \"👷‍♂️\",\n\t\"construction_worker\": \"👷\",\n\t\"princess\": \"👸\",\n\t\"japanese_ogre\": \"👹\",\n\t\"japanese_goblin\": \"👺\",\n\t\"ghost\": \"👻\",\n\t\"angel\": \"👼\",\n\t\"alien\": \"👽\",\n\t\"space_invader\": \"👾\",\n\t\"imp\": \"👿\",\n\t\"skull\": \"💀\",\n\t\"woman-tipping-hand\": \"💁‍♀️\",\n\t\"man-tipping-hand\": \"💁‍♂️\",\n\t\"information_desk_person\": \"💁\",\n\t\"female-guard\": \"💂‍♀️\",\n\t\"male-guard\": \"💂‍♂️\",\n\t\"guardsman\": \"💂\",\n\t\"dancer\": \"💃\",\n\t\"lipstick\": \"💄\",\n\t\"nail_care\": \"💅\",\n\t\"woman-getting-massage\": \"💆‍♀️\",\n\t\"man-getting-massage\": \"💆‍♂️\",\n\t\"massage\": \"💆\",\n\t\"woman-getting-haircut\": \"💇‍♀️\",\n\t\"man-getting-haircut\": \"💇‍♂️\",\n\t\"haircut\": \"💇\",\n\t\"barber\": \"💈\",\n\t\"syringe\": \"💉\",\n\t\"pill\": \"💊\",\n\t\"kiss\": \"💋\",\n\t\"love_letter\": \"💌\",\n\t\"ring\": \"💍\",\n\t\"gem\": \"💎\",\n\t\"couplekiss\": \"💏\",\n\t\"bouquet\": \"💐\",\n\t\"couple_with_heart\": \"💑\",\n\t\"wedding\": \"💒\",\n\t\"heartbeat\": \"💓\",\n\t\"broken_heart\": \"💔\",\n\t\"two_hearts\": \"💕\",\n\t\"sparkling_heart\": \"💖\",\n\t\"heartpulse\": \"💗\",\n\t\"cupid\": \"💘\",\n\t\"blue_heart\": \"💙\",\n\t\"green_heart\": \"💚\",\n\t\"yellow_heart\": \"💛\",\n\t\"purple_heart\": \"💜\",\n\t\"gift_heart\": \"💝\",\n\t\"revolving_hearts\": \"💞\",\n\t\"heart_decoration\": \"💟\",\n\t\"diamond_shape_with_a_dot_inside\": \"💠\",\n\t\"bulb\": \"💡\",\n\t\"anger\": \"💢\",\n\t\"bomb\": \"💣\",\n\t\"zzz\": \"💤\",\n\t\"boom\": \"💥\",\n\t\"sweat_drops\": \"💦\",\n\t\"droplet\": \"💧\",\n\t\"dash\": \"💨\",\n\t\"hankey\": \"💩\",\n\t\"muscle\": \"💪\",\n\t\"dizzy\": \"💫\",\n\t\"speech_balloon\": \"💬\",\n\t\"thought_balloon\": \"💭\",\n\t\"white_flower\": \"💮\",\n\t\"100\": \"💯\",\n\t\"moneybag\": \"💰\",\n\t\"currency_exchange\": \"💱\",\n\t\"heavy_dollar_sign\": \"💲\",\n\t\"credit_card\": \"💳\",\n\t\"yen\": \"💴\",\n\t\"dollar\": \"💵\",\n\t\"euro\": \"💶\",\n\t\"pound\": \"💷\",\n\t\"money_with_wings\": \"💸\",\n\t\"chart\": \"💹\",\n\t\"seat\": \"💺\",\n\t\"computer\": \"💻\",\n\t\"briefcase\": \"💼\",\n\t\"minidisc\": \"💽\",\n\t\"floppy_disk\": \"💾\",\n\t\"cd\": \"💿\",\n\t\"dvd\": \"📀\",\n\t\"file_folder\": \"📁\",\n\t\"open_file_folder\": \"📂\",\n\t\"page_with_curl\": \"📃\",\n\t\"page_facing_up\": \"📄\",\n\t\"date\": \"📅\",\n\t\"calendar\": \"📆\",\n\t\"card_index\": \"📇\",\n\t\"chart_with_upwards_trend\": \"📈\",\n\t\"chart_with_downwards_trend\": \"📉\",\n\t\"bar_chart\": \"📊\",\n\t\"clipboard\": \"📋\",\n\t\"pushpin\": \"📌\",\n\t\"round_pushpin\": \"📍\",\n\t\"paperclip\": \"📎\",\n\t\"straight_ruler\": \"📏\",\n\t\"triangular_ruler\": \"📐\",\n\t\"bookmark_tabs\": \"📑\",\n\t\"ledger\": \"📒\",\n\t\"notebook\": \"📓\",\n\t\"notebook_with_decorative_cover\": \"📔\",\n\t\"closed_book\": \"📕\",\n\t\"book\": \"📖\",\n\t\"green_book\": \"📗\",\n\t\"blue_book\": \"📘\",\n\t\"orange_book\": \"📙\",\n\t\"books\": \"📚\",\n\t\"name_badge\": \"📛\",\n\t\"scroll\": \"📜\",\n\t\"memo\": \"📝\",\n\t\"telephone_receiver\": \"📞\",\n\t\"pager\": \"📟\",\n\t\"fax\": \"📠\",\n\t\"satellite_antenna\": \"📡\",\n\t\"loudspeaker\": \"📢\",\n\t\"mega\": \"📣\",\n\t\"outbox_tray\": \"📤\",\n\t\"inbox_tray\": \"📥\",\n\t\"package\": \"📦\",\n\t\"e-mail\": \"📧\",\n\t\"incoming_envelope\": \"📨\",\n\t\"envelope_with_arrow\": \"📩\",\n\t\"mailbox_closed\": \"📪\",\n\t\"mailbox\": \"📫\",\n\t\"mailbox_with_mail\": \"📬\",\n\t\"mailbox_with_no_mail\": \"📭\",\n\t\"postbox\": \"📮\",\n\t\"postal_horn\": \"📯\",\n\t\"newspaper\": \"📰\",\n\t\"iphone\": \"📱\",\n\t\"calling\": \"📲\",\n\t\"vibration_mode\": \"📳\",\n\t\"mobile_phone_off\": \"📴\",\n\t\"no_mobile_phones\": \"📵\",\n\t\"signal_strength\": \"📶\",\n\t\"camera\": \"📷\",\n\t\"camera_with_flash\": \"📸\",\n\t\"video_camera\": \"📹\",\n\t\"tv\": \"📺\",\n\t\"radio\": \"📻\",\n\t\"vhs\": \"📼\",\n\t\"film_projector\": \"📽️\",\n\t\"prayer_beads\": \"📿\",\n\t\"twisted_rightwards_arrows\": \"🔀\",\n\t\"repeat\": \"🔁\",\n\t\"repeat_one\": \"🔂\",\n\t\"arrows_clockwise\": \"🔃\",\n\t\"arrows_counterclockwise\": \"🔄\",\n\t\"low_brightness\": \"🔅\",\n\t\"high_brightness\": \"🔆\",\n\t\"mute\": \"🔇\",\n\t\"speaker\": \"🔈\",\n\t\"sound\": \"🔉\",\n\t\"loud_sound\": \"🔊\",\n\t\"battery\": \"🔋\",\n\t\"electric_plug\": \"🔌\",\n\t\"mag\": \"🔍\",\n\t\"mag_right\": \"🔎\",\n\t\"lock_with_ink_pen\": \"🔏\",\n\t\"closed_lock_with_key\": \"🔐\",\n\t\"key\": \"🔑\",\n\t\"lock\": \"🔒\",\n\t\"unlock\": \"🔓\",\n\t\"bell\": \"🔔\",\n\t\"no_bell\": \"🔕\",\n\t\"bookmark\": \"🔖\",\n\t\"link\": \"🔗\",\n\t\"radio_button\": \"🔘\",\n\t\"back\": \"🔙\",\n\t\"end\": \"🔚\",\n\t\"on\": \"🔛\",\n\t\"soon\": \"🔜\",\n\t\"top\": \"🔝\",\n\t\"underage\": \"🔞\",\n\t\"keycap_ten\": \"🔟\",\n\t\"capital_abcd\": \"🔠\",\n\t\"abcd\": \"🔡\",\n\t\"1234\": \"🔢\",\n\t\"symbols\": \"🔣\",\n\t\"abc\": \"🔤\",\n\t\"fire\": \"🔥\",\n\t\"flashlight\": \"🔦\",\n\t\"wrench\": \"🔧\",\n\t\"hammer\": \"🔨\",\n\t\"nut_and_bolt\": \"🔩\",\n\t\"hocho\": \"🔪\",\n\t\"gun\": \"🔫\",\n\t\"microscope\": \"🔬\",\n\t\"telescope\": \"🔭\",\n\t\"crystal_ball\": \"🔮\",\n\t\"six_pointed_star\": \"🔯\",\n\t\"beginner\": \"🔰\",\n\t\"trident\": \"🔱\",\n\t\"black_square_button\": \"🔲\",\n\t\"white_square_button\": \"🔳\",\n\t\"red_circle\": \"🔴\",\n\t\"large_blue_circle\": \"🔵\",\n\t\"large_orange_diamond\": \"🔶\",\n\t\"large_blue_diamond\": \"🔷\",\n\t\"small_orange_diamond\": \"🔸\",\n\t\"small_blue_diamond\": \"🔹\",\n\t\"small_red_triangle\": \"🔺\",\n\t\"small_red_triangle_down\": \"🔻\",\n\t\"arrow_up_small\": \"🔼\",\n\t\"arrow_down_small\": \"🔽\",\n\t\"om_symbol\": \"🕉️\",\n\t\"dove_of_peace\": \"🕊️\",\n\t\"kaaba\": \"🕋\",\n\t\"mosque\": \"🕌\",\n\t\"synagogue\": \"🕍\",\n\t\"menorah_with_nine_branches\": \"🕎\",\n\t\"clock1\": \"🕐\",\n\t\"clock2\": \"🕑\",\n\t\"clock3\": \"🕒\",\n\t\"clock4\": \"🕓\",\n\t\"clock5\": \"🕔\",\n\t\"clock6\": \"🕕\",\n\t\"clock7\": \"🕖\",\n\t\"clock8\": \"🕗\",\n\t\"clock9\": \"🕘\",\n\t\"clock10\": \"🕙\",\n\t\"clock11\": \"🕚\",\n\t\"clock12\": \"🕛\",\n\t\"clock130\": \"🕜\",\n\t\"clock230\": \"🕝\",\n\t\"clock330\": \"🕞\",\n\t\"clock430\": \"🕟\",\n\t\"clock530\": \"🕠\",\n\t\"clock630\": \"🕡\",\n\t\"clock730\": \"🕢\",\n\t\"clock830\": \"🕣\",\n\t\"clock930\": \"🕤\",\n\t\"clock1030\": \"🕥\",\n\t\"clock1130\": \"🕦\",\n\t\"clock1230\": \"🕧\",\n\t\"candle\": \"🕯️\",\n\t\"mantelpiece_clock\": \"🕰️\",\n\t\"hole\": \"🕳️\",\n\t\"man_in_business_suit_levitating\": \"🕴️\",\n\t\"female-detective\": \"🕵️‍♀️\",\n\t\"male-detective\": \"🕵️‍♂️\",\n\t\"sleuth_or_spy\": \"🕵️\",\n\t\"dark_sunglasses\": \"🕶️\",\n\t\"spider\": \"🕷️\",\n\t\"spider_web\": \"🕸️\",\n\t\"joystick\": \"🕹️\",\n\t\"man_dancing\": \"🕺\",\n\t\"linked_paperclips\": \"🖇️\",\n\t\"lower_left_ballpoint_pen\": \"🖊️\",\n\t\"lower_left_fountain_pen\": \"🖋️\",\n\t\"lower_left_paintbrush\": \"🖌️\",\n\t\"lower_left_crayon\": \"🖍️\",\n\t\"raised_hand_with_fingers_splayed\": \"🖐️\",\n\t\"middle_finger\": \"🖕\",\n\t\"spock-hand\": \"🖖\",\n\t\"black_heart\": \"🖤\",\n\t\"desktop_computer\": \"🖥️\",\n\t\"printer\": \"🖨️\",\n\t\"three_button_mouse\": \"🖱️\",\n\t\"trackball\": \"🖲️\",\n\t\"frame_with_picture\": \"🖼️\",\n\t\"card_index_dividers\": \"🗂️\",\n\t\"card_file_box\": \"🗃️\",\n\t\"file_cabinet\": \"🗄️\",\n\t\"wastebasket\": \"🗑️\",\n\t\"spiral_note_pad\": \"🗒️\",\n\t\"spiral_calendar_pad\": \"🗓️\",\n\t\"compression\": \"🗜️\",\n\t\"old_key\": \"🗝️\",\n\t\"rolled_up_newspaper\": \"🗞️\",\n\t\"dagger_knife\": \"🗡️\",\n\t\"speaking_head_in_silhouette\": \"🗣️\",\n\t\"left_speech_bubble\": \"🗨️\",\n\t\"right_anger_bubble\": \"🗯️\",\n\t\"ballot_box_with_ballot\": \"🗳️\",\n\t\"world_map\": \"🗺️\",\n\t\"mount_fuji\": \"🗻\",\n\t\"tokyo_tower\": \"🗼\",\n\t\"statue_of_liberty\": \"🗽\",\n\t\"japan\": \"🗾\",\n\t\"moyai\": \"🗿\",\n\t\"grinning\": \"😀\",\n\t\"grin\": \"😁\",\n\t\"joy\": \"😂\",\n\t\"smiley\": \"😃\",\n\t\"smile\": \"😄\",\n\t\"sweat_smile\": \"😅\",\n\t\"laughing\": \"😆\",\n\t\"innocent\": \"😇\",\n\t\"smiling_imp\": \"😈\",\n\t\"wink\": \"😉\",\n\t\"blush\": \"😊\",\n\t\"yum\": \"😋\",\n\t\"relieved\": \"😌\",\n\t\"heart_eyes\": \"😍\",\n\t\"sunglasses\": \"😎\",\n\t\"smirk\": \"😏\",\n\t\"neutral_face\": \"😐\",\n\t\"expressionless\": \"😑\",\n\t\"unamused\": \"😒\",\n\t\"sweat\": \"😓\",\n\t\"pensive\": \"😔\",\n\t\"confused\": \"😕\",\n\t\"confounded\": \"😖\",\n\t\"kissing\": \"😗\",\n\t\"kissing_heart\": \"😘\",\n\t\"kissing_smiling_eyes\": \"😙\",\n\t\"kissing_closed_eyes\": \"😚\",\n\t\"stuck_out_tongue\": \"😛\",\n\t\"stuck_out_tongue_winking_eye\": \"😜\",\n\t\"stuck_out_tongue_closed_eyes\": \"😝\",\n\t\"disappointed\": \"😞\",\n\t\"worried\": \"😟\",\n\t\"angry\": \"😠\",\n\t\"rage\": \"😡\",\n\t\"cry\": \"😢\",\n\t\"persevere\": \"😣\",\n\t\"triumph\": \"😤\",\n\t\"disappointed_relieved\": \"😥\",\n\t\"frowning\": \"😦\",\n\t\"anguished\": \"😧\",\n\t\"fearful\": \"😨\",\n\t\"weary\": \"😩\",\n\t\"sleepy\": \"😪\",\n\t\"tired_face\": \"😫\",\n\t\"grimacing\": \"😬\",\n\t\"sob\": \"😭\",\n\t\"open_mouth\": \"😮\",\n\t\"hushed\": \"😯\",\n\t\"cold_sweat\": \"😰\",\n\t\"scream\": \"😱\",\n\t\"astonished\": \"😲\",\n\t\"flushed\": \"😳\",\n\t\"sleeping\": \"😴\",\n\t\"dizzy_face\": \"😵\",\n\t\"no_mouth\": \"😶\",\n\t\"mask\": \"😷\",\n\t\"smile_cat\": \"😸\",\n\t\"joy_cat\": \"😹\",\n\t\"smiley_cat\": \"😺\",\n\t\"heart_eyes_cat\": \"😻\",\n\t\"smirk_cat\": \"😼\",\n\t\"kissing_cat\": \"😽\",\n\t\"pouting_cat\": \"😾\",\n\t\"crying_cat_face\": \"😿\",\n\t\"scream_cat\": \"🙀\",\n\t\"slightly_frowning_face\": \"🙁\",\n\t\"slightly_smiling_face\": \"🙂\",\n\t\"upside_down_face\": \"🙃\",\n\t\"face_with_rolling_eyes\": \"🙄\",\n\t\"woman-gesturing-no\": \"🙅‍♀️\",\n\t\"man-gesturing-no\": \"🙅‍♂️\",\n\t\"no_good\": \"🙅\",\n\t\"woman-gesturing-ok\": \"🙆‍♀️\",\n\t\"man-gesturing-ok\": \"🙆‍♂️\",\n\t\"ok_woman\": \"🙆\",\n\t\"woman-bowing\": \"🙇‍♀️\",\n\t\"man-bowing\": \"🙇‍♂️\",\n\t\"bow\": \"🙇\",\n\t\"see_no_evil\": \"🙈\",\n\t\"hear_no_evil\": \"🙉\",\n\t\"speak_no_evil\": \"🙊\",\n\t\"woman-raising-hand\": \"🙋‍♀️\",\n\t\"man-raising-hand\": \"🙋‍♂️\",\n\t\"raising_hand\": \"🙋\",\n\t\"raised_hands\": \"🙌\",\n\t\"woman-frowning\": \"🙍‍♀️\",\n\t\"man-frowning\": \"🙍‍♂️\",\n\t\"person_frowning\": \"🙍\",\n\t\"woman-pouting\": \"🙎‍♀️\",\n\t\"man-pouting\": \"🙎‍♂️\",\n\t\"person_with_pouting_face\": \"🙎\",\n\t\"pray\": \"🙏\",\n\t\"rocket\": \"🚀\",\n\t\"helicopter\": \"🚁\",\n\t\"steam_locomotive\": \"🚂\",\n\t\"railway_car\": \"🚃\",\n\t\"bullettrain_side\": \"🚄\",\n\t\"bullettrain_front\": \"🚅\",\n\t\"train2\": \"🚆\",\n\t\"metro\": \"🚇\",\n\t\"light_rail\": \"🚈\",\n\t\"station\": \"🚉\",\n\t\"tram\": \"🚊\",\n\t\"train\": \"🚋\",\n\t\"bus\": \"🚌\",\n\t\"oncoming_bus\": \"🚍\",\n\t\"trolleybus\": \"🚎\",\n\t\"busstop\": \"🚏\",\n\t\"minibus\": \"🚐\",\n\t\"ambulance\": \"🚑\",\n\t\"fire_engine\": \"🚒\",\n\t\"police_car\": \"🚓\",\n\t\"oncoming_police_car\": \"🚔\",\n\t\"taxi\": \"🚕\",\n\t\"oncoming_taxi\": \"🚖\",\n\t\"car\": \"🚗\",\n\t\"oncoming_automobile\": \"🚘\",\n\t\"blue_car\": \"🚙\",\n\t\"truck\": \"🚚\",\n\t\"articulated_lorry\": \"🚛\",\n\t\"tractor\": \"🚜\",\n\t\"monorail\": \"🚝\",\n\t\"mountain_railway\": \"🚞\",\n\t\"suspension_railway\": \"🚟\",\n\t\"mountain_cableway\": \"🚠\",\n\t\"aerial_tramway\": \"🚡\",\n\t\"ship\": \"🚢\",\n\t\"woman-rowing-boat\": \"🚣‍♀️\",\n\t\"man-rowing-boat\": \"🚣‍♂️\",\n\t\"rowboat\": \"🚣\",\n\t\"speedboat\": \"🚤\",\n\t\"traffic_light\": \"🚥\",\n\t\"vertical_traffic_light\": \"🚦\",\n\t\"construction\": \"🚧\",\n\t\"rotating_light\": \"🚨\",\n\t\"triangular_flag_on_post\": \"🚩\",\n\t\"door\": \"🚪\",\n\t\"no_entry_sign\": \"🚫\",\n\t\"smoking\": \"🚬\",\n\t\"no_smoking\": \"🚭\",\n\t\"put_litter_in_its_place\": \"🚮\",\n\t\"do_not_litter\": \"🚯\",\n\t\"potable_water\": \"🚰\",\n\t\"non-potable_water\": \"🚱\",\n\t\"bike\": \"🚲\",\n\t\"no_bicycles\": \"🚳\",\n\t\"woman-biking\": \"🚴‍♀️\",\n\t\"man-biking\": \"🚴‍♂️\",\n\t\"bicyclist\": \"🚴\",\n\t\"woman-mountain-biking\": \"🚵‍♀️\",\n\t\"man-mountain-biking\": \"🚵‍♂️\",\n\t\"mountain_bicyclist\": \"🚵\",\n\t\"woman-walking\": \"🚶‍♀️\",\n\t\"man-walking\": \"🚶‍♂️\",\n\t\"walking\": \"🚶\",\n\t\"no_pedestrians\": \"🚷\",\n\t\"children_crossing\": \"🚸\",\n\t\"mens\": \"🚹\",\n\t\"womens\": \"🚺\",\n\t\"restroom\": \"🚻\",\n\t\"baby_symbol\": \"🚼\",\n\t\"toilet\": \"🚽\",\n\t\"wc\": \"🚾\",\n\t\"shower\": \"🚿\",\n\t\"bath\": \"🛀\",\n\t\"bathtub\": \"🛁\",\n\t\"passport_control\": \"🛂\",\n\t\"customs\": \"🛃\",\n\t\"baggage_claim\": \"🛄\",\n\t\"left_luggage\": \"🛅\",\n\t\"couch_and_lamp\": \"🛋️\",\n\t\"sleeping_accommodation\": \"🛌\",\n\t\"shopping_bags\": \"🛍️\",\n\t\"bellhop_bell\": \"🛎️\",\n\t\"bed\": \"🛏️\",\n\t\"place_of_worship\": \"🛐\",\n\t\"octagonal_sign\": \"🛑\",\n\t\"shopping_trolley\": \"🛒\",\n\t\"hammer_and_wrench\": \"🛠️\",\n\t\"shield\": \"🛡️\",\n\t\"oil_drum\": \"🛢️\",\n\t\"motorway\": \"🛣️\",\n\t\"railway_track\": \"🛤️\",\n\t\"motor_boat\": \"🛥️\",\n\t\"small_airplane\": \"🛩️\",\n\t\"airplane_departure\": \"🛫\",\n\t\"airplane_arriving\": \"🛬\",\n\t\"satellite\": \"🛰️\",\n\t\"passenger_ship\": \"🛳️\",\n\t\"scooter\": \"🛴\",\n\t\"motor_scooter\": \"🛵\",\n\t\"canoe\": \"🛶\",\n\t\"sled\": \"🛷\",\n\t\"flying_saucer\": \"🛸\",\n\t\"zipper_mouth_face\": \"🤐\",\n\t\"money_mouth_face\": \"🤑\",\n\t\"face_with_thermometer\": \"🤒\",\n\t\"nerd_face\": \"🤓\",\n\t\"thinking_face\": \"🤔\",\n\t\"face_with_head_bandage\": \"🤕\",\n\t\"robot_face\": \"🤖\",\n\t\"hugging_face\": \"🤗\",\n\t\"the_horns\": \"🤘\",\n\t\"call_me_hand\": \"🤙\",\n\t\"raised_back_of_hand\": \"🤚\",\n\t\"left-facing_fist\": \"🤛\",\n\t\"right-facing_fist\": \"🤜\",\n\t\"handshake\": \"🤝\",\n\t\"crossed_fingers\": \"🤞\",\n\t\"i_love_you_hand_sign\": \"🤟\",\n\t\"face_with_cowboy_hat\": \"🤠\",\n\t\"clown_face\": \"🤡\",\n\t\"nauseated_face\": \"🤢\",\n\t\"rolling_on_the_floor_laughing\": \"🤣\",\n\t\"drooling_face\": \"🤤\",\n\t\"lying_face\": \"🤥\",\n\t\"woman-facepalming\": \"🤦‍♀️\",\n\t\"man-facepalming\": \"🤦‍♂️\",\n\t\"face_palm\": \"🤦\",\n\t\"sneezing_face\": \"🤧\",\n\t\"face_with_raised_eyebrow\": \"🤨\",\n\t\"star-struck\": \"🤩\",\n\t\"zany_face\": \"🤪\",\n\t\"shushing_face\": \"🤫\",\n\t\"face_with_symbols_on_mouth\": \"🤬\",\n\t\"face_with_hand_over_mouth\": \"🤭\",\n\t\"face_vomiting\": \"🤮\",\n\t\"exploding_head\": \"🤯\",\n\t\"pregnant_woman\": \"🤰\",\n\t\"breast-feeding\": \"🤱\",\n\t\"palms_up_together\": \"🤲\",\n\t\"selfie\": \"🤳\",\n\t\"prince\": \"🤴\",\n\t\"man_in_tuxedo\": \"🤵\",\n\t\"mrs_claus\": \"🤶\",\n\t\"woman-shrugging\": \"🤷‍♀️\",\n\t\"man-shrugging\": \"🤷‍♂️\",\n\t\"shrug\": \"🤷\",\n\t\"woman-cartwheeling\": \"🤸‍♀️\",\n\t\"man-cartwheeling\": \"🤸‍♂️\",\n\t\"person_doing_cartwheel\": \"🤸\",\n\t\"woman-juggling\": \"🤹‍♀️\",\n\t\"man-juggling\": \"🤹‍♂️\",\n\t\"juggling\": \"🤹\",\n\t\"fencer\": \"🤺\",\n\t\"woman-wrestling\": \"🤼‍♀️\",\n\t\"man-wrestling\": \"🤼‍♂️\",\n\t\"wrestlers\": \"🤼\",\n\t\"woman-playing-water-polo\": \"🤽‍♀️\",\n\t\"man-playing-water-polo\": \"🤽‍♂️\",\n\t\"water_polo\": \"🤽\",\n\t\"woman-playing-handball\": \"🤾‍♀️\",\n\t\"man-playing-handball\": \"🤾‍♂️\",\n\t\"handball\": \"🤾\",\n\t\"wilted_flower\": \"🥀\",\n\t\"drum_with_drumsticks\": \"🥁\",\n\t\"clinking_glasses\": \"🥂\",\n\t\"tumbler_glass\": \"🥃\",\n\t\"spoon\": \"🥄\",\n\t\"goal_net\": \"🥅\",\n\t\"first_place_medal\": \"🥇\",\n\t\"second_place_medal\": \"🥈\",\n\t\"third_place_medal\": \"🥉\",\n\t\"boxing_glove\": \"🥊\",\n\t\"martial_arts_uniform\": \"🥋\",\n\t\"curling_stone\": \"🥌\",\n\t\"croissant\": \"🥐\",\n\t\"avocado\": \"🥑\",\n\t\"cucumber\": \"🥒\",\n\t\"bacon\": \"🥓\",\n\t\"potato\": \"🥔\",\n\t\"carrot\": \"🥕\",\n\t\"baguette_bread\": \"🥖\",\n\t\"green_salad\": \"🥗\",\n\t\"shallow_pan_of_food\": \"🥘\",\n\t\"stuffed_flatbread\": \"🥙\",\n\t\"egg\": \"🥚\",\n\t\"glass_of_milk\": \"🥛\",\n\t\"peanuts\": \"🥜\",\n\t\"kiwifruit\": \"🥝\",\n\t\"pancakes\": \"🥞\",\n\t\"dumpling\": \"🥟\",\n\t\"fortune_cookie\": \"🥠\",\n\t\"takeout_box\": \"🥡\",\n\t\"chopsticks\": \"🥢\",\n\t\"bowl_with_spoon\": \"🥣\",\n\t\"cup_with_straw\": \"🥤\",\n\t\"coconut\": \"🥥\",\n\t\"broccoli\": \"🥦\",\n\t\"pie\": \"🥧\",\n\t\"pretzel\": \"🥨\",\n\t\"cut_of_meat\": \"🥩\",\n\t\"sandwich\": \"🥪\",\n\t\"canned_food\": \"🥫\",\n\t\"crab\": \"🦀\",\n\t\"lion_face\": \"🦁\",\n\t\"scorpion\": \"🦂\",\n\t\"turkey\": \"🦃\",\n\t\"unicorn_face\": \"🦄\",\n\t\"eagle\": \"🦅\",\n\t\"duck\": \"🦆\",\n\t\"bat\": \"🦇\",\n\t\"shark\": \"🦈\",\n\t\"owl\": \"🦉\",\n\t\"fox_face\": \"🦊\",\n\t\"butterfly\": \"🦋\",\n\t\"deer\": \"🦌\",\n\t\"gorilla\": \"🦍\",\n\t\"lizard\": \"🦎\",\n\t\"rhinoceros\": \"🦏\",\n\t\"shrimp\": \"🦐\",\n\t\"squid\": \"🦑\",\n\t\"giraffe_face\": \"🦒\",\n\t\"zebra_face\": \"🦓\",\n\t\"hedgehog\": \"🦔\",\n\t\"sauropod\": \"🦕\",\n\t\"t-rex\": \"🦖\",\n\t\"cricket\": \"🦗\",\n\t\"cheese_wedge\": \"🧀\",\n\t\"face_with_monocle\": \"🧐\",\n\t\"adult\": \"🧑\",\n\t\"child\": \"🧒\",\n\t\"older_adult\": \"🧓\",\n\t\"bearded_person\": \"🧔\",\n\t\"person_with_headscarf\": \"🧕\",\n\t\"woman_in_steamy_room\": \"🧖‍♀️\",\n\t\"man_in_steamy_room\": \"🧖‍♂️\",\n\t\"person_in_steamy_room\": \"🧖\",\n\t\"woman_climbing\": \"🧗‍♀️\",\n\t\"man_climbing\": \"🧗‍♂️\",\n\t\"person_climbing\": \"🧗\",\n\t\"woman_in_lotus_position\": \"🧘‍♀️\",\n\t\"man_in_lotus_position\": \"🧘‍♂️\",\n\t\"person_in_lotus_position\": \"🧘\",\n\t\"female_mage\": \"🧙‍♀️\",\n\t\"male_mage\": \"🧙‍♂️\",\n\t\"mage\": \"🧙\",\n\t\"female_fairy\": \"🧚‍♀️\",\n\t\"male_fairy\": \"🧚‍♂️\",\n\t\"fairy\": \"🧚\",\n\t\"female_vampire\": \"🧛‍♀️\",\n\t\"male_vampire\": \"🧛‍♂️\",\n\t\"vampire\": \"🧛\",\n\t\"mermaid\": \"🧜‍♀️\",\n\t\"merman\": \"🧜‍♂️\",\n\t\"merperson\": \"🧜\",\n\t\"female_elf\": \"🧝‍♀️\",\n\t\"male_elf\": \"🧝‍♂️\",\n\t\"elf\": \"🧝\",\n\t\"female_genie\": \"🧞‍♀️\",\n\t\"male_genie\": \"🧞‍♂️\",\n\t\"genie\": \"🧞\",\n\t\"female_zombie\": \"🧟‍♀️\",\n\t\"male_zombie\": \"🧟‍♂️\",\n\t\"zombie\": \"🧟\",\n\t\"brain\": \"🧠\",\n\t\"orange_heart\": \"🧡\",\n\t\"billed_cap\": \"🧢\",\n\t\"scarf\": \"🧣\",\n\t\"gloves\": \"🧤\",\n\t\"coat\": \"🧥\",\n\t\"socks\": \"🧦\",\n\t\"bangbang\": \"‼️\",\n\t\"interrobang\": \"⁉️\",\n\t\"tm\": \"™️\",\n\t\"information_source\": \"ℹ️\",\n\t\"left_right_arrow\": \"↔️\",\n\t\"arrow_up_down\": \"↕️\",\n\t\"arrow_upper_left\": \"↖️\",\n\t\"arrow_upper_right\": \"↗️\",\n\t\"arrow_lower_right\": \"↘️\",\n\t\"arrow_lower_left\": \"↙️\",\n\t\"leftwards_arrow_with_hook\": \"↩️\",\n\t\"arrow_right_hook\": \"↪️\",\n\t\"watch\": \"⌚\",\n\t\"hourglass\": \"⌛\",\n\t\"keyboard\": \"⌨️\",\n\t\"eject\": \"⏏️\",\n\t\"fast_forward\": \"⏩\",\n\t\"rewind\": \"⏪\",\n\t\"arrow_double_up\": \"⏫\",\n\t\"arrow_double_down\": \"⏬\",\n\t\"black_right_pointing_double_triangle_with_vertical_bar\": \"⏭️\",\n\t\"black_left_pointing_double_triangle_with_vertical_bar\": \"⏮️\",\n\t\"black_right_pointing_triangle_with_double_vertical_bar\": \"⏯️\",\n\t\"alarm_clock\": \"⏰\",\n\t\"stopwatch\": \"⏱️\",\n\t\"timer_clock\": \"⏲️\",\n\t\"hourglass_flowing_sand\": \"⏳\",\n\t\"double_vertical_bar\": \"⏸️\",\n\t\"black_square_for_stop\": \"⏹️\",\n\t\"black_circle_for_record\": \"⏺️\",\n\t\"m\": \"Ⓜ️\",\n\t\"black_small_square\": \"▪️\",\n\t\"white_small_square\": \"▫️\",\n\t\"arrow_forward\": \"▶️\",\n\t\"arrow_backward\": \"◀️\",\n\t\"white_medium_square\": \"◻️\",\n\t\"black_medium_square\": \"◼️\",\n\t\"white_medium_small_square\": \"◽\",\n\t\"black_medium_small_square\": \"◾\",\n\t\"sunny\": \"☀️\",\n\t\"cloud\": \"☁️\",\n\t\"umbrella\": \"☂️\",\n\t\"snowman\": \"☃️\",\n\t\"comet\": \"☄️\",\n\t\"phone\": \"☎️\",\n\t\"ballot_box_with_check\": \"☑️\",\n\t\"umbrella_with_rain_drops\": \"☔\",\n\t\"coffee\": \"☕\",\n\t\"shamrock\": \"☘️\",\n\t\"point_up\": \"☝️\",\n\t\"skull_and_crossbones\": \"☠️\",\n\t\"radioactive_sign\": \"☢️\",\n\t\"biohazard_sign\": \"☣️\",\n\t\"orthodox_cross\": \"☦️\",\n\t\"star_and_crescent\": \"☪️\",\n\t\"peace_symbol\": \"☮️\",\n\t\"yin_yang\": \"☯️\",\n\t\"wheel_of_dharma\": \"☸️\",\n\t\"white_frowning_face\": \"☹️\",\n\t\"relaxed\": \"☺️\",\n\t\"female_sign\": \"♀️\",\n\t\"male_sign\": \"♂️\",\n\t\"aries\": \"♈\",\n\t\"taurus\": \"♉\",\n\t\"gemini\": \"♊\",\n\t\"cancer\": \"♋\",\n\t\"leo\": \"♌\",\n\t\"virgo\": \"♍\",\n\t\"libra\": \"♎\",\n\t\"scorpius\": \"♏\",\n\t\"sagittarius\": \"♐\",\n\t\"capricorn\": \"♑\",\n\t\"aquarius\": \"♒\",\n\t\"pisces\": \"♓\",\n\t\"spades\": \"♠️\",\n\t\"clubs\": \"♣️\",\n\t\"hearts\": \"♥️\",\n\t\"diamonds\": \"♦️\",\n\t\"hotsprings\": \"♨️\",\n\t\"recycle\": \"♻️\",\n\t\"wheelchair\": \"♿\",\n\t\"hammer_and_pick\": \"⚒️\",\n\t\"anchor\": \"⚓\",\n\t\"crossed_swords\": \"⚔️\",\n\t\"medical_symbol\": \"⚕️\",\n\t\"scales\": \"⚖️\",\n\t\"alembic\": \"⚗️\",\n\t\"gear\": \"⚙️\",\n\t\"atom_symbol\": \"⚛️\",\n\t\"fleur_de_lis\": \"⚜️\",\n\t\"warning\": \"⚠️\",\n\t\"zap\": \"⚡\",\n\t\"white_circle\": \"⚪\",\n\t\"black_circle\": \"⚫\",\n\t\"coffin\": \"⚰️\",\n\t\"funeral_urn\": \"⚱️\",\n\t\"soccer\": \"⚽\",\n\t\"baseball\": \"⚾\",\n\t\"snowman_without_snow\": \"⛄\",\n\t\"partly_sunny\": \"⛅\",\n\t\"thunder_cloud_and_rain\": \"⛈️\",\n\t\"ophiuchus\": \"⛎\",\n\t\"pick\": \"⛏️\",\n\t\"helmet_with_white_cross\": \"⛑️\",\n\t\"chains\": \"⛓️\",\n\t\"no_entry\": \"⛔\",\n\t\"shinto_shrine\": \"⛩️\",\n\t\"church\": \"⛪\",\n\t\"mountain\": \"⛰️\",\n\t\"umbrella_on_ground\": \"⛱️\",\n\t\"fountain\": \"⛲\",\n\t\"golf\": \"⛳\",\n\t\"ferry\": \"⛴️\",\n\t\"boat\": \"⛵\",\n\t\"skier\": \"⛷️\",\n\t\"ice_skate\": \"⛸️\",\n\t\"woman-bouncing-ball\": \"⛹️‍♀️\",\n\t\"man-bouncing-ball\": \"⛹️‍♂️\",\n\t\"person_with_ball\": \"⛹️\",\n\t\"tent\": \"⛺\",\n\t\"fuelpump\": \"⛽\",\n\t\"scissors\": \"✂️\",\n\t\"white_check_mark\": \"✅\",\n\t\"airplane\": \"✈️\",\n\t\"email\": \"✉️\",\n\t\"fist\": \"✊\",\n\t\"hand\": \"✋\",\n\t\"v\": \"✌️\",\n\t\"writing_hand\": \"✍️\",\n\t\"pencil2\": \"✏️\",\n\t\"black_nib\": \"✒️\",\n\t\"heavy_check_mark\": \"✔️\",\n\t\"heavy_multiplication_x\": \"✖️\",\n\t\"latin_cross\": \"✝️\",\n\t\"star_of_david\": \"✡️\",\n\t\"sparkles\": \"✨\",\n\t\"eight_spoked_asterisk\": \"✳️\",\n\t\"eight_pointed_black_star\": \"✴️\",\n\t\"snowflake\": \"❄️\",\n\t\"sparkle\": \"❇️\",\n\t\"x\": \"❌\",\n\t\"negative_squared_cross_mark\": \"❎\",\n\t\"question\": \"❓\",\n\t\"grey_question\": \"❔\",\n\t\"grey_exclamation\": \"❕\",\n\t\"exclamation\": \"❗\",\n\t\"heavy_heart_exclamation_mark_ornament\": \"❣️\",\n\t\"heart\": \"❤️\",\n\t\"heavy_plus_sign\": \"➕\",\n\t\"heavy_minus_sign\": \"➖\",\n\t\"heavy_division_sign\": \"➗\",\n\t\"arrow_right\": \"➡️\",\n\t\"curly_loop\": \"➰\",\n\t\"loop\": \"➿\",\n\t\"arrow_heading_up\": \"⤴️\",\n\t\"arrow_heading_down\": \"⤵️\",\n\t\"arrow_left\": \"⬅️\",\n\t\"arrow_up\": \"⬆️\",\n\t\"arrow_down\": \"⬇️\",\n\t\"black_large_square\": \"⬛\",\n\t\"white_large_square\": \"⬜\",\n\t\"star\": \"⭐\",\n\t\"o\": \"⭕\",\n\t\"wavy_dash\": \"〰️\",\n\t\"part_alternation_mark\": \"〽️\",\n\t\"congratulations\": \"㊗️\",\n\t\"secret\": \"㊙️\",\n};\n","// @flow\n\n/**\n * The type of the Redux action which signals that a suspend was detected.\n *\n * {\n *     type: SUSPEND_DETECTED\n * }\n * @public\n */\nexport const SUSPEND_DETECTED = 'SUSPEND_DETECTED';\n\n/**\n * The type of the Redux action which signals that a transport needs to be stored.\n *\n * {\n *     type: SET_TRANSPORT\n * }\n * @public\n */\nexport const SET_TRANSPORT = 'SET_TRANSPORT';\n","// @flow\n\nimport {\n    SET_TRANSPORT,\n    SUSPEND_DETECTED\n} from './actionTypes';\nimport { Transport } from '../../../modules/transport';\n\n/**\n * Signals that suspend was detected.\n *\n * @public\n * @returns {{\n *     type: SUSPEND_DETECTED\n * }}\n */\nexport function suspendDetected() {\n    return {\n        type: SUSPEND_DETECTED\n    };\n}\n\n/**\n * Signals setting of a transport.\n *\n * @param {Transport} transport - The transport to save in the state.\n * @returns {{\n *      transport: Transport,\n *      type: string\n *  }}\n */\nexport function setTransport(transport: ?Transport) {\n    return {\n        type: SET_TRANSPORT,\n        transport\n    };\n}\n","// @flow\n\nimport {\n    setTransport,\n    suspendDetected\n} from './actions';\nimport { SUSPEND_DETECTED } from './actionTypes';\n\nimport {\n    CONFERENCE_JOINED,\n    CONFERENCE_LEFT\n} from '../base/conference';\nimport { MiddlewareRegistry } from '../base/redux';\nimport {\n    PostMessageTransportBackend,\n    Transport\n} from '../../../modules/transport';\nimport { destroyLocalTracks } from '../base/tracks';\n\ndeclare var APP: Object;\n\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n    const { dispatch, getState } = store;\n\n    switch (action.type) {\n    case CONFERENCE_JOINED: {\n\n        // listens for messages about suspend from power-monitor\n        const transport = new Transport({\n            backend: new PostMessageTransportBackend({\n                postisOptions: { scope: 'jitsi-power-monitor' }\n            })\n        });\n\n        transport.on('event', event => {\n            if (event && event.name === 'power-monitor' && event.event === 'suspend') {\n\n                dispatch(suspendDetected());\n\n                return true;\n            }\n\n            return false;\n        });\n\n        dispatch(setTransport(transport));\n        break;\n    }\n\n    case CONFERENCE_LEFT: {\n        const { transport } = getState()['features/power-monitor'];\n\n        if (transport) {\n            transport.dispose();\n        }\n\n        dispatch(setTransport());\n        break;\n    }\n\n    case SUSPEND_DETECTED: {\n        dispatch(destroyLocalTracks());\n\n        // FIXME: when refactoring conference.js\n        APP.conference.onSuspendDetected();\n\n        APP.API.notifySuspendDetected();\n        break;\n    }\n    }\n\n    return result;\n});\n","// @flow\n\nimport { ReducerRegistry, set } from '../base/redux';\nimport { Transport } from '../../../modules/transport';\n\nimport {\n    SET_TRANSPORT,\n    SUSPEND_DETECTED\n} from './actionTypes';\n\n/**\n * Reduces the redux actions of the feature power monitor.\n */\nReducerRegistry.register('features/power-monitor', (state = { }, action) => {\n    switch (action.type) {\n    case SET_TRANSPORT:\n        return _setTransport(state, action.transport);\n\n    case SUSPEND_DETECTED:\n        return _suspendDetected(state);\n\n    }\n\n    return state;\n});\n\n/**\n * Reduces a specific redux action SET_TRANSPORT of the feature power monitor.\n *\n * @param {Object} state - The redux state of the feature power monitor.\n * @param {?Transport} transport - The transport to store in state.\n * @private\n * @returns {Object} The new state of the feature power monitor after the reduction of\n * the specified action.\n */\nfunction _setTransport(state, transport: ?Transport) {\n    return set(state, 'transport', transport);\n}\n\n/**\n * Reduces a specific redux action SUSPEND_DETECTED of the feature overlay.\n *\n * @param {Object} state - The redux state of the feature overlay.\n * @private\n * @returns {Object} The new state of the feature overlay after the reduction of\n * the specified action.\n */\nfunction _suspendDetected(state) {\n    return set(state, 'suspendDetected', true);\n}\n\n","// @flow\n\nexport * from './actions';\nexport * from './actionTypes';\n\nimport './middleware';\nimport './reducer';\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n  'use strict';\n\n  var ERROR = 'input is invalid type';\n  var WINDOW = typeof window === 'object';\n  var root = WINDOW ? window : {};\n  if (root.JS_MD5_NO_WINDOW) {\n    WINDOW = false;\n  }\n  var WEB_WORKER = !WINDOW && typeof self === 'object';\n  var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n  if (NODE_JS) {\n    root = global;\n  } else if (WEB_WORKER) {\n    root = self;\n  }\n  var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n  var AMD = typeof define === 'function' && define.amd;\n  var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n  var HEX_CHARS = '0123456789abcdef'.split('');\n  var EXTRA = [128, 32768, 8388608, -2147483648];\n  var SHIFT = [0, 8, 16, 24];\n  var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n  var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n  var blocks = [], buffer8;\n  if (ARRAY_BUFFER) {\n    var buffer = new ArrayBuffer(68);\n    buffer8 = new Uint8Array(buffer);\n    blocks = new Uint32Array(buffer);\n  }\n\n  if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n    Array.isArray = function (obj) {\n      return Object.prototype.toString.call(obj) === '[object Array]';\n    };\n  }\n\n  if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n    ArrayBuffer.isView = function (obj) {\n      return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n    };\n  }\n\n  /**\n   * @method hex\n   * @memberof md5\n   * @description Output hash as hex string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} Hex string\n   * @example\n   * md5.hex('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * md5('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method digest\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.digest('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method array\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.array('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method arrayBuffer\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.buffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method base64\n   * @memberof md5\n   * @description Output hash as base64 string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} base64 string\n   * @example\n   * md5.base64('The quick brown fox jumps over the lazy dog');\n   */\n  var createOutputMethod = function (outputType) {\n    return function (message) {\n      return new Md5(true).update(message)[outputType]();\n    };\n  };\n\n  /**\n   * @method create\n   * @memberof md5\n   * @description Create Md5 object\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.create();\n   */\n  /**\n   * @method update\n   * @memberof md5\n   * @description Create and update Md5 object\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * var hash = md5.create();\n   * hash.update('The quick brown fox jumps over the lazy dog');\n   */\n  var createMethod = function () {\n    var method = createOutputMethod('hex');\n    if (NODE_JS) {\n      method = nodeWrap(method);\n    }\n    method.create = function () {\n      return new Md5();\n    };\n    method.update = function (message) {\n      return method.create().update(message);\n    };\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createOutputMethod(type);\n    }\n    return method;\n  };\n\n  var nodeWrap = function (method) {\n    var crypto = eval(\"require('crypto')\");\n    var Buffer = eval(\"require('buffer').Buffer\");\n    var nodeMethod = function (message) {\n      if (typeof message === 'string') {\n        return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n      } else {\n        if (message === null || message === undefined) {\n          throw ERROR;\n        } else if (message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        }\n      }\n      if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n        message.constructor === Buffer) {\n        return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n      } else {\n        return method(message);\n      }\n    };\n    return nodeMethod;\n  };\n\n  /**\n   * Md5 class\n   * @class Md5\n   * @description This is internal class.\n   * @see {@link md5.create}\n   */\n  function Md5(sharedMemory) {\n    if (sharedMemory) {\n      blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      this.blocks = blocks;\n      this.buffer8 = buffer8;\n    } else {\n      if (ARRAY_BUFFER) {\n        var buffer = new ArrayBuffer(68);\n        this.buffer8 = new Uint8Array(buffer);\n        this.blocks = new Uint32Array(buffer);\n      } else {\n        this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n      }\n    }\n    this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n    this.finalized = this.hashed = false;\n    this.first = true;\n  }\n\n  /**\n   * @method update\n   * @memberof Md5\n   * @instance\n   * @description Update hash\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @see {@link md5.update}\n   */\n  Md5.prototype.update = function (message) {\n    if (this.finalized) {\n      return;\n    }\n\n    var notString, type = typeof message;\n    if (type !== 'string') {\n      if (type === 'object') {\n        if (message === null) {\n          throw ERROR;\n        } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        } else if (!Array.isArray(message)) {\n          if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n            throw ERROR;\n          }\n        }\n      } else {\n        throw ERROR;\n      }\n      notString = true;\n    }\n    var code, index = 0, i, length = message.length, blocks = this.blocks;\n    var buffer8 = this.buffer8;\n\n    while (index < length) {\n      if (this.hashed) {\n        this.hashed = false;\n        blocks[0] = blocks[16];\n        blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n        blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n        blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n        blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      }\n\n      if (notString) {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            buffer8[i++] = message[index];\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n          }\n        }\n      } else {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              buffer8[i++] = code;\n            } else if (code < 0x800) {\n              buffer8[i++] = 0xc0 | (code >> 6);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else if (code < 0xd800 || code >= 0xe000) {\n              buffer8[i++] = 0xe0 | (code >> 12);\n              buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              buffer8[i++] = 0xf0 | (code >> 18);\n              buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n              buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            }\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              blocks[i >> 2] |= code << SHIFT[i++ & 3];\n            } else if (code < 0x800) {\n              blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else if (code < 0xd800 || code >= 0xe000) {\n              blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            }\n          }\n        }\n      }\n      this.lastByteIndex = i;\n      this.bytes += i - this.start;\n      if (i >= 64) {\n        this.start = i - 64;\n        this.hash();\n        this.hashed = true;\n      } else {\n        this.start = i;\n      }\n    }\n    if (this.bytes > 4294967295) {\n      this.hBytes += this.bytes / 4294967296 << 0;\n      this.bytes = this.bytes % 4294967296;\n    }\n    return this;\n  };\n\n  Md5.prototype.finalize = function () {\n    if (this.finalized) {\n      return;\n    }\n    this.finalized = true;\n    var blocks = this.blocks, i = this.lastByteIndex;\n    blocks[i >> 2] |= EXTRA[i & 3];\n    if (i >= 56) {\n      if (!this.hashed) {\n        this.hash();\n      }\n      blocks[0] = blocks[16];\n      blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n    }\n    blocks[14] = this.bytes << 3;\n    blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n    this.hash();\n  };\n\n  Md5.prototype.hash = function () {\n    var a, b, c, d, bc, da, blocks = this.blocks;\n\n    if (this.first) {\n      a = blocks[0] - 680876937;\n      a = (a << 7 | a >>> 25) - 271733879 << 0;\n      d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n      b = (b << 22 | b >>> 10) + c << 0;\n    } else {\n      a = this.h0;\n      b = this.h1;\n      c = this.h2;\n      d = this.h3;\n      a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n      a = (a << 7 | a >>> 25) + b << 0;\n      d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n      b = (b << 22 | b >>> 10) + c << 0;\n    }\n\n    a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n    b = (b << 20 | b >>> 12) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[5] - 378558;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[8] - 2022574463;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[11] + 1839030562;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[14] - 35309556;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[1] - 1530992060;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[4] + 1272893353;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[7] - 155497632;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[10] - 1094730640;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[13] + 681279174;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[0] - 358537222;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[3] - 722521979;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[6] + 76029189;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[9] - 640364487;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[12] - 421815835;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[15] + 530742520;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[2] - 995338651;\n    b = (b << 23 | b >>> 9) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n    b = (b << 21 | b >>> 11) + c << 0;\n\n    if (this.first) {\n      this.h0 = a + 1732584193 << 0;\n      this.h1 = b - 271733879 << 0;\n      this.h2 = c - 1732584194 << 0;\n      this.h3 = d + 271733878 << 0;\n      this.first = false;\n    } else {\n      this.h0 = this.h0 + a << 0;\n      this.h1 = this.h1 + b << 0;\n      this.h2 = this.h2 + c << 0;\n      this.h3 = this.h3 + d << 0;\n    }\n  };\n\n  /**\n   * @method hex\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.hex();\n   */\n  Md5.prototype.hex = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n    return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n      HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n      HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n      HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n      HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n      HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n      HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n      HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n      HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n      HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n      HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n      HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n      HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n      HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n      HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n      HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n  };\n\n  /**\n   * @method toString\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.toString();\n   */\n  Md5.prototype.toString = Md5.prototype.hex;\n\n  /**\n   * @method digest\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.digest}\n   * @example\n   * hash.digest();\n   */\n  Md5.prototype.digest = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n    return [\n      h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n      h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n      h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n      h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n    ];\n  };\n\n  /**\n   * @method array\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.array}\n   * @example\n   * hash.array();\n   */\n  Md5.prototype.array = Md5.prototype.digest;\n\n  /**\n   * @method arrayBuffer\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.arrayBuffer}\n   * @example\n   * hash.arrayBuffer();\n   */\n  Md5.prototype.arrayBuffer = function () {\n    this.finalize();\n\n    var buffer = new ArrayBuffer(16);\n    var blocks = new Uint32Array(buffer);\n    blocks[0] = this.h0;\n    blocks[1] = this.h1;\n    blocks[2] = this.h2;\n    blocks[3] = this.h3;\n    return buffer;\n  };\n\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.buffer}\n   * @example\n   * hash.buffer();\n   */\n  Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n  /**\n   * @method base64\n   * @memberof Md5\n   * @instance\n   * @description Output hash as base64 string\n   * @returns {String} base64 string\n   * @see {@link md5.base64}\n   * @example\n   * hash.base64();\n   */\n  Md5.prototype.base64 = function () {\n    var v1, v2, v3, base64Str = '', bytes = this.array();\n    for (var i = 0; i < 15;) {\n      v1 = bytes[i++];\n      v2 = bytes[i++];\n      v3 = bytes[i++];\n      base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n        BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n        BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n        BASE64_ENCODE_CHAR[v3 & 63];\n    }\n    v1 = bytes[i];\n    base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n      BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n      '==';\n    return base64Str;\n  };\n\n  var exports = createMethod();\n\n  if (COMMON_JS) {\n    module.exports = exports;\n  } else {\n    /**\n     * @method md5\b\n     * @description Md5 hash function, export to global in browsers.\n     * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n     * @returns {String} md5 hashes\n     * @example\n     * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n     * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n     * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n     *\n     * // It also supports UTF-8 encoding\n     * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n     *\n     * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n     * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n     * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n     */\n    root.md5 = exports;\n    if (AMD) {\n      define(function () {\n        return exports;\n      });\n    }\n  }\n})();\n","'use strict';\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar ReactIs = require('react-is');\nvar REACT_STATICS = {\n    childContextTypes: true,\n    contextType: true,\n    contextTypes: true,\n    defaultProps: true,\n    displayName: true,\n    getDefaultProps: true,\n    getDerivedStateFromError: true,\n    getDerivedStateFromProps: true,\n    mixins: true,\n    propTypes: true,\n    type: true\n};\n\nvar KNOWN_STATICS = {\n    name: true,\n    length: true,\n    prototype: true,\n    caller: true,\n    callee: true,\n    arguments: true,\n    arity: true\n};\n\nvar FORWARD_REF_STATICS = {\n    '$$typeof': true,\n    render: true,\n    defaultProps: true,\n    displayName: true,\n    propTypes: true\n};\n\nvar MEMO_STATICS = {\n    '$$typeof': true,\n    compare: true,\n    defaultProps: true,\n    displayName: true,\n    propTypes: true,\n    type: true\n};\n\nvar TYPE_STATICS = {};\nTYPE_STATICS[ReactIs.ForwardRef] = FORWARD_REF_STATICS;\n\nfunction getStatics(component) {\n    if (ReactIs.isMemo(component)) {\n        return MEMO_STATICS;\n    }\n    return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n    if (typeof sourceComponent !== 'string') {\n        // don't hoist over string (html) components\n\n        if (objectPrototype) {\n            var inheritedComponent = getPrototypeOf(sourceComponent);\n            if (inheritedComponent && inheritedComponent !== objectPrototype) {\n                hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n            }\n        }\n\n        var keys = getOwnPropertyNames(sourceComponent);\n\n        if (getOwnPropertySymbols) {\n            keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n        }\n\n        var targetStatics = getStatics(targetComponent);\n        var sourceStatics = getStatics(sourceComponent);\n\n        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n                var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n                try {\n                    // Avoid failures from read-only properties\n                    defineProperty(targetComponent, key, descriptor);\n                } catch (e) {}\n            }\n        }\n\n        return targetComponent;\n    }\n\n    return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n  root = self;\n} else if (typeof window !== 'undefined') {\n  root = window;\n} else if (typeof global !== 'undefined') {\n  root = global;\n} else if (typeof module !== 'undefined') {\n  root = module;\n} else {\n  root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","/*\n *          __        ___\n *    _____/ /___  __/ (_)____\n *   / ___/ __/ / / / / / ___/\n *  (__  ) /_/ /_/ / / (__  )\n * /____/\\__/\\__, /_/_/____/\n *          /____/\n *\n * light - weight css preprocessor @licence MIT\n */\n(function (factory) {/* eslint-disable */\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? (module['exports'] = factory(null)) :\n\t\ttypeof define === 'function' && define['amd'] ? define(factory(null)) :\n\t\t\t(window['stylis'] = factory(null))\n}(/** @param {*=} options */function factory (options) {/* eslint-disable */\n\n\t'use strict'\n\n\t/**\n\t * Notes\n\t *\n\t * The ['<method name>'] pattern is used to support closure compiler\n\t * the jsdoc signatures are also used to the same effect\n\t *\n\t * ----\n\t *\n\t * int + int + int === n4 [faster]\n\t *\n\t * vs\n\t *\n\t * int === n1 && int === n2 && int === n3\n\t *\n\t * ----\n\t *\n\t * switch (int) { case ints...} [faster]\n\t *\n\t * vs\n\t *\n\t * if (int == 1 && int === 2 ...)\n\t *\n\t * ----\n\t *\n\t * The (first*n1 + second*n2 + third*n3) format used in the property parser\n\t * is a simple way to hash the sequence of characters\n\t * taking into account the index they occur in\n\t * since any number of 3 character sequences could produce duplicates.\n\t *\n\t * On the other hand sequences that are directly tied to the index of the character\n\t * resolve a far more accurate measure, it's also faster\n\t * to evaluate one condition in a switch statement\n\t * than three in an if statement regardless of the added math.\n\t *\n\t * This allows the vendor prefixer to be both small and fast.\n\t */\n\n\tvar nullptn = /^\\0+/g /* matches leading null characters */\n\tvar formatptn = /[\\0\\r\\f]/g /* matches new line, null and formfeed characters */\n\tvar colonptn = /: */g /* splits animation rules */\n\tvar cursorptn = /zoo|gra/ /* assert cursor varient */\n\tvar transformptn = /([,: ])(transform)/g /* vendor prefix transform, older webkit */\n\tvar animationptn = /,+\\s*(?![^(]*[)])/g /* splits multiple shorthand notation animations */\n\tvar propertiesptn = / +\\s*(?![^(]*[)])/g /* animation properties */\n\tvar elementptn = / *[\\0] */g /* selector elements */\n\tvar selectorptn = /,\\r+?/g /* splits selectors */\n\tvar andptn = /([\\t\\r\\n ])*\\f?&/g /* match & */\n\tvar escapeptn = /:global\\(((?:[^\\(\\)\\[\\]]*|\\[.*\\]|\\([^\\(\\)]*\\))*)\\)/g /* matches :global(.*) */\n\tvar invalidptn = /\\W+/g /* removes invalid characters from keyframes */\n\tvar keyframeptn = /@(k\\w+)\\s*(\\S*)\\s*/ /* matches @keyframes $1 */\n\tvar plcholdrptn = /::(place)/g /* match ::placeholder varient */\n\tvar readonlyptn = /:(read-only)/g /* match :read-only varient */\n\tvar beforeptn = /\\s+(?=[{\\];=:>])/g /* matches \\s before ] ; = : */\n\tvar afterptn = /([[}=:>])\\s+/g /* matches \\s after characters [ } = : */\n\tvar tailptn = /(\\{[^{]+?);(?=\\})/g /* matches tail semi-colons ;} */\n\tvar whiteptn = /\\s{2,}/g /* matches repeating whitespace */\n\tvar pseudoptn = /([^\\(])(:+) */g /* pseudo element */\n\tvar writingptn = /[svh]\\w+-[tblr]{2}/ /* match writing mode property values */\n\tvar gradientptn = /([\\w-]+t\\()/g /* match *gradient property */\n\tvar supportsptn = /\\(\\s*(.*)\\s*\\)/g /* match supports (groups) */\n\tvar propertyptn = /([\\s\\S]*?);/g /* match properties leading semicolon */\n\tvar selfptn = /-self|flex-/g /* match flex- and -self in align-self: flex-*; */\n\tvar pseudofmt = /[^]*?(:[rp][el]a[\\w-]+)[^]*/ /* extrats :readonly or :placholder from selector */\n\tvar trimptn = /[ \\t]+$/ /* match tail whitspace */\n\tvar dimensionptn = /stretch|:\\s*\\w+\\-(?:conte|avail)/ /* match max/min/fit-content, fill-available */\n\tvar imgsrcptn = /([^-])(image-set\\()/\n\n\t/* vendors */\n\tvar webkit = '-webkit-'\n\tvar moz = '-moz-'\n\tvar ms = '-ms-'\n\n\t/* character codes */\n\tvar SEMICOLON = 59 /* ; */\n\tvar CLOSEBRACES = 125 /* } */\n\tvar OPENBRACES = 123 /* { */\n\tvar OPENPARENTHESES = 40 /* ( */\n\tvar CLOSEPARENTHESES = 41 /* ) */\n\tvar OPENBRACKET = 91 /* [ */\n\tvar CLOSEBRACKET = 93 /* ] */\n\tvar NEWLINE = 10 /* \\n */\n\tvar CARRIAGE = 13 /* \\r */\n\tvar TAB = 9 /* \\t */\n\tvar AT = 64 /* @ */\n\tvar SPACE = 32 /*   */\n\tvar AND = 38 /* & */\n\tvar DASH = 45 /* - */\n\tvar UNDERSCORE = 95 /* _ */\n\tvar STAR = 42 /* * */\n\tvar COMMA = 44 /* , */\n\tvar COLON = 58 /* : */\n\tvar SINGLEQUOTE = 39 /* ' */\n\tvar DOUBLEQUOTE = 34 /* \" */\n\tvar FOWARDSLASH = 47 /* / */\n\tvar GREATERTHAN = 62 /* > */\n\tvar PLUS = 43 /* + */\n\tvar TILDE = 126 /* ~ */\n\tvar NULL = 0 /* \\0 */\n\tvar FORMFEED = 12 /* \\f */\n\tvar VERTICALTAB = 11 /* \\v */\n\n\t/* special identifiers */\n\tvar KEYFRAME = 107 /* k */\n\tvar MEDIA = 109 /* m */\n\tvar SUPPORTS = 115 /* s */\n\tvar PLACEHOLDER = 112 /* p */\n\tvar READONLY = 111 /* o */\n\tvar IMPORT = 105 /* <at>i */\n\tvar CHARSET = 99 /* <at>c */\n\tvar DOCUMENT = 100 /* <at>d */\n\tvar PAGE = 112 /* <at>p */\n\n\tvar column = 1 /* current column */\n\tvar line = 1 /* current line numebr */\n\tvar pattern = 0 /* :pattern */\n\n\tvar cascade = 1 /* #id h1 h2 vs h1#id h2#id  */\n\tvar prefix = 1 /* vendor prefix */\n\tvar escape = 1 /* escape :global() pattern */\n\tvar compress = 0 /* compress output */\n\tvar semicolon = 0 /* no/semicolon option */\n\tvar preserve = 0 /* preserve empty selectors */\n\n\t/* empty reference */\n\tvar array = []\n\n\t/* plugins */\n\tvar plugins = []\n\tvar plugged = 0\n\tvar should = null\n\n\t/* plugin context */\n\tvar POSTS = -2\n\tvar PREPS = -1\n\tvar UNKWN = 0\n\tvar PROPS = 1\n\tvar BLCKS = 2\n\tvar ATRUL = 3\n\n\t/* plugin newline context */\n\tvar unkwn = 0\n\n\t/* keyframe animation */\n\tvar keyed = 1\n\tvar key = ''\n\n\t/* selector namespace */\n\tvar nscopealt = ''\n\tvar nscope = ''\n\n\t/**\n\t * Compile\n\t *\n\t * @param {Array<string>} parent\n\t * @param {Array<string>} current\n\t * @param {string} body\n\t * @param {number} id\n\t * @param {number} depth\n\t * @return {string}\n\t */\n\tfunction compile (parent, current, body, id, depth) {\n\t\tvar bracket = 0 /* brackets [] */\n\t\tvar comment = 0 /* comments /* // or /* */\n\t\tvar parentheses = 0 /* functions () */\n\t\tvar quote = 0 /* quotes '', \"\" */\n\n\t\tvar first = 0 /* first character code */\n\t\tvar second = 0 /* second character code */\n\t\tvar code = 0 /* current character code */\n\t\tvar tail = 0 /* previous character code */\n\t\tvar trail = 0 /* character before previous code */\n\t\tvar peak = 0 /* previous non-whitespace code */\n\n\t\tvar counter = 0 /* count sequence termination */\n\t\tvar context = 0 /* track current context */\n\t\tvar atrule = 0 /* track @at-rule context */\n\t\tvar pseudo = 0 /* track pseudo token index */\n\t\tvar caret = 0 /* current character index */\n\t\tvar format = 0 /* control character formating context */\n\t\tvar insert = 0 /* auto semicolon insertion */\n\t\tvar invert = 0 /* inverted selector pattern */\n\t\tvar length = 0 /* generic length address */\n\t\tvar eof = body.length /* end of file(length) */\n\t\tvar eol = eof - 1 /* end of file(characters) */\n\n\t\tvar char = '' /* current character */\n\t\tvar chars = '' /* current buffer of characters */\n\t\tvar child = '' /* next buffer of characters */\n\t\tvar out = '' /* compiled body */\n\t\tvar children = '' /* compiled children */\n\t\tvar flat = '' /* compiled leafs */\n\t\tvar selector /* generic selector address */\n\t\tvar result /* generic address */\n\n\t\t// ...build body\n\t\twhile (caret < eof) {\n\t\t\tcode = body.charCodeAt(caret)\n\n\t\t\t// eof varient\n\t\t\tif (caret === eol) {\n\t\t\t\t// last character + noop context, add synthetic padding for noop context to terminate\n\t\t\t\tif (comment + quote + parentheses + bracket !== 0) {\n\t\t\t\t\tif (comment !== 0) {\n\t\t\t\t\t\tcode = comment === FOWARDSLASH ? NEWLINE : FOWARDSLASH\n\t\t\t\t\t}\n\n\t\t\t\t\tquote = parentheses = bracket = 0\n\t\t\t\t\teof++\n\t\t\t\t\teol++\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (comment + quote + parentheses + bracket === 0) {\n\t\t\t\t// eof varient\n\t\t\t\tif (caret === eol) {\n\t\t\t\t\tif (format > 0) {\n\t\t\t\t\t\tchars = chars.replace(formatptn, '')\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chars.trim().length > 0) {\n\t\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\t\tcase CARRIAGE:\n\t\t\t\t\t\t\tcase NEWLINE: {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tchars += body.charAt(caret)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcode = SEMICOLON\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// auto semicolon insertion\n\t\t\t\tif (insert === 1) {\n\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t// false flags\n\t\t\t\t\t\tcase OPENBRACES:\n\t\t\t\t\t\tcase CLOSEBRACES:\n\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\tcase SINGLEQUOTE:\n\t\t\t\t\t\tcase OPENPARENTHESES:\n\t\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\t\tcase COMMA: {\n\t\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// ignore\n\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\tcase CARRIAGE:\n\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// valid\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\t\tlength = caret\n\t\t\t\t\t\t\tfirst = code\n\t\t\t\t\t\t\tcaret--\n\t\t\t\t\t\t\tcode = SEMICOLON\n\n\t\t\t\t\t\t\twhile (length < eof) {\n\t\t\t\t\t\t\t\tswitch (body.charCodeAt(length++)) {\n\t\t\t\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\t\t\t\tcase CARRIAGE:\n\t\t\t\t\t\t\t\t\tcase SEMICOLON: {\n\t\t\t\t\t\t\t\t\t\t++caret\n\t\t\t\t\t\t\t\t\t\tcode = first\n\t\t\t\t\t\t\t\t\t\tlength = eof\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcase COLON: {\n\t\t\t\t\t\t\t\t\t\tif (format > 0) {\n\t\t\t\t\t\t\t\t\t\t\t++caret\n\t\t\t\t\t\t\t\t\t\t\tcode = first\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcase OPENBRACES: {\n\t\t\t\t\t\t\t\t\t\tlength = eof\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// token varient\n\t\t\t\tswitch (code) {\n\t\t\t\t\tcase OPENBRACES: {\n\t\t\t\t\t\tchars = chars.trim()\n\t\t\t\t\t\tfirst = chars.charCodeAt(0)\n\t\t\t\t\t\tcounter = 1\n\t\t\t\t\t\tlength = ++caret\n\n\t\t\t\t\t\twhile (caret < eof) {\n\t\t\t\t\t\t\tswitch (code = body.charCodeAt(caret)) {\n\t\t\t\t\t\t\t\tcase OPENBRACES: {\n\t\t\t\t\t\t\t\t\tcounter++\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase CLOSEBRACES: {\n\t\t\t\t\t\t\t\t\tcounter--\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\t\t\t\t\tswitch (second = body.charCodeAt(caret + 1)) {\n\t\t\t\t\t\t\t\t\t\t// /*, //\n\t\t\t\t\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\t\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\t\t\t\t\t\t\tcaret = delimited(second, caret, eol, body)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// given \"[\" === 91 & \"]\" === 93 hence forth 91 + 1 + 1 === 93\n\t\t\t\t\t\t\t\tcase OPENBRACKET: {\n\t\t\t\t\t\t\t\t\tcode++\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// given \"(\" === 40 & \")\" === 41 hence forth 40 + 1 === 41\n\t\t\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\t\t\tcode++\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// quote tail delimiter is identical to the head delimiter hence noop,\n\t\t\t\t\t\t\t\t// fallthrough clauses have been shited to the correct tail delimiter\n\t\t\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\t\t\tcase SINGLEQUOTE: {\n\t\t\t\t\t\t\t\t\twhile (caret++ < eol) {\n\t\t\t\t\t\t\t\t\t\tif (body.charCodeAt(caret) === code) {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (counter === 0) {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcaret++\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchild = body.substring(length, caret)\n\n\t\t\t\t\t\tif (first === NULL) {\n\t\t\t\t\t\t\tfirst = (chars = chars.replace(nullptn, '').trim()).charCodeAt(0)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tswitch (first) {\n\t\t\t\t\t\t\t// @at-rule\n\t\t\t\t\t\t\tcase AT: {\n\t\t\t\t\t\t\t\tif (format > 0) {\n\t\t\t\t\t\t\t\t\tchars = chars.replace(formatptn, '')\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsecond = chars.charCodeAt(1)\n\n\t\t\t\t\t\t\t\tswitch (second) {\n\t\t\t\t\t\t\t\t\tcase DOCUMENT:\n\t\t\t\t\t\t\t\t\tcase MEDIA:\n\t\t\t\t\t\t\t\t\tcase SUPPORTS:\n\t\t\t\t\t\t\t\t\tcase DASH: {\n\t\t\t\t\t\t\t\t\t\tselector = current\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\tselector = array\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tchild = compile(current, selector, child, second, depth+1)\n\t\t\t\t\t\t\t\tlength = child.length\n\n\t\t\t\t\t\t\t\t// preserve empty @at-rule\n\t\t\t\t\t\t\t\tif (preserve > 0 && length === 0) {\n\t\t\t\t\t\t\t\t\tlength = chars.length\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// execute plugins, @at-rule context\n\t\t\t\t\t\t\t\tif (plugged > 0) {\n\t\t\t\t\t\t\t\t\tselector = select(array, chars, invert)\n\t\t\t\t\t\t\t\t\tresult = proxy(ATRUL, child, selector, current, line, column, length, second, depth, id)\n\t\t\t\t\t\t\t\t\tchars = selector.join('')\n\n\t\t\t\t\t\t\t\t\tif (result !== void 0) {\n\t\t\t\t\t\t\t\t\t\tif ((length = (child = result.trim()).length) === 0) {\n\t\t\t\t\t\t\t\t\t\t\tsecond = 0\n\t\t\t\t\t\t\t\t\t\t\tchild = ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (length > 0) {\n\t\t\t\t\t\t\t\t\tswitch (second) {\n\t\t\t\t\t\t\t\t\t\tcase SUPPORTS: {\n\t\t\t\t\t\t\t\t\t\t\tchars = chars.replace(supportsptn, supports)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcase DOCUMENT:\n\t\t\t\t\t\t\t\t\t\tcase MEDIA:\n\t\t\t\t\t\t\t\t\t\tcase DASH: {\n\t\t\t\t\t\t\t\t\t\t\tchild = chars + '{' + child + '}'\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcase KEYFRAME: {\n\t\t\t\t\t\t\t\t\t\t\tchars = chars.replace(keyframeptn, '$1 $2' + (keyed > 0 ? key : ''))\n\t\t\t\t\t\t\t\t\t\t\tchild = chars + '{' + child + '}'\n\n\t\t\t\t\t\t\t\t\t\t\tif (prefix === 1 || (prefix === 2 && vendor('@'+child, 3))) {\n\t\t\t\t\t\t\t\t\t\t\t\tchild = '@' + webkit + child + '@' + child\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tchild = '@' + child\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\tchild = chars + child\n\n\t\t\t\t\t\t\t\t\t\t\tif (id === PAGE) {\n\t\t\t\t\t\t\t\t\t\t\t\tchild = (out += child, '')\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tchild = ''\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// selector\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tchild = compile(current, select(current, chars, invert), child, id, depth+1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchildren += child\n\n\t\t\t\t\t\t// reset\n\t\t\t\t\t\tcontext = 0\n\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\tpseudo = 0\n\t\t\t\t\t\tformat = 0\n\t\t\t\t\t\tinvert = 0\n\t\t\t\t\t\tatrule = 0\n\t\t\t\t\t\tchars = ''\n\t\t\t\t\t\tchild = ''\n\t\t\t\t\t\tcode = body.charCodeAt(++caret)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase CLOSEBRACES:\n\t\t\t\t\tcase SEMICOLON: {\n\t\t\t\t\t\tchars = (format > 0 ? chars.replace(formatptn, '') : chars).trim()\n\n\t\t\t\t\t\tif ((length = chars.length) > 1) {\n\t\t\t\t\t\t\t// monkey-patch missing colon\n\t\t\t\t\t\t\tif (pseudo === 0) {\n\t\t\t\t\t\t\t\tfirst = chars.charCodeAt(0)\n\n\t\t\t\t\t\t\t\t// first character is a letter or dash, buffer has a space character\n\t\t\t\t\t\t\t\tif ((first === DASH || first > 96 && first < 123)) {\n\t\t\t\t\t\t\t\t\tlength = (chars = chars.replace(' ', ':')).length\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// execute plugins, property context\n\t\t\t\t\t\t\tif (plugged > 0) {\n\t\t\t\t\t\t\t\tif ((result = proxy(PROPS, chars, current, parent, line, column, out.length, id, depth, id)) !== void 0) {\n\t\t\t\t\t\t\t\t\tif ((length = (chars = result.trim()).length) === 0) {\n\t\t\t\t\t\t\t\t\t\tchars = '\\0\\0'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfirst = chars.charCodeAt(0)\n\t\t\t\t\t\t\tsecond = chars.charCodeAt(1)\n\n\t\t\t\t\t\t\tswitch (first) {\n\t\t\t\t\t\t\t\tcase NULL: {\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase AT: {\n\t\t\t\t\t\t\t\t\tif (second === IMPORT || second === CHARSET) {\n\t\t\t\t\t\t\t\t\t\tflat += chars + body.charAt(caret)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\tif (chars.charCodeAt(length-1) === COLON) {\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tout += property(chars, first, second, chars.charCodeAt(2))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// reset\n\t\t\t\t\t\tcontext = 0\n\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\tpseudo = 0\n\t\t\t\t\t\tformat = 0\n\t\t\t\t\t\tinvert = 0\n\t\t\t\t\t\tchars = ''\n\t\t\t\t\t\tcode = body.charCodeAt(++caret)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// parse characters\n\t\t\tswitch (code) {\n\t\t\t\tcase CARRIAGE:\n\t\t\t\tcase NEWLINE: {\n\t\t\t\t\t// auto insert semicolon\n\t\t\t\t\tif (comment + quote + parentheses + bracket + semicolon === 0) {\n\t\t\t\t\t\t// valid non-whitespace characters that\n\t\t\t\t\t\t// may precede a newline\n\t\t\t\t\t\tswitch (peak) {\n\t\t\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\t\t\tcase SINGLEQUOTE:\n\t\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\t\tcase AT:\n\t\t\t\t\t\t\tcase TILDE:\n\t\t\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\t\tcase PLUS:\n\t\t\t\t\t\t\tcase FOWARDSLASH:\n\t\t\t\t\t\t\tcase DASH:\n\t\t\t\t\t\t\tcase COLON:\n\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\t\tcase OPENBRACES:\n\t\t\t\t\t\t\tcase CLOSEBRACES: {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t// current buffer has a colon\n\t\t\t\t\t\t\t\tif (pseudo > 0) {\n\t\t\t\t\t\t\t\t\tinsert = 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// terminate line comment\n\t\t\t\t\tif (comment === FOWARDSLASH) {\n\t\t\t\t\t\tcomment = 0\n\t\t\t\t\t} else if (cascade + context === 0 && id !== KEYFRAME && chars.length > 0) {\n\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\tchars += '\\0'\n\t\t\t\t\t}\n\n\t\t\t\t\t// execute plugins, newline context\n\t\t\t\t\tif (plugged * unkwn > 0) {\n\t\t\t\t\t\tproxy(UNKWN, chars, current, parent, line, column, out.length, id, depth, id)\n\t\t\t\t\t}\n\n\t\t\t\t\t// next line, reset column position\n\t\t\t\t\tcolumn = 1\n\t\t\t\t\tline++\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase SEMICOLON:\n\t\t\t\tcase CLOSEBRACES: {\n\t\t\t\t\tif (comment + quote + parentheses + bracket === 0) {\n\t\t\t\t\t\tcolumn++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\t// increment column position\n\t\t\t\t\tcolumn++\n\n\t\t\t\t\t// current character\n\t\t\t\t\tchar = body.charAt(caret)\n\n\t\t\t\t\t// remove comments, escape functions, strings, attributes and prepare selectors\n\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\tif (quote + bracket + comment === 0) {\n\t\t\t\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\t\t\tcase COLON:\n\t\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\t\t\t\tchar = ''\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\tif (code !== SPACE) {\n\t\t\t\t\t\t\t\t\t\t\tchar = ' '\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// escape breaking control characters\n\t\t\t\t\t\tcase NULL: {\n\t\t\t\t\t\t\tchar = '\\\\0'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase FORMFEED: {\n\t\t\t\t\t\t\tchar = '\\\\f'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase VERTICALTAB: {\n\t\t\t\t\t\t\tchar = '\\\\v'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// &\n\t\t\t\t\t\tcase AND: {\n\t\t\t\t\t\t\t// inverted selector pattern i.e html &\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0 && cascade > 0) {\n\t\t\t\t\t\t\t\tinvert = 1\n\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\tchar = '\\f' + char\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// ::p<l>aceholder, l\n\t\t\t\t\t\t// :read-on<l>y, l\n\t\t\t\t\t\tcase 108: {\n\t\t\t\t\t\t\tif (quote + comment + bracket + pattern === 0 && pseudo > 0) {\n\t\t\t\t\t\t\t\tswitch (caret - pseudo) {\n\t\t\t\t\t\t\t\t\t// ::placeholder\n\t\t\t\t\t\t\t\t\tcase 2: {\n\t\t\t\t\t\t\t\t\t\tif (tail === PLACEHOLDER && body.charCodeAt(caret-3) === COLON) {\n\t\t\t\t\t\t\t\t\t\t\tpattern = tail\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// :read-only\n\t\t\t\t\t\t\t\t\tcase 8: {\n\t\t\t\t\t\t\t\t\t\tif (trail === READONLY) {\n\t\t\t\t\t\t\t\t\t\t\tpattern = trail\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// :<pattern>\n\t\t\t\t\t\tcase COLON: {\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0) {\n\t\t\t\t\t\t\t\tpseudo = caret\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// selectors\n\t\t\t\t\t\tcase COMMA: {\n\t\t\t\t\t\t\tif (comment + parentheses + quote + bracket === 0) {\n\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\tchar += '\\r'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// quotes\n\t\t\t\t\t\tcase DOUBLEQUOTE: {\n\t\t\t\t\t\t\tif (comment === 0) {\n\t\t\t\t\t\t\t\tquote = quote === code ? 0 : (quote === 0 ? code : quote)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase SINGLEQUOTE: {\n\t\t\t\t\t\t\tif (comment === 0) {\n\t\t\t\t\t\t\t\tquote = quote === code ? 0 : (quote === 0 ? code : quote)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// attributes\n\t\t\t\t\t\tcase OPENBRACKET: {\n\t\t\t\t\t\t\tif (quote + comment + parentheses === 0) {\n\t\t\t\t\t\t\t\tbracket++\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase CLOSEBRACKET: {\n\t\t\t\t\t\t\tif (quote + comment + parentheses === 0) {\n\t\t\t\t\t\t\t\tbracket--\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// functions\n\t\t\t\t\t\tcase CLOSEPARENTHESES: {\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0) {\n\t\t\t\t\t\t\t\tparentheses--\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0) {\n\t\t\t\t\t\t\t\tif (context === 0) {\n\t\t\t\t\t\t\t\t\tswitch (tail*2 + trail*3) {\n\t\t\t\t\t\t\t\t\t\t// :matches\n\t\t\t\t\t\t\t\t\t\tcase 533: {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// :global, :not, :nth-child etc...\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\tcounter = 0\n\t\t\t\t\t\t\t\t\t\t\tcontext = 1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tparentheses++\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase AT: {\n\t\t\t\t\t\t\tif (comment + parentheses + quote + bracket + pseudo + atrule === 0) {\n\t\t\t\t\t\t\t\tatrule = 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// block/line comments\n\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\t\t\tif (quote + bracket + parentheses > 0) {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tswitch (comment) {\n\t\t\t\t\t\t\t\t// initialize line/block comment context\n\t\t\t\t\t\t\t\tcase 0: {\n\t\t\t\t\t\t\t\t\tswitch (code*2 + body.charCodeAt(caret+1)*3) {\n\t\t\t\t\t\t\t\t\t\t// //\n\t\t\t\t\t\t\t\t\t\tcase 235: {\n\t\t\t\t\t\t\t\t\t\t\tcomment = FOWARDSLASH\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// /*\n\t\t\t\t\t\t\t\t\t\tcase 220: {\n\t\t\t\t\t\t\t\t\t\t\tlength = caret\n\t\t\t\t\t\t\t\t\t\t\tcomment = STAR\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// end block comment context\n\t\t\t\t\t\t\t\tcase STAR: {\n\t\t\t\t\t\t\t\t\tif (code === FOWARDSLASH && tail === STAR && length + 2 !== caret) {\n\t\t\t\t\t\t\t\t\t\t// /*<!> ... */, !\n\t\t\t\t\t\t\t\t\t\tif (body.charCodeAt(length+2) === 33) {\n\t\t\t\t\t\t\t\t\t\t\tout += body.substring(length, caret+1)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tchar = ''\n\t\t\t\t\t\t\t\t\t\tcomment = 0\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// ignore comment blocks\n\t\t\t\t\tif (comment === 0) {\n\t\t\t\t\t\t// aggressive isolation mode, divide each individual selector\n\t\t\t\t\t\t// including selectors in :not function but excluding selectors in :global function\n\t\t\t\t\t\tif (cascade + quote + bracket + atrule === 0 && id !== KEYFRAME && code !== SEMICOLON) {\n\t\t\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\t\tcase TILDE:\n\t\t\t\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\t\t\t\tcase PLUS:\n\t\t\t\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\t\t\tif (context === 0) {\n\t\t\t\t\t\t\t\t\t\t// outside of an isolated context i.e nth-child(<...>)\n\t\t\t\t\t\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\t\t\t\t\t\tcase CARRIAGE: {\n\t\t\t\t\t\t\t\t\t\t\t\tchar = char + '\\0'\n\t\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\t\tchar = '\\0' + char + (code === COMMA ? '' : '\\0')\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// within an isolated context, sleep untill it's terminated\n\t\t\t\t\t\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\t\t\t\t\t\t// :globa<l>(\n\t\t\t\t\t\t\t\t\t\t\t\tif (pseudo + 7 === caret && tail === 108) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpseudo = 0\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tcontext = ++counter\n\t\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tcase CLOSEPARENTHESES: {\n\t\t\t\t\t\t\t\t\t\t\t\tif ((context = --counter) === 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\t\t\t\t\t\tchar += '\\0'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\t\t\t\t\tcase NULL:\n\t\t\t\t\t\t\t\t\t\tcase OPENBRACES:\n\t\t\t\t\t\t\t\t\t\tcase CLOSEBRACES:\n\t\t\t\t\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\t\t\t\tcase FORMFEED:\n\t\t\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\t\t\t\t\tcase CARRIAGE: {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\t// ignore in isolated contexts\n\t\t\t\t\t\t\t\t\t\t\tif (context === 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\t\t\t\t\tchar += '\\0'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// concat buffer of characters\n\t\t\t\t\t\tchars += char\n\n\t\t\t\t\t\t// previous non-whitespace character code\n\t\t\t\t\t\tif (code !== SPACE && code !== TAB) {\n\t\t\t\t\t\t\tpeak = code\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// tail character codes\n\t\t\ttrail = tail\n\t\t\ttail = code\n\n\t\t\t// visit every character\n\t\t\tcaret++\n\t\t}\n\n\t\tlength = out.length\n\n\t\t// preserve empty selector\n \t\tif (preserve > 0) {\n \t\t\tif (length === 0 && children.length === 0 && (current[0].length === 0) === false) {\n \t\t\t\tif (id !== MEDIA || (current.length === 1 && (cascade > 0 ? nscopealt : nscope) === current[0])) {\n\t\t\t\t\tlength = current.join(',').length + 2\n \t\t\t\t}\n \t\t\t}\n\t\t}\n\n\t\tif (length > 0) {\n\t\t\t// cascade isolation mode?\n\t\t\tselector = cascade === 0 && id !== KEYFRAME ? isolate(current) : current\n\n\t\t\t// execute plugins, block context\n\t\t\tif (plugged > 0) {\n\t\t\t\tresult = proxy(BLCKS, out, selector, parent, line, column, length, id, depth, id)\n\n\t\t\t\tif (result !== void 0 && (out = result).length === 0) {\n\t\t\t\t\treturn flat + out + children\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tout = selector.join(',') + '{' + out + '}'\n\n\t\t\tif (prefix*pattern !== 0) {\n\t\t\t\tif (prefix === 2 && !vendor(out, 2))\n\t\t\t\t\tpattern = 0\n\n\t\t\t\tswitch (pattern) {\n\t\t\t\t\t// ::read-only\n\t\t\t\t\tcase READONLY: {\n\t\t\t\t\t\tout = out.replace(readonlyptn, ':'+moz+'$1')+out\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// ::placeholder\n\t\t\t\t\tcase PLACEHOLDER: {\n\t\t\t\t\t\tout = (\n\t\t\t\t\t\t\tout.replace(plcholdrptn, '::' + webkit + 'input-$1') +\n\t\t\t\t\t\t\tout.replace(plcholdrptn, '::' + moz + '$1') +\n\t\t\t\t\t\t\tout.replace(plcholdrptn, ':' + ms + 'input-$1') + out\n\t\t\t\t\t\t)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpattern = 0\n\t\t\t}\n\t\t}\n\n\t\treturn flat + out + children\n\t}\n\n\t/**\n\t * Select\n\t *\n\t * @param {Array<string>} parent\n\t * @param {string} current\n\t * @param {number} invert\n\t * @return {Array<string>}\n\t */\n\tfunction select (parent, current, invert) {\n\t\tvar selectors = current.trim().split(selectorptn)\n\t\tvar out = selectors\n\n\t\tvar length = selectors.length\n\t\tvar l = parent.length\n\n\t\tswitch (l) {\n\t\t\t// 0-1 parent selectors\n\t\t\tcase 0:\n\t\t\tcase 1: {\n\t\t\t\tfor (var i = 0, selector = l === 0 ? '' : parent[0] + ' '; i < length; ++i) {\n\t\t\t\t\tout[i] = scope(selector, out[i], invert, l).trim()\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// >2 parent selectors, nested\n\t\t\tdefault: {\n\t\t\t\tfor (var i = 0, j = 0, out = []; i < length; ++i) {\n\t\t\t\t\tfor (var k = 0; k < l; ++k) {\n\t\t\t\t\t\tout[j++] = scope(parent[k] + ' ', selectors[i], invert, l).trim()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn out\n\t}\n\n\t/**\n\t * Scope\n\t *\n\t * @param {string} parent\n\t * @param {string} current\n\t * @param {number} invert\n\t * @param {number} level\n\t * @return {string}\n\t */\n\tfunction scope (parent, current, invert, level) {\n\t\tvar selector = current\n\t\tvar code = selector.charCodeAt(0)\n\n\t\t// trim leading whitespace\n\t\tif (code < 33) {\n\t\t\tcode = (selector = selector.trim()).charCodeAt(0)\n\t\t}\n\n\t\tswitch (code) {\n\t\t\t// &\n\t\t\tcase AND: {\n\t\t\t\tswitch (cascade + level) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\tcase 1: {\n\t\t\t\t\t\tif (parent.trim().length === 0) {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\treturn selector.replace(andptn, '$1'+parent.trim())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// :\n\t\t\tcase COLON: {\n\t\t\t\tswitch (selector.charCodeAt(1)) {\n\t\t\t\t\t// g in :global\n\t\t\t\t\tcase 103: {\n\t\t\t\t\t\tif (escape > 0 && cascade > 0) {\n\t\t\t\t\t\t\treturn selector.replace(escapeptn, '$1').replace(andptn, '$1'+nscope)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\t// :hover\n\t\t\t\t\t\treturn parent.trim() + selector.replace(andptn, '$1'+parent.trim())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\t// html &\n\t\t\t\tif (invert*cascade > 0 && selector.indexOf('\\f') > 0) {\n\t\t\t\t\treturn selector.replace(andptn, (parent.charCodeAt(0) === COLON ? '' : '$1')+parent.trim())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn parent + selector\n\t}\n\n\t/**\n\t * Property\n\t *\n\t * @param {string} input\n\t * @param {number} first\n\t * @param {number} second\n\t * @param {number} third\n\t * @return {string}\n\t */\n\tfunction property (input, first, second, third) {\n\t\tvar index = 0\n\t\tvar out = input + ';'\n\t\tvar hash = (first*2) + (second*3) + (third*4)\n\t\tvar cache\n\n\t\t// animation: a, n, i characters\n\t\tif (hash === 944) {\n\t\t\treturn animation(out)\n\t\t} else if (prefix === 0 || (prefix === 2 && !vendor(out, 1))) {\n\t\t\treturn out\n\t\t}\n\n\t\t// vendor prefix\n\t\tswitch (hash) {\n\t\t\t// text-decoration/text-size-adjust/text-shadow/text-align/text-transform: t, e, x\n\t\t\tcase 1015: {\n\t\t\t\t// text-shadow/text-align/text-transform, a\n\t\t\t\treturn out.charCodeAt(10) === 97 ? webkit + out + out : out\n\t\t\t}\n\t\t\t// filter/fill f, i, l\n\t\t\tcase 951: {\n\t\t\t\t// filter, t\n\t\t\t\treturn out.charCodeAt(3) === 116 ? webkit + out + out : out\n\t\t\t}\n\t\t\t// color/column, c, o, l\n\t\t\tcase 963: {\n\t\t\t\t// column, n\n\t\t\t\treturn out.charCodeAt(5) === 110 ? webkit + out + out : out\n\t\t\t}\n\t\t\t// box-decoration-break, b, o, x\n\t\t\tcase 1009: {\n\t\t\t\tif (out.charCodeAt(4) !== 100) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// mask, m, a, s\n\t\t\t// clip-path, c, l, i\n\t\t\tcase 969:\n\t\t\tcase 942: {\n\t\t\t\treturn webkit + out + out\n\t\t\t}\n\t\t\t// appearance: a, p, p\n\t\t\tcase 978: {\n\t\t\t\treturn webkit + out + moz + out + out\n\t\t\t}\n\t\t\t// hyphens: h, y, p\n\t\t\t// user-select: u, s, e\n\t\t\tcase 1019:\n\t\t\tcase 983: {\n\t\t\t\treturn webkit + out + moz + out + ms + out + out\n\t\t\t}\n\t\t\t// background/backface-visibility, b, a, c\n\t\t\tcase 883: {\n\t\t\t\t// backface-visibility, -\n\t\t\t\tif (out.charCodeAt(8) === DASH) {\n\t\t\t\t\treturn webkit + out + out\n\t\t\t\t}\n\n\t\t\t\t// image-set(...)\n\t\t\t\tif (out.indexOf('image-set(', 11) > 0) {\n\t\t\t\t\treturn out.replace(imgsrcptn, '$1'+webkit+'$2') + out\n\t\t\t\t}\n\n\t\t\t\treturn out\n\t\t\t}\n\t\t\t// flex: f, l, e\n\t\t\tcase 932: {\n\t\t\t\tif (out.charCodeAt(4) === DASH) {\n\t\t\t\t\tswitch (out.charCodeAt(5)) {\n\t\t\t\t\t\t// flex-grow, g\n\t\t\t\t\t\tcase 103: {\n\t\t\t\t\t\t\treturn webkit + 'box-' + out.replace('-grow', '') + webkit + out + ms + out.replace('grow', 'positive') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// flex-shrink, s\n\t\t\t\t\t\tcase 115: {\n\t\t\t\t\t\t\treturn webkit + out + ms + out.replace('shrink', 'negative') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// flex-basis, b\n\t\t\t\t\t\tcase 98: {\n\t\t\t\t\t\t\treturn webkit + out + ms + out.replace('basis', 'preferred-size') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn webkit + out + ms + out + out\n\t\t\t}\n\t\t\t// order: o, r, d\n\t\t\tcase 964: {\n\t\t\t\treturn webkit + out + ms + 'flex' + '-' + out + out\n\t\t\t}\n\t\t\t// justify-items/justify-content, j, u, s\n\t\t\tcase 1023: {\n\t\t\t\t// justify-content, c\n\t\t\t\tif (out.charCodeAt(8) !== 99) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcache = out.substring(out.indexOf(':', 15)).replace('flex-', '').replace('space-between', 'justify')\n\t\t\t\treturn webkit + 'box-pack' + cache + webkit + out + ms + 'flex-pack' + cache + out\n\t\t\t}\n\t\t\t// cursor, c, u, r\n\t\t\tcase 1005: {\n\t\t\t\treturn cursorptn.test(out) ? out.replace(colonptn, ':' + webkit) + out.replace(colonptn, ':' + moz) + out : out\n\t\t\t}\n\t\t\t// writing-mode, w, r, i\n\t\t\tcase 1000: {\n\t\t\t\tcache = out.substring(13).trim()\n\t\t\t\tindex = cache.indexOf('-') + 1\n\n\t\t\t\tswitch (cache.charCodeAt(0)+cache.charCodeAt(index)) {\n\t\t\t\t\t// vertical-lr\n\t\t\t\t\tcase 226: {\n\t\t\t\t\t\tcache = out.replace(writingptn, 'tb')\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// vertical-rl\n\t\t\t\t\tcase 232: {\n\t\t\t\t\t\tcache = out.replace(writingptn, 'tb-rl')\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// horizontal-tb\n\t\t\t\t\tcase 220: {\n\t\t\t\t\t\tcache = out.replace(writingptn, 'lr')\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\treturn out\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn webkit + out + ms + cache + out\n\t\t\t}\n\t\t\t// position: sticky\n\t\t\tcase 1017: {\n\t\t\t\tif (out.indexOf('sticky', 9) === -1) {\n\t\t\t\t\treturn out\n\t\t\t\t}\n\t\t\t}\n\t\t\t// display(flex/inline-flex/inline-box): d, i, s\n\t\t\tcase 975: {\n\t\t\t\tindex = (out = input).length - 10\n\t\t\t\tcache = (out.charCodeAt(index) === 33 ? out.substring(0, index) : out).substring(input.indexOf(':', 7) + 1).trim()\n\n\t\t\t\tswitch (hash = cache.charCodeAt(0) + (cache.charCodeAt(7)|0)) {\n\t\t\t\t\t// inline-\n\t\t\t\t\tcase 203: {\n\t\t\t\t\t\t// inline-box\n\t\t\t\t\t\tif (cache.charCodeAt(8) < 111) {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// inline-box/sticky\n\t\t\t\t\tcase 115: {\n\t\t\t\t\t\tout = out.replace(cache, webkit+cache)+';'+out\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// inline-flex\n\t\t\t\t\t// flex\n\t\t\t\t\tcase 207:\n\t\t\t\t\tcase 102: {\n\t\t\t\t\t\tout = (\n\t\t\t\t\t\t\tout.replace(cache, webkit+(hash > 102 ? 'inline-' : '')+'box')+';'+\n\t\t\t\t\t\t\tout.replace(cache, webkit+cache)+';'+\n\t\t\t\t\t\t\tout.replace(cache, ms+cache+'box')+';'+\n\t\t\t\t\t\t\tout\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn out + ';'\n\t\t\t}\n\t\t\t// align-items, align-center, align-self: a, l, i, -\n\t\t\tcase 938: {\n\t\t\t\tif (out.charCodeAt(5) === DASH) {\n\t\t\t\t\tswitch (out.charCodeAt(6)) {\n\t\t\t\t\t\t// align-items, i\n\t\t\t\t\t\tcase 105: {\n\t\t\t\t\t\t\tcache = out.replace('-items', '')\n\t\t\t\t\t\t\treturn webkit + out + webkit + 'box-' + cache + ms + 'flex-' + cache + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// align-self, s\n\t\t\t\t\t\tcase 115: {\n\t\t\t\t\t\t\treturn webkit + out + ms + 'flex-item-' + out.replace(selfptn, '') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// align-content\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\treturn webkit + out + ms + 'flex-line-pack' + out.replace('align-content', '').replace(selfptn, '') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// min/max\n\t\t\tcase 973:\n\t\t\tcase 989: {\n\t\t\t\t// min-/max- height/width/block-size/inline-size\n\t\t\t\tif (out.charCodeAt(3) !== DASH || out.charCodeAt(4) === 122) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// height/width: min-content / width: max-content\n\t\t\tcase 931:\n\t\t\tcase 953: {\n\t\t\t\tif (dimensionptn.test(input) === true) {\n\t\t\t\t\t// stretch\n\t\t\t\t\tif ((cache = input.substring(input.indexOf(':') + 1)).charCodeAt(0) === 115)\n\t\t\t\t\t\treturn property(input.replace('stretch', 'fill-available'), first, second, third).replace(':fill-available', ':stretch')\n\t\t\t\t\telse\n\t\t\t\t\t\treturn out.replace(cache, webkit + cache) + out.replace(cache, moz + cache.replace('fill-', '')) + out\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// transform, transition: t, r, a\n\t\t\tcase 962: {\n\t\t\t\tout = webkit + out + (out.charCodeAt(5) === 102 ? ms + out : '') + out\n\n\t\t\t\t// transitions\n\t\t\t\tif (second + third === 211 && out.charCodeAt(13) === 105 && out.indexOf('transform', 10) > 0) {\n\t\t\t\t\treturn out.substring(0, out.indexOf(';', 27) + 1).replace(transformptn, '$1' + webkit + '$2') + out\n\t\t\t\t}\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\treturn out\n\t}\n\n\t/**\n\t * Vendor\n\t *\n\t * @param {string} content\n\t * @param {number} context\n\t * @return {boolean}\n\t */\n\tfunction vendor (content, context) {\n\t\tvar index = content.indexOf(context === 1 ? ':' : '{')\n\t\tvar key = content.substring(0, context !== 3 ? index : 10)\n\t\tvar value = content.substring(index + 1, content.length - 1)\n\n\t\treturn should(context !== 2 ? key : key.replace(pseudofmt, '$1'), value, context)\n\t}\n\n\t/**\n\t * Supports\n\t *\n\t * @param {string} match\n\t * @param {string} group\n\t * @return {string}\n\t */\n\tfunction supports (match, group) {\n\t\tvar out = property(group, group.charCodeAt(0), group.charCodeAt(1), group.charCodeAt(2))\n\n\t\treturn out !== group+';' ? out.replace(propertyptn, ' or ($1)').substring(4) : '('+group+')'\n\t}\n\n\t/**\n\t * Animation\n\t *\n\t * @param {string} input\n\t * @return {string}\n\t */\n\tfunction animation (input) {\n\t\tvar length = input.length\n\t\tvar index = input.indexOf(':', 9) + 1\n\t\tvar declare = input.substring(0, index).trim()\n\t\tvar out = input.substring(index, length-1).trim()\n\n\t\tswitch (input.charCodeAt(9)*keyed) {\n\t\t\tcase 0: {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// animation-*, -\n\t\t\tcase DASH: {\n\t\t\t\t// animation-name, n\n\t\t\t\tif (input.charCodeAt(10) !== 110) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// animation/animation-name\n\t\t\tdefault: {\n\t\t\t\t// split in case of multiple animations\n\t\t\t\tvar list = out.split((out = '', animationptn))\n\n\t\t\t\tfor (var i = 0, index = 0, length = list.length; i < length; index = 0, ++i) {\n\t\t\t\t\tvar value = list[i]\n\t\t\t\t\tvar items = value.split(propertiesptn)\n\n\t\t\t\t\twhile (value = items[index]) {\n\t\t\t\t\t\tvar peak = value.charCodeAt(0)\n\n\t\t\t\t\t\tif (keyed === 1 && (\n\t\t\t\t\t\t\t// letters\n\t\t\t\t\t\t\t(peak > AT && peak < 90) || (peak > 96 && peak < 123) || peak === UNDERSCORE ||\n\t\t\t\t\t\t\t// dash but not in sequence i.e --\n\t\t\t\t\t\t\t(peak === DASH && value.charCodeAt(1) !== DASH)\n\t\t\t\t\t\t)) {\n\t\t\t\t\t\t\t// not a number/function\n\t\t\t\t\t\t\tswitch (isNaN(parseFloat(value)) + (value.indexOf('(') !== -1)) {\n\t\t\t\t\t\t\t\tcase 1: {\n\t\t\t\t\t\t\t\t\tswitch (value) {\n\t\t\t\t\t\t\t\t\t\t// not a valid reserved keyword\n\t\t\t\t\t\t\t\t\t\tcase 'infinite': case 'alternate': case 'backwards': case 'running':\n\t\t\t\t\t\t\t\t\t\tcase 'normal': case 'forwards': case 'both': case 'none': case 'linear':\n\t\t\t\t\t\t\t\t\t\tcase 'ease': case 'ease-in': case 'ease-out': case 'ease-in-out':\n\t\t\t\t\t\t\t\t\t\tcase 'paused': case 'reverse': case 'alternate-reverse': case 'inherit':\n\t\t\t\t\t\t\t\t\t\tcase 'initial': case 'unset': case 'step-start': case 'step-end': {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\tvalue += key\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titems[index++] = value\n\t\t\t\t\t}\n\n\t\t\t\t\tout += (i === 0 ? '' : ',') + items.join(' ')\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tout = declare + out + ';'\n\n\t\tif (prefix === 1 || (prefix === 2 && vendor(out, 1)))\n\t\t\treturn webkit + out + out\n\n\t\treturn out\n\t}\n\n\t/**\n\t * Isolate\n\t *\n\t * @param {Array<string>} current\n\t */\n\tfunction isolate (current) {\n\t\tfor (var i = 0, length = current.length, selector = Array(length), padding, element; i < length; ++i) {\n\t\t\t// split individual elements in a selector i.e h1 h2 === [h1, h2]\n\t\t\tvar elements = current[i].split(elementptn)\n\t\t\tvar out = ''\n\n\t\t\tfor (var j = 0, size = 0, tail = 0, code = 0, l = elements.length; j < l; ++j) {\n\t\t\t\t// empty element\n\t\t\t\tif ((size = (element = elements[j]).length) === 0 && l > 1) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\ttail = out.charCodeAt(out.length-1)\n\t\t\t\tcode = element.charCodeAt(0)\n\t\t\t\tpadding = ''\n\n\t\t\t\tif (j !== 0) {\n\t\t\t\t\t// determine if we need padding\n\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\tcase TILDE:\n\t\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\t\tcase PLUS:\n\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\tcase OPENPARENTHESES:  {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\tpadding = ' '\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tswitch (code) {\n\t\t\t\t\tcase AND: {\n\t\t\t\t\t\telement = padding + nscopealt\n\t\t\t\t\t}\n\t\t\t\t\tcase TILDE:\n\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\tcase PLUS:\n\t\t\t\t\tcase SPACE:\n\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase OPENBRACKET: {\n\t\t\t\t\t\telement = padding + element + nscopealt\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase COLON: {\n\t\t\t\t\t\tswitch (element.charCodeAt(1)*2 + element.charCodeAt(2)*3) {\n\t\t\t\t\t\t\t// :global\n\t\t\t\t\t\t\tcase 530: {\n\t\t\t\t\t\t\t\tif (escape > 0) {\n\t\t\t\t\t\t\t\t\telement = padding + element.substring(8, size - 1)\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// :hover, :nth-child(), ...\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tif (j < 1 || elements[j-1].length < 1) {\n\t\t\t\t\t\t\t\t\telement = padding + nscopealt + element\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase COMMA: {\n\t\t\t\t\t\tpadding = ''\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tif (size > 1 && element.indexOf(':') > 0) {\n\t\t\t\t\t\t\telement = padding + element.replace(pseudoptn, '$1' + nscopealt + '$2')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement = padding + element + nscopealt\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tout += element\n\t\t\t}\n\n\t\t\tselector[i] = out.replace(formatptn, '').trim()\n\t\t}\n\n\t\treturn selector\n\t}\n\n\t/**\n\t * Proxy\n\t *\n\t * @param {number} context\n\t * @param {string} content\n\t * @param {Array<string>} selectors\n\t * @param {Array<string>} parents\n\t * @param {number} line\n\t * @param {number} column\n\t * @param {number} length\n\t * @param {number} id\n\t * @param {number} depth\n\t * @param {number} at\n\t * @return {(string|void|*)}\n\t */\n\tfunction proxy (context, content, selectors, parents, line, column, length, id, depth, at) {\n\t\tfor (var i = 0, out = content, next; i < plugged; ++i) {\n\t\t\tswitch (next = plugins[i].call(stylis, context, out, selectors, parents, line, column, length, id, depth, at)) {\n\t\t\t\tcase void 0:\n\t\t\t\tcase false:\n\t\t\t\tcase true:\n\t\t\t\tcase null: {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tout = next\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tswitch (out) {\n\t\t\tcase void 0:\n\t\t\tcase false:\n\t\t\tcase true:\n\t\t\tcase null:\n\t\t\tcase content: {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\treturn out\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {number} code\n\t * @param {number} index\n\t * @param {number} length\n\t * @param {string} body\n\t * @return {number}\n\t */\n\tfunction delimited (code, index, length, body) {\n\t\tfor (var i = index + 1; i < length; ++i) {\n\t\t\tswitch (body.charCodeAt(i)) {\n\t\t\t\t// /*\n\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\tif (code === STAR) {\n\t\t\t\t\t\tif (body.charCodeAt(i - 1) === STAR &&  index + 2 !== i) {\n\t\t\t\t\t\t\treturn i + 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\t// //\n\t\t\t\tcase NEWLINE: {\n\t\t\t\t\tif (code === FOWARDSLASH) {\n\t\t\t\t\t\treturn i + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn i\n\t}\n\n\t/**\n\t * @param {number} type\n\t * @param {number} index\n\t * @param {number} length\n\t * @param {number} find\n\t * @param {string} body\n\t * @return {number}\n\t */\n\tfunction match (type, index, length, body) {\n\t\tfor (var i = index + 1; i < length; ++i) {\n\t\t\tswitch (body.charCodeAt(i)) {\n\t\t\t\tcase type: {\n\t\t\t\t\treturn i\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn i\n\t}\n\n\t/**\n\t * Minify\n\t *\n\t * @param {(string|*)} output\n\t * @return {string}\n\t */\n\tfunction minify (output) {\n\t\treturn output\n\t\t\t.replace(formatptn, '')\n\t\t\t.replace(beforeptn, '')\n\t\t\t.replace(afterptn, '$1')\n\t\t\t.replace(tailptn, '$1')\n\t\t\t.replace(whiteptn, ' ')\n\t}\n\n\t/**\n\t * Use\n\t *\n\t * @param {(Array<function(...?)>|function(...?)|number|void)?} plugin\n\t */\n\tfunction use (plugin) {\n\t\tswitch (plugin) {\n\t\t\tcase void 0:\n\t\t\tcase null: {\n\t\t\t\tplugged = plugins.length = 0\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tswitch (plugin.constructor) {\n\t\t\t\t\tcase Array: {\n\t\t\t\t\t\tfor (var i = 0, length = plugin.length; i < length; ++i) {\n\t\t\t\t\t\t\tuse(plugin[i])\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase Function: {\n\t\t\t\t\t\tplugins[plugged++] = plugin\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase Boolean: {\n\t\t\t\t\t\tunkwn = !!plugin|0\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n \t\t}\n\n \t\treturn use\n\t}\n\n\t/**\n\t * Set\n\t *\n\t * @param {*} options\n\t */\n\tfunction set (options) {\n\t\tfor (var name in options) {\n\t\t\tvar value = options[name]\n\t\t\tswitch (name) {\n\t\t\t\tcase 'keyframe': keyed = value|0; break\n\t\t\t\tcase 'global': escape = value|0; break\n\t\t\t\tcase 'cascade': cascade = value|0; break\n\t\t\t\tcase 'compress': compress = value|0; break\n\t\t\t\tcase 'semicolon': semicolon = value|0; break\n\t\t\t\tcase 'preserve': preserve = value|0; break\n\t\t\t\tcase 'prefix':\n\t\t\t\t\tshould = null\n\n\t\t\t\t\tif (!value) {\n\t\t\t\t\t\tprefix = 0\n\t\t\t\t\t} else if (typeof value !== 'function') {\n\t\t\t\t\t\tprefix = 1\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprefix = 2\n\t\t\t\t\t\tshould = value\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn set\n\t}\n\n\t/**\n\t * Stylis\n\t *\n\t * @param {string} selector\n\t * @param {string} input\n\t * @return {*}\n\t */\n\tfunction stylis (selector, input) {\n\t\tif (this !== void 0 && this.constructor === stylis) {\n\t\t\treturn factory(selector)\n\t\t}\n\n\t\t// setup\n\t\tvar ns = selector\n\t\tvar code = ns.charCodeAt(0)\n\n\t\t// trim leading whitespace\n\t\tif (code < 33) {\n\t\t\tcode = (ns = ns.trim()).charCodeAt(0)\n\t\t}\n\n\t\t// keyframe/animation namespace\n\t\tif (keyed > 0) {\n\t\t\tkey = ns.replace(invalidptn, code === OPENBRACKET ? '' : '-')\n\t\t}\n\n\t\t// reset, used to assert if a plugin is moneky-patching the return value\n\t\tcode = 1\n\n\t\t// cascade/isolate\n\t\tif (cascade === 1) {\n\t\t\tnscope = ns\n\t\t} else {\n\t\t\tnscopealt = ns\n\t\t}\n\n\t\tvar selectors = [nscope]\n\t\tvar result\n\n\t\t// execute plugins, pre-process context\n\t\tif (plugged > 0) {\n\t\t\tresult = proxy(PREPS, input, selectors, selectors, line, column, 0, 0, 0, 0)\n\n\t\t\tif (result !== void 0 && typeof result === 'string') {\n\t\t\t\tinput = result\n\t\t\t}\n\t\t}\n\n\t\t// build\n\t\tvar output = compile(array, selectors, input, 0, 0)\n\n\t\t// execute plugins, post-process context\n\t\tif (plugged > 0) {\n\t\t\tresult = proxy(POSTS, output, selectors, selectors, line, column, output.length, 0, 0, 0)\n\n\t\t\t// bypass minification\n\t\t\tif (result !== void 0 && typeof(output = result) !== 'string') {\n\t\t\t\tcode = 0\n\t\t\t}\n\t\t}\n\n\t\t// reset\n\t\tkey = ''\n\t\tnscope = ''\n\t\tnscopealt = ''\n\t\tpattern = 0\n\t\tline = 1\n\t\tcolumn = 1\n\n\t\treturn compress*code === 0 ? output : minify(output)\n\t}\n\n\tstylis['use'] = use\n\tstylis['set'] = set\n\n\tif (options !== void 0) {\n\t\tset(options)\n\t}\n\n\treturn stylis\n}));\n","'use strict';\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n    childContextTypes: true,\n    contextTypes: true,\n    defaultProps: true,\n    displayName: true,\n    getDefaultProps: true,\n    getDerivedStateFromProps: true,\n    mixins: true,\n    propTypes: true,\n    type: true\n};\n\nvar KNOWN_STATICS = {\n    name: true,\n    length: true,\n    prototype: true,\n    caller: true,\n    callee: true,\n    arguments: true,\n    arity: true\n};\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = getPrototypeOf && getPrototypeOf(Object);\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n    if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components\n\n        if (objectPrototype) {\n            var inheritedComponent = getPrototypeOf(sourceComponent);\n            if (inheritedComponent && inheritedComponent !== objectPrototype) {\n                hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n            }\n        }\n\n        var keys = getOwnPropertyNames(sourceComponent);\n\n        if (getOwnPropertySymbols) {\n            keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n        }\n\n        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) {\n                var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n                try { // Avoid failures from read-only properties\n                    defineProperty(targetComponent, key, descriptor);\n                } catch (e) {}\n            }\n        }\n\n        return targetComponent;\n    }\n\n    return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global.map = factory());\n}(this, (function () { 'use strict';\n\n  // a timeout function that can be flushed and cancelled\n  var flushable = function flushable(onComplete, delay) {\n    var timeoutId = setTimeout(function () {\n      timeoutId = null;\n      onComplete(false);\n    }, delay);\n\n    var clearTimer = function clearTimer() {\n      if (timeoutId) {\n        clearTimeout(timeoutId);\n        timeoutId = null;\n      }\n    };\n\n    return {\n      cancel: clearTimer,\n      flush: function flush() {\n        if (!timeoutId) {\n          return;\n        }\n\n        clearTimer();\n        onComplete(true);\n      },\n      pending: function pending() {\n        return Boolean(timeoutId);\n      }\n    };\n  };\n\n  return flushable;\n\n})));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar WarningIcon = function WarningIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><path d=\\\"M12.938 4.967c-.518-.978-1.36-.974-1.876 0L3.938 18.425c-.518.978-.045 1.771 1.057 1.771h14.01c1.102 0 1.573-.797 1.057-1.771L12.938 4.967z\\\" fill=\\\"currentColor\\\"/><path d=\\\"M12 15a1 1 0 0 1-1-1V9a1 1 0 0 1 2 0v5a1 1 0 0 1-1 1m0 3a1 1 0 0 1 0-2 1 1 0 0 1 0 2\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nWarningIcon.displayName = 'WarningIcon';\nvar _default = WarningIcon;\nexports.default = _default;","'use strict';\n\nfunction getText(rootChild) {\n  var res = '';\n  var rr = function rr(child) {\n    if (typeof child === 'string' || typeof child === 'number') {\n      res += child;\n    } else if (Array.isArray(child)) {\n      child.forEach(function (c) {\n        return rr(c);\n      });\n    } else if (child && child.props) {\n      var children = child.props.children;\n\n\n      if (Array.isArray(children)) {\n        children.forEach(function (c) {\n          return rr(c);\n        });\n      } else {\n        rr(children);\n      }\n    }\n  };\n\n  rr(rootChild);\n\n  return res;\n}\n\nmodule.exports = getText;","\"use strict\";\r\nfunction __export(m) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar common_1 = require(\"./common\");\r\nvar GraphRequest_1 = require(\"./GraphRequest\");\r\nvar Client = (function () {\r\n    function Client() {\r\n        this.config = {\r\n            debugLogging: false,\r\n            defaultVersion: common_1.DEFAULT_VERSION,\r\n            baseUrl: common_1.GRAPH_BASE_URL\r\n        };\r\n    }\r\n    Client.init = function (clientOptions) {\r\n        var graphClient = new Client();\r\n        for (var key in clientOptions) {\r\n            graphClient.config[key] = clientOptions[key];\r\n        }\r\n        return graphClient;\r\n    };\r\n    Client.prototype.api = function (path) {\r\n        return new GraphRequest_1.GraphRequest(this.config, path);\r\n    };\r\n    return Client;\r\n}());\r\nexports.Client = Client;\r\n__export(require(\"./GraphRequest\"));\r\n__export(require(\"./common\"));\r\n__export(require(\"./ResponseHandler\"));\r\n//# sourceMappingURL=index.js.map","\nvar navigator = {};\nnavigator.userAgent = false;\n\nvar window = {};\n/*\n * jsrsasign(all) 8.0.12 (2018-04-22) (c) 2010-2018 Kenji Urushima | kjur.github.com/jsrsasign/license\n */\n\n/*!\nCopyright (c) 2011, Yahoo! Inc. All rights reserved.\nCode licensed under the BSD License:\nhttp://developer.yahoo.com/yui/license.html\nversion: 2.9.0\n*/\nif(YAHOO===undefined){var YAHOO={}}YAHOO.lang={extend:function(g,h,f){if(!h||!g){throw new Error(\"YAHOO.lang.extend failed, please check that all dependencies are included.\")}var d=function(){};d.prototype=h.prototype;g.prototype=new d();g.prototype.constructor=g;g.superclass=h.prototype;if(h.prototype.constructor==Object.prototype.constructor){h.prototype.constructor=h}if(f){var b;for(b in f){g.prototype[b]=f[b]}var e=function(){},c=[\"toString\",\"valueOf\"];try{if(/MSIE/.test(navigator.userAgent)){e=function(j,i){for(b=0;b<c.length;b=b+1){var l=c[b],k=i[l];if(typeof k===\"function\"&&k!=Object.prototype[l]){j[l]=k}}}}}catch(a){}e(g.prototype,f)}}};\n\n/*! CryptoJS v3.1.2 core-fix.js\n * code.google.com/p/crypto-js\n * (c) 2009-2013 by Jeff Mott. All rights reserved.\n * code.google.com/p/crypto-js/wiki/License\n * THIS IS FIX of 'core.js' to fix Hmac issue.\n * https://code.google.com/p/crypto-js/issues/detail?id=84\n * https://crypto-js.googlecode.com/svn-history/r667/branches/3.x/src/core.js\n */\nvar CryptoJS=CryptoJS||(function(e,g){var a={};var b=a.lib={};var j=b.Base=(function(){function n(){}return{extend:function(p){n.prototype=this;var o=new n();if(p){o.mixIn(p)}if(!o.hasOwnProperty(\"init\")){o.init=function(){o.$super.init.apply(this,arguments)}}o.init.prototype=o;o.$super=this;return o},create:function(){var o=this.extend();o.init.apply(o,arguments);return o},init:function(){},mixIn:function(p){for(var o in p){if(p.hasOwnProperty(o)){this[o]=p[o]}}if(p.hasOwnProperty(\"toString\")){this.toString=p.toString}},clone:function(){return this.init.prototype.extend(this)}}}());var l=b.WordArray=j.extend({init:function(o,n){o=this.words=o||[];if(n!=g){this.sigBytes=n}else{this.sigBytes=o.length*4}},toString:function(n){return(n||h).stringify(this)},concat:function(t){var q=this.words;var p=t.words;var n=this.sigBytes;var s=t.sigBytes;this.clamp();if(n%4){for(var r=0;r<s;r++){var o=(p[r>>>2]>>>(24-(r%4)*8))&255;q[(n+r)>>>2]|=o<<(24-((n+r)%4)*8)}}else{for(var r=0;r<s;r+=4){q[(n+r)>>>2]=p[r>>>2]}}this.sigBytes+=s;return this},clamp:function(){var o=this.words;var n=this.sigBytes;o[n>>>2]&=4294967295<<(32-(n%4)*8);o.length=e.ceil(n/4)},clone:function(){var n=j.clone.call(this);n.words=this.words.slice(0);return n},random:function(p){var o=[];for(var n=0;n<p;n+=4){o.push((e.random()*4294967296)|0)}return new l.init(o,p)}});var m=a.enc={};var h=m.Hex={stringify:function(p){var r=p.words;var o=p.sigBytes;var q=[];for(var n=0;n<o;n++){var s=(r[n>>>2]>>>(24-(n%4)*8))&255;q.push((s>>>4).toString(16));q.push((s&15).toString(16))}return q.join(\"\")},parse:function(p){var n=p.length;var q=[];for(var o=0;o<n;o+=2){q[o>>>3]|=parseInt(p.substr(o,2),16)<<(24-(o%8)*4)}return new l.init(q,n/2)}};var d=m.Latin1={stringify:function(q){var r=q.words;var p=q.sigBytes;var n=[];for(var o=0;o<p;o++){var s=(r[o>>>2]>>>(24-(o%4)*8))&255;n.push(String.fromCharCode(s))}return n.join(\"\")},parse:function(p){var n=p.length;var q=[];for(var o=0;o<n;o++){q[o>>>2]|=(p.charCodeAt(o)&255)<<(24-(o%4)*8)}return new l.init(q,n)}};var c=m.Utf8={stringify:function(n){try{return decodeURIComponent(escape(d.stringify(n)))}catch(o){throw new Error(\"Malformed UTF-8 data\")}},parse:function(n){return d.parse(unescape(encodeURIComponent(n)))}};var i=b.BufferedBlockAlgorithm=j.extend({reset:function(){this._data=new l.init();this._nDataBytes=0},_append:function(n){if(typeof n==\"string\"){n=c.parse(n)}this._data.concat(n);this._nDataBytes+=n.sigBytes},_process:function(w){var q=this._data;var x=q.words;var n=q.sigBytes;var t=this.blockSize;var v=t*4;var u=n/v;if(w){u=e.ceil(u)}else{u=e.max((u|0)-this._minBufferSize,0)}var s=u*t;var r=e.min(s*4,n);if(s){for(var p=0;p<s;p+=t){this._doProcessBlock(x,p)}var o=x.splice(0,s);q.sigBytes-=r}return new l.init(o,r)},clone:function(){var n=j.clone.call(this);n._data=this._data.clone();return n},_minBufferSize:0});var f=b.Hasher=i.extend({cfg:j.extend(),init:function(n){this.cfg=this.cfg.extend(n);this.reset()},reset:function(){i.reset.call(this);this._doReset()},update:function(n){this._append(n);this._process();return this},finalize:function(n){if(n){this._append(n)}var o=this._doFinalize();return o},blockSize:512/32,_createHelper:function(n){return function(p,o){return new n.init(o).finalize(p)}},_createHmacHelper:function(n){return function(p,o){return new k.HMAC.init(n,o).finalize(p)}}});var k=a.algo={};return a}(Math));\n/*\nCryptoJS v3.1.2 x64-core-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function(g){var a=CryptoJS,f=a.lib,e=f.Base,h=f.WordArray,a=a.x64={};a.Word=e.extend({init:function(b,c){this.high=b;this.low=c}});a.WordArray=e.extend({init:function(b,c){b=this.words=b||[];this.sigBytes=c!=g?c:8*b.length},toX32:function(){for(var b=this.words,c=b.length,a=[],d=0;d<c;d++){var e=b[d];a.push(e.high);a.push(e.low)}return h.create(a,this.sigBytes)},clone:function(){for(var b=e.clone.call(this),c=b.words=this.words.slice(0),a=c.length,d=0;d<a;d++)c[d]=c[d].clone();return b}})})();\n\n/*\nCryptoJS v3.1.2 cipher-core.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nCryptoJS.lib.Cipher||function(u){var g=CryptoJS,f=g.lib,k=f.Base,l=f.WordArray,q=f.BufferedBlockAlgorithm,r=g.enc.Base64,v=g.algo.EvpKDF,n=f.Cipher=q.extend({cfg:k.extend(),createEncryptor:function(a,b){return this.create(this._ENC_XFORM_MODE,a,b)},createDecryptor:function(a,b){return this.create(this._DEC_XFORM_MODE,a,b)},init:function(a,b,c){this.cfg=this.cfg.extend(c);this._xformMode=a;this._key=b;this.reset()},reset:function(){q.reset.call(this);this._doReset()},process:function(a){this._append(a);\nreturn this._process()},finalize:function(a){a&&this._append(a);return this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(a){return{encrypt:function(b,c,d){return(\"string\"==typeof c?s:j).encrypt(a,b,c,d)},decrypt:function(b,c,d){return(\"string\"==typeof c?s:j).decrypt(a,b,c,d)}}}});f.StreamCipher=n.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var m=g.mode={},t=function(a,b,c){var d=this._iv;d?this._iv=u:d=this._prevBlock;for(var e=\n0;e<c;e++)a[b+e]^=d[e]},h=(f.BlockCipherMode=k.extend({createEncryptor:function(a,b){return this.Encryptor.create(a,b)},createDecryptor:function(a,b){return this.Decryptor.create(a,b)},init:function(a,b){this._cipher=a;this._iv=b}})).extend();h.Encryptor=h.extend({processBlock:function(a,b){var c=this._cipher,d=c.blockSize;t.call(this,a,b,d);c.encryptBlock(a,b);this._prevBlock=a.slice(b,b+d)}});h.Decryptor=h.extend({processBlock:function(a,b){var c=this._cipher,d=c.blockSize,e=a.slice(b,b+d);c.decryptBlock(a,\nb);t.call(this,a,b,d);this._prevBlock=e}});m=m.CBC=h;h=(g.pad={}).Pkcs7={pad:function(a,b){for(var c=4*b,c=c-a.sigBytes%c,d=c<<24|c<<16|c<<8|c,e=[],f=0;f<c;f+=4)e.push(d);c=l.create(e,c);a.concat(c)},unpad:function(a){a.sigBytes-=a.words[a.sigBytes-1>>>2]&255}};f.BlockCipher=n.extend({cfg:n.cfg.extend({mode:m,padding:h}),reset:function(){n.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;\nthis._mode=c.call(a,this,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var p=f.CipherParams=k.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),m=(g.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;\nreturn(a?l.create([1398893684,1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=l.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return p.create({ciphertext:a,salt:c})}},j=f.SerializableCipher=k.extend({cfg:k.extend({format:m}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var e=a.createEncryptor(c,d);b=e.finalize(b);e=e.cfg;return p.create({ciphertext:b,key:c,iv:e.iv,algorithm:a,mode:e.mode,padding:e.padding,\nblockSize:a.blockSize,formatter:d.format})},decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return\"string\"==typeof a?b.parse(a,this):a}}),g=(g.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=l.random(8));a=v.create({keySize:b+c}).compute(a,d);c=l.create(a.words.slice(b),4*c);a.sigBytes=4*b;return p.create({key:a,iv:c,salt:d})}},s=f.PasswordBasedCipher=j.extend({cfg:j.cfg.extend({kdf:g}),encrypt:function(a,\nb,c,d){d=this.cfg.extend(d);c=d.kdf.execute(c,a.keySize,a.ivSize);d.iv=c.iv;a=j.encrypt.call(this,a,b,c.key,d);a.mixIn(c);return a},decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);c=d.kdf.execute(c,a.keySize,a.ivSize,b.salt);d.iv=c.iv;return j.decrypt.call(this,a,b,c.key,d)}})}();\n\n/*\nCryptoJS v3.1.2 aes.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function(){for(var q=CryptoJS,x=q.lib.BlockCipher,r=q.algo,j=[],y=[],z=[],A=[],B=[],C=[],s=[],u=[],v=[],w=[],g=[],k=0;256>k;k++)g[k]=128>k?k<<1:k<<1^283;for(var n=0,l=0,k=0;256>k;k++){var f=l^l<<1^l<<2^l<<3^l<<4,f=f>>>8^f&255^99;j[n]=f;y[f]=n;var t=g[n],D=g[t],E=g[D],b=257*g[f]^16843008*f;z[n]=b<<24|b>>>8;A[n]=b<<16|b>>>16;B[n]=b<<8|b>>>24;C[n]=b;b=16843009*E^65537*D^257*t^16843008*n;s[f]=b<<24|b>>>8;u[f]=b<<16|b>>>16;v[f]=b<<8|b>>>24;w[f]=b;n?(n=t^g[g[g[E^t]]],l^=g[g[l]]):n=l=1}var F=[0,1,2,4,8,\n16,32,64,128,27,54],r=r.AES=x.extend({_doReset:function(){for(var c=this._key,e=c.words,a=c.sigBytes/4,c=4*((this._nRounds=a+6)+1),b=this._keySchedule=[],h=0;h<c;h++)if(h<a)b[h]=e[h];else{var d=b[h-1];h%a?6<a&&4==h%a&&(d=j[d>>>24]<<24|j[d>>>16&255]<<16|j[d>>>8&255]<<8|j[d&255]):(d=d<<8|d>>>24,d=j[d>>>24]<<24|j[d>>>16&255]<<16|j[d>>>8&255]<<8|j[d&255],d^=F[h/a|0]<<24);b[h]=b[h-a]^d}e=this._invKeySchedule=[];for(a=0;a<c;a++)h=c-a,d=a%4?b[h]:b[h-4],e[a]=4>a||4>=h?d:s[j[d>>>24]]^u[j[d>>>16&255]]^v[j[d>>>\n8&255]]^w[j[d&255]]},encryptBlock:function(c,e){this._doCryptBlock(c,e,this._keySchedule,z,A,B,C,j)},decryptBlock:function(c,e){var a=c[e+1];c[e+1]=c[e+3];c[e+3]=a;this._doCryptBlock(c,e,this._invKeySchedule,s,u,v,w,y);a=c[e+1];c[e+1]=c[e+3];c[e+3]=a},_doCryptBlock:function(c,e,a,b,h,d,j,m){for(var n=this._nRounds,f=c[e]^a[0],g=c[e+1]^a[1],k=c[e+2]^a[2],p=c[e+3]^a[3],l=4,t=1;t<n;t++)var q=b[f>>>24]^h[g>>>16&255]^d[k>>>8&255]^j[p&255]^a[l++],r=b[g>>>24]^h[k>>>16&255]^d[p>>>8&255]^j[f&255]^a[l++],s=\nb[k>>>24]^h[p>>>16&255]^d[f>>>8&255]^j[g&255]^a[l++],p=b[p>>>24]^h[f>>>16&255]^d[g>>>8&255]^j[k&255]^a[l++],f=q,g=r,k=s;q=(m[f>>>24]<<24|m[g>>>16&255]<<16|m[k>>>8&255]<<8|m[p&255])^a[l++];r=(m[g>>>24]<<24|m[k>>>16&255]<<16|m[p>>>8&255]<<8|m[f&255])^a[l++];s=(m[k>>>24]<<24|m[p>>>16&255]<<16|m[f>>>8&255]<<8|m[g&255])^a[l++];p=(m[p>>>24]<<24|m[f>>>16&255]<<16|m[g>>>8&255]<<8|m[k&255])^a[l++];c[e]=q;c[e+1]=r;c[e+2]=s;c[e+3]=p},keySize:8});q.AES=x._createHelper(r)})();\n\n/*\nCryptoJS v3.1.2 tripledes-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function(){function j(b,c){var a=(this._lBlock>>>b^this._rBlock)&c;this._rBlock^=a;this._lBlock^=a<<b}function l(b,c){var a=(this._rBlock>>>b^this._lBlock)&c;this._lBlock^=a;this._rBlock^=a<<b}var h=CryptoJS,e=h.lib,n=e.WordArray,e=e.BlockCipher,g=h.algo,q=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],p=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,\n55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],r=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],s=[{\"0\":8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,\n2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,\n1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{\"0\":1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,\n75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,\n276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{\"0\":260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,\n14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,\n17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{\"0\":2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,\n98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,\n1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{\"0\":128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,\n10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,\n83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{\"0\":268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,\n2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{\"0\":1048576,\n16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,\n496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{\"0\":134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,\n2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,\n2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],t=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],m=g.DES=e.extend({_doReset:function(){for(var b=this._key.words,c=[],a=0;56>a;a++){var f=q[a]-1;c[a]=b[f>>>5]>>>31-f%32&1}b=this._subKeys=[];for(f=0;16>f;f++){for(var d=b[f]=[],e=r[f],a=0;24>a;a++)d[a/6|0]|=c[(p[a]-1+e)%28]<<31-a%6,d[4+(a/6|0)]|=c[28+(p[a+24]-1+e)%28]<<31-a%6;d[0]=d[0]<<1|d[0]>>>31;for(a=1;7>a;a++)d[a]>>>=\n4*(a-1)+3;d[7]=d[7]<<5|d[7]>>>27}c=this._invSubKeys=[];for(a=0;16>a;a++)c[a]=b[15-a]},encryptBlock:function(b,c){this._doCryptBlock(b,c,this._subKeys)},decryptBlock:function(b,c){this._doCryptBlock(b,c,this._invSubKeys)},_doCryptBlock:function(b,c,a){this._lBlock=b[c];this._rBlock=b[c+1];j.call(this,4,252645135);j.call(this,16,65535);l.call(this,2,858993459);l.call(this,8,16711935);j.call(this,1,1431655765);for(var f=0;16>f;f++){for(var d=a[f],e=this._lBlock,h=this._rBlock,g=0,k=0;8>k;k++)g|=s[k][((h^\nd[k])&t[k])>>>0];this._lBlock=h;this._rBlock=e^g}a=this._lBlock;this._lBlock=this._rBlock;this._rBlock=a;j.call(this,1,1431655765);l.call(this,8,16711935);l.call(this,2,858993459);j.call(this,16,65535);j.call(this,4,252645135);b[c]=this._lBlock;b[c+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});h.DES=e._createHelper(m);g=g.TripleDES=e.extend({_doReset:function(){var b=this._key.words;this._des1=m.createEncryptor(n.create(b.slice(0,2)));this._des2=m.createEncryptor(n.create(b.slice(2,4)));this._des3=\nm.createEncryptor(n.create(b.slice(4,6)))},encryptBlock:function(b,c){this._des1.encryptBlock(b,c);this._des2.decryptBlock(b,c);this._des3.encryptBlock(b,c)},decryptBlock:function(b,c){this._des3.decryptBlock(b,c);this._des2.encryptBlock(b,c);this._des1.decryptBlock(b,c)},keySize:6,ivSize:2,blockSize:2});h.TripleDES=e._createHelper(g)})();\n\n/*\nCryptoJS v3.1.2 enc-base64.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function(){var h=CryptoJS,j=h.lib.WordArray;h.enc.Base64={stringify:function(b){var e=b.words,f=b.sigBytes,c=this._map;b.clamp();b=[];for(var a=0;a<f;a+=3)for(var d=(e[a>>>2]>>>24-8*(a%4)&255)<<16|(e[a+1>>>2]>>>24-8*((a+1)%4)&255)<<8|e[a+2>>>2]>>>24-8*((a+2)%4)&255,g=0;4>g&&a+0.75*g<f;g++)b.push(c.charAt(d>>>6*(3-g)&63));if(e=c.charAt(64))for(;b.length%4;)b.push(e);return b.join(\"\")},parse:function(b){var e=b.length,f=this._map,c=f.charAt(64);c&&(c=b.indexOf(c),-1!=c&&(e=c));for(var c=[],a=0,d=0;d<\ne;d++)if(d%4){var g=f.indexOf(b.charAt(d-1))<<2*(d%4),h=f.indexOf(b.charAt(d))>>>6-2*(d%4);c[a>>>2]|=(g|h)<<24-8*(a%4);a++}return j.create(c,a)},_map:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"}})();\n\n/*\nCryptoJS v3.1.2 md5.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function(E){function h(a,f,g,j,p,h,k){a=a+(f&g|~f&j)+p+k;return(a<<h|a>>>32-h)+f}function k(a,f,g,j,p,h,k){a=a+(f&j|g&~j)+p+k;return(a<<h|a>>>32-h)+f}function l(a,f,g,j,h,k,l){a=a+(f^g^j)+h+l;return(a<<k|a>>>32-k)+f}function n(a,f,g,j,h,k,l){a=a+(g^(f|~j))+h+l;return(a<<k|a>>>32-k)+f}for(var r=CryptoJS,q=r.lib,F=q.WordArray,s=q.Hasher,q=r.algo,a=[],t=0;64>t;t++)a[t]=4294967296*E.abs(E.sin(t+1))|0;q=q.MD5=s.extend({_doReset:function(){this._hash=new F.init([1732584193,4023233417,2562383102,271733878])},\n_doProcessBlock:function(m,f){for(var g=0;16>g;g++){var j=f+g,p=m[j];m[j]=(p<<8|p>>>24)&16711935|(p<<24|p>>>8)&4278255360}var g=this._hash.words,j=m[f+0],p=m[f+1],q=m[f+2],r=m[f+3],s=m[f+4],t=m[f+5],u=m[f+6],v=m[f+7],w=m[f+8],x=m[f+9],y=m[f+10],z=m[f+11],A=m[f+12],B=m[f+13],C=m[f+14],D=m[f+15],b=g[0],c=g[1],d=g[2],e=g[3],b=h(b,c,d,e,j,7,a[0]),e=h(e,b,c,d,p,12,a[1]),d=h(d,e,b,c,q,17,a[2]),c=h(c,d,e,b,r,22,a[3]),b=h(b,c,d,e,s,7,a[4]),e=h(e,b,c,d,t,12,a[5]),d=h(d,e,b,c,u,17,a[6]),c=h(c,d,e,b,v,22,a[7]),\nb=h(b,c,d,e,w,7,a[8]),e=h(e,b,c,d,x,12,a[9]),d=h(d,e,b,c,y,17,a[10]),c=h(c,d,e,b,z,22,a[11]),b=h(b,c,d,e,A,7,a[12]),e=h(e,b,c,d,B,12,a[13]),d=h(d,e,b,c,C,17,a[14]),c=h(c,d,e,b,D,22,a[15]),b=k(b,c,d,e,p,5,a[16]),e=k(e,b,c,d,u,9,a[17]),d=k(d,e,b,c,z,14,a[18]),c=k(c,d,e,b,j,20,a[19]),b=k(b,c,d,e,t,5,a[20]),e=k(e,b,c,d,y,9,a[21]),d=k(d,e,b,c,D,14,a[22]),c=k(c,d,e,b,s,20,a[23]),b=k(b,c,d,e,x,5,a[24]),e=k(e,b,c,d,C,9,a[25]),d=k(d,e,b,c,r,14,a[26]),c=k(c,d,e,b,w,20,a[27]),b=k(b,c,d,e,B,5,a[28]),e=k(e,b,\nc,d,q,9,a[29]),d=k(d,e,b,c,v,14,a[30]),c=k(c,d,e,b,A,20,a[31]),b=l(b,c,d,e,t,4,a[32]),e=l(e,b,c,d,w,11,a[33]),d=l(d,e,b,c,z,16,a[34]),c=l(c,d,e,b,C,23,a[35]),b=l(b,c,d,e,p,4,a[36]),e=l(e,b,c,d,s,11,a[37]),d=l(d,e,b,c,v,16,a[38]),c=l(c,d,e,b,y,23,a[39]),b=l(b,c,d,e,B,4,a[40]),e=l(e,b,c,d,j,11,a[41]),d=l(d,e,b,c,r,16,a[42]),c=l(c,d,e,b,u,23,a[43]),b=l(b,c,d,e,x,4,a[44]),e=l(e,b,c,d,A,11,a[45]),d=l(d,e,b,c,D,16,a[46]),c=l(c,d,e,b,q,23,a[47]),b=n(b,c,d,e,j,6,a[48]),e=n(e,b,c,d,v,10,a[49]),d=n(d,e,b,c,\nC,15,a[50]),c=n(c,d,e,b,t,21,a[51]),b=n(b,c,d,e,A,6,a[52]),e=n(e,b,c,d,r,10,a[53]),d=n(d,e,b,c,y,15,a[54]),c=n(c,d,e,b,p,21,a[55]),b=n(b,c,d,e,w,6,a[56]),e=n(e,b,c,d,D,10,a[57]),d=n(d,e,b,c,u,15,a[58]),c=n(c,d,e,b,B,21,a[59]),b=n(b,c,d,e,s,6,a[60]),e=n(e,b,c,d,z,10,a[61]),d=n(d,e,b,c,q,15,a[62]),c=n(c,d,e,b,x,21,a[63]);g[0]=g[0]+b|0;g[1]=g[1]+c|0;g[2]=g[2]+d|0;g[3]=g[3]+e|0},_doFinalize:function(){var a=this._data,f=a.words,g=8*this._nDataBytes,j=8*a.sigBytes;f[j>>>5]|=128<<24-j%32;var h=E.floor(g/\n4294967296);f[(j+64>>>9<<4)+15]=(h<<8|h>>>24)&16711935|(h<<24|h>>>8)&4278255360;f[(j+64>>>9<<4)+14]=(g<<8|g>>>24)&16711935|(g<<24|g>>>8)&4278255360;a.sigBytes=4*(f.length+1);this._process();a=this._hash;f=a.words;for(g=0;4>g;g++)j=f[g],f[g]=(j<<8|j>>>24)&16711935|(j<<24|j>>>8)&4278255360;return a},clone:function(){var a=s.clone.call(this);a._hash=this._hash.clone();return a}});r.MD5=s._createHelper(q);r.HmacMD5=s._createHmacHelper(q)})(Math);\n\n/*\nCryptoJS v3.1.2 sha1-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function(){var k=CryptoJS,b=k.lib,m=b.WordArray,l=b.Hasher,d=[],b=k.algo.SHA1=l.extend({_doReset:function(){this._hash=new m.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(n,p){for(var a=this._hash.words,e=a[0],f=a[1],h=a[2],j=a[3],b=a[4],c=0;80>c;c++){if(16>c)d[c]=n[p+c]|0;else{var g=d[c-3]^d[c-8]^d[c-14]^d[c-16];d[c]=g<<1|g>>>31}g=(e<<5|e>>>27)+b+d[c];g=20>c?g+((f&h|~f&j)+1518500249):40>c?g+((f^h^j)+1859775393):60>c?g+((f&h|f&j|h&j)-1894007588):g+((f^h^\nj)-899497514);b=j;j=h;h=f<<30|f>>>2;f=e;e=g}a[0]=a[0]+e|0;a[1]=a[1]+f|0;a[2]=a[2]+h|0;a[3]=a[3]+j|0;a[4]=a[4]+b|0},_doFinalize:function(){var b=this._data,d=b.words,a=8*this._nDataBytes,e=8*b.sigBytes;d[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=Math.floor(a/4294967296);d[(e+64>>>9<<4)+15]=a;b.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var b=l.clone.call(this);b._hash=this._hash.clone();return b}});k.SHA1=l._createHelper(b);k.HmacSHA1=l._createHmacHelper(b)})();\n\n/*\nCryptoJS v3.1.2 sha256-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function(k){for(var g=CryptoJS,h=g.lib,v=h.WordArray,j=h.Hasher,h=g.algo,s=[],t=[],u=function(q){return 4294967296*(q-(q|0))|0},l=2,b=0;64>b;){var d;a:{d=l;for(var w=k.sqrt(d),r=2;r<=w;r++)if(!(d%r)){d=!1;break a}d=!0}d&&(8>b&&(s[b]=u(k.pow(l,0.5))),t[b]=u(k.pow(l,1/3)),b++);l++}var n=[],h=h.SHA256=j.extend({_doReset:function(){this._hash=new v.init(s.slice(0))},_doProcessBlock:function(q,h){for(var a=this._hash.words,c=a[0],d=a[1],b=a[2],k=a[3],f=a[4],g=a[5],j=a[6],l=a[7],e=0;64>e;e++){if(16>e)n[e]=\nq[h+e]|0;else{var m=n[e-15],p=n[e-2];n[e]=((m<<25|m>>>7)^(m<<14|m>>>18)^m>>>3)+n[e-7]+((p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10)+n[e-16]}m=l+((f<<26|f>>>6)^(f<<21|f>>>11)^(f<<7|f>>>25))+(f&g^~f&j)+t[e]+n[e];p=((c<<30|c>>>2)^(c<<19|c>>>13)^(c<<10|c>>>22))+(c&d^c&b^d&b);l=j;j=g;g=f;f=k+m|0;k=b;b=d;d=c;c=m+p|0}a[0]=a[0]+c|0;a[1]=a[1]+d|0;a[2]=a[2]+b|0;a[3]=a[3]+k|0;a[4]=a[4]+f|0;a[5]=a[5]+g|0;a[6]=a[6]+j|0;a[7]=a[7]+l|0},_doFinalize:function(){var d=this._data,b=d.words,a=8*this._nDataBytes,c=8*d.sigBytes;\nb[c>>>5]|=128<<24-c%32;b[(c+64>>>9<<4)+14]=k.floor(a/4294967296);b[(c+64>>>9<<4)+15]=a;d.sigBytes=4*b.length;this._process();return this._hash},clone:function(){var b=j.clone.call(this);b._hash=this._hash.clone();return b}});g.SHA256=j._createHelper(h);g.HmacSHA256=j._createHmacHelper(h)})(Math);\n\n/*\nCryptoJS v3.1.2 sha224-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function(){var b=CryptoJS,d=b.lib.WordArray,a=b.algo,c=a.SHA256,a=a.SHA224=c.extend({_doReset:function(){this._hash=new d.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var a=c._doFinalize.call(this);a.sigBytes-=4;return a}});b.SHA224=c._createHelper(a);b.HmacSHA224=c._createHmacHelper(a)})();\n\n/*\nCryptoJS v3.1.2 sha512-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function(){function a(){return d.create.apply(d,arguments)}for(var n=CryptoJS,r=n.lib.Hasher,e=n.x64,d=e.Word,T=e.WordArray,e=n.algo,ea=[a(1116352408,3609767458),a(1899447441,602891725),a(3049323471,3964484399),a(3921009573,2173295548),a(961987163,4081628472),a(1508970993,3053834265),a(2453635748,2937671579),a(2870763221,3664609560),a(3624381080,2734883394),a(310598401,1164996542),a(607225278,1323610764),a(1426881987,3590304994),a(1925078388,4068182383),a(2162078206,991336113),a(2614888103,633803317),\na(3248222580,3479774868),a(3835390401,2666613458),a(4022224774,944711139),a(264347078,2341262773),a(604807628,2007800933),a(770255983,1495990901),a(1249150122,1856431235),a(1555081692,3175218132),a(1996064986,2198950837),a(2554220882,3999719339),a(2821834349,766784016),a(2952996808,2566594879),a(3210313671,3203337956),a(3336571891,1034457026),a(3584528711,2466948901),a(113926993,3758326383),a(338241895,168717936),a(666307205,1188179964),a(773529912,1546045734),a(1294757372,1522805485),a(1396182291,\n2643833823),a(1695183700,2343527390),a(1986661051,1014477480),a(2177026350,1206759142),a(2456956037,344077627),a(2730485921,1290863460),a(2820302411,3158454273),a(3259730800,3505952657),a(3345764771,106217008),a(3516065817,3606008344),a(3600352804,1432725776),a(4094571909,1467031594),a(275423344,851169720),a(430227734,3100823752),a(506948616,1363258195),a(659060556,3750685593),a(883997877,3785050280),a(958139571,3318307427),a(1322822218,3812723403),a(1537002063,2003034995),a(1747873779,3602036899),\na(1955562222,1575990012),a(2024104815,1125592928),a(2227730452,2716904306),a(2361852424,442776044),a(2428436474,593698344),a(2756734187,3733110249),a(3204031479,2999351573),a(3329325298,3815920427),a(3391569614,3928383900),a(3515267271,566280711),a(3940187606,3454069534),a(4118630271,4000239992),a(116418474,1914138554),a(174292421,2731055270),a(289380356,3203993006),a(460393269,320620315),a(685471733,587496836),a(852142971,1086792851),a(1017036298,365543100),a(1126000580,2618297676),a(1288033470,\n3409855158),a(1501505948,4234509866),a(1607167915,987167468),a(1816402316,1246189591)],v=[],w=0;80>w;w++)v[w]=a();e=e.SHA512=r.extend({_doReset:function(){this._hash=new T.init([new d.init(1779033703,4089235720),new d.init(3144134277,2227873595),new d.init(1013904242,4271175723),new d.init(2773480762,1595750129),new d.init(1359893119,2917565137),new d.init(2600822924,725511199),new d.init(528734635,4215389547),new d.init(1541459225,327033209)])},_doProcessBlock:function(a,d){for(var f=this._hash.words,\nF=f[0],e=f[1],n=f[2],r=f[3],G=f[4],H=f[5],I=f[6],f=f[7],w=F.high,J=F.low,X=e.high,K=e.low,Y=n.high,L=n.low,Z=r.high,M=r.low,$=G.high,N=G.low,aa=H.high,O=H.low,ba=I.high,P=I.low,ca=f.high,Q=f.low,k=w,g=J,z=X,x=K,A=Y,y=L,U=Z,B=M,l=$,h=N,R=aa,C=O,S=ba,D=P,V=ca,E=Q,m=0;80>m;m++){var s=v[m];if(16>m)var j=s.high=a[d+2*m]|0,b=s.low=a[d+2*m+1]|0;else{var j=v[m-15],b=j.high,p=j.low,j=(b>>>1|p<<31)^(b>>>8|p<<24)^b>>>7,p=(p>>>1|b<<31)^(p>>>8|b<<24)^(p>>>7|b<<25),u=v[m-2],b=u.high,c=u.low,u=(b>>>19|c<<13)^(b<<\n3|c>>>29)^b>>>6,c=(c>>>19|b<<13)^(c<<3|b>>>29)^(c>>>6|b<<26),b=v[m-7],W=b.high,t=v[m-16],q=t.high,t=t.low,b=p+b.low,j=j+W+(b>>>0<p>>>0?1:0),b=b+c,j=j+u+(b>>>0<c>>>0?1:0),b=b+t,j=j+q+(b>>>0<t>>>0?1:0);s.high=j;s.low=b}var W=l&R^~l&S,t=h&C^~h&D,s=k&z^k&A^z&A,T=g&x^g&y^x&y,p=(k>>>28|g<<4)^(k<<30|g>>>2)^(k<<25|g>>>7),u=(g>>>28|k<<4)^(g<<30|k>>>2)^(g<<25|k>>>7),c=ea[m],fa=c.high,da=c.low,c=E+((h>>>14|l<<18)^(h>>>18|l<<14)^(h<<23|l>>>9)),q=V+((l>>>14|h<<18)^(l>>>18|h<<14)^(l<<23|h>>>9))+(c>>>0<E>>>0?1:\n0),c=c+t,q=q+W+(c>>>0<t>>>0?1:0),c=c+da,q=q+fa+(c>>>0<da>>>0?1:0),c=c+b,q=q+j+(c>>>0<b>>>0?1:0),b=u+T,s=p+s+(b>>>0<u>>>0?1:0),V=S,E=D,S=R,D=C,R=l,C=h,h=B+c|0,l=U+q+(h>>>0<B>>>0?1:0)|0,U=A,B=y,A=z,y=x,z=k,x=g,g=c+b|0,k=q+s+(g>>>0<c>>>0?1:0)|0}J=F.low=J+g;F.high=w+k+(J>>>0<g>>>0?1:0);K=e.low=K+x;e.high=X+z+(K>>>0<x>>>0?1:0);L=n.low=L+y;n.high=Y+A+(L>>>0<y>>>0?1:0);M=r.low=M+B;r.high=Z+U+(M>>>0<B>>>0?1:0);N=G.low=N+h;G.high=$+l+(N>>>0<h>>>0?1:0);O=H.low=O+C;H.high=aa+R+(O>>>0<C>>>0?1:0);P=I.low=P+D;\nI.high=ba+S+(P>>>0<D>>>0?1:0);Q=f.low=Q+E;f.high=ca+V+(Q>>>0<E>>>0?1:0)},_doFinalize:function(){var a=this._data,d=a.words,f=8*this._nDataBytes,e=8*a.sigBytes;d[e>>>5]|=128<<24-e%32;d[(e+128>>>10<<5)+30]=Math.floor(f/4294967296);d[(e+128>>>10<<5)+31]=f;a.sigBytes=4*d.length;this._process();return this._hash.toX32()},clone:function(){var a=r.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});n.SHA512=r._createHelper(e);n.HmacSHA512=r._createHmacHelper(e)})();\n\n/*\nCryptoJS v3.1.2 sha384-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function(){var c=CryptoJS,a=c.x64,b=a.Word,e=a.WordArray,a=c.algo,d=a.SHA512,a=a.SHA384=d.extend({_doReset:function(){this._hash=new e.init([new b.init(3418070365,3238371032),new b.init(1654270250,914150663),new b.init(2438529370,812702999),new b.init(355462360,4144912697),new b.init(1731405415,4290775857),new b.init(2394180231,1750603025),new b.init(3675008525,1694076839),new b.init(1203062813,3204075428)])},_doFinalize:function(){var a=d._doFinalize.call(this);a.sigBytes-=16;return a}});c.SHA384=\nd._createHelper(a);c.HmacSHA384=d._createHmacHelper(a)})();\n\n/*\nCryptoJS v3.1.2 ripemd160-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n/*\n\n(c) 2012 by Cedric Mesnil. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n    - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n    - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n(function(){var q=CryptoJS,d=q.lib,n=d.WordArray,p=d.Hasher,d=q.algo,x=n.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),y=n.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),z=n.create([11,14,15,12,\n5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),A=n.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),B=n.create([0,1518500249,1859775393,2400959708,2840853838]),C=n.create([1352829926,1548603684,1836072691,\n2053994217,0]),d=d.RIPEMD160=p.extend({_doReset:function(){this._hash=n.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,v){for(var b=0;16>b;b++){var c=v+b,f=e[c];e[c]=(f<<8|f>>>24)&16711935|(f<<24|f>>>8)&4278255360}var c=this._hash.words,f=B.words,d=C.words,n=x.words,q=y.words,p=z.words,w=A.words,t,g,h,j,r,u,k,l,m,s;u=t=c[0];k=g=c[1];l=h=c[2];m=j=c[3];s=r=c[4];for(var a,b=0;80>b;b+=1)a=t+e[v+n[b]]|0,a=16>b?a+((g^h^j)+f[0]):32>b?a+((g&h|~g&j)+f[1]):48>b?\na+(((g|~h)^j)+f[2]):64>b?a+((g&j|h&~j)+f[3]):a+((g^(h|~j))+f[4]),a|=0,a=a<<p[b]|a>>>32-p[b],a=a+r|0,t=r,r=j,j=h<<10|h>>>22,h=g,g=a,a=u+e[v+q[b]]|0,a=16>b?a+((k^(l|~m))+d[0]):32>b?a+((k&m|l&~m)+d[1]):48>b?a+(((k|~l)^m)+d[2]):64>b?a+((k&l|~k&m)+d[3]):a+((k^l^m)+d[4]),a|=0,a=a<<w[b]|a>>>32-w[b],a=a+s|0,u=s,s=m,m=l<<10|l>>>22,l=k,k=a;a=c[1]+h+m|0;c[1]=c[2]+j+s|0;c[2]=c[3]+r+u|0;c[3]=c[4]+t+k|0;c[4]=c[0]+g+l|0;c[0]=a},_doFinalize:function(){var e=this._data,d=e.words,b=8*this._nDataBytes,c=8*e.sigBytes;\nd[c>>>5]|=128<<24-c%32;d[(c+64>>>9<<4)+14]=(b<<8|b>>>24)&16711935|(b<<24|b>>>8)&4278255360;e.sigBytes=4*(d.length+1);this._process();e=this._hash;d=e.words;for(b=0;5>b;b++)c=d[b],d[b]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return e},clone:function(){var d=p.clone.call(this);d._hash=this._hash.clone();return d}});q.RIPEMD160=p._createHelper(d);q.HmacRIPEMD160=p._createHmacHelper(d)})(Math);\n\n/*\nCryptoJS v3.1.2 hmac.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function(){var c=CryptoJS,k=c.enc.Utf8;c.algo.HMAC=c.lib.Base.extend({init:function(a,b){a=this._hasher=new a.init;\"string\"==typeof b&&(b=k.parse(b));var c=a.blockSize,e=4*c;b.sigBytes>e&&(b=a.finalize(b));b.clamp();for(var f=this._oKey=b.clone(),g=this._iKey=b.clone(),h=f.words,j=g.words,d=0;d<c;d++)h[d]^=1549556828,j[d]^=909522486;f.sigBytes=g.sigBytes=e;this.reset()},reset:function(){var a=this._hasher;a.reset();a.update(this._iKey)},update:function(a){this._hasher.update(a);return this},finalize:function(a){var b=\nthis._hasher;a=b.finalize(a);b.reset();return b.finalize(this._oKey.clone().concat(a))}})})();\n\n/*\nCryptoJS v3.1.2 pbkdf2-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function(){var b=CryptoJS,a=b.lib,d=a.Base,m=a.WordArray,a=b.algo,q=a.HMAC,l=a.PBKDF2=d.extend({cfg:d.extend({keySize:4,hasher:a.SHA1,iterations:1}),init:function(a){this.cfg=this.cfg.extend(a)},compute:function(a,b){for(var c=this.cfg,f=q.create(c.hasher,a),g=m.create(),d=m.create([1]),l=g.words,r=d.words,n=c.keySize,c=c.iterations;l.length<n;){var h=f.update(b).finalize(d);f.reset();for(var j=h.words,s=j.length,k=h,p=1;p<c;p++){k=f.finalize(k);f.reset();for(var t=k.words,e=0;e<s;e++)j[e]^=t[e]}g.concat(h);\nr[0]++}g.sigBytes=4*n;return g}});b.PBKDF2=function(a,b,c){return l.create(c).compute(a,b)}})();\n\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nvar b64map=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";var b64pad=\"=\";function hex2b64(d){var b;var e;var a=\"\";for(b=0;b+3<=d.length;b+=3){e=parseInt(d.substring(b,b+3),16);a+=b64map.charAt(e>>6)+b64map.charAt(e&63)}if(b+1==d.length){e=parseInt(d.substring(b,b+1),16);a+=b64map.charAt(e<<2)}else{if(b+2==d.length){e=parseInt(d.substring(b,b+2),16);a+=b64map.charAt(e>>2)+b64map.charAt((e&3)<<4)}}if(b64pad){while((a.length&3)>0){a+=b64pad}}return a}function b64tohex(f){var d=\"\";var e;var b=0;var c;var a;for(e=0;e<f.length;++e){if(f.charAt(e)==b64pad){break}a=b64map.indexOf(f.charAt(e));if(a<0){continue}if(b==0){d+=int2char(a>>2);c=a&3;b=1}else{if(b==1){d+=int2char((c<<2)|(a>>4));c=a&15;b=2}else{if(b==2){d+=int2char(c);d+=int2char(a>>2);c=a&3;b=3}else{d+=int2char((c<<2)|(a>>4));d+=int2char(a&15);b=0}}}}if(b==1){d+=int2char(c<<2)}return d}function b64toBA(e){var d=b64tohex(e);var c;var b=new Array();for(c=0;2*c<d.length;++c){b[c]=parseInt(d.substring(2*c,2*c+2),16)}return b};\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nvar dbits;var canary=244837814094590;var j_lm=((canary&16777215)==15715070);function BigInteger(e,d,f){if(e!=null){if(\"number\"==typeof e){this.fromNumber(e,d,f)}else{if(d==null&&\"string\"!=typeof e){this.fromString(e,256)}else{this.fromString(e,d)}}}}function nbi(){return new BigInteger(null)}function am1(f,a,b,e,h,g){while(--g>=0){var d=a*this[f++]+b[e]+h;h=Math.floor(d/67108864);b[e++]=d&67108863}return h}function am2(f,q,r,e,o,a){var k=q&32767,p=q>>15;while(--a>=0){var d=this[f]&32767;var g=this[f++]>>15;var b=p*d+g*k;d=k*d+((b&32767)<<15)+r[e]+(o&1073741823);o=(d>>>30)+(b>>>15)+p*g+(o>>>30);r[e++]=d&1073741823}return o}function am3(f,q,r,e,o,a){var k=q&16383,p=q>>14;while(--a>=0){var d=this[f]&16383;var g=this[f++]>>14;var b=p*d+g*k;d=k*d+((b&16383)<<14)+r[e]+o;o=(d>>28)+(b>>14)+p*g;r[e++]=d&268435455}return o}if(j_lm&&(navigator.appName==\"Microsoft Internet Explorer\")){BigInteger.prototype.am=am2;dbits=30}else{if(j_lm&&(navigator.appName!=\"Netscape\")){BigInteger.prototype.am=am1;dbits=26}else{BigInteger.prototype.am=am3;dbits=28}}BigInteger.prototype.DB=dbits;BigInteger.prototype.DM=((1<<dbits)-1);BigInteger.prototype.DV=(1<<dbits);var BI_FP=52;BigInteger.prototype.FV=Math.pow(2,BI_FP);BigInteger.prototype.F1=BI_FP-dbits;BigInteger.prototype.F2=2*dbits-BI_FP;var BI_RM=\"0123456789abcdefghijklmnopqrstuvwxyz\";var BI_RC=new Array();var rr,vv;rr=\"0\".charCodeAt(0);for(vv=0;vv<=9;++vv){BI_RC[rr++]=vv}rr=\"a\".charCodeAt(0);for(vv=10;vv<36;++vv){BI_RC[rr++]=vv}rr=\"A\".charCodeAt(0);for(vv=10;vv<36;++vv){BI_RC[rr++]=vv}function int2char(a){return BI_RM.charAt(a)}function intAt(b,a){var d=BI_RC[b.charCodeAt(a)];return(d==null)?-1:d}function bnpCopyTo(b){for(var a=this.t-1;a>=0;--a){b[a]=this[a]}b.t=this.t;b.s=this.s}function bnpFromInt(a){this.t=1;this.s=(a<0)?-1:0;if(a>0){this[0]=a}else{if(a<-1){this[0]=a+this.DV}else{this.t=0}}}function nbv(a){var b=nbi();b.fromInt(a);return b}function bnpFromString(h,c){var e;if(c==16){e=4}else{if(c==8){e=3}else{if(c==256){e=8}else{if(c==2){e=1}else{if(c==32){e=5}else{if(c==4){e=2}else{this.fromRadix(h,c);return}}}}}}this.t=0;this.s=0;var g=h.length,d=false,f=0;while(--g>=0){var a=(e==8)?h[g]&255:intAt(h,g);if(a<0){if(h.charAt(g)==\"-\"){d=true}continue}d=false;if(f==0){this[this.t++]=a}else{if(f+e>this.DB){this[this.t-1]|=(a&((1<<(this.DB-f))-1))<<f;this[this.t++]=(a>>(this.DB-f))}else{this[this.t-1]|=a<<f}}f+=e;if(f>=this.DB){f-=this.DB}}if(e==8&&(h[0]&128)!=0){this.s=-1;if(f>0){this[this.t-1]|=((1<<(this.DB-f))-1)<<f}}this.clamp();if(d){BigInteger.ZERO.subTo(this,this)}}function bnpClamp(){var a=this.s&this.DM;while(this.t>0&&this[this.t-1]==a){--this.t}}function bnToString(c){if(this.s<0){return\"-\"+this.negate().toString(c)}var e;if(c==16){e=4}else{if(c==8){e=3}else{if(c==2){e=1}else{if(c==32){e=5}else{if(c==4){e=2}else{return this.toRadix(c)}}}}}var g=(1<<e)-1,l,a=false,h=\"\",f=this.t;var j=this.DB-(f*this.DB)%e;if(f-->0){if(j<this.DB&&(l=this[f]>>j)>0){a=true;h=int2char(l)}while(f>=0){if(j<e){l=(this[f]&((1<<j)-1))<<(e-j);l|=this[--f]>>(j+=this.DB-e)}else{l=(this[f]>>(j-=e))&g;if(j<=0){j+=this.DB;--f}}if(l>0){a=true}if(a){h+=int2char(l)}}}return a?h:\"0\"}function bnNegate(){var a=nbi();BigInteger.ZERO.subTo(this,a);return a}function bnAbs(){return(this.s<0)?this.negate():this}function bnCompareTo(b){var d=this.s-b.s;if(d!=0){return d}var c=this.t;d=c-b.t;if(d!=0){return(this.s<0)?-d:d}while(--c>=0){if((d=this[c]-b[c])!=0){return d}}return 0}function nbits(a){var c=1,b;if((b=a>>>16)!=0){a=b;c+=16}if((b=a>>8)!=0){a=b;c+=8}if((b=a>>4)!=0){a=b;c+=4}if((b=a>>2)!=0){a=b;c+=2}if((b=a>>1)!=0){a=b;c+=1}return c}function bnBitLength(){if(this.t<=0){return 0}return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM))}function bnpDLShiftTo(c,b){var a;for(a=this.t-1;a>=0;--a){b[a+c]=this[a]}for(a=c-1;a>=0;--a){b[a]=0}b.t=this.t+c;b.s=this.s}function bnpDRShiftTo(c,b){for(var a=c;a<this.t;++a){b[a-c]=this[a]}b.t=Math.max(this.t-c,0);b.s=this.s}function bnpLShiftTo(j,e){var b=j%this.DB;var a=this.DB-b;var g=(1<<a)-1;var f=Math.floor(j/this.DB),h=(this.s<<b)&this.DM,d;for(d=this.t-1;d>=0;--d){e[d+f+1]=(this[d]>>a)|h;h=(this[d]&g)<<b}for(d=f-1;d>=0;--d){e[d]=0}e[f]=h;e.t=this.t+f+1;e.s=this.s;e.clamp()}function bnpRShiftTo(g,d){d.s=this.s;var e=Math.floor(g/this.DB);if(e>=this.t){d.t=0;return}var b=g%this.DB;var a=this.DB-b;var f=(1<<b)-1;d[0]=this[e]>>b;for(var c=e+1;c<this.t;++c){d[c-e-1]|=(this[c]&f)<<a;d[c-e]=this[c]>>b}if(b>0){d[this.t-e-1]|=(this.s&f)<<a}d.t=this.t-e;d.clamp()}function bnpSubTo(d,f){var e=0,g=0,b=Math.min(d.t,this.t);while(e<b){g+=this[e]-d[e];f[e++]=g&this.DM;g>>=this.DB}if(d.t<this.t){g-=d.s;while(e<this.t){g+=this[e];f[e++]=g&this.DM;g>>=this.DB}g+=this.s}else{g+=this.s;while(e<d.t){g-=d[e];f[e++]=g&this.DM;g>>=this.DB}g-=d.s}f.s=(g<0)?-1:0;if(g<-1){f[e++]=this.DV+g}else{if(g>0){f[e++]=g}}f.t=e;f.clamp()}function bnpMultiplyTo(c,e){var b=this.abs(),f=c.abs();var d=b.t;e.t=d+f.t;while(--d>=0){e[d]=0}for(d=0;d<f.t;++d){e[d+b.t]=b.am(0,f[d],e,d,0,b.t)}e.s=0;e.clamp();if(this.s!=c.s){BigInteger.ZERO.subTo(e,e)}}function bnpSquareTo(d){var a=this.abs();var b=d.t=2*a.t;while(--b>=0){d[b]=0}for(b=0;b<a.t-1;++b){var e=a.am(b,a[b],d,2*b,0,1);if((d[b+a.t]+=a.am(b+1,2*a[b],d,2*b+1,e,a.t-b-1))>=a.DV){d[b+a.t]-=a.DV;d[b+a.t+1]=1}}if(d.t>0){d[d.t-1]+=a.am(b,a[b],d,2*b,0,1)}d.s=0;d.clamp()}function bnpDivRemTo(n,h,g){var w=n.abs();if(w.t<=0){return}var k=this.abs();if(k.t<w.t){if(h!=null){h.fromInt(0)}if(g!=null){this.copyTo(g)}return}if(g==null){g=nbi()}var d=nbi(),a=this.s,l=n.s;var v=this.DB-nbits(w[w.t-1]);if(v>0){w.lShiftTo(v,d);k.lShiftTo(v,g)}else{w.copyTo(d);k.copyTo(g)}var p=d.t;var b=d[p-1];if(b==0){return}var o=b*(1<<this.F1)+((p>1)?d[p-2]>>this.F2:0);var A=this.FV/o,z=(1<<this.F1)/o,x=1<<this.F2;var u=g.t,s=u-p,f=(h==null)?nbi():h;d.dlShiftTo(s,f);if(g.compareTo(f)>=0){g[g.t++]=1;g.subTo(f,g)}BigInteger.ONE.dlShiftTo(p,f);f.subTo(d,d);while(d.t<p){d[d.t++]=0}while(--s>=0){var c=(g[--u]==b)?this.DM:Math.floor(g[u]*A+(g[u-1]+x)*z);if((g[u]+=d.am(0,c,g,s,0,p))<c){d.dlShiftTo(s,f);g.subTo(f,g);while(g[u]<--c){g.subTo(f,g)}}}if(h!=null){g.drShiftTo(p,h);if(a!=l){BigInteger.ZERO.subTo(h,h)}}g.t=p;g.clamp();if(v>0){g.rShiftTo(v,g)}if(a<0){BigInteger.ZERO.subTo(g,g)}}function bnMod(b){var c=nbi();this.abs().divRemTo(b,null,c);if(this.s<0&&c.compareTo(BigInteger.ZERO)>0){b.subTo(c,c)}return c}function Classic(a){this.m=a}function cConvert(a){if(a.s<0||a.compareTo(this.m)>=0){return a.mod(this.m)}else{return a}}function cRevert(a){return a}function cReduce(a){a.divRemTo(this.m,null,a)}function cMulTo(a,c,b){a.multiplyTo(c,b);this.reduce(b)}function cSqrTo(a,b){a.squareTo(b);this.reduce(b)}Classic.prototype.convert=cConvert;Classic.prototype.revert=cRevert;Classic.prototype.reduce=cReduce;Classic.prototype.mulTo=cMulTo;Classic.prototype.sqrTo=cSqrTo;function bnpInvDigit(){if(this.t<1){return 0}var a=this[0];if((a&1)==0){return 0}var b=a&3;b=(b*(2-(a&15)*b))&15;b=(b*(2-(a&255)*b))&255;b=(b*(2-(((a&65535)*b)&65535)))&65535;b=(b*(2-a*b%this.DV))%this.DV;return(b>0)?this.DV-b:-b}function Montgomery(a){this.m=a;this.mp=a.invDigit();this.mpl=this.mp&32767;this.mph=this.mp>>15;this.um=(1<<(a.DB-15))-1;this.mt2=2*a.t}function montConvert(a){var b=nbi();a.abs().dlShiftTo(this.m.t,b);b.divRemTo(this.m,null,b);if(a.s<0&&b.compareTo(BigInteger.ZERO)>0){this.m.subTo(b,b)}return b}function montRevert(a){var b=nbi();a.copyTo(b);this.reduce(b);return b}function montReduce(a){while(a.t<=this.mt2){a[a.t++]=0}for(var c=0;c<this.m.t;++c){var b=a[c]&32767;var d=(b*this.mpl+(((b*this.mph+(a[c]>>15)*this.mpl)&this.um)<<15))&a.DM;b=c+this.m.t;a[b]+=this.m.am(0,d,a,c,0,this.m.t);while(a[b]>=a.DV){a[b]-=a.DV;a[++b]++}}a.clamp();a.drShiftTo(this.m.t,a);if(a.compareTo(this.m)>=0){a.subTo(this.m,a)}}function montSqrTo(a,b){a.squareTo(b);this.reduce(b)}function montMulTo(a,c,b){a.multiplyTo(c,b);this.reduce(b)}Montgomery.prototype.convert=montConvert;Montgomery.prototype.revert=montRevert;Montgomery.prototype.reduce=montReduce;Montgomery.prototype.mulTo=montMulTo;Montgomery.prototype.sqrTo=montSqrTo;function bnpIsEven(){return((this.t>0)?(this[0]&1):this.s)==0}function bnpExp(h,j){if(h>4294967295||h<1){return BigInteger.ONE}var f=nbi(),a=nbi(),d=j.convert(this),c=nbits(h)-1;d.copyTo(f);while(--c>=0){j.sqrTo(f,a);if((h&(1<<c))>0){j.mulTo(a,d,f)}else{var b=f;f=a;a=b}}return j.revert(f)}function bnModPowInt(b,a){var c;if(b<256||a.isEven()){c=new Classic(a)}else{c=new Montgomery(a)}return this.exp(b,c)}BigInteger.prototype.copyTo=bnpCopyTo;BigInteger.prototype.fromInt=bnpFromInt;BigInteger.prototype.fromString=bnpFromString;BigInteger.prototype.clamp=bnpClamp;BigInteger.prototype.dlShiftTo=bnpDLShiftTo;BigInteger.prototype.drShiftTo=bnpDRShiftTo;BigInteger.prototype.lShiftTo=bnpLShiftTo;BigInteger.prototype.rShiftTo=bnpRShiftTo;BigInteger.prototype.subTo=bnpSubTo;BigInteger.prototype.multiplyTo=bnpMultiplyTo;BigInteger.prototype.squareTo=bnpSquareTo;BigInteger.prototype.divRemTo=bnpDivRemTo;BigInteger.prototype.invDigit=bnpInvDigit;BigInteger.prototype.isEven=bnpIsEven;BigInteger.prototype.exp=bnpExp;BigInteger.prototype.toString=bnToString;BigInteger.prototype.negate=bnNegate;BigInteger.prototype.abs=bnAbs;BigInteger.prototype.compareTo=bnCompareTo;BigInteger.prototype.bitLength=bnBitLength;BigInteger.prototype.mod=bnMod;BigInteger.prototype.modPowInt=bnModPowInt;BigInteger.ZERO=nbv(0);BigInteger.ONE=nbv(1);\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction bnClone(){var a=nbi();this.copyTo(a);return a}function bnIntValue(){if(this.s<0){if(this.t==1){return this[0]-this.DV}else{if(this.t==0){return -1}}}else{if(this.t==1){return this[0]}else{if(this.t==0){return 0}}}return((this[1]&((1<<(32-this.DB))-1))<<this.DB)|this[0]}function bnByteValue(){return(this.t==0)?this.s:(this[0]<<24)>>24}function bnShortValue(){return(this.t==0)?this.s:(this[0]<<16)>>16}function bnpChunkSize(a){return Math.floor(Math.LN2*this.DB/Math.log(a))}function bnSigNum(){if(this.s<0){return -1}else{if(this.t<=0||(this.t==1&&this[0]<=0)){return 0}else{return 1}}}function bnpToRadix(c){if(c==null){c=10}if(this.signum()==0||c<2||c>36){return\"0\"}var f=this.chunkSize(c);var e=Math.pow(c,f);var i=nbv(e),j=nbi(),h=nbi(),g=\"\";this.divRemTo(i,j,h);while(j.signum()>0){g=(e+h.intValue()).toString(c).substr(1)+g;j.divRemTo(i,j,h)}return h.intValue().toString(c)+g}function bnpFromRadix(m,h){this.fromInt(0);if(h==null){h=10}var f=this.chunkSize(h);var g=Math.pow(h,f),e=false,a=0,l=0;for(var c=0;c<m.length;++c){var k=intAt(m,c);if(k<0){if(m.charAt(c)==\"-\"&&this.signum()==0){e=true}continue}l=h*l+k;if(++a>=f){this.dMultiply(g);this.dAddOffset(l,0);a=0;l=0}}if(a>0){this.dMultiply(Math.pow(h,a));this.dAddOffset(l,0)}if(e){BigInteger.ZERO.subTo(this,this)}}function bnpFromNumber(f,e,h){if(\"number\"==typeof e){if(f<2){this.fromInt(1)}else{this.fromNumber(f,h);if(!this.testBit(f-1)){this.bitwiseTo(BigInteger.ONE.shiftLeft(f-1),op_or,this)}if(this.isEven()){this.dAddOffset(1,0)}while(!this.isProbablePrime(e)){this.dAddOffset(2,0);if(this.bitLength()>f){this.subTo(BigInteger.ONE.shiftLeft(f-1),this)}}}}else{var d=new Array(),g=f&7;d.length=(f>>3)+1;e.nextBytes(d);if(g>0){d[0]&=((1<<g)-1)}else{d[0]=0}this.fromString(d,256)}}function bnToByteArray(){var b=this.t,c=new Array();c[0]=this.s;var e=this.DB-(b*this.DB)%8,f,a=0;if(b-->0){if(e<this.DB&&(f=this[b]>>e)!=(this.s&this.DM)>>e){c[a++]=f|(this.s<<(this.DB-e))}while(b>=0){if(e<8){f=(this[b]&((1<<e)-1))<<(8-e);f|=this[--b]>>(e+=this.DB-8)}else{f=(this[b]>>(e-=8))&255;if(e<=0){e+=this.DB;--b}}if((f&128)!=0){f|=-256}if(a==0&&(this.s&128)!=(f&128)){++a}if(a>0||f!=this.s){c[a++]=f}}}return c}function bnEquals(b){return(this.compareTo(b)==0)}function bnMin(b){return(this.compareTo(b)<0)?this:b}function bnMax(b){return(this.compareTo(b)>0)?this:b}function bnpBitwiseTo(c,h,e){var d,g,b=Math.min(c.t,this.t);for(d=0;d<b;++d){e[d]=h(this[d],c[d])}if(c.t<this.t){g=c.s&this.DM;for(d=b;d<this.t;++d){e[d]=h(this[d],g)}e.t=this.t}else{g=this.s&this.DM;for(d=b;d<c.t;++d){e[d]=h(g,c[d])}e.t=c.t}e.s=h(this.s,c.s);e.clamp()}function op_and(a,b){return a&b}function bnAnd(b){var c=nbi();this.bitwiseTo(b,op_and,c);return c}function op_or(a,b){return a|b}function bnOr(b){var c=nbi();this.bitwiseTo(b,op_or,c);return c}function op_xor(a,b){return a^b}function bnXor(b){var c=nbi();this.bitwiseTo(b,op_xor,c);return c}function op_andnot(a,b){return a&~b}function bnAndNot(b){var c=nbi();this.bitwiseTo(b,op_andnot,c);return c}function bnNot(){var b=nbi();for(var a=0;a<this.t;++a){b[a]=this.DM&~this[a]}b.t=this.t;b.s=~this.s;return b}function bnShiftLeft(b){var a=nbi();if(b<0){this.rShiftTo(-b,a)}else{this.lShiftTo(b,a)}return a}function bnShiftRight(b){var a=nbi();if(b<0){this.lShiftTo(-b,a)}else{this.rShiftTo(b,a)}return a}function lbit(a){if(a==0){return -1}var b=0;if((a&65535)==0){a>>=16;b+=16}if((a&255)==0){a>>=8;b+=8}if((a&15)==0){a>>=4;b+=4}if((a&3)==0){a>>=2;b+=2}if((a&1)==0){++b}return b}function bnGetLowestSetBit(){for(var a=0;a<this.t;++a){if(this[a]!=0){return a*this.DB+lbit(this[a])}}if(this.s<0){return this.t*this.DB}return -1}function cbit(a){var b=0;while(a!=0){a&=a-1;++b}return b}function bnBitCount(){var c=0,a=this.s&this.DM;for(var b=0;b<this.t;++b){c+=cbit(this[b]^a)}return c}function bnTestBit(b){var a=Math.floor(b/this.DB);if(a>=this.t){return(this.s!=0)}return((this[a]&(1<<(b%this.DB)))!=0)}function bnpChangeBit(c,b){var a=BigInteger.ONE.shiftLeft(c);this.bitwiseTo(a,b,a);return a}function bnSetBit(a){return this.changeBit(a,op_or)}function bnClearBit(a){return this.changeBit(a,op_andnot)}function bnFlipBit(a){return this.changeBit(a,op_xor)}function bnpAddTo(d,f){var e=0,g=0,b=Math.min(d.t,this.t);while(e<b){g+=this[e]+d[e];f[e++]=g&this.DM;g>>=this.DB}if(d.t<this.t){g+=d.s;while(e<this.t){g+=this[e];f[e++]=g&this.DM;g>>=this.DB}g+=this.s}else{g+=this.s;while(e<d.t){g+=d[e];f[e++]=g&this.DM;g>>=this.DB}g+=d.s}f.s=(g<0)?-1:0;if(g>0){f[e++]=g}else{if(g<-1){f[e++]=this.DV+g}}f.t=e;f.clamp()}function bnAdd(b){var c=nbi();this.addTo(b,c);return c}function bnSubtract(b){var c=nbi();this.subTo(b,c);return c}function bnMultiply(b){var c=nbi();this.multiplyTo(b,c);return c}function bnSquare(){var a=nbi();this.squareTo(a);return a}function bnDivide(b){var c=nbi();this.divRemTo(b,c,null);return c}function bnRemainder(b){var c=nbi();this.divRemTo(b,null,c);return c}function bnDivideAndRemainder(b){var d=nbi(),c=nbi();this.divRemTo(b,d,c);return new Array(d,c)}function bnpDMultiply(a){this[this.t]=this.am(0,a-1,this,0,0,this.t);++this.t;this.clamp()}function bnpDAddOffset(b,a){if(b==0){return}while(this.t<=a){this[this.t++]=0}this[a]+=b;while(this[a]>=this.DV){this[a]-=this.DV;if(++a>=this.t){this[this.t++]=0}++this[a]}}function NullExp(){}function nNop(a){return a}function nMulTo(a,c,b){a.multiplyTo(c,b)}function nSqrTo(a,b){a.squareTo(b)}NullExp.prototype.convert=nNop;NullExp.prototype.revert=nNop;NullExp.prototype.mulTo=nMulTo;NullExp.prototype.sqrTo=nSqrTo;function bnPow(a){return this.exp(a,new NullExp())}function bnpMultiplyLowerTo(b,f,e){var d=Math.min(this.t+b.t,f);e.s=0;e.t=d;while(d>0){e[--d]=0}var c;for(c=e.t-this.t;d<c;++d){e[d+this.t]=this.am(0,b[d],e,d,0,this.t)}for(c=Math.min(b.t,f);d<c;++d){this.am(0,b[d],e,d,0,f-d)}e.clamp()}function bnpMultiplyUpperTo(b,e,d){--e;var c=d.t=this.t+b.t-e;d.s=0;while(--c>=0){d[c]=0}for(c=Math.max(e-this.t,0);c<b.t;++c){d[this.t+c-e]=this.am(e-c,b[c],d,0,0,this.t+c-e)}d.clamp();d.drShiftTo(1,d)}function Barrett(a){this.r2=nbi();this.q3=nbi();BigInteger.ONE.dlShiftTo(2*a.t,this.r2);this.mu=this.r2.divide(a);this.m=a}function barrettConvert(a){if(a.s<0||a.t>2*this.m.t){return a.mod(this.m)}else{if(a.compareTo(this.m)<0){return a}else{var b=nbi();a.copyTo(b);this.reduce(b);return b}}}function barrettRevert(a){return a}function barrettReduce(a){a.drShiftTo(this.m.t-1,this.r2);if(a.t>this.m.t+1){a.t=this.m.t+1;a.clamp()}this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);while(a.compareTo(this.r2)<0){a.dAddOffset(1,this.m.t+1)}a.subTo(this.r2,a);while(a.compareTo(this.m)>=0){a.subTo(this.m,a)}}function barrettSqrTo(a,b){a.squareTo(b);this.reduce(b)}function barrettMulTo(a,c,b){a.multiplyTo(c,b);this.reduce(b)}Barrett.prototype.convert=barrettConvert;Barrett.prototype.revert=barrettRevert;Barrett.prototype.reduce=barrettReduce;Barrett.prototype.mulTo=barrettMulTo;Barrett.prototype.sqrTo=barrettSqrTo;function bnModPow(q,f){var o=q.bitLength(),h,b=nbv(1),v;if(o<=0){return b}else{if(o<18){h=1}else{if(o<48){h=3}else{if(o<144){h=4}else{if(o<768){h=5}else{h=6}}}}}if(o<8){v=new Classic(f)}else{if(f.isEven()){v=new Barrett(f)}else{v=new Montgomery(f)}}var p=new Array(),d=3,s=h-1,a=(1<<h)-1;p[1]=v.convert(this);if(h>1){var A=nbi();v.sqrTo(p[1],A);while(d<=a){p[d]=nbi();v.mulTo(A,p[d-2],p[d]);d+=2}}var l=q.t-1,x,u=true,c=nbi(),y;o=nbits(q[l])-1;while(l>=0){if(o>=s){x=(q[l]>>(o-s))&a}else{x=(q[l]&((1<<(o+1))-1))<<(s-o);if(l>0){x|=q[l-1]>>(this.DB+o-s)}}d=h;while((x&1)==0){x>>=1;--d}if((o-=d)<0){o+=this.DB;--l}if(u){p[x].copyTo(b);u=false}else{while(d>1){v.sqrTo(b,c);v.sqrTo(c,b);d-=2}if(d>0){v.sqrTo(b,c)}else{y=b;b=c;c=y}v.mulTo(c,p[x],b)}while(l>=0&&(q[l]&(1<<o))==0){v.sqrTo(b,c);y=b;b=c;c=y;if(--o<0){o=this.DB-1;--l}}}return v.revert(b)}function bnGCD(c){var b=(this.s<0)?this.negate():this.clone();var h=(c.s<0)?c.negate():c.clone();if(b.compareTo(h)<0){var e=b;b=h;h=e}var d=b.getLowestSetBit(),f=h.getLowestSetBit();if(f<0){return b}if(d<f){f=d}if(f>0){b.rShiftTo(f,b);h.rShiftTo(f,h)}while(b.signum()>0){if((d=b.getLowestSetBit())>0){b.rShiftTo(d,b)}if((d=h.getLowestSetBit())>0){h.rShiftTo(d,h)}if(b.compareTo(h)>=0){b.subTo(h,b);b.rShiftTo(1,b)}else{h.subTo(b,h);h.rShiftTo(1,h)}}if(f>0){h.lShiftTo(f,h)}return h}function bnpModInt(e){if(e<=0){return 0}var c=this.DV%e,b=(this.s<0)?e-1:0;if(this.t>0){if(c==0){b=this[0]%e}else{for(var a=this.t-1;a>=0;--a){b=(c*b+this[a])%e}}}return b}function bnModInverse(f){var j=f.isEven();if((this.isEven()&&j)||f.signum()==0){return BigInteger.ZERO}var i=f.clone(),h=this.clone();var g=nbv(1),e=nbv(0),l=nbv(0),k=nbv(1);while(i.signum()!=0){while(i.isEven()){i.rShiftTo(1,i);if(j){if(!g.isEven()||!e.isEven()){g.addTo(this,g);e.subTo(f,e)}g.rShiftTo(1,g)}else{if(!e.isEven()){e.subTo(f,e)}}e.rShiftTo(1,e)}while(h.isEven()){h.rShiftTo(1,h);if(j){if(!l.isEven()||!k.isEven()){l.addTo(this,l);k.subTo(f,k)}l.rShiftTo(1,l)}else{if(!k.isEven()){k.subTo(f,k)}}k.rShiftTo(1,k)}if(i.compareTo(h)>=0){i.subTo(h,i);if(j){g.subTo(l,g)}e.subTo(k,e)}else{h.subTo(i,h);if(j){l.subTo(g,l)}k.subTo(e,k)}}if(h.compareTo(BigInteger.ONE)!=0){return BigInteger.ZERO}if(k.compareTo(f)>=0){return k.subtract(f)}if(k.signum()<0){k.addTo(f,k)}else{return k}if(k.signum()<0){return k.add(f)}else{return k}}var lowprimes=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];var lplim=(1<<26)/lowprimes[lowprimes.length-1];function bnIsProbablePrime(e){var d,b=this.abs();if(b.t==1&&b[0]<=lowprimes[lowprimes.length-1]){for(d=0;d<lowprimes.length;++d){if(b[0]==lowprimes[d]){return true}}return false}if(b.isEven()){return false}d=1;while(d<lowprimes.length){var a=lowprimes[d],c=d+1;while(c<lowprimes.length&&a<lplim){a*=lowprimes[c++]}a=b.modInt(a);while(d<c){if(a%lowprimes[d++]==0){return false}}}return b.millerRabin(e)}function bnpMillerRabin(f){var g=this.subtract(BigInteger.ONE);var c=g.getLowestSetBit();if(c<=0){return false}var h=g.shiftRight(c);f=(f+1)>>1;if(f>lowprimes.length){f=lowprimes.length}var b=nbi();for(var e=0;e<f;++e){b.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]);var l=b.modPow(h,this);if(l.compareTo(BigInteger.ONE)!=0&&l.compareTo(g)!=0){var d=1;while(d++<c&&l.compareTo(g)!=0){l=l.modPowInt(2,this);if(l.compareTo(BigInteger.ONE)==0){return false}}if(l.compareTo(g)!=0){return false}}}return true}BigInteger.prototype.chunkSize=bnpChunkSize;BigInteger.prototype.toRadix=bnpToRadix;BigInteger.prototype.fromRadix=bnpFromRadix;BigInteger.prototype.fromNumber=bnpFromNumber;BigInteger.prototype.bitwiseTo=bnpBitwiseTo;BigInteger.prototype.changeBit=bnpChangeBit;BigInteger.prototype.addTo=bnpAddTo;BigInteger.prototype.dMultiply=bnpDMultiply;BigInteger.prototype.dAddOffset=bnpDAddOffset;BigInteger.prototype.multiplyLowerTo=bnpMultiplyLowerTo;BigInteger.prototype.multiplyUpperTo=bnpMultiplyUpperTo;BigInteger.prototype.modInt=bnpModInt;BigInteger.prototype.millerRabin=bnpMillerRabin;BigInteger.prototype.clone=bnClone;BigInteger.prototype.intValue=bnIntValue;BigInteger.prototype.byteValue=bnByteValue;BigInteger.prototype.shortValue=bnShortValue;BigInteger.prototype.signum=bnSigNum;BigInteger.prototype.toByteArray=bnToByteArray;BigInteger.prototype.equals=bnEquals;BigInteger.prototype.min=bnMin;BigInteger.prototype.max=bnMax;BigInteger.prototype.and=bnAnd;BigInteger.prototype.or=bnOr;BigInteger.prototype.xor=bnXor;BigInteger.prototype.andNot=bnAndNot;BigInteger.prototype.not=bnNot;BigInteger.prototype.shiftLeft=bnShiftLeft;BigInteger.prototype.shiftRight=bnShiftRight;BigInteger.prototype.getLowestSetBit=bnGetLowestSetBit;BigInteger.prototype.bitCount=bnBitCount;BigInteger.prototype.testBit=bnTestBit;BigInteger.prototype.setBit=bnSetBit;BigInteger.prototype.clearBit=bnClearBit;BigInteger.prototype.flipBit=bnFlipBit;BigInteger.prototype.add=bnAdd;BigInteger.prototype.subtract=bnSubtract;BigInteger.prototype.multiply=bnMultiply;BigInteger.prototype.divide=bnDivide;BigInteger.prototype.remainder=bnRemainder;BigInteger.prototype.divideAndRemainder=bnDivideAndRemainder;BigInteger.prototype.modPow=bnModPow;BigInteger.prototype.modInverse=bnModInverse;BigInteger.prototype.pow=bnPow;BigInteger.prototype.gcd=bnGCD;BigInteger.prototype.isProbablePrime=bnIsProbablePrime;BigInteger.prototype.square=bnSquare;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction Arcfour(){this.i=0;this.j=0;this.S=new Array()}function ARC4init(d){var c,a,b;for(c=0;c<256;++c){this.S[c]=c}a=0;for(c=0;c<256;++c){a=(a+this.S[c]+d[c%d.length])&255;b=this.S[c];this.S[c]=this.S[a];this.S[a]=b}this.i=0;this.j=0}function ARC4next(){var a;this.i=(this.i+1)&255;this.j=(this.j+this.S[this.i])&255;a=this.S[this.i];this.S[this.i]=this.S[this.j];this.S[this.j]=a;return this.S[(a+this.S[this.i])&255]}Arcfour.prototype.init=ARC4init;Arcfour.prototype.next=ARC4next;function prng_newstate(){return new Arcfour()}var rng_psize=256;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nvar rng_state;var rng_pool;var rng_pptr;function rng_seed_int(a){rng_pool[rng_pptr++]^=a&255;rng_pool[rng_pptr++]^=(a>>8)&255;rng_pool[rng_pptr++]^=(a>>16)&255;rng_pool[rng_pptr++]^=(a>>24)&255;if(rng_pptr>=rng_psize){rng_pptr-=rng_psize}}function rng_seed_time(){rng_seed_int(new Date().getTime())}if(rng_pool==null){rng_pool=new Array();rng_pptr=0;var t;if(window!==undefined&&(window.crypto!==undefined||window.msCrypto!==undefined)){var crypto=window.crypto||window.msCrypto;if(crypto.getRandomValues){var ua=new Uint8Array(32);crypto.getRandomValues(ua);for(t=0;t<32;++t){rng_pool[rng_pptr++]=ua[t]}}else{if(navigator.appName==\"Netscape\"&&navigator.appVersion<\"5\"){var z=window.crypto.random(32);for(t=0;t<z.length;++t){rng_pool[rng_pptr++]=z.charCodeAt(t)&255}}}}while(rng_pptr<rng_psize){t=Math.floor(65536*Math.random());rng_pool[rng_pptr++]=t>>>8;rng_pool[rng_pptr++]=t&255}rng_pptr=0;rng_seed_time()}function rng_get_byte(){if(rng_state==null){rng_seed_time();rng_state=prng_newstate();rng_state.init(rng_pool);for(rng_pptr=0;rng_pptr<rng_pool.length;++rng_pptr){rng_pool[rng_pptr]=0}rng_pptr=0}return rng_state.next()}function rng_get_bytes(b){var a;for(a=0;a<b.length;++a){b[a]=rng_get_byte()}}function SecureRandom(){}SecureRandom.prototype.nextBytes=rng_get_bytes;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction parseBigInt(b,a){return new BigInteger(b,a)}function linebrk(c,d){var a=\"\";var b=0;while(b+d<c.length){a+=c.substring(b,b+d)+\"\\n\";b+=d}return a+c.substring(b,c.length)}function byte2Hex(a){if(a<16){return\"0\"+a.toString(16)}else{return a.toString(16)}}function pkcs1pad2(e,h){if(h<e.length+11){throw\"Message too long for RSA\";return null}var g=new Array();var d=e.length-1;while(d>=0&&h>0){var f=e.charCodeAt(d--);if(f<128){g[--h]=f}else{if((f>127)&&(f<2048)){g[--h]=(f&63)|128;g[--h]=(f>>6)|192}else{g[--h]=(f&63)|128;g[--h]=((f>>6)&63)|128;g[--h]=(f>>12)|224}}}g[--h]=0;var b=new SecureRandom();var a=new Array();while(h>2){a[0]=0;while(a[0]==0){b.nextBytes(a)}g[--h]=a[0]}g[--h]=2;g[--h]=0;return new BigInteger(g)}function oaep_mgf1_arr(c,a,e){var b=\"\",d=0;while(b.length<a){b+=e(String.fromCharCode.apply(String,c.concat([(d&4278190080)>>24,(d&16711680)>>16,(d&65280)>>8,d&255])));d+=1}return b}function oaep_pad(q,a,f,l){var c=KJUR.crypto.MessageDigest;var o=KJUR.crypto.Util;var b=null;if(!f){f=\"sha1\"}if(typeof f===\"string\"){b=c.getCanonicalAlgName(f);l=c.getHashLength(b);f=function(i){return hextorstr(o.hashHex(rstrtohex(i),b))}}if(q.length+2*l+2>a){throw\"Message too long for RSA\"}var k=\"\",e;for(e=0;e<a-q.length-2*l-2;e+=1){k+=\"\\x00\"}var h=f(\"\")+k+\"\\x01\"+q;var g=new Array(l);new SecureRandom().nextBytes(g);var j=oaep_mgf1_arr(g,h.length,f);var p=[];for(e=0;e<h.length;e+=1){p[e]=h.charCodeAt(e)^j.charCodeAt(e)}var m=oaep_mgf1_arr(p,g.length,f);var d=[0];for(e=0;e<g.length;e+=1){d[e+1]=g[e]^m.charCodeAt(e)}return new BigInteger(d.concat(p))}function RSAKey(){this.n=null;this.e=0;this.d=null;this.p=null;this.q=null;this.dmp1=null;this.dmq1=null;this.coeff=null}function RSASetPublic(b,a){this.isPublic=true;this.isPrivate=false;if(typeof b!==\"string\"){this.n=b;this.e=a}else{if(b!=null&&a!=null&&b.length>0&&a.length>0){this.n=parseBigInt(b,16);this.e=parseInt(a,16)}else{throw\"Invalid RSA public key\"}}}function RSADoPublic(a){return a.modPowInt(this.e,this.n)}function RSAEncrypt(d){var a=pkcs1pad2(d,(this.n.bitLength()+7)>>3);if(a==null){return null}var e=this.doPublic(a);if(e==null){return null}var b=e.toString(16);if((b.length&1)==0){return b}else{return\"0\"+b}}function RSAEncryptOAEP(f,e,b){var a=oaep_pad(f,(this.n.bitLength()+7)>>3,e,b);if(a==null){return null}var g=this.doPublic(a);if(g==null){return null}var d=g.toString(16);if((d.length&1)==0){return d}else{return\"0\"+d}}RSAKey.prototype.doPublic=RSADoPublic;RSAKey.prototype.setPublic=RSASetPublic;RSAKey.prototype.encrypt=RSAEncrypt;RSAKey.prototype.encryptOAEP=RSAEncryptOAEP;RSAKey.prototype.type=\"RSA\";\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction pkcs1unpad2(g,j){var a=g.toByteArray();var f=0;while(f<a.length&&a[f]==0){++f}if(a.length-f!=j-1||a[f]!=2){return null}++f;while(a[f]!=0){if(++f>=a.length){return null}}var e=\"\";while(++f<a.length){var h=a[f]&255;if(h<128){e+=String.fromCharCode(h)}else{if((h>191)&&(h<224)){e+=String.fromCharCode(((h&31)<<6)|(a[f+1]&63));++f}else{e+=String.fromCharCode(((h&15)<<12)|((a[f+1]&63)<<6)|(a[f+2]&63));f+=2}}}return e}function oaep_mgf1_str(c,a,e){var b=\"\",d=0;while(b.length<a){b+=e(c+String.fromCharCode.apply(String,[(d&4278190080)>>24,(d&16711680)>>16,(d&65280)>>8,d&255]));d+=1}return b}function oaep_unpad(o,b,g,p){var e=KJUR.crypto.MessageDigest;var r=KJUR.crypto.Util;var c=null;if(!g){g=\"sha1\"}if(typeof g===\"string\"){c=e.getCanonicalAlgName(g);p=e.getHashLength(c);g=function(d){return hextorstr(r.hashHex(rstrtohex(d),c))}}o=o.toByteArray();var h;for(h=0;h<o.length;h+=1){o[h]&=255}while(o.length<b){o.unshift(0)}o=String.fromCharCode.apply(String,o);if(o.length<2*p+2){throw\"Cipher too short\"}var f=o.substr(1,p);var s=o.substr(p+1);var q=oaep_mgf1_str(s,p,g);var k=[],h;for(h=0;h<f.length;h+=1){k[h]=f.charCodeAt(h)^q.charCodeAt(h)}var l=oaep_mgf1_str(String.fromCharCode.apply(String,k),o.length-p,g);var j=[];for(h=0;h<s.length;h+=1){j[h]=s.charCodeAt(h)^l.charCodeAt(h)}j=String.fromCharCode.apply(String,j);if(j.substr(0,p)!==g(\"\")){throw\"Hash mismatch\"}j=j.substr(p);var a=j.indexOf(\"\\x01\");var m=(a!=-1)?j.substr(0,a).lastIndexOf(\"\\x00\"):-1;if(m+1!=a){throw\"Malformed data\"}return j.substr(a+1)}function RSASetPrivate(c,a,b){this.isPrivate=true;if(typeof c!==\"string\"){this.n=c;this.e=a;this.d=b}else{if(c!=null&&a!=null&&c.length>0&&a.length>0){this.n=parseBigInt(c,16);this.e=parseInt(a,16);this.d=parseBigInt(b,16)}else{throw\"Invalid RSA private key\"}}}function RSASetPrivateEx(g,d,e,c,b,a,h,f){this.isPrivate=true;this.isPublic=false;if(g==null){throw\"RSASetPrivateEx N == null\"}if(d==null){throw\"RSASetPrivateEx E == null\"}if(g.length==0){throw\"RSASetPrivateEx N.length == 0\"}if(d.length==0){throw\"RSASetPrivateEx E.length == 0\"}if(g!=null&&d!=null&&g.length>0&&d.length>0){this.n=parseBigInt(g,16);this.e=parseInt(d,16);this.d=parseBigInt(e,16);this.p=parseBigInt(c,16);this.q=parseBigInt(b,16);this.dmp1=parseBigInt(a,16);this.dmq1=parseBigInt(h,16);this.coeff=parseBigInt(f,16)}else{throw\"Invalid RSA private key in RSASetPrivateEx\"}}function RSAGenerate(b,i){var a=new SecureRandom();var f=b>>1;this.e=parseInt(i,16);var c=new BigInteger(i,16);for(;;){for(;;){this.p=new BigInteger(b-f,1,a);if(this.p.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE)==0&&this.p.isProbablePrime(10)){break}}for(;;){this.q=new BigInteger(f,1,a);if(this.q.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE)==0&&this.q.isProbablePrime(10)){break}}if(this.p.compareTo(this.q)<=0){var h=this.p;this.p=this.q;this.q=h}var g=this.p.subtract(BigInteger.ONE);var d=this.q.subtract(BigInteger.ONE);var e=g.multiply(d);if(e.gcd(c).compareTo(BigInteger.ONE)==0){this.n=this.p.multiply(this.q);this.d=c.modInverse(e);this.dmp1=this.d.mod(g);this.dmq1=this.d.mod(d);this.coeff=this.q.modInverse(this.p);break}}this.isPrivate=true}function RSADoPrivate(a){if(this.p==null||this.q==null){return a.modPow(this.d,this.n)}var c=a.mod(this.p).modPow(this.dmp1,this.p);var b=a.mod(this.q).modPow(this.dmq1,this.q);while(c.compareTo(b)<0){c=c.add(this.p)}return c.subtract(b).multiply(this.coeff).mod(this.p).multiply(this.q).add(b)}function RSADecrypt(b){var d=parseBigInt(b,16);var a=this.doPrivate(d);if(a==null){return null}return pkcs1unpad2(a,(this.n.bitLength()+7)>>3)}function RSADecryptOAEP(e,d,b){var f=parseBigInt(e,16);var a=this.doPrivate(f);if(a==null){return null}return oaep_unpad(a,(this.n.bitLength()+7)>>3,d,b)}RSAKey.prototype.doPrivate=RSADoPrivate;RSAKey.prototype.setPrivate=RSASetPrivate;RSAKey.prototype.setPrivateEx=RSASetPrivateEx;RSAKey.prototype.generate=RSAGenerate;RSAKey.prototype.decrypt=RSADecrypt;RSAKey.prototype.decryptOAEP=RSADecryptOAEP;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction ECFieldElementFp(b,a){this.x=a;this.q=b}function feFpEquals(a){if(a==this){return true}return(this.q.equals(a.q)&&this.x.equals(a.x))}function feFpToBigInteger(){return this.x}function feFpNegate(){return new ECFieldElementFp(this.q,this.x.negate().mod(this.q))}function feFpAdd(a){return new ECFieldElementFp(this.q,this.x.add(a.toBigInteger()).mod(this.q))}function feFpSubtract(a){return new ECFieldElementFp(this.q,this.x.subtract(a.toBigInteger()).mod(this.q))}function feFpMultiply(a){return new ECFieldElementFp(this.q,this.x.multiply(a.toBigInteger()).mod(this.q))}function feFpSquare(){return new ECFieldElementFp(this.q,this.x.square().mod(this.q))}function feFpDivide(a){return new ECFieldElementFp(this.q,this.x.multiply(a.toBigInteger().modInverse(this.q)).mod(this.q))}ECFieldElementFp.prototype.equals=feFpEquals;ECFieldElementFp.prototype.toBigInteger=feFpToBigInteger;ECFieldElementFp.prototype.negate=feFpNegate;ECFieldElementFp.prototype.add=feFpAdd;ECFieldElementFp.prototype.subtract=feFpSubtract;ECFieldElementFp.prototype.multiply=feFpMultiply;ECFieldElementFp.prototype.square=feFpSquare;ECFieldElementFp.prototype.divide=feFpDivide;function ECPointFp(c,a,d,b){this.curve=c;this.x=a;this.y=d;if(b==null){this.z=BigInteger.ONE}else{this.z=b}this.zinv=null}function pointFpGetX(){if(this.zinv==null){this.zinv=this.z.modInverse(this.curve.q)}return this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))}function pointFpGetY(){if(this.zinv==null){this.zinv=this.z.modInverse(this.curve.q)}return this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))}function pointFpEquals(a){if(a==this){return true}if(this.isInfinity()){return a.isInfinity()}if(a.isInfinity()){return this.isInfinity()}var c,b;c=a.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(a.z)).mod(this.curve.q);if(!c.equals(BigInteger.ZERO)){return false}b=a.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(a.z)).mod(this.curve.q);return b.equals(BigInteger.ZERO)}function pointFpIsInfinity(){if((this.x==null)&&(this.y==null)){return true}return this.z.equals(BigInteger.ZERO)&&!this.y.toBigInteger().equals(BigInteger.ZERO)}function pointFpNegate(){return new ECPointFp(this.curve,this.x,this.y.negate(),this.z)}function pointFpAdd(l){if(this.isInfinity()){return l}if(l.isInfinity()){return this}var p=l.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(l.z)).mod(this.curve.q);var o=l.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(l.z)).mod(this.curve.q);if(BigInteger.ZERO.equals(o)){if(BigInteger.ZERO.equals(p)){return this.twice()}return this.curve.getInfinity()}var j=new BigInteger(\"3\");var e=this.x.toBigInteger();var n=this.y.toBigInteger();var c=l.x.toBigInteger();var k=l.y.toBigInteger();var m=o.square();var i=m.multiply(o);var d=e.multiply(m);var g=p.square().multiply(this.z);var a=g.subtract(d.shiftLeft(1)).multiply(l.z).subtract(i).multiply(o).mod(this.curve.q);var h=d.multiply(j).multiply(p).subtract(n.multiply(i)).subtract(g.multiply(p)).multiply(l.z).add(p.multiply(i)).mod(this.curve.q);var f=i.multiply(this.z).multiply(l.z).mod(this.curve.q);return new ECPointFp(this.curve,this.curve.fromBigInteger(a),this.curve.fromBigInteger(h),f)}function pointFpTwice(){if(this.isInfinity()){return this}if(this.y.toBigInteger().signum()==0){return this.curve.getInfinity()}var g=new BigInteger(\"3\");var c=this.x.toBigInteger();var h=this.y.toBigInteger();var e=h.multiply(this.z);var j=e.multiply(h).mod(this.curve.q);var i=this.curve.a.toBigInteger();var k=c.square().multiply(g);if(!BigInteger.ZERO.equals(i)){k=k.add(this.z.square().multiply(i))}k=k.mod(this.curve.q);var b=k.square().subtract(c.shiftLeft(3).multiply(j)).shiftLeft(1).multiply(e).mod(this.curve.q);var f=k.multiply(g).multiply(c).subtract(j.shiftLeft(1)).shiftLeft(2).multiply(j).subtract(k.square().multiply(k)).mod(this.curve.q);var d=e.square().multiply(e).shiftLeft(3).mod(this.curve.q);return new ECPointFp(this.curve,this.curve.fromBigInteger(b),this.curve.fromBigInteger(f),d)}function pointFpMultiply(b){if(this.isInfinity()){return this}if(b.signum()==0){return this.curve.getInfinity()}var g=b;var f=g.multiply(new BigInteger(\"3\"));var l=this.negate();var d=this;var c;for(c=f.bitLength()-2;c>0;--c){d=d.twice();var a=f.testBit(c);var j=g.testBit(c);if(a!=j){d=d.add(a?this:l)}}return d}function pointFpMultiplyTwo(c,a,b){var d;if(c.bitLength()>b.bitLength()){d=c.bitLength()-1}else{d=b.bitLength()-1}var f=this.curve.getInfinity();var e=this.add(a);while(d>=0){f=f.twice();if(c.testBit(d)){if(b.testBit(d)){f=f.add(e)}else{f=f.add(this)}}else{if(b.testBit(d)){f=f.add(a)}}--d}return f}ECPointFp.prototype.getX=pointFpGetX;ECPointFp.prototype.getY=pointFpGetY;ECPointFp.prototype.equals=pointFpEquals;ECPointFp.prototype.isInfinity=pointFpIsInfinity;ECPointFp.prototype.negate=pointFpNegate;ECPointFp.prototype.add=pointFpAdd;ECPointFp.prototype.twice=pointFpTwice;ECPointFp.prototype.multiply=pointFpMultiply;ECPointFp.prototype.multiplyTwo=pointFpMultiplyTwo;function ECCurveFp(e,d,c){this.q=e;this.a=this.fromBigInteger(d);this.b=this.fromBigInteger(c);this.infinity=new ECPointFp(this,null,null)}function curveFpGetQ(){return this.q}function curveFpGetA(){return this.a}function curveFpGetB(){return this.b}function curveFpEquals(a){if(a==this){return true}return(this.q.equals(a.q)&&this.a.equals(a.a)&&this.b.equals(a.b))}function curveFpGetInfinity(){return this.infinity}function curveFpFromBigInteger(a){return new ECFieldElementFp(this.q,a)}function curveFpDecodePointHex(d){switch(parseInt(d.substr(0,2),16)){case 0:return this.infinity;case 2:case 3:return null;case 4:case 6:case 7:var a=(d.length-2)/2;var c=d.substr(2,a);var b=d.substr(a+2,a);return new ECPointFp(this,this.fromBigInteger(new BigInteger(c,16)),this.fromBigInteger(new BigInteger(b,16)));default:return null}}ECCurveFp.prototype.getQ=curveFpGetQ;ECCurveFp.prototype.getA=curveFpGetA;ECCurveFp.prototype.getB=curveFpGetB;ECCurveFp.prototype.equals=curveFpEquals;ECCurveFp.prototype.getInfinity=curveFpGetInfinity;ECCurveFp.prototype.fromBigInteger=curveFpFromBigInteger;ECCurveFp.prototype.decodePointHex=curveFpDecodePointHex;\n/*! (c) Stefan Thomas | https://github.com/bitcoinjs/bitcoinjs-lib\n */\nECFieldElementFp.prototype.getByteLength=function(){return Math.floor((this.toBigInteger().bitLength()+7)/8)};ECPointFp.prototype.getEncoded=function(c){var d=function(h,f){var g=h.toByteArrayUnsigned();if(f<g.length){g=g.slice(g.length-f)}else{while(f>g.length){g.unshift(0)}}return g};var a=this.getX().toBigInteger();var e=this.getY().toBigInteger();var b=d(a,32);if(c){if(e.isEven()){b.unshift(2)}else{b.unshift(3)}}else{b.unshift(4);b=b.concat(d(e,32))}return b};ECPointFp.decodeFrom=function(g,c){var f=c[0];var e=c.length-1;var d=c.slice(1,1+e/2);var b=c.slice(1+e/2,1+e);d.unshift(0);b.unshift(0);var a=new BigInteger(d);var h=new BigInteger(b);return new ECPointFp(g,g.fromBigInteger(a),g.fromBigInteger(h))};ECPointFp.decodeFromHex=function(g,c){var f=c.substr(0,2);var e=c.length-2;var d=c.substr(2,e/2);var b=c.substr(2+e/2,e/2);var a=new BigInteger(d,16);var h=new BigInteger(b,16);return new ECPointFp(g,g.fromBigInteger(a),g.fromBigInteger(h))};ECPointFp.prototype.add2D=function(c){if(this.isInfinity()){return c}if(c.isInfinity()){return this}if(this.x.equals(c.x)){if(this.y.equals(c.y)){return this.twice()}return this.curve.getInfinity()}var g=c.x.subtract(this.x);var e=c.y.subtract(this.y);var a=e.divide(g);var d=a.square().subtract(this.x).subtract(c.x);var f=a.multiply(this.x.subtract(d)).subtract(this.y);return new ECPointFp(this.curve,d,f)};ECPointFp.prototype.twice2D=function(){if(this.isInfinity()){return this}if(this.y.toBigInteger().signum()==0){return this.curve.getInfinity()}var b=this.curve.fromBigInteger(BigInteger.valueOf(2));var e=this.curve.fromBigInteger(BigInteger.valueOf(3));var a=this.x.square().multiply(e).add(this.curve.a).divide(this.y.multiply(b));var c=a.square().subtract(this.x.multiply(b));var d=a.multiply(this.x.subtract(c)).subtract(this.y);return new ECPointFp(this.curve,c,d)};ECPointFp.prototype.multiply2D=function(b){if(this.isInfinity()){return this}if(b.signum()==0){return this.curve.getInfinity()}var g=b;var f=g.multiply(new BigInteger(\"3\"));var l=this.negate();var d=this;var c;for(c=f.bitLength()-2;c>0;--c){d=d.twice();var a=f.testBit(c);var j=g.testBit(c);if(a!=j){d=d.add2D(a?this:l)}}return d};ECPointFp.prototype.isOnCurve=function(){var d=this.getX().toBigInteger();var i=this.getY().toBigInteger();var f=this.curve.getA().toBigInteger();var c=this.curve.getB().toBigInteger();var h=this.curve.getQ();var e=i.multiply(i).mod(h);var g=d.multiply(d).multiply(d).add(f.multiply(d)).add(c).mod(h);return e.equals(g)};ECPointFp.prototype.toString=function(){return\"(\"+this.getX().toBigInteger().toString()+\",\"+this.getY().toBigInteger().toString()+\")\"};ECPointFp.prototype.validate=function(){var c=this.curve.getQ();if(this.isInfinity()){throw new Error(\"Point is at infinity.\")}var a=this.getX().toBigInteger();var b=this.getY().toBigInteger();if(a.compareTo(BigInteger.ONE)<0||a.compareTo(c.subtract(BigInteger.ONE))>0){throw new Error(\"x coordinate out of bounds\")}if(b.compareTo(BigInteger.ONE)<0||b.compareTo(c.subtract(BigInteger.ONE))>0){throw new Error(\"y coordinate out of bounds\")}if(!this.isOnCurve()){throw new Error(\"Point is not on the curve.\")}if(this.multiply(c).isInfinity()){throw new Error(\"Point is not a scalar multiple of G.\")}return true};\n/*! Mike Samuel (c) 2009 | code.google.com/p/json-sans-eval\n */\nvar jsonParse=(function(){var e=\"(?:-?\\\\b(?:0|[1-9][0-9]*)(?:\\\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\\\b)\";var j='(?:[^\\\\0-\\\\x08\\\\x0a-\\\\x1f\"\\\\\\\\]|\\\\\\\\(?:[\"/\\\\\\\\bfnrt]|u[0-9A-Fa-f]{4}))';var i='(?:\"'+j+'*\")';var d=new RegExp(\"(?:false|true|null|[\\\\{\\\\}\\\\[\\\\]]|\"+e+\"|\"+i+\")\",\"g\");var k=new RegExp(\"\\\\\\\\(?:([^u])|u(.{4}))\",\"g\");var g={'\"':'\"',\"/\":\"/\",\"\\\\\":\"\\\\\",b:\"\\b\",f:\"\\f\",n:\"\\n\",r:\"\\r\",t:\"\\t\"};function h(l,m,n){return m?g[m]:String.fromCharCode(parseInt(n,16))}var c=new String(\"\");var a=\"\\\\\";var f={\"{\":Object,\"[\":Array};var b=Object.hasOwnProperty;return function(u,q){var p=u.match(d);var x;var v=p[0];var l=false;if(\"{\"===v){x={}}else{if(\"[\"===v){x=[]}else{x=[];l=true}}var t;var r=[x];for(var o=1-l,m=p.length;o<m;++o){v=p[o];var w;switch(v.charCodeAt(0)){default:w=r[0];w[t||w.length]=+(v);t=void 0;break;case 34:v=v.substring(1,v.length-1);if(v.indexOf(a)!==-1){v=v.replace(k,h)}w=r[0];if(!t){if(w instanceof Array){t=w.length}else{t=v||c;break}}w[t]=v;t=void 0;break;case 91:w=r[0];r.unshift(w[t||w.length]=[]);t=void 0;break;case 93:r.shift();break;case 102:w=r[0];w[t||w.length]=false;t=void 0;break;case 110:w=r[0];w[t||w.length]=null;t=void 0;break;case 116:w=r[0];w[t||w.length]=true;t=void 0;break;case 123:w=r[0];r.unshift(w[t||w.length]={});t=void 0;break;case 125:r.shift();break}}if(l){if(r.length!==1){throw new Error()}x=x[0]}else{if(r.length){throw new Error()}}if(q){var s=function(C,B){var D=C[B];if(D&&typeof D===\"object\"){var n=null;for(var z in D){if(b.call(D,z)&&D!==C){var y=s(D,z);if(y!==void 0){D[z]=y}else{if(!n){n=[]}n.push(z)}}}if(n){for(var A=n.length;--A>=0;){delete D[n[A]]}}}return q.call(C,B,D)};x=s({\"\":x},\"\")}return x}})();\nif(typeof KJUR==\"undefined\"||!KJUR){KJUR={}}if(typeof KJUR.asn1==\"undefined\"||!KJUR.asn1){KJUR.asn1={}}KJUR.asn1.ASN1Util=new function(){this.integerToByteHex=function(a){var b=a.toString(16);if((b.length%2)==1){b=\"0\"+b}return b};this.bigIntToMinTwosComplementsHex=function(j){var f=j.toString(16);if(f.substr(0,1)!=\"-\"){if(f.length%2==1){f=\"0\"+f}else{if(!f.match(/^[0-7]/)){f=\"00\"+f}}}else{var a=f.substr(1);var e=a.length;if(e%2==1){e+=1}else{if(!f.match(/^[0-7]/)){e+=2}}var g=\"\";for(var d=0;d<e;d++){g+=\"f\"}var c=new BigInteger(g,16);var b=c.xor(j).add(BigInteger.ONE);f=b.toString(16).replace(/^-/,\"\")}return f};this.getPEMStringFromHex=function(a,b){return hextopem(a,b)};this.newObject=function(k){var D=KJUR,n=D.asn1,z=n.DERBoolean,e=n.DERInteger,s=n.DERBitString,h=n.DEROctetString,v=n.DERNull,w=n.DERObjectIdentifier,l=n.DEREnumerated,g=n.DERUTF8String,f=n.DERNumericString,y=n.DERPrintableString,u=n.DERTeletexString,p=n.DERIA5String,C=n.DERUTCTime,j=n.DERGeneralizedTime,m=n.DERSequence,c=n.DERSet,r=n.DERTaggedObject,o=n.ASN1Util.newObject;var t=Object.keys(k);if(t.length!=1){throw\"key of param shall be only one.\"}var F=t[0];if(\":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:\".indexOf(\":\"+F+\":\")==-1){throw\"undefined key: \"+F}if(F==\"bool\"){return new z(k[F])}if(F==\"int\"){return new e(k[F])}if(F==\"bitstr\"){return new s(k[F])}if(F==\"octstr\"){return new h(k[F])}if(F==\"null\"){return new v(k[F])}if(F==\"oid\"){return new w(k[F])}if(F==\"enum\"){return new l(k[F])}if(F==\"utf8str\"){return new g(k[F])}if(F==\"numstr\"){return new f(k[F])}if(F==\"prnstr\"){return new y(k[F])}if(F==\"telstr\"){return new u(k[F])}if(F==\"ia5str\"){return new p(k[F])}if(F==\"utctime\"){return new C(k[F])}if(F==\"gentime\"){return new j(k[F])}if(F==\"seq\"){var d=k[F];var E=[];for(var x=0;x<d.length;x++){var B=o(d[x]);E.push(B)}return new m({array:E})}if(F==\"set\"){var d=k[F];var E=[];for(var x=0;x<d.length;x++){var B=o(d[x]);E.push(B)}return new c({array:E})}if(F==\"tag\"){var A=k[F];if(Object.prototype.toString.call(A)===\"[object Array]\"&&A.length==3){var q=o(A[2]);return new r({tag:A[0],explicit:A[1],obj:q})}else{var b={};if(A.explicit!==undefined){b.explicit=A.explicit}if(A.tag!==undefined){b.tag=A.tag}if(A.obj===undefined){throw\"obj shall be specified for 'tag'.\"}b.obj=o(A.obj);return new r(b)}}};this.jsonToASN1HEX=function(b){var a=this.newObject(b);return a.getEncodedHex()}};KJUR.asn1.ASN1Util.oidHexToInt=function(a){var j=\"\";var k=parseInt(a.substr(0,2),16);var d=Math.floor(k/40);var c=k%40;var j=d+\".\"+c;var e=\"\";for(var f=2;f<a.length;f+=2){var g=parseInt(a.substr(f,2),16);var h=(\"00000000\"+g.toString(2)).slice(-8);e=e+h.substr(1,7);if(h.substr(0,1)==\"0\"){var b=new BigInteger(e,2);j=j+\".\"+b.toString(10);e=\"\"}}return j};KJUR.asn1.ASN1Util.oidIntToHex=function(f){var e=function(a){var k=a.toString(16);if(k.length==1){k=\"0\"+k}return k};var d=function(o){var n=\"\";var k=new BigInteger(o,10);var a=k.toString(2);var l=7-a.length%7;if(l==7){l=0}var q=\"\";for(var m=0;m<l;m++){q+=\"0\"}a=q+a;for(var m=0;m<a.length-1;m+=7){var p=a.substr(m,7);if(m!=a.length-7){p=\"1\"+p}n+=e(parseInt(p,2))}return n};if(!f.match(/^[0-9.]+$/)){throw\"malformed oid string: \"+f}var g=\"\";var b=f.split(\".\");var j=parseInt(b[0])*40+parseInt(b[1]);g+=e(j);b.splice(0,2);for(var c=0;c<b.length;c++){g+=d(b[c])}return g};KJUR.asn1.ASN1Object=function(){var c=true;var b=null;var d=\"00\";var e=\"00\";var a=\"\";this.getLengthHexFromValue=function(){if(typeof this.hV==\"undefined\"||this.hV==null){throw\"this.hV is null or undefined.\"}if(this.hV.length%2==1){throw\"value hex must be even length: n=\"+a.length+\",v=\"+this.hV}var i=this.hV.length/2;var h=i.toString(16);if(h.length%2==1){h=\"0\"+h}if(i<128){return h}else{var g=h.length/2;if(g>15){throw\"ASN.1 length too long to represent by 8x: n = \"+i.toString(16)}var f=128+g;return f.toString(16)+h}};this.getEncodedHex=function(){if(this.hTLV==null||this.isModified){this.hV=this.getFreshValueHex();this.hL=this.getLengthHexFromValue();this.hTLV=this.hT+this.hL+this.hV;this.isModified=false}return this.hTLV};this.getValueHex=function(){this.getEncodedHex();return this.hV};this.getFreshValueHex=function(){return\"\"}};KJUR.asn1.DERAbstractString=function(c){KJUR.asn1.DERAbstractString.superclass.constructor.call(this);var b=null;var a=null;this.getString=function(){return this.s};this.setString=function(d){this.hTLV=null;this.isModified=true;this.s=d;this.hV=utf8tohex(this.s).toLowerCase()};this.setStringHex=function(d){this.hTLV=null;this.isModified=true;this.s=null;this.hV=d};this.getFreshValueHex=function(){return this.hV};if(typeof c!=\"undefined\"){if(typeof c==\"string\"){this.setString(c)}else{if(typeof c.str!=\"undefined\"){this.setString(c.str)}else{if(typeof c.hex!=\"undefined\"){this.setStringHex(c.hex)}}}}};YAHOO.lang.extend(KJUR.asn1.DERAbstractString,KJUR.asn1.ASN1Object);KJUR.asn1.DERAbstractTime=function(c){KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);var b=null;var a=null;this.localDateToUTC=function(f){utc=f.getTime()+(f.getTimezoneOffset()*60000);var e=new Date(utc);return e};this.formatDate=function(m,o,e){var g=this.zeroPadding;var n=this.localDateToUTC(m);var p=String(n.getFullYear());if(o==\"utc\"){p=p.substr(2,2)}var l=g(String(n.getMonth()+1),2);var q=g(String(n.getDate()),2);var h=g(String(n.getHours()),2);var i=g(String(n.getMinutes()),2);var j=g(String(n.getSeconds()),2);var r=p+l+q+h+i+j;if(e===true){var f=n.getMilliseconds();if(f!=0){var k=g(String(f),3);k=k.replace(/[0]+$/,\"\");r=r+\".\"+k}}return r+\"Z\"};this.zeroPadding=function(e,d){if(e.length>=d){return e}return new Array(d-e.length+1).join(\"0\")+e};this.getString=function(){return this.s};this.setString=function(d){this.hTLV=null;this.isModified=true;this.s=d;this.hV=stohex(d)};this.setByDateValue=function(h,j,e,d,f,g){var i=new Date(Date.UTC(h,j-1,e,d,f,g,0));this.setByDate(i)};this.getFreshValueHex=function(){return this.hV}};YAHOO.lang.extend(KJUR.asn1.DERAbstractTime,KJUR.asn1.ASN1Object);KJUR.asn1.DERAbstractStructured=function(b){KJUR.asn1.DERAbstractString.superclass.constructor.call(this);var a=null;this.setByASN1ObjectArray=function(c){this.hTLV=null;this.isModified=true;this.asn1Array=c};this.appendASN1Object=function(c){this.hTLV=null;this.isModified=true;this.asn1Array.push(c)};this.asn1Array=new Array();if(typeof b!=\"undefined\"){if(typeof b.array!=\"undefined\"){this.asn1Array=b.array}}};YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured,KJUR.asn1.ASN1Object);KJUR.asn1.DERBoolean=function(){KJUR.asn1.DERBoolean.superclass.constructor.call(this);this.hT=\"01\";this.hTLV=\"0101ff\"};YAHOO.lang.extend(KJUR.asn1.DERBoolean,KJUR.asn1.ASN1Object);KJUR.asn1.DERInteger=function(a){KJUR.asn1.DERInteger.superclass.constructor.call(this);this.hT=\"02\";this.setByBigInteger=function(b){this.hTLV=null;this.isModified=true;this.hV=KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(b)};this.setByInteger=function(c){var b=new BigInteger(String(c),10);this.setByBigInteger(b)};this.setValueHex=function(b){this.hV=b};this.getFreshValueHex=function(){return this.hV};if(typeof a!=\"undefined\"){if(typeof a.bigint!=\"undefined\"){this.setByBigInteger(a.bigint)}else{if(typeof a[\"int\"]!=\"undefined\"){this.setByInteger(a[\"int\"])}else{if(typeof a==\"number\"){this.setByInteger(a)}else{if(typeof a.hex!=\"undefined\"){this.setValueHex(a.hex)}}}}}};YAHOO.lang.extend(KJUR.asn1.DERInteger,KJUR.asn1.ASN1Object);KJUR.asn1.DERBitString=function(b){if(b!==undefined&&typeof b.obj!==\"undefined\"){var a=KJUR.asn1.ASN1Util.newObject(b.obj);b.hex=\"00\"+a.getEncodedHex()}KJUR.asn1.DERBitString.superclass.constructor.call(this);this.hT=\"03\";this.setHexValueIncludingUnusedBits=function(c){this.hTLV=null;this.isModified=true;this.hV=c};this.setUnusedBitsAndHexValue=function(c,e){if(c<0||7<c){throw\"unused bits shall be from 0 to 7: u = \"+c}var d=\"0\"+c;this.hTLV=null;this.isModified=true;this.hV=d+e};this.setByBinaryString=function(e){e=e.replace(/0+$/,\"\");var f=8-e.length%8;if(f==8){f=0}for(var g=0;g<=f;g++){e+=\"0\"}var j=\"\";for(var g=0;g<e.length-1;g+=8){var d=e.substr(g,8);var c=parseInt(d,2).toString(16);if(c.length==1){c=\"0\"+c}j+=c}this.hTLV=null;this.isModified=true;this.hV=\"0\"+f+j};this.setByBooleanArray=function(e){var d=\"\";for(var c=0;c<e.length;c++){if(e[c]==true){d+=\"1\"}else{d+=\"0\"}}this.setByBinaryString(d)};this.newFalseArray=function(e){var c=new Array(e);for(var d=0;d<e;d++){c[d]=false}return c};this.getFreshValueHex=function(){return this.hV};if(typeof b!=\"undefined\"){if(typeof b==\"string\"&&b.toLowerCase().match(/^[0-9a-f]+$/)){this.setHexValueIncludingUnusedBits(b)}else{if(typeof b.hex!=\"undefined\"){this.setHexValueIncludingUnusedBits(b.hex)}else{if(typeof b.bin!=\"undefined\"){this.setByBinaryString(b.bin)}else{if(typeof b.array!=\"undefined\"){this.setByBooleanArray(b.array)}}}}}};YAHOO.lang.extend(KJUR.asn1.DERBitString,KJUR.asn1.ASN1Object);KJUR.asn1.DEROctetString=function(b){if(b!==undefined&&typeof b.obj!==\"undefined\"){var a=KJUR.asn1.ASN1Util.newObject(b.obj);b.hex=a.getEncodedHex()}KJUR.asn1.DEROctetString.superclass.constructor.call(this,b);this.hT=\"04\"};YAHOO.lang.extend(KJUR.asn1.DEROctetString,KJUR.asn1.DERAbstractString);KJUR.asn1.DERNull=function(){KJUR.asn1.DERNull.superclass.constructor.call(this);this.hT=\"05\";this.hTLV=\"0500\"};YAHOO.lang.extend(KJUR.asn1.DERNull,KJUR.asn1.ASN1Object);KJUR.asn1.DERObjectIdentifier=function(c){var b=function(d){var e=d.toString(16);if(e.length==1){e=\"0\"+e}return e};var a=function(k){var j=\"\";var e=new BigInteger(k,10);var d=e.toString(2);var f=7-d.length%7;if(f==7){f=0}var m=\"\";for(var g=0;g<f;g++){m+=\"0\"}d=m+d;for(var g=0;g<d.length-1;g+=7){var l=d.substr(g,7);if(g!=d.length-7){l=\"1\"+l}j+=b(parseInt(l,2))}return j};KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);this.hT=\"06\";this.setValueHex=function(d){this.hTLV=null;this.isModified=true;this.s=null;this.hV=d};this.setValueOidString=function(f){if(!f.match(/^[0-9.]+$/)){throw\"malformed oid string: \"+f}var g=\"\";var d=f.split(\".\");var j=parseInt(d[0])*40+parseInt(d[1]);g+=b(j);d.splice(0,2);for(var e=0;e<d.length;e++){g+=a(d[e])}this.hTLV=null;this.isModified=true;this.s=null;this.hV=g};this.setValueName=function(e){var d=KJUR.asn1.x509.OID.name2oid(e);if(d!==\"\"){this.setValueOidString(d)}else{throw\"DERObjectIdentifier oidName undefined: \"+e}};this.getFreshValueHex=function(){return this.hV};if(c!==undefined){if(typeof c===\"string\"){if(c.match(/^[0-2].[0-9.]+$/)){this.setValueOidString(c)}else{this.setValueName(c)}}else{if(c.oid!==undefined){this.setValueOidString(c.oid)}else{if(c.hex!==undefined){this.setValueHex(c.hex)}else{if(c.name!==undefined){this.setValueName(c.name)}}}}}};YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier,KJUR.asn1.ASN1Object);KJUR.asn1.DEREnumerated=function(a){KJUR.asn1.DEREnumerated.superclass.constructor.call(this);this.hT=\"0a\";this.setByBigInteger=function(b){this.hTLV=null;this.isModified=true;this.hV=KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(b)};this.setByInteger=function(c){var b=new BigInteger(String(c),10);this.setByBigInteger(b)};this.setValueHex=function(b){this.hV=b};this.getFreshValueHex=function(){return this.hV};if(typeof a!=\"undefined\"){if(typeof a[\"int\"]!=\"undefined\"){this.setByInteger(a[\"int\"])}else{if(typeof a==\"number\"){this.setByInteger(a)}else{if(typeof a.hex!=\"undefined\"){this.setValueHex(a.hex)}}}}};YAHOO.lang.extend(KJUR.asn1.DEREnumerated,KJUR.asn1.ASN1Object);KJUR.asn1.DERUTF8String=function(a){KJUR.asn1.DERUTF8String.superclass.constructor.call(this,a);this.hT=\"0c\"};YAHOO.lang.extend(KJUR.asn1.DERUTF8String,KJUR.asn1.DERAbstractString);KJUR.asn1.DERNumericString=function(a){KJUR.asn1.DERNumericString.superclass.constructor.call(this,a);this.hT=\"12\"};YAHOO.lang.extend(KJUR.asn1.DERNumericString,KJUR.asn1.DERAbstractString);KJUR.asn1.DERPrintableString=function(a){KJUR.asn1.DERPrintableString.superclass.constructor.call(this,a);this.hT=\"13\"};YAHOO.lang.extend(KJUR.asn1.DERPrintableString,KJUR.asn1.DERAbstractString);KJUR.asn1.DERTeletexString=function(a){KJUR.asn1.DERTeletexString.superclass.constructor.call(this,a);this.hT=\"14\"};YAHOO.lang.extend(KJUR.asn1.DERTeletexString,KJUR.asn1.DERAbstractString);KJUR.asn1.DERIA5String=function(a){KJUR.asn1.DERIA5String.superclass.constructor.call(this,a);this.hT=\"16\"};YAHOO.lang.extend(KJUR.asn1.DERIA5String,KJUR.asn1.DERAbstractString);KJUR.asn1.DERUTCTime=function(a){KJUR.asn1.DERUTCTime.superclass.constructor.call(this,a);this.hT=\"17\";this.setByDate=function(b){this.hTLV=null;this.isModified=true;this.date=b;this.s=this.formatDate(this.date,\"utc\");this.hV=stohex(this.s)};this.getFreshValueHex=function(){if(typeof this.date==\"undefined\"&&typeof this.s==\"undefined\"){this.date=new Date();this.s=this.formatDate(this.date,\"utc\");this.hV=stohex(this.s)}return this.hV};if(a!==undefined){if(a.str!==undefined){this.setString(a.str)}else{if(typeof a==\"string\"&&a.match(/^[0-9]{12}Z$/)){this.setString(a)}else{if(a.hex!==undefined){this.setStringHex(a.hex)}else{if(a.date!==undefined){this.setByDate(a.date)}}}}}};YAHOO.lang.extend(KJUR.asn1.DERUTCTime,KJUR.asn1.DERAbstractTime);KJUR.asn1.DERGeneralizedTime=function(a){KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this,a);this.hT=\"18\";this.withMillis=false;this.setByDate=function(b){this.hTLV=null;this.isModified=true;this.date=b;this.s=this.formatDate(this.date,\"gen\",this.withMillis);this.hV=stohex(this.s)};this.getFreshValueHex=function(){if(this.date===undefined&&this.s===undefined){this.date=new Date();this.s=this.formatDate(this.date,\"gen\",this.withMillis);this.hV=stohex(this.s)}return this.hV};if(a!==undefined){if(a.str!==undefined){this.setString(a.str)}else{if(typeof a==\"string\"&&a.match(/^[0-9]{14}Z$/)){this.setString(a)}else{if(a.hex!==undefined){this.setStringHex(a.hex)}else{if(a.date!==undefined){this.setByDate(a.date)}}}}if(a.millis===true){this.withMillis=true}}};YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime,KJUR.asn1.DERAbstractTime);KJUR.asn1.DERSequence=function(a){KJUR.asn1.DERSequence.superclass.constructor.call(this,a);this.hT=\"30\";this.getFreshValueHex=function(){var c=\"\";for(var b=0;b<this.asn1Array.length;b++){var d=this.asn1Array[b];c+=d.getEncodedHex()}this.hV=c;return this.hV}};YAHOO.lang.extend(KJUR.asn1.DERSequence,KJUR.asn1.DERAbstractStructured);KJUR.asn1.DERSet=function(a){KJUR.asn1.DERSet.superclass.constructor.call(this,a);this.hT=\"31\";this.sortFlag=true;this.getFreshValueHex=function(){var b=new Array();for(var c=0;c<this.asn1Array.length;c++){var d=this.asn1Array[c];b.push(d.getEncodedHex())}if(this.sortFlag==true){b.sort()}this.hV=b.join(\"\");return this.hV};if(typeof a!=\"undefined\"){if(typeof a.sortflag!=\"undefined\"&&a.sortflag==false){this.sortFlag=false}}};YAHOO.lang.extend(KJUR.asn1.DERSet,KJUR.asn1.DERAbstractStructured);KJUR.asn1.DERTaggedObject=function(a){KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);this.hT=\"a0\";this.hV=\"\";this.isExplicit=true;this.asn1Object=null;this.setASN1Object=function(b,c,d){this.hT=c;this.isExplicit=b;this.asn1Object=d;if(this.isExplicit){this.hV=this.asn1Object.getEncodedHex();this.hTLV=null;this.isModified=true}else{this.hV=null;this.hTLV=d.getEncodedHex();this.hTLV=this.hTLV.replace(/^../,c);this.isModified=false}};this.getFreshValueHex=function(){return this.hV};if(typeof a!=\"undefined\"){if(typeof a.tag!=\"undefined\"){this.hT=a.tag}if(typeof a.explicit!=\"undefined\"){this.isExplicit=a.explicit}if(typeof a.obj!=\"undefined\"){this.asn1Object=a.obj;this.setASN1Object(this.isExplicit,this.hT,this.asn1Object)}}};YAHOO.lang.extend(KJUR.asn1.DERTaggedObject,KJUR.asn1.ASN1Object);\nvar ASN1HEX=new function(){};ASN1HEX.getLblen=function(c,a){if(c.substr(a+2,1)!=\"8\"){return 1}var b=parseInt(c.substr(a+3,1));if(b==0){return -1}if(0<b&&b<10){return b+1}return -2};ASN1HEX.getL=function(c,b){var a=ASN1HEX.getLblen(c,b);if(a<1){return\"\"}return c.substr(b+2,a*2)};ASN1HEX.getVblen=function(d,a){var c,b;c=ASN1HEX.getL(d,a);if(c==\"\"){return -1}if(c.substr(0,1)===\"8\"){b=new BigInteger(c.substr(2),16)}else{b=new BigInteger(c,16)}return b.intValue()};ASN1HEX.getVidx=function(c,b){var a=ASN1HEX.getLblen(c,b);if(a<0){return a}return b+(a+1)*2};ASN1HEX.getV=function(d,a){var c=ASN1HEX.getVidx(d,a);var b=ASN1HEX.getVblen(d,a);return d.substr(c,b*2)};ASN1HEX.getTLV=function(b,a){return b.substr(a,2)+ASN1HEX.getL(b,a)+ASN1HEX.getV(b,a)};ASN1HEX.getNextSiblingIdx=function(d,a){var c=ASN1HEX.getVidx(d,a);var b=ASN1HEX.getVblen(d,a);return c+b*2};ASN1HEX.getChildIdx=function(e,f){var j=ASN1HEX;var g=new Array();var i=j.getVidx(e,f);if(e.substr(f,2)==\"03\"){g.push(i+2)}else{g.push(i)}var l=j.getVblen(e,f);var c=i;var d=0;while(1){var b=j.getNextSiblingIdx(e,c);if(b==null||(b-i>=(l*2))){break}if(d>=200){break}g.push(b);c=b;d++}return g};ASN1HEX.getNthChildIdx=function(d,b,e){var c=ASN1HEX.getChildIdx(d,b);return c[e]};ASN1HEX.getIdxbyList=function(e,d,c,i){var g=ASN1HEX;var f,b;if(c.length==0){if(i!==undefined){if(e.substr(d,2)!==i){throw\"checking tag doesn't match: \"+e.substr(d,2)+\"!=\"+i}}return d}f=c.shift();b=g.getChildIdx(e,d);return g.getIdxbyList(e,b[f],c,i)};ASN1HEX.getTLVbyList=function(d,c,b,f){var e=ASN1HEX;var a=e.getIdxbyList(d,c,b);if(a===undefined){throw\"can't find nthList object\"}if(f!==undefined){if(d.substr(a,2)!=f){throw\"checking tag doesn't match: \"+d.substr(a,2)+\"!=\"+f}}return e.getTLV(d,a)};ASN1HEX.getVbyList=function(e,c,b,g,i){var f=ASN1HEX;var a,d;a=f.getIdxbyList(e,c,b,g);if(a===undefined){throw\"can't find nthList object\"}d=f.getV(e,a);if(i===true){d=d.substr(2)}return d};ASN1HEX.hextooidstr=function(e){var h=function(b,a){if(b.length>=a){return b}return new Array(a-b.length+1).join(\"0\")+b};var l=[];var o=e.substr(0,2);var f=parseInt(o,16);l[0]=new String(Math.floor(f/40));l[1]=new String(f%40);var m=e.substr(2);var k=[];for(var g=0;g<m.length/2;g++){k.push(parseInt(m.substr(g*2,2),16))}var j=[];var d=\"\";for(var g=0;g<k.length;g++){if(k[g]&128){d=d+h((k[g]&127).toString(2),7)}else{d=d+h((k[g]&127).toString(2),7);j.push(new String(parseInt(d,2)));d=\"\"}}var n=l.join(\".\");if(j.length>0){n=n+\".\"+j.join(\".\")}return n};ASN1HEX.dump=function(t,c,l,g){var p=ASN1HEX;var j=p.getV;var y=p.dump;var w=p.getChildIdx;var e=t;if(t instanceof KJUR.asn1.ASN1Object){e=t.getEncodedHex()}var q=function(A,i){if(A.length<=i*2){return A}else{var v=A.substr(0,i)+\"..(total \"+A.length/2+\"bytes)..\"+A.substr(A.length-i,i);return v}};if(c===undefined){c={ommit_long_octet:32}}if(l===undefined){l=0}if(g===undefined){g=\"\"}var x=c.ommit_long_octet;if(e.substr(l,2)==\"01\"){var h=j(e,l);if(h==\"00\"){return g+\"BOOLEAN FALSE\\n\"}else{return g+\"BOOLEAN TRUE\\n\"}}if(e.substr(l,2)==\"02\"){var h=j(e,l);return g+\"INTEGER \"+q(h,x)+\"\\n\"}if(e.substr(l,2)==\"03\"){var h=j(e,l);return g+\"BITSTRING \"+q(h,x)+\"\\n\"}if(e.substr(l,2)==\"04\"){var h=j(e,l);if(p.isASN1HEX(h)){var k=g+\"OCTETSTRING, encapsulates\\n\";k=k+y(h,c,0,g+\"  \");return k}else{return g+\"OCTETSTRING \"+q(h,x)+\"\\n\"}}if(e.substr(l,2)==\"05\"){return g+\"NULL\\n\"}if(e.substr(l,2)==\"06\"){var m=j(e,l);var a=KJUR.asn1.ASN1Util.oidHexToInt(m);var o=KJUR.asn1.x509.OID.oid2name(a);var b=a.replace(/\\./g,\" \");if(o!=\"\"){return g+\"ObjectIdentifier \"+o+\" (\"+b+\")\\n\"}else{return g+\"ObjectIdentifier (\"+b+\")\\n\"}}if(e.substr(l,2)==\"0c\"){return g+\"UTF8String '\"+hextoutf8(j(e,l))+\"'\\n\"}if(e.substr(l,2)==\"13\"){return g+\"PrintableString '\"+hextoutf8(j(e,l))+\"'\\n\"}if(e.substr(l,2)==\"14\"){return g+\"TeletexString '\"+hextoutf8(j(e,l))+\"'\\n\"}if(e.substr(l,2)==\"16\"){return g+\"IA5String '\"+hextoutf8(j(e,l))+\"'\\n\"}if(e.substr(l,2)==\"17\"){return g+\"UTCTime \"+hextoutf8(j(e,l))+\"\\n\"}if(e.substr(l,2)==\"18\"){return g+\"GeneralizedTime \"+hextoutf8(j(e,l))+\"\\n\"}if(e.substr(l,2)==\"30\"){if(e.substr(l,4)==\"3000\"){return g+\"SEQUENCE {}\\n\"}var k=g+\"SEQUENCE\\n\";var d=w(e,l);var f=c;if((d.length==2||d.length==3)&&e.substr(d[0],2)==\"06\"&&e.substr(d[d.length-1],2)==\"04\"){var o=p.oidname(j(e,d[0]));var r=JSON.parse(JSON.stringify(c));r.x509ExtName=o;f=r}for(var u=0;u<d.length;u++){k=k+y(e,f,d[u],g+\"  \")}return k}if(e.substr(l,2)==\"31\"){var k=g+\"SET\\n\";var d=w(e,l);for(var u=0;u<d.length;u++){k=k+y(e,c,d[u],g+\"  \")}return k}var z=parseInt(e.substr(l,2),16);if((z&128)!=0){var n=z&31;if((z&32)!=0){var k=g+\"[\"+n+\"]\\n\";var d=w(e,l);for(var u=0;u<d.length;u++){k=k+y(e,c,d[u],g+\"  \")}return k}else{var h=j(e,l);if(h.substr(0,8)==\"68747470\"){h=hextoutf8(h)}if(c.x509ExtName===\"subjectAltName\"&&n==2){h=hextoutf8(h)}var k=g+\"[\"+n+\"] \"+h+\"\\n\";return k}}return g+\"UNKNOWN(\"+e.substr(l,2)+\") \"+j(e,l)+\"\\n\"};ASN1HEX.isASN1HEX=function(e){var d=ASN1HEX;if(e.length%2==1){return false}var c=d.getVblen(e,0);var b=e.substr(0,2);var f=d.getL(e,0);var a=e.length-b.length-f.length;if(a==c*2){return true}return false};ASN1HEX.oidname=function(a){var c=KJUR.asn1;if(KJUR.lang.String.isHex(a)){a=c.ASN1Util.oidHexToInt(a)}var b=c.x509.OID.oid2name(a);if(b===\"\"){b=a}return b};\nif(typeof KJUR==\"undefined\"||!KJUR){KJUR={}}if(typeof KJUR.asn1==\"undefined\"||!KJUR.asn1){KJUR.asn1={}}if(typeof KJUR.asn1.x509==\"undefined\"||!KJUR.asn1.x509){KJUR.asn1.x509={}}KJUR.asn1.x509.Certificate=function(e){KJUR.asn1.x509.Certificate.superclass.constructor.call(this);var a=null,j=null,h=null,k=null,i=null,b=KJUR,f=b.crypto,g=b.asn1,d=g.DERSequence,c=g.DERBitString;this.sign=function(){this.asn1SignatureAlg=this.asn1TBSCert.asn1SignatureAlg;var m=new KJUR.crypto.Signature({alg:this.asn1SignatureAlg.nameAlg});m.init(this.prvKey);m.updateHex(this.asn1TBSCert.getEncodedHex());this.hexSig=m.sign();this.asn1Sig=new c({hex:\"00\"+this.hexSig});var l=new d({array:[this.asn1TBSCert,this.asn1SignatureAlg,this.asn1Sig]});this.hTLV=l.getEncodedHex();this.isModified=false};this.setSignatureHex=function(l){this.asn1SignatureAlg=this.asn1TBSCert.asn1SignatureAlg;this.hexSig=l;this.asn1Sig=new c({hex:\"00\"+this.hexSig});var m=new d({array:[this.asn1TBSCert,this.asn1SignatureAlg,this.asn1Sig]});this.hTLV=m.getEncodedHex();this.isModified=false};this.getEncodedHex=function(){if(this.isModified==false&&this.hTLV!=null){return this.hTLV}throw\"not signed yet\"};this.getPEMString=function(){var l=hextob64nl(this.getEncodedHex());return\"-----BEGIN CERTIFICATE-----\\r\\n\"+l+\"\\r\\n-----END CERTIFICATE-----\\r\\n\"};if(e!==undefined){if(e.tbscertobj!==undefined){this.asn1TBSCert=e.tbscertobj}if(e.prvkeyobj!==undefined){this.prvKey=e.prvkeyobj}}};YAHOO.lang.extend(KJUR.asn1.x509.Certificate,KJUR.asn1.ASN1Object);KJUR.asn1.x509.TBSCertificate=function(e){KJUR.asn1.x509.TBSCertificate.superclass.constructor.call(this);var b=KJUR,i=b.asn1,f=i.DERSequence,h=i.DERInteger,c=i.DERTaggedObject,d=i.x509,g=d.Time,a=d.X500Name,j=d.SubjectPublicKeyInfo;this._initialize=function(){this.asn1Array=new Array();this.asn1Version=new c({obj:new h({\"int\":2})});this.asn1SerialNumber=null;this.asn1SignatureAlg=null;this.asn1Issuer=null;this.asn1NotBefore=null;this.asn1NotAfter=null;this.asn1Subject=null;this.asn1SubjPKey=null;this.extensionsArray=new Array()};this.setSerialNumberByParam=function(k){this.asn1SerialNumber=new h(k)};this.setSignatureAlgByParam=function(k){this.asn1SignatureAlg=new d.AlgorithmIdentifier(k)};this.setIssuerByParam=function(k){this.asn1Issuer=new a(k)};this.setNotBeforeByParam=function(k){this.asn1NotBefore=new g(k)};this.setNotAfterByParam=function(k){this.asn1NotAfter=new g(k)};this.setSubjectByParam=function(k){this.asn1Subject=new a(k)};this.setSubjectPublicKey=function(k){this.asn1SubjPKey=new j(k)};this.setSubjectPublicKeyByGetKey=function(l){var k=KEYUTIL.getKey(l);this.asn1SubjPKey=new j(k)};this.appendExtension=function(k){this.extensionsArray.push(k)};this.appendExtensionByName=function(l,k){KJUR.asn1.x509.Extension.appendByNameToArray(l,k,this.extensionsArray)};this.getEncodedHex=function(){if(this.asn1NotBefore==null||this.asn1NotAfter==null){throw\"notBefore and/or notAfter not set\"}var l=new f({array:[this.asn1NotBefore,this.asn1NotAfter]});this.asn1Array=new Array();this.asn1Array.push(this.asn1Version);this.asn1Array.push(this.asn1SerialNumber);this.asn1Array.push(this.asn1SignatureAlg);this.asn1Array.push(this.asn1Issuer);this.asn1Array.push(l);this.asn1Array.push(this.asn1Subject);this.asn1Array.push(this.asn1SubjPKey);if(this.extensionsArray.length>0){var m=new f({array:this.extensionsArray});var k=new c({explicit:true,tag:\"a3\",obj:m});this.asn1Array.push(k)}var n=new f({array:this.asn1Array});this.hTLV=n.getEncodedHex();this.isModified=false;return this.hTLV};this._initialize()};YAHOO.lang.extend(KJUR.asn1.x509.TBSCertificate,KJUR.asn1.ASN1Object);KJUR.asn1.x509.Extension=function(d){KJUR.asn1.x509.Extension.superclass.constructor.call(this);var f=null,a=KJUR,e=a.asn1,h=e.DERObjectIdentifier,i=e.DEROctetString,b=e.DERBitString,g=e.DERBoolean,c=e.DERSequence;this.getEncodedHex=function(){var m=new h({oid:this.oid});var l=new i({hex:this.getExtnValueHex()});var k=new Array();k.push(m);if(this.critical){k.push(new g())}k.push(l);var j=new c({array:k});return j.getEncodedHex()};this.critical=false;if(d!==undefined){if(d.critical!==undefined){this.critical=d.critical}}};YAHOO.lang.extend(KJUR.asn1.x509.Extension,KJUR.asn1.ASN1Object);KJUR.asn1.x509.Extension.appendByNameToArray=function(e,c,b){var g=e.toLowerCase(),f=KJUR.asn1.x509;if(g==\"basicconstraints\"){var d=new f.BasicConstraints(c);b.push(d)}else{if(g==\"keyusage\"){var d=new f.KeyUsage(c);b.push(d)}else{if(g==\"crldistributionpoints\"){var d=new f.CRLDistributionPoints(c);b.push(d)}else{if(g==\"extkeyusage\"){var d=new f.ExtKeyUsage(c);b.push(d)}else{if(g==\"authoritykeyidentifier\"){var d=new f.AuthorityKeyIdentifier(c);b.push(d)}else{if(g==\"authorityinfoaccess\"){var d=new f.AuthorityInfoAccess(c);b.push(d)}else{if(g==\"subjectaltname\"){var d=new f.SubjectAltName(c);b.push(d)}else{if(g==\"issueraltname\"){var d=new f.IssuerAltName(c);b.push(d)}else{throw\"unsupported extension name: \"+e}}}}}}}}};KJUR.asn1.x509.KeyUsage=function(f){KJUR.asn1.x509.KeyUsage.superclass.constructor.call(this,f);var a=X509.KEYUSAGE_NAME;this.getExtnValueHex=function(){return this.asn1ExtnValue.getEncodedHex()};this.oid=\"2.5.29.15\";if(f!==undefined){if(f.bin!==undefined){this.asn1ExtnValue=new KJUR.asn1.DERBitString(f)}if(f.names!==undefined&&f.names.length!==undefined){var e=f.names;var d=\"000000000\";for(var c=0;c<e.length;c++){for(var b=0;b<a.length;b++){if(e[c]===a[b]){d=d.substring(0,b)+\"1\"+d.substring(b+1,d.length)}}}this.asn1ExtnValue=new KJUR.asn1.DERBitString({bin:d})}}};YAHOO.lang.extend(KJUR.asn1.x509.KeyUsage,KJUR.asn1.x509.Extension);KJUR.asn1.x509.BasicConstraints=function(c){KJUR.asn1.x509.BasicConstraints.superclass.constructor.call(this,c);var a=false;var b=-1;this.getExtnValueHex=function(){var e=new Array();if(this.cA){e.push(new KJUR.asn1.DERBoolean())}if(this.pathLen>-1){e.push(new KJUR.asn1.DERInteger({\"int\":this.pathLen}))}var d=new KJUR.asn1.DERSequence({array:e});this.asn1ExtnValue=d;return this.asn1ExtnValue.getEncodedHex()};this.oid=\"2.5.29.19\";this.cA=false;this.pathLen=-1;if(c!==undefined){if(c.cA!==undefined){this.cA=c.cA}if(c.pathLen!==undefined){this.pathLen=c.pathLen}}};YAHOO.lang.extend(KJUR.asn1.x509.BasicConstraints,KJUR.asn1.x509.Extension);KJUR.asn1.x509.CRLDistributionPoints=function(d){KJUR.asn1.x509.CRLDistributionPoints.superclass.constructor.call(this,d);var b=KJUR,a=b.asn1,c=a.x509;this.getExtnValueHex=function(){return this.asn1ExtnValue.getEncodedHex()};this.setByDPArray=function(e){this.asn1ExtnValue=new a.DERSequence({array:e})};this.setByOneURI=function(h){var e=new c.GeneralNames([{uri:h}]);var g=new c.DistributionPointName(e);var f=new c.DistributionPoint({dpobj:g});this.setByDPArray([f])};this.oid=\"2.5.29.31\";if(d!==undefined){if(d.array!==undefined){this.setByDPArray(d.array)}else{if(d.uri!==undefined){this.setByOneURI(d.uri)}}}};YAHOO.lang.extend(KJUR.asn1.x509.CRLDistributionPoints,KJUR.asn1.x509.Extension);KJUR.asn1.x509.ExtKeyUsage=function(c){KJUR.asn1.x509.ExtKeyUsage.superclass.constructor.call(this,c);var b=KJUR,a=b.asn1;this.setPurposeArray=function(d){this.asn1ExtnValue=new a.DERSequence();for(var e=0;e<d.length;e++){var f=new a.DERObjectIdentifier(d[e]);this.asn1ExtnValue.appendASN1Object(f)}};this.getExtnValueHex=function(){return this.asn1ExtnValue.getEncodedHex()};this.oid=\"2.5.29.37\";if(c!==undefined){if(c.array!==undefined){this.setPurposeArray(c.array)}}};YAHOO.lang.extend(KJUR.asn1.x509.ExtKeyUsage,KJUR.asn1.x509.Extension);KJUR.asn1.x509.AuthorityKeyIdentifier=function(d){KJUR.asn1.x509.AuthorityKeyIdentifier.superclass.constructor.call(this,d);var b=KJUR,a=b.asn1,c=a.DERTaggedObject;this.asn1KID=null;this.asn1CertIssuer=null;this.asn1CertSN=null;this.getExtnValueHex=function(){var f=new Array();if(this.asn1KID){f.push(new c({explicit:false,tag:\"80\",obj:this.asn1KID}))}if(this.asn1CertIssuer){f.push(new c({explicit:false,tag:\"a1\",obj:this.asn1CertIssuer}))}if(this.asn1CertSN){f.push(new c({explicit:false,tag:\"82\",obj:this.asn1CertSN}))}var e=new a.DERSequence({array:f});this.asn1ExtnValue=e;return this.asn1ExtnValue.getEncodedHex()};this.setKIDByParam=function(e){this.asn1KID=new KJUR.asn1.DEROctetString(e)};this.setCertIssuerByParam=function(e){this.asn1CertIssuer=new KJUR.asn1.x509.X500Name(e)};this.setCertSNByParam=function(e){this.asn1CertSN=new KJUR.asn1.DERInteger(e)};this.oid=\"2.5.29.35\";if(d!==undefined){if(d.kid!==undefined){this.setKIDByParam(d.kid)}if(d.issuer!==undefined){this.setCertIssuerByParam(d.issuer)}if(d.sn!==undefined){this.setCertSNByParam(d.sn)}}};YAHOO.lang.extend(KJUR.asn1.x509.AuthorityKeyIdentifier,KJUR.asn1.x509.Extension);KJUR.asn1.x509.AuthorityInfoAccess=function(a){KJUR.asn1.x509.AuthorityInfoAccess.superclass.constructor.call(this,a);this.setAccessDescriptionArray=function(k){var j=new Array(),b=KJUR,g=b.asn1,d=g.DERSequence;for(var f=0;f<k.length;f++){var c=new g.DERObjectIdentifier(k[f].accessMethod);var e=new g.x509.GeneralName(k[f].accessLocation);var h=new d({array:[c,e]});j.push(h)}this.asn1ExtnValue=new d({array:j})};this.getExtnValueHex=function(){return this.asn1ExtnValue.getEncodedHex()};this.oid=\"1.3.6.1.5.5.7.1.1\";if(a!==undefined){if(a.array!==undefined){this.setAccessDescriptionArray(a.array)}}};YAHOO.lang.extend(KJUR.asn1.x509.AuthorityInfoAccess,KJUR.asn1.x509.Extension);KJUR.asn1.x509.SubjectAltName=function(a){KJUR.asn1.x509.SubjectAltName.superclass.constructor.call(this,a);this.setNameArray=function(b){this.asn1ExtnValue=new KJUR.asn1.x509.GeneralNames(b)};this.getExtnValueHex=function(){return this.asn1ExtnValue.getEncodedHex()};this.oid=\"2.5.29.17\";if(a!==undefined){if(a.array!==undefined){this.setNameArray(a.array)}}};YAHOO.lang.extend(KJUR.asn1.x509.SubjectAltName,KJUR.asn1.x509.Extension);KJUR.asn1.x509.IssuerAltName=function(a){KJUR.asn1.x509.IssuerAltName.superclass.constructor.call(this,a);this.setNameArray=function(b){this.asn1ExtnValue=new KJUR.asn1.x509.GeneralNames(b)};this.getExtnValueHex=function(){return this.asn1ExtnValue.getEncodedHex()};this.oid=\"2.5.29.18\";if(a!==undefined){if(a.array!==undefined){this.setNameArray(a.array)}}};YAHOO.lang.extend(KJUR.asn1.x509.IssuerAltName,KJUR.asn1.x509.Extension);KJUR.asn1.x509.CRL=function(f){KJUR.asn1.x509.CRL.superclass.constructor.call(this);var b=null,d=null,e=null,c=null,a=null;this.sign=function(){this.asn1SignatureAlg=this.asn1TBSCertList.asn1SignatureAlg;sig=new KJUR.crypto.Signature({alg:\"SHA1withRSA\",prov:\"cryptojs/jsrsa\"});sig.init(this.prvKey);sig.updateHex(this.asn1TBSCertList.getEncodedHex());this.hexSig=sig.sign();this.asn1Sig=new KJUR.asn1.DERBitString({hex:\"00\"+this.hexSig});var g=new KJUR.asn1.DERSequence({array:[this.asn1TBSCertList,this.asn1SignatureAlg,this.asn1Sig]});this.hTLV=g.getEncodedHex();this.isModified=false};this.getEncodedHex=function(){if(this.isModified==false&&this.hTLV!=null){return this.hTLV}throw\"not signed yet\"};this.getPEMString=function(){var g=hextob64nl(this.getEncodedHex());return\"-----BEGIN X509 CRL-----\\r\\n\"+g+\"\\r\\n-----END X509 CRL-----\\r\\n\"};if(f!==undefined){if(f.tbsobj!==undefined){this.asn1TBSCertList=f.tbsobj}if(f.prvkeyobj!==undefined){this.prvKey=f.prvkeyobj}}};YAHOO.lang.extend(KJUR.asn1.x509.CRL,KJUR.asn1.ASN1Object);KJUR.asn1.x509.TBSCertList=function(g){KJUR.asn1.x509.TBSCertList.superclass.constructor.call(this);var e=null,d=KJUR,c=d.asn1,b=c.DERSequence,f=c.x509,a=f.Time;this.setSignatureAlgByParam=function(h){this.asn1SignatureAlg=new f.AlgorithmIdentifier(h)};this.setIssuerByParam=function(h){this.asn1Issuer=new f.X500Name(h)};this.setThisUpdateByParam=function(h){this.asn1ThisUpdate=new a(h)};this.setNextUpdateByParam=function(h){this.asn1NextUpdate=new a(h)};this.addRevokedCert=function(h,i){var k={};if(h!=undefined&&h!=null){k.sn=h}if(i!=undefined&&i!=null){k.time=i}var j=new f.CRLEntry(k);this.aRevokedCert.push(j)};this.getEncodedHex=function(){this.asn1Array=new Array();if(this.asn1Version!=null){this.asn1Array.push(this.asn1Version)}this.asn1Array.push(this.asn1SignatureAlg);this.asn1Array.push(this.asn1Issuer);this.asn1Array.push(this.asn1ThisUpdate);if(this.asn1NextUpdate!=null){this.asn1Array.push(this.asn1NextUpdate)}if(this.aRevokedCert.length>0){var h=new b({array:this.aRevokedCert});this.asn1Array.push(h)}var i=new b({array:this.asn1Array});this.hTLV=i.getEncodedHex();this.isModified=false;return this.hTLV};this._initialize=function(){this.asn1Version=null;this.asn1SignatureAlg=null;this.asn1Issuer=null;this.asn1ThisUpdate=null;this.asn1NextUpdate=null;this.aRevokedCert=new Array()};this._initialize()};YAHOO.lang.extend(KJUR.asn1.x509.TBSCertList,KJUR.asn1.ASN1Object);KJUR.asn1.x509.CRLEntry=function(e){KJUR.asn1.x509.CRLEntry.superclass.constructor.call(this);var d=null,c=null,b=KJUR,a=b.asn1;this.setCertSerial=function(f){this.sn=new a.DERInteger(f)};this.setRevocationDate=function(f){this.time=new a.x509.Time(f)};this.getEncodedHex=function(){var f=new a.DERSequence({array:[this.sn,this.time]});this.TLV=f.getEncodedHex();return this.TLV};if(e!==undefined){if(e.time!==undefined){this.setRevocationDate(e.time)}if(e.sn!==undefined){this.setCertSerial(e.sn)}}};YAHOO.lang.extend(KJUR.asn1.x509.CRLEntry,KJUR.asn1.ASN1Object);KJUR.asn1.x509.X500Name=function(f){KJUR.asn1.x509.X500Name.superclass.constructor.call(this);this.asn1Array=new Array();var d=KJUR,c=d.asn1,e=c.x509,b=pemtohex;this.setByString=function(g){var k=g.split(\"/\");k.shift();var j=[];for(var l=0;l<k.length;l++){if(k[l].match(/^[^=]+=.+$/)){j.push(k[l])}else{var h=j.length-1;j[h]=j[h]+\"/\"+k[l]}}for(var l=0;l<j.length;l++){this.asn1Array.push(new e.RDN({str:j[l]}))}};this.setByLdapString=function(g){var h=e.X500Name.ldapToOneline(g);this.setByString(h)};this.setByObject=function(i){for(var g in i){if(i.hasOwnProperty(g)){var h=new KJUR.asn1.x509.RDN({str:g+\"=\"+i[g]});this.asn1Array?this.asn1Array.push(h):this.asn1Array=[h]}}};this.getEncodedHex=function(){if(typeof this.hTLV==\"string\"){return this.hTLV}var g=new c.DERSequence({array:this.asn1Array});this.hTLV=g.getEncodedHex();return this.hTLV};if(f!==undefined){if(f.str!==undefined){this.setByString(f.str)}else{if(f.ldapstr!==undefined){this.setByLdapString(f.ldapstr)}else{if(typeof f===\"object\"){this.setByObject(f)}}}if(f.certissuer!==undefined){var a=new X509();a.hex=b(f.certissuer);this.hTLV=a.getIssuerHex()}if(f.certsubject!==undefined){var a=new X509();a.hex=b(f.certsubject);this.hTLV=a.getSubjectHex()}}};YAHOO.lang.extend(KJUR.asn1.x509.X500Name,KJUR.asn1.ASN1Object);KJUR.asn1.x509.X500Name.onelineToLDAP=function(d){if(d.substr(0,1)!==\"/\"){throw\"malformed input\"}var b=\"\";d=d.substr(1);var c=d.split(\"/\");c.reverse();c=c.map(function(a){return a.replace(/,/,\"\\\\,\")});return c.join(\",\")};KJUR.asn1.x509.X500Name.ldapToOneline=function(g){var c=g.split(\",\");var e=false;var b=[];for(var f=0;c.length>0;f++){var h=c.shift();if(e===true){var d=b.pop();var j=(d+\",\"+h).replace(/\\\\,/g,\",\");b.push(j);e=false}else{b.push(h)}if(h.substr(-1,1)===\"\\\\\"){e=true}}b=b.map(function(a){return a.replace(\"/\",\"\\\\/\")});b.reverse();return\"/\"+b.join(\"/\")};KJUR.asn1.x509.RDN=function(a){KJUR.asn1.x509.RDN.superclass.constructor.call(this);this.asn1Array=new Array();this.addByString=function(b){this.asn1Array.push(new KJUR.asn1.x509.AttributeTypeAndValue({str:b}))};this.addByMultiValuedString=function(d){var b=KJUR.asn1.x509.RDN.parseString(d);for(var c=0;c<b.length;c++){this.addByString(b[c])}};this.getEncodedHex=function(){var b=new KJUR.asn1.DERSet({array:this.asn1Array});this.TLV=b.getEncodedHex();return this.TLV};if(a!==undefined){if(a.str!==undefined){this.addByMultiValuedString(a.str)}}};YAHOO.lang.extend(KJUR.asn1.x509.RDN,KJUR.asn1.ASN1Object);KJUR.asn1.x509.RDN.parseString=function(m){var j=m.split(/\\+/);var h=false;var c=[];for(var g=0;j.length>0;g++){var k=j.shift();if(h===true){var f=c.pop();var d=(f+\"+\"+k).replace(/\\\\\\+/g,\"+\");c.push(d);h=false}else{c.push(k)}if(k.substr(-1,1)===\"\\\\\"){h=true}}var l=false;var b=[];for(var g=0;c.length>0;g++){var k=c.shift();if(l===true){var e=b.pop();if(k.match(/\"$/)){var d=(e+\"+\"+k).replace(/^([^=]+)=\"(.*)\"$/,\"$1=$2\");b.push(d);l=false}else{b.push(e+\"+\"+k)}}else{b.push(k)}if(k.match(/^[^=]+=\"/)){l=true}}return b};KJUR.asn1.x509.AttributeTypeAndValue=function(d){KJUR.asn1.x509.AttributeTypeAndValue.superclass.constructor.call(this);var f=null,e=null,a=\"utf8\",c=KJUR,b=c.asn1;this.setByString=function(h){var g=h.match(/^([^=]+)=(.+)$/);if(g){this.setByAttrTypeAndValueStr(g[1],g[2])}else{throw\"malformed attrTypeAndValueStr: \"+h}};this.setByAttrTypeAndValueStr=function(i,h){this.typeObj=KJUR.asn1.x509.OID.atype2obj(i);var g=a;if(i==\"C\"){g=\"prn\"}this.valueObj=this.getValueObj(g,h)};this.getValueObj=function(h,g){if(h==\"utf8\"){return new b.DERUTF8String({str:g})}if(h==\"prn\"){return new b.DERPrintableString({str:g})}if(h==\"tel\"){return new b.DERTeletexString({str:g})}if(h==\"ia5\"){return new b.DERIA5String({str:g})}throw\"unsupported directory string type: type=\"+h+\" value=\"+g};this.getEncodedHex=function(){var g=new b.DERSequence({array:[this.typeObj,this.valueObj]});this.TLV=g.getEncodedHex();return this.TLV};if(d!==undefined){if(d.str!==undefined){this.setByString(d.str)}}};YAHOO.lang.extend(KJUR.asn1.x509.AttributeTypeAndValue,KJUR.asn1.ASN1Object);KJUR.asn1.x509.SubjectPublicKeyInfo=function(f){KJUR.asn1.x509.SubjectPublicKeyInfo.superclass.constructor.call(this);var l=null,k=null,a=KJUR,j=a.asn1,i=j.DERInteger,b=j.DERBitString,m=j.DERObjectIdentifier,e=j.DERSequence,h=j.ASN1Util.newObject,d=j.x509,o=d.AlgorithmIdentifier,g=a.crypto,n=g.ECDSA,c=g.DSA;this.getASN1Object=function(){if(this.asn1AlgId==null||this.asn1SubjPKey==null){throw\"algId and/or subjPubKey not set\"}var p=new e({array:[this.asn1AlgId,this.asn1SubjPKey]});return p};this.getEncodedHex=function(){var p=this.getASN1Object();this.hTLV=p.getEncodedHex();return this.hTLV};this.setPubKey=function(q){try{if(q instanceof RSAKey){var u=h({seq:[{\"int\":{bigint:q.n}},{\"int\":{\"int\":q.e}}]});var s=u.getEncodedHex();this.asn1AlgId=new o({name:\"rsaEncryption\"});this.asn1SubjPKey=new b({hex:\"00\"+s})}}catch(p){}try{if(q instanceof KJUR.crypto.ECDSA){var r=new m({name:q.curveName});this.asn1AlgId=new o({name:\"ecPublicKey\",asn1params:r});this.asn1SubjPKey=new b({hex:\"00\"+q.pubKeyHex})}}catch(p){}try{if(q instanceof KJUR.crypto.DSA){var r=new h({seq:[{\"int\":{bigint:q.p}},{\"int\":{bigint:q.q}},{\"int\":{bigint:q.g}}]});this.asn1AlgId=new o({name:\"dsa\",asn1params:r});var t=new i({bigint:q.y});this.asn1SubjPKey=new b({hex:\"00\"+t.getEncodedHex()})}}catch(p){}};if(f!==undefined){this.setPubKey(f)}};YAHOO.lang.extend(KJUR.asn1.x509.SubjectPublicKeyInfo,KJUR.asn1.ASN1Object);KJUR.asn1.x509.Time=function(f){KJUR.asn1.x509.Time.superclass.constructor.call(this);var e=null,a=null,d=KJUR,c=d.asn1,b=c.DERUTCTime,g=c.DERGeneralizedTime;this.setTimeParams=function(h){this.timeParams=h};this.getEncodedHex=function(){var h=null;if(this.timeParams!=null){if(this.type==\"utc\"){h=new b(this.timeParams)}else{h=new g(this.timeParams)}}else{if(this.type==\"utc\"){h=new b()}else{h=new g()}}this.TLV=h.getEncodedHex();return this.TLV};this.type=\"utc\";if(f!==undefined){if(f.type!==undefined){this.type=f.type}else{if(f.str!==undefined){if(f.str.match(/^[0-9]{12}Z$/)){this.type=\"utc\"}if(f.str.match(/^[0-9]{14}Z$/)){this.type=\"gen\"}}}this.timeParams=f}};YAHOO.lang.extend(KJUR.asn1.x509.Time,KJUR.asn1.ASN1Object);KJUR.asn1.x509.AlgorithmIdentifier=function(d){KJUR.asn1.x509.AlgorithmIdentifier.superclass.constructor.call(this);this.nameAlg=null;this.asn1Alg=null;this.asn1Params=null;this.paramEmpty=false;var b=KJUR,a=b.asn1;this.getEncodedHex=function(){if(this.nameAlg===null&&this.asn1Alg===null){throw\"algorithm not specified\"}if(this.nameAlg!==null&&this.asn1Alg===null){this.asn1Alg=a.x509.OID.name2obj(this.nameAlg)}var e=[this.asn1Alg];if(this.asn1Params!==null){e.push(this.asn1Params)}var f=new a.DERSequence({array:e});this.hTLV=f.getEncodedHex();return this.hTLV};if(d!==undefined){if(d.name!==undefined){this.nameAlg=d.name}if(d.asn1params!==undefined){this.asn1Params=d.asn1params}if(d.paramempty!==undefined){this.paramEmpty=d.paramempty}}if(this.asn1Params===null&&this.paramEmpty===false&&this.nameAlg!==null){var c=this.nameAlg.toLowerCase();if(c.substr(-7,7)!==\"withdsa\"&&c.substr(-9,9)!==\"withecdsa\"){this.asn1Params=new a.DERNull()}}};YAHOO.lang.extend(KJUR.asn1.x509.AlgorithmIdentifier,KJUR.asn1.ASN1Object);KJUR.asn1.x509.GeneralName=function(e){KJUR.asn1.x509.GeneralName.superclass.constructor.call(this);var m=null,i=null,k={rfc822:\"81\",dns:\"82\",dn:\"a4\",uri:\"86\",ip:\"87\"},b=KJUR,g=b.asn1,f=g.DERSequence,j=g.DEROctetString,d=g.DERIA5String,c=g.DERTaggedObject,l=g.ASN1Object,a=g.x509.X500Name,h=pemtohex;this.explicit=false;this.setByParam=function(p){var r=null;var u=null;if(p===undefined){return}if(p.rfc822!==undefined){this.type=\"rfc822\";u=new d({str:p[this.type]})}if(p.dns!==undefined){this.type=\"dns\";u=new d({str:p[this.type]})}if(p.uri!==undefined){this.type=\"uri\";u=new d({str:p[this.type]})}if(p.dn!==undefined){this.type=\"dn\";this.explicit=true;u=new a({str:p.dn})}if(p.ldapdn!==undefined){this.type=\"dn\";this.explicit=true;u=new a({ldapstr:p.ldapdn})}if(p.certissuer!==undefined){this.type=\"dn\";this.explicit=true;var o=p.certissuer;var w=null;if(o.match(/^[0-9A-Fa-f]+$/)){w==o}if(o.indexOf(\"-----BEGIN \")!=-1){w=h(o)}if(w==null){throw\"certissuer param not cert\"}var t=new X509();t.hex=w;var y=t.getIssuerHex();u=new l();u.hTLV=y}if(p.certsubj!==undefined){this.type=\"dn\";this.explicit=true;var o=p.certsubj;var w=null;if(o.match(/^[0-9A-Fa-f]+$/)){w==o}if(o.indexOf(\"-----BEGIN \")!=-1){w=h(o)}if(w==null){throw\"certsubj param not cert\"}var t=new X509();t.hex=w;var y=t.getSubjectHex();u=new l();u.hTLV=y}if(p.ip!==undefined){this.type=\"ip\";this.explicit=false;var q=p.ip;var s;var n=\"malformed IP address\";if(q.match(/^[0-9.]+[.][0-9.]+$/)){s=intarystrtohex(\"[\"+q.split(\".\").join(\",\")+\"]\");if(s.length!==8){throw n}}else{if(q.match(/^[0-9A-Fa-f:]+:[0-9A-Fa-f:]+$/)){s=ipv6tohex(q)}else{if(q.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/)){s=q}else{throw n}}}u=new j({hex:s})}if(this.type==null){throw\"unsupported type in params=\"+p}this.asn1Obj=new c({explicit:this.explicit,tag:k[this.type],obj:u})};this.getEncodedHex=function(){return this.asn1Obj.getEncodedHex()};if(e!==undefined){this.setByParam(e)}};YAHOO.lang.extend(KJUR.asn1.x509.GeneralName,KJUR.asn1.ASN1Object);KJUR.asn1.x509.GeneralNames=function(d){KJUR.asn1.x509.GeneralNames.superclass.constructor.call(this);var a=null,c=KJUR,b=c.asn1;this.setByParamArray=function(g){for(var e=0;e<g.length;e++){var f=new b.x509.GeneralName(g[e]);this.asn1Array.push(f)}};this.getEncodedHex=function(){var e=new b.DERSequence({array:this.asn1Array});return e.getEncodedHex()};this.asn1Array=new Array();if(typeof d!=\"undefined\"){this.setByParamArray(d)}};YAHOO.lang.extend(KJUR.asn1.x509.GeneralNames,KJUR.asn1.ASN1Object);KJUR.asn1.x509.DistributionPointName=function(b){KJUR.asn1.x509.DistributionPointName.superclass.constructor.call(this);var h=null,e=null,a=null,g=null,d=KJUR,c=d.asn1,f=c.DERTaggedObject;this.getEncodedHex=function(){if(this.type!=\"full\"){throw\"currently type shall be 'full': \"+this.type}this.asn1Obj=new f({explicit:false,tag:this.tag,obj:this.asn1V});this.hTLV=this.asn1Obj.getEncodedHex();return this.hTLV};if(b!==undefined){if(c.x509.GeneralNames.prototype.isPrototypeOf(b)){this.type=\"full\";this.tag=\"a0\";this.asn1V=b}else{throw\"This class supports GeneralNames only as argument\"}}};YAHOO.lang.extend(KJUR.asn1.x509.DistributionPointName,KJUR.asn1.ASN1Object);KJUR.asn1.x509.DistributionPoint=function(d){KJUR.asn1.x509.DistributionPoint.superclass.constructor.call(this);var a=null,c=KJUR,b=c.asn1;this.getEncodedHex=function(){var e=new b.DERSequence();if(this.asn1DP!=null){var f=new b.DERTaggedObject({explicit:true,tag:\"a0\",obj:this.asn1DP});e.appendASN1Object(f)}this.hTLV=e.getEncodedHex();return this.hTLV};if(d!==undefined){if(d.dpobj!==undefined){this.asn1DP=d.dpobj}}};YAHOO.lang.extend(KJUR.asn1.x509.DistributionPoint,KJUR.asn1.ASN1Object);KJUR.asn1.x509.OID=new function(a){this.atype2oidList={CN:\"2.5.4.3\",L:\"2.5.4.7\",ST:\"2.5.4.8\",O:\"2.5.4.10\",OU:\"2.5.4.11\",C:\"2.5.4.6\",STREET:\"2.5.4.9\",DC:\"0.9.2342.19200300.100.1.25\",UID:\"0.9.2342.19200300.100.1.1\",SN:\"2.5.4.4\",T:\"2.5.4.12\",DN:\"2.5.4.49\",E:\"1.2.840.113549.1.9.1\",description:\"2.5.4.13\",businessCategory:\"2.5.4.15\",postalCode:\"2.5.4.17\",serialNumber:\"2.5.4.5\",uniqueIdentifier:\"2.5.4.45\",organizationIdentifier:\"2.5.4.97\",jurisdictionOfIncorporationL:\"1.3.6.1.4.1.311.60.2.1.1\",jurisdictionOfIncorporationSP:\"1.3.6.1.4.1.311.60.2.1.2\",jurisdictionOfIncorporationC:\"1.3.6.1.4.1.311.60.2.1.3\"};this.name2oidList={sha1:\"1.3.14.3.2.26\",sha256:\"2.16.840.1.101.3.4.2.1\",sha384:\"2.16.840.1.101.3.4.2.2\",sha512:\"2.16.840.1.101.3.4.2.3\",sha224:\"2.16.840.1.101.3.4.2.4\",md5:\"1.2.840.113549.2.5\",md2:\"1.3.14.7.2.2.1\",ripemd160:\"1.3.36.3.2.1\",MD2withRSA:\"1.2.840.113549.1.1.2\",MD4withRSA:\"1.2.840.113549.1.1.3\",MD5withRSA:\"1.2.840.113549.1.1.4\",SHA1withRSA:\"1.2.840.113549.1.1.5\",SHA224withRSA:\"1.2.840.113549.1.1.14\",SHA256withRSA:\"1.2.840.113549.1.1.11\",SHA384withRSA:\"1.2.840.113549.1.1.12\",SHA512withRSA:\"1.2.840.113549.1.1.13\",SHA1withECDSA:\"1.2.840.10045.4.1\",SHA224withECDSA:\"1.2.840.10045.4.3.1\",SHA256withECDSA:\"1.2.840.10045.4.3.2\",SHA384withECDSA:\"1.2.840.10045.4.3.3\",SHA512withECDSA:\"1.2.840.10045.4.3.4\",dsa:\"1.2.840.10040.4.1\",SHA1withDSA:\"1.2.840.10040.4.3\",SHA224withDSA:\"2.16.840.1.101.3.4.3.1\",SHA256withDSA:\"2.16.840.1.101.3.4.3.2\",rsaEncryption:\"1.2.840.113549.1.1.1\",commonName:\"2.5.4.3\",countryName:\"2.5.4.6\",localityName:\"2.5.4.7\",stateOrProvinceName:\"2.5.4.8\",streetAddress:\"2.5.4.9\",organizationName:\"2.5.4.10\",organizationalUnitName:\"2.5.4.11\",domainComponent:\"0.9.2342.19200300.100.1.25\",userId:\"0.9.2342.19200300.100.1.1\",surname:\"2.5.4.4\",title:\"2.5.4.12\",distinguishedName:\"2.5.4.49\",emailAddress:\"1.2.840.113549.1.9.1\",description:\"2.5.4.13\",businessCategory:\"2.5.4.15\",postalCode:\"2.5.4.17\",uniqueIdentifier:\"2.5.4.45\",organizationIdentifier:\"2.5.4.97\",jurisdictionOfIncorporationL:\"1.3.6.1.4.1.311.60.2.1.1\",jurisdictionOfIncorporationSP:\"1.3.6.1.4.1.311.60.2.1.2\",jurisdictionOfIncorporationC:\"1.3.6.1.4.1.311.60.2.1.3\",subjectKeyIdentifier:\"2.5.29.14\",keyUsage:\"2.5.29.15\",subjectAltName:\"2.5.29.17\",issuerAltName:\"2.5.29.18\",basicConstraints:\"2.5.29.19\",nameConstraints:\"2.5.29.30\",cRLDistributionPoints:\"2.5.29.31\",certificatePolicies:\"2.5.29.32\",authorityKeyIdentifier:\"2.5.29.35\",policyConstraints:\"2.5.29.36\",extKeyUsage:\"2.5.29.37\",authorityInfoAccess:\"1.3.6.1.5.5.7.1.1\",ocsp:\"1.3.6.1.5.5.7.48.1\",caIssuers:\"1.3.6.1.5.5.7.48.2\",anyExtendedKeyUsage:\"2.5.29.37.0\",serverAuth:\"1.3.6.1.5.5.7.3.1\",clientAuth:\"1.3.6.1.5.5.7.3.2\",codeSigning:\"1.3.6.1.5.5.7.3.3\",emailProtection:\"1.3.6.1.5.5.7.3.4\",timeStamping:\"1.3.6.1.5.5.7.3.8\",ocspSigning:\"1.3.6.1.5.5.7.3.9\",ecPublicKey:\"1.2.840.10045.2.1\",secp256r1:\"1.2.840.10045.3.1.7\",secp256k1:\"1.3.132.0.10\",secp384r1:\"1.3.132.0.34\",pkcs5PBES2:\"1.2.840.113549.1.5.13\",pkcs5PBKDF2:\"1.2.840.113549.1.5.12\",\"des-EDE3-CBC\":\"1.2.840.113549.3.7\",data:\"1.2.840.113549.1.7.1\",\"signed-data\":\"1.2.840.113549.1.7.2\",\"enveloped-data\":\"1.2.840.113549.1.7.3\",\"digested-data\":\"1.2.840.113549.1.7.5\",\"encrypted-data\":\"1.2.840.113549.1.7.6\",\"authenticated-data\":\"1.2.840.113549.1.9.16.1.2\",tstinfo:\"1.2.840.113549.1.9.16.1.4\",extensionRequest:\"1.2.840.113549.1.9.14\",};this.objCache={};this.name2obj=function(b){if(typeof this.objCache[b]!=\"undefined\"){return this.objCache[b]}if(typeof this.name2oidList[b]==\"undefined\"){throw\"Name of ObjectIdentifier not defined: \"+b}var c=this.name2oidList[b];var d=new KJUR.asn1.DERObjectIdentifier({oid:c});this.objCache[b]=d;return d};this.atype2obj=function(b){if(typeof this.objCache[b]!=\"undefined\"){return this.objCache[b]}if(typeof this.atype2oidList[b]==\"undefined\"){throw\"AttributeType name undefined: \"+b}var c=this.atype2oidList[b];var d=new KJUR.asn1.DERObjectIdentifier({oid:c});this.objCache[b]=d;return d}};KJUR.asn1.x509.OID.oid2name=function(b){var c=KJUR.asn1.x509.OID.name2oidList;for(var a in c){if(c[a]==b){return a}}return\"\"};KJUR.asn1.x509.OID.oid2atype=function(b){var c=KJUR.asn1.x509.OID.atype2oidList;for(var a in c){if(c[a]==b){return a}}return b};KJUR.asn1.x509.OID.name2oid=function(a){var b=KJUR.asn1.x509.OID.name2oidList;if(b[a]===undefined){return\"\"}return b[a]};KJUR.asn1.x509.X509Util={};KJUR.asn1.x509.X509Util.newCertPEM=function(h){var g=KJUR.asn1.x509,b=g.TBSCertificate,a=g.Certificate;var f=new b();if(h.serial!==undefined){f.setSerialNumberByParam(h.serial)}else{throw\"serial number undefined.\"}if(typeof h.sigalg.name===\"string\"){f.setSignatureAlgByParam(h.sigalg)}else{throw\"unproper signature algorithm name\"}if(h.issuer!==undefined){f.setIssuerByParam(h.issuer)}else{throw\"issuer name undefined.\"}if(h.notbefore!==undefined){f.setNotBeforeByParam(h.notbefore)}else{throw\"notbefore undefined.\"}if(h.notafter!==undefined){f.setNotAfterByParam(h.notafter)}else{throw\"notafter undefined.\"}if(h.subject!==undefined){f.setSubjectByParam(h.subject)}else{throw\"subject name undefined.\"}if(h.sbjpubkey!==undefined){f.setSubjectPublicKeyByGetKey(h.sbjpubkey)}else{throw\"subject public key undefined.\"}if(h.ext!==undefined&&h.ext.length!==undefined){for(var d=0;d<h.ext.length;d++){for(key in h.ext[d]){f.appendExtensionByName(key,h.ext[d][key])}}}if(h.cakey===undefined&&h.sighex===undefined){throw\"param cakey and sighex undefined.\"}var e=null;var c=null;if(h.cakey){if(h.cakey.isPrivate===true){e=h.cakey}else{e=KEYUTIL.getKey.apply(null,h.cakey)}c=new a({tbscertobj:f,prvkeyobj:e});c.sign()}if(h.sighex){c=new a({tbscertobj:f});c.setSignatureHex(h.sighex)}return c.getPEMString()};\nif(typeof KJUR==\"undefined\"||!KJUR){KJUR={}}if(typeof KJUR.asn1==\"undefined\"||!KJUR.asn1){KJUR.asn1={}}if(typeof KJUR.asn1.cms==\"undefined\"||!KJUR.asn1.cms){KJUR.asn1.cms={}}KJUR.asn1.cms.Attribute=function(d){var a=[],c=KJUR,b=c.asn1;b.cms.Attribute.superclass.constructor.call(this);this.getEncodedHex=function(){var h,g,e;h=new b.DERObjectIdentifier({oid:this.attrTypeOid});g=new b.DERSet({array:this.valueList});try{g.getEncodedHex()}catch(f){throw\"fail valueSet.getEncodedHex in Attribute(1)/\"+f}e=new b.DERSequence({array:[h,g]});try{this.hTLV=e.getEncodedHex()}catch(f){throw\"failed seq.getEncodedHex in Attribute(2)/\"+f}return this.hTLV}};YAHOO.lang.extend(KJUR.asn1.cms.Attribute,KJUR.asn1.ASN1Object);KJUR.asn1.cms.ContentType=function(d){var c=KJUR,b=c.asn1;b.cms.ContentType.superclass.constructor.call(this);this.attrTypeOid=\"1.2.840.113549.1.9.3\";var a=null;if(typeof d!=\"undefined\"){var a=new b.DERObjectIdentifier(d);this.valueList=[a]}};YAHOO.lang.extend(KJUR.asn1.cms.ContentType,KJUR.asn1.cms.Attribute);KJUR.asn1.cms.MessageDigest=function(d){var b=KJUR,e=b.asn1,g=e.DEROctetString,i=e.cms;i.MessageDigest.superclass.constructor.call(this);this.attrTypeOid=\"1.2.840.113549.1.9.4\";if(d!==undefined){if(d.eciObj instanceof i.EncapsulatedContentInfo&&typeof d.hashAlg===\"string\"){var h=d.eciObj.eContentValueHex;var c=d.hashAlg;var a=b.crypto.Util.hashHex(h,c);var f=new g({hex:a});f.getEncodedHex();this.valueList=[f]}else{var f=new g(d);f.getEncodedHex();this.valueList=[f]}}};YAHOO.lang.extend(KJUR.asn1.cms.MessageDigest,KJUR.asn1.cms.Attribute);KJUR.asn1.cms.SigningTime=function(e){var d=KJUR,c=d.asn1;c.cms.SigningTime.superclass.constructor.call(this);this.attrTypeOid=\"1.2.840.113549.1.9.5\";if(e!==undefined){var a=new c.x509.Time(e);try{a.getEncodedHex()}catch(b){throw\"SigningTime.getEncodedHex() failed/\"+b}this.valueList=[a]}};YAHOO.lang.extend(KJUR.asn1.cms.SigningTime,KJUR.asn1.cms.Attribute);KJUR.asn1.cms.SigningCertificate=function(f){var c=KJUR,b=c.asn1,a=b.DERSequence,e=b.cms,d=c.crypto;e.SigningCertificate.superclass.constructor.call(this);this.attrTypeOid=\"1.2.840.113549.1.9.16.2.12\";this.setCerts=function(n){var l=[];for(var k=0;k<n.length;k++){var h=pemtohex(n[k]);var g=c.crypto.Util.hashHex(h,\"sha1\");var o=new b.DEROctetString({hex:g});o.getEncodedHex();var m=new e.IssuerAndSerialNumber({cert:n[k]});m.getEncodedHex();var p=new a({array:[o,m]});p.getEncodedHex();l.push(p)}var j=new a({array:l});j.getEncodedHex();this.valueList=[j]};if(f!==undefined){if(typeof f.array==\"object\"){this.setCerts(f.array)}}};YAHOO.lang.extend(KJUR.asn1.cms.SigningCertificate,KJUR.asn1.cms.Attribute);KJUR.asn1.cms.SigningCertificateV2=function(h){var d=KJUR,c=d.asn1,b=c.DERSequence,g=c.x509,f=c.cms,e=d.crypto;f.SigningCertificateV2.superclass.constructor.call(this);this.attrTypeOid=\"1.2.840.113549.1.9.16.2.47\";this.setCerts=function(r,k){var p=[];for(var n=0;n<r.length;n++){var l=pemtohex(r[n]);var t=[];if(k!==\"sha256\"){t.push(new g.AlgorithmIdentifier({name:k}))}var j=e.Util.hashHex(l,k);var s=new c.DEROctetString({hex:j});s.getEncodedHex();t.push(s);var o=new f.IssuerAndSerialNumber({cert:r[n]});o.getEncodedHex();t.push(o);var q=new b({array:t});q.getEncodedHex();p.push(q)}var m=new b({array:p});m.getEncodedHex();this.valueList=[m]};if(h!==undefined){if(typeof h.array==\"object\"){var a=\"sha256\";if(typeof h.hashAlg==\"string\"){a=h.hashAlg}this.setCerts(h.array,a)}}};YAHOO.lang.extend(KJUR.asn1.cms.SigningCertificateV2,KJUR.asn1.cms.Attribute);KJUR.asn1.cms.IssuerAndSerialNumber=function(e){var b=KJUR,g=b.asn1,f=g.DERInteger,i=g.cms,d=g.x509,a=d.X500Name,c=X509;i.IssuerAndSerialNumber.superclass.constructor.call(this);var j=null;var h=null;this.setByCertPEM=function(n){var l=pemtohex(n);var k=new c();k.hex=l;var o=k.getIssuerHex();this.dIssuer=new a();this.dIssuer.hTLV=o;var m=k.getSerialNumberHex();this.dSerial=new f({hex:m})};this.getEncodedHex=function(){var k=new g.DERSequence({array:[this.dIssuer,this.dSerial]});this.hTLV=k.getEncodedHex();return this.hTLV};if(e!==undefined){if(typeof e==\"string\"&&e.indexOf(\"-----BEGIN \")!=-1){this.setByCertPEM(e)}if(e.issuer&&e.serial){if(e.issuer instanceof a){this.dIssuer=e.issuer}else{this.dIssuer=new a(e.issuer)}if(e.serial instanceof f){this.dSerial=e.serial}else{this.dSerial=new f(e.serial)}}if(typeof e.cert==\"string\"){this.setByCertPEM(e.cert)}}};YAHOO.lang.extend(KJUR.asn1.cms.IssuerAndSerialNumber,KJUR.asn1.ASN1Object);KJUR.asn1.cms.AttributeList=function(d){var b=KJUR,a=b.asn1,c=a.cms;c.AttributeList.superclass.constructor.call(this);this.list=new Array();this.sortFlag=true;this.add=function(e){if(e instanceof c.Attribute){this.list.push(e)}};this.length=function(){return this.list.length};this.clear=function(){this.list=new Array();this.hTLV=null;this.hV=null};this.getEncodedHex=function(){if(typeof this.hTLV==\"string\"){return this.hTLV}var e=new a.DERSet({array:this.list,sortflag:this.sortFlag});this.hTLV=e.getEncodedHex();return this.hTLV};if(d!==undefined){if(typeof d.sortflag!=\"undefined\"&&d.sortflag==false){this.sortFlag=false}}};YAHOO.lang.extend(KJUR.asn1.cms.AttributeList,KJUR.asn1.ASN1Object);KJUR.asn1.cms.SignerInfo=function(e){var a=KJUR,h=a.asn1,b=h.DERTaggedObject,n=h.cms,j=n.AttributeList,g=n.ContentType,k=n.EncapsulatedContentInfo,c=n.MessageDigest,l=n.SignedData,d=h.x509,m=d.AlgorithmIdentifier,f=a.crypto,i=KEYUTIL;n.SignerInfo.superclass.constructor.call(this);this.dCMSVersion=new h.DERInteger({\"int\":1});this.dSignerIdentifier=null;this.dDigestAlgorithm=null;this.dSignedAttrs=new j();this.dSigAlg=null;this.dSig=null;this.dUnsignedAttrs=new j();this.setSignerIdentifier=function(p){if(typeof p==\"string\"&&p.indexOf(\"CERTIFICATE\")!=-1&&p.indexOf(\"BEGIN\")!=-1&&p.indexOf(\"END\")!=-1){var o=p;this.dSignerIdentifier=new n.IssuerAndSerialNumber({cert:p})}};this.setForContentAndHash=function(o){if(o!==undefined){if(o.eciObj instanceof k){this.dSignedAttrs.add(new g({oid:\"1.2.840.113549.1.7.1\"}));this.dSignedAttrs.add(new c({eciObj:o.eciObj,hashAlg:o.hashAlg}))}if(o.sdObj!==undefined&&o.sdObj instanceof l){if(o.sdObj.digestAlgNameList.join(\":\").indexOf(o.hashAlg)==-1){o.sdObj.digestAlgNameList.push(o.hashAlg)}}if(typeof o.hashAlg==\"string\"){this.dDigestAlgorithm=new m({name:o.hashAlg})}}};this.sign=function(t,p){this.dSigAlg=new m({name:p});var q=this.dSignedAttrs.getEncodedHex();var o=i.getKey(t);var s=new f.Signature({alg:p});s.init(o);s.updateHex(q);var r=s.sign();this.dSig=new h.DEROctetString({hex:r})};this.addUnsigned=function(o){this.hTLV=null;this.dUnsignedAttrs.hTLV=null;this.dUnsignedAttrs.add(o)};this.getEncodedHex=function(){if(this.dSignedAttrs instanceof j&&this.dSignedAttrs.length()==0){throw\"SignedAttrs length = 0 (empty)\"}var o=new b({obj:this.dSignedAttrs,tag:\"a0\",explicit:false});var r=null;if(this.dUnsignedAttrs.length()>0){r=new b({obj:this.dUnsignedAttrs,tag:\"a1\",explicit:false})}var q=[this.dCMSVersion,this.dSignerIdentifier,this.dDigestAlgorithm,o,this.dSigAlg,this.dSig,];if(r!=null){q.push(r)}var p=new h.DERSequence({array:q});this.hTLV=p.getEncodedHex();return this.hTLV}};YAHOO.lang.extend(KJUR.asn1.cms.SignerInfo,KJUR.asn1.ASN1Object);KJUR.asn1.cms.EncapsulatedContentInfo=function(g){var c=KJUR,b=c.asn1,e=b.DERTaggedObject,a=b.DERSequence,h=b.DERObjectIdentifier,d=b.DEROctetString,f=b.cms;f.EncapsulatedContentInfo.superclass.constructor.call(this);this.dEContentType=new h({name:\"data\"});this.dEContent=null;this.isDetached=false;this.eContentValueHex=null;this.setContentType=function(i){if(i.match(/^[0-2][.][0-9.]+$/)){this.dEContentType=new h({oid:i})}else{this.dEContentType=new h({name:i})}};this.setContentValue=function(i){if(i!==undefined){if(typeof i.hex==\"string\"){this.eContentValueHex=i.hex}else{if(typeof i.str==\"string\"){this.eContentValueHex=utf8tohex(i.str)}}}};this.setContentValueHex=function(i){this.eContentValueHex=i};this.setContentValueStr=function(i){this.eContentValueHex=utf8tohex(i)};this.getEncodedHex=function(){if(typeof this.eContentValueHex!=\"string\"){throw\"eContentValue not yet set\"}var k=new d({hex:this.eContentValueHex});this.dEContent=new e({obj:k,tag:\"a0\",explicit:true});var i=[this.dEContentType];if(!this.isDetached){i.push(this.dEContent)}var j=new a({array:i});this.hTLV=j.getEncodedHex();return this.hTLV}};YAHOO.lang.extend(KJUR.asn1.cms.EncapsulatedContentInfo,KJUR.asn1.ASN1Object);KJUR.asn1.cms.ContentInfo=function(f){var c=KJUR,b=c.asn1,d=b.DERTaggedObject,a=b.DERSequence,e=b.x509;KJUR.asn1.cms.ContentInfo.superclass.constructor.call(this);this.dContentType=null;this.dContent=null;this.setContentType=function(g){if(typeof g==\"string\"){this.dContentType=e.OID.name2obj(g)}};this.getEncodedHex=function(){var h=new d({obj:this.dContent,tag:\"a0\",explicit:true});var g=new a({array:[this.dContentType,h]});this.hTLV=g.getEncodedHex();return this.hTLV};if(f!==undefined){if(f.type){this.setContentType(f.type)}if(f.obj&&f.obj instanceof b.ASN1Object){this.dContent=f.obj}}};YAHOO.lang.extend(KJUR.asn1.cms.ContentInfo,KJUR.asn1.ASN1Object);KJUR.asn1.cms.SignedData=function(e){var a=KJUR,h=a.asn1,j=h.ASN1Object,g=h.DERInteger,m=h.DERSet,f=h.DERSequence,b=h.DERTaggedObject,l=h.cms,i=l.EncapsulatedContentInfo,d=l.SignerInfo,n=l.ContentInfo,c=h.x509,k=c.AlgorithmIdentifier;KJUR.asn1.cms.SignedData.superclass.constructor.call(this);this.dCMSVersion=new g({\"int\":1});this.dDigestAlgs=null;this.digestAlgNameList=[];this.dEncapContentInfo=new i();this.dCerts=null;this.certificateList=[];this.crlList=[];this.signerInfoList=[new d()];this.addCertificatesByPEM=function(p){var q=pemtohex(p);var r=new j();r.hTLV=q;this.certificateList.push(r)};this.getEncodedHex=function(){if(typeof this.hTLV==\"string\"){return this.hTLV}if(this.dDigestAlgs==null){var u=[];for(var t=0;t<this.digestAlgNameList.length;t++){var s=this.digestAlgNameList[t];var w=new k({name:s});u.push(w)}this.dDigestAlgs=new m({array:u})}var p=[this.dCMSVersion,this.dDigestAlgs,this.dEncapContentInfo];if(this.dCerts==null){if(this.certificateList.length>0){var v=new m({array:this.certificateList});this.dCerts=new b({obj:v,tag:\"a0\",explicit:false})}}if(this.dCerts!=null){p.push(this.dCerts)}var r=new m({array:this.signerInfoList});p.push(r);var q=new f({array:p});this.hTLV=q.getEncodedHex();return this.hTLV};this.getContentInfo=function(){this.getEncodedHex();var o=new n({type:\"signed-data\",obj:this});return o};this.getContentInfoEncodedHex=function(){var o=this.getContentInfo();var p=o.getEncodedHex();return p};this.getPEM=function(){return hextopem(this.getContentInfoEncodedHex(),\"CMS\")}};YAHOO.lang.extend(KJUR.asn1.cms.SignedData,KJUR.asn1.ASN1Object);KJUR.asn1.cms.CMSUtil=new function(){};KJUR.asn1.cms.CMSUtil.newSignedData=function(d){var b=KJUR,j=b.asn1,q=j.cms,f=q.SignerInfo,n=q.SignedData,o=q.SigningTime,a=q.SigningCertificate,p=q.SigningCertificateV2,c=j.cades,e=c.SignaturePolicyIdentifier;var m=new n();m.dEncapContentInfo.setContentValue(d.content);if(typeof d.certs==\"object\"){for(var h=0;h<d.certs.length;h++){m.addCertificatesByPEM(d.certs[h])}}m.signerInfoList=[];for(var h=0;h<d.signerInfos.length;h++){var k=d.signerInfos[h];var g=new f();g.setSignerIdentifier(k.signerCert);g.setForContentAndHash({sdObj:m,eciObj:m.dEncapContentInfo,hashAlg:k.hashAlg});for(attrName in k.sAttr){var r=k.sAttr[attrName];if(attrName==\"SigningTime\"){var l=new o(r);g.dSignedAttrs.add(l)}if(attrName==\"SigningCertificate\"){var l=new a(r);g.dSignedAttrs.add(l)}if(attrName==\"SigningCertificateV2\"){var l=new p(r);g.dSignedAttrs.add(l)}if(attrName==\"SignaturePolicyIdentifier\"){var l=new e(r);g.dSignedAttrs.add(l)}}g.sign(k.signerPrvKey,k.sigAlg);m.signerInfoList.push(g)}return m};KJUR.asn1.cms.CMSUtil.verifySignedData=function(n){var C=KJUR,p=C.asn1,s=p.cms,D=s.SignerInfo,q=s.SignedData,y=s.SigningTime,b=s.SigningCertificate,d=s.SigningCertificateV2,A=p.cades,u=A.SignaturePolicyIdentifier,i=C.lang.String.isHex,v=ASN1HEX,h=v.getVbyList,a=v.getTLVbyList,t=v.getIdxbyList,z=v.getChildIdx,c=v.getTLV,B=v.oidname,j=C.crypto.Util.hashHex;if(n.cms===undefined&&!i(n.cms)){}var E=n.cms;var g=function(J,H){var G;for(var I=3;I<6;I++){G=t(J,0,[1,0,I]);if(G!==undefined){var F=J.substr(G,2);if(F===\"a0\"){H.certsIdx=G}if(F===\"a1\"){H.revinfosIdx=G}if(F===\"31\"){H.signerinfosIdx=G}}}};var l=function(I,F){var H=F.signerinfosIdx;if(H===undefined){return}var L=z(I,H);F.signerInfoIdxList=L;for(var G=0;G<L.length;G++){var K=L[G];var J={idx:K};k(I,J);F.signerInfos.push(J)}};var k=function(I,J){var F=J.idx;J.signerid_issuer1=a(I,F,[1,0],\"30\");J.signerid_serial1=h(I,F,[1,1],\"02\");J.hashalg=B(h(I,F,[2,0],\"06\"));var H=t(I,F,[3],\"a0\");J.idxSignedAttrs=H;f(I,J,H);var G=z(I,F);var K=G.length;if(K<6){throw\"malformed SignerInfo\"}J.sigalg=B(h(I,F,[K-2,0],\"06\"));J.sigval=h(I,F,[K-1],\"04\")};var f=function(L,M,F){var J=z(L,F);M.signedAttrIdxList=J;for(var K=0;K<J.length;K++){var I=J[K];var G=h(L,I,[0],\"06\");var H;if(G===\"2a864886f70d010905\"){H=hextoutf8(h(L,I,[1,0]));M.saSigningTime=H}else{if(G===\"2a864886f70d010904\"){H=h(L,I,[1,0],\"04\");M.saMessageDigest=H}}}};var w=function(G,F){if(h(G,0,[0],\"06\")!==\"2a864886f70d010702\"){return F}F.cmsType=\"signedData\";F.econtent=h(G,0,[1,0,2,1,0]);g(G,F);F.signerInfos=[];l(G,F)};var o=function(J,F){var G=F.parse.signerInfos;var L=G.length;var K=true;for(var I=0;I<L;I++){var H=G[I];e(J,F,H,I);if(!H.isValid){K=false}}F.isValid=K};var x=function(F,Q,J,P){var N=Q.parse.certsIdx;var H;if(Q.certs===undefined){H=[];Q.certkeys=[];var K=z(F,N);for(var I=0;I<K.length;I++){var M=c(F,K[I]);var O=new X509();O.readCertHex(M);H[I]=O;Q.certkeys[I]=O.getPublicKey()}Q.certs=H}else{H=Q.certs}Q.cccc=H.length;Q.cccci=K.length;for(var I=0;I<H.length;I++){var L=O.getIssuerHex();var G=O.getSerialNumberHex();if(J.signerid_issuer1===L&&J.signerid_serial1===G){J.certkey_idx=I}}};var e=function(F,R,I,N){I.verifyDetail={};var Q=I.verifyDetail;var K=R.parse.econtent;var G=I.hashalg;var L=I.saMessageDigest;Q.validMessageDigest=false;if(j(K,G)===L){Q.validMessageDigest=true}x(F,R,I,N);Q.validSignatureValue=false;var H=I.sigalg;var M=\"31\"+c(F,I.idxSignedAttrs).substr(2);I.signedattrshex=M;var J=R.certs[I.certkey_idx].getPublicKey();var P=new KJUR.crypto.Signature({alg:H});P.init(J);P.updateHex(M);var O=P.verify(I.sigval);Q.validSignatureValue_isValid=O;if(O===true){Q.validSignatureValue=true}I.isValid=false;if(Q.validMessageDigest&&Q.validSignatureValue){I.isValid=true}};var m=function(){};var r={isValid:false,parse:{}};w(E,r.parse);o(E,r);return r};\nif(typeof KJUR==\"undefined\"||!KJUR){KJUR={}}if(typeof KJUR.asn1==\"undefined\"||!KJUR.asn1){KJUR.asn1={}}if(typeof KJUR.asn1.tsp==\"undefined\"||!KJUR.asn1.tsp){KJUR.asn1.tsp={}}KJUR.asn1.tsp.Accuracy=function(f){var c=KJUR,b=c.asn1,e=b.DERInteger,a=b.DERSequence,d=b.DERTaggedObject;b.tsp.Accuracy.superclass.constructor.call(this);this.seconds=null;this.millis=null;this.micros=null;this.getEncodedHex=function(){var i=null;var k=null;var m=null;var g=[];if(this.seconds!=null){i=new e({\"int\":this.seconds});g.push(i)}if(this.millis!=null){var l=new e({\"int\":this.millis});k=new d({obj:l,tag:\"80\",explicit:false});g.push(k)}if(this.micros!=null){var j=new e({\"int\":this.micros});m=new d({obj:j,tag:\"81\",explicit:false});g.push(m)}var h=new a({array:g});this.hTLV=h.getEncodedHex();return this.hTLV};if(f!==undefined){if(typeof f.seconds==\"number\"){this.seconds=f.seconds}if(typeof f.millis==\"number\"){this.millis=f.millis}if(typeof f.micros==\"number\"){this.micros=f.micros}}};YAHOO.lang.extend(KJUR.asn1.tsp.Accuracy,KJUR.asn1.ASN1Object);KJUR.asn1.tsp.MessageImprint=function(g){var c=KJUR,b=c.asn1,a=b.DERSequence,d=b.DEROctetString,f=b.x509,e=f.AlgorithmIdentifier;b.tsp.MessageImprint.superclass.constructor.call(this);this.dHashAlg=null;this.dHashValue=null;this.getEncodedHex=function(){if(typeof this.hTLV==\"string\"){return this.hTLV}var h=new a({array:[this.dHashAlg,this.dHashValue]});return h.getEncodedHex()};if(g!==undefined){if(typeof g.hashAlg==\"string\"){this.dHashAlg=new e({name:g.hashAlg})}if(typeof g.hashValue==\"string\"){this.dHashValue=new d({hex:g.hashValue})}}};YAHOO.lang.extend(KJUR.asn1.tsp.MessageImprint,KJUR.asn1.ASN1Object);KJUR.asn1.tsp.TimeStampReq=function(c){var a=KJUR,f=a.asn1,d=f.DERSequence,e=f.DERInteger,g=f.DERBoolean,i=f.DERObjectIdentifier,h=f.tsp,b=h.MessageImprint;h.TimeStampReq.superclass.constructor.call(this);this.dVersion=new e({\"int\":1});this.dMessageImprint=null;this.dPolicy=null;this.dNonce=null;this.certReq=true;this.setMessageImprint=function(j){if(j instanceof b){this.dMessageImprint=j;return}if(typeof j==\"object\"){this.dMessageImprint=new b(j)}};this.getEncodedHex=function(){if(this.dMessageImprint==null){throw\"messageImprint shall be specified\"}var j=[this.dVersion,this.dMessageImprint];if(this.dPolicy!=null){j.push(this.dPolicy)}if(this.dNonce!=null){j.push(this.dNonce)}if(this.certReq){j.push(new g())}var k=new d({array:j});this.hTLV=k.getEncodedHex();return this.hTLV};if(c!==undefined){if(typeof c.mi==\"object\"){this.setMessageImprint(c.mi)}if(typeof c.policy==\"object\"){this.dPolicy=new i(c.policy)}if(typeof c.nonce==\"object\"){this.dNonce=new e(c.nonce)}if(typeof c.certreq==\"boolean\"){this.certReq=c.certreq}}};YAHOO.lang.extend(KJUR.asn1.tsp.TimeStampReq,KJUR.asn1.ASN1Object);KJUR.asn1.tsp.TSTInfo=function(e){var c=KJUR,i=c.asn1,f=i.DERSequence,h=i.DERInteger,k=i.DERBoolean,g=i.DERGeneralizedTime,l=i.DERObjectIdentifier,j=i.tsp,d=j.MessageImprint,b=j.Accuracy,a=i.x509.X500Name;j.TSTInfo.superclass.constructor.call(this);this.dVersion=new h({\"int\":1});this.dPolicy=null;this.dMessageImprint=null;this.dSerialNumber=null;this.dGenTime=null;this.dAccuracy=null;this.dOrdering=null;this.dNonce=null;this.dTsa=null;this.getEncodedHex=function(){var m=[this.dVersion];if(this.dPolicy==null){throw\"policy shall be specified.\"}m.push(this.dPolicy);if(this.dMessageImprint==null){throw\"messageImprint shall be specified.\"}m.push(this.dMessageImprint);if(this.dSerialNumber==null){throw\"serialNumber shall be specified.\"}m.push(this.dSerialNumber);if(this.dGenTime==null){throw\"genTime shall be specified.\"}m.push(this.dGenTime);if(this.dAccuracy!=null){m.push(this.dAccuracy)}if(this.dOrdering!=null){m.push(this.dOrdering)}if(this.dNonce!=null){m.push(this.dNonce)}if(this.dTsa!=null){m.push(this.dTsa)}var n=new f({array:m});this.hTLV=n.getEncodedHex();return this.hTLV};if(e!==undefined){if(typeof e.policy==\"string\"){if(!e.policy.match(/^[0-9.]+$/)){throw\"policy shall be oid like 0.1.4.134\"}this.dPolicy=new l({oid:e.policy})}if(e.messageImprint!==undefined){this.dMessageImprint=new d(e.messageImprint)}if(e.serialNumber!==undefined){this.dSerialNumber=new h(e.serialNumber)}if(e.genTime!==undefined){this.dGenTime=new g(e.genTime)}if(e.accuracy!==undefined){this.dAccuracy=new b(e.accuracy)}if(e.ordering!==undefined&&e.ordering==true){this.dOrdering=new k()}if(e.nonce!==undefined){this.dNonce=new h(e.nonce)}if(e.tsa!==undefined){this.dTsa=new a(e.tsa)}}};YAHOO.lang.extend(KJUR.asn1.tsp.TSTInfo,KJUR.asn1.ASN1Object);KJUR.asn1.tsp.TimeStampResp=function(g){var e=KJUR,d=e.asn1,c=d.DERSequence,f=d.ASN1Object,a=d.tsp,b=a.PKIStatusInfo;a.TimeStampResp.superclass.constructor.call(this);this.dStatus=null;this.dTST=null;this.getEncodedHex=function(){if(this.dStatus==null){throw\"status shall be specified\"}var h=[this.dStatus];if(this.dTST!=null){h.push(this.dTST)}var i=new c({array:h});this.hTLV=i.getEncodedHex();return this.hTLV};if(g!==undefined){if(typeof g.status==\"object\"){this.dStatus=new b(g.status)}if(g.tst!==undefined&&g.tst instanceof f){this.dTST=g.tst.getContentInfo()}}};YAHOO.lang.extend(KJUR.asn1.tsp.TimeStampResp,KJUR.asn1.ASN1Object);KJUR.asn1.tsp.PKIStatusInfo=function(h){var g=KJUR,f=g.asn1,e=f.DERSequence,a=f.tsp,d=a.PKIStatus,c=a.PKIFreeText,b=a.PKIFailureInfo;a.PKIStatusInfo.superclass.constructor.call(this);this.dStatus=null;this.dStatusString=null;this.dFailureInfo=null;this.getEncodedHex=function(){if(this.dStatus==null){throw\"status shall be specified\"}var i=[this.dStatus];if(this.dStatusString!=null){i.push(this.dStatusString)}if(this.dFailureInfo!=null){i.push(this.dFailureInfo)}var j=new e({array:i});this.hTLV=j.getEncodedHex();return this.hTLV};if(h!==undefined){if(typeof h.status==\"object\"){this.dStatus=new d(h.status)}if(typeof h.statstr==\"object\"){this.dStatusString=new c({array:h.statstr})}if(typeof h.failinfo==\"object\"){this.dFailureInfo=new b(h.failinfo)}}};YAHOO.lang.extend(KJUR.asn1.tsp.PKIStatusInfo,KJUR.asn1.ASN1Object);KJUR.asn1.tsp.PKIStatus=function(h){var d=KJUR,c=d.asn1,g=c.DERInteger,a=c.tsp,b=a.PKIStatus;a.PKIStatus.superclass.constructor.call(this);var f=null;this.getEncodedHex=function(){this.hTLV=this.dStatus.getEncodedHex();return this.hTLV};if(h!==undefined){if(h.name!==undefined){var e=b.valueList;if(e[h.name]===undefined){throw\"name undefined: \"+h.name}this.dStatus=new g({\"int\":e[h.name]})}else{this.dStatus=new g(h)}}};YAHOO.lang.extend(KJUR.asn1.tsp.PKIStatus,KJUR.asn1.ASN1Object);KJUR.asn1.tsp.PKIStatus.valueList={granted:0,grantedWithMods:1,rejection:2,waiting:3,revocationWarning:4,revocationNotification:5};KJUR.asn1.tsp.PKIFreeText=function(f){var e=KJUR,d=e.asn1,b=d.DERSequence,c=d.DERUTF8String,a=d.tsp;a.PKIFreeText.superclass.constructor.call(this);this.textList=[];this.getEncodedHex=function(){var g=[];for(var j=0;j<this.textList.length;j++){g.push(new c({str:this.textList[j]}))}var h=new b({array:g});this.hTLV=h.getEncodedHex();return this.hTLV};if(f!==undefined){if(typeof f.array==\"object\"){this.textList=f.array}}};YAHOO.lang.extend(KJUR.asn1.tsp.PKIFreeText,KJUR.asn1.ASN1Object);KJUR.asn1.tsp.PKIFailureInfo=function(g){var d=KJUR,c=d.asn1,f=c.DERBitString,a=c.tsp,b=a.PKIFailureInfo;b.superclass.constructor.call(this);this.value=null;this.getEncodedHex=function(){if(this.value==null){throw\"value shall be specified\"}var h=new Number(this.value).toString(2);var i=new f();i.setByBinaryString(h);this.hTLV=i.getEncodedHex();return this.hTLV};if(g!==undefined){if(typeof g.name==\"string\"){var e=b.valueList;if(e[g.name]===undefined){throw\"name undefined: \"+g.name}this.value=e[g.name]}else{if(typeof g[\"int\"]==\"number\"){this.value=g[\"int\"]}}}};YAHOO.lang.extend(KJUR.asn1.tsp.PKIFailureInfo,KJUR.asn1.ASN1Object);KJUR.asn1.tsp.PKIFailureInfo.valueList={badAlg:0,badRequest:2,badDataFormat:5,timeNotAvailable:14,unacceptedPolicy:15,unacceptedExtension:16,addInfoNotAvailable:17,systemFailure:25};KJUR.asn1.tsp.AbstractTSAAdapter=function(a){this.getTSTHex=function(c,b){throw\"not implemented yet\"}};KJUR.asn1.tsp.SimpleTSAAdapter=function(e){var d=KJUR,c=d.asn1,a=c.tsp,b=d.crypto.Util.hashHex;a.SimpleTSAAdapter.superclass.constructor.call(this);this.params=null;this.serial=0;this.getTSTHex=function(g,f){var i=b(g,f);this.params.tstInfo.messageImprint={hashAlg:f,hashValue:i};this.params.tstInfo.serialNumber={\"int\":this.serial++};var h=Math.floor(Math.random()*1000000000);this.params.tstInfo.nonce={\"int\":h};var j=a.TSPUtil.newTimeStampToken(this.params);return j.getContentInfoEncodedHex()};if(e!==undefined){this.params=e}};YAHOO.lang.extend(KJUR.asn1.tsp.SimpleTSAAdapter,KJUR.asn1.tsp.AbstractTSAAdapter);KJUR.asn1.tsp.FixedTSAAdapter=function(e){var d=KJUR,c=d.asn1,a=c.tsp,b=d.crypto.Util.hashHex;a.FixedTSAAdapter.superclass.constructor.call(this);this.params=null;this.getTSTHex=function(g,f){var h=b(g,f);this.params.tstInfo.messageImprint={hashAlg:f,hashValue:h};var i=a.TSPUtil.newTimeStampToken(this.params);return i.getContentInfoEncodedHex()};if(e!==undefined){this.params=e}};YAHOO.lang.extend(KJUR.asn1.tsp.FixedTSAAdapter,KJUR.asn1.tsp.AbstractTSAAdapter);KJUR.asn1.tsp.TSPUtil=new function(){};KJUR.asn1.tsp.TSPUtil.newTimeStampToken=function(c){var b=KJUR,h=b.asn1,m=h.cms,k=h.tsp,a=h.tsp.TSTInfo;var j=new m.SignedData();var g=new a(c.tstInfo);var f=g.getEncodedHex();j.dEncapContentInfo.setContentValue({hex:f});j.dEncapContentInfo.setContentType(\"tstinfo\");if(typeof c.certs==\"object\"){for(var e=0;e<c.certs.length;e++){j.addCertificatesByPEM(c.certs[e])}}var d=j.signerInfoList[0];d.setSignerIdentifier(c.signerCert);d.setForContentAndHash({sdObj:j,eciObj:j.dEncapContentInfo,hashAlg:c.hashAlg});var l=new m.SigningCertificate({array:[c.signerCert]});d.dSignedAttrs.add(l);d.sign(c.signerPrvKey,c.sigAlg);return j};KJUR.asn1.tsp.TSPUtil.parseTimeStampReq=function(m){var l=ASN1HEX;var h=l.getChildIdx;var f=l.getV;var b=l.getTLV;var j={};j.certreq=false;var a=h(m,0);if(a.length<2){throw\"TimeStampReq must have at least 2 items\"}var e=b(m,a[1]);j.mi=KJUR.asn1.tsp.TSPUtil.parseMessageImprint(e);for(var d=2;d<a.length;d++){var g=a[d];var k=m.substr(g,2);if(k==\"06\"){var c=f(m,g);j.policy=l.hextooidstr(c)}if(k==\"02\"){j.nonce=f(m,g)}if(k==\"01\"){j.certreq=true}}return j};KJUR.asn1.tsp.TSPUtil.parseMessageImprint=function(c){var m=ASN1HEX;var j=m.getChildIdx;var i=m.getV;var g=m.getIdxbyList;var k={};if(c.substr(0,2)!=\"30\"){throw\"head of messageImprint hex shall be '30'\"}var a=j(c,0);var l=g(c,0,[0,0]);var e=i(c,l);var d=m.hextooidstr(e);var h=KJUR.asn1.x509.OID.oid2name(d);if(h==\"\"){throw\"hashAlg name undefined: \"+d}var b=h;var f=g(c,0,[1]);k.hashAlg=b;k.hashValue=i(c,f);return k};\nif(typeof KJUR==\"undefined\"||!KJUR){KJUR={}}if(typeof KJUR.asn1==\"undefined\"||!KJUR.asn1){KJUR.asn1={}}if(typeof KJUR.asn1.cades==\"undefined\"||!KJUR.asn1.cades){KJUR.asn1.cades={}}KJUR.asn1.cades.SignaturePolicyIdentifier=function(f){var b=KJUR,h=b.asn1,i=h.DERObjectIdentifier,g=h.DERSequence,e=h.cades,c=e.OtherHashAlgAndValue;e.SignaturePolicyIdentifier.superclass.constructor.call(this);this.attrTypeOid=\"1.2.840.113549.1.9.16.2.15\";if(f!==undefined){if(typeof f.oid==\"string\"&&typeof f.hash==\"object\"){var d=new i({oid:f.oid});var a=new c(f.hash);var j=new g({array:[d,a]});this.valueList=[j]}}};YAHOO.lang.extend(KJUR.asn1.cades.SignaturePolicyIdentifier,KJUR.asn1.cms.Attribute);KJUR.asn1.cades.OtherHashAlgAndValue=function(e){var a=KJUR,g=a.asn1,f=g.DERSequence,h=g.DEROctetString,d=g.x509,i=d.AlgorithmIdentifier,c=g.cades,b=c.OtherHashAlgAndValue;b.superclass.constructor.call(this);this.dAlg=null;this.dHash=null;this.getEncodedHex=function(){var j=new f({array:[this.dAlg,this.dHash]});this.hTLV=j.getEncodedHex();return this.hTLV};if(e!==undefined){if(typeof e.alg==\"string\"&&typeof e.hash==\"string\"){this.dAlg=new i({name:e.alg});this.dHash=new h({hex:e.hash})}}};YAHOO.lang.extend(KJUR.asn1.cades.OtherHashAlgAndValue,KJUR.asn1.ASN1Object);KJUR.asn1.cades.SignatureTimeStamp=function(h){var c=KJUR,b=c.asn1,e=b.ASN1Object,g=b.x509,a=b.cades;a.SignatureTimeStamp.superclass.constructor.call(this);this.attrTypeOid=\"1.2.840.113549.1.9.16.2.14\";this.tstHex=null;if(h!==undefined){if(h.res!==undefined){if(typeof h.res==\"string\"&&h.res.match(/^[0-9A-Fa-f]+$/)){}else{if(h.res instanceof e){}else{throw\"res param shall be ASN1Object or hex string\"}}}if(h.tst!==undefined){if(typeof h.tst==\"string\"&&h.tst.match(/^[0-9A-Fa-f]+$/)){var f=new e();this.tstHex=h.tst;f.hTLV=this.tstHex;f.getEncodedHex();this.valueList=[f]}else{if(h.tst instanceof e){}else{throw\"tst param shall be ASN1Object or hex string\"}}}}};YAHOO.lang.extend(KJUR.asn1.cades.SignatureTimeStamp,KJUR.asn1.cms.Attribute);KJUR.asn1.cades.CompleteCertificateRefs=function(d){var c=KJUR,b=c.asn1,a=b.cades;a.CompleteCertificateRefs.superclass.constructor.call(this);this.attrTypeOid=\"1.2.840.113549.1.9.16.2.21\";this.setByArray=function(e){this.valueList=[];for(var f=0;f<e.length;f++){var g=new a.OtherCertID(e[f]);this.valueList.push(g)}};if(d!==undefined){if(typeof d==\"object\"&&typeof d.length==\"number\"){this.setByArray(d)}}};YAHOO.lang.extend(KJUR.asn1.cades.CompleteCertificateRefs,KJUR.asn1.cms.Attribute);KJUR.asn1.cades.OtherCertID=function(e){var c=KJUR,b=c.asn1,d=b.cms,a=b.cades;a.OtherCertID.superclass.constructor.call(this);this.hasIssuerSerial=true;this.dOtherCertHash=null;this.dIssuerSerial=null;this.setByCertPEM=function(f){this.dOtherCertHash=new a.OtherHash(f);if(this.hasIssuerSerial){this.dIssuerSerial=new d.IssuerAndSerialNumber(f)}};this.getEncodedHex=function(){if(this.hTLV!=null){return this.hTLV}if(this.dOtherCertHash==null){throw\"otherCertHash not set\"}var f=[this.dOtherCertHash];if(this.dIssuerSerial!=null){f.push(this.dIssuerSerial)}var g=new b.DERSequence({array:f});this.hTLV=g.getEncodedHex();return this.hTLV};if(e!==undefined){if(typeof e==\"string\"&&e.indexOf(\"-----BEGIN \")!=-1){this.setByCertPEM(e)}if(typeof e==\"object\"){if(e.hasis===false){this.hasIssuerSerial=false}if(typeof e.cert==\"string\"){this.setByCertPEM(e.cert)}}}};YAHOO.lang.extend(KJUR.asn1.cades.OtherCertID,KJUR.asn1.ASN1Object);KJUR.asn1.cades.OtherHash=function(f){var d=KJUR,c=d.asn1,e=c.cms,b=c.cades,g=b.OtherHashAlgAndValue,a=d.crypto.Util.hashHex;b.OtherHash.superclass.constructor.call(this);this.alg=\"sha256\";this.dOtherHash=null;this.setByCertPEM=function(h){if(h.indexOf(\"-----BEGIN \")==-1){throw\"certPEM not to seem PEM format\"}var i=pemtohex(h);var j=a(i,this.alg);this.dOtherHash=new g({alg:this.alg,hash:j})};this.getEncodedHex=function(){if(this.dOtherHash==null){throw\"OtherHash not set\"}return this.dOtherHash.getEncodedHex()};if(f!==undefined){if(typeof f==\"string\"){if(f.indexOf(\"-----BEGIN \")!=-1){this.setByCertPEM(f)}else{if(f.match(/^[0-9A-Fa-f]+$/)){this.dOtherHash=new c.DEROctetString({hex:f})}else{throw\"unsupported string value for params\"}}}else{if(typeof f==\"object\"){if(typeof f.cert==\"string\"){if(typeof f.alg==\"string\"){this.alg=f.alg}this.setByCertPEM(f.cert)}else{this.dOtherHash=new g(f)}}}}};YAHOO.lang.extend(KJUR.asn1.cades.OtherHash,KJUR.asn1.ASN1Object);KJUR.asn1.cades.CAdESUtil=new function(){};KJUR.asn1.cades.CAdESUtil.addSigTS=function(c,b,a){};KJUR.asn1.cades.CAdESUtil.parseSignedDataForAddingUnsigned=function(e){var p=ASN1HEX,u=p.getChildIdx,b=p.getTLV,a=p.getTLVbyList,k=p.getIdxbyList,A=KJUR,g=A.asn1,l=g.ASN1Object,j=g.cms,h=j.SignedData,v=g.cades,z=v.CAdESUtil;var m={};if(a(e,0,[0])!=\"06092a864886f70d010702\"){throw\"hex is not CMS SignedData\"}var y=k(e,0,[1,0]);var B=u(e,y);if(B.length<4){throw\"num of SignedData elem shall be 4 at least\"}var d=B.shift();m.version=b(e,d);var w=B.shift();m.algs=b(e,w);var c=B.shift();m.encapcontent=b(e,c);m.certs=null;m.revs=null;m.si=[];var o=B.shift();if(e.substr(o,2)==\"a0\"){m.certs=b(e,o);o=B.shift()}if(e.substr(o,2)==\"a1\"){m.revs=b(e,o);o=B.shift()}var t=o;if(e.substr(t,2)!=\"31\"){throw\"Can't find signerInfos\"}var f=u(e,t);for(var q=0;q<f.length;q++){var s=f[q];var n=z.parseSignerInfoForAddingUnsigned(e,s,q);m.si[q]=n}var x=null;m.obj=new h();x=new l();x.hTLV=m.version;m.obj.dCMSVersion=x;x=new l();x.hTLV=m.algs;m.obj.dDigestAlgs=x;x=new l();x.hTLV=m.encapcontent;m.obj.dEncapContentInfo=x;x=new l();x.hTLV=m.certs;m.obj.dCerts=x;m.obj.signerInfoList=[];for(var q=0;q<m.si.length;q++){m.obj.signerInfoList.push(m.si[q].obj)}return m};KJUR.asn1.cades.CAdESUtil.parseSignerInfoForAddingUnsigned=function(g,q,c){var p=ASN1HEX,s=p.getChildIdx,a=p.getTLV,l=p.getV,v=KJUR,h=v.asn1,n=h.ASN1Object,j=h.cms,k=j.AttributeList,w=j.SignerInfo;var o={};var t=s(g,q);if(t.length!=6){throw\"not supported items for SignerInfo (!=6)\"}var d=t.shift();o.version=a(g,d);var e=t.shift();o.si=a(g,e);var m=t.shift();o.digalg=a(g,m);var f=t.shift();o.sattrs=a(g,f);var i=t.shift();o.sigalg=a(g,i);var b=t.shift();o.sig=a(g,b);o.sigval=l(g,b);var u=null;o.obj=new w();u=new n();u.hTLV=o.version;o.obj.dCMSVersion=u;u=new n();u.hTLV=o.si;o.obj.dSignerIdentifier=u;u=new n();u.hTLV=o.digalg;o.obj.dDigestAlgorithm=u;u=new n();u.hTLV=o.sattrs;o.obj.dSignedAttrs=u;u=new n();u.hTLV=o.sigalg;o.obj.dSigAlg=u;u=new n();u.hTLV=o.sig;o.obj.dSig=u;o.obj.dUnsignedAttrs=new k();return o};\nif(typeof KJUR.asn1.csr==\"undefined\"||!KJUR.asn1.csr){KJUR.asn1.csr={}}KJUR.asn1.csr.CertificationRequest=function(d){var a=KJUR,f=a.asn1,b=f.DERBitString,e=f.DERSequence,k=f.csr,c=f.x509;k.CertificationRequest.superclass.constructor.call(this);var l=null;var j=null;var h=null;var i=null;var g=null;this.sign=function(o,n){if(this.prvKey==null){this.prvKey=n}this.asn1SignatureAlg=new c.AlgorithmIdentifier({name:o});sig=new a.crypto.Signature({alg:o});sig.init(this.prvKey);sig.updateHex(this.asn1CSRInfo.getEncodedHex());this.hexSig=sig.sign();this.asn1Sig=new b({hex:\"00\"+this.hexSig});var m=new e({array:[this.asn1CSRInfo,this.asn1SignatureAlg,this.asn1Sig]});this.hTLV=m.getEncodedHex();this.isModified=false};this.getPEMString=function(){return hextopem(this.getEncodedHex(),\"CERTIFICATE REQUEST\")};this.getEncodedHex=function(){if(this.isModified==false&&this.hTLV!=null){return this.hTLV}throw\"not signed yet\"};if(d!==undefined&&d.csrinfo!==undefined){this.asn1CSRInfo=d.csrinfo}};YAHOO.lang.extend(KJUR.asn1.csr.CertificationRequest,KJUR.asn1.ASN1Object);KJUR.asn1.csr.CertificationRequestInfo=function(e){var b=KJUR,h=b.asn1,g=h.DERInteger,f=h.DERSequence,m=h.DERSet,j=h.DERNull,c=h.DERTaggedObject,k=h.DERObjectIdentifier,l=h.csr,d=h.x509,a=d.X500Name,n=d.Extension,i=KEYUTIL;l.CertificationRequestInfo.superclass.constructor.call(this);this._initialize=function(){this.asn1Array=new Array();this.asn1Version=new g({\"int\":0});this.asn1Subject=null;this.asn1SubjPKey=null;this.extensionsArray=new Array()};this.setSubjectByParam=function(o){this.asn1Subject=new a(o)};this.setSubjectPublicKeyByGetKey=function(p){var o=i.getKey(p);this.asn1SubjPKey=new d.SubjectPublicKeyInfo(o)};this.appendExtensionByName=function(p,o){n.appendByNameToArray(p,o,this.extensionsArray)};this.getEncodedHex=function(){this.asn1Array=new Array();this.asn1Array.push(this.asn1Version);this.asn1Array.push(this.asn1Subject);this.asn1Array.push(this.asn1SubjPKey);if(this.extensionsArray.length>0){var s=new f({array:this.extensionsArray});var r=new m({array:[s]});var q=new f({array:[new k({oid:\"1.2.840.113549.1.9.14\"}),r]});var p=new c({explicit:true,tag:\"a0\",obj:q});this.asn1Array.push(p)}else{var p=new c({explicit:false,tag:\"a0\",obj:new j()});this.asn1Array.push(p)}var t=new f({array:this.asn1Array});this.hTLV=t.getEncodedHex();this.isModified=false;return this.hTLV};this._initialize()};YAHOO.lang.extend(KJUR.asn1.csr.CertificationRequestInfo,KJUR.asn1.ASN1Object);KJUR.asn1.csr.CSRUtil=new function(){};KJUR.asn1.csr.CSRUtil.newCSRPEM=function(h){var c=KEYUTIL,b=KJUR.asn1.csr;if(h.subject===undefined){throw\"parameter subject undefined\"}if(h.sbjpubkey===undefined){throw\"parameter sbjpubkey undefined\"}if(h.sigalg===undefined){throw\"parameter sigalg undefined\"}if(h.sbjprvkey===undefined){throw\"parameter sbjpubkey undefined\"}var d=new b.CertificationRequestInfo();d.setSubjectByParam(h.subject);d.setSubjectPublicKeyByGetKey(h.sbjpubkey);if(h.ext!==undefined&&h.ext.length!==undefined){for(var e=0;e<h.ext.length;e++){for(key in h.ext[e]){d.appendExtensionByName(key,h.ext[e][key])}}}var f=new b.CertificationRequest({csrinfo:d});var a=c.getKey(h.sbjprvkey);f.sign(h.sigalg,a);var g=f.getPEMString();return g};KJUR.asn1.csr.CSRUtil.getInfo=function(b){var d=ASN1HEX;var e=d.getTLVbyList;var a={};a.subject={};a.pubkey={};if(b.indexOf(\"-----BEGIN CERTIFICATE REQUEST\")==-1){throw\"argument is not PEM file\"}var c=pemtohex(b,\"CERTIFICATE REQUEST\");a.subject.hex=e(c,0,[0,1]);a.subject.name=X509.hex2dn(a.subject.hex);a.pubkey.hex=e(c,0,[0,2]);a.pubkey.obj=KEYUTIL.getKey(a.pubkey.hex,null,\"pkcs8pub\");return a};\nif(typeof KJUR==\"undefined\"||!KJUR){KJUR={}}if(typeof KJUR.asn1==\"undefined\"||!KJUR.asn1){KJUR.asn1={}}if(typeof KJUR.asn1.ocsp==\"undefined\"||!KJUR.asn1.ocsp){KJUR.asn1.ocsp={}}KJUR.asn1.ocsp.DEFAULT_HASH=\"sha1\";KJUR.asn1.ocsp.CertID=function(g){var d=KJUR,k=d.asn1,m=k.DEROctetString,j=k.DERInteger,h=k.DERSequence,f=k.x509,n=f.AlgorithmIdentifier,o=k.ocsp,l=o.DEFAULT_HASH,i=d.crypto,e=i.Util.hashHex,c=X509,q=ASN1HEX;o.CertID.superclass.constructor.call(this);this.dHashAlg=null;this.dIssuerNameHash=null;this.dIssuerKeyHash=null;this.dSerialNumber=null;this.setByValue=function(t,s,p,r){if(r===undefined){r=l}this.dHashAlg=new n({name:r});this.dIssuerNameHash=new m({hex:t});this.dIssuerKeyHash=new m({hex:s});this.dSerialNumber=new j({hex:p})};this.setByCert=function(x,t,v){if(v===undefined){v=l}var p=new c();p.readCertPEM(t);var y=new c();y.readCertPEM(x);var z=y.getPublicKeyHex();var w=q.getTLVbyList(z,0,[1,0],\"30\");var r=p.getSerialNumberHex();var s=e(y.getSubjectHex(),v);var u=e(w,v);this.setByValue(s,u,r,v);this.hoge=p.getSerialNumberHex()};this.getEncodedHex=function(){if(this.dHashAlg===null&&this.dIssuerNameHash===null&&this.dIssuerKeyHash===null&&this.dSerialNumber===null){throw\"not yet set values\"}var p=[this.dHashAlg,this.dIssuerNameHash,this.dIssuerKeyHash,this.dSerialNumber];var r=new h({array:p});this.hTLV=r.getEncodedHex();return this.hTLV};if(g!==undefined){var b=g;if(b.issuerCert!==undefined&&b.subjectCert!==undefined){var a=l;if(b.alg===undefined){a=undefined}this.setByCert(b.issuerCert,b.subjectCert,a)}else{if(b.namehash!==undefined&&b.keyhash!==undefined&&b.serial!==undefined){var a=l;if(b.alg===undefined){a=undefined}this.setByValue(b.namehash,b.keyhash,b.serial,a)}else{throw\"invalid constructor arguments\"}}}};YAHOO.lang.extend(KJUR.asn1.ocsp.CertID,KJUR.asn1.ASN1Object);KJUR.asn1.ocsp.Request=function(f){var c=KJUR,b=c.asn1,a=b.DERSequence,d=b.ocsp;d.Request.superclass.constructor.call(this);this.dReqCert=null;this.dExt=null;this.getEncodedHex=function(){var g=[];if(this.dReqCert===null){throw\"reqCert not set\"}g.push(this.dReqCert);var h=new a({array:g});this.hTLV=h.getEncodedHex();return this.hTLV};if(typeof f!==\"undefined\"){var e=new d.CertID(f);this.dReqCert=e}};YAHOO.lang.extend(KJUR.asn1.ocsp.Request,KJUR.asn1.ASN1Object);KJUR.asn1.ocsp.TBSRequest=function(e){var c=KJUR,b=c.asn1,a=b.DERSequence,d=b.ocsp;d.TBSRequest.superclass.constructor.call(this);this.version=0;this.dRequestorName=null;this.dRequestList=[];this.dRequestExt=null;this.setRequestListByParam=function(h){var f=[];for(var g=0;g<h.length;g++){var j=new d.Request(h[0]);f.push(j)}this.dRequestList=f};this.getEncodedHex=function(){var f=[];if(this.version!==0){throw\"not supported version: \"+this.version}if(this.dRequestorName!==null){throw\"requestorName not supported\"}var h=new a({array:this.dRequestList});f.push(h);if(this.dRequestExt!==null){throw\"requestExtensions not supported\"}var g=new a({array:f});this.hTLV=g.getEncodedHex();return this.hTLV};if(e!==undefined){if(e.reqList!==undefined){this.setRequestListByParam(e.reqList)}}};YAHOO.lang.extend(KJUR.asn1.ocsp.TBSRequest,KJUR.asn1.ASN1Object);KJUR.asn1.ocsp.OCSPRequest=function(f){var c=KJUR,b=c.asn1,a=b.DERSequence,d=b.ocsp;d.OCSPRequest.superclass.constructor.call(this);this.dTbsRequest=null;this.dOptionalSignature=null;this.getEncodedHex=function(){var g=[];if(this.dTbsRequest!==null){g.push(this.dTbsRequest)}else{throw\"tbsRequest not set\"}if(this.dOptionalSignature!==null){throw\"optionalSignature not supported\"}var h=new a({array:g});this.hTLV=h.getEncodedHex();return this.hTLV};if(f!==undefined){if(f.reqList!==undefined){var e=new d.TBSRequest(f);this.dTbsRequest=e}}};YAHOO.lang.extend(KJUR.asn1.ocsp.OCSPRequest,KJUR.asn1.ASN1Object);KJUR.asn1.ocsp.OCSPUtil={};KJUR.asn1.ocsp.OCSPUtil.getRequestHex=function(a,b,h){var d=KJUR,c=d.asn1,e=c.ocsp;if(h===undefined){h=e.DEFAULT_HASH}var g={alg:h,issuerCert:a,subjectCert:b};var f=new e.OCSPRequest({reqList:[g]});return f.getEncodedHex()};KJUR.asn1.ocsp.OCSPUtil.getOCSPResponseInfo=function(b){var k=ASN1HEX;var c=k.getVbyList;var d=k.getIdxbyList;var c=k.getVbyList;var f=k.getV;var l={};try{var i=c(b,0,[0],\"0a\");l.responseStatus=parseInt(i,16)}catch(e){}if(l.responseStatus!==0){return l}try{var g=d(b,0,[1,0,1,0,0,2,0,1]);if(b.substr(g,2)===\"80\"){l.certStatus=\"good\"}else{if(b.substr(g,2)===\"a1\"){l.certStatus=\"revoked\";l.revocationTime=hextoutf8(c(b,g,[0]))}else{if(b.substr(g,2)===\"82\"){l.certStatus=\"unknown\"}}}}catch(e){}try{var a=d(b,0,[1,0,1,0,0,2,0,2]);l.thisUpdate=hextoutf8(f(b,a))}catch(e){}try{var j=d(b,0,[1,0,1,0,0,2,0,3]);if(b.substr(j,2)===\"a0\"){l.nextUpdate=hextoutf8(c(b,j,[0]))}}catch(e){}return l};\nvar KJUR;if(typeof KJUR==\"undefined\"||!KJUR){KJUR={}}if(typeof KJUR.lang==\"undefined\"||!KJUR.lang){KJUR.lang={}}KJUR.lang.String=function(){};function Base64x(){}function stoBA(d){var b=new Array();for(var c=0;c<d.length;c++){b[c]=d.charCodeAt(c)}return b}function BAtos(b){var d=\"\";for(var c=0;c<b.length;c++){d=d+String.fromCharCode(b[c])}return d}function BAtohex(b){var e=\"\";for(var d=0;d<b.length;d++){var c=b[d].toString(16);if(c.length==1){c=\"0\"+c}e=e+c}return e}function stohex(a){return BAtohex(stoBA(a))}function stob64(a){return hex2b64(stohex(a))}function stob64u(a){return b64tob64u(hex2b64(stohex(a)))}function b64utos(a){return BAtos(b64toBA(b64utob64(a)))}function b64tob64u(a){a=a.replace(/\\=/g,\"\");a=a.replace(/\\+/g,\"-\");a=a.replace(/\\//g,\"_\");return a}function b64utob64(a){if(a.length%4==2){a=a+\"==\"}else{if(a.length%4==3){a=a+\"=\"}}a=a.replace(/-/g,\"+\");a=a.replace(/_/g,\"/\");return a}function hextob64u(a){if(a.length%2==1){a=\"0\"+a}return b64tob64u(hex2b64(a))}function b64utohex(a){return b64tohex(b64utob64(a))}var utf8tob64u,b64utoutf8;if(typeof Buffer===\"function\"){utf8tob64u=function(a){return b64tob64u(new Buffer(a,\"utf8\").toString(\"base64\"))};b64utoutf8=function(a){return new Buffer(b64utob64(a),\"base64\").toString(\"utf8\")}}else{utf8tob64u=function(a){return hextob64u(uricmptohex(encodeURIComponentAll(a)))};b64utoutf8=function(a){return decodeURIComponent(hextouricmp(b64utohex(a)))}}function utf8tob64(a){return hex2b64(uricmptohex(encodeURIComponentAll(a)))}function b64toutf8(a){return decodeURIComponent(hextouricmp(b64tohex(a)))}function utf8tohex(a){return uricmptohex(encodeURIComponentAll(a))}function hextoutf8(a){return decodeURIComponent(hextouricmp(a))}function hextorstr(c){var b=\"\";for(var a=0;a<c.length-1;a+=2){b+=String.fromCharCode(parseInt(c.substr(a,2),16))}return b}function rstrtohex(c){var a=\"\";for(var b=0;b<c.length;b++){a+=(\"0\"+c.charCodeAt(b).toString(16)).slice(-2)}return a}function hextob64(a){return hex2b64(a)}function hextob64nl(b){var a=hextob64(b);var c=a.replace(/(.{64})/g,\"$1\\r\\n\");c=c.replace(/\\r\\n$/,\"\");return c}function b64nltohex(b){var a=b.replace(/[^0-9A-Za-z\\/+=]*/g,\"\");var c=b64tohex(a);return c}function hextopem(a,b){var c=hextob64nl(a);return\"-----BEGIN \"+b+\"-----\\r\\n\"+c+\"\\r\\n-----END \"+b+\"-----\\r\\n\"}function pemtohex(a,b){if(a.indexOf(\"-----BEGIN \")==-1){throw\"can't find PEM header: \"+b}if(b!==undefined){a=a.replace(\"-----BEGIN \"+b+\"-----\",\"\");a=a.replace(\"-----END \"+b+\"-----\",\"\")}else{a=a.replace(/-----BEGIN [^-]+-----/,\"\");a=a.replace(/-----END [^-]+-----/,\"\")}return b64nltohex(a)}function hextoArrayBuffer(d){if(d.length%2!=0){throw\"input is not even length\"}if(d.match(/^[0-9A-Fa-f]+$/)==null){throw\"input is not hexadecimal\"}var b=new ArrayBuffer(d.length/2);var a=new DataView(b);for(var c=0;c<d.length/2;c++){a.setUint8(c,parseInt(d.substr(c*2,2),16))}return b}function ArrayBuffertohex(b){var d=\"\";var a=new DataView(b);for(var c=0;c<b.byteLength;c++){d+=(\"00\"+a.getUint8(c).toString(16)).slice(-2)}return d}function zulutomsec(n){var l,j,m,e,f,i,b,k;var a,h,g,c;c=n.match(/^(\\d{2}|\\d{4})(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(|\\.\\d+)Z$/);if(c){a=c[1];l=parseInt(a);if(a.length===2){if(50<=l&&l<100){l=1900+l}else{if(0<=l&&l<50){l=2000+l}}}j=parseInt(c[2])-1;m=parseInt(c[3]);e=parseInt(c[4]);f=parseInt(c[5]);i=parseInt(c[6]);b=0;h=c[7];if(h!==\"\"){g=(h.substr(1)+\"00\").substr(0,3);b=parseInt(g)}return Date.UTC(l,j,m,e,f,i,b)}throw\"unsupported zulu format: \"+n}function zulutosec(a){var b=zulutomsec(a);return ~~(b/1000)}function zulutodate(a){return new Date(zulutomsec(a))}function datetozulu(g,e,f){var b;var a=g.getUTCFullYear();if(e){if(a<1950||2049<a){throw\"not proper year for UTCTime: \"+a}b=(\"\"+a).slice(-2)}else{b=(\"000\"+a).slice(-4)}b+=(\"0\"+(g.getUTCMonth()+1)).slice(-2);b+=(\"0\"+g.getUTCDate()).slice(-2);b+=(\"0\"+g.getUTCHours()).slice(-2);b+=(\"0\"+g.getUTCMinutes()).slice(-2);b+=(\"0\"+g.getUTCSeconds()).slice(-2);if(f){var c=g.getUTCMilliseconds();if(c!==0){c=(\"00\"+c).slice(-3);c=c.replace(/0+$/g,\"\");b+=\".\"+c}}b+=\"Z\";return b}function uricmptohex(a){return a.replace(/%/g,\"\")}function hextouricmp(a){return a.replace(/(..)/g,\"%$1\")}function ipv6tohex(g){var b=\"malformed IPv6 address\";if(!g.match(/^[0-9A-Fa-f:]+$/)){throw b}g=g.toLowerCase();var d=g.split(\":\").length-1;if(d<2){throw b}var e=\":\".repeat(7-d+2);g=g.replace(\"::\",e);var c=g.split(\":\");if(c.length!=8){throw b}for(var f=0;f<8;f++){c[f]=(\"0000\"+c[f]).slice(-4)}return c.join(\"\")}function hextoipv6(e){if(!e.match(/^[0-9A-Fa-f]{32}$/)){throw\"malformed IPv6 address octet\"}e=e.toLowerCase();var b=e.match(/.{1,4}/g);for(var d=0;d<8;d++){b[d]=b[d].replace(/^0+/,\"\");if(b[d]==\"\"){b[d]=\"0\"}}e=\":\"+b.join(\":\")+\":\";var c=e.match(/:(0:){2,}/g);if(c===null){return e.slice(1,-1)}var f=\"\";for(var d=0;d<c.length;d++){if(c[d].length>f.length){f=c[d]}}e=e.replace(f,\"::\");return e.slice(1,-1)}function hextoip(b){var d=\"malformed hex value\";if(!b.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/)){throw d}if(b.length==8){var c;try{c=parseInt(b.substr(0,2),16)+\".\"+parseInt(b.substr(2,2),16)+\".\"+parseInt(b.substr(4,2),16)+\".\"+parseInt(b.substr(6,2),16);return c}catch(a){throw d}}else{if(b.length==32){return hextoipv6(b)}else{return b}}}function iptohex(f){var j=\"malformed IP address\";f=f.toLowerCase(f);if(f.match(/^[0-9.]+$/)){var b=f.split(\".\");if(b.length!==4){throw j}var g=\"\";try{for(var e=0;e<4;e++){var h=parseInt(b[e]);g+=(\"0\"+h.toString(16)).slice(-2)}return g}catch(c){throw j}}else{if(f.match(/^[0-9a-f:]+$/)&&f.indexOf(\":\")!==-1){return ipv6tohex(f)}else{throw j}}}function encodeURIComponentAll(a){var d=encodeURIComponent(a);var b=\"\";for(var c=0;c<d.length;c++){if(d[c]==\"%\"){b=b+d.substr(c,3);c=c+2}else{b=b+\"%\"+stohex(d[c])}}return b}function newline_toUnix(a){a=a.replace(/\\r\\n/mg,\"\\n\");return a}function newline_toDos(a){a=a.replace(/\\r\\n/mg,\"\\n\");a=a.replace(/\\n/mg,\"\\r\\n\");return a}KJUR.lang.String.isInteger=function(a){if(a.match(/^[0-9]+$/)){return true}else{if(a.match(/^-[0-9]+$/)){return true}else{return false}}};KJUR.lang.String.isHex=function(a){if(a.length%2==0&&(a.match(/^[0-9a-f]+$/)||a.match(/^[0-9A-F]+$/))){return true}else{return false}};KJUR.lang.String.isBase64=function(a){a=a.replace(/\\s+/g,\"\");if(a.match(/^[0-9A-Za-z+\\/]+={0,3}$/)&&a.length%4==0){return true}else{return false}};KJUR.lang.String.isBase64URL=function(a){if(a.match(/[+/=]/)){return false}a=b64utob64(a);return KJUR.lang.String.isBase64(a)};KJUR.lang.String.isIntegerArray=function(a){a=a.replace(/\\s+/g,\"\");if(a.match(/^\\[[0-9,]+\\]$/)){return true}else{return false}};function hextoposhex(a){if(a.length%2==1){return\"0\"+a}if(a.substr(0,1)>\"7\"){return\"00\"+a}return a}function intarystrtohex(b){b=b.replace(/^\\s*\\[\\s*/,\"\");b=b.replace(/\\s*\\]\\s*$/,\"\");b=b.replace(/\\s*/g,\"\");try{var c=b.split(/,/).map(function(g,e,h){var f=parseInt(g);if(f<0||255<f){throw\"integer not in range 0-255\"}var d=(\"00\"+f.toString(16)).slice(-2);return d}).join(\"\");return c}catch(a){throw\"malformed integer array string: \"+a}}var strdiffidx=function(c,a){var d=c.length;if(c.length>a.length){d=a.length}for(var b=0;b<d;b++){if(c.charCodeAt(b)!=a.charCodeAt(b)){return b}}if(c.length!=a.length){return d}return -1};\nif(typeof KJUR==\"undefined\"||!KJUR){KJUR={}}if(typeof KJUR.crypto==\"undefined\"||!KJUR.crypto){KJUR.crypto={}}KJUR.crypto.Util=new function(){this.DIGESTINFOHEAD={sha1:\"3021300906052b0e03021a05000414\",sha224:\"302d300d06096086480165030402040500041c\",sha256:\"3031300d060960864801650304020105000420\",sha384:\"3041300d060960864801650304020205000430\",sha512:\"3051300d060960864801650304020305000440\",md2:\"3020300c06082a864886f70d020205000410\",md5:\"3020300c06082a864886f70d020505000410\",ripemd160:\"3021300906052b2403020105000414\",};this.DEFAULTPROVIDER={md5:\"cryptojs\",sha1:\"cryptojs\",sha224:\"cryptojs\",sha256:\"cryptojs\",sha384:\"cryptojs\",sha512:\"cryptojs\",ripemd160:\"cryptojs\",hmacmd5:\"cryptojs\",hmacsha1:\"cryptojs\",hmacsha224:\"cryptojs\",hmacsha256:\"cryptojs\",hmacsha384:\"cryptojs\",hmacsha512:\"cryptojs\",hmacripemd160:\"cryptojs\",MD5withRSA:\"cryptojs/jsrsa\",SHA1withRSA:\"cryptojs/jsrsa\",SHA224withRSA:\"cryptojs/jsrsa\",SHA256withRSA:\"cryptojs/jsrsa\",SHA384withRSA:\"cryptojs/jsrsa\",SHA512withRSA:\"cryptojs/jsrsa\",RIPEMD160withRSA:\"cryptojs/jsrsa\",MD5withECDSA:\"cryptojs/jsrsa\",SHA1withECDSA:\"cryptojs/jsrsa\",SHA224withECDSA:\"cryptojs/jsrsa\",SHA256withECDSA:\"cryptojs/jsrsa\",SHA384withECDSA:\"cryptojs/jsrsa\",SHA512withECDSA:\"cryptojs/jsrsa\",RIPEMD160withECDSA:\"cryptojs/jsrsa\",SHA1withDSA:\"cryptojs/jsrsa\",SHA224withDSA:\"cryptojs/jsrsa\",SHA256withDSA:\"cryptojs/jsrsa\",MD5withRSAandMGF1:\"cryptojs/jsrsa\",SHA1withRSAandMGF1:\"cryptojs/jsrsa\",SHA224withRSAandMGF1:\"cryptojs/jsrsa\",SHA256withRSAandMGF1:\"cryptojs/jsrsa\",SHA384withRSAandMGF1:\"cryptojs/jsrsa\",SHA512withRSAandMGF1:\"cryptojs/jsrsa\",RIPEMD160withRSAandMGF1:\"cryptojs/jsrsa\",};this.CRYPTOJSMESSAGEDIGESTNAME={md5:CryptoJS.algo.MD5,sha1:CryptoJS.algo.SHA1,sha224:CryptoJS.algo.SHA224,sha256:CryptoJS.algo.SHA256,sha384:CryptoJS.algo.SHA384,sha512:CryptoJS.algo.SHA512,ripemd160:CryptoJS.algo.RIPEMD160};this.getDigestInfoHex=function(a,b){if(typeof this.DIGESTINFOHEAD[b]==\"undefined\"){throw\"alg not supported in Util.DIGESTINFOHEAD: \"+b}return this.DIGESTINFOHEAD[b]+a};this.getPaddedDigestInfoHex=function(h,a,j){var c=this.getDigestInfoHex(h,a);var d=j/4;if(c.length+22>d){throw\"key is too short for SigAlg: keylen=\"+j+\",\"+a}var b=\"0001\";var k=\"00\"+c;var g=\"\";var l=d-b.length-k.length;for(var f=0;f<l;f+=2){g+=\"ff\"}var e=b+g+k;return e};this.hashString=function(a,c){var b=new KJUR.crypto.MessageDigest({alg:c});return b.digestString(a)};this.hashHex=function(b,c){var a=new KJUR.crypto.MessageDigest({alg:c});return a.digestHex(b)};this.sha1=function(a){var b=new KJUR.crypto.MessageDigest({alg:\"sha1\",prov:\"cryptojs\"});return b.digestString(a)};this.sha256=function(a){var b=new KJUR.crypto.MessageDigest({alg:\"sha256\",prov:\"cryptojs\"});return b.digestString(a)};this.sha256Hex=function(a){var b=new KJUR.crypto.MessageDigest({alg:\"sha256\",prov:\"cryptojs\"});return b.digestHex(a)};this.sha512=function(a){var b=new KJUR.crypto.MessageDigest({alg:\"sha512\",prov:\"cryptojs\"});return b.digestString(a)};this.sha512Hex=function(a){var b=new KJUR.crypto.MessageDigest({alg:\"sha512\",prov:\"cryptojs\"});return b.digestHex(a)}};KJUR.crypto.Util.md5=function(a){var b=new KJUR.crypto.MessageDigest({alg:\"md5\",prov:\"cryptojs\"});return b.digestString(a)};KJUR.crypto.Util.ripemd160=function(a){var b=new KJUR.crypto.MessageDigest({alg:\"ripemd160\",prov:\"cryptojs\"});return b.digestString(a)};KJUR.crypto.Util.SECURERANDOMGEN=new SecureRandom();KJUR.crypto.Util.getRandomHexOfNbytes=function(b){var a=new Array(b);KJUR.crypto.Util.SECURERANDOMGEN.nextBytes(a);return BAtohex(a)};KJUR.crypto.Util.getRandomBigIntegerOfNbytes=function(a){return new BigInteger(KJUR.crypto.Util.getRandomHexOfNbytes(a),16)};KJUR.crypto.Util.getRandomHexOfNbits=function(d){var c=d%8;var a=(d-c)/8;var b=new Array(a+1);KJUR.crypto.Util.SECURERANDOMGEN.nextBytes(b);b[0]=(((255<<c)&255)^255)&b[0];return BAtohex(b)};KJUR.crypto.Util.getRandomBigIntegerOfNbits=function(a){return new BigInteger(KJUR.crypto.Util.getRandomHexOfNbits(a),16)};KJUR.crypto.Util.getRandomBigIntegerZeroToMax=function(b){var a=b.bitLength();while(1){var c=KJUR.crypto.Util.getRandomBigIntegerOfNbits(a);if(b.compareTo(c)!=-1){return c}}};KJUR.crypto.Util.getRandomBigIntegerMinToMax=function(e,b){var c=e.compareTo(b);if(c==1){throw\"biMin is greater than biMax\"}if(c==0){return e}var a=b.subtract(e);var d=KJUR.crypto.Util.getRandomBigIntegerZeroToMax(a);return d.add(e)};KJUR.crypto.MessageDigest=function(c){var b=null;var a=null;var d=null;this.setAlgAndProvider=function(g,f){g=KJUR.crypto.MessageDigest.getCanonicalAlgName(g);if(g!==null&&f===undefined){f=KJUR.crypto.Util.DEFAULTPROVIDER[g]}if(\":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:\".indexOf(g)!=-1&&f==\"cryptojs\"){try{this.md=KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[g].create()}catch(e){throw\"setAlgAndProvider hash alg set fail alg=\"+g+\"/\"+e}this.updateString=function(h){this.md.update(h)};this.updateHex=function(h){var i=CryptoJS.enc.Hex.parse(h);this.md.update(i)};this.digest=function(){var h=this.md.finalize();return h.toString(CryptoJS.enc.Hex)};this.digestString=function(h){this.updateString(h);return this.digest()};this.digestHex=function(h){this.updateHex(h);return this.digest()}}if(\":sha256:\".indexOf(g)!=-1&&f==\"sjcl\"){try{this.md=new sjcl.hash.sha256()}catch(e){throw\"setAlgAndProvider hash alg set fail alg=\"+g+\"/\"+e}this.updateString=function(h){this.md.update(h)};this.updateHex=function(i){var h=sjcl.codec.hex.toBits(i);this.md.update(h)};this.digest=function(){var h=this.md.finalize();return sjcl.codec.hex.fromBits(h)};this.digestString=function(h){this.updateString(h);return this.digest()};this.digestHex=function(h){this.updateHex(h);return this.digest()}}};this.updateString=function(e){throw\"updateString(str) not supported for this alg/prov: \"+this.algName+\"/\"+this.provName};this.updateHex=function(e){throw\"updateHex(hex) not supported for this alg/prov: \"+this.algName+\"/\"+this.provName};this.digest=function(){throw\"digest() not supported for this alg/prov: \"+this.algName+\"/\"+this.provName};this.digestString=function(e){throw\"digestString(str) not supported for this alg/prov: \"+this.algName+\"/\"+this.provName};this.digestHex=function(e){throw\"digestHex(hex) not supported for this alg/prov: \"+this.algName+\"/\"+this.provName};if(c!==undefined){if(c.alg!==undefined){this.algName=c.alg;if(c.prov===undefined){this.provName=KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]}this.setAlgAndProvider(this.algName,this.provName)}}};KJUR.crypto.MessageDigest.getCanonicalAlgName=function(a){if(typeof a===\"string\"){a=a.toLowerCase();a=a.replace(/-/,\"\")}return a};KJUR.crypto.MessageDigest.getHashLength=function(c){var b=KJUR.crypto.MessageDigest;var a=b.getCanonicalAlgName(c);if(b.HASHLENGTH[a]===undefined){throw\"not supported algorithm: \"+c}return b.HASHLENGTH[a]};KJUR.crypto.MessageDigest.HASHLENGTH={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,ripemd160:20};KJUR.crypto.Mac=function(d){var f=null;var c=null;var a=null;var e=null;var b=null;this.setAlgAndProvider=function(k,i){k=k.toLowerCase();if(k==null){k=\"hmacsha1\"}k=k.toLowerCase();if(k.substr(0,4)!=\"hmac\"){throw\"setAlgAndProvider unsupported HMAC alg: \"+k}if(i===undefined){i=KJUR.crypto.Util.DEFAULTPROVIDER[k]}this.algProv=k+\"/\"+i;var g=k.substr(4);if(\":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:\".indexOf(g)!=-1&&i==\"cryptojs\"){try{var j=KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[g];this.mac=CryptoJS.algo.HMAC.create(j,this.pass)}catch(h){throw\"setAlgAndProvider hash alg set fail hashAlg=\"+g+\"/\"+h}this.updateString=function(l){this.mac.update(l)};this.updateHex=function(l){var m=CryptoJS.enc.Hex.parse(l);this.mac.update(m)};this.doFinal=function(){var l=this.mac.finalize();return l.toString(CryptoJS.enc.Hex)};this.doFinalString=function(l){this.updateString(l);return this.doFinal()};this.doFinalHex=function(l){this.updateHex(l);return this.doFinal()}}};this.updateString=function(g){throw\"updateString(str) not supported for this alg/prov: \"+this.algProv};this.updateHex=function(g){throw\"updateHex(hex) not supported for this alg/prov: \"+this.algProv};this.doFinal=function(){throw\"digest() not supported for this alg/prov: \"+this.algProv};this.doFinalString=function(g){throw\"digestString(str) not supported for this alg/prov: \"+this.algProv};this.doFinalHex=function(g){throw\"digestHex(hex) not supported for this alg/prov: \"+this.algProv};this.setPassword=function(h){if(typeof h==\"string\"){var g=h;if(h.length%2==1||!h.match(/^[0-9A-Fa-f]+$/)){g=rstrtohex(h)}this.pass=CryptoJS.enc.Hex.parse(g);return}if(typeof h!=\"object\"){throw\"KJUR.crypto.Mac unsupported password type: \"+h}var g=null;if(h.hex!==undefined){if(h.hex.length%2!=0||!h.hex.match(/^[0-9A-Fa-f]+$/)){throw\"Mac: wrong hex password: \"+h.hex}g=h.hex}if(h.utf8!==undefined){g=utf8tohex(h.utf8)}if(h.rstr!==undefined){g=rstrtohex(h.rstr)}if(h.b64!==undefined){g=b64tohex(h.b64)}if(h.b64u!==undefined){g=b64utohex(h.b64u)}if(g==null){throw\"KJUR.crypto.Mac unsupported password type: \"+h}this.pass=CryptoJS.enc.Hex.parse(g)};if(d!==undefined){if(d.pass!==undefined){this.setPassword(d.pass)}if(d.alg!==undefined){this.algName=d.alg;if(d.prov===undefined){this.provName=KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]}this.setAlgAndProvider(this.algName,this.provName)}}};KJUR.crypto.Signature=function(o){var q=null;var n=null;var r=null;var c=null;var l=null;var d=null;var k=null;var h=null;var p=null;var e=null;var b=-1;var g=null;var j=null;var a=null;var i=null;var f=null;this._setAlgNames=function(){var s=this.algName.match(/^(.+)with(.+)$/);if(s){this.mdAlgName=s[1].toLowerCase();this.pubkeyAlgName=s[2].toLowerCase()}};this._zeroPaddingOfSignature=function(x,w){var v=\"\";var t=w/4-x.length;for(var u=0;u<t;u++){v=v+\"0\"}return v+x};this.setAlgAndProvider=function(u,t){this._setAlgNames();if(t!=\"cryptojs/jsrsa\"){throw\"provider not supported: \"+t}if(\":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:\".indexOf(this.mdAlgName)!=-1){try{this.md=new KJUR.crypto.MessageDigest({alg:this.mdAlgName})}catch(s){throw\"setAlgAndProvider hash alg set fail alg=\"+this.mdAlgName+\"/\"+s}this.init=function(w,x){var y=null;try{if(x===undefined){y=KEYUTIL.getKey(w)}else{y=KEYUTIL.getKey(w,x)}}catch(v){throw\"init failed:\"+v}if(y.isPrivate===true){this.prvKey=y;this.state=\"SIGN\"}else{if(y.isPublic===true){this.pubKey=y;this.state=\"VERIFY\"}else{throw\"init failed.:\"+y}}};this.updateString=function(v){this.md.updateString(v)};this.updateHex=function(v){this.md.updateHex(v)};this.sign=function(){this.sHashHex=this.md.digest();if(typeof this.ecprvhex!=\"undefined\"&&typeof this.eccurvename!=\"undefined\"){var v=new KJUR.crypto.ECDSA({curve:this.eccurvename});this.hSign=v.signHex(this.sHashHex,this.ecprvhex)}else{if(this.prvKey instanceof RSAKey&&this.pubkeyAlgName===\"rsaandmgf1\"){this.hSign=this.prvKey.signWithMessageHashPSS(this.sHashHex,this.mdAlgName,this.pssSaltLen)}else{if(this.prvKey instanceof RSAKey&&this.pubkeyAlgName===\"rsa\"){this.hSign=this.prvKey.signWithMessageHash(this.sHashHex,this.mdAlgName)}else{if(this.prvKey instanceof KJUR.crypto.ECDSA){this.hSign=this.prvKey.signWithMessageHash(this.sHashHex)}else{if(this.prvKey instanceof KJUR.crypto.DSA){this.hSign=this.prvKey.signWithMessageHash(this.sHashHex)}else{throw\"Signature: unsupported private key alg: \"+this.pubkeyAlgName}}}}}return this.hSign};this.signString=function(v){this.updateString(v);return this.sign()};this.signHex=function(v){this.updateHex(v);return this.sign()};this.verify=function(v){this.sHashHex=this.md.digest();if(typeof this.ecpubhex!=\"undefined\"&&typeof this.eccurvename!=\"undefined\"){var w=new KJUR.crypto.ECDSA({curve:this.eccurvename});return w.verifyHex(this.sHashHex,v,this.ecpubhex)}else{if(this.pubKey instanceof RSAKey&&this.pubkeyAlgName===\"rsaandmgf1\"){return this.pubKey.verifyWithMessageHashPSS(this.sHashHex,v,this.mdAlgName,this.pssSaltLen)}else{if(this.pubKey instanceof RSAKey&&this.pubkeyAlgName===\"rsa\"){return this.pubKey.verifyWithMessageHash(this.sHashHex,v)}else{if(KJUR.crypto.ECDSA!==undefined&&this.pubKey instanceof KJUR.crypto.ECDSA){return this.pubKey.verifyWithMessageHash(this.sHashHex,v)}else{if(KJUR.crypto.DSA!==undefined&&this.pubKey instanceof KJUR.crypto.DSA){return this.pubKey.verifyWithMessageHash(this.sHashHex,v)}else{throw\"Signature: unsupported public key alg: \"+this.pubkeyAlgName}}}}}}}};this.init=function(s,t){throw\"init(key, pass) not supported for this alg:prov=\"+this.algProvName};this.updateString=function(s){throw\"updateString(str) not supported for this alg:prov=\"+this.algProvName};this.updateHex=function(s){throw\"updateHex(hex) not supported for this alg:prov=\"+this.algProvName};this.sign=function(){throw\"sign() not supported for this alg:prov=\"+this.algProvName};this.signString=function(s){throw\"digestString(str) not supported for this alg:prov=\"+this.algProvName};this.signHex=function(s){throw\"digestHex(hex) not supported for this alg:prov=\"+this.algProvName};this.verify=function(s){throw\"verify(hSigVal) not supported for this alg:prov=\"+this.algProvName};this.initParams=o;if(o!==undefined){if(o.alg!==undefined){this.algName=o.alg;if(o.prov===undefined){this.provName=KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]}else{this.provName=o.prov}this.algProvName=this.algName+\":\"+this.provName;this.setAlgAndProvider(this.algName,this.provName);this._setAlgNames()}if(o.psssaltlen!==undefined){this.pssSaltLen=o.psssaltlen}if(o.prvkeypem!==undefined){if(o.prvkeypas!==undefined){throw\"both prvkeypem and prvkeypas parameters not supported\"}else{try{var q=KEYUTIL.getKey(o.prvkeypem);this.init(q)}catch(m){throw\"fatal error to load pem private key: \"+m}}}}};KJUR.crypto.Cipher=function(a){};KJUR.crypto.Cipher.encrypt=function(e,f,d){if(f instanceof RSAKey&&f.isPublic){var c=KJUR.crypto.Cipher.getAlgByKeyAndName(f,d);if(c===\"RSA\"){return f.encrypt(e)}if(c===\"RSAOAEP\"){return f.encryptOAEP(e,\"sha1\")}var b=c.match(/^RSAOAEP(\\d+)$/);if(b!==null){return f.encryptOAEP(e,\"sha\"+b[1])}throw\"Cipher.encrypt: unsupported algorithm for RSAKey: \"+d}else{throw\"Cipher.encrypt: unsupported key or algorithm\"}};KJUR.crypto.Cipher.decrypt=function(e,f,d){if(f instanceof RSAKey&&f.isPrivate){var c=KJUR.crypto.Cipher.getAlgByKeyAndName(f,d);if(c===\"RSA\"){return f.decrypt(e)}if(c===\"RSAOAEP\"){return f.decryptOAEP(e,\"sha1\")}var b=c.match(/^RSAOAEP(\\d+)$/);if(b!==null){return f.decryptOAEP(e,\"sha\"+b[1])}throw\"Cipher.decrypt: unsupported algorithm for RSAKey: \"+d}else{throw\"Cipher.decrypt: unsupported key or algorithm\"}};KJUR.crypto.Cipher.getAlgByKeyAndName=function(b,a){if(b instanceof RSAKey){if(\":RSA:RSAOAEP:RSAOAEP224:RSAOAEP256:RSAOAEP384:RSAOAEP512:\".indexOf(a)!=-1){return a}if(a===null||a===undefined){return\"RSA\"}throw\"getAlgByKeyAndName: not supported algorithm name for RSAKey: \"+a}throw\"getAlgByKeyAndName: not supported algorithm name: \"+a};KJUR.crypto.OID=new function(){this.oidhex2name={\"2a864886f70d010101\":\"rsaEncryption\",\"2a8648ce3d0201\":\"ecPublicKey\",\"2a8648ce380401\":\"dsa\",\"2a8648ce3d030107\":\"secp256r1\",\"2b8104001f\":\"secp192k1\",\"2b81040021\":\"secp224r1\",\"2b8104000a\":\"secp256k1\",\"2b81040023\":\"secp521r1\",\"2b81040022\":\"secp384r1\",\"2a8648ce380403\":\"SHA1withDSA\",\"608648016503040301\":\"SHA224withDSA\",\"608648016503040302\":\"SHA256withDSA\",}};\nif(typeof KJUR==\"undefined\"||!KJUR){KJUR={}}if(typeof KJUR.crypto==\"undefined\"||!KJUR.crypto){KJUR.crypto={}}KJUR.crypto.ECDSA=function(h){var e=\"secp256r1\";var g=null;var b=null;var f=null;var a=new SecureRandom();var d=null;this.type=\"EC\";this.isPrivate=false;this.isPublic=false;function c(s,o,r,n){var j=Math.max(o.bitLength(),n.bitLength());var t=s.add2D(r);var q=s.curve.getInfinity();for(var p=j-1;p>=0;--p){q=q.twice2D();q.z=BigInteger.ONE;if(o.testBit(p)){if(n.testBit(p)){q=q.add2D(t)}else{q=q.add2D(s)}}else{if(n.testBit(p)){q=q.add2D(r)}}}return q}this.getBigRandom=function(i){return new BigInteger(i.bitLength(),a).mod(i.subtract(BigInteger.ONE)).add(BigInteger.ONE)};this.setNamedCurve=function(i){this.ecparams=KJUR.crypto.ECParameterDB.getByName(i);this.prvKeyHex=null;this.pubKeyHex=null;this.curveName=i};this.setPrivateKeyHex=function(i){this.isPrivate=true;this.prvKeyHex=i};this.setPublicKeyHex=function(i){this.isPublic=true;this.pubKeyHex=i};this.getPublicKeyXYHex=function(){var k=this.pubKeyHex;if(k.substr(0,2)!==\"04\"){throw\"this method supports uncompressed format(04) only\"}var j=this.ecparams.keylen/4;if(k.length!==2+j*2){throw\"malformed public key hex length\"}var i={};i.x=k.substr(2,j);i.y=k.substr(2+j);return i};this.getShortNISTPCurveName=function(){var i=this.curveName;if(i===\"secp256r1\"||i===\"NIST P-256\"||i===\"P-256\"||i===\"prime256v1\"){return\"P-256\"}if(i===\"secp384r1\"||i===\"NIST P-384\"||i===\"P-384\"){return\"P-384\"}return null};this.generateKeyPairHex=function(){var k=this.ecparams.n;var n=this.getBigRandom(k);var l=this.ecparams.G.multiply(n);var q=l.getX().toBigInteger();var o=l.getY().toBigInteger();var i=this.ecparams.keylen/4;var m=(\"0000000000\"+n.toString(16)).slice(-i);var r=(\"0000000000\"+q.toString(16)).slice(-i);var p=(\"0000000000\"+o.toString(16)).slice(-i);var j=\"04\"+r+p;this.setPrivateKeyHex(m);this.setPublicKeyHex(j);return{ecprvhex:m,ecpubhex:j}};this.signWithMessageHash=function(i){return this.signHex(i,this.prvKeyHex)};this.signHex=function(o,j){var t=new BigInteger(j,16);var l=this.ecparams.n;var q=new BigInteger(o,16);do{var m=this.getBigRandom(l);var u=this.ecparams.G;var p=u.multiply(m);var i=p.getX().toBigInteger().mod(l)}while(i.compareTo(BigInteger.ZERO)<=0);var v=m.modInverse(l).multiply(q.add(t.multiply(i))).mod(l);return KJUR.crypto.ECDSA.biRSSigToASN1Sig(i,v)};this.sign=function(m,u){var q=u;var j=this.ecparams.n;var p=BigInteger.fromByteArrayUnsigned(m);do{var l=this.getBigRandom(j);var t=this.ecparams.G;var o=t.multiply(l);var i=o.getX().toBigInteger().mod(j)}while(i.compareTo(BigInteger.ZERO)<=0);var v=l.modInverse(j).multiply(p.add(q.multiply(i))).mod(j);return this.serializeSig(i,v)};this.verifyWithMessageHash=function(j,i){return this.verifyHex(j,i,this.pubKeyHex)};this.verifyHex=function(m,i,p){var l,j;var o=KJUR.crypto.ECDSA.parseSigHex(i);l=o.r;j=o.s;var k;k=ECPointFp.decodeFromHex(this.ecparams.curve,p);var n=new BigInteger(m,16);return this.verifyRaw(n,l,j,k)};this.verify=function(o,p,j){var l,i;if(Bitcoin.Util.isArray(p)){var n=this.parseSig(p);l=n.r;i=n.s}else{if(\"object\"===typeof p&&p.r&&p.s){l=p.r;i=p.s}else{throw\"Invalid value for signature\"}}var k;if(j instanceof ECPointFp){k=j}else{if(Bitcoin.Util.isArray(j)){k=ECPointFp.decodeFrom(this.ecparams.curve,j)}else{throw\"Invalid format for pubkey value, must be byte array or ECPointFp\"}}var m=BigInteger.fromByteArrayUnsigned(o);return this.verifyRaw(m,l,i,k)};this.verifyRaw=function(o,i,w,m){var l=this.ecparams.n;var u=this.ecparams.G;if(i.compareTo(BigInteger.ONE)<0||i.compareTo(l)>=0){return false}if(w.compareTo(BigInteger.ONE)<0||w.compareTo(l)>=0){return false}var p=w.modInverse(l);var k=o.multiply(p).mod(l);var j=i.multiply(p).mod(l);var q=u.multiply(k).add(m.multiply(j));var t=q.getX().toBigInteger().mod(l);return t.equals(i)};this.serializeSig=function(k,j){var l=k.toByteArraySigned();var i=j.toByteArraySigned();var m=[];m.push(2);m.push(l.length);m=m.concat(l);m.push(2);m.push(i.length);m=m.concat(i);m.unshift(m.length);m.unshift(48);return m};this.parseSig=function(n){var m;if(n[0]!=48){throw new Error(\"Signature not a valid DERSequence\")}m=2;if(n[m]!=2){throw new Error(\"First element in signature must be a DERInteger\")}var l=n.slice(m+2,m+2+n[m+1]);m+=2+n[m+1];if(n[m]!=2){throw new Error(\"Second element in signature must be a DERInteger\")}var i=n.slice(m+2,m+2+n[m+1]);m+=2+n[m+1];var k=BigInteger.fromByteArrayUnsigned(l);var j=BigInteger.fromByteArrayUnsigned(i);return{r:k,s:j}};this.parseSigCompact=function(m){if(m.length!==65){throw\"Signature has the wrong length\"}var j=m[0]-27;if(j<0||j>7){throw\"Invalid signature type\"}var o=this.ecparams.n;var l=BigInteger.fromByteArrayUnsigned(m.slice(1,33)).mod(o);var k=BigInteger.fromByteArrayUnsigned(m.slice(33,65)).mod(o);return{r:l,s:k,i:j}};this.readPKCS5PrvKeyHex=function(l){var n=ASN1HEX;var m=KJUR.crypto.ECDSA.getName;var p=n.getVbyList;if(n.isASN1HEX(l)===false){throw\"not ASN.1 hex string\"}var i,k,o;try{i=p(l,0,[2,0],\"06\");k=p(l,0,[1],\"04\");try{o=p(l,0,[3,0],\"03\").substr(2)}catch(j){}}catch(j){throw\"malformed PKCS#1/5 plain ECC private key\"}this.curveName=m(i);if(this.curveName===undefined){throw\"unsupported curve name\"}this.setNamedCurve(this.curveName);this.setPublicKeyHex(o);this.setPrivateKeyHex(k);this.isPublic=false};this.readPKCS8PrvKeyHex=function(l){var q=ASN1HEX;var i=KJUR.crypto.ECDSA.getName;var n=q.getVbyList;if(q.isASN1HEX(l)===false){throw\"not ASN.1 hex string\"}var j,p,m,k;try{j=n(l,0,[1,0],\"06\");p=n(l,0,[1,1],\"06\");m=n(l,0,[2,0,1],\"04\");try{k=n(l,0,[2,0,2,0],\"03\").substr(2)}catch(o){}}catch(o){throw\"malformed PKCS#8 plain ECC private key\"}this.curveName=i(p);if(this.curveName===undefined){throw\"unsupported curve name\"}this.setNamedCurve(this.curveName);this.setPublicKeyHex(k);this.setPrivateKeyHex(m);this.isPublic=false};this.readPKCS8PubKeyHex=function(l){var n=ASN1HEX;var m=KJUR.crypto.ECDSA.getName;var p=n.getVbyList;if(n.isASN1HEX(l)===false){throw\"not ASN.1 hex string\"}var k,i,o;try{k=p(l,0,[0,0],\"06\");i=p(l,0,[0,1],\"06\");o=p(l,0,[1],\"03\").substr(2)}catch(j){throw\"malformed PKCS#8 ECC public key\"}this.curveName=m(i);if(this.curveName===null){throw\"unsupported curve name\"}this.setNamedCurve(this.curveName);this.setPublicKeyHex(o)};this.readCertPubKeyHex=function(k,p){if(p!==5){p=6}var m=ASN1HEX;var l=KJUR.crypto.ECDSA.getName;var o=m.getVbyList;if(m.isASN1HEX(k)===false){throw\"not ASN.1 hex string\"}var i,n;try{i=o(k,0,[0,p,0,1],\"06\");n=o(k,0,[0,p,1],\"03\").substr(2)}catch(j){throw\"malformed X.509 certificate ECC public key\"}this.curveName=l(i);if(this.curveName===null){throw\"unsupported curve name\"}this.setNamedCurve(this.curveName);this.setPublicKeyHex(n)};if(h!==undefined){if(h.curve!==undefined){this.curveName=h.curve}}if(this.curveName===undefined){this.curveName=e}this.setNamedCurve(this.curveName);if(h!==undefined){if(h.prv!==undefined){this.setPrivateKeyHex(h.prv)}if(h.pub!==undefined){this.setPublicKeyHex(h.pub)}}};KJUR.crypto.ECDSA.parseSigHex=function(a){var b=KJUR.crypto.ECDSA.parseSigHexInHexRS(a);var d=new BigInteger(b.r,16);var c=new BigInteger(b.s,16);return{r:d,s:c}};KJUR.crypto.ECDSA.parseSigHexInHexRS=function(f){var j=ASN1HEX;var i=j.getChildIdx;var g=j.getV;if(f.substr(0,2)!=\"30\"){throw\"signature is not a ASN.1 sequence\"}var h=i(f,0);if(h.length!=2){throw\"number of signature ASN.1 sequence elements seem wrong\"}var e=h[0];var d=h[1];if(f.substr(e,2)!=\"02\"){throw\"1st item of sequene of signature is not ASN.1 integer\"}if(f.substr(d,2)!=\"02\"){throw\"2nd item of sequene of signature is not ASN.1 integer\"}var c=g(f,e);var b=g(f,d);return{r:c,s:b}};KJUR.crypto.ECDSA.asn1SigToConcatSig=function(c){var d=KJUR.crypto.ECDSA.parseSigHexInHexRS(c);var b=d.r;var a=d.s;if(b.substr(0,2)==\"00\"&&(b.length%32)==2){b=b.substr(2)}if(a.substr(0,2)==\"00\"&&(a.length%32)==2){a=a.substr(2)}if((b.length%32)==30){b=\"00\"+b}if((a.length%32)==30){a=\"00\"+a}if(b.length%32!=0){throw\"unknown ECDSA sig r length error\"}if(a.length%32!=0){throw\"unknown ECDSA sig s length error\"}return b+a};KJUR.crypto.ECDSA.concatSigToASN1Sig=function(a){if((((a.length/2)*8)%(16*8))!=0){throw\"unknown ECDSA concatinated r-s sig  length error\"}var c=a.substr(0,a.length/2);var b=a.substr(a.length/2);return KJUR.crypto.ECDSA.hexRSSigToASN1Sig(c,b)};KJUR.crypto.ECDSA.hexRSSigToASN1Sig=function(b,a){var d=new BigInteger(b,16);var c=new BigInteger(a,16);return KJUR.crypto.ECDSA.biRSSigToASN1Sig(d,c)};KJUR.crypto.ECDSA.biRSSigToASN1Sig=function(f,d){var c=KJUR.asn1;var b=new c.DERInteger({bigint:f});var a=new c.DERInteger({bigint:d});var e=new c.DERSequence({array:[b,a]});return e.getEncodedHex()};KJUR.crypto.ECDSA.getName=function(a){if(a===\"2a8648ce3d030107\"){return\"secp256r1\"}if(a===\"2b8104000a\"){return\"secp256k1\"}if(a===\"2b81040022\"){return\"secp384r1\"}if(\"|secp256r1|NIST P-256|P-256|prime256v1|\".indexOf(a)!==-1){return\"secp256r1\"}if(\"|secp256k1|\".indexOf(a)!==-1){return\"secp256k1\"}if(\"|secp384r1|NIST P-384|P-384|\".indexOf(a)!==-1){return\"secp384r1\"}return null};\nif(typeof KJUR==\"undefined\"||!KJUR){KJUR={}}if(typeof KJUR.crypto==\"undefined\"||!KJUR.crypto){KJUR.crypto={}}KJUR.crypto.ECParameterDB=new function(){var b={};var c={};function a(d){return new BigInteger(d,16)}this.getByName=function(e){var d=e;if(typeof c[d]!=\"undefined\"){d=c[e]}if(typeof b[d]!=\"undefined\"){return b[d]}throw\"unregistered EC curve name: \"+d};this.regist=function(A,l,o,g,m,e,j,f,k,u,d,x){b[A]={};var s=a(o);var z=a(g);var y=a(m);var t=a(e);var w=a(j);var r=new ECCurveFp(s,z,y);var q=r.decodePointHex(\"04\"+f+k);b[A][\"name\"]=A;b[A][\"keylen\"]=l;b[A][\"curve\"]=r;b[A][\"G\"]=q;b[A][\"n\"]=t;b[A][\"h\"]=w;b[A][\"oid\"]=d;b[A][\"info\"]=x;for(var v=0;v<u.length;v++){c[u[v]]=A}}};KJUR.crypto.ECParameterDB.regist(\"secp128r1\",128,\"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF\",\"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC\",\"E87579C11079F43DD824993C2CEE5ED3\",\"FFFFFFFE0000000075A30D1B9038A115\",\"1\",\"161FF7528B899B2D0C28607CA52C5B86\",\"CF5AC8395BAFEB13C02DA292DDED7A83\",[],\"\",\"secp128r1 : SECG curve over a 128 bit prime field\");KJUR.crypto.ECParameterDB.regist(\"secp160k1\",160,\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73\",\"0\",\"7\",\"0100000000000000000001B8FA16DFAB9ACA16B6B3\",\"1\",\"3B4C382CE37AA192A4019E763036F4F5DD4D7EBB\",\"938CF935318FDCED6BC28286531733C3F03C4FEE\",[],\"\",\"secp160k1 : SECG curve over a 160 bit prime field\");KJUR.crypto.ECParameterDB.regist(\"secp160r1\",160,\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF\",\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC\",\"1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45\",\"0100000000000000000001F4C8F927AED3CA752257\",\"1\",\"4A96B5688EF573284664698968C38BB913CBFC82\",\"23A628553168947D59DCC912042351377AC5FB32\",[],\"\",\"secp160r1 : SECG curve over a 160 bit prime field\");KJUR.crypto.ECParameterDB.regist(\"secp192k1\",192,\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37\",\"0\",\"3\",\"FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D\",\"1\",\"DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D\",\"9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D\",[]);KJUR.crypto.ECParameterDB.regist(\"secp192r1\",192,\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF\",\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC\",\"64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1\",\"FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831\",\"1\",\"188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012\",\"07192B95FFC8DA78631011ED6B24CDD573F977A11E794811\",[]);KJUR.crypto.ECParameterDB.regist(\"secp224r1\",224,\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001\",\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE\",\"B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4\",\"FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D\",\"1\",\"B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21\",\"BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34\",[]);KJUR.crypto.ECParameterDB.regist(\"secp256k1\",256,\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F\",\"0\",\"7\",\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141\",\"1\",\"79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798\",\"483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8\",[]);KJUR.crypto.ECParameterDB.regist(\"secp256r1\",256,\"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF\",\"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC\",\"5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B\",\"FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551\",\"1\",\"6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296\",\"4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5\",[\"NIST P-256\",\"P-256\",\"prime256v1\"]);KJUR.crypto.ECParameterDB.regist(\"secp384r1\",384,\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF\",\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC\",\"B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF\",\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973\",\"1\",\"AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7\",\"3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f\",[\"NIST P-384\",\"P-384\"]);KJUR.crypto.ECParameterDB.regist(\"secp521r1\",521,\"1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\",\"1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC\",\"051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00\",\"1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409\",\"1\",\"C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66\",\"011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650\",[\"NIST P-521\",\"P-521\"]);\nif(typeof KJUR==\"undefined\"||!KJUR){KJUR={}}if(typeof KJUR.crypto==\"undefined\"||!KJUR.crypto){KJUR.crypto={}}KJUR.crypto.DSA=function(){this.p=null;this.q=null;this.g=null;this.y=null;this.x=null;this.type=\"DSA\";this.isPrivate=false;this.isPublic=false;this.setPrivate=function(d,c,b,e,a){this.isPrivate=true;this.p=d;this.q=c;this.g=b;this.y=e;this.x=a};this.setPrivateHex=function(d,b,f,i,j){var c,a,e,g,h;c=new BigInteger(d,16);a=new BigInteger(b,16);e=new BigInteger(f,16);if(typeof i===\"string\"&&i.length>1){g=new BigInteger(i,16)}else{g=null}h=new BigInteger(j,16);this.setPrivate(c,a,e,g,h)};this.setPublic=function(c,b,a,d){this.isPublic=true;this.p=c;this.q=b;this.g=a;this.y=d;this.x=null};this.setPublicHex=function(f,e,d,g){var b,a,h,c;b=new BigInteger(f,16);a=new BigInteger(e,16);h=new BigInteger(d,16);c=new BigInteger(g,16);this.setPublic(b,a,h,c)};this.signWithMessageHash=function(d){var c=this.p;var b=this.q;var f=this.g;var i=this.y;var j=this.x;var e=KJUR.crypto.Util.getRandomBigIntegerMinToMax(BigInteger.ONE.add(BigInteger.ONE),b.subtract(BigInteger.ONE));var l=d.substr(0,b.bitLength()/4);var h=new BigInteger(l,16);var a=(f.modPow(e,c)).mod(b);var n=(e.modInverse(b).multiply(h.add(j.multiply(a)))).mod(b);var m=KJUR.asn1.ASN1Util.jsonToASN1HEX({seq:[{\"int\":{bigint:a}},{\"int\":{bigint:n}}]});return m};this.verifyWithMessageHash=function(h,f){var d=this.p;var b=this.q;var j=this.g;var l=this.y;var i=this.parseASN1Signature(f);var a=i[0];var t=i[1];var o=h.substr(0,b.bitLength()/4);var k=new BigInteger(o,16);if(BigInteger.ZERO.compareTo(a)>0||a.compareTo(b)>0){throw\"invalid DSA signature\"}if(BigInteger.ZERO.compareTo(t)>=0||t.compareTo(b)>0){throw\"invalid DSA signature\"}var m=t.modInverse(b);var e=k.multiply(m).mod(b);var c=a.multiply(m).mod(b);var n=j.modPow(e,d).multiply(l.modPow(c,d)).mod(d).mod(b);return n.compareTo(a)==0};this.parseASN1Signature=function(a){try{var d=new BigInteger(ASN1HEX.getVbyList(a,0,[0],\"02\"),16);var c=new BigInteger(ASN1HEX.getVbyList(a,0,[1],\"02\"),16);return[d,c]}catch(b){throw\"malformed ASN.1 DSA signature\"}};this.readPKCS5PrvKeyHex=function(c){var b,a,f,g,i;var j=ASN1HEX;var d=j.getVbyList;if(j.isASN1HEX(c)===false){throw\"not ASN.1 hex string\"}try{b=d(c,0,[1],\"02\");a=d(c,0,[2],\"02\");f=d(c,0,[3],\"02\");g=d(c,0,[4],\"02\");i=d(c,0,[5],\"02\")}catch(e){console.log(\"EXCEPTION:\"+e);throw\"malformed PKCS#1/5 plain DSA private key\"}this.setPrivateHex(b,a,f,g,i)};this.readPKCS8PrvKeyHex=function(d){var f,c,b,g;var e=ASN1HEX;var i=e.getVbyList;if(e.isASN1HEX(d)===false){throw\"not ASN.1 hex string\"}try{f=i(d,0,[1,1,0],\"02\");c=i(d,0,[1,1,1],\"02\");b=i(d,0,[1,1,2],\"02\");g=i(d,0,[2,0],\"02\")}catch(a){console.log(\"EXCEPTION:\"+a);throw\"malformed PKCS#8 plain DSA private key\"}this.setPrivateHex(f,c,b,null,g)};this.readPKCS8PubKeyHex=function(d){var f,c,b,g;var e=ASN1HEX;var i=e.getVbyList;if(e.isASN1HEX(d)===false){throw\"not ASN.1 hex string\"}try{f=i(d,0,[0,1,0],\"02\");c=i(d,0,[0,1,1],\"02\");b=i(d,0,[0,1,2],\"02\");g=i(d,0,[1,0],\"02\")}catch(a){console.log(\"EXCEPTION:\"+a);throw\"malformed PKCS#8 DSA public key\"}this.setPublicHex(f,c,b,g)};this.readCertPubKeyHex=function(c,f){if(f!==5){f=6}var b,a,g,i;var j=ASN1HEX;var d=j.getVbyList;if(j.isASN1HEX(c)===false){throw\"not ASN.1 hex string\"}try{b=d(c,0,[0,f,0,1,0],\"02\");a=d(c,0,[0,f,0,1,1],\"02\");g=d(c,0,[0,f,0,1,2],\"02\");i=d(c,0,[0,f,1,0],\"02\")}catch(e){console.log(\"EXCEPTION:\"+e);throw\"malformed X.509 certificate DSA public key\"}this.setPublicHex(b,a,g,i)}};\nvar KEYUTIL=function(){var d=function(p,r,q){return k(CryptoJS.AES,p,r,q)};var e=function(p,r,q){return k(CryptoJS.TripleDES,p,r,q)};var a=function(p,r,q){return k(CryptoJS.DES,p,r,q)};var k=function(s,x,u,q){var r=CryptoJS.enc.Hex.parse(x);var w=CryptoJS.enc.Hex.parse(u);var p=CryptoJS.enc.Hex.parse(q);var t={};t.key=w;t.iv=p;t.ciphertext=r;var v=s.decrypt(t,w,{iv:p});return CryptoJS.enc.Hex.stringify(v)};var l=function(p,r,q){return g(CryptoJS.AES,p,r,q)};var o=function(p,r,q){return g(CryptoJS.TripleDES,p,r,q)};var f=function(p,r,q){return g(CryptoJS.DES,p,r,q)};var g=function(t,y,v,q){var s=CryptoJS.enc.Hex.parse(y);var x=CryptoJS.enc.Hex.parse(v);var p=CryptoJS.enc.Hex.parse(q);var w=t.encrypt(s,x,{iv:p});var r=CryptoJS.enc.Hex.parse(w.toString());var u=CryptoJS.enc.Base64.stringify(r);return u};var i={\"AES-256-CBC\":{proc:d,eproc:l,keylen:32,ivlen:16},\"AES-192-CBC\":{proc:d,eproc:l,keylen:24,ivlen:16},\"AES-128-CBC\":{proc:d,eproc:l,keylen:16,ivlen:16},\"DES-EDE3-CBC\":{proc:e,eproc:o,keylen:24,ivlen:8},\"DES-CBC\":{proc:a,eproc:f,keylen:8,ivlen:8}};var c=function(p){return i[p][\"proc\"]};var m=function(p){var r=CryptoJS.lib.WordArray.random(p);var q=CryptoJS.enc.Hex.stringify(r);return q};var n=function(v){var w={};var q=v.match(new RegExp(\"DEK-Info: ([^,]+),([0-9A-Fa-f]+)\",\"m\"));if(q){w.cipher=q[1];w.ivsalt=q[2]}var p=v.match(new RegExp(\"-----BEGIN ([A-Z]+) PRIVATE KEY-----\"));if(p){w.type=p[1]}var u=-1;var x=0;if(v.indexOf(\"\\r\\n\\r\\n\")!=-1){u=v.indexOf(\"\\r\\n\\r\\n\");x=2}if(v.indexOf(\"\\n\\n\")!=-1){u=v.indexOf(\"\\n\\n\");x=1}var t=v.indexOf(\"-----END\");if(u!=-1&&t!=-1){var r=v.substring(u+x*2,t-x);r=r.replace(/\\s+/g,\"\");w.data=r}return w};var j=function(q,y,p){var v=p.substring(0,16);var t=CryptoJS.enc.Hex.parse(v);var r=CryptoJS.enc.Utf8.parse(y);var u=i[q][\"keylen\"]+i[q][\"ivlen\"];var x=\"\";var w=null;for(;;){var s=CryptoJS.algo.MD5.create();if(w!=null){s.update(w)}s.update(r);s.update(t);w=s.finalize();x=x+CryptoJS.enc.Hex.stringify(w);if(x.length>=u*2){break}}var z={};z.keyhex=x.substr(0,i[q][\"keylen\"]*2);z.ivhex=x.substr(i[q][\"keylen\"]*2,i[q][\"ivlen\"]*2);return z};var b=function(p,v,r,w){var s=CryptoJS.enc.Base64.parse(p);var q=CryptoJS.enc.Hex.stringify(s);var u=i[v][\"proc\"];var t=u(q,r,w);return t};var h=function(p,s,q,u){var r=i[s][\"eproc\"];var t=r(p,q,u);return t};return{version:\"1.0.0\",parsePKCS5PEM:function(p){return n(p)},getKeyAndUnusedIvByPasscodeAndIvsalt:function(q,p,r){return j(q,p,r)},decryptKeyB64:function(p,r,q,s){return b(p,r,q,s)},getDecryptedKeyHex:function(y,x){var q=n(y);var t=q.type;var r=q.cipher;var p=q.ivsalt;var s=q.data;var w=j(r,x,p);var v=w.keyhex;var u=b(s,r,v,p);return u},getEncryptedPKCS5PEMFromPrvKeyHex:function(x,s,A,t,r){var p=\"\";if(typeof t==\"undefined\"||t==null){t=\"AES-256-CBC\"}if(typeof i[t]==\"undefined\"){throw\"KEYUTIL unsupported algorithm: \"+t}if(typeof r==\"undefined\"||r==null){var v=i[t][\"ivlen\"];var u=m(v);r=u.toUpperCase()}var z=j(t,A,r);var y=z.keyhex;var w=h(s,t,y,r);var q=w.replace(/(.{64})/g,\"$1\\r\\n\");var p=\"-----BEGIN \"+x+\" PRIVATE KEY-----\\r\\n\";p+=\"Proc-Type: 4,ENCRYPTED\\r\\n\";p+=\"DEK-Info: \"+t+\",\"+r+\"\\r\\n\";p+=\"\\r\\n\";p+=q;p+=\"\\r\\n-----END \"+x+\" PRIVATE KEY-----\\r\\n\";return p},parseHexOfEncryptedPKCS8:function(y){var B=ASN1HEX;var z=B.getChildIdx;var w=B.getV;var t={};var r=z(y,0);if(r.length!=2){throw\"malformed format: SEQUENCE(0).items != 2: \"+r.length}t.ciphertext=w(y,r[1]);var A=z(y,r[0]);if(A.length!=2){throw\"malformed format: SEQUENCE(0.0).items != 2: \"+A.length}if(w(y,A[0])!=\"2a864886f70d01050d\"){throw\"this only supports pkcs5PBES2\"}var p=z(y,A[1]);if(A.length!=2){throw\"malformed format: SEQUENCE(0.0.1).items != 2: \"+p.length}var q=z(y,p[1]);if(q.length!=2){throw\"malformed format: SEQUENCE(0.0.1.1).items != 2: \"+q.length}if(w(y,q[0])!=\"2a864886f70d0307\"){throw\"this only supports TripleDES\"}t.encryptionSchemeAlg=\"TripleDES\";t.encryptionSchemeIV=w(y,q[1]);var s=z(y,p[0]);if(s.length!=2){throw\"malformed format: SEQUENCE(0.0.1.0).items != 2: \"+s.length}if(w(y,s[0])!=\"2a864886f70d01050c\"){throw\"this only supports pkcs5PBKDF2\"}var x=z(y,s[1]);if(x.length<2){throw\"malformed format: SEQUENCE(0.0.1.0.1).items < 2: \"+x.length}t.pbkdf2Salt=w(y,x[0]);var u=w(y,x[1]);try{t.pbkdf2Iter=parseInt(u,16)}catch(v){throw\"malformed format pbkdf2Iter: \"+u}return t},getPBKDF2KeyHexFromParam:function(u,p){var t=CryptoJS.enc.Hex.parse(u.pbkdf2Salt);var q=u.pbkdf2Iter;var s=CryptoJS.PBKDF2(p,t,{keySize:192/32,iterations:q});var r=CryptoJS.enc.Hex.stringify(s);return r},_getPlainPKCS8HexFromEncryptedPKCS8PEM:function(x,y){var r=pemtohex(x,\"ENCRYPTED PRIVATE KEY\");var p=this.parseHexOfEncryptedPKCS8(r);var u=KEYUTIL.getPBKDF2KeyHexFromParam(p,y);var v={};v.ciphertext=CryptoJS.enc.Hex.parse(p.ciphertext);var t=CryptoJS.enc.Hex.parse(u);var s=CryptoJS.enc.Hex.parse(p.encryptionSchemeIV);var w=CryptoJS.TripleDES.decrypt(v,t,{iv:s});var q=CryptoJS.enc.Hex.stringify(w);return q},getKeyFromEncryptedPKCS8PEM:function(s,q){var p=this._getPlainPKCS8HexFromEncryptedPKCS8PEM(s,q);var r=this.getKeyFromPlainPrivatePKCS8Hex(p);return r},parsePlainPrivatePKCS8Hex:function(s){var v=ASN1HEX;var u=v.getChildIdx;var t=v.getV;var q={};q.algparam=null;if(s.substr(0,2)!=\"30\"){throw\"malformed plain PKCS8 private key(code:001)\"}var r=u(s,0);if(r.length!=3){throw\"malformed plain PKCS8 private key(code:002)\"}if(s.substr(r[1],2)!=\"30\"){throw\"malformed PKCS8 private key(code:003)\"}var p=u(s,r[1]);if(p.length!=2){throw\"malformed PKCS8 private key(code:004)\"}if(s.substr(p[0],2)!=\"06\"){throw\"malformed PKCS8 private key(code:005)\"}q.algoid=t(s,p[0]);if(s.substr(p[1],2)==\"06\"){q.algparam=t(s,p[1])}if(s.substr(r[2],2)!=\"04\"){throw\"malformed PKCS8 private key(code:006)\"}q.keyidx=v.getVidx(s,r[2]);return q},getKeyFromPlainPrivatePKCS8PEM:function(q){var p=pemtohex(q,\"PRIVATE KEY\");var r=this.getKeyFromPlainPrivatePKCS8Hex(p);return r},getKeyFromPlainPrivatePKCS8Hex:function(p){var q=this.parsePlainPrivatePKCS8Hex(p);var r;if(q.algoid==\"2a864886f70d010101\"){r=new RSAKey()}else{if(q.algoid==\"2a8648ce380401\"){r=new KJUR.crypto.DSA()}else{if(q.algoid==\"2a8648ce3d0201\"){r=new KJUR.crypto.ECDSA()}else{throw\"unsupported private key algorithm\"}}}r.readPKCS8PrvKeyHex(p);return r},_getKeyFromPublicPKCS8Hex:function(q){var p;var r=ASN1HEX.getVbyList(q,0,[0,0],\"06\");if(r===\"2a864886f70d010101\"){p=new RSAKey()}else{if(r===\"2a8648ce380401\"){p=new KJUR.crypto.DSA()}else{if(r===\"2a8648ce3d0201\"){p=new KJUR.crypto.ECDSA()}else{throw\"unsupported PKCS#8 public key hex\"}}}p.readPKCS8PubKeyHex(q);return p},parsePublicRawRSAKeyHex:function(r){var u=ASN1HEX;var t=u.getChildIdx;var s=u.getV;var p={};if(r.substr(0,2)!=\"30\"){throw\"malformed RSA key(code:001)\"}var q=t(r,0);if(q.length!=2){throw\"malformed RSA key(code:002)\"}if(r.substr(q[0],2)!=\"02\"){throw\"malformed RSA key(code:003)\"}p.n=s(r,q[0]);if(r.substr(q[1],2)!=\"02\"){throw\"malformed RSA key(code:004)\"}p.e=s(r,q[1]);return p},parsePublicPKCS8Hex:function(t){var v=ASN1HEX;var u=v.getChildIdx;var s=v.getV;var q={};q.algparam=null;var r=u(t,0);if(r.length!=2){throw\"outer DERSequence shall have 2 elements: \"+r.length}var w=r[0];if(t.substr(w,2)!=\"30\"){throw\"malformed PKCS8 public key(code:001)\"}var p=u(t,w);if(p.length!=2){throw\"malformed PKCS8 public key(code:002)\"}if(t.substr(p[0],2)!=\"06\"){throw\"malformed PKCS8 public key(code:003)\"}q.algoid=s(t,p[0]);if(t.substr(p[1],2)==\"06\"){q.algparam=s(t,p[1])}else{if(t.substr(p[1],2)==\"30\"){q.algparam={};q.algparam.p=v.getVbyList(t,p[1],[0],\"02\");q.algparam.q=v.getVbyList(t,p[1],[1],\"02\");q.algparam.g=v.getVbyList(t,p[1],[2],\"02\")}}if(t.substr(r[1],2)!=\"03\"){throw\"malformed PKCS8 public key(code:004)\"}q.key=s(t,r[1]).substr(2);return q},}}();KEYUTIL.getKey=function(l,k,n){var G=ASN1HEX,L=G.getChildIdx,v=G.getV,d=G.getVbyList,c=KJUR.crypto,i=c.ECDSA,C=c.DSA,w=RSAKey,M=pemtohex,F=KEYUTIL;if(typeof w!=\"undefined\"&&l instanceof w){return l}if(typeof i!=\"undefined\"&&l instanceof i){return l}if(typeof C!=\"undefined\"&&l instanceof C){return l}if(l.curve!==undefined&&l.xy!==undefined&&l.d===undefined){return new i({pub:l.xy,curve:l.curve})}if(l.curve!==undefined&&l.d!==undefined){return new i({prv:l.d,curve:l.curve})}if(l.kty===undefined&&l.n!==undefined&&l.e!==undefined&&l.d===undefined){var P=new w();P.setPublic(l.n,l.e);return P}if(l.kty===undefined&&l.n!==undefined&&l.e!==undefined&&l.d!==undefined&&l.p!==undefined&&l.q!==undefined&&l.dp!==undefined&&l.dq!==undefined&&l.co!==undefined&&l.qi===undefined){var P=new w();P.setPrivateEx(l.n,l.e,l.d,l.p,l.q,l.dp,l.dq,l.co);return P}if(l.kty===undefined&&l.n!==undefined&&l.e!==undefined&&l.d!==undefined&&l.p===undefined){var P=new w();P.setPrivate(l.n,l.e,l.d);return P}if(l.p!==undefined&&l.q!==undefined&&l.g!==undefined&&l.y!==undefined&&l.x===undefined){var P=new C();P.setPublic(l.p,l.q,l.g,l.y);return P}if(l.p!==undefined&&l.q!==undefined&&l.g!==undefined&&l.y!==undefined&&l.x!==undefined){var P=new C();P.setPrivate(l.p,l.q,l.g,l.y,l.x);return P}if(l.kty===\"RSA\"&&l.n!==undefined&&l.e!==undefined&&l.d===undefined){var P=new w();P.setPublic(b64utohex(l.n),b64utohex(l.e));return P}if(l.kty===\"RSA\"&&l.n!==undefined&&l.e!==undefined&&l.d!==undefined&&l.p!==undefined&&l.q!==undefined&&l.dp!==undefined&&l.dq!==undefined&&l.qi!==undefined){var P=new w();P.setPrivateEx(b64utohex(l.n),b64utohex(l.e),b64utohex(l.d),b64utohex(l.p),b64utohex(l.q),b64utohex(l.dp),b64utohex(l.dq),b64utohex(l.qi));return P}if(l.kty===\"RSA\"&&l.n!==undefined&&l.e!==undefined&&l.d!==undefined){var P=new w();P.setPrivate(b64utohex(l.n),b64utohex(l.e),b64utohex(l.d));return P}if(l.kty===\"EC\"&&l.crv!==undefined&&l.x!==undefined&&l.y!==undefined&&l.d===undefined){var j=new i({curve:l.crv});var t=j.ecparams.keylen/4;var B=(\"0000000000\"+b64utohex(l.x)).slice(-t);var z=(\"0000000000\"+b64utohex(l.y)).slice(-t);var u=\"04\"+B+z;j.setPublicKeyHex(u);return j}if(l.kty===\"EC\"&&l.crv!==undefined&&l.x!==undefined&&l.y!==undefined&&l.d!==undefined){var j=new i({curve:l.crv});var t=j.ecparams.keylen/4;var B=(\"0000000000\"+b64utohex(l.x)).slice(-t);var z=(\"0000000000\"+b64utohex(l.y)).slice(-t);var u=\"04\"+B+z;var b=(\"0000000000\"+b64utohex(l.d)).slice(-t);j.setPublicKeyHex(u);j.setPrivateKeyHex(b);return j}if(n===\"pkcs5prv\"){var J=l,G=ASN1HEX,N,P;N=L(J,0);if(N.length===9){P=new w();P.readPKCS5PrvKeyHex(J)}else{if(N.length===6){P=new C();P.readPKCS5PrvKeyHex(J)}else{if(N.length>2&&J.substr(N[1],2)===\"04\"){P=new i();P.readPKCS5PrvKeyHex(J)}else{throw\"unsupported PKCS#1/5 hexadecimal key\"}}}return P}if(n===\"pkcs8prv\"){var P=F.getKeyFromPlainPrivatePKCS8Hex(l);return P}if(n===\"pkcs8pub\"){return F._getKeyFromPublicPKCS8Hex(l)}if(n===\"x509pub\"){return X509.getPublicKeyFromCertHex(l)}if(l.indexOf(\"-END CERTIFICATE-\",0)!=-1||l.indexOf(\"-END X509 CERTIFICATE-\",0)!=-1||l.indexOf(\"-END TRUSTED CERTIFICATE-\",0)!=-1){return X509.getPublicKeyFromCertPEM(l)}if(l.indexOf(\"-END PUBLIC KEY-\")!=-1){var O=pemtohex(l,\"PUBLIC KEY\");return F._getKeyFromPublicPKCS8Hex(O)}if(l.indexOf(\"-END RSA PRIVATE KEY-\")!=-1&&l.indexOf(\"4,ENCRYPTED\")==-1){var m=M(l,\"RSA PRIVATE KEY\");return F.getKey(m,null,\"pkcs5prv\")}if(l.indexOf(\"-END DSA PRIVATE KEY-\")!=-1&&l.indexOf(\"4,ENCRYPTED\")==-1){var I=M(l,\"DSA PRIVATE KEY\");var E=d(I,0,[1],\"02\");var D=d(I,0,[2],\"02\");var K=d(I,0,[3],\"02\");var r=d(I,0,[4],\"02\");var s=d(I,0,[5],\"02\");var P=new C();P.setPrivate(new BigInteger(E,16),new BigInteger(D,16),new BigInteger(K,16),new BigInteger(r,16),new BigInteger(s,16));return P}if(l.indexOf(\"-END PRIVATE KEY-\")!=-1){return F.getKeyFromPlainPrivatePKCS8PEM(l)}if(l.indexOf(\"-END RSA PRIVATE KEY-\")!=-1&&l.indexOf(\"4,ENCRYPTED\")!=-1){var o=F.getDecryptedKeyHex(l,k);var H=new RSAKey();H.readPKCS5PrvKeyHex(o);return H}if(l.indexOf(\"-END EC PRIVATE KEY-\")!=-1&&l.indexOf(\"4,ENCRYPTED\")!=-1){var I=F.getDecryptedKeyHex(l,k);var P=d(I,0,[1],\"04\");var f=d(I,0,[2,0],\"06\");var A=d(I,0,[3,0],\"03\").substr(2);var e=\"\";if(KJUR.crypto.OID.oidhex2name[f]!==undefined){e=KJUR.crypto.OID.oidhex2name[f]}else{throw\"undefined OID(hex) in KJUR.crypto.OID: \"+f}var j=new i({curve:e});j.setPublicKeyHex(A);j.setPrivateKeyHex(P);j.isPublic=false;return j}if(l.indexOf(\"-END DSA PRIVATE KEY-\")!=-1&&l.indexOf(\"4,ENCRYPTED\")!=-1){var I=F.getDecryptedKeyHex(l,k);var E=d(I,0,[1],\"02\");var D=d(I,0,[2],\"02\");var K=d(I,0,[3],\"02\");var r=d(I,0,[4],\"02\");var s=d(I,0,[5],\"02\");var P=new C();P.setPrivate(new BigInteger(E,16),new BigInteger(D,16),new BigInteger(K,16),new BigInteger(r,16),new BigInteger(s,16));return P}if(l.indexOf(\"-END ENCRYPTED PRIVATE KEY-\")!=-1){return F.getKeyFromEncryptedPKCS8PEM(l,k)}throw\"not supported argument\"};KEYUTIL.generateKeypair=function(a,c){if(a==\"RSA\"){var b=c;var h=new RSAKey();h.generate(b,\"10001\");h.isPrivate=true;h.isPublic=true;var f=new RSAKey();var e=h.n.toString(16);var i=h.e.toString(16);f.setPublic(e,i);f.isPrivate=false;f.isPublic=true;var k={};k.prvKeyObj=h;k.pubKeyObj=f;return k}else{if(a==\"EC\"){var d=c;var g=new KJUR.crypto.ECDSA({curve:d});var j=g.generateKeyPairHex();var h=new KJUR.crypto.ECDSA({curve:d});h.setPublicKeyHex(j.ecpubhex);h.setPrivateKeyHex(j.ecprvhex);h.isPrivate=true;h.isPublic=false;var f=new KJUR.crypto.ECDSA({curve:d});f.setPublicKeyHex(j.ecpubhex);f.isPrivate=false;f.isPublic=true;var k={};k.prvKeyObj=h;k.pubKeyObj=f;return k}else{throw\"unknown algorithm: \"+a}}};KEYUTIL.getPEM=function(b,D,y,m,q,j){var F=KJUR,k=F.asn1,z=k.DERObjectIdentifier,f=k.DERInteger,l=k.ASN1Util.newObject,a=k.x509,C=a.SubjectPublicKeyInfo,e=F.crypto,u=e.DSA,r=e.ECDSA,n=RSAKey;function A(s){var G=l({seq:[{\"int\":0},{\"int\":{bigint:s.n}},{\"int\":s.e},{\"int\":{bigint:s.d}},{\"int\":{bigint:s.p}},{\"int\":{bigint:s.q}},{\"int\":{bigint:s.dmp1}},{\"int\":{bigint:s.dmq1}},{\"int\":{bigint:s.coeff}}]});return G}function B(G){var s=l({seq:[{\"int\":1},{octstr:{hex:G.prvKeyHex}},{tag:[\"a0\",true,{oid:{name:G.curveName}}]},{tag:[\"a1\",true,{bitstr:{hex:\"00\"+G.pubKeyHex}}]}]});return s}function x(s){var G=l({seq:[{\"int\":0},{\"int\":{bigint:s.p}},{\"int\":{bigint:s.q}},{\"int\":{bigint:s.g}},{\"int\":{bigint:s.y}},{\"int\":{bigint:s.x}}]});return G}if(((n!==undefined&&b instanceof n)||(u!==undefined&&b instanceof u)||(r!==undefined&&b instanceof r))&&b.isPublic==true&&(D===undefined||D==\"PKCS8PUB\")){var E=new C(b);var w=E.getEncodedHex();return hextopem(w,\"PUBLIC KEY\")}if(D==\"PKCS1PRV\"&&n!==undefined&&b instanceof n&&(y===undefined||y==null)&&b.isPrivate==true){var E=A(b);var w=E.getEncodedHex();return hextopem(w,\"RSA PRIVATE KEY\")}if(D==\"PKCS1PRV\"&&r!==undefined&&b instanceof r&&(y===undefined||y==null)&&b.isPrivate==true){var i=new z({name:b.curveName});var v=i.getEncodedHex();var h=B(b);var t=h.getEncodedHex();var p=\"\";p+=hextopem(v,\"EC PARAMETERS\");p+=hextopem(t,\"EC PRIVATE KEY\");return p}if(D==\"PKCS1PRV\"&&u!==undefined&&b instanceof u&&(y===undefined||y==null)&&b.isPrivate==true){var E=x(b);var w=E.getEncodedHex();return hextopem(w,\"DSA PRIVATE KEY\")}if(D==\"PKCS5PRV\"&&n!==undefined&&b instanceof n&&(y!==undefined&&y!=null)&&b.isPrivate==true){var E=A(b);var w=E.getEncodedHex();if(m===undefined){m=\"DES-EDE3-CBC\"}return this.getEncryptedPKCS5PEMFromPrvKeyHex(\"RSA\",w,y,m,j)}if(D==\"PKCS5PRV\"&&r!==undefined&&b instanceof r&&(y!==undefined&&y!=null)&&b.isPrivate==true){var E=B(b);var w=E.getEncodedHex();if(m===undefined){m=\"DES-EDE3-CBC\"}return this.getEncryptedPKCS5PEMFromPrvKeyHex(\"EC\",w,y,m,j)}if(D==\"PKCS5PRV\"&&u!==undefined&&b instanceof u&&(y!==undefined&&y!=null)&&b.isPrivate==true){var E=x(b);var w=E.getEncodedHex();if(m===undefined){m=\"DES-EDE3-CBC\"}return this.getEncryptedPKCS5PEMFromPrvKeyHex(\"DSA\",w,y,m,j)}var o=function(G,s){var I=c(G,s);var H=new l({seq:[{seq:[{oid:{name:\"pkcs5PBES2\"}},{seq:[{seq:[{oid:{name:\"pkcs5PBKDF2\"}},{seq:[{octstr:{hex:I.pbkdf2Salt}},{\"int\":I.pbkdf2Iter}]}]},{seq:[{oid:{name:\"des-EDE3-CBC\"}},{octstr:{hex:I.encryptionSchemeIV}}]}]}]},{octstr:{hex:I.ciphertext}}]});return H.getEncodedHex()};var c=function(N,O){var H=100;var M=CryptoJS.lib.WordArray.random(8);var L=\"DES-EDE3-CBC\";var s=CryptoJS.lib.WordArray.random(8);var I=CryptoJS.PBKDF2(O,M,{keySize:192/32,iterations:H});var J=CryptoJS.enc.Hex.parse(N);var K=CryptoJS.TripleDES.encrypt(J,I,{iv:s})+\"\";var G={};G.ciphertext=K;G.pbkdf2Salt=CryptoJS.enc.Hex.stringify(M);G.pbkdf2Iter=H;G.encryptionSchemeAlg=L;G.encryptionSchemeIV=CryptoJS.enc.Hex.stringify(s);return G};if(D==\"PKCS8PRV\"&&n!=undefined&&b instanceof n&&b.isPrivate==true){var g=A(b);var d=g.getEncodedHex();var E=l({seq:[{\"int\":0},{seq:[{oid:{name:\"rsaEncryption\"}},{\"null\":true}]},{octstr:{hex:d}}]});var w=E.getEncodedHex();if(y===undefined||y==null){return hextopem(w,\"PRIVATE KEY\")}else{var t=o(w,y);return hextopem(t,\"ENCRYPTED PRIVATE KEY\")}}if(D==\"PKCS8PRV\"&&r!==undefined&&b instanceof r&&b.isPrivate==true){var g=new l({seq:[{\"int\":1},{octstr:{hex:b.prvKeyHex}},{tag:[\"a1\",true,{bitstr:{hex:\"00\"+b.pubKeyHex}}]}]});var d=g.getEncodedHex();var E=l({seq:[{\"int\":0},{seq:[{oid:{name:\"ecPublicKey\"}},{oid:{name:b.curveName}}]},{octstr:{hex:d}}]});var w=E.getEncodedHex();if(y===undefined||y==null){return hextopem(w,\"PRIVATE KEY\")}else{var t=o(w,y);return hextopem(t,\"ENCRYPTED PRIVATE KEY\")}}if(D==\"PKCS8PRV\"&&u!==undefined&&b instanceof u&&b.isPrivate==true){var g=new f({bigint:b.x});var d=g.getEncodedHex();var E=l({seq:[{\"int\":0},{seq:[{oid:{name:\"dsa\"}},{seq:[{\"int\":{bigint:b.p}},{\"int\":{bigint:b.q}},{\"int\":{bigint:b.g}}]}]},{octstr:{hex:d}}]});var w=E.getEncodedHex();if(y===undefined||y==null){return hextopem(w,\"PRIVATE KEY\")}else{var t=o(w,y);return hextopem(t,\"ENCRYPTED PRIVATE KEY\")}}throw\"unsupported object nor format\"};KEYUTIL.getKeyFromCSRPEM=function(b){var a=pemtohex(b,\"CERTIFICATE REQUEST\");var c=KEYUTIL.getKeyFromCSRHex(a);return c};KEYUTIL.getKeyFromCSRHex=function(a){var c=KEYUTIL.parseCSRHex(a);var b=KEYUTIL.getKey(c.p8pubkeyhex,null,\"pkcs8pub\");return b};KEYUTIL.parseCSRHex=function(d){var i=ASN1HEX;var f=i.getChildIdx;var c=i.getTLV;var b={};var g=d;if(g.substr(0,2)!=\"30\"){throw\"malformed CSR(code:001)\"}var e=f(g,0);if(e.length<1){throw\"malformed CSR(code:002)\"}if(g.substr(e[0],2)!=\"30\"){throw\"malformed CSR(code:003)\"}var a=f(g,e[0]);if(a.length<3){throw\"malformed CSR(code:004)\"}b.p8pubkeyhex=c(g,a[2]);return b};KEYUTIL.getJWKFromKey=function(d){var b={};if(d instanceof RSAKey&&d.isPrivate){b.kty=\"RSA\";b.n=hextob64u(d.n.toString(16));b.e=hextob64u(d.e.toString(16));b.d=hextob64u(d.d.toString(16));b.p=hextob64u(d.p.toString(16));b.q=hextob64u(d.q.toString(16));b.dp=hextob64u(d.dmp1.toString(16));b.dq=hextob64u(d.dmq1.toString(16));b.qi=hextob64u(d.coeff.toString(16));return b}else{if(d instanceof RSAKey&&d.isPublic){b.kty=\"RSA\";b.n=hextob64u(d.n.toString(16));b.e=hextob64u(d.e.toString(16));return b}else{if(d instanceof KJUR.crypto.ECDSA&&d.isPrivate){var a=d.getShortNISTPCurveName();if(a!==\"P-256\"&&a!==\"P-384\"){throw\"unsupported curve name for JWT: \"+a}var c=d.getPublicKeyXYHex();b.kty=\"EC\";b.crv=a;b.x=hextob64u(c.x);b.y=hextob64u(c.y);b.d=hextob64u(d.prvKeyHex);return b}else{if(d instanceof KJUR.crypto.ECDSA&&d.isPublic){var a=d.getShortNISTPCurveName();if(a!==\"P-256\"&&a!==\"P-384\"){throw\"unsupported curve name for JWT: \"+a}var c=d.getPublicKeyXYHex();b.kty=\"EC\";b.crv=a;b.x=hextob64u(c.x);b.y=hextob64u(c.y);return b}}}}throw\"not supported key object\"};\nRSAKey.getPosArrayOfChildrenFromHex=function(a){return ASN1HEX.getChildIdx(a,0)};RSAKey.getHexValueArrayOfChildrenFromHex=function(f){var n=ASN1HEX;var i=n.getV;var k=RSAKey.getPosArrayOfChildrenFromHex(f);var e=i(f,k[0]);var j=i(f,k[1]);var b=i(f,k[2]);var c=i(f,k[3]);var h=i(f,k[4]);var g=i(f,k[5]);var m=i(f,k[6]);var l=i(f,k[7]);var d=i(f,k[8]);var k=new Array();k.push(e,j,b,c,h,g,m,l,d);return k};RSAKey.prototype.readPrivateKeyFromPEMString=function(d){var c=pemtohex(d);var b=RSAKey.getHexValueArrayOfChildrenFromHex(c);this.setPrivateEx(b[1],b[2],b[3],b[4],b[5],b[6],b[7],b[8])};RSAKey.prototype.readPKCS5PrvKeyHex=function(c){var b=RSAKey.getHexValueArrayOfChildrenFromHex(c);this.setPrivateEx(b[1],b[2],b[3],b[4],b[5],b[6],b[7],b[8])};RSAKey.prototype.readPKCS8PrvKeyHex=function(e){var c,j,l,b,a,f,d,k;var m=ASN1HEX;var g=m.getVbyList;if(m.isASN1HEX(e)===false){throw\"not ASN.1 hex string\"}try{c=g(e,0,[2,0,1],\"02\");j=g(e,0,[2,0,2],\"02\");l=g(e,0,[2,0,3],\"02\");b=g(e,0,[2,0,4],\"02\");a=g(e,0,[2,0,5],\"02\");f=g(e,0,[2,0,6],\"02\");d=g(e,0,[2,0,7],\"02\");k=g(e,0,[2,0,8],\"02\")}catch(i){throw\"malformed PKCS#8 plain RSA private key\"}this.setPrivateEx(c,j,l,b,a,f,d,k)};RSAKey.prototype.readPKCS5PubKeyHex=function(c){var e=ASN1HEX;var b=e.getV;if(e.isASN1HEX(c)===false){throw\"keyHex is not ASN.1 hex string\"}var a=e.getChildIdx(c,0);if(a.length!==2||c.substr(a[0],2)!==\"02\"||c.substr(a[1],2)!==\"02\"){throw\"wrong hex for PKCS#5 public key\"}var f=b(c,a[0]);var d=b(c,a[1]);this.setPublic(f,d)};RSAKey.prototype.readPKCS8PubKeyHex=function(b){var c=ASN1HEX;if(c.isASN1HEX(b)===false){throw\"not ASN.1 hex string\"}if(c.getTLVbyList(b,0,[0,0])!==\"06092a864886f70d010101\"){throw\"not PKCS8 RSA public key\"}var a=c.getTLVbyList(b,0,[1,0]);this.readPKCS5PubKeyHex(a)};RSAKey.prototype.readCertPubKeyHex=function(b,d){var a,c;a=new X509();a.readCertHex(b);c=a.getPublicKeyHex();this.readPKCS8PubKeyHex(c)};\nvar _RE_HEXDECONLY=new RegExp(\"\");_RE_HEXDECONLY.compile(\"[^0-9a-f]\",\"gi\");function _rsasign_getHexPaddedDigestInfoForString(d,e,a){var b=function(f){return KJUR.crypto.Util.hashString(f,a)};var c=b(d);return KJUR.crypto.Util.getPaddedDigestInfoHex(c,a,e)}function _zeroPaddingOfSignature(e,d){var c=\"\";var a=d/4-e.length;for(var b=0;b<a;b++){c=c+\"0\"}return c+e}RSAKey.prototype.sign=function(d,a){var b=function(e){return KJUR.crypto.Util.hashString(e,a)};var c=b(d);return this.signWithMessageHash(c,a)};RSAKey.prototype.signWithMessageHash=function(e,c){var f=KJUR.crypto.Util.getPaddedDigestInfoHex(e,c,this.n.bitLength());var b=parseBigInt(f,16);var d=this.doPrivate(b);var a=d.toString(16);return _zeroPaddingOfSignature(a,this.n.bitLength())};function pss_mgf1_str(c,a,e){var b=\"\",d=0;while(b.length<a){b+=hextorstr(e(rstrtohex(c+String.fromCharCode.apply(String,[(d&4278190080)>>24,(d&16711680)>>16,(d&65280)>>8,d&255]))));d+=1}return b}RSAKey.prototype.signPSS=function(e,a,d){var c=function(f){return KJUR.crypto.Util.hashHex(f,a)};var b=c(rstrtohex(e));if(d===undefined){d=-1}return this.signWithMessageHashPSS(b,a,d)};RSAKey.prototype.signWithMessageHashPSS=function(l,a,k){var b=hextorstr(l);var g=b.length;var m=this.n.bitLength()-1;var c=Math.ceil(m/8);var d;var o=function(i){return KJUR.crypto.Util.hashHex(i,a)};if(k===-1||k===undefined){k=g}else{if(k===-2){k=c-g-2}else{if(k<-2){throw\"invalid salt length\"}}}if(c<(g+k+2)){throw\"data too long\"}var f=\"\";if(k>0){f=new Array(k);new SecureRandom().nextBytes(f);f=String.fromCharCode.apply(String,f)}var n=hextorstr(o(rstrtohex(\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\"+b+f)));var j=[];for(d=0;d<c-k-g-2;d+=1){j[d]=0}var e=String.fromCharCode.apply(String,j)+\"\\x01\"+f;var h=pss_mgf1_str(n,e.length,o);var q=[];for(d=0;d<e.length;d+=1){q[d]=e.charCodeAt(d)^h.charCodeAt(d)}var p=(65280>>(8*c-m))&255;q[0]&=~p;for(d=0;d<g;d++){q.push(n.charCodeAt(d))}q.push(188);return _zeroPaddingOfSignature(this.doPrivate(new BigInteger(q)).toString(16),this.n.bitLength())};function _rsasign_getDecryptSignatureBI(a,d,c){var b=new RSAKey();b.setPublic(d,c);var e=b.doPublic(a);return e}function _rsasign_getHexDigestInfoFromSig(a,c,b){var e=_rsasign_getDecryptSignatureBI(a,c,b);var d=e.toString(16).replace(/^1f+00/,\"\");return d}function _rsasign_getAlgNameAndHashFromHexDisgestInfo(f){for(var e in KJUR.crypto.Util.DIGESTINFOHEAD){var d=KJUR.crypto.Util.DIGESTINFOHEAD[e];var b=d.length;if(f.substring(0,b)==d){var c=[e,f.substring(b)];return c}}return[]}RSAKey.prototype.verify=function(f,j){j=j.replace(_RE_HEXDECONLY,\"\");j=j.replace(/[ \\n]+/g,\"\");var b=parseBigInt(j,16);if(b.bitLength()>this.n.bitLength()){return 0}var i=this.doPublic(b);var e=i.toString(16).replace(/^1f+00/,\"\");var g=_rsasign_getAlgNameAndHashFromHexDisgestInfo(e);if(g.length==0){return false}var d=g[0];var h=g[1];var a=function(k){return KJUR.crypto.Util.hashString(k,d)};var c=a(f);return(h==c)};RSAKey.prototype.verifyWithMessageHash=function(e,a){a=a.replace(_RE_HEXDECONLY,\"\");a=a.replace(/[ \\n]+/g,\"\");var b=parseBigInt(a,16);if(b.bitLength()>this.n.bitLength()){return 0}var h=this.doPublic(b);var g=h.toString(16).replace(/^1f+00/,\"\");var c=_rsasign_getAlgNameAndHashFromHexDisgestInfo(g);if(c.length==0){return false}var d=c[0];var f=c[1];return(f==e)};RSAKey.prototype.verifyPSS=function(c,b,a,f){var e=function(g){return KJUR.crypto.Util.hashHex(g,a)};var d=e(rstrtohex(c));if(f===undefined){f=-1}return this.verifyWithMessageHashPSS(d,b,a,f)};RSAKey.prototype.verifyWithMessageHashPSS=function(f,s,l,c){var k=new BigInteger(s,16);if(k.bitLength()>this.n.bitLength()){return false}var r=function(i){return KJUR.crypto.Util.hashHex(i,l)};var j=hextorstr(f);var h=j.length;var g=this.n.bitLength()-1;var m=Math.ceil(g/8);var q;if(c===-1||c===undefined){c=h}else{if(c===-2){c=m-h-2}else{if(c<-2){throw\"invalid salt length\"}}}if(m<(h+c+2)){throw\"data too long\"}var a=this.doPublic(k).toByteArray();for(q=0;q<a.length;q+=1){a[q]&=255}while(a.length<m){a.unshift(0)}if(a[m-1]!==188){throw\"encoded message does not end in 0xbc\"}a=String.fromCharCode.apply(String,a);var d=a.substr(0,m-h-1);var e=a.substr(d.length,h);var p=(65280>>(8*m-g))&255;if((d.charCodeAt(0)&p)!==0){throw\"bits beyond keysize not zero\"}var n=pss_mgf1_str(e,d.length,r);var o=[];for(q=0;q<d.length;q+=1){o[q]=d.charCodeAt(q)^n.charCodeAt(q)}o[0]&=~p;var b=m-h-c-2;for(q=0;q<b;q+=1){if(o[q]!==0){throw\"leftmost octets not zero\"}}if(o[b]!==1){throw\"0x01 marker not found\"}return e===hextorstr(r(rstrtohex(\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\"+j+String.fromCharCode.apply(String,o.slice(-c)))))};RSAKey.SALT_LEN_HLEN=-1;RSAKey.SALT_LEN_MAX=-2;RSAKey.SALT_LEN_RECOVER=-2;\nfunction X509(){var k=ASN1HEX,j=k.getChildIdx,h=k.getV,b=k.getTLV,f=k.getVbyList,c=k.getTLVbyList,g=k.getIdxbyList,d=k.getVidx,i=k.oidname,a=X509,e=pemtohex;this.hex=null;this.version=0;this.foffset=0;this.aExtInfo=null;this.getVersion=function(){if(this.hex===null||this.version!==0){return this.version}if(c(this.hex,0,[0,0])!==\"a003020102\"){this.version=1;this.foffset=-1;return 1}this.version=3;return 3};this.getSerialNumberHex=function(){return f(this.hex,0,[0,1+this.foffset],\"02\")};this.getSignatureAlgorithmField=function(){return i(f(this.hex,0,[0,2+this.foffset,0],\"06\"))};this.getIssuerHex=function(){return c(this.hex,0,[0,3+this.foffset],\"30\")};this.getIssuerString=function(){return a.hex2dn(this.getIssuerHex())};this.getSubjectHex=function(){return c(this.hex,0,[0,5+this.foffset],\"30\")};this.getSubjectString=function(){return a.hex2dn(this.getSubjectHex())};this.getNotBefore=function(){var l=f(this.hex,0,[0,4+this.foffset,0]);l=l.replace(/(..)/g,\"%$1\");l=decodeURIComponent(l);return l};this.getNotAfter=function(){var l=f(this.hex,0,[0,4+this.foffset,1]);l=l.replace(/(..)/g,\"%$1\");l=decodeURIComponent(l);return l};this.getPublicKeyHex=function(){return k.getTLVbyList(this.hex,0,[0,6+this.foffset],\"30\")};this.getPublicKeyIdx=function(){return g(this.hex,0,[0,6+this.foffset],\"30\")};this.getPublicKeyContentIdx=function(){var l=this.getPublicKeyIdx();return g(this.hex,l,[1,0],\"30\")};this.getPublicKey=function(){return KEYUTIL.getKey(this.getPublicKeyHex(),null,\"pkcs8pub\")};this.getSignatureAlgorithmName=function(){return i(f(this.hex,0,[1,0],\"06\"))};this.getSignatureValueHex=function(){return f(this.hex,0,[2],\"03\",true)};this.verifySignature=function(n){var o=this.getSignatureAlgorithmName();var l=this.getSignatureValueHex();var m=c(this.hex,0,[0],\"30\");var p=new KJUR.crypto.Signature({alg:o});p.init(n);p.updateHex(m);return p.verify(l)};this.parseExt=function(){if(this.version!==3){return -1}var p=g(this.hex,0,[0,7,0],\"30\");var m=j(this.hex,p);this.aExtInfo=new Array();for(var n=0;n<m.length;n++){var q={};q.critical=false;var l=j(this.hex,m[n]);var r=0;if(l.length===3){q.critical=true;r=1}q.oid=k.hextooidstr(f(this.hex,m[n],[0],\"06\"));var o=g(this.hex,m[n],[1+r]);q.vidx=d(this.hex,o);this.aExtInfo.push(q)}};this.getExtInfo=function(n){var l=this.aExtInfo;var o=n;if(!n.match(/^[0-9.]+$/)){o=KJUR.asn1.x509.OID.name2oid(n)}if(o===\"\"){return undefined}for(var m=0;m<l.length;m++){if(l[m].oid===o){return l[m]}}return undefined};this.getExtBasicConstraints=function(){var n=this.getExtInfo(\"basicConstraints\");if(n===undefined){return n}var l=h(this.hex,n.vidx);if(l===\"\"){return{}}if(l===\"0101ff\"){return{cA:true}}if(l.substr(0,8)===\"0101ff02\"){var o=h(l,6);var m=parseInt(o,16);return{cA:true,pathLen:m}}throw\"basicConstraints parse error\"};this.getExtKeyUsageBin=function(){var o=this.getExtInfo(\"keyUsage\");if(o===undefined){return\"\"}var m=h(this.hex,o.vidx);if(m.length%2!=0||m.length<=2){throw\"malformed key usage value\"}var l=parseInt(m.substr(0,2));var n=parseInt(m.substr(2),16).toString(2);return n.substr(0,n.length-l)};this.getExtKeyUsageString=function(){var n=this.getExtKeyUsageBin();var l=new Array();for(var m=0;m<n.length;m++){if(n.substr(m,1)==\"1\"){l.push(X509.KEYUSAGE_NAME[m])}}return l.join(\",\")};this.getExtSubjectKeyIdentifier=function(){var l=this.getExtInfo(\"subjectKeyIdentifier\");if(l===undefined){return l}return h(this.hex,l.vidx)};this.getExtAuthorityKeyIdentifier=function(){var p=this.getExtInfo(\"authorityKeyIdentifier\");if(p===undefined){return p}var l={};var o=b(this.hex,p.vidx);var m=j(o,0);for(var n=0;n<m.length;n++){if(o.substr(m[n],2)===\"80\"){l.kid=h(o,m[n])}}return l};this.getExtExtKeyUsageName=function(){var p=this.getExtInfo(\"extKeyUsage\");if(p===undefined){return p}var l=new Array();var o=b(this.hex,p.vidx);if(o===\"\"){return l}var m=j(o,0);for(var n=0;n<m.length;n++){l.push(i(h(o,m[n])))}return l};this.getExtSubjectAltName=function(){var m=this.getExtSubjectAltName2();var l=new Array();for(var n=0;n<m.length;n++){if(m[n][0]===\"DNS\"){l.push(m[n][1])}}return l};this.getExtSubjectAltName2=function(){var p,s,r;var q=this.getExtInfo(\"subjectAltName\");if(q===undefined){return q}var l=new Array();var o=b(this.hex,q.vidx);var m=j(o,0);for(var n=0;n<m.length;n++){r=o.substr(m[n],2);p=h(o,m[n]);if(r===\"81\"){s=hextoutf8(p);l.push([\"MAIL\",s])}if(r===\"82\"){s=hextoutf8(p);l.push([\"DNS\",s])}if(r===\"84\"){s=X509.hex2dn(p,0);l.push([\"DN\",s])}if(r===\"86\"){s=hextoutf8(p);l.push([\"URI\",s])}if(r===\"87\"){s=hextoip(p);l.push([\"IP\",s])}}return l};this.getExtCRLDistributionPointsURI=function(){var q=this.getExtInfo(\"cRLDistributionPoints\");if(q===undefined){return q}var l=new Array();var m=j(this.hex,q.vidx);for(var o=0;o<m.length;o++){try{var r=f(this.hex,m[o],[0,0,0],\"86\");var p=hextoutf8(r);l.push(p)}catch(n){}}return l};this.getExtAIAInfo=function(){var p=this.getExtInfo(\"authorityInfoAccess\");if(p===undefined){return p}var l={ocsp:[],caissuer:[]};var m=j(this.hex,p.vidx);for(var n=0;n<m.length;n++){var q=f(this.hex,m[n],[0],\"06\");var o=f(this.hex,m[n],[1],\"86\");if(q===\"2b06010505073001\"){l.ocsp.push(hextoutf8(o))}if(q===\"2b06010505073002\"){l.caissuer.push(hextoutf8(o))}}return l};this.getExtCertificatePolicies=function(){var o=this.getExtInfo(\"certificatePolicies\");if(o===undefined){return o}var l=b(this.hex,o.vidx);var u=[];var s=j(l,0);for(var r=0;r<s.length;r++){var t={};var n=j(l,s[r]);t.id=i(h(l,n[0]));if(n.length===2){var m=j(l,n[1]);for(var q=0;q<m.length;q++){var p=f(l,m[q],[0],\"06\");if(p===\"2b06010505070201\"){t.cps=hextoutf8(f(l,m[q],[1]))}else{if(p===\"2b06010505070202\"){t.unotice=hextoutf8(f(l,m[q],[1,0]))}}}}u.push(t)}return u};this.readCertPEM=function(l){this.readCertHex(e(l))};this.readCertHex=function(l){this.hex=l;this.getVersion();try{g(this.hex,0,[0,7],\"a3\");this.parseExt()}catch(m){}};this.getInfo=function(){var m=X509;var B,u,z;B=\"Basic Fields\\n\";B+=\"  serial number: \"+this.getSerialNumberHex()+\"\\n\";B+=\"  signature algorithm: \"+this.getSignatureAlgorithmField()+\"\\n\";B+=\"  issuer: \"+this.getIssuerString()+\"\\n\";B+=\"  notBefore: \"+this.getNotBefore()+\"\\n\";B+=\"  notAfter: \"+this.getNotAfter()+\"\\n\";B+=\"  subject: \"+this.getSubjectString()+\"\\n\";B+=\"  subject public key info: \\n\";u=this.getPublicKey();B+=\"    key algorithm: \"+u.type+\"\\n\";if(u.type===\"RSA\"){B+=\"    n=\"+hextoposhex(u.n.toString(16)).substr(0,16)+\"...\\n\";B+=\"    e=\"+hextoposhex(u.e.toString(16))+\"\\n\"}z=this.aExtInfo;if(z!==undefined&&z!==null){B+=\"X509v3 Extensions:\\n\";for(var r=0;r<z.length;r++){var n=z[r];var A=KJUR.asn1.x509.OID.oid2name(n.oid);if(A===\"\"){A=n.oid}var x=\"\";if(n.critical===true){x=\"CRITICAL\"}B+=\"  \"+A+\" \"+x+\":\\n\";if(A===\"basicConstraints\"){var v=this.getExtBasicConstraints();if(v.cA===undefined){B+=\"    {}\\n\"}else{B+=\"    cA=true\";if(v.pathLen!==undefined){B+=\", pathLen=\"+v.pathLen}B+=\"\\n\"}}else{if(A===\"keyUsage\"){B+=\"    \"+this.getExtKeyUsageString()+\"\\n\"}else{if(A===\"subjectKeyIdentifier\"){B+=\"    \"+this.getExtSubjectKeyIdentifier()+\"\\n\"}else{if(A===\"authorityKeyIdentifier\"){var l=this.getExtAuthorityKeyIdentifier();if(l.kid!==undefined){B+=\"    kid=\"+l.kid+\"\\n\"}}else{if(A===\"extKeyUsage\"){var w=this.getExtExtKeyUsageName();B+=\"    \"+w.join(\", \")+\"\\n\"}else{if(A===\"subjectAltName\"){var t=this.getExtSubjectAltName2();B+=\"    \"+t+\"\\n\"}else{if(A===\"cRLDistributionPoints\"){var y=this.getExtCRLDistributionPointsURI();B+=\"    \"+y+\"\\n\"}else{if(A===\"authorityInfoAccess\"){var p=this.getExtAIAInfo();if(p.ocsp!==undefined){B+=\"    ocsp: \"+p.ocsp.join(\",\")+\"\\n\"}if(p.caissuer!==undefined){B+=\"    caissuer: \"+p.caissuer.join(\",\")+\"\\n\"}}else{if(A===\"certificatePolicies\"){var o=this.getExtCertificatePolicies();for(var q=0;q<o.length;q++){if(o[q].id!==undefined){B+=\"    policy oid: \"+o[q].id+\"\\n\"}if(o[q].cps!==undefined){B+=\"    cps: \"+o[q].cps+\"\\n\"}}}}}}}}}}}}}B+=\"signature algorithm: \"+this.getSignatureAlgorithmName()+\"\\n\";B+=\"signature: \"+this.getSignatureValueHex().substr(0,16)+\"...\\n\";return B}}X509.hex2dn=function(f,b){if(b===undefined){b=0}if(f.substr(b,2)!==\"30\"){throw\"malformed DN\"}var c=new Array();var d=ASN1HEX.getChildIdx(f,b);for(var e=0;e<d.length;e++){c.push(X509.hex2rdn(f,d[e]))}c=c.map(function(a){return a.replace(\"/\",\"\\\\/\")});return\"/\"+c.join(\"/\")};X509.hex2rdn=function(f,b){if(b===undefined){b=0}if(f.substr(b,2)!==\"31\"){throw\"malformed RDN\"}var c=new Array();var d=ASN1HEX.getChildIdx(f,b);for(var e=0;e<d.length;e++){c.push(X509.hex2attrTypeValue(f,d[e]))}c=c.map(function(a){return a.replace(\"+\",\"\\\\+\")});return c.join(\"+\")};X509.hex2attrTypeValue=function(d,i){var j=ASN1HEX;var h=j.getV;if(i===undefined){i=0}if(d.substr(i,2)!==\"30\"){throw\"malformed attribute type and value\"}var g=j.getChildIdx(d,i);if(g.length!==2||d.substr(g[0],2)!==\"06\"){\"malformed attribute type and value\"}var b=h(d,g[0]);var f=KJUR.asn1.ASN1Util.oidHexToInt(b);var e=KJUR.asn1.x509.OID.oid2atype(f);var a=h(d,g[1]);var c=hextorstr(a);return e+\"=\"+c};X509.getPublicKeyFromCertHex=function(b){var a=new X509();a.readCertHex(b);return a.getPublicKey()};X509.getPublicKeyFromCertPEM=function(b){var a=new X509();a.readCertPEM(b);return a.getPublicKey()};X509.getPublicKeyInfoPropOfCertPEM=function(c){var e=ASN1HEX;var g=e.getVbyList;var b={};var a,f,d;b.algparam=null;a=new X509();a.readCertPEM(c);f=a.getPublicKeyHex();b.keyhex=g(f,0,[1],\"03\").substr(2);b.algoid=g(f,0,[0,0],\"06\");if(b.algoid===\"2a8648ce3d0201\"){b.algparam=g(f,0,[0,1],\"06\")}return b};X509.KEYUSAGE_NAME=[\"digitalSignature\",\"nonRepudiation\",\"keyEncipherment\",\"dataEncipherment\",\"keyAgreement\",\"keyCertSign\",\"cRLSign\",\"encipherOnly\",\"decipherOnly\"];\nif(typeof KJUR==\"undefined\"||!KJUR){KJUR={}}if(typeof KJUR.jws==\"undefined\"||!KJUR.jws){KJUR.jws={}}KJUR.jws.JWS=function(){var b=KJUR,a=b.jws.JWS,c=a.isSafeJSONString;this.parseJWS=function(g,j){if((this.parsedJWS!==undefined)&&(j||(this.parsedJWS.sigvalH!==undefined))){return}var i=g.match(/^([^.]+)\\.([^.]+)\\.([^.]+)$/);if(i==null){throw\"JWS signature is not a form of 'Head.Payload.SigValue'.\"}var k=i[1];var e=i[2];var l=i[3];var n=k+\".\"+e;this.parsedJWS={};this.parsedJWS.headB64U=k;this.parsedJWS.payloadB64U=e;this.parsedJWS.sigvalB64U=l;this.parsedJWS.si=n;if(!j){var h=b64utohex(l);var f=parseBigInt(h,16);this.parsedJWS.sigvalH=h;this.parsedJWS.sigvalBI=f}var d=b64utoutf8(k);var m=b64utoutf8(e);this.parsedJWS.headS=d;this.parsedJWS.payloadS=m;if(!c(d,this.parsedJWS,\"headP\")){throw\"malformed JSON string for JWS Head: \"+d}}};KJUR.jws.JWS.sign=function(i,v,y,z,a){var w=KJUR,m=w.jws,q=m.JWS,g=q.readSafeJSONString,p=q.isSafeJSONString,d=w.crypto,k=d.ECDSA,o=d.Mac,c=d.Signature,t=JSON;var s,j,n;if(typeof v!=\"string\"&&typeof v!=\"object\"){throw\"spHeader must be JSON string or object: \"+v}if(typeof v==\"object\"){j=v;s=t.stringify(j)}if(typeof v==\"string\"){s=v;if(!p(s)){throw\"JWS Head is not safe JSON string: \"+s}j=g(s)}n=y;if(typeof y==\"object\"){n=t.stringify(y)}if((i==\"\"||i==null)&&j.alg!==undefined){i=j.alg}if((i!=\"\"&&i!=null)&&j.alg===undefined){j.alg=i;s=t.stringify(j)}if(i!==j.alg){throw\"alg and sHeader.alg doesn't match: \"+i+\"!=\"+j.alg}var r=null;if(q.jwsalg2sigalg[i]===undefined){throw\"unsupported alg name: \"+i}else{r=q.jwsalg2sigalg[i]}var e=utf8tob64u(s);var l=utf8tob64u(n);var b=e+\".\"+l;var x=\"\";if(r.substr(0,4)==\"Hmac\"){if(z===undefined){throw\"mac key shall be specified for HS* alg\"}var h=new o({alg:r,prov:\"cryptojs\",pass:z});h.updateString(b);x=h.doFinal()}else{if(r.indexOf(\"withECDSA\")!=-1){var f=new c({alg:r});f.init(z,a);f.updateString(b);hASN1Sig=f.sign();x=KJUR.crypto.ECDSA.asn1SigToConcatSig(hASN1Sig)}else{if(r!=\"none\"){var f=new c({alg:r});f.init(z,a);f.updateString(b);x=f.sign()}}}var u=hextob64u(x);return b+\".\"+u};KJUR.jws.JWS.verify=function(w,B,n){var x=KJUR,q=x.jws,t=q.JWS,i=t.readSafeJSONString,e=x.crypto,p=e.ECDSA,s=e.Mac,d=e.Signature,m;if(typeof RSAKey!==undefined){m=RSAKey}var y=w.split(\".\");if(y.length!==3){return false}var f=y[0];var r=y[1];var c=f+\".\"+r;var A=b64utohex(y[2]);var l=i(b64utoutf8(y[0]));var k=null;var z=null;if(l.alg===undefined){throw\"algorithm not specified in header\"}else{k=l.alg;z=k.substr(0,2)}if(n!=null&&Object.prototype.toString.call(n)===\"[object Array]\"&&n.length>0){var b=\":\"+n.join(\":\")+\":\";if(b.indexOf(\":\"+k+\":\")==-1){throw\"algorithm '\"+k+\"' not accepted in the list\"}}if(k!=\"none\"&&B===null){throw\"key shall be specified to verify.\"}if(typeof B==\"string\"&&B.indexOf(\"-----BEGIN \")!=-1){B=KEYUTIL.getKey(B)}if(z==\"RS\"||z==\"PS\"){if(!(B instanceof m)){throw\"key shall be a RSAKey obj for RS* and PS* algs\"}}if(z==\"ES\"){if(!(B instanceof p)){throw\"key shall be a ECDSA obj for ES* algs\"}}if(k==\"none\"){}var u=null;if(t.jwsalg2sigalg[l.alg]===undefined){throw\"unsupported alg name: \"+k}else{u=t.jwsalg2sigalg[k]}if(u==\"none\"){throw\"not supported\"}else{if(u.substr(0,4)==\"Hmac\"){var o=null;if(B===undefined){throw\"hexadecimal key shall be specified for HMAC\"}var j=new s({alg:u,pass:B});j.updateString(c);o=j.doFinal();return A==o}else{if(u.indexOf(\"withECDSA\")!=-1){var h=null;try{h=p.concatSigToASN1Sig(A)}catch(v){return false}var g=new d({alg:u});g.init(B);g.updateString(c);return g.verify(h)}else{var g=new d({alg:u});g.init(B);g.updateString(c);return g.verify(A)}}}};KJUR.jws.JWS.parse=function(g){var c=g.split(\".\");var b={};var f,e,d;if(c.length!=2&&c.length!=3){throw\"malformed sJWS: wrong number of '.' splitted elements\"}f=c[0];e=c[1];if(c.length==3){d=c[2]}b.headerObj=KJUR.jws.JWS.readSafeJSONString(b64utoutf8(f));b.payloadObj=KJUR.jws.JWS.readSafeJSONString(b64utoutf8(e));b.headerPP=JSON.stringify(b.headerObj,null,\"  \");if(b.payloadObj==null){b.payloadPP=b64utoutf8(e)}else{b.payloadPP=JSON.stringify(b.payloadObj,null,\"  \")}if(d!==undefined){b.sigHex=b64utohex(d)}return b};KJUR.jws.JWS.verifyJWT=function(e,l,r){var d=KJUR,j=d.jws,o=j.JWS,n=o.readSafeJSONString,p=o.inArray,f=o.includedArray;var k=e.split(\".\");var c=k[0];var i=k[1];var q=c+\".\"+i;var m=b64utohex(k[2]);var h=n(b64utoutf8(c));var g=n(b64utoutf8(i));if(h.alg===undefined){return false}if(r.alg===undefined){throw\"acceptField.alg shall be specified\"}if(!p(h.alg,r.alg)){return false}if(g.iss!==undefined&&typeof r.iss===\"object\"){if(!p(g.iss,r.iss)){return false}}if(g.sub!==undefined&&typeof r.sub===\"object\"){if(!p(g.sub,r.sub)){return false}}if(g.aud!==undefined&&typeof r.aud===\"object\"){if(typeof g.aud==\"string\"){if(!p(g.aud,r.aud)){return false}}else{if(typeof g.aud==\"object\"){if(!f(g.aud,r.aud)){return false}}}}var b=j.IntDate.getNow();if(r.verifyAt!==undefined&&typeof r.verifyAt===\"number\"){b=r.verifyAt}if(r.gracePeriod===undefined||typeof r.gracePeriod!==\"number\"){r.gracePeriod=0}if(g.exp!==undefined&&typeof g.exp==\"number\"){if(g.exp+r.gracePeriod<b){return false}}if(g.nbf!==undefined&&typeof g.nbf==\"number\"){if(b<g.nbf-r.gracePeriod){return false}}if(g.iat!==undefined&&typeof g.iat==\"number\"){if(b<g.iat-r.gracePeriod){return false}}if(g.jti!==undefined&&r.jti!==undefined){if(g.jti!==r.jti){return false}}if(!o.verify(e,l,r.alg)){return false}return true};KJUR.jws.JWS.includedArray=function(b,a){var c=KJUR.jws.JWS.inArray;if(b===null){return false}if(typeof b!==\"object\"){return false}if(typeof b.length!==\"number\"){return false}for(var d=0;d<b.length;d++){if(!c(b[d],a)){return false}}return true};KJUR.jws.JWS.inArray=function(d,b){if(b===null){return false}if(typeof b!==\"object\"){return false}if(typeof b.length!==\"number\"){return false}for(var c=0;c<b.length;c++){if(b[c]==d){return true}}return false};KJUR.jws.JWS.jwsalg2sigalg={HS256:\"HmacSHA256\",HS384:\"HmacSHA384\",HS512:\"HmacSHA512\",RS256:\"SHA256withRSA\",RS384:\"SHA384withRSA\",RS512:\"SHA512withRSA\",ES256:\"SHA256withECDSA\",ES384:\"SHA384withECDSA\",PS256:\"SHA256withRSAandMGF1\",PS384:\"SHA384withRSAandMGF1\",PS512:\"SHA512withRSAandMGF1\",none:\"none\",};KJUR.jws.JWS.isSafeJSONString=function(c,b,d){var e=null;try{e=jsonParse(c);if(typeof e!=\"object\"){return 0}if(e.constructor===Array){return 0}if(b){b[d]=e}return 1}catch(a){return 0}};KJUR.jws.JWS.readSafeJSONString=function(b){var c=null;try{c=jsonParse(b);if(typeof c!=\"object\"){return null}if(c.constructor===Array){return null}return c}catch(a){return null}};KJUR.jws.JWS.getEncodedSignatureValueFromJWS=function(b){var a=b.match(/^[^.]+\\.[^.]+\\.([^.]+)$/);if(a==null){throw\"JWS signature is not a form of 'Head.Payload.SigValue'.\"}return a[1]};KJUR.jws.JWS.getJWKthumbprint=function(d){if(d.kty!==\"RSA\"&&d.kty!==\"EC\"&&d.kty!==\"oct\"){throw\"unsupported algorithm for JWK Thumprint\"}var a=\"{\";if(d.kty===\"RSA\"){if(typeof d.n!=\"string\"||typeof d.e!=\"string\"){throw\"wrong n and e value for RSA key\"}a+='\"e\":\"'+d.e+'\",';a+='\"kty\":\"'+d.kty+'\",';a+='\"n\":\"'+d.n+'\"}'}else{if(d.kty===\"EC\"){if(typeof d.crv!=\"string\"||typeof d.x!=\"string\"||typeof d.y!=\"string\"){throw\"wrong crv, x and y value for EC key\"}a+='\"crv\":\"'+d.crv+'\",';a+='\"kty\":\"'+d.kty+'\",';a+='\"x\":\"'+d.x+'\",';a+='\"y\":\"'+d.y+'\"}'}else{if(d.kty===\"oct\"){if(typeof d.k!=\"string\"){throw\"wrong k value for oct(symmetric) key\"}a+='\"kty\":\"'+d.kty+'\",';a+='\"k\":\"'+d.k+'\"}'}}}var b=rstrtohex(a);var c=KJUR.crypto.Util.hashHex(b,\"sha256\");var e=hextob64u(c);return e};KJUR.jws.IntDate={};KJUR.jws.IntDate.get=function(c){var b=KJUR.jws.IntDate,d=b.getNow,a=b.getZulu;if(c==\"now\"){return d()}else{if(c==\"now + 1hour\"){return d()+60*60}else{if(c==\"now + 1day\"){return d()+60*60*24}else{if(c==\"now + 1month\"){return d()+60*60*24*30}else{if(c==\"now + 1year\"){return d()+60*60*24*365}else{if(c.match(/Z$/)){return a(c)}else{if(c.match(/^[0-9]+$/)){return parseInt(c)}}}}}}}throw\"unsupported format: \"+c};KJUR.jws.IntDate.getZulu=function(a){return zulutosec(a)};KJUR.jws.IntDate.getNow=function(){var a=~~(new Date()/1000);return a};KJUR.jws.IntDate.intDate2UTCString=function(a){var b=new Date(a*1000);return b.toUTCString()};KJUR.jws.IntDate.intDate2Zulu=function(e){var i=new Date(e*1000),h=(\"0000\"+i.getUTCFullYear()).slice(-4),g=(\"00\"+(i.getUTCMonth()+1)).slice(-2),b=(\"00\"+i.getUTCDate()).slice(-2),a=(\"00\"+i.getUTCHours()).slice(-2),c=(\"00\"+i.getUTCMinutes()).slice(-2),f=(\"00\"+i.getUTCSeconds()).slice(-2);return h+g+b+a+c+f+\"Z\"};\nif(typeof KJUR==\"undefined\"||!KJUR){KJUR={}}if(typeof KJUR.jws==\"undefined\"||!KJUR.jws){KJUR.jws={}}KJUR.jws.JWSJS=function(){var c=KJUR,b=c.jws,a=b.JWS,d=a.readSafeJSONString;this.aHeader=[];this.sPayload=\"\";this.aSignature=[];this.init=function(){this.aHeader=[];this.sPayload=undefined;this.aSignature=[]};this.initWithJWS=function(f){this.init();var e=f.split(\".\");if(e.length!=3){throw\"malformed input JWS\"}this.aHeader.push(e[0]);this.sPayload=e[1];this.aSignature.push(e[2])};this.addSignature=function(e,h,m,k){if(this.sPayload===undefined||this.sPayload===null){throw\"there's no JSON-JS signature to add.\"}var l=this.aHeader.length;if(this.aHeader.length!=this.aSignature.length){throw\"aHeader.length != aSignature.length\"}try{var f=KJUR.jws.JWS.sign(e,h,this.sPayload,m,k);var j=f.split(\".\");var n=j[0];var g=j[2];this.aHeader.push(j[0]);this.aSignature.push(j[2])}catch(i){if(this.aHeader.length>l){this.aHeader.pop()}if(this.aSignature.length>l){this.aSignature.pop()}throw\"addSignature failed: \"+i}};this.verifyAll=function(h){if(this.aHeader.length!==h.length||this.aSignature.length!==h.length){return false}for(var g=0;g<h.length;g++){var f=h[g];if(f.length!==2){return false}var e=this.verifyNth(g,f[0],f[1]);if(e===false){return false}}return true};this.verifyNth=function(f,j,g){if(this.aHeader.length<=f||this.aSignature.length<=f){return false}var h=this.aHeader[f];var k=this.aSignature[f];var l=h+\".\"+this.sPayload+\".\"+k;var e=false;try{e=a.verify(l,j,g)}catch(i){return false}return e};this.readJWSJS=function(g){if(typeof g===\"string\"){var f=d(g);if(f==null){throw\"argument is not safe JSON object string\"}this.aHeader=f.headers;this.sPayload=f.payload;this.aSignature=f.signatures}else{try{if(g.headers.length>0){this.aHeader=g.headers}else{throw\"malformed header\"}if(typeof g.payload===\"string\"){this.sPayload=g.payload}else{throw\"malformed signatures\"}if(g.signatures.length>0){this.aSignatures=g.signatures}else{throw\"malformed signatures\"}}catch(e){throw\"malformed JWS-JS JSON object: \"+e}}};this.getJSON=function(){return{headers:this.aHeader,payload:this.sPayload,signatures:this.aSignature}};this.isEmpty=function(){if(this.aHeader.length==0){return 1}return 0}};\nexports.SecureRandom = SecureRandom;\nexports.rng_seed_time = rng_seed_time;\n\nexports.BigInteger = BigInteger;\nexports.RSAKey = RSAKey;\nexports.ECDSA = KJUR.crypto.ECDSA;\nexports.DSA = KJUR.crypto.DSA;\nexports.Signature = KJUR.crypto.Signature;\nexports.MessageDigest = KJUR.crypto.MessageDigest;\nexports.Mac = KJUR.crypto.Mac;\nexports.Cipher = KJUR.crypto.Cipher;\nexports.KEYUTIL = KEYUTIL;\nexports.ASN1HEX = ASN1HEX;\nexports.X509 = X509;\nexports.CryptoJS = CryptoJS;\n\n// ext/base64.js\nexports.b64tohex = b64tohex;\nexports.b64toBA = b64toBA;\n\n// base64x.js\nexports.stoBA = stoBA;\nexports.BAtos = BAtos;\nexports.BAtohex = BAtohex;\nexports.stohex = stohex;\nexports.stob64 = stob64;\nexports.stob64u = stob64u;\nexports.b64utos = b64utos;\nexports.b64tob64u = b64tob64u;\nexports.b64utob64 = b64utob64;\nexports.hex2b64 = hex2b64;\nexports.hextob64u = hextob64u;\nexports.b64utohex = b64utohex;\nexports.utf8tob64u = utf8tob64u;\nexports.b64utoutf8 = b64utoutf8;\nexports.utf8tob64 = utf8tob64;\nexports.b64toutf8 = b64toutf8;\nexports.utf8tohex = utf8tohex;\nexports.hextoutf8 = hextoutf8;\nexports.hextorstr = hextorstr;\nexports.rstrtohex = rstrtohex;\nexports.hextob64 = hextob64;\nexports.hextob64nl = hextob64nl;\nexports.b64nltohex = b64nltohex;\nexports.hextopem = hextopem;\nexports.pemtohex = pemtohex;\nexports.hextoArrayBuffer = hextoArrayBuffer;\nexports.ArrayBuffertohex = ArrayBuffertohex;\nexports.zulutomsec = zulutomsec;\nexports.zulutosec = zulutosec;\nexports.zulutodate = zulutodate;\nexports.datetozulu = datetozulu;\nexports.uricmptohex = uricmptohex;\nexports.hextouricmp = hextouricmp;\nexports.ipv6tohex = ipv6tohex;\nexports.hextoipv6 = hextoipv6;\nexports.hextoip = hextoip;\nexports.iptohex = iptohex;\nexports.encodeURIComponentAll = encodeURIComponentAll;\nexports.newline_toUnix = newline_toUnix;\nexports.newline_toDos = newline_toDos;\nexports.hextoposhex = hextoposhex;\nexports.intarystrtohex = intarystrtohex;\nexports.strdiffidx = strdiffidx;\n\n// name spaces\nexports.KJUR = KJUR;\nexports.crypto = KJUR.crypto;\nexports.asn1 = KJUR.asn1;\nexports.jws = KJUR.jws;\nexports.lang = KJUR.lang;\n\n\n","/* global $, APP */\n/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { I18nextProvider } from 'react-i18next';\nimport { Provider } from 'react-redux';\n\nimport { Avatar } from '../../../react/features/base/avatar';\nimport { i18next } from '../../../react/features/base/i18n';\nimport { PresenceLabel } from '../../../react/features/presence-status';\nimport LargePokerContainer from '../../../react/features/poker/components/LargePokerContainer';\n/* eslint-enable no-unused-vars */\n\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\nimport { VIDEO_TYPE } from '../../../react/features/base/media';\nimport {\n    JitsiParticipantConnectionStatus\n} from '../../../react/features/base/lib-jitsi-meet';\nimport {\n    updateKnownLargeVideoResolution\n} from '../../../react/features/large-video';\nimport { createDeferred } from '../../util/helpers';\nimport UIEvents from '../../../service/UI/UIEvents';\nimport UIUtil from '../util/UIUtil';\nimport { VideoContainer, VIDEO_CONTAINER_TYPE } from './VideoContainer';\n\nimport AudioLevels from '../audio_levels/AudioLevels';\n\nconst DESKTOP_CONTAINER_TYPE = 'desktop';\n\n/**\n * Manager for all Large containers.\n */\nexport default class LargeVideoManager {\n    /**\n     * Checks whether given container is a {@link VIDEO_CONTAINER_TYPE}.\n     * FIXME currently this is a workaround for the problem where video type is\n     * mixed up with container type.\n     * @param {string} containerType\n     * @return {boolean}\n     */\n    static isVideoContainer(containerType) {\n        return containerType === VIDEO_CONTAINER_TYPE\n            || containerType === DESKTOP_CONTAINER_TYPE;\n    }\n\n    /**\n     *\n     */\n    constructor(emitter) {\n        /**\n         * The map of <tt>LargeContainer</tt>s where the key is the video\n         * container type.\n         * @type {Object.<string, LargeContainer>}\n         */\n        this.containers = {};\n        this.eventEmitter = emitter;\n\n        this.state = VIDEO_CONTAINER_TYPE;\n\n        // FIXME: We are passing resizeContainer as parameter which is calling\n        // Container.resize. Probably there's better way to implement this.\n        this.videoContainer = new VideoContainer(\n            () => this.resizeContainer(VIDEO_CONTAINER_TYPE), emitter);\n        this.addContainer(VIDEO_CONTAINER_TYPE, this.videoContainer);\n\n        // use the same video container to handle desktop tracks\n        this.addContainer(DESKTOP_CONTAINER_TYPE, this.videoContainer);\n\n        this.width = 0;\n        this.height = 0;\n\n        /**\n         * Cache the aspect ratio of the video displayed to detect changes to\n         * the aspect ratio on video resize events.\n         *\n         * @type {number}\n         */\n        this._videoAspectRatio = 0;\n\n        this.$container = $('#largeVideoContainer');\n\n        this.$container.css({\n            display: 'inline-block'\n        });\n\n        this.$container.hover(\n            e => this.onHoverIn(e),\n            e => this.onHoverOut(e)\n        );\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onVideoResolutionUpdate\n            = this._onVideoResolutionUpdate.bind(this);\n\n        this.videoContainer.addResizeListener(this._onVideoResolutionUpdate);\n\n        this._dominantSpeakerAvatarContainer\n            = document.getElementById('dominantSpeakerAvatarContainer');\n\n        this._dominantSpeakerPokerContainer\n            = this.$container.find('.poker-container').get(0);\n    }\n\n    /**\n     * Removes any listeners registered on child components, including\n     * React Components.\n     *\n     * @returns {void}\n     */\n    destroy() {\n        this.videoContainer.removeResizeListener(\n            this._onVideoResolutionUpdate);\n\n        this.removePresenceLabel();\n\n        ReactDOM.unmountComponentAtNode(this._dominantSpeakerAvatarContainer);\n        ReactDOM.unmountComponentAtNode(this._dominantSpeakerPokerContainer);\n\n        this.$container.css({ display: 'none' });\n    }\n\n    /**\n     *\n     */\n    onHoverIn(e) {\n        if (!this.state) {\n            return;\n        }\n        const container = this.getCurrentContainer();\n\n        container.onHoverIn(e);\n    }\n\n    /**\n     *\n     */\n    onHoverOut(e) {\n        if (!this.state) {\n            return;\n        }\n        const container = this.getCurrentContainer();\n\n        container.onHoverOut(e);\n    }\n\n    /**\n     *\n     */\n    get id() {\n        const container = this.getCurrentContainer();\n\n        // If a user switch for large video is in progress then provide what\n        // will be the end result of the update.\n        if (this.updateInProcess\n            && this.newStreamData\n            && this.newStreamData.id !== container.id) {\n            return this.newStreamData.id;\n        }\n\n        return container.id;\n    }\n\n    /**\n     *\n     */\n    scheduleLargeVideoUpdate() {\n        if (this.updateInProcess || !this.newStreamData) {\n            return;\n        }\n\n        this.updateInProcess = true;\n\n        // Include hide()/fadeOut only if we're switching between users\n        // eslint-disable-next-line eqeqeq\n        const container = this.getCurrentContainer();\n        const isUserSwitch = this.newStreamData.id !== container.id;\n        const preUpdate = isUserSwitch ? container.hide() : Promise.resolve();\n\n        preUpdate.then(() => {\n            const { id, stream, videoType, resolve } = this.newStreamData;\n\n            // FIXME this does not really make sense, because the videoType\n            // (camera or desktop) is a completely different thing than\n            // the video container type (Etherpad, SharedVideo, VideoContainer).\n            const isVideoContainer\n                = LargeVideoManager.isVideoContainer(videoType);\n\n            this.newStreamData = null;\n\n            logger.info(`hover in ${id}`);\n            this.state = videoType;\n            // eslint-disable-next-line no-shadow\n            const container = this.getCurrentContainer();\n\n            container.setStream(id, stream, videoType);\n\n            // change the avatar url on large\n            this.updateAvatar();\n            this.updatePoker();\n\n            // If the user's connection is disrupted then the avatar will be\n            // displayed in case we have no video image cached. That is if\n            // there was a user switch (image is lost on stream detach) or if\n            // the video was not rendered, before the connection has failed.\n            const wasUsersImageCached\n                = !isUserSwitch && container.wasVideoRendered;\n            const isVideoMuted = !stream || stream.isMuted();\n\n            const connectionStatus\n                = APP.conference.getParticipantConnectionStatus(id);\n            const isVideoRenderable\n                = !isVideoMuted\n                    && (APP.conference.isLocalId(id)\n                        || connectionStatus\n                                === JitsiParticipantConnectionStatus.ACTIVE\n                        || wasUsersImageCached);\n\n            const showAvatar\n                = isVideoContainer\n                    && ((APP.conference.isAudioOnly() && videoType !== VIDEO_TYPE.DESKTOP) || !isVideoRenderable);\n\n            let promise;\n\n            // do not show stream if video is muted\n            // but we still should show watermark\n            if (showAvatar) {\n                this.showWatermark(true);\n\n                // If the intention of this switch is to show the avatar\n                // we need to make sure that the video is hidden\n                promise = container.hide();\n            } else {\n                promise = container.show();\n            }\n\n            // show the avatar on large if needed\n            container.showAvatar(showAvatar);\n\n            // Clean up audio level after previous speaker.\n            if (showAvatar) {\n                this.updateLargeVideoAudioLevel(0);\n            }\n\n            const messageKey\n                = connectionStatus === JitsiParticipantConnectionStatus.INACTIVE ? 'connection.LOW_BANDWIDTH' : null;\n\n            // Do not show connection status message in the audio only mode,\n            // because it's based on the video playback status.\n            const overrideAndHide = APP.conference.isAudioOnly();\n\n            this.updateParticipantConnStatusIndication(\n                    id,\n                    !overrideAndHide && messageKey);\n\n            // Change the participant id the presence label is listening to.\n            this.updatePresenceLabel(id);\n\n            this.videoContainer.positionRemoteStatusMessages();\n\n            // resolve updateLargeVideo promise after everything is done\n            promise.then(resolve);\n\n            return promise;\n        }).then(() => {\n            // after everything is done check again if there are any pending\n            // new streams.\n            this.updateInProcess = false;\n            this.eventEmitter.emit(UIEvents.LARGE_VIDEO_ID_CHANGED, this.id);\n            this.scheduleLargeVideoUpdate();\n        });\n    }\n\n    /**\n     * Shows/hides notification about participant's connectivity issues to be\n     * shown on the large video area.\n     *\n     * @param {string} id the id of remote participant(MUC nickname)\n     * @param {string|null} messageKey the i18n key of the message which will be\n     * displayed on the large video or <tt>null</tt> to hide it.\n     *\n     * @private\n     */\n    updateParticipantConnStatusIndication(id, messageKey) {\n        if (messageKey) {\n            // Get user's display name\n            const displayName\n                = APP.conference.getParticipantDisplayName(id);\n\n            this._setRemoteConnectionMessage(\n                messageKey,\n                { displayName });\n\n            // Show it now only if the VideoContainer is on top\n            this.showRemoteConnectionMessage(\n                LargeVideoManager.isVideoContainer(this.state));\n        } else {\n            // Hide the message\n            this.showRemoteConnectionMessage(false);\n        }\n\n    }\n\n    /**\n     * Update large video.\n     * Switches to large video even if previously other container was visible.\n     * @param userID the userID of the participant associated with the stream\n     * @param {JitsiTrack?} stream new stream\n     * @param {string?} videoType new video type\n     * @returns {Promise}\n     */\n    updateLargeVideo(userID, stream, videoType) {\n        if (this.newStreamData) {\n            this.newStreamData.reject();\n        }\n\n        this.newStreamData = createDeferred();\n        this.newStreamData.id = userID;\n        this.newStreamData.stream = stream;\n        this.newStreamData.videoType = videoType;\n\n        this.scheduleLargeVideoUpdate();\n\n        return this.newStreamData.promise;\n    }\n\n    /**\n     * Update container size.\n     */\n    updateContainerSize() {\n        this.width = UIUtil.getAvailableVideoWidth();\n        this.height = window.innerHeight;\n    }\n\n    /**\n     * Resize Large container of specified type.\n     * @param {string} type type of container which should be resized.\n     * @param {boolean} [animate=false] if resize process should be animated.\n     */\n    resizeContainer(type, animate = false) {\n        const container = this.getContainer(type);\n\n        container.resize(this.width, this.height, animate);\n    }\n\n    /**\n     * Resize all Large containers.\n     * @param {boolean} animate if resize process should be animated.\n     */\n    resize(animate) {\n        // resize all containers\n        Object.keys(this.containers)\n            .forEach(type => this.resizeContainer(type, animate));\n    }\n\n    /**\n     * Updates the src of the dominant speaker avatar\n     */\n    updateAvatar() {\n        ReactDOM.render(\n            <Provider store = { APP.store }>\n                <Avatar\n                    id = \"dominantSpeakerAvatar\"\n                    participantId = { this.id }\n                    size = { 200 } />\n            </Provider>,\n            this._dominantSpeakerAvatarContainer\n        );\n    }\n\n    updatePoker() {\n        ReactDOM.render(\n            <Provider store={APP.store}>\n                <I18nextProvider i18n={i18next}>\n                    <LargePokerContainer participantId = { this.id }/>\n                </I18nextProvider>\n            </Provider>,\n            this._dominantSpeakerPokerContainer\n        );\n    }\n\n    /**\n     * Updates the audio level indicator of the large video.\n     *\n     * @param lvl the new audio level to set\n     */\n    updateLargeVideoAudioLevel(lvl) {\n        AudioLevels.updateLargeVideoAudioLevel('dominantSpeaker', lvl);\n    }\n\n    /**\n     * Displays a message of the passed in participant id's presence status. The\n     * message will not display if the remote connection message is displayed.\n     *\n     * @param {string} id - The participant ID whose associated user's presence\n     * status should be displayed.\n     * @returns {void}\n     */\n    updatePresenceLabel(id) {\n        const isConnectionMessageVisible\n            = $('#remoteConnectionMessage').is(':visible');\n\n        if (isConnectionMessageVisible) {\n            this.removePresenceLabel();\n\n            return;\n        }\n\n        const presenceLabelContainer = $('#remotePresenceMessage');\n\n        if (presenceLabelContainer.length) {\n            ReactDOM.render(\n                <Provider store = { APP.store }>\n                    <I18nextProvider i18n = { i18next }>\n                        <PresenceLabel\n                            participantID = { id }\n                            className = 'presence-label' />\n                    </I18nextProvider>\n                </Provider>,\n                presenceLabelContainer.get(0));\n        }\n    }\n\n    /**\n     * Removes the messages about the displayed participant's presence status.\n     *\n     * @returns {void}\n     */\n    removePresenceLabel() {\n        const presenceLabelContainer = $('#remotePresenceMessage');\n\n        if (presenceLabelContainer.length) {\n            ReactDOM.unmountComponentAtNode(presenceLabelContainer.get(0));\n        }\n    }\n\n    /**\n     * Show or hide watermark.\n     * @param {boolean} show\n     */\n    showWatermark(show) {\n        $('.watermark').css('visibility', show ? 'visible' : 'hidden');\n    }\n\n    /**\n     * Shows hides the \"avatar\" message which is to be displayed either in\n     * the middle of the screen or below the avatar image.\n     *\n     * @param {boolean|undefined} [show=undefined] <tt>true</tt> to show\n     * the avatar message or <tt>false</tt> to hide it. If not provided then\n     * the connection status of the user currently on the large video will be\n     * obtained form \"APP.conference\" and the message will be displayed if\n     * the user's connection is either interrupted or inactive.\n     */\n    showRemoteConnectionMessage(show) {\n        if (typeof show !== 'boolean') {\n            const connStatus\n                = APP.conference.getParticipantConnectionStatus(this.id);\n\n            // eslint-disable-next-line no-param-reassign\n            show = !APP.conference.isLocalId(this.id)\n                && (connStatus === JitsiParticipantConnectionStatus.INTERRUPTED\n                    || connStatus\n                        === JitsiParticipantConnectionStatus.INACTIVE);\n        }\n\n        if (show) {\n            $('#remoteConnectionMessage').css({ display: 'block' });\n        } else {\n            $('#remoteConnectionMessage').hide();\n        }\n    }\n\n    /**\n     * Updates the text which describes that the remote user is having\n     * connectivity issues.\n     *\n     * @param {string} msgKey the translation key which will be used to get\n     * the message text.\n     * @param {object} msgOptions translation options object.\n     *\n     * @private\n     */\n    _setRemoteConnectionMessage(msgKey, msgOptions) {\n        if (msgKey) {\n            $('#remoteConnectionMessage')\n                .attr('data-i18n', msgKey)\n                .attr('data-i18n-options', JSON.stringify(msgOptions));\n            APP.translation.translateElement(\n                $('#remoteConnectionMessage'), msgOptions);\n        }\n    }\n\n    /**\n     * Add container of specified type.\n     * @param {string} type container type\n     * @param {LargeContainer} container container to add.\n     */\n    addContainer(type, container) {\n        if (this.containers[type]) {\n            throw new Error(`container of type ${type} already exist`);\n        }\n\n        this.containers[type] = container;\n        this.resizeContainer(type);\n    }\n\n    /**\n     * Get Large container of specified type.\n     * @param {string} type container type.\n     * @returns {LargeContainer}\n     */\n    getContainer(type) {\n        const container = this.containers[type];\n\n        if (!container) {\n            throw new Error(`container of type ${type} doesn't exist`);\n        }\n\n        return container;\n    }\n\n    /**\n     * Returns {@link LargeContainer} for the current {@link state}\n     *\n     * @return {LargeContainer}\n     *\n     * @throws an <tt>Error</tt> if there is no container for the current\n     * {@link state}.\n     */\n    getCurrentContainer() {\n        return this.getContainer(this.state);\n    }\n\n    /**\n     * Returns type of the current {@link LargeContainer}\n     * @return {string}\n     */\n    getCurrentContainerType() {\n        return this.state;\n    }\n\n    /**\n     * Remove Large container of specified type.\n     * @param {string} type container type.\n     */\n    removeContainer(type) {\n        if (!this.containers[type]) {\n            throw new Error(`container of type ${type} doesn't exist`);\n        }\n\n        delete this.containers[type];\n    }\n\n    /**\n     * Show Large container of specified type.\n     * Does nothing if such container is already visible.\n     * @param {string} type container type.\n     * @returns {Promise}\n     */\n    showContainer(type) {\n        if (this.state === type) {\n            return Promise.resolve();\n        }\n\n        const oldContainer = this.containers[this.state];\n\n        // FIXME when video is being replaced with other content we need to hide\n        // companion icons/messages. It would be best if the container would\n        // be taking care of it by itself, but that is a bigger refactoring\n\n        if (LargeVideoManager.isVideoContainer(this.state)) {\n            this.showWatermark(false);\n            this.showRemoteConnectionMessage(false);\n        }\n        oldContainer.hide();\n\n        this.state = type;\n        const container = this.getContainer(type);\n\n        return container.show().then(() => {\n            if (LargeVideoManager.isVideoContainer(type)) {\n                // FIXME when video appears on top of other content we need to\n                // show companion icons/messages. It would be best if\n                // the container would be taking care of it by itself, but that\n                // is a bigger refactoring\n                this.showWatermark(true);\n\n                // \"avatar\" and \"video connection\" can not be displayed both\n                // at the same time, but the latter is of higher priority and it\n                // will hide the avatar one if will be displayed.\n                this.showRemoteConnectionMessage(/* fetch the current state */);\n            }\n        });\n    }\n\n    /**\n     * Changes the flipX state of the local video.\n     * @param val {boolean} true if flipped.\n     */\n    onLocalFlipXChange(val) {\n        this.videoContainer.setLocalFlipX(val);\n    }\n\n    /**\n     * Dispatches an action to update the known resolution state of the large video and adjusts container sizes when the\n     * resolution changes.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onVideoResolutionUpdate() {\n        const { height, width } = this.videoContainer.getStreamSize();\n        const { resolution } = APP.store.getState()['features/large-video'];\n\n        if (height !== resolution) {\n            APP.store.dispatch(updateKnownLargeVideoResolution(height));\n        }\n\n        const currentAspectRatio = height === 0 ? 0 : width / height;\n\n        if (this._videoAspectRatio !== currentAspectRatio) {\n            this._videoAspectRatio = currentAspectRatio;\n            this.resize();\n        }\n    }\n}\n","/**\n * pokersolver v2.1.2\n * Copyright (c) 2016, James Simpson of GoldFire Studios\n * http://goldfirestudios.com\n */\n\n(function() {\n  'use strict';\n\n  // NOTE: The 'joker' will be denoted with a value of 'O' and any suit.\n  var values = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A'];\n\n  /**\n   * Base Card class that defines a single card.\n   */\n  class Card {\n    constructor(str) {\n      this.value = str.substr(0, 1);\n      this.suit = str.substr(1, 1).toLowerCase();\n      this.rank = values.indexOf(this.value);\n      this.wildValue = str.substr(0, 1);\n    }\n\n    // TODO: Add a parameter to leave out the suit and update the this.descr calls.\n    toString() {\n      return this.wildValue.replace('T', '10') + this.suit;\n    }\n\n    static sort(a, b) {\n      if (a.rank > b.rank) {\n        return -1;\n      } else if (a.rank < b.rank) {\n        return 1;\n      } else {\n        return 0;\n      }\n    }\n  }\n\n  /**\n   * Base Hand class that handles comparisons of full hands.\n   */\n  class Hand {\n    constructor(cards, name, game, canDisqualify) {\n      this.cardPool = [];\n      this.cards = [];\n      this.suits = {};\n      this.values = [];\n      this.wilds = [];\n      this.name = name;\n      this.game = game;\n      this.sfLength = 0;\n      this.alwaysQualifies = true;\n\n      // Qualification rules apply for dealer's hand.\n      // Also applies for single player games, like video poker.\n      if (canDisqualify && this.game.lowestQualified) {\n        this.alwaysQualifies = false;\n      }\n      \n      // Get rank based on game.\n      var handRank = this.game.handValues.length;\n      for (var i=0; i<this.game.handValues.length; i++) {\n        if (this.game.handValues[i] === this.constructor) {\n          break;\n        }\n      }\n      this.rank = handRank - i;\n\n      // Set up the pool of cards.\n      this.cardPool = cards.map(function(c) {\n        return (typeof c === 'string') ? new Card(c) : c;\n      });\n\n      // Fix the card ranks for wild cards, and sort.\n      for (var i=0; i<this.cardPool.length; i++) {\n        card = this.cardPool[i];\n        if (card.value === this.game.wildValue) {\n          card.rank = -1;\n        }\n      }\n      this.cardPool = this.cardPool.sort(Card.sort);\n\n      // Create the arrays of suits and values.\n      var obj, obj1, key, key1, card;\n      for (var i=0; i<this.cardPool.length; i++) {\n        // Make sure this value already exists in the object.\n        card = this.cardPool[i];\n\n        // We do something special if this is a wild card.\n        if (card.rank === -1) {\n          this.wilds.push(card);\n        } else {\n          (obj = this.suits)[key = card.suit] || (obj[key] = []);\n          (obj1 = this.values)[key1 = card.rank] || (obj1[key1] = []);\n\n          // Add the value to the array for that type in the object.\n          this.suits[card.suit].push(card);\n          this.values[card.rank].push(card);\n        }\n      }\n\n      this.values.reverse();\n      this.isPossible = this.solve();\n    }\n\n    /**\n     * Compare current hand with another to determine which is the winner.\n     * @param  {Hand} a Hand to compare to.\n     * @return {Number}\n     */\n    compare(a) {\n      if (this.rank < a.rank) {\n        return 1;\n      } else if (this.rank > a.rank) {\n        return -1;\n      }\n\n      var result = 0;\n      for (var i=0; i<=4; i++) {\n        if (this.cards[i] && a.cards[i] && this.cards[i].rank < a.cards[i].rank) {\n          result = 1;\n          break;\n        } else if (this.cards[i] && a.cards[i] && this.cards[i].rank > a.cards[i].rank) {\n          result = -1;\n          break;\n        }\n      }\n\n      return result;\n    }\n\n    /**\n     * Determine whether a hand loses to another.\n     * @param  {Hand} hand Hand to compare to.\n     * @return {Boolean}\n     */\n    loseTo(hand) {\n      return (this.compare(hand) > 0);\n    }\n\n    /**\n     * Determine the number of cards in a hand of a rank.\n     * @param  {Number} val Index of this.values.\n     * @return {Number} Number of cards having the rank, including wild cards.\n     */\n    getNumCardsByRank(val) {\n      var cards = this.values[val];\n      var checkCardsLength = (cards) ? cards.length : 0;\n\n      for (var i=0; i<this.wilds.length; i++) {\n        if (this.wilds[i].rank > -1) {\n          continue;\n        } else if (cards) {\n          if (this.game.wildStatus === 1 || cards[0].rank === values.length - 1) {\n            checkCardsLength += 1;\n          }\n        } else if (this.game.wildStatus === 1 || val === values.length - 1) {\n          checkCardsLength += 1;\n        }\n      }\n\n      return checkCardsLength;\n    }\n\n    /**\n     * Determine the cards in a suit for a flush.\n     * @param  {String} suit Key for this.suits.\n     * @param  {Boolean} setRanks Whether to set the ranks for the wild cards.\n     * @return {Array} Cards having the suit, including wild cards.\n     */\n    getCardsForFlush(suit, setRanks) {\n      var cards = (this.suits[suit] || []).sort(Card.sort);\n\n      for (var i=0; i<this.wilds.length; i++) {\n        var wild = this.wilds[i];\n\n        if (setRanks) {\n          var j=0;\n          while (j<values.length && j<cards.length) {\n            if (cards[j].rank === values.length-1-j) {\n              j += 1;\n            } else {\n              break;\n            }\n          }\n          wild.rank = values.length-1-j;\n          wild.wildValue = values[wild.rank];\n        }\n\n        cards.push(wild);\n        cards = cards.sort(Card.sort);\n      }\n\n      return cards;\n    }\n\n    /**\n     * Resets the rank and wild values of the wild cards.\n     */\n    resetWildCards() {\n      for (var i=0; i<this.wilds.length; i++) {\n        this.wilds[i].rank = -1;\n        this.wilds[i].wildValue = this.wilds[i].value;\n      }\n    }\n\n    /**\n     * Highest card comparison.\n     * @return {Array} Highest cards\n     */\n    nextHighest() {\n      var picks;\n      var excluding = [];\n      excluding = excluding.concat(this.cards);\n\n      picks = this.cardPool.filter(function(card) {\n        if (excluding.indexOf(card) < 0) {\n          return true;\n        }\n      });\n\n      // Account for remaining wild card when it must be ace.\n      if (this.game.wildStatus === 0) {\n        for (var i=0; i<picks.length; i++) {\n          var card = picks[i];\n          if (card.rank === -1) {\n            card.wildValue = 'A';\n            card.rank = values.length - 1;\n          }\n        }\n        picks = picks.sort(Card.sort);\n      }\n\n      return picks;\n    }\n\n    /**\n     * Return list of contained cards in human readable format.\n     * @return {String}\n     */\n    toString() {\n      var cards = this.cards.map(function(c) {\n        return c.toString();\n      });\n\n      return cards.join(', ');\n    }\n\n    /**\n     * Return array of contained cards.\n     * @return {Array}\n     */\n    toArray() {\n      var cards = this.cards.map(function(c) {\n        return c.toString();\n      });\n\n      return cards;\n    }\n\n    /**\n     * Determine if qualifying hand.\n     * @return {Boolean}\n     */\n    qualifiesHigh() {\n      if (!this.game.lowestQualified || this.alwaysQualifies) {\n        return true;\n      }\n\n      return (this.compare(Hand.solve(this.game.lowestQualified, this.game)) <= 0);\n    }\n\n    /**\n     * Find highest ranked hands and remove any that don't qualify or lose to another hand.\n     * @param  {Array} hands Hands to evaluate.\n     * @return {Array}       Winning hands.\n     */\n    static winners(hands) {\n      hands = hands.filter(function(h) {\n        return h.qualifiesHigh();\n      });\n\n      var highestRank = Math.max.apply(Math, hands.map(function(h) {\n        return h.rank;\n      }));\n\n      hands = hands.filter(function(h) {\n        return h.rank === highestRank;\n      });\n\n      hands = hands.filter(function(h) {\n        var lose = false;\n        for (var i=0; i<hands.length; i++) {\n          lose = h.loseTo(hands[i]);\n          if (lose) {\n            break;\n          }\n        }\n\n        return !lose;\n      });\n\n      return hands;\n    }\n\n    /**\n     * Build and return the best hand.\n     * @param  {Array} cards Array of cards (['Ad', '3c', 'Th', ...]).\n     * @param  {String} game Game being played.\n     * @param  {Boolean} canDisqualify Check for a qualified hand.\n     * @return {Hand}       Best hand.\n     */\n    static solve(cards, game, canDisqualify) {\n      game = game || 'standard';\n      game = (typeof game === 'string') ? new Game(game) : game;\n      cards = cards || [''];\n\n      var hands = game.handValues;\n      var result = null;\n\n      for (var i=0; i<hands.length; i++) {\n        result = new hands[i](cards, game, canDisqualify);\n        if (result.isPossible) {\n          break;\n        }\n      }\n\n      return result;\n    }\n\n    /**\n     * Separate cards based on if they are wild cards.\n     * @param  {Array} cards Array of cards (['Ad', '3c', 'Th', ...]).\n     * @param  {Game} game Game being played.\n     * @return {Array} [wilds, nonWilds] Wild and non-Wild Cards.\n     */\n    static stripWilds(cards, game) {\n      var card, wilds, nonWilds;\n      cards = cards || [''];\n      wilds = [];\n      nonWilds = [];\n\n      for (var i=0; i<cards.length; i++) {\n        card = cards[i];\n        if (card.rank === -1) {\n          wilds.push(cards[i]);  \n        } else {\n          nonWilds.push(cards[i]);  \n        }\n      }\n\n      return [wilds, nonWilds];\n    }\n  }\n\n  class StraightFlush extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Straight Flush', game, canDisqualify);\n    }\n\n    solve() {\n      var cards;\n      this.resetWildCards();\n      var possibleStraight = null;\n      var nonCards = [];\n\n      for (var suit in this.suits) {\n        cards = this.getCardsForFlush(suit, false);\n        if (cards && cards.length >= this.game.sfQualify) {\n          possibleStraight = cards;\n          break;\n        } \n      }\n\n      if (possibleStraight) {\n        if (this.game.descr !== 'standard') {\n          for (var suit in this.suits) {\n            if (possibleStraight[0].suit !== suit) {\n              nonCards = nonCards.concat(this.suits[suit] || []);\n              nonCards = Hand.stripWilds(nonCards, this.game)[1];\n            }\n          }\n        }\n        var straight = new Straight(possibleStraight, this.game);\n        if (straight.isPossible) {\n          this.cards = straight.cards;\n          this.cards = this.cards.concat(nonCards);\n          this.sfLength = straight.sfLength;\n        }\n      }\n\n      if (this.cards[0] && this.cards[0].rank === 13) {\n        this.descr = 'Royal Flush';\n      } else if (this.cards.length >= this.game.sfQualify) {\n        this.descr = this.name + ', ' + this.cards[0].toString().slice(0, -1) + suit + ' High';\n      }\n\n      return this.cards.length >= this.game.sfQualify;\n    }\n  }\n\n  class RoyalFlush extends StraightFlush {\n    constructor(cards, game, canDisqualify) {\n      super(cards, game, canDisqualify);\n    }\n\n    solve() {\n      this.resetWildCards();\n      var result = super.solve();\n      return result && this.descr === 'Royal Flush';\n    }\n  }\n\n  class NaturalRoyalFlush extends RoyalFlush {\n    constructor(cards, game, canDisqualify) {\n      super(cards, game, canDisqualify);\n    }\n\n    solve() {\n      var i = 0;\n      this.resetWildCards();\n      var result = super.solve();\n      if (result && this.cards) {\n        for (i=0; i<this.game.sfQualify && i<this.cards.length; i++) {\n          if (this.cards[i].value === this.game.wildValue) {\n            result = false;\n            this.descr = 'Wild Royal Flush';\n            break;\n          }\n        }\n        if (i === this.game.sfQualify) {\n          this.descr = 'Royal Flush';\n        }\n      }\n      return result;\n    }\n  }\n\n  class WildRoyalFlush extends RoyalFlush {\n    constructor(cards, game, canDisqualify) {\n      super(cards, game, canDisqualify);\n    }\n\n    solve() {\n      var i = 0;\n      this.resetWildCards();\n      var result = super.solve();\n      if (result && this.cards) {\n        for (i=0; i<this.game.sfQualify && i<this.cards.length; i++) {\n          if (this.cards[i].value === this.game.wildValue) {\n            this.descr = 'Wild Royal Flush';\n            break;\n          }\n        }\n        if (i === this.game.sfQualify) {\n          result = false;\n          this.descr = 'Royal Flush';\n        }\n      }\n      return result;\n    }\n  }\n\n  class FiveOfAKind extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Five of a Kind', game, canDisqualify);\n    }\n\n    solve() {\n      this.resetWildCards();\n\n      for (var i=0; i<this.values.length; i++) {\n        if (this.getNumCardsByRank(i) === 5) {\n          this.cards = this.values[i] || [];\n          for (var j=0; j<this.wilds.length && this.cards.length<5; j++) {\n            var wild = this.wilds[j];\n            if (this.cards) {\n              wild.rank = this.cards[0].rank;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n          this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-5));\n          break;\n        }\n      }\n\n      if (this.cards.length >= 5) {\n        this.descr = this.name + ', ' + this.cards[0].toString().slice(0, -1) + '\\'s';\n      }\n\n      return this.cards.length >= 5;\n    }\n  }\n\n  class FourOfAKindPairPlus extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Four of a Kind with Pair or Better', game, canDisqualify);\n    }\n\n    solve() {\n      var cards;\n      this.resetWildCards();\n\n      for (var i=0; i<this.values.length; i++) {\n        if (this.getNumCardsByRank(i) === 4) {\n          this.cards = this.values[i] || [];\n          for (var j=0; j<this.wilds.length && this.cards.length<4; j++) {\n            var wild = this.wilds[j];\n            if (this.cards) {\n              wild.rank = this.cards[0].rank;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n          break;\n        }\n      }\n\n      if (this.cards.length === 4) {\n        for (i=0; i<this.values.length; i++) {\n          cards = this.values[i];\n          if (cards && this.cards[0].wildValue === cards[0].wildValue) {\n            continue;\n          }\n          if (this.getNumCardsByRank(i) >= 2) {\n            this.cards = this.cards.concat(cards || []);\n            for (var j=0; j<this.wilds.length; j++) {\n              var wild = this.wilds[j];\n              if (wild.rank !== -1) {\n                continue;\n              }\n              if (cards) {\n                wild.rank = cards[0].rank;\n              } else if (this.cards[0].rank === values.length - 1 && this.game.wildStatus === 1) {\n                wild.rank = values.length - 2;\n              } else {\n                wild.rank = values.length - 1;\n              }\n              wild.wildValue = values[wild.rank];\n              this.cards.push(wild);\n            }\n            this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-6));\n            break;\n          }\n        }\n      }\n\n      if (this.cards.length >= 6) {\n        var type = this.cards[0].toString().slice(0, -1) + '\\'s over ' + this.cards[4].toString().slice(0, -1) + '\\'s';\n        this.descr = this.name + ', ' + type;\n      }\n\n      return this.cards.length >= 6;\n    }\n  }\n\n  class FourOfAKind extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Four of a Kind', game, canDisqualify);\n    }\n\n    solve() {\n      this.resetWildCards();\n\n      for (var i=0; i<this.values.length; i++) {\n        if (this.getNumCardsByRank(i) === 4) {\n          this.cards = this.values[i] || [];\n          for (var j=0; j<this.wilds.length && this.cards.length<4; j++) {\n            var wild = this.wilds[j];\n            if (this.cards) {\n              wild.rank = this.cards[0].rank;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n\n          this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-4));\n          break;\n        }\n      }\n\n      if (this.cards.length >= 4) {\n        if (this.game.noKickers) {\n          this.cards.length = 4;\n        }\n\n        this.descr = this.name + ', ' + this.cards[0].toString().slice(0, -1) + '\\'s';\n      }\n\n      return this.cards.length >= 4;\n    }\n  }\n\n  class FourWilds extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Four Wild Cards', game, canDisqualify);\n    }\n\n    solve() {\n      if (this.wilds.length === 4) {\n        this.cards = this.wilds;\n        this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-4));\n      }\n\n      if (this.cards.length >= 4) {\n        if (this.game.noKickers) {\n          this.cards.length = 4;\n        }\n\n        this.descr = this.name;\n      }\n\n      return this.cards.length >= 4;\n    }\n  }\n\n  class ThreeOfAKindTwoPair extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Three of a Kind with Two Pair', game, canDisqualify);\n    }\n\n    solve() {\n      var cards;\n      this.resetWildCards();\n\n      for (var i=0; i<this.values.length; i++) {\n        if (this.getNumCardsByRank(i) === 3) {\n          this.cards = this.values[i] || [];\n          for (var j=0; j<this.wilds.length && this.cards.length<3; j++) {\n            var wild = this.wilds[j];\n            if (this.cards) {\n              wild.rank = this.cards[0].rank;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n          break;\n        }\n      }\n\n      if (this.cards.length === 3) {\n        for (var i=0; i<this.values.length; i++) {\n          var cards = this.values[i];\n          if (cards && this.cards[0].wildValue === cards[0].wildValue) {\n            continue;\n          }\n          if (this.cards.length > 5 && this.getNumCardsByRank(i) === 2) {\n            this.cards = this.cards.concat(cards || []);\n            for (var j=0; j<this.wilds.length; j++) {\n              var wild = this.wilds[j];\n              if (wild.rank !== -1) {\n                continue;\n              }\n              if (cards) {\n                wild.rank = cards[0].rank;\n              } else if (this.cards[0].rank === values.length - 1 && this.game.wildStatus === 1) {\n                wild.rank = values.length - 2;\n              } else {\n                wild.rank = values.length - 1;\n              }\n              wild.wildValue = values[wild.rank];\n              this.cards.push(wild);\n            }\n            this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-4));\n            break;\n          } else if (this.getNumCardsByRank(i) === 2) {\n            this.cards = this.cards.concat(cards);\n            for (var j=0; j<this.wilds.length; j++) {\n              var wild = this.wilds[j];\n              if (wild.rank !== -1) {\n                continue;\n              }\n              if (cards) {\n                wild.rank = cards[0].rank;\n              } else if (this.cards[0].rank === values.length - 1 && this.game.wildStatus === 1) {\n                wild.rank = values.length - 2;\n              } else {\n                wild.rank = values.length - 1;\n              }\n              wild.wildValue = values[wild.rank];\n              this.cards.push(wild);\n            }\n          }\n        }\n      }\n\n      if (this.cards.length >= 7) {\n        var type = this.cards[0].toString().slice(0, -1) + '\\'s over ' + this.cards[3].toString().slice(0, -1) + '\\'s & ' + this.cards[5].value + '\\'s';\n        this.descr = this.name + ', ' + type;\n      }\n\n      return this.cards.length >= 7;\n    }\n  }\n\n  class FullHouse extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Full House', game, canDisqualify);\n    }\n\n    solve() {\n      var cards;\n      this.resetWildCards();\n\n      for (var i=0; i<this.values.length; i++) {\n        if (this.getNumCardsByRank(i) === 3) {\n          this.cards = this.values[i] || [];\n          for (var j=0; j<this.wilds.length && this.cards.length<3; j++) {\n            var wild = this.wilds[j];\n            if (this.cards) {\n              wild.rank = this.cards[0].rank;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n          break;\n        }\n      }\n\n      if (this.cards.length === 3) {\n        for (i=0; i<this.values.length; i++) {\n          cards = this.values[i];\n          if (cards && this.cards[0].wildValue === cards[0].wildValue) {\n            continue;\n          }\n          if (this.getNumCardsByRank(i) >= 2) {\n            this.cards = this.cards.concat(cards || []);\n            for (var j=0; j<this.wilds.length; j++) {\n              var wild = this.wilds[j];\n              if (wild.rank !== -1) {\n                continue;\n              }\n              if (cards) {\n                wild.rank = cards[0].rank;\n              } else if (this.cards[0].rank === values.length - 1 && this.game.wildStatus === 1) {\n                wild.rank = values.length - 2;\n              } else {\n                wild.rank = values.length - 1;\n              }\n              wild.wildValue = values[wild.rank];\n              this.cards.push(wild);\n            }\n            this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-5));\n            break;\n          }\n        }\n      }\n\n      if (this.cards.length >= 5) {\n        var type = this.cards[0].toString().slice(0, -1) + '\\'s over ' + this.cards[3].toString().slice(0, -1) + '\\'s';\n        this.descr = this.name + ', ' + type;\n      }\n\n      return this.cards.length >= 5;\n    }\n  }\n\n  class Flush extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Flush', game, canDisqualify);\n    }\n\n    solve() {\n      this.sfLength = 0;\n      this.resetWildCards();\n\n      for (var suit in this.suits) {\n        var cards = this.getCardsForFlush(suit, true);\n        if (cards.length >= this.game.sfQualify) {\n          this.cards = cards;\n          break;\n        }\n      }\n\n      if (this.cards.length >= this.game.sfQualify) {\n        this.descr = this.name + ', ' + this.cards[0].toString().slice(0, -1) + suit + ' High';\n        this.sfLength = this.cards.length;\n        if (this.cards.length < this.game.cardsInHand) {\n          this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-this.cards.length));\n        }\n      }\n\n      return this.cards.length >= this.game.sfQualify;\n    }\n  }\n\n  class Straight extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Straight', game, canDisqualify);\n    }\n\n    solve() {\n      var card, checkCards;\n      this.resetWildCards();\n\n      // There are still some games that count the wheel as second highest.\n      // These games do not have enough cards/wilds to make AKQJT and 5432A both possible.\n      if (this.game.wheelStatus === 1) {\n        this.cards = this.getWheel();\n        if (this.cards.length) {\n          var wildCount = 0;\n          for (var i=0; i<this.cards.length; i++) {\n            card = this.cards[i];\n            if (card.value === this.game.wildValue) {\n              wildCount += 1;\n            }\n            if (card.rank === 0) {\n              card.rank = values.indexOf('A');\n              card.wildValue = 'A';\n              if (card.value === '1') {\n                card.value = 'A';\n              }\n            }\n          }\n          this.cards = this.cards.sort(Card.sort);\n          for (; wildCount<this.wilds.length && this.cards.length < this.game.cardsInHand; wildCount++) {\n            card = this.wilds[wildCount];\n            card.rank = values.indexOf('A');\n            card.wildValue = 'A';\n            this.cards.push(card);\n          }\n          this.descr = this.name + ', Wheel';\n          this.sfLength = this.sfQualify;\n          if (this.cards[0].value === 'A') {\n            this.cards = this.cards.concat(this.nextHighest().slice(1, this.game.cardsInHand-this.cards.length+1));\n          } else {\n            this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-this.cards.length));\n          }\n          return true;\n        }\n        this.resetWildCards();\n      }\n\n      this.cards = this.getGaps();\n\n      // Now add the wild cards, if any, and set the appropriate ranks\n      for (var i=0; i<this.wilds.length; i++) {\n        card = this.wilds[i];\n        checkCards = this.getGaps(this.cards.length);\n        if (this.cards.length === checkCards.length) {\n          // This is an \"open-ended\" straight, the high rank is the highest possible rank.\n          if (this.cards[0].rank < (values.length - 1)) {\n            card.rank = this.cards[0].rank + 1;\n            card.wildValue = values[card.rank];\n            this.cards.push(card);\n          } else {\n            card.rank = this.cards[this.cards.length - 1].rank - 1;\n            card.wildValue = values[card.rank];\n            this.cards.push(card);\n          }\n        } else {\n          // This is an \"inside\" straight, the high card doesn't change.\n          for (var j=1; j<this.cards.length; j++) {\n            if (this.cards[j-1].rank - this.cards[j].rank > 1) {\n              card.rank = this.cards[j-1].rank - 1;\n              card.wildValue = values[card.rank];\n              this.cards.push(card);\n              break;\n            }\n          }\n        }\n        this.cards = this.cards.sort(Card.sort);\n      }\n      if (this.cards.length >= this.game.sfQualify) {\n        this.descr = this.name + ', ' + this.cards[0].toString().slice(0, -1) + ' High';\n        this.cards = this.cards.slice(0, this.game.cardsInHand);\n        this.sfLength = this.cards.length;\n        if (this.cards.length < this.game.cardsInHand) {\n          if (this.cards[this.sfLength-1].rank === 0) {\n            this.cards = this.cards.concat(this.nextHighest().slice(1, this.game.cardsInHand-this.cards.length+1));\n          } else {\n            this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-this.cards.length));\n          }\n        }\n      }\n\n      return this.cards.length >= this.game.sfQualify;\n    }\n\n    /**\n     * Get the number of gaps in the straight.\n     * @return {Array} Highest potential straight with fewest number of gaps.\n     */\n    getGaps(checkHandLength) {\n      var wildCards, cardsToCheck, i, card, gapCards, cardsList, gapCount, prevCard, diff;\n\n      var stripReturn = Hand.stripWilds(this.cardPool, this.game);\n      wildCards = stripReturn[0];\n      cardsToCheck = stripReturn[1];\n\n      for (i=0; i<cardsToCheck.length; i++) {\n        card = cardsToCheck[i];\n        if (card.wildValue === 'A') {\n          cardsToCheck.push(new Card('1' + card.suit));\n        }\n      }\n      cardsToCheck = cardsToCheck.sort(Card.sort);\n\n      if (checkHandLength) {\n        i = cardsToCheck[0].rank + 1;\n      } else {\n        checkHandLength = this.game.sfQualify;\n        i = values.length;\n      }\n\n      gapCards = [];\n      for (; i>0; i--) {\n        cardsList = [];\n        gapCount = 0;\n        for (var j=0; j<cardsToCheck.length; j++) {\n          card = cardsToCheck[j];\n          if (card.rank > i) {\n            continue;\n          }\n          prevCard = cardsList[cardsList.length - 1];\n          diff = (prevCard) ? prevCard.rank - card.rank : i - card.rank;\n\n          if (diff === null) {\n            cardsList.push(card);\n          } else if (checkHandLength < (gapCount + diff + cardsList.length)) {\n            break;\n          } else if (diff > 0) {\n            cardsList.push(card);\n            gapCount += (diff - 1);\n          }\n        }\n        if (cardsList.length > gapCards.length) {\n          gapCards = cardsList.slice();\n        }\n        if (this.game.sfQualify - gapCards.length <= wildCards.length) {\n          break;\n        }\n      }\n\n      return gapCards;\n    }\n\n    getWheel() {\n      var wildCards, cardsToCheck, i, card, wheelCards, wildCount, cardFound;\n\n      var stripReturn = Hand.stripWilds(this.cardPool, this.game);\n      wildCards = stripReturn[0];\n      cardsToCheck = stripReturn[1];\n\n      for (i=0; i<cardsToCheck.length; i++) {\n        card = cardsToCheck[i];\n        if (card.wildValue === 'A') {\n          cardsToCheck.push(new Card('1' + card.suit));\n        }\n      }\n      cardsToCheck = cardsToCheck.sort(Card.sort);\n\n      wheelCards = [];\n      wildCount = 0;\n      for (i = this.game.sfQualify-1; i>=0; i--) {\n        cardFound = false;\n        for (var j=0; j<cardsToCheck.length; j++) {\n          card = cardsToCheck[j];\n          if (card.rank > i) {\n            continue;\n          }\n          if (card.rank < i) {\n            break;\n          }\n          wheelCards.push(card);\n          cardFound = true;\n          break;\n        }\n        if (!cardFound) {\n          if (wildCount < wildCards.length) {\n            wildCards[wildCount].rank = i;\n            wildCards[wildCount].wildValue = values[i];\n            wheelCards.push(wildCards[wildCount]);\n            wildCount += 1;\n          } else {\n            return [];\n          }\n        }\n      }\n\n      return wheelCards;\n    }\n  }\n\n  class TwoThreeOfAKind extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Two Three Of a Kind', game, canDisqualify);\n    }\n\n    solve() {\n      this.resetWildCards();\n      for (var i=0; i<this.values.length; i++) {\n        var cards = this.values[i];\n        if (this.cards.length > 0 && this.getNumCardsByRank(i) === 3) {\n          this.cards = this.cards.concat(cards || []);\n          for (var j=0; j<this.wilds.length; j++) {\n            var wild = this.wilds[j];\n            if (wild.rank !== -1) {\n              continue;\n            }\n            if (cards) {\n              wild.rank = cards[0].rank;\n            } else if (this.cards[0].rank === values.length - 1 && this.game.wildStatus === 1) {\n              wild.rank = values.length - 2;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n          this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-6));\n          break;\n        } else if (this.getNumCardsByRank(i) === 3) {\n          this.cards = this.cards.concat(cards);\n          for (var j=0; j<this.wilds.length; j++) {\n            var wild = this.wilds[j];\n            if (wild.rank !== -1) {\n              continue;\n            }\n            if (cards) {\n              wild.rank = cards[0].rank;\n            } else if (this.cards[0].rank === values.length - 1 && this.game.wildStatus === 1) {\n              wild.rank = values.length - 2;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n        }\n      }\n\n      if (this.cards.length >= 6) {\n        var type = this.cards[0].toString().slice(0, -1) + '\\'s & ' + this.cards[3].toString().slice(0, -1) + '\\'s';\n        this.descr = this.name + ', ' + type;\n      }\n\n      return this.cards.length >= 6;\n    }\n  }\n\n  class ThreeOfAKind extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Three of a Kind', game, canDisqualify);\n    }\n\n    solve() {\n      this.resetWildCards();\n\n      for (var i=0; i<this.values.length; i++) {\n        if (this.getNumCardsByRank(i) === 3) {\n          this.cards = this.values[i] || [];\n          for (var j=0; j<this.wilds.length && this.cards.length<3; j++) {\n            var wild = this.wilds[j];\n            if (this.cards) {\n              wild.rank = this.cards[0].rank;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n          this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-3));\n          break;\n        }\n      }\n\n      if (this.cards.length >= 3) {\n        if (this.game.noKickers) {\n          this.cards.length = 3;\n        }\n\n        this.descr = this.name + ', ' + this.cards[0].toString().slice(0, -1) + '\\'s';\n      }\n\n      return this.cards.length >= 3;\n    }\n  }\n\n  class ThreePair extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Three Pair', game, canDisqualify);\n    }\n\n    solve() {\n      this.resetWildCards();\n\n      for (var i=0; i<this.values.length; i++) {\n        var cards = this.values[i];\n        if (this.cards.length > 2 && this.getNumCardsByRank(i) === 2) {\n          this.cards = this.cards.concat(cards || []);\n          for (var j=0; j<this.wilds.length; j++) {\n            var wild = this.wilds[j];\n            if (wild.rank !== -1) {\n              continue;\n            }\n            if (cards) {\n              wild.rank = cards[0].rank;\n            } else if (this.cards[0].rank === values.length - 1 && this.game.wildStatus === 1) {\n              wild.rank = values.length - 2;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n          this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-6));\n          break;\n        } else if (this.cards.length > 0 && this.getNumCardsByRank(i) === 2) {\n          this.cards = this.cards.concat(cards || []);\n          for (var j=0; j<this.wilds.length; j++) {\n            var wild = this.wilds[j];\n            if (wild.rank !== -1) {\n              continue;\n            }\n            if (cards) {\n              wild.rank = cards[0].rank;\n            } else if (this.cards[0].rank === values.length - 1 && this.game.wildStatus === 1) {\n              wild.rank = values.length - 2;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n        } else if (this.getNumCardsByRank(i) === 2) {\n          this.cards = this.cards.concat(cards);\n          for (var j=0; j<this.wilds.length; j++) {\n            var wild = this.wilds[j];\n            if (wild.rank !== -1) {\n              continue;\n            }\n            if (cards) {\n              wild.rank = cards[0].rank;\n            } else if (this.cards[0].rank === values.length - 1 && this.game.wildStatus === 1) {\n              wild.rank = values.length - 2;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n        }\n      }\n\n      if (this.cards.length >= 6) {\n        var type = this.cards[0].toString().slice(0, -1) + '\\'s & ' + this.cards[2].toString().slice(0, -1) + '\\'s & ' + this.cards[4].toString().slice(0, -1) + '\\'s';\n        this.descr = this.name + ', ' + type;\n      }\n\n      return this.cards.length >= 6;\n    }\n  }\n\n  class TwoPair extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Two Pair', game, canDisqualify);\n    }\n\n    solve() {\n      this.resetWildCards();\n\n      for (var i=0; i<this.values.length; i++) {\n        var cards = this.values[i];\n        if (this.cards.length > 0 && this.getNumCardsByRank(i) === 2) {\n          this.cards = this.cards.concat(cards || []);\n          for (var j=0; j<this.wilds.length; j++) {\n            var wild = this.wilds[j];\n            if (wild.rank !== -1) {\n              continue;\n            }\n            if (cards) {\n              wild.rank = cards[0].rank;\n            } else if (this.cards[0].rank === values.length - 1 && this.game.wildStatus === 1) {\n              wild.rank = values.length - 2;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n          this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-4));\n          break;\n        } else if (this.getNumCardsByRank(i) === 2) {\n          this.cards = this.cards.concat(cards);\n          for (var j=0; j<this.wilds.length; j++) {\n            var wild = this.wilds[j];\n            if (wild.rank !== -1) {\n              continue;\n            }\n            if (cards) {\n              wild.rank = cards[0].rank;\n            } else if (this.cards[0].rank === values.length - 1 && this.game.wildStatus === 1) {\n              wild.rank = values.length - 2;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n        }\n      }\n\n      if (this.cards.length >= 4) {\n        if (this.game.noKickers) {\n          this.cards.length = 4;\n        }\n\n        var type = this.cards[0].toString().slice(0, -1) + '\\'s & ' + this.cards[2].toString().slice(0, -1) + '\\'s';\n        this.descr = this.name + ', ' + type;\n      }\n\n      return this.cards.length >= 4;\n    }\n  }\n\n  class OnePair extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'Pair', game, canDisqualify);\n    }\n\n    solve() {\n      this.resetWildCards();\n\n      for (var i=0; i<this.values.length; i++) {\n        if (this.getNumCardsByRank(i) === 2) {\n          this.cards = this.cards.concat(this.values[i] || []);\n          for (var j=0; j<this.wilds.length && this.cards.length<2; j++) {\n            var wild = this.wilds[j];\n            if (this.cards) {\n              wild.rank = this.cards[0].rank;\n            } else {\n              wild.rank = values.length - 1;\n            }\n            wild.wildValue = values[wild.rank];\n            this.cards.push(wild);\n          }\n          this.cards = this.cards.concat(this.nextHighest().slice(0, this.game.cardsInHand-2));\n          break;\n        }\n      }\n\n      if (this.cards.length >= 2) {\n        if (this.game.noKickers) {\n          this.cards.length = 2;\n        }\n\n        this.descr = this.name + ', ' + this.cards[0].toString().slice(0, -1) + '\\'s';\n      }\n\n      return this.cards.length >= 2;\n    }\n  }\n\n  class HighCard extends Hand {\n    constructor(cards, game, canDisqualify) {\n      super(cards, 'High Card', game, canDisqualify);\n    }\n\n    solve() {\n      this.cards = this.cardPool.slice(0, this.game.cardsInHand);\n\n      for (var i=0; i<this.cards.length; i++) {\n        var card = this.cards[i];\n        if (this.cards[i].value === this.game.wildValue) {\n          this.cards[i].wildValue = 'A';\n          this.cards[i].rank = values.indexOf('A');\n        }\n      }\n\n      if (this.game.noKickers) {\n        this.cards.length = 1;\n      }\n\n      this.cards = this.cards.sort(Card.sort);\n      this.descr = this.cards[0].toString().slice(0, -1) + ' High';\n\n      return true;\n    }\n  }\n\n  /*\n   * Base class for handling Pai Gow Poker hands.\n   * House Way is in accordance with the MGM Grand Casino, Las Vegas NV.\n   * http://wizardofodds.com/games/pai-gow-poker/house-way/mgm/\n   * EXCEPTION: With Four of a Kind and S/F, preserve the S/F, just like Three of a Kind.\n   */\n  class PaiGowPokerHelper {\n    /*\n     * Constructor class.\n     * @param {Hand} hand Solved hand against Game 'paigowpokerfull'.\n     */\n    constructor(hand) {\n      this.baseHand = null;\n      this.hiHand = null;\n      this.loHand = null;\n      this.game = null;\n      this.loGame = new Game('paigowpokerlo');\n      this.hiGame = new Game('paigowpokerhi');\n\n      if (Array.isArray(hand)) {\n        this.baseHand = Hand.solve(hand, new Game('paigowpokerfull'));\n      } else {\n        this.baseHand = hand;\n      }\n\n      this.game = this.baseHand.game;\n    }\n\n    /*\n     * Set a full hand into high and low hands, according to House Way.\n     */\n    splitHouseWay() {\n      var hiCards, loCards;\n      var rank = this.game.handValues.length - this.baseHand.rank;\n      var handValue = this.game.handValues[rank];\n\n      if (handValue === FiveOfAKind) {\n        if (this.baseHand.cards[5].value === 'K' && this.baseHand.cards[6].value === 'K') {\n          loCards = this.baseHand.cards.slice(5, 7);\n          hiCards = this.baseHand.cards.slice(0, 5);\n        } else {\n          loCards = this.baseHand.cards.slice(0, 2);\n          hiCards = this.baseHand.cards.slice(2, 7);\n        }\n      } else if (handValue === FourOfAKindPairPlus) {\n        if (this.baseHand.cards[0].wildValue === 'A' && this.baseHand.cards[4].value !== 'K') {\n          hiCards = this.baseHand.cards.slice(0, 2);\n          loCards = this.baseHand.cards.slice(2, 4);\n          hiCards = hiCards.concat(this.baseHand.cards.slice(4, 7));\n        } else {\n          hiCards = this.baseHand.cards.slice(0, 4);\n          loCards = this.baseHand.cards.slice(4, 6);\n          hiCards.push(this.baseHand.cards[6]);\n        }\n      } else if (handValue === StraightFlush || handValue === Flush || handValue === Straight) {\n        var sfReturn;\n        var altGame = new Game('paigowpokeralt');\n        var altHand = Hand.solve(this.baseHand.cards, altGame);\n        var altRank = altGame.handValues.length - altHand.rank;\n        if (altGame.handValues[altRank] === FourOfAKind) {\n          sfReturn = this.getSFData(altHand.cards);\n          hiCards = sfReturn[0];\n          loCards = sfReturn[1];\n        } else if (altGame.handValues[altRank] === FullHouse) {\n          hiCards = altHand.cards.slice(0, 3);\n          loCards = altHand.cards.slice(3, 5);\n          hiCards = hiCards.concat(altHand.cards.slice(5, 7));\n        } else if (altGame.handValues[altRank] === ThreeOfAKind) {\n          sfReturn = this.getSFData(altHand.cards);\n          hiCards = sfReturn[0];\n          loCards = sfReturn[1];\n        } else if (altGame.handValues[altRank] === ThreePair) {\n          loCards = altHand.cards.slice(0, 2);\n          hiCards = altHand.cards.slice(2, 7);\n        } else if (altGame.handValues[altRank] === TwoPair) {\n          if (altHand.cards[0].rank < 6) {\n            if (altHand.cards[4].wildValue === 'A') {\n              hiCards = altHand.cards.slice(0, 4);\n              loCards = altHand.cards.slice(4, 6);\n              hiCards.push(altHand.cards[6]);\n            } else {\n              sfReturn = this.getSFData(altHand.cards);\n              hiCards = sfReturn[0];\n              loCards = sfReturn[1];\n            }\n          } else if (altHand.cards[0].rank < 10) {\n            if (altHand.cards[4].wildValue === 'A') {\n              hiCards = altHand.cards.slice(0, 4);\n              loCards = altHand.cards.slice(4, 6);\n              hiCards.push(altHand.cards[6]);\n            } else {\n              hiCards = altHand.cards.slice(0, 2);\n              loCards = altHand.cards.slice(2, 4);\n              hiCards = hiCards.concat(altHand.cards.slice(4, 7));\n            }\n          } else if (altHand.cards[0].wildValue !== 'A' && altHand.cards[2].rank < 6 && altHand.cards[4].wildValue === 'A') {\n            hiCards = altHand.cards.slice(0, 4);\n            loCards = altHand.cards.slice(4, 6);\n            hiCards.push(altHand.cards[6]);\n          } else {\n            hiCards = altHand.cards.slice(0, 2);\n            loCards = altHand.cards.slice(2, 4);\n            hiCards = hiCards.concat(altHand.cards.slice(4, 7));\n          }\n        } else if (altGame.handValues[altRank] === OnePair) {\n          if (altHand.cards[0].rank >= values.indexOf('T') && altHand.cards[0].rank <= values.indexOf('K') && altHand.cards[2].wildValue === 'A') {\n            var possibleSF = altHand.cards.slice(0, 2);\n            possibleSF = possibleSF.concat(altHand.cards.slice(3, 7));\n            sfReturn = this.getSFData(possibleSF);\n            if (sfReturn[0]) {\n              hiCards = sfReturn[0];\n              loCards = sfReturn[1];\n              loCards.push(altHand.cards[2]);\n            } else {\n              hiCards = altHand.cards.slice(0, 2);\n              loCards = altHand.cards.slice(2, 4);\n              hiCards = hiCards.concat(altHand.cards.slice(4, 7));\n            }\n          } else {\n            sfReturn = this.getSFData(altHand.cards.slice(2, 7));\n            if (sfReturn[0]) {\n              hiCards = sfReturn[0];\n              loCards = altHand.cards.slice(0, 2);\n            } else {\n              sfReturn = this.getSFData(altHand.cards);\n              hiCards = sfReturn[0];\n              loCards = sfReturn[1];\n            }\n          }\n        } else {\n          sfReturn = this.getSFData(altHand.cards);\n          hiCards = sfReturn[0];\n          loCards = sfReturn[1];\n        }\n      } else if (handValue === FourOfAKind) {\n        if (this.baseHand.cards[0].rank < 6) {\n          hiCards = this.baseHand.cards.slice(0, 4);\n          loCards = this.baseHand.cards.slice(4, 6);\n          hiCards.push(this.baseHand.cards[6]);\n        } else if (this.baseHand.cards[0].rank < 10 && this.baseHand.cards[4].wildValue === 'A') {\n          hiCards = this.baseHand.cards.slice(0, 4);\n          loCards = this.baseHand.cards.slice(4, 6);\n          hiCards.push(this.baseHand.cards[6]);\n        } else {\n          hiCards = this.baseHand.cards.slice(0, 2);\n          loCards = this.baseHand.cards.slice(2, 4);\n          hiCards = hiCards.concat(this.baseHand.cards.slice(4, 7));\n        }\n      } else if (handValue === TwoThreeOfAKind) {\n        loCards = this.baseHand.cards.slice(0, 2);\n        hiCards = this.baseHand.cards.slice(3, 6);\n        hiCards.push(this.baseHand.cards[2]);\n        hiCards.push(this.baseHand.cards[6]);\n      } else if (handValue === ThreeOfAKindTwoPair) {\n        hiCards = this.baseHand.cards.slice(0, 3);\n        loCards = this.baseHand.cards.slice(3, 5);\n        hiCards = hiCards.concat(this.baseHand.cards.slice(5, 7));\n      } else if (handValue === FullHouse) {\n        if (this.baseHand.cards[3].wildValue === '2' && this.baseHand.cards[5].wildValue === 'A' && this.baseHand.cards[6].wildValue === 'K') {\n          hiCards = this.baseHand.cards.slice(0, 5);\n          loCards = this.baseHand.cards.slice(5, 7);\n        } else {\n          hiCards = this.baseHand.cards.slice(0, 3);\n          loCards = this.baseHand.cards.slice(3, 5);\n          hiCards = hiCards.concat(this.baseHand.cards.slice(5, 7));\n        }\n      } else if (handValue === ThreeOfAKind) {\n        if (this.baseHand.cards[0].wildValue === 'A') {\n          hiCards = this.baseHand.cards.slice(0, 2);\n          loCards = this.baseHand.cards.slice(2, 4);\n          hiCards = hiCards.concat(this.baseHand.cards.slice(4, 7));\n        } else {\n          hiCards = this.baseHand.cards.slice(0, 3);\n          loCards = this.baseHand.cards.slice(3, 5);\n          hiCards = hiCards.concat(this.baseHand.cards.slice(5, 7));\n        }\n      } else if (handValue === ThreePair) {\n        loCards = this.baseHand.cards.slice(0, 2);\n        hiCards = this.baseHand.cards.slice(2, 7);\n      } else if (handValue === TwoPair) {\n        if (this.baseHand.cards[0].rank < 6) {\n          hiCards = this.baseHand.cards.slice(0, 4);\n          loCards = this.baseHand.cards.slice(4, 6);\n          hiCards.push(this.baseHand.cards[6]);\n        } else if (this.baseHand.cards[0].rank < 10) {\n          if (this.baseHand.cards[4].wildValue === 'A') {\n            hiCards = this.baseHand.cards.slice(0, 4);\n            loCards = this.baseHand.cards.slice(4, 6);\n            hiCards.push(this.baseHand.cards[6]);\n          } else {\n            hiCards = this.baseHand.cards.slice(0, 2);\n            loCards = this.baseHand.cards.slice(2, 4);\n            hiCards = hiCards.concat(this.baseHand.cards.slice(4, 7));\n          }\n        } else if (this.baseHand.cards[0].wildValue !== 'A' && this.baseHand.cards[2].rank < 6 && this.baseHand.cards[4].wildValue === 'A') {\n          hiCards = this.baseHand.cards.slice(0, 4);\n          loCards = this.baseHand.cards.slice(4, 6);\n          hiCards.push(this.baseHand.cards[6]);\n        } else {\n          hiCards = this.baseHand.cards.slice(0, 2);\n          loCards = this.baseHand.cards.slice(2, 4);\n          hiCards = hiCards.concat(this.baseHand.cards.slice(4, 7));\n        }\n      } else if (handValue === OnePair) {\n        hiCards = this.baseHand.cards.slice(0, 2);\n        loCards = this.baseHand.cards.slice(2, 4);\n        hiCards = hiCards.concat(this.baseHand.cards.slice(4, 7));\n      } else {\n        hiCards = [this.baseHand.cards[0]];\n        loCards = this.baseHand.cards.slice(1, 3);\n        hiCards = hiCards.concat(this.baseHand.cards.slice(3, 7));\n      }\n\n      this.hiHand = Hand.solve(hiCards, this.hiGame);\n      this.loHand = Hand.solve(loCards, this.loGame);\n    }\n\n    /*\n     * Determine the best possible Straight and/or Flush.\n     * @param  {Array} cards 5-7 Card objects to check.\n     * @return {Array} [hiCards, loCards] High and Low components, if any.\n     */\n    getSFData(cards) {\n      var hiCards, possibleLoCards, bestLoCards, bestHand;\n      var handsToCheck = [\n        new StraightFlush(cards, new Game('paigowpokersf7')),\n        new StraightFlush(cards, new Game('paigowpokersf6')),\n        new StraightFlush(cards, this.game),\n        new Flush(cards, new Game('paigowpokersf7')),\n        new Flush(cards, new Game('paigowpokersf6')),\n        new Flush(cards, this.game),\n        new Straight(cards, new Game('paigowpokersf7')),\n        new Straight(cards, new Game('paigowpokersf6')),\n        new Straight(cards, this.game)\n      ];\n\n      for (var i=0; i<handsToCheck.length; i++) {\n        var hand = handsToCheck[i];\n        if (hand.isPossible) {\n          if (hand.sfLength === 7) {\n            possibleLoCards = [hand.cards[0], hand.cards[1]];\n          } else if (hand.sfLength === 6) {\n            possibleLoCards = [hand.cards[0]];\n            if (cards.length > 6) {\n              possibleLoCards.push(hand.cards[6]);\n            }\n          } else if (cards.length > 5) {\n            possibleLoCards = [hand.cards[5]];\n            if (cards.length > 6) {\n              possibleLoCards.push(hand.cards[6]);\n            }\n          }\n          if (possibleLoCards) {\n            possibleLoCards = possibleLoCards.sort(Card.sort);\n            if (!bestLoCards || bestLoCards[0].rank < possibleLoCards[0].rank || (bestLoCards.length > 1 && bestLoCards[0].rank === possibleLoCards[0].rank && bestLoCards[1].rank < possibleLoCards[1].rank)) {\n              bestLoCards = possibleLoCards;\n              bestHand = hand;\n            }\n          } else if (!bestHand) {\n            bestHand = hand;\n            break;\n          }\n        }\n      }\n\n      if (bestHand) {\n        if (bestHand.sfLength === 7) {\n          hiCards = bestHand.cards.slice(2, 7);\n        } else if (bestHand.sfLength === 6) {\n          hiCards = bestHand.cards.slice(1, 6);\n        } else {\n          hiCards = bestHand.cards.slice(0, 5);\n        }\n      }\n\n      return [hiCards, bestLoCards];\n    }\n\n    /*\n     * Determine if the setting of the hands is valid. Hi must be higher than lo.\n     * @return {Boolean}\n     */\n    qualifiesValid() {\n      var compareHands = Hand.winners([this.hiHand, this.loHand]);\n\n      return !(compareHands.length === 1 && compareHands[0] === this.loHand);\n    }\n\n    /**\n     * Find which of two split hands is best, according to rules.\n     * @param  {PaiGowPokerHelper} player Player hand to evaluate. Must be set.\n     * @param  {PaiGowPokerHelper} banker Banker hand to evaluate. Must be set.\n     * @param  {int}               winner Winning party, if any.\n     *                                    Player = 1, Banker = -1, Push = 0\n     */\n    static winners(player, banker) {\n      if (!player.qualifiesValid()) {\n        if (banker.qualifiesValid()) {\n          return -1;\n        }\n        // Probably shouldn't get here because the dealer must set house way.\n        // However, we'll still have it as a sanity check, just in case.\n        return 0;\n      }\n\n      if (!banker.qualifiesValid()) {\n        return 1;\n      }\n\n      var hiWinner = Hand.winners([player.hiHand, banker.hiHand]);\n      var loWinner = Hand.winners([player.loHand, banker.loHand]);\n\n      // In Pai Gow Poker, Banker takes any equal valued hands.\n      if (hiWinner.length === 1 && hiWinner[0] === player.hiHand) {\n        if (loWinner.length === 1 && loWinner[0] === player.loHand) {\n          // Player wins both; player wins\n          return 1;\n        }\n        // Player wins hi, Banker wins lo; push\n        return 0;\n      }\n\n      if (loWinner.length === 1 && loWinner[0] === player.loHand) {\n        // Banker wins hi, Player wins lo; push\n        return 0;\n      }\n\n      // Banker wins both; banker wins\n      return -1;\n    }\n\n    /*\n     * Set a full hand into high and low hands, according to manual input.\n     * @param  {Array} hiHand       High hand to specify.\n     *                              Can also be {Hand} with game of 'paigowpokerhi'.\n     * @param  {Array} loHand       Low hand to specify.\n     *                              Can also be {Hand} with game of 'paigowpokerlo'.\n     * @return {PaiGowPokerHelper}  Object with split hands.\n     */\n    static setHands(hiHand, loHand) {\n      var fullHand = [];\n\n      if (Array.isArray(hiHand)) {\n        hiHand = Hand.solve(hiHand, new Game('paigowpokerhi'));\n      }\n      fullHand = fullHand.concat(hiHand.cardPool);\n      if (Array.isArray(loHand)) {\n        loHand = Hand.solve(loHand, new Game('paigowpokerlo'));\n      }\n      fullHand = fullHand.concat(loHand.cardPool);\n\n      var result = new PaiGowPokerHelper(fullHand);\n      result.hiHand = hiHand;\n      result.loHand = loHand;\n\n      return result;\n    }\n\n    /**\n     * Build and return PaiGowPokerHelper object with hands split House Way.\n     * @param  {Array} fullHand    Array of cards (['Ad', '3c', 'Th', ...]).\n     *                             Can also be {Hand} with game of 'paigowpokerfull'.\n     * @return {PaiGowPokerHelper} Object with split hands.\n     */\n    static solve(fullHand) {\n      var result = new PaiGowPokerHelper(fullHand = fullHand || ['']);\n      result.splitHouseWay();\n\n      return result;\n    }\n  }\n\n  var gameRules = {\n    'standard': {\n      'cardsInHand': 5,\n      'handValues': [StraightFlush, FourOfAKind, FullHouse, Flush, Straight, ThreeOfAKind, TwoPair, OnePair, HighCard],\n      'wildValue': null,\n      'wildStatus': 1,\n      'wheelStatus': 0,\n      'sfQualify': 5,\n      'lowestQualified': null,\n      \"noKickers\": false\n    },\n    'jacksbetter': {\n      'cardsInHand': 5,\n      'handValues': [StraightFlush, FourOfAKind, FullHouse, Flush, Straight, ThreeOfAKind, TwoPair, OnePair, HighCard],\n      'wildValue': null,\n      'wildStatus': 1,\n      'wheelStatus': 0,\n      'sfQualify': 5,\n      'lowestQualified': ['Jc', 'Jd', '4h', '3s', '2c'],\n      \"noKickers\": true\n    },\n    'joker': {\n      'cardsInHand': 5,\n      'handValues': [NaturalRoyalFlush, FiveOfAKind, WildRoyalFlush, StraightFlush, FourOfAKind, FullHouse, Flush, Straight, ThreeOfAKind, TwoPair, HighCard],\n      'wildValue': 'O',\n      'wildStatus': 1,\n      'wheelStatus': 0,\n      'sfQualify': 5,\n      'lowestQualified': ['4c', '3d', '3h', '2s', '2c'],\n      \"noKickers\": true\n    },\n    'deuceswild': {\n      'cardsInHand': 5,\n      'handValues': [NaturalRoyalFlush, FourWilds, WildRoyalFlush, FiveOfAKind, StraightFlush, FourOfAKind, FullHouse, Flush, Straight, ThreeOfAKind, HighCard],\n      'wildValue': '2',\n      'wildStatus': 1,\n      'wheelStatus': 0,\n      'sfQualify': 5,\n      'lowestQualified': ['5c', '4d', '3h', '3s', '3c'],\n      \"noKickers\": true\n    },\n    'threecard': {\n      'cardsInHand': 3,\n      'handValues': [StraightFlush, ThreeOfAKind, Straight, Flush, OnePair, HighCard],\n      'wildValue': null,\n      'wildStatus': 1,\n      'wheelStatus': 0,\n      'sfQualify': 3,\n      'lowestQualified': ['Qh', '3s', '2c'],\n      \"noKickers\": false\n    },\n    'fourcard': {\n      'cardsInHand': 4,\n      'handValues': [FourOfAKind, StraightFlush, ThreeOfAKind, Flush, Straight, TwoPair, OnePair, HighCard],\n      'wildValue': null,\n      'wildStatus': 1,\n      'wheelStatus': 0,\n      'sfQualify': 4,\n      'lowestQualified': null,\n      \"noKickers\": true\n    },\n    'fourcardbonus': {\n      'cardsInHand': 4,\n      'handValues': [FourOfAKind, StraightFlush, ThreeOfAKind, Flush, Straight, TwoPair, OnePair, HighCard],\n      'wildValue': null,\n      'wildStatus': 1,\n      'wheelStatus': 0,\n      'sfQualify': 4,\n      'lowestQualified': ['Ac', 'Ad', '3h', '2s'],\n      \"noKickers\": true\n    },\n    'paigowpokerfull': {\n      'cardsInHand': 7,\n      'handValues': [FiveOfAKind, FourOfAKindPairPlus, StraightFlush, Flush, Straight, FourOfAKind, TwoThreeOfAKind, ThreeOfAKindTwoPair, FullHouse, ThreeOfAKind, ThreePair, TwoPair, OnePair, HighCard],\n      'wildValue': 'O',\n      'wildStatus': 0,\n      'wheelStatus': 1,\n      'sfQualify': 5,\n      'lowestQualified': null\n    },\n    'paigowpokeralt': {\n      'cardsInHand': 7,\n      'handValues': [FourOfAKind, FullHouse, ThreeOfAKind, ThreePair, TwoPair, OnePair, HighCard],\n      'wildValue': 'O',\n      'wildStatus': 0,\n      'wheelStatus': 1,\n      'sfQualify': 5,\n      'lowestQualified': null\n    },\n    'paigowpokersf6': {\n      'cardsInHand': 7,\n      'handValues': [StraightFlush, Flush, Straight],\n      'wildValue': 'O',\n      'wildStatus': 0,\n      'wheelStatus': 1,\n      'sfQualify': 6,\n      'lowestQualified': null\n    },\n    'paigowpokersf7': {\n      'cardsInHand': 7,\n      'handValues': [StraightFlush, Flush, Straight],\n      'wildValue': 'O',\n      'wildStatus': 0,\n      'wheelStatus': 1,\n      'sfQualify': 7,\n      'lowestQualified': null\n    },\n    'paigowpokerhi': {\n      'cardsInHand': 5,\n      'handValues': [FiveOfAKind, StraightFlush, FourOfAKind, FullHouse, Flush, Straight, ThreeOfAKind, TwoPair, OnePair, HighCard],\n      'wildValue': 'O',\n      'wildStatus': 0,\n      'wheelStatus': 1,\n      'sfQualify': 5,\n      'lowestQualified': null\n    },\n    'paigowpokerlo': {\n      'cardsInHand': 2,\n      'handValues': [OnePair, HighCard],\n      'wildValue': 'O',\n      'wildStatus': 0,\n      'wheelStatus': 1,\n      'sfQualify': 5,\n      'lowestQualified': null\n    }\n  };\n\n  /**\n   * Base Game class that defines the rules of the game.\n   */\n  class Game {\n    constructor(descr) {\n      this.descr = descr;\n      this.cardsInHand = 0;\n      this.handValues = [];\n      this.wildValue = null;\n      this.wildStatus = 0;\n      this.wheelStatus = 0;\n      this.sfQualify = 5;\n      this.lowestQualified = null;\n      this.noKickers = null;\n\n      // Set values based on the game rules.\n      if (!this.descr || !gameRules[this.descr]) {\n        this.descr = 'standard';\n      }\n      this.cardsInHand = gameRules[this.descr]['cardsInHand'];\n      this.handValues = gameRules[this.descr]['handValues'];\n      this.wildValue = gameRules[this.descr]['wildValue'];\n      this.wildStatus = gameRules[this.descr]['wildStatus'];\n      this.wheelStatus = gameRules[this.descr]['wheelStatus'];\n      this.sfQualify = gameRules[this.descr]['sfQualify'];\n      this.lowestQualified = gameRules[this.descr]['lowestQualified'];\n      this.noKickers = gameRules[this.descr]['noKickers'];\n    }\n  }\n\n  function exportToGlobal(global) {\n    global.Card = Card;\n    global.Hand = Hand;\n    global.Game = Game;\n    global.RoyalFlush = RoyalFlush;\n    global.NaturalRoyalFlush = NaturalRoyalFlush;\n    global.WildRoyalFlush = WildRoyalFlush;\n    global.FiveOfAKind = FiveOfAKind;\n    global.StraightFlush = StraightFlush;\n    global.FourOfAKindPairPlus = FourOfAKindPairPlus;\n    global.FourOfAKind = FourOfAKind;\n    global.FourWilds = FourWilds;\n    global.TwoThreeOfAKind = TwoThreeOfAKind;\n    global.ThreeOfAKindTwoPair = ThreeOfAKindTwoPair;\n    global.FullHouse = FullHouse;\n    global.Flush = Flush;\n    global.Straight = Straight;\n    global.ThreeOfAKind = ThreeOfAKind;\n    global.ThreePair = ThreePair;\n    global.TwoPair = TwoPair;\n    global.OnePair = OnePair;\n    global.HighCard = HighCard;\n    global.PaiGowPokerHelper = PaiGowPokerHelper;\n  }\n\n  // Export the classes for node.js use.\n  if (typeof exports !== 'undefined') {\n    exportToGlobal(exports);\n  }\n\n  // Add the classes to the window for browser use.\n  if (typeof window !== 'undefined') {\n    exportToGlobal(window);\n  }\n\n})();","/* global APP, JitsiMeetJS */\n\nimport {\n    getAudioOutputDeviceId,\n    notifyCameraError,\n    notifyMicError\n} from '../../react/features/base/devices';\nimport {\n    getUserSelectedCameraDeviceId,\n    getUserSelectedMicDeviceId,\n    getUserSelectedOutputDeviceId\n} from '../../react/features/base/settings';\n\n/**\n * Determines if currently selected audio output device should be changed after\n * list of available devices has been changed.\n * @param {MediaDeviceInfo[]} newDevices\n * @returns {string|undefined} - ID of new audio output device to use, undefined\n *      if audio output device should not be changed.\n */\nfunction getNewAudioOutputDevice(newDevices) {\n    if (!JitsiMeetJS.mediaDevices.isDeviceChangeAvailable('output')) {\n        return;\n    }\n\n    const selectedAudioOutputDeviceId = getAudioOutputDeviceId();\n    const availableAudioOutputDevices = newDevices.filter(\n        d => d.kind === 'audiooutput');\n\n    // Switch to 'default' audio output device if we don't have the selected one\n    // available anymore.\n    if (selectedAudioOutputDeviceId !== 'default'\n        && !availableAudioOutputDevices.find(d =>\n            d.deviceId === selectedAudioOutputDeviceId)) {\n        return 'default';\n    }\n\n    const preferredAudioOutputDeviceId = getUserSelectedOutputDeviceId(APP.store.getState());\n\n    // if the preferred one is not the selected and is available in the new devices\n    // we want to use it as it was just added\n    if (preferredAudioOutputDeviceId\n        && preferredAudioOutputDeviceId !== selectedAudioOutputDeviceId\n        && availableAudioOutputDevices.find(d => d.deviceId === preferredAudioOutputDeviceId)) {\n        return preferredAudioOutputDeviceId;\n    }\n}\n\n/**\n * Determines if currently selected audio input device should be changed after\n * list of available devices has been changed.\n * @param {MediaDeviceInfo[]} newDevices\n * @param {JitsiLocalTrack} localAudio\n * @returns {string|undefined} - ID of new microphone device to use, undefined\n *      if audio input device should not be changed.\n */\nfunction getNewAudioInputDevice(newDevices, localAudio) {\n    const availableAudioInputDevices = newDevices.filter(\n        d => d.kind === 'audioinput');\n    const selectedAudioInputDeviceId = getUserSelectedMicDeviceId(APP.store.getState());\n    const selectedAudioInputDevice = availableAudioInputDevices.find(\n        d => d.deviceId === selectedAudioInputDeviceId);\n\n    // Here we handle case when no device was initially plugged, but\n    // then it's connected OR new device was connected when previous\n    // track has ended.\n    if (!localAudio || localAudio.disposed || localAudio.isEnded()) {\n        // If we have new audio device and permission to use it was granted\n        // (label is not an empty string), then we will try to use the first\n        // available device.\n        if (selectedAudioInputDevice && selectedAudioInputDeviceId) {\n            return selectedAudioInputDeviceId;\n        } else if (availableAudioInputDevices.length\n            && availableAudioInputDevices[0].label !== '') {\n            return availableAudioInputDevices[0].deviceId;\n        }\n    } else if (selectedAudioInputDevice\n        && selectedAudioInputDeviceId !== localAudio.getDeviceId()) {\n\n        // And here we handle case when we already have some device working,\n        // but we plug-in a \"preferred\" (previously selected in settings, stored\n        // in local storage) device.\n        return selectedAudioInputDeviceId;\n    }\n}\n\n/**\n * Determines if currently selected video input device should be changed after\n * list of available devices has been changed.\n * @param {MediaDeviceInfo[]} newDevices\n * @param {JitsiLocalTrack} localVideo\n * @returns {string|undefined} - ID of new camera device to use, undefined\n *      if video input device should not be changed.\n */\nfunction getNewVideoInputDevice(newDevices, localVideo) {\n    const availableVideoInputDevices = newDevices.filter(\n        d => d.kind === 'videoinput');\n    const selectedVideoInputDeviceId = getUserSelectedCameraDeviceId(APP.store.getState());\n    const selectedVideoInputDevice = availableVideoInputDevices.find(\n        d => d.deviceId === selectedVideoInputDeviceId);\n\n    // Here we handle case when no video input device was initially plugged,\n    // but then device is connected OR new device was connected when\n    // previous track has ended.\n    if (!localVideo || localVideo.disposed || localVideo.isEnded()) {\n        // If we have new video device and permission to use it was granted\n        // (label is not an empty string), then we will try to use the first\n        // available device.\n        if (selectedVideoInputDevice && selectedVideoInputDeviceId) {\n            return selectedVideoInputDeviceId;\n        } else if (availableVideoInputDevices.length\n            && availableVideoInputDevices[0].label !== '') {\n            return availableVideoInputDevices[0].deviceId;\n        }\n    } else if (selectedVideoInputDevice\n            && selectedVideoInputDeviceId !== localVideo.getDeviceId()) {\n        // And here we handle case when we already have some device working,\n        // but we plug-in a \"preferred\" (previously selected in settings, stored\n        // in local storage) device.\n        return selectedVideoInputDeviceId;\n    }\n}\n\nexport default {\n    /**\n     * Determines if currently selected media devices should be changed after\n     * list of available devices has been changed.\n     * @param {MediaDeviceInfo[]} newDevices\n     * @param {boolean} isSharingScreen\n     * @param {JitsiLocalTrack} localVideo\n     * @param {JitsiLocalTrack} localAudio\n     * @returns {{\n     *  audioinput: (string|undefined),\n     *  videoinput: (string|undefined),\n     *  audiooutput: (string|undefined)\n     *  }}\n     */\n    getNewMediaDevicesAfterDeviceListChanged( // eslint-disable-line max-params\n            newDevices,\n            isSharingScreen,\n            localVideo,\n            localAudio) {\n        return {\n            audioinput: getNewAudioInputDevice(newDevices, localAudio),\n            videoinput: isSharingScreen ? undefined : getNewVideoInputDevice(newDevices, localVideo),\n            audiooutput: getNewAudioOutputDevice(newDevices)\n        };\n    },\n\n    /**\n     * Tries to create new local tracks for new devices obtained after device\n     * list changed. Shows error dialog in case of failures.\n     * @param {function} createLocalTracks\n     * @param {string} (cameraDeviceId)\n     * @param {string} (micDeviceId)\n     * @returns {Promise.<JitsiLocalTrack[]>}\n     */\n    createLocalTracksAfterDeviceListChanged(\n            createLocalTracks,\n            cameraDeviceId,\n            micDeviceId) {\n        let audioTrackError;\n        let videoTrackError;\n        const audioRequested = Boolean(micDeviceId);\n        const videoRequested = Boolean(cameraDeviceId);\n\n        if (audioRequested && videoRequested) {\n            // First we try to create both audio and video tracks together.\n            return (\n                createLocalTracks({\n                    devices: [ 'audio', 'video' ],\n                    cameraDeviceId,\n                    micDeviceId\n                })\n\n                // If we fail to do this, try to create them separately.\n                .catch(() => Promise.all([\n                    createAudioTrack(false).then(([ stream ]) => stream),\n                    createVideoTrack(false).then(([ stream ]) => stream)\n                ]))\n                .then(tracks => {\n                    if (audioTrackError) {\n                        APP.store.dispatch(notifyMicError(audioTrackError));\n                    }\n\n                    if (videoTrackError) {\n                        APP.store.dispatch(notifyCameraError(videoTrackError));\n                    }\n\n                    return tracks.filter(t => typeof t !== 'undefined');\n                }));\n        } else if (videoRequested && !audioRequested) {\n            return createVideoTrack();\n        } else if (audioRequested && !videoRequested) {\n            return createAudioTrack();\n        }\n\n        return Promise.resolve([]);\n\n        /**\n         *\n         */\n        function createAudioTrack(showError = true) {\n            return (\n                createLocalTracks({\n                    devices: [ 'audio' ],\n                    cameraDeviceId: null,\n                    micDeviceId\n                })\n                .catch(err => {\n                    audioTrackError = err;\n                    showError && APP.store.disptach(notifyMicError(err));\n\n                    return [];\n                }));\n        }\n\n        /**\n         *\n         */\n        function createVideoTrack(showError = true) {\n            return (\n                createLocalTracks({\n                    devices: [ 'video' ],\n                    cameraDeviceId,\n                    micDeviceId: null\n                })\n                .catch(err => {\n                    videoTrackError = err;\n                    showError && APP.store.dispatch(notifyCameraError(err));\n\n                    return [];\n                }));\n        }\n    }\n};\n","// @flow\n\nimport JitsiMeetJS from '../../base/lib-jitsi-meet';\nimport { MEDIA_TYPE } from '../../base/media';\n\n/**\n * Class Implementing the effect interface expected by a JitsiLocalTrack.\n * The AudioMixerEffect, as the name implies, mixes two JitsiLocalTracks containing a audio track. First track is\n * provided at the moment of creation, second is provided through the effect interface.\n */\nexport class AudioMixerEffect {\n    /**\n     * JitsiLocalTrack that is going to be mixed into the track that uses this effect.\n     */\n    _mixAudio: Object;\n\n    /**\n     * lib-jitsi-meet AudioMixer.\n     */\n    _audioMixer: Object;\n\n    /**\n     * Creates AudioMixerEffect.\n     *\n     * @param {JitsiLocalTrack} mixAudio - JitsiLocalTrack which will be mixed with the original track.\n     */\n    constructor(mixAudio: Object) {\n        if (mixAudio.getType() !== MEDIA_TYPE.AUDIO) {\n            throw new Error('AudioMixerEffect only supports audio JitsiLocalTracks; effect will not work!');\n        }\n\n        this._mixAudio = mixAudio;\n    }\n\n    /**\n     * Checks if the JitsiLocalTrack supports this effect.\n     *\n     * @param {JitsiLocalTrack} sourceLocalTrack - Track to which the effect will be applied.\n     * @returns {boolean} - Returns true if this effect can run on the specified track, false otherwise.\n     */\n    isEnabled(sourceLocalTrack: Object) {\n        // Both JitsiLocalTracks need to be audio i.e. contain an audio MediaStreamTrack\n        return sourceLocalTrack.isAudioTrack() && this._mixAudio.isAudioTrack();\n    }\n\n    /**\n     * Effect interface called by source JitsiLocalTrack, At this point a WebAudio ChannelMergerNode is created\n     * and and the two associated MediaStreams are connected to it; the resulting mixed MediaStream is returned.\n     *\n     * @param {MediaStream} audioStream - Audio stream which will be mixed with _mixAudio.\n     * @returns {MediaStream} - MediaStream containing both audio tracks mixed together.\n     */\n    startEffect(audioStream: MediaStream) {\n        this._audioMixer = JitsiMeetJS.createAudioMixer();\n        this._audioMixer.addMediaStream(this._mixAudio.getOriginalStream());\n        this._audioMixer.addMediaStream(audioStream);\n\n        return this._audioMixer.start();\n    }\n\n    /**\n     * Reset the AudioMixer stopping it in the process.\n     *\n     * @returns {void}\n     */\n    stopEffect() {\n        this._audioMixer.reset();\n    }\n\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/screenshot-capture');\n","// @flow\n\n/**\n * Redux action type dispatched in order to toggle screenshot captures.\n *\n * {\n *      type: SET_SCREENSHOT_CAPTURE\n * }\n */\n\nexport const SET_SCREENSHOT_CAPTURE = 'SET_SCREENSHOT_CAPTURE';\n","// @flow\n\nimport { createScreenshotCaptureEffect } from '../stream-effects/screenshot-capture';\nimport { getLocalVideoTrack } from '../../features/base/tracks';\nimport logger from './logger';\nimport { SET_SCREENSHOT_CAPTURE } from './actionTypes';\n\nlet ongoingEffect;\n\n/**\n * Marks the on-off state of screenshot captures.\n *\n * @param {boolean} enabled - Whether to turn screen captures on or off.\n * @returns {{\n    *      type: START_SCREENSHOT_CAPTURE,\n    *      payload: enabled\n    * }}\n*/\nfunction setScreenshotCapture(enabled) {\n    return {\n        type: SET_SCREENSHOT_CAPTURE,\n        payload: enabled\n    };\n}\n\n/**\n* Action that toggles the screenshot captures.\n*\n* @param {boolean} enabled - Bool that represents the intention to start/stop screenshot captures.\n* @returns {Promise}\n*/\nexport function toggleScreenshotCaptureEffect(enabled: boolean) {\n    return async function(dispatch: (Object) => Object, getState: () => any) {\n        const state = getState();\n\n        if (state['features/screenshot-capture'].capturesEnabled !== enabled) {\n            const { jitsiTrack } = getLocalVideoTrack(state['features/base/tracks']);\n\n            if (!ongoingEffect) {\n                ongoingEffect = await createScreenshotCaptureEffect(state);\n            }\n\n            // Screenshot capture effect doesn't return a modified stream. Therefore, we don't have to\n            // switch the stream at the conference level, starting/stopping the effect will suffice here.\n            if (enabled) {\n                try {\n                    await ongoingEffect.startEffect(\n                        jitsiTrack.getOriginalStream(),\n                        jitsiTrack.videoType\n                    );\n                    dispatch(setScreenshotCapture(enabled));\n                } catch {\n\n                    // Handle promise rejection from {@code startEffect} due to stream type not being desktop.\n                    logger.error('Unsupported stream type.');\n                }\n            } else {\n                ongoingEffect.stopEffect();\n                dispatch(setScreenshotCapture(enabled));\n            }\n        }\n\n        return Promise.resolve();\n    };\n}\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\nimport { PersistenceRegistry } from '../base/storage';\n\nimport { SET_SCREENSHOT_CAPTURE } from './actionTypes';\n\nPersistenceRegistry.register('features/screnshot-capture', true, {\n    capturesEnabled: false\n});\n\nReducerRegistry.register('features/screenshot-capture', (state = {}, action) => {\n    switch (action.type) {\n    case SET_SCREENSHOT_CAPTURE: {\n        return {\n            ...state,\n            capturesEnabled: action.payload\n        };\n    }\n    }\n\n    return state;\n});\n","export * from './actions';\n\nimport './reducer';\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/* Copyright @ 2015-present 8x8, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*jslint latedef:false*/\n\n/**\n * Ordered log levels.\n */\nvar levels = {\n    \"trace\": 0,\n    \"debug\": 1,\n    \"info\": 2,\n    \"log\": 3,\n    \"warn\": 4,\n    \"error\": 5\n};\n\n/**\n * The default transport - console\n * @type LoggerTransport\n */\nLogger.consoleTransport = console;\n\n/**\n * The array which stores currently registered global transports.\n * @type {[LoggerTransport]}\n */\nvar globalTransports = [ Logger.consoleTransport ];\n\n/**\n * Adds given {@link LoggerTransport} instance to the list of global\n * transports which means that it'll be used by all {@link Logger}s\n * @param {LoggerTransport} transport\n */\nLogger.addGlobalTransport = function(transport) {\n    if (globalTransports.indexOf(transport) === -1) {\n        globalTransports.push(transport);\n    }\n};\n\n/**\n * Removes given {@link LoggerTransport} instance from the list of global\n * transports\n * @param {LoggerTransport} transport\n */\nLogger.removeGlobalTransport = function(transport) {\n    var transportIdx = globalTransports.indexOf(transport);\n    if (transportIdx !== -1) {\n        globalTransports.splice(transportIdx, 1);\n    }\n};\n\n/**\n * The global configuration options.\n */\nvar globalOptions = {};\n\n/**\n * Sets global options which will be used by all loggers. Changing these works\n * even after other loggers are created.\n */\nLogger.setGlobalOptions = function(options) {\n    globalOptions = options || {};\n};\n\n/**\n * Parses Error's object stack trace and extracts information about the last\n * caller before the log method was called.\n * @returns JS object with info about the caller - method name, file location,\n * line and column.\n */\nfunction getCallerInfo() {\n    var callerInfo = {\n        methodName: \"\",\n        fileLocation: \"\",\n        line: null,\n        column: null\n    };\n    //gets the part of the stack without the logger wrappers\n    var error = new Error();\n    var stack = error.stack? error.stack.split(\"\\n\") : [];\n    if(!stack || stack.length < 1) {\n        return callerInfo;\n    }\n    var m = null;\n    if(stack[3]) {\n        m = stack[3].match(/\\s*at\\s*(.+?)\\s*\\((\\S*)\\s*:(\\d*)\\s*:(\\d*)\\)/);\n    }\n    if(!m || m.length <= 4) {\n        //Firefox && Safari\n        if(stack[2].indexOf(\"log@\") === 0){\n            //Safari\n            callerInfo.methodName = stack[3].substr(0, stack[3].indexOf(\"@\"));\n        } else {\n            //Firefox\n            callerInfo.methodName = stack[2].substr(0, stack[2].indexOf(\"@\"));\n        }\n        return callerInfo;\n    }\n\n    callerInfo.methodName = m[1];\n    callerInfo.fileLocation = m[2];\n    callerInfo.line = m[3];\n    callerInfo.column = m[4];\n    return callerInfo;\n}\n\n/**\n * Logs messages using the transports and level from the logger.\n * @param logger a logger instance.\n * @param level the log level of the message. See the levels variable.\n * @param arguments array with arguments that will be logged.\n */\nfunction log() {\n    var logger = arguments[0], level = arguments[1],\n        args = Array.prototype.slice.call(arguments, 2);\n    if(levels[level] < logger.level) {\n        return;\n    }\n\n    var callerInfo\n        = !(logger.options.disableCallerInfo || globalOptions.disableCallerInfo) &&\n            getCallerInfo();\n    var transports = globalTransports.concat(logger.transports);\n    for(var i = 0; i < transports.length; i++) {\n        var t = transports[i];\n        var l = t[level];\n        if(l && typeof(l) === \"function\") {\n            var logPrefixes = [];\n\n            logPrefixes.push(new Date().toISOString());\n\n            if (logger.id) {\n                logPrefixes.push(\"[\" + logger.id + \"]\");\n            }\n\n            if (callerInfo && callerInfo.methodName.length > 1) {\n                logPrefixes.push(\"<\" + callerInfo.methodName + \">: \");\n            }\n\n            var fullLogParts = logPrefixes.concat(args);\n\n            l.bind(t).apply(t, fullLogParts);\n        }\n    }\n}\n\n/**\n *\n * Constructs new logger object.\n * @param level the logging level for the new logger\n * @param id optional identifier for the logger instance.\n * @param {LoggerTransport} transports optional list of handlers(objects) for\n * the logs. The handlers must support - log, warn, error, debug, info, trace.\n * @param options optional configuration file for how the logger should behave.\n * @param {boolean} options.disableCallerInfo Whether the call site of a logger\n * method invocation should be included in the log. Defaults to false, so the\n * call site will be included.\n */\nfunction Logger(level, id, transports, options) {\n    this.id = id;\n    this.options = options || {};\n    this.transports = transports;\n    if(!this.transports) {\n        this.transports = [];\n    }\n    this.level = levels[level];\n    var methods = Object.keys(levels);\n    for(var i = 0; i < methods.length; i++){\n        this[methods[i]] =\n            log.bind(null, this, methods[i]);\n    }\n}\n\n/**\n * Sets the log level for the logger.\n * @param level the new log level.\n */\nLogger.prototype.setLevel = function (level) {\n    this.level = levels[level];\n};\nmodule.exports = Logger;\n\n/**\n * Enum for the supported log levels.\n */\nLogger.levels = {\n    TRACE: \"trace\",\n    DEBUG: \"debug\",\n    INFO: \"info\",\n    LOG: \"log\",\n    WARN: \"warn\",\n    ERROR: \"error\"\n};\n","//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar af = moment.defineLocale('af', {\n    months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n    monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n    weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n    weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n    weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n    meridiemParse: /vm|nm/i,\n    isPM : function (input) {\n        return /^nm$/i.test(input);\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 12) {\n            return isLower ? 'vm' : 'VM';\n        } else {\n            return isLower ? 'nm' : 'NM';\n        }\n    },\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Vandag om] LT',\n        nextDay : '[Môre om] LT',\n        nextWeek : 'dddd [om] LT',\n        lastDay : '[Gister om] LT',\n        lastWeek : '[Laas] dddd [om] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'oor %s',\n        past : '%s gelede',\n        s : '\\'n paar sekondes',\n        m : '\\'n minuut',\n        mm : '%d minute',\n        h : '\\'n uur',\n        hh : '%d ure',\n        d : '\\'n dag',\n        dd : '%d dae',\n        M : '\\'n maand',\n        MM : '%d maande',\n        y : '\\'n jaar',\n        yy : '%d jaar'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal : function (number) {\n        return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n    },\n    week : {\n        dow : 1, // Maandag is die eerste dag van die week.\n        doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n    }\n});\n\nreturn af;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic [ar]\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '١',\n    '2': '٢',\n    '3': '٣',\n    '4': '٤',\n    '5': '٥',\n    '6': '٦',\n    '7': '٧',\n    '8': '٨',\n    '9': '٩',\n    '0': '٠'\n};\nvar numberMap = {\n    '١': '1',\n    '٢': '2',\n    '٣': '3',\n    '٤': '4',\n    '٥': '5',\n    '٦': '6',\n    '٧': '7',\n    '٨': '8',\n    '٩': '9',\n    '٠': '0'\n};\nvar pluralForm = function (n) {\n    return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n};\nvar plurals = {\n    s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n    m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n    h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n    d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n    M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n    y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n};\nvar pluralize = function (u) {\n    return function (number, withoutSuffix, string, isFuture) {\n        var f = pluralForm(number),\n            str = plurals[u][pluralForm(number)];\n        if (f === 2) {\n            str = str[withoutSuffix ? 0 : 1];\n        }\n        return str.replace(/%d/i, number);\n    };\n};\nvar months = [\n    'كانون الثاني يناير',\n    'شباط فبراير',\n    'آذار مارس',\n    'نيسان أبريل',\n    'أيار مايو',\n    'حزيران يونيو',\n    'تموز يوليو',\n    'آب أغسطس',\n    'أيلول سبتمبر',\n    'تشرين الأول أكتوبر',\n    'تشرين الثاني نوفمبر',\n    'كانون الأول ديسمبر'\n];\n\nvar ar = moment.defineLocale('ar', {\n    months : months,\n    monthsShort : months,\n    weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'D/\\u200FM/\\u200FYYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ص|م/,\n    isPM : function (input) {\n        return 'م' === input;\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'ص';\n        } else {\n            return 'م';\n        }\n    },\n    calendar : {\n        sameDay: '[اليوم عند الساعة] LT',\n        nextDay: '[غدًا عند الساعة] LT',\n        nextWeek: 'dddd [عند الساعة] LT',\n        lastDay: '[أمس عند الساعة] LT',\n        lastWeek: 'dddd [عند الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'بعد %s',\n        past : 'منذ %s',\n        s : pluralize('s'),\n        m : pluralize('m'),\n        mm : pluralize('m'),\n        h : pluralize('h'),\n        hh : pluralize('h'),\n        d : pluralize('d'),\n        dd : pluralize('d'),\n        M : pluralize('M'),\n        MM : pluralize('M'),\n        y : pluralize('y'),\n        yy : pluralize('y')\n    },\n    preparse: function (string) {\n        return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n            return numberMap[match];\n        }).replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        }).replace(/,/g, '،');\n    },\n    week : {\n        dow : 6, // Saturday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn ar;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Algeria) [ar-dz]\n//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar arDz = moment.defineLocale('ar-dz', {\n    months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[اليوم على الساعة] LT',\n        nextDay: '[غدا على الساعة] LT',\n        nextWeek: 'dddd [على الساعة] LT',\n        lastDay: '[أمس على الساعة] LT',\n        lastWeek: 'dddd [على الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'في %s',\n        past : 'منذ %s',\n        s : 'ثوان',\n        m : 'دقيقة',\n        mm : '%d دقائق',\n        h : 'ساعة',\n        hh : '%d ساعات',\n        d : 'يوم',\n        dd : '%d أيام',\n        M : 'شهر',\n        MM : '%d أشهر',\n        y : 'سنة',\n        yy : '%d سنوات'\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 4  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn arDz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Kuwait) [ar-kw]\n//! author : Nusret Parlak: https://github.com/nusretparlak\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar arKw = moment.defineLocale('ar-kw', {\n    months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[اليوم على الساعة] LT',\n        nextDay: '[غدا على الساعة] LT',\n        nextWeek: 'dddd [على الساعة] LT',\n        lastDay: '[أمس على الساعة] LT',\n        lastWeek: 'dddd [على الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'في %s',\n        past : 'منذ %s',\n        s : 'ثوان',\n        m : 'دقيقة',\n        mm : '%d دقائق',\n        h : 'ساعة',\n        hh : '%d ساعات',\n        d : 'يوم',\n        dd : '%d أيام',\n        M : 'شهر',\n        MM : '%d أشهر',\n        y : 'سنة',\n        yy : '%d سنوات'\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn arKw;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Lybia) [ar-ly]\n//! author : Ali Hmer: https://github.com/kikoanis\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '1',\n    '2': '2',\n    '3': '3',\n    '4': '4',\n    '5': '5',\n    '6': '6',\n    '7': '7',\n    '8': '8',\n    '9': '9',\n    '0': '0'\n};\nvar pluralForm = function (n) {\n    return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n};\nvar plurals = {\n    s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n    m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n    h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n    d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n    M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n    y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n};\nvar pluralize = function (u) {\n    return function (number, withoutSuffix, string, isFuture) {\n        var f = pluralForm(number),\n            str = plurals[u][pluralForm(number)];\n        if (f === 2) {\n            str = str[withoutSuffix ? 0 : 1];\n        }\n        return str.replace(/%d/i, number);\n    };\n};\nvar months = [\n    'يناير',\n    'فبراير',\n    'مارس',\n    'أبريل',\n    'مايو',\n    'يونيو',\n    'يوليو',\n    'أغسطس',\n    'سبتمبر',\n    'أكتوبر',\n    'نوفمبر',\n    'ديسمبر'\n];\n\nvar arLy = moment.defineLocale('ar-ly', {\n    months : months,\n    monthsShort : months,\n    weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'D/\\u200FM/\\u200FYYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ص|م/,\n    isPM : function (input) {\n        return 'م' === input;\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'ص';\n        } else {\n            return 'م';\n        }\n    },\n    calendar : {\n        sameDay: '[اليوم عند الساعة] LT',\n        nextDay: '[غدًا عند الساعة] LT',\n        nextWeek: 'dddd [عند الساعة] LT',\n        lastDay: '[أمس عند الساعة] LT',\n        lastWeek: 'dddd [عند الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'بعد %s',\n        past : 'منذ %s',\n        s : pluralize('s'),\n        m : pluralize('m'),\n        mm : pluralize('m'),\n        h : pluralize('h'),\n        hh : pluralize('h'),\n        d : pluralize('d'),\n        dd : pluralize('d'),\n        M : pluralize('M'),\n        MM : pluralize('M'),\n        y : pluralize('y'),\n        yy : pluralize('y')\n    },\n    preparse: function (string) {\n        return string.replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        }).replace(/,/g, '،');\n    },\n    week : {\n        dow : 6, // Saturday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn arLy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Morocco) [ar-ma]\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar arMa = moment.defineLocale('ar-ma', {\n    months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[اليوم على الساعة] LT',\n        nextDay: '[غدا على الساعة] LT',\n        nextWeek: 'dddd [على الساعة] LT',\n        lastDay: '[أمس على الساعة] LT',\n        lastWeek: 'dddd [على الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'في %s',\n        past : 'منذ %s',\n        s : 'ثوان',\n        m : 'دقيقة',\n        mm : '%d دقائق',\n        h : 'ساعة',\n        hh : '%d ساعات',\n        d : 'يوم',\n        dd : '%d أيام',\n        M : 'شهر',\n        MM : '%d أشهر',\n        y : 'سنة',\n        yy : '%d سنوات'\n    },\n    week : {\n        dow : 6, // Saturday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn arMa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Saudi Arabia) [ar-sa]\n//! author : Suhail Alkowaileet : https://github.com/xsoh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '١',\n    '2': '٢',\n    '3': '٣',\n    '4': '٤',\n    '5': '٥',\n    '6': '٦',\n    '7': '٧',\n    '8': '٨',\n    '9': '٩',\n    '0': '٠'\n};\nvar numberMap = {\n    '١': '1',\n    '٢': '2',\n    '٣': '3',\n    '٤': '4',\n    '٥': '5',\n    '٦': '6',\n    '٧': '7',\n    '٨': '8',\n    '٩': '9',\n    '٠': '0'\n};\n\nvar arSa = moment.defineLocale('ar-sa', {\n    months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ص|م/,\n    isPM : function (input) {\n        return 'م' === input;\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'ص';\n        } else {\n            return 'م';\n        }\n    },\n    calendar : {\n        sameDay: '[اليوم على الساعة] LT',\n        nextDay: '[غدا على الساعة] LT',\n        nextWeek: 'dddd [على الساعة] LT',\n        lastDay: '[أمس على الساعة] LT',\n        lastWeek: 'dddd [على الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'في %s',\n        past : 'منذ %s',\n        s : 'ثوان',\n        m : 'دقيقة',\n        mm : '%d دقائق',\n        h : 'ساعة',\n        hh : '%d ساعات',\n        d : 'يوم',\n        dd : '%d أيام',\n        M : 'شهر',\n        MM : '%d أشهر',\n        y : 'سنة',\n        yy : '%d سنوات'\n    },\n    preparse: function (string) {\n        return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n            return numberMap[match];\n        }).replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        }).replace(/,/g, '،');\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn arSa;\n\n})));\n","//! moment.js locale configuration\n//! locale  :  Arabic (Tunisia) [ar-tn]\n//! author : Nader Toukabri : https://github.com/naderio\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar arTn = moment.defineLocale('ar-tn', {\n    months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat: {\n        LT: 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY HH:mm',\n        LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n        sameDay: '[اليوم على الساعة] LT',\n        nextDay: '[غدا على الساعة] LT',\n        nextWeek: 'dddd [على الساعة] LT',\n        lastDay: '[أمس على الساعة] LT',\n        lastWeek: 'dddd [على الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: 'في %s',\n        past: 'منذ %s',\n        s: 'ثوان',\n        m: 'دقيقة',\n        mm: '%d دقائق',\n        h: 'ساعة',\n        hh: '%d ساعات',\n        d: 'يوم',\n        dd: '%d أيام',\n        M: 'شهر',\n        MM: '%d أشهر',\n        y: 'سنة',\n        yy: '%d سنوات'\n    },\n    week: {\n        dow: 1, // Monday is the first day of the week.\n        doy: 4 // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn arTn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Azerbaijani [az]\n//! author : topchiyev : https://github.com/topchiyev\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar suffixes = {\n    1: '-inci',\n    5: '-inci',\n    8: '-inci',\n    70: '-inci',\n    80: '-inci',\n    2: '-nci',\n    7: '-nci',\n    20: '-nci',\n    50: '-nci',\n    3: '-üncü',\n    4: '-üncü',\n    100: '-üncü',\n    6: '-ncı',\n    9: '-uncu',\n    10: '-uncu',\n    30: '-uncu',\n    60: '-ıncı',\n    90: '-ıncı'\n};\n\nvar az = moment.defineLocale('az', {\n    months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n    monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n    weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n    weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n    weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[bugün saat] LT',\n        nextDay : '[sabah saat] LT',\n        nextWeek : '[gələn həftə] dddd [saat] LT',\n        lastDay : '[dünən] LT',\n        lastWeek : '[keçən həftə] dddd [saat] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s sonra',\n        past : '%s əvvəl',\n        s : 'birneçə saniyyə',\n        m : 'bir dəqiqə',\n        mm : '%d dəqiqə',\n        h : 'bir saat',\n        hh : '%d saat',\n        d : 'bir gün',\n        dd : '%d gün',\n        M : 'bir ay',\n        MM : '%d ay',\n        y : 'bir il',\n        yy : '%d il'\n    },\n    meridiemParse: /gecə|səhər|gündüz|axşam/,\n    isPM : function (input) {\n        return /^(gündüz|axşam)$/.test(input);\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'gecə';\n        } else if (hour < 12) {\n            return 'səhər';\n        } else if (hour < 17) {\n            return 'gündüz';\n        } else {\n            return 'axşam';\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n    ordinal : function (number) {\n        if (number === 0) {  // special case for zero\n            return number + '-ıncı';\n        }\n        var a = number % 10,\n            b = number % 100 - a,\n            c = number >= 100 ? 100 : null;\n        return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn az;\n\n})));\n","//! moment.js locale configuration\n//! locale : Belarusian [be]\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction plural(word, num) {\n    var forms = word.split('_');\n    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n}\nfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n    var format = {\n        'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n        'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n        'dd': 'дзень_дні_дзён',\n        'MM': 'месяц_месяцы_месяцаў',\n        'yy': 'год_гады_гадоў'\n    };\n    if (key === 'm') {\n        return withoutSuffix ? 'хвіліна' : 'хвіліну';\n    }\n    else if (key === 'h') {\n        return withoutSuffix ? 'гадзіна' : 'гадзіну';\n    }\n    else {\n        return number + ' ' + plural(format[key], +number);\n    }\n}\n\nvar be = moment.defineLocale('be', {\n    months : {\n        format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n        standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n    },\n    monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n    weekdays : {\n        format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n        standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n        isFormat: /\\[ ?[Вв] ?(?:мінулую|наступную)? ?\\] ?dddd/\n    },\n    weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n    weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY г.',\n        LLL : 'D MMMM YYYY г., HH:mm',\n        LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n    },\n    calendar : {\n        sameDay: '[Сёння ў] LT',\n        nextDay: '[Заўтра ў] LT',\n        lastDay: '[Учора ў] LT',\n        nextWeek: function () {\n            return '[У] dddd [ў] LT';\n        },\n        lastWeek: function () {\n            switch (this.day()) {\n                case 0:\n                case 3:\n                case 5:\n                case 6:\n                    return '[У мінулую] dddd [ў] LT';\n                case 1:\n                case 2:\n                case 4:\n                    return '[У мінулы] dddd [ў] LT';\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'праз %s',\n        past : '%s таму',\n        s : 'некалькі секунд',\n        m : relativeTimeWithPlural,\n        mm : relativeTimeWithPlural,\n        h : relativeTimeWithPlural,\n        hh : relativeTimeWithPlural,\n        d : 'дзень',\n        dd : relativeTimeWithPlural,\n        M : 'месяц',\n        MM : relativeTimeWithPlural,\n        y : 'год',\n        yy : relativeTimeWithPlural\n    },\n    meridiemParse: /ночы|раніцы|дня|вечара/,\n    isPM : function (input) {\n        return /^(дня|вечара)$/.test(input);\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'ночы';\n        } else if (hour < 12) {\n            return 'раніцы';\n        } else if (hour < 17) {\n            return 'дня';\n        } else {\n            return 'вечара';\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n    ordinal: function (number, period) {\n        switch (period) {\n            case 'M':\n            case 'd':\n            case 'DDD':\n            case 'w':\n            case 'W':\n                return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n            case 'D':\n                return number + '-га';\n            default:\n                return number;\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn be;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bambara [bm]\n//! author : Estelle Comment : https://github.com/estellecomment\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n// Language contact person : Abdoufata Kane : https://github.com/abdoufata\n\nvar bm = moment.defineLocale('bm', {\n    months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n    monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n    weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n    weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n    weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'MMMM [tile] D [san] YYYY',\n        LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n        LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n    },\n    calendar : {\n        sameDay : '[Bi lɛrɛ] LT',\n        nextDay : '[Sini lɛrɛ] LT',\n        nextWeek : 'dddd [don lɛrɛ] LT',\n        lastDay : '[Kunu lɛrɛ] LT',\n        lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s kɔnɔ',\n        past : 'a bɛ %s bɔ',\n        s : 'sanga dama dama',\n        m : 'miniti kelen',\n        mm : 'miniti %d',\n        h : 'lɛrɛ kelen',\n        hh : 'lɛrɛ %d',\n        d : 'tile kelen',\n        dd : 'tile %d',\n        M : 'kalo kelen',\n        MM : 'kalo %d',\n        y : 'san kelen',\n        yy : 'san %d'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn bm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali [bn]\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '১',\n    '2': '২',\n    '3': '৩',\n    '4': '৪',\n    '5': '৫',\n    '6': '৬',\n    '7': '৭',\n    '8': '৮',\n    '9': '৯',\n    '0': '০'\n};\nvar numberMap = {\n    '১': '1',\n    '২': '2',\n    '৩': '3',\n    '৪': '4',\n    '৫': '5',\n    '৬': '6',\n    '৭': '7',\n    '৮': '8',\n    '৯': '9',\n    '০': '0'\n};\n\nvar bn = moment.defineLocale('bn', {\n    months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n    monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n    weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n    weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n    weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm সময়',\n        LTS : 'A h:mm:ss সময়',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm সময়',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n    },\n    calendar : {\n        sameDay : '[আজ] LT',\n        nextDay : '[আগামীকাল] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[গতকাল] LT',\n        lastWeek : '[গত] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s পরে',\n        past : '%s আগে',\n        s : 'কয়েক সেকেন্ড',\n        m : 'এক মিনিট',\n        mm : '%d মিনিট',\n        h : 'এক ঘন্টা',\n        hh : '%d ঘন্টা',\n        d : 'এক দিন',\n        dd : '%d দিন',\n        M : 'এক মাস',\n        MM : '%d মাস',\n        y : 'এক বছর',\n        yy : '%d বছর'\n    },\n    preparse: function (string) {\n        return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if ((meridiem === 'রাত' && hour >= 4) ||\n                (meridiem === 'দুপুর' && hour < 5) ||\n                meridiem === 'বিকাল') {\n            return hour + 12;\n        } else {\n            return hour;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'রাত';\n        } else if (hour < 10) {\n            return 'সকাল';\n        } else if (hour < 17) {\n            return 'দুপুর';\n        } else if (hour < 20) {\n            return 'বিকাল';\n        } else {\n            return 'রাত';\n        }\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn bn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '༡',\n    '2': '༢',\n    '3': '༣',\n    '4': '༤',\n    '5': '༥',\n    '6': '༦',\n    '7': '༧',\n    '8': '༨',\n    '9': '༩',\n    '0': '༠'\n};\nvar numberMap = {\n    '༡': '1',\n    '༢': '2',\n    '༣': '3',\n    '༤': '4',\n    '༥': '5',\n    '༦': '6',\n    '༧': '7',\n    '༨': '8',\n    '༩': '9',\n    '༠': '0'\n};\n\nvar bo = moment.defineLocale('bo', {\n    months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n    monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n    weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n    weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n    weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm',\n        LTS : 'A h:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm'\n    },\n    calendar : {\n        sameDay : '[དི་རིང] LT',\n        nextDay : '[སང་ཉིན] LT',\n        nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n        lastDay : '[ཁ་སང] LT',\n        lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s ལ་',\n        past : '%s སྔན་ལ',\n        s : 'ལམ་སང',\n        m : 'སྐར་མ་གཅིག',\n        mm : '%d སྐར་མ',\n        h : 'ཆུ་ཚོད་གཅིག',\n        hh : '%d ཆུ་ཚོད',\n        d : 'ཉིན་གཅིག',\n        dd : '%d ཉིན་',\n        M : 'ཟླ་བ་གཅིག',\n        MM : '%d ཟླ་བ',\n        y : 'ལོ་གཅིག',\n        yy : '%d ལོ'\n    },\n    preparse: function (string) {\n        return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if ((meridiem === 'མཚན་མོ' && hour >= 4) ||\n                (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                meridiem === 'དགོང་དག') {\n            return hour + 12;\n        } else {\n            return hour;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'མཚན་མོ';\n        } else if (hour < 10) {\n            return 'ཞོགས་ཀས';\n        } else if (hour < 17) {\n            return 'ཉིན་གུང';\n        } else if (hour < 20) {\n            return 'དགོང་དག';\n        } else {\n            return 'མཚན་མོ';\n        }\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn bo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Breton [br]\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction relativeTimeWithMutation(number, withoutSuffix, key) {\n    var format = {\n        'mm': 'munutenn',\n        'MM': 'miz',\n        'dd': 'devezh'\n    };\n    return number + ' ' + mutation(format[key], number);\n}\nfunction specialMutationForYears(number) {\n    switch (lastNumber(number)) {\n        case 1:\n        case 3:\n        case 4:\n        case 5:\n        case 9:\n            return number + ' bloaz';\n        default:\n            return number + ' vloaz';\n    }\n}\nfunction lastNumber(number) {\n    if (number > 9) {\n        return lastNumber(number % 10);\n    }\n    return number;\n}\nfunction mutation(text, number) {\n    if (number === 2) {\n        return softMutation(text);\n    }\n    return text;\n}\nfunction softMutation(text) {\n    var mutationTable = {\n        'm': 'v',\n        'b': 'v',\n        'd': 'z'\n    };\n    if (mutationTable[text.charAt(0)] === undefined) {\n        return text;\n    }\n    return mutationTable[text.charAt(0)] + text.substring(1);\n}\n\nvar br = moment.defineLocale('br', {\n    months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n    monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n    weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n    weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n    weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'h[e]mm A',\n        LTS : 'h[e]mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D [a viz] MMMM YYYY',\n        LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n        LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n    },\n    calendar : {\n        sameDay : '[Hiziv da] LT',\n        nextDay : '[Warc\\'hoazh da] LT',\n        nextWeek : 'dddd [da] LT',\n        lastDay : '[Dec\\'h da] LT',\n        lastWeek : 'dddd [paset da] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'a-benn %s',\n        past : '%s \\'zo',\n        s : 'un nebeud segondennoù',\n        m : 'ur vunutenn',\n        mm : relativeTimeWithMutation,\n        h : 'un eur',\n        hh : '%d eur',\n        d : 'un devezh',\n        dd : relativeTimeWithMutation,\n        M : 'ur miz',\n        MM : relativeTimeWithMutation,\n        y : 'ur bloaz',\n        yy : specialMutationForYears\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n    ordinal : function (number) {\n        var output = (number === 1) ? 'añ' : 'vet';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn br;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bosnian [bs]\n//! author : Nedim Cholich : https://github.com/frontyard\n//! based on (hr) translation by Bojan Marković\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction translate(number, withoutSuffix, key) {\n    var result = number + ' ';\n    switch (key) {\n        case 'm':\n            return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n        case 'mm':\n            if (number === 1) {\n                result += 'minuta';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'minute';\n            } else {\n                result += 'minuta';\n            }\n            return result;\n        case 'h':\n            return withoutSuffix ? 'jedan sat' : 'jednog sata';\n        case 'hh':\n            if (number === 1) {\n                result += 'sat';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'sata';\n            } else {\n                result += 'sati';\n            }\n            return result;\n        case 'dd':\n            if (number === 1) {\n                result += 'dan';\n            } else {\n                result += 'dana';\n            }\n            return result;\n        case 'MM':\n            if (number === 1) {\n                result += 'mjesec';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'mjeseca';\n            } else {\n                result += 'mjeseci';\n            }\n            return result;\n        case 'yy':\n            if (number === 1) {\n                result += 'godina';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'godine';\n            } else {\n                result += 'godina';\n            }\n            return result;\n    }\n}\n\nvar bs = moment.defineLocale('bs', {\n    months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n    monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n    weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY H:mm',\n        LLLL : 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay  : '[danas u] LT',\n        nextDay  : '[sutra u] LT',\n        nextWeek : function () {\n            switch (this.day()) {\n                case 0:\n                    return '[u] [nedjelju] [u] LT';\n                case 3:\n                    return '[u] [srijedu] [u] LT';\n                case 6:\n                    return '[u] [subotu] [u] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[u] dddd [u] LT';\n            }\n        },\n        lastDay  : '[jučer u] LT',\n        lastWeek : function () {\n            switch (this.day()) {\n                case 0:\n                case 3:\n                    return '[prošlu] dddd [u] LT';\n                case 6:\n                    return '[prošle] [subote] [u] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[prošli] dddd [u] LT';\n            }\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past   : 'prije %s',\n        s      : 'par sekundi',\n        m      : translate,\n        mm     : translate,\n        h      : translate,\n        hh     : translate,\n        d      : 'dan',\n        dd     : translate,\n        M      : 'mjesec',\n        MM     : translate,\n        y      : 'godinu',\n        yy     : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn bs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar ca = moment.defineLocale('ca', {\n    months : {\n        standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n        format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n        isFormat: /D[oD]?(\\s)+MMMM/\n    },\n    monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n    weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n    weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM [de] YYYY',\n        ll : 'D MMM YYYY',\n        LLL : 'D MMMM [de] YYYY [a les] H:mm',\n        lll : 'D MMM YYYY, H:mm',\n        LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm',\n        llll : 'ddd D MMM YYYY, H:mm'\n    },\n    calendar : {\n        sameDay : function () {\n            return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n        },\n        nextDay : function () {\n            return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n        },\n        nextWeek : function () {\n            return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n        },\n        lastDay : function () {\n            return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n        },\n        lastWeek : function () {\n            return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'd\\'aquí %s',\n        past : 'fa %s',\n        s : 'uns segons',\n        m : 'un minut',\n        mm : '%d minuts',\n        h : 'una hora',\n        hh : '%d hores',\n        d : 'un dia',\n        dd : '%d dies',\n        M : 'un mes',\n        MM : '%d mesos',\n        y : 'un any',\n        yy : '%d anys'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n    ordinal : function (number, period) {\n        var output = (number === 1) ? 'r' :\n            (number === 2) ? 'n' :\n            (number === 3) ? 'r' :\n            (number === 4) ? 't' : 'è';\n        if (period === 'w' || period === 'W') {\n            output = 'a';\n        }\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn ca;\n\n})));\n","//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_');\nvar monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\nfunction plural(n) {\n    return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n}\nfunction translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    switch (key) {\n        case 's':  // a few seconds / in a few seconds / a few seconds ago\n            return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n        case 'm':  // a minute / in a minute / a minute ago\n            return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'minuty' : 'minut');\n            } else {\n                return result + 'minutami';\n            }\n            break;\n        case 'h':  // an hour / in an hour / an hour ago\n            return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n        case 'hh': // 9 hours / in 9 hours / 9 hours ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'hodiny' : 'hodin');\n            } else {\n                return result + 'hodinami';\n            }\n            break;\n        case 'd':  // a day / in a day / a day ago\n            return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n        case 'dd': // 9 days / in 9 days / 9 days ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'dny' : 'dní');\n            } else {\n                return result + 'dny';\n            }\n            break;\n        case 'M':  // a month / in a month / a month ago\n            return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n        case 'MM': // 9 months / in 9 months / 9 months ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'měsíce' : 'měsíců');\n            } else {\n                return result + 'měsíci';\n            }\n            break;\n        case 'y':  // a year / in a year / a year ago\n            return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n        case 'yy': // 9 years / in 9 years / 9 years ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'roky' : 'let');\n            } else {\n                return result + 'lety';\n            }\n            break;\n    }\n}\n\nvar cs = moment.defineLocale('cs', {\n    months : months,\n    monthsShort : monthsShort,\n    monthsParse : (function (months, monthsShort) {\n        var i, _monthsParse = [];\n        for (i = 0; i < 12; i++) {\n            // use custom parser to solve problem with July (červenec)\n            _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');\n        }\n        return _monthsParse;\n    }(months, monthsShort)),\n    shortMonthsParse : (function (monthsShort) {\n        var i, _shortMonthsParse = [];\n        for (i = 0; i < 12; i++) {\n            _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');\n        }\n        return _shortMonthsParse;\n    }(monthsShort)),\n    longMonthsParse : (function (months) {\n        var i, _longMonthsParse = [];\n        for (i = 0; i < 12; i++) {\n            _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');\n        }\n        return _longMonthsParse;\n    }(months)),\n    weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n    weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n    weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n    longDateFormat : {\n        LT: 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY H:mm',\n        LLLL : 'dddd D. MMMM YYYY H:mm',\n        l : 'D. M. YYYY'\n    },\n    calendar : {\n        sameDay: '[dnes v] LT',\n        nextDay: '[zítra v] LT',\n        nextWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[v neděli v] LT';\n                case 1:\n                case 2:\n                    return '[v] dddd [v] LT';\n                case 3:\n                    return '[ve středu v] LT';\n                case 4:\n                    return '[ve čtvrtek v] LT';\n                case 5:\n                    return '[v pátek v] LT';\n                case 6:\n                    return '[v sobotu v] LT';\n            }\n        },\n        lastDay: '[včera v] LT',\n        lastWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[minulou neděli v] LT';\n                case 1:\n                case 2:\n                    return '[minulé] dddd [v] LT';\n                case 3:\n                    return '[minulou středu v] LT';\n                case 4:\n                case 5:\n                    return '[minulý] dddd [v] LT';\n                case 6:\n                    return '[minulou sobotu v] LT';\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past : 'před %s',\n        s : translate,\n        m : translate,\n        mm : translate,\n        h : translate,\n        hh : translate,\n        d : translate,\n        dd : translate,\n        M : translate,\n        MM : translate,\n        y : translate,\n        yy : translate\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn cs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar cv = moment.defineLocale('cv', {\n    months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n    monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n    weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n    weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n    weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD-MM-YYYY',\n        LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n        LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n        LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n    },\n    calendar : {\n        sameDay: '[Паян] LT [сехетре]',\n        nextDay: '[Ыран] LT [сехетре]',\n        lastDay: '[Ӗнер] LT [сехетре]',\n        nextWeek: '[Ҫитес] dddd LT [сехетре]',\n        lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : function (output) {\n            var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n            return output + affix;\n        },\n        past : '%s каялла',\n        s : 'пӗр-ик ҫеккунт',\n        m : 'пӗр минут',\n        mm : '%d минут',\n        h : 'пӗр сехет',\n        hh : '%d сехет',\n        d : 'пӗр кун',\n        dd : '%d кун',\n        M : 'пӗр уйӑх',\n        MM : '%d уйӑх',\n        y : 'пӗр ҫул',\n        yy : '%d ҫул'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n    ordinal : '%d-мӗш',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn cv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Welsh [cy]\n//! author : Robert Allen : https://github.com/robgallen\n//! author : https://github.com/ryangreaves\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar cy = moment.defineLocale('cy', {\n    months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n    monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n    weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n    weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n    weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n    weekdaysParseExact : true,\n    // time formats are the same as en-gb\n    longDateFormat: {\n        LT: 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY HH:mm',\n        LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n        sameDay: '[Heddiw am] LT',\n        nextDay: '[Yfory am] LT',\n        nextWeek: 'dddd [am] LT',\n        lastDay: '[Ddoe am] LT',\n        lastWeek: 'dddd [diwethaf am] LT',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: 'mewn %s',\n        past: '%s yn ôl',\n        s: 'ychydig eiliadau',\n        m: 'munud',\n        mm: '%d munud',\n        h: 'awr',\n        hh: '%d awr',\n        d: 'diwrnod',\n        dd: '%d diwrnod',\n        M: 'mis',\n        MM: '%d mis',\n        y: 'blwyddyn',\n        yy: '%d flynedd'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n    // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n    ordinal: function (number) {\n        var b = number,\n            output = '',\n            lookup = [\n                '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n                'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n            ];\n        if (b > 20) {\n            if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                output = 'fed'; // not 30ain, 70ain or 90ain\n            } else {\n                output = 'ain';\n            }\n        } else if (b > 0) {\n            output = lookup[b];\n        }\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn cy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar da = moment.defineLocale('da', {\n    months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n    weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n    weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n    weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY HH:mm',\n        LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n    },\n    calendar : {\n        sameDay : '[i dag kl.] LT',\n        nextDay : '[i morgen kl.] LT',\n        nextWeek : 'på dddd [kl.] LT',\n        lastDay : '[i går kl.] LT',\n        lastWeek : '[i] dddd[s kl.] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'om %s',\n        past : '%s siden',\n        s : 'få sekunder',\n        m : 'et minut',\n        mm : '%d minutter',\n        h : 'en time',\n        hh : '%d timer',\n        d : 'en dag',\n        dd : '%d dage',\n        M : 'en måned',\n        MM : '%d måneder',\n        y : 'et år',\n        yy : '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn da;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Austria) [de-at]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Martin Groller : https://github.com/MadMG\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        'm': ['eine Minute', 'einer Minute'],\n        'h': ['eine Stunde', 'einer Stunde'],\n        'd': ['ein Tag', 'einem Tag'],\n        'dd': [number + ' Tage', number + ' Tagen'],\n        'M': ['ein Monat', 'einem Monat'],\n        'MM': [number + ' Monate', number + ' Monaten'],\n        'y': ['ein Jahr', 'einem Jahr'],\n        'yy': [number + ' Jahre', number + ' Jahren']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n}\n\nvar deAt = moment.defineLocale('de-at', {\n    months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n    weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n    weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT: 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY HH:mm',\n        LLLL : 'dddd, D. MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[heute um] LT [Uhr]',\n        sameElse: 'L',\n        nextDay: '[morgen um] LT [Uhr]',\n        nextWeek: 'dddd [um] LT [Uhr]',\n        lastDay: '[gestern um] LT [Uhr]',\n        lastWeek: '[letzten] dddd [um] LT [Uhr]'\n    },\n    relativeTime : {\n        future : 'in %s',\n        past : 'vor %s',\n        s : 'ein paar Sekunden',\n        m : processRelativeTime,\n        mm : '%d Minuten',\n        h : processRelativeTime,\n        hh : '%d Stunden',\n        d : processRelativeTime,\n        dd : processRelativeTime,\n        M : processRelativeTime,\n        MM : processRelativeTime,\n        y : processRelativeTime,\n        yy : processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn deAt;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n// based on: https://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de#\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        'm': ['eine Minute', 'einer Minute'],\n        'h': ['eine Stunde', 'einer Stunde'],\n        'd': ['ein Tag', 'einem Tag'],\n        'dd': [number + ' Tage', number + ' Tagen'],\n        'M': ['ein Monat', 'einem Monat'],\n        'MM': [number + ' Monate', number + ' Monaten'],\n        'y': ['ein Jahr', 'einem Jahr'],\n        'yy': [number + ' Jahre', number + ' Jahren']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n}\n\nvar deCh = moment.defineLocale('de-ch', {\n    months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n    weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n    weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT: 'HH.mm',\n        LTS: 'HH.mm.ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY HH.mm',\n        LLLL : 'dddd, D. MMMM YYYY HH.mm'\n    },\n    calendar : {\n        sameDay: '[heute um] LT [Uhr]',\n        sameElse: 'L',\n        nextDay: '[morgen um] LT [Uhr]',\n        nextWeek: 'dddd [um] LT [Uhr]',\n        lastDay: '[gestern um] LT [Uhr]',\n        lastWeek: '[letzten] dddd [um] LT [Uhr]'\n    },\n    relativeTime : {\n        future : 'in %s',\n        past : 'vor %s',\n        s : 'ein paar Sekunden',\n        m : processRelativeTime,\n        mm : '%d Minuten',\n        h : processRelativeTime,\n        hh : '%d Stunden',\n        d : processRelativeTime,\n        dd : processRelativeTime,\n        M : processRelativeTime,\n        MM : processRelativeTime,\n        y : processRelativeTime,\n        yy : processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn deCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maldivian [dv]\n//! author : Jawish Hameed : https://github.com/jawish\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar months = [\n    'ޖެނުއަރީ',\n    'ފެބްރުއަރީ',\n    'މާރިޗު',\n    'އޭޕްރީލު',\n    'މޭ',\n    'ޖޫން',\n    'ޖުލައި',\n    'އޯގަސްޓު',\n    'ސެޕްޓެމްބަރު',\n    'އޮކްޓޯބަރު',\n    'ނޮވެމްބަރު',\n    'ޑިސެމްބަރު'\n];\nvar weekdays = [\n    'އާދިއްތަ',\n    'ހޯމަ',\n    'އަންގާރަ',\n    'ބުދަ',\n    'ބުރާސްފަތި',\n    'ހުކުރު',\n    'ހޮނިހިރު'\n];\n\nvar dv = moment.defineLocale('dv', {\n    months : months,\n    monthsShort : months,\n    weekdays : weekdays,\n    weekdaysShort : weekdays,\n    weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n    longDateFormat : {\n\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'D/M/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /މކ|މފ/,\n    isPM : function (input) {\n        return 'މފ' === input;\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'މކ';\n        } else {\n            return 'މފ';\n        }\n    },\n    calendar : {\n        sameDay : '[މިއަދު] LT',\n        nextDay : '[މާދަމާ] LT',\n        nextWeek : 'dddd LT',\n        lastDay : '[އިއްޔެ] LT',\n        lastWeek : '[ފާއިތުވި] dddd LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'ތެރޭގައި %s',\n        past : 'ކުރިން %s',\n        s : 'ސިކުންތުކޮޅެއް',\n        m : 'މިނިޓެއް',\n        mm : 'މިނިޓު %d',\n        h : 'ގަޑިއިރެއް',\n        hh : 'ގަޑިއިރު %d',\n        d : 'ދުވަހެއް',\n        dd : 'ދުވަސް %d',\n        M : 'މަހެއް',\n        MM : 'މަސް %d',\n        y : 'އަހަރެއް',\n        yy : 'އަހަރު %d'\n    },\n    preparse: function (string) {\n        return string.replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/,/g, '،');\n    },\n    week : {\n        dow : 7,  // Sunday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn dv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\nfunction isFunction(input) {\n    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n}\n\n\nvar el = moment.defineLocale('el', {\n    monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n    monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n    months : function (momentToFormat, format) {\n        if (!momentToFormat) {\n            return this._monthsNominativeEl;\n        } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n            return this._monthsGenitiveEl[momentToFormat.month()];\n        } else {\n            return this._monthsNominativeEl[momentToFormat.month()];\n        }\n    },\n    monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n    weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n    weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n    weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n    meridiem : function (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'μμ' : 'ΜΜ';\n        } else {\n            return isLower ? 'πμ' : 'ΠΜ';\n        }\n    },\n    isPM : function (input) {\n        return ((input + '').toLowerCase()[0] === 'μ');\n    },\n    meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY h:mm A',\n        LLLL : 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendarEl : {\n        sameDay : '[Σήμερα {}] LT',\n        nextDay : '[Αύριο {}] LT',\n        nextWeek : 'dddd [{}] LT',\n        lastDay : '[Χθες {}] LT',\n        lastWeek : function () {\n            switch (this.day()) {\n                case 6:\n                    return '[το προηγούμενο] dddd [{}] LT';\n                default:\n                    return '[την προηγούμενη] dddd [{}] LT';\n            }\n        },\n        sameElse : 'L'\n    },\n    calendar : function (key, mom) {\n        var output = this._calendarEl[key],\n            hours = mom && mom.hours();\n        if (isFunction(output)) {\n            output = output.apply(mom);\n        }\n        return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n    },\n    relativeTime : {\n        future : 'σε %s',\n        past : '%s πριν',\n        s : 'λίγα δευτερόλεπτα',\n        m : 'ένα λεπτό',\n        mm : '%d λεπτά',\n        h : 'μία ώρα',\n        hh : '%d ώρες',\n        d : 'μία μέρα',\n        dd : '%d μέρες',\n        M : 'ένας μήνας',\n        MM : '%d μήνες',\n        y : 'ένας χρόνος',\n        yy : '%d χρόνια'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}η/,\n    ordinal: '%dη',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4st is the first week of the year.\n    }\n});\n\nreturn el;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Australia) [en-au]\n//! author : Jared Morse : https://github.com/jarcoal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar enAu = moment.defineLocale('en-au', {\n    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY h:mm A',\n        LLLL : 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar : {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'in %s',\n        past : '%s ago',\n        s : 'a few seconds',\n        m : 'a minute',\n        mm : '%d minutes',\n        h : 'an hour',\n        hh : '%d hours',\n        d : 'a day',\n        dd : '%d days',\n        M : 'a month',\n        MM : '%d months',\n        y : 'a year',\n        yy : '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn enAu;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Canada) [en-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar enCa = moment.defineLocale('en-ca', {\n    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'YYYY-MM-DD',\n        LL : 'MMMM D, YYYY',\n        LLL : 'MMMM D, YYYY h:mm A',\n        LLLL : 'dddd, MMMM D, YYYY h:mm A'\n    },\n    calendar : {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'in %s',\n        past : '%s ago',\n        s : 'a few seconds',\n        m : 'a minute',\n        mm : '%d minutes',\n        h : 'an hour',\n        hh : '%d hours',\n        d : 'a day',\n        dd : '%d days',\n        M : 'a month',\n        MM : '%d months',\n        y : 'a year',\n        yy : '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    }\n});\n\nreturn enCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar enGb = moment.defineLocale('en-gb', {\n    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'in %s',\n        past : '%s ago',\n        s : 'a few seconds',\n        m : 'a minute',\n        mm : '%d minutes',\n        h : 'an hour',\n        hh : '%d hours',\n        d : 'a day',\n        dd : '%d days',\n        M : 'a month',\n        MM : '%d months',\n        y : 'a year',\n        yy : '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn enGb;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar enIe = moment.defineLocale('en-ie', {\n    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD-MM-YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'in %s',\n        past : '%s ago',\n        s : 'a few seconds',\n        m : 'a minute',\n        mm : '%d minutes',\n        h : 'an hour',\n        hh : '%d hours',\n        d : 'a day',\n        dd : '%d days',\n        M : 'a month',\n        MM : '%d months',\n        y : 'a year',\n        yy : '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn enIe;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (New Zealand) [en-nz]\n//! author : Luke McGregor : https://github.com/lukemcgregor\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar enNz = moment.defineLocale('en-nz', {\n    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY h:mm A',\n        LLLL : 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar : {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'in %s',\n        past : '%s ago',\n        s : 'a few seconds',\n        m : 'a minute',\n        mm : '%d minutes',\n        h : 'an hour',\n        hh : '%d hours',\n        d : 'a day',\n        dd : '%d days',\n        M : 'a month',\n        MM : '%d months',\n        y : 'a year',\n        yy : '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn enNz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (Dominican Republic) [es-do]\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');\nvar monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\nvar monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\nvar monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\nvar esDo = moment.defineLocale('es-do', {\n    months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n    monthsShort : function (m, format) {\n        if (!m) {\n            return monthsShortDot;\n        } else if (/-MMM-/.test(format)) {\n            return monthsShort[m.month()];\n        } else {\n            return monthsShortDot[m.month()];\n        }\n    },\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n    monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n    weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n    weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D [de] MMMM [de] YYYY',\n        LLL : 'D [de] MMMM [de] YYYY h:mm A',\n        LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n    },\n    calendar : {\n        sameDay : function () {\n            return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        nextDay : function () {\n            return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        nextWeek : function () {\n            return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        lastDay : function () {\n            return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        lastWeek : function () {\n            return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'en %s',\n        past : 'hace %s',\n        s : 'unos segundos',\n        m : 'un minuto',\n        mm : '%d minutos',\n        h : 'una hora',\n        hh : '%d horas',\n        d : 'un día',\n        dd : '%d días',\n        M : 'un mes',\n        MM : '%d meses',\n        y : 'un año',\n        yy : '%d años'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n    ordinal : '%dº',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn esDo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (United States) [es-us]\n//! author : bustta : https://github.com/bustta\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');\nvar monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\nvar esUs = moment.defineLocale('es-us', {\n    months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n    monthsShort : function (m, format) {\n        if (!m) {\n            return monthsShortDot;\n        } else if (/-MMM-/.test(format)) {\n            return monthsShort[m.month()];\n        } else {\n            return monthsShortDot[m.month()];\n        }\n    },\n    monthsParseExact : true,\n    weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n    weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n    weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'MM/DD/YYYY',\n        LL : 'MMMM [de] D [de] YYYY',\n        LLL : 'MMMM [de] D [de] YYYY H:mm',\n        LLLL : 'dddd, MMMM [de] D [de] YYYY H:mm'\n    },\n    calendar : {\n        sameDay : function () {\n            return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        nextDay : function () {\n            return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        nextWeek : function () {\n            return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        lastDay : function () {\n            return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        lastWeek : function () {\n            return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'en %s',\n        past : 'hace %s',\n        s : 'unos segundos',\n        m : 'un minuto',\n        mm : '%d minutos',\n        h : 'una hora',\n        hh : '%d horas',\n        d : 'un día',\n        dd : '%d días',\n        M : 'un mes',\n        MM : '%d meses',\n        y : 'un año',\n        yy : '%d años'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n    ordinal : '%dº',\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn esUs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n        'm' : ['ühe minuti', 'üks minut'],\n        'mm': [number + ' minuti', number + ' minutit'],\n        'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n        'hh': [number + ' tunni', number + ' tundi'],\n        'd' : ['ühe päeva', 'üks päev'],\n        'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n        'MM': [number + ' kuu', number + ' kuud'],\n        'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n        'yy': [number + ' aasta', number + ' aastat']\n    };\n    if (withoutSuffix) {\n        return format[key][2] ? format[key][2] : format[key][1];\n    }\n    return isFuture ? format[key][0] : format[key][1];\n}\n\nvar et = moment.defineLocale('et', {\n    months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n    monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n    weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n    weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n    weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),\n    longDateFormat : {\n        LT   : 'H:mm',\n        LTS : 'H:mm:ss',\n        L    : 'DD.MM.YYYY',\n        LL   : 'D. MMMM YYYY',\n        LLL  : 'D. MMMM YYYY H:mm',\n        LLLL : 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay  : '[Täna,] LT',\n        nextDay  : '[Homme,] LT',\n        nextWeek : '[Järgmine] dddd LT',\n        lastDay  : '[Eile,] LT',\n        lastWeek : '[Eelmine] dddd LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s pärast',\n        past   : '%s tagasi',\n        s      : processRelativeTime,\n        m      : processRelativeTime,\n        mm     : processRelativeTime,\n        h      : processRelativeTime,\n        hh     : processRelativeTime,\n        d      : processRelativeTime,\n        dd     : '%d päeva',\n        M      : processRelativeTime,\n        MM     : processRelativeTime,\n        y      : processRelativeTime,\n        yy     : processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn et;\n\n})));\n","//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar eu = moment.defineLocale('eu', {\n    months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n    monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n    weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n    weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY-MM-DD',\n        LL : 'YYYY[ko] MMMM[ren] D[a]',\n        LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n        LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n        l : 'YYYY-M-D',\n        ll : 'YYYY[ko] MMM D[a]',\n        lll : 'YYYY[ko] MMM D[a] HH:mm',\n        llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n    },\n    calendar : {\n        sameDay : '[gaur] LT[etan]',\n        nextDay : '[bihar] LT[etan]',\n        nextWeek : 'dddd LT[etan]',\n        lastDay : '[atzo] LT[etan]',\n        lastWeek : '[aurreko] dddd LT[etan]',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s barru',\n        past : 'duela %s',\n        s : 'segundo batzuk',\n        m : 'minutu bat',\n        mm : '%d minutu',\n        h : 'ordu bat',\n        hh : '%d ordu',\n        d : 'egun bat',\n        dd : '%d egun',\n        M : 'hilabete bat',\n        MM : '%d hilabete',\n        y : 'urte bat',\n        yy : '%d urte'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn eu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '۱',\n    '2': '۲',\n    '3': '۳',\n    '4': '۴',\n    '5': '۵',\n    '6': '۶',\n    '7': '۷',\n    '8': '۸',\n    '9': '۹',\n    '0': '۰'\n};\nvar numberMap = {\n    '۱': '1',\n    '۲': '2',\n    '۳': '3',\n    '۴': '4',\n    '۵': '5',\n    '۶': '6',\n    '۷': '7',\n    '۸': '8',\n    '۹': '9',\n    '۰': '0'\n};\n\nvar fa = moment.defineLocale('fa', {\n    months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n    monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n    weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n    weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n    weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /قبل از ظهر|بعد از ظهر/,\n    isPM: function (input) {\n        return /بعد از ظهر/.test(input);\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'قبل از ظهر';\n        } else {\n            return 'بعد از ظهر';\n        }\n    },\n    calendar : {\n        sameDay : '[امروز ساعت] LT',\n        nextDay : '[فردا ساعت] LT',\n        nextWeek : 'dddd [ساعت] LT',\n        lastDay : '[دیروز ساعت] LT',\n        lastWeek : 'dddd [پیش] [ساعت] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'در %s',\n        past : '%s پیش',\n        s : 'چند ثانیه',\n        m : 'یک دقیقه',\n        mm : '%d دقیقه',\n        h : 'یک ساعت',\n        hh : '%d ساعت',\n        d : 'یک روز',\n        dd : '%d روز',\n        M : 'یک ماه',\n        MM : '%d ماه',\n        y : 'یک سال',\n        yy : '%d سال'\n    },\n    preparse: function (string) {\n        return string.replace(/[۰-۹]/g, function (match) {\n            return numberMap[match];\n        }).replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        }).replace(/,/g, '،');\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}م/,\n    ordinal : '%dم',\n    week : {\n        dow : 6, // Saturday is the first day of the week.\n        doy : 12 // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn fa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Finnish [fi]\n//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' ');\nvar numbersFuture = [\n        'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n        numbersPast[7], numbersPast[8], numbersPast[9]\n    ];\nfunction translate(number, withoutSuffix, key, isFuture) {\n    var result = '';\n    switch (key) {\n        case 's':\n            return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n        case 'm':\n            return isFuture ? 'minuutin' : 'minuutti';\n        case 'mm':\n            result = isFuture ? 'minuutin' : 'minuuttia';\n            break;\n        case 'h':\n            return isFuture ? 'tunnin' : 'tunti';\n        case 'hh':\n            result = isFuture ? 'tunnin' : 'tuntia';\n            break;\n        case 'd':\n            return isFuture ? 'päivän' : 'päivä';\n        case 'dd':\n            result = isFuture ? 'päivän' : 'päivää';\n            break;\n        case 'M':\n            return isFuture ? 'kuukauden' : 'kuukausi';\n        case 'MM':\n            result = isFuture ? 'kuukauden' : 'kuukautta';\n            break;\n        case 'y':\n            return isFuture ? 'vuoden' : 'vuosi';\n        case 'yy':\n            result = isFuture ? 'vuoden' : 'vuotta';\n            break;\n    }\n    result = verbalNumber(number, isFuture) + ' ' + result;\n    return result;\n}\nfunction verbalNumber(number, isFuture) {\n    return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n}\n\nvar fi = moment.defineLocale('fi', {\n    months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n    monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n    weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n    weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n    weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n    longDateFormat : {\n        LT : 'HH.mm',\n        LTS : 'HH.mm.ss',\n        L : 'DD.MM.YYYY',\n        LL : 'Do MMMM[ta] YYYY',\n        LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n        LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n        l : 'D.M.YYYY',\n        ll : 'Do MMM YYYY',\n        lll : 'Do MMM YYYY, [klo] HH.mm',\n        llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n    },\n    calendar : {\n        sameDay : '[tänään] [klo] LT',\n        nextDay : '[huomenna] [klo] LT',\n        nextWeek : 'dddd [klo] LT',\n        lastDay : '[eilen] [klo] LT',\n        lastWeek : '[viime] dddd[na] [klo] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s päästä',\n        past : '%s sitten',\n        s : translate,\n        m : translate,\n        mm : translate,\n        h : translate,\n        hh : translate,\n        d : translate,\n        dd : translate,\n        M : translate,\n        MM : translate,\n        y : translate,\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn fi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar fo = moment.defineLocale('fo', {\n    months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n    weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n    weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n    weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D. MMMM, YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Í dag kl.] LT',\n        nextDay : '[Í morgin kl.] LT',\n        nextWeek : 'dddd [kl.] LT',\n        lastDay : '[Í gjár kl.] LT',\n        lastWeek : '[síðstu] dddd [kl] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'um %s',\n        past : '%s síðani',\n        s : 'fá sekund',\n        m : 'ein minutt',\n        mm : '%d minuttir',\n        h : 'ein tími',\n        hh : '%d tímar',\n        d : 'ein dagur',\n        dd : '%d dagar',\n        M : 'ein mánaði',\n        MM : '%d mánaðir',\n        y : 'eitt ár',\n        yy : '%d ár'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn fo;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar frCa = moment.defineLocale('fr-ca', {\n    months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n    monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n    weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n    weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY-MM-DD',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Aujourd’hui à] LT',\n        nextDay : '[Demain à] LT',\n        nextWeek : 'dddd [à] LT',\n        lastDay : '[Hier à] LT',\n        lastWeek : 'dddd [dernier à] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'dans %s',\n        past : 'il y a %s',\n        s : 'quelques secondes',\n        m : 'une minute',\n        mm : '%d minutes',\n        h : 'une heure',\n        hh : '%d heures',\n        d : 'un jour',\n        dd : '%d jours',\n        M : 'un mois',\n        MM : '%d mois',\n        y : 'un an',\n        yy : '%d ans'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            // Words with masculine grammatical gender: mois, trimestre, jour\n            default:\n            case 'M':\n            case 'Q':\n            case 'D':\n            case 'DDD':\n            case 'd':\n                return number + (number === 1 ? 'er' : 'e');\n\n            // Words with feminine grammatical gender: semaine\n            case 'w':\n            case 'W':\n                return number + (number === 1 ? 're' : 'e');\n        }\n    }\n});\n\nreturn frCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Switzerland) [fr-ch]\n//! author : Gaspard Bucher : https://github.com/gaspard\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar frCh = moment.defineLocale('fr-ch', {\n    months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n    monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n    weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n    weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Aujourd’hui à] LT',\n        nextDay : '[Demain à] LT',\n        nextWeek : 'dddd [à] LT',\n        lastDay : '[Hier à] LT',\n        lastWeek : 'dddd [dernier à] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'dans %s',\n        past : 'il y a %s',\n        s : 'quelques secondes',\n        m : 'une minute',\n        mm : '%d minutes',\n        h : 'une heure',\n        hh : '%d heures',\n        d : 'un jour',\n        dd : '%d jours',\n        M : 'un mois',\n        MM : '%d mois',\n        y : 'un an',\n        yy : '%d ans'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            // Words with masculine grammatical gender: mois, trimestre, jour\n            default:\n            case 'M':\n            case 'Q':\n            case 'D':\n            case 'DDD':\n            case 'd':\n                return number + (number === 1 ? 'er' : 'e');\n\n            // Words with feminine grammatical gender: semaine\n            case 'w':\n            case 'W':\n                return number + (number === 1 ? 're' : 'e');\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn frCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Frisian [fy]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_');\nvar monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\nvar fy = moment.defineLocale('fy', {\n    months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n    monthsShort : function (m, format) {\n        if (!m) {\n            return monthsShortWithDots;\n        } else if (/-MMM-/.test(format)) {\n            return monthsShortWithoutDots[m.month()];\n        } else {\n            return monthsShortWithDots[m.month()];\n        }\n    },\n    monthsParseExact : true,\n    weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n    weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n    weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD-MM-YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[hjoed om] LT',\n        nextDay: '[moarn om] LT',\n        nextWeek: 'dddd [om] LT',\n        lastDay: '[juster om] LT',\n        lastWeek: '[ôfrûne] dddd [om] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'oer %s',\n        past : '%s lyn',\n        s : 'in pear sekonden',\n        m : 'ien minút',\n        mm : '%d minuten',\n        h : 'ien oere',\n        hh : '%d oeren',\n        d : 'ien dei',\n        dd : '%d dagen',\n        M : 'ien moanne',\n        MM : '%d moannen',\n        y : 'ien jier',\n        yy : '%d jierren'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal : function (number) {\n        return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn fy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar months = [\n    'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'\n];\n\nvar monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n\nvar weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n\nvar weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n\nvar weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\nvar gd = moment.defineLocale('gd', {\n    months : months,\n    monthsShort : monthsShort,\n    monthsParseExact : true,\n    weekdays : weekdays,\n    weekdaysShort : weekdaysShort,\n    weekdaysMin : weekdaysMin,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[An-diugh aig] LT',\n        nextDay : '[A-màireach aig] LT',\n        nextWeek : 'dddd [aig] LT',\n        lastDay : '[An-dè aig] LT',\n        lastWeek : 'dddd [seo chaidh] [aig] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'ann an %s',\n        past : 'bho chionn %s',\n        s : 'beagan diogan',\n        m : 'mionaid',\n        mm : '%d mionaidean',\n        h : 'uair',\n        hh : '%d uairean',\n        d : 'latha',\n        dd : '%d latha',\n        M : 'mìos',\n        MM : '%d mìosan',\n        y : 'bliadhna',\n        yy : '%d bliadhna'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}(d|na|mh)/,\n    ordinal : function (number) {\n        var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn gd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Galician [gl]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar gl = moment.defineLocale('gl', {\n    months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n    monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n    weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n    weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D [de] MMMM [de] YYYY',\n        LLL : 'D [de] MMMM [de] YYYY H:mm',\n        LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n    },\n    calendar : {\n        sameDay : function () {\n            return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n        },\n        nextDay : function () {\n            return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n        },\n        nextWeek : function () {\n            return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n        },\n        lastDay : function () {\n            return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n        },\n        lastWeek : function () {\n            return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : function (str) {\n            if (str.indexOf('un') === 0) {\n                return 'n' + str;\n            }\n            return 'en ' + str;\n        },\n        past : 'hai %s',\n        s : 'uns segundos',\n        m : 'un minuto',\n        mm : '%d minutos',\n        h : 'unha hora',\n        hh : '%d horas',\n        d : 'un día',\n        dd : '%d días',\n        M : 'un mes',\n        MM : '%d meses',\n        y : 'un ano',\n        yy : '%d anos'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n    ordinal : '%dº',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn gl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Konkani Latin script [gom-latn]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        's': ['thodde secondanim', 'thodde second'],\n        'm': ['eka mintan', 'ek minute'],\n        'mm': [number + ' mintanim', number + ' mintam'],\n        'h': ['eka horan', 'ek hor'],\n        'hh': [number + ' horanim', number + ' hor'],\n        'd': ['eka disan', 'ek dis'],\n        'dd': [number + ' disanim', number + ' dis'],\n        'M': ['eka mhoinean', 'ek mhoino'],\n        'MM': [number + ' mhoineanim', number + ' mhoine'],\n        'y': ['eka vorsan', 'ek voros'],\n        'yy': [number + ' vorsanim', number + ' vorsam']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n}\n\nvar gomLatn = moment.defineLocale('gom-latn', {\n    months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n    monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n    weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n    weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'A h:mm [vazta]',\n        LTS : 'A h:mm:ss [vazta]',\n        L : 'DD-MM-YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY A h:mm [vazta]',\n        LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n        llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n    },\n    calendar : {\n        sameDay: '[Aiz] LT',\n        nextDay: '[Faleam] LT',\n        nextWeek: '[Ieta to] dddd[,] LT',\n        lastDay: '[Kal] LT',\n        lastWeek: '[Fatlo] dddd[,] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : '%s',\n        past : '%s adim',\n        s : processRelativeTime,\n        m : processRelativeTime,\n        mm : processRelativeTime,\n        h : processRelativeTime,\n        hh : processRelativeTime,\n        d : processRelativeTime,\n        dd : processRelativeTime,\n        M : processRelativeTime,\n        MM : processRelativeTime,\n        y : processRelativeTime,\n        yy : processRelativeTime\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}(er)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            // the ordinal 'er' only applies to day of the month\n            case 'D':\n                return number + 'er';\n            default:\n            case 'M':\n            case 'Q':\n            case 'DDD':\n            case 'd':\n            case 'w':\n            case 'W':\n                return number;\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    },\n    meridiemParse: /rati|sokalli|donparam|sanje/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'rati') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'sokalli') {\n            return hour;\n        } else if (meridiem === 'donparam') {\n            return hour > 12 ? hour : hour + 12;\n        } else if (meridiem === 'sanje') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'rati';\n        } else if (hour < 12) {\n            return 'sokalli';\n        } else if (hour < 16) {\n            return 'donparam';\n        } else if (hour < 20) {\n            return 'sanje';\n        } else {\n            return 'rati';\n        }\n    }\n});\n\nreturn gomLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Gujarati [gu]\n//! author : Kaushik Thanki : https://github.com/Kaushik1987\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n        '1': '૧',\n        '2': '૨',\n        '3': '૩',\n        '4': '૪',\n        '5': '૫',\n        '6': '૬',\n        '7': '૭',\n        '8': '૮',\n        '9': '૯',\n        '0': '૦'\n    };\nvar numberMap = {\n        '૧': '1',\n        '૨': '2',\n        '૩': '3',\n        '૪': '4',\n        '૫': '5',\n        '૬': '6',\n        '૭': '7',\n        '૮': '8',\n        '૯': '9',\n        '૦': '0'\n    };\n\nvar gu = moment.defineLocale('gu', {\n    months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n    monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n    weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n    weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n    longDateFormat: {\n        LT: 'A h:mm વાગ્યે',\n        LTS: 'A h:mm:ss વાગ્યે',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n        LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n    },\n    calendar: {\n        sameDay: '[આજ] LT',\n        nextDay: '[કાલે] LT',\n        nextWeek: 'dddd, LT',\n        lastDay: '[ગઇકાલે] LT',\n        lastWeek: '[પાછલા] dddd, LT',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: '%s મા',\n        past: '%s પેહલા',\n        s: 'અમુક પળો',\n        m: 'એક મિનિટ',\n        mm: '%d મિનિટ',\n        h: 'એક કલાક',\n        hh: '%d કલાક',\n        d: 'એક દિવસ',\n        dd: '%d દિવસ',\n        M: 'એક મહિનો',\n        MM: '%d મહિનો',\n        y: 'એક વર્ષ',\n        yy: '%d વર્ષ'\n    },\n    preparse: function (string) {\n        return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n    meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n    meridiemHour: function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'રાત') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'સવાર') {\n            return hour;\n        } else if (meridiem === 'બપોર') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'સાંજ') {\n            return hour + 12;\n        }\n    },\n    meridiem: function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'રાત';\n        } else if (hour < 10) {\n            return 'સવાર';\n        } else if (hour < 17) {\n            return 'બપોર';\n        } else if (hour < 20) {\n            return 'સાંજ';\n        } else {\n            return 'રાત';\n        }\n    },\n    week: {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6 // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn gu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar he = moment.defineLocale('he', {\n    months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n    monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n    weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n    weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n    weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D [ב]MMMM YYYY',\n        LLL : 'D [ב]MMMM YYYY HH:mm',\n        LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n        l : 'D/M/YYYY',\n        ll : 'D MMM YYYY',\n        lll : 'D MMM YYYY HH:mm',\n        llll : 'ddd, D MMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[היום ב־]LT',\n        nextDay : '[מחר ב־]LT',\n        nextWeek : 'dddd [בשעה] LT',\n        lastDay : '[אתמול ב־]LT',\n        lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'בעוד %s',\n        past : 'לפני %s',\n        s : 'מספר שניות',\n        m : 'דקה',\n        mm : '%d דקות',\n        h : 'שעה',\n        hh : function (number) {\n            if (number === 2) {\n                return 'שעתיים';\n            }\n            return number + ' שעות';\n        },\n        d : 'יום',\n        dd : function (number) {\n            if (number === 2) {\n                return 'יומיים';\n            }\n            return number + ' ימים';\n        },\n        M : 'חודש',\n        MM : function (number) {\n            if (number === 2) {\n                return 'חודשיים';\n            }\n            return number + ' חודשים';\n        },\n        y : 'שנה',\n        yy : function (number) {\n            if (number === 2) {\n                return 'שנתיים';\n            } else if (number % 10 === 0 && number !== 10) {\n                return number + ' שנה';\n            }\n            return number + ' שנים';\n        }\n    },\n    meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n    isPM : function (input) {\n        return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 5) {\n            return 'לפנות בוקר';\n        } else if (hour < 10) {\n            return 'בבוקר';\n        } else if (hour < 12) {\n            return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n        } else if (hour < 18) {\n            return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n        } else {\n            return 'בערב';\n        }\n    }\n});\n\nreturn he;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '१',\n    '2': '२',\n    '3': '३',\n    '4': '४',\n    '5': '५',\n    '6': '६',\n    '7': '७',\n    '8': '८',\n    '9': '९',\n    '0': '०'\n};\nvar numberMap = {\n    '१': '1',\n    '२': '2',\n    '३': '3',\n    '४': '4',\n    '५': '5',\n    '६': '6',\n    '७': '7',\n    '८': '8',\n    '९': '9',\n    '०': '0'\n};\n\nvar hi = moment.defineLocale('hi', {\n    months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n    monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n    weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n    weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm बजे',\n        LTS : 'A h:mm:ss बजे',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm बजे',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n    },\n    calendar : {\n        sameDay : '[आज] LT',\n        nextDay : '[कल] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[कल] LT',\n        lastWeek : '[पिछले] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s में',\n        past : '%s पहले',\n        s : 'कुछ ही क्षण',\n        m : 'एक मिनट',\n        mm : '%d मिनट',\n        h : 'एक घंटा',\n        hh : '%d घंटे',\n        d : 'एक दिन',\n        dd : '%d दिन',\n        M : 'एक महीने',\n        MM : '%d महीने',\n        y : 'एक वर्ष',\n        yy : '%d वर्ष'\n    },\n    preparse: function (string) {\n        return string.replace(/[१२३४५६७८९०]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n    meridiemParse: /रात|सुबह|दोपहर|शाम/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'रात') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'सुबह') {\n            return hour;\n        } else if (meridiem === 'दोपहर') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'शाम') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'रात';\n        } else if (hour < 10) {\n            return 'सुबह';\n        } else if (hour < 17) {\n            return 'दोपहर';\n        } else if (hour < 20) {\n            return 'शाम';\n        } else {\n            return 'रात';\n        }\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn hi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction translate(number, withoutSuffix, key) {\n    var result = number + ' ';\n    switch (key) {\n        case 'm':\n            return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n        case 'mm':\n            if (number === 1) {\n                result += 'minuta';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'minute';\n            } else {\n                result += 'minuta';\n            }\n            return result;\n        case 'h':\n            return withoutSuffix ? 'jedan sat' : 'jednog sata';\n        case 'hh':\n            if (number === 1) {\n                result += 'sat';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'sata';\n            } else {\n                result += 'sati';\n            }\n            return result;\n        case 'dd':\n            if (number === 1) {\n                result += 'dan';\n            } else {\n                result += 'dana';\n            }\n            return result;\n        case 'MM':\n            if (number === 1) {\n                result += 'mjesec';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'mjeseca';\n            } else {\n                result += 'mjeseci';\n            }\n            return result;\n        case 'yy':\n            if (number === 1) {\n                result += 'godina';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'godine';\n            } else {\n                result += 'godina';\n            }\n            return result;\n    }\n}\n\nvar hr = moment.defineLocale('hr', {\n    months : {\n        format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n        standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n    },\n    monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n    weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY H:mm',\n        LLLL : 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay  : '[danas u] LT',\n        nextDay  : '[sutra u] LT',\n        nextWeek : function () {\n            switch (this.day()) {\n                case 0:\n                    return '[u] [nedjelju] [u] LT';\n                case 3:\n                    return '[u] [srijedu] [u] LT';\n                case 6:\n                    return '[u] [subotu] [u] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[u] dddd [u] LT';\n            }\n        },\n        lastDay  : '[jučer u] LT',\n        lastWeek : function () {\n            switch (this.day()) {\n                case 0:\n                case 3:\n                    return '[prošlu] dddd [u] LT';\n                case 6:\n                    return '[prošle] [subote] [u] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[prošli] dddd [u] LT';\n            }\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past   : 'prije %s',\n        s      : 'par sekundi',\n        m      : translate,\n        mm     : translate,\n        h      : translate,\n        hh     : translate,\n        d      : 'dan',\n        dd     : translate,\n        M      : 'mjesec',\n        MM     : translate,\n        y      : 'godinu',\n        yy     : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn hr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hungarian [hu]\n//! author : Adam Brunner : https://github.com/adambrunner\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\nfunction translate(number, withoutSuffix, key, isFuture) {\n    var num = number;\n    switch (key) {\n        case 's':\n            return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n        case 'm':\n            return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n        case 'mm':\n            return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n        case 'h':\n            return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n        case 'hh':\n            return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n        case 'd':\n            return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n        case 'dd':\n            return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n        case 'M':\n            return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n        case 'MM':\n            return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n        case 'y':\n            return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n        case 'yy':\n            return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n    }\n    return '';\n}\nfunction week(isFuture) {\n    return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n}\n\nvar hu = moment.defineLocale('hu', {\n    months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n    monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n    weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n    weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n    weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'YYYY.MM.DD.',\n        LL : 'YYYY. MMMM D.',\n        LLL : 'YYYY. MMMM D. H:mm',\n        LLLL : 'YYYY. MMMM D., dddd H:mm'\n    },\n    meridiemParse: /de|du/i,\n    isPM: function (input) {\n        return input.charAt(1).toLowerCase() === 'u';\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 12) {\n            return isLower === true ? 'de' : 'DE';\n        } else {\n            return isLower === true ? 'du' : 'DU';\n        }\n    },\n    calendar : {\n        sameDay : '[ma] LT[-kor]',\n        nextDay : '[holnap] LT[-kor]',\n        nextWeek : function () {\n            return week.call(this, true);\n        },\n        lastDay : '[tegnap] LT[-kor]',\n        lastWeek : function () {\n            return week.call(this, false);\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s múlva',\n        past : '%s',\n        s : translate,\n        m : translate,\n        mm : translate,\n        h : translate,\n        hh : translate,\n        d : translate,\n        dd : translate,\n        M : translate,\n        MM : translate,\n        y : translate,\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn hu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar id = moment.defineLocale('id', {\n    months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'),\n    weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n    weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n    weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n    longDateFormat : {\n        LT : 'HH.mm',\n        LTS : 'HH.mm.ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY [pukul] HH.mm',\n        LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /pagi|siang|sore|malam/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'pagi') {\n            return hour;\n        } else if (meridiem === 'siang') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === 'sore' || meridiem === 'malam') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 11) {\n            return 'pagi';\n        } else if (hours < 15) {\n            return 'siang';\n        } else if (hours < 19) {\n            return 'sore';\n        } else {\n            return 'malam';\n        }\n    },\n    calendar : {\n        sameDay : '[Hari ini pukul] LT',\n        nextDay : '[Besok pukul] LT',\n        nextWeek : 'dddd [pukul] LT',\n        lastDay : '[Kemarin pukul] LT',\n        lastWeek : 'dddd [lalu pukul] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'dalam %s',\n        past : '%s yang lalu',\n        s : 'beberapa detik',\n        m : 'semenit',\n        mm : '%d menit',\n        h : 'sejam',\n        hh : '%d jam',\n        d : 'sehari',\n        dd : '%d hari',\n        M : 'sebulan',\n        MM : '%d bulan',\n        y : 'setahun',\n        yy : '%d tahun'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn id;\n\n})));\n","//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction plural(n) {\n    if (n % 100 === 11) {\n        return true;\n    } else if (n % 10 === 1) {\n        return false;\n    }\n    return true;\n}\nfunction translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    switch (key) {\n        case 's':\n            return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n        case 'm':\n            return withoutSuffix ? 'mínúta' : 'mínútu';\n        case 'mm':\n            if (plural(number)) {\n                return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n            } else if (withoutSuffix) {\n                return result + 'mínúta';\n            }\n            return result + 'mínútu';\n        case 'hh':\n            if (plural(number)) {\n                return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n            }\n            return result + 'klukkustund';\n        case 'd':\n            if (withoutSuffix) {\n                return 'dagur';\n            }\n            return isFuture ? 'dag' : 'degi';\n        case 'dd':\n            if (plural(number)) {\n                if (withoutSuffix) {\n                    return result + 'dagar';\n                }\n                return result + (isFuture ? 'daga' : 'dögum');\n            } else if (withoutSuffix) {\n                return result + 'dagur';\n            }\n            return result + (isFuture ? 'dag' : 'degi');\n        case 'M':\n            if (withoutSuffix) {\n                return 'mánuður';\n            }\n            return isFuture ? 'mánuð' : 'mánuði';\n        case 'MM':\n            if (plural(number)) {\n                if (withoutSuffix) {\n                    return result + 'mánuðir';\n                }\n                return result + (isFuture ? 'mánuði' : 'mánuðum');\n            } else if (withoutSuffix) {\n                return result + 'mánuður';\n            }\n            return result + (isFuture ? 'mánuð' : 'mánuði');\n        case 'y':\n            return withoutSuffix || isFuture ? 'ár' : 'ári';\n        case 'yy':\n            if (plural(number)) {\n                return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n            }\n            return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n    }\n}\n\nvar is = moment.defineLocale('is', {\n    months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n    weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n    weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n    weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY [kl.] H:mm',\n        LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n    },\n    calendar : {\n        sameDay : '[í dag kl.] LT',\n        nextDay : '[á morgun kl.] LT',\n        nextWeek : 'dddd [kl.] LT',\n        lastDay : '[í gær kl.] LT',\n        lastWeek : '[síðasta] dddd [kl.] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'eftir %s',\n        past : 'fyrir %s síðan',\n        s : translate,\n        m : translate,\n        mm : translate,\n        h : 'klukkustund',\n        hh : translate,\n        d : translate,\n        dd : translate,\n        M : translate,\n        MM : translate,\n        y : translate,\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn is;\n\n})));\n","//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar ja = moment.defineLocale('ja', {\n    months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n    weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n    weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY/MM/DD',\n        LL : 'YYYY年M月D日',\n        LLL : 'YYYY年M月D日 HH:mm',\n        LLLL : 'YYYY年M月D日 HH:mm dddd',\n        l : 'YYYY/MM/DD',\n        ll : 'YYYY年M月D日',\n        lll : 'YYYY年M月D日 HH:mm',\n        llll : 'YYYY年M月D日 HH:mm dddd'\n    },\n    meridiemParse: /午前|午後/i,\n    isPM : function (input) {\n        return input === '午後';\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return '午前';\n        } else {\n            return '午後';\n        }\n    },\n    calendar : {\n        sameDay : '[今日] LT',\n        nextDay : '[明日] LT',\n        nextWeek : '[来週]dddd LT',\n        lastDay : '[昨日] LT',\n        lastWeek : '[前週]dddd LT',\n        sameElse : 'L'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}日/,\n    ordinal : function (number, period) {\n        switch (period) {\n            case 'd':\n            case 'D':\n            case 'DDD':\n                return number + '日';\n            default:\n                return number;\n        }\n    },\n    relativeTime : {\n        future : '%s後',\n        past : '%s前',\n        s : '数秒',\n        m : '1分',\n        mm : '%d分',\n        h : '1時間',\n        hh : '%d時間',\n        d : '1日',\n        dd : '%d日',\n        M : '1ヶ月',\n        MM : '%dヶ月',\n        y : '1年',\n        yy : '%d年'\n    }\n});\n\nreturn ja;\n\n})));\n","//! moment.js locale configuration\n//! locale : Javanese [jv]\n//! author : Rony Lantip : https://github.com/lantip\n//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar jv = moment.defineLocale('jv', {\n    months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n    weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n    weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n    weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n    longDateFormat : {\n        LT : 'HH.mm',\n        LTS : 'HH.mm.ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY [pukul] HH.mm',\n        LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /enjing|siyang|sonten|ndalu/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'enjing') {\n            return hour;\n        } else if (meridiem === 'siyang') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 11) {\n            return 'enjing';\n        } else if (hours < 15) {\n            return 'siyang';\n        } else if (hours < 19) {\n            return 'sonten';\n        } else {\n            return 'ndalu';\n        }\n    },\n    calendar : {\n        sameDay : '[Dinten puniko pukul] LT',\n        nextDay : '[Mbenjang pukul] LT',\n        nextWeek : 'dddd [pukul] LT',\n        lastDay : '[Kala wingi pukul] LT',\n        lastWeek : 'dddd [kepengker pukul] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'wonten ing %s',\n        past : '%s ingkang kepengker',\n        s : 'sawetawis detik',\n        m : 'setunggal menit',\n        mm : '%d menit',\n        h : 'setunggal jam',\n        hh : '%d jam',\n        d : 'sedinten',\n        dd : '%d dinten',\n        M : 'sewulan',\n        MM : '%d wulan',\n        y : 'setaun',\n        yy : '%d taun'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn jv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Georgian [ka]\n//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar ka = moment.defineLocale('ka', {\n    months : {\n        standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n        format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n    },\n    monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n    weekdays : {\n        standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n        format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n        isFormat: /(წინა|შემდეგ)/\n    },\n    weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n    weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY h:mm A',\n        LLLL : 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar : {\n        sameDay : '[დღეს] LT[-ზე]',\n        nextDay : '[ხვალ] LT[-ზე]',\n        lastDay : '[გუშინ] LT[-ზე]',\n        nextWeek : '[შემდეგ] dddd LT[-ზე]',\n        lastWeek : '[წინა] dddd LT-ზე',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : function (s) {\n            return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n                s.replace(/ი$/, 'ში') :\n                s + 'ში';\n        },\n        past : function (s) {\n            if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n                return s.replace(/(ი|ე)$/, 'ის უკან');\n            }\n            if ((/წელი/).test(s)) {\n                return s.replace(/წელი$/, 'წლის უკან');\n            }\n        },\n        s : 'რამდენიმე წამი',\n        m : 'წუთი',\n        mm : '%d წუთი',\n        h : 'საათი',\n        hh : '%d საათი',\n        d : 'დღე',\n        dd : '%d დღე',\n        M : 'თვე',\n        MM : '%d თვე',\n        y : 'წელი',\n        yy : '%d წელი'\n    },\n    dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n    ordinal : function (number) {\n        if (number === 0) {\n            return number;\n        }\n        if (number === 1) {\n            return number + '-ლი';\n        }\n        if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n            return 'მე-' + number;\n        }\n        return number + '-ე';\n    },\n    week : {\n        dow : 1,\n        doy : 7\n    }\n});\n\nreturn ka;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kazakh [kk]\n//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar suffixes = {\n    0: '-ші',\n    1: '-ші',\n    2: '-ші',\n    3: '-ші',\n    4: '-ші',\n    5: '-ші',\n    6: '-шы',\n    7: '-ші',\n    8: '-ші',\n    9: '-шы',\n    10: '-шы',\n    20: '-шы',\n    30: '-шы',\n    40: '-шы',\n    50: '-ші',\n    60: '-шы',\n    70: '-ші',\n    80: '-ші',\n    90: '-шы',\n    100: '-ші'\n};\n\nvar kk = moment.defineLocale('kk', {\n    months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n    monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n    weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n    weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n    weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Бүгін сағат] LT',\n        nextDay : '[Ертең сағат] LT',\n        nextWeek : 'dddd [сағат] LT',\n        lastDay : '[Кеше сағат] LT',\n        lastWeek : '[Өткен аптаның] dddd [сағат] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s ішінде',\n        past : '%s бұрын',\n        s : 'бірнеше секунд',\n        m : 'бір минут',\n        mm : '%d минут',\n        h : 'бір сағат',\n        hh : '%d сағат',\n        d : 'бір күн',\n        dd : '%d күн',\n        M : 'бір ай',\n        MM : '%d ай',\n        y : 'бір жыл',\n        yy : '%d жыл'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n    ordinal : function (number) {\n        var a = number % 10,\n            b = number >= 100 ? 100 : null;\n        return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn kk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Cambodian [km]\n//! author : Kruy Vanna : https://github.com/kruyvanna\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar km = moment.defineLocale('km', {\n    months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n    monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n    weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n    weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n    weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n    longDateFormat: {\n        LT: 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY HH:mm',\n        LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n        sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n        nextDay: '[ស្អែក ម៉ោង] LT',\n        nextWeek: 'dddd [ម៉ោង] LT',\n        lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n        lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: '%sទៀត',\n        past: '%sមុន',\n        s: 'ប៉ុន្មានវិនាទី',\n        m: 'មួយនាទី',\n        mm: '%d នាទី',\n        h: 'មួយម៉ោង',\n        hh: '%d ម៉ោង',\n        d: 'មួយថ្ងៃ',\n        dd: '%d ថ្ងៃ',\n        M: 'មួយខែ',\n        MM: '%d ខែ',\n        y: 'មួយឆ្នាំ',\n        yy: '%d ឆ្នាំ'\n    },\n    week: {\n        dow: 1, // Monday is the first day of the week.\n        doy: 4 // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn km;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kannada [kn]\n//! author : Rajeev Naik : https://github.com/rajeevnaikte\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '೧',\n    '2': '೨',\n    '3': '೩',\n    '4': '೪',\n    '5': '೫',\n    '6': '೬',\n    '7': '೭',\n    '8': '೮',\n    '9': '೯',\n    '0': '೦'\n};\nvar numberMap = {\n    '೧': '1',\n    '೨': '2',\n    '೩': '3',\n    '೪': '4',\n    '೫': '5',\n    '೬': '6',\n    '೭': '7',\n    '೮': '8',\n    '೯': '9',\n    '೦': '0'\n};\n\nvar kn = moment.defineLocale('kn', {\n    months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n    monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n    weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n    weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm',\n        LTS : 'A h:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm'\n    },\n    calendar : {\n        sameDay : '[ಇಂದು] LT',\n        nextDay : '[ನಾಳೆ] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[ನಿನ್ನೆ] LT',\n        lastWeek : '[ಕೊನೆಯ] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s ನಂತರ',\n        past : '%s ಹಿಂದೆ',\n        s : 'ಕೆಲವು ಕ್ಷಣಗಳು',\n        m : 'ಒಂದು ನಿಮಿಷ',\n        mm : '%d ನಿಮಿಷ',\n        h : 'ಒಂದು ಗಂಟೆ',\n        hh : '%d ಗಂಟೆ',\n        d : 'ಒಂದು ದಿನ',\n        dd : '%d ದಿನ',\n        M : 'ಒಂದು ತಿಂಗಳು',\n        MM : '%d ತಿಂಗಳು',\n        y : 'ಒಂದು ವರ್ಷ',\n        yy : '%d ವರ್ಷ'\n    },\n    preparse: function (string) {\n        return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'ರಾತ್ರಿ') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n            return hour;\n        } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'ಸಂಜೆ') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'ರಾತ್ರಿ';\n        } else if (hour < 10) {\n            return 'ಬೆಳಿಗ್ಗೆ';\n        } else if (hour < 17) {\n            return 'ಮಧ್ಯಾಹ್ನ';\n        } else if (hour < 20) {\n            return 'ಸಂಜೆ';\n        } else {\n            return 'ರಾತ್ರಿ';\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n    ordinal : function (number) {\n        return number + 'ನೇ';\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn kn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee <jeeeyul@gmail.com>\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar ko = moment.defineLocale('ko', {\n    months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n    monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n    weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n    weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n    weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm',\n        LTS : 'A h:mm:ss',\n        L : 'YYYY.MM.DD',\n        LL : 'YYYY년 MMMM D일',\n        LLL : 'YYYY년 MMMM D일 A h:mm',\n        LLLL : 'YYYY년 MMMM D일 dddd A h:mm',\n        l : 'YYYY.MM.DD',\n        ll : 'YYYY년 MMMM D일',\n        lll : 'YYYY년 MMMM D일 A h:mm',\n        llll : 'YYYY년 MMMM D일 dddd A h:mm'\n    },\n    calendar : {\n        sameDay : '오늘 LT',\n        nextDay : '내일 LT',\n        nextWeek : 'dddd LT',\n        lastDay : '어제 LT',\n        lastWeek : '지난주 dddd LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s 후',\n        past : '%s 전',\n        s : '몇 초',\n        ss : '%d초',\n        m : '1분',\n        mm : '%d분',\n        h : '한 시간',\n        hh : '%d시간',\n        d : '하루',\n        dd : '%d일',\n        M : '한 달',\n        MM : '%d달',\n        y : '일 년',\n        yy : '%d년'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}(일|월|주)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            case 'd':\n            case 'D':\n            case 'DDD':\n                return number + '일';\n            case 'M':\n                return number + '월';\n            case 'w':\n            case 'W':\n                return number + '주';\n            default:\n                return number;\n        }\n    },\n    meridiemParse : /오전|오후/,\n    isPM : function (token) {\n        return token === '오후';\n    },\n    meridiem : function (hour, minute, isUpper) {\n        return hour < 12 ? '오전' : '오후';\n    }\n});\n\nreturn ko;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kyrgyz [ky]\n//! author : Chyngyz Arystan uulu : https://github.com/chyngyz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n\nvar suffixes = {\n    0: '-чү',\n    1: '-чи',\n    2: '-чи',\n    3: '-чү',\n    4: '-чү',\n    5: '-чи',\n    6: '-чы',\n    7: '-чи',\n    8: '-чи',\n    9: '-чу',\n    10: '-чу',\n    20: '-чы',\n    30: '-чу',\n    40: '-чы',\n    50: '-чү',\n    60: '-чы',\n    70: '-чи',\n    80: '-чи',\n    90: '-чу',\n    100: '-чү'\n};\n\nvar ky = moment.defineLocale('ky', {\n    months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n    monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n    weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n    weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n    weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Бүгүн саат] LT',\n        nextDay : '[Эртең саат] LT',\n        nextWeek : 'dddd [саат] LT',\n        lastDay : '[Кече саат] LT',\n        lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s ичинде',\n        past : '%s мурун',\n        s : 'бирнече секунд',\n        m : 'бир мүнөт',\n        mm : '%d мүнөт',\n        h : 'бир саат',\n        hh : '%d саат',\n        d : 'бир күн',\n        dd : '%d күн',\n        M : 'бир ай',\n        MM : '%d ай',\n        y : 'бир жыл',\n        yy : '%d жыл'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n    ordinal : function (number) {\n        var a = number % 10,\n            b = number >= 100 ? 100 : null;\n        return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn ky;\n\n})));\n","//! moment.js locale configuration\n//! locale : Luxembourgish [lb]\n//! author : mweimerskirch : https://github.com/mweimerskirch\n//! author : David Raison : https://github.com/kwisatz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        'm': ['eng Minutt', 'enger Minutt'],\n        'h': ['eng Stonn', 'enger Stonn'],\n        'd': ['een Dag', 'engem Dag'],\n        'M': ['ee Mount', 'engem Mount'],\n        'y': ['ee Joer', 'engem Joer']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n}\nfunction processFutureTime(string) {\n    var number = string.substr(0, string.indexOf(' '));\n    if (eifelerRegelAppliesToNumber(number)) {\n        return 'a ' + string;\n    }\n    return 'an ' + string;\n}\nfunction processPastTime(string) {\n    var number = string.substr(0, string.indexOf(' '));\n    if (eifelerRegelAppliesToNumber(number)) {\n        return 'viru ' + string;\n    }\n    return 'virun ' + string;\n}\n/**\n * Returns true if the word before the given number loses the '-n' ending.\n * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n *\n * @param number {integer}\n * @returns {boolean}\n */\nfunction eifelerRegelAppliesToNumber(number) {\n    number = parseInt(number, 10);\n    if (isNaN(number)) {\n        return false;\n    }\n    if (number < 0) {\n        // Negative Number --> always true\n        return true;\n    } else if (number < 10) {\n        // Only 1 digit\n        if (4 <= number && number <= 7) {\n            return true;\n        }\n        return false;\n    } else if (number < 100) {\n        // 2 digits\n        var lastDigit = number % 10, firstDigit = number / 10;\n        if (lastDigit === 0) {\n            return eifelerRegelAppliesToNumber(firstDigit);\n        }\n        return eifelerRegelAppliesToNumber(lastDigit);\n    } else if (number < 10000) {\n        // 3 or 4 digits --> recursively check first digit\n        while (number >= 10) {\n            number = number / 10;\n        }\n        return eifelerRegelAppliesToNumber(number);\n    } else {\n        // Anything larger than 4 digits: recursively check first n-3 digits\n        number = number / 1000;\n        return eifelerRegelAppliesToNumber(number);\n    }\n}\n\nvar lb = moment.defineLocale('lb', {\n    months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact : true,\n    weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n    weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n    weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat: {\n        LT: 'H:mm [Auer]',\n        LTS: 'H:mm:ss [Auer]',\n        L: 'DD.MM.YYYY',\n        LL: 'D. MMMM YYYY',\n        LLL: 'D. MMMM YYYY H:mm [Auer]',\n        LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n    },\n    calendar: {\n        sameDay: '[Haut um] LT',\n        sameElse: 'L',\n        nextDay: '[Muer um] LT',\n        nextWeek: 'dddd [um] LT',\n        lastDay: '[Gëschter um] LT',\n        lastWeek: function () {\n            // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n            switch (this.day()) {\n                case 2:\n                case 4:\n                    return '[Leschten] dddd [um] LT';\n                default:\n                    return '[Leschte] dddd [um] LT';\n            }\n        }\n    },\n    relativeTime : {\n        future : processFutureTime,\n        past : processPastTime,\n        s : 'e puer Sekonnen',\n        m : processRelativeTime,\n        mm : '%d Minutten',\n        h : processRelativeTime,\n        hh : '%d Stonnen',\n        d : processRelativeTime,\n        dd : '%d Deeg',\n        M : processRelativeTime,\n        MM : '%d Méint',\n        y : processRelativeTime,\n        yy : '%d Joer'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n        dow: 1, // Monday is the first day of the week.\n        doy: 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn lb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ryan Hart : https://github.com/ryanhart2\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar lo = moment.defineLocale('lo', {\n    months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n    monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n    weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n    weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n    weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n    isPM: function (input) {\n        return input === 'ຕອນແລງ';\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'ຕອນເຊົ້າ';\n        } else {\n            return 'ຕອນແລງ';\n        }\n    },\n    calendar : {\n        sameDay : '[ມື້ນີ້ເວລາ] LT',\n        nextDay : '[ມື້ອື່ນເວລາ] LT',\n        nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n        lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n        lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'ອີກ %s',\n        past : '%sຜ່ານມາ',\n        s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n        m : '1 ນາທີ',\n        mm : '%d ນາທີ',\n        h : '1 ຊົ່ວໂມງ',\n        hh : '%d ຊົ່ວໂມງ',\n        d : '1 ມື້',\n        dd : '%d ມື້',\n        M : '1 ເດືອນ',\n        MM : '%d ເດືອນ',\n        y : '1 ປີ',\n        yy : '%d ປີ'\n    },\n    dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n    ordinal : function (number) {\n        return 'ທີ່' + number;\n    }\n});\n\nreturn lo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar units = {\n    'm' : 'minutė_minutės_minutę',\n    'mm': 'minutės_minučių_minutes',\n    'h' : 'valanda_valandos_valandą',\n    'hh': 'valandos_valandų_valandas',\n    'd' : 'diena_dienos_dieną',\n    'dd': 'dienos_dienų_dienas',\n    'M' : 'mėnuo_mėnesio_mėnesį',\n    'MM': 'mėnesiai_mėnesių_mėnesius',\n    'y' : 'metai_metų_metus',\n    'yy': 'metai_metų_metus'\n};\nfunction translateSeconds(number, withoutSuffix, key, isFuture) {\n    if (withoutSuffix) {\n        return 'kelios sekundės';\n    } else {\n        return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n    }\n}\nfunction translateSingular(number, withoutSuffix, key, isFuture) {\n    return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n}\nfunction special(number) {\n    return number % 10 === 0 || (number > 10 && number < 20);\n}\nfunction forms(key) {\n    return units[key].split('_');\n}\nfunction translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    if (number === 1) {\n        return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n    } else if (withoutSuffix) {\n        return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n    } else {\n        if (isFuture) {\n            return result + forms(key)[1];\n        } else {\n            return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n        }\n    }\n}\nvar lt = moment.defineLocale('lt', {\n    months : {\n        format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n        standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n        isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n    },\n    monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n    weekdays : {\n        format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n        standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n        isFormat: /dddd HH:mm/\n    },\n    weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n    weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY-MM-DD',\n        LL : 'YYYY [m.] MMMM D [d.]',\n        LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n        LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n        l : 'YYYY-MM-DD',\n        ll : 'YYYY [m.] MMMM D [d.]',\n        lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n        llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n    },\n    calendar : {\n        sameDay : '[Šiandien] LT',\n        nextDay : '[Rytoj] LT',\n        nextWeek : 'dddd LT',\n        lastDay : '[Vakar] LT',\n        lastWeek : '[Praėjusį] dddd LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'po %s',\n        past : 'prieš %s',\n        s : translateSeconds,\n        m : translateSingular,\n        mm : translate,\n        h : translateSingular,\n        hh : translate,\n        d : translateSingular,\n        dd : translate,\n        M : translateSingular,\n        MM : translate,\n        y : translateSingular,\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n    ordinal : function (number) {\n        return number + '-oji';\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn lt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar units = {\n    'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n    'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n    'h': 'stundas_stundām_stunda_stundas'.split('_'),\n    'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n    'd': 'dienas_dienām_diena_dienas'.split('_'),\n    'dd': 'dienas_dienām_diena_dienas'.split('_'),\n    'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n    'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n    'y': 'gada_gadiem_gads_gadi'.split('_'),\n    'yy': 'gada_gadiem_gads_gadi'.split('_')\n};\n/**\n * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n */\nfunction format(forms, number, withoutSuffix) {\n    if (withoutSuffix) {\n        // E.g. \"21 minūte\", \"3 minūtes\".\n        return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n    } else {\n        // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n        // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n        return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n    }\n}\nfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n    return number + ' ' + format(units[key], number, withoutSuffix);\n}\nfunction relativeTimeWithSingular(number, withoutSuffix, key) {\n    return format(units[key], number, withoutSuffix);\n}\nfunction relativeSeconds(number, withoutSuffix) {\n    return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n}\n\nvar lv = moment.defineLocale('lv', {\n    months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n    weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n    weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n    weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY.',\n        LL : 'YYYY. [gada] D. MMMM',\n        LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n        LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n    },\n    calendar : {\n        sameDay : '[Šodien pulksten] LT',\n        nextDay : '[Rīt pulksten] LT',\n        nextWeek : 'dddd [pulksten] LT',\n        lastDay : '[Vakar pulksten] LT',\n        lastWeek : '[Pagājušā] dddd [pulksten] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'pēc %s',\n        past : 'pirms %s',\n        s : relativeSeconds,\n        m : relativeTimeWithSingular,\n        mm : relativeTimeWithPlural,\n        h : relativeTimeWithSingular,\n        hh : relativeTimeWithPlural,\n        d : relativeTimeWithSingular,\n        dd : relativeTimeWithPlural,\n        M : relativeTimeWithSingular,\n        MM : relativeTimeWithPlural,\n        y : relativeTimeWithSingular,\n        yy : relativeTimeWithPlural\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn lv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar translator = {\n    words: { //Different grammatical cases\n        m: ['jedan minut', 'jednog minuta'],\n        mm: ['minut', 'minuta', 'minuta'],\n        h: ['jedan sat', 'jednog sata'],\n        hh: ['sat', 'sata', 'sati'],\n        dd: ['dan', 'dana', 'dana'],\n        MM: ['mjesec', 'mjeseca', 'mjeseci'],\n        yy: ['godina', 'godine', 'godina']\n    },\n    correctGrammaticalCase: function (number, wordKey) {\n        return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n    },\n    translate: function (number, withoutSuffix, key) {\n        var wordKey = translator.words[key];\n        if (key.length === 1) {\n            return withoutSuffix ? wordKey[0] : wordKey[1];\n        } else {\n            return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n        }\n    }\n};\n\nvar me = moment.defineLocale('me', {\n    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact : true,\n    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat: {\n        LT: 'H:mm',\n        LTS : 'H:mm:ss',\n        L: 'DD.MM.YYYY',\n        LL: 'D. MMMM YYYY',\n        LLL: 'D. MMMM YYYY H:mm',\n        LLLL: 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar: {\n        sameDay: '[danas u] LT',\n        nextDay: '[sjutra u] LT',\n\n        nextWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[u] [nedjelju] [u] LT';\n                case 3:\n                    return '[u] [srijedu] [u] LT';\n                case 6:\n                    return '[u] [subotu] [u] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[u] dddd [u] LT';\n            }\n        },\n        lastDay  : '[juče u] LT',\n        lastWeek : function () {\n            var lastWeekDays = [\n                '[prošle] [nedjelje] [u] LT',\n                '[prošlog] [ponedjeljka] [u] LT',\n                '[prošlog] [utorka] [u] LT',\n                '[prošle] [srijede] [u] LT',\n                '[prošlog] [četvrtka] [u] LT',\n                '[prošlog] [petka] [u] LT',\n                '[prošle] [subote] [u] LT'\n            ];\n            return lastWeekDays[this.day()];\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past   : 'prije %s',\n        s      : 'nekoliko sekundi',\n        m      : translator.translate,\n        mm     : translator.translate,\n        h      : translator.translate,\n        hh     : translator.translate,\n        d      : 'dan',\n        dd     : translator.translate,\n        M      : 'mjesec',\n        MM     : translator.translate,\n        y      : 'godinu',\n        yy     : translator.translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn me;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar mi = moment.defineLocale('mi', {\n    months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n    monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n    monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n    monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n    monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n    monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n    weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n    weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n    weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n    longDateFormat: {\n        LT: 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY [i] HH:mm',\n        LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n    },\n    calendar: {\n        sameDay: '[i teie mahana, i] LT',\n        nextDay: '[apopo i] LT',\n        nextWeek: 'dddd [i] LT',\n        lastDay: '[inanahi i] LT',\n        lastWeek: 'dddd [whakamutunga i] LT',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: 'i roto i %s',\n        past: '%s i mua',\n        s: 'te hēkona ruarua',\n        m: 'he meneti',\n        mm: '%d meneti',\n        h: 'te haora',\n        hh: '%d haora',\n        d: 'he ra',\n        dd: '%d ra',\n        M: 'he marama',\n        MM: '%d marama',\n        y: 'he tau',\n        yy: '%d tau'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn mi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar mk = moment.defineLocale('mk', {\n    months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n    monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n    weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n    weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n    weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'D.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY H:mm',\n        LLLL : 'dddd, D MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay : '[Денес во] LT',\n        nextDay : '[Утре во] LT',\n        nextWeek : '[Во] dddd [во] LT',\n        lastDay : '[Вчера во] LT',\n        lastWeek : function () {\n            switch (this.day()) {\n                case 0:\n                case 3:\n                case 6:\n                    return '[Изминатата] dddd [во] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[Изминатиот] dddd [во] LT';\n            }\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'после %s',\n        past : 'пред %s',\n        s : 'неколку секунди',\n        m : 'минута',\n        mm : '%d минути',\n        h : 'час',\n        hh : '%d часа',\n        d : 'ден',\n        dd : '%d дена',\n        M : 'месец',\n        MM : '%d месеци',\n        y : 'година',\n        yy : '%d години'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n    ordinal : function (number) {\n        var lastDigit = number % 10,\n            last2Digits = number % 100;\n        if (number === 0) {\n            return number + '-ев';\n        } else if (last2Digits === 0) {\n            return number + '-ен';\n        } else if (last2Digits > 10 && last2Digits < 20) {\n            return number + '-ти';\n        } else if (lastDigit === 1) {\n            return number + '-ви';\n        } else if (lastDigit === 2) {\n            return number + '-ри';\n        } else if (lastDigit === 7 || lastDigit === 8) {\n            return number + '-ми';\n        } else {\n            return number + '-ти';\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn mk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar ml = moment.defineLocale('ml', {\n    months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n    monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n    weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n    weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm -നു',\n        LTS : 'A h:mm:ss -നു',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm -നു',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n    },\n    calendar : {\n        sameDay : '[ഇന്ന്] LT',\n        nextDay : '[നാളെ] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[ഇന്നലെ] LT',\n        lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s കഴിഞ്ഞ്',\n        past : '%s മുൻപ്',\n        s : 'അൽപ നിമിഷങ്ങൾ',\n        m : 'ഒരു മിനിറ്റ്',\n        mm : '%d മിനിറ്റ്',\n        h : 'ഒരു മണിക്കൂർ',\n        hh : '%d മണിക്കൂർ',\n        d : 'ഒരു ദിവസം',\n        dd : '%d ദിവസം',\n        M : 'ഒരു മാസം',\n        MM : '%d മാസം',\n        y : 'ഒരു വർഷം',\n        yy : '%d വർഷം'\n    },\n    meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if ((meridiem === 'രാത്രി' && hour >= 4) ||\n                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                meridiem === 'വൈകുന്നേരം') {\n            return hour + 12;\n        } else {\n            return hour;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'രാത്രി';\n        } else if (hour < 12) {\n            return 'രാവിലെ';\n        } else if (hour < 17) {\n            return 'ഉച്ച കഴിഞ്ഞ്';\n        } else if (hour < 20) {\n            return 'വൈകുന്നേരം';\n        } else {\n            return 'രാത്രി';\n        }\n    }\n});\n\nreturn ml;\n\n})));\n","//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author : Harshad Kale : https://github.com/kalehv\n//! author : Vivek Athalye : https://github.com/vnathalye\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '१',\n    '2': '२',\n    '3': '३',\n    '4': '४',\n    '5': '५',\n    '6': '६',\n    '7': '७',\n    '8': '८',\n    '9': '९',\n    '0': '०'\n};\nvar numberMap = {\n    '१': '1',\n    '२': '2',\n    '३': '3',\n    '४': '4',\n    '५': '5',\n    '६': '6',\n    '७': '7',\n    '८': '8',\n    '९': '9',\n    '०': '0'\n};\n\nfunction relativeTimeMr(number, withoutSuffix, string, isFuture)\n{\n    var output = '';\n    if (withoutSuffix) {\n        switch (string) {\n            case 's': output = 'काही सेकंद'; break;\n            case 'm': output = 'एक मिनिट'; break;\n            case 'mm': output = '%d मिनिटे'; break;\n            case 'h': output = 'एक तास'; break;\n            case 'hh': output = '%d तास'; break;\n            case 'd': output = 'एक दिवस'; break;\n            case 'dd': output = '%d दिवस'; break;\n            case 'M': output = 'एक महिना'; break;\n            case 'MM': output = '%d महिने'; break;\n            case 'y': output = 'एक वर्ष'; break;\n            case 'yy': output = '%d वर्षे'; break;\n        }\n    }\n    else {\n        switch (string) {\n            case 's': output = 'काही सेकंदां'; break;\n            case 'm': output = 'एका मिनिटा'; break;\n            case 'mm': output = '%d मिनिटां'; break;\n            case 'h': output = 'एका तासा'; break;\n            case 'hh': output = '%d तासां'; break;\n            case 'd': output = 'एका दिवसा'; break;\n            case 'dd': output = '%d दिवसां'; break;\n            case 'M': output = 'एका महिन्या'; break;\n            case 'MM': output = '%d महिन्यां'; break;\n            case 'y': output = 'एका वर्षा'; break;\n            case 'yy': output = '%d वर्षां'; break;\n        }\n    }\n    return output.replace(/%d/i, number);\n}\n\nvar mr = moment.defineLocale('mr', {\n    months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n    monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n    weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n    weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm वाजता',\n        LTS : 'A h:mm:ss वाजता',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm वाजता',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n    },\n    calendar : {\n        sameDay : '[आज] LT',\n        nextDay : '[उद्या] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[काल] LT',\n        lastWeek: '[मागील] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future: '%sमध्ये',\n        past: '%sपूर्वी',\n        s: relativeTimeMr,\n        m: relativeTimeMr,\n        mm: relativeTimeMr,\n        h: relativeTimeMr,\n        hh: relativeTimeMr,\n        d: relativeTimeMr,\n        dd: relativeTimeMr,\n        M: relativeTimeMr,\n        MM: relativeTimeMr,\n        y: relativeTimeMr,\n        yy: relativeTimeMr\n    },\n    preparse: function (string) {\n        return string.replace(/[१२३४५६७८९०]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'रात्री') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'सकाळी') {\n            return hour;\n        } else if (meridiem === 'दुपारी') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'सायंकाळी') {\n            return hour + 12;\n        }\n    },\n    meridiem: function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'रात्री';\n        } else if (hour < 10) {\n            return 'सकाळी';\n        } else if (hour < 17) {\n            return 'दुपारी';\n        } else if (hour < 20) {\n            return 'सायंकाळी';\n        } else {\n            return 'रात्री';\n        }\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn mr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar ms = moment.defineLocale('ms', {\n    months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n    monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n    weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n    weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n    weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n    longDateFormat : {\n        LT : 'HH.mm',\n        LTS : 'HH.mm.ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY [pukul] HH.mm',\n        LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /pagi|tengahari|petang|malam/,\n    meridiemHour: function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'pagi') {\n            return hour;\n        } else if (meridiem === 'tengahari') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === 'petang' || meridiem === 'malam') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 11) {\n            return 'pagi';\n        } else if (hours < 15) {\n            return 'tengahari';\n        } else if (hours < 19) {\n            return 'petang';\n        } else {\n            return 'malam';\n        }\n    },\n    calendar : {\n        sameDay : '[Hari ini pukul] LT',\n        nextDay : '[Esok pukul] LT',\n        nextWeek : 'dddd [pukul] LT',\n        lastDay : '[Kelmarin pukul] LT',\n        lastWeek : 'dddd [lepas pukul] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'dalam %s',\n        past : '%s yang lepas',\n        s : 'beberapa saat',\n        m : 'seminit',\n        mm : '%d minit',\n        h : 'sejam',\n        hh : '%d jam',\n        d : 'sehari',\n        dd : '%d hari',\n        M : 'sebulan',\n        MM : '%d bulan',\n        y : 'setahun',\n        yy : '%d tahun'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn ms;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : DEPRECATED, the correct one is [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar msMy = moment.defineLocale('ms-my', {\n    months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n    monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n    weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n    weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n    weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n    longDateFormat : {\n        LT : 'HH.mm',\n        LTS : 'HH.mm.ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY [pukul] HH.mm',\n        LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /pagi|tengahari|petang|malam/,\n    meridiemHour: function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'pagi') {\n            return hour;\n        } else if (meridiem === 'tengahari') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === 'petang' || meridiem === 'malam') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 11) {\n            return 'pagi';\n        } else if (hours < 15) {\n            return 'tengahari';\n        } else if (hours < 19) {\n            return 'petang';\n        } else {\n            return 'malam';\n        }\n    },\n    calendar : {\n        sameDay : '[Hari ini pukul] LT',\n        nextDay : '[Esok pukul] LT',\n        nextWeek : 'dddd [pukul] LT',\n        lastDay : '[Kelmarin pukul] LT',\n        lastWeek : 'dddd [lepas pukul] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'dalam %s',\n        past : '%s yang lepas',\n        s : 'beberapa saat',\n        m : 'seminit',\n        mm : '%d minit',\n        h : 'sejam',\n        hh : '%d jam',\n        d : 'sehari',\n        dd : '%d hari',\n        M : 'sebulan',\n        MM : '%d bulan',\n        y : 'setahun',\n        yy : '%d tahun'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn msMy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '၁',\n    '2': '၂',\n    '3': '၃',\n    '4': '၄',\n    '5': '၅',\n    '6': '၆',\n    '7': '၇',\n    '8': '၈',\n    '9': '၉',\n    '0': '၀'\n};\nvar numberMap = {\n    '၁': '1',\n    '၂': '2',\n    '၃': '3',\n    '၄': '4',\n    '၅': '5',\n    '၆': '6',\n    '၇': '7',\n    '၈': '8',\n    '၉': '9',\n    '၀': '0'\n};\n\nvar my = moment.defineLocale('my', {\n    months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n    monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n    weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n    weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n    weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n    longDateFormat: {\n        LT: 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY HH:mm',\n        LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n        sameDay: '[ယနေ.] LT [မှာ]',\n        nextDay: '[မနက်ဖြန်] LT [မှာ]',\n        nextWeek: 'dddd LT [မှာ]',\n        lastDay: '[မနေ.က] LT [မှာ]',\n        lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: 'လာမည့် %s မှာ',\n        past: 'လွန်ခဲ့သော %s က',\n        s: 'စက္ကန်.အနည်းငယ်',\n        m: 'တစ်မိနစ်',\n        mm: '%d မိနစ်',\n        h: 'တစ်နာရီ',\n        hh: '%d နာရီ',\n        d: 'တစ်ရက်',\n        dd: '%d ရက်',\n        M: 'တစ်လ',\n        MM: '%d လ',\n        y: 'တစ်နှစ်',\n        yy: '%d နှစ်'\n    },\n    preparse: function (string) {\n        return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    week: {\n        dow: 1, // Monday is the first day of the week.\n        doy: 4 // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn my;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '१',\n    '2': '२',\n    '3': '३',\n    '4': '४',\n    '5': '५',\n    '6': '६',\n    '7': '७',\n    '8': '८',\n    '9': '९',\n    '0': '०'\n};\nvar numberMap = {\n    '१': '1',\n    '२': '2',\n    '३': '3',\n    '४': '4',\n    '५': '5',\n    '६': '6',\n    '७': '7',\n    '८': '8',\n    '९': '9',\n    '०': '0'\n};\n\nvar ne = moment.defineLocale('ne', {\n    months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n    monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n    weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n    weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'Aको h:mm बजे',\n        LTS : 'Aको h:mm:ss बजे',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, Aको h:mm बजे',\n        LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n    },\n    preparse: function (string) {\n        return string.replace(/[१२३४५६७८९०]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'राति') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'बिहान') {\n            return hour;\n        } else if (meridiem === 'दिउँसो') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'साँझ') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 3) {\n            return 'राति';\n        } else if (hour < 12) {\n            return 'बिहान';\n        } else if (hour < 16) {\n            return 'दिउँसो';\n        } else if (hour < 20) {\n            return 'साँझ';\n        } else {\n            return 'राति';\n        }\n    },\n    calendar : {\n        sameDay : '[आज] LT',\n        nextDay : '[भोलि] LT',\n        nextWeek : '[आउँदो] dddd[,] LT',\n        lastDay : '[हिजो] LT',\n        lastWeek : '[गएको] dddd[,] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%sमा',\n        past : '%s अगाडि',\n        s : 'केही क्षण',\n        m : 'एक मिनेट',\n        mm : '%d मिनेट',\n        h : 'एक घण्टा',\n        hh : '%d घण्टा',\n        d : 'एक दिन',\n        dd : '%d दिन',\n        M : 'एक महिना',\n        MM : '%d महिना',\n        y : 'एक बर्ष',\n        yy : '%d बर्ष'\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn ne;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');\nvar monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\nvar monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\nvar monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\nvar nl = moment.defineLocale('nl', {\n    months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n    monthsShort : function (m, format) {\n        if (!m) {\n            return monthsShortWithDots;\n        } else if (/-MMM-/.test(format)) {\n            return monthsShortWithoutDots[m.month()];\n        } else {\n            return monthsShortWithDots[m.month()];\n        }\n    },\n\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n    monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n    monthsParse : monthsParse,\n    longMonthsParse : monthsParse,\n    shortMonthsParse : monthsParse,\n\n    weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n    weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n    weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD-MM-YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[vandaag om] LT',\n        nextDay: '[morgen om] LT',\n        nextWeek: 'dddd [om] LT',\n        lastDay: '[gisteren om] LT',\n        lastWeek: '[afgelopen] dddd [om] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'over %s',\n        past : '%s geleden',\n        s : 'een paar seconden',\n        m : 'één minuut',\n        mm : '%d minuten',\n        h : 'één uur',\n        hh : '%d uur',\n        d : 'één dag',\n        dd : '%d dagen',\n        M : 'één maand',\n        MM : '%d maanden',\n        y : 'één jaar',\n        yy : '%d jaar'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal : function (number) {\n        return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn nl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');\nvar monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\nvar monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\nvar monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\nvar nlBe = moment.defineLocale('nl-be', {\n    months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n    monthsShort : function (m, format) {\n        if (!m) {\n            return monthsShortWithDots;\n        } else if (/-MMM-/.test(format)) {\n            return monthsShortWithoutDots[m.month()];\n        } else {\n            return monthsShortWithDots[m.month()];\n        }\n    },\n\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n    monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n    monthsParse : monthsParse,\n    longMonthsParse : monthsParse,\n    shortMonthsParse : monthsParse,\n\n    weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n    weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n    weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[vandaag om] LT',\n        nextDay: '[morgen om] LT',\n        nextWeek: 'dddd [om] LT',\n        lastDay: '[gisteren om] LT',\n        lastWeek: '[afgelopen] dddd [om] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'over %s',\n        past : '%s geleden',\n        s : 'een paar seconden',\n        m : 'één minuut',\n        mm : '%d minuten',\n        h : 'één uur',\n        hh : '%d uur',\n        d : 'één dag',\n        dd : '%d dagen',\n        M : 'één maand',\n        MM : '%d maanden',\n        y : 'één jaar',\n        yy : '%d jaar'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal : function (number) {\n        return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn nlBe;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! author : https://github.com/mechuwind\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar nn = moment.defineLocale('nn', {\n    months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n    weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n    weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n    weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY [kl.] H:mm',\n        LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n    },\n    calendar : {\n        sameDay: '[I dag klokka] LT',\n        nextDay: '[I morgon klokka] LT',\n        nextWeek: 'dddd [klokka] LT',\n        lastDay: '[I går klokka] LT',\n        lastWeek: '[Føregåande] dddd [klokka] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'om %s',\n        past : '%s sidan',\n        s : 'nokre sekund',\n        m : 'eit minutt',\n        mm : '%d minutt',\n        h : 'ein time',\n        hh : '%d timar',\n        d : 'ein dag',\n        dd : '%d dagar',\n        M : 'ein månad',\n        MM : '%d månader',\n        y : 'eit år',\n        yy : '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn nn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '੧',\n    '2': '੨',\n    '3': '੩',\n    '4': '੪',\n    '5': '੫',\n    '6': '੬',\n    '7': '੭',\n    '8': '੮',\n    '9': '੯',\n    '0': '੦'\n};\nvar numberMap = {\n    '੧': '1',\n    '੨': '2',\n    '੩': '3',\n    '੪': '4',\n    '੫': '5',\n    '੬': '6',\n    '੭': '7',\n    '੮': '8',\n    '੯': '9',\n    '੦': '0'\n};\n\nvar paIn = moment.defineLocale('pa-in', {\n    // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.\n    months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n    monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n    weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n    weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n    weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm ਵਜੇ',\n        LTS : 'A h:mm:ss ਵਜੇ',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n    },\n    calendar : {\n        sameDay : '[ਅਜ] LT',\n        nextDay : '[ਕਲ] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[ਕਲ] LT',\n        lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s ਵਿੱਚ',\n        past : '%s ਪਿਛਲੇ',\n        s : 'ਕੁਝ ਸਕਿੰਟ',\n        m : 'ਇਕ ਮਿੰਟ',\n        mm : '%d ਮਿੰਟ',\n        h : 'ਇੱਕ ਘੰਟਾ',\n        hh : '%d ਘੰਟੇ',\n        d : 'ਇੱਕ ਦਿਨ',\n        dd : '%d ਦਿਨ',\n        M : 'ਇੱਕ ਮਹੀਨਾ',\n        MM : '%d ਮਹੀਨੇ',\n        y : 'ਇੱਕ ਸਾਲ',\n        yy : '%d ਸਾਲ'\n    },\n    preparse: function (string) {\n        return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n    meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'ਰਾਤ') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'ਸਵੇਰ') {\n            return hour;\n        } else if (meridiem === 'ਦੁਪਹਿਰ') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'ਸ਼ਾਮ') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'ਰਾਤ';\n        } else if (hour < 10) {\n            return 'ਸਵੇਰ';\n        } else if (hour < 17) {\n            return 'ਦੁਪਹਿਰ';\n        } else if (hour < 20) {\n            return 'ਸ਼ਾਮ';\n        } else {\n            return 'ਰਾਤ';\n        }\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn paIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n    var format = {\n            'mm': 'minute',\n            'hh': 'ore',\n            'dd': 'zile',\n            'MM': 'luni',\n            'yy': 'ani'\n        },\n        separator = ' ';\n    if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n        separator = ' de ';\n    }\n    return number + separator + format[key];\n}\n\nvar ro = moment.defineLocale('ro', {\n    months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n    monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n    weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n    weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY H:mm',\n        LLLL : 'dddd, D MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay: '[azi la] LT',\n        nextDay: '[mâine la] LT',\n        nextWeek: 'dddd [la] LT',\n        lastDay: '[ieri la] LT',\n        lastWeek: '[fosta] dddd [la] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'peste %s',\n        past : '%s în urmă',\n        s : 'câteva secunde',\n        m : 'un minut',\n        mm : relativeTimeWithPlural,\n        h : 'o oră',\n        hh : relativeTimeWithPlural,\n        d : 'o zi',\n        dd : relativeTimeWithPlural,\n        M : 'o lună',\n        MM : relativeTimeWithPlural,\n        y : 'un an',\n        yy : relativeTimeWithPlural\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn ro;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar months = [\n    'جنوري',\n    'فيبروري',\n    'مارچ',\n    'اپريل',\n    'مئي',\n    'جون',\n    'جولاءِ',\n    'آگسٽ',\n    'سيپٽمبر',\n    'آڪٽوبر',\n    'نومبر',\n    'ڊسمبر'\n];\nvar days = [\n    'آچر',\n    'سومر',\n    'اڱارو',\n    'اربع',\n    'خميس',\n    'جمع',\n    'ڇنڇر'\n];\n\nvar sd = moment.defineLocale('sd', {\n    months : months,\n    monthsShort : months,\n    weekdays : days,\n    weekdaysShort : days,\n    weekdaysMin : days,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd، D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /صبح|شام/,\n    isPM : function (input) {\n        return 'شام' === input;\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'صبح';\n        }\n        return 'شام';\n    },\n    calendar : {\n        sameDay : '[اڄ] LT',\n        nextDay : '[سڀاڻي] LT',\n        nextWeek : 'dddd [اڳين هفتي تي] LT',\n        lastDay : '[ڪالهه] LT',\n        lastWeek : '[گزريل هفتي] dddd [تي] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s پوء',\n        past : '%s اڳ',\n        s : 'چند سيڪنڊ',\n        m : 'هڪ منٽ',\n        mm : '%d منٽ',\n        h : 'هڪ ڪلاڪ',\n        hh : '%d ڪلاڪ',\n        d : 'هڪ ڏينهن',\n        dd : '%d ڏينهن',\n        M : 'هڪ مهينو',\n        MM : '%d مهينا',\n        y : 'هڪ سال',\n        yy : '%d سال'\n    },\n    preparse: function (string) {\n        return string.replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/,/g, '،');\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn sd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n\nvar se = moment.defineLocale('se', {\n    months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n    monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n    weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n    weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n    weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'MMMM D. [b.] YYYY',\n        LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n        LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n    },\n    calendar : {\n        sameDay: '[otne ti] LT',\n        nextDay: '[ihttin ti] LT',\n        nextWeek: 'dddd [ti] LT',\n        lastDay: '[ikte ti] LT',\n        lastWeek: '[ovddit] dddd [ti] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : '%s geažes',\n        past : 'maŋit %s',\n        s : 'moadde sekunddat',\n        m : 'okta minuhta',\n        mm : '%d minuhtat',\n        h : 'okta diimmu',\n        hh : '%d diimmut',\n        d : 'okta beaivi',\n        dd : '%d beaivvit',\n        M : 'okta mánnu',\n        MM : '%d mánut',\n        y : 'okta jahki',\n        yy : '%d jagit'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn se;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n/*jshint -W100*/\nvar si = moment.defineLocale('si', {\n    months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n    monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n    weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n    weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n    weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'a h:mm',\n        LTS : 'a h:mm:ss',\n        L : 'YYYY/MM/DD',\n        LL : 'YYYY MMMM D',\n        LLL : 'YYYY MMMM D, a h:mm',\n        LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n    },\n    calendar : {\n        sameDay : '[අද] LT[ට]',\n        nextDay : '[හෙට] LT[ට]',\n        nextWeek : 'dddd LT[ට]',\n        lastDay : '[ඊයේ] LT[ට]',\n        lastWeek : '[පසුගිය] dddd LT[ට]',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%sකින්',\n        past : '%sකට පෙර',\n        s : 'තත්පර කිහිපය',\n        m : 'මිනිත්තුව',\n        mm : 'මිනිත්තු %d',\n        h : 'පැය',\n        hh : 'පැය %d',\n        d : 'දිනය',\n        dd : 'දින %d',\n        M : 'මාසය',\n        MM : 'මාස %d',\n        y : 'වසර',\n        yy : 'වසර %d'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n    ordinal : function (number) {\n        return number + ' වැනි';\n    },\n    meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n    isPM : function (input) {\n        return input === 'ප.ව.' || input === 'පස් වරු';\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'ප.ව.' : 'පස් වරු';\n        } else {\n            return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n        }\n    }\n});\n\nreturn si;\n\n})));\n","//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar sq = moment.defineLocale('sq', {\n    months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n    monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n    weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n    weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n    weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n    weekdaysParseExact : true,\n    meridiemParse: /PD|MD/,\n    isPM: function (input) {\n        return input.charAt(0) === 'M';\n    },\n    meridiem : function (hours, minutes, isLower) {\n        return hours < 12 ? 'PD' : 'MD';\n    },\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Sot në] LT',\n        nextDay : '[Nesër në] LT',\n        nextWeek : 'dddd [në] LT',\n        lastDay : '[Dje në] LT',\n        lastWeek : 'dddd [e kaluar në] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'në %s',\n        past : '%s më parë',\n        s : 'disa sekonda',\n        m : 'një minutë',\n        mm : '%d minuta',\n        h : 'një orë',\n        hh : '%d orë',\n        d : 'një ditë',\n        dd : '%d ditë',\n        M : 'një muaj',\n        MM : '%d muaj',\n        y : 'një vit',\n        yy : '%d vite'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn sq;\n\n})));\n","//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar translator = {\n    words: { //Different grammatical cases\n        m: ['jedan minut', 'jedne minute'],\n        mm: ['minut', 'minute', 'minuta'],\n        h: ['jedan sat', 'jednog sata'],\n        hh: ['sat', 'sata', 'sati'],\n        dd: ['dan', 'dana', 'dana'],\n        MM: ['mesec', 'meseca', 'meseci'],\n        yy: ['godina', 'godine', 'godina']\n    },\n    correctGrammaticalCase: function (number, wordKey) {\n        return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n    },\n    translate: function (number, withoutSuffix, key) {\n        var wordKey = translator.words[key];\n        if (key.length === 1) {\n            return withoutSuffix ? wordKey[0] : wordKey[1];\n        } else {\n            return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n        }\n    }\n};\n\nvar sr = moment.defineLocale('sr', {\n    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat: {\n        LT: 'H:mm',\n        LTS : 'H:mm:ss',\n        L: 'DD.MM.YYYY',\n        LL: 'D. MMMM YYYY',\n        LLL: 'D. MMMM YYYY H:mm',\n        LLLL: 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar: {\n        sameDay: '[danas u] LT',\n        nextDay: '[sutra u] LT',\n        nextWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[u] [nedelju] [u] LT';\n                case 3:\n                    return '[u] [sredu] [u] LT';\n                case 6:\n                    return '[u] [subotu] [u] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[u] dddd [u] LT';\n            }\n        },\n        lastDay  : '[juče u] LT',\n        lastWeek : function () {\n            var lastWeekDays = [\n                '[prošle] [nedelje] [u] LT',\n                '[prošlog] [ponedeljka] [u] LT',\n                '[prošlog] [utorka] [u] LT',\n                '[prošle] [srede] [u] LT',\n                '[prošlog] [četvrtka] [u] LT',\n                '[prošlog] [petka] [u] LT',\n                '[prošle] [subote] [u] LT'\n            ];\n            return lastWeekDays[this.day()];\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past   : 'pre %s',\n        s      : 'nekoliko sekundi',\n        m      : translator.translate,\n        mm     : translator.translate,\n        h      : translator.translate,\n        hh     : translator.translate,\n        d      : 'dan',\n        dd     : translator.translate,\n        M      : 'mesec',\n        MM     : translator.translate,\n        y      : 'godinu',\n        yy     : translator.translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn sr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar translator = {\n    words: { //Different grammatical cases\n        m: ['један минут', 'једне минуте'],\n        mm: ['минут', 'минуте', 'минута'],\n        h: ['један сат', 'једног сата'],\n        hh: ['сат', 'сата', 'сати'],\n        dd: ['дан', 'дана', 'дана'],\n        MM: ['месец', 'месеца', 'месеци'],\n        yy: ['година', 'године', 'година']\n    },\n    correctGrammaticalCase: function (number, wordKey) {\n        return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n    },\n    translate: function (number, withoutSuffix, key) {\n        var wordKey = translator.words[key];\n        if (key.length === 1) {\n            return withoutSuffix ? wordKey[0] : wordKey[1];\n        } else {\n            return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n        }\n    }\n};\n\nvar srCyrl = moment.defineLocale('sr-cyrl', {\n    months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n    monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n    weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n    weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat: {\n        LT: 'H:mm',\n        LTS : 'H:mm:ss',\n        L: 'DD.MM.YYYY',\n        LL: 'D. MMMM YYYY',\n        LLL: 'D. MMMM YYYY H:mm',\n        LLLL: 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar: {\n        sameDay: '[данас у] LT',\n        nextDay: '[сутра у] LT',\n        nextWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[у] [недељу] [у] LT';\n                case 3:\n                    return '[у] [среду] [у] LT';\n                case 6:\n                    return '[у] [суботу] [у] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[у] dddd [у] LT';\n            }\n        },\n        lastDay  : '[јуче у] LT',\n        lastWeek : function () {\n            var lastWeekDays = [\n                '[прошле] [недеље] [у] LT',\n                '[прошлог] [понедељка] [у] LT',\n                '[прошлог] [уторка] [у] LT',\n                '[прошле] [среде] [у] LT',\n                '[прошлог] [четвртка] [у] LT',\n                '[прошлог] [петка] [у] LT',\n                '[прошле] [суботе] [у] LT'\n            ];\n            return lastWeekDays[this.day()];\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'за %s',\n        past   : 'пре %s',\n        s      : 'неколико секунди',\n        m      : translator.translate,\n        mm     : translator.translate,\n        h      : translator.translate,\n        hh     : translator.translate,\n        d      : 'дан',\n        dd     : translator.translate,\n        M      : 'месец',\n        MM     : translator.translate,\n        y      : 'годину',\n        yy     : translator.translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn srCyrl;\n\n})));\n","//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n\nvar ss = moment.defineLocale('ss', {\n    months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n    monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n    weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n    weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n    weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY h:mm A',\n        LLLL : 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar : {\n        sameDay : '[Namuhla nga] LT',\n        nextDay : '[Kusasa nga] LT',\n        nextWeek : 'dddd [nga] LT',\n        lastDay : '[Itolo nga] LT',\n        lastWeek : 'dddd [leliphelile] [nga] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'nga %s',\n        past : 'wenteka nga %s',\n        s : 'emizuzwana lomcane',\n        m : 'umzuzu',\n        mm : '%d emizuzu',\n        h : 'lihora',\n        hh : '%d emahora',\n        d : 'lilanga',\n        dd : '%d emalanga',\n        M : 'inyanga',\n        MM : '%d tinyanga',\n        y : 'umnyaka',\n        yy : '%d iminyaka'\n    },\n    meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 11) {\n            return 'ekuseni';\n        } else if (hours < 15) {\n            return 'emini';\n        } else if (hours < 19) {\n            return 'entsambama';\n        } else {\n            return 'ebusuku';\n        }\n    },\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'ekuseni') {\n            return hour;\n        } else if (meridiem === 'emini') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n            if (hour === 0) {\n                return 0;\n            }\n            return hour + 12;\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}/,\n    ordinal : '%d',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn ss;\n\n})));\n","//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar sw = moment.defineLocale('sw', {\n    months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n    monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n    weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n    weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n    weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[leo saa] LT',\n        nextDay : '[kesho saa] LT',\n        nextWeek : '[wiki ijayo] dddd [saat] LT',\n        lastDay : '[jana] LT',\n        lastWeek : '[wiki iliyopita] dddd [saat] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s baadaye',\n        past : 'tokea %s',\n        s : 'hivi punde',\n        m : 'dakika moja',\n        mm : 'dakika %d',\n        h : 'saa limoja',\n        hh : 'masaa %d',\n        d : 'siku moja',\n        dd : 'masiku %d',\n        M : 'mwezi mmoja',\n        MM : 'miezi %d',\n        y : 'mwaka mmoja',\n        yy : 'miaka %d'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn sw;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '௧',\n    '2': '௨',\n    '3': '௩',\n    '4': '௪',\n    '5': '௫',\n    '6': '௬',\n    '7': '௭',\n    '8': '௮',\n    '9': '௯',\n    '0': '௦'\n};\nvar numberMap = {\n    '௧': '1',\n    '௨': '2',\n    '௩': '3',\n    '௪': '4',\n    '௫': '5',\n    '௬': '6',\n    '௭': '7',\n    '௮': '8',\n    '௯': '9',\n    '௦': '0'\n};\n\nvar ta = moment.defineLocale('ta', {\n    months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n    monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n    weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n    weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n    weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, HH:mm',\n        LLLL : 'dddd, D MMMM YYYY, HH:mm'\n    },\n    calendar : {\n        sameDay : '[இன்று] LT',\n        nextDay : '[நாளை] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[நேற்று] LT',\n        lastWeek : '[கடந்த வாரம்] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s இல்',\n        past : '%s முன்',\n        s : 'ஒரு சில விநாடிகள்',\n        m : 'ஒரு நிமிடம்',\n        mm : '%d நிமிடங்கள்',\n        h : 'ஒரு மணி நேரம்',\n        hh : '%d மணி நேரம்',\n        d : 'ஒரு நாள்',\n        dd : '%d நாட்கள்',\n        M : 'ஒரு மாதம்',\n        MM : '%d மாதங்கள்',\n        y : 'ஒரு வருடம்',\n        yy : '%d ஆண்டுகள்'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n    ordinal : function (number) {\n        return number + 'வது';\n    },\n    preparse: function (string) {\n        return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    // refer http://ta.wikipedia.org/s/1er1\n    meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 2) {\n            return ' யாமம்';\n        } else if (hour < 6) {\n            return ' வைகறை';  // வைகறை\n        } else if (hour < 10) {\n            return ' காலை'; // காலை\n        } else if (hour < 14) {\n            return ' நண்பகல்'; // நண்பகல்\n        } else if (hour < 18) {\n            return ' எற்பாடு'; // எற்பாடு\n        } else if (hour < 22) {\n            return ' மாலை'; // மாலை\n        } else {\n            return ' யாமம்';\n        }\n    },\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'யாமம்') {\n            return hour < 2 ? hour : hour + 12;\n        } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n            return hour;\n        } else if (meridiem === 'நண்பகல்') {\n            return hour >= 10 ? hour : hour + 12;\n        } else {\n            return hour + 12;\n        }\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn ta;\n\n})));\n","//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar te = moment.defineLocale('te', {\n    months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n    monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n    weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n    weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm',\n        LTS : 'A h:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm'\n    },\n    calendar : {\n        sameDay : '[నేడు] LT',\n        nextDay : '[రేపు] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[నిన్న] LT',\n        lastWeek : '[గత] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s లో',\n        past : '%s క్రితం',\n        s : 'కొన్ని క్షణాలు',\n        m : 'ఒక నిమిషం',\n        mm : '%d నిమిషాలు',\n        h : 'ఒక గంట',\n        hh : '%d గంటలు',\n        d : 'ఒక రోజు',\n        dd : '%d రోజులు',\n        M : 'ఒక నెల',\n        MM : '%d నెలలు',\n        y : 'ఒక సంవత్సరం',\n        yy : '%d సంవత్సరాలు'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n    ordinal : '%dవ',\n    meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'రాత్రి') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'ఉదయం') {\n            return hour;\n        } else if (meridiem === 'మధ్యాహ్నం') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'సాయంత్రం') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'రాత్రి';\n        } else if (hour < 10) {\n            return 'ఉదయం';\n        } else if (hour < 17) {\n            return 'మధ్యాహ్నం';\n        } else if (hour < 20) {\n            return 'సాయంత్రం';\n        } else {\n            return 'రాత్రి';\n        }\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn te;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar tet = moment.defineLocale('tet', {\n    months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n    monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'),\n    weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'),\n    weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'),\n    weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[Ohin iha] LT',\n        nextDay: '[Aban iha] LT',\n        nextWeek: 'dddd [iha] LT',\n        lastDay: '[Horiseik iha] LT',\n        lastWeek: 'dddd [semana kotuk] [iha] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'iha %s',\n        past : '%s liuba',\n        s : 'minutu balun',\n        m : 'minutu ida',\n        mm : 'minutus %d',\n        h : 'horas ida',\n        hh : 'horas %d',\n        d : 'loron ida',\n        dd : 'loron %d',\n        M : 'fulan ida',\n        MM : 'fulan %d',\n        y : 'tinan ida',\n        yy : 'tinan %d'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn tet;\n\n})));\n","//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar th = moment.defineLocale('th', {\n    months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n    monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n    weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n    weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY เวลา H:mm',\n        LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n    },\n    meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n    isPM: function (input) {\n        return input === 'หลังเที่ยง';\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'ก่อนเที่ยง';\n        } else {\n            return 'หลังเที่ยง';\n        }\n    },\n    calendar : {\n        sameDay : '[วันนี้ เวลา] LT',\n        nextDay : '[พรุ่งนี้ เวลา] LT',\n        nextWeek : 'dddd[หน้า เวลา] LT',\n        lastDay : '[เมื่อวานนี้ เวลา] LT',\n        lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'อีก %s',\n        past : '%sที่แล้ว',\n        s : 'ไม่กี่วินาที',\n        m : '1 นาที',\n        mm : '%d นาที',\n        h : '1 ชั่วโมง',\n        hh : '%d ชั่วโมง',\n        d : '1 วัน',\n        dd : '%d วัน',\n        M : '1 เดือน',\n        MM : '%d เดือน',\n        y : '1 ปี',\n        yy : '%d ปี'\n    }\n});\n\nreturn th;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar tlPh = moment.defineLocale('tl-ph', {\n    months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n    monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n    weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n    weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n    weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'MM/D/YYYY',\n        LL : 'MMMM D, YYYY',\n        LLL : 'MMMM D, YYYY HH:mm',\n        LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: 'LT [ngayong araw]',\n        nextDay: '[Bukas ng] LT',\n        nextWeek: 'LT [sa susunod na] dddd',\n        lastDay: 'LT [kahapon]',\n        lastWeek: 'LT [noong nakaraang] dddd',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'sa loob ng %s',\n        past : '%s ang nakalipas',\n        s : 'ilang segundo',\n        m : 'isang minuto',\n        mm : '%d minuto',\n        h : 'isang oras',\n        hh : '%d oras',\n        d : 'isang araw',\n        dd : '%d araw',\n        M : 'isang buwan',\n        MM : '%d buwan',\n        y : 'isang taon',\n        yy : '%d taon'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}/,\n    ordinal : function (number) {\n        return number;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn tlPh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\nfunction translateFuture(output) {\n    var time = output;\n    time = (output.indexOf('jaj') !== -1) ?\n    time.slice(0, -3) + 'leS' :\n    (output.indexOf('jar') !== -1) ?\n    time.slice(0, -3) + 'waQ' :\n    (output.indexOf('DIS') !== -1) ?\n    time.slice(0, -3) + 'nem' :\n    time + ' pIq';\n    return time;\n}\n\nfunction translatePast(output) {\n    var time = output;\n    time = (output.indexOf('jaj') !== -1) ?\n    time.slice(0, -3) + 'Hu’' :\n    (output.indexOf('jar') !== -1) ?\n    time.slice(0, -3) + 'wen' :\n    (output.indexOf('DIS') !== -1) ?\n    time.slice(0, -3) + 'ben' :\n    time + ' ret';\n    return time;\n}\n\nfunction translate(number, withoutSuffix, string, isFuture) {\n    var numberNoun = numberAsNoun(number);\n    switch (string) {\n        case 'mm':\n            return numberNoun + ' tup';\n        case 'hh':\n            return numberNoun + ' rep';\n        case 'dd':\n            return numberNoun + ' jaj';\n        case 'MM':\n            return numberNoun + ' jar';\n        case 'yy':\n            return numberNoun + ' DIS';\n    }\n}\n\nfunction numberAsNoun(number) {\n    var hundred = Math.floor((number % 1000) / 100),\n    ten = Math.floor((number % 100) / 10),\n    one = number % 10,\n    word = '';\n    if (hundred > 0) {\n        word += numbersNouns[hundred] + 'vatlh';\n    }\n    if (ten > 0) {\n        word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n    }\n    if (one > 0) {\n        word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n    }\n    return (word === '') ? 'pagh' : word;\n}\n\nvar tlh = moment.defineLocale('tlh', {\n    months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n    monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n    weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n    weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[DaHjaj] LT',\n        nextDay: '[wa’leS] LT',\n        nextWeek: 'LLL',\n        lastDay: '[wa’Hu’] LT',\n        lastWeek: 'LLL',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : translateFuture,\n        past : translatePast,\n        s : 'puS lup',\n        m : 'wa’ tup',\n        mm : translate,\n        h : 'wa’ rep',\n        hh : translate,\n        d : 'wa’ jaj',\n        dd : translate,\n        M : 'wa’ jar',\n        MM : translate,\n        y : 'wa’ DIS',\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn tlh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n// This is currently too difficult (maybe even impossible) to add.\nvar tzl = moment.defineLocale('tzl', {\n    months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n    monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n    weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n    weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n    weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n    longDateFormat : {\n        LT : 'HH.mm',\n        LTS : 'HH.mm.ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM [dallas] YYYY',\n        LLL : 'D. MMMM [dallas] YYYY HH.mm',\n        LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n    },\n    meridiemParse: /d\\'o|d\\'a/i,\n    isPM : function (input) {\n        return 'd\\'o' === input.toLowerCase();\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'd\\'o' : 'D\\'O';\n        } else {\n            return isLower ? 'd\\'a' : 'D\\'A';\n        }\n    },\n    calendar : {\n        sameDay : '[oxhi à] LT',\n        nextDay : '[demà à] LT',\n        nextWeek : 'dddd [à] LT',\n        lastDay : '[ieiri à] LT',\n        lastWeek : '[sür el] dddd [lasteu à] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'osprei %s',\n        past : 'ja%s',\n        s : processRelativeTime,\n        m : processRelativeTime,\n        mm : processRelativeTime,\n        h : processRelativeTime,\n        hh : processRelativeTime,\n        d : processRelativeTime,\n        dd : processRelativeTime,\n        M : processRelativeTime,\n        MM : processRelativeTime,\n        y : processRelativeTime,\n        yy : processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        's': ['viensas secunds', '\\'iensas secunds'],\n        'm': ['\\'n míut', '\\'iens míut'],\n        'mm': [number + ' míuts', '' + number + ' míuts'],\n        'h': ['\\'n þora', '\\'iensa þora'],\n        'hh': [number + ' þoras', '' + number + ' þoras'],\n        'd': ['\\'n ziua', '\\'iensa ziua'],\n        'dd': [number + ' ziuas', '' + number + ' ziuas'],\n        'M': ['\\'n mes', '\\'iens mes'],\n        'MM': [number + ' mesen', '' + number + ' mesen'],\n        'y': ['\\'n ar', '\\'iens ar'],\n        'yy': [number + ' ars', '' + number + ' ars']\n    };\n    return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n}\n\nreturn tzl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar tzm = moment.defineLocale('tzm', {\n    months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n    monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n    weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n    weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n    weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n        nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n        nextWeek: 'dddd [ⴴ] LT',\n        lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n        lastWeek: 'dddd [ⴴ] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n        past : 'ⵢⴰⵏ %s',\n        s : 'ⵉⵎⵉⴽ',\n        m : 'ⵎⵉⵏⵓⴺ',\n        mm : '%d ⵎⵉⵏⵓⴺ',\n        h : 'ⵙⴰⵄⴰ',\n        hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n        d : 'ⴰⵙⵙ',\n        dd : '%d oⵙⵙⴰⵏ',\n        M : 'ⴰⵢoⵓⵔ',\n        MM : '%d ⵉⵢⵢⵉⵔⵏ',\n        y : 'ⴰⵙⴳⴰⵙ',\n        yy : '%d ⵉⵙⴳⴰⵙⵏ'\n    },\n    week : {\n        dow : 6, // Saturday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn tzm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight Latin [tzm-latn]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar tzmLatn = moment.defineLocale('tzm-latn', {\n    months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n    monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n    weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n    weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n    weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[asdkh g] LT',\n        nextDay: '[aska g] LT',\n        nextWeek: 'dddd [g] LT',\n        lastDay: '[assant g] LT',\n        lastWeek: 'dddd [g] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'dadkh s yan %s',\n        past : 'yan %s',\n        s : 'imik',\n        m : 'minuḍ',\n        mm : '%d minuḍ',\n        h : 'saɛa',\n        hh : '%d tassaɛin',\n        d : 'ass',\n        dd : '%d ossan',\n        M : 'ayowr',\n        MM : '%d iyyirn',\n        y : 'asgas',\n        yy : '%d isgasn'\n    },\n    week : {\n        dow : 6, // Saturday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn tzmLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nfunction plural(word, num) {\n    var forms = word.split('_');\n    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n}\nfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n    var format = {\n        'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n        'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n        'dd': 'день_дні_днів',\n        'MM': 'місяць_місяці_місяців',\n        'yy': 'рік_роки_років'\n    };\n    if (key === 'm') {\n        return withoutSuffix ? 'хвилина' : 'хвилину';\n    }\n    else if (key === 'h') {\n        return withoutSuffix ? 'година' : 'годину';\n    }\n    else {\n        return number + ' ' + plural(format[key], +number);\n    }\n}\nfunction weekdaysCaseReplace(m, format) {\n    var weekdays = {\n        'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n        'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n        'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n    };\n\n    if (!m) {\n        return weekdays['nominative'];\n    }\n\n    var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n        'accusative' :\n        ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n            'genitive' :\n            'nominative');\n    return weekdays[nounCase][m.day()];\n}\nfunction processHoursFunction(str) {\n    return function () {\n        return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n    };\n}\n\nvar uk = moment.defineLocale('uk', {\n    months : {\n        'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n        'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n    },\n    monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n    weekdays : weekdaysCaseReplace,\n    weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n    weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY р.',\n        LLL : 'D MMMM YYYY р., HH:mm',\n        LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n    },\n    calendar : {\n        sameDay: processHoursFunction('[Сьогодні '),\n        nextDay: processHoursFunction('[Завтра '),\n        lastDay: processHoursFunction('[Вчора '),\n        nextWeek: processHoursFunction('[У] dddd ['),\n        lastWeek: function () {\n            switch (this.day()) {\n                case 0:\n                case 3:\n                case 5:\n                case 6:\n                    return processHoursFunction('[Минулої] dddd [').call(this);\n                case 1:\n                case 2:\n                case 4:\n                    return processHoursFunction('[Минулого] dddd [').call(this);\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'за %s',\n        past : '%s тому',\n        s : 'декілька секунд',\n        m : relativeTimeWithPlural,\n        mm : relativeTimeWithPlural,\n        h : 'годину',\n        hh : relativeTimeWithPlural,\n        d : 'день',\n        dd : relativeTimeWithPlural,\n        M : 'місяць',\n        MM : relativeTimeWithPlural,\n        y : 'рік',\n        yy : relativeTimeWithPlural\n    },\n    // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n    meridiemParse: /ночі|ранку|дня|вечора/,\n    isPM: function (input) {\n        return /^(дня|вечора)$/.test(input);\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'ночі';\n        } else if (hour < 12) {\n            return 'ранку';\n        } else if (hour < 17) {\n            return 'дня';\n        } else {\n            return 'вечора';\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n    ordinal: function (number, period) {\n        switch (period) {\n            case 'M':\n            case 'd':\n            case 'DDD':\n            case 'w':\n            case 'W':\n                return number + '-й';\n            case 'D':\n                return number + '-го';\n            default:\n                return number;\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn uk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar months = [\n    'جنوری',\n    'فروری',\n    'مارچ',\n    'اپریل',\n    'مئی',\n    'جون',\n    'جولائی',\n    'اگست',\n    'ستمبر',\n    'اکتوبر',\n    'نومبر',\n    'دسمبر'\n];\nvar days = [\n    'اتوار',\n    'پیر',\n    'منگل',\n    'بدھ',\n    'جمعرات',\n    'جمعہ',\n    'ہفتہ'\n];\n\nvar ur = moment.defineLocale('ur', {\n    months : months,\n    monthsShort : months,\n    weekdays : days,\n    weekdaysShort : days,\n    weekdaysMin : days,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd، D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /صبح|شام/,\n    isPM : function (input) {\n        return 'شام' === input;\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'صبح';\n        }\n        return 'شام';\n    },\n    calendar : {\n        sameDay : '[آج بوقت] LT',\n        nextDay : '[کل بوقت] LT',\n        nextWeek : 'dddd [بوقت] LT',\n        lastDay : '[گذشتہ روز بوقت] LT',\n        lastWeek : '[گذشتہ] dddd [بوقت] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s بعد',\n        past : '%s قبل',\n        s : 'چند سیکنڈ',\n        m : 'ایک منٹ',\n        mm : '%d منٹ',\n        h : 'ایک گھنٹہ',\n        hh : '%d گھنٹے',\n        d : 'ایک دن',\n        dd : '%d دن',\n        M : 'ایک ماہ',\n        MM : '%d ماہ',\n        y : 'ایک سال',\n        yy : '%d سال'\n    },\n    preparse: function (string) {\n        return string.replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/,/g, '،');\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn ur;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar uz = moment.defineLocale('uz', {\n    months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n    monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n    weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n    weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n    weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'D MMMM YYYY, dddd HH:mm'\n    },\n    calendar : {\n        sameDay : '[Бугун соат] LT [да]',\n        nextDay : '[Эртага] LT [да]',\n        nextWeek : 'dddd [куни соат] LT [да]',\n        lastDay : '[Кеча соат] LT [да]',\n        lastWeek : '[Утган] dddd [куни соат] LT [да]',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'Якин %s ичида',\n        past : 'Бир неча %s олдин',\n        s : 'фурсат',\n        m : 'бир дакика',\n        mm : '%d дакика',\n        h : 'бир соат',\n        hh : '%d соат',\n        d : 'бир кун',\n        dd : '%d кун',\n        M : 'бир ой',\n        MM : '%d ой',\n        y : 'бир йил',\n        yy : '%d йил'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn uz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar uzLatn = moment.defineLocale('uz-latn', {\n    months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n    monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n    weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n    weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n    weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'D MMMM YYYY, dddd HH:mm'\n    },\n    calendar : {\n        sameDay : '[Bugun soat] LT [da]',\n        nextDay : '[Ertaga] LT [da]',\n        nextWeek : 'dddd [kuni soat] LT [da]',\n        lastDay : '[Kecha soat] LT [da]',\n        lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'Yaqin %s ichida',\n        past : 'Bir necha %s oldin',\n        s : 'soniya',\n        m : 'bir daqiqa',\n        mm : '%d daqiqa',\n        h : 'bir soat',\n        hh : '%d soat',\n        d : 'bir kun',\n        dd : '%d kun',\n        M : 'bir oy',\n        MM : '%d oy',\n        y : 'bir yil',\n        yy : '%d yil'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn uzLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar vi = moment.defineLocale('vi', {\n    months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n    monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n    weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n    weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n    weekdaysParseExact : true,\n    meridiemParse: /sa|ch/i,\n    isPM : function (input) {\n        return /^ch$/i.test(input);\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 12) {\n            return isLower ? 'sa' : 'SA';\n        } else {\n            return isLower ? 'ch' : 'CH';\n        }\n    },\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM [năm] YYYY',\n        LLL : 'D MMMM [năm] YYYY HH:mm',\n        LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n        l : 'DD/M/YYYY',\n        ll : 'D MMM YYYY',\n        lll : 'D MMM YYYY HH:mm',\n        llll : 'ddd, D MMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[Hôm nay lúc] LT',\n        nextDay: '[Ngày mai lúc] LT',\n        nextWeek: 'dddd [tuần tới lúc] LT',\n        lastDay: '[Hôm qua lúc] LT',\n        lastWeek: 'dddd [tuần rồi lúc] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : '%s tới',\n        past : '%s trước',\n        s : 'vài giây',\n        m : 'một phút',\n        mm : '%d phút',\n        h : 'một giờ',\n        hh : '%d giờ',\n        d : 'một ngày',\n        dd : '%d ngày',\n        M : 'một tháng',\n        MM : '%d tháng',\n        y : 'một năm',\n        yy : '%d năm'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}/,\n    ordinal : function (number) {\n        return number;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn vi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar xPseudo = moment.defineLocale('x-pseudo', {\n    months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n    monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n    weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n    weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[T~ódá~ý át] LT',\n        nextDay : '[T~ómó~rró~w át] LT',\n        nextWeek : 'dddd [át] LT',\n        lastDay : '[Ý~ést~érdá~ý át] LT',\n        lastWeek : '[L~ást] dddd [át] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'í~ñ %s',\n        past : '%s á~gó',\n        s : 'á ~féw ~sécó~ñds',\n        m : 'á ~míñ~úté',\n        mm : '%d m~íñú~tés',\n        h : 'á~ñ hó~úr',\n        hh : '%d h~óúrs',\n        d : 'á ~dáý',\n        dd : '%d d~áýs',\n        M : 'á ~móñ~th',\n        MM : '%d m~óñt~hs',\n        y : 'á ~ýéár',\n        yy : '%d ý~éárs'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn xPseudo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar yo = moment.defineLocale('yo', {\n    months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n    monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n    weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n    weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n    weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY h:mm A',\n        LLLL : 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar : {\n        sameDay : '[Ònì ni] LT',\n        nextDay : '[Ọ̀la ni] LT',\n        nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n        lastDay : '[Àna ni] LT',\n        lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'ní %s',\n        past : '%s kọjá',\n        s : 'ìsẹjú aayá die',\n        m : 'ìsẹjú kan',\n        mm : 'ìsẹjú %d',\n        h : 'wákati kan',\n        hh : 'wákati %d',\n        d : 'ọjọ́ kan',\n        dd : 'ọjọ́ %d',\n        M : 'osù kan',\n        MM : 'osù %d',\n        y : 'ọdún kan',\n        yy : 'ọdún %d'\n    },\n    dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n    ordinal : 'ọjọ́ %d',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4 // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn yo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar zhHk = moment.defineLocale('zh-hk', {\n    months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n    weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n    weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY年MMMD日',\n        LL : 'YYYY年MMMD日',\n        LLL : 'YYYY年MMMD日 HH:mm',\n        LLLL : 'YYYY年MMMD日dddd HH:mm',\n        l : 'YYYY年MMMD日',\n        ll : 'YYYY年MMMD日',\n        lll : 'YYYY年MMMD日 HH:mm',\n        llll : 'YYYY年MMMD日dddd HH:mm'\n    },\n    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n            return hour;\n        } else if (meridiem === '中午') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === '下午' || meridiem === '晚上') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        var hm = hour * 100 + minute;\n        if (hm < 600) {\n            return '凌晨';\n        } else if (hm < 900) {\n            return '早上';\n        } else if (hm < 1130) {\n            return '上午';\n        } else if (hm < 1230) {\n            return '中午';\n        } else if (hm < 1800) {\n            return '下午';\n        } else {\n            return '晚上';\n        }\n    },\n    calendar : {\n        sameDay : '[今天]LT',\n        nextDay : '[明天]LT',\n        nextWeek : '[下]ddddLT',\n        lastDay : '[昨天]LT',\n        lastWeek : '[上]ddddLT',\n        sameElse : 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            case 'd' :\n            case 'D' :\n            case 'DDD' :\n                return number + '日';\n            case 'M' :\n                return number + '月';\n            case 'w' :\n            case 'W' :\n                return number + '週';\n            default :\n                return number;\n        }\n    },\n    relativeTime : {\n        future : '%s內',\n        past : '%s前',\n        s : '幾秒',\n        m : '1 分鐘',\n        mm : '%d 分鐘',\n        h : '1 小時',\n        hh : '%d 小時',\n        d : '1 天',\n        dd : '%d 天',\n        M : '1 個月',\n        MM : '%d 個月',\n        y : '1 年',\n        yy : '%d 年'\n    }\n});\n\nreturn zhHk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\nvar zhTw = moment.defineLocale('zh-tw', {\n    months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n    weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n    weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY年MMMD日',\n        LL : 'YYYY年MMMD日',\n        LLL : 'YYYY年MMMD日 HH:mm',\n        LLLL : 'YYYY年MMMD日dddd HH:mm',\n        l : 'YYYY年MMMD日',\n        ll : 'YYYY年MMMD日',\n        lll : 'YYYY年MMMD日 HH:mm',\n        llll : 'YYYY年MMMD日dddd HH:mm'\n    },\n    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n            return hour;\n        } else if (meridiem === '中午') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === '下午' || meridiem === '晚上') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        var hm = hour * 100 + minute;\n        if (hm < 600) {\n            return '凌晨';\n        } else if (hm < 900) {\n            return '早上';\n        } else if (hm < 1130) {\n            return '上午';\n        } else if (hm < 1230) {\n            return '中午';\n        } else if (hm < 1800) {\n            return '下午';\n        } else {\n            return '晚上';\n        }\n    },\n    calendar : {\n        sameDay : '[今天]LT',\n        nextDay : '[明天]LT',\n        nextWeek : '[下]ddddLT',\n        lastDay : '[昨天]LT',\n        lastWeek : '[上]ddddLT',\n        sameElse : 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            case 'd' :\n            case 'D' :\n            case 'DDD' :\n                return number + '日';\n            case 'M' :\n                return number + '月';\n            case 'w' :\n            case 'W' :\n                return number + '週';\n            default :\n                return number;\n        }\n    },\n    relativeTime : {\n        future : '%s內',\n        past : '%s前',\n        s : '幾秒',\n        m : '1 分鐘',\n        mm : '%d 分鐘',\n        h : '1 小時',\n        hh : '%d 小時',\n        d : '1 天',\n        dd : '%d 天',\n        M : '1 個月',\n        MM : '%d 個月',\n        y : '1 年',\n        yy : '%d 年'\n    }\n});\n\nreturn zhTw;\n\n})));\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n  return function () {\n    return arg;\n  };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n  return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n  return arg;\n};\n\nmodule.exports = emptyFunction;","// Unique ID creation requires a high quality random # generator.  In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API.  We do the best we can via\n// feature-detection\nvar rng;\n\nvar crypto = global.crypto || global.msCrypto; // for IE 11\nif (crypto && crypto.getRandomValues) {\n  // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n  var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n  rng = function whatwgRNG() {\n    crypto.getRandomValues(rnds8);\n    return rnds8;\n  };\n}\n\nif (!rng) {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var rnds = new Array(16);\n  rng = function() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return rnds;\n  };\n}\n\nmodule.exports = rng;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  return bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]];\n}\n\nmodule.exports = bytesToUuid;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction componentWillMount() {\n  // Call this.constructor.gDSFP to support sub-classes.\n  var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n  if (state !== null && state !== undefined) {\n    this.setState(state);\n  }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n  // Call this.constructor.gDSFP to support sub-classes.\n  // Use the setState() updater to ensure state isn't stale in certain edge cases.\n  function updater(prevState) {\n    var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n    return state !== null && state !== undefined ? state : null;\n  }\n  // Binding \"this\" is important for shallow renderer support.\n  this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n  try {\n    var prevProps = this.props;\n    var prevState = this.state;\n    this.props = nextProps;\n    this.state = nextState;\n    this.__reactInternalSnapshotFlag = true;\n    this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n      prevProps,\n      prevState\n    );\n  } finally {\n    this.props = prevProps;\n    this.state = prevState;\n  }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n  var prototype = Component.prototype;\n\n  if (!prototype || !prototype.isReactComponent) {\n    throw new Error('Can only polyfill class components');\n  }\n\n  if (\n    typeof Component.getDerivedStateFromProps !== 'function' &&\n    typeof prototype.getSnapshotBeforeUpdate !== 'function'\n  ) {\n    return Component;\n  }\n\n  // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n  // Error if any of these lifecycles are present,\n  // Because they would work differently between older and newer (16.3+) versions of React.\n  var foundWillMountName = null;\n  var foundWillReceivePropsName = null;\n  var foundWillUpdateName = null;\n  if (typeof prototype.componentWillMount === 'function') {\n    foundWillMountName = 'componentWillMount';\n  } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n    foundWillMountName = 'UNSAFE_componentWillMount';\n  }\n  if (typeof prototype.componentWillReceiveProps === 'function') {\n    foundWillReceivePropsName = 'componentWillReceiveProps';\n  } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n    foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n  }\n  if (typeof prototype.componentWillUpdate === 'function') {\n    foundWillUpdateName = 'componentWillUpdate';\n  } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n    foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n  }\n  if (\n    foundWillMountName !== null ||\n    foundWillReceivePropsName !== null ||\n    foundWillUpdateName !== null\n  ) {\n    var componentName = Component.displayName || Component.name;\n    var newApiName =\n      typeof Component.getDerivedStateFromProps === 'function'\n        ? 'getDerivedStateFromProps()'\n        : 'getSnapshotBeforeUpdate()';\n\n    throw Error(\n      'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n        componentName +\n        ' uses ' +\n        newApiName +\n        ' but also contains the following legacy lifecycles:' +\n        (foundWillMountName !== null ? '\\n  ' + foundWillMountName : '') +\n        (foundWillReceivePropsName !== null\n          ? '\\n  ' + foundWillReceivePropsName\n          : '') +\n        (foundWillUpdateName !== null ? '\\n  ' + foundWillUpdateName : '') +\n        '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n        'https://fb.me/react-async-component-lifecycle-hooks'\n    );\n  }\n\n  // React <= 16.2 does not support static getDerivedStateFromProps.\n  // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n  // Newer versions of React will ignore these lifecycles if gDSFP exists.\n  if (typeof Component.getDerivedStateFromProps === 'function') {\n    prototype.componentWillMount = componentWillMount;\n    prototype.componentWillReceiveProps = componentWillReceiveProps;\n  }\n\n  // React <= 16.2 does not support getSnapshotBeforeUpdate.\n  // As a workaround, use cWU to invoke the new lifecycle.\n  // Newer versions of React will ignore that lifecycle if gSBU exists.\n  if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n    if (typeof prototype.componentDidUpdate !== 'function') {\n      throw new Error(\n        'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n      );\n    }\n\n    prototype.componentWillUpdate = componentWillUpdate;\n\n    var componentDidUpdate = prototype.componentDidUpdate;\n\n    prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n      prevProps,\n      prevState,\n      maybeSnapshot\n    ) {\n      // 16.3+ will not execute our will-update method;\n      // It will pass a snapshot value to did-update though.\n      // Older versions will require our polyfilled will-update value.\n      // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n      // Because for <= 15.x versions this might be a \"prevContext\" object.\n      // We also can't just check \"__reactInternalSnapshot\",\n      // Because get-snapshot might return a falsy value.\n      // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n      var snapshot = this.__reactInternalSnapshotFlag\n        ? this.__reactInternalSnapshot\n        : maybeSnapshot;\n\n      componentDidUpdate.call(this, prevProps, prevState, snapshot);\n    };\n  }\n\n  return Component;\n}\n\nexport { polyfill };\n","'use strict';\n\nexports.__esModule = true;\nexports.classNamesShape = exports.timeoutsShape = undefined;\nexports.transitionTimeout = transitionTimeout;\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction transitionTimeout(transitionType) {\n  var timeoutPropName = 'transition' + transitionType + 'Timeout';\n  var enabledPropName = 'transition' + transitionType;\n\n  return function (props) {\n    // If the transition is enabled\n    if (props[enabledPropName]) {\n      // If no timeout duration is provided\n      if (props[timeoutPropName] == null) {\n        return new Error(timeoutPropName + ' wasn\\'t supplied to CSSTransitionGroup: ' + 'this can cause unreliable animations and won\\'t be supported in ' + 'a future version of React. See ' + 'https://fb.me/react-animation-transition-group-timeout for more ' + 'information.');\n\n        // If the duration isn't a number\n      } else if (typeof props[timeoutPropName] !== 'number') {\n        return new Error(timeoutPropName + ' must be a number (in milliseconds)');\n      }\n    }\n\n    return null;\n  };\n}\n\nvar timeoutsShape = exports.timeoutsShape = _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.shape({\n  enter: _propTypes2.default.number,\n  exit: _propTypes2.default.number\n}).isRequired]);\n\nvar classNamesShape = exports.classNamesShape = _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({\n  enter: _propTypes2.default.string,\n  exit: _propTypes2.default.string,\n  active: _propTypes2.default.string\n}), _propTypes2.default.shape({\n  enter: _propTypes2.default.string,\n  enterDone: _propTypes2.default.string,\n  enterActive: _propTypes2.default.string,\n  exit: _propTypes2.default.string,\n  exitDone: _propTypes2.default.string,\n  exitActive: _propTypes2.default.string\n})]);","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","module.exports = require('./_hide');\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.size = exports.default = exports.IconWrapper = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _uuid = _interopRequireDefault(require(\"uuid\"));\n\nvar _theme = require(\"@atlaskit/theme\");\n\nvar _constants = require(\"../constants\");\n\nvar getSize = function getSize(props) {\n  if (props.size) {\n    return \"height: \".concat(_constants.sizes[props.size], \"; width: \").concat(_constants.sizes[props.size], \";\");\n  }\n\n  return null;\n};\n\nvar IconWrapper = _styledComponents.default.span.withConfig({\n  displayName: \"Icon__IconWrapper\",\n  componentId: \"dyhwwi-0\"\n})([\"\\n  \", \" color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \" max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n  /* Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"], getSize, function (p) {\n  return p.primaryColor || 'currentColor';\n}, function (p) {\n  return p.secondaryColor || _theme.colors.background;\n}, getSize);\n\nexports.IconWrapper = IconWrapper;\n\nvar Icon =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inherits2.default)(Icon, _Component);\n\n  function Icon() {\n    (0, _classCallCheck2.default)(this, Icon);\n    return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Icon).apply(this, arguments));\n  }\n\n  (0, _createClass2.default)(Icon, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          Glyph = _this$props.glyph,\n          dangerouslySetGlyph = _this$props.dangerouslySetGlyph,\n          onClick = _this$props.onClick,\n          primaryColor = _this$props.primaryColor,\n          secondaryColor = _this$props.secondaryColor,\n          size = _this$props.size; // handling the glyphs as strings\n\n      if (dangerouslySetGlyph) {\n        return _react.default.createElement(IconWrapper, {\n          onClick: onClick,\n          primaryColor: primaryColor,\n          secondaryColor: secondaryColor,\n          size: size,\n          \"aria-label\": this.props.label,\n          dangerouslySetInnerHTML: {\n            __html: Icon.insertDynamicGradientID(dangerouslySetGlyph)\n          }\n        });\n      } // handling the glyphs when passed through as functions\n\n\n      return _react.default.createElement(IconWrapper, {\n        onClick: onClick,\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        size: size,\n        \"aria-label\": this.props.label\n      }, Glyph ? _react.default.createElement(Glyph, {\n        role: \"presentation\"\n      }) : null);\n    }\n  }], [{\n    key: \"insertDynamicGradientID\",\n\n    /* Icons need unique gradient IDs across instances for different gradient definitions to work\n     * correctly.\n     * A step in the icon build process replaces linear gradient IDs and their references in paths\n     * to a placeholder string so we can replace them with a dynamic ID here.\n     * Replacing the original IDs with placeholders in the build process is more robust than not\n     * using placeholders as we do not have to rely on regular expressions to find specific element\n     * to replace.\n     */\n    value: function insertDynamicGradientID(svgStr) {\n      var id = (0, _uuid.default)();\n      var replacedSvgStr = svgStr.replace(/id=\"([^\"]+)-idPlaceholder\"/g, \"id=$1-\".concat(id)).replace(/fill=\"url\\(#([^\"]+)-idPlaceholder\\)\"/g, \"fill=\\\"url(#$1-\".concat(id, \")\\\"\"));\n      return replacedSvgStr;\n    }\n  }]);\n  return Icon;\n}(_react.Component);\n\nexports.default = Icon;\n(0, _defineProperty2.default)(Icon, \"defaultProps\", {\n  onClick: function onClick() {}\n});\nvar size = Object.keys(_constants.sizes).reduce(function (p, c) {\n  return Object.assign(p, (0, _defineProperty2.default)({}, c, c));\n}, {});\nexports.size = size;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.size = exports.default = exports.IconWrapper = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _uuid = _interopRequireDefault(require(\"uuid\"));\n\nvar _theme = require(\"@atlaskit/theme\");\n\nvar _constants = require(\"../constants\");\n\nvar getSize = function getSize(props) {\n  if (props.size) {\n    return \"height: \".concat(_constants.sizes[props.size], \"; width: \").concat(_constants.sizes[props.size], \";\");\n  }\n\n  return null;\n};\n\nvar IconWrapper = _styledComponents.default.span.withConfig({\n  displayName: \"Icon__IconWrapper\",\n  componentId: \"dyhwwi-0\"\n})([\"\\n  \", \" color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \" max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n  /* Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"], getSize, function (p) {\n  return p.primaryColor || 'currentColor';\n}, function (p) {\n  return p.secondaryColor || _theme.colors.background;\n}, getSize);\n\nexports.IconWrapper = IconWrapper;\n\nvar Icon =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inherits2.default)(Icon, _Component);\n\n  function Icon() {\n    (0, _classCallCheck2.default)(this, Icon);\n    return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Icon).apply(this, arguments));\n  }\n\n  (0, _createClass2.default)(Icon, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          Glyph = _this$props.glyph,\n          dangerouslySetGlyph = _this$props.dangerouslySetGlyph,\n          onClick = _this$props.onClick,\n          primaryColor = _this$props.primaryColor,\n          secondaryColor = _this$props.secondaryColor,\n          size = _this$props.size; // handling the glyphs as strings\n\n      if (dangerouslySetGlyph) {\n        return _react.default.createElement(IconWrapper, {\n          onClick: onClick,\n          primaryColor: primaryColor,\n          secondaryColor: secondaryColor,\n          size: size,\n          \"aria-label\": this.props.label,\n          dangerouslySetInnerHTML: {\n            __html: Icon.insertDynamicGradientID(dangerouslySetGlyph)\n          }\n        });\n      } // handling the glyphs when passed through as functions\n\n\n      return _react.default.createElement(IconWrapper, {\n        onClick: onClick,\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        size: size,\n        \"aria-label\": this.props.label\n      }, Glyph ? _react.default.createElement(Glyph, {\n        role: \"presentation\"\n      }) : null);\n    }\n  }], [{\n    key: \"insertDynamicGradientID\",\n\n    /* Icons need unique gradient IDs across instances for different gradient definitions to work\n     * correctly.\n     * A step in the icon build process replaces linear gradient IDs and their references in paths\n     * to a placeholder string so we can replace them with a dynamic ID here.\n     * Replacing the original IDs with placeholders in the build process is more robust than not\n     * using placeholders as we do not have to rely on regular expressions to find specific element\n     * to replace.\n     */\n    value: function insertDynamicGradientID(svgStr) {\n      var id = (0, _uuid.default)();\n      var replacedSvgStr = svgStr.replace(/id=\"([^\"]+)-idPlaceholder\"/g, \"id=$1-\".concat(id)).replace(/fill=\"url\\(#([^\"]+)-idPlaceholder\\)\"/g, \"fill=\\\"url(#$1-\".concat(id, \")\\\"\"));\n      return replacedSvgStr;\n    }\n  }]);\n  return Icon;\n}(_react.Component);\n\nexports.default = Icon;\n(0, _defineProperty2.default)(Icon, \"defaultProps\", {\n  onClick: function onClick() {}\n});\nvar size = Object.keys(_constants.sizes).reduce(function (p, c) {\n  return Object.assign(p, (0, _defineProperty2.default)({}, c, c));\n}, {});\nexports.size = size;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.size = exports.default = exports.IconWrapper = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _uuid = _interopRequireDefault(require(\"uuid\"));\n\nvar _theme = require(\"@atlaskit/theme\");\n\nvar _constants = require(\"../constants\");\n\nvar getSize = function getSize(props) {\n  if (props.size) {\n    return \"height: \".concat(_constants.sizes[props.size], \"; width: \").concat(_constants.sizes[props.size], \";\");\n  }\n\n  return null;\n};\n\nvar IconWrapper = _styledComponents.default.span.withConfig({\n  displayName: \"Icon__IconWrapper\",\n  componentId: \"dyhwwi-0\"\n})([\"\\n  \", \" color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \" max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n  /* Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"], getSize, function (p) {\n  return p.primaryColor || 'currentColor';\n}, function (p) {\n  return p.secondaryColor || _theme.colors.background;\n}, getSize);\n\nexports.IconWrapper = IconWrapper;\n\nvar Icon =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inherits2.default)(Icon, _Component);\n\n  function Icon() {\n    (0, _classCallCheck2.default)(this, Icon);\n    return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Icon).apply(this, arguments));\n  }\n\n  (0, _createClass2.default)(Icon, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          Glyph = _this$props.glyph,\n          dangerouslySetGlyph = _this$props.dangerouslySetGlyph,\n          primaryColor = _this$props.primaryColor,\n          secondaryColor = _this$props.secondaryColor,\n          size = _this$props.size; // handling the glyphs as strings\n\n      if (dangerouslySetGlyph) {\n        return _react.default.createElement(IconWrapper, {\n          primaryColor: primaryColor,\n          secondaryColor: secondaryColor,\n          size: size,\n          \"aria-label\": this.props.label,\n          dangerouslySetInnerHTML: {\n            __html: Icon.insertDynamicGradientID(dangerouslySetGlyph)\n          }\n        });\n      } // handling the glyphs when passed through as functions\n\n\n      return _react.default.createElement(IconWrapper, {\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        size: size,\n        \"aria-label\": this.props.label\n      }, Glyph ? _react.default.createElement(Glyph, {\n        role: \"presentation\"\n      }) : null);\n    }\n  }], [{\n    key: \"insertDynamicGradientID\",\n\n    /* Icons need unique gradient IDs across instances for different gradient definitions to work\n     * correctly.\n     * A step in the icon build process replaces linear gradient IDs and their references in paths\n     * to a placeholder string so we can replace them with a dynamic ID here.\n     * Replacing the original IDs with placeholders in the build process is more robust than not\n     * using placeholders as we do not have to rely on regular expressions to find specific element\n     * to replace.\n     */\n    value: function insertDynamicGradientID(svgStr) {\n      var id = (0, _uuid.default)();\n      var replacedSvgStr = svgStr.replace(/id=\"([^\"]+)-idPlaceholder\"/g, \"id=$1-\".concat(id)).replace(/fill=\"url\\(#([^\"]+)-idPlaceholder\\)\"/g, \"fill=\\\"url(#$1-\".concat(id, \")\\\"\"));\n      return replacedSvgStr;\n    }\n  }]);\n  return Icon;\n}(_react.Component);\n\nexports.default = Icon;\nvar size = Object.keys(_constants.sizes).reduce(function (p, c) {\n  return Object.assign(p, (0, _defineProperty2.default)({}, c, c));\n}, {});\nexports.size = size;","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]';\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array ? array.length : 0;\n  return length ? baseFlatten(array, 1) : [];\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 8-9 which returns 'object' for typed array and other constructors.\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\nmodule.exports = flatten;\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar es6_promise_1 = require(\"es6-promise\");\r\nrequire(\"isomorphic-fetch\");\r\nvar common_1 = require(\"./common\");\r\nvar ResponseHandler_1 = require(\"./ResponseHandler\");\r\nvar RequestMethod_1 = require(\"./RequestMethod\");\r\nvar GraphHelper_1 = require(\"./GraphHelper\");\r\nvar GraphRequest = (function () {\r\n    function GraphRequest(config, path) {\r\n        this.config = config;\r\n        this._headers = {};\r\n        this.urlComponents = {\r\n            host: this.config.baseUrl,\r\n            version: this.config.defaultVersion,\r\n            oDataQueryParams: {},\r\n            otherURLQueryParams: {}\r\n        };\r\n        this.parsePath(path);\r\n    }\r\n    GraphRequest.prototype.header = function (headerKey, headerValue) {\r\n        this._headers[headerKey] = headerValue;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.headers = function (headers) {\r\n        for (var key in headers) {\r\n            this._headers[key] = headers[key];\r\n        }\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.parsePath = function (rawPath) {\r\n        if (rawPath.indexOf(\"https://\") != -1) {\r\n            rawPath = rawPath.replace(\"https://\", \"\");\r\n            var endOfHostStrPos = rawPath.indexOf(\"/\");\r\n            this.urlComponents.host = \"https://\" + rawPath.substring(0, endOfHostStrPos);\r\n            rawPath = rawPath.substring(endOfHostStrPos + 1, rawPath.length);\r\n            var endOfVersionStrPos = rawPath.indexOf(\"/\");\r\n            this.urlComponents.version = rawPath.substring(0, endOfVersionStrPos);\r\n            rawPath = rawPath.substring(endOfVersionStrPos + 1, rawPath.length);\r\n        }\r\n        if (rawPath.charAt(0) == \"/\") {\r\n            rawPath = rawPath.substr(1);\r\n        }\r\n        var queryStrPos = rawPath.indexOf(\"?\");\r\n        if (queryStrPos == -1) {\r\n            this.urlComponents.path = rawPath;\r\n        }\r\n        else {\r\n            this.urlComponents.path = rawPath.substr(0, queryStrPos);\r\n            var queryParams = rawPath.substring(queryStrPos + 1, rawPath.length).split(\"&\");\r\n            for (var _i = 0, queryParams_1 = queryParams; _i < queryParams_1.length; _i++) {\r\n                var queryParam = queryParams_1[_i];\r\n                var queryParams_2 = queryParam.split(\"=\");\r\n                var key = queryParams_2[0];\r\n                var value = queryParams_2[1];\r\n                if (common_1.oDataQueryNames.indexOf(key)) {\r\n                    this.urlComponents.oDataQueryParams[key] = value;\r\n                }\r\n                else {\r\n                    this.urlComponents.otherURLQueryParams[key] = value;\r\n                }\r\n            }\r\n        }\r\n    };\r\n    GraphRequest.prototype.urlJoin = function (urlSegments) {\r\n        var tr = function (s) { return s.replace(/\\/+$/, ''); };\r\n        var tl = function (s) { return s.replace(/^\\/+/, ''); };\r\n        var joiner = function (pre, cur) { return [tr(pre), tl(cur)].join('/'); };\r\n        var parts = Array.prototype.slice.call(urlSegments);\r\n        return parts.reduce(joiner);\r\n    };\r\n    GraphRequest.prototype.buildFullUrl = function () {\r\n        var url = this.urlJoin([this.urlComponents.host,\r\n            this.urlComponents.version,\r\n            this.urlComponents.path])\r\n            + this.createQueryString();\r\n        if (this.config.debugLogging) {\r\n            console.log(url);\r\n        }\r\n        return url;\r\n    };\r\n    GraphRequest.prototype.version = function (v) {\r\n        this.urlComponents.version = v;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.select = function (properties) {\r\n        this.addCsvQueryParamater(\"$select\", properties, arguments);\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.expand = function (properties) {\r\n        this.addCsvQueryParamater(\"$expand\", properties, arguments);\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.orderby = function (properties) {\r\n        this.addCsvQueryParamater(\"$orderby\", properties, arguments);\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.filter = function (filterStr) {\r\n        this.urlComponents.oDataQueryParams[\"$filter\"] = filterStr;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.top = function (n) {\r\n        this.urlComponents.oDataQueryParams[\"$top\"] = n;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.skip = function (n) {\r\n        this.urlComponents.oDataQueryParams[\"$skip\"] = n;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.skipToken = function (token) {\r\n        this.urlComponents.oDataQueryParams[\"$skipToken\"] = token;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.count = function (count) {\r\n        this.urlComponents.oDataQueryParams[\"$count\"] = count.toString();\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.responseType = function (responseType) {\r\n        this._responseType = responseType;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.addCsvQueryParamater = function (propertyName, propertyValue, additionalProperties) {\r\n        this.urlComponents.oDataQueryParams[propertyName] = this.urlComponents.oDataQueryParams[propertyName] ? this.urlComponents.oDataQueryParams[propertyName] + \",\" : \"\";\r\n        var allValues = [];\r\n        if (typeof propertyValue === \"string\") {\r\n            allValues.push(propertyValue);\r\n        }\r\n        else {\r\n            allValues = allValues.concat(propertyValue);\r\n        }\r\n        if (additionalProperties.length > 1 && typeof propertyValue === \"string\") {\r\n            allValues = Array.prototype.slice.call(additionalProperties);\r\n        }\r\n        this.urlComponents.oDataQueryParams[propertyName] += allValues.join(\",\");\r\n    };\r\n    GraphRequest.prototype.delete = function (callback) {\r\n        var url = this.buildFullUrl();\r\n        return this.sendRequestAndRouteResponse(new Request(url, { method: RequestMethod_1.RequestMethod.DELETE, headers: new Headers() }), callback);\r\n    };\r\n    GraphRequest.prototype.patch = function (content, callback) {\r\n        var url = this.buildFullUrl();\r\n        return this.sendRequestAndRouteResponse(new Request(url, {\r\n            method: RequestMethod_1.RequestMethod.PATCH,\r\n            body: GraphHelper_1.GraphHelper.serializeContent(content),\r\n            headers: new Headers({ 'Content-Type': 'application/json' })\r\n        }), callback);\r\n    };\r\n    GraphRequest.prototype.post = function (content, callback) {\r\n        var url = this.buildFullUrl();\r\n        return this.sendRequestAndRouteResponse(new Request(url, {\r\n            method: RequestMethod_1.RequestMethod.POST,\r\n            body: GraphHelper_1.GraphHelper.serializeContent(content),\r\n            headers: new Headers((content.constructor !== undefined && content.constructor.name === \"FormData\") ? {} : { 'Content-Type': 'application/json' })\r\n        }), callback);\r\n    };\r\n    GraphRequest.prototype.put = function (content, callback) {\r\n        var url = this.buildFullUrl();\r\n        return this.sendRequestAndRouteResponse(new Request(url, {\r\n            method: RequestMethod_1.RequestMethod.PUT,\r\n            body: GraphHelper_1.GraphHelper.serializeContent(content),\r\n            headers: new Headers({ 'Content-Type': 'application/octet-stream' })\r\n        }), callback);\r\n    };\r\n    GraphRequest.prototype.create = function (content, callback) {\r\n        return this.post(content, callback);\r\n    };\r\n    GraphRequest.prototype.update = function (content, callback) {\r\n        return this.patch(content, callback);\r\n    };\r\n    GraphRequest.prototype.del = function (callback) {\r\n        return this.delete(callback);\r\n    };\r\n    GraphRequest.prototype.get = function (callback) {\r\n        var url = this.buildFullUrl();\r\n        return this.sendRequestAndRouteResponse(new Request(url, { method: RequestMethod_1.RequestMethod.GET, headers: new Headers() }), callback);\r\n    };\r\n    GraphRequest.prototype.routeResponseToPromise = function (request) {\r\n        var _this = this;\r\n        return new es6_promise_1.Promise(function (resolve, reject) {\r\n            _this.routeResponseToCallback(request, function (err, body) {\r\n                if (err != null) {\r\n                    reject(err);\r\n                }\r\n                else {\r\n                    resolve(body);\r\n                }\r\n            });\r\n        });\r\n    };\r\n    GraphRequest.prototype.handleFetch = function (request, callback, options) {\r\n        var _this = this;\r\n        ((request.constructor.name === \"Request\") ? fetch(request) : fetch(request, options)).then(function (response) {\r\n            _this.convertResponseType(response).then(function (responseValue) {\r\n                ResponseHandler_1.ResponseHandler.init(response, undefined, responseValue, callback);\r\n            }).catch(function (error) {\r\n                ResponseHandler_1.ResponseHandler.init(response, error, undefined, callback);\r\n            });\r\n        }).catch(function (error) {\r\n            ResponseHandler_1.ResponseHandler.init(undefined, error, undefined, callback);\r\n        });\r\n    };\r\n    GraphRequest.prototype.routeResponseToCallback = function (request, callback) {\r\n        var self = this;\r\n        self.config.authProvider(function (err, accessToken) {\r\n            if (err == null && accessToken != null) {\r\n                request = self.configureRequest(request, accessToken);\r\n                self.handleFetch(request, callback);\r\n            }\r\n            else {\r\n                callback(err, null, null);\r\n            }\r\n        });\r\n    };\r\n    GraphRequest.prototype.sendRequestAndRouteResponse = function (request, callback) {\r\n        if (callback == null && typeof es6_promise_1.Promise !== \"undefined\") {\r\n            return this.routeResponseToPromise(request);\r\n        }\r\n        else {\r\n            this.routeResponseToCallback(request, callback || function () { });\r\n        }\r\n    };\r\n    GraphRequest.prototype.getStream = function (callback) {\r\n        var self = this;\r\n        self.config.authProvider(function (err, accessToken) {\r\n            if (err === null && accessToken !== null) {\r\n                var url = self.buildFullUrl();\r\n                var options_1 = {\r\n                    method: RequestMethod_1.RequestMethod.GET,\r\n                    headers: self.getDefaultRequestHeaders(accessToken)\r\n                };\r\n                self.responseType(\"stream\");\r\n                Object.keys(self._headers).forEach(function (key) { return options_1.headers[key] = self._headers[key]; });\r\n                self.handleFetch(url, callback, options_1);\r\n            }\r\n            else {\r\n                callback(err, null);\r\n            }\r\n        });\r\n    };\r\n    GraphRequest.prototype.putStream = function (stream, callback) {\r\n        var self = this;\r\n        self.config.authProvider(function (err, accessToken) {\r\n            if (err === null && accessToken !== null) {\r\n                var url = self.buildFullUrl();\r\n                var options_2 = {\r\n                    method: RequestMethod_1.RequestMethod.PUT,\r\n                    headers: {\r\n                        'Content-Type': 'application/octet-stream',\r\n                    },\r\n                    body: stream\r\n                };\r\n                var defaultHeaders_1 = self.getDefaultRequestHeaders(accessToken);\r\n                Object.keys(defaultHeaders_1).forEach(function (key) { return options_2.headers[key] = defaultHeaders_1[key]; });\r\n                Object.keys(self._headers).forEach(function (key) { return options_2.headers[key] = self._headers[key]; });\r\n                self.handleFetch(url, callback, options_2);\r\n            }\r\n        });\r\n    };\r\n    GraphRequest.prototype.getDefaultRequestHeaders = function (accessToken) {\r\n        return {\r\n            Authorization: \"Bearer \" + accessToken,\r\n            SdkVersion: \"graph-js-\" + common_1.PACKAGE_VERSION\r\n        };\r\n    };\r\n    GraphRequest.prototype.configureRequest = function (request, accessToken) {\r\n        var self = this, defaultHeaders = self.getDefaultRequestHeaders(accessToken);\r\n        Object.keys(defaultHeaders).forEach(function (key) { return request.headers.set(key, defaultHeaders[key]); });\r\n        Object.keys(self._headers).forEach(function (key) { return request.headers.set(key, self._headers[key]); });\r\n        return request;\r\n    };\r\n    GraphRequest.prototype.query = function (queryDictionaryOrString) {\r\n        if (typeof queryDictionaryOrString === \"string\") {\r\n            var queryStr = queryDictionaryOrString;\r\n            var queryKey = queryStr.split(\"=\")[0];\r\n            var queryValue = queryStr.split(\"=\")[1];\r\n            this.urlComponents.otherURLQueryParams[queryKey] = queryValue;\r\n        }\r\n        else {\r\n            for (var key in queryDictionaryOrString) {\r\n                this.urlComponents.otherURLQueryParams[key] = queryDictionaryOrString[key];\r\n            }\r\n        }\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.createQueryString = function () {\r\n        var q = [];\r\n        if (Object.keys(this.urlComponents.oDataQueryParams).length != 0) {\r\n            for (var property in this.urlComponents.oDataQueryParams) {\r\n                q.push(property + \"=\" + this.urlComponents.oDataQueryParams[property]);\r\n            }\r\n        }\r\n        if (Object.keys(this.urlComponents.otherURLQueryParams).length != 0) {\r\n            for (var property in this.urlComponents.otherURLQueryParams) {\r\n                q.push(property + \"=\" + this.urlComponents.otherURLQueryParams[property]);\r\n            }\r\n        }\r\n        if (q.length > 0) {\r\n            return \"?\" + q.join(\"&\");\r\n        }\r\n        return \"\";\r\n    };\r\n    GraphRequest.prototype.convertResponseType = function (response) {\r\n        var responseValue;\r\n        if (!this._responseType) {\r\n            this._responseType = '';\r\n        }\r\n        switch (this._responseType.toLowerCase()) {\r\n            case \"arraybuffer\":\r\n                responseValue = response.arrayBuffer();\r\n                break;\r\n            case \"blob\":\r\n                responseValue = response.blob();\r\n                break;\r\n            case \"document\":\r\n                responseValue = response.json();\r\n                break;\r\n            case \"json\":\r\n                responseValue = response.json();\r\n                break;\r\n            case \"text\":\r\n                responseValue = response.text();\r\n                break;\r\n            case \"stream\":\r\n                responseValue = es6_promise_1.Promise.resolve(response.body);\r\n                break;\r\n            default:\r\n                responseValue = response.json();\r\n                break;\r\n        }\r\n        return responseValue;\r\n    };\r\n    return GraphRequest;\r\n}());\r\nexports.GraphRequest = GraphRequest;\r\n//# sourceMappingURL=GraphRequest.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ResponseHandler = (function () {\r\n    function ResponseHandler() {\r\n    }\r\n    ResponseHandler.init = function (res, err, resContents, callback) {\r\n        if (res && res.ok) {\r\n            callback(null, resContents, res);\r\n        }\r\n        else {\r\n            if (err == null && res != null)\r\n                if (resContents != null && resContents.error != null)\r\n                    callback(ResponseHandler.buildGraphErrorFromResponseObject(resContents.error, res.status), null, res);\r\n                else\r\n                    callback(ResponseHandler.defaultGraphError(res.status), null, res);\r\n            else\r\n                callback(ResponseHandler.ParseError(err), null, res);\r\n        }\r\n    };\r\n    ResponseHandler.ParseError = function (rawErr) {\r\n        if (!rawErr) {\r\n            return ResponseHandler.defaultGraphError(-1);\r\n        }\r\n        return ResponseHandler.buildGraphErrorFromErrorObject(rawErr);\r\n    };\r\n    ResponseHandler.defaultGraphError = function (statusCode) {\r\n        return {\r\n            statusCode: statusCode,\r\n            code: null,\r\n            message: null,\r\n            requestId: null,\r\n            date: new Date(),\r\n            body: null\r\n        };\r\n    };\r\n    ResponseHandler.buildGraphErrorFromErrorObject = function (errObj) {\r\n        var error = ResponseHandler.defaultGraphError(-1);\r\n        error.body = errObj.toString();\r\n        error.message = errObj.message;\r\n        error.date = new Date();\r\n        return error;\r\n    };\r\n    ResponseHandler.buildGraphErrorFromResponseObject = function (errObj, statusCode) {\r\n        return {\r\n            statusCode: statusCode,\r\n            code: errObj.code,\r\n            message: errObj.message,\r\n            requestId: errObj.innerError[\"request-id\"],\r\n            date: new Date(errObj.innerError.date),\r\n            body: errObj\r\n        };\r\n    };\r\n    return ResponseHandler;\r\n}());\r\nexports.ResponseHandler = ResponseHandler;\r\n//# sourceMappingURL=ResponseHandler.js.map","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.size = exports.default = exports.IconWrapper = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _uuid = _interopRequireDefault(require(\"uuid\"));\n\nvar _theme = require(\"@atlaskit/theme\");\n\nvar _constants = require(\"../constants\");\n\nvar getSize = function getSize(props) {\n  if (props.size) {\n    return \"height: \".concat(_constants.sizes[props.size], \"; width: \").concat(_constants.sizes[props.size], \";\");\n  }\n\n  return null;\n};\n\nvar IconWrapper = _styledComponents.default.span.withConfig({\n  displayName: \"Icon__IconWrapper\",\n  componentId: \"dyhwwi-0\"\n})([\"\\n  \", \" color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \" max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n  /* Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"], getSize, function (p) {\n  return p.primaryColor || 'currentColor';\n}, function (p) {\n  return p.secondaryColor || _theme.colors.background;\n}, getSize);\n\nexports.IconWrapper = IconWrapper;\n\nvar Icon =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inherits2.default)(Icon, _Component);\n\n  function Icon() {\n    (0, _classCallCheck2.default)(this, Icon);\n    return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Icon).apply(this, arguments));\n  }\n\n  (0, _createClass2.default)(Icon, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          Glyph = _this$props.glyph,\n          dangerouslySetGlyph = _this$props.dangerouslySetGlyph,\n          onClick = _this$props.onClick,\n          primaryColor = _this$props.primaryColor,\n          secondaryColor = _this$props.secondaryColor,\n          size = _this$props.size; // handling the glyphs as strings\n\n      if (dangerouslySetGlyph) {\n        return _react.default.createElement(IconWrapper, {\n          onClick: onClick,\n          primaryColor: primaryColor,\n          secondaryColor: secondaryColor,\n          size: size,\n          \"aria-label\": this.props.label,\n          dangerouslySetInnerHTML: {\n            __html: Icon.insertDynamicGradientID(dangerouslySetGlyph)\n          }\n        });\n      } // handling the glyphs when passed through as functions\n\n\n      return _react.default.createElement(IconWrapper, {\n        onClick: onClick,\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        size: size,\n        \"aria-label\": this.props.label\n      }, Glyph ? _react.default.createElement(Glyph, {\n        role: \"presentation\"\n      }) : null);\n    }\n  }], [{\n    key: \"insertDynamicGradientID\",\n\n    /* Icons need unique gradient IDs across instances for different gradient definitions to work\n     * correctly.\n     * A step in the icon build process replaces linear gradient IDs and their references in paths\n     * to a placeholder string so we can replace them with a dynamic ID here.\n     * Replacing the original IDs with placeholders in the build process is more robust than not\n     * using placeholders as we do not have to rely on regular expressions to find specific element\n     * to replace.\n     */\n    value: function insertDynamicGradientID(svgStr) {\n      var id = (0, _uuid.default)();\n      var replacedSvgStr = svgStr.replace(/id=\"([^\"]+)-idPlaceholder\"/g, \"id=$1-\".concat(id)).replace(/fill=\"url\\(#([^\"]+)-idPlaceholder\\)\"/g, \"fill=\\\"url(#$1-\".concat(id, \")\\\"\"));\n      return replacedSvgStr;\n    }\n  }]);\n  return Icon;\n}(_react.Component);\n\nexports.default = Icon;\n(0, _defineProperty2.default)(Icon, \"defaultProps\", {\n  onClick: function onClick() {}\n});\nvar size = Object.keys(_constants.sizes).reduce(function (p, c) {\n  return Object.assign(p, (0, _defineProperty2.default)({}, c, c));\n}, {});\nexports.size = size;","// @flow\n\nimport * as JitsiMeetConferenceEvents from '../../ConferenceEvents';\nimport {\n    createApiEvent,\n    sendAnalytics\n} from '../../react/features/analytics';\nimport {\n    sendTones,\n    setPassword,\n    setSubject\n} from '../../react/features/base/conference';\nimport { parseJWTFromURLParams } from '../../react/features/base/jwt';\nimport { setE2EEKey } from '../../react/features/e2ee';\nimport { invite } from '../../react/features/invite';\nimport { toggleTileView } from '../../react/features/video-layout';\nimport { setVideoQuality } from '../../react/features/video-quality';\nimport { getJitsiMeetTransport } from '../transport';\n\nimport { API_ID, ENDPOINT_TEXT_MESSAGE_NAME } from './constants';\nimport {\n    processExternalDeviceRequest\n} from '../../react/features/device-selection/functions';\n\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\ndeclare var APP: Object;\n\n/**\n * List of the available commands.\n */\nlet commands = {};\n\n/**\n * The state of screen sharing(started/stopped) before the screen sharing is\n * enabled and initialized.\n * NOTE: This flag help us to cache the state and use it if toggle-share-screen\n * was received before the initialization.\n */\nlet initialScreenSharingState = false;\n\n/**\n * The transport instance used for communication with external apps.\n *\n * @type {Transport}\n */\nconst transport = getJitsiMeetTransport();\n\n/**\n * The current audio availability.\n *\n * @type {boolean}\n */\nlet audioAvailable = true;\n\n/**\n * The current video availability.\n *\n * @type {boolean}\n */\nlet videoAvailable = true;\n\n/**\n * Initializes supported commands.\n *\n * @returns {void}\n */\nfunction initCommands() {\n    commands = {\n        'display-name': displayName => {\n            sendAnalytics(createApiEvent('display.name.changed'));\n            APP.conference.changeLocalDisplayName(displayName);\n        },\n        'password': password => {\n            const { conference, passwordRequired }\n                = APP.store.getState()['features/base/conference'];\n\n            if (passwordRequired) {\n                sendAnalytics(createApiEvent('submit.password'));\n\n                APP.store.dispatch(setPassword(\n                    passwordRequired,\n                    passwordRequired.join,\n                    password\n                ));\n            } else {\n                sendAnalytics(createApiEvent('password.changed'));\n\n                APP.store.dispatch(setPassword(\n                    conference,\n                    conference.lock,\n                    password\n                ));\n            }\n        },\n        'proxy-connection-event': event => {\n            APP.conference.onProxyConnectionEvent(event);\n        },\n        'send-tones': (options = {}) => {\n            const { duration, tones, pause } = options;\n\n            APP.store.dispatch(sendTones(tones, duration, pause));\n        },\n        'subject': subject => {\n            sendAnalytics(createApiEvent('subject.changed'));\n            APP.store.dispatch(setSubject(subject));\n        },\n        'submit-feedback': feedback => {\n            sendAnalytics(createApiEvent('submit.feedback'));\n            APP.conference.submitFeedback(feedback.score, feedback.message);\n        },\n        'toggle-audio': () => {\n            sendAnalytics(createApiEvent('toggle-audio'));\n            logger.log('Audio toggle: API command received');\n            APP.conference.toggleAudioMuted(false /* no UI */);\n        },\n        'toggle-video': () => {\n            sendAnalytics(createApiEvent('toggle-video'));\n            logger.log('Video toggle: API command received');\n            APP.conference.toggleVideoMuted(false /* no UI */);\n        },\n        'toggle-film-strip': () => {\n            sendAnalytics(createApiEvent('film.strip.toggled'));\n            APP.UI.toggleFilmstrip();\n        },\n        'toggle-chat': () => {\n            sendAnalytics(createApiEvent('chat.toggled'));\n            APP.UI.toggleChat();\n        },\n\n        /**\n         * Callback to invoke when the \"toggle-share-screen\" command is received.\n         *\n         * @param {Object} options - Additional details of how to perform\n         * the action. Note this parameter is undocumented and experimental.\n         * @param {boolean} options.enable - Whether trying to enable screen\n         * sharing or to turn it off.\n         * @returns {void}\n         */\n        'toggle-share-screen': (options = {}) => {\n            sendAnalytics(createApiEvent('screen.sharing.toggled'));\n            toggleScreenSharing(options.enable);\n        },\n        'toggle-tile-view': () => {\n            sendAnalytics(createApiEvent('tile-view.toggled'));\n\n            APP.store.dispatch(toggleTileView());\n        },\n        'video-hangup': (showFeedbackDialog = true) => {\n            sendAnalytics(createApiEvent('video.hangup'));\n            APP.conference.hangup(showFeedbackDialog);\n        },\n        'email': email => {\n            sendAnalytics(createApiEvent('email.changed'));\n            APP.conference.changeLocalEmail(email);\n        },\n        'avatar-url': avatarUrl => {\n            sendAnalytics(createApiEvent('avatar.url.changed'));\n            APP.conference.changeLocalAvatarUrl(avatarUrl);\n        },\n        'send-endpoint-text-message': (to, text) => {\n            logger.debug('Send endpoint message command received');\n            try {\n                APP.conference.sendEndpointMessage(to, {\n                    name: ENDPOINT_TEXT_MESSAGE_NAME,\n                    text\n                });\n            } catch (err) {\n                logger.error('Failed sending endpoint text message', err);\n            }\n        },\n        'e2ee-key': key => {\n            logger.debug('Set E2EE key command received');\n            APP.store.dispatch(setE2EEKey(key));\n        },\n        'set-video-quality': frameHeight => {\n            logger.debug('Set video quality command received');\n            sendAnalytics(createApiEvent('set.video.quality'));\n            APP.store.dispatch(setVideoQuality(frameHeight));\n        }\n    };\n    transport.on('event', ({ data, name }) => {\n        if (name && commands[name]) {\n            commands[name](...data);\n\n            return true;\n        }\n\n        return false;\n    });\n    transport.on('request', (request, callback) => {\n        const { dispatch, getState } = APP.store;\n\n        if (processExternalDeviceRequest(dispatch, getState, request, callback)) {\n            return true;\n        }\n\n        const { name } = request;\n\n        switch (name) {\n        case 'invite': {\n            const { invitees } = request;\n\n            if (!Array.isArray(invitees) || invitees.length === 0) {\n                callback({\n                    error: new Error('Unexpected format of invitees')\n                });\n\n                break;\n            }\n\n            // The store should be already available because API.init is called\n            // on appWillMount action.\n            APP.store.dispatch(\n                invite(invitees, true))\n                .then(failedInvitees => {\n                    let error;\n                    let result;\n\n                    if (failedInvitees.length) {\n                        error = new Error('One or more invites failed!');\n                    } else {\n                        result = true;\n                    }\n\n                    callback({\n                        error,\n                        result\n                    });\n                });\n            break;\n        }\n        case 'is-audio-muted':\n            callback(APP.conference.isLocalAudioMuted());\n            break;\n        case 'is-video-muted':\n            callback(APP.conference.isLocalVideoMuted());\n            break;\n        case 'is-audio-available':\n            callback(audioAvailable);\n            break;\n        case 'is-video-available':\n            callback(videoAvailable);\n            break;\n        default:\n            return false;\n        }\n\n        return true;\n    });\n}\n\n/**\n * Listens for desktop/screen sharing enabled events and toggles the screen\n * sharing if needed.\n *\n * @param {boolean} enabled - Current screen sharing enabled status.\n * @returns {void}\n */\nfunction onDesktopSharingEnabledChanged(enabled = false) {\n    if (enabled && initialScreenSharingState) {\n        toggleScreenSharing();\n    }\n}\n\n/**\n * Check whether the API should be enabled or not.\n *\n * @returns {boolean}\n */\nfunction shouldBeEnabled() {\n    return (\n        typeof API_ID === 'number'\n\n            // XXX Enable the API when a JSON Web Token (JWT) is specified in\n            // the location/URL because then it is very likely that the Jitsi\n            // Meet (Web) app is being used by an external/wrapping (Web) app\n            // and, consequently, the latter will need to communicate with the\n            // former. (The described logic is merely a heuristic though.)\n            || parseJWTFromURLParams());\n}\n\n/**\n * Executes on toggle-share-screen command.\n *\n * @param {boolean} [enable] - Whether this toggle is to explicitly enable or\n * disable screensharing. If not defined, the application will automatically\n * attempt to toggle between enabled and disabled. This boolean is useful for\n * explicitly setting desired screensharing state.\n * @returns {void}\n */\nfunction toggleScreenSharing(enable) {\n    if (APP.conference.isDesktopSharingEnabled) {\n\n        // eslint-disable-next-line no-empty-function\n        APP.conference.toggleScreenSharing(enable).catch(() => {});\n    } else {\n        initialScreenSharingState = !initialScreenSharingState;\n    }\n}\n\n/**\n * Implements API class that communicates with external API class and provides\n * interface to access Jitsi Meet features by external applications that embed\n * Jitsi Meet.\n */\nclass API {\n    _enabled: boolean;\n\n    /**\n     * Initializes the API. Setups message event listeners that will receive\n     * information from external applications that embed Jitsi Meet. It also\n     * sends a message to the external application that API is initialized.\n     *\n     * @param {Object} options - Optional parameters.\n     * @returns {void}\n     */\n    init() {\n        if (!shouldBeEnabled()) {\n            return;\n        }\n\n        /**\n         * Current status (enabled/disabled) of API.\n         *\n         * @private\n         * @type {boolean}\n         */\n        this._enabled = true;\n\n        APP.conference.addListener(\n            JitsiMeetConferenceEvents.DESKTOP_SHARING_ENABLED_CHANGED,\n            onDesktopSharingEnabledChanged);\n\n        initCommands();\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the large video\n     * visibility changed.\n     *\n     * @param {boolean} isHidden - True if the large video is hidden and false\n     * otherwise.\n     * @returns {void}\n     */\n    notifyLargeVideoVisibilityChanged(isHidden: boolean) {\n        this._sendEvent({\n            name: 'large-video-visibility-changed',\n            isVisible: !isHidden\n        });\n    }\n\n    /**\n     * Notifies the external application (spot) that the local jitsi-participant\n     * has a status update.\n     *\n     * @param {Object} event - The message to pass onto spot.\n     * @returns {void}\n     */\n    sendProxyConnectionEvent(event: Object) {\n        this._sendEvent({\n            name: 'proxy-connection-event',\n            ...event\n        });\n    }\n\n    /**\n     * Sends event to the external application.\n     *\n     * @param {Object} event - The event to be sent.\n     * @returns {void}\n     */\n    _sendEvent(event: Object = {}) {\n        if (this._enabled) {\n            transport.sendEvent(event);\n        }\n    }\n\n    /**\n     * Notify external application (if API is enabled) that message was sent.\n     *\n     * @param {string} message - Message body.\n     * @param {boolean} privateMessage - True if the message was a private message.\n     * @returns {void}\n     */\n    notifySendingChatMessage(message: string, privateMessage: boolean) {\n        this._sendEvent({\n            name: 'outgoing-message',\n            message,\n            privateMessage\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that message was\n     * received.\n     *\n     * @param {Object} options - Object with the message properties.\n     * @returns {void}\n     */\n    notifyReceivedChatMessage(\n            { body, id, nick, ts }: {\n                body: *, id: string, nick: string, ts: *\n            } = {}) {\n        if (APP.conference.isLocalId(id)) {\n            return;\n        }\n\n        this._sendEvent({\n            name: 'incoming-message',\n            from: id,\n            message: body,\n            nick,\n            stamp: ts\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user joined the\n     * conference.\n     *\n     * @param {string} id - User id.\n     * @param {Object} props - The display name of the user.\n     * @returns {void}\n     */\n    notifyUserJoined(id: string, props: Object) {\n        this._sendEvent({\n            name: 'participant-joined',\n            id,\n            ...props\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user left the\n     * conference.\n     *\n     * @param {string} id - User id.\n     * @returns {void}\n     */\n    notifyUserLeft(id: string) {\n        this._sendEvent({\n            name: 'participant-left',\n            id\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the user role\n     * has changed.\n     *\n     * @param {string} id - User id.\n     * @param {string} role - The new user role.\n     * @returns {void}\n     */\n    notifyUserRoleChanged(id: string, role: string) {\n        this._sendEvent({\n            name: 'participant-role-changed',\n            id,\n            role\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user changed their\n     * avatar.\n     *\n     * @param {string} id - User id.\n     * @param {string} avatarURL - The new avatar URL of the participant.\n     * @returns {void}\n     */\n    notifyAvatarChanged(id: string, avatarURL: string) {\n        this._sendEvent({\n            name: 'avatar-changed',\n            avatarURL,\n            id\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user received\n     * a text message through datachannels.\n     *\n     * @param {Object} data - The event data.\n     * @returns {void}\n     */\n    notifyEndpointTextMessageReceived(data: Object) {\n        this._sendEvent({\n            name: 'endpoint-text-message-received',\n            data\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the device list has\n     * changed.\n     *\n     * @param {Object} devices - The new device list.\n     * @returns {void}\n     */\n    notifyDeviceListChanged(devices: Object) {\n        this._sendEvent({\n            name: 'device-list-changed',\n            devices });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user changed their\n     * nickname.\n     *\n     * @param {string} id - User id.\n     * @param {string} displayname - User nickname.\n     * @param {string} formattedDisplayName - The display name shown in Jitsi\n     * meet's UI for the user.\n     * @returns {void}\n     */\n    notifyDisplayNameChanged(\n            id: string,\n            { displayName, formattedDisplayName }: Object) {\n        this._sendEvent({\n            name: 'display-name-change',\n            displayname: displayName,\n            formattedDisplayName,\n            id\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user changed their\n     * email.\n     *\n     * @param {string} id - User id.\n     * @param {string} email - The new email of the participant.\n     * @returns {void}\n     */\n    notifyEmailChanged(\n            id: string,\n            { email }: Object) {\n        this._sendEvent({\n            name: 'email-change',\n            email,\n            id\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the conference has\n     * been joined.\n     *\n     * @param {string} roomName - The room name.\n     * @param {string} id - The id of the local user.\n     * @param {Object} props - The display name and avatar URL of the local\n     * user.\n     * @returns {void}\n     */\n    notifyConferenceJoined(roomName: string, id: string, props: Object) {\n        this._sendEvent({\n            name: 'video-conference-joined',\n            roomName,\n            id,\n            ...props\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user changed their\n     * nickname.\n     *\n     * @param {string} roomName - User id.\n     * @returns {void}\n     */\n    notifyConferenceLeft(roomName: string) {\n        this._sendEvent({\n            name: 'video-conference-left',\n            roomName\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that we are ready to be\n     * closed.\n     *\n     * @returns {void}\n     */\n    notifyReadyToClose() {\n        this._sendEvent({ name: 'video-ready-to-close' });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that a suspend event in host computer.\n     *\n     * @returns {void}\n     */\n    notifySuspendDetected() {\n        this._sendEvent({ name: 'suspend-detected' });\n    }\n\n    /**\n     * Notify external application (if API is enabled) for audio muted status\n     * changed.\n     *\n     * @param {boolean} muted - The new muted status.\n     * @returns {void}\n     */\n    notifyAudioMutedStatusChanged(muted: boolean) {\n        this._sendEvent({\n            name: 'audio-mute-status-changed',\n            muted\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) for video muted status\n     * changed.\n     *\n     * @param {boolean} muted - The new muted status.\n     * @returns {void}\n     */\n    notifyVideoMutedStatusChanged(muted: boolean) {\n        this._sendEvent({\n            name: 'video-mute-status-changed',\n            muted\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) for audio availability\n     * changed.\n     *\n     * @param {boolean} available - True if available and false otherwise.\n     * @returns {void}\n     */\n    notifyAudioAvailabilityChanged(available: boolean) {\n        audioAvailable = available;\n        this._sendEvent({\n            name: 'audio-availability-changed',\n            available\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) for video available\n     * status changed.\n     *\n     * @param {boolean} available - True if available and false otherwise.\n     * @returns {void}\n     */\n    notifyVideoAvailabilityChanged(available: boolean) {\n        videoAvailable = available;\n        this._sendEvent({\n            name: 'video-availability-changed',\n            available\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the on stage\n     * participant has changed.\n     *\n     * @param {string} id - User id of the new on stage participant.\n     * @returns {void}\n     */\n    notifyOnStageParticipantChanged(id: string) {\n        this._sendEvent({\n            name: 'on-stage-participant-changed',\n            id\n        });\n    }\n\n    /**\n     * Notify external application of an unexpected camera-related error having\n     * occurred.\n     *\n     * @param {string} type - The type of the camera error.\n     * @param {string} message - Additional information about the error.\n     * @returns {void}\n     */\n    notifyOnCameraError(type: string, message: string) {\n        this._sendEvent({\n            name: 'camera-error',\n            type,\n            message\n        });\n    }\n\n    /**\n     * Notify external application of an unexpected mic-related error having\n     * occurred.\n     *\n     * @param {string} type - The type of the mic error.\n     * @param {string} message - Additional information about the error.\n     * @returns {void}\n     */\n    notifyOnMicError(type: string, message: string) {\n        this._sendEvent({\n            name: 'mic-error',\n            type,\n            message\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that conference feedback\n     * has been submitted. Intended to be used in conjunction with the\n     * submit-feedback command to get notified if feedback was submitted.\n     *\n     * @param {string} error - A failure message, if any.\n     * @returns {void}\n     */\n    notifyFeedbackSubmitted(error: string) {\n        this._sendEvent({\n            name: 'feedback-submitted',\n            error\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the feedback prompt\n     * has been displayed.\n     *\n     * @returns {void}\n     */\n    notifyFeedbackPromptDisplayed() {\n        this._sendEvent({ name: 'feedback-prompt-displayed' });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the display\n     * configuration of the filmstrip has been changed.\n     *\n     * @param {boolean} visible - Whether or not the filmstrip has been set to\n     * be displayed or hidden.\n     * @returns {void}\n     */\n    notifyFilmstripDisplayChanged(visible: boolean) {\n        this._sendEvent({\n            name: 'filmstrip-display-changed',\n            visible\n        });\n    }\n\n    /**\n     * Notify external application of a participant, remote or local, being\n     * removed from the conference by another participant.\n     *\n     * @param {string} kicked - The ID of the participant removed from the\n     * conference.\n     * @param {string} kicker - The ID of the participant that removed the\n     * other participant.\n     * @returns {void}\n     */\n    notifyKickedOut(kicked: Object, kicker: Object) {\n        this._sendEvent({\n            name: 'participant-kicked-out',\n            kicked,\n            kicker\n        });\n    }\n\n    /**\n     * Notify external application of the current meeting requiring a password\n     * to join.\n     *\n     * @returns {void}\n     */\n    notifyOnPasswordRequired() {\n        this._sendEvent({ name: 'password-required' });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the screen sharing\n     * has been turned on/off.\n     *\n     * @param {boolean} on - True if screen sharing is enabled.\n     * @param {Object} details - Additional information about the screen\n     * sharing.\n     * @param {string} details.sourceType - Type of device or window the screen\n     * share is capturing.\n     * @returns {void}\n     */\n    notifyScreenSharingStatusChanged(on: boolean, details: Object) {\n        this._sendEvent({\n            name: 'screen-sharing-status-changed',\n            on,\n            details\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the dominant speaker\n     * has been turned on/off.\n     *\n     * @param {string} id - Id of the dominant participant.\n     * @returns {void}\n     */\n    notifyDominantSpeakerChanged(id: string) {\n        this._sendEvent({\n            name: 'dominant-speaker-changed',\n            id\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the conference\n     * changed their subject.\n     *\n     * @param {string} subject - Conference subject.\n     * @returns {void}\n     */\n    notifySubjectChanged(subject: string) {\n        this._sendEvent({\n            name: 'subject-change',\n            subject\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that tile view has been\n     * entered or exited.\n     *\n     * @param {string} enabled - True if tile view is currently displayed, false\n     * otherwise.\n     * @returns {void}\n     */\n    notifyTileViewChanged(enabled: boolean) {\n        this._sendEvent({\n            name: 'tile-view-changed',\n            enabled\n        });\n    }\n\n    /**\n     * Disposes the allocated resources.\n     *\n     * @returns {void}\n     */\n    dispose() {\n        if (this._enabled) {\n            this._enabled = false;\n            APP.conference.removeListener(\n                JitsiMeetConferenceEvents.DESKTOP_SHARING_ENABLED_CHANGED,\n                onDesktopSharingEnabledChanged);\n        }\n    }\n}\n\nexport default new API();\n","/* @flow */\n\nimport React, { Component } from 'react';\nimport Tooltip from '@atlaskit/tooltip';\n\nimport { translate } from '../../../i18n';\nimport { Icon } from '../../../icons';\n\n/**\n * The type of the React {@code Component} props of {@link BaseIndicator}.\n */\ntype Props = {\n\n    /**\n     * Additional CSS class names to set on the icon container.\n     */\n    className: string,\n\n    /**\n     * The icon component to use.\n     */\n    icon: Object,\n\n    /**\n     * The CSS classnames to set on the icon element of the component.\n    */\n    iconClassName: string,\n\n    /**\n     * Id of the icon to be rendered.\n     */\n    iconId?: string,\n\n    /**\n     * The font size for the icon.\n     */\n    iconSize: string,\n\n    /**\n     * The ID attribue to set on the root element of the component.\n     */\n    id: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * The translation key to use for displaying a tooltip when hovering over\n     * the component.\n     */\n    tooltipKey: string,\n\n    /**\n     * From which side of the indicator the tooltip should appear from,\n     * defaulting to \"top\".\n     */\n    tooltipPosition: string\n};\n\n/**\n * React {@code Component} for showing an icon with a tooltip.\n *\n * @extends Component\n */\nclass BaseIndicator extends Component<Props> {\n    /**\n     * Default values for {@code BaseIndicator} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        className: '',\n        id: '',\n        tooltipPosition: 'top'\n    };\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            className,\n            icon,\n            iconClassName,\n            iconId,\n            iconSize,\n            id,\n            t,\n            tooltipKey,\n            tooltipPosition\n        } = this.props;\n        const iconContainerClassName = `indicator-icon-container ${className}`;\n        const style = {};\n\n        if (iconSize) {\n            style.fontSize = iconSize;\n        }\n\n        return (\n            <div className = 'indicator-container'>\n                <Tooltip\n                    content = { t(tooltipKey) }\n                    position = { tooltipPosition }>\n                    <span\n                        className = { iconContainerClassName }\n                        id = { id }>\n                        <Icon\n                            className = { iconClassName }\n                            id = { iconId }\n                            src = { icon }\n                            style = { style } />\n                    </span>\n                </Tooltip>\n            </div>\n        );\n    }\n}\n\nexport default translate(BaseIndicator);\n","/* @flow */\n\nimport Button from '@atlaskit/button';\nimport React, { Component } from 'react';\n\ntype Props = {\n\n    /**\n     * React Elements to display within the component.\n     */\n    children: React$Node | Object,\n\n    /**\n     * Handler called when the user presses the button.\n     */\n    onValueChange: Function\n};\n\n/**\n * Renders a button.\n */\nexport default class ButtonImpl extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { onValueChange } = this.props;\n\n        return (\n            <Button\n                appearance = 'primary'\n                onClick = { onValueChange }\n                type = 'button'>\n                { this.props.children }\n            </Button>\n        );\n    }\n}\n","import React, { Component } from 'react';\n\n/**\n * Implements a React/Web {@link Component} for displaying image\n * in order to facilitate cross-platform source code.\n *\n * @extends Component\n */\nexport default class Image extends Component {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return React.createElement('img', this.props);\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\nimport ReactLinkify from 'react-linkify';\n\ntype Props = {\n\n    /**\n     * The children of the component.\n     */\n    children: React$Node\n};\n\n/**\n * Implements a react wrapper for the react-linkify component.\n */\nexport default class Linkify extends Component<Props> {\n    /**\n     * Implements {@Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (\n            <ReactLinkify\n                componentDecorator = { this._componentDecorator }>\n                { this.props.children }\n            </ReactLinkify>\n        );\n    }\n\n    /**\n     * Implements a component decorator for react-linkify.\n     *\n     * @param {string} decoratedHref - The href src.\n     * @param {string} decoratedText - The link text.\n     * @param {string} key - The component key.\n     * @returns {React$Node}\n     */\n    _componentDecorator(decoratedHref: string, decoratedText: string, key: number) {\n        return (\n            <a\n                href = { decoratedHref }\n                key = { key }\n                rel = 'noopener noreferrer'\n                target = '_blank'>\n                {decoratedText}\n            </a>\n        );\n    }\n}\n","import React, { Component } from 'react';\n\n/**\n * Implements a React/Web {@link Component} for displaying text similar to React\n * Native's {@code Text} in order to faciliate cross-platform source code.\n *\n * @extends Component\n */\nexport default class Text extends Component {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return React.createElement('span', this.props);\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport {\n    getLocalizedDateFormatter,\n    getLocalizedDurationFormatter\n} from '../../../i18n';\n\nimport Container from './Container';\nimport Text from './Text';\n\ntype Props = {\n\n    /**\n     * Indicates if the list is disabled or not.\n     */\n    disabled: boolean,\n\n    /**\n     * Indicates if the URL should be hidden or not.\n     */\n    hideURL: boolean,\n\n    /**\n     * Function to be invoked when an item is pressed. The item's URL is passed.\n     */\n    onPress: Function,\n\n    /**\n     * Rendered when the list is empty. Should be a rendered element.\n     */\n    listEmptyComponent: Object,\n\n    /**\n     * An array of meetings.\n     */\n    meetings: Array<Object>,\n\n    /**\n     * Defines what happens when  an item in the section list is clicked\n     */\n    onItemClick: Function\n};\n\n/**\n * Generates a date string for a given date.\n *\n * @param {Object} date - The date.\n * @private\n * @returns {string}\n */\nfunction _toDateString(date) {\n    return getLocalizedDateFormatter(date).format('MMM Do, YYYY');\n}\n\n\n/**\n * Generates a time (interval) string for a given times.\n *\n * @param {Array<Date>} times - Array of times.\n * @private\n * @returns {string}\n */\nfunction _toTimeString(times) {\n    if (times && times.length > 0) {\n        return (\n            times\n                .map(time => getLocalizedDateFormatter(time).format('LT'))\n                .join(' - '));\n    }\n\n    return undefined;\n}\n\n/**\n * Implements a React/Web {@link Component} for displaying a list with\n * meetings.\n *\n * @extends Component\n */\nexport default class MeetingsList extends Component<Props> {\n    /**\n     * Constructor of the MeetingsList component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onPress = this._onPress.bind(this);\n        this._renderItem = this._renderItem.bind(this);\n    }\n\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {React.ReactNode}\n     */\n    render() {\n        const { listEmptyComponent, meetings } = this.props;\n\n        /**\n         * If there are no recent meetings we don't want to display anything\n         */\n        if (meetings) {\n            return (\n                <Container\n                    className = 'meetings-list'>\n                    {\n                        meetings.length === 0\n                            ? listEmptyComponent\n                            : meetings.map(this._renderItem)\n                    }\n                </Container>\n            );\n        }\n\n        return null;\n    }\n\n    _onPress: string => Function;\n\n    /**\n     * Returns a function that is used in the onPress callback of the items.\n     *\n     * @param {string} url - The URL of the item to navigate to.\n     * @private\n     * @returns {Function}\n     */\n    _onPress(url) {\n        const { disabled, onPress } = this.props;\n\n        if (!disabled && url && typeof onPress === 'function') {\n            return () => onPress(url);\n        }\n\n        return null;\n    }\n\n    _renderItem: (Object, number) => React$Node;\n\n    /**\n     * Renders an item for the list.\n     *\n     * @param {Object} meeting - Information about the meeting.\n     * @param {number} index - The index of the item.\n     * @returns {Node}\n     */\n    _renderItem(meeting, index) {\n        const {\n            date,\n            duration,\n            elementAfter,\n            time,\n            title,\n            url\n        } = meeting;\n        const { hideURL = false } = this.props;\n        const onPress = this._onPress(url);\n        const rootClassName\n            = `item ${\n                onPress ? 'with-click-handler' : 'without-click-handler'}`;\n\n        return (\n            <Container\n                className = { rootClassName }\n                key = { index }\n                onClick = { onPress }>\n                <Container className = 'left-column'>\n                    <Text className = 'date'>\n                        { _toDateString(date) }\n                    </Text>\n                    <Text>\n                        { _toTimeString(time) }\n                    </Text>\n                </Container>\n                <Container className = 'right-column'>\n                    <Text className = 'title'>\n                        { title }\n                    </Text>\n                    {\n                        hideURL || !url ? null : (\n                            <Text>\n                                { url }\n                            </Text>)\n                    }\n                    {\n                        typeof duration === 'number' ? (\n                            <Text>\n                                { getLocalizedDurationFormatter(duration) }\n                            </Text>) : null\n                    }\n                </Container>\n                <Container className = 'actions'>\n                    { elementAfter || null }\n                </Container>\n            </Container>\n        );\n    }\n}\n","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return _toConsumableArray(ancestorData).concat([data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_assertThisInitialized(_this)), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}","import React from 'react';\nimport styled from 'styled-components';\nimport ScrollLock from 'react-scrolllock';\nvar Blanket = styled.div.withConfig({\n  displayName: \"ScrollBlock__Blanket\",\n  componentId: \"sc-1xiww8k-0\"\n})([\"\\n  position: fixed;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  background: transparent;\\n\"]);\nexport default function ScrollBlock() {\n  return React.createElement(Blanket, null, React.createElement(ScrollLock, null));\n}","var positionMap = {\n  'top left': {\n    position: 'top-start',\n    animation: 'top'\n  },\n  'top center': {\n    position: 'top',\n    animation: 'top'\n  },\n  'top right': {\n    position: 'top-end',\n    animation: 'top'\n  },\n  'right top': {\n    position: 'right-start',\n    animation: 'right'\n  },\n  'right middle': {\n    position: 'right',\n    animation: 'right'\n  },\n  'right bottom': {\n    position: 'right-end',\n    animation: 'right'\n  },\n  'bottom left': {\n    position: 'bottom-start',\n    animation: 'bottom'\n  },\n  'bottom center': {\n    position: 'bottom',\n    animation: 'bottom'\n  },\n  'bottom right': {\n    position: 'bottom-end',\n    animation: 'bottom'\n  },\n  'left top': {\n    position: 'left-start',\n    animation: 'left'\n  },\n  'left middle': {\n    position: 'left',\n    animation: 'left'\n  },\n  'left bottom': {\n    position: 'left-end',\n    animation: 'left'\n  }\n};\nexport var POSITION_ATTRIBUTE_ENUM = {\n  values: ['top left', 'top center', 'top right', 'right top', 'right middle', 'right bottom', 'bottom left', 'bottom center', 'bottom right', 'left top', 'left middle', 'left bottom'],\n  default: 'right middle'\n};\n\nfunction positionToPopper(position) {\n  return position && positionMap[position] ? positionMap[position].position : null;\n}\n/* Convert the autoFlip property into the array format that Popper expects.\n * The first item must not include the edge-position variation, or Popper will not understand it.\n */\n\n\nexport function getFlipBehavior(props) {\n  return props.position && Array.isArray(props.autoFlip) ? [props.position.split(' ')[0]].concat(props.autoFlip) : null;\n}\nexport function positionPropToPopperPosition(position) {\n  return positionToPopper(position) || positionMap[POSITION_ATTRIBUTE_ENUM.default].position;\n}","import styled from 'styled-components';\nexport default styled.div.withConfig({\n  displayName: \"styledContentContainer\",\n  componentId: \"p0j3f7-0\"\n})([\"\\n  [data-role='droplistContent'] {\\n    \", \";\\n  }\\n\"], function (_ref) {\n  var maxHeight = _ref.maxHeight;\n  return maxHeight ? \"max-height: \".concat(maxHeight, \"px\") : '';\n});","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport styled from 'styled-components';\nimport rafSchedule from 'raf-schd';\nimport Popper from 'popper.js';\nimport ScrollBlock from './internal/ScrollBlock';\nimport { getFlipBehavior, positionPropToPopperPosition } from './internal/helpers';\nimport ContentContainer from '../styledContentContainer';\n// We create a dummy target when making the menu fixed so that we can force popper.js to use fixed positioning\n// without affecting child layout of the actual target since children of fixed position elements can't use percentage\n// heights/widths.\nvar FixedTarget = styled.div.withConfig({\n  displayName: \"Layer__FixedTarget\",\n  componentId: \"qunuuz-0\"\n})([\"\\n  \", \";\\n\"], function (_ref) {\n  var fixedOffset = _ref.fixedOffset,\n      targetRef = _ref.targetRef;\n\n  if (fixedOffset && targetRef) {\n    var actualTarget = targetRef.firstChild;\n    var rect = actualTarget.getBoundingClientRect();\n    return \"\\n        position: fixed;\\n        top: \".concat(fixedOffset.top, \"px;\\n        left: \").concat(fixedOffset.left, \"px;\\n        height: \").concat(rect.height, \"px;\\n        width: \").concat(rect.width, \"px;\\n        z-index: -1;\\n      \");\n  }\n\n  return 'display: none;';\n});\n\nvar Layer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Layer, _Component);\n\n  // TODO: get the value of zIndex from theme, not using it now as it is not\n  // working with extract-react-types\n  function Layer(props) {\n    var _this;\n\n    _classCallCheck(this, Layer);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Layer).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"popper\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"targetRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"contentRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fixedRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"extractStyles\", function (state) {\n      if (state) {\n        var popperHeight = state.offsets.popper.height;\n        var left = Math.round(state.offsets.popper.left); // The offset position is sometimes an object and sometimes just a string...\n\n        var cssPosition = _typeof(state.offsets.popper.position) === 'object' ? state.offsets.popper.position.position : state.offsets.popper.position;\n\n        var top = _this.fixPositionTopUnderflow(state.offsets.popper.top, cssPosition);\n\n        var originalHeight = _this.state.originalHeight || popperHeight;\n\n        var maxHeight = _this.calculateMaxHeight(originalHeight, popperHeight, top, cssPosition);\n\n        _this.setState({\n          // position: fixed or absolute\n          cssPosition: cssPosition,\n          hasExtractedStyles: true,\n          transform: \"translate3d(\".concat(left, \"px, \").concat(top, \"px, 0px)\"),\n          // state.flipped is either true or undefined\n          flipped: !!state.flipped,\n          actualPosition: state.position,\n          originalPosition: state.originalPosition,\n          originalHeight: originalHeight,\n          maxHeight: maxHeight\n        });\n      }\n    });\n\n    _this.state = {\n      hasExtractedStyles: false,\n      position: null,\n      transform: null,\n      flipped: false,\n      actualPosition: null,\n      // We set these default offsets to prevent a flash of popper content in the wrong position\n      // which can cause incorrect height calculations. Popper will calculate these values\n      offsets: {\n        popper: {\n          left: -9999,\n          top: -9999\n        }\n      },\n      originalPosition: null,\n      // fix Safari parent width: https://product-fabric.atlassian.net/browse/ED-1784\n      cssPosition: 'absolute',\n      originalHeight: null,\n      maxHeight: null,\n      fixedOffset: null\n    };\n    _this.extractStyles = rafSchedule(_this.extractStyles.bind(_assertThisInitialized(_assertThisInitialized(_this))));\n    return _this;\n  }\n\n  _createClass(Layer, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.applyPopper(this.props);\n      this.calculateFixedOffset(this.props);\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(nextProps) {\n      this.applyPopper(nextProps);\n      this.calculateFixedOffset(nextProps);\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps, prevState) {\n      var _this$props = this.props,\n          onFlippedChange = _this$props.onFlippedChange,\n          onPositioned = _this$props.onPositioned;\n      var _this$state = this.state,\n          flipped = _this$state.flipped,\n          actualPosition = _this$state.actualPosition,\n          originalPosition = _this$state.originalPosition,\n          hasExtractedStyles = _this$state.hasExtractedStyles;\n\n      if (prevState.flipped !== flipped && onFlippedChange) {\n        onFlippedChange({\n          flipped: flipped,\n          actualPosition: actualPosition,\n          originalPosition: originalPosition\n        });\n      } // This flag is set the first time the position is calculated from Popper and applied to the content\n\n\n      if (!prevState.hasExtractedStyles && hasExtractedStyles && onPositioned) {\n        onPositioned();\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.extractStyles.cancel();\n\n      if (this.popper) {\n        this.popper.destroy();\n      }\n    }\n    /* Calculate the max height of the popper if it's height is greater than the viewport to prevent\n     * the bottom of the popper not being viewable.\n     * Only works if the popper uses viewport as the boundary and has a fixed position ancestor.\n     */\n\n  }, {\n    key: \"calculateMaxHeight\",\n    value: function calculateMaxHeight(originalHeight, currentHeight, positionTop, cssPosition) {\n      var DocumentElementClientHeight = 0;\n\n      if (document.documentElement) {\n        DocumentElementClientHeight = document.documentElement.clientHeight;\n      }\n\n      if (cssPosition !== 'fixed' || this.props.boundariesElement !== 'viewport') {\n        return null;\n      }\n\n      var viewportHeight = Math.max(DocumentElementClientHeight, window.innerHeight || 0);\n      return viewportHeight < originalHeight && currentHeight + positionTop >= viewportHeight - 50 ? // allow some spacing either side of viewport height\n      viewportHeight - 12 : null;\n    }\n    /* Popper may return either a fixed or absolute position which would be applied to the\n     * content style. In order to overcome clipping issues for overflow containing blocks when\n     * the position is absolute, we create a fixed position wrapper.\n     */\n\n  }, {\n    key: \"calculateFixedOffset\",\n    value: function calculateFixedOffset(props) {\n      var isAlwaysFixed = props.isAlwaysFixed;\n\n      if (isAlwaysFixed && this.targetRef) {\n        var actualTarget = this.targetRef.firstChild;\n        this.setState({\n          fixedOffset: {\n            top: actualTarget.getBoundingClientRect().top,\n            left: actualTarget.getBoundingClientRect().left\n          }\n        });\n      } else if (!isAlwaysFixed && this.state.fixedOffset !== null) {\n        this.setState({\n          fixedOffset: null\n        });\n      }\n    }\n    /* Clamp fixed position to the window for fixed position poppers that flow off the top of the\n     * window.\n     * A fixed position popper is a popper who has an ancestor with position: fixed.\n     *\n     * It is too difficult to fix this for non-fixed position poppers without re-implementing popper's\n     * offset functionality or fixing the issue upstream.\n     */\n    // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: \"fixPositionTopUnderflow\",\n    value: function fixPositionTopUnderflow(popperTop, cssPosition) {\n      return popperTop >= 0 || cssPosition !== 'fixed' ? Math.round(popperTop) : 0;\n    }\n  }, {\n    key: \"applyPopper\",\n    value: function applyPopper(props) {\n      if (!this.fixedRef || !this.targetRef || !this.contentRef) {\n        return;\n      }\n\n      if (this.popper) {\n        this.popper.destroy();\n      } // \"new Popper(...)\" operation is very expensive when called on virtual DOM.\n      // This condition reduces the number of calls so we can run our tests faster\n      // (time was reduced from 100s to 13s).\n\n\n      if (!props.content) {\n        return;\n      } // we wrap our target in a div so that we can safely get a reference to it, but we pass the\n      // actual target to popper\n\n\n      var actualTarget = props.isAlwaysFixed ? this.fixedRef : this.targetRef.firstChild;\n      var popperOpts = {\n        placement: positionPropToPopperPosition(props.position),\n        onCreate: this.extractStyles,\n        onUpdate: this.extractStyles,\n        modifiers: {\n          applyStyle: {\n            enabled: false\n          },\n          hide: {\n            enabled: false\n          },\n          offset: {\n            enabled: true,\n            offset: this.props.offset\n          },\n          flip: {\n            enabled: !!this.props.autoFlip,\n            flipVariations: true,\n            boundariesElement: this.props.boundariesElement,\n            padding: 0 // leave 0 pixels between popper and the boundariesElement\n\n          },\n          preventOverflow: {\n            enabled: !!this.props.autoFlip,\n            escapeWithReference: !(this.props.boundariesElement === 'scrollParent')\n          }\n        }\n      };\n      var flipBehavior = getFlipBehavior(props);\n\n      if (flipBehavior) {\n        popperOpts.modifiers.flip.behavior = flipBehavior;\n      }\n\n      this.popper = new Popper(actualTarget, this.contentRef, popperOpts);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          zIndex = _this$props2.zIndex,\n          lockScroll = _this$props2.lockScroll;\n      var _this$state2 = this.state,\n          cssPosition = _this$state2.cssPosition,\n          transform = _this$state2.transform,\n          hasExtractedStyles = _this$state2.hasExtractedStyles,\n          maxHeight = _this$state2.maxHeight,\n          fixedOffset = _this$state2.fixedOffset;\n      var opacity = hasExtractedStyles ? {} : {\n        opacity: 0\n      };\n      return React.createElement(\"div\", null, React.createElement(\"div\", {\n        ref: function ref(_ref2) {\n          _this2.targetRef = _ref2;\n        }\n      }, this.props.children), React.createElement(FixedTarget, {\n        targetRef: this.targetRef,\n        fixedOffset: fixedOffset\n      }, React.createElement(\"div\", {\n        style: {\n          height: '100%',\n          width: '100%'\n        },\n        ref: function ref(_ref3) {\n          _this2.fixedRef = _ref3;\n        }\n      })), lockScroll && React.createElement(ScrollBlock, null), React.createElement(ContentContainer, {\n        maxHeight: maxHeight\n      }, React.createElement(\"div\", {\n        ref: function ref(_ref4) {\n          _this2.contentRef = _ref4;\n        },\n        style: _objectSpread({\n          top: 0,\n          left: 0,\n          position: cssPosition,\n          transform: transform,\n          zIndex: zIndex\n        }, opacity)\n      }, this.props.content)));\n    }\n  }]);\n\n  return Layer;\n}(Component);\n/* eslint-enable react/no-unused-prop-types */\n\n\n_defineProperty(Layer, \"defaultProps\", {\n  autoFlip: true,\n  boundariesElement: 'viewport',\n  children: null,\n  content: null,\n  offset: '0 0',\n  onFlippedChange: function onFlippedChange() {},\n  position: 'right middle',\n  zIndex: 400,\n  lockScroll: false,\n  isAlwaysFixed: false,\n  onPositioned: function onPositioned() {}\n});\n\nexport { Layer as default };","import styled, { css } from 'styled-components';\nimport { borderRadius, colors, gridSize, math } from '@atlaskit/theme';\n/* When dropdown contains more than 9 elements (droplist items, droplist groups),\n * it should have scroll and cut off half of the 10th item to indicate that there are more\n * items then are seen. This was previously calculated by mapping over children, but with\n * the current composed API it is simpler to just assume 9 items. */\n\nvar getMaxHeight = function getMaxHeight(_ref) {\n  var isTall = _ref.isTall,\n      maxHeight = _ref.maxHeight;\n  if (maxHeight) return \"\".concat(maxHeight, \"px\");\n  var heightWithoutPadding = 17;\n  var verticalPadding = gridSize();\n  var height = heightWithoutPadding + verticalPadding * 2;\n  var defaultMaxHeight = 9.5 * height + verticalPadding / 2;\n  return isTall ? '90vh' : \"\".concat(defaultMaxHeight, \"px\");\n};\n\nexport default styled.div.withConfig({\n  displayName: \"Droplist\",\n  componentId: \"sc-1z05y4v-0\"\n})([\"\\n  display: inline-flex;\\n\\n  \", \";\\n\"], function (props) {\n  return props.fit && \"\\n    display: block;\\n    flex: 1 1 auto;\\n  \";\n});\nvar backgroundColor = colors.backgroundOnLayer;\nvar boxShadow = css([\"\\n  box-shadow: 0 \", \"px \", \"px -\", \"px \", \",\\n    0 0 1px \", \";\\n\"], math.divide(gridSize, 2), gridSize, math.divide(gridSize, 4), colors.N50A, colors.N60A);\nexport var Content = styled.div.withConfig({\n  displayName: \"Droplist__Content\",\n  componentId: \"sc-1z05y4v-1\"\n})([\"\\n  background: \", \";\\n  border-radius: \", \"px;\\n  \", \";\\n  box-sizing: border-box;\\n  overflow: auto;\\n  padding: \", \"px 0;\\n  max-height: \", \";\\n\"], backgroundColor, borderRadius, boxShadow, math.divide(gridSize, 2), getMaxHeight);\nexport var SpinnerContainer = styled.div.withConfig({\n  displayName: \"Droplist__SpinnerContainer\",\n  componentId: \"sc-1z05y4v-2\"\n})([\"\\n  display: flex;\\n  justify-content: center;\\n  min-width: \", \"px;\\n  padding: \", \"px;\\n\"], math.multiply(gridSize, 20), math.multiply(gridSize, 2.5));\nexport var Trigger = styled.div.withConfig({\n  displayName: \"Droplist__Trigger\",\n  componentId: \"sc-1z05y4v-3\"\n})([\"\\n  display: inline-flex;\\n  transition-duration: 0.2s;\\n  transition: box-shadow 0.15s cubic-bezier(0.47, 0.03, 0.49, 1.38);\\n\\n  \", \";\\n\"], function (props) {\n  return props.fit && \"\\n    box-sizing: border-box;\\n    display: block;\\n  \";\n});","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { itemThemeNamespace } from '@atlaskit/item';\nimport { colors, gridSize, math, themed } from '@atlaskit/theme';\nvar dropdownPadding = {\n  bottom: gridSize,\n  left: math.multiply(gridSize, 1.5),\n  right: math.multiply(gridSize, 1.5),\n  top: gridSize\n};\nvar droplistItemTheme = {\n  padding: {\n    default: dropdownPadding,\n    compact: dropdownPadding\n  },\n  borderRadius: function borderRadius() {\n    return 0;\n  },\n  default: {\n    background: themed({\n      light: colors.N0,\n      dark: colors.DN50\n    }),\n    text: themed({\n      light: colors.N800,\n      dark: colors.DN600\n    }),\n    secondaryText: themed({\n      light: colors.N200,\n      dark: colors.DN300\n    })\n  },\n  hover: {\n    background: themed({\n      light: colors.N20,\n      dark: colors.DN70\n    }),\n    text: themed({\n      light: colors.N800,\n      dark: colors.DN600\n    }),\n    secondaryText: themed({\n      light: colors.N200,\n      dark: colors.DN300\n    })\n  },\n  active: {\n    background: themed({\n      light: colors.B75,\n      dark: colors.B75\n    }),\n    text: themed({\n      light: colors.N800,\n      dark: colors.B400\n    }),\n    secondaryText: themed({\n      light: colors.N200,\n      dark: colors.DN300\n    })\n  },\n  selected: {\n    background: 'transparent',\n    text: themed({\n      light: colors.N800,\n      dark: colors.DN600\n    }),\n    secondaryText: themed({\n      light: colors.N200,\n      dark: colors.DN300\n    })\n  },\n  disabled: {\n    background: 'transparent',\n    text: themed({\n      light: colors.N70,\n      dark: colors.DN80\n    }),\n    secondaryText: themed({\n      light: colors.N50,\n      dark: colors.DN70\n    })\n  },\n  focus: {\n    outline: themed({\n      light: colors.B100,\n      dark: colors.B75\n    })\n  }\n};\nexport default _defineProperty({}, itemThemeNamespace, droplistItemTheme);","import { colors, gridSize as akGridSize, borderRadius } from '@atlaskit/theme';\nexport var themeNamespace = '@atlaskit-shared-theme/item'; // Used for Group titles and Item descriptions\n\nexport var compactSmallFontSize = 10;\nexport var compactLineHeight = 1.2;\nexport var gridSize = akGridSize();\nexport var defaultTheme = {\n  afterItemSpacing: {\n    compact: akGridSize(),\n    default: akGridSize()\n  },\n  beforeItemSpacing: {\n    compact: akGridSize(),\n    default: akGridSize()\n  },\n  borderRadius: borderRadius(),\n  focus: {\n    outline: colors.B100\n  },\n  height: {\n    compact: 0,\n    default: 0\n  },\n  padding: {\n    default: {\n      bottom: akGridSize() / 2,\n      left: akGridSize() / 2,\n      right: akGridSize() / 2,\n      top: akGridSize() / 2\n    },\n    compact: {\n      bottom: akGridSize(),\n      left: akGridSize(),\n      right: akGridSize(),\n      top: akGridSize()\n    }\n  },\n  default: {\n    background: colors.background,\n    text: colors.text,\n    secondaryText: colors.N200\n  },\n  selected: {\n    background: colors.backgroundActive,\n    text: colors.N500,\n    secondaryText: colors.N200\n  },\n  active: {\n    background: colors.backgroundActive,\n    text: colors.textActive,\n    secondaryText: colors.N200\n  },\n  hover: {\n    background: colors.backgroundHover,\n    text: colors.textHover,\n    secondaryText: colors.N200\n  },\n  disabled: {\n    background: colors.N0,\n    text: colors.N200,\n    secondaryText: colors.N200\n  },\n  // same as hover in this case\n  dragging: {\n    background: colors.N20,\n    text: colors.N800,\n    secondaryText: colors.N200\n  }\n};\n\nvar isValidCssValue = function isValidCssValue(value) {\n  return value !== undefined && value !== null && value !== '';\n}; // Returns the theme that contains the requested theme key(s), preferring the user-supplied\n// theme if it is provided.\n\n\nexport var themeWithKeys = function themeWithKeys(maybeTheme, key, parentKey) {\n  if (parentKey) {\n    return maybeTheme && maybeTheme[parentKey] && isValidCssValue(maybeTheme[parentKey][key]) ? maybeTheme : defaultTheme;\n  }\n\n  return maybeTheme && isValidCssValue(maybeTheme[key]) ? maybeTheme : defaultTheme;\n}; // Returns the theme value for the requested key(s), falling back to the default theme if the\n// user-supplied theme doesn't exist or doesn't contain the requested key(s)\n\nexport var getThemeStyle = function getThemeStyle(maybeTheme, key, parentKey) {\n  var theme = themeWithKeys(maybeTheme, key, parentKey);\n  return parentKey ? theme[parentKey][key] : theme[key];\n};","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport Layer from '@atlaskit/layer';\nimport Spinner from '@atlaskit/spinner';\nimport { ThemeProvider } from 'styled-components';\nimport { gridSize } from '@atlaskit/theme';\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport Wrapper, { Content, SpinnerContainer, Trigger } from '../styled/Droplist';\nimport itemTheme from '../theme/item-theme';\nvar halfFocusRing = 1;\nvar dropOffset = \"0 \".concat(gridSize(), \"px\");\n\nvar Droplist =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Droplist, _Component);\n\n  function Droplist() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Droplist);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Droplist)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidMount\", function () {\n      _this.setContentWidth(); // We use a captured event here to avoid a radio or checkbox dropdown item firing its\n      // click event first, which would cause a re-render of the element and prevent Droplist\n      // from detecting the actual source of this original click event.\n\n\n      document.addEventListener('click', _this.handleClickOutside, true);\n      document.addEventListener('keydown', _this.handleEsc);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidUpdate\", function () {\n      if (_this.props.isOpen) {\n        _this.setContentWidth();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentWillUnmount\", function () {\n      document.removeEventListener('click', _this.handleClickOutside, true);\n      document.removeEventListener('keydown', _this.handleEsc);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"setContentWidth\", function () {\n      var _assertThisInitialize = _assertThisInitialized(_assertThisInitialized(_this)),\n          dropContentRef = _assertThisInitialize.dropContentRef,\n          triggerRef = _assertThisInitialize.triggerRef;\n\n      var shouldFitContainer = _this.props.shouldFitContainer; // We need to manually set the content width to match the trigger width\n      // if props.shouldFitContainer is true\n\n      if (shouldFitContainer && dropContentRef && triggerRef) {\n        dropContentRef.style.width = \"\".concat(triggerRef.offsetWidth - halfFocusRing * 2, \"px\");\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"dropContentRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"triggerRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleEsc\", function (event) {\n      if (event.key === 'Escape' && _this.props.isOpen) {\n        _this.close(event);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleClickOutside\", function (event) {\n      if (_this.props.isOpen) {\n        // $FlowFixMe - flow is lost and if not an instance of Node\n        if (event.target instanceof Node) {\n          // Rather than check for the target within the entire Droplist, we specify the trigger/content.\n          // This aids with future effort in scroll-locking Droplist when isMenuFixed is enabled; the scroll\n          // blanket which stretches to the viewport should not stop 'close' from being triggered.\n          var withinTrigger = _this.triggerRef && _this.triggerRef.contains(event.target);\n\n          var withinContent = _this.dropContentRef && _this.dropContentRef.contains(event.target);\n\n          if (!withinTrigger && !withinContent) {\n            _this.close(event);\n          }\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"close\", function (event) {\n      if (_this.props.onOpenChange) {\n        _this.props.onOpenChange({\n          isOpen: false,\n          event: event\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleContentRef\", function (ref) {\n      _this.dropContentRef = ref; // If the dropdown has just been opened, we focus on the containing element so the\n      // user can tab to the first dropdown item. We will only receive this ref if isOpen\n      // is true or null, so no need to check for truthiness here.\n\n      if (ref) {\n        ref.focus();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleTriggerRef\", function (ref) {\n      _this.triggerRef = ref;\n    });\n\n    return _this;\n  }\n\n  _createClass(Droplist, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        shouldAllowMultilineItems: this.props.shouldAllowMultilineItems\n      };\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          boundariesElement = _this$props.boundariesElement,\n          children = _this$props.children,\n          isLoading = _this$props.isLoading,\n          isOpen = _this$props.isOpen,\n          maxHeight = _this$props.maxHeight,\n          onClick = _this$props.onClick,\n          onKeyDown = _this$props.onKeyDown,\n          position = _this$props.position,\n          isMenuFixed = _this$props.isMenuFixed,\n          shouldFitContainer = _this$props.shouldFitContainer,\n          shouldFlip = _this$props.shouldFlip,\n          trigger = _this$props.trigger,\n          onPositioned = _this$props.onPositioned;\n      var layerContent = isOpen ? React.createElement(Content, {\n        \"data-role\": \"droplistContent\",\n        isTall: appearance === 'tall',\n        innerRef: this.handleContentRef,\n        maxHeight: maxHeight\n      }, isLoading ? React.createElement(SpinnerContainer, null, React.createElement(Spinner, {\n        size: \"small\"\n      })) : React.createElement(ThemeProvider, {\n        theme: itemTheme\n      }, React.createElement(\"div\", null, children))) : null;\n      return React.createElement(Wrapper, {\n        fit: shouldFitContainer,\n        onClick: onClick,\n        onKeyDown: onKeyDown\n      }, React.createElement(Layer, {\n        autoFlip: shouldFlip,\n        boundariesElement: boundariesElement,\n        content: layerContent,\n        offset: dropOffset // $FlowFixMe - Cannot create `Layer` element because in property `position\n        ,\n        position: position,\n        isAlwaysFixed: isOpen && isMenuFixed,\n        onPositioned: onPositioned\n      }, React.createElement(Trigger, {\n        fit: shouldFitContainer,\n        innerRef: this.handleTriggerRef\n      }, trigger)));\n    }\n  }]);\n\n  return Droplist;\n}(Component);\n\n_defineProperty(Droplist, \"defaultProps\", {\n  appearance: 'default',\n  boundariesElement: 'viewport',\n  children: null,\n  isLoading: false,\n  isOpen: false,\n  onClick: function onClick() {},\n  onKeyDown: function onKeyDown() {},\n  onOpenChange: function onOpenChange() {},\n  position: 'bottom left',\n  isMenuFixed: false,\n  shouldAllowMultilineItems: false,\n  shouldFitContainer: false,\n  shouldFlip: true,\n  trigger: null,\n  onPositioned: function onPositioned() {}\n});\n\n_defineProperty(Droplist, \"childContextTypes\", {\n  shouldAllowMultilineItems: PropTypes.bool\n});\n\nexport { Droplist as DroplistWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'droplist',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onOpenChange: createAndFireEventOnAtlaskit({\n    action: 'toggled',\n    actionSubject: 'droplist',\n    attributes: {\n      componentName: 'droplist',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Droplist));","import styled, { css } from 'styled-components';\nimport { colors, themed, gridSize } from '@atlaskit/theme';\nvar spacing = gridSize();\nvar fontSize = 12;\nvar innerHeight = spacing * 2; // 16px\n\nvar lineHeight = innerHeight / fontSize;\n\nvar getPadding = function getPadding(_ref) {\n  var firstChild = _ref.firstChild,\n      inlineEdit = _ref.inlineEdit;\n  var right = 0;\n  var bottom = spacing / 2;\n  var left = 0;\n  var top = spacing * 2.5;\n\n  if (inlineEdit) {\n    bottom = 0;\n    left = spacing;\n    top = spacing;\n  }\n\n  if (firstChild) {\n    top = spacing / 2;\n  }\n\n  return css([\"\\n    padding: \", \"px \", \"px \", \"px \", \"px;\\n  \"], top, right, bottom, left);\n};\n\nexport var LabelWrapper = styled.label.withConfig({\n  displayName: \"Label__LabelWrapper\",\n  componentId: \"sc-17towfw-0\"\n})([\"\\n  display: block;\\n\"]);\nvar getColor = themed({\n  light: colors.N200,\n  dark: colors.DN90\n});\nvar getDisabledColor = themed({\n  light: colors.N60,\n  dark: colors.DN300\n});\nexport var LabelInner = styled.div.withConfig({\n  displayName: \"Label__LabelInner\",\n  componentId: \"sc-17towfw-1\"\n})([\"\\n  color: \", \";\\n  font-size: \", \"px;\\n  font-weight: 600;\\n  line-height: \", \";\\n  \", \";\\n\\n  \", \";\\n\"], function (props) {\n  return props.isDisabled ? getDisabledColor(props) : getColor(props);\n}, fontSize, lineHeight, getPadding, function (p) {\n  return p.isHidden && 'display: none;';\n});\nexport var RequiredIndicator = styled.span.withConfig({\n  displayName: \"Label__RequiredIndicator\",\n  componentId: \"sc-17towfw-2\"\n})([\"\\n  color: \", \";\\n  padding-left: 2px;\\n\"], colors.red);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { LabelWrapper, RequiredIndicator, LabelInner } from '../styled/Label';\n\nvar Label =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Label, _Component);\n\n  function Label() {\n    _classCallCheck(this, Label);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(Label).apply(this, arguments));\n  }\n\n  _createClass(Label, [{\n    key: \"render\",\n\n    /* eslint-disable jsx-a11y/no-static-element-interactions */\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          children = _this$props.children,\n          htmlFor = _this$props.htmlFor,\n          isFirstChild = _this$props.isFirstChild,\n          isLabelHidden = _this$props.isLabelHidden,\n          isDisabled = _this$props.isDisabled,\n          isRequired = _this$props.isRequired,\n          label = _this$props.label,\n          onClick = _this$props.onClick;\n      return React.createElement(LabelWrapper, {\n        htmlFor: htmlFor\n      }, React.createElement(LabelInner, {\n        isHidden: isLabelHidden,\n        inlineEdit: appearance === 'inline-edit',\n        firstChild: isFirstChild,\n        isDisabled: isDisabled\n      }, React.createElement(\"span\", {\n        onClick: onClick\n      }, label), isRequired ? React.createElement(RequiredIndicator, {\n        role: \"presentation\"\n      }, \"*\") : null), children);\n    }\n  }]);\n\n  return Label;\n}(Component);\n\n_defineProperty(Label, \"defaultProps\", {\n  appearance: 'default'\n});\n\nexport { Label as default };","import styled, { css } from 'styled-components';\nimport { colors, gridSize, fontSize } from '@atlaskit/theme';\nvar lineHeightDefault = gridSize() * 2 / fontSize();\n\nvar getPlaceholderStyle = function getPlaceholderStyle(style) {\n  return css([\"\\n  &::-webkit-input-placeholder {\\n    /* WebKit, Blink, Edge */\\n    \", \";\\n  }\\n  &::-moz-placeholder {\\n    /* Mozilla Firefox 19+ */\\n    \", \" opacity: 1;\\n  }\\n  &::-ms-input-placeholder {\\n    /* Microsoft Edge */\\n    \", \";\\n  }\\n  &:-moz-placeholder {\\n    /* Mozilla Firefox 4 to 18 */\\n    \", \" opacity: 1;\\n  }\\n  &:-ms-input-placeholder {\\n    /* Internet Explorer 10-11 */\\n    \", \";\\n  }\\n\"], style, style, style, style, style);\n};\n\nvar getPlaceholderColor = css([\"\\n  color: \", \";\\n\"], colors.placeholderText);\nvar Input = styled.input.withConfig({\n  displayName: \"Stateless__Input\",\n  componentId: \"wsqt66-0\"\n})([\"\\n  display: inline-block;\\n  flex: 1 0 10px;\\n  margin: 0;\\n  padding: 0;\\n  outline: 0;\\n  border: 0;\\n  background: none;\\n  align-self: center;\\n  font-size: \", \"px;\\n  line-height: \", \";\\n\\n  \", \";\\n\"], fontSize, lineHeightDefault, getPlaceholderStyle(getPlaceholderColor));\nvar SelectWrapper = styled.div.withConfig({\n  displayName: \"Stateless__SelectWrapper\",\n  componentId: \"wsqt66-1\"\n})([\"\\n  display: inline-block;\\n\\n  \", \";\\n\"], function (_ref) {\n  var shouldFitContainer = _ref.shouldFitContainer;\n  return shouldFitContainer ? css([\"\\n          display: block;\\n        \"]) : css([\"\\n          display: inline-block;\\n        \"]);\n});\nexport { Input, SelectWrapper };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return _toConsumableArray(ancestorData).concat([data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_assertThisInitialized(_this)), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport memoizeOne from 'memoize-one';\nimport { Popper as ReactPopper } from 'react-popper';\nexport { Manager, Reference } from 'react-popper';\n\nvar getFlipBehavior = function getFlipBehavior(side) {\n  return {\n    auto: [],\n    top: ['top', 'bottom', 'top'],\n    right: ['right', 'left', 'right'],\n    bottom: ['bottom', 'top', 'bottom'],\n    left: ['left', 'right', 'left']\n  }[side];\n};\n\nexport var Popper =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Popper, _Component);\n\n  function Popper() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Popper);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Popper)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getModifiers\", memoizeOne(function (placement) {\n      var flipBehavior = getFlipBehavior(placement.split('-')[0]);\n      var modifiers = {\n        flip: {\n          enabled: true,\n          behavior: flipBehavior,\n          boundariesElement: 'viewport'\n        },\n        hide: {\n          enabled: true,\n          boundariesElement: 'scrollParent'\n        },\n        offset: {\n          enabled: true,\n          offset: _this.props.offset\n        },\n        preventOverflow: {\n          enabled: true,\n          escapeWithReference: false,\n          boundariesElement: 'window'\n        }\n      };\n      return modifiers;\n    }));\n\n    return _this;\n  }\n\n  _createClass(Popper, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          placement = _this$props.placement,\n          children = _this$props.children,\n          referenceElement = _this$props.referenceElement;\n      var modifiers = this.getModifiers(this.props.placement);\n      return React.createElement(ReactPopper, _extends({\n        positionFixed: true,\n        modifiers: modifiers,\n        placement: placement\n      }, referenceElement ? {\n        referenceElement: referenceElement\n      } : {}), children);\n    }\n  }]);\n\n  return Popper;\n}(Component);\n\n_defineProperty(Popper, \"defaultProps\", {\n  children: function children() {},\n  offset: '0, 8px',\n  placement: 'bottom-start'\n});","import styled from 'styled-components';\nimport { borderRadius, colors, gridSize, math, themed, elevation, layers } from '@atlaskit/theme';\nvar backgroundColor = themed({\n  light: colors.N0,\n  dark: colors.DN50\n});\nvar textColor = themed({\n  light: colors.N900,\n  dark: colors.DN600\n}); // eslint-disable-next-line import/prefer-default-export\n\nexport var Container = styled.div.withConfig({\n  displayName: \"styled__Container\",\n  componentId: \"sc-1v7azd6-0\"\n})([\"\\n  background: \", \";\\n  border-radius: \", \"px;\\n  box-sizing: content-box; /* do not set this to border-box or it will break the overflow handling */\\n  color: \", \";\\n  max-height: \", \"px;\\n  max-width: \", \"px;\\n  padding: \", \"px \", \"px;\\n  z-index: \", \";\\n\\n  \", \";\\n\\n  &:focus {\\n    outline: none;\\n  }\\n\"], backgroundColor, borderRadius, textColor, math.multiply(gridSize, 56), math.multiply(gridSize, 56), math.multiply(gridSize, 2), math.multiply(gridSize, 3), layers.dialog, elevation.e200);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport NodeResolver from 'react-node-resolver';\nimport { Manager, Reference, Popper } from '@atlaskit/popper';\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport { Container } from './styled';\n\nvar InlineDialog =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(InlineDialog, _Component);\n\n  function InlineDialog() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, InlineDialog);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(InlineDialog)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"containerRef\", null);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"triggerRef\", null);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleClickOutside\", function (event) {\n      var _this$props = _this.props,\n          isOpen = _this$props.isOpen,\n          onClose = _this$props.onClose;\n      if (event.defaultPrevented) return;\n      var container = _this.containerRef;\n      var trigger = _this.triggerRef;\n      var target = event.target; // exit if we click outside but on the trigger — it can handle the clicks itself\n\n      if (trigger && trigger.contains(target)) return; // call onClose if the click originated from outside the dialog\n\n      if (isOpen && container && !container.contains(target)) {\n        onClose({\n          isOpen: false,\n          event: event\n        });\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(InlineDialog, [{\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (typeof window === 'undefined') return;\n\n      if (!prevProps.isOpen && this.props.isOpen) {\n        window.addEventListener('click', this.handleClickOutside, true);\n      } else if (prevProps.isOpen && !this.props.isOpen) {\n        window.removeEventListener('click', this.handleClickOutside);\n      }\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      if (typeof window === 'undefined') return;\n\n      if (this.props.isOpen) {\n        window.addEventListener('click', this.handleClickOutside, true);\n      }\n    }\n  }, {\n    key: \"componentWillUnMount\",\n    value: function componentWillUnMount() {\n      if (typeof window === 'undefined') return;\n      window.removeEventListener('click', this.handleClickOutside);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          children = _this$props2.children,\n          placement = _this$props2.placement,\n          isOpen = _this$props2.isOpen,\n          content = _this$props2.content,\n          onContentBlur = _this$props2.onContentBlur,\n          onContentFocus = _this$props2.onContentFocus,\n          onContentClick = _this$props2.onContentClick;\n      var popper = isOpen ? React.createElement(Popper, {\n        placement: placement\n      }, function (_ref) {\n        var ref = _ref.ref,\n            style = _ref.style,\n            outOfBoundaries = _ref.outOfBoundaries;\n        return React.createElement(Container, {\n          onBlur: onContentBlur,\n          onFocus: onContentFocus,\n          onClick: onContentClick,\n          outOfBoundaries: outOfBoundaries,\n          innerRef: function innerRef(node) {\n            _this2.containerRef = node;\n            ref(node);\n          },\n          style: style\n        }, content);\n      }) : null;\n      return React.createElement(Manager, null, React.createElement(Reference, null, function (_ref2) {\n        var ref = _ref2.ref;\n        return React.createElement(NodeResolver, {\n          innerRef: function innerRef(node) {\n            _this2.triggerRef = node;\n            ref(node);\n          }\n        }, children);\n      }), popper);\n    }\n  }]);\n\n  return InlineDialog;\n}(Component);\n\n_defineProperty(InlineDialog, \"defaultProps\", {\n  children: null,\n  content: null,\n  isOpen: false,\n  onContentBlur: function onContentBlur() {},\n  onContentClick: function onContentClick() {},\n  onContentFocus: function onContentFocus() {},\n  onClose: function onClose() {},\n  placement: 'bottom-start'\n});\n\nexport { InlineDialog as InlineDialogWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'inlineDialog',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onClose: createAndFireEventOnAtlaskit({\n    action: 'closed',\n    actionSubject: 'inlineDialog',\n    attributes: {\n      componentName: 'inlineDialog',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(InlineDialog));","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","import { colors, themed } from '@atlaskit/theme'; // The following are the name for color mappings in @atlaskit/themes\n// The exports are the functions, not the objects, so could not be used here\n\nvar disabled = {\n  light: colors.N20,\n  dark: colors.DN20\n}; // For validation red is the new 'yellow' which was { light: colors.Y300, dark: colors.Y300 }\n\nvar red = {\n  light: colors.R400,\n  dark: colors.R400\n}; // The following do not yet have a darkmode 'map': N20A, N10\n\nexport var getBackgroundColor = themed('appearance', {\n  standard: {\n    light: colors.N10,\n    dark: colors.DN10\n  },\n  disabled: disabled,\n  invalid: {\n    light: colors.N10,\n    dark: colors.DN10\n  },\n  subtle: {\n    light: 'transparent',\n    dark: 'transparent'\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBackgroundColorFocus = themed('appearance', {\n  standard: {\n    light: colors.N0,\n    dark: colors.DN10\n  },\n  disabled: disabled,\n  invalid: {\n    light: colors.N0,\n    dark: colors.DN10\n  },\n  subtle: {\n    light: colors.N0,\n    dark: colors.DN10\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBackgroundColorHover = themed('appearance', {\n  standard: {\n    light: colors.N30,\n    dark: colors.DN30\n  },\n  disabled: disabled,\n  invalid: {\n    light: colors.N30,\n    dark: colors.DN30\n  },\n  subtle: {\n    light: colors.N30,\n    dark: colors.DN30\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBorderColor = themed('appearance', {\n  standard: {\n    light: colors.N40,\n    dark: colors.DN40\n  },\n  disabled: {\n    light: colors.N40,\n    dark: colors.DN40\n  },\n  invalid: red,\n  subtle: {\n    light: 'transparent',\n    dark: 'transparent'\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBorderColorFocus = themed('appearance', {\n  standard: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  disabled: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  invalid: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  subtle: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});","import styled, { css } from 'styled-components';\nimport { gridSize, fontSize, colors, themed } from '@atlaskit/theme';\nimport { getBackgroundColor, getBackgroundColorFocus, getBackgroundColorHover, getBorderColor, getBorderColorFocus } from './theme';\nvar borderRadius = '3px';\nvar borderWidth = 2;\nvar grid = gridSize();\nvar lineHeightBase = grid * 2.5;\nvar lineHeightCompact = grid * 2;\nvar heightBase = grid * 5;\nvar heightCompact = grid * 4;\nvar horizontalPadding = grid;\nvar innerHeight = grid * 3;\nvar transitionDuration = '0.2s';\n\nvar getBorderAndPadding = function getBorderAndPadding(_ref) {\n  var paddingDisabled = _ref.paddingDisabled,\n      compact = _ref.compact;\n  var height = compact ? heightCompact : heightBase;\n  var padding = paddingDisabled ? \"0\" : \"\".concat((height - 2 * borderWidth - innerHeight) / 2, \"px \").concat(horizontalPadding - borderWidth, \"px\");\n  return css([\"\\n    border-width: \", \"px;\\n    padding: \", \";\\n  \"], borderWidth, padding);\n};\n\nvar getLineHeight = function getLineHeight(props) {\n  var currentLineHeight = props.compact ? lineHeightCompact : lineHeightBase;\n  return currentLineHeight / fontSize();\n};\n\nvar getDisabledColor = themed({\n  light: colors.N70,\n  dark: colors.DN90\n});\n\nvar getDisabledState = function getDisabledState(props) {\n  return props.disabled && css([\"\\n    color: \", \";\\n    pointer-events: none;\\n  \"], getDisabledColor(props));\n};\n\nvar getHoverState = function getHoverState(props) {\n  if (props.readOnly || props.isFocused || props.none) return null;\n  return css([\"\\n    &:hover {\\n      background-color: \", \";\\n    }\\n  \"], getBackgroundColorHover(props));\n};\n\nvar getBorderStyle = function getBorderStyle(props) {\n  return props.appearance === 'none' ? 'none' : 'solid';\n};\n\nvar getMinHeight = function getMinHeight(_ref2) {\n  var compact = _ref2.compact;\n  var minHeight = compact ? heightCompact : heightBase;\n  return css([\"\\n    min-height: \", \"px;\\n  \"], minHeight);\n}; // need an element wrapping the children because IE11 doesn't apply min-height correctly\n// to flex-elements. See https://github.com/philipwalton/flexbugs#3-min-height-on-a-flex-container-wont-apply-to-its-flex-items\n\n\nexport var ChildWrapper = styled.div.withConfig({\n  displayName: \"Content__ChildWrapper\",\n  componentId: \"ve26fj-0\"\n})([\"\\n  display: flex;\\n  flex-direction: column;\\n  flex: 1 0 auto;\\n  max-width: 100%;\\n  \", \";\\n\"], function (p) {\n  return getMinHeight(p);\n});\nvar getColor = themed({\n  light: colors.N900,\n  dark: colors.DN600\n});\nexport var Content = styled.div.withConfig({\n  displayName: \"Content\",\n  componentId: \"ve26fj-1\"\n})([\"\\n  align-items: center;\\n  background-color: \", \";\\n  border-color: \", \";\\n  border-radius: \", \";\\n  border-style: \", \";\\n  box-sizing: border-box;\\n  color: \", \";\\n  display: flex;\\n  flex: 1 0 auto;\\n  font-size: \", \"px;\\n  justify-content: space-between;\\n  line-height: \", \";\\n  max-width: 100%;\\n  overflow: hidden;\\n  transition: background-color \", \" ease-in-out,\\n    border-color \", \" ease-in-out;\\n  word-wrap: break-word;\\n  \", \" \", \" \", \";\\n\"], function (props) {\n  return props.isFocused ? getBackgroundColorFocus(props) : getBackgroundColor(props);\n}, function (props) {\n  return props.isFocused ? getBorderColorFocus(props) : getBorderColor(props);\n}, borderRadius, getBorderStyle, getColor, fontSize, getLineHeight, transitionDuration, transitionDuration, getBorderAndPadding, getHoverState, getDisabledState);\n\nvar getMaxWidth = function getMaxWidth(maxWidth) {\n  return maxWidth ? \"\".concat(maxWidth, \"px\") : '100%';\n};\n/* IE11 does not respect max-width when using flex-grow + nested flex content, similar to https://github.com/philipwalton/flexbugs#flexbug-11\n * and https://github.com/philipwalton/flexbugs#flexbug-17.\n * This can be fixed by setting the basis to 100%, allowing shrinking and setting the min-width to the original flex-basis value\n * (or 0 if it was auto).\n * Alternatively since we're just setting the contents to fit parent container when grow is set to true, we can just change flex-basis\n * to 100% and not worry about shrinking or growing.\n * See AK-4285.\n */\n\n\nexport var ContentWrapper = styled.div.withConfig({\n  displayName: \"Content__ContentWrapper\",\n  componentId: \"ve26fj-2\"\n})([\"\\n  \", \" \", \" \", \" max-width: \", \";\\n\"], function (props) {\n  return props.disabled && \"\\n      cursor: not-allowed;\\n    \";\n}, function (props) {\n  return props.grow ? css([\"\\n        flex: 0 0 \", \";\\n      \"], getMaxWidth(props.maxWidth)) : \"\\n          flex: 0 0 auto;\\n        \";\n}, function (props) {\n  return props.grow ? \"\\n          display: block;\\n        \" : \"\\n          display: inline-block;\\n          vertical-align: top;\\n        \";\n}, function (props) {\n  return getMaxWidth(props.maxWidth);\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport styled from 'styled-components';\nimport React, { Component } from 'react';\nimport { colors } from '@atlaskit/theme';\nimport Spinner from '@atlaskit/spinner';\nimport Icon from '@atlaskit/icon/glyph/warning'; // exported for testing\n\nexport var WarningIcon = styled.div.withConfig({\n  displayName: \"ValidationElement__WarningIcon\",\n  componentId: \"sc-1fk9yms-0\"\n})([\"\\n  align-items: center;\\n  color: \", \";\\n  display: flex;\\n  flex-shrink: 0;\\n\"], colors.yellow); // Spinner needs set height to avoid height jumping\n// Also needs a margin so there is space between it and preceding text\n\nvar SpinnerParent = styled.div.withConfig({\n  displayName: \"ValidationElement__SpinnerParent\",\n  componentId: \"sc-1fk9yms-1\"\n})([\"\\n  height: 20px;\\n  margin-left: 10px;\\n\"]);\n\nvar ValidationElement =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(ValidationElement, _Component);\n\n  function ValidationElement() {\n    _classCallCheck(this, ValidationElement);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(ValidationElement).apply(this, arguments));\n  }\n\n  _createClass(ValidationElement, [{\n    key: \"render\",\n    value: function render() {\n      if (!this.props.isDisabled && this.props.isInvalid) {\n        return React.createElement(WarningIcon, null, React.createElement(Icon, {\n          label: \"warning\"\n        }));\n      }\n\n      return this.props.isLoading ? React.createElement(SpinnerParent, null, React.createElement(Spinner, {\n        size: \"small\"\n      })) : null;\n    }\n  }]);\n\n  return ValidationElement;\n}(Component);\n\n_defineProperty(ValidationElement, \"defaultProps\", {\n  isDisabled: false,\n  isInvalid: false,\n  isLoading: false\n});\n\nexport { ValidationElement as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport { Content, ContentWrapper, ChildWrapper } from '../styled/Content';\nimport ValidationElement from './ValidationElement';\n\nvar FieldBaseStateless =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(FieldBaseStateless, _Component);\n\n  function FieldBaseStateless() {\n    _classCallCheck(this, FieldBaseStateless);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(FieldBaseStateless).apply(this, arguments));\n  }\n\n  _createClass(FieldBaseStateless, [{\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      if (this.props.shouldReset) {\n        this.props.onBlur();\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          children = _this$props.children,\n          invalidMessage = _this$props.invalidMessage,\n          isCompact = _this$props.isCompact,\n          isDialogOpen = _this$props.isDialogOpen,\n          isDisabled = _this$props.isDisabled,\n          isFitContainerWidthEnabled = _this$props.isFitContainerWidthEnabled,\n          isFocused = _this$props.isFocused,\n          isInvalid = _this$props.isInvalid,\n          isLoading = _this$props.isLoading,\n          isPaddingDisabled = _this$props.isPaddingDisabled,\n          isReadOnly = _this$props.isReadOnly,\n          maxWidth = _this$props.maxWidth,\n          onBlur = _this$props.onBlur,\n          onDialogBlur = _this$props.onDialogBlur,\n          onDialogClick = _this$props.onDialogClick,\n          onDialogFocus = _this$props.onDialogFocus,\n          onFocus = _this$props.onFocus,\n          isValidationHidden = _this$props.isValidationHidden;\n\n      function getAppearance(a) {\n        if (isDisabled) return 'disabled';\n        if (isInvalid) return 'invalid';\n        return a;\n      }\n\n      return React.createElement(ContentWrapper, {\n        disabled: isDisabled,\n        maxWidth: maxWidth,\n        grow: isFitContainerWidthEnabled\n      }, React.createElement(InlineDialog, {\n        content: invalidMessage,\n        isOpen: isDialogOpen && !!invalidMessage && !isValidationHidden,\n        onContentBlur: onDialogBlur,\n        onContentClick: onDialogClick,\n        onContentFocus: onDialogFocus,\n        placement: \"right\"\n      }, React.createElement(ChildWrapper, {\n        compact: isCompact\n      }, React.createElement(Content, {\n        appearance: getAppearance(appearance),\n        compact: isCompact,\n        disabled: isDisabled,\n        isFocused: isFocused,\n        invalid: isInvalid && !isFocused,\n        none: appearance === 'none',\n        onBlurCapture: onBlur,\n        onFocusCapture: onFocus,\n        paddingDisabled: isPaddingDisabled,\n        readOnly: isReadOnly,\n        subtle: appearance === 'subtle'\n      }, children, !isValidationHidden ? React.createElement(ValidationElement, {\n        isDisabled: isDisabled,\n        isInvalid: isInvalid,\n        isLoading: isLoading\n      }) : null))));\n    }\n  }]);\n\n  return FieldBaseStateless;\n}(Component);\n\n_defineProperty(FieldBaseStateless, \"defaultProps\", {\n  appearance: 'standard',\n  invalidMessage: '',\n  isCompact: false,\n  isDialogOpen: false,\n  isDisabled: false,\n  isFitContainerWidthEnabled: false,\n  isFocused: false,\n  isInvalid: false,\n  isLoading: false,\n  isPaddingDisabled: false,\n  isReadOnly: false,\n  onDialogBlur: function onDialogBlur() {},\n  onDialogClick: function onDialogClick() {},\n  onDialogFocus: function onDialogFocus() {},\n  shouldReset: false,\n  isValidationHidden: false\n});\n\nexport { FieldBaseStateless as default };","import styled from 'styled-components';\nexport var Container = styled.div.withConfig({\n  displayName: \"styled__Container\",\n  componentId: \"sc-10k86ql-0\"\n})([\"\\n  display: flex;\\n  flex-wrap: wrap;\\n  justify-content: \", \";\\n  width: 100%;\\n\"], function (_ref) {\n  var justify = _ref.justify;\n  return \"flex-\".concat(justify);\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { PureComponent } from 'react';\nimport { Container } from './styled';\n\nvar TagGroup =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(TagGroup, _PureComponent);\n\n  function TagGroup() {\n    _classCallCheck(this, TagGroup);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(TagGroup).apply(this, arguments));\n  }\n\n  _createClass(TagGroup, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          alignment = _this$props.alignment,\n          children = _this$props.children;\n      return React.createElement(Container, {\n        justify: alignment\n      }, children);\n    }\n  }]);\n\n  return TagGroup;\n}(PureComponent);\n\n_defineProperty(TagGroup, \"defaultProps\", {\n  alignment: 'start'\n});\n\nexport { TagGroup as default };","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return _toConsumableArray(ancestorData).concat([data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_assertThisInitialized(_this)), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}","import { gridSize, themed, colors } from '@atlaskit/theme';\nexport var focusRingColor = themed({\n  light: colors.B100,\n  dark: colors.B75\n});\nexport var tagHeightUnitless = 2.5 * gridSize();\nexport var tagHeight = \"\".concat(tagHeightUnitless, \"px\");\nexport var buttonWidthUnitless = tagHeightUnitless; // button should be square\n\nexport var buttonWidth = tagHeight; // button should be square\n\nexport var maxWidthUnitless = 25 * gridSize();\nexport var maxWidth = \"\".concat(maxWidthUnitless, \"px\");\nexport var maxTextWidthUnitless = maxWidthUnitless - tagHeightUnitless;\nexport var maxTextWidth = \"\".concat(maxTextWidthUnitless, \"px\");","import { colors, themed } from '@atlaskit/theme';\nvar textColors = themed('color', {\n  standard: {\n    light: colors.N700,\n    dark: colors.DN600\n  },\n  green: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  purple: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  red: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  yellow: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  grey: {\n    light: colors.N0,\n    dark: colors.N0\n  },\n  teal: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  blue: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  tealLight: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  blueLight: {\n    light: colors.B500,\n    dark: colors.B500\n  },\n  greenLight: {\n    light: colors.G500,\n    dark: colors.G500\n  },\n  purpleLight: {\n    light: colors.P500,\n    dark: colors.P500\n  },\n  redLight: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  yellowLight: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  greyLight: {\n    light: colors.N500,\n    dark: colors.N500\n  }\n});\nvar backgroundColors = themed('color', {\n  standard: {\n    light: colors.N20,\n    dark: colors.DN100A\n  },\n  green: {\n    light: colors.G200,\n    dark: colors.G200\n  },\n  purple: {\n    light: colors.P100,\n    dark: colors.P100\n  },\n  red: {\n    light: colors.R100,\n    dark: colors.R100\n  },\n  yellow: {\n    light: colors.Y200,\n    dark: colors.Y200\n  },\n  grey: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  teal: {\n    light: colors.T200,\n    dark: colors.T200\n  },\n  blue: {\n    light: colors.B100,\n    dark: colors.B100\n  },\n  tealLight: {\n    light: colors.T100,\n    dark: colors.T100\n  },\n  blueLight: {\n    light: colors.B75,\n    dark: colors.B75\n  },\n  greenLight: {\n    light: colors.G100,\n    dark: colors.G100\n  },\n  purpleLight: {\n    light: colors.P75,\n    dark: colors.P75\n  },\n  redLight: {\n    light: colors.R75,\n    dark: colors.R75\n  },\n  yellowLight: {\n    light: colors.Y100,\n    dark: colors.Y100\n  },\n  greyLight: {\n    light: colors.N30,\n    dark: colors.N30\n  }\n});\nexport var textColor = textColors;\nexport var backgroundColor = backgroundColors;\nexport var textColorHover = themed('color', {\n  standard: {\n    light: colors.N700,\n    dark: colors.B75\n  },\n  green: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  purple: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  red: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  yellow: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  grey: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  teal: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  blue: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  tealLight: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  blueLight: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  greenLight: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  purpleLight: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  redLight: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  yellowLight: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  greyLight: {\n    light: colors.B400,\n    dark: colors.B100\n  }\n});\nexport var backgroundColorHover = themed('color', {\n  standard: {\n    light: colors.N30,\n    dark: colors.DN60\n  },\n  green: {\n    light: colors.G100,\n    dark: colors.DN60\n  },\n  purple: {\n    light: colors.P75,\n    dark: colors.DN60\n  },\n  red: {\n    light: colors.R75,\n    dark: colors.DN60\n  },\n  yellow: {\n    light: colors.Y100,\n    dark: colors.DN60\n  },\n  grey: {\n    light: colors.N50,\n    dark: colors.DN60\n  },\n  teal: {\n    light: colors.T100,\n    dark: colors.DN60\n  },\n  blue: {\n    light: colors.B75,\n    dark: colors.DN60\n  },\n  tealLight: {\n    light: colors.T75,\n    dark: colors.DN60\n  },\n  blueLight: {\n    light: colors.B50,\n    dark: colors.DN60\n  },\n  greenLight: {\n    light: colors.G75,\n    dark: colors.DN60\n  },\n  purpleLight: {\n    light: colors.P50,\n    dark: colors.DN60\n  },\n  redLight: {\n    light: colors.R50,\n    dark: colors.DN60\n  },\n  yellowLight: {\n    light: colors.Y75,\n    dark: colors.DN60\n  },\n  greyLight: {\n    light: colors.N30,\n    dark: colors.DN60\n  }\n});","import styled from 'styled-components';\nimport { colors, themed, gridSize, borderRadius } from '@atlaskit/theme';\nimport { buttonWidthUnitless, tagHeight, focusRingColor } from '../constants';\nimport { backgroundColor, backgroundColorHover, textColor, textColorHover } from '../theme';\nvar gridSizeUnitless = gridSize();\nvar colorRemoval = themed({\n  light: colors.R500,\n  dark: colors.DN30\n});\nvar colorRemovalHover = themed({\n  light: colors.N700,\n  dark: colors.DN30\n});\nvar backgroundColorRemoval = themed({\n  light: colors.R50,\n  dark: colors.R100\n});\nexport var Span = styled.span.withConfig({\n  displayName: \"styled__Span\",\n  componentId: \"sc-19s9he1-0\"\n})([\"\\n  &:focus {\\n    box-shadow: 0 0 0 2px \", \";\\n    outline: none;\\n  }\\n\\n  background-color: \", \";\\n  color: \", \";\\n  border-radius: \", \";\\n  cursor: default;\\n  display: flex;\\n  height: \", \";\\n  line-height: 1;\\n  margin: \", \"px;\\n  padding: 0;\\n  overflow: \", \";\\n\\n  &:hover {\\n    box-shadow: none;\\n    background-color: \", \";\\n    color: \", \";\\n  }\\n\"], focusRingColor, function (p) {\n  return p.markedForRemoval ? backgroundColorRemoval(p) : backgroundColor(p);\n}, function (p) {\n  return p.markedForRemoval ? colorRemoval(p) : textColor(p);\n}, function (_ref) {\n  var isRounded = _ref.isRounded;\n  return isRounded ? \"\".concat(buttonWidthUnitless / 2, \"px\") : \"\".concat(borderRadius(), \"px\");\n}, tagHeight, gridSizeUnitless / 2, function (_ref2) {\n  var isRemoved = _ref2.isRemoved,\n      isRemoving = _ref2.isRemoving;\n  return isRemoved || isRemoving ? 'hidden' : 'initial';\n}, function (p) {\n  return p.markedForRemoval ? backgroundColorRemoval(p) : backgroundColorHover(p);\n}, function (p) {\n  return p.markedForRemoval ? colorRemovalHover(p) : textColorHover(p);\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { PureComponent } from 'react';\nimport { Span } from './styled';\n\nvar Chrome =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(Chrome, _PureComponent);\n\n  function Chrome() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Chrome);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Chrome)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"chromeRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleKeyPress\", function (e) {\n      var spacebarOrEnter = e.key === ' ' || e.key === 'Enter';\n\n      if (_this.chromeRef && spacebarOrEnter) {\n        var link = _this.chromeRef.querySelector('a');\n\n        if (link) link.click();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleBlur\", function () {\n      _this.props.onFocusChange(false);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleFocus\", function (e) {\n      if (e.target === _this.chromeRef) _this.props.onFocusChange(true);\n    });\n\n    return _this;\n  }\n\n  _createClass(Chrome, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          children = _this$props.children,\n          isLink = _this$props.isLink,\n          isRemovable = _this$props.isRemovable,\n          isRemoved = _this$props.isRemoved,\n          isRemoving = _this$props.isRemoving,\n          isRounded = _this$props.isRounded,\n          markedForRemoval = _this$props.markedForRemoval,\n          color = _this$props.color;\n      var props = {\n        innerRef: function innerRef(r) {\n          _this2.chromeRef = r;\n        },\n        isRemovable: isRemovable,\n        isRemoved: isRemoved,\n        isRemoving: isRemoving,\n        isRounded: isRounded,\n        markedForRemoval: markedForRemoval,\n        onBlur: this.handleBlur,\n        onFocus: this.handleFocus,\n        onKeyPress: this.handleKeyPress,\n        tabIndex: -1,\n        color: color,\n        role: ''\n      };\n\n      if (isLink) {\n        props.role = 'link';\n        props.tabIndex = 0;\n      }\n\n      return React.createElement(Span, props, children);\n    }\n  }]);\n\n  return Chrome;\n}(PureComponent);\n\nexport { Chrome as default };","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport styled, { css } from 'styled-components';\nimport { gridSize, fontSize, colors, math } from '@atlaskit/theme';\nimport { buttonWidthUnitless, maxTextWidth, maxTextWidthUnitless } from '../constants'; // Common styles for Text & Link\n\nvar COMMON_STYLES = css([\"\\n  font-size: \", \"px;\\n  font-weight: normal;\\n  line-height: 1;\\n  margin-left: \", \"px;\\n  margin-right: \", \"px;\\n  padding: 2px 0;\\n  max-width: \", \";\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n\"], fontSize, math.divide(gridSize, 2), math.divide(gridSize, 2), function (_ref) {\n  var isRemovable = _ref.isRemovable;\n  return isRemovable ? \"\".concat(maxTextWidthUnitless - buttonWidthUnitless, \"px\") : maxTextWidth;\n});\nexport var Text = styled.span.withConfig({\n  displayName: \"styled__Text\",\n  componentId: \"sc-17jb35i-0\"\n})([\"\\n  \", \";\\n\"], COMMON_STYLES); // Styles exclusive to Link\n\nvar getFocusedStyles = function getFocusedStyles(_ref2) {\n  var isFocused = _ref2.isFocused,\n      color = _ref2.color,\n      rest = _objectWithoutProperties(_ref2, [\"isFocused\", \"color\"]);\n\n  if (color !== 'standard') return css([\"\\n      color: inherit;\\n    \"]);\n  if (isFocused) return css([\"\\n      color: \", \";\\n    \"], colors.link(rest));\n  return null;\n};\n\nexport var linkStyles = css([\"\\n  \", \" \", \" text-decoration: \", \";\\n\\n  &:hover {\\n    color: \", \";\\n    \", \";\\n  }\\n\"], COMMON_STYLES, getFocusedStyles, function (_ref3) {\n  var color = _ref3.color;\n  return color === 'standard' ? 'none' : 'underline';\n}, colors.linkHover, function (_ref4) {\n  var color = _ref4.color;\n  return color === 'standard' ? '' : css([\"\\n            color: inherit;\\n          \"]);\n});\nexport var Link = styled.a.withConfig({\n  displayName: \"styled__Link\",\n  componentId: \"sc-17jb35i-1\"\n})([\"\\n  \", \";\\n\"], linkStyles);","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport styled from 'styled-components';\nimport { Link, Text, linkStyles } from './styled';\n\nvar Content =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Content, _Component);\n\n  function Content() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Content);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Content)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getLinkComponent\", function () {\n      var _this$props = _this.props,\n          linkComponent = _this$props.linkComponent,\n          href = _this$props.href;\n      if (!href) return null;\n      if (linkComponent) return styled(linkComponent).withConfig({\n        displayName: \"Content\",\n        componentId: \"nijpvw-0\"\n      })([\"\\n        \", \";\\n      \"], linkStyles);\n      return Link;\n    });\n\n    return _this;\n  }\n\n  _createClass(Content, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props2 = this.props,\n          children = _this$props2.children,\n          href = _this$props2.href,\n          isFocused = _this$props2.isFocused,\n          isRemovable = _this$props2.isRemovable,\n          markedForRemoval = _this$props2.markedForRemoval,\n          color = _this$props2.color;\n      var styledProps = {\n        isFocused: isFocused,\n        isRemovable: isRemovable,\n        markedForRemoval: markedForRemoval,\n        color: color\n      };\n      var LinkComponent = this.getLinkComponent();\n      return href && LinkComponent ? React.createElement(LinkComponent, _extends({}, styledProps, {\n        href: href,\n        tabIndex: \"-1\"\n      }), children) : React.createElement(Text, styledProps, children);\n    }\n  }]);\n\n  return Content;\n}(Component);\n\nexport { Content as default };","import styled from 'styled-components';\nimport { colors, borderRadius, themed } from '@atlaskit/theme';\nimport { buttonWidthUnitless, focusRingColor } from '../constants';\nvar focusColor = themed({\n  light: colors.R300,\n  dark: colors.R200\n}); // NOTE:\n// \"-moz-focus-inner\" removes some inbuilt padding that Firefox adds (taken from reduced-ui-pack)\n// the focus ring is red unless combined with hover, then uses default blue\n\nexport var Button = styled.button.withConfig({\n  displayName: \"styled__Button\",\n  componentId: \"sc-1cs6xoa-0\"\n})([\"\\n  align-items: center;\\n  appearance: none;\\n  background: none;\\n  border: none;\\n  border-radius: \", \";\\n  color: \", \";\\n  display: flex;\\n  justify-content: center;\\n  margin: 0;\\n  padding: 0;\\n\\n  &::-moz-focus-inner {\\n    border: 0;\\n    margin: 0;\\n    padding: 0;\\n  }\\n\\n  &:focus {\\n    box-shadow: 0 0 0 2px \", \";\\n    outline: none;\\n  }\\n\\n  &:hover {\\n    color: \", \";\\n\\n    &:focus {\\n      box-shadow: 0 0 0 2px \", \";\\n      outline: none;\\n    }\\n  }\\n\"], function (_ref) {\n  var isRounded = _ref.isRounded;\n  return isRounded ? \"\".concat(buttonWidthUnitless / 2, \"px\") : \"\".concat(borderRadius(), \"px\");\n}, colors.N500, focusColor, colors.R500, focusRingColor);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { PureComponent } from 'react';\nimport RemoveIcon from '@atlaskit/icon/glyph/cross';\nimport { Button } from './styled';\n\nvar RemoveButton =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(RemoveButton, _PureComponent);\n\n  function RemoveButton() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, RemoveButton);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(RemoveButton)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onKeyPress\", function (e) {\n      var spacebarOrEnter = e.key === ' ' || e.key === 'Enter';\n\n      if (spacebarOrEnter) {\n        e.stopPropagation();\n\n        if (_this.props.onRemoveAction) {\n          _this.props.onRemoveAction();\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMouseOver\", function () {\n      if (_this.props.onHoverChange) _this.props.onHoverChange(true);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMouseOut\", function () {\n      if (_this.props.onHoverChange) _this.props.onHoverChange(false);\n    });\n\n    return _this;\n  }\n\n  _createClass(RemoveButton, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          isRounded = _this$props.isRounded,\n          onRemoveAction = _this$props.onRemoveAction,\n          removeText = _this$props.removeText;\n      return React.createElement(Button, {\n        \"aria-label\": removeText,\n        isRounded: isRounded,\n        onClick: onRemoveAction,\n        onKeyPress: this.onKeyPress,\n        onMouseOut: this.onMouseOut,\n        onMouseOver: this.onMouseOver,\n        type: \"button\"\n      }, React.createElement(RemoveIcon, {\n        label: removeText,\n        size: \"small\"\n      }));\n    }\n  }]);\n\n  return RemoveButton;\n}(PureComponent);\n\nexport { RemoveButton as default };","import styled from 'styled-components';\nimport { gridSize } from '@atlaskit/theme';\nvar gridSizeUnitless = gridSize();\nexport default styled.span.withConfig({\n  displayName: \"styledBefore\",\n  componentId: \"p1bbkq-0\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n  justify-content: center;\\n  padding-left: \", \"px;\\n\"], gridSizeUnitless / 2);","import styled, { keyframes } from 'styled-components';\nimport { maxWidth, maxWidthUnitless } from '../constants';\nvar removeAnimation = keyframes([\"\\n  0% {\\n    animation-timing-function: cubic-bezier(0.23830050393398, 0, 0.25586732616931, 0.79011192334632);\\n    max-width: \", \";\\n  }\\n  20% {\\n    animation-timing-function: cubic-bezier(0.21787238302442, 0.98324004924648, 0.58694150667646, 1);\\n    max-width: \", \"px;\\n  }\\n  100% { max-width: 0; }\\n\"], maxWidth, maxWidthUnitless * 0.8);\n\nfunction getRemovedStyles(_ref) {\n  var isRemoved = _ref.isRemoved;\n  var styles;\n  if (isRemoved) styles = 'width: 0; visibility: hidden;';\n  return styles;\n}\n\nfunction getRemovingStyles(_ref2) {\n  var isRemoving = _ref2.isRemoving;\n  var styles;\n  if (isRemoving) styles = \"animation: \".concat(removeAnimation, \" 250ms forwards; will-change: width;\");\n  return styles;\n}\n\nexport default styled.div.withConfig({\n  displayName: \"styledContainer\",\n  componentId: \"sc-1dgacol-0\"\n})([\"\\n  box-sizing: border-box;\\n  display: inline-block;\\n\\n  \", \" \", \";\\n\"], getRemovingStyles, getRemovedStyles);","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport Chrome from '../Chrome';\nimport Content from '../Content';\nimport RemoveButton from '../RemoveButton';\nimport Before from './styledBefore';\nimport Container from './styledContainer';\nvar colorList = ['standard', 'green', 'blue', 'red', 'purple', 'grey', 'teal', 'yellow', 'greenLight', 'blueLight', 'redLight', 'purpleLight', 'greyLight', 'tealLight', 'yellowLight'];\n\nvar Tag =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Tag, _Component);\n\n  function Tag() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Tag);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Tag)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      isRemoving: false,\n      isRemoved: false,\n      markedForRemoval: false,\n      isFocused: false\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleRemoveRequest\", function () {\n      if (_this.props.onBeforeRemoveAction && _this.props.onBeforeRemoveAction()) {\n        _this.setState({\n          isRemoving: true,\n          isRemoved: false\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleRemoveComplete\", function () {\n      if (_this.props.onAfterRemoveAction) {\n        _this.props.onAfterRemoveAction(_this.props.text);\n      }\n\n      _this.setState({\n        isRemoving: false,\n        isRemoved: true\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleHoverChange\", function (hoverState) {\n      _this.setState({\n        markedForRemoval: hoverState\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleFocusChange\", function (focusState) {\n      _this.setState({\n        isFocused: focusState\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(Tag, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$state = this.state,\n          isFocused = _this$state.isFocused,\n          isRemoved = _this$state.isRemoved,\n          isRemoving = _this$state.isRemoving,\n          markedForRemoval = _this$state.markedForRemoval;\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          elemBefore = _this$props.elemBefore,\n          href = _this$props.href,\n          removeButtonText = _this$props.removeButtonText,\n          text = _this$props.text,\n          color = _this$props.color,\n          linkComponent = _this$props.linkComponent;\n      var safeColor = colorList.includes(color) ? color : 'standard';\n      var isRemovable = Boolean(removeButtonText);\n      var isRounded = appearance === 'rounded';\n      var styled = {\n        isFocused: isFocused,\n        isRemovable: isRemovable,\n        isRemoved: isRemoved,\n        isRemoving: isRemoving,\n        isRounded: isRounded,\n        markedForRemoval: markedForRemoval,\n        color: safeColor\n      };\n\n      var onAnimationEnd = function onAnimationEnd() {\n        return isRemoving && _this2.handleRemoveComplete();\n      };\n\n      return React.createElement(Container, _extends({}, styled, {\n        onAnimationEnd: onAnimationEnd\n      }), React.createElement(Chrome, _extends({}, styled, {\n        isLink: !!href,\n        onFocusChange: this.handleFocusChange\n      }), elemBefore ? React.createElement(Before, null, elemBefore) : null, React.createElement(Content, _extends({\n        linkComponent: linkComponent\n      }, styled, {\n        href: href\n      }), text), isRemovable ? React.createElement(RemoveButton, _extends({}, styled, {\n        onHoverChange: this.handleHoverChange,\n        onRemoveAction: this.handleRemoveRequest,\n        removeText: removeButtonText\n      })) : null));\n    }\n  }]);\n\n  return Tag;\n}(Component);\n\n_defineProperty(Tag, \"defaultProps\", {\n  color: 'standard',\n  appearance: 'default',\n  elemBefore: null,\n  onAfterRemoveAction: function onAfterRemoveAction() {},\n  onBeforeRemoveAction: function onBeforeRemoveAction() {\n    return true;\n  }\n});\n\nexport { Tag as TagWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'tag',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onAfterRemoveAction: createAndFireEventOnAtlaskit({\n    action: 'removed',\n    actionSubject: 'tag',\n    attributes: {\n      componentName: 'tag',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Tag));","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","import styled, { css } from 'styled-components';\nimport { fontSize, gridSize, colors } from '@atlaskit/theme';\nvar gridSizeUnitless = gridSize();\nvar lineHeightDefault = gridSizeUnitless * 2 / fontSize();\n\nvar getPlaceholderStyle = function getPlaceholderStyle(style) {\n  return css([\"\\n  &::-webkit-input-placeholder {\\n    /* WebKit, Blink, Edge */\\n    \", \";\\n  }\\n  &::-moz-placeholder {\\n    /* Mozilla Firefox 19+ */\\n    \", \" opacity: 1;\\n  }\\n  &::-ms-input-placeholder {\\n    /* Microsoft Edge */\\n    \", \";\\n  }\\n  &:-moz-placeholder {\\n    /* Mozilla Firefox 4 to 18 */\\n    \", \" opacity: 1;\\n  }\\n  &:-ms-input-placeholder {\\n    /* Internet Explorer 10-11 */\\n    \", \";\\n  }\\n\"], style, style, style, style, style);\n};\n\nvar getPlaceholderColor = css([\"\\n  color: \", \";\\n\"], colors.placeholderText);\nvar Content = styled.div.withConfig({\n  displayName: \"Trigger__Content\",\n  componentId: \"p117u5-0\"\n})([\"\\n  flex: 1 1 auto;\\n  margin: 3px \", \"px; /* magic number to make multi-select the same height as field-text, to be fixed TODO: AK-1699 */\\n  white-space: nowrap;\\n  width: 100%;\\n\"], gridSizeUnitless);\nvar Expand = styled.div.withConfig({\n  displayName: \"Trigger__Expand\",\n  componentId: \"p117u5-1\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n  flex: 0 0 \", \"px;\\n  justify-content: center;\\n  margin: 0 \", \"px;\\n\"], gridSizeUnitless * 3, gridSizeUnitless);\nvar Input = styled.input.withConfig({\n  displayName: \"Trigger__Input\",\n  componentId: \"p117u5-2\"\n})([\"\\n  display: inline-block;\\n  flex: 1 0 10px;\\n  margin: 0;\\n  padding: 0;\\n  outline: 0;\\n  border: 0;\\n  background: none;\\n  align-self: center;\\n  font-size: \", \"px;\\n  line-height: \", \";\\n  color: \", \";\\n\\n  \", \";\\n\"], fontSize, lineHeightDefault, colors.text, getPlaceholderStyle(getPlaceholderColor));\nvar TriggerDiv = styled.div.withConfig({\n  displayName: \"Trigger__TriggerDiv\",\n  componentId: \"p117u5-3\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n  width: 100%;\\n  min-height: 37px; /* magic number to make multi-select the same height as field-text, to be fixed TODO: AK-1699 */\\n\\n  \", \";\\n\"], function (_ref) {\n  var isDisabled = _ref.isDisabled;\n  return isDisabled ? css([\"\\n          cursor: not-allowed;\\n        \"]) : '';\n});\nexport { Content, Expand, TriggerDiv, Input };","// =============================================================\n// NOTE: Duplicated in ../index and ../StatelessMultiSelect until\n// docgen can follow imports.\n// -------------------------------------------------------------\n// DO NOT update values here without updating the other.\n// =============================================================\nexport var appearances = {\n  values: ['default', 'subtle'],\n  default: 'default'\n};\nvar appearancesMap = {\n  default: 'standard',\n  subtle: 'subtle'\n};\nexport var mapAppearanceToFieldBase = function mapAppearanceToFieldBase(appearance) {\n  return appearancesMap[appearance];\n};","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { PureComponent } from 'react';\nimport { FieldBaseStateless } from '@atlaskit/field-base';\nimport TagGroup from '@atlaskit/tag-group';\nimport Tag from '@atlaskit/tag';\nimport ExpandIcon from '@atlaskit/icon/glyph/chevron-down';\nimport Spinner from '@atlaskit/spinner';\nimport { Content, Expand, Input, TriggerDiv } from '../styled/Trigger';\nimport { mapAppearanceToFieldBase } from '../internal/appearances';\n\nvar Trigger =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(Trigger, _PureComponent);\n\n  function Trigger() {\n    _classCallCheck(this, Trigger);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(Trigger).apply(this, arguments));\n  }\n\n  _createClass(Trigger, [{\n    key: \"render\",\n    // disabled because all of the accessibility is handled manually\n\n    /* eslint-disable jsx-a11y/no-static-element-interactions */\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          filterValue = _this$props.filterValue,\n          handleItemRemove = _this$props.handleItemRemove,\n          handleOnChange = _this$props.handleOnChange,\n          handleTriggerClick = _this$props.handleTriggerClick,\n          inputRefFunction = _this$props.inputRefFunction,\n          icon = _this$props.icon,\n          isDisabled = _this$props.isDisabled,\n          isFocused = _this$props.isFocused,\n          isInvalid = _this$props.isInvalid,\n          invalidMessage = _this$props.invalidMessage,\n          isLoading = _this$props.isLoading,\n          isRequired = _this$props.isRequired,\n          onBlur = _this$props.onBlur,\n          onFocus = _this$props.onFocus,\n          placeholder = _this$props.placeholder,\n          selectedItems = _this$props.selectedItems,\n          tagGroupRefFunction = _this$props.tagGroupRefFunction;\n      return React.createElement(FieldBaseStateless, {\n        appearance: mapAppearanceToFieldBase(appearance),\n        isDisabled: isDisabled,\n        isFitContainerWidthEnabled: true,\n        isDialogOpen: isFocused,\n        isFocused: isFocused,\n        isInvalid: isInvalid,\n        invalidMessage: invalidMessage,\n        isPaddingDisabled: true,\n        isRequired: isRequired,\n        onBlur: onBlur,\n        onFocus: onFocus\n      }, React.createElement(TriggerDiv, {\n        isDisabled: isDisabled,\n        onClick: handleTriggerClick\n      }, React.createElement(Content, null, React.createElement(TagGroup, {\n        ref: tagGroupRefFunction\n      }, selectedItems.map(function (item) {\n        return React.createElement(Tag, {\n          appearance: item.tag ? item.tag.appearance : undefined,\n          elemBefore: item.tag ? item.tag.elemBefore : undefined,\n          key: item.value,\n          onAfterRemoveAction: function onAfterRemoveAction() {\n            handleItemRemove(item);\n          },\n          removeButtonText: isDisabled ? undefined : \"\".concat(item.content, \", remove\"),\n          text: item.content\n        });\n      }), isDisabled ? null : React.createElement(Input, {\n        disabled: isDisabled,\n        onChange: handleOnChange,\n        placeholder: placeholder,\n        innerRef: inputRefFunction,\n        type: \"text\",\n        value: filterValue\n      }))), React.createElement(Expand, null, isFocused && isLoading ? React.createElement(Spinner, null) : icon)));\n    }\n    /* eslint-enable jsx-a11y/no-static-element-interactions */\n\n  }]);\n\n  return Trigger;\n}(PureComponent);\n\n_defineProperty(Trigger, \"defaultProps\", {\n  isDisabled: false,\n  isLoading: false,\n  onClick: function onClick() {},\n  icon: React.createElement(ExpandIcon, {\n    label: \"\"\n  })\n});\n\nexport { Trigger as default };","import styled, { css } from 'styled-components';\nimport { colors, fontSize, gridSize, math, themed } from '@atlaskit/theme';\nvar activeBackgroundColor = themed({\n  light: colors.B75,\n  dark: colors.DN30\n});\nvar hoverBackgroundColor = themed({\n  light: colors.N20,\n  dark: colors.DN60\n});\nvar selectedBackgroundColor = themed({\n  light: colors.N0,\n  dark: colors.DN30\n});\nvar activePrimaryTextColor = themed({\n  light: colors.N800,\n  dark: colors.DN300\n});\nvar defaultPrimaryTextColor = themed({\n  light: colors.N800,\n  dark: colors.DN600\n});\nvar disabledPrimaryTextColor = themed({\n  light: colors.N70,\n  dark: colors.DN70\n});\nvar primaryPrimaryTextColor = themed({\n  light: colors.B400,\n  dark: colors.B400\n});\nvar selectedPrimaryTextColor = themed({\n  light: colors.N800,\n  dark: colors.N800\n});\nvar focusedStyles = css([\"\\n  box-shadow: 0 0 0 2px \", \"\\n    inset;\\n  outline: none;\\n  outline-offset: 0;\\n  position: relative; /* prevents bgcolor of a hovered element from obfuscating focus ring of a focused sibling element */\\n\"], themed({\n  light: colors.B100,\n  dark: colors.B75\n}));\nvar activeStyles = css([\"\\n  &,\\n  &:hover {\\n    background-color: \", \";\\n    color: \", \";\\n  }\\n\"], selectedBackgroundColor, selectedPrimaryTextColor);\nvar primaryStyles = css([\"\\n  color: \", \";\\n\"], primaryPrimaryTextColor);\n\nvar sharedStyles = function sharedStyles(props) {\n  return css([\"\\n  align-items: center;\\n  box-sizing: border-box;\\n  color: \", \";\\n  cursor: \", \";\\n  display: \", \";\\n  flex-wrap: nowrap;\\n  font-size: \", \"px;\\n  font-weight: normal;\\n  padding: 0 \", \"px;\\n  text-decoration: none;\\n\\n  &:hover {\\n    background-color: \", \";\\n    color: \", \";\\n    text-decoration: none;\\n\\n    \", \";\\n  }\\n  &:active {\\n    background-color: \", \";\\n    color: \", \";\\n\\n    \", \";\\n  }\\n  &:focus {\\n    \", \";\\n  }\\n\\n  \", \" \", \" \", \";\\n\"], props.isDisabled ? disabledPrimaryTextColor : defaultPrimaryTextColor, props.isDisabled ? 'not-allowed' : 'pointer', props.isHidden ? 'none' : 'flex', fontSize, math.multiply(gridSize, 1.5), !props.isDisabled && hoverBackgroundColor, props.isDisabled ? disabledPrimaryTextColor : defaultPrimaryTextColor, props.isPrimary && primaryStyles, !props.isDisabled && activeBackgroundColor, !props.isDisabled && activePrimaryTextColor, props.isPrimary && primaryStyles, focusedStyles, props.isFocused && focusedStyles, props.isActive && activeStyles, props.isPrimary && primaryStyles);\n};\n\nexport var Anchor = styled.a.withConfig({\n  displayName: \"Item__Anchor\",\n  componentId: \"aiqnor-0\"\n})([\"\\n  \", \";\\n\"], function (props) {\n  return sharedStyles(props);\n});\nexport var Span = styled.span.withConfig({\n  displayName: \"Item__Span\",\n  componentId: \"aiqnor-1\"\n})([\"\\n  \", \";\\n\"], function (props) {\n  return sharedStyles(props);\n}); // Checkbox/Radio wrapper -- sits left of the children\n\nexport var InputWrapper = styled.span.withConfig({\n  displayName: \"Item__InputWrapper\",\n  componentId: \"aiqnor-2\"\n})([\"\\n  display: flex;\\n  margin: 0 2px;\\n\"]); // Elements injected before/after the children\n\nexport var Before = styled.span.withConfig({\n  displayName: \"Item__Before\",\n  componentId: \"aiqnor-3\"\n})([\"\\n  display: flex;\\n\"]);\nexport var After = styled.span.withConfig({\n  displayName: \"Item__After\",\n  componentId: \"aiqnor-4\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n\"]); // Alignment and layout for the children\n\nexport var ContentWrapper = styled.span.withConfig({\n  displayName: \"Item__ContentWrapper\",\n  componentId: \"aiqnor-5\"\n})([\"\\n  display: flex;\\n  flex-direction: column;\\n  margin: 0 \", \"px;\\n  padding: \", \"px 0;\\n  overflow: hidden;\\n\\n  &:first-child {\\n    margin: 0;\\n  }\\n\"], gridSize, gridSize);\nexport var Content = styled.span.withConfig({\n  displayName: \"Item__Content\",\n  componentId: \"aiqnor-6\"\n})([\"\\n  flex: 1 1 auto;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n  \", \";\\n\"], function (props) {\n  return props.allowMultiline && css([\"\\n      white-space: normal;\\n    \"]);\n}); // Description is a block element below the children, like a subtitle\n\nexport var Description = styled.span.withConfig({\n  displayName: \"Item__Description\",\n  componentId: \"aiqnor-7\"\n})([\"\\n  color: \", \";\\n  flex: 1 1 auto;\\n  font-size: 12px;\\n  line-height: 16 / 12;\\n  margin-top: \", \"px;\\n\"], colors.subtleText, math.divide(gridSize, 2)); // NOTE: Exposed as a named export for this package\n\nexport var SecondaryText = styled.span.withConfig({\n  displayName: \"Item__SecondaryText\",\n  componentId: \"aiqnor-8\"\n})([\"\\n  color: \", \";\\n\"], colors.subtleText);","import { colors } from '@atlaskit/theme';\nexport function getInputBackground(_ref) {\n  var isChecked = _ref.isChecked,\n      isDisabled = _ref.isDisabled,\n      isHovered = _ref.isHovered,\n      isPressed = _ref.isPressed;\n  var background = colors.N40;\n  if (isHovered) background = colors.N50;\n  if (isPressed) background = colors.B200;\n  if (isChecked) background = colors.B400;\n  if (isDisabled) background = colors.N20;\n  if (isChecked && isDisabled) background = colors.N600;\n  return background;\n}\nexport function getInputFill(appearanceProps) {\n  return appearanceProps.isChecked ? colors.N0 : 'transparent';\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { PureComponent } from 'react';\nimport { Anchor, Span } from '../styled/Item';\nexport var supportsVoiceOver = function supportsVoiceOver() {\n  return /Mac OS X/.test(navigator.userAgent);\n};\nexport var getAriaRoles = function getAriaRoles() {\n  return {\n    checkbox: supportsVoiceOver() ? 'checkbox' : 'menuitemcheckbox',\n    link: 'menuitem',\n    option: 'option',\n    radio: supportsVoiceOver() ? 'radio' : 'menuitemradio'\n  };\n};\nexport var baseTypes = {\n  default: 'link',\n  values: ['link', 'radio', 'checkbox', 'option']\n};\n\nvar Element =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(Element, _PureComponent);\n\n  function Element() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Element);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Element)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseDown\", function (e) {\n      e.preventDefault();\n\n      _this.props.handleMouseDown();\n    });\n\n    return _this;\n  }\n\n  _createClass(Element, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      var isActive = props.isActive,\n          isChecked = props.isChecked,\n          isDisabled = props.isDisabled,\n          isFocused = props.isFocused,\n          isHidden = props.isHidden,\n          isSelected = props.isSelected,\n          isPrimary = props.isPrimary;\n      var type = this.props.type || '';\n      var appearanceProps = {\n        isActive: isActive,\n        isChecked: isChecked,\n        isDisabled: isDisabled,\n        isFocused: isFocused,\n        isHidden: isHidden,\n        isSelected: isSelected,\n        isPrimary: isPrimary\n      };\n      var ariaProps = {\n        'aria-checked': !!isChecked,\n        'aria-disabled': !!isDisabled,\n        'aria-hidden': !!isHidden,\n        'aria-selected': !!isSelected\n      };\n      var ariaRoles = getAriaRoles();\n      var commonProps = {\n        'data-role': 'droplistItem',\n        onClick: props.handleClick,\n        onKeyPress: props.handleKeyPress,\n        onMouseDown: this.handleMouseDown,\n        onMouseOut: props.handleMouseOut,\n        onMouseOver: props.handleMouseOver,\n        onMouseUp: props.handleMouseUp,\n        role: ariaRoles[type],\n        title: props.title,\n        tabIndex: props.type === 'option' ? null : 0\n      };\n      var testingProps = process.env.NODE_ENV === 'test' ? {\n        'data-test-active': isActive,\n        'data-test-checked': isChecked,\n        'data-test-disabled': isDisabled,\n        'data-test-hidden': isHidden,\n        'data-test-selected': isSelected\n      } : {};\n\n      var consolidatedProps = _objectSpread({}, appearanceProps, ariaProps, commonProps, testingProps);\n\n      if (props.href && !isDisabled) {\n        return React.createElement(Anchor, _extends({\n          href: props.href,\n          target: props.target\n        }, consolidatedProps), props.children);\n      }\n\n      return React.createElement(Span, consolidatedProps, props.children);\n    }\n  }]);\n\n  return Element;\n}(PureComponent);\n\nexport { Element as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport Radio from '@atlaskit/icon/glyph/radio';\nimport Checkbox from '@atlaskit/icon/glyph/checkbox';\nimport Tooltip from '@atlaskit/tooltip';\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport { After, Before, Content, ContentWrapper, Description, InputWrapper } from '../styled/Item';\nimport { getInputBackground, getInputFill } from '../utils';\nimport Element from './Element';\nvar inputTypes = {\n  checkbox: Checkbox,\n  radio: Radio\n};\n\nvar Item =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(Item, _PureComponent);\n\n  function Item() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Item);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Item)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      isHovered: false,\n      isPressed: false\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidMount\", function () {\n      return document.addEventListener('mouseup', _this.handleMouseUp);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentWillUnmount\", function () {\n      return document.removeEventListener('mouseup', _this.handleMouseUp);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"guardedActivate\", function (event) {\n      var _this$props = _this.props,\n          isDisabled = _this$props.isDisabled,\n          onActivate = _this$props.onActivate;\n      if (!isDisabled && onActivate) onActivate({\n        item: _assertThisInitialized(_assertThisInitialized(_this)),\n        event: event\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleClick\", function (event) {\n      return _this.guardedActivate(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleKeyPress\", function (event) {\n      var keyIsValid = ['Enter', ' '].indexOf(event.key) > -1;\n      if (keyIsValid) _this.guardedActivate(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseDown\", function () {\n      return _this.setState({\n        isPressed: true\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseUp\", function () {\n      return _this.setState({\n        isPressed: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseOut\", function () {\n      return _this.setState({\n        isHovered: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseOver\", function () {\n      return _this.setState({\n        isHovered: true\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(Item, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      var _this$state = this.state,\n          isHovered = _this$state.isHovered,\n          isPressed = _this$state.isPressed;\n      var type = props.type || '';\n      var hasInput = ['checkbox', 'radio'].indexOf(type) > -1;\n      var Input = inputTypes[type];\n      var appearanceProps = {\n        isActive: props.type === 'link' && props.isActive || props.type === 'option' && props.isSelected,\n        isChecked: ['checkbox', 'radio'].indexOf(type) > -1 && props.isChecked,\n        isDisabled: props.isDisabled,\n        isFocused: props.isFocused,\n        isHidden: props.isHidden,\n        isHovered: isHovered,\n        isPressed: isPressed,\n        isSelected: type === 'option' && props.isSelected,\n        isPrimary: props.appearance === 'primary'\n      };\n      var element = React.createElement(Element, _extends({}, appearanceProps, {\n        handleClick: this.handleClick,\n        handleKeyPress: this.handleKeyPress,\n        handleMouseOut: this.handleMouseOut,\n        handleMouseOver: this.handleMouseOver,\n        handleMouseUp: this.handleMouseUp,\n        handleMouseDown: this.handleMouseDown,\n        href: props.href,\n        target: props.target,\n        title: props.title,\n        type: props.type\n      }), hasInput && React.createElement(InputWrapper, appearanceProps, React.createElement(Input, {\n        label: \"\",\n        primaryColor: getInputBackground(appearanceProps),\n        secondaryColor: getInputFill(appearanceProps),\n        size: \"medium\"\n      })), !!props.elemBefore && React.createElement(Before, null, props.elemBefore), React.createElement(ContentWrapper, null, React.createElement(Content, {\n        allowMultiline: this.context.shouldAllowMultilineItems\n      }, props.children), !!props.description && React.createElement(Description, null, props.description)), !!props.elemAfter && React.createElement(After, null, props.elemAfter));\n      return React.createElement(\"span\", {\n        role: \"presentation\"\n      }, props.tooltipDescription ? React.createElement(Tooltip, {\n        content: props.tooltipDescription,\n        position: props.tooltipPosition\n      }, element) : element);\n    }\n  }]);\n\n  return Item;\n}(PureComponent);\n\n_defineProperty(Item, \"defaultProps\", {\n  appearance: 'default',\n  children: null,\n  description: '',\n  elemAfter: null,\n  elemBefore: null,\n  href: null,\n  isActive: false,\n  isChecked: false,\n  isDisabled: false,\n  isFocused: false,\n  isHidden: false,\n  isSelected: false,\n  itemContext: 'menu',\n  onActivate: function onActivate() {},\n  target: null,\n  title: null,\n  tooltipDescription: null,\n  tooltipPosition: 'right',\n  type: 'link'\n});\n\n_defineProperty(Item, \"contextTypes\", {\n  shouldAllowMultilineItems: PropTypes.bool\n});\n\nexport { Item as DroplistItemWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'droplistItem',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onActivate: createAndFireEventOnAtlaskit({\n    action: 'selected',\n    actionSubject: 'droplistItem',\n    attributes: {\n      componentName: 'droplistItem',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Item));","import styled from 'styled-components';\nimport { colors, gridSize } from '@atlaskit/theme';\nvar FooterDiv = styled.div.withConfig({\n  displayName: \"Footer__FooterDiv\",\n  componentId: \"sc-1xuos4y-0\"\n})([\"\\n  padding: \", \"px 0 \", \"px 0;\\n  border-top: \", \";\\n\"], gridSize(), gridSize() / 2, function (_ref) {\n  var shouldHideSeparator = _ref.shouldHideSeparator;\n  return shouldHideSeparator ? '0' : \"2px solid \".concat(colors.N40A);\n});\nexport default FooterDiv;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport React, { PureComponent } from 'react';\nimport { Item } from '@atlaskit/droplist';\nimport FooterDiv from '../styled/Footer';\n\nvar Footer =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(Footer, _PureComponent);\n\n  function Footer() {\n    _classCallCheck(this, Footer);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(Footer).apply(this, arguments));\n  }\n\n  _createClass(Footer, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          children = _this$props.children,\n          elemBefore = _this$props.elemBefore,\n          isFocused = _this$props.isFocused,\n          onClick = _this$props.onClick,\n          shouldHideSeparator = _this$props.shouldHideSeparator;\n      return React.createElement(FooterDiv, {\n        onClick: onClick,\n        shouldHideSeparator: shouldHideSeparator\n      }, React.createElement(Item, {\n        appearance: appearance,\n        elemBefore: elemBefore,\n        isFocused: isFocused,\n        type: \"option\"\n      }, children));\n    }\n  }]);\n\n  return Footer;\n}(PureComponent);\n\nexport { Footer as default };","/**\n * Try to match with filterValues first. If it's not provided, then match with content.\n */\nvar isMatched = function isMatched(item, matchingValue) {\n  var filterValues = item.filterValues;\n\n  if (filterValues && filterValues.length > 0) {\n    return filterValues.some(function (value) {\n      return value.toLowerCase().indexOf(matchingValue) > -1;\n    });\n  }\n\n  return item.content.toLowerCase().indexOf(matchingValue) > -1;\n};\n\nvar filterItems = function filterItems(items, filterValue, selectedItems) {\n  var value = filterValue;\n  var trimmedValue = value && value.toLowerCase().trim();\n  var selectedValues = selectedItems ? selectedItems.map(function (item) {\n    return item.value;\n  }) : [];\n  var unselectedItems = items.filter(function (item) {\n    return selectedValues.indexOf(item.value) === -1;\n  });\n  return trimmedValue ? unselectedItems.filter(function (item) {\n    return isMatched(item, trimmedValue);\n  }) : unselectedItems;\n};\n\nvar getNextFocusable = function getNextFocusable(indexItem, length) {\n  var footerIsFocusable = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var currentItem = indexItem;\n  var footerShouldBeFocused = footerIsFocusable && currentItem === length - 1;\n\n  if (currentItem == null) {\n    currentItem = 0;\n  } else if (currentItem < length - 1) {\n    currentItem++;\n  } else if (footerShouldBeFocused) {\n    currentItem = length;\n  } else {\n    currentItem = 0;\n  }\n\n  return currentItem;\n};\n\nvar getPrevFocusable = function getPrevFocusable(indexItem, length) {\n  var footerIsFocusable = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var currentItem = indexItem;\n  var footerShouldBeFocused = footerIsFocusable && currentItem === 0;\n\n  if (currentItem && currentItem > 0) {\n    currentItem--;\n  } else if (footerShouldBeFocused) {\n    currentItem = length;\n  } else {\n    currentItem = length - 1;\n  }\n\n  return currentItem;\n}; // This function exists because mutliselect supports two slightly different APIs when it comes to\n// the `items` prop. One way is an array of Items\n// i.e [{ content: 'one', value: 1}, { content: 'two', value: 2}, { content: 'three', value: 3}]\n// the other is what can be thought of as an array of Groups\n// i.e [{ heading: 'numbers', items: [...] }, { heading: 'letters', items: [...] }]\n// In this form, the items array matches the one we see above.\n// This function normalises `items` so that it will always be in the later form\n\n\nvar groupItems = function groupItems(items) {\n  var firstItem = items[0] || {};\n  return Array.isArray(firstItem.items) ? items : convertToGroupType(items);\n};\n\nvar convertToGroupType = function convertToGroupType(items) {\n  return [{\n    items: items\n  }];\n};\n\nexport { filterItems, getNextFocusable, getPrevFocusable, groupItems };","import styled from 'styled-components';\nimport { colors, gridSize, math, themed } from '@atlaskit/theme';\nexport default styled.div.withConfig({\n  displayName: \"Group\",\n  componentId: \"sc-1q26u8b-0\"\n})([\"\\n  box-sizing: border-box;\\n  display: block;\\n  margin-top: \", \"px;\\n\\n  &:first-child {\\n    margin-top: 0;\\n  }\\n\"], gridSize);\nexport var Heading = styled.div.withConfig({\n  displayName: \"Group__Heading\",\n  componentId: \"sc-1q26u8b-1\"\n})([\"\\n  align-items: baseline;\\n  color: \", \";\\n  display: flex;\\n  flex: 1 1 auto;\\n  font-weight: normal;\\n  font-size: 14px;\\n  line-height: 1;\\n  margin: 0;\\n  padding: \", \"px \", \"px;\\n\"], themed({\n  light: colors.N300,\n  dark: colors.DN300\n}), gridSize, math.multiply(gridSize, 1.5));\nexport var HeadingAfter = styled.div.withConfig({\n  displayName: \"Group__HeadingAfter\",\n  componentId: \"sc-1q26u8b-2\"\n})([\"\\n  flex: 0 0 auto;\\n\"]);\nexport var HeadingText = styled.div.withConfig({\n  displayName: \"Group__HeadingText\",\n  componentId: \"sc-1q26u8b-3\"\n})([\"\\n  flex: 1 1 auto;\\n  font-size: 12px;\\n  text-transform: uppercase;\\n\"]);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { PureComponent } from 'react';\nimport Group, { Heading, HeadingText, HeadingAfter } from '../styled/Group';\n\nvar DroplistGroup =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(DroplistGroup, _PureComponent);\n\n  function DroplistGroup() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, DroplistGroup);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(DroplistGroup)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      ariaLabel: _this.props.heading\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"headingElement\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidMount\", function () {\n      if (_this.props.heading || _this.props.elemAfter) {\n        _this.setState({\n          ariaLabel: _this.getAriaLabel()\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidUpdate\", function () {\n      if (_this.props.heading || _this.props.elemAfter) {\n        _this.setState({\n          ariaLabel: _this.getAriaLabel()\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAriaLabel\", function () {\n      var _this$props = _this.props,\n          elemAfter = _this$props.elemAfter,\n          heading = _this$props.heading;\n      var afterText = elemAfter && typeof elemAfter === 'string' ? elemAfter : _this.headingElement && _this.headingElement.textContent;\n      return \"\".concat(heading || '', \" \").concat(afterText || '');\n    });\n\n    return _this;\n  }\n\n  _createClass(DroplistGroup, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          children = _this$props2.children,\n          elemAfter = _this$props2.elemAfter,\n          heading = _this$props2.heading;\n      var ariaLabel = this.state.ariaLabel;\n      return React.createElement(Group, {\n        \"aria-label\": ariaLabel,\n        role: \"group\"\n      }, heading ? React.createElement(Heading, {\n        \"aria-hidden\": \"true\",\n        \"data-role\": \"droplistGroupHeading\"\n      }, React.createElement(HeadingText, null, heading), elemAfter ? React.createElement(HeadingAfter, {\n        innerRef: function innerRef(r) {\n          _this2.headingElement = r;\n        }\n      }, elemAfter) : null) : null, children);\n    }\n  }]);\n\n  return DroplistGroup;\n}(PureComponent);\n\nDroplistGroup.displayName = 'Group';\nexport default DroplistGroup;","import styled from 'styled-components';\nimport { gridSize } from '@atlaskit/theme';\nvar NoMatches = styled.div.withConfig({\n  displayName: \"NoMatch__NoMatches\",\n  componentId: \"sc-1au7ofu-0\"\n})([\"\\n  padding: 6px \", \"px;\\n\"], gridSize() * 3);\nexport default NoMatches;","import styled from 'styled-components';\nimport { gridSize } from '@atlaskit/theme';\nvar InitialLoading = styled.div.withConfig({\n  displayName: \"InitialLoading\",\n  componentId: \"vq33zx-0\"\n})([\"\\n  padding: 6px \", \"px;\\n\"], gridSize() * 3);\nexport default InitialLoading;","import styled from 'styled-components';\nimport { gridSize } from '@atlaskit/theme'; // we apply overflow and maxheight to the GroupWrapper if we are displaying a footer so that the\n// footer is 'sticky' to the bottom (always visible)\n\nvar GroupsContainer = styled.div.withConfig({\n  displayName: \"GroupsContainer\",\n  componentId: \"sc-1dbou9n-0\"\n})([\"\\n  overflow: \", \";\\n  max-height: \", \";\\n\"], function (_ref) {\n  var hasFooter = _ref.hasFooter;\n  return hasFooter ? 'auto' : 'visible';\n}, function (_ref2) {\n  var hasFooter = _ref2.hasFooter;\n  return hasFooter ? \"\".concat(gridSize() * 4 * 9.5, \"px\") : 'none';\n});\nexport default GroupsContainer;","import _extends from \"@babel/runtime/helpers/extends\";\nimport React from 'react';\nimport { Item, Group } from '@atlaskit/droplist';\nimport NoMatches from '../styled/NoMatch';\nimport InitialLoading from '../styled/InitialLoading';\nimport GroupsContainer from '../styled/GroupsContainer';\nimport { filterItems } from '../internal/sharedFunctions';\n\nvar renderItems = function renderItems(_ref) {\n  var items = _ref.items,\n      focusedItemIndex = _ref.focusedItemIndex,\n      handleItemSelect = _ref.handleItemSelect;\n\n  if (items && items.length) {\n    return items.map(function (item, itemIndex) {\n      return React.createElement(Item, _extends({}, item, {\n        elemBefore: item.elemBefore,\n        isFocused: itemIndex === focusedItemIndex,\n        key: itemIndex // eslint-disable-line react/no-array-index-key\n        ,\n        onActivate: function onActivate(attrs) {\n          handleItemSelect(item, attrs);\n        }\n      }), item.content);\n    });\n  }\n\n  return null;\n};\n\nvar renderNoItemsMessage = function renderNoItemsMessage(noMatchesFound) {\n  return React.createElement(NoMatches, null, noMatchesFound);\n};\n\nvar renderLoadingMessage = function renderLoadingMessage(loadingMessage) {\n  return React.createElement(InitialLoading, {\n    \"aria-live\": \"polite\",\n    role: \"status\"\n  }, loadingMessage);\n};\n\nvar renderMessageForEmptyList = function renderMessageForEmptyList(_ref2) {\n  var noMatchesFound = _ref2.noMatchesFound,\n      isLoading = _ref2.isLoading,\n      loadingMessage = _ref2.loadingMessage;\n  return isLoading ? renderLoadingMessage(loadingMessage) : renderNoItemsMessage(noMatchesFound);\n};\n\n/* eslint-disable react/prop-types*/\nvar renderGroups = function renderGroups(_ref3) {\n  var filterValue = _ref3.filterValue,\n      focusedItemIndex = _ref3.focusedItemIndex,\n      hasFooter = _ref3.hasFooter,\n      groups = _ref3.groups,\n      handleItemSelect = _ref3.handleItemSelect,\n      noMatchesFound = _ref3.noMatchesFound,\n      selectedItems = _ref3.selectedItems,\n      shouldAllowCreateItem = _ref3.shouldAllowCreateItem,\n      isLoading = _ref3.isLoading,\n      loadingMessage = _ref3.loadingMessage;\n  var renderedGroups = groups.map(function (group, groupIndex) {\n    var filteredItems = filterItems(group.items, filterValue, selectedItems);\n    return filteredItems.length > 0 ? React.createElement(Group, {\n      heading: group.heading,\n      key: groupIndex // eslint-disable-line react/no-array-index-key\n\n    }, renderItems({\n      items: filteredItems,\n      focusedItemIndex: focusedItemIndex,\n      handleItemSelect: handleItemSelect\n    })) : null;\n  }).filter(function (group) {\n    return !!group;\n  }); // don't show the 'noItems' message when the new item functinality is enabled\n\n  return renderedGroups.length > 0 || shouldAllowCreateItem ? React.createElement(GroupsContainer, {\n    hasFooter: hasFooter\n  }, renderedGroups) : renderMessageForEmptyList({\n    noMatchesFound: noMatchesFound,\n    isLoading: isLoading,\n    loadingMessage: loadingMessage\n  });\n};\n/* eslint-enable prop-types */\n\n\nexport default renderGroups;","import React from 'react';\n\nvar renderOptions = function renderOptions(items) {\n  if (!items || !items.length) return [];\n  return items.map(function (item, itemIndex) {\n    return React.createElement(\"option\", {\n      disabled: item.isDisabled,\n      key: itemIndex // eslint-disable-line react/no-array-index-key\n      ,\n      value: item.value\n    }, item.content);\n  });\n};\n\nvar renderOptGroups = function renderOptGroups(groups) {\n  return groups.map(function (group, groupIndex) {\n    return React.createElement(\"optgroup\", {\n      key: groupIndex // eslint-disable-line react/no-array-index-key\n      ,\n      label: group.heading\n    }, renderOptions(group.items));\n  });\n};\n\nexport default renderOptGroups;","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { PureComponent } from 'react';\nimport ReactDOM from 'react-dom';\nimport Droplist from '@atlaskit/droplist';\nimport { Label } from '@atlaskit/field-base';\nimport ExpandIcon from '@atlaskit/icon/glyph/chevron-down';\nimport { SelectWrapper } from '../styled/Stateless';\nimport Trigger from './Trigger';\nimport Footer from './Footer';\nimport { filterItems, getNextFocusable, getPrevFocusable, groupItems } from '../internal/sharedFunctions';\nimport renderGroups from './Groups';\nimport renderOptGroups from './Options';\n// =============================================================\n// NOTE: Duplicated in ./internal/appearances until docgen can follow imports.\n// -------------------------------------------------------------\n// DO NOT update values here without updating the other.\n// =============================================================\nvar appearances = {\n  values: ['default', 'subtle'],\n  default: 'default'\n};\n\nvar getAllValues = function getAllValues(selectedItems) {\n  return selectedItems.map(function (item) {\n    return item.value;\n  });\n};\n/*\n\n==============================+\nCOMPONENT CODE BEGINS HERE\n==============================+\n\n*/\n\n\nvar StatelessMultiSelect =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(StatelessMultiSelect, _PureComponent);\n\n  function StatelessMultiSelect() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, StatelessMultiSelect);\n\n    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n      _args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(StatelessMultiSelect)).call.apply(_getPrototypeOf2, [this].concat(_args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"inputNode\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"tagGroup\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      isFocused: _this.props.isOpen || _this.props.shouldFocus,\n      focusedItemIndex: undefined,\n      groupedItems: groupItems(_this.props.items)\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidMount\", function () {\n      if (_this.state.isFocused && _this.inputNode) {\n        _this.inputNode.focus();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentWillReceiveProps\", function (nextProps) {\n      if (_this.props.items !== nextProps.items) {\n        _this.setState({\n          groupedItems: groupItems(nextProps.items)\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidUpdate\", function (prevProps) {\n      if (!prevProps.shouldFocus && _this.props.shouldFocus && _this.inputNode) {\n        _this.inputNode.focus();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onFocus\", function () {\n      if (!_this.props.isDisabled) {\n        _this.setState({\n          isFocused: true\n        });\n        /**\n         * Check if we're tabbing to the Remove button on a tag.\n         * This is a hacky workaround for now and should be fixed when\n         * we implement proper traversal for tags with the keyboard.\n         *\n         * @see {@link https://ecosystem.atlassian.net/browse/AK-2250}\n         * @todo Implement traversal of tags with arrow keys, then remove this.\n         */\n\n\n        if (document.activeElement && document.activeElement.tagName.toLowerCase() !== 'button' && _this.inputNode) {\n          _this.inputNode.focus();\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onBlur\", function () {\n      if (!_this.props.isDisabled) {\n        _this.setState({\n          isFocused: false\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onOpenChange\", function (attrs) {\n      var target = attrs.event.currentTarget; // eslint-disable-next-line react/no-find-dom-node\n\n      var tagGroup = ReactDOM.findDOMNode(_this.tagGroup); // $FlowFixMe children method not found in Text Element property\n\n      var tagGroupElements = tagGroup ? tagGroup.children : [];\n\n      var isInsideTagGroup = _toConsumableArray(tagGroupElements).some(function (node) {\n        return node.contains(target) && node.tagName !== 'INPUT';\n      });\n\n      var args = _objectSpread({}, attrs, {\n        inputNode: _this.inputNode\n      });\n\n      if (!isInsideTagGroup) {\n        _this.props.onOpenChange(args);\n      } // $FlowFixMe querySelector method not found in Text Element property\n\n\n      var tagInput = tagGroup ? tagGroup.querySelector('input') : undefined;\n\n      if (attrs.isOpen && tagInput) {\n        tagInput.focus();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getPlaceholder\", function () {\n      var _this$props = _this.props,\n          isOpen = _this$props.isOpen,\n          selectedItems = _this$props.selectedItems,\n          placeholder = _this$props.placeholder;\n\n      if (!isOpen && selectedItems.length === 0) {\n        return placeholder;\n      }\n\n      return undefined;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAllVisibleItems\", function (groups) {\n      var _this$props2 = _this.props,\n          filterValue = _this$props2.filterValue,\n          selectedItems = _this$props2.selectedItems;\n      return groups.reduce(function (allFilteredItems, val) {\n        var filteredItems = filterItems(val.items, filterValue, selectedItems);\n        return allFilteredItems.concat(filteredItems);\n      }, []);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleItemCreate\", function (event) {\n      var _this$props3 = _this.props,\n          value = _this$props3.filterValue,\n          items = _this$props3.items;\n\n      if (value) {\n        var allVisible = _this.getAllVisibleItems(items);\n\n        var matchingElement = allVisible.filter(function (item) {\n          return item.content === value;\n        });\n\n        if (!matchingElement.length) {\n          if (_this.props.onNewItemCreated) {\n            _this.props.onNewItemCreated({\n              value: value\n            });\n          }\n        } else {\n          _this.handleItemSelect(matchingElement[0], {\n            event: event\n          });\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleItemSelect\", function (item, attrs) {\n      if (!_this.isFooterFocused()) {\n        // we short circuit above because when focusing on footer we don't have `item`.\n        // We could look at adding item.disabled in the future though if required.\n        if (!item.isDisabled) {\n          _this.props.onOpenChange({\n            isOpen: false,\n            event: attrs.event\n          });\n\n          _this.props.onSelected(item);\n\n          _this.props.onFilterChange('');\n\n          _this.setState({\n            focusedItemIndex: undefined\n          });\n        }\n      } else if (_this.props.shouldAllowCreateItem) {\n        _this.handleItemCreate(attrs.event);\n      } else {\n        // footer is focused and we dont have shouldAllowCreateItem so call the footer's onActivate\n        _this.handleFooterActivate(attrs.event);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleItemRemove\", function (item) {\n      _this.props.onRemoved(item);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"removeLatestItem\", function () {\n      if (_this.props.selectedItems.length) {\n        var selectedItems = _this.props.selectedItems;\n\n        _this.handleItemRemove(selectedItems[selectedItems.length - 1]);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasVisibleFooter\", function () {\n      var _this$props4 = _this.props,\n          footer = _this$props4.footer,\n          shouldAllowCreateItem = _this$props4.shouldAllowCreateItem,\n          filterValue = _this$props4.filterValue; // This logic is interesting because we explicitly check !multiSelectContainer with footer\n      // because if you have both turned on but you havent typed anything, there will be no footer\n\n      return footer && footer.content && !shouldAllowCreateItem || shouldAllowCreateItem && !!filterValue;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"isFooterFocused\", function () {\n      var _this$state = _this.state,\n          focusedItemIndex = _this$state.focusedItemIndex,\n          groupedItems = _this$state.groupedItems;\n\n      var selectableItems = _this.getAllVisibleItems(groupedItems); // if our selected index is outside of our array bounds, the footer should be selected\n\n\n      return focusedItemIndex === selectableItems.length;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleOnChange\", function (event) {\n      var value = event.currentTarget.value;\n\n      if (value !== _this.props.filterValue) {\n        // We want to get rid of the focus on the items when the shouldAllowCreateItem enabled.\n        // When a user presses Enter multi-select should create a new value if nothing is focused, but\n        // it still should allow to focus an item in the list and select it by pressing Enter\n        // as normal multi-select does.\n        if (_this.props.shouldAllowCreateItem) {\n          _this.setState({\n            focusedItemIndex: undefined\n          });\n        }\n\n        _this.props.onFilterChange(value);\n\n        _this.onOpenChange({\n          event: event,\n          isOpen: true\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleTriggerClick\", function (event) {\n      if (!_this.props.isDisabled) {\n        _this.onOpenChange({\n          event: event,\n          isOpen: true\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleFooterActivate\", function (event) {\n      var footer = _this.props.footer;\n\n      if (footer && footer.onActivate) {\n        footer.onActivate(event);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focusNextItem\", function () {\n      var filteredItems = _this.getAllVisibleItems(_this.props.items);\n\n      var footerIsFocusable = _this.hasVisibleFooter();\n\n      var focusedItemIndex = _this.state.focusedItemIndex;\n\n      _this.setState({\n        focusedItemIndex: getNextFocusable(focusedItemIndex, filteredItems.length, footerIsFocusable)\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focusPreviousItem\", function () {\n      var filteredItems = _this.getAllVisibleItems(_this.props.items);\n\n      var footerIsFocusable = _this.hasVisibleFooter();\n\n      var focusedItemIndex = _this.state.focusedItemIndex;\n\n      _this.setState({\n        focusedItemIndex: getPrevFocusable(focusedItemIndex, filteredItems.length, footerIsFocusable)\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleKeyboardInteractions\", function (event) {\n      var _this$props5 = _this.props,\n          isOpen = _this$props5.isOpen,\n          items = _this$props5.items,\n          filterValue = _this$props5.filterValue;\n      var focusedItemIndex = _this.state.focusedItemIndex;\n      var isSelectOpen = isOpen;\n\n      switch (event.key) {\n        case 'ArrowDown':\n          event.preventDefault();\n\n          if (!isSelectOpen) {\n            _this.onOpenChange({\n              event: event,\n              isOpen: true\n            });\n          }\n\n          _this.focusNextItem();\n\n          break;\n\n        case 'ArrowUp':\n          event.preventDefault();\n\n          if (isSelectOpen) {\n            _this.focusPreviousItem();\n          }\n\n          break;\n\n        case 'Enter':\n          if (isSelectOpen) {\n            event.preventDefault();\n\n            if (focusedItemIndex != null) {\n              _this.handleItemSelect(_this.getAllVisibleItems(items)[focusedItemIndex], {\n                event: event\n              });\n            } else if (_this.props.shouldAllowCreateItem) {\n              _this.handleItemCreate(event);\n            }\n          }\n\n          break;\n\n        case 'Backspace':\n          if (!filterValue) {\n            _this.removeLatestItem();\n\n            _this.onOpenChange({\n              event: event,\n              isOpen: true\n            });\n          }\n\n          break;\n\n        case 'Tab':\n          // tabbing from within the multi select should move focus to the next form element\n          // hence, we close the dropdown and clear the focusedItemIndex\n          _this.onOpenChange({\n            event: event,\n            isOpen: false\n          });\n\n          _this.setState({\n            focusedItemIndex: undefined\n          });\n\n          break;\n\n        default:\n          break;\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"renderFooter\", function () {\n      var _this$props6 = _this.props,\n          newValue = _this$props6.filterValue,\n          shouldAllowCreateItem = _this$props6.shouldAllowCreateItem,\n          footer = _this$props6.footer,\n          createNewItemLabel = _this$props6.createNewItemLabel;\n\n      if (shouldAllowCreateItem) {\n        if (newValue) {\n          return React.createElement(Footer, {\n            appearance: footer && footer.appearance,\n            isFocused: _this.isFooterFocused(),\n            newLabel: _this.props.createNewItemLabel,\n            onClick: _this.handleItemCreate,\n            shouldHideSeparator: !_this.getAllVisibleItems(_this.props.items).length\n          }, newValue, \" (\", createNewItemLabel, \")\");\n        }\n      } else if (footer && footer.content) {\n        return React.createElement(Footer, {\n          appearance: footer.appearance,\n          elemBefore: footer.elemBefore,\n          isFocused: _this.isFooterFocused(),\n          onClick: _this.handleFooterActivate,\n          shouldHideSeparator: !_this.getAllVisibleItems(_this.props.items).length\n        }, footer.content);\n      }\n\n      return null;\n    });\n\n    return _this;\n  }\n\n  _createClass(StatelessMultiSelect, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props7 = this.props,\n          appearance = _this$props7.appearance,\n          filterValue = _this$props7.filterValue,\n          id = _this$props7.id,\n          isDisabled = _this$props7.isDisabled,\n          isFirstChild = _this$props7.isFirstChild,\n          isInvalid = _this$props7.isInvalid,\n          invalidMessage = _this$props7.invalidMessage,\n          isLoading = _this$props7.isLoading,\n          isOpen = _this$props7.isOpen,\n          isRequired = _this$props7.isRequired,\n          label = _this$props7.label,\n          loadingMessage = _this$props7.loadingMessage,\n          name = _this$props7.name,\n          noMatchesFound = _this$props7.noMatchesFound,\n          position = _this$props7.position,\n          selectedItems = _this$props7.selectedItems,\n          shouldAllowCreateItem = _this$props7.shouldAllowCreateItem,\n          shouldFitContainer = _this$props7.shouldFitContainer,\n          shouldFlip = _this$props7.shouldFlip;\n      var _this$state2 = this.state,\n          groupedItems = _this$state2.groupedItems,\n          isFocused = _this$state2.isFocused,\n          focusedItemIndex = _this$state2.focusedItemIndex;\n      return (// eslint-disable-next-line jsx-a11y/no-static-element-interactions\n        React.createElement(SelectWrapper, {\n          shouldFitContainer: shouldFitContainer,\n          onKeyDown: this.handleKeyboardInteractions\n        }, React.createElement(\"select\", {\n          disabled: isDisabled,\n          id: id,\n          multiple: true,\n          name: name,\n          readOnly: true,\n          required: isRequired,\n          style: {\n            display: 'none'\n          },\n          value: getAllValues(selectedItems)\n        }, renderOptGroups(groupedItems)), label ? React.createElement(Label, {\n          htmlFor: id,\n          isDisabled: isDisabled,\n          isFirstChild: isFirstChild,\n          isRequired: isRequired,\n          label: label\n        }) : null, React.createElement(Droplist, {\n          appearance: this.hasVisibleFooter() ? 'tall' : 'default',\n          isKeyboardInteractionDisabled: true,\n          isOpen: isOpen,\n          isTriggerDisabled: true,\n          isTriggerNotTabbable: true,\n          onOpenChange: this.onOpenChange,\n          position: position,\n          shouldFitContainer: true,\n          shouldFlip: shouldFlip,\n          trigger: React.createElement(Trigger, {\n            appearance: appearance,\n            filterValue: filterValue,\n            handleItemRemove: this.handleItemRemove,\n            handleOnChange: this.handleOnChange,\n            handleTriggerClick: this.handleTriggerClick,\n            inputNode: this.inputNode,\n            inputRefFunction: function inputRefFunction(ref) {\n              _this2.inputNode = ref;\n            },\n            isDisabled: isDisabled,\n            isFocused: isOpen || isFocused,\n            isInvalid: isInvalid,\n            invalidMessage: invalidMessage,\n            isLoading: isLoading,\n            isRequired: isRequired,\n            onBlur: this.onBlur,\n            onFocus: this.onFocus,\n            placeholder: this.getPlaceholder(),\n            selectedItems: selectedItems,\n            tagGroup: this.tagGroup,\n            tagGroupRefFunction: function tagGroupRefFunction(ref) {\n              _this2.tagGroup = ref;\n            },\n            icon: this.props.icon\n          })\n        }, renderGroups({\n          groups: groupedItems,\n          hasFooter: this.hasVisibleFooter(),\n          filterValue: filterValue,\n          selectedItems: selectedItems,\n          noMatchesFound: noMatchesFound,\n          focusedItemIndex: focusedItemIndex,\n          handleItemSelect: this.handleItemSelect,\n          shouldAllowCreateItem: shouldAllowCreateItem,\n          isLoading: isLoading,\n          loadingMessage: loadingMessage\n        }), this.renderFooter()))\n      );\n    }\n  }]);\n\n  return StatelessMultiSelect;\n}(PureComponent);\n\n_defineProperty(StatelessMultiSelect, \"defaultProps\", {\n  appearance: appearances.default,\n  createNewItemLabel: 'New item',\n  filterValue: '',\n  footer: {},\n  shouldFocus: false,\n  shouldFlip: true,\n  isLoading: false,\n  isOpen: false,\n  items: [],\n  label: '',\n  loadingMessage: 'Receiving information',\n  noMatchesFound: 'No matches found',\n  onFilterChange: function onFilterChange() {},\n  onOpenChange: function onOpenChange() {},\n  onSelected: function onSelected() {},\n  onRemoved: function onRemoved() {},\n  position: 'bottom left',\n  selectedItems: [],\n  shouldAllowCreateItem: false,\n  icon: React.createElement(ExpandIcon, {\n    label: \"\"\n  })\n});\n\nexport { StatelessMultiSelect as default };","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/react');\n","/* @flow */\n\nimport Button from '@atlaskit/button';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../i18n';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link InlineDialogFailure}.\n */\ntype Props = {\n\n    /**\n     * Allows to retry the call that previously didn't succeed.\n     */\n    onRetry: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Inline dialog that represents a failure and allows a retry.\n */\nclass InlineDialogFailure extends Component<Props> {\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        const supportLink = interfaceConfig.SUPPORT_URL;\n        const supportString = t('inlineDialogFailure.supportMsg');\n        const supportLinkElem\n            = supportLink\n                ? (\n                    <div className = 'inline-dialog-error-text'>\n                        <span>{ supportString.padEnd(supportString.length + 1) }\n                        </span>\n                        <span>\n                            <a\n                                href = { supportLink }\n                                rel = 'noopener noreferrer'\n                                target = '_blank'>\n                                { t('inlineDialogFailure.support') }\n                            </a>\n                        </span>\n                        <span>.</span>\n                    </div>\n                )\n                : null;\n\n        return (\n            <div className = 'inline-dialog-error'>\n                <div className = 'inline-dialog-error-text'>\n                    { t('inlineDialogFailure.msg') }\n                </div>\n                { supportLinkElem }\n                <Button\n                    className = 'inline-dialog-error-button'\n                    onClick = { this.props.onRetry } >\n                    { t('inlineDialogFailure.retry') }\n                </Button>\n            </div>\n        );\n    }\n}\n\nexport default translate(InlineDialogFailure);\n","// @flow\n\nimport { MultiSelectStateless } from '@atlaskit/multi-select';\nimport AKInlineDialog from '@atlaskit/inline-dialog';\nimport _debounce from 'lodash/debounce';\nimport React, { Component } from 'react';\n\nimport logger from '../../logger';\n\nimport InlineDialogFailure from './InlineDialogFailure';\n\n/**\n * The type of the React {@code Component} props of\n * {@link MultiSelectAutocomplete}.\n */\ntype Props = {\n\n    /**\n     * The default value of the selected item.\n     */\n    defaultValue: Array<Object>,\n\n    /**\n     * Optional footer to show as a last element in the results.\n     * Should be of type {content: <some content>}\n     */\n    footer: Object,\n\n    /**\n     * Indicates if the component is disabled.\n     */\n    isDisabled: boolean,\n\n    /**\n     * Text to display while a query is executing.\n     */\n    loadingMessage: string,\n\n    /**\n     * The text to show when no matches are found.\n     */\n    noMatchesFound: string,\n\n    /**\n     * The function called immediately before a selection has been actually\n     * selected. Provides an opportunity to do any formatting.\n     */\n    onItemSelected: Function,\n\n    /**\n     * The function called when the selection changes.\n     */\n    onSelectionChange: Function,\n\n    /**\n     * The placeholder text of the input component.\n     */\n    placeholder: string,\n\n    /**\n     * The service providing the search.\n     */\n    resourceClient: { makeQuery: Function, parseResults: Function },\n\n    /**\n     * Indicates if the component should fit the container.\n     */\n    shouldFitContainer: boolean,\n\n    /**\n     * Indicates if we should focus.\n     */\n    shouldFocus: boolean\n};\n\n/**\n * The type of the React {@code Component} state of\n * {@link MultiSelectAutocomplete}.\n */\ntype State = {\n\n    /**\n     * Indicates if the dropdown is open.\n     */\n    isOpen: boolean,\n\n    /**\n     * The text that filters the query result of the search.\n     */\n    filterValue: string,\n\n    /**\n     * Indicates if the component is currently loading results.\n     */\n    loading: boolean,\n\n    /**\n     * Indicates if there was an error.\n     */\n    error: boolean,\n\n    /**\n     * The list of result items.\n     */\n    items: Array<Object>,\n\n    /**\n     * The list of selected items.\n     */\n    selectedItems: Array<Object>\n};\n\n/**\n * A MultiSelect that is also auto-completing.\n */\nclass MultiSelectAutocomplete extends Component<Props, State> {\n    /**\n     * Initializes a new {@code MultiSelectAutocomplete} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        const defaultValue = this.props.defaultValue || [];\n\n        this.state = {\n            isOpen: false,\n            filterValue: '',\n            loading: false,\n            error: false,\n            items: [],\n            selectedItems: [ ...defaultValue ]\n        };\n\n        this._onFilterChange = this._onFilterChange.bind(this);\n        this._onRetry = this._onRetry.bind(this);\n        this._onSelectionChange = this._onSelectionChange.bind(this);\n        this._sendQuery = _debounce(this._sendQuery.bind(this), 200);\n    }\n\n    /**\n     * Sets the items to display as selected.\n     *\n     * @param {Array<Object>} selectedItems - The list of items to display as\n     * having been selected.\n     * @returns {void}\n     */\n    setSelectedItems(selectedItems: Array<Object> = []) {\n        this.setState({ selectedItems });\n    }\n\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        const shouldFitContainer = this.props.shouldFitContainer || false;\n        const shouldFocus = this.props.shouldFocus || false;\n        const isDisabled = this.props.isDisabled || false;\n        const placeholder = this.props.placeholder || '';\n        const noMatchesFound = this.props.noMatchesFound || '';\n\n        return (\n            <div>\n                <MultiSelectStateless\n                    filterValue = { this.state.filterValue }\n                    footer = { this.props.footer }\n                    icon = { null }\n                    isDisabled = { isDisabled }\n                    isLoading = { this.state.loading }\n                    isOpen = { this.state.isOpen }\n                    items = { this.state.items }\n                    loadingMessage = { this.props.loadingMessage }\n                    noMatchesFound = { noMatchesFound }\n                    onFilterChange = { this._onFilterChange }\n                    onRemoved = { this._onSelectionChange }\n                    onSelected = { this._onSelectionChange }\n                    placeholder = { placeholder }\n                    selectedItems = { this.state.selectedItems }\n                    shouldFitContainer = { shouldFitContainer }\n                    shouldFocus = { shouldFocus } />\n                { this._renderError() }\n            </div>\n        );\n    }\n\n    _onFilterChange: (string) => void;\n\n    /**\n     * Sets the state and sends a query on filter change.\n     *\n     * @param {string} filterValue - The filter text value.\n     * @private\n     * @returns {void}\n     */\n    _onFilterChange(filterValue) {\n        this.setState({\n            // Clean the error if the filterValue is empty.\n            error: this.state.error && Boolean(filterValue),\n            filterValue,\n            isOpen: Boolean(this.state.items.length) && Boolean(filterValue),\n            items: filterValue ? this.state.items : [],\n            loading: Boolean(filterValue)\n        });\n        if (filterValue) {\n            this._sendQuery(filterValue);\n        }\n    }\n\n    _onRetry: () => void;\n\n    /**\n     * Retries the query on retry.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onRetry() {\n        this._sendQuery(this.state.filterValue);\n    }\n\n    _onSelectionChange: (Object) => void;\n\n    /**\n     * Updates the selected items when a selection event occurs.\n     *\n     * @param {Object} item - The selected item.\n     * @private\n     * @returns {void}\n     */\n    _onSelectionChange(item) {\n        const existing\n            = this.state.selectedItems.find(k => k.value === item.value);\n        let selectedItems = this.state.selectedItems;\n\n        if (existing) {\n            selectedItems = selectedItems.filter(k => k !== existing);\n        } else {\n            selectedItems.push(this.props.onItemSelected(item));\n        }\n        this.setState({\n            isOpen: false,\n            selectedItems\n        });\n\n        if (this.props.onSelectionChange) {\n            this.props.onSelectionChange(selectedItems);\n        }\n    }\n\n    /**\n     * Renders the error UI.\n     *\n     * @returns {ReactElement|null}\n     */\n    _renderError() {\n        if (!this.state.error) {\n            return null;\n        }\n        const content = (\n            <div className = 'autocomplete-error'>\n                <InlineDialogFailure\n                    onRetry = { this._onRetry } />\n            </div>\n        );\n\n        return (\n            <AKInlineDialog\n                content = { content }\n                isOpen = { true } />\n        );\n    }\n\n    _sendQuery: (string) => void;\n\n    /**\n     * Sends a query to the resourceClient.\n     *\n     * @param {string} filterValue - The string to use for the search.\n     * @returns {void}\n     */\n    _sendQuery(filterValue) {\n        if (!filterValue) {\n            return;\n        }\n\n        this.setState({\n            error: false\n        });\n\n        const resourceClient = this.props.resourceClient || {\n            makeQuery: () => Promise.resolve([]),\n            parseResults: results => results\n        };\n\n        resourceClient.makeQuery(filterValue)\n            .then(results => {\n                if (this.state.filterValue !== filterValue) {\n                    this.setState({\n                        error: false\n                    });\n\n                    return;\n                }\n                const itemGroups = [\n                    {\n                        items: resourceClient.parseResults(results)\n                    }\n                ];\n\n                this.setState({\n                    items: itemGroups,\n                    isOpen: true,\n                    loading: false,\n                    error: false\n                });\n            })\n            .catch(error => {\n                logger.error('MultiSelectAutocomplete error in query', error);\n\n                this.setState({\n                    error: true,\n                    loading: false,\n                    isOpen: false\n                });\n            });\n    }\n}\n\nexport default MultiSelectAutocomplete;\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport Container from './Container';\nimport Text from './Text';\nimport type { Item } from '../../Types';\n\n/**\n * The type of the React {@code Component} props of\n * {@link NavigateSectionListItem}.\n */\ntype Props = {\n\n    /**\n     * Function to be invoked when an item is pressed. The item's URL is passed.\n     */\n    onPress: ?Function,\n\n    /**\n     * A item containing data to be rendered\n     */\n    item: Item\n};\n\n/**\n * Implements a React/Web {@link Component} for displaying an item in a\n * NavigateSectionList\n *\n * @extends Component\n */\nexport default class NavigateSectionListItem<P: Props>\n    extends Component<P> {\n\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        const { elementAfter, lines, title } = this.props.item;\n        const { onPress } = this.props;\n\n        /**\n         * Initiliazes the date and duration of the conference to the an empty\n         * string in case for some reason there is an error where the item data\n         * lines doesn't contain one or both of those values (even though this\n         * unlikely the app shouldn't break because of it)\n         * @type {string}\n         */\n        let date = '';\n        let duration = '';\n\n        if (lines[0]) {\n            date = lines[0];\n        }\n        if (lines[1]) {\n            duration = lines[1];\n        }\n\n        const rootClassName = `navigate-section-list-tile ${\n            onPress ? 'with-click-handler' : 'without-click-handler'}`;\n\n        return (\n            <Container\n                className = { rootClassName }\n                onClick = { onPress }>\n                <Container className = 'navigate-section-list-tile-info'>\n                    <Text\n                        className = 'navigate-section-tile-title'>\n                        { title }\n                    </Text>\n                    <Text\n                        className = 'navigate-section-tile-body'>\n                        { date }\n                    </Text>\n                    <Text\n                        className = 'navigate-section-tile-body'>\n                        { duration }\n                    </Text>\n                </Container>\n                <Container className = { 'element-after' }>\n                    { elementAfter || null }\n                </Container>\n            </Container>\n        );\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport Text from './Text';\nimport type { Section } from '../../Types';\n\ntype Props = {\n\n    /**\n     * A section containing the data to be rendered\n     */\n    section: Section\n}\n\n/**\n * Implements a React/Web {@link Component} that renders the section header of\n * the list\n *\n * @extends Component\n */\nexport default class NavigateSectionListSectionHeader extends Component<Props> {\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Text className = 'navigate-section-section-header'>\n                { this.props.section.title }\n            </Text>\n        );\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport Container from './Container';\nimport type { Section } from '../../Types';\n\ntype Props = {\n\n    /**\n     * Rendered when the list is empty. Should be a rendered element.\n     */\n    ListEmptyComponent: Object,\n\n    /**\n     * Used to extract a unique key for a given item at the specified index.\n     * Key is used for caching and as the react key to track item re-ordering.\n     */\n    keyExtractor: Function,\n\n    /**\n     * Returns a React component that renders each Item in the list\n     */\n    renderItem: Function,\n\n    /**\n     * Returns a React component that renders the header for every section\n     */\n    renderSectionHeader: Function,\n\n    /**\n     * An array of sections\n     */\n    sections: Array<Section>,\n\n    /**\n     * defines what happens when  an item in the section list is clicked\n     */\n    onItemClick: Function\n};\n\n/**\n * Implements a React/Web {@link Component} for displaying a list with\n * sections similar to React Native's {@code SectionList} in order to\n * faciliate cross-platform source code.\n *\n * @extends Component\n */\nexport default class SectionList extends Component<Props> {\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {React.ReactNode}\n     */\n    render() {\n        const {\n            ListEmptyComponent,\n            renderSectionHeader,\n            renderItem,\n            sections,\n            keyExtractor\n        } = this.props;\n\n        /**\n         * If there are no recent items we don't want to display anything\n         */\n        if (sections) {\n            return (\n                <Container\n                    className = 'navigate-section-list'>\n                    {\n                        sections.length === 0\n                            ? ListEmptyComponent\n                            : sections.map((section, sectionIndex) => (\n                                <Container\n                                    key = { sectionIndex }>\n                                    { renderSectionHeader(section) }\n                                    { section.data\n                                        .map((item, listIndex) => {\n                                            const listItem = {\n                                                item\n                                            };\n\n                                            return renderItem(listItem,\n                                                keyExtractor(section,\n                                                    listIndex));\n                                        }) }\n                                </Container>\n                            )\n                            )\n                    }\n                </Container>\n            );\n        }\n\n        return null;\n    }\n}\n","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return _toConsumableArray(ancestorData).concat([data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_assertThisInitialized(_this)), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}","import { gridSize } from '@atlaskit/theme';\nvar dimensions = {\n  regular: {\n    height: gridSize() * 2,\n    width: gridSize() * 4\n  },\n  large: {\n    height: gridSize() * 2 + gridSize() / 2,\n    width: gridSize() * 5\n  }\n};\nexport var borderWidth = '2px';\nexport var paddingUnitless = gridSize() / 4;\nexport var transition = '0.2s';\nexport var getHeight = function getHeight(_ref) {\n  var size = _ref.size;\n  return dimensions[size].height;\n};\nexport var getWidth = function getWidth(_ref2) {\n  var size = _ref2.size;\n  return dimensions[size].width;\n};","import styled from 'styled-components';\nimport { borderWidth } from './constants';\nexport default styled.label.withConfig({\n  displayName: \"Label\",\n  componentId: \"ejxk2a-0\"\n})([\"\\n  display: inline-block;\\n  padding: \", \";\\n\"], borderWidth);","import styled from 'styled-components';\nexport default styled.input.withConfig({\n  displayName: \"Input\",\n  componentId: \"sc-1ovlrjp-0\"\n})([\"\\n  opacity: 0;\\n  position: absolute;\\n\\n  &:focus {\\n    outline: none !important;\\n  }\\n\"]);","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport styled, { css } from 'styled-components';\nimport { colors, themed } from '@atlaskit/theme';\nimport { borderWidth, getHeight, getWidth, transition } from './constants';\nvar colorOptions = {\n  bgChecked: themed({\n    light: colors.G400,\n    dark: colors.G300\n  }),\n  bgCheckedHover: themed({\n    light: colors.G300,\n    dark: colors.G200\n  }),\n  // hover go lighter\n  bgCheckedDisabled: themed({\n    light: colors.N20,\n    dark: colors.DN70\n  }),\n  bgUnchecked: themed({\n    light: colors.N200,\n    dark: colors.DN70\n  }),\n  bgUncheckedHover: themed({\n    light: colors.N70,\n    dark: colors.DN60\n  }),\n  bgUncheckedDisabled: themed({\n    light: colors.N20,\n    dark: colors.DN70\n  })\n};\n\nvar getBgColor = function getBgColor(_ref) {\n  var isChecked = _ref.isChecked,\n      isDisabled = _ref.isDisabled,\n      rest = _objectWithoutProperties(_ref, [\"isChecked\", \"isDisabled\"]);\n\n  var color = colorOptions.bgUnchecked;\n  if (isChecked) color = colorOptions.bgChecked;\n  if (isDisabled && !isChecked) color = colorOptions.bgUncheckedDisabled;\n  if (isDisabled && isChecked) color = colorOptions.bgCheckedDisabled;\n  return color(rest);\n};\n\nvar getHoverStyles = function getHoverStyles(_ref2) {\n  var isChecked = _ref2.isChecked,\n      isDisabled = _ref2.isDisabled,\n      rest = _objectWithoutProperties(_ref2, [\"isChecked\", \"isDisabled\"]);\n\n  var bgcolor;\n\n  if (!isDisabled) {\n    bgcolor = isChecked ? colorOptions.bgCheckedHover : colorOptions.bgUncheckedHover;\n  }\n\n  return css([\"\\n    &:hover {\\n      \", \";\\n      cursor: \", \";\\n    }\\n  \"], bgcolor ? css([\"\\n            background-color: \", \";\\n          \"], bgcolor(rest)) : '', isDisabled ? 'not-allowed' : 'pointer');\n};\n\nvar getBorderColor = function getBorderColor(_ref3) {\n  var isFocused = _ref3.isFocused,\n      rest = _objectWithoutProperties(_ref3, [\"isFocused\"]);\n\n  return isFocused ? themed({\n    light: colors.B100,\n    dark: colors.B75\n  })(rest) : 'transparent';\n};\n\nexport default styled.div.withConfig({\n  displayName: \"Slide\",\n  componentId: \"bnah1s-0\"\n})([\"\\n  background-clip: content-box;\\n  background-color: \", \";\\n  border-radius: \", \"px;\\n  border: \", \" solid \", \";\\n  display: block;\\n  height: \", \"px;\\n  padding: \", \";\\n  position: relative;\\n  transition: \", \";\\n  width: \", \"px;\\n\\n  \", \";\\n\"], getBgColor, getHeight, borderWidth, getBorderColor, getHeight, borderWidth, transition, getWidth, getHoverStyles);","import styled from 'styled-components';\nimport { colors, themed } from '@atlaskit/theme';\nimport { transition } from './constants';\nvar color = themed({\n  light: colors.N0,\n  dark: colors.DN600\n});\nvar disabledColor = themed({\n  light: colors.N70,\n  dark: colors.DN30\n});\n\nvar getFlexDirection = function getFlexDirection(_ref) {\n  var isChecked = _ref.isChecked;\n  return isChecked ? 'row' : 'row-reverse';\n};\n\nexport default styled.div.withConfig({\n  displayName: \"Inner\",\n  componentId: \"sc-15bw73o-0\"\n})([\"\\n  color: \", \";\\n  display: flex;\\n  flex-direction: \", \";\\n  height: 100%;\\n  transition: \", \";\\n  width: 100%;\\n\"], function (_ref2) {\n  var isDisabled = _ref2.isDisabled;\n  return isDisabled ? disabledColor : color;\n}, getFlexDirection, transition);","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport styled from 'styled-components';\nimport { colors, themed } from '@atlaskit/theme';\nimport { getHeight, paddingUnitless, transition } from './constants';\nvar backgroundColor = themed({\n  light: colors.N0,\n  dark: colors.DN600\n});\nvar backgroundColorChecked = themed({\n  light: colors.N0,\n  dark: colors.DN0\n});\nvar backgroundColorDisabled = themed({\n  light: colors.N0,\n  dark: colors.DN0\n});\n\nvar getTransform = function getTransform(_ref) {\n  var isChecked = _ref.isChecked,\n      size = _ref.size;\n  return isChecked ? \"translateX(\".concat(getHeight({\n    size: size\n  }), \"px)\") : 'initial';\n};\n\nvar getBackgroundColor = function getBackgroundColor(_ref2) {\n  var isChecked = _ref2.isChecked,\n      isDisabled = _ref2.isDisabled,\n      rest = _objectWithoutProperties(_ref2, [\"isChecked\", \"isDisabled\"]);\n\n  if (isDisabled) return backgroundColorDisabled(rest);\n  if (isChecked) return backgroundColorChecked(rest);\n  return backgroundColor(rest);\n};\n\nexport default styled.span.withConfig({\n  displayName: \"Handle\",\n  componentId: \"n2edb7-0\"\n})([\"\\n  background-color: \", \";\\n  border-radius: 50%;\\n  bottom: \", \"px;\\n  content: '';\\n  height: \", \"px;\\n  left: \", \"px;\\n  position: absolute;\\n  transform: \", \";\\n  transition: \", \";\\n  width: \", \"px;\\n\"], getBackgroundColor, 2 * paddingUnitless, function (props) {\n  return getHeight(props) - paddingUnitless * 2;\n}, 2 * paddingUnitless, getTransform, transition, function (props) {\n  return getHeight(props) - paddingUnitless * 2;\n});","import styled from 'styled-components';\nimport { themed, colors } from '@atlaskit/theme';\nimport { getWidth, paddingUnitless } from './constants';\nvar iconPadding = \"\".concat(paddingUnitless / 2, \"px\");\n\nvar getPadding = function getPadding(_ref) {\n  var isChecked = _ref.isChecked;\n  return isChecked ? \"\\n    padding-left: \".concat(iconPadding, \";\\n    padding-right: 0;\\n  \") : \"\\n    padding-left: 0;\\n    padding-right: \".concat(iconPadding, \";\\n  \");\n}; // the Icon sizes are 16/24/32/48 so we have to force-scale the icons down to 20px this way\n\n\nvar iconSizing = function iconSizing(_ref2) {\n  var size = _ref2.size;\n  return size === 'large' ? \"> span { height: 20px; width: 20px; }\" : '';\n};\n\nvar getIconColor = function getIconColor(_ref3) {\n  var isChecked = _ref3.isChecked;\n  return isChecked ? themed({\n    light: 'inherit',\n    dark: colors.DN30\n  }) : themed({\n    light: 'inherit',\n    dark: colors.DN600\n  });\n};\n\nexport default styled.div.withConfig({\n  displayName: \"IconWrapper\",\n  componentId: \"sc-1y3jy9j-0\"\n})([\"\\n  display: flex;\\n  max-width: \", \"px;\\n  align-items: center;\\n  \", \";\\n  color: \", \";\\n  \", \";\\n\"], function (props) {\n  return getWidth(props) / 2;\n}, getPadding, getIconColor, iconSizing);","var defaultBaseProps = {\n  isDisabled: false,\n  onBlur: function onBlur() {},\n  onChange: function onChange() {},\n  onFocus: function onFocus() {},\n  size: 'regular',\n  label: '',\n  name: '',\n  value: ''\n};\nexport default defaultBaseProps;","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport uuid from 'uuid';\nimport React, { Component } from 'react';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport CloseIcon from '@atlaskit/icon/glyph/cross';\nimport ConfirmIcon from '@atlaskit/icon/glyph/check';\nimport { name as packageName, version as packageVersion } from '../package.json';\nimport { Handle, IconWrapper, Inner, Input, Label, Slide } from './styled';\nimport defaultBaseProps from './defaultBaseProps';\n\nvar ToggleStateless =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(ToggleStateless, _Component);\n\n  function ToggleStateless() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, ToggleStateless);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ToggleStateless)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      isFocused: false\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleBlur\", function (event) {\n      _this.setState({\n        isFocused: false\n      });\n\n      _this.props.onBlur(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleFocus\", function (event) {\n      _this.setState({\n        isFocused: true\n      });\n\n      _this.props.onFocus(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleChange\", function (event) {\n      if (_this.props.isDisabled) {\n        return;\n      }\n\n      _this.props.onChange(event);\n    });\n\n    return _this;\n  }\n\n  _createClass(ToggleStateless, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          isChecked = _this$props.isChecked,\n          isDisabled = _this$props.isDisabled,\n          label = _this$props.label,\n          name = _this$props.name,\n          size = _this$props.size,\n          value = _this$props.value;\n      var isFocused = this.state.isFocused;\n      var styledProps = {\n        isChecked: isChecked,\n        isDisabled: isDisabled,\n        isFocused: isFocused,\n        size: size\n      };\n      var Icon = isChecked ? ConfirmIcon : CloseIcon;\n      var id = uuid();\n      return React.createElement(Label, {\n        size: size,\n        isDisabled: isDisabled,\n        htmlFor: id\n      }, React.createElement(Input, {\n        checked: isChecked,\n        disabled: isDisabled,\n        id: id,\n        name: name,\n        onBlur: this.handleBlur,\n        onChange: this.handleChange,\n        onFocus: this.handleFocus,\n        type: \"checkbox\",\n        value: value\n      }), React.createElement(Slide, styledProps, React.createElement(Inner, styledProps, React.createElement(Handle, {\n        isChecked: isChecked,\n        isDisabled: isDisabled,\n        size: size\n      }), React.createElement(IconWrapper, {\n        isChecked: isChecked,\n        size: size\n      }, React.createElement(Icon, {\n        label: label || (isChecked ? 'Uncheck' : 'Check'),\n        size: size === 'large' ? null : 'small',\n        primaryColor: \"inherit\"\n      })))));\n    }\n  }]);\n\n  return ToggleStateless;\n}(Component);\n\n_defineProperty(ToggleStateless, \"defaultProps\", _objectSpread({}, defaultBaseProps, {\n  isChecked: false\n}));\n\nexport { ToggleStateless as ToggleStatelessWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'toggle',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onBlur: createAndFireEventOnAtlaskit({\n    action: 'blurred',\n    actionSubject: 'toggle',\n    attributes: {\n      componentName: 'toggle',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  }),\n  onChange: createAndFireEventOnAtlaskit({\n    action: 'changed',\n    actionSubject: 'toggle',\n    attributes: {\n      componentName: 'toggle',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  }),\n  onFocus: createAndFireEventOnAtlaskit({\n    action: 'focused',\n    actionSubject: 'toggle',\n    attributes: {\n      componentName: 'toggle',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(ToggleStateless));","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","/* @flow */\n\nimport { ToggleStateless } from '@atlaskit/toggle';\nimport React, { Component } from 'react';\n\ntype Props = {\n\n    /**\n     * CSS class name.\n     */\n    className: string,\n\n    /**\n     * Indicates whether the switch is disabled or not.\n     */\n    disabled: boolean,\n\n    /**\n     * Handler called when the user presses the switch.\n     */\n    onValueChange: Function,\n\n    /**\n     * The current value.\n     */\n    value: boolean\n};\n\n/**\n * Renders a boolean input.\n */\nexport default class Switch extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            className,\n            disabled,\n            onValueChange,\n            value,\n            ...props\n        } = this.props;\n\n        // TODO: onChange will be called with parameter Event. It will be good\n        // if we translate it to calling the onValueChange with the value as a\n        // parameter to match the native implementation.\n\n        return (\n            <div className = { className }>\n                <ToggleStateless\n                    isChecked = { value }\n                    isDisabled = { disabled }\n                    onChange = { onValueChange }\n                    { ...props } />\n            </div>\n        );\n    }\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../i18n';\nimport { connect } from '../../../redux';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The CSS style of the element with CSS class {@code rightwatermark}.\n *\n * @private\n */\nconst _RIGHT_WATERMARK_STYLE = {\n    backgroundImage: 'url(images/rightwatermark.png)'\n};\n\n/**\n * The type of the React {@code Component} props of {@link Watermarks}.\n */\ntype Props = {\n\n    /**\n     * Whether or not the current user is logged in through a JWT.\n     */\n    _isGuest: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link Watermarks}.\n */\ntype State = {\n\n    /**\n     * The url to open when clicking the brand watermark.\n     */\n    brandWatermarkLink: string,\n\n    /**\n     * The url to open when clicking the Jitsi watermark.\n     */\n    jitsiWatermarkLink: string,\n\n    /**\n     * Whether or not the brand watermark should be displayed.\n     */\n    showBrandWatermark: boolean,\n\n    /**\n     * Whether or not the Jitsi watermark should be displayed.\n     */\n    showJitsiWatermark: boolean,\n\n    /**\n     * Whether or not the Jitsi watermark should be displayed for users not\n     * logged in through a JWT.\n     */\n    showJitsiWatermarkForGuests: boolean,\n\n    /**\n     * Whether or not the show the \"powered by Jitsi.org\" link.\n     */\n    showPoweredBy: boolean\n};\n\n/**\n * A Web Component which renders watermarks such as Jits, brand, powered by,\n * etc.\n */\nclass Watermarks extends Component<Props, State> {\n    /**\n     * Initializes a new Watermarks instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        let showBrandWatermark;\n        let showJitsiWatermark;\n        let showJitsiWatermarkForGuests;\n\n        if (interfaceConfig.filmStripOnly) {\n            showBrandWatermark = false;\n            showJitsiWatermark = false;\n            showJitsiWatermarkForGuests = false;\n        } else {\n            showBrandWatermark = interfaceConfig.SHOW_BRAND_WATERMARK;\n            showJitsiWatermark = interfaceConfig.SHOW_JITSI_WATERMARK;\n            showJitsiWatermarkForGuests\n                = interfaceConfig.SHOW_WATERMARK_FOR_GUESTS;\n        }\n\n        this.state = {\n            brandWatermarkLink:\n                showBrandWatermark ? interfaceConfig.BRAND_WATERMARK_LINK : '',\n            jitsiWatermarkLink:\n                showJitsiWatermark || showJitsiWatermarkForGuests\n                    ? interfaceConfig.JITSI_WATERMARK_LINK : '',\n            showBrandWatermark,\n            showJitsiWatermark,\n            showJitsiWatermarkForGuests,\n            showPoweredBy: interfaceConfig.SHOW_POWERED_BY\n        };\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div>\n                {\n                    this._renderJitsiWatermark()\n                }\n                {\n                    this._renderBrandWatermark()\n                }\n                {\n                    this._renderPoweredBy()\n                }\n            </div>\n        );\n    }\n\n    /**\n     * Renders a brand watermark if it is enabled.\n     *\n     * @private\n     * @returns {ReactElement|null} Watermark element or null.\n     */\n    _renderBrandWatermark() {\n        let reactElement = null;\n\n        if (this.state.showBrandWatermark) {\n            reactElement = (\n                <div\n                    className = 'watermark rightwatermark'\n                    style = { _RIGHT_WATERMARK_STYLE } />\n            );\n\n            const { brandWatermarkLink } = this.state;\n\n            if (brandWatermarkLink) {\n                reactElement = (\n                    <a\n                        href = { brandWatermarkLink }\n                        target = '_new'>\n                        { reactElement }\n                    </a>\n                );\n            }\n        }\n\n        return reactElement;\n    }\n\n    /**\n     * Renders a Jitsi watermark if it is enabled.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderJitsiWatermark() {\n        let reactElement = null;\n\n        if (this.state.showJitsiWatermark\n                || (this.props._isGuest\n                    && this.state.showJitsiWatermarkForGuests)) {\n            reactElement = <div className = 'watermark leftwatermark' />;\n\n            const { jitsiWatermarkLink } = this.state;\n\n            if (jitsiWatermarkLink) {\n                reactElement = (\n                    <a\n                        href = { jitsiWatermarkLink }\n                        target = '_new'>\n                        { reactElement }\n                    </a>\n                );\n            }\n        }\n\n        return reactElement;\n    }\n\n    /**\n     * Renders a powered by block if it is enabled.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderPoweredBy() {\n        if (this.state.showPoweredBy) {\n            const { t } = this.props;\n\n            return (\n                <a\n                    className = 'poweredby'\n                    href = 'http://jitsi.org'\n                    target = '_new'>\n                    <span>{ t('poweredby') } jitsi.org</span>\n                </a>\n            );\n        }\n\n        return null;\n    }\n}\n\n/**\n * Maps parts of Redux store to component prop types.\n *\n * @param {Object} state - Snapshot of Redux store.\n * @returns {{\n *      _isGuest: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    const { isGuest } = state['features/base/jwt'];\n\n    return {\n        /**\n         * The indicator which determines whether the local participant is a\n         * guest in the conference.\n         *\n         * @private\n         * @type {boolean}\n         */\n        _isGuest: isGuest\n    };\n}\n\nexport default connect(_mapStateToProps)(translate(Watermarks));\n","// @flow\n\nimport { Component } from 'react';\n\n/**\n * Abstract component that defines a refreshable page to be rendered by\n * {@code PagedList}.\n */\nexport default class AbstractPage<P> extends Component<P> {\n    /**\n     * Method to be overriden by the implementing classes to refresh the data\n     * content of the component.\n     *\n     * Note: It is a static method as the {@code Component} may not be\n     * initialized yet when the UI invokes refresh (e.g. Tab change).\n     *\n     * @returns {void}\n     */\n    static refresh() {\n        // No implementation in abstract class.\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\n// TODO: Maybe try to make all NavigateSectionList components to work for both\n// mobile and web, and move them to NavigateSectionList component.\nimport {\n    NavigateSectionListEmptyComponent,\n    NavigateSectionListItem,\n    NavigateSectionListSectionHeader,\n    SectionList\n} from './_';\nimport type { Section } from '../Types';\n\ntype Props = {\n\n    /**\n     * Indicates if the list is disabled or not.\n     */\n    disabled: boolean,\n\n    /**\n     * Function to be invoked when an item is pressed. The item's URL is passed.\n     */\n    onPress: Function,\n\n    /**\n     * Function to be invoked when pull-to-refresh is performed.\n     */\n    onRefresh: Function,\n\n    /**\n     * Function to be invoked when a secondary action is performed on an item.\n     * The item's ID is passed.\n     */\n    onSecondaryAction: Function,\n\n    /**\n     * Function to override the rendered default empty list component.\n     */\n    renderListEmptyComponent: Function,\n\n    /**\n     * An array of sections\n     */\n    sections: Array<Section>,\n\n    /**\n     * Optional array of on-slide actions this list should support. For details\n     * see https://github.com/dancormier/react-native-swipeout.\n     */\n    slideActions?: Array<Object>\n};\n\n/**\n * Implements a general section list to display items that have a URL property\n * and navigates to (probably) meetings, such as the recent list or the meeting\n * list components.\n */\nclass NavigateSectionList extends Component<Props> {\n    /**\n     * Creates an empty section object.\n     *\n     * @param {string} title - The title of the section.\n     * @param {string} key - The key of the section. It must be unique.\n     * @private\n     * @returns {Object}\n     */\n    static createSection(title: string, key: string) {\n        return {\n            data: [],\n            key,\n            title\n        };\n    }\n\n    /**\n     * Constructor of the NavigateSectionList component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n        this._getItemKey = this._getItemKey.bind(this);\n        this._onPress = this._onPress.bind(this);\n        this._onRefresh = this._onRefresh.bind(this);\n        this._renderItem = this._renderItem.bind(this);\n        this._renderListEmptyComponent\n            = this._renderListEmptyComponent.bind(this);\n        this._renderSectionHeader = this._renderSectionHeader.bind(this);\n    }\n\n    /**\n     * Implements React's {@code Component.render}.\n     * Note: We don't use the refreshing value yet, because refreshing of these\n     * lists is super quick, no need to complicate the code - yet.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const {\n            renderListEmptyComponent = this._renderListEmptyComponent(),\n            sections\n        } = this.props;\n\n        return (\n            <SectionList\n                ListEmptyComponent = { renderListEmptyComponent }\n                keyExtractor = { this._getItemKey }\n                onItemClick = { this.props.onPress }\n                onRefresh = { this._onRefresh }\n                refreshing = { false }\n                renderItem = { this._renderItem }\n                renderSectionHeader = { this._renderSectionHeader }\n                sections = { sections } />\n        );\n    }\n\n    _getItemKey: (Object, number) => string;\n\n    /**\n     * Generates a unique id to every item.\n     *\n     * @param {Object} item - The item.\n     * @param {number} index - The item index.\n     * @private\n     * @returns {string}\n     */\n    _getItemKey(item, index) {\n        return `${index}-${item.key}`;\n    }\n\n    _onPress: string => Function;\n\n    /**\n     * Returns a function that is used in the onPress callback of the items.\n     *\n     * @param {string} url - The URL of the item to navigate to.\n     * @private\n     * @returns {Function}\n     */\n    _onPress(url) {\n        const { disabled, onPress } = this.props;\n\n        if (!disabled && url && typeof onPress === 'function') {\n            return () => onPress(url);\n        }\n\n        return null;\n    }\n\n    _onRefresh: () => void;\n\n    /**\n     * Invokes the onRefresh callback if present.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onRefresh() {\n        const { onRefresh } = this.props;\n\n        if (typeof onRefresh === 'function') {\n            onRefresh();\n        }\n    }\n\n    _onSecondaryAction: Object => Function;\n\n    /**\n     * Returns a function that is used in the secondaryAction callback of the\n     * items.\n     *\n     * @param {string} id - The id of the item that secondary action was\n     * performed on.\n     * @private\n     * @returns {Function}\n     */\n    _onSecondaryAction(id) {\n        return () => {\n            this.props.onSecondaryAction(id);\n        };\n    }\n\n    _renderItem: Object => Object;\n\n    /**\n     * Renders a single item in the list.\n     *\n     * @param {Object} listItem - The item to render.\n     * @param {string} key - The item needed for rendering using map on web.\n     * @private\n     * @returns {Component}\n     */\n    _renderItem(listItem, key: string = '') {\n        const { item } = listItem;\n        const { id, url } = item;\n\n        // XXX The value of title cannot be undefined; otherwise, react-native\n        // will throw a TypeError: Cannot read property of undefined. While it's\n        // difficult to get an undefined title and very likely requires the\n        // execution of incorrect source code, it is undesirable to break the\n        // whole app because of an undefined string.\n        if (typeof item.title === 'undefined') {\n            return null;\n        }\n\n        return (\n            <NavigateSectionListItem\n                item = { item }\n                key = { key }\n                onPress = { url ? this._onPress(url) : undefined }\n                secondaryAction = {\n                    url ? undefined : this._onSecondaryAction(id) }\n                slideActions = { this.props.slideActions } />\n        );\n    }\n\n    _renderListEmptyComponent: () => Object;\n\n    /**\n     * Renders a component to display when the list is empty.\n     *\n     * @param {Object} section - The section being rendered.\n     * @private\n     * @returns {React$Node}\n     */\n    _renderListEmptyComponent() {\n        const { onRefresh } = this.props;\n\n        if (typeof onRefresh === 'function') {\n            return (\n                <NavigateSectionListEmptyComponent />\n            );\n        }\n\n        return null;\n    }\n\n    _renderSectionHeader: Object => Object;\n\n    /**\n     * Renders a section header.\n     *\n     * @param {Object} section - The section being rendered.\n     * @private\n     * @returns {React$Node}\n     */\n    _renderSectionHeader(section) {\n        return (\n            <NavigateSectionListSectionHeader\n                section = { section } />\n        );\n    }\n}\n\nexport default NavigateSectionList;\n","// @flow\n\nexport * from './_';\nexport { default as AbstractPage } from './AbstractPage';\nexport { default as NavigateSectionList } from './NavigateSectionList';\n","export var SIZES_MAP = {\n  xsmall: 8,\n  small: 16,\n  medium: 24,\n  large: 48,\n  xlarge: 96\n};\nexport var DEFAULT_SIZE = SIZES_MAP.small;","import styled, { keyframes } from 'styled-components';\n\n/* Define keyframes statically to prevent a perfomance issue in styled components v1 where the keyframes function\n * does not cache previous values resulting in each spinner injecting the same keyframe definition\n * in the DOM.\n * This can be reverted to use dynamic keyframes when we upgrade to styled components v2\n */\nvar keyframeNames = {\n  noop: keyframes([\"\\n    from { opacity: 0; }\\n    to { opacity: 0; }\\n  \"]),\n  enterRotate: keyframes([\"\\n    from { transform: rotate(50deg); }\\n    to { transform: rotate(230deg); }\\n  \"]),\n  leaveRotate: keyframes([\"\\n    from { transform: rotate(230deg); }\\n    to { transform: rotate(510deg); }\\n  \"]),\n  leaveOpacity: keyframes([\"\\n    from { opacity: 1; }\\n    to { opacity: 0; }\\n  \"])\n};\nexport var getContainerAnimation = function getContainerAnimation(_ref) {\n  var delay = _ref.delay,\n      phase = _ref.phase;\n\n  if (phase === 'DELAY') {\n    /* This hides the spinner and allows us to use animationend events to move to the next phase in\n     * the same way we do with the other lifecycle stages */\n    return \"animation: \".concat(delay, \"s \").concat(keyframeNames.noop, \";\");\n  }\n\n  if (phase === 'ENTER' || phase === 'IDLE') {\n    return \"animation: 1s ease-in-out forwards \".concat(keyframeNames.enterRotate, \";\");\n  }\n\n  if (phase === 'LEAVE') {\n    return \"animation: 0.53s ease-in-out forwards \".concat(keyframeNames.leaveRotate, \",\\n      0.2s ease-in-out 0.33s \").concat(keyframeNames.leaveOpacity, \";\");\n  }\n\n  return '';\n};\n\nvar getSize = function getSize(_ref2) {\n  var size = _ref2.size;\n  return \"\".concat(size, \"px\");\n};\n\nvar Container = styled.div.withConfig({\n  displayName: \"styledContainer__Container\",\n  componentId: \"sc-1qs8wxp-0\"\n})([\"\\n  \", \" display: flex;\\n  height: \", \";\\n  width: \", \";\\n\\n  /* Rapidly creating and removing spinners will result in multiple spinners being visible while\\n   * they complete their exit animations. This rules hides the spinner if another one has been\\n   * added. */\\n  div + & {\\n    display: none;\\n  }\\n\"], getContainerAnimation, getSize, getSize);\nContainer.displayName = 'SpinnerContainer';\nexport default Container;","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport styled, { css, keyframes } from 'styled-components';\nimport { colors, themed } from '@atlaskit/theme';\nimport { SIZES_MAP } from './constants';\n\nvar getStrokeWidth = function getStrokeWidth(size) {\n  return Math.round(size / 10);\n};\n\nvar getStrokeCircumference = function getStrokeCircumference(size) {\n  var strokeWidth = getStrokeWidth(size);\n  var strokeRadius = size / 2 - strokeWidth / 2;\n  return Math.PI * strokeRadius * 2;\n};\n/* Define keyframes statically to prevent a perfomance issue in styled components v1 where the keyframes function\n * does not cache previous values resulting in each spinner injecting the same keyframe definition\n * in the DOM.\n * This can be reverted to dynamic keyframes when we upgrade to styled components v2\n */\n\n\nvar keyframeNames = {\n  noop: keyframes([\"\\n    from { opacity: 0; }\\n    to { opacity: 0; }\\n  \"]),\n  rotate: keyframes([\"\\n    to { transform: rotate(360deg); }\\n  \"]),\n  enterOpacity: keyframes([\"\\n    from { opacity: 0; }\\n    to { opacity: 1; }\\n  \"]),\n  smallEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.small), getStrokeCircumference(SIZES_MAP.small) * 0.8),\n  mediumEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.medium), getStrokeCircumference(SIZES_MAP.medium) * 0.8),\n  largeEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.large), getStrokeCircumference(SIZES_MAP.large) * 0.8),\n  xlargeEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.xlarge), getStrokeCircumference(SIZES_MAP.xlarge) * 0.8)\n};\n/* If a standard size is used, we can use one of our statically defined keyframes, otherwise\n * we're forced to dynamically create the keyframe and incur a performance cost.\n */\n\nvar getEnterStrokeKeyframe = function getEnterStrokeKeyframe(size) {\n  var standardSizeName = Object.keys(SIZES_MAP).find(function (sizeName) {\n    return size === SIZES_MAP[sizeName];\n  });\n\n  if (standardSizeName) {\n    return keyframeNames[\"\".concat(standardSizeName, \"EnterStroke\")];\n  }\n\n  var circumference = getStrokeCircumference(size);\n  return keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], circumference, circumference * 0.8);\n};\n\nvar spinnerColor = themed({\n  light: colors.N500,\n  dark: colors.N0\n});\nvar spinnerColorInverted = themed({\n  light: colors.N0,\n  dark: colors.N0\n});\nexport var getStrokeColor = function getStrokeColor(_ref // $FlowFixMe - theme is not found in props\n) {\n  var invertColor = _ref.invertColor,\n      props = _objectWithoutProperties(_ref, [\"invertColor\"]);\n\n  return invertColor ? spinnerColorInverted(props) : spinnerColor(props);\n};\nexport var svgStyles = css([\"\\n  \", \";\\n\"], function (props) {\n  var circumference = getStrokeCircumference(props.size);\n  var idleRotation = \"0.86s cubic-bezier(0.4, 0.15, 0.6, 0.85) infinite \".concat(keyframeNames.rotate);\n  var spinUpStroke = \"0.8s ease-in-out \".concat(getEnterStrokeKeyframe(props.size));\n  var spinUpOpacity = \"0.2s ease-in-out \".concat(keyframeNames.enterOpacity);\n  var activeAnimations = [idleRotation];\n\n  if (props.phase === 'ENTER') {\n    activeAnimations.push(spinUpStroke, spinUpOpacity);\n  }\n\n  return css([\"\\n      animation: \", \";\\n      fill: none;\\n      stroke: \", \";\\n      stroke-dasharray: \", \"px;\\n      stroke-dashoffset: \", \"px;\\n      stroke-linecap: round;\\n      stroke-width: \", \"px;\\n      transform-origin: center;\\n    \"], activeAnimations.join(', '), getStrokeColor, circumference, circumference * 0.8, getStrokeWidth(props.size));\n});\nvar Svg = styled.svg.withConfig({\n  displayName: \"styledSvg__Svg\",\n  componentId: \"y2l69q-0\"\n})([\"\\n  \", \";\\n\"], svgStyles);\nSvg.displayName = 'SpinnerSvg';\nexport default Svg;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { Transition } from 'react-transition-group';\nimport styled from 'styled-components';\nimport { SIZES_MAP, DEFAULT_SIZE } from './constants';\nimport Container from './styledContainer';\nimport Svg from './styledSvg';\nvar Outer = styled.div.withConfig({\n  displayName: \"Spinner__Outer\",\n  componentId: \"sc-1ejgacn-0\"\n})([\"\\n  display: inline-block;\\n  vertical-align: middle;\\n\"]);\nOuter.displayName = 'Outer';\n\nvar Spinner =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Spinner, _Component);\n\n  function Spinner(props) {\n    var _this;\n\n    _classCallCheck(this, Spinner);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Spinner).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"transitionNode\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"enter\", function () {\n      var delay = _this.props.delay;\n\n      if (delay) {\n        _this.setState({\n          phase: 'DELAY'\n        });\n      } else {\n        _this.setState({\n          phase: 'ENTER'\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"idle\", function () {\n      _this.setState({\n        phase: 'IDLE'\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"exit\", function () {\n      _this.setState({\n        phase: 'LEAVE'\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"endListener\", function (node, done) {\n      var executeCallback = function executeCallback(event) {\n        // ignore animation events on the glyph\n        // $FlowFixMe - tagName does not exist in event.target\n        if (event.target.tagName === 'svg') {\n          return false;\n        }\n\n        if (_this.state.phase === 'DELAY') {\n          _this.setState({\n            phase: 'ENTER'\n          });\n\n          _this.endListener(node, done);\n        } else {\n          done();\n        }\n\n        return node && node.removeEventListener('animationend', executeCallback);\n      };\n\n      return node && node.addEventListener('animationend', executeCallback);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"validateSize\", function () {\n      var size = _this.props.size;\n      var spinnerSize = SIZES_MAP[size] || size;\n      return typeof spinnerSize === 'number' ? spinnerSize : DEFAULT_SIZE;\n    });\n\n    _this.state = {\n      phase: ''\n    };\n    return _this;\n  }\n\n  _createClass(Spinner, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var phase = this.state.phase;\n      var _this$props = this.props,\n          delay = _this$props.delay,\n          invertColor = _this$props.invertColor,\n          isCompleting = _this$props.isCompleting;\n      var size = this.validateSize();\n      var strokeWidth = Math.round(size / 10);\n      var strokeRadius = size / 2 - strokeWidth / 2;\n      return React.createElement(Outer, null, React.createElement(Transition, {\n        addEndListener: this.endListener,\n        appear: true,\n        in: !isCompleting,\n        mountOnEnter: true,\n        unmountOnExit: true,\n        onEnter: this.enter,\n        onEntered: this.idle,\n        onExit: this.exit,\n        onExited: function onExited() {\n          return _this2.props.onComplete();\n        },\n        ref: function ref(node) {\n          _this2.transitionNode = node;\n        }\n      }, React.createElement(Container, {\n        delay: delay / 1000,\n        phase: phase,\n        size: size\n      }, React.createElement(Svg, {\n        focusable: \"false\",\n        height: size,\n        invertColor: invertColor,\n        phase: phase,\n        size: size,\n        viewBox: \"0 0 \".concat(size, \" \").concat(size),\n        width: size,\n        xmlns: \"http://www.w3.org/2000/svg\"\n      }, React.createElement(\"circle\", {\n        cx: size / 2,\n        cy: size / 2,\n        r: strokeRadius\n      })))));\n    }\n  }]);\n\n  return Spinner;\n}(Component);\n\n_defineProperty(Spinner, \"defaultProps\", {\n  delay: 100,\n  isCompleting: false,\n  invertColor: false,\n  onComplete: function onComplete() {},\n  size: 'medium'\n});\n\nexport { Spinner as default };","/* global $, APP, JitsiMeetJS, config, interfaceConfig */\n\nimport { openConnection } from './connection';\n\nimport { ENDPOINT_TEXT_MESSAGE_NAME } from './modules/API/constants';\nimport AuthHandler from './modules/UI/authentication/AuthHandler';\nimport Recorder from './modules/recorder/Recorder';\n\nimport mediaDeviceHelper from './modules/devices/mediaDeviceHelper';\n\nimport * as RemoteControlEvents\n    from './service/remotecontrol/RemoteControlEvents';\nimport UIEvents from './service/UI/UIEvents';\nimport UIUtil from './modules/UI/util/UIUtil';\nimport { createTaskQueue } from './modules/util/helpers';\nimport * as JitsiMeetConferenceEvents from './ConferenceEvents';\n\nimport {\n    createDeviceChangedEvent,\n    createStartSilentEvent,\n    createScreenSharingEvent,\n    createTrackMutedEvent,\n    sendAnalytics\n} from './react/features/analytics';\nimport {\n    maybeRedirectToWelcomePage,\n    redirectToStaticPage,\n    reloadWithStoredParams\n} from './react/features/app';\nimport {\n    initPrejoin,\n    isPrejoinPageEnabled,\n    isPrejoinPageVisible,\n    replacePrejoinAudioTrack,\n    replacePrejoinVideoTrack\n} from './react/features/prejoin';\n\nimport EventEmitter from 'events';\n\nimport {\n    AVATAR_ID_COMMAND,\n    AVATAR_URL_COMMAND,\n    EMAIL_COMMAND,\n    authStatusChanged,\n    commonUserJoinedHandling,\n    commonUserLeftHandling,\n    conferenceFailed,\n    conferenceJoined,\n    conferenceLeft,\n    conferenceSubjectChanged,\n    conferenceTimestampChanged,\n    conferenceWillJoin,\n    conferenceWillLeave,\n    dataChannelOpened,\n    kickedOut,\n    lockStateChanged,\n    onStartMutedPolicyChanged,\n    p2pStatusChanged,\n    sendLocalParticipant,\n    setDesktopSharingEnabled\n} from './react/features/base/conference';\nimport {\n    checkAndNotifyForNewDevice,\n    getAvailableDevices,\n    notifyCameraError,\n    notifyMicError,\n    setAudioOutputDeviceId,\n    updateDeviceList\n} from './react/features/base/devices';\nimport {\n    isFatalJitsiConnectionError,\n    JitsiConferenceErrors,\n    JitsiConferenceEvents,\n    JitsiConnectionErrors,\n    JitsiConnectionEvents,\n    JitsiMediaDevicesEvents,\n    JitsiParticipantConnectionStatus,\n    JitsiTrackErrors,\n    JitsiTrackEvents\n} from './react/features/base/lib-jitsi-meet';\nimport {\n    isVideoMutedByUser,\n    MEDIA_TYPE,\n    setAudioAvailable,\n    setAudioMuted,\n    setVideoAvailable,\n    setVideoMuted\n} from './react/features/base/media';\nimport { showNotification } from './react/features/notifications';\nimport {\n    dominantSpeakerChanged,\n    getLocalParticipant,\n    getNormalizedDisplayName,\n    getParticipantById,\n    localParticipantConnectionStatusChanged,\n    localParticipantRoleChanged,\n    participantConnectionStatusChanged,\n    participantKicked,\n    participantMutedUs,\n    participantPresenceChanged,\n    participantRoleChanged,\n    participantUpdated\n} from './react/features/base/participants';\nimport {\n    getUserSelectedCameraDeviceId,\n    updateSettings\n} from './react/features/base/settings';\nimport {\n    createLocalPresenterTrack,\n    createLocalTracksF,\n    destroyLocalTracks,\n    isLocalVideoTrackMuted,\n    isLocalTrackMuted,\n    isUserInteractionRequiredForUnmute,\n    replaceLocalTrack,\n    trackAdded,\n    trackRemoved\n} from './react/features/base/tracks';\nimport { getJitsiMeetGlobalNS } from './react/features/base/util';\nimport { showDesktopPicker } from './react/features/desktop-picker';\nimport { appendSuffix } from './react/features/display-name';\nimport { setE2EEKey } from './react/features/e2ee';\nimport {\n    maybeOpenFeedbackDialog,\n    submitFeedback\n} from './react/features/feedback';\nimport { mediaPermissionPromptVisibilityChanged } from './react/features/overlay';\nimport { suspendDetected } from './react/features/power-monitor';\nimport { setSharedVideoStatus } from './react/features/shared-video';\nimport { AudioMixerEffect } from './react/features/stream-effects/audio-mixer/AudioMixerEffect';\nimport { createPresenterEffect } from './react/features/stream-effects/presenter';\nimport { endpointMessageReceived } from './react/features/subtitles';\nimport { createRnnoiseProcessorPromise } from './react/features/rnnoise';\nimport { toggleScreenshotCaptureEffect } from './react/features/screenshot-capture';\n\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\nconst eventEmitter = new EventEmitter();\n\nlet room;\nlet connection;\n\n/**\n * The promise is used when the prejoin screen is shown.\n * While the user configures the devices the connection can be made.\n *\n * @type {Promise<Object>}\n * @private\n */\nlet _connectionPromise;\n\n/**\n * This promise is used for chaining mutePresenterVideo calls in order to avoid  calling GUM multiple times if it takes\n * a while to finish.\n *\n * @type {Promise<void>}\n * @private\n */\nlet _prevMutePresenterVideo = Promise.resolve();\n\n/*\n * Logic to open a desktop picker put on the window global for\n * lib-jitsi-meet to detect and invoke\n */\nwindow.JitsiMeetScreenObtainer = {\n    openDesktopPicker(options, onSourceChoose) {\n        APP.store.dispatch(showDesktopPicker(options, onSourceChoose));\n    }\n};\n\n/**\n * Known custom conference commands.\n */\nconst commands = {\n    AVATAR_ID: AVATAR_ID_COMMAND,\n    AVATAR_URL: AVATAR_URL_COMMAND,\n    CUSTOM_ROLE: 'custom-role',\n    EMAIL: EMAIL_COMMAND,\n    ETHERPAD: 'etherpad',\n    SHARED_VIDEO: 'shared-video'\n};\n\n/**\n * Open Connection. When authentication failed it shows auth dialog.\n * @param roomName the room name to use\n * @returns Promise<JitsiConnection>\n */\nfunction connect(roomName) {\n    return openConnection({\n        retry: true,\n        roomName\n    })\n    .catch(err => {\n        if (err === JitsiConnectionErrors.PASSWORD_REQUIRED) {\n            APP.UI.notifyTokenAuthFailed();\n        } else {\n            APP.UI.notifyConnectionFailed(err);\n        }\n        throw err;\n    });\n}\n\n/**\n * Share data to other users.\n * @param command the command\n * @param {string} value new value\n */\nfunction sendData(command, value) {\n    if (!room) {\n        return;\n    }\n\n    room.removeCommand(command);\n    room.sendCommand(command, { value });\n}\n\n/**\n * Get user nickname by user id.\n * @param {string} id user id\n * @returns {string?} user nickname or undefined if user is unknown.\n */\nfunction getDisplayName(id) {\n    const participant = getParticipantById(APP.store.getState(), id);\n\n    return participant && participant.name;\n}\n\n/**\n * Mute or unmute local audio stream if it exists.\n * @param {boolean} muted - if audio stream should be muted or unmuted.\n */\nfunction muteLocalAudio(muted) {\n    APP.store.dispatch(setAudioMuted(muted));\n}\n\n/**\n * Mute or unmute local video stream if it exists.\n * @param {boolean} muted if video stream should be muted or unmuted.\n *\n */\nfunction muteLocalVideo(muted) {\n    APP.store.dispatch(setVideoMuted(muted));\n}\n\n/**\n * A queue for the async replaceLocalTrack action so that multiple audio\n * replacements cannot happen simultaneously. This solves the issue where\n * replaceLocalTrack is called multiple times with an oldTrack of null, causing\n * multiple local tracks of the same type to be used.\n *\n * @private\n * @type {Object}\n */\nconst _replaceLocalAudioTrackQueue = createTaskQueue();\n\n/**\n * A task queue for replacement local video tracks. This separate queue exists\n * so video replacement is not blocked by audio replacement tasks in the queue\n * {@link _replaceLocalAudioTrackQueue}.\n *\n * @private\n * @type {Object}\n */\nconst _replaceLocalVideoTrackQueue = createTaskQueue();\n\n/**\n *\n */\nclass ConferenceConnector {\n    /**\n     *\n     */\n    constructor(resolve, reject) {\n        this._resolve = resolve;\n        this._reject = reject;\n        this.reconnectTimeout = null;\n        room.on(JitsiConferenceEvents.CONFERENCE_JOINED,\n            this._handleConferenceJoined.bind(this));\n        room.on(JitsiConferenceEvents.CONFERENCE_FAILED,\n            this._onConferenceFailed.bind(this));\n    }\n\n    /**\n     *\n     */\n    _handleConferenceFailed(err) {\n        this._unsubscribe();\n        this._reject(err);\n    }\n\n    /**\n     *\n     */\n    _onConferenceFailed(err, ...params) {\n        APP.store.dispatch(conferenceFailed(room, err, ...params));\n        logger.error('CONFERENCE FAILED:', err, ...params);\n\n        switch (err) {\n        case JitsiConferenceErrors.CONNECTION_ERROR: {\n            const [ msg ] = params;\n\n            APP.UI.notifyConnectionFailed(msg);\n            break;\n        }\n\n        case JitsiConferenceErrors.NOT_ALLOWED_ERROR: {\n            // let's show some auth not allowed page\n            APP.store.dispatch(redirectToStaticPage('static/authError.html'));\n            break;\n        }\n\n        // not enough rights to create conference\n        case JitsiConferenceErrors.AUTHENTICATION_REQUIRED: {\n            // Schedule reconnect to check if someone else created the room.\n            this.reconnectTimeout = setTimeout(() => {\n                APP.store.dispatch(conferenceWillJoin(room));\n                room.join();\n            }, 5000);\n\n            const { password }\n                = APP.store.getState()['features/base/conference'];\n\n            AuthHandler.requireAuth(room, password);\n\n            break;\n        }\n\n        case JitsiConferenceErrors.RESERVATION_ERROR: {\n            const [ code, msg ] = params;\n\n            APP.UI.notifyReservationError(code, msg);\n            break;\n        }\n\n        case JitsiConferenceErrors.GRACEFUL_SHUTDOWN:\n            APP.UI.notifyGracefulShutdown();\n            break;\n\n        case JitsiConferenceErrors.CONFERENCE_DESTROYED: {\n            const [ reason ] = params;\n\n            APP.UI.hideStats();\n            APP.UI.notifyConferenceDestroyed(reason);\n            break;\n        }\n\n        // FIXME FOCUS_DISCONNECTED is a confusing event name.\n        // What really happens there is that the library is not ready yet,\n        // because Jicofo is not available, but it is going to give it another\n        // try.\n        case JitsiConferenceErrors.FOCUS_DISCONNECTED: {\n            const [ focus, retrySec ] = params;\n\n            APP.UI.notifyFocusDisconnected(focus, retrySec);\n            break;\n        }\n\n        case JitsiConferenceErrors.FOCUS_LEFT:\n        case JitsiConferenceErrors.ICE_FAILED:\n        case JitsiConferenceErrors.VIDEOBRIDGE_NOT_AVAILABLE:\n        case JitsiConferenceErrors.OFFER_ANSWER_FAILED:\n            APP.store.dispatch(conferenceWillLeave(room));\n\n            // FIXME the conference should be stopped by the library and not by\n            // the app. Both the errors above are unrecoverable from the library\n            // perspective.\n            room.leave().then(() => connection.disconnect());\n            break;\n\n        case JitsiConferenceErrors.CONFERENCE_MAX_USERS:\n            connection.disconnect();\n            APP.UI.notifyMaxUsersLimitReached();\n            break;\n\n        case JitsiConferenceErrors.INCOMPATIBLE_SERVER_VERSIONS:\n            APP.store.dispatch(reloadWithStoredParams());\n            break;\n\n        default:\n            this._handleConferenceFailed(err, ...params);\n        }\n    }\n\n    /**\n     *\n     */\n    _unsubscribe() {\n        room.off(\n            JitsiConferenceEvents.CONFERENCE_JOINED,\n            this._handleConferenceJoined);\n        room.off(\n            JitsiConferenceEvents.CONFERENCE_FAILED,\n            this._onConferenceFailed);\n        if (this.reconnectTimeout !== null) {\n            clearTimeout(this.reconnectTimeout);\n        }\n        AuthHandler.closeAuth();\n    }\n\n    /**\n     *\n     */\n    _handleConferenceJoined() {\n        this._unsubscribe();\n        this._resolve();\n    }\n\n    /**\n     *\n     */\n    connect() {\n        room.join();\n    }\n}\n\n/**\n * Disconnects the connection.\n * @returns resolved Promise. We need this in order to make the Promise.all\n * call in hangup() to resolve when all operations are finished.\n */\nfunction disconnect() {\n    const onDisconnected = () => {\n        APP.API.notifyConferenceLeft(APP.conference.roomName);\n\n        return Promise.resolve();\n    };\n\n    return connection.disconnect().then(onDisconnected, onDisconnected);\n}\n\n/**\n * Handles CONNECTION_FAILED events from lib-jitsi-meet.\n *\n * @param {JitsiConnectionError} error - The reported error.\n * @returns {void}\n * @private\n */\nfunction _connectionFailedHandler(error) {\n    if (isFatalJitsiConnectionError(error)) {\n        APP.connection.removeEventListener(\n            JitsiConnectionEvents.CONNECTION_FAILED,\n            _connectionFailedHandler);\n        if (room) {\n            APP.store.dispatch(conferenceWillLeave(room));\n            room.leave();\n        }\n    }\n}\n\nexport default {\n    /**\n     * Flag used to delay modification of the muted status of local media tracks\n     * until those are created (or not, but at that point it's certain that\n     * the tracks won't exist).\n     */\n    _localTracksInitialized: false,\n    isSharingScreen: false,\n\n    /**\n     * Indicates if the desktop sharing functionality has been enabled.\n     * It takes into consideration the status returned by\n     * {@link JitsiMeetJS.isDesktopSharingEnabled()}. The latter can be false\n     * either if the desktop sharing is not supported by the current browser\n     * or if it was disabled through lib-jitsi-meet specific options (check\n     * config.js for listed options).\n     */\n    isDesktopSharingEnabled: false,\n\n    /**\n     * The local audio track (if any).\n     * FIXME tracks from redux store should be the single source of truth\n     * @type {JitsiLocalTrack|null}\n     */\n    localAudio: null,\n\n    /**\n     * The local presenter video track (if any).\n     * @type {JitsiLocalTrack|null}\n     */\n    localPresenterVideo: null,\n\n    /**\n     * The local video track (if any).\n     * FIXME tracks from redux store should be the single source of truth, but\n     * more refactoring is required around screen sharing ('localVideo' usages).\n     * @type {JitsiLocalTrack|null}\n     */\n    localVideo: null,\n\n    /**\n     * Returns an object containing a promise which resolves with the created tracks &\n     * the errors resulting from that process.\n     *\n     * @returns {Promise<JitsiLocalTrack[]>, Object}\n     */\n    createInitialLocalTracks(options = {}) {\n        const errors = {};\n        const initialDevices = [ 'audio' ];\n        const requestedAudio = true;\n        let requestedVideo = false;\n\n        // Always get a handle on the audio input device so that we have statistics even if the user joins the\n        // conference muted. Previous implementation would only acquire the handle when the user first unmuted,\n        // which would results in statistics ( such as \"No audio input\" or \"Are you trying to speak?\") being available\n        // only after that point.\n        if (options.startWithAudioMuted) {\n            this.muteAudio(true, true);\n        }\n\n        if (!options.startWithVideoMuted\n                && !options.startAudioOnly\n                && !options.startScreenSharing) {\n            initialDevices.push('video');\n            requestedVideo = true;\n        }\n\n        JitsiMeetJS.mediaDevices.addEventListener(\n            JitsiMediaDevicesEvents.PERMISSION_PROMPT_IS_SHOWN,\n            browser =>\n                APP.store.dispatch(\n                    mediaPermissionPromptVisibilityChanged(true, browser))\n        );\n\n        let tryCreateLocalTracks;\n\n        // FIXME is there any simpler way to rewrite this spaghetti below ?\n        if (options.startScreenSharing) {\n            tryCreateLocalTracks = this._createDesktopTrack()\n                .then(([ desktopStream ]) => {\n                    if (!requestedAudio) {\n                        return [ desktopStream ];\n                    }\n\n                    return createLocalTracksF({ devices: [ 'audio' ] }, true)\n                        .then(([ audioStream ]) =>\n                            [ desktopStream, audioStream ])\n                        .catch(error => {\n                            errors.audioOnlyError = error;\n\n                            return [ desktopStream ];\n                        });\n                })\n                .catch(error => {\n                    logger.error('Failed to obtain desktop stream', error);\n                    errors.screenSharingError = error;\n\n                    return requestedAudio\n                        ? createLocalTracksF({ devices: [ 'audio' ] }, true)\n                        : [];\n                })\n                .catch(error => {\n                    errors.audioOnlyError = error;\n\n                    return [];\n                });\n        } else if (!requestedAudio && !requestedVideo) {\n            // Resolve with no tracks\n            tryCreateLocalTracks = Promise.resolve([]);\n        } else {\n            tryCreateLocalTracks = createLocalTracksF({ devices: initialDevices }, true)\n                .catch(err => {\n                    if (requestedAudio && requestedVideo) {\n\n                        // Try audio only...\n                        errors.audioAndVideoError = err;\n\n                        return (\n                            createLocalTracksF({ devices: [ 'audio' ] }, true));\n                    } else if (requestedAudio && !requestedVideo) {\n                        errors.audioOnlyError = err;\n\n                        return [];\n                    } else if (requestedVideo && !requestedAudio) {\n                        errors.videoOnlyError = err;\n\n                        return [];\n                    }\n                    logger.error('Should never happen');\n                })\n                .catch(err => {\n                    // Log this just in case...\n                    if (!requestedAudio) {\n                        logger.error('The impossible just happened', err);\n                    }\n                    errors.audioOnlyError = err;\n\n                    // Try video only...\n                    return requestedVideo\n                        ? createLocalTracksF({ devices: [ 'video' ] }, true)\n                        : [];\n                })\n                .catch(err => {\n                    // Log this just in case...\n                    if (!requestedVideo) {\n                        logger.error('The impossible just happened', err);\n                    }\n                    errors.videoOnlyError = err;\n\n                    return [];\n                });\n        }\n\n        // Hide the permissions prompt/overlay as soon as the tracks are\n        // created. Don't wait for the connection to be made, since in some\n        // cases, when auth is rquired, for instance, that won't happen until\n        // the user inputs their credentials, but the dialog would be\n        // overshadowed by the overlay.\n        tryCreateLocalTracks.then(tracks => {\n            APP.store.dispatch(mediaPermissionPromptVisibilityChanged(false));\n\n            return tracks;\n        });\n\n        return {\n            tryCreateLocalTracks,\n            errors\n        };\n    },\n\n    /**\n     * Creates local media tracks and connects to a room. Will show error\n     * dialogs in case accessing the local microphone and/or camera failed. Will\n     * show guidance overlay for users on how to give access to camera and/or\n     * microphone.\n     * @param {string} roomName\n     * @param {object} options\n     * @param {boolean} options.startAudioOnly=false - if <tt>true</tt> then\n     * only audio track will be created and the audio only mode will be turned\n     * on.\n     * @param {boolean} options.startScreenSharing=false - if <tt>true</tt>\n     * should start with screensharing instead of camera video.\n     * @param {boolean} options.startWithAudioMuted - will start the conference\n     * without any audio tracks.\n     * @param {boolean} options.startWithVideoMuted - will start the conference\n     * without any video tracks.\n     * @returns {Promise.<JitsiLocalTrack[], JitsiConnection>}\n     */\n    createInitialLocalTracksAndConnect(roomName, options = {}) {\n        const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(options);\n        const {\n            audioAndVideoError,\n            audioOnlyError,\n            screenSharingError,\n            videoOnlyError\n        } = errors;\n\n        return Promise.all([ tryCreateLocalTracks, connect(roomName) ])\n            .then(([ tracks, con ]) => {\n                // FIXME If there will be microphone error it will cover any\n                // screensharing dialog, but it's still better than in\n                // the reverse order where the screensharing dialog will\n                // sometimes be closing the microphone alert ($.prompt.close();\n                // is called). Need to figure out dialogs chaining to fix that.\n                if (screenSharingError) {\n                    this._handleScreenSharingError(screenSharingError);\n                }\n                if (audioAndVideoError || audioOnlyError) {\n                    if (audioOnlyError || videoOnlyError) {\n                        // If both requests for 'audio' + 'video' and 'audio'\n                        // only failed, we assume that there are some problems\n                        // with user's microphone and show corresponding dialog.\n                        APP.store.dispatch(notifyMicError(audioOnlyError));\n                        APP.store.dispatch(notifyCameraError(videoOnlyError));\n                    } else {\n                        // If request for 'audio' + 'video' failed, but request\n                        // for 'audio' only was OK, we assume that we had\n                        // problems with camera and show corresponding dialog.\n                        APP.store.dispatch(\n                            notifyCameraError(audioAndVideoError));\n                    }\n                }\n\n                return [ tracks, con ];\n            });\n    },\n\n    startConference(con, tracks) {\n        tracks.forEach(track => {\n            if ((track.isAudioTrack() && this.isLocalAudioMuted())\n                || (track.isVideoTrack() && this.isLocalVideoMuted())) {\n                const mediaType = track.getType();\n\n                sendAnalytics(\n                    createTrackMutedEvent(mediaType, 'initial mute'));\n                logger.log(`${mediaType} mute: initially muted.`);\n                track.mute();\n            }\n        });\n        logger.log(`Initialized with ${tracks.length} local tracks`);\n\n        this._localTracksInitialized = true;\n        con.addEventListener(JitsiConnectionEvents.CONNECTION_FAILED, _connectionFailedHandler);\n        APP.connection = connection = con;\n\n        // Desktop sharing related stuff:\n        this.isDesktopSharingEnabled\n            = JitsiMeetJS.isDesktopSharingEnabled();\n        eventEmitter.emit(JitsiMeetConferenceEvents.DESKTOP_SHARING_ENABLED_CHANGED, this.isDesktopSharingEnabled);\n\n        APP.store.dispatch(\n            setDesktopSharingEnabled(this.isDesktopSharingEnabled));\n\n        this._createRoom(tracks);\n        APP.remoteControl.init();\n\n        // if user didn't give access to mic or camera or doesn't have\n        // them at all, we mark corresponding toolbar buttons as muted,\n        // so that the user can try unmute later on and add audio/video\n        // to the conference\n        if (!tracks.find(t => t.isAudioTrack())) {\n            this.setAudioMuteStatus(true);\n        }\n\n        if (!tracks.find(t => t.isVideoTrack())) {\n            this.setVideoMuteStatus(true);\n        }\n\n        if (config.iAmRecorder) {\n            this.recorder = new Recorder();\n        }\n\n        if (config.startSilent) {\n            sendAnalytics(createStartSilentEvent());\n            APP.store.dispatch(showNotification({\n                descriptionKey: 'notify.startSilentDescription',\n                titleKey: 'notify.startSilentTitle'\n            }));\n        }\n\n        // XXX The API will take care of disconnecting from the XMPP\n        // server (and, thus, leaving the room) on unload.\n        return new Promise((resolve, reject) => {\n            (new ConferenceConnector(resolve, reject)).connect();\n        });\n    },\n\n    /**\n     * Open new connection and join the conference when prejoin page is not enabled.\n     * If prejoin page is enabled open an new connection in the background\n     * and create local tracks.\n     *\n     * @param {{ roomName: string }} options\n     * @returns {Promise}\n     */\n    async init({ roomName }) {\n        const initialOptions = {\n            startAudioOnly: config.startAudioOnly,\n            startScreenSharing: config.startScreenSharing,\n            startWithAudioMuted: config.startWithAudioMuted\n                || config.startSilent\n                || isUserInteractionRequiredForUnmute(APP.store.getState()),\n            startWithVideoMuted: config.startWithVideoMuted\n                || isUserInteractionRequiredForUnmute(APP.store.getState())\n        };\n\n        this.roomName = roomName;\n\n        window.addEventListener('hashchange', this.onHashChange.bind(this), false);\n\n        try {\n            // Initialize the device list first. This way, when creating tracks\n            // based on preferred devices, loose label matching can be done in\n            // cases where the exact ID match is no longer available, such as\n            // when the camera device has switched USB ports.\n            // when in startSilent mode we want to start with audio muted\n            await this._initDeviceList();\n        } catch (error) {\n            logger.warn('initial device list initialization failed', error);\n        }\n\n        if (isPrejoinPageEnabled(APP.store.getState())) {\n            _connectionPromise = connect(roomName);\n\n            const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(initialOptions);\n            const tracks = await tryCreateLocalTracks;\n\n            // Initialize device list a second time to ensure device labels\n            // get populated in case of an initial gUM acceptance; otherwise\n            // they may remain as empty strings.\n            this._initDeviceList(true);\n\n            return APP.store.dispatch(initPrejoin(tracks, errors));\n        }\n\n        const [ tracks, con ] = await this.createInitialLocalTracksAndConnect(\n            roomName, initialOptions);\n\n        this._initDeviceList(true);\n\n        return this.startConference(con, tracks);\n    },\n\n    /**\n     * Joins conference after the tracks have been configured in the prejoin screen.\n     *\n     * @param {Object[]} tracks - An array with the configured tracks\n     * @returns {Promise}\n     */\n    async prejoinStart(tracks) {\n        const con = await _connectionPromise;\n\n        return this.startConference(con, tracks);\n    },\n\n    /**\n     * Check if id is id of the local user.\n     * @param {string} id id to check\n     * @returns {boolean}\n     */\n    isLocalId(id) {\n        return this.getMyUserId() === id;\n    },\n\n    /**\n     * Tells whether the local video is muted or not.\n     * @return {boolean}\n     */\n    isLocalVideoMuted() {\n        // If the tracks are not ready, read from base/media state\n        return this._localTracksInitialized\n            ? isLocalVideoTrackMuted(\n                APP.store.getState()['features/base/tracks'])\n            : isVideoMutedByUser(APP.store);\n    },\n\n    /**\n     * Simulates toolbar button click for audio mute. Used by shortcuts and API.\n     * @param {boolean} mute true for mute and false for unmute.\n     * @param {boolean} [showUI] when set to false will not display any error\n     * dialogs in case of media permissions error.\n     */\n    muteAudio(mute, showUI = true) {\n        if (!mute\n                && isUserInteractionRequiredForUnmute(APP.store.getState())) {\n            logger.error('Unmuting audio requires user interaction');\n\n            return;\n        }\n\n        // Not ready to modify track's state yet\n        if (!this._localTracksInitialized) {\n            // This will only modify base/media.audio.muted which is then synced\n            // up with the track at the end of local tracks initialization.\n            muteLocalAudio(mute);\n            this.setAudioMuteStatus(mute);\n\n            return;\n        } else if (this.isLocalAudioMuted() === mute) {\n            // NO-OP\n            return;\n        }\n\n        if (!this.localAudio && !mute) {\n            const maybeShowErrorDialog = error => {\n                showUI && APP.store.dispatch(notifyMicError(error));\n            };\n\n            createLocalTracksF({ devices: [ 'audio' ] }, false)\n                .then(([ audioTrack ]) => audioTrack)\n                .catch(error => {\n                    maybeShowErrorDialog(error);\n\n                    // Rollback the audio muted status by using null track\n                    return null;\n                })\n                .then(audioTrack => this.useAudioStream(audioTrack));\n        } else {\n            muteLocalAudio(mute);\n        }\n    },\n\n    /**\n     * Returns whether local audio is muted or not.\n     * @returns {boolean}\n     */\n    isLocalAudioMuted() {\n        // If the tracks are not ready, read from base/media state\n        return this._localTracksInitialized\n            ? isLocalTrackMuted(\n                APP.store.getState()['features/base/tracks'],\n                MEDIA_TYPE.AUDIO)\n            : Boolean(\n                APP.store.getState()['features/base/media'].audio.muted);\n    },\n\n    /**\n     * Simulates toolbar button click for audio mute. Used by shortcuts\n     * and API.\n     * @param {boolean} [showUI] when set to false will not display any error\n     * dialogs in case of media permissions error.\n     */\n    toggleAudioMuted(showUI = true) {\n        this.muteAudio(!this.isLocalAudioMuted(), showUI);\n    },\n\n    /**\n     * Simulates toolbar button click for presenter video mute. Used by\n     * shortcuts and API.\n     * @param mute true for mute and false for unmute.\n     * @param {boolean} [showUI] when set to false will not display any error\n     * dialogs in case of media permissions error.\n     */\n    async mutePresenter(mute, showUI = true) {\n        const maybeShowErrorDialog = error => {\n            showUI && APP.store.dispatch(notifyCameraError(error));\n        };\n\n        if (mute) {\n            try {\n                await this.localVideo.setEffect(undefined);\n            } catch (err) {\n                logger.error('Failed to remove the presenter effect', err);\n                maybeShowErrorDialog(err);\n            }\n        } else {\n            try {\n                await this.localVideo.setEffect(await this._createPresenterStreamEffect());\n            } catch (err) {\n                logger.error('Failed to apply the presenter effect', err);\n                maybeShowErrorDialog(err);\n            }\n        }\n    },\n\n    /**\n     * Simulates toolbar button click for video mute. Used by shortcuts and API.\n     * @param mute true for mute and false for unmute.\n     * @param {boolean} [showUI] when set to false will not display any error\n     * dialogs in case of media permissions error.\n     */\n    muteVideo(mute, showUI = true) {\n        if (!mute\n                && isUserInteractionRequiredForUnmute(APP.store.getState())) {\n            logger.error('Unmuting video requires user interaction');\n\n            return;\n        }\n\n        if (this.isSharingScreen) {\n            // Chain _mutePresenterVideo calls\n            _prevMutePresenterVideo = _prevMutePresenterVideo.then(() => this._mutePresenterVideo(mute));\n\n            return;\n        }\n\n        // If not ready to modify track's state yet adjust the base/media\n        if (!this._localTracksInitialized) {\n            // This will only modify base/media.video.muted which is then synced\n            // up with the track at the end of local tracks initialization.\n            muteLocalVideo(mute);\n            this.setVideoMuteStatus(mute);\n\n            return;\n        } else if (this.isLocalVideoMuted() === mute) {\n            // NO-OP\n            return;\n        }\n\n        if (!this.localVideo && !mute) {\n            const maybeShowErrorDialog = error => {\n                showUI && APP.store.dispatch(notifyCameraError(error));\n            };\n\n            // Try to create local video if there wasn't any.\n            // This handles the case when user joined with no video\n            // (dismissed screen sharing screen or in audio only mode), but\n            // decided to add it later on by clicking on muted video icon or\n            // turning off the audio only mode.\n            //\n            // FIXME when local track creation is moved to react/redux\n            // it should take care of the use case described above\n            createLocalTracksF({ devices: [ 'video' ] }, false)\n                .then(([ videoTrack ]) => videoTrack)\n                .catch(error => {\n                    // FIXME should send some feedback to the API on error ?\n                    maybeShowErrorDialog(error);\n\n                    // Rollback the video muted status by using null track\n                    return null;\n                })\n                .then(videoTrack => this.useVideoStream(videoTrack));\n        } else {\n            // FIXME show error dialog if it fails (should be handled by react)\n            muteLocalVideo(mute);\n        }\n    },\n\n    /**\n     * Simulates toolbar button click for video mute. Used by shortcuts and API.\n     * @param {boolean} [showUI] when set to false will not display any error\n     * dialogs in case of media permissions error.\n     */\n    toggleVideoMuted(showUI = true) {\n        this.muteVideo(!this.isLocalVideoMuted(), showUI);\n    },\n\n    /**\n     * Retrieve list of ids of conference participants (without local user).\n     * @returns {string[]}\n     */\n    listMembersIds() {\n        return room.getParticipants().map(p => p.getId());\n    },\n\n    /**\n     * Checks whether the participant identified by id is a moderator.\n     * @id id to search for participant\n     * @return {boolean} whether the participant is moderator\n     */\n    isParticipantModerator(id) {\n        const user = room.getParticipantById(id);\n\n        return user && user.isModerator();\n    },\n\n    /**\n     * Retrieve list of conference participants (without local user).\n     * @returns {JitsiParticipant[]}\n     *\n     * NOTE: Used by jitsi-meet-torture!\n     */\n    listMembers() {\n        return room.getParticipants();\n    },\n\n    get membersCount() {\n        return room.getParticipants().length + 1;\n    },\n\n    /**\n     * Returns true if the callstats integration is enabled, otherwise returns\n     * false.\n     *\n     * @returns true if the callstats integration is enabled, otherwise returns\n     * false.\n     */\n    isCallstatsEnabled() {\n        return room && room.isCallstatsEnabled();\n    },\n\n    /**\n     * Sends the given feedback through CallStats if enabled.\n     *\n     * @param overallFeedback an integer between 1 and 5 indicating the\n     * user feedback\n     * @param detailedFeedback detailed feedback from the user. Not yet used\n     */\n    sendFeedback(overallFeedback, detailedFeedback) {\n        return room.sendFeedback(overallFeedback, detailedFeedback);\n    },\n\n    /**\n     * Get speaker stats that track total dominant speaker time.\n     *\n     * @returns {object} A hash with keys being user ids and values being the\n     * library's SpeakerStats model used for calculating time as dominant\n     * speaker.\n     */\n    getSpeakerStats() {\n        return room.getSpeakerStats();\n    },\n\n    /**\n     * Returns the connection times stored in the library.\n     */\n    getConnectionTimes() {\n        return room.getConnectionTimes();\n    },\n\n    // used by torture currently\n    isJoined() {\n        return room && room.isJoined();\n    },\n    getConnectionState() {\n        return room && room.getConnectionState();\n    },\n\n    /**\n     * Obtains current P2P ICE connection state.\n     * @return {string|null} ICE connection state or <tt>null</tt> if there's no\n     * P2P connection\n     */\n    getP2PConnectionState() {\n        return room && room.getP2PConnectionState();\n    },\n\n    /**\n     * Starts P2P (for tests only)\n     * @private\n     */\n    _startP2P() {\n        try {\n            room && room.startP2PSession();\n        } catch (error) {\n            logger.error('Start P2P failed', error);\n            throw error;\n        }\n    },\n\n    /**\n     * Stops P2P (for tests only)\n     * @private\n     */\n    _stopP2P() {\n        try {\n            room && room.stopP2PSession();\n        } catch (error) {\n            logger.error('Stop P2P failed', error);\n            throw error;\n        }\n    },\n\n    /**\n     * Checks whether or not our connection is currently in interrupted and\n     * reconnect attempts are in progress.\n     *\n     * @returns {boolean} true if the connection is in interrupted state or\n     * false otherwise.\n     */\n    isConnectionInterrupted() {\n        return room.isConnectionInterrupted();\n    },\n\n    /**\n     * Obtains the local display name.\n     * @returns {string|undefined}\n     */\n    getLocalDisplayName() {\n        return getDisplayName(this.getMyUserId());\n    },\n\n    /**\n     * Finds JitsiParticipant for given id.\n     *\n     * @param {string} id participant's identifier(MUC nickname).\n     *\n     * @returns {JitsiParticipant|null} participant instance for given id or\n     * null if not found.\n     */\n    getParticipantById(id) {\n        return room ? room.getParticipantById(id) : null;\n    },\n\n    /**\n     * Get participant connection status for the participant.\n     *\n     * @param {string} id participant's identifier(MUC nickname)\n     *\n     * @returns {ParticipantConnectionStatus|null} the status of the participant\n     * or null if no such participant is found or participant is the local user.\n     */\n    getParticipantConnectionStatus(id) {\n        const participant = this.getParticipantById(id);\n\n        return participant ? participant.getConnectionStatus() : null;\n    },\n\n    /**\n     * Gets the display name foe the <tt>JitsiParticipant</tt> identified by\n     * the given <tt>id</tt>.\n     *\n     * @param id {string} the participant's id(MUC nickname/JVB endpoint id)\n     *\n     * @return {string} the participant's display name or the default string if\n     * absent.\n     */\n    getParticipantDisplayName(id) {\n        const displayName = getDisplayName(id);\n\n        if (displayName) {\n            return displayName;\n        }\n        if (APP.conference.isLocalId(id)) {\n            return APP.translation.generateTranslationHTML(\n                    interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME);\n        }\n\n        return interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME;\n    },\n\n    getMyUserId() {\n        return room && room.myUserId();\n    },\n\n    /**\n     * Will be filled with values only when config.debug is enabled.\n     * Its used by torture to check audio levels.\n     */\n    audioLevelsMap: {},\n\n    /**\n     * Returns the stored audio level (stored only if config.debug is enabled)\n     * @param id the id for the user audio level to return (the id value is\n     *          returned for the participant using getMyUserId() method)\n     */\n    getPeerSSRCAudioLevel(id) {\n        return this.audioLevelsMap[id];\n    },\n\n    /**\n     * @return {number} the number of participants in the conference with at\n     * least one track.\n     */\n    getNumberOfParticipantsWithTracks() {\n        return room.getParticipants()\n            .filter(p => p.getTracks().length > 0)\n            .length;\n    },\n\n    /**\n     * Returns the stats.\n     */\n    getStats() {\n        return room.connectionQuality.getStats();\n    },\n\n    // end used by torture\n\n    getLogs() {\n        return room.getLogs();\n    },\n\n    /**\n     * Download logs, a function that can be called from console while\n     * debugging.\n     * @param filename (optional) specify target filename\n     */\n    saveLogs(filename = 'meetlog.json') {\n        // this can be called from console and will not have reference to this\n        // that's why we reference the global var\n        const logs = APP.conference.getLogs();\n        const data = encodeURIComponent(JSON.stringify(logs, null, '  '));\n\n        const elem = document.createElement('a');\n\n        elem.download = filename;\n        elem.href = `data:application/json;charset=utf-8,\\n${data}`;\n        elem.dataset.downloadurl\n            = [ 'text/json', elem.download, elem.href ].join(':');\n        elem.dispatchEvent(new MouseEvent('click', {\n            view: window,\n            bubbles: true,\n            cancelable: false\n        }));\n    },\n\n    /**\n     * Handled location hash change events.\n     */\n    onHashChange() {\n        const items = {};\n        const parts = window.location.hash.substr(1).split('&');\n\n        for (const part of parts) {\n            const param = part.split('=');\n            const key = param[0];\n\n            if (!key) {\n                continue; // eslint-disable-line no-continue\n            }\n\n            items[key] = param[1];\n        }\n\n        if (typeof items.e2eekey !== undefined) {\n            APP.store.dispatch(setE2EEKey(items.e2eekey));\n\n            // Clean URL in browser history.\n            const cleanUrl = window.location.href.split('#')[0];\n\n            history.replaceState(history.state, document.title, cleanUrl);\n        }\n    },\n\n    /**\n     * Exposes a Command(s) API on this instance. It is necessitated by (1) the\n     * desire to keep room private to this instance and (2) the need of other\n     * modules to send and receive commands to and from participants.\n     * Eventually, this instance remains in control with respect to the\n     * decision whether the Command(s) API of room (i.e. lib-jitsi-meet's\n     * JitsiConference) is to be used in the implementation of the Command(s)\n     * API of this instance.\n     */\n    commands: {\n        /**\n         * Known custom conference commands.\n         */\n        defaults: commands,\n\n        /**\n         * Receives notifications from other participants about commands aka\n         * custom events (sent by sendCommand or sendCommandOnce methods).\n         * @param command {String} the name of the command\n         * @param handler {Function} handler for the command\n         */\n        addCommandListener() {\n            // eslint-disable-next-line prefer-rest-params\n            room.addCommandListener(...arguments);\n        },\n\n        /**\n         * Removes command.\n         * @param name {String} the name of the command.\n         */\n        removeCommand() {\n            // eslint-disable-next-line prefer-rest-params\n            room.removeCommand(...arguments);\n        },\n\n        /**\n         * Sends command.\n         * @param name {String} the name of the command.\n         * @param values {Object} with keys and values that will be sent.\n         */\n        sendCommand() {\n            // eslint-disable-next-line prefer-rest-params\n            room.sendCommand(...arguments);\n        },\n\n        /**\n         * Sends command one time.\n         * @param name {String} the name of the command.\n         * @param values {Object} with keys and values that will be sent.\n         */\n        sendCommandOnce() {\n            // eslint-disable-next-line prefer-rest-params\n            room.sendCommandOnce(...arguments);\n        }\n    },\n\n    _createRoom(localTracks) {\n        room\n            = connection.initJitsiConference(\n                APP.conference.roomName,\n                this._getConferenceOptions());\n\n        APP.store.dispatch(conferenceWillJoin(room));\n        this._setLocalAudioVideoStreams(localTracks);\n        this._room = room; // FIXME do not use this\n\n        sendLocalParticipant(APP.store, room);\n\n        this._setupListeners();\n    },\n\n    /**\n     * Sets local video and audio streams.\n     * @param {JitsiLocalTrack[]} tracks=[]\n     * @returns {Promise[]}\n     * @private\n     */\n    _setLocalAudioVideoStreams(tracks = []) {\n        return tracks.map(track => {\n            if (track.isAudioTrack()) {\n                return this.useAudioStream(track);\n            } else if (track.isVideoTrack()) {\n                return this.useVideoStream(track);\n            }\n            logger.error(\n                    'Ignored not an audio nor a video track: ', track);\n\n            return Promise.resolve();\n\n        });\n    },\n\n    _getConferenceOptions() {\n        const options = config;\n        const { email, name: nick } = getLocalParticipant(APP.store.getState());\n\n        const { locationURL } = APP.store.getState()['features/base/connection'];\n\n        if (options.enableDisplayNameInStats && nick) {\n            options.statisticsDisplayName = nick;\n        }\n\n        if (options.enableEmailInStats && email) {\n            options.statisticsId = email;\n        }\n\n        options.applicationName = interfaceConfig.APP_NAME;\n        options.getWiFiStatsMethod = this._getWiFiStatsMethod;\n        options.confID = `${locationURL.host}${locationURL.pathname}`;\n        options.createVADProcessor = createRnnoiseProcessorPromise;\n\n        // Disable CallStats, if requessted.\n        if (options.disableThirdPartyRequests) {\n            delete options.callStatsID;\n            delete options.callStatsSecret;\n            delete options.getWiFiStatsMethod;\n        }\n\n        return options;\n    },\n\n    /**\n     * Returns the result of getWiFiStats from the global NS or does nothing\n     * (returns empty result).\n     * Fixes a concurrency problem where we need to pass a function when creating\n     * JitsiConference, but that method is added to the context later.\n     *\n     * @returns {Promise}\n     * @private\n     */\n    _getWiFiStatsMethod() {\n        const gloabalNS = getJitsiMeetGlobalNS();\n\n        return gloabalNS.getWiFiStats ? gloabalNS.getWiFiStats() : Promise.resolve('{}');\n    },\n\n    /**\n     * Start using provided video stream.\n     * Stops previous video stream.\n     * @param {JitsiLocalTrack} [stream] new stream to use or null\n     * @returns {Promise}\n     */\n    useVideoStream(newStream) {\n        return new Promise((resolve, reject) => {\n            _replaceLocalVideoTrackQueue.enqueue(onFinish => {\n                /**\n                 * When the prejoin page is visible there is no conference object\n                 * created. The prejoin tracks are managed separately,\n                 * so this updates the prejoin video track.\n                 */\n                if (isPrejoinPageVisible(APP.store.getState())) {\n                    return APP.store.dispatch(replacePrejoinVideoTrack(newStream))\n                        .then(resolve)\n                        .catch(reject)\n                        .then(onFinish);\n                }\n\n                APP.store.dispatch(\n                replaceLocalTrack(this.localVideo, newStream, room))\n                    .then(() => {\n                        this.localVideo = newStream;\n                        this._setSharingScreen(newStream);\n                        if (newStream) {\n                            APP.UI.addLocalVideoStream(newStream);\n                        }\n                        this.setVideoMuteStatus(this.isLocalVideoMuted());\n                    })\n                    .then(resolve)\n                    .catch(reject)\n                    .then(onFinish);\n            });\n        });\n    },\n\n    /**\n     * Sets `this.isSharingScreen` depending on provided video stream.\n     * In case new screen sharing status is not equal previous one\n     * it updates desktop sharing buttons in UI\n     * and notifies external application.\n     *\n     * @param {JitsiLocalTrack} [newStream] new stream to use or null\n     * @private\n     * @returns {void}\n     */\n    _setSharingScreen(newStream) {\n        const wasSharingScreen = this.isSharingScreen;\n\n        this.isSharingScreen = newStream && newStream.videoType === 'desktop';\n\n        if (wasSharingScreen !== this.isSharingScreen) {\n            const details = {};\n\n            if (this.isSharingScreen) {\n                details.sourceType = newStream.sourceType;\n            }\n\n            APP.API.notifyScreenSharingStatusChanged(\n                this.isSharingScreen, details);\n        }\n    },\n\n    /**\n     * Start using provided audio stream.\n     * Stops previous audio stream.\n     * @param {JitsiLocalTrack} [stream] new stream to use or null\n     * @returns {Promise}\n     */\n    useAudioStream(newStream) {\n        return new Promise((resolve, reject) => {\n            _replaceLocalAudioTrackQueue.enqueue(onFinish => {\n                /**\n                 * When the prejoin page is visible there is no conference object\n                 * created. The prejoin tracks are managed separately,\n                 * so this updates the prejoin audio stream.\n                 */\n                if (isPrejoinPageVisible(APP.store.getState())) {\n                    return APP.store.dispatch(replacePrejoinAudioTrack(newStream))\n                        .then(resolve)\n                        .catch(reject)\n                        .then(onFinish);\n                }\n\n                APP.store.dispatch(\n                replaceLocalTrack(this.localAudio, newStream, room))\n                    .then(() => {\n                        this.localAudio = newStream;\n                        this.setAudioMuteStatus(this.isLocalAudioMuted());\n                    })\n                    .then(resolve)\n                    .catch(reject)\n                    .then(onFinish);\n            });\n        });\n    },\n\n    /**\n     * Returns whether or not the conference is currently in audio only mode.\n     *\n     * @returns {boolean}\n     */\n    isAudioOnly() {\n        return Boolean(APP.store.getState()['features/base/audio-only'].enabled);\n    },\n\n    videoSwitchInProgress: false,\n\n    /**\n     * This fields stores a handler which will create a Promise which turns off\n     * the screen sharing and restores the previous video state (was there\n     * any video, before switching to screen sharing ? was it muted ?).\n     *\n     * Once called this fields is cleared to <tt>null</tt>.\n     * @type {Function|null}\n     */\n    _untoggleScreenSharing: null,\n\n    /**\n     * Creates a Promise which turns off the screen sharing and restores\n     * the previous state described by the arguments.\n     *\n     * This method is bound to the appropriate values, after switching to screen\n     * sharing and stored in {@link _untoggleScreenSharing}.\n     *\n     * @param {boolean} didHaveVideo indicates if there was a camera video being\n     * used, before switching to screen sharing.\n     * @param {boolean} wasVideoMuted indicates if the video was muted, before\n     * switching to screen sharing.\n     * @return {Promise} resolved after the screen sharing is turned off, or\n     * rejected with some error (no idea what kind of error, possible GUM error)\n     * in case it fails.\n     * @private\n     */\n    async _turnScreenSharingOff(didHaveVideo) {\n        this._untoggleScreenSharing = null;\n        this.videoSwitchInProgress = true;\n        const { receiver } = APP.remoteControl;\n\n        if (receiver) {\n            receiver.stop();\n        }\n\n        this._stopProxyConnection();\n        if (config.enableScreenshotCapture) {\n            APP.store.dispatch(toggleScreenshotCaptureEffect(false));\n        }\n\n        // It can happen that presenter GUM is in progress while screensharing is being turned off. Here it needs to\n        // wait for that GUM to be resolved in order to prevent leaking the presenter track(this.localPresenterVideo\n        // will be null when SS is being turned off, but it will initialize once GUM resolves).\n        let promise = _prevMutePresenterVideo = _prevMutePresenterVideo.then(() => {\n            // mute the presenter track if it exists.\n            if (this.localPresenterVideo) {\n                APP.store.dispatch(setVideoMuted(true, MEDIA_TYPE.PRESENTER));\n\n                return this.localPresenterVideo.dispose().then(() => {\n                    APP.store.dispatch(trackRemoved(this.localPresenterVideo));\n                    this.localPresenterVideo = null;\n                });\n            }\n        });\n\n        // If system audio was also shared stop the AudioMixerEffect and dispose of the desktop audio track.\n        if (this._mixerEffect) {\n            await this.localAudio.setEffect(undefined);\n            await this._desktopAudioStream.dispose();\n            this._mixerEffect = undefined;\n            this._desktopAudioStream = undefined;\n\n        // In case there was no local audio when screen sharing was started the fact that we set the audio stream to\n        // null will take care of the desktop audio stream cleanup.\n        } else if (this._desktopAudioStream) {\n            await this.useAudioStream(null);\n            this._desktopAudioStream = undefined;\n        }\n\n        if (didHaveVideo) {\n            promise = promise.then(() => createLocalTracksF({ devices: [ 'video' ] }))\n                .then(([ stream ]) => this.useVideoStream(stream))\n                .then(() => {\n                    sendAnalytics(createScreenSharingEvent('stopped'));\n                    logger.log('Screen sharing stopped.');\n                })\n                .catch(error => {\n                    logger.error('failed to switch back to local video', error);\n\n                    return this.useVideoStream(null).then(() =>\n\n                        // Still fail with the original err\n                        Promise.reject(error)\n                    );\n                });\n        } else {\n            promise = promise.then(() => this.useVideoStream(null));\n        }\n\n        return promise.then(\n            () => {\n                this.videoSwitchInProgress = false;\n            },\n            error => {\n                this.videoSwitchInProgress = false;\n                throw error;\n            });\n    },\n\n    /**\n     * Toggles between screen sharing and camera video if the toggle parameter\n     * is not specified and starts the procedure for obtaining new screen\n     * sharing/video track otherwise.\n     *\n     * @param {boolean} [toggle] - If true - new screen sharing track will be\n     * obtained. If false - new video track will be obtain. If not specified -\n     * toggles between screen sharing and camera video.\n     * @param {Object} [options] - Screen sharing options that will be passed to\n     * createLocalTracks.\n     * @param {Array<string>} [options.desktopSharingSources] - Array with the\n     * sources that have to be displayed in the desktop picker window ('screen',\n     * 'window', etc.).\n     * @return {Promise.<T>}\n     */\n    async toggleScreenSharing(toggle = !this._untoggleScreenSharing, options = {}) {\n        if (this.videoSwitchInProgress) {\n            return Promise.reject('Switch in progress.');\n        }\n        if (!this.isDesktopSharingEnabled) {\n            return Promise.reject(\n                'Cannot toggle screen sharing: not supported.');\n        }\n\n        if (this.isAudioOnly()) {\n            return Promise.reject('No screensharing in audio only mode');\n        }\n\n        if (toggle) {\n            try {\n                await this._switchToScreenSharing(options);\n\n                return;\n            } catch (err) {\n                logger.error('Failed to switch to screensharing', err);\n\n                return;\n            }\n        }\n\n        return this._untoggleScreenSharing\n            ? this._untoggleScreenSharing()\n            : Promise.resolve();\n    },\n\n    /**\n     * Creates desktop (screensharing) {@link JitsiLocalTrack}\n     *\n     * @param {Object} [options] - Screen sharing options that will be passed to\n     * createLocalTracks.\n     * @param {Object} [options.desktopSharing]\n     * @param {Object} [options.desktopStream] - An existing desktop stream to\n     * use instead of creating a new desktop stream.\n     * @return {Promise.<JitsiLocalTrack>} - A Promise resolved with\n     * {@link JitsiLocalTrack} for the screensharing or rejected with\n     * {@link JitsiTrackError}.\n     *\n     * @private\n     */\n    _createDesktopTrack(options = {}) {\n        let externalInstallation = false;\n        let DSExternalInstallationInProgress = false;\n        const didHaveVideo = !this.isLocalVideoMuted();\n\n        const getDesktopStreamPromise = options.desktopStream\n            ? Promise.resolve([ options.desktopStream ])\n            : createLocalTracksF({\n                desktopSharingSourceDevice: options.desktopSharingSources\n                    ? null : config._desktopSharingSourceDevice,\n                desktopSharingSources: options.desktopSharingSources,\n                devices: [ 'desktop' ],\n                desktopSharingExtensionExternalInstallation: {\n                    interval: 500,\n                    checkAgain: () => DSExternalInstallationInProgress,\n                    listener: (status, url) => {\n                        switch (status) {\n                        case 'waitingForExtension': {\n                            DSExternalInstallationInProgress = true;\n                            externalInstallation = true;\n                            const listener = () => {\n                                // Wait a little bit more just to be sure that\n                                // we won't miss the extension installation\n                                setTimeout(() => {\n                                    DSExternalInstallationInProgress = false;\n                                },\n                                500);\n                                APP.UI.removeListener(\n                                    UIEvents.EXTERNAL_INSTALLATION_CANCELED,\n                                    listener);\n                            };\n\n                            APP.UI.addListener(\n                                UIEvents.EXTERNAL_INSTALLATION_CANCELED,\n                                listener);\n                            APP.UI.showExtensionExternalInstallationDialog(url);\n                            break;\n                        }\n                        case 'extensionFound':\n                            // Close the dialog.\n                            externalInstallation && $.prompt.close();\n                            break;\n                        default:\n\n                            // Unknown status\n                        }\n                    }\n                }\n            });\n\n        return getDesktopStreamPromise.then(desktopStreams => {\n            // Stores the \"untoggle\" handler which remembers whether was\n            // there any video before and whether was it muted.\n            this._untoggleScreenSharing\n                = this._turnScreenSharingOff.bind(this, didHaveVideo);\n\n            const desktopVideoStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.VIDEO);\n\n            if (desktopVideoStream) {\n                desktopVideoStream.on(\n                    JitsiTrackEvents.LOCAL_TRACK_STOPPED,\n                    () => {\n                        // If the stream was stopped during screen sharing\n                        // session then we should switch back to video.\n                        this.isSharingScreen\n                            && this._untoggleScreenSharing\n                            && this._untoggleScreenSharing();\n                    }\n                );\n            }\n\n            // close external installation dialog on success.\n            externalInstallation && $.prompt.close();\n\n            return desktopStreams;\n        }, error => {\n            DSExternalInstallationInProgress = false;\n\n            // close external installation dialog on success.\n            externalInstallation && $.prompt.close();\n            throw error;\n        });\n    },\n\n    /**\n     * Creates a new instance of presenter effect. A new video track is created\n     * using the new set of constraints that are calculated based on\n     * the height of the desktop that is being currently shared.\n     *\n     * @param {number} height - The height of the desktop stream that is being\n     * currently shared.\n     * @param {string} cameraDeviceId - The device id of the camera to be used.\n     * @return {Promise<JitsiStreamPresenterEffect>} - A promise resolved with\n     * {@link JitsiStreamPresenterEffect} if it succeeds.\n     */\n    async _createPresenterStreamEffect(height = null, cameraDeviceId = null) {\n        if (!this.localPresenterVideo) {\n            try {\n                this.localPresenterVideo = await createLocalPresenterTrack({ cameraDeviceId }, height);\n            } catch (err) {\n                logger.error('Failed to create a camera track for presenter', err);\n\n                return;\n            }\n            APP.store.dispatch(trackAdded(this.localPresenterVideo));\n        }\n        try {\n            const effect = await createPresenterEffect(this.localPresenterVideo.stream);\n\n            return effect;\n        } catch (err) {\n            logger.error('Failed to create the presenter effect', err);\n        }\n    },\n\n    /**\n     * Tries to turn the presenter video track on or off. If a presenter track\n     * doesn't exist, a new video track is created.\n     *\n     * @param mute - true for mute and false for unmute.\n     *\n     * @private\n     */\n    async _mutePresenterVideo(mute) {\n        const maybeShowErrorDialog = error => {\n            APP.store.dispatch(notifyCameraError(error));\n        };\n\n        // Check for NO-OP\n        if (mute && (!this.localPresenterVideo || this.localPresenterVideo.isMuted())) {\n\n            return;\n        } else if (!mute && this.localPresenterVideo && !this.localPresenterVideo.isMuted()) {\n\n            return;\n        }\n\n        // Create a new presenter track and apply the presenter effect.\n        if (!this.localPresenterVideo && !mute) {\n            let { aspectRatio, height } = this.localVideo.track.getSettings();\n            const { width } = this.localVideo.track.getSettings();\n            let desktopResizeConstraints = {};\n            let resizeDesktopStream = false;\n            const DESKTOP_STREAM_CAP = 720;\n\n            // Determine the constraints if the desktop track needs to be resized.\n            // Resizing is needed when the resolution cannot be determined or when\n            // the window is bigger than 720p.\n            if (height && width) {\n                aspectRatio = aspectRatio ?? (width / height).toPrecision(4);\n                const advancedConstraints = [ { aspectRatio } ];\n                const isPortrait = height >= width;\n\n                // Determine which dimension needs resizing and resize only that side\n                // keeping the aspect ratio same as before.\n                if (isPortrait && width > DESKTOP_STREAM_CAP) {\n                    resizeDesktopStream = true;\n                    advancedConstraints.push({ width: DESKTOP_STREAM_CAP });\n                } else if (!isPortrait && height > DESKTOP_STREAM_CAP) {\n                    resizeDesktopStream = true;\n                    advancedConstraints.push({ height: DESKTOP_STREAM_CAP });\n                }\n                desktopResizeConstraints.advanced = advancedConstraints;\n            } else {\n                resizeDesktopStream = true;\n                desktopResizeConstraints = {\n                    width: 1280,\n                    height: 720\n                };\n            }\n            if (resizeDesktopStream) {\n                try {\n                    await this.localVideo.track.applyConstraints(desktopResizeConstraints);\n                } catch (err) {\n                    logger.error('Failed to apply constraints on the desktop stream for presenter mode', err);\n\n                    return;\n                }\n                height = this.localVideo.track.getSettings().height ?? DESKTOP_STREAM_CAP;\n            }\n            const defaultCamera = getUserSelectedCameraDeviceId(APP.store.getState());\n            let effect;\n\n            try {\n                effect = await this._createPresenterStreamEffect(height,\n                    defaultCamera);\n            } catch (err) {\n                logger.error('Failed to unmute Presenter Video');\n                maybeShowErrorDialog(err);\n\n                return;\n            }\n            try {\n                await this.localVideo.setEffect(effect);\n                APP.store.dispatch(setVideoMuted(mute, MEDIA_TYPE.PRESENTER));\n                this.setVideoMuteStatus(mute);\n            } catch (err) {\n                logger.error('Failed to apply the Presenter effect', err);\n            }\n        } else {\n            APP.store.dispatch(setVideoMuted(mute, MEDIA_TYPE.PRESENTER));\n        }\n    },\n\n    /**\n     * Tries to switch to the screensharing mode by disposing camera stream and\n     * replacing it with a desktop one.\n     *\n     * @param {Object} [options] - Screen sharing options that will be passed to\n     * createLocalTracks.\n     *\n     * @return {Promise} - A Promise resolved if the operation succeeds or\n     * rejected with some unknown type of error in case it fails. Promise will\n     * be rejected immediately if {@link videoSwitchInProgress} is true.\n     *\n     * @private\n     */\n    _switchToScreenSharing(options = {}) {\n        if (this.videoSwitchInProgress) {\n            return Promise.reject('Switch in progress.');\n        }\n\n        this.videoSwitchInProgress = true;\n\n        return this._createDesktopTrack(options)\n            .then(async streams => {\n                const desktopVideoStream = streams.find(stream => stream.getType() === MEDIA_TYPE.VIDEO);\n\n                if (desktopVideoStream) {\n                    await this.useVideoStream(desktopVideoStream);\n                }\n\n                this._desktopAudioStream = streams.find(stream => stream.getType() === MEDIA_TYPE.AUDIO);\n\n                if (this._desktopAudioStream) {\n                    // If there is a localAudio stream, mix in the desktop audio stream captured by the screen sharing\n                    // api.\n                    if (this.localAudio) {\n                        this._mixerEffect = new AudioMixerEffect(this._desktopAudioStream);\n\n                        await this.localAudio.setEffect(this._mixerEffect);\n                    } else {\n                        // If no local stream is present ( i.e. no input audio devices) we use the screen share audio\n                        // stream as we would use a regular stream.\n                        await this.useAudioStream(this._desktopAudioStream);\n                    }\n                }\n            })\n            .then(() => {\n                this.videoSwitchInProgress = false;\n                if (config.enableScreenshotCapture) {\n                    APP.store.dispatch(toggleScreenshotCaptureEffect(true));\n                }\n                sendAnalytics(createScreenSharingEvent('started'));\n                logger.log('Screen sharing started');\n            })\n            .catch(error => {\n                this.videoSwitchInProgress = false;\n\n                // Pawel: With this call I'm trying to preserve the original\n                // behaviour although it is not clear why would we \"untoggle\"\n                // on failure. I suppose it was to restore video in case there\n                // was some problem during \"this.useVideoStream(desktopStream)\".\n                // It's important to note that the handler will not be available\n                // if we fail early on trying to get desktop media (which makes\n                // sense, because the camera video is still being used, so\n                // nothing to \"untoggle\").\n                if (this._untoggleScreenSharing) {\n                    this._untoggleScreenSharing();\n                }\n\n                // FIXME the code inside of _handleScreenSharingError is\n                // asynchronous, but does not return a Promise and is not part\n                // of the current Promise chain.\n                this._handleScreenSharingError(error);\n\n                return Promise.reject(error);\n            });\n    },\n\n    /**\n     * Handles {@link JitsiTrackError} returned by the lib-jitsi-meet when\n     * trying to create screensharing track. It will either do nothing if\n     * the dialog was canceled on user's request or display inline installation\n     * dialog and ask the user to install the extension, once the extension is\n     * installed it will switch the conference to screensharing. The last option\n     * is that an unrecoverable error dialog will be displayed.\n     * @param {JitsiTrackError} error - The error returned by\n     * {@link _createDesktopTrack} Promise.\n     * @private\n     */\n    _handleScreenSharingError(error) {\n        if (error.name === JitsiTrackErrors.CHROME_EXTENSION_USER_CANCELED) {\n            return;\n        }\n\n        logger.error('failed to share local desktop', error);\n\n        if (error.name\n                === JitsiTrackErrors.CHROME_EXTENSION_USER_GESTURE_REQUIRED) {\n            // If start with screen sharing the extension will fail to install\n            // (if not found), because the request has been triggered by the\n            // script. Show a dialog which asks user to click \"install\" and try\n            // again switching to the screen sharing.\n            APP.UI.showExtensionInlineInstallationDialog(\n                () => {\n                    // eslint-disable-next-line no-empty-function\n                    this.toggleScreenSharing().catch(() => {});\n                }\n            );\n\n            return;\n        }\n\n        // Handling:\n        // JitsiTrackErrors.PERMISSION_DENIED\n        // JitsiTrackErrors.CHROME_EXTENSION_INSTALLATION_ERROR\n        // JitsiTrackErrors.CONSTRAINT_FAILED\n        // JitsiTrackErrors.GENERAL\n        // and any other\n        let descriptionKey;\n        let titleKey;\n\n        if (error.name === JitsiTrackErrors.PERMISSION_DENIED) {\n\n            // in FF the only option for user is to deny access temporary or\n            // permanently and we only receive permission_denied\n            // we always show some info cause in case of permanently, no info\n            // shown will be bad experience\n            //\n            // TODO: detect interval between requesting permissions and received\n            // error, this way we can detect user interaction which will have\n            // longer delay\n            if (JitsiMeetJS.util.browser.isFirefox()) {\n                descriptionKey\n                    = 'dialog.screenSharingFirefoxPermissionDeniedError';\n                titleKey = 'dialog.screenSharingFirefoxPermissionDeniedTitle';\n            } else {\n                descriptionKey = 'dialog.screenSharingPermissionDeniedError';\n                titleKey = 'dialog.screenSharingFailedToInstallTitle';\n            }\n        } else if (error.name === JitsiTrackErrors.CONSTRAINT_FAILED) {\n            descriptionKey = 'dialog.cameraConstraintFailedError';\n            titleKey = 'deviceError.cameraError';\n        } else {\n            descriptionKey = 'dialog.screenSharingFailedToInstall';\n            titleKey = 'dialog.screenSharingFailedToInstallTitle';\n        }\n\n        APP.UI.messageHandler.showError({\n            descriptionKey,\n            titleKey\n        });\n    },\n\n    /**\n     * Setup interaction between conference and UI.\n     */\n    _setupListeners() {\n        // add local streams when joined to the conference\n        room.on(JitsiConferenceEvents.CONFERENCE_JOINED, () => {\n            this._onConferenceJoined();\n        });\n\n        room.on(\n            JitsiConferenceEvents.CONFERENCE_LEFT,\n            (...args) => {\n                APP.store.dispatch(conferenceTimestampChanged(0));\n                APP.store.dispatch(conferenceLeft(room, ...args));\n            });\n\n        room.on(\n            JitsiConferenceEvents.AUTH_STATUS_CHANGED,\n            (authEnabled, authLogin) =>\n                APP.store.dispatch(authStatusChanged(authEnabled, authLogin)));\n\n        room.on(JitsiConferenceEvents.PARTCIPANT_FEATURES_CHANGED,\n            user => APP.UI.onUserFeaturesChanged(user));\n        room.on(JitsiConferenceEvents.USER_JOINED, (id, user) => {\n            // The logic shared between RN and web.\n            commonUserJoinedHandling(APP.store, room, user);\n\n            if (user.isHidden()) {\n                return;\n            }\n\n            logger.log(`USER ${id} connnected:`, user);\n            APP.UI.addUser(user);\n        });\n\n        room.on(JitsiConferenceEvents.USER_LEFT, (id, user) => {\n            // The logic shared between RN and web.\n            commonUserLeftHandling(APP.store, room, user);\n\n            if (user.isHidden()) {\n                return;\n            }\n\n            logger.log(`USER ${id} LEFT:`, user);\n\n            APP.UI.onSharedVideoStop(id);\n        });\n\n        room.on(JitsiConferenceEvents.USER_STATUS_CHANGED, (id, status) => {\n            APP.store.dispatch(participantPresenceChanged(id, status));\n\n            const user = room.getParticipantById(id);\n\n            if (user) {\n                APP.UI.updateUserStatus(user, status);\n            }\n        });\n\n        room.on(JitsiConferenceEvents.USER_ROLE_CHANGED, (id, role) => {\n            if (this.isLocalId(id)) {\n                logger.info(`My role changed, new role: ${role}`);\n\n                APP.store.dispatch(localParticipantRoleChanged(role));\n                APP.API.notifyUserRoleChanged(id, role);\n            } else {\n                APP.store.dispatch(participantRoleChanged(id, role));\n            }\n        });\n\n        room.on(JitsiConferenceEvents.TRACK_ADDED, track => {\n            if (!track || track.isLocal()) {\n                return;\n            }\n\n            APP.store.dispatch(trackAdded(track));\n        });\n\n        room.on(JitsiConferenceEvents.TRACK_REMOVED, track => {\n            if (!track || track.isLocal()) {\n                return;\n            }\n\n            APP.store.dispatch(trackRemoved(track));\n        });\n\n        room.on(JitsiConferenceEvents.TRACK_AUDIO_LEVEL_CHANGED, (id, lvl) => {\n            let newLvl = lvl;\n\n            if (this.isLocalId(id)\n                && this.localAudio && this.localAudio.isMuted()) {\n                newLvl = 0;\n            }\n\n            if (config.debug) {\n                this.audioLevelsMap[id] = newLvl;\n                if (config.debugAudioLevels) {\n                    logger.log(`AudioLevel:${id}/${newLvl}`);\n                }\n            }\n\n            APP.UI.setAudioLevel(id, newLvl);\n        });\n\n        room.on(JitsiConferenceEvents.TRACK_MUTE_CHANGED, (track, participantThatMutedUs) => {\n            if (participantThatMutedUs) {\n                APP.store.dispatch(participantMutedUs(participantThatMutedUs));\n            }\n        });\n\n        room.on(JitsiConferenceEvents.SUBJECT_CHANGED,\n            subject => APP.store.dispatch(conferenceSubjectChanged(subject)));\n\n        room.on(\n            JitsiConferenceEvents.LAST_N_ENDPOINTS_CHANGED,\n            (leavingIds, enteringIds) =>\n                APP.UI.handleLastNEndpoints(leavingIds, enteringIds));\n\n        room.on(\n            JitsiConferenceEvents.P2P_STATUS,\n            (jitsiConference, p2p) =>\n                APP.store.dispatch(p2pStatusChanged(p2p)));\n\n        room.on(\n            JitsiConferenceEvents.PARTICIPANT_CONN_STATUS_CHANGED,\n            (id, connectionStatus) => APP.store.dispatch(\n                participantConnectionStatusChanged(id, connectionStatus)));\n\n        room.on(\n            JitsiConferenceEvents.DOMINANT_SPEAKER_CHANGED,\n            id => APP.store.dispatch(dominantSpeakerChanged(id, room)));\n\n        room.on(\n            JitsiConferenceEvents.CONFERENCE_CREATED_TIMESTAMP,\n            conferenceTimestamp => APP.store.dispatch(conferenceTimestampChanged(conferenceTimestamp)));\n\n        room.on(JitsiConferenceEvents.CONNECTION_INTERRUPTED, () => {\n            APP.store.dispatch(localParticipantConnectionStatusChanged(\n                JitsiParticipantConnectionStatus.INTERRUPTED));\n        });\n\n        room.on(JitsiConferenceEvents.CONNECTION_RESTORED, () => {\n            APP.store.dispatch(localParticipantConnectionStatusChanged(\n                JitsiParticipantConnectionStatus.ACTIVE));\n        });\n\n        room.on(\n            JitsiConferenceEvents.DISPLAY_NAME_CHANGED,\n            (id, displayName) => {\n                const formattedDisplayName\n                    = getNormalizedDisplayName(displayName);\n\n                APP.store.dispatch(participantUpdated({\n                    conference: room,\n                    id,\n                    name: formattedDisplayName\n                }));\n                APP.API.notifyDisplayNameChanged(id, {\n                    displayName: formattedDisplayName,\n                    formattedDisplayName:\n                        appendSuffix(\n                            formattedDisplayName\n                                || interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME)\n                });\n                APP.UI.changeDisplayName(id, formattedDisplayName);\n            }\n        );\n        room.on(\n            JitsiConferenceEvents.BOT_TYPE_CHANGED,\n            (id, botType) => {\n\n                APP.store.dispatch(participantUpdated({\n                    conference: room,\n                    id,\n                    botType\n                }));\n            }\n        );\n\n        room.on(\n            JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,\n            (...args) => {\n                APP.store.dispatch(endpointMessageReceived(...args));\n                if (args && args.length >= 2) {\n                    const [ sender, eventData ] = args;\n\n                    if (eventData.name === ENDPOINT_TEXT_MESSAGE_NAME) {\n                        APP.API.notifyEndpointTextMessageReceived({\n                            senderInfo: {\n                                jid: sender._jid,\n                                id: sender._id\n                            },\n                            eventData\n                        });\n                    }\n                }\n            });\n\n        room.on(\n            JitsiConferenceEvents.LOCK_STATE_CHANGED,\n            (...args) => APP.store.dispatch(lockStateChanged(room, ...args)));\n\n        APP.remoteControl.on(RemoteControlEvents.ACTIVE_CHANGED, isActive => {\n            room.setLocalParticipantProperty(\n                'remoteControlSessionStatus',\n                isActive\n            );\n            APP.UI.setLocalRemoteControlActiveChanged();\n        });\n\n        /* eslint-disable max-params */\n        room.on(\n            JitsiConferenceEvents.PARTICIPANT_PROPERTY_CHANGED,\n            (participant, name, oldValue, newValue) => {\n                switch (name) {\n                case 'remoteControlSessionStatus':\n                    APP.UI.setRemoteControlActiveStatus(\n                        participant.getId(),\n                        newValue);\n                    break;\n                default:\n\n                // ignore\n                }\n            });\n\n        room.on(JitsiConferenceEvents.KICKED, participant => {\n            APP.UI.hideStats();\n            APP.store.dispatch(kickedOut(room, participant));\n\n            // FIXME close\n        });\n\n        room.on(JitsiConferenceEvents.PARTICIPANT_KICKED, (kicker, kicked) => {\n            APP.store.dispatch(participantKicked(kicker, kicked));\n        });\n\n        room.on(JitsiConferenceEvents.SUSPEND_DETECTED, () => {\n            APP.store.dispatch(suspendDetected());\n        });\n\n        APP.UI.addListener(UIEvents.AUDIO_MUTED, muted => {\n            this.muteAudio(muted);\n        });\n        APP.UI.addListener(UIEvents.VIDEO_MUTED, muted => {\n            this.muteVideo(muted);\n        });\n\n        room.addCommandListener(this.commands.defaults.ETHERPAD,\n            ({ value }) => {\n                APP.UI.initEtherpad(value);\n            }\n        );\n\n        APP.UI.addListener(UIEvents.EMAIL_CHANGED,\n            this.changeLocalEmail.bind(this));\n        room.addCommandListener(this.commands.defaults.EMAIL, (data, from) => {\n            APP.store.dispatch(participantUpdated({\n                conference: room,\n                id: from,\n                email: data.value\n            }));\n        });\n\n        room.addCommandListener(\n            this.commands.defaults.AVATAR_URL,\n            (data, from) => {\n                APP.store.dispatch(\n                    participantUpdated({\n                        conference: room,\n                        id: from,\n                        avatarURL: data.value\n                    }));\n            });\n\n        room.addCommandListener(this.commands.defaults.AVATAR_ID,\n            (data, from) => {\n                APP.store.dispatch(\n                    participantUpdated({\n                        conference: room,\n                        id: from,\n                        avatarID: data.value\n                    }));\n            });\n\n        APP.UI.addListener(UIEvents.NICKNAME_CHANGED,\n            this.changeLocalDisplayName.bind(this));\n\n        room.on(\n            JitsiConferenceEvents.START_MUTED_POLICY_CHANGED,\n            ({ audio, video }) => {\n                APP.store.dispatch(\n                    onStartMutedPolicyChanged(audio, video));\n            }\n        );\n        room.on(JitsiConferenceEvents.STARTED_MUTED, () => {\n            (room.isStartAudioMuted() || room.isStartVideoMuted())\n                && APP.UI.notifyInitiallyMuted();\n        });\n\n        room.on(\n            JitsiConferenceEvents.DATA_CHANNEL_OPENED, () => {\n                APP.store.dispatch(dataChannelOpened());\n            }\n        );\n\n        // call hangup\n        APP.UI.addListener(UIEvents.HANGUP, () => {\n            this.hangup(true);\n        });\n\n        // logout\n        APP.UI.addListener(UIEvents.LOGOUT, () => {\n            AuthHandler.logout(room).then(url => {\n                if (url) {\n                    UIUtil.redirect(url);\n                } else {\n                    this.hangup(true);\n                }\n            });\n        });\n\n        APP.UI.addListener(UIEvents.AUTH_CLICKED, () => {\n            AuthHandler.authenticate(room);\n        });\n\n        APP.UI.addListener(\n            UIEvents.VIDEO_DEVICE_CHANGED,\n            cameraDeviceId => {\n                const videoWasMuted = this.isLocalVideoMuted();\n\n                sendAnalytics(createDeviceChangedEvent('video', 'input'));\n\n                // If both screenshare and video are in progress, restart the\n                // presenter mode with the new camera device.\n                if (this.isSharingScreen && !videoWasMuted) {\n                    const { height } = this.localVideo.track.getSettings();\n\n                    // dispose the existing presenter track and create a new\n                    // camera track.\n                    // FIXME JitsiLocalTrack.dispose is async and should be waited for\n                    this.localPresenterVideo && this.localPresenterVideo.dispose();\n                    this.localPresenterVideo = null;\n\n                    return this._createPresenterStreamEffect(height, cameraDeviceId)\n                        .then(effect => this.localVideo.setEffect(effect))\n                        .then(() => {\n                            this.setVideoMuteStatus(false);\n                            logger.log('switched local video device');\n                            this._updateVideoDeviceId();\n                        })\n                        .catch(err => APP.store.dispatch(notifyCameraError(err)));\n\n                // If screenshare is in progress but video is muted, update the default device\n                // id for video, dispose the existing presenter track and create a new effect\n                // that can be applied on un-mute.\n                } else if (this.isSharingScreen && videoWasMuted) {\n                    logger.log('switched local video device');\n                    const { height } = this.localVideo.track.getSettings();\n\n                    this._updateVideoDeviceId();\n\n                    // FIXME JitsiLocalTrack.dispose is async and should be waited for\n                    this.localPresenterVideo && this.localPresenterVideo.dispose();\n                    this.localPresenterVideo = null;\n                    this._createPresenterStreamEffect(height, cameraDeviceId);\n\n                // if there is only video, switch to the new camera stream.\n                } else {\n                    createLocalTracksF({\n                        devices: [ 'video' ],\n                        cameraDeviceId,\n                        micDeviceId: null\n                    })\n                    .then(([ stream ]) => {\n                        // if we are in audio only mode or video was muted before\n                        // changing device, then mute\n                        if (this.isAudioOnly() || videoWasMuted) {\n                            return stream.mute()\n                                .then(() => stream);\n                        }\n\n                        return stream;\n                    })\n                    .then(stream => this.useVideoStream(stream))\n                    .then(() => {\n                        logger.log('switched local video device');\n                        this._updateVideoDeviceId();\n                    })\n                    .catch(err => APP.store.dispatch(notifyCameraError(err)));\n                }\n            }\n        );\n\n        APP.UI.addListener(\n            UIEvents.AUDIO_DEVICE_CHANGED,\n            micDeviceId => {\n                const audioWasMuted = this.isLocalAudioMuted();\n\n                sendAnalytics(createDeviceChangedEvent('audio', 'input'));\n                createLocalTracksF({\n                    devices: [ 'audio' ],\n                    cameraDeviceId: null,\n                    micDeviceId\n                })\n                .then(([ stream ]) => {\n                    // if audio was muted before changing the device, mute\n                    // with the new device\n                    if (audioWasMuted) {\n                        return stream.mute()\n                            .then(() => stream);\n                    }\n\n                    return stream;\n                })\n                .then(async stream => {\n                    // In case screen sharing audio is also shared we mix it with new input stream. The old _mixerEffect\n                    // will be cleaned up when the existing track is replaced.\n                    if (this._mixerEffect) {\n                        this._mixerEffect = new AudioMixerEffect(this._desktopAudioStream);\n\n                        await stream.setEffect(this._mixerEffect);\n                    }\n\n                    return this.useAudioStream(stream);\n                })\n                .then(() => {\n                    logger.log(`switched local audio device: ${this.localAudio?.getDeviceId()}`);\n\n                    this._updateAudioDeviceId();\n                })\n                .catch(err => {\n                    APP.store.dispatch(notifyMicError(err));\n                });\n            }\n        );\n\n        APP.UI.addListener(UIEvents.TOGGLE_AUDIO_ONLY, audioOnly => {\n\n            // FIXME On web video track is stored both in redux and in\n            // 'localVideo' field, video is attempted to be unmuted twice when\n            // turning off the audio only mode. This will crash the app with\n            // 'unmute operation is already in progress'.\n            // Because there's no logic in redux about creating new track in\n            // case unmute when not track exists the things have to go through\n            // muteVideo logic in such case.\n            const tracks = APP.store.getState()['features/base/tracks'];\n            const isTrackInRedux\n                = Boolean(\n                    tracks.find(\n                        track => track.jitsiTrack\n                            && track.jitsiTrack.getType() === 'video'));\n\n            if (!isTrackInRedux) {\n                this.muteVideo(audioOnly);\n            }\n\n            // Immediately update the UI by having remote videos and the large\n            // video update themselves instead of waiting for some other event\n            // to cause the update, usually PARTICIPANT_CONN_STATUS_CHANGED.\n            // There is no guarantee another event will trigger the update\n            // immediately and in all situations, for example because a remote\n            // participant is having connection trouble so no status changes.\n            APP.UI.updateAllVideos();\n        });\n\n        APP.UI.addListener(\n            UIEvents.TOGGLE_SCREENSHARING, this.toggleScreenSharing.bind(this)\n        );\n\n        /* eslint-disable max-params */\n        APP.UI.addListener(\n            UIEvents.UPDATE_SHARED_VIDEO,\n            (url, state, time, isMuted, volume) => {\n                /* eslint-enable max-params */\n                // send start and stop commands once, and remove any updates\n                // that had left\n                if (state === 'stop'\n                        || state === 'start'\n                        || state === 'playing') {\n                    room.removeCommand(this.commands.defaults.SHARED_VIDEO);\n                    room.sendCommandOnce(this.commands.defaults.SHARED_VIDEO, {\n                        value: url,\n                        attributes: {\n                            state,\n                            time,\n                            muted: isMuted,\n                            volume\n                        }\n                    });\n                } else {\n                    // in case of paused, in order to allow late users to join\n                    // paused\n                    room.removeCommand(this.commands.defaults.SHARED_VIDEO);\n                    room.sendCommand(this.commands.defaults.SHARED_VIDEO, {\n                        value: url,\n                        attributes: {\n                            state,\n                            time,\n                            muted: isMuted,\n                            volume\n                        }\n                    });\n                }\n\n                APP.store.dispatch(setSharedVideoStatus(state));\n            });\n        room.addCommandListener(\n            this.commands.defaults.SHARED_VIDEO,\n            ({ value, attributes }, id) => {\n                if (attributes.state === 'stop') {\n                    APP.UI.onSharedVideoStop(id, attributes);\n                } else if (attributes.state === 'start') {\n                    APP.UI.onSharedVideoStart(id, value, attributes);\n                } else if (attributes.state === 'playing'\n                    || attributes.state === 'pause') {\n                    APP.UI.onSharedVideoUpdate(id, value, attributes);\n                }\n            });\n    },\n\n    /**\n     * Cleanups local conference on suspend.\n     */\n    onSuspendDetected() {\n        // After wake up, we will be in a state where conference is left\n        // there will be dialog shown to user.\n        // We do not want video/audio as we show an overlay and after it\n        // user need to rejoin or close, while waking up we can detect\n        // camera wakeup as a problem with device.\n        // We also do not care about device change, which happens\n        // on resume after suspending PC.\n        if (this.deviceChangeListener) {\n            JitsiMeetJS.mediaDevices.removeEventListener(\n                JitsiMediaDevicesEvents.DEVICE_LIST_CHANGED,\n                this.deviceChangeListener);\n        }\n\n        this.localVideo = null;\n        this.localAudio = null;\n    },\n\n    /**\n     * Callback invoked when the conference has been successfully joined.\n     * Initializes the UI and various other features.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onConferenceJoined() {\n        APP.UI.initConference();\n\n        APP.keyboardshortcut.init();\n\n        APP.store.dispatch(conferenceJoined(room));\n\n        const displayName\n            = APP.store.getState()['features/base/settings'].displayName;\n\n        APP.UI.changeDisplayName('localVideoContainer', displayName);\n    },\n\n    /**\n    * Adds any room listener.\n    * @param {string} eventName one of the JitsiConferenceEvents\n    * @param {Function} listener the function to be called when the event\n    * occurs\n    */\n    addConferenceListener(eventName, listener) {\n        room.on(eventName, listener);\n    },\n\n    /**\n    * Removes any room listener.\n    * @param {string} eventName one of the JitsiConferenceEvents\n    * @param {Function} listener the listener to be removed.\n    */\n    removeConferenceListener(eventName, listener) {\n        room.off(eventName, listener);\n    },\n\n    /**\n     * Updates the list of current devices.\n     * @param {boolean} setDeviceListChangeHandler - Whether to add the deviceList change handlers.\n     * @private\n     * @returns {Promise}\n     */\n    _initDeviceList(setDeviceListChangeHandler = false) {\n        const { mediaDevices } = JitsiMeetJS;\n\n        if (mediaDevices.isDeviceListAvailable()\n                && mediaDevices.isDeviceChangeAvailable()) {\n            if (setDeviceListChangeHandler) {\n                this.deviceChangeListener = devices =>\n                    window.setTimeout(() => this._onDeviceListChanged(devices), 0);\n                mediaDevices.addEventListener(\n                    JitsiMediaDevicesEvents.DEVICE_LIST_CHANGED,\n                    this.deviceChangeListener);\n            }\n\n            const { dispatch } = APP.store;\n\n            return dispatch(getAvailableDevices())\n                .then(devices => {\n                    // Ugly way to synchronize real device IDs with local\n                    // storage and settings menu. This is a workaround until\n                    // getConstraints() method will be implemented in browsers.\n                    this._updateAudioDeviceId();\n\n                    this._updateVideoDeviceId();\n\n                    APP.UI.onAvailableDevicesChanged(devices);\n                });\n        }\n\n        return Promise.resolve();\n    },\n\n    /**\n     * Updates the settings for the currently used video device, extracting\n     * the device id from the used track.\n     * @private\n     */\n    _updateVideoDeviceId() {\n        if (this.localVideo\n            && this.localVideo.videoType === 'camera') {\n            APP.store.dispatch(updateSettings({\n                cameraDeviceId: this.localVideo.getDeviceId()\n            }));\n        }\n\n        // If screenshare is in progress, get the device id from the presenter track.\n        if (this.localPresenterVideo) {\n            APP.store.dispatch(updateSettings({\n                cameraDeviceId: this.localPresenterVideo.getDeviceId()\n            }));\n        }\n    },\n\n    /**\n     * Updates the settings for the currently used audio device, extracting\n     * the device id from the used track.\n     * @private\n     */\n    _updateAudioDeviceId() {\n        if (this.localAudio) {\n            APP.store.dispatch(updateSettings({\n                micDeviceId: this.localAudio.getDeviceId()\n            }));\n        }\n    },\n\n    /**\n     * Event listener for JitsiMediaDevicesEvents.DEVICE_LIST_CHANGED to\n     * handle change of available media devices.\n     * @private\n     * @param {MediaDeviceInfo[]} devices\n     * @returns {Promise}\n     */\n    _onDeviceListChanged(devices) {\n        const oldDevices = APP.store.getState()['features/base/devices'].availableDevices;\n\n        APP.store.dispatch(updateDeviceList(devices));\n\n        const newDevices\n            = mediaDeviceHelper.getNewMediaDevicesAfterDeviceListChanged(\n                devices,\n                this.isSharingScreen,\n                this.localVideo,\n                this.localAudio);\n        const promises = [];\n        const audioWasMuted = this.isLocalAudioMuted();\n        const videoWasMuted = this.isLocalVideoMuted();\n        const requestedInput = {\n            audio: Boolean(newDevices.audioinput),\n            video: Boolean(newDevices.videoinput)\n        };\n\n        if (typeof newDevices.audiooutput !== 'undefined') {\n            const { dispatch } = APP.store;\n            const setAudioOutputPromise\n                = setAudioOutputDeviceId(newDevices.audiooutput, dispatch)\n                    .catch(); // Just ignore any errors in catch block.\n\n\n            promises.push(setAudioOutputPromise);\n        }\n\n        // Handles the use case when the default device is changed (we are always stopping the streams because it's\n        // simpler):\n        // If the default device is changed we need to first stop the local streams and then call GUM. Otherwise GUM\n        // will return a stream using the old default device.\n        if (requestedInput.audio && this.localAudio) {\n            this.localAudio.stopStream();\n        }\n\n        if (requestedInput.video && this.localVideo) {\n            this.localVideo.stopStream();\n        }\n\n        // Let's handle unknown/non-preferred devices\n        const newAvailDevices\n            = APP.store.getState()['features/base/devices'].availableDevices;\n        let newAudioDevices = [];\n        let oldAudioDevices = [];\n\n        if (typeof newDevices.audiooutput === 'undefined') {\n            newAudioDevices = newAvailDevices.audioOutput;\n            oldAudioDevices = oldDevices.audioOutput;\n        }\n\n        if (!requestedInput.audio) {\n            newAudioDevices = newAudioDevices.concat(newAvailDevices.audioInput);\n            oldAudioDevices = oldAudioDevices.concat(oldDevices.audioInput);\n        }\n\n        // check for audio\n        if (newAudioDevices.length > 0) {\n            APP.store.dispatch(\n                checkAndNotifyForNewDevice(newAudioDevices, oldAudioDevices));\n        }\n\n        // check for video\n        if (!requestedInput.video) {\n            APP.store.dispatch(\n                checkAndNotifyForNewDevice(newAvailDevices.videoInput, oldDevices.videoInput));\n        }\n\n        promises.push(\n            mediaDeviceHelper.createLocalTracksAfterDeviceListChanged(\n                    createLocalTracksF,\n                    newDevices.videoinput,\n                    newDevices.audioinput)\n                .then(tracks => {\n                    // If audio or video muted before, or we unplugged current\n                    // device and selected new one, then mute new track.\n                    const muteSyncPromises = tracks.map(track => {\n                        if ((track.isVideoTrack() && videoWasMuted)\n                            || (track.isAudioTrack() && audioWasMuted)) {\n                            return track.mute();\n                        }\n\n                        return Promise.resolve();\n                    });\n\n                    return Promise.all(muteSyncPromises)\n                        .then(() =>\n                            Promise.all(Object.keys(requestedInput).map(mediaType => {\n                                if (requestedInput[mediaType]) {\n                                    const useStream\n                                        = mediaType === 'audio'\n                                            ? this.useAudioStream.bind(this)\n                                            : this.useVideoStream.bind(this);\n\n                                    // Use the new stream or null if we failed to obtain it.\n                                    return useStream(tracks.find(track => track.getType() === mediaType) || null)\n                                        .then(() => {\n                                            mediaType === 'audio'\n                                                ? this._updateAudioDeviceId()\n                                                : this._updateVideoDeviceId();\n                                        });\n                                }\n\n                                return Promise.resolve();\n                            })));\n                })\n                .then(() => {\n                    // Log and sync known mute state.\n                    if (audioWasMuted) {\n                        sendAnalytics(createTrackMutedEvent(\n                            'audio',\n                            'device list changed'));\n                        logger.log('Audio mute: device list changed');\n                        muteLocalAudio(true);\n                    }\n\n                    if (!this.isSharingScreen && videoWasMuted) {\n                        sendAnalytics(createTrackMutedEvent(\n                            'video',\n                            'device list changed'));\n                        logger.log('Video mute: device list changed');\n                        muteLocalVideo(true);\n                    }\n                }));\n\n        return Promise.all(promises)\n            .then(() => {\n                APP.UI.onAvailableDevicesChanged(devices);\n            });\n    },\n\n    /**\n     * Determines whether or not the audio button should be enabled.\n     */\n    updateAudioIconEnabled() {\n        const audioMediaDevices\n            = APP.store.getState()['features/base/devices'].availableDevices.audioInput;\n        const audioDeviceCount\n            = audioMediaDevices ? audioMediaDevices.length : 0;\n\n        // The audio functionality is considered available if there are any\n        // audio devices detected or if the local audio stream already exists.\n        const available = audioDeviceCount > 0 || Boolean(this.localAudio);\n\n        APP.store.dispatch(setAudioAvailable(available));\n        APP.API.notifyAudioAvailabilityChanged(available);\n    },\n\n    /**\n     * Determines whether or not the video button should be enabled.\n     */\n    updateVideoIconEnabled() {\n        const videoMediaDevices\n            = APP.store.getState()['features/base/devices'].availableDevices.videoInput;\n        const videoDeviceCount\n            = videoMediaDevices ? videoMediaDevices.length : 0;\n\n        // The video functionality is considered available if there are any\n        // video devices detected or if there is local video stream already\n        // active which could be either screensharing stream or a video track\n        // created before the permissions were rejected (through browser\n        // config).\n        const available = videoDeviceCount > 0 || Boolean(this.localVideo);\n\n        APP.store.dispatch(setVideoAvailable(available));\n        APP.API.notifyVideoAvailabilityChanged(available);\n    },\n\n    /**\n     * Disconnect from the conference and optionally request user feedback.\n     * @param {boolean} [requestFeedback=false] if user feedback should be\n     * requested\n     */\n    hangup(requestFeedback = false) {\n        eventEmitter.emit(JitsiMeetConferenceEvents.BEFORE_HANGUP);\n\n        this._stopProxyConnection();\n\n        APP.store.dispatch(destroyLocalTracks());\n        this._localTracksInitialized = false;\n        this.localVideo = null;\n        this.localAudio = null;\n\n        // Remove unnecessary event listeners from firing callbacks.\n        if (this.deviceChangeListener) {\n            JitsiMeetJS.mediaDevices.removeEventListener(\n                JitsiMediaDevicesEvents.DEVICE_LIST_CHANGED,\n                this.deviceChangeListener);\n        }\n\n        APP.UI.removeAllListeners();\n        APP.remoteControl.removeAllListeners();\n\n        let requestFeedbackPromise;\n\n        if (requestFeedback) {\n            requestFeedbackPromise\n                = APP.store.dispatch(maybeOpenFeedbackDialog(room))\n\n                    // false because the thank you dialog shouldn't be displayed\n                    .catch(() => Promise.resolve(false));\n        } else {\n            requestFeedbackPromise = Promise.resolve(true);\n        }\n\n        // All promises are returning Promise.resolve to make Promise.all to\n        // be resolved when both Promises are finished. Otherwise Promise.all\n        // will reject on first rejected Promise and we can redirect the page\n        // before all operations are done.\n        Promise.all([\n            requestFeedbackPromise,\n            this.leaveRoomAndDisconnect()\n        ]).then(values => {\n            this._room = undefined;\n            room = undefined;\n\n            APP.API.notifyReadyToClose();\n            APP.store.dispatch(maybeRedirectToWelcomePage(values[0]));\n        });\n    },\n\n    /**\n     * Leaves the room and calls JitsiConnection.disconnect.\n     *\n     * @returns {Promise}\n     */\n    leaveRoomAndDisconnect() {\n        APP.store.dispatch(conferenceWillLeave(room));\n\n        if (room && room.isJoined()) {\n            return room.leave().then(disconnect, disconnect);\n        }\n\n        return disconnect();\n    },\n\n    /**\n     * Changes the email for the local user\n     * @param email {string} the new email\n     */\n    changeLocalEmail(email = '') {\n        const localParticipant = getLocalParticipant(APP.store.getState());\n\n        const formattedEmail = String(email).trim();\n\n        if (formattedEmail === localParticipant.email) {\n            return;\n        }\n\n        const localId = localParticipant.id;\n\n        APP.store.dispatch(participantUpdated({\n            // XXX Only the local participant is allowed to update without\n            // stating the JitsiConference instance (i.e. participant property\n            // `conference` for a remote participant) because the local\n            // participant is uniquely identified by the very fact that there is\n            // only one local participant.\n\n            id: localId,\n            local: true,\n            email: formattedEmail\n        }));\n\n        APP.store.dispatch(updateSettings({\n            email: formattedEmail\n        }));\n        APP.API.notifyEmailChanged(localId, {\n            email: formattedEmail\n        });\n        sendData(commands.EMAIL, formattedEmail);\n    },\n\n    /**\n     * Changes the avatar url for the local user\n     * @param url {string} the new url\n     */\n    changeLocalAvatarUrl(url = '') {\n        const { avatarURL, id } = getLocalParticipant(APP.store.getState());\n\n        const formattedUrl = String(url).trim();\n\n        if (formattedUrl === avatarURL) {\n            return;\n        }\n\n        APP.store.dispatch(participantUpdated({\n            // XXX Only the local participant is allowed to update without\n            // stating the JitsiConference instance (i.e. participant property\n            // `conference` for a remote participant) because the local\n            // participant is uniquely identified by the very fact that there is\n            // only one local participant.\n\n            id,\n            local: true,\n            avatarURL: formattedUrl\n        }));\n\n        APP.store.dispatch(updateSettings({\n            avatarURL: formattedUrl\n        }));\n        sendData(commands.AVATAR_URL, url);\n    },\n\n    /**\n     * Sends a message via the data channel.\n     * @param {string} to the id of the endpoint that should receive the\n     * message. If \"\" - the message will be sent to all participants.\n     * @param {object} payload the payload of the message.\n     * @throws NetworkError or InvalidStateError or Error if the operation\n     * fails.\n     */\n    sendEndpointMessage(to, payload) {\n        room.sendEndpointMessage(to, payload);\n    },\n\n    /**\n     * Adds new listener.\n     * @param {String} eventName the name of the event\n     * @param {Function} listener the listener.\n     */\n    addListener(eventName, listener) {\n        eventEmitter.addListener(eventName, listener);\n    },\n\n    /**\n     * Removes listener.\n     * @param {String} eventName the name of the event that triggers the\n     * listener\n     * @param {Function} listener the listener.\n     */\n    removeListener(eventName, listener) {\n        eventEmitter.removeListener(eventName, listener);\n    },\n\n    /**\n     * Changes the display name for the local user\n     * @param nickname {string} the new display name\n     */\n    changeLocalDisplayName(nickname = '') {\n        const formattedNickname = getNormalizedDisplayName(nickname);\n        const { id, name } = getLocalParticipant(APP.store.getState());\n\n        if (formattedNickname === name) {\n            return;\n        }\n\n        APP.store.dispatch(participantUpdated({\n            // XXX Only the local participant is allowed to update without\n            // stating the JitsiConference instance (i.e. participant property\n            // `conference` for a remote participant) because the local\n            // participant is uniquely identified by the very fact that there is\n            // only one local participant.\n\n            id,\n            local: true,\n            name: formattedNickname\n        }));\n\n        APP.store.dispatch(updateSettings({\n            displayName: formattedNickname\n        }));\n\n        if (room) {\n            APP.UI.changeDisplayName(id, formattedNickname);\n        }\n    },\n\n    /**\n     * Returns the desktop sharing source id or undefined if the desktop sharing\n     * is not active at the moment.\n     *\n     * @returns {string|undefined} - The source id. If the track is not desktop\n     * track or the source id is not available, undefined will be returned.\n     */\n    getDesktopSharingSourceId() {\n        return this.localVideo.sourceId;\n    },\n\n    /**\n     * Returns the desktop sharing source type or undefined if the desktop\n     * sharing is not active at the moment.\n     *\n     * @returns {'screen'|'window'|undefined} - The source type. If the track is\n     * not desktop track or the source type is not available, undefined will be\n     * returned.\n     */\n    getDesktopSharingSourceType() {\n        return this.localVideo.sourceType;\n    },\n\n    /**\n     * Callback invoked by the external api create or update a direct connection\n     * from the local client to an external client.\n     *\n     * @param {Object} event - The object containing information that should be\n     * passed to the {@code ProxyConnectionService}.\n     * @returns {void}\n     */\n    onProxyConnectionEvent(event) {\n        if (!this._proxyConnection) {\n            this._proxyConnection = new JitsiMeetJS.ProxyConnectionService({\n\n                /**\n                 * Pass the {@code JitsiConnection} instance which will be used\n                 * to fetch TURN credentials.\n                 */\n                jitsiConnection: APP.connection,\n\n                /**\n                 * The proxy connection feature is currently tailored towards\n                 * taking a proxied video stream and showing it as a local\n                 * desktop screen.\n                 */\n                convertVideoToDesktop: true,\n\n                /**\n                 * Callback invoked when the connection has been closed\n                 * automatically. Triggers cleanup of screensharing if active.\n                 *\n                 * @returns {void}\n                 */\n                onConnectionClosed: () => {\n                    if (this._untoggleScreenSharing) {\n                        this._untoggleScreenSharing();\n                    }\n                },\n\n                /**\n                 * Callback invoked to pass messages from the local client back\n                 * out to the external client.\n                 *\n                 * @param {string} peerJid - The jid of the intended recipient\n                 * of the message.\n                 * @param {Object} data - The message that should be sent. For\n                 * screensharing this is an iq.\n                 * @returns {void}\n                 */\n                onSendMessage: (peerJid, data) =>\n                    APP.API.sendProxyConnectionEvent({\n                        data,\n                        to: peerJid\n                    }),\n\n                /**\n                 * Callback invoked when the remote peer of the proxy connection\n                 * has provided a video stream, intended to be used as a local\n                 * desktop stream.\n                 *\n                 * @param {JitsiLocalTrack} remoteProxyStream - The media\n                 * stream to use as a local desktop stream.\n                 * @returns {void}\n                 */\n                onRemoteStream: desktopStream => {\n                    if (desktopStream.videoType !== 'desktop') {\n                        logger.warn('Received a non-desktop stream to proxy.');\n                        desktopStream.dispose();\n\n                        return;\n                    }\n\n                    this.toggleScreenSharing(undefined, { desktopStream });\n                }\n            });\n        }\n\n        this._proxyConnection.processMessage(event);\n    },\n\n    /**\n     * Sets the video muted status.\n     *\n     * @param {boolean} muted - New muted status.\n     */\n    setVideoMuteStatus(muted) {\n        APP.UI.setVideoMuted(this.getMyUserId(), muted);\n        APP.API.notifyVideoMutedStatusChanged(muted);\n    },\n\n    /**\n     * Sets the audio muted status.\n     *\n     * @param {boolean} muted - New muted status.\n     */\n    setAudioMuteStatus(muted) {\n        APP.UI.setAudioMuted(this.getMyUserId(), muted);\n        APP.API.notifyAudioMutedStatusChanged(muted);\n    },\n\n    /**\n     * Dispatches the passed in feedback for submission. The submitted score\n     * should be a number inclusively between 1 through 5, or -1 for no score.\n     *\n     * @param {number} score - a number between 1 and 5 (inclusive) or -1 for no\n     * score.\n     * @param {string} message - An optional message to attach to the feedback\n     * in addition to the score.\n     * @returns {void}\n     */\n    submitFeedback(score = -1, message = '') {\n        if (score === -1 || (score >= 1 && score <= 5)) {\n            APP.store.dispatch(submitFeedback(score, message, room));\n        }\n    },\n\n    /**\n     * Terminates any proxy screensharing connection that is active.\n     *\n     * @private\n     * @returns {void}\n     */\n    _stopProxyConnection() {\n        if (this._proxyConnection) {\n            this._proxyConnection.stop();\n        }\n\n        this._proxyConnection = null;\n    }\n};\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.bowser=t():e.bowser=t()}(this,(function(){return function(e){var t={};function r(i){if(t[i])return t[i].exports;var n=t[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)r.d(i,n,function(t){return e[t]}.bind(null,n));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=90)}({17:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i=r(18),n=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||\"\"},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||\"\"},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case\"NT\":return\"NT\";case\"XP\":return\"XP\";case\"NT 5.0\":return\"2000\";case\"NT 5.1\":return\"XP\";case\"NT 5.2\":return\"2003\";case\"NT 6.0\":return\"Vista\";case\"NT 6.1\":return\"7\";case\"NT 6.2\":return\"8\";case\"NT 6.3\":return\"8.1\";case\"NT 10.0\":return\"10\";default:return}},e.getMacOSVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return\"Leopard\";case 6:return\"Snow Leopard\";case 7:return\"Lion\";case 8:return\"Mountain Lion\";case 9:return\"Mavericks\";case 10:return\"Yosemite\";case 11:return\"El Capitan\";case 12:return\"Sierra\";case 13:return\"High Sierra\";case 14:return\"Mojave\";case 15:return\"Catalina\";default:return}},e.getAndroidVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0},e.getVersionPrecision=function(e){return e.split(\".\").length},e.compareVersions=function(t,r,i){void 0===i&&(i=!1);var n=e.getVersionPrecision(t),s=e.getVersionPrecision(r),o=Math.max(n,s),a=0,u=e.map([t,r],(function(t){var r=o-e.getVersionPrecision(t),i=t+new Array(r+1).join(\".0\");return e.map(i.split(\".\"),(function(e){return new Array(20-e.length).join(\"0\")+e})).reverse()}));for(i&&(a=o-Math.min(n,s)),o-=1;o>=a;){if(u[0][o]>u[1][o])return 1;if(u[0][o]===u[1][o]){if(o===a)return 0;o-=1}else if(u[0][o]<u[1][o])return-1}},e.map=function(e,t){var r,i=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)i.push(t(e[r]));return i},e.getBrowserAlias=function(e){return i.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return i.BROWSER_MAP[e]||\"\"},e}();t.default=n,e.exports=t.default},18:function(e,t,r){\"use strict\";t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={\"Amazon Silk\":\"amazon_silk\",\"Android Browser\":\"android\",Bada:\"bada\",BlackBerry:\"blackberry\",Chrome:\"chrome\",Chromium:\"chromium\",Epiphany:\"epiphany\",Firefox:\"firefox\",Focus:\"focus\",Generic:\"generic\",\"Google Search\":\"google_search\",Googlebot:\"googlebot\",\"Internet Explorer\":\"ie\",\"K-Meleon\":\"k_meleon\",Maxthon:\"maxthon\",\"Microsoft Edge\":\"edge\",\"MZ Browser\":\"mz\",\"NAVER Whale Browser\":\"naver\",Opera:\"opera\",\"Opera Coast\":\"opera_coast\",PhantomJS:\"phantomjs\",Puffin:\"puffin\",QupZilla:\"qupzilla\",QQ:\"qq\",QQLite:\"qqlite\",Safari:\"safari\",Sailfish:\"sailfish\",\"Samsung Internet for Android\":\"samsung_internet\",SeaMonkey:\"seamonkey\",Sleipnir:\"sleipnir\",Swing:\"swing\",Tizen:\"tizen\",\"UC Browser\":\"uc\",Vivaldi:\"vivaldi\",\"WebOS Browser\":\"webos\",WeChat:\"wechat\",\"Yandex Browser\":\"yandex\",Roku:\"roku\"};t.BROWSER_MAP={amazon_silk:\"Amazon Silk\",android:\"Android Browser\",bada:\"Bada\",blackberry:\"BlackBerry\",chrome:\"Chrome\",chromium:\"Chromium\",epiphany:\"Epiphany\",firefox:\"Firefox\",focus:\"Focus\",generic:\"Generic\",googlebot:\"Googlebot\",google_search:\"Google Search\",ie:\"Internet Explorer\",k_meleon:\"K-Meleon\",maxthon:\"Maxthon\",edge:\"Microsoft Edge\",mz:\"MZ Browser\",naver:\"NAVER Whale Browser\",opera:\"Opera\",opera_coast:\"Opera Coast\",phantomjs:\"PhantomJS\",puffin:\"Puffin\",qupzilla:\"QupZilla\",qq:\"QQ Browser\",qqlite:\"QQ Browser Lite\",safari:\"Safari\",sailfish:\"Sailfish\",samsung_internet:\"Samsung Internet for Android\",seamonkey:\"SeaMonkey\",sleipnir:\"Sleipnir\",swing:\"Swing\",tizen:\"Tizen\",uc:\"UC Browser\",vivaldi:\"Vivaldi\",webos:\"WebOS Browser\",wechat:\"WeChat\",yandex:\"Yandex Browser\"};t.PLATFORMS_MAP={tablet:\"tablet\",mobile:\"mobile\",desktop:\"desktop\",tv:\"tv\"};t.OS_MAP={WindowsPhone:\"Windows Phone\",Windows:\"Windows\",MacOS:\"macOS\",iOS:\"iOS\",Android:\"Android\",WebOS:\"WebOS\",BlackBerry:\"BlackBerry\",Bada:\"Bada\",Tizen:\"Tizen\",Linux:\"Linux\",ChromeOS:\"Chrome OS\",PlayStation4:\"PlayStation 4\",Roku:\"Roku\"};t.ENGINE_MAP={EdgeHTML:\"EdgeHTML\",Blink:\"Blink\",Trident:\"Trident\",Presto:\"Presto\",Gecko:\"Gecko\",WebKit:\"WebKit\"}},90:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i,n=(i=r(91))&&i.__esModule?i:{default:i},s=r(18);function o(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var a=function(){function e(){}var t,r,i;return e.getParser=function(e,t){if(void 0===t&&(t=!1),\"string\"!=typeof e)throw new Error(\"UserAgent should be a string\");return new n.default(e,t)},e.parse=function(e){return new n.default(e).getResult()},t=e,i=[{key:\"BROWSER_MAP\",get:function(){return s.BROWSER_MAP}},{key:\"ENGINE_MAP\",get:function(){return s.ENGINE_MAP}},{key:\"OS_MAP\",get:function(){return s.OS_MAP}},{key:\"PLATFORMS_MAP\",get:function(){return s.PLATFORMS_MAP}}],(r=null)&&o(t.prototype,r),i&&o(t,i),e}();t.default=a,e.exports=t.default},91:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i=u(r(92)),n=u(r(93)),s=u(r(94)),o=u(r(95)),a=u(r(17));function u(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||\"\"===e)throw new Error(\"UserAgent parameter can't be empty\");this._ua=e,this.parsedResult={},!0!==t&&this.parse()}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=i.default.find((function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||\"\":this.getBrowser().name||\"\"},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=n.default.find((function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||\"\":t||\"\"},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||\"\":t||\"\"},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=s.default.find((function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||\"\":this.getEngine().name||\"\"},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find((function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return Object.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},i=0,n={},s=0;if(Object.keys(e).forEach((function(t){var o=e[t];\"string\"==typeof o?(n[t]=o,s+=1):\"object\"==typeof o&&(r[t]=o,i+=1)})),i>0){var o=Object.keys(r),a=o.find((function(e){return t.isOS(e)}));if(a){var u=this.satisfies(r[a]);if(void 0!==u)return u}var d=o.find((function(e){return t.isPlatform(e)}));if(d){var c=this.satisfies(r[d]);if(void 0!==c)return c}}if(s>0){var f=Object.keys(n).find((function(e){return t.isBrowser(e,!0)}));if(void 0!==f)return this.compareVersion(n[f])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),i=e.toLowerCase(),n=a.default.getBrowserTypeByAlias(i);return t&&n&&(i=n.toLowerCase()),i===r},t.compareVersion=function(e){var t=[0],r=e,i=!1,n=this.getBrowserVersion();if(\"string\"==typeof n)return\">\"===e[0]||\"<\"===e[0]?(r=e.substr(1),\"=\"===e[1]?(i=!0,r=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?r=e.substr(1):\"~\"===e[0]&&(i=!0,r=e.substr(1)),t.indexOf(a.default.compareVersions(n,r,i))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e){return this.isBrowser(e)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default},92:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i,n=(i=r(17))&&i.__esModule?i:{default:i};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,o=[{test:[/googlebot/i],describe:function(e){var t={name:\"Googlebot\"},r=n.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:\"Opera\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\\/|opios/i],describe:function(e){var t={name:\"Opera\"},r=n.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:\"Samsung Internet for Android\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:\"NAVER Whale Browser\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:\"MZ Browser\"},r=n.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:\"Focus\"},r=n.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:\"Swing\"},r=n.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:\"Opera Coast\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:\"Yandex Browser\"},r=n.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:\"UC Browser\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:\"Maxthon\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:\"Epiphany\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:\"Puffin\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:\"Sleipnir\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:\"K-Meleon\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:\"WeChat\"},r=n.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},r=n.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:\"Internet Explorer\"},r=n.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\\sedg\\//i],describe:function(e){var t={name:\"Microsoft Edge\"},r=n.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:\"Microsoft Edge\"},r=n.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:\"Vivaldi\"},r=n.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:\"SeaMonkey\"},r=n.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:\"Sailfish\"},r=n.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:\"Amazon Silk\"},r=n.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:\"PhantomJS\"},r=n.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:\"SlimerJS\"},r=n.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t={name:\"BlackBerry\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:\"WebOS Browser\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:\"Bada\"},r=n.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:\"Tizen\"},r=n.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:\"QupZilla\"},r=n.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:\"Firefox\"},r=n.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:\"Chromium\"},r=n.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:\"Chrome\"},r=n.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:\"Google Search\"},r=n.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:\"Android Browser\"},r=n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:\"PlayStation 4\"},r=n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:\"Safari\"},r=n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return{name:n.default.getFirstMatch(t,e),version:n.default.getSecondMatch(t,e)}}}];t.default=o,e.exports=t.default},93:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i,n=(i=r(17))&&i.__esModule?i:{default:i},s=r(18);var o=[{test:[/Roku\\/DVP/],describe:function(e){var t=n.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return{name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=n.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows/i],describe:function(e){var t=n.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=n.default.getWindowsVersionName(t);return{name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/macintosh/i],describe:function(e){var t=n.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),r=n.default.getMacOSVersionName(t),i={name:s.OS_MAP.MacOS,version:t};return r&&(i.versionName=r),i}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=n.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return{name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=n.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=n.default.getAndroidVersionName(t),i={name:s.OS_MAP.Android,version:t};return r&&(i.versionName=r),i}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=n.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t=n.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||n.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||n.default.getFirstMatch(/\\bbb(\\d+)/i,e);return{name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=n.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=n.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=n.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.PlayStation4,version:t}}}];t.default=o,e.exports=t.default},94:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i,n=(i=r(17))&&i.__esModule?i:{default:i},s=r(18);var o=[{test:[/googlebot/i],describe:function(){return{type:\"bot\",vendor:\"Google\"}}},{test:[/huawei/i],describe:function(e){var t=n.default.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",r={type:s.PLATFORMS_MAP.mobile,vendor:\"Huawei\"};return t&&(r.model=t),r}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Nexus\"}}},{test:[/ipad/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/kftt build/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"}}},{test:[/silk/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=n.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:s.PLATFORMS_MAP.mobile,vendor:\"Apple\",model:t}}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Nexus\"}}},{test:[/[^-]mobi/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"blackberry\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"BlackBerry\"}}},{test:function(e){return\"bada\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"windows phone\"===e.getBrowserName()},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Microsoft\"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(\".\")[0]);return\"android\"===e.getOSName(!0)&&t>=3},describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return\"android\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"macos\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop,vendor:\"Apple\"}}},{test:function(e){return\"windows\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"linux\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"playstation 4\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}},{test:function(e){return\"roku\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}}];t.default=o,e.exports=t.default},95:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i,n=(i=r(17))&&i.__esModule?i:{default:i},s=r(18);var o=[{test:function(e){return\"microsoft edge\"===e.getBrowserName(!0)},describe:function(e){if(/\\sedg\\//i.test(e))return{name:s.ENGINE_MAP.Blink};var t=n.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return{name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=n.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=n.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=n.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function(){return{name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=n.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=o,e.exports=t.default}})}));","'use strict';\n\nvar base64_url_decode = require('./base64_url_decode');\n\nfunction InvalidTokenError(message) {\n  this.message = message;\n}\n\nInvalidTokenError.prototype = new Error();\nInvalidTokenError.prototype.name = 'InvalidTokenError';\n\nmodule.exports = function (token,options) {\n  if (typeof token !== 'string') {\n    throw new InvalidTokenError('Invalid token specified');\n  }\n\n  options = options || {};\n  var pos = options.header === true ? 0 : 1;\n  try {\n    return JSON.parse(base64_url_decode(token.split('.')[pos]));\n  } catch (e) {\n    throw new InvalidTokenError('Invalid token specified: ' + e.message);\n  }\n};\n\nmodule.exports.InvalidTokenError = InvalidTokenError;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","module.exports = {\n    parse: require('./lib/parse'),\n    stringify: require('./lib/stringify')\n};\n","function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nmodule.exports = _createClass;","'use strict';\n\nexports.__esModule = true;\nfunction createThunkMiddleware(extraArgument) {\n  return function (_ref) {\n    var dispatch = _ref.dispatch,\n        getState = _ref.getState;\n    return function (next) {\n      return function (action) {\n        if (typeof action === 'function') {\n          return action(dispatch, getState, extraArgument);\n        }\n\n        return next(action);\n      };\n    };\n  };\n}\n\nvar thunk = createThunkMiddleware();\nthunk.withExtraArgument = createThunkMiddleware;\n\nexports['default'] = thunk;","/* eslint no-var: 0 */\nvar main = require('./dist/commonjs/index.js').default;\n\nmodule.exports = main;\nmodule.exports.default = main;\n","var debounce = require('./debounce'),\n    isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n *  Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, {\n    'leading': leading,\n    'maxWait': wait,\n    'trailing': trailing\n  });\n}\n\nmodule.exports = throttle;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n'use strict';\n\nvar hyphenate = require('./hyphenate');\n\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenateStyleName(string) {\n  return hyphenate(string).replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;","(function (factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? (module['exports'] = factory()) :\n\t\ttypeof define === 'function' && define['amd'] ? define(factory()) :\n\t\t\t(window['stylisRuleSheet'] = factory())\n}(function () {\n\n\t'use strict'\n\n\treturn function (insertRule) {\n\t\tvar delimiter = '/*|*/'\n\t\tvar needle = delimiter+'}'\n\n\t\tfunction toSheet (block) {\n\t\t\tif (block)\n\t\t\t\ttry {\n\t\t\t\t\tinsertRule(block + '}')\n\t\t\t\t} catch (e) {}\n\t\t}\n\n\t\treturn function ruleSheet (context, content, selectors, parents, line, column, length, ns, depth, at) {\n\t\t\tswitch (context) {\n\t\t\t\t// property\n\t\t\t\tcase 1:\n\t\t\t\t\t// @import\n\t\t\t\t\tif (depth === 0 && content.charCodeAt(0) === 64)\n\t\t\t\t\t\treturn insertRule(content+';'), ''\n\t\t\t\t\tbreak\n\t\t\t\t// selector\n\t\t\t\tcase 2:\n\t\t\t\t\tif (ns === 0)\n\t\t\t\t\t\treturn content + delimiter\n\t\t\t\t\tbreak\n\t\t\t\t// at-rule\n\t\t\t\tcase 3:\n\t\t\t\t\tswitch (ns) {\n\t\t\t\t\t\t// @font-face, @page\n\t\t\t\t\t\tcase 102:\n\t\t\t\t\t\tcase 112:\n\t\t\t\t\t\t\treturn insertRule(selectors[0]+content), ''\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn content + (at === 0 ? delimiter : '')\n\t\t\t\t\t}\n\t\t\t\tcase -2:\n\t\t\t\t\tcontent.split(needle).forEach(toSheet)\n\t\t\t}\n\t\t}\n\t}\n}))\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar ChevronUpIcon = function ChevronUpIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M11.221 9.322l-2.929 2.955a1.009 1.009 0 0 0 0 1.419.986.986 0 0 0 1.405 0l2.298-2.317 2.307 2.327a.989.989 0 0 0 1.407 0 1.01 1.01 0 0 0 0-1.419l-2.94-2.965A1.106 1.106 0 0 0 11.991 9c-.279 0-.557.107-.77.322z\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\"/></svg>\"\n  }, props));\n};\n\nChevronUpIcon.displayName = 'ChevronUpIcon';\nvar _default = ChevronUpIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar CrossIcon = function CrossIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M12 10.586L6.707 5.293a1 1 0 0 0-1.414 1.414L10.586 12l-5.293 5.293a1 1 0 0 0 1.414 1.414L12 13.414l5.293 5.293a1 1 0 0 0 1.414-1.414L13.414 12l5.293-5.293a1 1 0 1 0-1.414-1.414L12 10.586z\\\" fill=\\\"currentColor\\\"/></svg>\"\n  }, props));\n};\n\nCrossIcon.displayName = 'CrossIcon';\nvar _default = CrossIcon;\nexports.default = _default;","export var themeNamespace = '@atlaskit-shared-theme/button';\n//# sourceMappingURL=theme.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar ErrorIcon = function ErrorIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><path d=\\\"M13.416 4.417a2.002 2.002 0 0 0-2.832 0l-6.168 6.167a2.002 2.002 0 0 0 0 2.833l6.168 6.167a2.002 2.002 0 0 0 2.832 0l6.168-6.167a2.002 2.002 0 0 0 0-2.833l-6.168-6.167z\\\" fill=\\\"currentColor\\\"/><path d=\\\"M12 14a1 1 0 0 1-1-1V8a1 1 0 0 1 2 0v5a1 1 0 0 1-1 1m0 3a1 1 0 0 1 0-2 1 1 0 0 1 0 2\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nErrorIcon.displayName = 'ErrorIcon';\nvar _default = ErrorIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar WarningIcon = function WarningIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><path d=\\\"M12.938 4.967c-.518-.978-1.36-.974-1.876 0L3.938 18.425c-.518.978-.045 1.771 1.057 1.771h14.01c1.102 0 1.573-.797 1.057-1.771L12.938 4.967z\\\" fill=\\\"currentColor\\\"/><path d=\\\"M12 15a1 1 0 0 1-1-1V9a1 1 0 0 1 2 0v5a1 1 0 0 1-1 1m0 3a1 1 0 0 1 0-2 1 1 0 0 1 0 2\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nWarningIcon.displayName = 'WarningIcon';\nvar _default = WarningIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar EditorInfoIcon = function EditorInfoIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M12 20a8 8 0 1 1 0-16 8 8 0 0 1 0 16zm0-8.5a1 1 0 0 0-1 1V15a1 1 0 0 0 2 0v-2.5a1 1 0 0 0-1-1zm0-1.125a1.375 1.375 0 1 0 0-2.75 1.375 1.375 0 0 0 0 2.75z\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\"/></svg>\"\n  }, props));\n};\n\nEditorInfoIcon.displayName = 'EditorInfoIcon';\nvar _default = EditorInfoIcon;\nexports.default = _default;","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _implementation = require('./implementation');\n\nvar _implementation2 = _interopRequireDefault(_implementation);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _react2.default.createContext || _implementation2.default;\nmodule.exports = exports['default'];","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n        '`warning(condition, format, ...args)` requires a warning ' +\n        'message argument'\n      );\n    }\n\n    if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n      throw new Error(\n        'The warning format should be able to uniquely identify this ' +\n        'warning. Please, use a more descriptive format than: ' + format\n      );\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' +\n        format.replace(/%s/g, function() {\n          return args[argIndex++];\n        });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch(x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Linkify = require('./components/Linkify');\n\nvar _Linkify2 = _interopRequireDefault(_Linkify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Linkify2.default;","/* eslint-disable */\n/**\n * This file was copied from https://github.com/Blasz/popper.js/blob/v1.0.9/dist/popper.es5.min.js which contains a patch\n * to 1.0.8 containing a fix to stop repainting before popper flipping.\n * License below.\n */\n/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.0.9\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar _typeof = 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator ? function (e) { return typeof e } : function (e) { return e && 'function' == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? 'symbol' : typeof e }; (function (e, t) { 'object' === ('undefined' == typeof exports ? 'undefined' : _typeof(exports)) && 'undefined' != typeof module ? module.exports = t() : 'function' == typeof define && define.amd ? define(t) : e.Popper = t() })(this, function () { 'use strict'; function e(ue) { var ge = ue.offsetParent, be = ge && ge.nodeName; return be && 'BODY' !== be && 'HTML' !== be ? ge : window.document.documentElement } function t(ue, ge) { if (1 !== ue.nodeType) return []; var be = window.getComputedStyle(ue, null); return ge ? be[ge] : be } function o(ue) { return 'HTML' === ue.nodeName ? ue : ue.parentNode || ue.host } function r(ue) { if (!ue || -1 !== ['HTML', 'BODY', '#document'].indexOf(ue.nodeName)) return window.document.body; var ge = t(ue), be = ge.overflow, ye = ge.overflowX, we = ge.overflowY; return /(auto|scroll)/.test(be + we + ye) ? ue : r(o(ue)) } function s(ue) { var ge = ue.nodeName; return 'BODY' === ge || 'HTML' === ge ? !1 : 'fixed' === t(ue, 'position') || s(o(ue)) } function p(ue) { var ge = e(ue), be = s(ge); return be ? 'fixed' : 'absolute' } function f(ue, ge) { var be = 'x' === ge ? 'Left' : 'Top', ye = 'Left' == be ? 'Right' : 'Bottom'; return +ue['border' + be + 'Width'].split('px')[0] + +ue['border' + ye + 'Width'].split('px')[0] } function d(ue) { var be, ge = -1 !== navigator.appVersion.indexOf('MSIE 10'); if (ge) try { be = ue.getBoundingClientRect() } catch (Le) { be = {} } else be = ue.getBoundingClientRect(); var ye = { left: be.left, top: be.top, right: be.right, bottom: be.bottom, width: be.right - be.left, height: be.bottom - be.top }; if ('HTML' === ue.nodeName && ge) { var we = window.document.documentElement, xe = we.scrollTop, ve = we.scrollLeft; ye.top -= xe, ye.bottom -= xe, ye.left -= ve, ye.right -= ve } var Ee = be.width - (ue.clientWidth || be.right - be.left), Oe = be.height - (ue.clientHeight || be.bottom - be.top); if (Ee || Oe) { var Se = t(ue); Ee -= f(Se, 'x'), Oe -= f(Se, 'y') } return ye.right -= Ee, ye.width -= Ee, ye.bottom -= Oe, ye.height -= Oe, ye } function l(ue) { var ge = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : 'top', be = 'top' === ge ? 'scrollTop' : 'scrollLeft', ye = ue.nodeName; if ('BODY' === ye || 'HTML' === ye) { var we = window.document.documentElement, xe = window.document.scrollingElement || we; return xe[be] } return ue[be] } function m(ue, ge) { var be = 2 < arguments.length && void 0 !== arguments[2] && arguments[2], ye = l(ge, 'top'), we = l(ge, 'left'), xe = be ? -1 : 1; return ue.top += ye * xe, ue.bottom += ye * xe, ue.left += we * xe, ue.right += we * xe, ue } function h(ue, ge) { var be = 2 < arguments.length && void 0 !== arguments[2] && arguments[2], ye = 3 < arguments.length && void 0 !== arguments[3] && arguments[3], we = r(ge), xe = d(ue), ve = d(ge), Ee = { top: xe.top - ve.top, left: xe.left - ve.left, bottom: xe.top - ve.top + xe.height, right: xe.left - ve.left + xe.width, width: xe.width, height: xe.height }; be && !ye ? Ee = m(Ee, we, !0) : e(ue).contains(we) && 'BODY' !== we.nodeName && (Ee = m(Ee, ge)); var Oe = t(ge), Se = +Oe.borderTopWidth.split('px')[0], Le = +Oe.borderLeftWidth.split('px')[0]; return Ee.top -= Se, Ee.bottom -= Se, Ee.left -= Le, Ee.right -= Le, Ee } function c() { var ue = window.document.body, ge = window.document.documentElement; return { height: Math.max(ue.scrollHeight, ue.offsetHeight, ge.clientHeight, ge.scrollHeight, ge.offsetHeight), width: Math.max(ue.scrollWidth, ue.offsetWidth, ge.clientWidth, ge.scrollWidth, ge.offsetWidth) } } function u(ue) { var ge; if ('HTML' === ue.nodeName) { var be = c(), ye = be.width, we = be.height; ge = { width: ye, height: we, left: 0, top: 0 } } else ge = { width: ue.offsetWidth, height: ue.offsetHeight, left: ue.offsetLeft, top: ue.offsetTop }; return ge.right = ge.left + ge.width, ge.bottom = ge.top + ge.height, ge } function g(ue) { var ge = u(ue); if ('HTML' !== ue.nodeName) { var be = e(ue), ye = g(be), we = { width: ge.offsetWidth, height: ge.offsetHeight, left: ge.left + ye.left, top: ge.top + ye.top, right: ge.right - ye.right, bottom: ge.bottom - ye.bottom }; return we } return ge } function w(ue) { var ge = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : 'top', be = r(ue), ye = l(be, ge); return -1 === ['BODY', 'HTML'].indexOf(be.nodeName) ? ye + w(o(be), ge) : ye } function v(ue, ge, be) { var ye = { top: 0, left: 0 }, we = e(ue); if ('viewport' === be) { var xe = g(we), ve = xe.left, Ee = xe.top, Oe = window.document.documentElement, Se = Oe.clientWidth, Le = Oe.clientHeight; if ('fixed' === p(ue)) ye.right = Se, ye.bottom = Le; else { var Pe = w(ue, 'left'), Ne = w(ue, 'top'); ye = { top: 0 - Ee, right: Se - ve + Pe, bottom: Le - Ee + Ne, left: 0 - ve } } } else { var Te; if (Te = 'scrollParent' === be ? r(o(ue)) : 'window' === be ? window.document.body : be, 'BODY' === Te.nodeName) { var We = c(), Be = We.height, He = We.width; ye.right = He, ye.bottom = Be } else ye = h(Te, we, s(ue)) } return ye.left += ge, ye.top += ge, ye.right -= ge, ye.bottom -= ge, ye } function E(ue, ge, be) { if (-1 === ue.indexOf('auto')) return ue; var ye = v(be, 0, 'scrollParent'), we = { top: ge.top - ye.top, right: ye.right - ge.right, bottom: ye.bottom - ge.bottom, left: ge.left - ye.left }, xe = Object.keys(we).sort(function (Ee, Oe) { return we[Oe] - we[Ee] })[0], ve = ue.split('-')[1]; return xe + (ve ? '-' + ve : '') } function L(ue, ge) { return Array.prototype.find ? ue.find(ge) : ue.filter(ge)[0] } function P(ue, ge, be) { if (Array.prototype.findIndex) return ue.findIndex(function (we) { return we[ge] === be }); var ye = L(ue, function (we) { return we[ge] === be }); return ue.indexOf(ye) } function N(ue) { return le({}, ue, { right: ue.left + ue.width, bottom: ue.top + ue.height }) } function T(ue) { var ge = window.getComputedStyle(ue), be = parseFloat(ge.marginTop) + parseFloat(ge.marginBottom), ye = parseFloat(ge.marginLeft) + parseFloat(ge.marginRight), we = { width: ue.offsetWidth + ye, height: ue.offsetHeight + be }; return we } function W(ue) { var ge = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; return ue.replace(/left|right|bottom|top/g, function (be) { return ge[be] }) } function B(ue, ge, be, ye) { ye = ye.split('-')[0]; var we = T(ge), xe = { position: ue, width: we.width, height: we.height }, ve = -1 !== ['right', 'left'].indexOf(ye), Ee = ve ? 'top' : 'left', Oe = ve ? 'left' : 'top', Se = ve ? 'height' : 'width', Le = ve ? 'width' : 'height'; return xe[Ee] = be[Ee] + be[Se] / 2 - we[Se] / 2, xe[Oe] = ye === Oe ? be[Oe] - we[Le] : be[W(Oe)], xe } function H(ue, ge, be) { var ye = 'fixed' === ue.position, we = ue.isParentTransformed, xe = e(ye && we ? be : ge); return h(be, xe, ye, we) } function k(ue) { for (var ge = [!1, 'ms', 'webkit', 'moz', 'o'], be = ue.charAt(0).toUpperCase() + ue.slice(1), ye = 0; ye < ge.length - 1; ye++) { var we = ge[ye], xe = we ? '' + we + be : ue; if ('undefined' != typeof window.document.body.style[xe]) return xe } return null } function D(ue) { return ue && '[object Function]' === {}.toString.call(ue) } function C(ue, ge) { return ue.some(function (be) { var ye = be.name, we = be.enabled; return we && ye === ge }) } function R(ue, ge, be) { var ye = L(ue, function (we) { var xe = we.name; return xe === ge }); return !!ye && ue.some(function (we) { return we.name === be && we.enabled && we.order < ye.order }) } function M(ue) { return '' !== ue && !isNaN(parseFloat(ue)) && isFinite(ue) } function A(ue) { return 'BODY' !== ue.nodeName && ('none' !== t(ue, 'transform') || (o(ue) ? A(o(ue)) : ue)) } function Y(ue, ge) { return window.removeEventListener('resize', ge.updateBound), ge.scrollParents.forEach(function (be) { be.removeEventListener('scroll', ge.updateBound) }), ge.updateBound = null, ge.scrollParents = [], ge.scrollElement = null, ge.eventsEnabled = !1, ge } function I(ue, ge, be) { var ye = void 0 === be ? ue : ue.slice(0, P(ue, 'name', be)); return ye.forEach(function (we) { we.enabled && D(we.function) && (ge = we.function(ge, we)) }), ge } function U(ue, ge) { Object.keys(ge).forEach(function (be) { var ye = ge[be]; !1 === ye ? ue.removeAttribute(be) : ue.setAttribute(be, ge[be]) }) } function q(ue, ge) { Object.keys(ge).forEach(function (be) { var ye = ''; -1 !== ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(be) && M(ge[be]) && (ye = 'px'), ue.style[be] = ge[be] + ye }) } function z(ue, ge, be, ye) { var we = 'BODY' === ue.nodeName, xe = we ? window : ue; xe.addEventListener(ge, be, { passive: !0 }), we || z(r(xe.parentNode), ge, be, ye), ye.push(xe) } function F(ue, ge, be, ye) { be.updateBound = ye, window.addEventListener('resize', be.updateBound, { passive: !0 }); var we = r(ue); return z(we, 'scroll', be.updateBound, be.scrollParents), be.scrollElement = we, be.eventsEnabled = !0, be } function X(ue) { return 'end' === ue ? 'start' : 'start' === ue ? 'end' : ue } for (var te = 'undefined' != typeof window && 'undefined' != typeof window.document, oe = ['Edge', 'Trident', 'Firefox'], ie = 0, re = 0; re < oe.length; re += 1)if (te && 0 <= navigator.userAgent.indexOf(oe[re])) { ie = 1; break } var ne = te && window.Promise, se = ne ? function (ue) { var ge = !1; return function () { ge || (ge = !0, Promise.resolve().then(function () { ge = !1, ue() })) } } : function (ue) { var ge = !1; return function () { ge || (ge = !0, setTimeout(function () { ge = !1, ue() }, ie)) } }, pe = function classCallCheck(ue, ge) { if (!(ue instanceof ge)) throw new TypeError('Cannot call a class as a function') }, fe = function () { function ue(ge, be) { for (var we, ye = 0; ye < be.length; ye++)we = be[ye], we.enumerable = we.enumerable || !1, we.configurable = !0, 'value' in we && (we.writable = !0), Object.defineProperty(ge, we.key, we) } return function (ge, be, ye) { return be && ue(ge.prototype, be), ye && ue(ge, ye), ge } }(), de = function defineProperty(ue, ge, be) { return ge in ue ? Object.defineProperty(ue, ge, { value: be, enumerable: !0, configurable: !0, writable: !0 }) : ue[ge] = be, ue }, le = Object.assign || function (ue) { for (var be, ge = 1; ge < arguments.length; ge++)for (var ye in be = arguments[ge], be) Object.prototype.hasOwnProperty.call(be, ye) && (ue[ye] = be[ye]); return ue }, ce = function () { function ue(ge, be) { var ye = this, we = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : {}; pe(this, ue), this.scheduleUpdate = function () { return requestAnimationFrame(ye.update) }, this.update = se(this.update.bind(this)), this.options = le({}, ue.Defaults, we), this.state = { isDestroyed: !1, isCreated: !1, scrollParents: [] }, this.reference = ge.jquery ? ge[0] : ge, this.popper = be.jquery ? be[0] : be, this.modifiers = Object.keys(ue.Defaults.modifiers).map(function (ve) { return le({ name: ve }, ue.Defaults.modifiers[ve]) }), this.modifiers = this.modifiers.map(function (ve) { var Ee = we.modifiers && we.modifiers[ve.name] || {}; return le({}, ve, Ee) }), we.modifiers && (this.options.modifiers = le({}, ue.Defaults.modifiers, we.modifiers), Object.keys(we.modifiers).forEach(function (ve) { if (void 0 === ue.Defaults.modifiers[ve]) { var Ee = we.modifiers[ve]; Ee.name = ve, ye.modifiers.push(Ee) } })), this.state.position = p(this.reference), this.modifiers = this.modifiers.sort(function (ve, Ee) { return ve.order - Ee.order }), this.modifiers.forEach(function (ve) { ve.enabled && D(ve.onLoad) && ve.onLoad(ye.reference, ye.popper, ye.options, ve, ye.state) }), this.state.isParentTransformed = A(this.popper.parentNode), this.update(); var xe = this.options.eventsEnabled; xe && this.enableEventListeners(), this.state.eventsEnabled = xe } return fe(ue, [{ key: 'update', value: function () { if (!this.state.isDestroyed) { var be = { instance: this, styles: {}, attributes: {}, flipped: !1, offsets: {} }; this.state.position = p(this.reference), q(this.popper, { position: this.state.position }), be.offsets.reference = H(this.state, this.popper, this.reference), be.placement = E(this.options.placement, be.offsets.reference, this.popper), be.originalPlacement = this.options.placement, be.offsets.popper = B(this.state, this.popper, be.offsets.reference, be.placement), be = I(this.modifiers, be), this.state.isCreated ? this.options.onUpdate(be) : (this.state.isCreated = !0, this.options.onCreate(be)) } } }, { key: 'destroy', value: function () { return this.state.isDestroyed = !0, C(this.modifiers, 'applyStyle') && (this.popper.removeAttribute('x-placement'), this.popper.style.left = '', this.popper.style.position = '', this.popper.style.top = '', this.popper.style[k('transform')] = ''), this.disableEventListeners(), this.options.removeOnDestroy && this.popper.parentNode.removeChild(this.popper), this } }, { key: 'enableEventListeners', value: function () { this.state.eventsEnabled || (this.state = F(this.reference, this.options, this.state, this.scheduleUpdate)) } }, { key: 'disableEventListeners', value: function () { this.state.eventsEnabled && (window.cancelAnimationFrame(this.scheduleUpdate), this.state = Y(this.reference, this.state)) } }]), ue }(); return ce.Utils = { computeAutoPlacement: E, debounce: se, findIndex: P, getBordersSize: f, getBoundaries: v, getBoundingClientRect: d, getClientRect: N, getOffsetParent: e, getOffsetRect: u, getOffsetRectRelativeToCustomParent: h, getOuterSizes: T, getParentNode: o, getPopperOffsets: B, getPosition: p, getReferenceOffsets: H, getScroll: l, getScrollParent: r, getStyleComputedProperty: t, getSupportedPropertyName: k, getTotalScroll: w, getWindowSizes: c, includeScroll: m, isFixed: s, isFunction: D, isModifierEnabled: C, isModifierRequired: R, isNumeric: M, isTransformed: A, removeEventListeners: Y, runModifiers: I, setAttributes: U, setStyles: q, setupEventListeners: F }, ce.placements = ['auto', 'auto-start', 'auto-end', 'top', 'top-start', 'top-end', 'right', 'right-start', 'right-end', 'bottom', 'bottom-start', 'bottom-end', 'left', 'left-start', 'left-end'], ce.Defaults = { placement: 'bottom', eventsEnabled: !0, onCreate: function () { }, onUpdate: function () { }, modifiers: { shift: { order: 100, enabled: !0, function: function (ue) { var ge = ue.placement, be = ge.split('-')[0], ye = ge.split('-')[1]; if (ye) { var we = ue.offsets.reference, xe = N(ue.offsets.popper), ve = -1 !== ['bottom', 'top'].indexOf(be), Ee = ve ? 'left' : 'top', Oe = ve ? 'width' : 'height', Se = { start: de({}, Ee, we[Ee]), end: de({}, Ee, we[Ee] + we[Oe] - xe[Oe]) }; ue.offsets.popper = le({}, xe, Se[ye]) } return ue } }, offset: { order: 200, enabled: !0, function: function (ue, ge) { var we, be = ue.placement, ye = ue.offsets.popper; return M(ge.offset) ? we = [ge.offset, 0] : (we = ge.offset.split(' '), we = we.map(function (xe, ve) { var Ee = xe.match(/(\\d*\\.?\\d*)(.*)/), Oe = +Ee[1], Se = Ee[2], Le = -1 !== be.indexOf('right') || -1 !== be.indexOf('left'); 1 === ve && (Le = !Le); var Pe = Le ? 'height' : 'width'; if (0 === Se.indexOf('%')) { var Ne; switch (Se) { case '%p': Ne = ue.offsets.popper; break; case '%': case '$r': default: Ne = ue.offsets.reference; }var Te = N(Ne), We = Te[Pe]; return We / 100 * Oe } if ('vh' === Se || 'vw' === Se) { var Be; return Be = 'vh' === Se ? Math.max(document.documentElement.clientHeight, window.innerHeight || 0) : Math.max(document.documentElement.clientWidth, window.innerWidth || 0), Be / 100 * Oe } return 'px' === Se ? +Oe : +xe })), -1 === ue.placement.indexOf('left') ? -1 === ue.placement.indexOf('right') ? -1 === ue.placement.indexOf('top') ? -1 !== ue.placement.indexOf('bottom') && (ye.left += we[0], ye.top += we[1] || 0) : (ye.left += we[0], ye.top -= we[1] || 0) : (ye.top += we[0], ye.left += we[1] || 0) : (ye.top += we[0], ye.left -= we[1] || 0), ue }, offset: 0 }, preventOverflow: { order: 300, enabled: !0, function: function (ue, ge) { var be = ge.boundariesElement || e(ue.instance.popper), ye = v(ue.instance.popper, ge.padding, be); ge.boundaries = ye; var we = ge.priority, xe = N(ue.offsets.popper), ve = { primary: function (Oe) { var Se = xe[Oe]; return xe[Oe] < ye[Oe] && !ge.escapeWithReference && (Se = Math.max(xe[Oe], ye[Oe])), de({}, Oe, Se) }, secondary: function (Oe) { var Se = 'right' === Oe ? 'left' : 'top', Le = xe[Se]; return xe[Oe] > ye[Oe] && !ge.escapeWithReference && (Le = Math.min(xe[Se], ye[Oe] - ('right' === Oe ? xe.width : xe.height))), de({}, Se, Le) } }; return we.forEach(function (Ee) { var Oe = -1 === ['left', 'top'].indexOf(Ee) ? 'secondary' : 'primary'; xe = le({}, xe, ve[Oe](Ee)) }), ue.offsets.popper = xe, ue }, priority: ['left', 'right', 'top', 'bottom'], padding: 5, boundariesElement: 'scrollParent' }, keepTogether: { order: 400, enabled: !0, function: function (ue) { var ge = N(ue.offsets.popper), be = ue.offsets.reference, ye = ue.placement.split('-')[0], we = Math.floor, xe = -1 !== ['top', 'bottom'].indexOf(ye), ve = xe ? 'right' : 'bottom', Ee = xe ? 'left' : 'top', Oe = xe ? 'width' : 'height'; return ge[ve] < we(be[Ee]) && (ue.offsets.popper[Ee] = we(be[Ee]) - ge[Oe]), ge[Ee] > we(be[ve]) && (ue.offsets.popper[Ee] = we(be[ve])), ue } }, arrow: { order: 500, enabled: !0, function: function (ue, ge) { if (!R(ue.instance.modifiers, 'arrow', 'keepTogether')) return console.warn('WARNING: `keepTogether` modifier is required by arrow modifier in order to work, be sure to include it before `arrow`!'), ue; var be = ge.element; if ('string' == typeof be) { if (be = ue.instance.popper.querySelector(be), !be) return ue; } else if (!ue.instance.popper.contains(be)) return console.warn('WARNING: `arrow.element` must be child of its popper element!'), ue; var ye = ue.placement.split('-')[0], we = N(ue.offsets.popper), xe = ue.offsets.reference, ve = -1 !== ['left', 'right'].indexOf(ye), Ee = ve ? 'height' : 'width', Oe = ve ? 'top' : 'left', Se = ve ? 'left' : 'top', Le = ve ? 'bottom' : 'right', Pe = T(be)[Ee]; xe[Le] - Pe < we[Oe] && (ue.offsets.popper[Oe] -= we[Oe] - (xe[Le] - Pe)), xe[Oe] + Pe > we[Le] && (ue.offsets.popper[Oe] += xe[Oe] + Pe - we[Le]); var Ne = xe[Oe] + xe[Ee] / 2 - Pe / 2, Te = Ne - N(ue.offsets.popper)[Oe]; return Te = Math.max(Math.min(we[Ee] - Pe, Te), 0), ue.arrowElement = be, ue.offsets.arrow = {}, ue.offsets.arrow[Oe] = Te, ue.offsets.arrow[Se] = '', ue }, element: '[x-arrow]' }, flip: { order: 600, enabled: !0, function: function (ue, ge) { if (C(ue.instance.modifiers, 'inner')) return ue; if (ue.flipped && ue.placement === ue.originalPlacement) return ue; var be = v(ue.instance.popper, ge.padding, ge.boundariesElement), ye = ue.placement.split('-')[0], we = W(ye), xe = ue.placement.split('-')[1] || '', ve = []; return ve = 'flip' === ge.behavior ? [ye, we] : ge.behavior, ve.forEach(function (Ee, Oe) { if (ye !== Ee || ve.length === Oe + 1) return ue; ye = ue.placement.split('-')[0], we = W(ye); var Se = N(ue.offsets.popper), Le = ue.offsets.reference, Pe = Math.floor, Ne = 'left' === ye && Pe(Se.right) > Pe(Le.left) || 'right' === ye && Pe(Se.left) < Pe(Le.right) || 'top' === ye && Pe(Se.bottom) > Pe(Le.top) || 'bottom' === ye && Pe(Se.top) < Pe(Le.bottom), Te = Pe(Se.left) < Pe(be.left), We = Pe(Se.right) > Pe(be.right), Be = Pe(Se.top) < Pe(be.top), He = Pe(Se.bottom) > Pe(be.bottom), ke = 'left' === ye && Te || 'right' === ye && We || 'top' === ye && Be || 'bottom' === ye && He, De = -1 !== ['top', 'bottom'].indexOf(ye), Ce = !!ge.flipVariations && (De && 'start' === xe && Te || De && 'end' === xe && We || !De && 'start' === xe && Be || !De && 'end' === xe && He); (Ne || ke || Ce) && (ue.flipped = !0, (Ne || ke) && (ye = ve[Oe + 1]), Ce && (xe = X(xe)), ue.placement = ye + (xe ? '-' + xe : ''), ue.offsets.popper = B(ue.instance.state.position, ue.instance.popper, ue.offsets.reference, ue.placement), ue = I(ue.instance.modifiers, ue, 'flip')) }), ue }, behavior: 'flip', padding: 5, boundariesElement: 'viewport' }, inner: { order: 700, enabled: !1, function: function (ue) { var ge = ue.placement, be = ge.split('-')[0], ye = N(ue.offsets.popper), we = N(ue.offsets.reference), xe = -1 !== ['left', 'right'].indexOf(be), ve = -1 === ['top', 'left'].indexOf(be); return ye[xe ? 'left' : 'top'] = we[ge] - (ve ? ye[xe ? 'width' : 'height'] : 0), ue.placement = W(ge), ue.offsets.popper = N(ye), ue } }, hide: { order: 800, enabled: !0, function: function (ue) { if (!R(ue.instance.modifiers, 'hide', 'preventOverflow')) return console.warn('WARNING: preventOverflow modifier is required by hide modifier in order to work, be sure to include it before hide!'), ue; var ge = ue.offsets.reference, be = L(ue.instance.modifiers, function (ye) { return 'preventOverflow' === ye.name }).boundaries; if (ge.bottom < be.top || ge.left > be.right || ge.top > be.bottom || ge.right < be.left) { if (!0 === ue.hide) return ue; ue.hide = !0, ue.attributes['x-out-of-boundaries'] = '' } else { if (!1 === ue.hide) return ue; ue.hide = !1, ue.attributes['x-out-of-boundaries'] = !1 } return ue } }, applyStyle: { order: 900, enabled: !0, gpuAcceleration: !0, function: function (ue, ge) { var be = { position: ue.offsets.popper.position }, ye = { 'x-placement': ue.placement }, we = Math.round(ue.offsets.popper.left), xe = Math.round(ue.offsets.popper.top), ve = k('transform'); return ge.gpuAcceleration && ve ? (be[ve] = 'translate3d(' + we + 'px, ' + xe + 'px, 0)', be.top = 0, be.left = 0, be.willChange = 'transform') : (be.left = we, be.top = xe, be.willChange = 'top, left'), q(ue.instance.popper, le({}, be, ue.styles)), U(ue.instance.popper, le({}, ye, ue.attributes)), ue.offsets.arrow && q(ue.arrowElement, ue.offsets.arrow), ue }, onLoad: function (ue, ge, be, ye, we) { var xe = H(we, ge, ue); return be.placement = E(be.placement, xe, ge), ge.setAttribute('x-placement', be.placement), be } } } }, ce });\n\n//# sourceMappingURL=popper.es5.min.js.map\n","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (obj, key, value) {\n  if (key in obj) {\n    (0, _defineProperty2.default)(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar CheckboxIcon = function CheckboxIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><rect fill=\\\"currentColor\\\" x=\\\"6\\\" y=\\\"6\\\" width=\\\"12\\\" height=\\\"12\\\" rx=\\\"2\\\"/><path d=\\\"M9.707 11.293a1 1 0 1 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4a1 1 0 1 0-1.414-1.414L11 12.586l-1.293-1.293z\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nCheckboxIcon.displayName = 'CheckboxIcon';\nvar _default = CheckboxIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar RadioIcon = function RadioIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><circle fill=\\\"currentColor\\\" cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"6\\\"/><circle fill=\\\"inherit\\\" cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"2\\\"/></g></svg>\"\n  }, props));\n};\n\nRadioIcon.displayName = 'RadioIcon';\nvar _default = RadioIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar WarningIcon = function WarningIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><path d=\\\"M12.938 4.967c-.518-.978-1.36-.974-1.876 0L3.938 18.425c-.518.978-.045 1.771 1.057 1.771h14.01c1.102 0 1.573-.797 1.057-1.771L12.938 4.967z\\\" fill=\\\"currentColor\\\"/><path d=\\\"M12 15a1 1 0 0 1-1-1V9a1 1 0 0 1 2 0v5a1 1 0 0 1-1 1m0 3a1 1 0 0 1 0-2 1 1 0 0 1 0 2\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nWarningIcon.displayName = 'WarningIcon';\nvar _default = WarningIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar CrossIcon = function CrossIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M12 10.586L6.707 5.293a1 1 0 0 0-1.414 1.414L10.586 12l-5.293 5.293a1 1 0 0 0 1.414 1.414L12 13.414l5.293 5.293a1 1 0 0 0 1.414-1.414L13.414 12l5.293-5.293a1 1 0 1 0-1.414-1.414L12 10.586z\\\" fill=\\\"currentColor\\\"/></svg>\"\n  }, props));\n};\n\nCrossIcon.displayName = 'CrossIcon';\nvar _default = CrossIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar CheckIcon = function CheckIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M6.735 12.322a1 1 0 0 0-1.47 1.356l3.612 3.919c.537.526 1.337.526 1.834.03l.364-.359a2335.638 2335.638 0 0 0 3.939-3.883l.04-.04a492.598 492.598 0 0 0 3.658-3.643 1 1 0 0 0-1.424-1.404 518.42 518.42 0 0 1-3.64 3.625l-.04.04a2049.114 2049.114 0 0 1-3.775 3.722l-3.098-3.363z\\\" fill=\\\"currentColor\\\"/></svg>\"\n  }, props));\n};\n\nCheckIcon.displayName = 'CheckIcon';\nvar _default = CheckIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar CrossIcon = function CrossIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M12 10.586L6.707 5.293a1 1 0 0 0-1.414 1.414L10.586 12l-5.293 5.293a1 1 0 0 0 1.414 1.414L12 13.414l5.293 5.293a1 1 0 0 0 1.414-1.414L13.414 12l5.293-5.293a1 1 0 1 0-1.414-1.414L12 10.586z\\\" fill=\\\"currentColor\\\"/></svg>\"\n  }, props));\n};\n\nCrossIcon.displayName = 'CrossIcon';\nvar _default = CrossIcon;\nexports.default = _default;","'use strict';\n\nmodule.exports = pixelmatch;\n\nconst defaultOptions = {\n    threshold: 0.1,         // matching threshold (0 to 1); smaller is more sensitive\n    includeAA: false,       // whether to skip anti-aliasing detection\n    alpha: 0.1,             // opacity of original image in diff ouput\n    aaColor: [255, 255, 0], // color of anti-aliased pixels in diff output\n    diffColor: [255, 0, 0],  // color of different pixels in diff output\n    diffMask: false         // draw the diff over a transparent background (a mask)\n};\n\nfunction pixelmatch(img1, img2, output, width, height, options) {\n\n    if (!isPixelData(img1) || !isPixelData(img2) || (output && !isPixelData(output)))\n        throw new Error('Image data: Uint8Array, Uint8ClampedArray or Buffer expected.');\n\n    if (img1.length !== img2.length || (output && output.length !== img1.length))\n        throw new Error('Image sizes do not match.');\n\n    if (img1.length !== width * height * 4) throw new Error('Image data size does not match width/height.');\n\n    options = Object.assign({}, defaultOptions, options);\n\n    // check if images are identical\n    const len = width * height;\n    const a32 = new Uint32Array(img1.buffer, img1.byteOffset, len);\n    const b32 = new Uint32Array(img2.buffer, img2.byteOffset, len);\n    let identical = true;\n\n    for (let i = 0; i < len; i++) {\n        if (a32[i] !== b32[i]) { identical = false; break; }\n    }\n    if (identical) { // fast path if identical\n        if (output && !options.diffMask) {\n            for (let i = 0; i < len; i++) drawGrayPixel(img1, 4 * i, options.alpha, output);\n        }\n        return 0;\n    }\n\n    // maximum acceptable square distance between two colors;\n    // 35215 is the maximum possible value for the YIQ difference metric\n    const maxDelta = 35215 * options.threshold * options.threshold;\n\n    let diff = 0;\n    const [aaR, aaG, aaB] = options.aaColor;\n    const [diffR, diffG, diffB] = options.diffColor;\n\n    // compare each pixel of one image against the other one\n    for (let y = 0; y < height; y++) {\n        for (let x = 0; x < width; x++) {\n\n            const pos = (y * width + x) * 4;\n\n            // squared YUV distance between colors at this pixel position\n            const delta = colorDelta(img1, img2, pos, pos);\n\n            // the color difference is above the threshold\n            if (delta > maxDelta) {\n                // check it's a real rendering difference or just anti-aliasing\n                if (!options.includeAA && (antialiased(img1, x, y, width, height, img2) ||\n                                           antialiased(img2, x, y, width, height, img1))) {\n                    // one of the pixels is anti-aliasing; draw as yellow and do not count as difference\n                    // note that we do not include such pixels in a mask\n                    if (output && !options.diffMask) drawPixel(output, pos, aaR, aaG, aaB);\n\n                } else {\n                    // found substantial difference not caused by anti-aliasing; draw it as red\n                    if (output) drawPixel(output, pos, diffR, diffG, diffB);\n                    diff++;\n                }\n\n            } else if (output) {\n                // pixels are similar; draw background as grayscale image blended with white\n                if (!options.diffMask) drawGrayPixel(img1, pos, options.alpha, output);\n            }\n        }\n    }\n\n    // return the number of different pixels\n    return diff;\n}\n\nfunction isPixelData(arr) {\n    // work around instanceof Uint8Array not working properly in some Jest environments\n    return ArrayBuffer.isView(arr) && arr.constructor.BYTES_PER_ELEMENT === 1;\n}\n\n// check if a pixel is likely a part of anti-aliasing;\n// based on \"Anti-aliased Pixel and Intensity Slope Detector\" paper by V. Vysniauskas, 2009\n\nfunction antialiased(img, x1, y1, width, height, img2) {\n    const x0 = Math.max(x1 - 1, 0);\n    const y0 = Math.max(y1 - 1, 0);\n    const x2 = Math.min(x1 + 1, width - 1);\n    const y2 = Math.min(y1 + 1, height - 1);\n    const pos = (y1 * width + x1) * 4;\n    let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;\n    let min = 0;\n    let max = 0;\n    let minX, minY, maxX, maxY;\n\n    // go through 8 adjacent pixels\n    for (let x = x0; x <= x2; x++) {\n        for (let y = y0; y <= y2; y++) {\n            if (x === x1 && y === y1) continue;\n\n            // brightness delta between the center pixel and adjacent one\n            const delta = colorDelta(img, img, pos, (y * width + x) * 4, true);\n\n            // count the number of equal, darker and brighter adjacent pixels\n            if (delta === 0) {\n                zeroes++;\n                // if found more than 2 equal siblings, it's definitely not anti-aliasing\n                if (zeroes > 2) return false;\n\n            // remember the darkest pixel\n            } else if (delta < min) {\n                min = delta;\n                minX = x;\n                minY = y;\n\n            // remember the brightest pixel\n            } else if (delta > max) {\n                max = delta;\n                maxX = x;\n                maxY = y;\n            }\n        }\n    }\n\n    // if there are no both darker and brighter pixels among siblings, it's not anti-aliasing\n    if (min === 0 || max === 0) return false;\n\n    // if either the darkest or the brightest pixel has 3+ equal siblings in both images\n    // (definitely not anti-aliased), this pixel is anti-aliased\n    return (hasManySiblings(img, minX, minY, width, height) && hasManySiblings(img2, minX, minY, width, height)) ||\n           (hasManySiblings(img, maxX, maxY, width, height) && hasManySiblings(img2, maxX, maxY, width, height));\n}\n\n// check if a pixel has 3+ adjacent pixels of the same color.\nfunction hasManySiblings(img, x1, y1, width, height) {\n    const x0 = Math.max(x1 - 1, 0);\n    const y0 = Math.max(y1 - 1, 0);\n    const x2 = Math.min(x1 + 1, width - 1);\n    const y2 = Math.min(y1 + 1, height - 1);\n    const pos = (y1 * width + x1) * 4;\n    let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;\n\n    // go through 8 adjacent pixels\n    for (let x = x0; x <= x2; x++) {\n        for (let y = y0; y <= y2; y++) {\n            if (x === x1 && y === y1) continue;\n\n            const pos2 = (y * width + x) * 4;\n            if (img[pos] === img[pos2] &&\n                img[pos + 1] === img[pos2 + 1] &&\n                img[pos + 2] === img[pos2 + 2] &&\n                img[pos + 3] === img[pos2 + 3]) zeroes++;\n\n            if (zeroes > 2) return true;\n        }\n    }\n\n    return false;\n}\n\n// calculate color difference according to the paper \"Measuring perceived color difference\n// using YIQ NTSC transmission color space in mobile applications\" by Y. Kotsarenko and F. Ramos\n\nfunction colorDelta(img1, img2, k, m, yOnly) {\n    let r1 = img1[k + 0];\n    let g1 = img1[k + 1];\n    let b1 = img1[k + 2];\n    let a1 = img1[k + 3];\n\n    let r2 = img2[m + 0];\n    let g2 = img2[m + 1];\n    let b2 = img2[m + 2];\n    let a2 = img2[m + 3];\n\n    if (a1 === a2 && r1 === r2 && g1 === g2 && b1 === b2) return 0;\n\n    if (a1 < 255) {\n        a1 /= 255;\n        r1 = blend(r1, a1);\n        g1 = blend(g1, a1);\n        b1 = blend(b1, a1);\n    }\n\n    if (a2 < 255) {\n        a2 /= 255;\n        r2 = blend(r2, a2);\n        g2 = blend(g2, a2);\n        b2 = blend(b2, a2);\n    }\n\n    const y = rgb2y(r1, g1, b1) - rgb2y(r2, g2, b2);\n\n    if (yOnly) return y; // brightness difference only\n\n    const i = rgb2i(r1, g1, b1) - rgb2i(r2, g2, b2);\n    const q = rgb2q(r1, g1, b1) - rgb2q(r2, g2, b2);\n\n    return 0.5053 * y * y + 0.299 * i * i + 0.1957 * q * q;\n}\n\nfunction rgb2y(r, g, b) { return r * 0.29889531 + g * 0.58662247 + b * 0.11448223; }\nfunction rgb2i(r, g, b) { return r * 0.59597799 - g * 0.27417610 - b * 0.32180189; }\nfunction rgb2q(r, g, b) { return r * 0.21147017 - g * 0.52261711 + b * 0.31114694; }\n\n// blend semi-transparent color with white\nfunction blend(c, a) {\n    return 255 + (c - 255) * a;\n}\n\nfunction drawPixel(output, pos, r, g, b) {\n    output[pos + 0] = r;\n    output[pos + 1] = g;\n    output[pos + 2] = b;\n    output[pos + 3] = 255;\n}\n\nfunction drawGrayPixel(img, i, alpha, output) {\n    const r = img[i + 0];\n    const g = img[i + 1];\n    const b = img[i + 2];\n    const val = blend(rgb2y(r, g, b), alpha * img[i + 3] / 255);\n    drawPixel(output, i, val, val, val);\n}\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.amplitude = factory());\n}(this, (function () { 'use strict';\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\n\n\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar json3 = createCommonjsModule(function (module, exports) {\n/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n(function () {\n  // Detect the `define` function exposed by asynchronous module loaders. The\n  // strict `define` check is necessary for compatibility with `r.js`.\n  var isLoader = typeof undefined === \"function\" && undefined.amd;\n\n  // A set of types used to distinguish objects from primitives.\n  var objectTypes = {\n    \"function\": true,\n    \"object\": true\n  };\n\n  // Detect the `exports` object exposed by CommonJS implementations.\n  var freeExports = objectTypes['object'] && exports && !exports.nodeType && exports;\n\n  // Use the `global` object exposed by Node (including Browserify via\n  // `insert-module-globals`), Narwhal, and Ringo as the default context,\n  // and the `window` object in browsers. Rhino exports a `global` function\n  // instead.\n  var root = objectTypes[typeof window] && window || this,\n      freeGlobal = freeExports && objectTypes['object'] && module && !module.nodeType && typeof commonjsGlobal == \"object\" && commonjsGlobal;\n\n  if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n    root = freeGlobal;\n  }\n\n  // Public: Initializes JSON 3 using the given `context` object, attaching the\n  // `stringify` and `parse` functions to the specified `exports` object.\n  function runInContext(context, exports) {\n    context || (context = root[\"Object\"]());\n    exports || (exports = root[\"Object\"]());\n\n    // Native constructor aliases.\n    var Number = context[\"Number\"] || root[\"Number\"],\n        String = context[\"String\"] || root[\"String\"],\n        Object = context[\"Object\"] || root[\"Object\"],\n        Date = context[\"Date\"] || root[\"Date\"],\n        SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n        TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n        Math = context[\"Math\"] || root[\"Math\"],\n        nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n    // Delegate to the native `stringify` and `parse` implementations.\n    if (typeof nativeJSON == \"object\" && nativeJSON) {\n      exports.stringify = nativeJSON.stringify;\n      exports.parse = nativeJSON.parse;\n    }\n\n    // Convenience aliases.\n    var objectProto = Object.prototype,\n        getClass = objectProto.toString,\n        isProperty, forEach, undef;\n\n    // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n    var isExtended = new Date(-3509827334573292);\n    try {\n      // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n      // results for certain dates in Opera >= 10.53.\n      isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n        // Safari < 2.0.2 stores the internal millisecond time value correctly,\n        // but clips the values returned by the date methods to the range of\n        // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n        isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n    } catch (exception) {}\n\n    // Internal: Determines whether the native `JSON.stringify` and `parse`\n    // implementations are spec-compliant. Based on work by Ken Snyder.\n    function has(name) {\n      if (has[name] !== undef) {\n        // Return cached feature test result.\n        return has[name];\n      }\n      var isSupported;\n      if (name == \"bug-string-char-index\") {\n        // IE <= 7 doesn't support accessing string characters using square\n        // bracket notation. IE 8 only supports this for primitives.\n        isSupported = \"a\"[0] != \"a\";\n      } else if (name == \"json\") {\n        // Indicates whether both `JSON.stringify` and `JSON.parse` are\n        // supported.\n        isSupported = has(\"json-stringify\") && has(\"json-parse\");\n      } else {\n        var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n        // Test `JSON.stringify`.\n        if (name == \"json-stringify\") {\n          var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n          if (stringifySupported) {\n            // A test function object with a custom `toJSON` method.\n            (value = function () {\n              return 1;\n            }).toJSON = value;\n            try {\n              stringifySupported =\n                // Firefox 3.1b1 and b2 serialize string, number, and boolean\n                // primitives as object literals.\n                stringify(0) === \"0\" &&\n                // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n                // literals.\n                stringify(new Number()) === \"0\" &&\n                stringify(new String()) == '\"\"' &&\n                // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n                // does not define a canonical JSON representation (this applies to\n                // objects with `toJSON` properties as well, *unless* they are nested\n                // within an object or array).\n                stringify(getClass) === undef &&\n                // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n                // FF 3.1b3 pass this test.\n                stringify(undef) === undef &&\n                // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n                // respectively, if the value is omitted entirely.\n                stringify() === undef &&\n                // FF 3.1b1, 2 throw an error if the given value is not a number,\n                // string, array, object, Boolean, or `null` literal. This applies to\n                // objects with custom `toJSON` methods as well, unless they are nested\n                // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n                // methods entirely.\n                stringify(value) === \"1\" &&\n                stringify([value]) == \"[1]\" &&\n                // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n                // `\"[null]\"`.\n                stringify([undef]) == \"[null]\" &&\n                // YUI 3.0.0b1 fails to serialize `null` literals.\n                stringify(null) == \"null\" &&\n                // FF 3.1b1, 2 halts serialization if an array contains a function:\n                // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n                // elides non-JSON values from objects and arrays, unless they\n                // define custom `toJSON` methods.\n                stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n                // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n                // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n                stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n                // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n                stringify(null, value) === \"1\" &&\n                stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n                // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n                // serialize extended years.\n                stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n                // The milliseconds are optional in ES 5, but required in 5.1.\n                stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n                // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n                // four-digit years instead of six-digit years. Credits: @Yaffle.\n                stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n                // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n                // values less than 1000. Credits: @Yaffle.\n                stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n            } catch (exception) {\n              stringifySupported = false;\n            }\n          }\n          isSupported = stringifySupported;\n        }\n        // Test `JSON.parse`.\n        if (name == \"json-parse\") {\n          var parse = exports.parse;\n          if (typeof parse == \"function\") {\n            try {\n              // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n              // Conforming implementations should also coerce the initial argument to\n              // a string prior to parsing.\n              if (parse(\"0\") === 0 && !parse(false)) {\n                // Simple parsing test.\n                value = parse(serialized);\n                var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n                if (parseSupported) {\n                  try {\n                    // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n                    parseSupported = !parse('\"\\t\"');\n                  } catch (exception) {}\n                  if (parseSupported) {\n                    try {\n                      // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n                      // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n                      // certain octal literals.\n                      parseSupported = parse(\"01\") !== 1;\n                    } catch (exception) {}\n                  }\n                  if (parseSupported) {\n                    try {\n                      // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n                      // points. These environments, along with FF 3.1b1 and 2,\n                      // also allow trailing commas in JSON objects and arrays.\n                      parseSupported = parse(\"1.\") !== 1;\n                    } catch (exception) {}\n                  }\n                }\n              }\n            } catch (exception) {\n              parseSupported = false;\n            }\n          }\n          isSupported = parseSupported;\n        }\n      }\n      return has[name] = !!isSupported;\n    }\n\n    if (!has(\"json\")) {\n      // Common `[[Class]]` name aliases.\n      var functionClass = \"[object Function]\",\n          dateClass = \"[object Date]\",\n          numberClass = \"[object Number]\",\n          stringClass = \"[object String]\",\n          arrayClass = \"[object Array]\",\n          booleanClass = \"[object Boolean]\";\n\n      // Detect incomplete support for accessing string characters by index.\n      var charIndexBuggy = has(\"bug-string-char-index\");\n\n      // Define additional utility methods if the `Date` methods are buggy.\n      if (!isExtended) {\n        var floor = Math.floor;\n        // A mapping between the months of the year and the number of days between\n        // January 1st and the first of the respective month.\n        var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n        // Internal: Calculates the number of days between the Unix epoch and the\n        // first day of the given month.\n        var getDay = function (year, month) {\n          return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n        };\n      }\n\n      // Internal: Determines if a property is a direct property of the given\n      // object. Delegates to the native `Object#hasOwnProperty` method.\n      if (!(isProperty = objectProto.hasOwnProperty)) {\n        isProperty = function (property) {\n          var members = {}, constructor;\n          if ((members.__proto__ = null, members.__proto__ = {\n            // The *proto* property cannot be set multiple times in recent\n            // versions of Firefox and SeaMonkey.\n            \"toString\": 1\n          }, members).toString != getClass) {\n            // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n            // supports the mutable *proto* property.\n            isProperty = function (property) {\n              // Capture and break the object's prototype chain (see section 8.6.2\n              // of the ES 5.1 spec). The parenthesized expression prevents an\n              // unsafe transformation by the Closure Compiler.\n              var original = this.__proto__, result = property in (this.__proto__ = null, this);\n              // Restore the original prototype chain.\n              this.__proto__ = original;\n              return result;\n            };\n          } else {\n            // Capture a reference to the top-level `Object` constructor.\n            constructor = members.constructor;\n            // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n            // other environments.\n            isProperty = function (property) {\n              var parent = (this.constructor || constructor).prototype;\n              return property in this && !(property in parent && this[property] === parent[property]);\n            };\n          }\n          members = null;\n          return isProperty.call(this, property);\n        };\n      }\n\n      // Internal: Normalizes the `for...in` iteration algorithm across\n      // environments. Each enumerated key is yielded to a `callback` function.\n      forEach = function (object, callback) {\n        var size = 0, Properties, members, property;\n\n        // Tests for bugs in the current environment's `for...in` algorithm. The\n        // `valueOf` property inherits the non-enumerable flag from\n        // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n        (Properties = function () {\n          this.valueOf = 0;\n        }).prototype.valueOf = 0;\n\n        // Iterate over a new instance of the `Properties` class.\n        members = new Properties();\n        for (property in members) {\n          // Ignore all properties inherited from `Object.prototype`.\n          if (isProperty.call(members, property)) {\n            size++;\n          }\n        }\n        Properties = members = null;\n\n        // Normalize the iteration algorithm.\n        if (!size) {\n          // A list of non-enumerable properties inherited from `Object.prototype`.\n          members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n          // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n          // properties.\n          forEach = function (object, callback) {\n            var isFunction = getClass.call(object) == functionClass, property, length;\n            var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n            for (property in object) {\n              // Gecko <= 1.0 enumerates the `prototype` property of functions under\n              // certain conditions; IE does not.\n              if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n                callback(property);\n              }\n            }\n            // Manually invoke the callback for each non-enumerable property.\n            for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n          };\n        } else if (size == 2) {\n          // Safari <= 2.0.4 enumerates shadowed properties twice.\n          forEach = function (object, callback) {\n            // Create a set of iterated properties.\n            var members = {}, isFunction = getClass.call(object) == functionClass, property;\n            for (property in object) {\n              // Store each property name to prevent double enumeration. The\n              // `prototype` property of functions is not enumerated due to cross-\n              // environment inconsistencies.\n              if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n                callback(property);\n              }\n            }\n          };\n        } else {\n          // No bugs detected; use the standard `for...in` algorithm.\n          forEach = function (object, callback) {\n            var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n            for (property in object) {\n              if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n                callback(property);\n              }\n            }\n            // Manually invoke the callback for the `constructor` property due to\n            // cross-environment inconsistencies.\n            if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n              callback(property);\n            }\n          };\n        }\n        return forEach(object, callback);\n      };\n\n      // Public: Serializes a JavaScript `value` as a JSON string. The optional\n      // `filter` argument may specify either a function that alters how object and\n      // array members are serialized, or an array of strings and numbers that\n      // indicates which properties should be serialized. The optional `width`\n      // argument may be either a string or number that specifies the indentation\n      // level of the output.\n      if (!has(\"json-stringify\")) {\n        // Internal: A map of control characters and their escaped equivalents.\n        var Escapes = {\n          92: \"\\\\\\\\\",\n          34: '\\\\\"',\n          8: \"\\\\b\",\n          12: \"\\\\f\",\n          10: \"\\\\n\",\n          13: \"\\\\r\",\n          9: \"\\\\t\"\n        };\n\n        // Internal: Converts `value` into a zero-padded string such that its\n        // length is at least equal to `width`. The `width` must be <= 6.\n        var leadingZeroes = \"000000\";\n        var toPaddedString = function (width, value) {\n          // The `|| 0` expression is necessary to work around a bug in\n          // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n          return (leadingZeroes + (value || 0)).slice(-width);\n        };\n\n        // Internal: Double-quotes a string `value`, replacing all ASCII control\n        // characters (characters with code unit values between 0 and 31) with\n        // their escaped equivalents. This is an implementation of the\n        // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n        var unicodePrefix = \"\\\\u00\";\n        var quote = function (value) {\n          var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n          var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n          for (; index < length; index++) {\n            var charCode = value.charCodeAt(index);\n            // If the character is a control character, append its Unicode or\n            // shorthand escape sequence; otherwise, append the character as-is.\n            switch (charCode) {\n              case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n                result += Escapes[charCode];\n                break;\n              default:\n                if (charCode < 32) {\n                  result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n                  break;\n                }\n                result += useCharIndex ? symbols[index] : value.charAt(index);\n            }\n          }\n          return result + '\"';\n        };\n\n        // Internal: Recursively serializes an object. Implements the\n        // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n        var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n          var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n          try {\n            // Necessary for host object support.\n            value = object[property];\n          } catch (exception) {}\n          if (typeof value == \"object\" && value) {\n            className = getClass.call(value);\n            if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n              if (value > -1 / 0 && value < 1 / 0) {\n                // Dates are serialized according to the `Date#toJSON` method\n                // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n                // for the ISO 8601 date time string format.\n                if (getDay) {\n                  // Manually compute the year, month, date, hours, minutes,\n                  // seconds, and milliseconds if the `getUTC*` methods are\n                  // buggy. Adapted from @Yaffle's `date-shim` project.\n                  date = floor(value / 864e5);\n                  for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n                  for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n                  date = 1 + date - getDay(year, month);\n                  // The `time` value specifies the time within the day (see ES\n                  // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n                  // to compute `A modulo B`, as the `%` operator does not\n                  // correspond to the `modulo` operation for negative numbers.\n                  time = (value % 864e5 + 864e5) % 864e5;\n                  // The hours, minutes, seconds, and milliseconds are obtained by\n                  // decomposing the time within the day. See section 15.9.1.10.\n                  hours = floor(time / 36e5) % 24;\n                  minutes = floor(time / 6e4) % 60;\n                  seconds = floor(time / 1e3) % 60;\n                  milliseconds = time % 1e3;\n                } else {\n                  year = value.getUTCFullYear();\n                  month = value.getUTCMonth();\n                  date = value.getUTCDate();\n                  hours = value.getUTCHours();\n                  minutes = value.getUTCMinutes();\n                  seconds = value.getUTCSeconds();\n                  milliseconds = value.getUTCMilliseconds();\n                }\n                // Serialize extended years correctly.\n                value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n                  \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n                  // Months, dates, hours, minutes, and seconds should have two\n                  // digits; milliseconds should have three.\n                  \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n                  // Milliseconds are optional in ES 5.0, but required in 5.1.\n                  \".\" + toPaddedString(3, milliseconds) + \"Z\";\n              } else {\n                value = null;\n              }\n            } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n              // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n              // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n              // ignores all `toJSON` methods on these objects unless they are\n              // defined directly on an instance.\n              value = value.toJSON(property);\n            }\n          }\n          if (callback) {\n            // If a replacement function was provided, call it to obtain the value\n            // for serialization.\n            value = callback.call(object, property, value);\n          }\n          if (value === null) {\n            return \"null\";\n          }\n          className = getClass.call(value);\n          if (className == booleanClass) {\n            // Booleans are represented literally.\n            return \"\" + value;\n          } else if (className == numberClass) {\n            // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n            // `\"null\"`.\n            return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n          } else if (className == stringClass) {\n            // Strings are double-quoted and escaped.\n            return quote(\"\" + value);\n          }\n          // Recursively serialize objects and arrays.\n          if (typeof value == \"object\") {\n            // Check for cyclic structures. This is a linear search; performance\n            // is inversely proportional to the number of unique nested objects.\n            for (length = stack.length; length--;) {\n              if (stack[length] === value) {\n                // Cyclic structures cannot be serialized by `JSON.stringify`.\n                throw TypeError();\n              }\n            }\n            // Add the object to the stack of traversed objects.\n            stack.push(value);\n            results = [];\n            // Save the current indentation level and indent one additional level.\n            prefix = indentation;\n            indentation += whitespace;\n            if (className == arrayClass) {\n              // Recursively serialize array elements.\n              for (index = 0, length = value.length; index < length; index++) {\n                element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n                results.push(element === undef ? \"null\" : element);\n              }\n              result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n            } else {\n              // Recursively serialize object members. Members are selected from\n              // either a user-specified list of property names, or the object\n              // itself.\n              forEach(properties || value, function (property) {\n                var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n                if (element !== undef) {\n                  // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n                  // is not the empty string, let `member` {quote(property) + \":\"}\n                  // be the concatenation of `member` and the `space` character.\"\n                  // The \"`space` character\" refers to the literal space\n                  // character, not the `space` {width} argument provided to\n                  // `JSON.stringify`.\n                  results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n                }\n              });\n              result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n            }\n            // Remove the object from the traversed object stack.\n            stack.pop();\n            return result;\n          }\n        };\n\n        // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n        exports.stringify = function (source, filter, width) {\n          var whitespace, callback, properties, className;\n          if (objectTypes[typeof filter] && filter) {\n            if ((className = getClass.call(filter)) == functionClass) {\n              callback = filter;\n            } else if (className == arrayClass) {\n              // Convert the property names array into a makeshift set.\n              properties = {};\n              for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n            }\n          }\n          if (width) {\n            if ((className = getClass.call(width)) == numberClass) {\n              // Convert the `width` to an integer and create a string containing\n              // `width` number of space characters.\n              if ((width -= width % 1) > 0) {\n                for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n              }\n            } else if (className == stringClass) {\n              whitespace = width.length <= 10 ? width : width.slice(0, 10);\n            }\n          }\n          // Opera <= 7.54u2 discards the values associated with empty string keys\n          // (`\"\"`) only if they are used directly within an object member list\n          // (e.g., `!(\"\" in { \"\": 1})`).\n          return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n        };\n      }\n\n      // Public: Parses a JSON source string.\n      if (!has(\"json-parse\")) {\n        var fromCharCode = String.fromCharCode;\n\n        // Internal: A map of escaped control characters and their unescaped\n        // equivalents.\n        var Unescapes = {\n          92: \"\\\\\",\n          34: '\"',\n          47: \"/\",\n          98: \"\\b\",\n          116: \"\\t\",\n          110: \"\\n\",\n          102: \"\\f\",\n          114: \"\\r\"\n        };\n\n        // Internal: Stores the parser state.\n        var Index, Source;\n\n        // Internal: Resets the parser state and throws a `SyntaxError`.\n        var abort = function () {\n          Index = Source = null;\n          throw SyntaxError();\n        };\n\n        // Internal: Returns the next token, or `\"$\"` if the parser has reached\n        // the end of the source string. A token may be a string, number, `null`\n        // literal, or Boolean literal.\n        var lex = function () {\n          var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n          while (Index < length) {\n            charCode = source.charCodeAt(Index);\n            switch (charCode) {\n              case 9: case 10: case 13: case 32:\n                // Skip whitespace tokens, including tabs, carriage returns, line\n                // feeds, and space characters.\n                Index++;\n                break;\n              case 123: case 125: case 91: case 93: case 58: case 44:\n                // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n                // the current position.\n                value = charIndexBuggy ? source.charAt(Index) : source[Index];\n                Index++;\n                return value;\n              case 34:\n                // `\"` delimits a JSON string; advance to the next character and\n                // begin parsing the string. String tokens are prefixed with the\n                // sentinel `@` character to distinguish them from punctuators and\n                // end-of-string tokens.\n                for (value = \"@\", Index++; Index < length;) {\n                  charCode = source.charCodeAt(Index);\n                  if (charCode < 32) {\n                    // Unescaped ASCII control characters (those with a code unit\n                    // less than the space character) are not permitted.\n                    abort();\n                  } else if (charCode == 92) {\n                    // A reverse solidus (`\\`) marks the beginning of an escaped\n                    // control character (including `\"`, `\\`, and `/`) or Unicode\n                    // escape sequence.\n                    charCode = source.charCodeAt(++Index);\n                    switch (charCode) {\n                      case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n                        // Revive escaped control characters.\n                        value += Unescapes[charCode];\n                        Index++;\n                        break;\n                      case 117:\n                        // `\\u` marks the beginning of a Unicode escape sequence.\n                        // Advance to the first character and validate the\n                        // four-digit code point.\n                        begin = ++Index;\n                        for (position = Index + 4; Index < position; Index++) {\n                          charCode = source.charCodeAt(Index);\n                          // A valid sequence comprises four hexdigits (case-\n                          // insensitive) that form a single hexadecimal value.\n                          if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n                            // Invalid Unicode escape sequence.\n                            abort();\n                          }\n                        }\n                        // Revive the escaped character.\n                        value += fromCharCode(\"0x\" + source.slice(begin, Index));\n                        break;\n                      default:\n                        // Invalid escape sequence.\n                        abort();\n                    }\n                  } else {\n                    if (charCode == 34) {\n                      // An unescaped double-quote character marks the end of the\n                      // string.\n                      break;\n                    }\n                    charCode = source.charCodeAt(Index);\n                    begin = Index;\n                    // Optimize for the common case where a string is valid.\n                    while (charCode >= 32 && charCode != 92 && charCode != 34) {\n                      charCode = source.charCodeAt(++Index);\n                    }\n                    // Append the string as-is.\n                    value += source.slice(begin, Index);\n                  }\n                }\n                if (source.charCodeAt(Index) == 34) {\n                  // Advance to the next character and return the revived string.\n                  Index++;\n                  return value;\n                }\n                // Unterminated string.\n                abort();\n              default:\n                // Parse numbers and literals.\n                begin = Index;\n                // Advance past the negative sign, if one is specified.\n                if (charCode == 45) {\n                  isSigned = true;\n                  charCode = source.charCodeAt(++Index);\n                }\n                // Parse an integer or floating-point value.\n                if (charCode >= 48 && charCode <= 57) {\n                  // Leading zeroes are interpreted as octal literals.\n                  if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n                    // Illegal octal literal.\n                    abort();\n                  }\n                  isSigned = false;\n                  // Parse the integer component.\n                  for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n                  // Floats cannot contain a leading decimal point; however, this\n                  // case is already accounted for by the parser.\n                  if (source.charCodeAt(Index) == 46) {\n                    position = ++Index;\n                    // Parse the decimal component.\n                    for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n                    if (position == Index) {\n                      // Illegal trailing decimal.\n                      abort();\n                    }\n                    Index = position;\n                  }\n                  // Parse exponents. The `e` denoting the exponent is\n                  // case-insensitive.\n                  charCode = source.charCodeAt(Index);\n                  if (charCode == 101 || charCode == 69) {\n                    charCode = source.charCodeAt(++Index);\n                    // Skip past the sign following the exponent, if one is\n                    // specified.\n                    if (charCode == 43 || charCode == 45) {\n                      Index++;\n                    }\n                    // Parse the exponential component.\n                    for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n                    if (position == Index) {\n                      // Illegal empty exponent.\n                      abort();\n                    }\n                    Index = position;\n                  }\n                  // Coerce the parsed value to a JavaScript number.\n                  return +source.slice(begin, Index);\n                }\n                // A negative sign may only precede numbers.\n                if (isSigned) {\n                  abort();\n                }\n                // `true`, `false`, and `null` literals.\n                if (source.slice(Index, Index + 4) == \"true\") {\n                  Index += 4;\n                  return true;\n                } else if (source.slice(Index, Index + 5) == \"false\") {\n                  Index += 5;\n                  return false;\n                } else if (source.slice(Index, Index + 4) == \"null\") {\n                  Index += 4;\n                  return null;\n                }\n                // Unrecognized token.\n                abort();\n            }\n          }\n          // Return the sentinel `$` character if the parser has reached the end\n          // of the source string.\n          return \"$\";\n        };\n\n        // Internal: Parses a JSON `value` token.\n        var get = function (value) {\n          var results, hasMembers;\n          if (value == \"$\") {\n            // Unexpected end of input.\n            abort();\n          }\n          if (typeof value == \"string\") {\n            if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n              // Remove the sentinel `@` character.\n              return value.slice(1);\n            }\n            // Parse object and array literals.\n            if (value == \"[\") {\n              // Parses a JSON array, returning a new JavaScript array.\n              results = [];\n              for (;; hasMembers || (hasMembers = true)) {\n                value = lex();\n                // A closing square bracket marks the end of the array literal.\n                if (value == \"]\") {\n                  break;\n                }\n                // If the array literal contains elements, the current token\n                // should be a comma separating the previous element from the\n                // next.\n                if (hasMembers) {\n                  if (value == \",\") {\n                    value = lex();\n                    if (value == \"]\") {\n                      // Unexpected trailing `,` in array literal.\n                      abort();\n                    }\n                  } else {\n                    // A `,` must separate each array element.\n                    abort();\n                  }\n                }\n                // Elisions and leading commas are not permitted.\n                if (value == \",\") {\n                  abort();\n                }\n                results.push(get(value));\n              }\n              return results;\n            } else if (value == \"{\") {\n              // Parses a JSON object, returning a new JavaScript object.\n              results = {};\n              for (;; hasMembers || (hasMembers = true)) {\n                value = lex();\n                // A closing curly brace marks the end of the object literal.\n                if (value == \"}\") {\n                  break;\n                }\n                // If the object literal contains members, the current token\n                // should be a comma separator.\n                if (hasMembers) {\n                  if (value == \",\") {\n                    value = lex();\n                    if (value == \"}\") {\n                      // Unexpected trailing `,` in object literal.\n                      abort();\n                    }\n                  } else {\n                    // A `,` must separate each object member.\n                    abort();\n                  }\n                }\n                // Leading commas are not permitted, object property names must be\n                // double-quoted strings, and a `:` must separate each property\n                // name and value.\n                if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n                  abort();\n                }\n                results[value.slice(1)] = get(lex());\n              }\n              return results;\n            }\n            // Unexpected token encountered.\n            abort();\n          }\n          return value;\n        };\n\n        // Internal: Updates a traversed object member.\n        var update = function (source, property, callback) {\n          var element = walk(source, property, callback);\n          if (element === undef) {\n            delete source[property];\n          } else {\n            source[property] = element;\n          }\n        };\n\n        // Internal: Recursively traverses a parsed JSON object, invoking the\n        // `callback` function for each value. This is an implementation of the\n        // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n        var walk = function (source, property, callback) {\n          var value = source[property], length;\n          if (typeof value == \"object\" && value) {\n            // `forEach` can't be used to traverse an array in Opera <= 8.54\n            // because its `Object#hasOwnProperty` implementation returns `false`\n            // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n            if (getClass.call(value) == arrayClass) {\n              for (length = value.length; length--;) {\n                update(value, length, callback);\n              }\n            } else {\n              forEach(value, function (property) {\n                update(value, property, callback);\n              });\n            }\n          }\n          return callback.call(source, property, value);\n        };\n\n        // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n        exports.parse = function (source, callback) {\n          var result, value;\n          Index = 0;\n          Source = \"\" + source;\n          result = get(lex());\n          // If a JSON string contains multiple tokens, it is invalid.\n          if (lex() != \"$\") {\n            abort();\n          }\n          // Reset the parser state.\n          Index = Source = null;\n          return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n        };\n      }\n    }\n\n    exports[\"runInContext\"] = runInContext;\n    return exports;\n  }\n\n  if (freeExports && !isLoader) {\n    // Export for CommonJS environments.\n    runInContext(root, freeExports);\n  } else {\n    // Export for web browsers and JavaScript engines.\n    var nativeJSON = root.JSON,\n        previousJSON = root[\"JSON3\"],\n        isRestored = false;\n\n    var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n      // Public: Restores the original value of the global `JSON` object and\n      // returns a reference to the `JSON3` object.\n      \"noConflict\": function () {\n        if (!isRestored) {\n          isRestored = true;\n          root.JSON = nativeJSON;\n          root[\"JSON3\"] = previousJSON;\n          nativeJSON = previousJSON = null;\n        }\n        return JSON3;\n      }\n    }));\n\n    root.JSON = {\n      \"parse\": JSON3.parse,\n      \"stringify\": JSON3.stringify\n    };\n  }\n\n  // Export for asynchronous module loaders.\n  if (isLoader) {\n    undefined(function () {\n      return JSON3;\n    });\n  }\n}).call(commonjsGlobal);\n});\n\nvar constants = {\n  DEFAULT_INSTANCE: '$default_instance',\n  API_VERSION: 2,\n  MAX_STRING_LENGTH: 4096,\n  MAX_PROPERTY_KEYS: 1000,\n  IDENTIFY_EVENT: '$identify',\n  GROUP_IDENTIFY_EVENT: '$groupidentify',\n\n  // localStorageKeys\n  LAST_EVENT_ID: 'amplitude_lastEventId',\n  LAST_EVENT_TIME: 'amplitude_lastEventTime',\n  LAST_IDENTIFY_ID: 'amplitude_lastIdentifyId',\n  LAST_SEQUENCE_NUMBER: 'amplitude_lastSequenceNumber',\n  SESSION_ID: 'amplitude_sessionId',\n\n  // Used in cookie as well\n  DEVICE_ID: 'amplitude_deviceId',\n  OPT_OUT: 'amplitude_optOut',\n  USER_ID: 'amplitude_userId',\n\n  COOKIE_TEST: 'amplitude_cookie_test',\n\n  // revenue keys\n  REVENUE_EVENT: 'revenue_amount',\n  REVENUE_PRODUCT_ID: '$productId',\n  REVENUE_QUANTITY: '$quantity',\n  REVENUE_PRICE: '$price',\n  REVENUE_REVENUE_TYPE: '$revenueType',\n\n  AMP_DEVICE_ID_PARAM: 'amp_device_id' // url param\n};\n\n/* jshint bitwise: false */\n\n/*\n * UTF-8 encoder/decoder\n * http://www.webtoolkit.info/\n */\nvar UTF8 = {\n    encode: function encode(s) {\n        var utftext = '';\n\n        for (var n = 0; n < s.length; n++) {\n            var c = s.charCodeAt(n);\n\n            if (c < 128) {\n                utftext += String.fromCharCode(c);\n            } else if (c > 127 && c < 2048) {\n                utftext += String.fromCharCode(c >> 6 | 192);\n                utftext += String.fromCharCode(c & 63 | 128);\n            } else {\n                utftext += String.fromCharCode(c >> 12 | 224);\n                utftext += String.fromCharCode(c >> 6 & 63 | 128);\n                utftext += String.fromCharCode(c & 63 | 128);\n            }\n        }\n        return utftext;\n    },\n\n    decode: function decode(utftext) {\n        var s = '';\n        var i = 0;\n        var c = 0,\n            c1 = 0,\n            c2 = 0;\n\n        while (i < utftext.length) {\n            c = utftext.charCodeAt(i);\n            if (c < 128) {\n                s += String.fromCharCode(c);\n                i++;\n            } else if (c > 191 && c < 224) {\n                c1 = utftext.charCodeAt(i + 1);\n                s += String.fromCharCode((c & 31) << 6 | c1 & 63);\n                i += 2;\n            } else {\n                c1 = utftext.charCodeAt(i + 1);\n                c2 = utftext.charCodeAt(i + 2);\n                s += String.fromCharCode((c & 15) << 12 | (c1 & 63) << 6 | c2 & 63);\n                i += 3;\n            }\n        }\n        return s;\n    }\n};\n\n/* jshint bitwise: false */\n/* global escape, unescape */\n\n/*\n * Base64 encoder/decoder\n * http://www.webtoolkit.info/\n */\nvar Base64 = {\n    _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\n    encode: function encode(input) {\n        try {\n            if (window.btoa && window.atob) {\n                return window.btoa(unescape(encodeURIComponent(input)));\n            }\n        } catch (e) {\n            //log(e);\n        }\n        return Base64._encode(input);\n    },\n\n    _encode: function _encode(input) {\n        var output = '';\n        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n        var i = 0;\n\n        input = UTF8.encode(input);\n\n        while (i < input.length) {\n            chr1 = input.charCodeAt(i++);\n            chr2 = input.charCodeAt(i++);\n            chr3 = input.charCodeAt(i++);\n\n            enc1 = chr1 >> 2;\n            enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n            enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n            enc4 = chr3 & 63;\n\n            if (isNaN(chr2)) {\n                enc3 = enc4 = 64;\n            } else if (isNaN(chr3)) {\n                enc4 = 64;\n            }\n\n            output = output + Base64._keyStr.charAt(enc1) + Base64._keyStr.charAt(enc2) + Base64._keyStr.charAt(enc3) + Base64._keyStr.charAt(enc4);\n        }\n        return output;\n    },\n\n    decode: function decode(input) {\n        try {\n            if (window.btoa && window.atob) {\n                return decodeURIComponent(escape(window.atob(input)));\n            }\n        } catch (e) {\n            //log(e);\n        }\n        return Base64._decode(input);\n    },\n\n    _decode: function _decode(input) {\n        var output = '';\n        var chr1, chr2, chr3;\n        var enc1, enc2, enc3, enc4;\n        var i = 0;\n\n        input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n        while (i < input.length) {\n            enc1 = Base64._keyStr.indexOf(input.charAt(i++));\n            enc2 = Base64._keyStr.indexOf(input.charAt(i++));\n            enc3 = Base64._keyStr.indexOf(input.charAt(i++));\n            enc4 = Base64._keyStr.indexOf(input.charAt(i++));\n\n            chr1 = enc1 << 2 | enc2 >> 4;\n            chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n            chr3 = (enc3 & 3) << 6 | enc4;\n\n            output = output + String.fromCharCode(chr1);\n\n            if (enc3 !== 64) {\n                output = output + String.fromCharCode(chr2);\n            }\n            if (enc4 !== 64) {\n                output = output + String.fromCharCode(chr3);\n            }\n        }\n        output = UTF8.decode(output);\n        return output;\n    }\n};\n\nvar componentUrl = createCommonjsModule(function (module, exports) {\n/**\n * Parse the given `url`.\n *\n * @param {String} str\n * @return {Object}\n * @api public\n */\n\nexports.parse = function(url){\n  var a = document.createElement('a');\n  a.href = url;\n  return {\n    href: a.href,\n    host: a.host || location.host,\n    port: ('0' === a.port || '' === a.port) ? port(a.protocol) : a.port,\n    hash: a.hash,\n    hostname: a.hostname || location.hostname,\n    pathname: a.pathname.charAt(0) != '/' ? '/' + a.pathname : a.pathname,\n    protocol: !a.protocol || ':' == a.protocol ? location.protocol : a.protocol,\n    search: a.search,\n    query: a.search.slice(1)\n  };\n};\n\n/**\n * Check if `url` is absolute.\n *\n * @param {String} url\n * @return {Boolean}\n * @api public\n */\n\nexports.isAbsolute = function(url){\n  return 0 == url.indexOf('//') || !!~url.indexOf('://');\n};\n\n/**\n * Check if `url` is relative.\n *\n * @param {String} url\n * @return {Boolean}\n * @api public\n */\n\nexports.isRelative = function(url){\n  return !exports.isAbsolute(url);\n};\n\n/**\n * Check if `url` is cross domain.\n *\n * @param {String} url\n * @return {Boolean}\n * @api public\n */\n\nexports.isCrossDomain = function(url){\n  url = exports.parse(url);\n  var location = exports.parse(window.location.href);\n  return url.hostname !== location.hostname\n    || url.port !== location.port\n    || url.protocol !== location.protocol;\n};\n\n/**\n * Return default port for `protocol`.\n *\n * @param  {String} protocol\n * @return {String}\n * @api private\n */\nfunction port (protocol){\n  switch (protocol) {\n    case 'http:':\n      return 80;\n    case 'https:':\n      return 443;\n    default:\n      return location.port;\n  }\n}\n});\n\n/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nvar ms = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse$1(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse$1(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n\nvar debug$1 = createCommonjsModule(function (module, exports) {\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = ms;\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n  var prevTime;\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms$$1 = curr - (prevTime || curr);\n    self.diff = ms$$1;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n  debug.destroy = destroy;\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  exports.instances.push(debug);\n\n  return debug;\n}\n\nfunction destroy () {\n  var index = exports.instances.indexOf(this);\n  if (index !== -1) {\n    exports.instances.splice(index, 1);\n    return true;\n  } else {\n    return false;\n  }\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  exports.names = [];\n  exports.skips = [];\n\n  var i;\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n\n  for (i = 0; i < exports.instances.length; i++) {\n    var instance = exports.instances[i];\n    instance.enabled = exports.enabled(instance.namespace);\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  if (name[name.length - 1] === '*') {\n    return true;\n  }\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n});\n\nvar browser = createCommonjsModule(function (module, exports) {\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = debug$1;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',\n  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',\n  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',\n  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',\n  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',\n  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',\n  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',\n  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',\n  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',\n  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',\n  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // Internet Explorer and Edge do not support colors.\n  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n    return false;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit');\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n});\n\n/**\n * Module dependencies.\n */\n\nvar debug = browser('cookie');\n\n/**\n * Set or get cookie `name` with `value` and `options` object.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {Mixed}\n * @api public\n */\n\nvar componentCookie = function(name, value, options){\n  switch (arguments.length) {\n    case 3:\n    case 2:\n      return set$1(name, value, options);\n    case 1:\n      return get$1(name);\n    default:\n      return all();\n  }\n};\n\n/**\n * Set cookie `name` to `value`.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @api private\n */\n\nfunction set$1(name, value, options) {\n  options = options || {};\n  var str = encode(name) + '=' + encode(value);\n\n  if (null == value) options.maxage = -1;\n\n  if (options.maxage) {\n    options.expires = new Date(+new Date + options.maxage);\n  }\n\n  if (options.path) str += '; path=' + options.path;\n  if (options.domain) str += '; domain=' + options.domain;\n  if (options.expires) str += '; expires=' + options.expires.toUTCString();\n  if (options.secure) str += '; secure';\n\n  document.cookie = str;\n}\n\n/**\n * Return all cookies.\n *\n * @return {Object}\n * @api private\n */\n\nfunction all() {\n  var str;\n  try {\n    str = document.cookie;\n  } catch (err) {\n    if (typeof console !== 'undefined' && typeof console.error === 'function') {\n      console.error(err.stack || err);\n    }\n    return {};\n  }\n  return parse(str);\n}\n\n/**\n * Get cookie `name`.\n *\n * @param {String} name\n * @return {String}\n * @api private\n */\n\nfunction get$1(name) {\n  return all()[name];\n}\n\n/**\n * Parse cookie `str`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction parse(str) {\n  var obj = {};\n  var pairs = str.split(/ *; */);\n  var pair;\n  if ('' == pairs[0]) return obj;\n  for (var i = 0; i < pairs.length; ++i) {\n    pair = pairs[i].split('=');\n    obj[decode(pair[0])] = decode(pair[1]);\n  }\n  return obj;\n}\n\n/**\n * Encode.\n */\n\nfunction encode(value){\n  try {\n    return encodeURIComponent(value);\n  } catch (e) {\n    debug('error `encode(%o)` - %o', value, e);\n  }\n}\n\n/**\n * Decode.\n */\n\nfunction decode(value) {\n  try {\n    return decodeURIComponent(value);\n  } catch (e) {\n    debug('error `decode(%o)` - %o', value, e);\n  }\n}\n\nvar lib = createCommonjsModule(function (module, exports) {\n'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar parse = componentUrl.parse;\n\n\n/**\n * Get the top domain.\n *\n * The function constructs the levels of domain and attempts to set a global\n * cookie on each one when it succeeds it returns the top level domain.\n *\n * The method returns an empty string when the hostname is an ip or `localhost`.\n *\n * Example levels:\n *\n *      domain.levels('http://www.google.co.uk');\n *      // => [\"co.uk\", \"google.co.uk\", \"www.google.co.uk\"]\n *\n * Example:\n *\n *      domain('http://localhost:3000/baz');\n *      // => ''\n *      domain('http://dev:3000/baz');\n *      // => ''\n *      domain('http://127.0.0.1:3000/baz');\n *      // => ''\n *      domain('http://segment.io/baz');\n *      // => 'segment.io'\n *\n * @param {string} url\n * @return {string}\n * @api public\n */\nfunction domain(url) {\n  var cookie$$1 = exports.cookie;\n  var levels = exports.levels(url);\n\n  // Lookup the real top level one.\n  for (var i = 0; i < levels.length; ++i) {\n    var cname = '__tld__';\n    var domain = levels[i];\n    var opts = { domain: '.' + domain };\n\n    cookie$$1(cname, 1, opts);\n    if (cookie$$1(cname)) {\n      cookie$$1(cname, null, opts);\n      return domain;\n    }\n  }\n\n  return '';\n}\n\n/**\n * Levels returns all levels of the given url.\n *\n * @param {string} url\n * @return {Array}\n * @api public\n */\ndomain.levels = function(url) {\n  var host = parse(url).hostname;\n  var parts = host.split('.');\n  var last = parts[parts.length - 1];\n  var levels = [];\n\n  // Ip address.\n  if (parts.length === 4 && last === parseInt(last, 10)) {\n    return levels;\n  }\n\n  // Localhost.\n  if (parts.length <= 1) {\n    return levels;\n  }\n\n  // Create levels.\n  for (var i = parts.length - 2; i >= 0; --i) {\n    levels.push(parts.slice(i).join('.'));\n  }\n\n  return levels;\n};\n\n/**\n * Expose cookie on domain.\n */\ndomain.cookie = componentCookie;\n\n/*\n * Exports.\n */\n\nexports = module.exports = domain;\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * toString ref.\n * @private\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Return the type of `val`.\n * @private\n * @param {Mixed} val\n * @return {String}\n * @api public\n */\n\nvar type = function (val) {\n  switch (toString.call(val)) {\n    case '[object Date]':\n      return 'date';\n    case '[object RegExp]':\n      return 'regexp';\n    case '[object Arguments]':\n      return 'arguments';\n    case '[object Array]':\n      return 'array';\n    case '[object Error]':\n      return 'error';\n  }\n\n  if (val === null) {\n    return 'null';\n  }\n  if (val === undefined) {\n    return 'undefined';\n  }\n  if (val !== val) {\n    return 'nan';\n  }\n  if (val && val.nodeType === 1) {\n    return 'element';\n  }\n\n  if (typeof Buffer !== 'undefined' && typeof Buffer.isBuffer === 'function' && Buffer.isBuffer(val)) {\n    return 'buffer';\n  }\n\n  val = val.valueOf ? val.valueOf() : Object.prototype.valueOf.apply(val);\n  return typeof val === 'undefined' ? 'undefined' : _typeof(val);\n};\n\nvar logLevels = {\n  DISABLE: 0,\n  ERROR: 1,\n  WARN: 2,\n  INFO: 3\n};\n\nvar logLevel = logLevels.WARN;\n\nvar setLogLevel = function setLogLevel(logLevelName) {\n  logLevel = logLevels[logLevelName] || logLevel;\n};\n\nvar getLogLevel = function getLogLevel() {\n  return logLevel;\n};\n\nvar log = {\n  error: function error(s) {\n    if (logLevel >= logLevels.ERROR) {\n      _log(s);\n    }\n  },\n\n  warn: function warn(s) {\n    if (logLevel >= logLevels.WARN) {\n      _log(s);\n    }\n  },\n\n  info: function info(s) {\n    if (logLevel >= logLevels.INFO) {\n      _log(s);\n    }\n  }\n};\n\nvar _log = function _log(s) {\n  try {\n    console.log('[Amplitude] ' + s);\n  } catch (e) {\n    // console logging not available\n  }\n};\n\nvar isEmptyString = function isEmptyString(str) {\n  return !str || str.length === 0;\n};\n\nvar sessionStorageEnabled = function sessionStorageEnabled() {\n  try {\n    if (window.sessionStorage) {\n      return true;\n    }\n  } catch (e) {} // sessionStorage disabled\n  return false;\n};\n\n// truncate string values in event and user properties so that request size does not get too large\nvar truncate = function truncate(value) {\n  if (type(value) === 'array') {\n    for (var i = 0; i < value.length; i++) {\n      value[i] = truncate(value[i]);\n    }\n  } else if (type(value) === 'object') {\n    for (var key in value) {\n      if (value.hasOwnProperty(key)) {\n        value[key] = truncate(value[key]);\n      }\n    }\n  } else {\n    value = _truncateValue(value);\n  }\n\n  return value;\n};\n\nvar _truncateValue = function _truncateValue(value) {\n  if (type(value) === 'string') {\n    return value.length > constants.MAX_STRING_LENGTH ? value.substring(0, constants.MAX_STRING_LENGTH) : value;\n  }\n  return value;\n};\n\nvar validateInput = function validateInput(input, name, expectedType) {\n  if (type(input) !== expectedType) {\n    log.error('Invalid ' + name + ' input type. Expected ' + expectedType + ' but received ' + type(input));\n    return false;\n  }\n  return true;\n};\n\n// do some basic sanitization and type checking, also catch property dicts with more than 1000 key/value pairs\nvar validateProperties = function validateProperties(properties) {\n  var propsType = type(properties);\n  if (propsType !== 'object') {\n    log.error('Error: invalid properties format. Expecting Javascript object, received ' + propsType + ', ignoring');\n    return {};\n  }\n\n  if (Object.keys(properties).length > constants.MAX_PROPERTY_KEYS) {\n    log.error('Error: too many properties (more than 1000), ignoring');\n    return {};\n  }\n\n  var copy = {}; // create a copy with all of the valid properties\n  for (var property in properties) {\n    if (!properties.hasOwnProperty(property)) {\n      continue;\n    }\n\n    // validate key\n    var key = property;\n    var keyType = type(key);\n    if (keyType !== 'string') {\n      key = String(key);\n      log.warn('WARNING: Non-string property key, received type ' + keyType + ', coercing to string \"' + key + '\"');\n    }\n\n    // validate value\n    var value = validatePropertyValue(key, properties[property]);\n    if (value === null) {\n      continue;\n    }\n    copy[key] = value;\n  }\n  return copy;\n};\n\nvar invalidValueTypes = ['null', 'nan', 'undefined', 'function', 'arguments', 'regexp', 'element'];\n\nvar validatePropertyValue = function validatePropertyValue(key, value) {\n  var valueType = type(value);\n  if (invalidValueTypes.indexOf(valueType) !== -1) {\n    log.warn('WARNING: Property key \"' + key + '\" with invalid value type ' + valueType + ', ignoring');\n    value = null;\n  } else if (valueType === 'error') {\n    value = String(value);\n    log.warn('WARNING: Property key \"' + key + '\" with value type error, coercing to ' + value);\n  } else if (valueType === 'array') {\n    // check for nested arrays or objects\n    var arrayCopy = [];\n    for (var i = 0; i < value.length; i++) {\n      var element = value[i];\n      var elemType = type(element);\n      if (elemType === 'array' || elemType === 'object') {\n        log.warn('WARNING: Cannot have ' + elemType + ' nested in an array property value, skipping');\n        continue;\n      }\n      arrayCopy.push(validatePropertyValue(key, element));\n    }\n    value = arrayCopy;\n  } else if (valueType === 'object') {\n    value = validateProperties(value);\n  }\n  return value;\n};\n\nvar validateGroups = function validateGroups(groups) {\n  var groupsType = type(groups);\n  if (groupsType !== 'object') {\n    log.error('Error: invalid groups format. Expecting Javascript object, received ' + groupsType + ', ignoring');\n    return {};\n  }\n\n  var copy = {}; // create a copy with all of the valid properties\n  for (var group in groups) {\n    if (!groups.hasOwnProperty(group)) {\n      continue;\n    }\n\n    // validate key\n    var key = group;\n    var keyType = type(key);\n    if (keyType !== 'string') {\n      key = String(key);\n      log.warn('WARNING: Non-string groupType, received type ' + keyType + ', coercing to string \"' + key + '\"');\n    }\n\n    // validate value\n    var value = validateGroupName(key, groups[group]);\n    if (value === null) {\n      continue;\n    }\n    copy[key] = value;\n  }\n  return copy;\n};\n\nvar validateGroupName = function validateGroupName(key, groupName) {\n  var groupNameType = type(groupName);\n  if (groupNameType === 'string') {\n    return groupName;\n  }\n  if (groupNameType === 'date' || groupNameType === 'number' || groupNameType === 'boolean') {\n    groupName = String(groupName);\n    log.warn('WARNING: Non-string groupName, received type ' + groupNameType + ', coercing to string \"' + groupName + '\"');\n    return groupName;\n  }\n  if (groupNameType === 'array') {\n    // check for nested arrays or objects\n    var arrayCopy = [];\n    for (var i = 0; i < groupName.length; i++) {\n      var element = groupName[i];\n      var elemType = type(element);\n      if (elemType === 'array' || elemType === 'object') {\n        log.warn('WARNING: Skipping nested ' + elemType + ' in array groupName');\n        continue;\n      } else if (elemType === 'string') {\n        arrayCopy.push(element);\n      } else if (elemType === 'date' || elemType === 'number' || elemType === 'boolean') {\n        element = String(element);\n        log.warn('WARNING: Non-string groupName, received type ' + elemType + ', coercing to string \"' + element + '\"');\n        arrayCopy.push(element);\n      }\n    }\n    return arrayCopy;\n  }\n  log.warn('WARNING: Non-string groupName, received type ' + groupNameType + '. Please use strings or array of strings for groupName');\n};\n\n// parses the value of a url param (for example ?gclid=1234&...)\nvar getQueryParam = function getQueryParam(name, query) {\n  name = name.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\n  var regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\");\n  var results = regex.exec(query);\n  return results === null ? undefined : decodeURIComponent(results[1].replace(/\\+/g, \" \"));\n};\n\nvar utils = {\n  setLogLevel: setLogLevel,\n  getLogLevel: getLogLevel,\n  log: log,\n  isEmptyString: isEmptyString,\n  getQueryParam: getQueryParam,\n  sessionStorageEnabled: sessionStorageEnabled,\n  truncate: truncate,\n  validateGroups: validateGroups,\n  validateInput: validateInput,\n  validateProperties: validateProperties\n};\n\n/*\n * Cookie data\n */\n\nvar _options = {\n  expirationDays: undefined,\n  domain: undefined\n};\n\nvar reset = function reset() {\n  _options = {\n    expirationDays: undefined,\n    domain: undefined\n  };\n};\n\nvar options = function options(opts) {\n  if (arguments.length === 0) {\n    return _options;\n  }\n\n  opts = opts || {};\n\n  _options.expirationDays = opts.expirationDays;\n\n  var domain = !utils.isEmptyString(opts.domain) ? opts.domain : '.' + lib(window.location.href);\n  var token = Math.random();\n  _options.domain = domain;\n  set('amplitude_test', token);\n  var stored = get('amplitude_test');\n  if (!stored || stored !== token) {\n    domain = null;\n  }\n  remove('amplitude_test');\n  _options.domain = domain;\n};\n\nvar _domainSpecific = function _domainSpecific(name) {\n  // differentiate between cookies on different domains\n  var suffix = '';\n  if (_options.domain) {\n    suffix = _options.domain.charAt(0) === '.' ? _options.domain.substring(1) : _options.domain;\n  }\n  return name + suffix;\n};\n\nvar get = function get(name) {\n  try {\n    var nameEq = _domainSpecific(name) + '=';\n    var ca = document.cookie.split(';');\n    var value = null;\n    for (var i = 0; i < ca.length; i++) {\n      var c = ca[i];\n      while (c.charAt(0) === ' ') {\n        c = c.substring(1, c.length);\n      }\n      if (c.indexOf(nameEq) === 0) {\n        value = c.substring(nameEq.length, c.length);\n        break;\n      }\n    }\n\n    if (value) {\n      return JSON.parse(Base64.decode(value));\n    }\n    return null;\n  } catch (e) {\n    return null;\n  }\n};\n\nvar set = function set(name, value) {\n  try {\n    _set(_domainSpecific(name), Base64.encode(JSON.stringify(value)), _options);\n    return true;\n  } catch (e) {\n    return false;\n  }\n};\n\nvar _set = function _set(name, value, opts) {\n  var expires = value !== null ? opts.expirationDays : -1;\n  if (expires) {\n    var date = new Date();\n    date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n    expires = date;\n  }\n  var str = name + '=' + value;\n  if (expires) {\n    str += '; expires=' + expires.toUTCString();\n  }\n  str += '; path=/';\n  if (opts.domain) {\n    str += '; domain=' + opts.domain;\n  }\n  document.cookie = str;\n};\n\nvar remove = function remove(name) {\n  try {\n    _set(_domainSpecific(name), null, _options);\n    return true;\n  } catch (e) {\n    return false;\n  }\n};\n\nvar Cookie = {\n  reset: reset,\n  options: options,\n  get: get,\n  set: set,\n  remove: remove\n\n};\n\n/* jshint -W020, unused: false, noempty: false, boss: true */\n\n/*\n * Implement localStorage to support Firefox 2-3 and IE 5-7\n */\nvar localStorage; // jshint ignore:line\n\n// test that Window.localStorage is available and works\nfunction windowLocalStorageAvailable() {\n  var uid = new Date();\n  var result;\n  try {\n    window.localStorage.setItem(uid, uid);\n    result = window.localStorage.getItem(uid) === String(uid);\n    window.localStorage.removeItem(uid);\n    return result;\n  } catch (e) {\n    // localStorage not available\n  }\n  return false;\n}\n\nif (windowLocalStorageAvailable()) {\n  localStorage = window.localStorage;\n} else if (window.globalStorage) {\n  // Firefox 2-3 use globalStorage\n  // See https://developer.mozilla.org/en/dom/storage#globalStorage\n  try {\n    localStorage = window.globalStorage[window.location.hostname];\n  } catch (e) {\n    // Something bad happened...\n  }\n} else {\n  // IE 5-7 use userData\n  // See http://msdn.microsoft.com/en-us/library/ms531424(v=vs.85).aspx\n  var div = document.createElement('div'),\n      attrKey = 'localStorage';\n  div.style.display = 'none';\n  document.getElementsByTagName('head')[0].appendChild(div);\n  if (div.addBehavior) {\n    div.addBehavior('#default#userdata');\n    localStorage = {\n      length: 0,\n      setItem: function setItem(k, v) {\n        div.load(attrKey);\n        if (!div.getAttribute(k)) {\n          this.length++;\n        }\n        div.setAttribute(k, v);\n        div.save(attrKey);\n      },\n      getItem: function getItem(k) {\n        div.load(attrKey);\n        return div.getAttribute(k);\n      },\n      removeItem: function removeItem(k) {\n        div.load(attrKey);\n        if (div.getAttribute(k)) {\n          this.length--;\n        }\n        div.removeAttribute(k);\n        div.save(attrKey);\n      },\n      clear: function clear() {\n        div.load(attrKey);\n        var i = 0;\n        var attr;\n        while (attr = div.XMLDocument.documentElement.attributes[i++]) {\n          div.removeAttribute(attr.name);\n        }\n        div.save(attrKey);\n        this.length = 0;\n      },\n      key: function key(k) {\n        div.load(attrKey);\n        return div.XMLDocument.documentElement.attributes[k];\n      }\n    };\n    div.load(attrKey);\n    localStorage.length = div.XMLDocument.documentElement.attributes.length;\n  } else {\n    /* Nothing we can do ... */\n  }\n}\nif (!localStorage) {\n  localStorage = {\n    length: 0,\n    setItem: function setItem(k, v) {},\n    getItem: function getItem(k) {},\n    removeItem: function removeItem(k) {},\n    clear: function clear() {},\n    key: function key(k) {}\n  };\n}\n\nvar localStorage$1 = localStorage;\n\n/* jshint -W020, unused: false, noempty: false, boss: true */\n\n/*\n * Abstraction layer for cookie storage.\n * Uses cookie if available, otherwise fallback to localstorage.\n */\n\nvar cookieStorage = function cookieStorage() {\n  this.storage = null;\n};\n\n// test that cookies are enabled - navigator.cookiesEnabled yields false positives in IE, need to test directly\ncookieStorage.prototype._cookiesEnabled = function () {\n  var uid = String(new Date());\n  var result;\n  try {\n    Cookie.set(constants.COOKIE_TEST, uid);\n    result = Cookie.get(constants.COOKIE_TEST) === uid;\n    Cookie.remove(constants.COOKIE_TEST);\n    return result;\n  } catch (e) {\n    // cookies are not enabled\n  }\n  return false;\n};\n\ncookieStorage.prototype.getStorage = function () {\n  if (this.storage !== null) {\n    return this.storage;\n  }\n\n  if (this._cookiesEnabled()) {\n    this.storage = Cookie;\n  } else {\n    // if cookies disabled, fallback to localstorage\n    // note: localstorage does not persist across subdomains\n    var keyPrefix = 'amp_cookiestore_';\n    this.storage = {\n      _options: {\n        expirationDays: undefined,\n        domain: undefined\n      },\n      reset: function reset() {\n        this._options = {\n          expirationDays: undefined,\n          domain: undefined\n        };\n      },\n      options: function options(opts) {\n        if (arguments.length === 0) {\n          return this._options;\n        }\n        opts = opts || {};\n        this._options.expirationDays = opts.expirationDays || this._options.expirationDays;\n        // localStorage is specific to subdomains\n        this._options.domain = opts.domain || this._options.domain || window.location.hostname;\n        return this._options;\n      },\n      get: function get(name) {\n        try {\n          return JSON.parse(localStorage$1.getItem(keyPrefix + name));\n        } catch (e) {}\n        return null;\n      },\n      set: function set(name, value) {\n        try {\n          localStorage$1.setItem(keyPrefix + name, JSON.stringify(value));\n          return true;\n        } catch (e) {}\n        return false;\n      },\n      remove: function remove(name) {\n        try {\n          localStorage$1.removeItem(keyPrefix + name);\n        } catch (e) {\n          return false;\n        }\n      }\n    };\n  }\n\n  return this.storage;\n};\n\nvar getUtmData = function getUtmData(rawCookie, query) {\n  // Translate the utmz cookie format into url query string format.\n  var cookie = rawCookie ? '?' + rawCookie.split('.').slice(-1)[0].replace(/\\|/g, '&') : '';\n\n  var fetchParam = function fetchParam(queryName, query, cookieName, cookie) {\n    return utils.getQueryParam(queryName, query) || utils.getQueryParam(cookieName, cookie);\n  };\n\n  var utmSource = fetchParam('utm_source', query, 'utmcsr', cookie);\n  var utmMedium = fetchParam('utm_medium', query, 'utmcmd', cookie);\n  var utmCampaign = fetchParam('utm_campaign', query, 'utmccn', cookie);\n  var utmTerm = fetchParam('utm_term', query, 'utmctr', cookie);\n  var utmContent = fetchParam('utm_content', query, 'utmcct', cookie);\n\n  var utmData = {};\n  var addIfNotNull = function addIfNotNull(key, value) {\n    if (!utils.isEmptyString(value)) {\n      utmData[key] = value;\n    }\n  };\n\n  addIfNotNull('utm_source', utmSource);\n  addIfNotNull('utm_medium', utmMedium);\n  addIfNotNull('utm_campaign', utmCampaign);\n  addIfNotNull('utm_term', utmTerm);\n  addIfNotNull('utm_content', utmContent);\n\n  return utmData;\n};\n\n/*\n * Wrapper for a user properties JSON object that supports operations.\n * Note: if a user property is used in multiple operations on the same Identify object,\n * only the first operation will be saved, and the rest will be ignored.\n */\n\nvar AMP_OP_ADD = '$add';\nvar AMP_OP_APPEND = '$append';\nvar AMP_OP_CLEAR_ALL = '$clearAll';\nvar AMP_OP_PREPEND = '$prepend';\nvar AMP_OP_SET = '$set';\nvar AMP_OP_SET_ONCE = '$setOnce';\nvar AMP_OP_UNSET = '$unset';\n\n/**\n * Identify API - instance constructor. Identify objects are a wrapper for user property operations.\n * Each method adds a user property operation to the Identify object, and returns the same Identify object,\n * allowing you to chain multiple method calls together.\n * Note: if the same user property is used in multiple operations on a single Identify object,\n * only the first operation on that property will be saved, and the rest will be ignored.\n * See [Readme]{@link https://github.com/amplitude/Amplitude-Javascript#user-properties-and-user-property-operations}\n * for more information on the Identify API and user property operations.\n * @constructor Identify\n * @public\n * @example var identify = new amplitude.Identify();\n */\nvar Identify = function Identify() {\n  this.userPropertiesOperations = {};\n  this.properties = []; // keep track of keys that have been added\n};\n\n/**\n * Increment a user property by a given value (can also be negative to decrement).\n * If the user property does not have a value set yet, it will be initialized to 0 before being incremented.\n * @public\n * @param {string} property - The user property key.\n * @param {number|string} value - The amount by which to increment the user property. Allows numbers as strings (ex: '123').\n * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n * @example var identify = new amplitude.Identify().add('karma', 1).add('friends', 1);\n * amplitude.identify(identify); // send the Identify call\n */\nIdentify.prototype.add = function (property, value) {\n  if (type(value) === 'number' || type(value) === 'string') {\n    this._addOperation(AMP_OP_ADD, property, value);\n  } else {\n    utils.log.error('Unsupported type for value: ' + type(value) + ', expecting number or string');\n  }\n  return this;\n};\n\n/**\n * Append a value or values to a user property.\n * If the user property does not have a value set yet,\n * it will be initialized to an empty list before the new values are appended.\n * If the user property has an existing value and it is not a list,\n * the existing value will be converted into a list with the new values appended.\n * @public\n * @param {string} property - The user property key.\n * @param {number|string|list|object} value - A value or values to append.\n * Values can be numbers, strings, lists, or object (key:value dict will be flattened).\n * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n * @example var identify = new amplitude.Identify().append('ab-tests', 'new-user-tests');\n * identify.append('some_list', [1, 2, 3, 4, 'values']);\n * amplitude.identify(identify); // send the Identify call\n */\nIdentify.prototype.append = function (property, value) {\n  this._addOperation(AMP_OP_APPEND, property, value);\n  return this;\n};\n\n/**\n * Clear all user properties for the current user.\n * SDK user should instead call amplitude.clearUserProperties() instead of using this.\n * $clearAll needs to be sent on its own Identify object. If there are already other operations, then don't add $clearAll.\n * If $clearAll already in an Identify object, don't allow other operations to be added.\n * @private\n */\nIdentify.prototype.clearAll = function () {\n  if (Object.keys(this.userPropertiesOperations).length > 0) {\n    if (!this.userPropertiesOperations.hasOwnProperty(AMP_OP_CLEAR_ALL)) {\n      utils.log.error('Need to send $clearAll on its own Identify object without any other operations, skipping $clearAll');\n    }\n    return this;\n  }\n  this.userPropertiesOperations[AMP_OP_CLEAR_ALL] = '-';\n  return this;\n};\n\n/**\n * Prepend a value or values to a user property.\n * Prepend means inserting the value or values at the front of a list.\n * If the user property does not have a value set yet,\n * it will be initialized to an empty list before the new values are prepended.\n * If the user property has an existing value and it is not a list,\n * the existing value will be converted into a list with the new values prepended.\n * @public\n * @param {string} property - The user property key.\n * @param {number|string|list|object} value - A value or values to prepend.\n * Values can be numbers, strings, lists, or object (key:value dict will be flattened).\n * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n * @example var identify = new amplitude.Identify().prepend('ab-tests', 'new-user-tests');\n * identify.prepend('some_list', [1, 2, 3, 4, 'values']);\n * amplitude.identify(identify); // send the Identify call\n */\nIdentify.prototype.prepend = function (property, value) {\n  this._addOperation(AMP_OP_PREPEND, property, value);\n  return this;\n};\n\n/**\n * Sets the value of a given user property. If a value already exists, it will be overwriten with the new value.\n * @public\n * @param {string} property - The user property key.\n * @param {number|string|list|object} value - A value or values to set.\n * Values can be numbers, strings, lists, or object (key:value dict will be flattened).\n * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n * @example var identify = new amplitude.Identify().set('user_type', 'beta');\n * identify.set('name', {'first': 'John', 'last': 'Doe'}); // dict is flattened and becomes name.first: John, name.last: Doe\n * amplitude.identify(identify); // send the Identify call\n */\nIdentify.prototype.set = function (property, value) {\n  this._addOperation(AMP_OP_SET, property, value);\n  return this;\n};\n\n/**\n * Sets the value of a given user property only once. Subsequent setOnce operations on that user property will be ignored;\n * however, that user property can still be modified through any of the other operations.\n * Useful for capturing properties such as 'initial_signup_date', 'initial_referrer', etc.\n * @public\n * @param {string} property - The user property key.\n * @param {number|string|list|object} value - A value or values to set once.\n * Values can be numbers, strings, lists, or object (key:value dict will be flattened).\n * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n * @example var identify = new amplitude.Identify().setOnce('sign_up_date', '2016-04-01');\n * amplitude.identify(identify); // send the Identify call\n */\nIdentify.prototype.setOnce = function (property, value) {\n  this._addOperation(AMP_OP_SET_ONCE, property, value);\n  return this;\n};\n\n/**\n * Unset and remove a user property. This user property will no longer show up in a user's profile.\n * @public\n * @param {string} property - The user property key.\n * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n * @example var identify = new amplitude.Identify().unset('user_type').unset('age');\n * amplitude.identify(identify); // send the Identify call\n */\nIdentify.prototype.unset = function (property) {\n  this._addOperation(AMP_OP_UNSET, property, '-');\n  return this;\n};\n\n/**\n * Helper function that adds operation to the Identify's object\n * Handle's filtering of duplicate user property keys, and filtering for clearAll.\n * @private\n */\nIdentify.prototype._addOperation = function (operation, property, value) {\n  // check that the identify doesn't already contain a clearAll\n  if (this.userPropertiesOperations.hasOwnProperty(AMP_OP_CLEAR_ALL)) {\n    utils.log.error('This identify already contains a $clearAll operation, skipping operation ' + operation);\n    return;\n  }\n\n  // check that property wasn't already used in this Identify\n  if (this.properties.indexOf(property) !== -1) {\n    utils.log.error('User property \"' + property + '\" already used in this identify, skipping operation ' + operation);\n    return;\n  }\n\n  if (!this.userPropertiesOperations.hasOwnProperty(operation)) {\n    this.userPropertiesOperations[operation] = {};\n  }\n  this.userPropertiesOperations[operation][property] = value;\n  this.properties.push(property);\n};\n\nvar md5 = createCommonjsModule(function (module) {\n/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/* global define */\n\n(function ($) {\n  'use strict';\n\n  /*\n  * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n  * to work around bugs in some JS interpreters.\n  */\n  function safeAdd (x, y) {\n    var lsw = (x & 0xffff) + (y & 0xffff);\n    var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n    return (msw << 16) | (lsw & 0xffff)\n  }\n\n  /*\n  * Bitwise rotate a 32-bit number to the left.\n  */\n  function bitRotateLeft (num, cnt) {\n    return (num << cnt) | (num >>> (32 - cnt))\n  }\n\n  /*\n  * These functions implement the four basic operations the algorithm uses.\n  */\n  function md5cmn (q, a, b, x, s, t) {\n    return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b)\n  }\n  function md5ff (a, b, c, d, x, s, t) {\n    return md5cmn((b & c) | (~b & d), a, b, x, s, t)\n  }\n  function md5gg (a, b, c, d, x, s, t) {\n    return md5cmn((b & d) | (c & ~d), a, b, x, s, t)\n  }\n  function md5hh (a, b, c, d, x, s, t) {\n    return md5cmn(b ^ c ^ d, a, b, x, s, t)\n  }\n  function md5ii (a, b, c, d, x, s, t) {\n    return md5cmn(c ^ (b | ~d), a, b, x, s, t)\n  }\n\n  /*\n  * Calculate the MD5 of an array of little-endian words, and a bit length.\n  */\n  function binlMD5 (x, len) {\n    /* append padding */\n    x[len >> 5] |= 0x80 << (len % 32);\n    x[((len + 64) >>> 9 << 4) + 14] = len;\n\n    var i;\n    var olda;\n    var oldb;\n    var oldc;\n    var oldd;\n    var a = 1732584193;\n    var b = -271733879;\n    var c = -1732584194;\n    var d = 271733878;\n\n    for (i = 0; i < x.length; i += 16) {\n      olda = a;\n      oldb = b;\n      oldc = c;\n      oldd = d;\n\n      a = md5ff(a, b, c, d, x[i], 7, -680876936);\n      d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n      c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n      b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n      a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n      d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n      c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n      b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n      a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n      d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n      c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n      b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n      a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n      d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n      c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n      b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n      a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n      d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n      c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n      b = md5gg(b, c, d, a, x[i], 20, -373897302);\n      a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n      d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n      c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n      b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n      a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n      d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n      c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n      b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n      a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n      d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n      c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n      b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n      a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n      d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n      c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n      b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n      a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n      d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n      c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n      b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n      a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n      d = md5hh(d, a, b, c, x[i], 11, -358537222);\n      c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n      b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n      a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n      d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n      c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n      b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n      a = md5ii(a, b, c, d, x[i], 6, -198630844);\n      d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n      c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n      b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n      a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n      d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n      c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n      b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n      a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n      d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n      c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n      b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n      a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n      d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n      c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n      b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n      a = safeAdd(a, olda);\n      b = safeAdd(b, oldb);\n      c = safeAdd(c, oldc);\n      d = safeAdd(d, oldd);\n    }\n    return [a, b, c, d]\n  }\n\n  /*\n  * Convert an array of little-endian words to a string\n  */\n  function binl2rstr (input) {\n    var i;\n    var output = '';\n    var length32 = input.length * 32;\n    for (i = 0; i < length32; i += 8) {\n      output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n    }\n    return output\n  }\n\n  /*\n  * Convert a raw string to an array of little-endian words\n  * Characters >255 have their high-byte silently ignored.\n  */\n  function rstr2binl (input) {\n    var i;\n    var output = [];\n    output[(input.length >> 2) - 1] = undefined;\n    for (i = 0; i < output.length; i += 1) {\n      output[i] = 0;\n    }\n    var length8 = input.length * 8;\n    for (i = 0; i < length8; i += 8) {\n      output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n    }\n    return output\n  }\n\n  /*\n  * Calculate the MD5 of a raw string\n  */\n  function rstrMD5 (s) {\n    return binl2rstr(binlMD5(rstr2binl(s), s.length * 8))\n  }\n\n  /*\n  * Calculate the HMAC-MD5, of a key and some data (raw strings)\n  */\n  function rstrHMACMD5 (key, data) {\n    var i;\n    var bkey = rstr2binl(key);\n    var ipad = [];\n    var opad = [];\n    var hash;\n    ipad[15] = opad[15] = undefined;\n    if (bkey.length > 16) {\n      bkey = binlMD5(bkey, key.length * 8);\n    }\n    for (i = 0; i < 16; i += 1) {\n      ipad[i] = bkey[i] ^ 0x36363636;\n      opad[i] = bkey[i] ^ 0x5c5c5c5c;\n    }\n    hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n    return binl2rstr(binlMD5(opad.concat(hash), 512 + 128))\n  }\n\n  /*\n  * Convert a raw string to a hex string\n  */\n  function rstr2hex (input) {\n    var hexTab = '0123456789abcdef';\n    var output = '';\n    var x;\n    var i;\n    for (i = 0; i < input.length; i += 1) {\n      x = input.charCodeAt(i);\n      output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n    }\n    return output\n  }\n\n  /*\n  * Encode a string as utf-8\n  */\n  function str2rstrUTF8 (input) {\n    return unescape(encodeURIComponent(input))\n  }\n\n  /*\n  * Take string arguments and return either raw or hex encoded strings\n  */\n  function rawMD5 (s) {\n    return rstrMD5(str2rstrUTF8(s))\n  }\n  function hexMD5 (s) {\n    return rstr2hex(rawMD5(s))\n  }\n  function rawHMACMD5 (k, d) {\n    return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d))\n  }\n  function hexHMACMD5 (k, d) {\n    return rstr2hex(rawHMACMD5(k, d))\n  }\n\n  function md5 (string, key, raw) {\n    if (!key) {\n      if (!raw) {\n        return hexMD5(string)\n      }\n      return rawMD5(string)\n    }\n    if (!raw) {\n      return hexHMACMD5(key, string)\n    }\n    return rawHMACMD5(key, string)\n  }\n\n  if (typeof undefined === 'function' && undefined.amd) {\n    undefined(function () {\n      return md5\n    });\n  } else if ('object' === 'object' && module.exports) {\n    module.exports = md5;\n  } else {\n    $.md5 = md5;\n  }\n})(commonjsGlobal);\n});\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nvar _listCacheClear = listCacheClear;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nvar eq_1 = eq;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq_1(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nvar _assocIndexOf = assocIndexOf;\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = _assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nvar _listCacheDelete = listCacheDelete;\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = _assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nvar _listCacheGet = listCacheGet;\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return _assocIndexOf(this.__data__, key) > -1;\n}\n\nvar _listCacheHas = listCacheHas;\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = _assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nvar _listCacheSet = listCacheSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = _listCacheClear;\nListCache.prototype['delete'] = _listCacheDelete;\nListCache.prototype.get = _listCacheGet;\nListCache.prototype.has = _listCacheHas;\nListCache.prototype.set = _listCacheSet;\n\nvar _ListCache = ListCache;\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new _ListCache;\n  this.size = 0;\n}\n\nvar _stackClear = stackClear;\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nvar _stackDelete = stackDelete;\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nvar _stackGet = stackGet;\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nvar _stackHas = stackHas;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n\nvar _freeGlobal = freeGlobal;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = _freeGlobal || freeSelf || Function('return this')();\n\nvar _root = root;\n\n/** Built-in value references. */\nvar Symbol$1 = _root.Symbol;\n\nvar _Symbol = Symbol$1;\n\n/** Used for built-in method references. */\nvar objectProto$1 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$1 = objectProto$1.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto$1.toString;\n\n/** Built-in value references. */\nvar symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty$1.call(value, symToStringTag$1),\n      tag = value[symToStringTag$1];\n\n  try {\n    value[symToStringTag$1] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag$1] = tag;\n    } else {\n      delete value[symToStringTag$1];\n    }\n  }\n  return result;\n}\n\nvar _getRawTag = getRawTag;\n\n/** Used for built-in method references. */\nvar objectProto$2 = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString$1 = objectProto$2.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString$1.call(value);\n}\n\nvar _objectToString = objectToString;\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]';\nvar undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? _getRawTag(value)\n    : _objectToString(value);\n}\n\nvar _baseGetTag = baseGetTag;\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nvar isObject_1 = isObject;\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]';\nvar funcTag = '[object Function]';\nvar genTag = '[object GeneratorFunction]';\nvar proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject_1(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = _baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nvar isFunction_1 = isFunction;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = _root['__core-js_shared__'];\n\nvar _coreJsData = coreJsData;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nvar _isMasked = isMasked;\n\n/** Used for built-in method references. */\nvar funcProto$1 = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString$1 = funcProto$1.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString$1.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nvar _toSource = toSource;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype;\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject_1(value) || _isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(_toSource(value));\n}\n\nvar _baseIsNative = baseIsNative;\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nvar _getValue = getValue;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = _getValue(object, key);\n  return _baseIsNative(value) ? value : undefined;\n}\n\nvar _getNative = getNative;\n\n/* Built-in method references that are verified to be native. */\nvar Map = _getNative(_root, 'Map');\n\nvar _Map = Map;\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = _getNative(Object, 'create');\n\nvar _nativeCreate = nativeCreate;\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = _nativeCreate ? _nativeCreate(null) : {};\n  this.size = 0;\n}\n\nvar _hashClear = hashClear;\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nvar _hashDelete = hashDelete;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto$3 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$2 = objectProto$3.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (_nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty$2.call(data, key) ? data[key] : undefined;\n}\n\nvar _hashGet = hashGet;\n\n/** Used for built-in method references. */\nvar objectProto$4 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$3 = objectProto$4.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return _nativeCreate ? (data[key] !== undefined) : hasOwnProperty$3.call(data, key);\n}\n\nvar _hashHas = hashHas;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED$1 = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (_nativeCreate && value === undefined) ? HASH_UNDEFINED$1 : value;\n  return this;\n}\n\nvar _hashSet = hashSet;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = _hashClear;\nHash.prototype['delete'] = _hashDelete;\nHash.prototype.get = _hashGet;\nHash.prototype.has = _hashHas;\nHash.prototype.set = _hashSet;\n\nvar _Hash = Hash;\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new _Hash,\n    'map': new (_Map || _ListCache),\n    'string': new _Hash\n  };\n}\n\nvar _mapCacheClear = mapCacheClear;\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nvar _isKeyable = isKeyable;\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return _isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nvar _getMapData = getMapData;\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = _getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nvar _mapCacheDelete = mapCacheDelete;\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return _getMapData(this, key).get(key);\n}\n\nvar _mapCacheGet = mapCacheGet;\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return _getMapData(this, key).has(key);\n}\n\nvar _mapCacheHas = mapCacheHas;\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = _getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nvar _mapCacheSet = mapCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = _mapCacheClear;\nMapCache.prototype['delete'] = _mapCacheDelete;\nMapCache.prototype.get = _mapCacheGet;\nMapCache.prototype.has = _mapCacheHas;\nMapCache.prototype.set = _mapCacheSet;\n\nvar _MapCache = MapCache;\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof _ListCache) {\n    var pairs = data.__data__;\n    if (!_Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new _MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nvar _stackSet = stackSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new _ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = _stackClear;\nStack.prototype['delete'] = _stackDelete;\nStack.prototype.get = _stackGet;\nStack.prototype.has = _stackHas;\nStack.prototype.set = _stackSet;\n\nvar _Stack = Stack;\n\nvar defineProperty = (function() {\n  try {\n    var func = _getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nvar _defineProperty$1 = defineProperty;\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && _defineProperty$1) {\n    _defineProperty$1(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nvar _baseAssignValue = baseAssignValue;\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq_1(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    _baseAssignValue(object, key, value);\n  }\n}\n\nvar _assignMergeValue = assignMergeValue;\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nvar _createBaseFor = createBaseFor;\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = _createBaseFor();\n\nvar _baseFor = baseFor;\n\nvar _cloneBuffer = createCommonjsModule(function (module, exports) {\n/** Detect free variable `exports`. */\nvar freeExports = 'object' == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? _root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n});\n\n/** Built-in value references. */\nvar Uint8Array = _root.Uint8Array;\n\nvar _Uint8Array = Uint8Array;\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new _Uint8Array(result).set(new _Uint8Array(arrayBuffer));\n  return result;\n}\n\nvar _cloneArrayBuffer = cloneArrayBuffer;\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? _cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nvar _cloneTypedArray = cloneTypedArray;\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nvar _copyArray = copyArray;\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject_1(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nvar _baseCreate = baseCreate;\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nvar _overArg = overArg;\n\n/** Built-in value references. */\nvar getPrototype = _overArg(Object.getPrototypeOf, Object);\n\nvar _getPrototype = getPrototype;\n\n/** Used for built-in method references. */\nvar objectProto$5 = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$5;\n\n  return value === proto;\n}\n\nvar _isPrototype = isPrototype;\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !_isPrototype(object))\n    ? _baseCreate(_getPrototype(object))\n    : {};\n}\n\nvar _initCloneObject = initCloneObject;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nvar isObjectLike_1 = isObjectLike;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike_1(value) && _baseGetTag(value) == argsTag;\n}\n\nvar _baseIsArguments = baseIsArguments;\n\n/** Used for built-in method references. */\nvar objectProto$6 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$4 = objectProto$6.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto$6.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = _baseIsArguments(function() { return arguments; }()) ? _baseIsArguments : function(value) {\n  return isObjectLike_1(value) && hasOwnProperty$4.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nvar isArguments_1 = isArguments;\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nvar isArray_1 = isArray;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nvar isLength_1 = isLength;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength_1(value.length) && !isFunction_1(value);\n}\n\nvar isArrayLike_1 = isArrayLike;\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike_1(value) && isArrayLike_1(value);\n}\n\nvar isArrayLikeObject_1 = isArrayLikeObject;\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nvar stubFalse_1 = stubFalse;\n\nvar isBuffer_1 = createCommonjsModule(function (module, exports) {\n/** Detect free variable `exports`. */\nvar freeExports = 'object' == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? _root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse_1;\n\nmodule.exports = isBuffer;\n});\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto$2 = Function.prototype;\nvar objectProto$7 = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString$2 = funcProto$2.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$5 = objectProto$7.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString$2.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike_1(value) || _baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = _getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty$5.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString$2.call(Ctor) == objectCtorString;\n}\n\nvar isPlainObject_1 = isPlainObject;\n\n/** `Object#toString` result references. */\nvar argsTag$1 = '[object Arguments]';\nvar arrayTag = '[object Array]';\nvar boolTag = '[object Boolean]';\nvar dateTag = '[object Date]';\nvar errorTag = '[object Error]';\nvar funcTag$1 = '[object Function]';\nvar mapTag = '[object Map]';\nvar numberTag = '[object Number]';\nvar objectTag$1 = '[object Object]';\nvar regexpTag = '[object RegExp]';\nvar setTag = '[object Set]';\nvar stringTag = '[object String]';\nvar weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]';\nvar dataViewTag = '[object DataView]';\nvar float32Tag = '[object Float32Array]';\nvar float64Tag = '[object Float64Array]';\nvar int8Tag = '[object Int8Array]';\nvar int16Tag = '[object Int16Array]';\nvar int32Tag = '[object Int32Array]';\nvar uint8Tag = '[object Uint8Array]';\nvar uint8ClampedTag = '[object Uint8ClampedArray]';\nvar uint16Tag = '[object Uint16Array]';\nvar uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag$1] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag$1] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag$1] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike_1(value) &&\n    isLength_1(value.length) && !!typedArrayTags[_baseGetTag(value)];\n}\n\nvar _baseIsTypedArray = baseIsTypedArray;\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nvar _baseUnary = baseUnary;\n\nvar _nodeUtil = createCommonjsModule(function (module, exports) {\n/** Detect free variable `exports`. */\nvar freeExports = 'object' == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && _freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n});\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = _nodeUtil && _nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? _baseUnary(nodeIsTypedArray) : _baseIsTypedArray;\n\nvar isTypedArray_1 = isTypedArray;\n\n/** Used for built-in method references. */\nvar objectProto$8 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$6 = objectProto$8.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty$6.call(object, key) && eq_1(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    _baseAssignValue(object, key, value);\n  }\n}\n\nvar _assignValue = assignValue;\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      _baseAssignValue(object, key, newValue);\n    } else {\n      _assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nvar _copyObject = copyObject;\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nvar _baseTimes = baseTimes;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER$1 = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER$1 : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\n\nvar _isIndex = isIndex;\n\n/** Used for built-in method references. */\nvar objectProto$9 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$7 = objectProto$9.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray_1(value),\n      isArg = !isArr && isArguments_1(value),\n      isBuff = !isArr && !isArg && isBuffer_1(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray_1(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? _baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty$7.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           _isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nvar _arrayLikeKeys = arrayLikeKeys;\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nvar _nativeKeysIn = nativeKeysIn;\n\n/** Used for built-in method references. */\nvar objectProto$10 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$8 = objectProto$10.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject_1(object)) {\n    return _nativeKeysIn(object);\n  }\n  var isProto = _isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty$8.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nvar _baseKeysIn = baseKeysIn;\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike_1(object) ? _arrayLikeKeys(object, true) : _baseKeysIn(object);\n}\n\nvar keysIn_1 = keysIn;\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return _copyObject(value, keysIn_1(value));\n}\n\nvar toPlainObject_1 = toPlainObject;\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = object[key],\n      srcValue = source[key],\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    _assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray_1(srcValue),\n        isBuff = !isArr && isBuffer_1(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray_1(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray_1(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject_1(objValue)) {\n        newValue = _copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = _cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = _cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject_1(srcValue) || isArguments_1(srcValue)) {\n      newValue = objValue;\n      if (isArguments_1(objValue)) {\n        newValue = toPlainObject_1(objValue);\n      }\n      else if (!isObject_1(objValue) || (srcIndex && isFunction_1(objValue))) {\n        newValue = _initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  _assignMergeValue(object, key, newValue);\n}\n\nvar _baseMergeDeep = baseMergeDeep;\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  _baseFor(source, function(srcValue, key) {\n    if (isObject_1(srcValue)) {\n      stack || (stack = new _Stack);\n      _baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(object[key], srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      _assignMergeValue(object, key, newValue);\n    }\n  }, keysIn_1);\n}\n\nvar _baseMerge = baseMerge;\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nvar identity_1 = identity;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nvar _apply = apply;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return _apply(func, this, otherArgs);\n  };\n}\n\nvar _overRest = overRest;\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nvar constant_1 = constant;\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !_defineProperty$1 ? identity_1 : function(func, string) {\n  return _defineProperty$1(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant_1(string),\n    'writable': true\n  });\n};\n\nvar _baseSetToString = baseSetToString;\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800;\nvar HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nvar _shortOut = shortOut;\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = _shortOut(_baseSetToString);\n\nvar _setToString = setToString;\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return _setToString(_overRest(func, start, identity_1), func + '');\n}\n\nvar _baseRest = baseRest;\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject_1(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike_1(object) && _isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq_1(object[index], value);\n  }\n  return false;\n}\n\nvar _isIterateeCall = isIterateeCall;\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return _baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && _isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nvar _createAssigner = createAssigner;\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = _createAssigner(function(object, source, srcIndex) {\n  _baseMerge(object, source, srcIndex);\n});\n\nvar merge_1$1 = merge;\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty$9(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\nvar isArray$2 = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\nfunction stringifyPrimitive(v) {\n  switch (typeof v) {\n    case 'string':\n      return v;\n\n    case 'boolean':\n      return v ? 'true' : 'false';\n\n    case 'number':\n      return isFinite(v) ? v : '';\n\n    default:\n      return '';\n  }\n}\n\nfunction stringify (obj, sep, eq, name) {\n  sep = sep || '&';\n  eq = eq || '=';\n  if (obj === null) {\n    obj = undefined;\n  }\n\n  if (typeof obj === 'object') {\n    return map(objectKeys(obj), function(k) {\n      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n      if (isArray$2(obj[k])) {\n        return map(obj[k], function(v) {\n          return ks + encodeURIComponent(stringifyPrimitive(v));\n        }).join(sep);\n      } else {\n        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n      }\n    }).join(sep);\n\n  }\n\n  if (!name) return '';\n  return encodeURIComponent(stringifyPrimitive(name)) + eq +\n         encodeURIComponent(stringifyPrimitive(obj));\n}\n\nfunction map (xs, f) {\n  if (xs.map) return xs.map(f);\n  var res = [];\n  for (var i = 0; i < xs.length; i++) {\n    res.push(f(xs[i], i));\n  }\n  return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n  var res = [];\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n  }\n  return res;\n};\n\nfunction parse$2(qs, sep, eq, options) {\n  sep = sep || '&';\n  eq = eq || '=';\n  var obj = {};\n\n  if (typeof qs !== 'string' || qs.length === 0) {\n    return obj;\n  }\n\n  var regexp = /\\+/g;\n  qs = qs.split(sep);\n\n  var maxKeys = 1000;\n  if (options && typeof options.maxKeys === 'number') {\n    maxKeys = options.maxKeys;\n  }\n\n  var len = qs.length;\n  // maxKeys <= 0 means that we should not limit keys count\n  if (maxKeys > 0 && len > maxKeys) {\n    len = maxKeys;\n  }\n\n  for (var i = 0; i < len; ++i) {\n    var x = qs[i].replace(regexp, '%20'),\n        idx = x.indexOf(eq),\n        kstr, vstr, k, v;\n\n    if (idx >= 0) {\n      kstr = x.substr(0, idx);\n      vstr = x.substr(idx + 1);\n    } else {\n      kstr = x;\n      vstr = '';\n    }\n\n    k = decodeURIComponent(kstr);\n    v = decodeURIComponent(vstr);\n\n    if (!hasOwnProperty$9(obj, k)) {\n      obj[k] = v;\n    } else if (isArray$2(obj[k])) {\n      obj[k].push(v);\n    } else {\n      obj[k] = [obj[k], v];\n    }\n  }\n\n  return obj;\n}\nvar querystring = {\n  encode: stringify,\n  stringify: stringify,\n  decode: parse$2,\n  parse: parse$2\n};\n\n/*\n * Simple AJAX request object\n */\nvar Request = function Request(url, data) {\n  this.url = url;\n  this.data = data || {};\n};\n\nRequest.prototype.send = function (callback) {\n  var isIE = window.XDomainRequest ? true : false;\n  if (isIE) {\n    var xdr = new window.XDomainRequest();\n    xdr.open('POST', this.url, true);\n    xdr.onload = function () {\n      callback(200, xdr.responseText);\n    };\n    xdr.onerror = function () {\n      // status code not available from xdr, try string matching on responseText\n      if (xdr.responseText === 'Request Entity Too Large') {\n        callback(413, xdr.responseText);\n      } else {\n        callback(500, xdr.responseText);\n      }\n    };\n    xdr.ontimeout = function () {};\n    xdr.onprogress = function () {};\n    xdr.send(querystring.stringify(this.data));\n  } else {\n    var xhr = new XMLHttpRequest();\n    xhr.open('POST', this.url, true);\n    xhr.onreadystatechange = function () {\n      if (xhr.readyState === 4) {\n        callback(xhr.status, xhr.responseText);\n      }\n    };\n    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n    xhr.send(querystring.stringify(this.data));\n  }\n  //log('sent request to ' + this.url + ' with data ' + decodeURIComponent(queryString(this.data)));\n};\n\n/*\n * Wrapper for logging Revenue data. Revenue objects get passed to amplitude.logRevenueV2 to send to Amplitude servers.\n * Note: price is the only required field. If quantity is not specified, then defaults to 1.\n */\n\n/**\n * Revenue API - instance constructor. Revenue objects are a wrapper for revenue data.\n * Each method updates a revenue property in the Revenue object, and returns the same Revenue object,\n * allowing you to chain multiple method calls together.\n * Note: price is a required field to log revenue events.\n * If quantity is not specified then defaults to 1.\n * See [Readme]{@link https://github.com/amplitude/Amplitude-Javascript#tracking-revenue} for more information\n * about logging Revenue.\n * @constructor Revenue\n * @public\n * @example var revenue = new amplitude.Revenue();\n */\nvar Revenue = function Revenue() {\n  // required fields\n  this._price = null;\n\n  // optional fields\n  this._productId = null;\n  this._quantity = 1;\n  this._revenueType = null;\n  this._properties = null;\n};\n\n/**\n * Set a value for the product identifer.\n * @public\n * @param {string} productId - The value for the product identifier. Empty and invalid strings are ignored.\n * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99);\n * amplitude.logRevenueV2(revenue);\n */\nRevenue.prototype.setProductId = function setProductId(productId) {\n  if (type(productId) !== 'string') {\n    utils.log.error('Unsupported type for productId: ' + type(productId) + ', expecting string');\n  } else if (utils.isEmptyString(productId)) {\n    utils.log.error('Invalid empty productId');\n  } else {\n    this._productId = productId;\n  }\n  return this;\n};\n\n/**\n * Set a value for the quantity. Note revenue amount is calculated as price * quantity.\n * @public\n * @param {number} quantity - Integer value for the quantity. If not set, quantity defaults to 1.\n * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99).setQuantity(5);\n * amplitude.logRevenueV2(revenue);\n */\nRevenue.prototype.setQuantity = function setQuantity(quantity) {\n  if (type(quantity) !== 'number') {\n    utils.log.error('Unsupported type for quantity: ' + type(quantity) + ', expecting number');\n  } else {\n    this._quantity = parseInt(quantity);\n  }\n  return this;\n};\n\n/**\n * Set a value for the price. This field is required for all revenue being logged.\n * Note revenue amount is calculated as price * quantity.\n * @public\n * @param {number} price - Double value for the quantity.\n * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99);\n * amplitude.logRevenueV2(revenue);\n */\nRevenue.prototype.setPrice = function setPrice(price) {\n  if (type(price) !== 'number') {\n    utils.log.error('Unsupported type for price: ' + type(price) + ', expecting number');\n  } else {\n    this._price = price;\n  }\n  return this;\n};\n\n/**\n * Set a value for the revenueType (for example purchase, cost, tax, refund, etc).\n * @public\n * @param {string} revenueType - RevenueType to designate.\n * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99).setRevenueType('purchase');\n * amplitude.logRevenueV2(revenue);\n */\nRevenue.prototype.setRevenueType = function setRevenueType(revenueType) {\n  if (type(revenueType) !== 'string') {\n    utils.log.error('Unsupported type for revenueType: ' + type(revenueType) + ', expecting string');\n  } else {\n    this._revenueType = revenueType;\n  }\n  return this;\n};\n\n/**\n * Set event properties for the revenue event.\n * @public\n * @param {object} eventProperties - Revenue event properties to set.\n * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n * @example var event_properties = {'city': 'San Francisco'};\n * var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99).setEventProperties(event_properties);\n * amplitude.logRevenueV2(revenue);\n*/\nRevenue.prototype.setEventProperties = function setEventProperties(eventProperties) {\n  if (type(eventProperties) !== 'object') {\n    utils.log.error('Unsupported type for eventProperties: ' + type(eventProperties) + ', expecting object');\n  } else {\n    this._properties = utils.validateProperties(eventProperties);\n  }\n  return this;\n};\n\n/**\n * @private\n */\nRevenue.prototype._isValidRevenue = function _isValidRevenue() {\n  if (type(this._price) !== 'number') {\n    utils.log.error('Invalid revenue, need to set price field');\n    return false;\n  }\n  return true;\n};\n\n/**\n * @private\n */\nRevenue.prototype._toJSONObject = function _toJSONObject() {\n  var obj = type(this._properties) === 'object' ? this._properties : {};\n\n  if (this._productId !== null) {\n    obj[constants.REVENUE_PRODUCT_ID] = this._productId;\n  }\n  if (this._quantity !== null) {\n    obj[constants.REVENUE_QUANTITY] = this._quantity;\n  }\n  if (this._price !== null) {\n    obj[constants.REVENUE_PRICE] = this._price;\n  }\n  if (this._revenueType !== null) {\n    obj[constants.REVENUE_REVENUE_TYPE] = this._revenueType;\n  }\n  return obj;\n};\n\nvar uaParser = createCommonjsModule(function (module, exports) {\n/* jshint eqeqeq: false, forin: false */\n/* global define */\n\n/**\n * UAParser.js v0.7.10\n * Lightweight JavaScript-based User-Agent string parser\n * https://github.com/faisalman/ua-parser-js\n *\n * Copyright © 2012-2015 Faisal Salman <fyzlman@gmail.com>\n * Dual licensed under GPLv2 & MIT\n */\n\n(function (window, undefined) {\n\n    'use strict';\n\n    //////////////\n    // Constants\n    /////////////\n\n\n    var LIBVERSION  = '0.7.10',\n        EMPTY       = '',\n        UNKNOWN     = '?',\n        FUNC_TYPE   = 'function',\n        UNDEF_TYPE  = 'undefined',\n        OBJ_TYPE    = 'object',\n        STR_TYPE    = 'string',\n        MAJOR       = 'major', // deprecated\n        MODEL       = 'model',\n        NAME        = 'name',\n        TYPE        = 'type',\n        VENDOR      = 'vendor',\n        VERSION     = 'version',\n        ARCHITECTURE= 'architecture',\n        CONSOLE     = 'console',\n        MOBILE      = 'mobile',\n        TABLET      = 'tablet',\n        SMARTTV     = 'smarttv',\n        WEARABLE    = 'wearable',\n        EMBEDDED    = 'embedded';\n\n\n    ///////////\n    // Helper\n    //////////\n\n\n    var util = {\n        extend : function (regexes, extensions) {\n            var margedRegexes = {};\n            for (var i in regexes) {\n                if (extensions[i] && extensions[i].length % 2 === 0) {\n                    margedRegexes[i] = extensions[i].concat(regexes[i]);\n                } else {\n                    margedRegexes[i] = regexes[i];\n                }\n            }\n            return margedRegexes;\n        },\n        has : function (str1, str2) {\n          if (typeof str1 === \"string\") {\n            return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;\n          } else {\n            return false;\n          }\n        },\n        lowerize : function (str) {\n            return str.toLowerCase();\n        },\n        major : function (version) {\n            return typeof(version) === STR_TYPE ? version.split(\".\")[0] : undefined;\n        }\n    };\n\n\n    ///////////////\n    // Map helper\n    //////////////\n\n\n    var mapper = {\n\n        rgx : function () {\n\n            var result, i = 0, j, k, p, q, matches, match, args = arguments;\n\n            // loop through all regexes maps\n            while (i < args.length && !matches) {\n\n                var regex = args[i],       // even sequence (0,2,4,..)\n                    props = args[i + 1];   // odd sequence (1,3,5,..)\n\n                // construct object barebones\n                if (typeof result === UNDEF_TYPE) {\n                    result = {};\n                    for (p in props) {\n                        if (props.hasOwnProperty(p)){\n                            q = props[p];\n                            if (typeof q === OBJ_TYPE) {\n                                result[q[0]] = undefined;\n                            } else {\n                                result[q] = undefined;\n                            }\n                        }\n                    }\n                }\n\n                // try matching uastring with regexes\n                j = k = 0;\n                while (j < regex.length && !matches) {\n                    matches = regex[j++].exec(this.getUA());\n                    if (!!matches) {\n                        for (p = 0; p < props.length; p++) {\n                            match = matches[++k];\n                            q = props[p];\n                            // check if given property is actually array\n                            if (typeof q === OBJ_TYPE && q.length > 0) {\n                                if (q.length == 2) {\n                                    if (typeof q[1] == FUNC_TYPE) {\n                                        // assign modified match\n                                        result[q[0]] = q[1].call(this, match);\n                                    } else {\n                                        // assign given value, ignore regex match\n                                        result[q[0]] = q[1];\n                                    }\n                                } else if (q.length == 3) {\n                                    // check whether function or regex\n                                    if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n                                        // call function (usually string mapper)\n                                        result[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n                                    } else {\n                                        // sanitize match using given regex\n                                        result[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n                                    }\n                                } else if (q.length == 4) {\n                                        result[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n                                }\n                            } else {\n                                result[q] = match ? match : undefined;\n                            }\n                        }\n                    }\n                }\n                i += 2;\n            }\n            return result;\n        },\n\n        str : function (str, map) {\n\n            for (var i in map) {\n                // check if array\n                if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n                    for (var j = 0; j < map[i].length; j++) {\n                        if (util.has(map[i][j], str)) {\n                            return (i === UNKNOWN) ? undefined : i;\n                        }\n                    }\n                } else if (util.has(map[i], str)) {\n                    return (i === UNKNOWN) ? undefined : i;\n                }\n            }\n            return str;\n        }\n    };\n\n\n    ///////////////\n    // String map\n    //////////////\n\n\n    var maps = {\n\n        browser : {\n            oldsafari : {\n                version : {\n                    '1.0'   : '/8',\n                    '1.2'   : '/1',\n                    '1.3'   : '/3',\n                    '2.0'   : '/412',\n                    '2.0.2' : '/416',\n                    '2.0.3' : '/417',\n                    '2.0.4' : '/419',\n                    '?'     : '/'\n                }\n            },\n            name : {\n                'Opera Mobile' : 'Opera Mobi',\n                'IE Mobile'    : 'IEMobile'\n            }\n        },\n\n        device : {\n            amazon : {\n                model : {\n                    'Fire Phone' : ['SD', 'KF']\n                }\n            },\n            sprint : {\n                model : {\n                    'Evo Shift 4G' : '7373KT'\n                },\n                vendor : {\n                    'HTC'       : 'APA',\n                    'Sprint'    : 'Sprint'\n                }\n            }\n        },\n\n        os : {\n            windows : {\n                version : {\n                    'ME'        : '4.90',\n                    'NT 3.11'   : 'NT3.51',\n                    'NT 4.0'    : 'NT4.0',\n                    '2000'      : 'NT 5.0',\n                    'XP'        : ['NT 5.1', 'NT 5.2'],\n                    'Vista'     : 'NT 6.0',\n                    '7'         : 'NT 6.1',\n                    '8'         : 'NT 6.2',\n                    '8.1'       : 'NT 6.3',\n                    '10'        : ['NT 6.4', 'NT 10.0'],\n                    'RT'        : 'ARM'\n                },\n                name : {\n                    'Windows Phone' : 'Windows Phone OS',\n                }\n            }\n        }\n    };\n\n\n    //////////////\n    // Regex map\n    /////////////\n\n\n    var regexes = {\n\n        browser : [[\n\n            // Presto based\n            /(opera\\smini)\\/([\\w\\.-]+)/i,                                       // Opera Mini\n            /(opera\\s[mobiletab]+).+version\\/([\\w\\.-]+)/i,                      // Opera Mobi/Tablet\n            /(opera).+version\\/([\\w\\.]+)/i,                                     // Opera > 9.80\n            /(opera)[\\/\\s]+([\\w\\.]+)/i                                          // Opera < 9.80\n            ], [NAME, VERSION], [\n\n            /(OPiOS)[\\/\\s]+([\\w\\.]+)/i                                          // Opera mini on iphone >= 8.0\n            ], [[NAME, 'Opera Mini'], VERSION], [\n\n            /\\s(opr)\\/([\\w\\.]+)/i                                               // Opera Webkit\n            ], [[NAME, 'Opera'], VERSION], [\n\n            // Mixed\n            /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n            /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]+)*/i,\n                                                                                // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n\n            // Trident based\n            /(avant\\s|iemobile|slim|baidu)(?:browser)?[\\/\\s]?([\\w\\.]*)/i,\n                                                                                // Avant/IEMobile/SlimBrowser/Baidu\n            /(?:ms|\\()(ie)\\s([\\w\\.]+)/i,                                        // Internet Explorer\n\n            // Webkit/KHTML based\n            /(rekonq)\\/([\\w\\.]+)*/i,                                            // Rekonq\n            /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs)\\/([\\w\\.-]+)/i\n                                                                                // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS\n            ], [NAME, VERSION], [\n\n            /(trident).+rv[:\\s]([\\w\\.]+).+like\\sgecko/i                         // IE11\n            ], [[NAME, 'IE'], VERSION], [\n\n            /(edge)\\/((\\d+)?[\\w\\.]+)/i                                          // Microsoft Edge\n            ], [NAME, VERSION], [\n\n            /(yabrowser)\\/([\\w\\.]+)/i                                           // Yandex\n            ], [[NAME, 'Yandex'], VERSION], [\n\n            /(comodo_dragon)\\/([\\w\\.]+)/i                                       // Comodo Dragon\n            ], [[NAME, /_/g, ' '], VERSION], [\n\n            /((?:android.+)crmo|crios)\\/([\\w\\.]+)/i,\n            /android.+(chrome)\\/([\\w\\.]+)\\s+(?:mobile\\s?safari)/i               // Chrome for Android/iOS\n            ], [[NAME, 'Chrome Mobile'], VERSION], [\n\n            /(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i,\n                                                                                // Chrome/OmniWeb/Arora/Tizen/Nokia\n            /(qqbrowser)[\\/\\s]?([\\w\\.]+)/i\n                                                                                // QQBrowser\n            ], [NAME, VERSION], [\n\n            /(uc\\s?browser)[\\/\\s]?([\\w\\.]+)/i,\n            /ucweb.+(ucbrowser)[\\/\\s]?([\\w\\.]+)/i,\n            /JUC.+(ucweb)[\\/\\s]?([\\w\\.]+)/i\n                                                                                // UCBrowser\n            ], [[NAME, 'UCBrowser'], VERSION], [\n\n            /(dolfin)\\/([\\w\\.]+)/i                                              // Dolphin\n            ], [[NAME, 'Dolphin'], VERSION], [\n\n            /XiaoMi\\/MiuiBrowser\\/([\\w\\.]+)/i                                   // MIUI Browser\n            ], [VERSION, [NAME, 'MIUI Browser']], [\n\n            /android.+version\\/([\\w\\.]+)\\s+(?:mobile\\s?safari|safari)/i         // Android Browser\n            ], [VERSION, [NAME, 'Android Browser']], [\n\n            /FBAV\\/([\\w\\.]+);/i                                                 // Facebook App for iOS\n            ], [VERSION, [NAME, 'Facebook']], [\n\n            /fxios\\/([\\w\\.-]+)/i                                                // Firefox for iOS\n            ], [VERSION, [NAME, 'Firefox']], [\n\n            /version\\/([\\w\\.]+).+?mobile\\/\\w+\\s(safari)/i                       // Mobile Safari\n            ], [VERSION, [NAME, 'Mobile Safari']], [\n\n            /version\\/([\\w\\.]+).+?(mobile\\s?safari|safari)/i                    // Safari & Safari Mobile\n            ], [VERSION, NAME], [\n\n            /webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i                     // Safari < 3.0\n            ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [\n\n            /(konqueror)\\/([\\w\\.]+)/i,                                          // Konqueror\n            /(webkit|khtml)\\/([\\w\\.]+)/i\n            ], [NAME, VERSION], [\n\n            /(blackberry)\\\\s?\\/([\\w\\.]+)/i                                      // Blackberry\n            ], [[NAME, \"BlackBerry\"], VERSION], [\n\n            // Gecko based\n            /(navigator|netscape)\\/([\\w\\.-]+)/i                                 // Netscape\n            ], [[NAME, 'Netscape'], VERSION], [\n            /(swiftfox)/i,                                                      // Swiftfox\n            /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i,\n                                                                                // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n            /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\\/([\\w\\.-]+)/i,\n                                                                                // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n            /(mozilla)\\/([\\w\\.]+).+rv\\:.+gecko\\/\\d+/i,                          // Mozilla\n\n            // Other\n            /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i,\n                                                                                // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir\n            /(links)\\s\\(([\\w\\.]+)/i,                                            // Links\n            /(gobrowser)\\/?([\\w\\.]+)*/i,                                        // GoBrowser\n            /(ice\\s?browser)\\/v?([\\w\\._]+)/i,                                   // ICE Browser\n            /(mosaic)[\\/\\s]([\\w\\.]+)/i                                          // Mosaic\n            ], [NAME, VERSION]\n\n            /* /////////////////////\n            // Media players BEGIN\n            ////////////////////////\n\n            , [\n\n            /(apple(?:coremedia|))\\/((\\d+)[\\w\\._]+)/i,                          // Generic Apple CoreMedia\n            /(coremedia) v((\\d+)[\\w\\._]+)/i\n            ], [NAME, VERSION], [\n\n            /(aqualung|lyssna|bsplayer)\\/((\\d+)?[\\w\\.-]+)/i                     // Aqualung/Lyssna/BSPlayer\n            ], [NAME, VERSION], [\n\n            /(ares|ossproxy)\\s((\\d+)[\\w\\.-]+)/i                                 // Ares/OSSProxy\n            ], [NAME, VERSION], [\n\n            /(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\\/((\\d+)[\\w\\.-]+)/i,\n                                                                                // Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC\n                                                                                // NSPlayer/PSP-InternetRadioPlayer/Videos\n            /(clementine|music player daemon)\\s((\\d+)[\\w\\.-]+)/i,               // Clementine/MPD\n            /(lg player|nexplayer)\\s((\\d+)[\\d\\.]+)/i,\n            /player\\/(nexplayer|lg player)\\s((\\d+)[\\w\\.-]+)/i                   // NexPlayer/LG Player\n            ], [NAME, VERSION], [\n            /(nexplayer)\\s((\\d+)[\\w\\.-]+)/i                                     // Nexplayer\n            ], [NAME, VERSION], [\n\n            /(flrp)\\/((\\d+)[\\w\\.-]+)/i                                          // Flip Player\n            ], [[NAME, 'Flip Player'], VERSION], [\n\n            /(fstream|nativehost|queryseekspider|ia-archiver|facebookexternalhit)/i\n                                                                                // FStream/NativeHost/QuerySeekSpider/IA Archiver/facebookexternalhit\n            ], [NAME], [\n\n            /(gstreamer) souphttpsrc (?:\\([^\\)]+\\)){0,1} libsoup\\/((\\d+)[\\w\\.-]+)/i\n                                                                                // Gstreamer\n            ], [NAME, VERSION], [\n\n            /(htc streaming player)\\s[\\w_]+\\s\\/\\s((\\d+)[\\d\\.]+)/i,              // HTC Streaming Player\n            /(java|python-urllib|python-requests|wget|libcurl)\\/((\\d+)[\\w\\.-_]+)/i,\n                                                                                // Java/urllib/requests/wget/cURL\n            /(lavf)((\\d+)[\\d\\.]+)/i                                             // Lavf (FFMPEG)\n            ], [NAME, VERSION], [\n\n            /(htc_one_s)\\/((\\d+)[\\d\\.]+)/i                                      // HTC One S\n            ], [[NAME, /_/g, ' '], VERSION], [\n\n            /(mplayer)(?:\\s|\\/)(?:(?:sherpya-){0,1}svn)(?:-|\\s)(r\\d+(?:-\\d+[\\w\\.-]+){0,1})/i\n                                                                                // MPlayer SVN\n            ], [NAME, VERSION], [\n\n            /(mplayer)(?:\\s|\\/|[unkow-]+)((\\d+)[\\w\\.-]+)/i                      // MPlayer\n            ], [NAME, VERSION], [\n\n            /(mplayer)/i,                                                       // MPlayer (no other info)\n            /(yourmuze)/i,                                                      // YourMuze\n            /(media player classic|nero showtime)/i                             // Media Player Classic/Nero ShowTime\n            ], [NAME], [\n\n            /(nero (?:home|scout))\\/((\\d+)[\\w\\.-]+)/i                           // Nero Home/Nero Scout\n            ], [NAME, VERSION], [\n\n            /(nokia\\d+)\\/((\\d+)[\\w\\.-]+)/i                                      // Nokia\n            ], [NAME, VERSION], [\n\n            /\\s(songbird)\\/((\\d+)[\\w\\.-]+)/i                                    // Songbird/Philips-Songbird\n            ], [NAME, VERSION], [\n\n            /(winamp)3 version ((\\d+)[\\w\\.-]+)/i,                               // Winamp\n            /(winamp)\\s((\\d+)[\\w\\.-]+)/i,\n            /(winamp)mpeg\\/((\\d+)[\\w\\.-]+)/i\n            ], [NAME, VERSION], [\n\n            /(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i  // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)\n                                                                                // inlight radio\n            ], [NAME], [\n\n            /(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\\/((\\d+)[\\w\\.-]+)/i\n                                                                                // QuickTime/RealMedia/RadioApp/RadioClientApplication/\n                                                                                // SoundTap/Totem/Stagefright/Streamium\n            ], [NAME, VERSION], [\n\n            /(smp)((\\d+)[\\d\\.]+)/i                                              // SMP\n            ], [NAME, VERSION], [\n\n            /(vlc) media player - version ((\\d+)[\\w\\.]+)/i,                     // VLC Videolan\n            /(vlc)\\/((\\d+)[\\w\\.-]+)/i,\n            /(xbmc|gvfs|xine|xmms|irapp)\\/((\\d+)[\\w\\.-]+)/i,                    // XBMC/gvfs/Xine/XMMS/irapp\n            /(foobar2000)\\/((\\d+)[\\d\\.]+)/i,                                    // Foobar2000\n            /(itunes)\\/((\\d+)[\\d\\.]+)/i                                         // iTunes\n            ], [NAME, VERSION], [\n\n            /(wmplayer)\\/((\\d+)[\\w\\.-]+)/i,                                     // Windows Media Player\n            /(windows-media-player)\\/((\\d+)[\\w\\.-]+)/i\n            ], [[NAME, /-/g, ' '], VERSION], [\n\n            /windows\\/((\\d+)[\\w\\.-]+) upnp\\/[\\d\\.]+ dlnadoc\\/[\\d\\.]+ (home media server)/i\n                                                                                // Windows Media Server\n            ], [VERSION, [NAME, 'Windows']], [\n\n            /(com\\.riseupradioalarm)\\/((\\d+)[\\d\\.]*)/i                          // RiseUP Radio Alarm\n            ], [NAME, VERSION], [\n\n            /(rad.io)\\s((\\d+)[\\d\\.]+)/i,                                        // Rad.io\n            /(radio.(?:de|at|fr))\\s((\\d+)[\\d\\.]+)/i\n            ], [[NAME, 'rad.io'], VERSION]\n\n            //////////////////////\n            // Media players END\n            ////////////////////*/\n\n        ],\n\n        cpu : [[\n\n            /(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i                     // AMD64\n            ], [[ARCHITECTURE, 'amd64']], [\n\n            /(ia32(?=;))/i                                                      // IA32 (quicktime)\n            ], [[ARCHITECTURE, util.lowerize]], [\n\n            /((?:i[346]|x)86)[;\\)]/i                                            // IA32\n            ], [[ARCHITECTURE, 'ia32']], [\n\n            // PocketPC mistakenly identified as PowerPC\n            /windows\\s(ce|mobile);\\sppc;/i\n            ], [[ARCHITECTURE, 'arm']], [\n\n            /((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i                           // PowerPC\n            ], [[ARCHITECTURE, /ower/, '', util.lowerize]], [\n\n            /(sun4\\w)[;\\)]/i                                                    // SPARC\n            ], [[ARCHITECTURE, 'sparc']], [\n\n            /((?:avr32|ia64(?=;))|68k(?=\\))|arm(?:64|(?=v\\d+;))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i\n                                                                                // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n            ], [[ARCHITECTURE, util.lowerize]]\n        ],\n\n        device : [[\n\n            /\\((ipad|playbook);[\\w\\s\\);-]+(rim|apple)/i                         // iPad/PlayBook\n            ], [MODEL, VENDOR, [TYPE, TABLET]], [\n\n            /applecoremedia\\/[\\w\\.]+ \\((ipad)/                                  // iPad\n            ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [\n\n            /(apple\\s{0,1}tv)/i                                                 // Apple TV\n            ], [[MODEL, 'Apple TV'], [VENDOR, 'Apple']], [\n\n            /(archos)\\s(gamepad2?)/i,                                           // Archos\n            /(hp).+(touchpad)/i,                                                // HP TouchPad\n            /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n            /\\s(nook)[\\w\\s]+build\\/(\\w+)/i,                                     // Nook\n            /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i                                  // Dell Streak\n            ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n            /(kf[A-z]+)\\sbuild\\/[\\w\\.]+.*silk\\//i                               // Kindle Fire HD\n            ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n            /(sd|kf)[0349hijorstuw]+\\sbuild\\/[\\w\\.]+.*silk\\//i                  // Fire Phone\n            ], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [\n\n            /\\((ip[honed|\\s\\w*]+);.+(apple)/i                                   // iPod/iPhone\n            ], [MODEL, VENDOR, [TYPE, MOBILE]], [\n            /\\((ip[honed|\\s\\w*]+);/i                                            // iPod/iPhone\n            ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [\n\n            /(blackberry)[\\s-]?(\\w+)/i,                                         // BlackBerry\n            /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|huawei|meizu|motorola|polytron)[\\s_-]?([\\w-]+)*/i,\n                                                                                // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Huawei/Meizu/Motorola/Polytron\n            /(hp)\\s([\\w\\s]+\\w)/i,                                               // HP iPAQ\n            /(asus)-?(\\w+)/i                                                    // Asus\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n            /\\(bb10;\\s(\\w+)/i                                                   // BlackBerry 10\n            ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [\n                                                                                // Asus Tablets\n            /android.+(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus 7)/i\n            ], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [\n\n            /(sony)\\s(tablet\\s[ps])\\sbuild\\//i,                                  // Sony\n            /(sony)?(?:sgp.+)\\sbuild\\//i\n            ], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [\n            /(?:sony)?(?:(?:(?:c|d)\\d{4})|(?:so[-l].+))\\sbuild\\//i\n            ], [[VENDOR, 'Sony'], [MODEL, 'Xperia Phone'], [TYPE, MOBILE]], [\n\n            /\\s(ouya)\\s/i,                                                      // Ouya\n            /(nintendo)\\s([wids3u]+)/i                                          // Nintendo\n            ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n\n            /android.+;\\s(shield)\\sbuild/i                                      // Nvidia\n            ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n\n            /(playstation\\s[34portablevi]+)/i                                   // Playstation\n            ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [\n\n            /(sprint\\s(\\w+))/i                                                  // Sprint Phones\n            ], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [\n\n            /(lenovo)\\s?(S(?:5000|6000)+(?:[-][\\w+]))/i                         // Lenovo tablets\n            ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n            /(htc)[;_\\s-]+([\\w\\s]+(?=\\))|\\w+)*/i,                               // HTC\n            /(zte)-(\\w+)*/i,                                                    // ZTE\n            /(alcatel|geeksphone|huawei|lenovo|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]+)*/i\n                                                                                // Alcatel/GeeksPhone/Huawei/Lenovo/Nexian/Panasonic/Sony\n            ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n            /(nexus\\s9)/i                                                       // HTC Nexus 9\n            ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n\n            /[\\s\\(;](xbox(?:\\sone)?)[\\s\\);]/i                                   // Microsoft Xbox\n            ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [\n            /(kin\\.[onetw]{3})/i                                                // Microsoft Kin\n            ], [[MODEL, /\\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [\n\n                                                                                // Motorola\n            /\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?(:?\\s4g)?)[\\w\\s]+build\\//i,\n            /mot[\\s-]?(\\w+)*/i,\n            /(XT\\d{3,4}) build\\//i,\n            /(nexus\\s[6])/i\n            ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [\n            /android.+\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i\n            ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [\n\n            /android.+((sch-i[89]0\\d|shw-m380s|gt-p\\d{4}|gt-n8000|sgh-t8[56]9|nexus 10))/i,\n            /((SM-T\\w+))/i\n            ], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [                  // Samsung\n            /((s[cgp]h-\\w+|gt-\\w+|galaxy\\snexus|sm-n900))/i,\n            /(sam[sung]*)[\\s-]*(\\w+-?[\\w-]*)*/i,\n            /sec-((sgh\\w+))/i\n            ], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [\n            /(samsung);smarttv/i\n            ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n\n            /\\(dtv[\\);].+(aquos)/i                                              // Sharp\n            ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n            /sie-(\\w+)*/i                                                       // Siemens\n            ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n\n            /(maemo|nokia).*(n900|lumia\\s\\d+)/i,                                // Nokia\n            /(nokia)[\\s_-]?([\\w-]+)*/i\n            ], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [\n\n            /android\\s3\\.[\\s\\w;-]{10}(a\\d{3})/i                                 // Acer\n            ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n            /android\\s3\\.[\\s\\w;-]{10}(lg?)-([06cv9]{3,4})/i                     // LG Tablet\n            ], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [\n            /(lg) netcast\\.tv/i                                                 // LG SmartTV\n            ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n            /(nexus\\s[45])/i,                                                   // LG\n            /lg[e;\\s\\/-]+(\\w+)*/i\n            ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [\n\n            /android.+(ideatab[a-z0-9\\-\\s]+)/i                                  // Lenovo\n            ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n            /linux;.+((jolla));/i                                               // Jolla\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n            /((pebble))app\\/[\\d\\.]+\\s/i                                         // Pebble\n            ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n\n            /android.+;\\s(glass)\\s\\d/i                                          // Google Glass\n            ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [\n\n            /android.+(\\w+)\\s+build\\/hm\\1/i,                                        // Xiaomi Hongmi 'numeric' models\n            /android.+(hm[\\s\\-_]*note?[\\s_]*(?:\\d\\w)?)\\s+build/i,                   // Xiaomi Hongmi\n            /android.+(mi[\\s\\-_]*(?:one|one[\\s_]plus)?[\\s_]*(?:\\d\\w)?)\\s+build/i    // Xiaomi Mi\n            ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [\n\n            /\\s(tablet)[;\\/\\s]/i,                                               // Unidentifiable Tablet\n            /\\s(mobile)[;\\/\\s]/i                                                // Unidentifiable Mobile\n            ], [[TYPE, util.lowerize], VENDOR, MODEL]\n\n            /*//////////////////////////\n            // TODO: move to string map\n            ////////////////////////////\n\n            /(C6603)/i                                                          // Sony Xperia Z C6603\n            ], [[MODEL, 'Xperia Z C6603'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n            /(C6903)/i                                                          // Sony Xperia Z 1\n            ], [[MODEL, 'Xperia Z 1'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n\n            /(SM-G900[F|H])/i                                                   // Samsung Galaxy S5\n            ], [[MODEL, 'Galaxy S5'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n            /(SM-G7102)/i                                                       // Samsung Galaxy Grand 2\n            ], [[MODEL, 'Galaxy Grand 2'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n            /(SM-G530H)/i                                                       // Samsung Galaxy Grand Prime\n            ], [[MODEL, 'Galaxy Grand Prime'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n            /(SM-G313HZ)/i                                                      // Samsung Galaxy V\n            ], [[MODEL, 'Galaxy V'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n            /(SM-T805)/i                                                        // Samsung Galaxy Tab S 10.5\n            ], [[MODEL, 'Galaxy Tab S 10.5'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [\n            /(SM-G800F)/i                                                       // Samsung Galaxy S5 Mini\n            ], [[MODEL, 'Galaxy S5 Mini'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n            /(SM-T311)/i                                                        // Samsung Galaxy Tab 3 8.0\n            ], [[MODEL, 'Galaxy Tab 3 8.0'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [\n\n            /(R1001)/i                                                          // Oppo R1001\n            ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n            /(X9006)/i                                                          // Oppo Find 7a\n            ], [[MODEL, 'Find 7a'], [VENDOR, 'Oppo'], [TYPE, MOBILE]], [\n            /(R2001)/i                                                          // Oppo YOYO R2001\n            ], [[MODEL, 'Yoyo R2001'], [VENDOR, 'Oppo'], [TYPE, MOBILE]], [\n            /(R815)/i                                                           // Oppo Clover R815\n            ], [[MODEL, 'Clover R815'], [VENDOR, 'Oppo'], [TYPE, MOBILE]], [\n             /(U707)/i                                                          // Oppo Find Way S\n            ], [[MODEL, 'Find Way S'], [VENDOR, 'Oppo'], [TYPE, MOBILE]], [\n\n            /(T3C)/i                                                            // Advan Vandroid T3C\n            ], [MODEL, [VENDOR, 'Advan'], [TYPE, TABLET]], [\n            /(ADVAN T1J\\+)/i                                                    // Advan Vandroid T1J+\n            ], [[MODEL, 'Vandroid T1J+'], [VENDOR, 'Advan'], [TYPE, TABLET]], [\n            /(ADVAN S4A)/i                                                      // Advan Vandroid S4A\n            ], [[MODEL, 'Vandroid S4A'], [VENDOR, 'Advan'], [TYPE, MOBILE]], [\n\n            /(V972M)/i                                                          // ZTE V972M\n            ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n\n            /(i-mobile)\\s(IQ\\s[\\d\\.]+)/i                                        // i-mobile IQ\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n            /(IQ6.3)/i                                                          // i-mobile IQ IQ 6.3\n            ], [[MODEL, 'IQ 6.3'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [\n            /(i-mobile)\\s(i-style\\s[\\d\\.]+)/i                                   // i-mobile i-STYLE\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n            /(i-STYLE2.1)/i                                                     // i-mobile i-STYLE 2.1\n            ], [[MODEL, 'i-STYLE 2.1'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [\n\n            /(mobiistar touch LAI 512)/i                                        // mobiistar touch LAI 512\n            ], [[MODEL, 'Touch LAI 512'], [VENDOR, 'mobiistar'], [TYPE, MOBILE]], [\n\n            /////////////\n            // END TODO\n            ///////////*/\n\n        ],\n\n        engine : [[\n\n            /windows.+\\sedge\\/([\\w\\.]+)/i                                       // EdgeHTML\n            ], [VERSION, [NAME, 'EdgeHTML']], [\n\n            /(presto)\\/([\\w\\.]+)/i,                                             // Presto\n            /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\\/([\\w\\.]+)/i,     // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m\n            /(khtml|tasman|links)[\\/\\s]\\(?([\\w\\.]+)/i,                          // KHTML/Tasman/Links\n            /(icab)[\\/\\s]([23]\\.[\\d\\.]+)/i                                      // iCab\n            ], [NAME, VERSION], [\n\n            /rv\\:([\\w\\.]+).*(gecko)/i                                           // Gecko\n            ], [VERSION, NAME]\n        ],\n\n        os : [[\n\n            // Windows based\n            /microsoft\\s(windows)\\s(vista|xp)/i                                 // Windows (iTunes)\n            ], [NAME, VERSION], [\n            /(windows)\\snt\\s6\\.2;\\s(arm)/i,                                     // Windows RT\n            /(windows\\sphone(?:\\sos)*|windows\\smobile|windows)[\\s\\/]?([ntce\\d\\.\\s]+\\w)/i\n            ], [[NAME, mapper.str, maps.os.windows.name], [VERSION, mapper.str, maps.os.windows.version]], [\n            /(win(?=3|9|n)|win\\s9x\\s)([nt\\d\\.]+)/i\n            ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [\n\n            // Mobile/Embedded OS\n            /\\((bb)(10);/i                                                      // BlackBerry 10\n            ], [[NAME, 'BlackBerry'], VERSION], [\n            /(blackberry)\\w*\\/?([\\w\\.]+)*/i,                                    // Blackberry\n            /(tizen)[\\/\\s]([\\w\\.]+)/i,                                          // Tizen\n            /(android|webos|palm\\sos|qnx|bada|rim\\stablet\\sos|meego|contiki)[\\/\\s-]?([\\w\\.]+)*/i,\n                                                                                // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki\n            /linux;.+(sailfish);/i                                              // Sailfish OS\n            ], [NAME, VERSION], [\n            /(symbian\\s?o?s?|symbos|s60(?=;))[\\/\\s-]?([\\w\\.]+)*/i               // Symbian\n            ], [[NAME, 'Symbian'], VERSION], [\n            /\\((series40);/i                                                    // Series 40\n            ], [NAME], [\n            /mozilla.+\\(mobile;.+gecko.+firefox/i                               // Firefox OS\n            ], [[NAME, 'Firefox OS'], VERSION], [\n\n            // Console\n            /(nintendo|playstation)\\s([wids34portablevu]+)/i,                   // Nintendo/Playstation\n\n            // GNU/Linux based\n            /(mint)[\\/\\s\\(]?(\\w+)*/i,                                           // Mint\n            /(mageia|vectorlinux)[;\\s]/i,                                       // Mageia/VectorLinux\n            /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\\/\\s-]?([\\w\\.-]+)*/i,\n                                                                                // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware\n                                                                                // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus\n            /(hurd|linux)\\s?([\\w\\.]+)*/i,                                       // Hurd/Linux\n            /(gnu)\\s?([\\w\\.]+)*/i                                               // GNU\n            ], [[NAME, 'Linux'], VERSION], [\n\n            /(cros)\\s[\\w]+\\s([\\w\\.]+\\w)/i                                       // Chromium OS\n            ], [[NAME, 'Chromium OS'], VERSION],[\n\n            // Solaris\n            /(sunos)\\s?([\\w\\.]+\\d)*/i                                           // Solaris\n            ], [[NAME, 'Solaris'], VERSION], [\n\n            // BSD based\n            /\\s([frentopc-]{0,4}bsd|dragonfly)\\s?([\\w\\.]+)*/i                   // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly\n            ], [[NAME, 'Linux'], VERSION],[\n\n            /(iphone)(?:.*os\\s*([\\w]+)*\\slike\\smac|;\\sopera)/i                  // iOS\n            ], [[NAME, 'iPhone'], [VERSION, /_/g, '.']], [\n\n            /(ipad)(?:.*os\\s*([\\w]+)*\\slike\\smac|;\\sopera)/i                    // iOS\n            ], [[NAME, 'iPad'], [VERSION, /_/g, '.']], [\n\n            /(ip[honead]+)(?:.*os\\s([\\w]+)*\\slike\\smac|;\\sopera)/i              // iOS\n            ], [[NAME, 'iOS'], [VERSION, /_/g, '.']], [\n\n            /(mac\\sos\\sx)\\s?([\\w\\s\\.]+\\w)*/i,\n            /(macintosh|mac(?=_powerpc)\\s)/i                                    // Mac OS\n            ], [[NAME, 'Mac'], [VERSION, /_/g, '.']], [\n\n            // Other\n            /((?:open)?solaris)[\\/\\s-]?([\\w\\.]+)*/i,                            // Solaris\n            /(haiku)\\s(\\w+)/i,                                                  // Haiku\n            /(aix)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.]*)*/i,                               // AIX\n            /(plan\\s9|minix|beos|os\\/2|amigaos|morphos|risc\\sos|openvms)/i,\n                                                                                // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS\n            /(unix)\\s?([\\w\\.]+)*/i                                              // UNIX\n            ], [NAME, VERSION]\n        ]\n    };\n\n\n    /////////////////\n    // Constructor\n    ////////////////\n\n\n    var UAParser = function (uastring, extensions) {\n\n        if (!(this instanceof UAParser)) {\n            return new UAParser(uastring, extensions).getResult();\n        }\n\n        var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n        var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;\n\n        this.getBrowser = function () {\n            var browser = mapper.rgx.apply(this, rgxmap.browser);\n            browser.major = util.major(browser.version);\n            return browser;\n        };\n        this.getCPU = function () {\n            return mapper.rgx.apply(this, rgxmap.cpu);\n        };\n        this.getDevice = function () {\n            return mapper.rgx.apply(this, rgxmap.device);\n        };\n        this.getEngine = function () {\n            return mapper.rgx.apply(this, rgxmap.engine);\n        };\n        this.getOS = function () {\n            return mapper.rgx.apply(this, rgxmap.os);\n        };\n        this.getResult = function() {\n            return {\n                ua      : this.getUA(),\n                browser : this.getBrowser(),\n                engine  : this.getEngine(),\n                os      : this.getOS(),\n                device  : this.getDevice(),\n                cpu     : this.getCPU()\n            };\n        };\n        this.getUA = function () {\n            return ua;\n        };\n        this.setUA = function (uastring) {\n            ua = uastring;\n            return this;\n        };\n        return this;\n    };\n\n    UAParser.VERSION = LIBVERSION;\n    UAParser.BROWSER = {\n        NAME    : NAME,\n        MAJOR   : MAJOR, // deprecated\n        VERSION : VERSION\n    };\n    UAParser.CPU = {\n        ARCHITECTURE : ARCHITECTURE\n    };\n    UAParser.DEVICE = {\n        MODEL   : MODEL,\n        VENDOR  : VENDOR,\n        TYPE    : TYPE,\n        CONSOLE : CONSOLE,\n        MOBILE  : MOBILE,\n        SMARTTV : SMARTTV,\n        TABLET  : TABLET,\n        WEARABLE: WEARABLE,\n        EMBEDDED: EMBEDDED\n    };\n    UAParser.ENGINE = {\n        NAME    : NAME,\n        VERSION : VERSION\n    };\n    UAParser.OS = {\n        NAME    : NAME,\n        VERSION : VERSION\n    };\n\n\n    ///////////\n    // Export\n    //////////\n\n\n    // check js environment\n    if ('object' !== UNDEF_TYPE) {\n        // nodejs env\n        if ('object' !== UNDEF_TYPE && module.exports) {\n            exports = module.exports = UAParser;\n        }\n        exports.UAParser = UAParser;\n    } else {\n        // requirejs env (optional)\n        if (typeof(undefined) === FUNC_TYPE && undefined.amd) {\n            undefined(\"ua-parser-js\", [], function () {\n                return UAParser;\n            });\n        } else {\n            // browser env\n            window.UAParser = UAParser;\n        }\n    }\n\n    // jQuery/Zepto specific (optional)\n    // Note:\n    //   In AMD env the global scope should be kept clean, but jQuery is an exception.\n    //   jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n    //   and we should catch that.\n    var $ = window.jQuery || window.Zepto;\n    if (typeof $ !== UNDEF_TYPE) {\n        var parser = new UAParser();\n        $.ua = parser.getResult();\n        $.ua.get = function() {\n            return parser.getUA();\n        };\n        $.ua.set = function (uastring) {\n            parser.setUA(uastring);\n            var result = parser.getResult();\n            for (var prop in result) {\n                $.ua[prop] = result[prop];\n            }\n        };\n    }\n\n})(typeof window === 'object' ? window : commonjsGlobal);\n});\n\n/* jshint bitwise: false, laxbreak: true */\n\n/**\n * Source: [jed's gist]{@link https://gist.github.com/982883}.\n * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,\n * where each x is replaced with a random hexadecimal digit from 0 to f, and\n * y is replaced with a random hexadecimal digit from 8 to b.\n * Used to generate UUIDs for deviceIds.\n * @private\n */\nvar uuid$1 = function uuid(a) {\n    return a // if the placeholder was passed, return\n    ? ( // a random number from 0 to 15\n    a ^ // unless b is 8,\n    Math.random() // in which case\n    * 16 // a random number from\n    >> a / 4 // 8 to 11\n    ).toString(16) // in hexadecimal\n    : ( // or otherwise a concatenated string:\n    [1e7] + // 10000000 +\n    -1e3 + // -1000 +\n    -4e3 + // -4000 +\n    -8e3 + // -80000000 +\n    -1e11 // -100000000000,\n    ).replace( // replacing\n    /[018]/g, // zeroes, ones, and eights with\n    uuid // random hex digits\n    );\n};\n\nvar version = '4.5.2';\n\nvar getLanguage = function getLanguage() {\n    return navigator && (navigator.languages && navigator.languages[0] || navigator.language || navigator.userLanguage) || undefined;\n};\n\nvar language = {\n    language: getLanguage()\n};\n\n// default options\nvar DEFAULT_OPTIONS = {\n  apiEndpoint: 'api.amplitude.com',\n  batchEvents: false,\n  cookieExpiration: 365 * 10,\n  cookieName: 'amplitude_id',\n  deviceIdFromUrlParam: false,\n  domain: '',\n  eventUploadPeriodMillis: 30 * 1000, // 30s\n  eventUploadThreshold: 30,\n  forceHttps: true,\n  includeGclid: false,\n  includeReferrer: false,\n  includeUtm: false,\n  language: language.language,\n  logLevel: 'WARN',\n  optOut: false,\n  platform: 'Web',\n  savedMaxCount: 1000,\n  saveEvents: true,\n  saveParamsReferrerOncePerSession: true,\n  sessionTimeout: 30 * 60 * 1000,\n  trackingOptions: {\n    city: true,\n    country: true,\n    device_model: true,\n    dma: true,\n    ip_address: true,\n    language: true,\n    os_name: true,\n    os_version: true,\n    platform: true,\n    region: true,\n    version_name: true\n  },\n  unsentKey: 'amplitude_unsent',\n  unsentIdentifyKey: 'amplitude_unsent_identify',\n  uploadBatchSize: 100\n};\n\nfunction _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; }\n\n/**\n * AmplitudeClient SDK API - instance constructor.\n * The Amplitude class handles creation of client instances, all you need to do is call amplitude.getInstance()\n * @constructor AmplitudeClient\n * @public\n * @example var amplitudeClient = new AmplitudeClient();\n */\nvar AmplitudeClient = function AmplitudeClient(instanceName) {\n  this._instanceName = utils.isEmptyString(instanceName) ? constants.DEFAULT_INSTANCE : instanceName.toLowerCase();\n  this._legacyStorageSuffix = this._instanceName === constants.DEFAULT_INSTANCE ? '' : '_' + this._instanceName;\n  this._unsentEvents = [];\n  this._unsentIdentifys = [];\n  this._ua = new uaParser(navigator.userAgent).getResult();\n  this.options = merge_1$1({}, DEFAULT_OPTIONS);\n  this.cookieStorage = new cookieStorage().getStorage();\n  this._q = []; // queue for proxied functions before script load\n  this._sending = false;\n  this._updateScheduled = false;\n\n  // event meta data\n  this._eventId = 0;\n  this._identifyId = 0;\n  this._lastEventTime = null;\n  this._newSession = false;\n  this._sequenceNumber = 0;\n  this._sessionId = null;\n\n  this._userAgent = navigator && navigator.userAgent || null;\n};\n\nAmplitudeClient.prototype.Identify = Identify;\nAmplitudeClient.prototype.Revenue = Revenue;\n\n/**\n * Initializes the Amplitude Javascript SDK with your apiKey and any optional configurations.\n * This is required before any other methods can be called.\n * @public\n * @param {string} apiKey - The API key for your app.\n * @param {string} opt_userId - (optional) An identifier for this user.\n * @param {object} opt_config - (optional) Configuration options.\n * See [Readme]{@link https://github.com/amplitude/Amplitude-Javascript#configuration-options} for list of options and default values.\n * @param {function} opt_callback - (optional) Provide a callback function to run after initialization is complete.\n * @example amplitudeClient.init('API_KEY', 'USER_ID', {includeReferrer: true, includeUtm: true}, function() { alert('init complete'); });\n */\nAmplitudeClient.prototype.init = function init(apiKey, opt_userId, opt_config, opt_callback) {\n  if (type(apiKey) !== 'string' || utils.isEmptyString(apiKey)) {\n    utils.log.error('Invalid apiKey. Please re-initialize with a valid apiKey');\n    return;\n  }\n\n  try {\n    this.options.apiKey = apiKey;\n    this._storageSuffix = '_' + apiKey + this._legacyStorageSuffix;\n\n    _parseConfig(this.options, opt_config);\n\n    if (type(this.options.logLevel) === 'string') {\n      utils.setLogLevel(this.options.logLevel);\n    }\n\n    var trackingOptions = _generateApiPropertiesTrackingConfig(this);\n    this._apiPropertiesTrackingOptions = Object.keys(trackingOptions).length > 0 ? { tracking_options: trackingOptions } : {};\n\n    this.cookieStorage.options({\n      expirationDays: this.options.cookieExpiration,\n      domain: this.options.domain\n    });\n    this.options.domain = this.cookieStorage.options().domain;\n\n    if (this._instanceName === constants.DEFAULT_INSTANCE) {\n      _upgradeCookieData(this);\n    }\n    _loadCookieData(this);\n\n    // load deviceId and userId from input, or try to fetch existing value from cookie\n    this.options.deviceId = type(opt_config) === 'object' && type(opt_config.deviceId) === 'string' && !utils.isEmptyString(opt_config.deviceId) && opt_config.deviceId || this.options.deviceIdFromUrlParam && this._getDeviceIdFromUrlParam(this._getUrlParams()) || this.options.deviceId || uuid$1() + 'R';\n    this.options.userId = type(opt_userId) === 'string' && !utils.isEmptyString(opt_userId) && opt_userId || type(opt_userId) === 'number' && opt_userId.toString() || this.options.userId || null;\n\n    // load unsent events and identifies before any attempt to log new ones\n    if (this.options.saveEvents) {\n      this._unsentEvents = this._loadSavedUnsentEvents(this.options.unsentKey);\n      this._unsentIdentifys = this._loadSavedUnsentEvents(this.options.unsentIdentifyKey);\n\n      // validate event properties for unsent events\n      for (var i = 0; i < this._unsentEvents.length; i++) {\n        var eventProperties = this._unsentEvents[i].event_properties;\n        var groups = this._unsentEvents[i].groups;\n        this._unsentEvents[i].event_properties = utils.validateProperties(eventProperties);\n        this._unsentEvents[i].groups = utils.validateGroups(groups);\n      }\n\n      // validate user properties for unsent identifys\n      for (var j = 0; j < this._unsentIdentifys.length; j++) {\n        var userProperties = this._unsentIdentifys[j].user_properties;\n        var identifyGroups = this._unsentIdentifys[j].groups;\n        this._unsentIdentifys[j].user_properties = utils.validateProperties(userProperties);\n        this._unsentIdentifys[j].groups = utils.validateGroups(identifyGroups);\n      }\n    }\n\n    var now = new Date().getTime();\n    if (!this._sessionId || !this._lastEventTime || now - this._lastEventTime > this.options.sessionTimeout) {\n      this._newSession = true;\n      this._sessionId = now;\n\n      // only capture UTM params and referrer if new session\n      if (this.options.saveParamsReferrerOncePerSession) {\n        this._trackParamsAndReferrer();\n      }\n    }\n\n    if (!this.options.saveParamsReferrerOncePerSession) {\n      this._trackParamsAndReferrer();\n    }\n\n    this._lastEventTime = now;\n    _saveCookieData(this);\n\n    this._sendEventsIfReady(); // try sending unsent events\n  } catch (e) {\n    utils.log.error(e);\n  } finally {\n    if (type(opt_callback) === 'function') {\n      opt_callback(this);\n    }\n  }\n};\n\n/**\n * @private\n */\nAmplitudeClient.prototype._trackParamsAndReferrer = function _trackParamsAndReferrer() {\n  if (this.options.includeUtm) {\n    this._initUtmData();\n  }\n  if (this.options.includeReferrer) {\n    this._saveReferrer(this._getReferrer());\n  }\n  if (this.options.includeGclid) {\n    this._saveGclid(this._getUrlParams());\n  }\n};\n\n/**\n * Parse and validate user specified config values and overwrite existing option value\n * DEFAULT_OPTIONS provides list of all config keys that are modifiable, as well as expected types for values\n * @private\n */\nvar _parseConfig = function _parseConfig(options, config) {\n  if (type(config) !== 'object') {\n    return;\n  }\n\n  // validates config value is defined, is the correct type, and some additional value sanity checks\n  var parseValidateAndLoad = function parseValidateAndLoad(key) {\n    if (!options.hasOwnProperty(key)) {\n      return; // skip bogus config values\n    }\n\n    var inputValue = config[key];\n    var expectedType = type(options[key]);\n    if (!utils.validateInput(inputValue, key + ' option', expectedType)) {\n      return;\n    }\n    if (expectedType === 'boolean') {\n      options[key] = !!inputValue;\n    } else if (expectedType === 'string' && !utils.isEmptyString(inputValue) || expectedType === 'number' && inputValue > 0) {\n      options[key] = inputValue;\n    } else if (expectedType === 'object') {\n      _parseConfig(options[key], inputValue);\n    }\n  };\n\n  for (var key in config) {\n    if (config.hasOwnProperty(key)) {\n      parseValidateAndLoad(key);\n    }\n  }\n};\n\n/**\n * Run functions queued up by proxy loading snippet\n * @private\n */\nAmplitudeClient.prototype.runQueuedFunctions = function () {\n  for (var i = 0; i < this._q.length; i++) {\n    var fn = this[this._q[i][0]];\n    if (type(fn) === 'function') {\n      fn.apply(this, this._q[i].slice(1));\n    }\n  }\n  this._q = []; // clear function queue after running\n};\n\n/**\n * Check that the apiKey is set before calling a function. Logs a warning message if not set.\n * @private\n */\nAmplitudeClient.prototype._apiKeySet = function _apiKeySet(methodName) {\n  if (utils.isEmptyString(this.options.apiKey)) {\n    utils.log.error('Invalid apiKey. Please set a valid apiKey with init() before calling ' + methodName);\n    return false;\n  }\n  return true;\n};\n\n/**\n * Load saved events from localStorage. JSON deserializes event array. Handles case where string is corrupted.\n * @private\n */\nAmplitudeClient.prototype._loadSavedUnsentEvents = function _loadSavedUnsentEvents(unsentKey) {\n  var savedUnsentEventsString = this._getFromStorage(localStorage$1, unsentKey);\n  var events = this._parseSavedUnsentEventsString(savedUnsentEventsString, unsentKey);\n\n  var savedUnsentEventsStringLegacy = this._getFromStorageLegacy(localStorage$1, unsentKey);\n  var legacyEvents = this._parseSavedUnsentEventsString(savedUnsentEventsStringLegacy, unsentKey);\n\n  var unsentEvents = legacyEvents.concat(events);\n\n  // Migrate legacy events out of storage\n  this._removeFromLegacyStorage(localStorage$1, unsentKey);\n  this._setInStorage(localStorage$1, unsentKey, JSON.stringify(unsentEvents));\n\n  return unsentEvents;\n};\n\nAmplitudeClient.prototype._removeFromLegacyStorage = function _removeFromLegacyStorage(storage, key) {\n  storage.removeItem(key + this._legacyStorageSuffix);\n};\n\n/**\n * Load saved events from localStorage. JSON deserializes event array. Handles case where string is corrupted.\n * @private\n */\nAmplitudeClient.prototype._parseSavedUnsentEventsString = function _parseSavedUnsentEventsString(savedUnsentEventsString, unsentKey) {\n  if (utils.isEmptyString(savedUnsentEventsString)) {\n    return []; // new app, does not have any saved events\n  }\n\n  if (type(savedUnsentEventsString) === 'string') {\n    try {\n      var events = JSON.parse(savedUnsentEventsString);\n      if (type(events) === 'array') {\n        // handle case where JSON dumping of unsent events is corrupted\n        return events;\n      }\n    } catch (e) {}\n  }\n  utils.log.error('Unable to load ' + unsentKey + ' events. Restart with a new empty queue.');\n  return [];\n};\n\n/**\n * Returns true if a new session was created during initialization, otherwise false.\n * @public\n * @return {boolean} Whether a new session was created during initialization.\n */\nAmplitudeClient.prototype.isNewSession = function isNewSession() {\n  return this._newSession;\n};\n\n/**\n * Returns the id of the current session.\n * @public\n * @return {number} Id of the current session.\n */\nAmplitudeClient.prototype.getSessionId = function getSessionId() {\n  return this._sessionId;\n};\n\n/**\n * Increments the eventId and returns it.\n * @private\n */\nAmplitudeClient.prototype.nextEventId = function nextEventId() {\n  this._eventId++;\n  return this._eventId;\n};\n\n/**\n * Increments the identifyId and returns it.\n * @private\n */\nAmplitudeClient.prototype.nextIdentifyId = function nextIdentifyId() {\n  this._identifyId++;\n  return this._identifyId;\n};\n\n/**\n * Increments the sequenceNumber and returns it.\n * @private\n */\nAmplitudeClient.prototype.nextSequenceNumber = function nextSequenceNumber() {\n  this._sequenceNumber++;\n  return this._sequenceNumber;\n};\n\n/**\n * Returns the total count of unsent events and identifys\n * @private\n */\nAmplitudeClient.prototype._unsentCount = function _unsentCount() {\n  return this._unsentEvents.length + this._unsentIdentifys.length;\n};\n\n/**\n * Send events if ready. Returns true if events are sent.\n * @private\n */\nAmplitudeClient.prototype._sendEventsIfReady = function _sendEventsIfReady(callback) {\n  if (this._unsentCount() === 0) {\n    return false;\n  }\n\n  // if batching disabled, send any unsent events immediately\n  if (!this.options.batchEvents) {\n    this.sendEvents(callback);\n    return true;\n  }\n\n  // if batching enabled, check if min threshold met for batch size\n  if (this._unsentCount() >= this.options.eventUploadThreshold) {\n    this.sendEvents(callback);\n    return true;\n  }\n\n  // otherwise schedule an upload after 30s\n  if (!this._updateScheduled) {\n    // make sure we only schedule 1 upload\n    this._updateScheduled = true;\n    setTimeout(function () {\n      this._updateScheduled = false;\n      this.sendEvents();\n    }.bind(this), this.options.eventUploadPeriodMillis);\n  }\n\n  return false; // an upload was scheduled, no events were uploaded\n};\n\n/**\n * Helper function to fetch values from storage\n * Storage argument allows for localStoraoge and sessionStoraoge\n * @private\n */\nAmplitudeClient.prototype._getFromStorage = function _getFromStorage(storage, key) {\n  return storage.getItem(key + this._storageSuffix);\n};\n\n/**\n * Helper function to fetch values from storage\n * Storage argument allows for localStoraoge and sessionStoraoge\n * @private\n */\nAmplitudeClient.prototype._getFromStorageLegacy = function _getFromStorageLegacy(storage, key) {\n  return storage.getItem(key + this._legacyStorageSuffix);\n};\n\n/**\n * Helper function to set values in storage\n * Storage argument allows for localStoraoge and sessionStoraoge\n * @private\n */\nAmplitudeClient.prototype._setInStorage = function _setInStorage(storage, key, value) {\n  storage.setItem(key + this._storageSuffix, value);\n};\n\n/**\n * cookieData (deviceId, userId, optOut, sessionId, lastEventTime, eventId, identifyId, sequenceNumber)\n * can be stored in many different places (localStorage, cookie, etc).\n * Need to unify all sources into one place with a one-time upgrade/migration.\n * @private\n */\nvar _upgradeCookieData = function _upgradeCookieData(scope) {\n  // skip if already migrated to 4.10+\n  var cookieData = scope.cookieStorage.get(scope.options.cookieName + scope._storageSuffix);\n  if (type(cookieData) === 'object') {\n    return;\n  }\n  // skip if already migrated to 2.70+\n  cookieData = scope.cookieStorage.get(scope.options.cookieName + scope._legacyStorageSuffix);\n  if (type(cookieData) === 'object' && cookieData.deviceId && cookieData.sessionId && cookieData.lastEventTime) {\n    return;\n  }\n\n  var _getAndRemoveFromLocalStorage = function _getAndRemoveFromLocalStorage(key) {\n    var value = localStorage$1.getItem(key);\n    localStorage$1.removeItem(key);\n    return value;\n  };\n\n  // in v2.6.0, deviceId, userId, optOut was migrated to localStorage with keys + first 6 char of apiKey\n  var apiKeySuffix = type(scope.options.apiKey) === 'string' && '_' + scope.options.apiKey.slice(0, 6) || '';\n  var localStorageDeviceId = _getAndRemoveFromLocalStorage(constants.DEVICE_ID + apiKeySuffix);\n  var localStorageUserId = _getAndRemoveFromLocalStorage(constants.USER_ID + apiKeySuffix);\n  var localStorageOptOut = _getAndRemoveFromLocalStorage(constants.OPT_OUT + apiKeySuffix);\n  if (localStorageOptOut !== null && localStorageOptOut !== undefined) {\n    localStorageOptOut = String(localStorageOptOut) === 'true'; // convert to boolean\n  }\n\n  // pre-v2.7.0 event and session meta-data was stored in localStorage. move to cookie for sub-domain support\n  var localStorageSessionId = parseInt(_getAndRemoveFromLocalStorage(constants.SESSION_ID));\n  var localStorageLastEventTime = parseInt(_getAndRemoveFromLocalStorage(constants.LAST_EVENT_TIME));\n  var localStorageEventId = parseInt(_getAndRemoveFromLocalStorage(constants.LAST_EVENT_ID));\n  var localStorageIdentifyId = parseInt(_getAndRemoveFromLocalStorage(constants.LAST_IDENTIFY_ID));\n  var localStorageSequenceNumber = parseInt(_getAndRemoveFromLocalStorage(constants.LAST_SEQUENCE_NUMBER));\n\n  var _getFromCookie = function _getFromCookie(key) {\n    return type(cookieData) === 'object' && cookieData[key];\n  };\n  scope.options.deviceId = _getFromCookie('deviceId') || localStorageDeviceId;\n  scope.options.userId = _getFromCookie('userId') || localStorageUserId;\n  scope._sessionId = _getFromCookie('sessionId') || localStorageSessionId || scope._sessionId;\n  scope._lastEventTime = _getFromCookie('lastEventTime') || localStorageLastEventTime || scope._lastEventTime;\n  scope._eventId = _getFromCookie('eventId') || localStorageEventId || scope._eventId;\n  scope._identifyId = _getFromCookie('identifyId') || localStorageIdentifyId || scope._identifyId;\n  scope._sequenceNumber = _getFromCookie('sequenceNumber') || localStorageSequenceNumber || scope._sequenceNumber;\n\n  // optOut is a little trickier since it is a boolean\n  scope.options.optOut = localStorageOptOut || false;\n  if (cookieData && cookieData.optOut !== undefined && cookieData.optOut !== null) {\n    scope.options.optOut = String(cookieData.optOut) === 'true';\n  }\n\n  _saveCookieData(scope);\n};\n\n/**\n * Fetches deviceId, userId, event meta data from amplitude cookie\n * @private\n */\nvar _loadCookieData = function _loadCookieData(scope) {\n  var cookieData = scope.cookieStorage.get(scope.options.cookieName + scope._storageSuffix);\n\n  if (type(cookieData) === 'object') {\n    _loadCookieDataProps(scope, cookieData);\n  } else {\n    var legacyCookieData = scope.cookieStorage.get(scope.options.cookieName + scope._legacyStorageSuffix);\n    if (type(legacyCookieData) === 'object') {\n      scope.cookieStorage.remove(scope.options.cookieName + scope._legacyStorageSuffix);\n      _loadCookieDataProps(scope, legacyCookieData);\n    }\n  }\n};\n\nvar _loadCookieDataProps = function _loadCookieDataProps(scope, cookieData) {\n  if (cookieData.deviceId) {\n    scope.options.deviceId = cookieData.deviceId;\n  }\n  if (cookieData.userId) {\n    scope.options.userId = cookieData.userId;\n  }\n  if (cookieData.optOut !== null && cookieData.optOut !== undefined) {\n    scope.options.optOut = cookieData.optOut;\n  }\n  if (cookieData.sessionId) {\n    scope._sessionId = parseInt(cookieData.sessionId);\n  }\n  if (cookieData.lastEventTime) {\n    scope._lastEventTime = parseInt(cookieData.lastEventTime);\n  }\n  if (cookieData.eventId) {\n    scope._eventId = parseInt(cookieData.eventId);\n  }\n  if (cookieData.identifyId) {\n    scope._identifyId = parseInt(cookieData.identifyId);\n  }\n  if (cookieData.sequenceNumber) {\n    scope._sequenceNumber = parseInt(cookieData.sequenceNumber);\n  }\n};\n\n/**\n * Saves deviceId, userId, event meta data to amplitude cookie\n * @private\n */\nvar _saveCookieData = function _saveCookieData(scope) {\n  scope.cookieStorage.set(scope.options.cookieName + scope._storageSuffix, {\n    deviceId: scope.options.deviceId,\n    userId: scope.options.userId,\n    optOut: scope.options.optOut,\n    sessionId: scope._sessionId,\n    lastEventTime: scope._lastEventTime,\n    eventId: scope._eventId,\n    identifyId: scope._identifyId,\n    sequenceNumber: scope._sequenceNumber\n  });\n};\n\n/**\n * Parse the utm properties out of cookies and query for adding to user properties.\n * @private\n */\nAmplitudeClient.prototype._initUtmData = function _initUtmData(queryParams, cookieParams) {\n  queryParams = queryParams || this._getUrlParams();\n  cookieParams = cookieParams || this.cookieStorage.get('__utmz');\n  var utmProperties = getUtmData(cookieParams, queryParams);\n  _sendParamsReferrerUserProperties(this, utmProperties);\n};\n\n/**\n * The calling function should determine when it is appropriate to send these user properties. This function\n * will no longer contain any session storage checking logic.\n * @private\n */\nvar _sendParamsReferrerUserProperties = function _sendParamsReferrerUserProperties(scope, userProperties) {\n  if (type(userProperties) !== 'object' || Object.keys(userProperties).length === 0) {\n    return;\n  }\n\n  // setOnce the initial user properties\n  var identify = new Identify();\n  for (var key in userProperties) {\n    if (userProperties.hasOwnProperty(key)) {\n      identify.setOnce('initial_' + key, userProperties[key]);\n      identify.set(key, userProperties[key]);\n    }\n  }\n\n  scope.identify(identify);\n};\n\n/**\n * @private\n */\nAmplitudeClient.prototype._getReferrer = function _getReferrer() {\n  return document.referrer;\n};\n\n/**\n * @private\n */\nAmplitudeClient.prototype._getUrlParams = function _getUrlParams() {\n  return location.search;\n};\n\n/**\n * Try to fetch Google Gclid from url params.\n * @private\n */\nAmplitudeClient.prototype._saveGclid = function _saveGclid(urlParams) {\n  var gclid = utils.getQueryParam('gclid', urlParams);\n  if (utils.isEmptyString(gclid)) {\n    return;\n  }\n  var gclidProperties = { 'gclid': gclid };\n  _sendParamsReferrerUserProperties(this, gclidProperties);\n};\n\n/**\n * Try to fetch Amplitude device id from url params.\n * @private\n */\nAmplitudeClient.prototype._getDeviceIdFromUrlParam = function _getDeviceIdFromUrlParam(urlParams) {\n  return utils.getQueryParam(constants.AMP_DEVICE_ID_PARAM, urlParams);\n};\n\n/**\n * Parse the domain from referrer info\n * @private\n */\nAmplitudeClient.prototype._getReferringDomain = function _getReferringDomain(referrer) {\n  if (utils.isEmptyString(referrer)) {\n    return null;\n  }\n  var parts = referrer.split('/');\n  if (parts.length >= 3) {\n    return parts[2];\n  }\n  return null;\n};\n\n/**\n * Fetch the referrer information, parse the domain and send.\n * Since user properties are propagated on the server, only send once per session, don't need to send with every event\n * @private\n */\nAmplitudeClient.prototype._saveReferrer = function _saveReferrer(referrer) {\n  if (utils.isEmptyString(referrer)) {\n    return;\n  }\n  var referrerInfo = {\n    'referrer': referrer,\n    'referring_domain': this._getReferringDomain(referrer)\n  };\n  _sendParamsReferrerUserProperties(this, referrerInfo);\n};\n\n/**\n * Saves unsent events and identifies to localStorage. JSON stringifies event queues before saving.\n * Note: this is called automatically every time events are logged, unless you explicitly set option saveEvents to false.\n * @private\n */\nAmplitudeClient.prototype.saveEvents = function saveEvents() {\n  try {\n    this._setInStorage(localStorage$1, this.options.unsentKey, JSON.stringify(this._unsentEvents));\n  } catch (e) {}\n\n  try {\n    this._setInStorage(localStorage$1, this.options.unsentIdentifyKey, JSON.stringify(this._unsentIdentifys));\n  } catch (e) {}\n};\n\n/**\n * Sets a customer domain for the amplitude cookie. Useful if you want to support cross-subdomain tracking.\n * @public\n * @param {string} domain to set.\n * @example amplitudeClient.setDomain('.amplitude.com');\n */\nAmplitudeClient.prototype.setDomain = function setDomain(domain) {\n  if (!utils.validateInput(domain, 'domain', 'string')) {\n    return;\n  }\n\n  try {\n    this.cookieStorage.options({\n      domain: domain\n    });\n    this.options.domain = this.cookieStorage.options().domain;\n    _loadCookieData(this);\n    _saveCookieData(this);\n  } catch (e) {\n    utils.log.error(e);\n  }\n};\n\n/**\n * Sets an identifier for the current user.\n * @public\n * @param {string} userId - identifier to set. Can be null.\n * @example amplitudeClient.setUserId('joe@gmail.com');\n */\nAmplitudeClient.prototype.setUserId = function setUserId(userId) {\n  try {\n    this.options.userId = userId !== undefined && userId !== null && '' + userId || null;\n    _saveCookieData(this);\n  } catch (e) {\n    utils.log.error(e);\n  }\n};\n\n/**\n * Add user to a group or groups. You need to specify a groupType and groupName(s).\n * For example you can group people by their organization.\n * In that case groupType is \"orgId\" and groupName would be the actual ID(s).\n * groupName can be a string or an array of strings to indicate a user in multiple gruups.\n * You can also call setGroup multiple times with different groupTypes to track multiple types of groups (up to 5 per app).\n * Note: this will also set groupType: groupName as a user property.\n * See the [SDK Readme]{@link https://github.com/amplitude/Amplitude-Javascript#setting-groups} for more information.\n * @public\n * @param {string} groupType - the group type (ex: orgId)\n * @param {string|list} groupName - the name of the group (ex: 15), or a list of names of the groups\n * @example amplitudeClient.setGroup('orgId', 15); // this adds the current user to orgId 15.\n */\nAmplitudeClient.prototype.setGroup = function (groupType, groupName) {\n  if (!this._apiKeySet('setGroup()') || !utils.validateInput(groupType, 'groupType', 'string') || utils.isEmptyString(groupType)) {\n    return;\n  }\n\n  var groups = {};\n  groups[groupType] = groupName;\n  var identify = new Identify().set(groupType, groupName);\n  this._logEvent(constants.IDENTIFY_EVENT, null, null, identify.userPropertiesOperations, groups, null, null, null);\n};\n\n/**\n * Sets whether to opt current user out of tracking.\n * @public\n * @param {boolean} enable - if true then no events will be logged or sent.\n * @example: amplitude.setOptOut(true);\n */\nAmplitudeClient.prototype.setOptOut = function setOptOut(enable) {\n  if (!utils.validateInput(enable, 'enable', 'boolean')) {\n    return;\n  }\n\n  try {\n    this.options.optOut = enable;\n    _saveCookieData(this);\n  } catch (e) {\n    utils.log.error(e);\n  }\n};\n\nAmplitudeClient.prototype.setSessionId = function setSessionId(sessionId) {\n  if (!utils.validateInput(sessionId, 'sessionId', 'number')) {\n    return;\n  }\n\n  try {\n    this._sessionId = sessionId;\n    _saveCookieData(this);\n  } catch (e) {\n    utils.log.error(e);\n  }\n};\n\nAmplitudeClient.prototype.resetSessionId = function resetSessionId() {\n  this.setSessionId(new Date().getTime());\n};\n\n/**\n  * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n  * are doing. This can be used in conjunction with `setUserId(null)` to anonymize users after they log out.\n  * With a null userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n  * This uses src/uuid.js to regenerate the deviceId.\n  * @public\n  */\nAmplitudeClient.prototype.regenerateDeviceId = function regenerateDeviceId() {\n  this.setDeviceId(uuid$1() + 'R');\n};\n\n/**\n  * Sets a custom deviceId for current user. Note: this is not recommended unless you know what you are doing\n  * (like if you have your own system for managing deviceIds). Make sure the deviceId you set is sufficiently unique\n  * (we recommend something like a UUID - see src/uuid.js for an example of how to generate) to prevent conflicts with other devices in our system.\n  * @public\n  * @param {string} deviceId - custom deviceId for current user.\n  * @example amplitudeClient.setDeviceId('45f0954f-eb79-4463-ac8a-233a6f45a8f0');\n  */\nAmplitudeClient.prototype.setDeviceId = function setDeviceId(deviceId) {\n  if (!utils.validateInput(deviceId, 'deviceId', 'string')) {\n    return;\n  }\n\n  try {\n    if (!utils.isEmptyString(deviceId)) {\n      this.options.deviceId = '' + deviceId;\n      _saveCookieData(this);\n    }\n  } catch (e) {\n    utils.log.error(e);\n  }\n};\n\n/**\n * Sets user properties for the current user.\n * @public\n * @param {object} - object with string keys and values for the user properties to set.\n * @param {boolean} - DEPRECATED opt_replace: in earlier versions of the JS SDK the user properties object was kept in\n * memory and replace = true would replace the object in memory. Now the properties are no longer stored in memory, so replace is deprecated.\n * @example amplitudeClient.setUserProperties({'gender': 'female', 'sign_up_complete': true})\n */\nAmplitudeClient.prototype.setUserProperties = function setUserProperties(userProperties) {\n  if (!this._apiKeySet('setUserProperties()') || !utils.validateInput(userProperties, 'userProperties', 'object')) {\n    return;\n  }\n  // sanitize the userProperties dict before converting into identify\n  var sanitized = utils.truncate(utils.validateProperties(userProperties));\n  if (Object.keys(sanitized).length === 0) {\n    return;\n  }\n\n  // convert userProperties into an identify call\n  var identify = new Identify();\n  for (var property in sanitized) {\n    if (sanitized.hasOwnProperty(property)) {\n      identify.set(property, sanitized[property]);\n    }\n  }\n  this.identify(identify);\n};\n\n/**\n * Clear all of the user properties for the current user. Note: clearing user properties is irreversible!\n * @public\n * @example amplitudeClient.clearUserProperties();\n */\nAmplitudeClient.prototype.clearUserProperties = function clearUserProperties() {\n  if (!this._apiKeySet('clearUserProperties()')) {\n    return;\n  }\n\n  var identify = new Identify();\n  identify.clearAll();\n  this.identify(identify);\n};\n\n/**\n * Applies the proxied functions on the proxied object to an instance of the real object.\n * Used to convert proxied Identify and Revenue objects.\n * @private\n */\nvar _convertProxyObjectToRealObject = function _convertProxyObjectToRealObject(instance, proxy) {\n  for (var i = 0; i < proxy._q.length; i++) {\n    var fn = instance[proxy._q[i][0]];\n    if (type(fn) === 'function') {\n      fn.apply(instance, proxy._q[i].slice(1));\n    }\n  }\n  return instance;\n};\n\n/**\n * Send an identify call containing user property operations to Amplitude servers.\n * See [Readme]{@link https://github.com/amplitude/Amplitude-Javascript#user-properties-and-user-property-operations}\n * for more information on the Identify API and user property operations.\n * @param {Identify} identify_obj - the Identify object containing the user property operations to send.\n * @param {Amplitude~eventCallback} opt_callback - (optional) callback function to run when the identify event has been sent.\n * Note: the server response code and response body from the identify event upload are passed to the callback function.\n * @example\n * var identify = new amplitude.Identify().set('colors', ['rose', 'gold']).add('karma', 1).setOnce('sign_up_date', '2016-03-31');\n * amplitude.identify(identify);\n */\nAmplitudeClient.prototype.identify = function (identify_obj, opt_callback) {\n  if (!this._apiKeySet('identify()')) {\n    if (type(opt_callback) === 'function') {\n      opt_callback(0, 'No request sent', { reason: 'API key is not set' });\n    }\n    return;\n  }\n\n  // if identify input is a proxied object created by the async loading snippet, convert it into an identify object\n  if (type(identify_obj) === 'object' && identify_obj.hasOwnProperty('_q')) {\n    identify_obj = _convertProxyObjectToRealObject(new Identify(), identify_obj);\n  }\n\n  if (identify_obj instanceof Identify) {\n    // only send if there are operations\n    if (Object.keys(identify_obj.userPropertiesOperations).length > 0) {\n      return this._logEvent(constants.IDENTIFY_EVENT, null, null, identify_obj.userPropertiesOperations, null, null, null, opt_callback);\n    } else {\n      if (type(opt_callback) === 'function') {\n        opt_callback(0, 'No request sent', { reason: 'No user property operations' });\n      }\n    }\n  } else {\n    utils.log.error('Invalid identify input type. Expected Identify object but saw ' + type(identify_obj));\n    if (type(opt_callback) === 'function') {\n      opt_callback(0, 'No request sent', { reason: 'Invalid identify input type' });\n    }\n  }\n};\n\nAmplitudeClient.prototype.groupIdentify = function (group_type, group_name, identify_obj, opt_callback) {\n  if (!this._apiKeySet('groupIdentify()')) {\n    if (type(opt_callback) === 'function') {\n      opt_callback(0, 'No request sent', { reason: 'API key is not set' });\n    }\n    return;\n  }\n\n  if (!utils.validateInput(group_type, 'group_type', 'string') || utils.isEmptyString(group_type)) {\n    if (type(opt_callback) === 'function') {\n      opt_callback(0, 'No request sent', { reason: 'Invalid group type' });\n    }\n    return;\n  }\n\n  if (group_name === null || group_name === undefined) {\n    if (type(opt_callback) === 'function') {\n      opt_callback(0, 'No request sent', { reason: 'Invalid group name' });\n    }\n    return;\n  }\n\n  // if identify input is a proxied object created by the async loading snippet, convert it into an identify object\n  if (type(identify_obj) === 'object' && identify_obj.hasOwnProperty('_q')) {\n    identify_obj = _convertProxyObjectToRealObject(new Identify(), identify_obj);\n  }\n\n  if (identify_obj instanceof Identify) {\n    // only send if there are operations\n    if (Object.keys(identify_obj.userPropertiesOperations).length > 0) {\n      return this._logEvent(constants.GROUP_IDENTIFY_EVENT, null, null, null, _defineProperty({}, group_type, group_name), identify_obj.userPropertiesOperations, null, opt_callback);\n    } else {\n      if (type(opt_callback) === 'function') {\n        opt_callback(0, 'No request sent', { reason: 'No group property operations' });\n      }\n    }\n  } else {\n    utils.log.error('Invalid identify input type. Expected Identify object but saw ' + type(identify_obj));\n    if (type(opt_callback) === 'function') {\n      opt_callback(0, 'No request sent', { reason: 'Invalid identify input type' });\n    }\n  }\n};\n\n/**\n * Set a versionName for your application.\n * @public\n * @param {string} versionName - The version to set for your application.\n * @example amplitudeClient.setVersionName('1.12.3');\n */\nAmplitudeClient.prototype.setVersionName = function setVersionName(versionName) {\n  if (!utils.validateInput(versionName, 'versionName', 'string')) {\n    return;\n  }\n  this.options.versionName = versionName;\n};\n\n/**\n * Private logEvent method. Keeps apiProperties from being publicly exposed.\n * @private\n */\nAmplitudeClient.prototype._logEvent = function _logEvent(eventType, eventProperties, apiProperties, userProperties, groups, groupProperties, timestamp, callback) {\n  _loadCookieData(this); // reload cookie before each log event to sync event meta-data between windows and tabs\n  if (!eventType) {\n    if (type(callback) === 'function') {\n      callback(0, 'No request sent', { reason: 'Missing eventType' });\n    }\n    return;\n  }\n  if (this.options.optOut) {\n    if (type(callback) === 'function') {\n      callback(0, 'No request sent', { reason: 'optOut is set to true' });\n    }\n    return;\n  }\n\n  try {\n    var eventId;\n    if (eventType === constants.IDENTIFY_EVENT || eventType === constants.GROUP_IDENTIFY_EVENT) {\n      eventId = this.nextIdentifyId();\n    } else {\n      eventId = this.nextEventId();\n    }\n    var sequenceNumber = this.nextSequenceNumber();\n    var eventTime = type(timestamp) === 'number' ? timestamp : new Date().getTime();\n    if (!this._sessionId || !this._lastEventTime || eventTime - this._lastEventTime > this.options.sessionTimeout) {\n      this._sessionId = eventTime;\n    }\n    this._lastEventTime = eventTime;\n    _saveCookieData(this);\n\n    userProperties = userProperties || {};\n    var trackingOptions = merge_1$1({}, this._apiPropertiesTrackingOptions);\n    apiProperties = merge_1$1(trackingOptions, apiProperties || {});\n    eventProperties = eventProperties || {};\n    groups = groups || {};\n    groupProperties = groupProperties || {};\n    var event = {\n      device_id: this.options.deviceId,\n      user_id: this.options.userId,\n      timestamp: eventTime,\n      event_id: eventId,\n      session_id: this._sessionId || -1,\n      event_type: eventType,\n      version_name: _shouldTrackField(this, 'version_name') ? this.options.versionName || null : null,\n      platform: _shouldTrackField(this, 'platform') ? this.options.platform : null,\n      os_name: _shouldTrackField(this, 'os_name') ? this._ua.browser.name || null : null,\n      os_version: _shouldTrackField(this, 'os_version') ? this._ua.browser.major || null : null,\n      device_model: _shouldTrackField(this, 'device_model') ? this._ua.os.name || null : null,\n      language: _shouldTrackField(this, 'language') ? this.options.language : null,\n      api_properties: apiProperties,\n      event_properties: utils.truncate(utils.validateProperties(eventProperties)),\n      user_properties: utils.truncate(utils.validateProperties(userProperties)),\n      uuid: uuid$1(),\n      library: {\n        name: 'amplitude-js',\n        version: version\n      },\n      sequence_number: sequenceNumber, // for ordering events and identifys\n      groups: utils.truncate(utils.validateGroups(groups)),\n      group_properties: utils.truncate(utils.validateProperties(groupProperties)),\n      user_agent: this._userAgent\n    };\n\n    if (eventType === constants.IDENTIFY_EVENT || eventType === constants.GROUP_IDENTIFY_EVENT) {\n      this._unsentIdentifys.push(event);\n      this._limitEventsQueued(this._unsentIdentifys);\n    } else {\n      this._unsentEvents.push(event);\n      this._limitEventsQueued(this._unsentEvents);\n    }\n\n    if (this.options.saveEvents) {\n      this.saveEvents();\n    }\n\n    if (!this._sendEventsIfReady(callback) && type(callback) === 'function') {\n      callback(0, 'No request sent', { reason: 'No events to send or upload queued' });\n    }\n\n    return eventId;\n  } catch (e) {\n    utils.log.error(e);\n  }\n};\n\nvar _shouldTrackField = function _shouldTrackField(scope, field) {\n  return !!scope.options.trackingOptions[field];\n};\n\nvar _generateApiPropertiesTrackingConfig = function _generateApiPropertiesTrackingConfig(scope) {\n  // to limit size of config payload, only send fields that have been disabled\n  var fields = ['city', 'country', 'dma', 'ip_address', 'region'];\n  var config = {};\n  for (var i = 0; i < fields.length; i++) {\n    var field = fields[i];\n    if (!_shouldTrackField(scope, field)) {\n      config[field] = false;\n    }\n  }\n  return config;\n};\n\n/**\n * Remove old events from the beginning of the array if too many have accumulated. Default limit is 1000 events.\n * @private\n */\nAmplitudeClient.prototype._limitEventsQueued = function _limitEventsQueued(queue) {\n  if (queue.length > this.options.savedMaxCount) {\n    queue.splice(0, queue.length - this.options.savedMaxCount);\n  }\n};\n\n/**\n * This is the callback for logEvent and identify calls. It gets called after the event/identify is uploaded,\n * and the server response code and response body from the upload request are passed to the callback function.\n * @callback Amplitude~eventCallback\n * @param {number} responseCode - Server response code for the event / identify upload request.\n * @param {string} responseBody - Server response body for the event / identify upload request.\n */\n\n/**\n * Log an event with eventType and eventProperties\n * @public\n * @param {string} eventType - name of event\n * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * @example amplitudeClient.logEvent('Clicked Homepage Button', {'finished_flow': false, 'clicks': 15});\n */\nAmplitudeClient.prototype.logEvent = function logEvent(eventType, eventProperties, opt_callback) {\n  return this.logEventWithTimestamp(eventType, eventProperties, null, opt_callback);\n};\n\n/**\n * Log an event with eventType and eventProperties and a custom timestamp\n * @public\n * @param {string} eventType - name of event\n * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n * @param {number} timesatmp - (optional) the custom timestamp as milliseconds since epoch.\n * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * @example amplitudeClient.logEvent('Clicked Homepage Button', {'finished_flow': false, 'clicks': 15});\n */\nAmplitudeClient.prototype.logEventWithTimestamp = function logEvent(eventType, eventProperties, timestamp, opt_callback) {\n  if (!this._apiKeySet('logEvent()')) {\n    if (type(opt_callback) === 'function') {\n      opt_callback(0, 'No request sent', { reason: 'API key not set' });\n    }\n    return -1;\n  }\n  if (!utils.validateInput(eventType, 'eventType', 'string')) {\n    if (type(opt_callback) === 'function') {\n      opt_callback(0, 'No request sent', { reason: 'Invalid type for eventType' });\n    }\n    return -1;\n  }\n  if (utils.isEmptyString(eventType)) {\n    if (type(opt_callback) === 'function') {\n      opt_callback(0, 'No request sent', { reason: 'Missing eventType' });\n    }\n    return -1;\n  }\n  return this._logEvent(eventType, eventProperties, null, null, null, null, timestamp, opt_callback);\n};\n\n/**\n * Log an event with eventType, eventProperties, and groups. Use this to set event-level groups.\n * Note: the group(s) set only apply for the specific event type being logged and does not persist on the user\n * (unless you explicitly set it with setGroup).\n * See the [SDK Readme]{@link https://github.com/amplitude/Amplitude-Javascript#setting-groups} for more information\n * about groups and Count by Distinct on the Amplitude platform.\n * @public\n * @param {string} eventType - name of event\n * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n * @param {object} groups - (optional) an object with string groupType: groupName values for the event being logged.\n * groupName can be a string or an array of strings.\n * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * @example amplitudeClient.logEventWithGroups('Clicked Button', null, {'orgId': 24});\n */\nAmplitudeClient.prototype.logEventWithGroups = function (eventType, eventProperties, groups, opt_callback) {\n  if (!this._apiKeySet('logEventWithGroups()')) {\n    if (type(opt_callback) === 'function') {\n      opt_callback(0, 'No request sent', { reason: 'API key not set' });\n    }\n    return -1;\n  }\n  if (!utils.validateInput(eventType, 'eventType', 'string')) {\n    if (type(opt_callback) === 'function') {\n      opt_callback(0, 'No request sent', { reason: 'Invalid type for eventType' });\n    }\n    return -1;\n  }\n  return this._logEvent(eventType, eventProperties, null, null, groups, null, null, opt_callback);\n};\n\n/**\n * Test that n is a number or a numeric value.\n * @private\n */\nvar _isNumber = function _isNumber(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n};\n\n/**\n * Log revenue with Revenue interface. The new revenue interface allows for more revenue fields like\n * revenueType and event properties.\n * See [Readme]{@link https://github.com/amplitude/Amplitude-Javascript#tracking-revenue}\n * for more information on the Revenue interface and logging revenue.\n * @public\n * @param {Revenue} revenue_obj - the revenue object containing the revenue data being logged.\n * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99);\n * amplitude.logRevenueV2(revenue);\n */\nAmplitudeClient.prototype.logRevenueV2 = function logRevenueV2(revenue_obj) {\n  if (!this._apiKeySet('logRevenueV2()')) {\n    return;\n  }\n\n  // if revenue input is a proxied object created by the async loading snippet, convert it into an revenue object\n  if (type(revenue_obj) === 'object' && revenue_obj.hasOwnProperty('_q')) {\n    revenue_obj = _convertProxyObjectToRealObject(new Revenue(), revenue_obj);\n  }\n\n  if (revenue_obj instanceof Revenue) {\n    // only send if revenue is valid\n    if (revenue_obj && revenue_obj._isValidRevenue()) {\n      return this.logEvent(constants.REVENUE_EVENT, revenue_obj._toJSONObject());\n    }\n  } else {\n    utils.log.error('Invalid revenue input type. Expected Revenue object but saw ' + type(revenue_obj));\n  }\n};\n\n/**\n * Log revenue event with a price, quantity, and product identifier. DEPRECATED - use logRevenueV2\n * @public\n * @deprecated\n * @param {number} price - price of revenue event\n * @param {number} quantity - (optional) quantity of products in revenue event. If no quantity specified default to 1.\n * @param {string} product - (optional) product identifier\n * @example amplitudeClient.logRevenue(3.99, 1, 'product_1234');\n */\nAmplitudeClient.prototype.logRevenue = function logRevenue(price, quantity, product) {\n  // Test that the parameters are of the right type.\n  if (!this._apiKeySet('logRevenue()') || !_isNumber(price) || quantity !== undefined && !_isNumber(quantity)) {\n    // utils.log('Price and quantity arguments to logRevenue must be numbers');\n    return -1;\n  }\n\n  return this._logEvent(constants.REVENUE_EVENT, {}, {\n    productId: product,\n    special: 'revenue_amount',\n    quantity: quantity || 1,\n    price: price\n  }, null, null, null, null, null);\n};\n\n/**\n * Remove events in storage with event ids up to and including maxEventId.\n * @private\n */\nAmplitudeClient.prototype.removeEvents = function removeEvents(maxEventId, maxIdentifyId) {\n  _removeEvents(this, '_unsentEvents', maxEventId);\n  _removeEvents(this, '_unsentIdentifys', maxIdentifyId);\n};\n\n/**\n * Helper function to remove events up to maxId from a single queue.\n * Does a true filter in case events get out of order or old events are removed.\n * @private\n */\nvar _removeEvents = function _removeEvents(scope, eventQueue, maxId) {\n  if (maxId < 0) {\n    return;\n  }\n\n  var filteredEvents = [];\n  for (var i = 0; i < scope[eventQueue].length || 0; i++) {\n    if (scope[eventQueue][i].event_id > maxId) {\n      filteredEvents.push(scope[eventQueue][i]);\n    }\n  }\n  scope[eventQueue] = filteredEvents;\n};\n\n/**\n * Send unsent events. Note: this is called automatically after events are logged if option batchEvents is false.\n * If batchEvents is true, then events are only sent when batch criterias are met.\n * @private\n * @param {Amplitude~eventCallback} callback - (optional) callback to run after events are sent.\n * Note the server response code and response body are passed to the callback as input arguments.\n */\nAmplitudeClient.prototype.sendEvents = function sendEvents(callback) {\n  if (!this._apiKeySet('sendEvents()')) {\n    if (type(callback) === 'function') {\n      callback(0, 'No request sent', { reason: 'API key not set' });\n    }\n    return;\n  }\n  if (this.options.optOut) {\n    if (type(callback) === 'function') {\n      callback(0, 'No request sent', { reason: 'optOut is set to true' });\n    }\n    return;\n  }\n  if (this._unsentCount() === 0) {\n    if (type(callback) === 'function') {\n      callback(0, 'No request sent', { reason: 'No events to send' });\n    }\n    return;\n  }\n  if (this._sending) {\n    if (type(callback) === 'function') {\n      callback(0, 'No request sent', { reason: 'Request already in progress' });\n    }\n    return;\n  }\n\n  this._sending = true;\n  var protocol = this.options.forceHttps ? 'https' : 'https:' === window.location.protocol ? 'https' : 'http';\n  var url = protocol + '://' + this.options.apiEndpoint + '/';\n\n  // fetch events to send\n  var numEvents = Math.min(this._unsentCount(), this.options.uploadBatchSize);\n  var mergedEvents = this._mergeEventsAndIdentifys(numEvents);\n  var maxEventId = mergedEvents.maxEventId;\n  var maxIdentifyId = mergedEvents.maxIdentifyId;\n  var events = JSON.stringify(mergedEvents.eventsToSend);\n  var uploadTime = new Date().getTime();\n\n  var data = {\n    client: this.options.apiKey,\n    e: events,\n    v: constants.API_VERSION,\n    upload_time: uploadTime,\n    checksum: md5(constants.API_VERSION + this.options.apiKey + events + uploadTime)\n  };\n\n  var scope = this;\n  new Request(url, data).send(function (status, response) {\n    scope._sending = false;\n    try {\n      if (status === 200 && response === 'success') {\n        scope.removeEvents(maxEventId, maxIdentifyId);\n\n        // Update the event cache after the removal of sent events.\n        if (scope.options.saveEvents) {\n          scope.saveEvents();\n        }\n\n        // Send more events if any queued during previous send.\n        if (!scope._sendEventsIfReady(callback) && type(callback) === 'function') {\n          callback(status, response);\n        }\n\n        // handle payload too large\n      } else if (status === 413) {\n        // utils.log('request too large');\n        // Can't even get this one massive event through. Drop it, even if it is an identify.\n        if (scope.options.uploadBatchSize === 1) {\n          scope.removeEvents(maxEventId, maxIdentifyId);\n        }\n\n        // The server complained about the length of the request. Backoff and try again.\n        scope.options.uploadBatchSize = Math.ceil(numEvents / 2);\n        scope.sendEvents(callback);\n      } else if (type(callback) === 'function') {\n        // If server turns something like a 400\n        callback(status, response);\n      }\n    } catch (e) {\n      // utils.log('failed upload');\n    }\n  });\n};\n\n/**\n * Merge unsent events and identifys together in sequential order based on their sequence number, for uploading.\n * @private\n */\nAmplitudeClient.prototype._mergeEventsAndIdentifys = function _mergeEventsAndIdentifys(numEvents) {\n  // coalesce events from both queues\n  var eventsToSend = [];\n  var eventIndex = 0;\n  var maxEventId = -1;\n  var identifyIndex = 0;\n  var maxIdentifyId = -1;\n\n  while (eventsToSend.length < numEvents) {\n    var event;\n    var noIdentifys = identifyIndex >= this._unsentIdentifys.length;\n    var noEvents = eventIndex >= this._unsentEvents.length;\n\n    // case 0: no events or identifys left\n    // note this should not happen, this means we have less events and identifys than expected\n    if (noEvents && noIdentifys) {\n      utils.log.error('Merging Events and Identifys, less events and identifys than expected');\n      break;\n    }\n\n    // case 1: no identifys - grab from events\n    else if (noIdentifys) {\n        event = this._unsentEvents[eventIndex++];\n        maxEventId = event.event_id;\n\n        // case 2: no events - grab from identifys\n      } else if (noEvents) {\n        event = this._unsentIdentifys[identifyIndex++];\n        maxIdentifyId = event.event_id;\n\n        // case 3: need to compare sequence numbers\n      } else {\n        // events logged before v2.5.0 won't have a sequence number, put those first\n        if (!('sequence_number' in this._unsentEvents[eventIndex]) || this._unsentEvents[eventIndex].sequence_number < this._unsentIdentifys[identifyIndex].sequence_number) {\n          event = this._unsentEvents[eventIndex++];\n          maxEventId = event.event_id;\n        } else {\n          event = this._unsentIdentifys[identifyIndex++];\n          maxIdentifyId = event.event_id;\n        }\n      }\n\n    eventsToSend.push(event);\n  }\n\n  return {\n    eventsToSend: eventsToSend,\n    maxEventId: maxEventId,\n    maxIdentifyId: maxIdentifyId\n  };\n};\n\n/**\n * Set global user properties. Note this is deprecated, and we recommend using setUserProperties\n * @public\n * @deprecated\n */\nAmplitudeClient.prototype.setGlobalUserProperties = function setGlobalUserProperties(userProperties) {\n  this.setUserProperties(userProperties);\n};\n\n/**\n * Get the current version of Amplitude's Javascript SDK.\n * @public\n * @returns {number} version number\n * @example var amplitudeVersion = amplitude.__VERSION__;\n */\nAmplitudeClient.prototype.__VERSION__ = version;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = _overArg(Object.keys, Object);\n\nvar _nativeKeys = nativeKeys;\n\n/** Used for built-in method references. */\nvar objectProto$12 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$11 = objectProto$12.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!_isPrototype(object)) {\n    return _nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty$11.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nvar _baseKeys = baseKeys;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike_1(object) ? _arrayLikeKeys(object) : _baseKeys(object);\n}\n\nvar keys_1 = keys;\n\n/** Used for built-in method references. */\nvar objectProto$11 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$10 = objectProto$11.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * function Bar() {\n *   this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = _createAssigner(function(object, source) {\n  if (_isPrototype(source) || isArrayLike_1(source)) {\n    _copyObject(source, keys_1(source), object);\n    return;\n  }\n  for (var key in source) {\n    if (hasOwnProperty$10.call(source, key)) {\n      _assignValue(object, key, source[key]);\n    }\n  }\n});\n\nvar assign_1$1 = assign;\n\n/**\n * Amplitude SDK API - instance manager.\n * Function calls directly on amplitude have been deprecated. Please call methods on the default shared instance: amplitude.getInstance() instead.\n * See [Readme]{@link https://github.com/amplitude/Amplitude-Javascript#300-update-and-logging-events-to-multiple-amplitude-apps} for more information about this change.\n * @constructor Amplitude\n * @public\n * @example var amplitude = new Amplitude();\n */\nvar Amplitude = function Amplitude() {\n  this.options = assign_1$1({}, DEFAULT_OPTIONS);\n  this._q = [];\n  this._instances = {}; // mapping of instance names to instances\n};\n\nAmplitude.prototype.Identify = Identify;\nAmplitude.prototype.Revenue = Revenue;\n\nAmplitude.prototype.getInstance = function getInstance(instance) {\n  instance = utils.isEmptyString(instance) ? constants.DEFAULT_INSTANCE : instance.toLowerCase();\n  var client = this._instances[instance];\n  if (client === undefined) {\n    client = new AmplitudeClient(instance);\n    this._instances[instance] = client;\n  }\n  return client;\n};\n\n/**\n * Initializes the Amplitude Javascript SDK with your apiKey and any optional configurations.\n * This is required before any other methods can be called.\n * @public\n * @param {string} apiKey - The API key for your app.\n * @param {string} opt_userId - (optional) An identifier for this user.\n * @param {object} opt_config - (optional) Configuration options.\n * See [Readme]{@link https://github.com/amplitude/Amplitude-Javascript#configuration-options} for list of options and default values.\n * @param {function} opt_callback - (optional) Provide a callback function to run after initialization is complete.\n * @deprecated Please use amplitude.getInstance().init(apiKey, opt_userId, opt_config, opt_callback);\n * @example amplitude.init('API_KEY', 'USER_ID', {includeReferrer: true, includeUtm: true}, function() { alert('init complete'); });\n */\nAmplitude.prototype.init = function init(apiKey, opt_userId, opt_config, opt_callback) {\n  this.getInstance().init(apiKey, opt_userId, opt_config, function (instance) {\n    // make options such as deviceId available for callback functions\n    this.options = instance.options;\n    if (type(opt_callback) === 'function') {\n      opt_callback(instance);\n    }\n  }.bind(this));\n};\n\n/**\n * Run functions queued up by proxy loading snippet\n * @private\n */\nAmplitude.prototype.runQueuedFunctions = function () {\n  // run queued up old versions of functions\n  for (var i = 0; i < this._q.length; i++) {\n    var fn = this[this._q[i][0]];\n    if (type(fn) === 'function') {\n      fn.apply(this, this._q[i].slice(1));\n    }\n  }\n  this._q = []; // clear function queue after running\n\n  // run queued up functions on instances\n  for (var instance in this._instances) {\n    if (this._instances.hasOwnProperty(instance)) {\n      this._instances[instance].runQueuedFunctions();\n    }\n  }\n};\n\n/**\n * Returns true if a new session was created during initialization, otherwise false.\n * @public\n * @return {boolean} Whether a new session was created during initialization.\n * @deprecated Please use amplitude.getInstance().isNewSession();\n */\nAmplitude.prototype.isNewSession = function isNewSession() {\n  return this.getInstance().isNewSession();\n};\n\n/**\n * Returns the id of the current session.\n * @public\n * @return {number} Id of the current session.\n * @deprecated Please use amplitude.getInstance().getSessionId();\n */\nAmplitude.prototype.getSessionId = function getSessionId() {\n  return this.getInstance().getSessionId();\n};\n\n/**\n * Increments the eventId and returns it.\n * @private\n */\nAmplitude.prototype.nextEventId = function nextEventId() {\n  return this.getInstance().nextEventId();\n};\n\n/**\n * Increments the identifyId and returns it.\n * @private\n */\nAmplitude.prototype.nextIdentifyId = function nextIdentifyId() {\n  return this.getInstance().nextIdentifyId();\n};\n\n/**\n * Increments the sequenceNumber and returns it.\n * @private\n */\nAmplitude.prototype.nextSequenceNumber = function nextSequenceNumber() {\n  return this.getInstance().nextSequenceNumber();\n};\n\n/**\n * Saves unsent events and identifies to localStorage. JSON stringifies event queues before saving.\n * Note: this is called automatically every time events are logged, unless you explicitly set option saveEvents to false.\n * @private\n */\nAmplitude.prototype.saveEvents = function saveEvents() {\n  this.getInstance().saveEvents();\n};\n\n/**\n * Sets a customer domain for the amplitude cookie. Useful if you want to support cross-subdomain tracking.\n * @public\n * @param {string} domain to set.\n * @deprecated Please use amplitude.getInstance().setDomain(domain);\n * @example amplitude.setDomain('.amplitude.com');\n */\nAmplitude.prototype.setDomain = function setDomain(domain) {\n  this.getInstance().setDomain(domain);\n};\n\n/**\n * Sets an identifier for the current user.\n * @public\n * @param {string} userId - identifier to set. Can be null.\n * @deprecated Please use amplitude.getInstance().setUserId(userId);\n * @example amplitude.setUserId('joe@gmail.com');\n */\nAmplitude.prototype.setUserId = function setUserId(userId) {\n  this.getInstance().setUserId(userId);\n};\n\n/**\n * Add user to a group or groups. You need to specify a groupType and groupName(s).\n * For example you can group people by their organization.\n * In that case groupType is \"orgId\" and groupName would be the actual ID(s).\n * groupName can be a string or an array of strings to indicate a user in multiple gruups.\n * You can also call setGroup multiple times with different groupTypes to track multiple types of groups (up to 5 per app).\n * Note: this will also set groupType: groupName as a user property.\n * See the [SDK Readme]{@link https://github.com/amplitude/Amplitude-Javascript#setting-groups} for more information.\n * @public\n * @param {string} groupType - the group type (ex: orgId)\n * @param {string|list} groupName - the name of the group (ex: 15), or a list of names of the groups\n * @deprecated Please use amplitude.getInstance().setGroup(groupType, groupName);\n * @example amplitude.setGroup('orgId', 15); // this adds the current user to orgId 15.\n */\nAmplitude.prototype.setGroup = function (groupType, groupName) {\n  this.getInstance().setGroup(groupType, groupName);\n};\n\n/**\n * Sets whether to opt current user out of tracking.\n * @public\n * @param {boolean} enable - if true then no events will be logged or sent.\n * @deprecated Please use amplitude.getInstance().setOptOut(enable);\n * @example: amplitude.setOptOut(true);\n */\nAmplitude.prototype.setOptOut = function setOptOut(enable) {\n  this.getInstance().setOptOut(enable);\n};\n\n/**\n  * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n  * are doing. This can be used in conjunction with `setUserId(null)` to anonymize users after they log out.\n  * With a null userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n  * This uses src/uuid.js to regenerate the deviceId.\n  * @public\n  * @deprecated Please use amplitude.getInstance().regenerateDeviceId();\n  */\nAmplitude.prototype.regenerateDeviceId = function regenerateDeviceId() {\n  this.getInstance().regenerateDeviceId();\n};\n\n/**\n  * Sets a custom deviceId for current user. Note: this is not recommended unless you know what you are doing\n  * (like if you have your own system for managing deviceIds). Make sure the deviceId you set is sufficiently unique\n  * (we recommend something like a UUID - see src/uuid.js for an example of how to generate) to prevent conflicts with other devices in our system.\n  * @public\n  * @param {string} deviceId - custom deviceId for current user.\n  * @deprecated Please use amplitude.getInstance().setDeviceId(deviceId);\n  * @example amplitude.setDeviceId('45f0954f-eb79-4463-ac8a-233a6f45a8f0');\n  */\nAmplitude.prototype.setDeviceId = function setDeviceId(deviceId) {\n  this.getInstance().setDeviceId(deviceId);\n};\n\n/**\n * Sets user properties for the current user.\n * @public\n * @param {object} - object with string keys and values for the user properties to set.\n * @param {boolean} - DEPRECATED opt_replace: in earlier versions of the JS SDK the user properties object was kept in\n * memory and replace = true would replace the object in memory. Now the properties are no longer stored in memory, so replace is deprecated.\n * @deprecated Please use amplitude.getInstance.setUserProperties(userProperties);\n * @example amplitude.setUserProperties({'gender': 'female', 'sign_up_complete': true})\n */\nAmplitude.prototype.setUserProperties = function setUserProperties(userProperties) {\n  this.getInstance().setUserProperties(userProperties);\n};\n\n/**\n * Clear all of the user properties for the current user. Note: clearing user properties is irreversible!\n * @public\n * @deprecated Please use amplitude.getInstance().clearUserProperties();\n * @example amplitude.clearUserProperties();\n */\nAmplitude.prototype.clearUserProperties = function clearUserProperties() {\n  this.getInstance().clearUserProperties();\n};\n\n/**\n * Send an identify call containing user property operations to Amplitude servers.\n * See [Readme]{@link https://github.com/amplitude/Amplitude-Javascript#user-properties-and-user-property-operations}\n * for more information on the Identify API and user property operations.\n * @param {Identify} identify_obj - the Identify object containing the user property operations to send.\n * @param {Amplitude~eventCallback} opt_callback - (optional) callback function to run when the identify event has been sent.\n * Note: the server response code and response body from the identify event upload are passed to the callback function.\n * @deprecated Please use amplitude.getInstance().identify(identify);\n * @example\n * var identify = new amplitude.Identify().set('colors', ['rose', 'gold']).add('karma', 1).setOnce('sign_up_date', '2016-03-31');\n * amplitude.identify(identify);\n */\nAmplitude.prototype.identify = function (identify_obj, opt_callback) {\n  this.getInstance().identify(identify_obj, opt_callback);\n};\n\n/**\n * Set a versionName for your application.\n * @public\n * @param {string} versionName - The version to set for your application.\n * @deprecated Please use amplitude.getInstance().setVersionName(versionName);\n * @example amplitude.setVersionName('1.12.3');\n */\nAmplitude.prototype.setVersionName = function setVersionName(versionName) {\n  this.getInstance().setVersionName(versionName);\n};\n\n/**\n * This is the callback for logEvent and identify calls. It gets called after the event/identify is uploaded,\n * and the server response code and response body from the upload request are passed to the callback function.\n * @callback Amplitude~eventCallback\n * @param {number} responseCode - Server response code for the event / identify upload request.\n * @param {string} responseBody - Server response body for the event / identify upload request.\n */\n\n/**\n * Log an event with eventType and eventProperties\n * @public\n * @param {string} eventType - name of event\n * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * @deprecated Please use amplitude.getInstance().logEvent(eventType, eventProperties, opt_callback);\n * @example amplitude.logEvent('Clicked Homepage Button', {'finished_flow': false, 'clicks': 15});\n */\nAmplitude.prototype.logEvent = function logEvent(eventType, eventProperties, opt_callback) {\n  return this.getInstance().logEvent(eventType, eventProperties, opt_callback);\n};\n\n/**\n * Log an event with eventType, eventProperties, and groups. Use this to set event-level groups.\n * Note: the group(s) set only apply for the specific event type being logged and does not persist on the user\n * (unless you explicitly set it with setGroup).\n * See the [SDK Readme]{@link https://github.com/amplitude/Amplitude-Javascript#setting-groups} for more information\n * about groups and Count by Distinct on the Amplitude platform.\n * @public\n * @param {string} eventType - name of event\n * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n * @param {object} groups - (optional) an object with string groupType: groupName values for the event being logged.\n * groupName can be a string or an array of strings.\n * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * Deprecated Please use amplitude.getInstance().logEventWithGroups(eventType, eventProperties, groups, opt_callback);\n * @example amplitude.logEventWithGroups('Clicked Button', null, {'orgId': 24});\n */\nAmplitude.prototype.logEventWithGroups = function (eventType, eventProperties, groups, opt_callback) {\n  return this.getInstance().logEventWithGroups(eventType, eventProperties, groups, opt_callback);\n};\n\n/**\n * Log revenue with Revenue interface. The new revenue interface allows for more revenue fields like\n * revenueType and event properties.\n * See [Readme]{@link https://github.com/amplitude/Amplitude-Javascript#tracking-revenue}\n * for more information on the Revenue interface and logging revenue.\n * @public\n * @param {Revenue} revenue_obj - the revenue object containing the revenue data being logged.\n * @deprecated Please use amplitude.getInstance().logRevenueV2(revenue_obj);\n * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99);\n * amplitude.logRevenueV2(revenue);\n */\nAmplitude.prototype.logRevenueV2 = function logRevenueV2(revenue_obj) {\n  return this.getInstance().logRevenueV2(revenue_obj);\n};\n\n/**\n * Log revenue event with a price, quantity, and product identifier. DEPRECATED - use logRevenueV2\n * @public\n * @param {number} price - price of revenue event\n * @param {number} quantity - (optional) quantity of products in revenue event. If no quantity specified default to 1.\n * @param {string} product - (optional) product identifier\n * @deprecated Please use amplitude.getInstance().logRevenueV2(revenue_obj);\n * @example amplitude.logRevenue(3.99, 1, 'product_1234');\n */\nAmplitude.prototype.logRevenue = function logRevenue(price, quantity, product) {\n  return this.getInstance().logRevenue(price, quantity, product);\n};\n\n/**\n * Remove events in storage with event ids up to and including maxEventId.\n * @private\n */\nAmplitude.prototype.removeEvents = function removeEvents(maxEventId, maxIdentifyId) {\n  this.getInstance().removeEvents(maxEventId, maxIdentifyId);\n};\n\n/**\n * Send unsent events. Note: this is called automatically after events are logged if option batchEvents is false.\n * If batchEvents is true, then events are only sent when batch criterias are met.\n * @private\n * @param {Amplitude~eventCallback} callback - (optional) callback to run after events are sent.\n * Note the server response code and response body are passed to the callback as input arguments.\n */\nAmplitude.prototype.sendEvents = function sendEvents(callback) {\n  this.getInstance().sendEvents(callback);\n};\n\n/**\n * Set global user properties. Note this is deprecated, and we recommend using setUserProperties\n * @public\n * @deprecated\n */\nAmplitude.prototype.setGlobalUserProperties = function setGlobalUserProperties(userProperties) {\n  this.getInstance().setUserProperties(userProperties);\n};\n\n/**\n * Get the current version of Amplitude's Javascript SDK.\n * @public\n * @returns {number} version number\n * @example var amplitudeVersion = amplitude.__VERSION__;\n */\nAmplitude.prototype.__VERSION__ = version;\n\n/* jshint expr:true */\nvar old = window.amplitude || {};\nvar newInstance = new Amplitude();\nnewInstance._q = old._q || [];\nfor (var instance in old._iq) {\n  // migrate each instance's queue\n  if (old._iq.hasOwnProperty(instance)) {\n    newInstance.getInstance(instance)._q = old._iq[instance]._q || [];\n  }\n}\n\nreturn newInstance;\n\n})));\n","function Postis(options) {\n  var scope = options.scope;\n  var targetWindow = options.window;\n  var windowForEventListening = options.windowForEventListening || window;\n  var listeners = {};\n  var sendBuffer = [];\n  var listenBuffer = {};\n  var ready = false;\n  var readyMethod = \"__ready__\";\n  var readynessCheck;\n\n  var listener = function(event) {\n    var data;\n    try {\n      data = JSON.parse(event.data);\n    } catch (e) {\n      return;\n    }\n\n    if (data.postis && data.scope === scope) {\n      var listenersForMethod = listeners[data.method];\n      if (listenersForMethod) {\n        for (var i = 0; i < listenersForMethod.length; i++) {\n          listenersForMethod[i].call(null, data.params);\n        }\n      } else {\n        listenBuffer[data.method] = listenBuffer[data.method] || [];\n        listenBuffer[data.method].push(data.params);\n      }\n    }\n  };\n\n  windowForEventListening.addEventListener(\"message\", listener, false);\n\n  var postis = {\n    listen: function (method, callback) {\n      listeners[method] = listeners[method] || [];\n      listeners[method].push(callback);\n\n      var listenBufferForMethod = listenBuffer[method];\n      if (listenBufferForMethod) {\n        var listenersForMethod = listeners[method];\n        for (var i = 0; i < listenersForMethod.length; i++) {\n          for (var j = 0; j < listenBufferForMethod.length; j++) {\n            listenersForMethod[i].call(null, listenBufferForMethod[j]);\n          }\n        }\n      }\n      delete listenBuffer[method];\n    },\n\n    send: function (opts) {\n      var method = opts.method;\n\n      if ((ready || opts.method === readyMethod) && (targetWindow && typeof targetWindow.postMessage === \"function\")) {\n        targetWindow.postMessage(JSON.stringify({\n          postis: true,\n          scope: scope,\n          method: method,\n          params: opts.params\n        }), \"*\");\n      } else {\n        sendBuffer.push(opts);\n      }\n    },\n\n    ready: function (callback) {\n      if (ready) {\n        callback();\n      } else {\n        setTimeout(function () { postis.ready(callback); }, 50);\n      }\n    },\n\n    destroy: function (callback) {\n      clearInterval(readynessCheck);\n      ready = false;\n      if (windowForEventListening && typeof windowForEventListening.removeEventListener === \"function\") {\n        windowForEventListening.removeEventListener(\"message\", listener);\n      }\n      callback && callback();\n    }\n  };\n\n  var readyCheckID = +new Date() + Math.random() + \"\";\n\n  readynessCheck = setInterval(function () {\n    postis.send({\n      method: readyMethod,\n      params: readyCheckID\n    });\n  }, 50);\n\n  postis.listen(readyMethod, function (id) {\n    if (id === readyCheckID) {\n      clearInterval(readynessCheck);\n      ready = true;\n\n      for (var i = 0; i < sendBuffer.length; i++) {\n        postis.send(sendBuffer[i]);\n      }\n      sendBuffer = [];\n    } else {\n      postis.send({\n        method: readyMethod,\n        params: id\n      });\n    }\n  });\n\n  return postis;\n}\n\nmodule.exports = Postis;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar ChevronDownIcon = function ChevronDownIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M8.292 10.293a1.009 1.009 0 0 0 0 1.419l2.939 2.965c.218.215.5.322.779.322s.556-.107.769-.322l2.93-2.955a1.01 1.01 0 0 0 0-1.419.987.987 0 0 0-1.406 0l-2.298 2.317-2.307-2.327a.99.99 0 0 0-1.406 0z\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\"/></svg>\"\n  }, props));\n};\n\nChevronDownIcon.displayName = 'ChevronDownIcon';\nvar _default = ChevronDownIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar CheckboxIcon = function CheckboxIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><rect fill=\\\"currentColor\\\" x=\\\"6\\\" y=\\\"6\\\" width=\\\"12\\\" height=\\\"12\\\" rx=\\\"2\\\"/><path d=\\\"M9.707 11.293a1 1 0 1 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4a1 1 0 1 0-1.414-1.414L11 12.586l-1.293-1.293z\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nCheckboxIcon.displayName = 'CheckboxIcon';\nvar _default = CheckboxIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar RadioIcon = function RadioIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><circle fill=\\\"currentColor\\\" cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"6\\\"/><circle fill=\\\"inherit\\\" cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"2\\\"/></g></svg>\"\n  }, props));\n};\n\nRadioIcon.displayName = 'RadioIcon';\nvar _default = RadioIcon;\nexports.default = _default;","'use strict';\n\nfunction find(array, predicate, context) {\n  if (typeof Array.prototype.find === 'function') {\n    return array.find(predicate, context);\n  }\n\n  context = context || this;\n  var length = array.length;\n  var i;\n\n  if (typeof predicate !== 'function') {\n    throw new TypeError(predicate + ' is not a function');\n  }\n\n  for (i = 0; i < length; i++) {\n    if (predicate.call(context, array[i], i, array)) {\n      return array[i];\n    }\n  }\n}\n\nmodule.exports = find;\n","//\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n  var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n  if (ret !== void 0) {\n    return !!ret;\n  }\n\n  if (objA === objB) {\n    return true;\n  }\n\n  if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n  // Test for A's keys different from B.\n  for (var idx = 0; idx < keysA.length; idx++) {\n    var key = keysA[idx];\n\n    if (!bHasOwnProperty(key)) {\n      return false;\n    }\n\n    var valueA = objA[key];\n    var valueB = objB[key];\n\n    ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n    if (ret === false || (ret === void 0 && valueA !== valueB)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar ErrorIcon = function ErrorIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><path d=\\\"M13.416 4.417a2.002 2.002 0 0 0-2.832 0l-6.168 6.167a2.002 2.002 0 0 0 0 2.833l6.168 6.167a2.002 2.002 0 0 0 2.832 0l6.168-6.167a2.002 2.002 0 0 0 0-2.833l-6.168-6.167z\\\" fill=\\\"currentColor\\\"/><path d=\\\"M12 14a1 1 0 0 1-1-1V8a1 1 0 0 1 2 0v5a1 1 0 0 1-1 1m0 3a1 1 0 0 1 0-2 1 1 0 0 1 0 2\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nErrorIcon.displayName = 'ErrorIcon';\nvar _default = ErrorIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar WarningIcon = function WarningIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><path d=\\\"M12.938 4.967c-.518-.978-1.36-.974-1.876 0L3.938 18.425c-.518.978-.045 1.771 1.057 1.771h14.01c1.102 0 1.573-.797 1.057-1.771L12.938 4.967z\\\" fill=\\\"currentColor\\\"/><path d=\\\"M12 15a1 1 0 0 1-1-1V9a1 1 0 0 1 2 0v5a1 1 0 0 1-1 1m0 3a1 1 0 0 1 0-2 1 1 0 0 1 0 2\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nWarningIcon.displayName = 'WarningIcon';\nvar _default = WarningIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar WarningIcon = function WarningIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><path d=\\\"M12.938 4.967c-.518-.978-1.36-.974-1.876 0L3.938 18.425c-.518.978-.045 1.771 1.057 1.771h14.01c1.102 0 1.573-.797 1.057-1.771L12.938 4.967z\\\" fill=\\\"currentColor\\\"/><path d=\\\"M12 15a1 1 0 0 1-1-1V9a1 1 0 0 1 2 0v5a1 1 0 0 1-1 1m0 3a1 1 0 0 1 0-2 1 1 0 0 1 0 2\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nWarningIcon.displayName = 'WarningIcon';\nvar _default = WarningIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar CheckCircleIcon = function CheckCircleIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><circle fill=\\\"currentColor\\\" cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M9.707 11.293a1 1 0 1 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4a1 1 0 1 0-1.414-1.414L11 12.586l-1.293-1.293z\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nCheckCircleIcon.displayName = 'CheckCircleIcon';\nvar _default = CheckCircleIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar InfoIcon = function InfoIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><path d=\\\"M2 12c0 5.523 4.477 10 10 10s10-4.477 10-10S17.523 2 12 2 2 6.477 2 12z\\\" fill=\\\"currentColor\\\"/><rect fill=\\\"inherit\\\" x=\\\"11\\\" y=\\\"10\\\" width=\\\"2\\\" height=\\\"7\\\" rx=\\\"1\\\"/><circle fill=\\\"inherit\\\" cx=\\\"12\\\" cy=\\\"8\\\" r=\\\"1\\\"/></g></svg>\"\n  }, props));\n};\n\nInfoIcon.displayName = 'InfoIcon';\nvar _default = InfoIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar ErrorIcon = function ErrorIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><path d=\\\"M13.416 4.417a2.002 2.002 0 0 0-2.832 0l-6.168 6.167a2.002 2.002 0 0 0 0 2.833l6.168 6.167a2.002 2.002 0 0 0 2.832 0l6.168-6.167a2.002 2.002 0 0 0 0-2.833l-6.168-6.167z\\\" fill=\\\"currentColor\\\"/><path d=\\\"M12 14a1 1 0 0 1-1-1V8a1 1 0 0 1 2 0v5a1 1 0 0 1-1 1m0 3a1 1 0 0 1 0-2 1 1 0 0 1 0 2\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nErrorIcon.displayName = 'ErrorIcon';\nvar _default = ErrorIcon;\nexports.default = _default;","const logger = require('jitsi-meet-logger').getLogger(__filename);\n\n/**\n * Manages a queue of functions where the current function in progress will\n * automatically execute the next queued function.\n */\nexport class TaskQueue {\n    /**\n     * Creates a new instance of {@link TaskQueue} and sets initial instance\n     * variable values.\n     */\n    constructor() {\n        this._queue = [];\n        this._currentTask = null;\n\n        this._onTaskComplete = this._onTaskComplete.bind(this);\n    }\n\n    /**\n     * Adds a new function to the queue. It will be immediately invoked if no\n     * other functions are queued.\n     *\n     * @param {Function} taskFunction - The function to be queued for execution.\n     * @private\n     * @returns {void}\n     */\n    enqueue(taskFunction) {\n        this._queue.push(taskFunction);\n        this._executeNext();\n    }\n\n    /**\n     * If no queued task is currently executing, invokes the first task in the\n     * queue if any.\n     *\n     * @private\n     * @returns {void}\n     */\n    _executeNext() {\n        if (this._currentTask) {\n            logger.warn('Task queued while a task is in progress.');\n\n            return;\n        }\n\n        this._currentTask = this._queue.shift() || null;\n\n        if (this._currentTask) {\n            this._currentTask(this._onTaskComplete);\n        }\n    }\n\n    /**\n     * Prepares to invoke the next function in the queue.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onTaskComplete() {\n        this._currentTask = null;\n        this._executeNext();\n    }\n}\n","\"use strict\";\nexports.__esModule = true;\nvar enums_1 = require(\"./enums\");\nvar time_zone_map_1 = require(\"./time-zone-map\");\nexports.findIana = function (windowsTimeZone, territory) {\n    if (territory === void 0) { territory = enums_1.Territory[\"001\"]; }\n    var entry = time_zone_map_1.map.find(function (_a) {\n        var itemName = _a.windowsName, itemTerritory = _a.territory;\n        return itemName === windowsTimeZone && itemTerritory === territory;\n    });\n    if (typeof entry === \"undefined\")\n        return undefined;\n    return entry.iana;\n};\nexports.findOneIana = function (windowsTimeZone, territory) {\n    if (territory === void 0) { territory = enums_1.Territory[\"001\"]; }\n    var result = exports.findIana(windowsTimeZone, territory);\n    if (typeof result === \"undefined\")\n        return undefined;\n    return result[0];\n};\nexports.findWindows = function (ianaTimeZone) {\n    var entry = time_zone_map_1.map.find(function (_a) {\n        var itemName = _a.iana;\n        return itemName.includes(ianaTimeZone);\n    });\n    if (typeof entry === \"undefined\")\n        return undefined;\n    return entry.windowsName;\n};\n//# sourceMappingURL=index.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar CheckboxIndeterminateIcon = function CheckboxIndeterminateIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><rect fill=\\\"currentColor\\\" x=\\\"6\\\" y=\\\"6\\\" width=\\\"12\\\" height=\\\"12\\\" rx=\\\"2\\\"/><rect fill=\\\"inherit\\\" x=\\\"8\\\" y=\\\"11\\\" width=\\\"8\\\" height=\\\"2\\\" rx=\\\"1\\\"/></g></svg>\"\n  }, props));\n};\n\nCheckboxIndeterminateIcon.displayName = 'CheckboxIndeterminateIcon';\nvar _default = CheckboxIndeterminateIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar CheckboxIcon = function CheckboxIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><rect fill=\\\"currentColor\\\" x=\\\"6\\\" y=\\\"6\\\" width=\\\"12\\\" height=\\\"12\\\" rx=\\\"2\\\"/><path d=\\\"M9.707 11.293a1 1 0 1 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4a1 1 0 1 0-1.414-1.414L11 12.586l-1.293-1.293z\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nCheckboxIcon.displayName = 'CheckboxIcon';\nvar _default = CheckboxIcon;\nexports.default = _default;","/* global $, APP */\n\nimport SmallVideo from '../../../../modules/UI/videolayout/SmallVideo';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { I18nextProvider } from 'react-i18next';\nimport i18next from 'i18next';\nimport Game from '../components/Game';\n\n\nexport default class PokerTableThumb extends SmallVideo {\n\n    constructor(videoLayout) {\n        super(videoLayout);\n        this.id = 'table';\n        this.container = this.createContainer();\n        this.$container = $(this.container);\n        this._setThumbnailSize();\n        this.container.onclick = this._onContainerClick;\n    }\n\n    createContainer() {\n        const container = document.createElement('span');\n        const remoteVideosContainer\n            = document.getElementById('filmstripRemoteVideosContainer');\n        const localVideoContainer\n            = document.getElementById('localVideoTileViewContainer');\n\n        container.className = 'tableThumb videocontainer';\n        remoteVideosContainer.insertBefore(container, localVideoContainer);\n        ReactDOM.render(\n            <Provider store = { APP.store }>\n                <I18nextProvider i18n = { i18next }>\n                    <Game />\n                </I18nextProvider>\n            </Provider>,\n            container\n        );\n\n        return container;\n    }\n}\n","// @flow\n\nexport { default as Poker } from './Poker';\n","/* global $ */\n\nimport SmallVideo from '../videolayout/SmallVideo';\n\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\n/**\n *\n */\nexport default class SharedVideoThumb extends SmallVideo {\n    /**\n     *\n     * @param {*} participant\n     * @param {*} videoType\n     * @param {*} VideoLayout\n     */\n    constructor(participant, videoType, VideoLayout) {\n        super(VideoLayout);\n        this.id = participant.id;\n        this.isLocal = false;\n        this.url = participant.id;\n        this.videoSpanId = 'sharedVideoContainer';\n        this.container = this.createContainer(this.videoSpanId);\n        this.$container = $(this.container);\n        this._setThumbnailSize();\n        this.bindHoverHandler();\n        this.isVideoMuted = true;\n        this.updateDisplayName();\n        this.container.onclick = this._onContainerClick;\n    }\n\n    /**\n     *\n     */\n    initializeAvatar() {} // eslint-disable-line no-empty-function\n\n    /**\n     *\n     * @param {*} spanId\n     */\n    createContainer(spanId) {\n        const container = document.createElement('span');\n\n        container.id = spanId;\n        container.className = 'videocontainer';\n\n        // add the avatar\n        const avatar = document.createElement('img');\n\n        avatar.className = 'sharedVideoAvatar';\n        avatar.src = `https://img.youtube.com/vi/${this.url}/0.jpg`;\n        container.appendChild(avatar);\n\n        const displayNameContainer = document.createElement('div');\n\n        displayNameContainer.className = 'displayNameContainer';\n        container.appendChild(displayNameContainer);\n\n        const remoteVideosContainer\n            = document.getElementById('filmstripRemoteVideosContainer');\n        const localVideoContainer\n            = document.getElementById('localVideoTileViewContainer');\n\n        remoteVideosContainer.insertBefore(container, localVideoContainer);\n\n        return container;\n    }\n\n    /**\n     * Triggers re-rendering of the display name using current instance state.\n     *\n     * @returns {void}\n     */\n    updateDisplayName() {\n        if (!this.container) {\n            logger.warn(`Unable to set displayName - ${this.videoSpanId\n            } does not exist`);\n\n            return;\n        }\n\n        this._renderDisplayName({\n            elementID: `${this.videoSpanId}_name`,\n            participantID: this.id\n        });\n    }\n}\n","/* global $, APP, interfaceConfig */\n\n/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { I18nextProvider } from 'react-i18next';\nimport { AtlasKitThemeProvider } from '@atlaskit/theme';\n\nimport { i18next } from '../../../react/features/base/i18n';\nimport {\n    JitsiParticipantConnectionStatus\n} from '../../../react/features/base/lib-jitsi-meet';\nimport {\n    getPinnedParticipant,\n    pinParticipant\n} from '../../../react/features/base/participants';\nimport { PresenceLabel } from '../../../react/features/presence-status';\nimport {\n    REMOTE_CONTROL_MENU_STATES,\n    RemoteVideoMenuTriggerButton\n} from '../../../react/features/remote-video-menu';\nimport { LAYOUTS, getCurrentLayout } from '../../../react/features/video-layout';\n/* eslint-enable no-unused-vars */\n\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\n\nimport SmallVideo from './SmallVideo';\nimport UIUtils from '../util/UIUtil';\n\n/**\n *\n * @param {*} spanId\n */\nfunction createContainer(spanId) {\n    const container = document.createElement('span');\n\n    container.id = spanId;\n    container.className = 'videocontainer';\n\n    container.innerHTML = `\n        <div class = 'videocontainer__background'></div>\n        <div class = 'videocontainer__toptoolbar'></div>\n        <div class = 'videocontainer__toolbar'></div>\n        <div class = 'videocontainer__hoverOverlay'></div>\n        <div class = 'displayNameContainer'></div>\n        <div class = 'avatar-container'></div>\n        <div class = 'poker-container'></div>\n        <div class ='presence-label-container'></div>\n        <span class = 'remotevideomenu'></span>`;\n\n    const remoteVideosContainer\n        = document.getElementById('filmstripRemoteVideosContainer');\n    const localVideoContainer\n        = document.getElementById('localVideoTileViewContainer');\n\n    remoteVideosContainer.insertBefore(container, localVideoContainer);\n\n    return container;\n}\n\n/**\n *\n */\nexport default class RemoteVideo extends SmallVideo {\n    /**\n     * Creates new instance of the <tt>RemoteVideo</tt>.\n     * @param user {JitsiParticipant} the user for whom remote video instance will\n     * be created.\n     * @param {VideoLayout} VideoLayout the video layout instance.\n     * @constructor\n     */\n    constructor(user, VideoLayout) {\n        super(VideoLayout);\n\n        this.user = user;\n        this.id = user.getId();\n        this.videoSpanId = `participant_${this.id}`;\n\n        this._audioStreamElement = null;\n        this._supportsRemoteControl = false;\n        this.statsPopoverLocation = interfaceConfig.VERTICAL_FILMSTRIP ? 'left bottom' : 'top center';\n        this.addRemoteVideoContainer();\n        this.updateIndicators();\n        this.updateDisplayName();\n        this.bindHoverHandler();\n        this.flipX = false;\n        this.isLocal = false;\n        this.popupMenuIsHovered = false;\n        this._isRemoteControlSessionActive = false;\n\n        /**\n         * The flag is set to <tt>true</tt> after the 'canplay' event has been\n         * triggered on the current video element. It goes back to <tt>false</tt>\n         * when the stream is removed. It is used to determine whether the video\n         * playback has ever started.\n         * @type {boolean}\n         */\n        this._canPlayEventReceived = false;\n\n        /**\n         * The flag is set to <tt>true</tt> if remote participant's video gets muted\n         * during his media connection disruption. This is to prevent black video\n         * being render on the thumbnail, because even though once the video has\n         * been played the image usually remains on the video element it seems that\n         * after longer period of the video element being hidden this image can be\n         * lost.\n         * @type {boolean}\n         */\n        this.mutedWhileDisconnected = false;\n\n        // Bind event handlers so they are only bound once for every instance.\n        // TODO The event handlers should be turned into actions so changes can be\n        // handled through reducers and middleware.\n        this._requestRemoteControlPermissions\n            = this._requestRemoteControlPermissions.bind(this);\n        this._setAudioVolume = this._setAudioVolume.bind(this);\n        this._stopRemoteControl = this._stopRemoteControl.bind(this);\n\n        this.container.onclick = this._onContainerClick;\n    }\n\n    /**\n     *\n     */\n    addRemoteVideoContainer() {\n        this.container = createContainer(this.videoSpanId);\n        this.$container = $(this.container);\n        this.initializeAvatar();\n        this._setThumbnailSize();\n        this.initBrowserSpecificProperties();\n        this.updateRemoteVideoMenu();\n        this.updateStatusBar();\n        this.addAudioLevelIndicator();\n        this.addPresenceLabel();\n\n        return this.container;\n    }\n\n    /**\n     * Checks whether current video is considered hovered. Currently it is hovered\n     * if the mouse is over the video, or if the connection indicator or the popup\n     * menu is shown(hovered).\n     * @private\n     * NOTE: extends SmallVideo's method\n     */\n    _isHovered() {\n        return super._isHovered() || this.popupMenuIsHovered;\n    }\n\n    /**\n     * Generates the popup menu content.\n     *\n     * @returns {Element|*} the constructed element, containing popup menu items\n     * @private\n     */\n    _generatePopupContent() {\n        if (interfaceConfig.filmStripOnly) {\n            return;\n        }\n\n        const remoteVideoMenuContainer\n            = this.container.querySelector('.remotevideomenu');\n\n        if (!remoteVideoMenuContainer) {\n            return;\n        }\n\n        const { controller } = APP.remoteControl;\n        let remoteControlState = null;\n        let onRemoteControlToggle;\n\n        if (this._supportsRemoteControl\n            && ((!APP.remoteControl.active && !this._isRemoteControlSessionActive)\n                || APP.remoteControl.controller.activeParticipant === this.id)) {\n            if (controller.getRequestedParticipant() === this.id) {\n                remoteControlState = REMOTE_CONTROL_MENU_STATES.REQUESTING;\n            } else if (controller.isStarted()) {\n                onRemoteControlToggle = this._stopRemoteControl;\n                remoteControlState = REMOTE_CONTROL_MENU_STATES.STARTED;\n            } else {\n                onRemoteControlToggle = this._requestRemoteControlPermissions;\n                remoteControlState = REMOTE_CONTROL_MENU_STATES.NOT_STARTED;\n            }\n        }\n\n        const initialVolumeValue = this._audioStreamElement && this._audioStreamElement.volume;\n\n        // hide volume when in silent mode\n        const onVolumeChange\n            = APP.store.getState()['features/base/config'].startSilent ? undefined : this._setAudioVolume;\n        const participantID = this.id;\n        const currentLayout = getCurrentLayout(APP.store.getState());\n        let remoteMenuPosition;\n\n        if (currentLayout === LAYOUTS.TILE_VIEW) {\n            remoteMenuPosition = 'left top';\n        } else if (currentLayout === LAYOUTS.VERTICAL_FILMSTRIP_VIEW) {\n            remoteMenuPosition = 'left bottom';\n        } else {\n            remoteMenuPosition = 'top center';\n        }\n\n        ReactDOM.render(\n            <Provider store = { APP.store }>\n                <I18nextProvider i18n = { i18next }>\n                    <AtlasKitThemeProvider mode = 'dark'>\n                        <RemoteVideoMenuTriggerButton\n                            initialVolumeValue = { initialVolumeValue }\n                            isAudioMuted = { this.isAudioMuted }\n                            menuPosition = { remoteMenuPosition }\n                            onMenuDisplay\n                                = {this._onRemoteVideoMenuDisplay.bind(this)}\n                            onRemoteControlToggle = { onRemoteControlToggle }\n                            onVolumeChange = { onVolumeChange }\n                            participantID = { participantID }\n                            remoteControlState = { remoteControlState } />\n                    </AtlasKitThemeProvider>\n                </I18nextProvider>\n            </Provider>,\n            remoteVideoMenuContainer);\n    }\n\n    /**\n     *\n     */\n    _onRemoteVideoMenuDisplay() {\n        this.updateRemoteVideoMenu();\n    }\n\n    /**\n     * Sets the remote control active status for the remote video.\n     *\n     * @param {boolean} isActive - The new remote control active status.\n     * @returns {void}\n     */\n    setRemoteControlActiveStatus(isActive) {\n        this._isRemoteControlSessionActive = isActive;\n        this.updateRemoteVideoMenu();\n    }\n\n    /**\n     * Sets the remote control supported value and initializes or updates the menu\n     * depending on the remote control is supported or not.\n     * @param {boolean} isSupported\n     */\n    setRemoteControlSupport(isSupported = false) {\n        if (this._supportsRemoteControl === isSupported) {\n            return;\n        }\n        this._supportsRemoteControl = isSupported;\n        this.updateRemoteVideoMenu();\n    }\n\n    /**\n     * Requests permissions for remote control session.\n     */\n    _requestRemoteControlPermissions() {\n        APP.remoteControl.controller.requestPermissions(this.id, this.VideoLayout.getLargeVideoWrapper())\n            .then(result => {\n                if (result === null) {\n                    return;\n                }\n                this.updateRemoteVideoMenu();\n                APP.UI.messageHandler.notify(\n                    'dialog.remoteControlTitle',\n                    result === false ? 'dialog.remoteControlDeniedMessage' : 'dialog.remoteControlAllowedMessage',\n                    { user: this.user.getDisplayName() || interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME }\n                );\n                if (result === true) {\n                    // the remote control permissions has been granted\n                    // pin the controlled participant\n                    const pinnedParticipant = getPinnedParticipant(APP.store.getState()) || {};\n                    const pinnedId = pinnedParticipant.id;\n\n                    if (pinnedId !== this.id) {\n                        APP.store.dispatch(pinParticipant(this.id));\n                    }\n                }\n            }, error => {\n                logger.error(error);\n                this.updateRemoteVideoMenu();\n                APP.UI.messageHandler.notify(\n                    'dialog.remoteControlTitle',\n                    'dialog.remoteControlErrorMessage',\n                    { user: this.user.getDisplayName() || interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME }\n                );\n            });\n        this.updateRemoteVideoMenu();\n    }\n\n    /**\n     * Stops remote control session.\n     */\n    _stopRemoteControl() {\n        // send message about stopping\n        APP.remoteControl.controller.stop();\n        this.updateRemoteVideoMenu();\n    }\n\n    /**\n     * Change the remote participant's volume level.\n     *\n     * @param {int} newVal - The value to set the slider to.\n     */\n    _setAudioVolume(newVal) {\n        if (this._audioStreamElement) {\n            this._audioStreamElement.volume = newVal;\n        }\n    }\n\n    /**\n     * Updates the remote video menu.\n     *\n     * @param isMuted the new muted state to update to\n     */\n    updateRemoteVideoMenu(isMuted) {\n        if (typeof isMuted !== 'undefined') {\n            this.isAudioMuted = isMuted;\n        }\n        this._generatePopupContent();\n    }\n\n    /**\n     * @inheritDoc\n     * @override\n     */\n    setVideoMutedView(isMuted) {\n        super.setVideoMutedView(isMuted);\n\n        // Update 'mutedWhileDisconnected' flag\n        this._figureOutMutedWhileDisconnected();\n    }\n\n    /**\n     * Figures out the value of {@link #mutedWhileDisconnected} flag by taking into\n     * account remote participant's network connectivity and video muted status.\n     *\n     * @private\n     */\n    _figureOutMutedWhileDisconnected() {\n        const isActive = this.isConnectionActive();\n\n        if (!isActive && this.isVideoMuted) {\n            this.mutedWhileDisconnected = true;\n        } else if (isActive && !this.isVideoMuted) {\n            this.mutedWhileDisconnected = false;\n        }\n    }\n\n    /**\n     * Removes the remote stream element corresponding to the given stream and\n     * parent container.\n     *\n     * @param stream the MediaStream\n     * @param isVideo <tt>true</tt> if given <tt>stream</tt> is a video one.\n     */\n    removeRemoteStreamElement(stream) {\n        if (!this.container) {\n            return false;\n        }\n\n        const isVideo = stream.isVideoTrack();\n        const elementID = SmallVideo.getStreamElementID(stream);\n        const select = $(`#${elementID}`);\n\n        select.remove();\n        if (isVideo) {\n            this._canPlayEventReceived = false;\n        }\n\n        logger.info(`${isVideo ? 'Video' : 'Audio'} removed ${this.id}`, select);\n\n        if (stream === this.videoStream) {\n            this.videoStream = null;\n        }\n\n        this.updateView();\n    }\n\n    /**\n     * Checks whether the remote user associated with this <tt>RemoteVideo</tt>\n     * has connectivity issues.\n     *\n     * @return {boolean} <tt>true</tt> if the user's connection is fine or\n     * <tt>false</tt> otherwise.\n     */\n    isConnectionActive() {\n        return this.user.getConnectionStatus() === JitsiParticipantConnectionStatus.ACTIVE;\n    }\n\n    /**\n     * The remote video is considered \"playable\" once the can play event has been received. It will be allowed to\n     * display video also in {@link JitsiParticipantConnectionStatus.INTERRUPTED} if the video has received the canplay\n     * event and was not muted while not in ACTIVE state. This basically means that there is stalled video image cached\n     * that could be displayed. It's used to show \"grey video image\" in user's thumbnail when there are connectivity\n     * issues.\n     *\n     * @inheritdoc\n     * @override\n     */\n    isVideoPlayable() {\n        const connectionState = APP.conference.getParticipantConnectionStatus(this.id);\n\n        return super.isVideoPlayable()\n            && this._canPlayEventReceived\n            && (connectionState === JitsiParticipantConnectionStatus.ACTIVE\n                || (connectionState === JitsiParticipantConnectionStatus.INTERRUPTED && !this.mutedWhileDisconnected));\n    }\n\n    /**\n     * @inheritDoc\n     */\n    updateView() {\n        this.$container.toggleClass('audio-only', APP.conference.isAudioOnly());\n        this.updateConnectionStatusIndicator();\n\n        // This must be called after 'updateConnectionStatusIndicator' because it\n        // affects the display mode by modifying 'mutedWhileDisconnected' flag\n        super.updateView();\n    }\n\n    /**\n     * Updates the UI to reflect user's connectivity status.\n     */\n    updateConnectionStatusIndicator() {\n        const connectionStatus = this.user.getConnectionStatus();\n\n        logger.debug(`${this.id} thumbnail connection status: ${connectionStatus}`);\n\n        // FIXME rename 'mutedWhileDisconnected' to 'mutedWhileNotRendering'\n        // Update 'mutedWhileDisconnected' flag\n        this._figureOutMutedWhileDisconnected();\n        this.updateConnectionStatus(connectionStatus);\n    }\n\n    /**\n     * Removes RemoteVideo from the page.\n     */\n    remove() {\n        super.remove();\n        this.removePresenceLabel();\n        this.removeRemoteVideoMenu();\n    }\n\n    /**\n     *\n     * @param {*} streamElement\n     * @param {*} stream\n     */\n    waitForPlayback(streamElement, stream) {\n        const webRtcStream = stream.getOriginalStream();\n        const isVideo = stream.isVideoTrack();\n\n        if (!isVideo || webRtcStream.id === 'mixedmslabel') {\n            return;\n        }\n\n        const listener = () => {\n            this._canPlayEventReceived = true;\n            this.VideoLayout.remoteVideoActive(streamElement, this.id);\n            streamElement.removeEventListener('canplay', listener);\n\n            // Refresh to show the video\n            this.updateView();\n        };\n\n        streamElement.addEventListener('canplay', listener);\n    }\n\n    /**\n     *\n     * @param {*} stream\n     */\n    addRemoteStreamElement(stream) {\n        if (!this.container) {\n            logger.debug('Not attaching remote stream due to no container');\n\n            return;\n        }\n\n        const isVideo = stream.isVideoTrack();\n\n        isVideo ? this.videoStream = stream : this.audioStream = stream;\n\n        if (!stream.getOriginalStream()) {\n            logger.debug('Remote video stream has no original stream');\n\n            return;\n        }\n\n        let streamElement = SmallVideo.createStreamElement(stream);\n\n        // Put new stream element always in front\n        streamElement = UIUtils.prependChild(this.container, streamElement);\n\n        $(streamElement).hide();\n\n        this.waitForPlayback(streamElement, stream);\n        stream.attach(streamElement);\n\n        if (!isVideo) {\n            this._audioStreamElement = streamElement;\n\n            // If the remote video menu was created before the audio stream was\n            // attached we need to update the menu in order to show the volume\n            // slider.\n            this.updateRemoteVideoMenu();\n        }\n    }\n\n    /**\n     * Triggers re-rendering of the display name using current instance state.\n     *\n     * @returns {void}\n     */\n    updateDisplayName() {\n        if (!this.container) {\n            logger.warn(`Unable to set displayName - ${this.videoSpanId} does not exist`);\n\n            return;\n        }\n\n        this._renderDisplayName({\n            elementID: `${this.videoSpanId}_name`,\n            participantID: this.id\n        });\n    }\n\n    /**\n     * Removes remote video menu element from video element identified by\n     * given <tt>videoElementId</tt>.\n     *\n     * @param videoElementId the id of local or remote video element.\n     */\n    removeRemoteVideoMenu() {\n        const menuSpan = this.$container.find('.remotevideomenu');\n\n        if (menuSpan.length) {\n            ReactDOM.unmountComponentAtNode(menuSpan.get(0));\n            menuSpan.remove();\n        }\n    }\n\n    /**\n     * Mounts the {@code PresenceLabel} for displaying the participant's current\n     * presence status.\n     *\n     * @return {void}\n     */\n    addPresenceLabel() {\n        const presenceLabelContainer = this.container.querySelector('.presence-label-container');\n\n        if (presenceLabelContainer) {\n            ReactDOM.render(\n                <Provider store = { APP.store }>\n                    <I18nextProvider i18n = { i18next }>\n                        <PresenceLabel\n                            participantID = { this.id }\n                            className = 'presence-label' />\n                    </I18nextProvider>\n                </Provider>,\n                presenceLabelContainer);\n        }\n    }\n\n    /**\n     * Unmounts the {@code PresenceLabel} component.\n     *\n     * @return {void}\n     */\n    removePresenceLabel() {\n        const presenceLabelContainer = this.container.querySelector('.presence-label-container');\n\n        if (presenceLabelContainer) {\n            ReactDOM.unmountComponentAtNode(presenceLabelContainer);\n        }\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\nimport { connect } from '../../base/redux';\nimport { translate } from '../../base/i18n';\nimport Table from './Table';\nimport Game from './Game';\nimport Poker from './Poker';\nimport { getCurrentLayout } from '../../video-layout';\nimport { LAYOUTS } from '../../video-layout/constants';\nimport { getLocalParticipant } from '../../base/participants';\n\nexport type Props = {\n    participantId: string,\n    t: Function,\n    _currentLayout: string,\n    _localParticipantId: string,\n}\n\ntype State = {\n\n}\n\n/**\n * Implements a class to render poker in the app.\n */\nclass LargePokerContainer extends Component<Props, State> {\n\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            // value: false\n        };\n    }\n\n    render() {\n        return (\n            <div>\n                {this.props._currentLayout !== LAYOUTS.TILE_VIEW\n                && <div className = 'largePokerContainer'>\n                    <Poker participantId = { this.props.participantId } />\n                    <div className = 'poker-table-container'>\n                        <Table />\n                    </div>\n                    {this.props.participantId === 'table'\n                    && <Game />}\n                </div>}\n            </div>\n        );\n    }\n}\n\nexport function _mapStateToProps(state: Object) {\n    return {\n        _currentLayout: getCurrentLayout(state),\n        _localParticipantId: getLocalParticipant(state).id\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(LargePokerContainer));\n","/* global interfaceConfig */\n\nimport UIUtil from '../util/UIUtil';\n\n/**\n * Responsible for drawing audio levels.\n */\nconst AudioLevels = {\n    /**\n     * Fills the dot(s) with the specified \"index\", with as much opacity as\n     * indicated by \"opacity\".\n     *\n     * @param {string} elementID the parent audio indicator span element\n     * @param {number} index the index of the dots to fill, where 0 indicates\n     * the middle dot and the following increments point toward the\n     * corresponding pair of dots.\n     * @param {number} opacity the opacity to set for the specified dot.\n     */\n    _setDotLevel(elementID, index, opacity) {\n        let audioSpan\n            = document.getElementById(elementID)\n                .getElementsByClassName('audioindicator');\n\n        // Make sure the audio span is still around.\n        if (audioSpan && audioSpan.length > 0) {\n            audioSpan = audioSpan[0];\n        } else {\n            return;\n        }\n\n        const audioTopDots\n            = audioSpan.getElementsByClassName('audiodot-top');\n        const audioDotMiddle\n            = audioSpan.getElementsByClassName('audiodot-middle');\n        const audioBottomDots\n            = audioSpan.getElementsByClassName('audiodot-bottom');\n\n        // First take care of the middle dot case.\n        if (index === 0) {\n            audioDotMiddle[0].style.opacity = opacity;\n\n            return;\n        }\n\n        // Index > 0 : we are setting non-middle dots.\n        index--;// eslint-disable-line no-param-reassign\n        audioBottomDots[index].style.opacity = opacity;\n        audioTopDots[this.sideDotsCount - index - 1].style.opacity = opacity;\n    },\n\n    /**\n     * Updates the audio level of the large video.\n     *\n     * @param audioLevel the new audio level to set.\n     */\n    updateLargeVideoAudioLevel(elementId, audioLevel) {\n        const element = document.getElementById(elementId);\n\n        if (!UIUtil.isVisible(element)) {\n            return;\n        }\n\n        let level = parseFloat(audioLevel);\n\n        level = isNaN(level) ? 0 : level;\n\n        let shadowElement = element.getElementsByClassName('dynamic-shadow');\n\n        if (shadowElement && shadowElement.length > 0) {\n            shadowElement = shadowElement[0];\n        }\n\n        shadowElement.style.boxShadow = this._updateLargeVideoShadow(level);\n    },\n\n    /**\n     * Updates the large video shadow effect.\n     */\n    _updateLargeVideoShadow(level) {\n        const scale = 2;\n\n        // Internal circle audio level.\n        const int = {\n            level: level > 0.15 ? 20 : 0,\n            color: interfaceConfig.AUDIO_LEVEL_PRIMARY_COLOR\n        };\n\n        // External circle audio level.\n        const ext = {\n            level: parseFloat(\n                ((int.level * scale * level) + int.level).toFixed(0)),\n            color: interfaceConfig.AUDIO_LEVEL_SECONDARY_COLOR\n        };\n\n        // Internal blur.\n        int.blur = int.level ? 2 : 0;\n\n        // External blur.\n        ext.blur = ext.level ? 6 : 0;\n\n        return [\n            `0 0 ${int.blur}px ${int.level}px ${int.color}`,\n            `0 0 ${ext.blur}px ${ext.level}px ${ext.color}`\n        ].join(', ');\n    }\n};\n\nexport default AudioLevels;\n","/* global $, config, interfaceConfig, APP */\n\n/* eslint-disable no-unused-vars */\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\n\nimport { JitsiTrackEvents } from '../../../react/features/base/lib-jitsi-meet';\nimport { VideoTrack } from '../../../react/features/base/media';\nimport { updateSettings } from '../../../react/features/base/settings';\nimport { getLocalVideoTrack } from '../../../react/features/base/tracks';\nimport { shouldDisplayTileView } from '../../../react/features/video-layout';\n/* eslint-enable no-unused-vars */\n\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\nimport UIEvents from '../../../service/UI/UIEvents';\nimport SmallVideo from './SmallVideo';\n\n/**\n *\n */\nexport default class LocalVideo extends SmallVideo {\n    /**\n     *\n     * @param {*} VideoLayout\n     * @param {*} emitter\n     * @param {*} streamEndedCallback\n     */\n    constructor(VideoLayout, emitter, streamEndedCallback) {\n        super(VideoLayout);\n        this.videoSpanId = 'localVideoContainer';\n        this.streamEndedCallback = streamEndedCallback;\n        this.container = this.createContainer();\n        this.$container = $(this.container);\n        this.isLocal = true;\n        this._setThumbnailSize();\n        this.updateDOMLocation();\n\n        this.localVideoId = null;\n        this.bindHoverHandler();\n        if (!config.disableLocalVideoFlip) {\n            this._buildContextMenu();\n        }\n        this.emitter = emitter;\n        this.statsPopoverLocation = interfaceConfig.VERTICAL_FILMSTRIP ? 'left top' : 'top center';\n\n        Object.defineProperty(this, 'id', {\n            get() {\n                return APP.conference.getMyUserId();\n            }\n        });\n        this.initBrowserSpecificProperties();\n\n        // Set default display name.\n        this.updateDisplayName();\n\n        // Initialize the avatar display with an avatar url selected from the redux\n        // state. Redux stores the local user with a hardcoded participant id of\n        // 'local' if no id has been assigned yet.\n        this.initializeAvatar();\n\n        this.addAudioLevelIndicator();\n        this.updateIndicators();\n\n        this.container.onclick = this._onContainerClick;\n    }\n\n    /**\n     *\n     */\n    createContainer() {\n        const containerSpan = document.createElement('span');\n\n        containerSpan.classList.add('videocontainer');\n        containerSpan.id = this.videoSpanId;\n\n        containerSpan.innerHTML = `\n            <div class = 'poker-container'></div>\n            <div class = 'videocontainer__background'></div>\n            <span id = 'localVideoWrapper'></span>\n            <div class = 'videocontainer__toolbar'></div>\n            <div class = 'videocontainer__toptoolbar'></div>\n            <div class = 'videocontainer__hoverOverlay'></div>\n            <div class = 'displayNameContainer'></div>\n            <div class = 'avatar-container'></div>`;\n\n        return containerSpan;\n    }\n\n    /**\n     * Triggers re-rendering of the display name using current instance state.\n     *\n     * @returns {void}\n     */\n    updateDisplayName() {\n        if (!this.container) {\n            logger.warn(\n                    `Unable to set displayName - ${this.videoSpanId\n                    } does not exist`);\n\n            return;\n        }\n\n        this._renderDisplayName({\n            allowEditing: APP.store.getState()['features/base/jwt'].isGuest,\n            displayNameSuffix: interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME,\n            elementID: 'localDisplayName',\n            participantID: this.id\n        });\n    }\n\n    /**\n     *\n     * @param {*} stream\n     */\n    changeVideo(stream) {\n        this.videoStream = stream;\n        this.localVideoId = `localVideo_${stream.getId()}`;\n        this._updateVideoElement();\n\n        // eslint-disable-next-line eqeqeq\n        const isVideo = stream.videoType != 'desktop';\n        const settings = APP.store.getState()['features/base/settings'];\n\n        this._enableDisableContextMenu(isVideo);\n        this.setFlipX(isVideo ? settings.localFlipX : false);\n\n        const endedHandler = () => {\n            const localVideoContainer\n                = document.getElementById('localVideoWrapper');\n\n            // Only remove if there is no video and not a transition state.\n            // Previous non-react logic created a new video element with each track\n            // removal whereas react reuses the video component so it could be the\n            // stream ended but a new one is being used.\n            if (localVideoContainer && this.videoStream.isEnded()) {\n                ReactDOM.unmountComponentAtNode(localVideoContainer);\n            }\n\n            this._notifyOfStreamEnded();\n            stream.off(JitsiTrackEvents.LOCAL_TRACK_STOPPED, endedHandler);\n        };\n\n        stream.on(JitsiTrackEvents.LOCAL_TRACK_STOPPED, endedHandler);\n    }\n\n    /**\n     * Notify any subscribers of the local video stream ending.\n     *\n     * @private\n     * @returns {void}\n     */\n    _notifyOfStreamEnded() {\n        if (this.streamEndedCallback) {\n            this.streamEndedCallback(this.id);\n        }\n    }\n\n    /**\n     * Shows or hides the local video container.\n     * @param {boolean} true to make the local video container visible, false\n     * otherwise\n     */\n    setVisible(visible) {\n        // We toggle the hidden class as an indication to other interested parties\n        // that this container has been hidden on purpose.\n        this.$container.toggleClass('hidden');\n\n        // We still show/hide it as we need to overwrite the style property if we\n        // want our action to take effect. Toggling the display property through\n        // the above css class didn't succeed in overwriting the style.\n        if (visible) {\n            this.$container.show();\n        } else {\n            this.$container.hide();\n        }\n    }\n\n    /**\n     * Sets the flipX state of the video.\n     * @param val {boolean} true for flipped otherwise false;\n     */\n    setFlipX(val) {\n        this.emitter.emit(UIEvents.LOCAL_FLIPX_CHANGED, val);\n        if (!this.localVideoId) {\n            return;\n        }\n        if (val) {\n            this.selectVideoElement().addClass('flipVideoX');\n        } else {\n            this.selectVideoElement().removeClass('flipVideoX');\n        }\n    }\n\n    /**\n     * Builds the context menu for the local video.\n     */\n    _buildContextMenu() {\n        $.contextMenu({\n            selector: `#${this.videoSpanId}`,\n            zIndex: 10000,\n            items: {\n                flip: {\n                    name: 'Flip',\n                    callback: () => {\n                        const { store } = APP;\n                        const val = !store.getState()['features/base/settings']\n                        .localFlipX;\n\n                        this.setFlipX(val);\n                        store.dispatch(updateSettings({\n                            localFlipX: val\n                        }));\n                    }\n                }\n            },\n            events: {\n                show(options) {\n                    options.items.flip.name\n                        = APP.translation.generateTranslationHTML(\n                            'videothumbnail.flip');\n                }\n            }\n        });\n    }\n\n    /**\n     * Enables or disables the context menu for the local video.\n     * @param enable {boolean} true for enable, false for disable\n     */\n    _enableDisableContextMenu(enable) {\n        if (this.$container.contextMenu) {\n            this.$container.contextMenu(enable);\n        }\n    }\n\n    /**\n     * Places the {@code LocalVideo} in the DOM based on the current video layout.\n     *\n     * @returns {void}\n     */\n    updateDOMLocation() {\n        if (!this.container) {\n            return;\n        }\n        if (this.container.parentElement) {\n            this.container.parentElement.removeChild(this.container);\n        }\n\n        const appendTarget = shouldDisplayTileView(APP.store.getState())\n            ? document.getElementById('localVideoTileViewContainer')\n            : document.getElementById('filmstripLocalVideoThumbnail');\n\n        appendTarget && appendTarget.appendChild(this.container);\n        this._updateVideoElement();\n    }\n\n    /**\n     * Renders the React Element for displaying video in {@code LocalVideo}.\n     *\n     */\n    _updateVideoElement() {\n        const localVideoContainer = document.getElementById('localVideoWrapper');\n        const videoTrack\n            = getLocalVideoTrack(APP.store.getState()['features/base/tracks']);\n\n        ReactDOM.render(\n            <Provider store = { APP.store }>\n                <VideoTrack\n                    id = 'localVideo_container'\n                    videoTrack = { videoTrack } />\n            </Provider>,\n            localVideoContainer\n        );\n\n        // Ensure the video gets play() called on it. This may be necessary in the\n        // case where the local video container was moved and re-attached, in which\n        // case video does not autoplay.\n        const video = this.container.querySelector('video');\n\n        video && !config.testing?.noAutoPlayVideo && video.play();\n    }\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar StarFilledIcon = function StarFilledIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M12.072 17.284l-3.905 2.053a1 1 0 0 1-1.451-1.054l.745-4.349-3.159-3.08a1 1 0 0 1 .554-1.705l4.366-.635 1.953-3.956a1 1 0 0 1 1.794 0l1.952 3.956 4.366.635a1 1 0 0 1 .555 1.705l-3.16 3.08.746 4.349a1 1 0 0 1-1.45 1.054l-3.906-2.053z\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\"/></svg>\"\n  }, props));\n};\n\nStarFilledIcon.displayName = 'StarFilledIcon';\nvar _default = StarFilledIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar StarIcon = function StarIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M12 16.373l3.98 2.193-.76-4.655 3.276-3.347-4.524-.69L12 5.687l-1.972 4.189-4.524.689L8.78 13.91l-.762 4.655L12 16.373zm0 2.283l-3.016 1.662a2 2 0 0 1-2.939-2.075l.599-3.656-2.57-2.624a2 2 0 0 1 1.129-3.377l3.47-.528 1.518-3.224a2 2 0 0 1 3.618 0l1.519 3.224 3.47.528a2 2 0 0 1 1.127 3.377l-2.569 2.624.599 3.656a2 2 0 0 1-2.94 2.075L12 18.656z\\\" fill=\\\"currentColor\\\"/></svg>\"\n  }, props));\n};\n\nStarIcon.displayName = 'StarIcon';\nvar _default = StarIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || 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); }\n\nvar WarningIcon = function WarningIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><path d=\\\"M12.938 4.967c-.518-.978-1.36-.974-1.876 0L3.938 18.425c-.518.978-.045 1.771 1.057 1.771h14.01c1.102 0 1.573-.797 1.057-1.771L12.938 4.967z\\\" fill=\\\"currentColor\\\"/><path d=\\\"M12 15a1 1 0 0 1-1-1V9a1 1 0 0 1 2 0v5a1 1 0 0 1-1 1m0 3a1 1 0 0 1 0-2 1 1 0 0 1 0 2\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nWarningIcon.displayName = 'WarningIcon';\nvar _default = WarningIcon;\nexports.default = _default;","/* global APP, config */\n\n/**\n * The (name of the) command which transports the recorder info.\n */\nconst _USER_INFO_COMMAND = 'userinfo';\n\n/**\n * The Recorder class is meant to take care of recorder related presence\n * commands.\n */\nclass Recorder {\n    /**\n     * Creates new recorder instance.\n     */\n    constructor() {\n        if (config.iAmRecorder) {\n            this._sendRecorderInfo();\n        }\n    }\n\n    /**\n     * Sends the information that this is a recorder through the presence.\n     * @private\n     */\n    _sendRecorderInfo() {\n        const commands = APP.conference.commands;\n\n        // XXX The \"Follow Me\" command represents a snapshot of all states\n        // which are to be followed so don't forget to removeCommand before\n        // sendCommand!\n        commands.removeCommand(_USER_INFO_COMMAND);\n        commands.sendCommand(\n            _USER_INFO_COMMAND,\n            {\n                attributes: {\n                    xmlns: 'http://jitsi.org/jitmeet/userinfo',\n                    robot: true\n                }\n            });\n    }\n}\n\nexport default Recorder;\n","/* global APP, $, interfaceConfig */\n\nimport { toggleDialog } from '../../react/features/base/dialog';\nimport {\n    ACTION_SHORTCUT_PRESSED as PRESSED,\n    ACTION_SHORTCUT_RELEASED as RELEASED,\n    createShortcutEvent,\n    sendAnalytics\n} from '../../react/features/analytics';\nimport { KeyboardShortcutsDialog }\n    from '../../react/features/keyboard-shortcuts';\nimport { SpeakerStats } from '../../react/features/speaker-stats';\n\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\n/**\n * Map of shortcuts. When a shortcut is registered it enters the mapping.\n * @type {Map}\n */\nconst _shortcuts = new Map();\n\n/**\n * Map of registered keyboard keys and translation keys describing the\n * action performed by the key.\n * @type {Map}\n */\nconst _shortcutsHelp = new Map();\n\n/**\n * True if the keyboard shortcuts are enabled and false if not.\n * @type {boolean}\n */\nlet enabled = true;\n\n/**\n * Maps keycode to character, id of popover for given function and function.\n */\nconst KeyboardShortcut = {\n    init() {\n        this._initGlobalShortcuts();\n\n        window.onkeyup = e => {\n            if (!enabled) {\n                return;\n            }\n            const key = this._getKeyboardKey(e).toUpperCase();\n            const num = parseInt(key, 10);\n\n            if (!($(':focus').is('input[type=text]')\n                || $(':focus').is('input[type=password]')\n                || $(':focus').is('textarea'))) {\n                if (_shortcuts.has(key)) {\n                    _shortcuts.get(key).function(e);\n                } else if (!isNaN(num) && num >= 0 && num <= 9) {\n                    APP.UI.clickOnVideo(num);\n                }\n\n            }\n        };\n\n        window.onkeydown = e => {\n            if (!enabled) {\n                return;\n            }\n            if (!($(':focus').is('input[type=text]')\n                || $(':focus').is('input[type=password]')\n                || $(':focus').is('textarea'))) {\n                if (this._getKeyboardKey(e).toUpperCase() === ' ') {\n                    if (APP.conference.isLocalAudioMuted()) {\n                        sendAnalytics(createShortcutEvent(\n                            'push.to.talk',\n                            PRESSED));\n                        logger.log('Talk shortcut pressed');\n                        APP.conference.muteAudio(false);\n                    }\n                }\n            }\n        };\n    },\n\n    /**\n     * Enables/Disables the keyboard shortcuts.\n     * @param {boolean} value - the new value.\n     */\n    enable(value) {\n        enabled = value;\n    },\n\n    /**\n     * Opens the {@KeyboardShortcutsDialog} dialog.\n     *\n     * @returns {void}\n     */\n    openDialog() {\n        APP.store.dispatch(toggleDialog(KeyboardShortcutsDialog, {\n            shortcutDescriptions: _shortcutsHelp\n        }));\n    },\n\n    /**\n     * Registers a new shortcut.\n     *\n     * @param shortcutChar the shortcut character triggering the action\n     * @param shortcutAttr the \"shortcut\" html element attribute mapping an\n     * element to this shortcut and used to show the shortcut character on the\n     * element tooltip\n     * @param exec the function to be executed when the shortcut is pressed\n     * @param helpDescription the description of the shortcut that would appear\n     * in the help menu\n     */\n    registerShortcut(// eslint-disable-line max-params\n            shortcutChar,\n            shortcutAttr,\n            exec,\n            helpDescription) {\n        _shortcuts.set(shortcutChar, {\n            character: shortcutChar,\n            function: exec,\n            shortcutAttr\n        });\n\n        if (helpDescription) {\n            this._addShortcutToHelp(shortcutChar, helpDescription);\n        }\n    },\n\n    /**\n     * Unregisters a shortcut.\n     *\n     * @param shortcutChar unregisters the given shortcut, which means it will\n     * no longer be usable\n     */\n    unregisterShortcut(shortcutChar) {\n        _shortcuts.delete(shortcutChar);\n        _shortcutsHelp.delete(shortcutChar);\n    },\n\n    /**\n     * @param e a KeyboardEvent\n     * @returns {string} e.key or something close if not supported\n     */\n    _getKeyboardKey(e) {\n        // If e.key is a string, then it is assumed it already plainly states\n        // the key pressed. This may not be true in all cases, such as with Edge\n        // and \"?\", when the browser cannot properly map a key press event to a\n        // keyboard key. To be safe, when a key is \"Unidentified\" it must be\n        // further analyzed by jitsi to a key using e.which.\n        if (typeof e.key === 'string' && e.key !== 'Unidentified') {\n            return e.key;\n        }\n        if (e.type === 'keypress'\n                && ((e.which >= 32 && e.which <= 126)\n                    || (e.which >= 160 && e.which <= 255))) {\n            return String.fromCharCode(e.which);\n        }\n\n        // try to fallback (0-9A-Za-z and QWERTY keyboard)\n        switch (e.which) {\n        case 27:\n            return 'Escape';\n        case 191:\n            return e.shiftKey ? '?' : '/';\n        }\n        if (e.shiftKey || e.type === 'keypress') {\n            return String.fromCharCode(e.which);\n        }\n\n        return String.fromCharCode(e.which).toLowerCase();\n\n    },\n\n    /**\n     * Adds the given shortcut to the help dialog.\n     *\n     * @param shortcutChar the shortcut character\n     * @param shortcutDescriptionKey the description of the shortcut\n     * @private\n     */\n    _addShortcutToHelp(shortcutChar, shortcutDescriptionKey) {\n        _shortcutsHelp.set(shortcutChar, shortcutDescriptionKey);\n    },\n\n    /**\n     * Initialise global shortcuts.\n     * Global shortcuts are shortcuts for features that don't have a button or\n     * link associated with the action. In other words they represent actions\n     * triggered _only_ with a shortcut.\n     */\n    _initGlobalShortcuts() {\n        this.registerShortcut('?', null, () => {\n            sendAnalytics(createShortcutEvent('help'));\n            this.openDialog();\n        }, 'keyboardShortcuts.toggleShortcuts');\n\n        // register SPACE shortcut in two steps to insure visibility of help\n        // message\n        this.registerShortcut(' ', null, () => {\n            sendAnalytics(createShortcutEvent('push.to.talk', RELEASED));\n            logger.log('Talk shortcut released');\n            APP.conference.muteAudio(true);\n        });\n        this._addShortcutToHelp('SPACE', 'keyboardShortcuts.pushToTalk');\n\n        if (!interfaceConfig.filmStripOnly) {\n            this.registerShortcut('T', null, () => {\n                sendAnalytics(createShortcutEvent('speaker.stats'));\n                APP.store.dispatch(toggleDialog(SpeakerStats, {\n                    conference: APP.conference\n                }));\n            }, 'keyboardShortcuts.showSpeakerStats');\n        }\n\n        /**\n         * FIXME: Currently focus keys are directly implemented below in\n         * onkeyup. They should be moved to the SmallVideo instead.\n         */\n        this._addShortcutToHelp('0', 'keyboardShortcuts.focusLocal');\n        this._addShortcutToHelp('1-9', 'keyboardShortcuts.focusRemote');\n    }\n};\n\nexport default KeyboardShortcut;\n","/* @flow */\n\nimport EventEmitter from 'events';\nimport { getLogger } from 'jitsi-meet-logger';\n\nimport { DISCO_REMOTE_CONTROL_FEATURE }\n    from '../../service/remotecontrol/Constants';\nimport * as RemoteControlEvents\n    from '../../service/remotecontrol/RemoteControlEvents';\n\nimport Controller from './Controller';\nimport Receiver from './Receiver';\n\nconst logger = getLogger(__filename);\n\ndeclare var APP: Object;\ndeclare var config: Object;\n\n/**\n * Implements the remote control functionality.\n */\nclass RemoteControl extends EventEmitter {\n    _active: boolean;\n    _initialized: boolean;\n    controller: Controller;\n    receiver: Receiver;\n\n    /**\n     * Constructs new instance. Creates controller and receiver properties.\n     */\n    constructor() {\n        super();\n        this.controller = new Controller();\n        this._active = false;\n        this._initialized = false;\n\n        this.controller.on(RemoteControlEvents.ACTIVE_CHANGED, active => {\n            this.active = active;\n        });\n    }\n\n    /**\n     * Sets the remote control session active status.\n     *\n     * @param {boolean} isActive - True - if the controller or the receiver is\n     * currently in remote control session and false otherwise.\n     * @returns {void}\n     */\n    set active(isActive: boolean) {\n        this._active = isActive;\n        this.emit(RemoteControlEvents.ACTIVE_CHANGED, isActive);\n    }\n\n    /**\n     * Returns the remote control session active status.\n     *\n     * @returns {boolean} - True - if the controller or the receiver is\n     * currently in remote control session and false otherwise.\n     */\n    get active(): boolean {\n        return this._active;\n    }\n\n    /**\n     * Initializes the remote control - checks if the remote control should be\n     * enabled or not.\n     *\n     * @returns {void}\n     */\n    init() {\n        if (config.disableRemoteControl\n                || this._initialized\n                || !APP.conference.isDesktopSharingEnabled) {\n            return;\n        }\n        logger.log('Initializing remote control.');\n        this._initialized = true;\n        this.controller.enable(true);\n        this.receiver = new Receiver();\n\n        this.receiver.on(RemoteControlEvents.ACTIVE_CHANGED, active => {\n            this.active = active;\n        });\n    }\n\n    /**\n     * Checks whether the passed user supports remote control or not.\n     *\n     * @param {JitsiParticipant} user - The user to be tested.\n     * @returns {Promise<boolean>} The promise will be resolved with true if\n     * the user supports remote control and with false if not.\n     */\n    checkUserRemoteControlSupport(user: Object) {\n        return user.getFeatures()\n            .then(features => features.has(DISCO_REMOTE_CONTROL_FEATURE));\n    }\n}\n\nexport default new RemoteControl();\n","/* @flow */\n\nimport { getLogger } from 'jitsi-meet-logger';\n\nimport {\n    JitsiConferenceEvents\n} from '../../react/features/base/lib-jitsi-meet';\nimport * as KeyCodes from '../keycode/keycode';\nimport {\n    EVENTS,\n    PERMISSIONS_ACTIONS,\n    REMOTE_CONTROL_MESSAGE_NAME\n} from '../../service/remotecontrol/Constants';\nimport * as RemoteControlEvents\n    from '../../service/remotecontrol/RemoteControlEvents';\nimport UIEvents from '../../service/UI/UIEvents';\n\nimport RemoteControlParticipant from './RemoteControlParticipant';\n\ndeclare var $: Function;\ndeclare var APP: Object;\n\nconst logger = getLogger(__filename);\n\n/**\n * Extract the keyboard key from the keyboard event.\n *\n * @param {KeyboardEvent} event - The event.\n * @returns {KEYS} The key that is pressed or undefined.\n */\nfunction getKey(event) {\n    return KeyCodes.keyboardEventToKey(event);\n}\n\n/**\n * Extract the modifiers from the keyboard event.\n *\n * @param {KeyboardEvent} event - The event.\n * @returns {Array} With possible values: \"shift\", \"control\", \"alt\", \"command\".\n */\nfunction getModifiers(event) {\n    const modifiers = [];\n\n    if (event.shiftKey) {\n        modifiers.push('shift');\n    }\n\n    if (event.ctrlKey) {\n        modifiers.push('control');\n    }\n\n\n    if (event.altKey) {\n        modifiers.push('alt');\n    }\n\n    if (event.metaKey) {\n        modifiers.push('command');\n    }\n\n    return modifiers;\n}\n\n/**\n * This class represents the controller party for a remote controller session.\n * It listens for mouse and keyboard events and sends them to the receiver\n * party of the remote control session.\n */\nexport default class Controller extends RemoteControlParticipant {\n    _area: ?Object;\n    _controlledParticipant: string | null;\n    _isCollectingEvents: boolean;\n    _largeVideoChangedListener: Function;\n    _requestedParticipant: string | null;\n    _stopListener: Function;\n    _userLeftListener: Function;\n\n    /**\n     * Creates new instance.\n     */\n    constructor() {\n        super();\n        this._isCollectingEvents = false;\n        this._controlledParticipant = null;\n        this._requestedParticipant = null;\n        this._stopListener = this._handleRemoteControlStoppedEvent.bind(this);\n        this._userLeftListener = this._onUserLeft.bind(this);\n        this._largeVideoChangedListener\n            = this._onLargeVideoIdChanged.bind(this);\n    }\n\n    /**\n     * Returns the current active participant's id.\n     *\n     * @returns {string|null} - The id of the current active participant.\n     */\n    get activeParticipant(): string | null {\n        return this._requestedParticipant || this._controlledParticipant;\n    }\n\n    /**\n     * Requests permissions from the remote control receiver side.\n     *\n     * @param {string} userId - The user id of the participant that will be\n     * requested.\n     * @param {JQuerySelector} eventCaptureArea - The area that is going to be\n     * used mouse and keyboard event capture.\n     * @returns {Promise<boolean>} Resolve values - true(accept), false(deny),\n     * null(the participant has left).\n     */\n    requestPermissions(\n            userId: string,\n            eventCaptureArea: Object\n    ): Promise<boolean | null> {\n        if (!this._enabled) {\n            return Promise.reject(new Error('Remote control is disabled!'));\n        }\n        this.emit(RemoteControlEvents.ACTIVE_CHANGED, true);\n        this._area = eventCaptureArea;// $(\"#largeVideoWrapper\")\n        logger.log(`Requsting remote control permissions from: ${userId}`);\n\n        return new Promise((resolve, reject) => {\n            // eslint-disable-next-line prefer-const\n            let onUserLeft, permissionsReplyListener;\n\n            const clearRequest = () => {\n                this._requestedParticipant = null;\n                APP.conference.removeConferenceListener(\n                    JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,\n                    permissionsReplyListener);\n                APP.conference.removeConferenceListener(\n                    JitsiConferenceEvents.USER_LEFT,\n                    onUserLeft);\n            };\n\n            permissionsReplyListener = (participant, event) => {\n                let result = null;\n\n                try {\n                    result = this._handleReply(participant, event);\n                } catch (e) {\n                    clearRequest();\n                    this.emit(RemoteControlEvents.ACTIVE_CHANGED, false);\n                    reject(e);\n                }\n                if (result !== null) {\n                    clearRequest();\n                    if (result === false) {\n                        this.emit(RemoteControlEvents.ACTIVE_CHANGED, false);\n                    }\n                    resolve(result);\n                }\n            };\n            onUserLeft = id => {\n                if (id === this._requestedParticipant) {\n                    clearRequest();\n                    this.emit(RemoteControlEvents.ACTIVE_CHANGED, false);\n                    resolve(null);\n                }\n            };\n\n            APP.conference.addConferenceListener(\n                JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,\n                permissionsReplyListener);\n            APP.conference.addConferenceListener(\n                JitsiConferenceEvents.USER_LEFT,\n                onUserLeft);\n            this._requestedParticipant = userId;\n            this.sendRemoteControlEndpointMessage(\n                userId,\n                {\n                    type: EVENTS.permissions,\n                    action: PERMISSIONS_ACTIONS.request\n                },\n                e => {\n                    clearRequest();\n                    reject(e);\n                });\n        });\n    }\n\n    /**\n     * Handles the reply of the permissions request.\n     *\n     * @param {JitsiParticipant} participant - The participant that has sent the\n     * reply.\n     * @param {RemoteControlEvent} event - The remote control event.\n     * @returns {boolean|null}\n     */\n    _handleReply(participant: Object, event: Object) {\n        const userId = participant.getId();\n\n        if (this._enabled\n                && event.name === REMOTE_CONTROL_MESSAGE_NAME\n                && event.type === EVENTS.permissions\n                && userId === this._requestedParticipant) {\n            if (event.action !== PERMISSIONS_ACTIONS.grant) {\n                this._area = undefined;\n            }\n            switch (event.action) {\n            case PERMISSIONS_ACTIONS.grant: {\n                this._controlledParticipant = userId;\n                logger.log('Remote control permissions granted to:', userId);\n                this._start();\n\n                return true;\n            }\n            case PERMISSIONS_ACTIONS.deny:\n                return false;\n            case PERMISSIONS_ACTIONS.error:\n                throw new Error('Error occurred on receiver side');\n            default:\n                throw new Error('Unknown reply received!');\n            }\n        } else {\n            // different message type or another user -> ignoring the message\n            return null;\n        }\n    }\n\n    /**\n     * Handles remote control stopped.\n     *\n     * @param {JitsiParticipant} participant - The participant that has sent the\n     * event.\n     * @param {Object} event - EndpointMessage event from the data channels.\n     * @property {string} type - The function process only events with\n     * name REMOTE_CONTROL_MESSAGE_NAME.\n     * @returns {void}\n     */\n    _handleRemoteControlStoppedEvent(participant: Object, event: Object) {\n        if (this._enabled\n                && event.name === REMOTE_CONTROL_MESSAGE_NAME\n                && event.type === EVENTS.stop\n                && participant.getId() === this._controlledParticipant) {\n            this._stop();\n        }\n    }\n\n    /**\n     * Starts processing the mouse and keyboard events. Sets conference\n     * listeners. Disables keyboard events.\n     *\n     * @returns {void}\n     */\n    _start() {\n        logger.log('Starting remote control controller.');\n        APP.UI.addListener(UIEvents.LARGE_VIDEO_ID_CHANGED,\n            this._largeVideoChangedListener);\n        APP.conference.addConferenceListener(\n            JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,\n            this._stopListener);\n        APP.conference.addConferenceListener(JitsiConferenceEvents.USER_LEFT,\n            this._userLeftListener);\n        this.resume();\n    }\n\n    /**\n     * Disables the keyboatd shortcuts. Starts collecting remote control\n     * events. It can be used to resume an active remote control session wchich\n     * was paused with this.pause().\n     *\n     * @returns {void}\n     */\n    resume() {\n        let area;\n\n        if (!this._enabled\n                || this._isCollectingEvents\n                || !(area = this._area)) {\n            return;\n        }\n        logger.log('Resuming remote control controller.');\n        this._isCollectingEvents = true;\n        APP.keyboardshortcut.enable(false);\n\n        area.mousemove(event => {\n            const area = this._area; // eslint-disable-line no-shadow\n\n            if (!area) {\n                return;\n            }\n\n            const position = area.position();\n\n            this.sendRemoteControlEndpointMessage(this._controlledParticipant, {\n                type: EVENTS.mousemove,\n                x: (event.pageX - position.left) / area.width(),\n                y: (event.pageY - position.top) / area.height()\n            });\n        });\n\n        area.mousedown(this._onMouseClickHandler.bind(this, EVENTS.mousedown));\n        area.mouseup(this._onMouseClickHandler.bind(this, EVENTS.mouseup));\n\n        area.dblclick(\n            this._onMouseClickHandler.bind(this, EVENTS.mousedblclick));\n\n        area.contextmenu(() => false);\n\n        area[0].onmousewheel = event => {\n            event.preventDefault();\n            event.stopPropagation();\n            this.sendRemoteControlEndpointMessage(this._controlledParticipant, {\n                type: EVENTS.mousescroll,\n                x: event.deltaX,\n                y: event.deltaY\n            });\n\n            return false;\n        };\n\n        $(window).keydown(this._onKeyPessHandler.bind(this,\n            EVENTS.keydown));\n        $(window).keyup(this._onKeyPessHandler.bind(this, EVENTS.keyup));\n    }\n\n    /**\n     * Stops processing the mouse and keyboard events. Removes added listeners.\n     * Enables the keyboard shortcuts. Displays dialog to notify the user that\n     * remote control session has ended.\n     *\n     * @returns {void}\n     */\n    _stop() {\n        if (!this._controlledParticipant) {\n            return;\n        }\n        logger.log('Stopping remote control controller.');\n        APP.UI.removeListener(UIEvents.LARGE_VIDEO_ID_CHANGED,\n            this._largeVideoChangedListener);\n        APP.conference.removeConferenceListener(\n            JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,\n            this._stopListener);\n        APP.conference.removeConferenceListener(JitsiConferenceEvents.USER_LEFT,\n            this._userLeftListener);\n        this.pause();\n        this._controlledParticipant = null;\n        this._area = undefined;\n        this.emit(RemoteControlEvents.ACTIVE_CHANGED, false);\n        APP.UI.messageHandler.notify(\n            'dialog.remoteControlTitle',\n            'dialog.remoteControlStopMessage'\n        );\n    }\n\n    /**\n     * Executes this._stop() mehtod which stops processing the mouse and\n     * keyboard events, removes added listeners, enables the keyboard shortcuts,\n     * displays dialog to notify the user that remote control session has ended.\n     * In addition sends stop message to the controlled participant.\n     *\n     * @returns {void}\n     */\n    stop() {\n        if (!this._controlledParticipant) {\n            return;\n        }\n        this.sendRemoteControlEndpointMessage(this._controlledParticipant, {\n            type: EVENTS.stop\n        });\n        this._stop();\n    }\n\n    /**\n     * Pauses the collecting of events and enables the keyboard shortcus. But\n     * it doesn't removes any other listeners. Basically the remote control\n     * session will be still active after this.pause(), but no events from the\n     * controller side will be captured and sent. You can resume the collecting\n     * of the events with this.resume().\n     *\n     * @returns {void}\n     */\n    pause() {\n        if (!this._controlledParticipant) {\n            return;\n        }\n        logger.log('Pausing remote control controller.');\n        this._isCollectingEvents = false;\n        APP.keyboardshortcut.enable(true);\n\n        const area = this._area;\n\n        if (area) {\n            area.off('contextmenu');\n            area.off('dblclick');\n            area.off('mousedown');\n            area.off('mousemove');\n            area.off('mouseup');\n\n            area[0].onmousewheel = undefined;\n        }\n\n        $(window).off('keydown');\n        $(window).off('keyup');\n    }\n\n    /**\n     * Handler for mouse click events.\n     *\n     * @param {string} type - The type of event (\"mousedown\"/\"mouseup\").\n     * @param {Event} event - The mouse event.\n     * @returns {void}\n     */\n    _onMouseClickHandler(type: string, event: Object) {\n        this.sendRemoteControlEndpointMessage(this._controlledParticipant, {\n            type,\n            button: event.which\n        });\n    }\n\n    /**\n     * Returns true if the remote control session is started.\n     *\n     * @returns {boolean}\n     */\n    isStarted() {\n        return this._controlledParticipant !== null;\n    }\n\n    /**\n     * Returns the id of the requested participant.\n     *\n     * @returns {string} The id of the requested participant.\n     * NOTE: This id should be the result of JitsiParticipant.getId() call.\n     */\n    getRequestedParticipant() {\n        return this._requestedParticipant;\n    }\n\n    /**\n     * Handler for key press events.\n     *\n     * @param {string} type - The type of event (\"keydown\"/\"keyup\").\n     * @param {Event} event - The key event.\n     * @returns {void}\n     */\n    _onKeyPessHandler(type: string, event: Object) {\n        this.sendRemoteControlEndpointMessage(this._controlledParticipant, {\n            type,\n            key: getKey(event),\n            modifiers: getModifiers(event)\n        });\n    }\n\n    /**\n     * Calls the stop method if the other side have left.\n     *\n     * @param {string} id - The user id for the participant that have left.\n     * @returns {void}\n     */\n    _onUserLeft(id: string) {\n        if (this._controlledParticipant === id) {\n            this._stop();\n        }\n    }\n\n    /**\n     * Handles changes of the participant displayed on the large video.\n     *\n     * @param {string} id - The user id for the participant that is displayed.\n     * @returns {void}\n     */\n    _onLargeVideoIdChanged(id: string) {\n        if (!this._controlledParticipant) {\n            return;\n        }\n        if (this._controlledParticipant === id) {\n            this.resume();\n        } else {\n            this.pause();\n        }\n    }\n}\n","/**\n * Enumerates the supported keys.\n * NOTE: The maps represents physical keys on the keyboard, not chars.\n * @readonly\n * @enum {string}\n */\nexport const KEYS = {\n    BACKSPACE: 'backspace',\n    DELETE: 'delete',\n    RETURN: 'enter',\n    TAB: 'tab',\n    ESCAPE: 'escape',\n    UP: 'up',\n    DOWN: 'down',\n    RIGHT: 'right',\n    LEFT: 'left',\n    HOME: 'home',\n    END: 'end',\n    PAGEUP: 'pageup',\n    PAGEDOWN: 'pagedown',\n\n    F1: 'f1',\n    F2: 'f2',\n    F3: 'f3',\n    F4: 'f4',\n    F5: 'f5',\n    F6: 'f6',\n    F7: 'f7',\n    F8: 'f8',\n    F9: 'f9',\n    F10: 'f10',\n    F11: 'f11',\n    F12: 'f12',\n    META: 'command',\n    CMD_L: 'command',\n    CMD_R: 'command',\n    ALT: 'alt',\n    CONTROL: 'control',\n    SHIFT: 'shift',\n    CAPS_LOCK: 'caps_lock', // not supported by robotjs\n    SPACE: 'space',\n    PRINTSCREEN: 'printscreen',\n    INSERT: 'insert',\n\n    NUMPAD_0: 'numpad_0',\n    NUMPAD_1: 'numpad_1',\n    NUMPAD_2: 'numpad_2',\n    NUMPAD_3: 'numpad_3',\n    NUMPAD_4: 'numpad_4',\n    NUMPAD_5: 'numpad_5',\n    NUMPAD_6: 'numpad_6',\n    NUMPAD_7: 'numpad_7',\n    NUMPAD_8: 'numpad_8',\n    NUMPAD_9: 'numpad_9',\n\n    COMMA: ',',\n\n    PERIOD: '.',\n    SEMICOLON: ';',\n    QUOTE: '\\'',\n    BRACKET_LEFT: '[',\n    BRACKET_RIGHT: ']',\n    BACKQUOTE: '`',\n    BACKSLASH: '\\\\',\n    MINUS: '-',\n    EQUAL: '=',\n    SLASH: '/'\n};\n\n/* eslint-disable max-len */\n/**\n * Mapping between the key codes and keys deined in KEYS.\n * The mappings are based on\n * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Specifications\n */\n/* eslint-enable max-len */\nconst keyCodeToKey = {\n    8: KEYS.BACKSPACE,\n    9: KEYS.TAB,\n    13: KEYS.RETURN,\n    16: KEYS.SHIFT,\n    17: KEYS.CONTROL,\n    18: KEYS.ALT,\n    20: KEYS.CAPS_LOCK,\n    27: KEYS.ESCAPE,\n    32: KEYS.SPACE,\n    33: KEYS.PAGEUP,\n    34: KEYS.PAGEDOWN,\n    35: KEYS.END,\n    36: KEYS.HOME,\n    37: KEYS.LEFT,\n    38: KEYS.UP,\n    39: KEYS.RIGHT,\n    40: KEYS.DOWN,\n    42: KEYS.PRINTSCREEN,\n    44: KEYS.PRINTSCREEN,\n    45: KEYS.INSERT,\n    46: KEYS.DELETE,\n    59: KEYS.SEMICOLON,\n    61: KEYS.EQUAL,\n    91: KEYS.CMD_L,\n    92: KEYS.CMD_R,\n    93: KEYS.CMD_R,\n    96: KEYS.NUMPAD_0,\n    97: KEYS.NUMPAD_1,\n    98: KEYS.NUMPAD_2,\n    99: KEYS.NUMPAD_3,\n    100: KEYS.NUMPAD_4,\n    101: KEYS.NUMPAD_5,\n    102: KEYS.NUMPAD_6,\n    103: KEYS.NUMPAD_7,\n    104: KEYS.NUMPAD_8,\n    105: KEYS.NUMPAD_9,\n    112: KEYS.F1,\n    113: KEYS.F2,\n    114: KEYS.F3,\n    115: KEYS.F4,\n    116: KEYS.F5,\n    117: KEYS.F6,\n    118: KEYS.F7,\n    119: KEYS.F8,\n    120: KEYS.F9,\n    121: KEYS.F10,\n    122: KEYS.F11,\n    123: KEYS.F12,\n    124: KEYS.PRINTSCREEN,\n    173: KEYS.MINUS,\n    186: KEYS.SEMICOLON,\n    187: KEYS.EQUAL,\n    188: KEYS.COMMA,\n    189: KEYS.MINUS,\n    190: KEYS.PERIOD,\n    191: KEYS.SLASH,\n    192: KEYS.BACKQUOTE,\n    219: KEYS.BRACKET_LEFT,\n    220: KEYS.BACKSLASH,\n    221: KEYS.BRACKET_RIGHT,\n    222: KEYS.QUOTE,\n    224: KEYS.META,\n    229: KEYS.SEMICOLON\n};\n\n/**\n * Generate codes for digit keys (0-9)\n */\nfor (let i = 0; i < 10; i++) {\n    keyCodeToKey[i + 48] = `${i}`;\n}\n\n/**\n * Generate codes for letter keys (a-z)\n */\nfor (let i = 0; i < 26; i++) {\n    const keyCode = i + 65;\n\n    keyCodeToKey[keyCode] = String.fromCharCode(keyCode).toLowerCase();\n}\n\n/**\n * Returns key associated with the keyCode from the passed event.\n * @param {KeyboardEvent} event the event\n * @returns {KEYS} the key on the keyboard.\n */\nexport function keyboardEventToKey(event) {\n    return keyCodeToKey[event.which];\n}\n","/* @flow */\n\nimport { getLogger } from 'jitsi-meet-logger';\n\nimport * as JitsiMeetConferenceEvents from '../../ConferenceEvents';\nimport {\n    JitsiConferenceEvents\n} from '../../react/features/base/lib-jitsi-meet';\nimport {\n    openRemoteControlAuthorizationDialog\n} from '../../react/features/remote-control';\nimport {\n    DISCO_REMOTE_CONTROL_FEATURE,\n    EVENTS,\n    PERMISSIONS_ACTIONS,\n    REMOTE_CONTROL_MESSAGE_NAME,\n    REQUESTS\n} from '../../service/remotecontrol/Constants';\nimport * as RemoteControlEvents\n    from '../../service/remotecontrol/RemoteControlEvents';\nimport { Transport, PostMessageTransportBackend } from '../transport';\n\nimport RemoteControlParticipant from './RemoteControlParticipant';\n\ndeclare var APP: Object;\ndeclare var config: Object;\ndeclare var interfaceConfig: Object;\n\nconst logger = getLogger(__filename);\n\n/**\n * The transport instance used for communication with external apps.\n *\n * @type {Transport}\n */\nconst transport = new Transport({\n    backend: new PostMessageTransportBackend({\n        postisOptions: { scope: 'jitsi-remote-control' }\n    })\n});\n\n/**\n * This class represents the receiver party for a remote controller session.\n * It handles \"remote-control-event\" events and sends them to the\n * API module. From there the events can be received from wrapper application\n * and executed.\n */\nexport default class Receiver extends RemoteControlParticipant {\n    _controller: ?string;\n    _enabled: boolean;\n    _hangupListener: Function;\n    _remoteControlEventsListener: Function;\n    _userLeftListener: Function;\n\n    /**\n     * Creates new instance.\n     */\n    constructor() {\n        super();\n        this._controller = null;\n        this._remoteControlEventsListener\n            = this._onRemoteControlMessage.bind(this);\n        this._userLeftListener = this._onUserLeft.bind(this);\n        this._hangupListener = this._onHangup.bind(this);\n\n        // We expect here that even if we receive the supported event earlier\n        // it will be cached and we'll receive it.\n        transport.on('event', event => {\n            if (event.name === REMOTE_CONTROL_MESSAGE_NAME) {\n                this._onRemoteControlAPIEvent(event);\n\n                return true;\n            }\n\n            return false;\n        });\n    }\n\n    /**\n     * Enables / Disables the remote control.\n     *\n     * @param {boolean} enabled - The new state.\n     * @returns {void}\n     */\n    _enable(enabled: boolean) {\n        if (this._enabled === enabled) {\n            return;\n        }\n        this._enabled = enabled;\n        if (enabled === true) {\n            logger.log('Remote control receiver enabled.');\n\n            // Announce remote control support.\n            APP.connection.addFeature(DISCO_REMOTE_CONTROL_FEATURE, true);\n            APP.conference.addConferenceListener(\n                JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,\n                this._remoteControlEventsListener);\n            APP.conference.addListener(JitsiMeetConferenceEvents.BEFORE_HANGUP,\n                this._hangupListener);\n        } else {\n            logger.log('Remote control receiver disabled.');\n            this._stop(true);\n            APP.connection.removeFeature(DISCO_REMOTE_CONTROL_FEATURE);\n            APP.conference.removeConferenceListener(\n                JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,\n                this._remoteControlEventsListener);\n            APP.conference.removeListener(\n                JitsiMeetConferenceEvents.BEFORE_HANGUP,\n                this._hangupListener);\n        }\n    }\n\n    /**\n     * Removes the listener for JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED\n     * events. Sends stop message to the wrapper application. Optionally\n     * displays dialog for informing the user that remote control session\n     * ended.\n     *\n     * @param {boolean} [dontNotify] - If true - a notification about stopping\n     * the remote control won't be displayed.\n     * @returns {void}\n     */\n    _stop(dontNotify: boolean = false) {\n        if (!this._controller) {\n            return;\n        }\n        logger.log('Remote control receiver stop.');\n        this._controller = null;\n        APP.conference.removeConferenceListener(\n            JitsiConferenceEvents.USER_LEFT,\n            this._userLeftListener);\n        transport.sendEvent({\n            name: REMOTE_CONTROL_MESSAGE_NAME,\n            type: EVENTS.stop\n        });\n        this.emit(RemoteControlEvents.ACTIVE_CHANGED, false);\n        if (!dontNotify) {\n            APP.UI.messageHandler.notify(\n                'dialog.remoteControlTitle',\n                'dialog.remoteControlStopMessage'\n            );\n        }\n    }\n\n    /**\n     * Calls this._stop() and sends stop message to the controller participant.\n     *\n     * @returns {void}\n     */\n    stop() {\n        if (!this._controller) {\n            return;\n        }\n        this.sendRemoteControlEndpointMessage(this._controller, {\n            type: EVENTS.stop\n        });\n        this._stop();\n    }\n\n    /**\n     * Listens for data channel EndpointMessage. Handles only remote control\n     * messages. Sends the remote control messages to the external app that\n     * will execute them.\n     *\n     * @param {JitsiParticipant} participant - The controller participant.\n     * @param {Object} message - EndpointMessage from the data channels.\n     * @param {string} message.name - The function processes only messages with\n     * name REMOTE_CONTROL_MESSAGE_NAME.\n     * @returns {void}\n     */\n    _onRemoteControlMessage(participant: Object, message: Object) {\n        if (message.name !== REMOTE_CONTROL_MESSAGE_NAME) {\n            return;\n        }\n\n        if (this._enabled) {\n            if (this._controller === null\n                    && message.type === EVENTS.permissions\n                    && message.action === PERMISSIONS_ACTIONS.request) {\n                const userId = participant.getId();\n\n                this.emit(RemoteControlEvents.ACTIVE_CHANGED, true);\n                APP.store.dispatch(\n                    openRemoteControlAuthorizationDialog(userId));\n            } else if (this._controller === participant.getId()) {\n                if (message.type === EVENTS.stop) {\n                    this._stop();\n                } else { // forward the message\n                    transport.sendEvent(message);\n                }\n            } // else ignore\n        } else {\n            logger.log('Remote control message is ignored because remote '\n                + 'control is disabled', message);\n        }\n    }\n\n    /**\n     * Denies remote control access for user associated with the passed user id.\n     *\n     * @param {string} userId - The id associated with the user who sent the\n     * request for remote control authorization.\n     * @returns {void}\n     */\n    deny(userId: string) {\n        this.emit(RemoteControlEvents.ACTIVE_CHANGED, false);\n        this.sendRemoteControlEndpointMessage(userId, {\n            type: EVENTS.permissions,\n            action: PERMISSIONS_ACTIONS.deny\n        });\n    }\n\n    /**\n     * Grants remote control access to user associated with the passed user id.\n     *\n     * @param {string} userId - The id associated with the user who sent the\n     * request for remote control authorization.\n     * @returns {void}\n     */\n    grant(userId: string) {\n        APP.conference.addConferenceListener(JitsiConferenceEvents.USER_LEFT,\n            this._userLeftListener);\n        this._controller = userId;\n        logger.log(`Remote control permissions granted to: ${userId}`);\n\n        let promise;\n\n        if (APP.conference.isSharingScreen\n                && APP.conference.getDesktopSharingSourceType() === 'screen') {\n            promise = this._sendStartRequest();\n        } else {\n            promise = APP.conference.toggleScreenSharing(\n                true,\n                {\n                    desktopSharingSources: [ 'screen' ]\n                })\n                .then(() => this._sendStartRequest());\n        }\n\n        promise\n            .then(() =>\n                this.sendRemoteControlEndpointMessage(userId, {\n                    type: EVENTS.permissions,\n                    action: PERMISSIONS_ACTIONS.grant\n                })\n            )\n            .catch(error => {\n                logger.error(error);\n\n                this.sendRemoteControlEndpointMessage(userId, {\n                    type: EVENTS.permissions,\n                    action: PERMISSIONS_ACTIONS.error\n                });\n\n                APP.UI.messageHandler.notify(\n                    'dialog.remoteControlTitle',\n                    'dialog.startRemoteControlErrorMessage'\n                );\n\n                this._stop(true);\n            });\n    }\n\n    /**\n     * Sends remote control start request.\n     *\n     * @returns {Promise}\n     */\n    _sendStartRequest() {\n        return transport.sendRequest({\n            name: REMOTE_CONTROL_MESSAGE_NAME,\n            type: REQUESTS.start,\n            sourceId: APP.conference.getDesktopSharingSourceId()\n        });\n    }\n\n    /**\n     * Handles remote control events from the external app. Currently only\n     * events with type EVENTS.supported and EVENTS.stop are\n     * supported.\n     *\n     * @param {RemoteControlEvent} event - The remote control event.\n     * @returns {void}\n     */\n    _onRemoteControlAPIEvent(event: Object) {\n        switch (event.type) {\n        case EVENTS.supported:\n            this._onRemoteControlSupported();\n            break;\n        case EVENTS.stop:\n            this.stop();\n            break;\n        }\n    }\n\n    /**\n     * Handles events for support for executing remote control events into\n     * the wrapper application.\n     *\n     * @returns {void}\n     */\n    _onRemoteControlSupported() {\n        logger.log('Remote Control supported.');\n        if (config.disableRemoteControl) {\n            logger.log('Remote Control disabled.');\n        } else {\n            this._enable(true);\n        }\n    }\n\n    /**\n     * Calls the stop method if the other side have left.\n     *\n     * @param {string} id - The user id for the participant that have left.\n     * @returns {void}\n     */\n    _onUserLeft(id: string) {\n        if (this._controller === id) {\n            this._stop();\n        }\n    }\n\n    /**\n     * Handles hangup events. Disables the receiver.\n     *\n     * @returns {void}\n     */\n    _onHangup() {\n        this._enable(false);\n    }\n}\n","module.exports = require('./dist/commonjs/index.js').default;\n","/* global APP, $, config, interfaceConfig */\n\nconst logger = require('jitsi-meet-logger').getLogger(__filename);\n\nconst UI = {};\n\nimport messageHandler from './util/MessageHandler';\nimport UIUtil from './util/UIUtil';\nimport UIEvents from '../../service/UI/UIEvents';\nimport EtherpadManager from './etherpad/Etherpad';\nimport SharedVideoManager from './shared_video/SharedVideo';\n\nimport VideoLayout from './videolayout/VideoLayout';\n\nimport { getLocalParticipant } from '../../react/features/base/participants';\nimport { toggleChat } from '../../react/features/chat';\nimport { setDocumentUrl } from '../../react/features/etherpad';\nimport { setFilmstripVisible } from '../../react/features/filmstrip';\nimport { joinLeaveNotificationsDisabled, setNotificationsEnabled } from '../../react/features/notifications';\nimport {\n    dockToolbox,\n    setToolboxEnabled,\n    showToolbox\n} from '../../react/features/toolbox';\n\nconst EventEmitter = require('events');\n\nUI.messageHandler = messageHandler;\n\nconst eventEmitter = new EventEmitter();\n\nUI.eventEmitter = eventEmitter;\n\nlet etherpadManager;\nlet sharedVideoManager;\n\nconst UIListeners = new Map([\n    [\n        UIEvents.ETHERPAD_CLICKED,\n        () => etherpadManager && etherpadManager.toggleEtherpad()\n    ], [\n        UIEvents.SHARED_VIDEO_CLICKED,\n        () => sharedVideoManager && sharedVideoManager.toggleSharedVideo()\n    ], [\n        UIEvents.TOGGLE_FILMSTRIP,\n        () => UI.toggleFilmstrip()\n    ]\n]);\n\n/**\n * Indicates if we're currently in full screen mode.\n *\n * @return {boolean} {true} to indicate that we're currently in full screen\n * mode, {false} otherwise\n */\nUI.isFullScreen = function() {\n    return UIUtil.isFullScreen();\n};\n\n/**\n * Returns true if the etherpad window is currently visible.\n * @returns {Boolean} - true if the etherpad window is currently visible.\n */\nUI.isEtherpadVisible = function() {\n    return Boolean(etherpadManager && etherpadManager.isVisible());\n};\n\n/**\n * Returns true if there is a shared video which is being shown (?).\n * @returns {boolean} - true if there is a shared video which is being shown.\n */\nUI.isSharedVideoShown = function() {\n    return Boolean(sharedVideoManager && sharedVideoManager.isSharedVideoShown);\n};\n\n/**\n * Notify user that server has shut down.\n */\nUI.notifyGracefulShutdown = function() {\n    messageHandler.showError({\n        descriptionKey: 'dialog.gracefulShutdown',\n        titleKey: 'dialog.serviceUnavailable'\n    });\n};\n\n/**\n * Notify user that reservation error happened.\n */\nUI.notifyReservationError = function(code, msg) {\n    messageHandler.showError({\n        descriptionArguments: {\n            code,\n            msg\n        },\n        descriptionKey: 'dialog.reservationErrorMsg',\n        titleKey: 'dialog.reservationError'\n    });\n};\n\n/**\n * Notify user that conference was destroyed.\n * @param reason {string} the reason text\n */\nUI.notifyConferenceDestroyed = function(reason) {\n    // FIXME: use Session Terminated from translation, but\n    // 'reason' text comes from XMPP packet and is not translated\n    messageHandler.showError({\n        description: reason,\n        titleKey: 'dialog.sessTerminated'\n    });\n};\n\n/**\n * Change nickname for the user.\n * @param {string} id user id\n * @param {string} displayName new nickname\n */\nUI.changeDisplayName = function(id, displayName) {\n    VideoLayout.onDisplayNameChanged(id, displayName);\n};\n\n/**\n * Initialize conference UI.\n */\nUI.initConference = function() {\n    const { getState } = APP.store;\n    const { id, name } = getLocalParticipant(getState);\n\n    UI.showToolbar();\n\n    const displayName = config.displayJids ? id : name;\n\n    if (displayName) {\n        UI.changeDisplayName('localVideoContainer', displayName);\n    }\n};\n\n/**\n * Returns the shared document manager object.\n * @return {EtherpadManager} the shared document manager object\n */\nUI.getSharedVideoManager = function() {\n    return sharedVideoManager;\n};\n\n/**\n * Starts the UI module and initializes all related components.\n *\n * @returns {boolean} true if the UI is ready and the conference should be\n * established, false - otherwise (for example in the case of welcome page)\n */\nUI.start = function() {\n    // Set the defaults for prompt dialogs.\n    $.prompt.setDefaults({ persistent: false });\n\n    VideoLayout.init(eventEmitter);\n    if (!interfaceConfig.filmStripOnly) {\n        VideoLayout.initLargeVideo();\n    }\n\n    // Do not animate the video area on UI start (second argument passed into\n    // resizeVideoArea) because the animation is not visible anyway. Plus with\n    // the current dom layout, the quality label is part of the video layout and\n    // will be seen animating in.\n    VideoLayout.resizeVideoArea();\n\n    sharedVideoManager = new SharedVideoManager(eventEmitter);\n\n    if (interfaceConfig.filmStripOnly) {\n        $('body').addClass('filmstrip-only');\n        APP.store.dispatch(setNotificationsEnabled(false));\n    } else if (config.iAmRecorder) {\n        // in case of iAmSipGateway keep local video visible\n        if (!config.iAmSipGateway) {\n            VideoLayout.setLocalVideoVisible(false);\n            APP.store.dispatch(setNotificationsEnabled(false));\n        }\n\n        APP.store.dispatch(setToolboxEnabled(false));\n        UI.messageHandler.enablePopups(false);\n    }\n};\n\n/**\n * Setup some UI event listeners.\n */\nUI.registerListeners\n    = () => UIListeners.forEach((value, key) => UI.addListener(key, value));\n\n/**\n * Setup some DOM event listeners.\n */\nUI.bindEvents = () => {\n    /**\n     *\n     */\n    function onResize() {\n        VideoLayout.onResize();\n    }\n\n    // Resize and reposition videos in full screen mode.\n    $(document).on(\n            'webkitfullscreenchange mozfullscreenchange fullscreenchange',\n            onResize);\n\n    $(window).resize(onResize);\n};\n\n/**\n * Unbind some DOM event listeners.\n */\nUI.unbindEvents = () => {\n    $(document).off(\n            'webkitfullscreenchange mozfullscreenchange fullscreenchange');\n\n    $(window).off('resize');\n};\n\n/**\n * Show local video stream on UI.\n * @param {JitsiTrack} track stream to show\n */\nUI.addLocalVideoStream = track => {\n    VideoLayout.changeLocalVideo(track);\n};\n\n/**\n * Setup and show Etherpad.\n * @param {string} name etherpad id\n */\nUI.initEtherpad = name => {\n    if (etherpadManager || !config.etherpad_base || !name) {\n        return;\n    }\n    logger.log('Etherpad is enabled');\n\n    etherpadManager = new EtherpadManager(eventEmitter);\n\n    const url = new URL(name, config.etherpad_base);\n\n    APP.store.dispatch(setDocumentUrl(url.toString()));\n};\n\n/**\n * Returns the shared document manager object.\n * @return {EtherpadManager} the shared document manager object\n */\nUI.getSharedDocumentManager = () => etherpadManager;\n\n/**\n * Show user on UI.\n * @param {JitsiParticipant} user\n */\nUI.addUser = function(user) {\n    const id = user.getId();\n    const displayName = user.getDisplayName();\n    const status = user.getStatus();\n\n    if (status) {\n        // FIXME: move updateUserStatus in participantPresenceChanged action\n        UI.updateUserStatus(user, status);\n    }\n\n    // set initial display name\n    if (displayName) {\n        UI.changeDisplayName(id, displayName);\n    }\n};\n\n/**\n * Update videotype for specified user.\n * @param {string} id user id\n * @param {string} newVideoType new videotype\n */\nUI.onPeerVideoTypeChanged\n    = (id, newVideoType) => VideoLayout.onVideoTypeChanged(id, newVideoType);\n\n/**\n * Updates the user status.\n *\n * @param {JitsiParticipant} user - The user which status we need to update.\n * @param {string} status - The new status.\n */\nUI.updateUserStatus = (user, status) => {\n    const reduxState = APP.store.getState() || {};\n    const { calleeInfoVisible } = reduxState['features/invite'] || {};\n\n    // We hide status updates when join/leave notifications are disabled,\n    // as jigasi is the component with statuses and they are seen as join/leave notifications.\n    if (!status || calleeInfoVisible || joinLeaveNotificationsDisabled()) {\n        return;\n    }\n\n    const displayName = user.getDisplayName();\n\n    messageHandler.participantNotification(\n        displayName,\n        '',\n        'connected',\n        'dialOut.statusMessage',\n        { status: UIUtil.escapeHtml(status) });\n};\n\n/**\n * Toggles filmstrip.\n */\nUI.toggleFilmstrip = function() {\n    const { visible } = APP.store.getState()['features/filmstrip'];\n\n    APP.store.dispatch(setFilmstripVisible(!visible));\n};\n\n/**\n * Toggles the visibility of the chat panel.\n */\nUI.toggleChat = () => APP.store.dispatch(toggleChat());\n\n/**\n * Handle new user display name.\n */\nUI.inputDisplayNameHandler = function(newDisplayName) {\n    eventEmitter.emit(UIEvents.NICKNAME_CHANGED, newDisplayName);\n};\n\n// FIXME check if someone user this\nUI.showLoginPopup = function(callback) {\n    logger.log('password is required');\n\n    const message\n        = `<input name=\"username\" type=\"text\"\n                placeholder=\"user@domain.net\"\n                class=\"input-control\" autofocus>\n         <input name=\"password\" type=\"password\"\n                data-i18n=\"[placeholder]dialog.userPassword\"\n                class=\"input-control\"\n                placeholder=\"user password\">`\n\n    ;\n\n    // eslint-disable-next-line max-params\n    const submitFunction = (e, v, m, f) => {\n        if (v && f.username && f.password) {\n            callback(f.username, f.password);\n        }\n    };\n\n    messageHandler.openTwoButtonDialog({\n        titleKey: 'dialog.passwordRequired',\n        msgString: message,\n        leftButtonKey: 'dialog.Ok',\n        submitFunction,\n        focus: ':input:first'\n    });\n};\n\nUI.askForNickname = function() {\n    // eslint-disable-next-line no-alert\n    return window.prompt('Your nickname (optional)');\n};\n\n/**\n * Sets muted audio state for participant\n */\nUI.setAudioMuted = function(id, muted) {\n    VideoLayout.onAudioMute(id, muted);\n    if (APP.conference.isLocalId(id)) {\n        APP.conference.updateAudioIconEnabled();\n    }\n};\n\n/**\n * Sets muted video state for participant\n */\nUI.setVideoMuted = function(id, muted) {\n    VideoLayout.onVideoMute(id, muted);\n    if (APP.conference.isLocalId(id)) {\n        APP.conference.updateVideoIconEnabled();\n    }\n};\n\n/**\n * Triggers an update of remote video and large video displays so they may pick\n * up any state changes that have occurred elsewhere.\n *\n * @returns {void}\n */\nUI.updateAllVideos = () => VideoLayout.updateAllVideos();\n\n/**\n * Adds a listener that would be notified on the given type of event.\n *\n * @param type the type of the event we're listening for\n * @param listener a function that would be called when notified\n */\nUI.addListener = function(type, listener) {\n    eventEmitter.on(type, listener);\n};\n\n/**\n * Removes the all listeners for all events.\n *\n * @returns {void}\n */\nUI.removeAllListeners = function() {\n    eventEmitter.removeAllListeners();\n};\n\n/**\n * Removes the given listener for the given type of event.\n *\n * @param type the type of the event we're listening for\n * @param listener the listener we want to remove\n */\nUI.removeListener = function(type, listener) {\n    eventEmitter.removeListener(type, listener);\n};\n\n/**\n * Emits the event of given type by specifying the parameters in options.\n *\n * @param type the type of the event we're emitting\n * @param options the parameters for the event\n */\nUI.emitEvent = (type, ...options) => eventEmitter.emit(type, ...options);\n\nUI.clickOnVideo = videoNumber => VideoLayout.togglePin(videoNumber);\n\n// Used by torture.\nUI.showToolbar = timeout => APP.store.dispatch(showToolbox(timeout));\n\n// Used by torture.\nUI.dockToolbar = dock => APP.store.dispatch(dockToolbox(dock));\n\n/**\n * Updates the displayed avatar for participant.\n *\n * @param {string} id - User id whose avatar should be updated.\n * @param {string} avatarURL - The URL to avatar image to display.\n * @returns {void}\n */\nUI.refreshAvatarDisplay = function(id) {\n    VideoLayout.changeUserAvatar(id);\n};\n\n/**\n * Notify user that connection failed.\n * @param {string} stropheErrorMsg raw Strophe error message\n */\nUI.notifyConnectionFailed = function(stropheErrorMsg) {\n    let descriptionKey;\n    let descriptionArguments;\n\n    if (stropheErrorMsg) {\n        descriptionKey = 'dialog.connectErrorWithMsg';\n        descriptionArguments = { msg: stropheErrorMsg };\n    } else {\n        descriptionKey = 'dialog.connectError';\n    }\n\n    messageHandler.showError({\n        descriptionArguments,\n        descriptionKey,\n        titleKey: 'connection.CONNFAIL'\n    });\n};\n\n\n/**\n * Notify user that maximum users limit has been reached.\n */\nUI.notifyMaxUsersLimitReached = function() {\n    messageHandler.showError({\n        hideErrorSupportLink: true,\n        descriptionKey: 'dialog.maxUsersLimitReached',\n        titleKey: 'dialog.maxUsersLimitReachedTitle'\n    });\n};\n\n/**\n * Notify user that he was automatically muted when joned the conference.\n */\nUI.notifyInitiallyMuted = function() {\n    messageHandler.participantNotification(\n        null,\n        'notify.mutedTitle',\n        'connected',\n        'notify.muted',\n        null);\n};\n\nUI.handleLastNEndpoints = function(leavingIds, enteringIds) {\n    VideoLayout.onLastNEndpointsChanged(leavingIds, enteringIds);\n};\n\n/**\n * Update audio level visualization for specified user.\n * @param {string} id user id\n * @param {number} lvl audio level\n */\nUI.setAudioLevel = (id, lvl) => VideoLayout.setAudioLevel(id, lvl);\n\n/**\n * Hide connection quality statistics from UI.\n */\nUI.hideStats = function() {\n    VideoLayout.hideStats();\n};\n\n\nUI.notifyTokenAuthFailed = function() {\n    messageHandler.showError({\n        descriptionKey: 'dialog.tokenAuthFailed',\n        titleKey: 'dialog.tokenAuthFailedTitle'\n    });\n};\n\nUI.notifyInternalError = function(error) {\n    messageHandler.showError({\n        descriptionArguments: { error },\n        descriptionKey: 'dialog.internalError',\n        titleKey: 'dialog.internalErrorTitle'\n    });\n};\n\nUI.notifyFocusDisconnected = function(focus, retrySec) {\n    messageHandler.participantNotification(\n        null, 'notify.focus',\n        'disconnected', 'notify.focusFail',\n        { component: focus,\n            ms: retrySec }\n    );\n};\n\n/**\n * Notifies interested listeners that the raise hand property has changed.\n *\n * @param {boolean} isRaisedHand indicates the current state of the\n * \"raised hand\"\n */\nUI.onLocalRaiseHandChanged = function(isRaisedHand) {\n    eventEmitter.emit(UIEvents.LOCAL_RAISE_HAND_CHANGED, isRaisedHand);\n};\n\n/**\n * Update list of available physical devices.\n */\nUI.onAvailableDevicesChanged = function() {\n    APP.conference.updateAudioIconEnabled();\n    APP.conference.updateVideoIconEnabled();\n};\n\n/**\n * Returns the id of the current video shown on large.\n * Currently used by tests (torture).\n */\nUI.getLargeVideoID = function() {\n    return VideoLayout.getLargeVideoID();\n};\n\n/**\n * Returns the current video shown on large.\n * Currently used by tests (torture).\n */\nUI.getLargeVideo = function() {\n    return VideoLayout.getLargeVideo();\n};\n\n/**\n * Shows \"Please go to chrome webstore to install the desktop sharing extension\"\n * 2 button dialog with buttons - cancel and go to web store.\n * @param url {string} the url of the extension.\n */\nUI.showExtensionExternalInstallationDialog = function(url) {\n    let openedWindow = null;\n\n    const submitFunction = function(e, v) {\n        if (v) {\n            e.preventDefault();\n            if (openedWindow === null || openedWindow.closed) {\n                openedWindow\n                    = window.open(\n                        url,\n                        'extension_store_window',\n                        'resizable,scrollbars=yes,status=1');\n            } else {\n                openedWindow.focus();\n            }\n        }\n    };\n\n    const closeFunction = function(e, v) {\n        if (openedWindow) {\n            // Ideally we would close the popup, but this does not seem to work\n            // on Chrome. Leaving it uncommented in case it could work\n            // in some version.\n            openedWindow.close();\n            openedWindow = null;\n        }\n        if (!v) {\n            eventEmitter.emit(UIEvents.EXTERNAL_INSTALLATION_CANCELED);\n        }\n    };\n\n    messageHandler.openTwoButtonDialog({\n        titleKey: 'dialog.externalInstallationTitle',\n        msgKey: 'dialog.externalInstallationMsg',\n        leftButtonKey: 'dialog.goToStore',\n        submitFunction,\n        loadedFunction: $.noop,\n        closeFunction\n    });\n};\n\n/**\n * Shows a dialog which asks user to install the extension. This one is\n * displayed after installation is triggered from the script, but fails because\n * it must be initiated by user gesture.\n * @param callback {function} function to be executed after user clicks\n * the install button - it should make another attempt to install the extension.\n */\nUI.showExtensionInlineInstallationDialog = function(callback) {\n    const submitFunction = function(e, v) {\n        if (v) {\n            callback();\n        }\n    };\n\n    const closeFunction = function(e, v) {\n        if (!v) {\n            eventEmitter.emit(UIEvents.EXTERNAL_INSTALLATION_CANCELED);\n        }\n    };\n\n    messageHandler.openTwoButtonDialog({\n        titleKey: 'dialog.externalInstallationTitle',\n        msgKey: 'dialog.inlineInstallationMsg',\n        leftButtonKey: 'dialog.inlineInstallExtension',\n        submitFunction,\n        loadedFunction: $.noop,\n        closeFunction\n    });\n};\n\n/**\n * Show shared video.\n * @param {string} id the id of the sender of the command\n * @param {string} url video url\n * @param {string} attributes\n*/\nUI.onSharedVideoStart = function(id, url, attributes) {\n    if (sharedVideoManager) {\n        sharedVideoManager.onSharedVideoStart(id, url, attributes);\n    }\n};\n\n/**\n * Update shared video.\n * @param {string} id the id of the sender of the command\n * @param {string} url video url\n * @param {string} attributes\n */\nUI.onSharedVideoUpdate = function(id, url, attributes) {\n    if (sharedVideoManager) {\n        sharedVideoManager.onSharedVideoUpdate(id, url, attributes);\n    }\n};\n\n/**\n * Stop showing shared video.\n * @param {string} id the id of the sender of the command\n * @param {string} attributes\n */\nUI.onSharedVideoStop = function(id, attributes) {\n    if (sharedVideoManager) {\n        sharedVideoManager.onSharedVideoStop(id, attributes);\n    }\n};\n\n/**\n * Handles user's features changes.\n */\nUI.onUserFeaturesChanged = user => VideoLayout.onUserFeaturesChanged(user);\n\n/**\n * Returns the number of known remote videos.\n *\n * @returns {number} The number of remote videos.\n */\nUI.getRemoteVideosCount = () => VideoLayout.getRemoteVideosCount();\n\n/**\n * Sets the remote control active status for a remote participant.\n *\n * @param {string} participantID - The id of the remote participant.\n * @param {boolean} isActive - The new remote control active status.\n * @returns {void}\n */\nUI.setRemoteControlActiveStatus = function(participantID, isActive) {\n    VideoLayout.setRemoteControlActiveStatus(participantID, isActive);\n};\n\n/**\n * Sets the remote control active status for the local participant.\n *\n * @returns {void}\n */\nUI.setLocalRemoteControlActiveChanged = function() {\n    VideoLayout.setLocalRemoteControlActiveChanged();\n};\n\n// TODO: Export every function separately. For now there is no point of doing\n// this because we are importing everything.\nexport default UI;\n","/* global $, APP, interfaceConfig */\n\nimport { getSharedDocumentUrl, setDocumentEditingState } from '../../../react/features/etherpad';\nimport { getToolboxHeight } from '../../../react/features/toolbox';\n\nimport VideoLayout from '../videolayout/VideoLayout';\nimport LargeContainer from '../videolayout/LargeContainer';\nimport Filmstrip from '../videolayout/Filmstrip';\n\n/**\n *\n */\nfunction bubbleIframeMouseMove(iframe) {\n    const existingOnMouseMove = iframe.contentWindow.onmousemove;\n\n    iframe.contentWindow.onmousemove = function(e) {\n        if (existingOnMouseMove) {\n            existingOnMouseMove(e);\n        }\n        const evt = document.createEvent('MouseEvents');\n        const boundingClientRect = iframe.getBoundingClientRect();\n\n        evt.initMouseEvent(\n            'mousemove',\n            true, // bubbles\n            false, // not cancelable\n            window,\n            e.detail,\n            e.screenX,\n            e.screenY,\n            e.clientX + boundingClientRect.left,\n            e.clientY + boundingClientRect.top,\n            e.ctrlKey,\n            e.altKey,\n            e.shiftKey,\n            e.metaKey,\n            e.button,\n            null // no related element\n        );\n        iframe.dispatchEvent(evt);\n    };\n}\n\n/**\n * Default Etherpad frame width.\n */\nconst DEFAULT_WIDTH = 640;\n\n/**\n * Default Etherpad frame height.\n */\nconst DEFAULT_HEIGHT = 480;\n\nconst ETHERPAD_CONTAINER_TYPE = 'etherpad';\n\n/**\n * Container for Etherpad iframe.\n */\nclass Etherpad extends LargeContainer {\n    /**\n     * Creates new Etherpad object\n     */\n    constructor(url) {\n        super();\n\n        const iframe = document.createElement('iframe');\n\n        iframe.id = 'etherpadIFrame';\n        iframe.src = url;\n        iframe.frameBorder = 0;\n        iframe.scrolling = 'no';\n        iframe.width = DEFAULT_WIDTH;\n        iframe.height = DEFAULT_HEIGHT;\n        iframe.setAttribute('style', 'visibility: hidden;');\n\n        this.container.appendChild(iframe);\n\n        iframe.onload = function() {\n            // eslint-disable-next-line no-self-assign\n            document.domain = document.domain;\n            bubbleIframeMouseMove(iframe);\n\n            setTimeout(() => {\n                const doc = iframe.contentDocument;\n\n                // the iframes inside of the etherpad are\n                // not yet loaded when the etherpad iframe is loaded\n                const outer = doc.getElementsByName('ace_outer')[0];\n\n                bubbleIframeMouseMove(outer);\n\n                const inner = doc.getElementsByName('ace_inner')[0];\n\n                bubbleIframeMouseMove(inner);\n            }, 2000);\n        };\n\n        this.iframe = iframe;\n    }\n\n    /**\n     *\n     */\n    get isOpen() {\n        return Boolean(this.iframe);\n    }\n\n    /**\n     *\n     */\n    get container() {\n        return document.getElementById('etherpad');\n    }\n\n    /**\n     *\n     */\n    resize(containerWidth, containerHeight) {\n        let height, width;\n\n        if (interfaceConfig.VERTICAL_FILMSTRIP) {\n            height = containerHeight - getToolboxHeight();\n            width = containerWidth - Filmstrip.getVerticalFilmstripWidth();\n        } else {\n            height = containerHeight - Filmstrip.getFilmstripHeight();\n            width = containerWidth;\n        }\n\n        $(this.iframe)\n            .width(width)\n            .height(height);\n    }\n\n    /**\n     *\n     */\n    show() {\n        const $iframe = $(this.iframe);\n        const $container = $(this.container);\n        const self = this;\n\n        return new Promise(resolve => {\n            $iframe.fadeIn(300, () => {\n                self.bodyBackground = document.body.style.background;\n                document.body.style.background = '#eeeeee';\n                $iframe.css({ visibility: 'visible' });\n                $container.css({ zIndex: 2 });\n\n                APP.store.dispatch(setDocumentEditingState(true));\n\n                resolve();\n            });\n        });\n    }\n\n    /**\n     *\n     */\n    hide() {\n        const $iframe = $(this.iframe);\n        const $container = $(this.container);\n\n        document.body.style.background = this.bodyBackground;\n\n        return new Promise(resolve => {\n            $iframe.fadeOut(300, () => {\n                $iframe.css({ visibility: 'hidden' });\n                $container.css({ zIndex: 0 });\n\n                APP.store.dispatch(setDocumentEditingState(false));\n\n                resolve();\n            });\n        });\n    }\n\n    /**\n     * @return {boolean} do not switch on dominant speaker event if on stage.\n     */\n    stayOnStage() {\n        return true;\n    }\n}\n\n/**\n * Manager of the Etherpad frame.\n */\nexport default class EtherpadManager {\n    /**\n     *\n     */\n    constructor(eventEmitter) {\n        this.eventEmitter = eventEmitter;\n        this.etherpad = null;\n    }\n\n    /**\n     *\n     */\n    get isOpen() {\n        return Boolean(this.etherpad);\n    }\n\n    /**\n     *\n     */\n    isVisible() {\n        return VideoLayout.isLargeContainerTypeVisible(ETHERPAD_CONTAINER_TYPE);\n    }\n\n    /**\n     * Create new Etherpad frame.\n     */\n    openEtherpad() {\n        this.etherpad = new Etherpad(getSharedDocumentUrl(APP.store.getState));\n        VideoLayout.addLargeVideoContainer(\n            ETHERPAD_CONTAINER_TYPE,\n            this.etherpad\n        );\n    }\n\n    /**\n     * Toggle Etherpad frame visibility.\n     * Open new Etherpad frame if there is no Etherpad frame yet.\n     */\n    toggleEtherpad() {\n        if (!this.isOpen) {\n            this.openEtherpad();\n        }\n\n        const isVisible = this.isVisible();\n\n        VideoLayout.showLargeVideoContainer(\n            ETHERPAD_CONTAINER_TYPE, !isVisible);\n\n        APP.store.dispatch(setDocumentEditingState(!isVisible));\n    }\n}\n","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_assertThisInitialized(_this)), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return _toConsumableArray(ancestorData).concat([data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","import styled, { css } from 'styled-components';\nimport { colors, fontSize, gridSize, math, themed } from '@atlaskit/theme';\nvar activeBackgroundColor = themed({\n  light: colors.B75,\n  dark: colors.DN30\n});\nvar hoverBackgroundColor = themed({\n  light: colors.N20,\n  dark: colors.DN60\n});\nvar selectedBackgroundColor = themed({\n  light: colors.N0,\n  dark: colors.DN30\n});\nvar activePrimaryTextColor = themed({\n  light: colors.N800,\n  dark: colors.DN300\n});\nvar defaultPrimaryTextColor = themed({\n  light: colors.N800,\n  dark: colors.DN600\n});\nvar disabledPrimaryTextColor = themed({\n  light: colors.N70,\n  dark: colors.DN70\n});\nvar primaryPrimaryTextColor = themed({\n  light: colors.B400,\n  dark: colors.B400\n});\nvar selectedPrimaryTextColor = themed({\n  light: colors.N800,\n  dark: colors.N800\n});\nvar focusedStyles = css([\"\\n  box-shadow: 0 0 0 2px \", \"\\n    inset;\\n  outline: none;\\n  outline-offset: 0;\\n  position: relative; /* prevents bgcolor of a hovered element from obfuscating focus ring of a focused sibling element */\\n\"], themed({\n  light: colors.B100,\n  dark: colors.B75\n}));\nvar activeStyles = css([\"\\n  &,\\n  &:hover {\\n    background-color: \", \";\\n    color: \", \";\\n  }\\n\"], selectedBackgroundColor, selectedPrimaryTextColor);\nvar primaryStyles = css([\"\\n  color: \", \";\\n\"], primaryPrimaryTextColor);\n\nvar sharedStyles = function sharedStyles(props) {\n  return css([\"\\n  align-items: center;\\n  box-sizing: border-box;\\n  color: \", \";\\n  cursor: \", \";\\n  display: \", \";\\n  flex-wrap: nowrap;\\n  font-size: \", \"px;\\n  font-weight: normal;\\n  padding: 0 \", \"px;\\n  text-decoration: none;\\n\\n  &:hover {\\n    background-color: \", \";\\n    color: \", \";\\n    text-decoration: none;\\n\\n    \", \";\\n  }\\n  &:active {\\n    background-color: \", \";\\n    color: \", \";\\n\\n    \", \";\\n  }\\n  &:focus {\\n    \", \";\\n  }\\n\\n  \", \" \", \" \", \";\\n\"], props.isDisabled ? disabledPrimaryTextColor : defaultPrimaryTextColor, props.isDisabled ? 'not-allowed' : 'pointer', props.isHidden ? 'none' : 'flex', fontSize, math.multiply(gridSize, 1.5), !props.isDisabled && hoverBackgroundColor, props.isDisabled ? disabledPrimaryTextColor : defaultPrimaryTextColor, props.isPrimary && primaryStyles, !props.isDisabled && activeBackgroundColor, !props.isDisabled && activePrimaryTextColor, props.isPrimary && primaryStyles, focusedStyles, props.isFocused && focusedStyles, props.isActive && activeStyles, props.isPrimary && primaryStyles);\n};\n\nexport var Anchor = styled.a.withConfig({\n  displayName: \"Item__Anchor\",\n  componentId: \"aiqnor-0\"\n})([\"\\n  \", \";\\n\"], function (props) {\n  return sharedStyles(props);\n});\nexport var Span = styled.span.withConfig({\n  displayName: \"Item__Span\",\n  componentId: \"aiqnor-1\"\n})([\"\\n  \", \";\\n\"], function (props) {\n  return sharedStyles(props);\n}); // Checkbox/Radio wrapper -- sits left of the children\n\nexport var InputWrapper = styled.span.withConfig({\n  displayName: \"Item__InputWrapper\",\n  componentId: \"aiqnor-2\"\n})([\"\\n  display: flex;\\n  margin: 0 2px;\\n\"]); // Elements injected before/after the children\n\nexport var Before = styled.span.withConfig({\n  displayName: \"Item__Before\",\n  componentId: \"aiqnor-3\"\n})([\"\\n  display: flex;\\n\"]);\nexport var After = styled.span.withConfig({\n  displayName: \"Item__After\",\n  componentId: \"aiqnor-4\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n\"]); // Alignment and layout for the children\n\nexport var ContentWrapper = styled.span.withConfig({\n  displayName: \"Item__ContentWrapper\",\n  componentId: \"aiqnor-5\"\n})([\"\\n  display: flex;\\n  flex-direction: column;\\n  margin: 0 \", \"px;\\n  padding: \", \"px 0;\\n  overflow: hidden;\\n\\n  &:first-child {\\n    margin: 0;\\n  }\\n\"], gridSize, gridSize);\nexport var Content = styled.span.withConfig({\n  displayName: \"Item__Content\",\n  componentId: \"aiqnor-6\"\n})([\"\\n  flex: 1 1 auto;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n  \", \";\\n\"], function (props) {\n  return props.allowMultiline && css([\"\\n      white-space: normal;\\n    \"]);\n}); // Description is a block element below the children, like a subtitle\n\nexport var Description = styled.span.withConfig({\n  displayName: \"Item__Description\",\n  componentId: \"aiqnor-7\"\n})([\"\\n  color: \", \";\\n  flex: 1 1 auto;\\n  font-size: 12px;\\n  line-height: 16 / 12;\\n  margin-top: \", \"px;\\n\"], colors.subtleText, math.divide(gridSize, 2)); // NOTE: Exposed as a named export for this package\n\nexport var SecondaryText = styled.span.withConfig({\n  displayName: \"Item__SecondaryText\",\n  componentId: \"aiqnor-8\"\n})([\"\\n  color: \", \";\\n\"], colors.subtleText);","import { colors } from '@atlaskit/theme';\nexport function getInputBackground(_ref) {\n  var isChecked = _ref.isChecked,\n      isDisabled = _ref.isDisabled,\n      isHovered = _ref.isHovered,\n      isPressed = _ref.isPressed;\n  var background = colors.N40;\n  if (isHovered) background = colors.N50;\n  if (isPressed) background = colors.B200;\n  if (isChecked) background = colors.B400;\n  if (isDisabled) background = colors.N20;\n  if (isChecked && isDisabled) background = colors.N600;\n  return background;\n}\nexport function getInputFill(appearanceProps) {\n  return appearanceProps.isChecked ? colors.N0 : 'transparent';\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { PureComponent } from 'react';\nimport { Anchor, Span } from '../styled/Item';\nexport var supportsVoiceOver = function supportsVoiceOver() {\n  return /Mac OS X/.test(navigator.userAgent);\n};\nexport var getAriaRoles = function getAriaRoles() {\n  return {\n    checkbox: supportsVoiceOver() ? 'checkbox' : 'menuitemcheckbox',\n    link: 'menuitem',\n    option: 'option',\n    radio: supportsVoiceOver() ? 'radio' : 'menuitemradio'\n  };\n};\nexport var baseTypes = {\n  default: 'link',\n  values: ['link', 'radio', 'checkbox', 'option']\n};\n\nvar Element =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(Element, _PureComponent);\n\n  function Element() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Element);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Element)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseDown\", function (e) {\n      e.preventDefault();\n\n      _this.props.handleMouseDown();\n    });\n\n    return _this;\n  }\n\n  _createClass(Element, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      var isActive = props.isActive,\n          isChecked = props.isChecked,\n          isDisabled = props.isDisabled,\n          isFocused = props.isFocused,\n          isHidden = props.isHidden,\n          isSelected = props.isSelected,\n          isPrimary = props.isPrimary;\n      var type = this.props.type || '';\n      var appearanceProps = {\n        isActive: isActive,\n        isChecked: isChecked,\n        isDisabled: isDisabled,\n        isFocused: isFocused,\n        isHidden: isHidden,\n        isSelected: isSelected,\n        isPrimary: isPrimary\n      };\n      var ariaProps = {\n        'aria-checked': !!isChecked,\n        'aria-disabled': !!isDisabled,\n        'aria-hidden': !!isHidden,\n        'aria-selected': !!isSelected\n      };\n      var ariaRoles = getAriaRoles();\n      var commonProps = {\n        'data-role': 'droplistItem',\n        onClick: props.handleClick,\n        onKeyPress: props.handleKeyPress,\n        onMouseDown: this.handleMouseDown,\n        onMouseOut: props.handleMouseOut,\n        onMouseOver: props.handleMouseOver,\n        onMouseUp: props.handleMouseUp,\n        role: ariaRoles[type],\n        title: props.title,\n        tabIndex: props.type === 'option' ? null : 0\n      };\n      var testingProps = process.env.NODE_ENV === 'test' ? {\n        'data-test-active': isActive,\n        'data-test-checked': isChecked,\n        'data-test-disabled': isDisabled,\n        'data-test-hidden': isHidden,\n        'data-test-selected': isSelected\n      } : {};\n\n      var consolidatedProps = _objectSpread({}, appearanceProps, ariaProps, commonProps, testingProps);\n\n      if (props.href && !isDisabled) {\n        return React.createElement(Anchor, _extends({\n          href: props.href,\n          target: props.target\n        }, consolidatedProps), props.children);\n      }\n\n      return React.createElement(Span, consolidatedProps, props.children);\n    }\n  }]);\n\n  return Element;\n}(PureComponent);\n\nexport { Element as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport Radio from '@atlaskit/icon/glyph/radio';\nimport Checkbox from '@atlaskit/icon/glyph/checkbox';\nimport Tooltip from '@atlaskit/tooltip';\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport { After, Before, Content, ContentWrapper, Description, InputWrapper } from '../styled/Item';\nimport { getInputBackground, getInputFill } from '../utils';\nimport Element from './Element';\nvar inputTypes = {\n  checkbox: Checkbox,\n  radio: Radio\n};\n\nvar Item =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(Item, _PureComponent);\n\n  function Item() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Item);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Item)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      isHovered: false,\n      isPressed: false\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidMount\", function () {\n      return document.addEventListener('mouseup', _this.handleMouseUp);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentWillUnmount\", function () {\n      return document.removeEventListener('mouseup', _this.handleMouseUp);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"guardedActivate\", function (event) {\n      var _this$props = _this.props,\n          isDisabled = _this$props.isDisabled,\n          onActivate = _this$props.onActivate;\n      if (!isDisabled && onActivate) onActivate({\n        item: _assertThisInitialized(_assertThisInitialized(_this)),\n        event: event\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleClick\", function (event) {\n      return _this.guardedActivate(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleKeyPress\", function (event) {\n      var keyIsValid = ['Enter', ' '].indexOf(event.key) > -1;\n      if (keyIsValid) _this.guardedActivate(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseDown\", function () {\n      return _this.setState({\n        isPressed: true\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseUp\", function () {\n      return _this.setState({\n        isPressed: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseOut\", function () {\n      return _this.setState({\n        isHovered: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseOver\", function () {\n      return _this.setState({\n        isHovered: true\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(Item, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      var _this$state = this.state,\n          isHovered = _this$state.isHovered,\n          isPressed = _this$state.isPressed;\n      var type = props.type || '';\n      var hasInput = ['checkbox', 'radio'].indexOf(type) > -1;\n      var Input = inputTypes[type];\n      var appearanceProps = {\n        isActive: props.type === 'link' && props.isActive || props.type === 'option' && props.isSelected,\n        isChecked: ['checkbox', 'radio'].indexOf(type) > -1 && props.isChecked,\n        isDisabled: props.isDisabled,\n        isFocused: props.isFocused,\n        isHidden: props.isHidden,\n        isHovered: isHovered,\n        isPressed: isPressed,\n        isSelected: type === 'option' && props.isSelected,\n        isPrimary: props.appearance === 'primary'\n      };\n      var element = React.createElement(Element, _extends({}, appearanceProps, {\n        handleClick: this.handleClick,\n        handleKeyPress: this.handleKeyPress,\n        handleMouseOut: this.handleMouseOut,\n        handleMouseOver: this.handleMouseOver,\n        handleMouseUp: this.handleMouseUp,\n        handleMouseDown: this.handleMouseDown,\n        href: props.href,\n        target: props.target,\n        title: props.title,\n        type: props.type\n      }), hasInput && React.createElement(InputWrapper, appearanceProps, React.createElement(Input, {\n        label: \"\",\n        primaryColor: getInputBackground(appearanceProps),\n        secondaryColor: getInputFill(appearanceProps),\n        size: \"medium\"\n      })), !!props.elemBefore && React.createElement(Before, null, props.elemBefore), React.createElement(ContentWrapper, null, React.createElement(Content, {\n        allowMultiline: this.context.shouldAllowMultilineItems\n      }, props.children), !!props.description && React.createElement(Description, null, props.description)), !!props.elemAfter && React.createElement(After, null, props.elemAfter));\n      return React.createElement(\"span\", {\n        role: \"presentation\"\n      }, props.tooltipDescription ? React.createElement(Tooltip, {\n        content: props.tooltipDescription,\n        position: props.tooltipPosition\n      }, element) : element);\n    }\n  }]);\n\n  return Item;\n}(PureComponent);\n\n_defineProperty(Item, \"defaultProps\", {\n  appearance: 'default',\n  children: null,\n  description: '',\n  elemAfter: null,\n  elemBefore: null,\n  href: null,\n  isActive: false,\n  isChecked: false,\n  isDisabled: false,\n  isFocused: false,\n  isHidden: false,\n  isSelected: false,\n  itemContext: 'menu',\n  onActivate: function onActivate() {},\n  target: null,\n  title: null,\n  tooltipDescription: null,\n  tooltipPosition: 'right',\n  type: 'link'\n});\n\n_defineProperty(Item, \"contextTypes\", {\n  shouldAllowMultilineItems: PropTypes.bool\n});\n\nexport { Item as DroplistItemWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'droplistItem',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onActivate: createAndFireEventOnAtlaskit({\n    action: 'selected',\n    actionSubject: 'droplistItem',\n    attributes: {\n      componentName: 'droplistItem',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Item));","import styled from 'styled-components';\nimport { colors, gridSize, math, themed } from '@atlaskit/theme';\nexport default styled.div.withConfig({\n  displayName: \"Group\",\n  componentId: \"sc-1q26u8b-0\"\n})([\"\\n  box-sizing: border-box;\\n  display: block;\\n  margin-top: \", \"px;\\n\\n  &:first-child {\\n    margin-top: 0;\\n  }\\n\"], gridSize);\nexport var Heading = styled.div.withConfig({\n  displayName: \"Group__Heading\",\n  componentId: \"sc-1q26u8b-1\"\n})([\"\\n  align-items: baseline;\\n  color: \", \";\\n  display: flex;\\n  flex: 1 1 auto;\\n  font-weight: normal;\\n  font-size: 14px;\\n  line-height: 1;\\n  margin: 0;\\n  padding: \", \"px \", \"px;\\n\"], themed({\n  light: colors.N300,\n  dark: colors.DN300\n}), gridSize, math.multiply(gridSize, 1.5));\nexport var HeadingAfter = styled.div.withConfig({\n  displayName: \"Group__HeadingAfter\",\n  componentId: \"sc-1q26u8b-2\"\n})([\"\\n  flex: 0 0 auto;\\n\"]);\nexport var HeadingText = styled.div.withConfig({\n  displayName: \"Group__HeadingText\",\n  componentId: \"sc-1q26u8b-3\"\n})([\"\\n  flex: 1 1 auto;\\n  font-size: 12px;\\n  text-transform: uppercase;\\n\"]);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { PureComponent } from 'react';\nimport Group, { Heading, HeadingText, HeadingAfter } from '../styled/Group';\n\nvar DroplistGroup =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(DroplistGroup, _PureComponent);\n\n  function DroplistGroup() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, DroplistGroup);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(DroplistGroup)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      ariaLabel: _this.props.heading\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"headingElement\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidMount\", function () {\n      if (_this.props.heading || _this.props.elemAfter) {\n        _this.setState({\n          ariaLabel: _this.getAriaLabel()\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidUpdate\", function () {\n      if (_this.props.heading || _this.props.elemAfter) {\n        _this.setState({\n          ariaLabel: _this.getAriaLabel()\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAriaLabel\", function () {\n      var _this$props = _this.props,\n          elemAfter = _this$props.elemAfter,\n          heading = _this$props.heading;\n      var afterText = elemAfter && typeof elemAfter === 'string' ? elemAfter : _this.headingElement && _this.headingElement.textContent;\n      return \"\".concat(heading || '', \" \").concat(afterText || '');\n    });\n\n    return _this;\n  }\n\n  _createClass(DroplistGroup, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          children = _this$props2.children,\n          elemAfter = _this$props2.elemAfter,\n          heading = _this$props2.heading;\n      var ariaLabel = this.state.ariaLabel;\n      return React.createElement(Group, {\n        \"aria-label\": ariaLabel,\n        role: \"group\"\n      }, heading ? React.createElement(Heading, {\n        \"aria-hidden\": \"true\",\n        \"data-role\": \"droplistGroupHeading\"\n      }, React.createElement(HeadingText, null, heading), elemAfter ? React.createElement(HeadingAfter, {\n        innerRef: function innerRef(r) {\n          _this2.headingElement = r;\n        }\n      }, elemAfter) : null) : null, children);\n    }\n  }]);\n\n  return DroplistGroup;\n}(PureComponent);\n\nDroplistGroup.displayName = 'Group';\nexport default DroplistGroup;","import React from 'react';\nimport styled from 'styled-components';\nimport ScrollLock from 'react-scrolllock';\nvar Blanket = styled.div.withConfig({\n  displayName: \"ScrollBlock__Blanket\",\n  componentId: \"sc-1xiww8k-0\"\n})([\"\\n  position: fixed;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  background: transparent;\\n\"]);\nexport default function ScrollBlock() {\n  return React.createElement(Blanket, null, React.createElement(ScrollLock, null));\n}","var positionMap = {\n  'top left': {\n    position: 'top-start',\n    animation: 'top'\n  },\n  'top center': {\n    position: 'top',\n    animation: 'top'\n  },\n  'top right': {\n    position: 'top-end',\n    animation: 'top'\n  },\n  'right top': {\n    position: 'right-start',\n    animation: 'right'\n  },\n  'right middle': {\n    position: 'right',\n    animation: 'right'\n  },\n  'right bottom': {\n    position: 'right-end',\n    animation: 'right'\n  },\n  'bottom left': {\n    position: 'bottom-start',\n    animation: 'bottom'\n  },\n  'bottom center': {\n    position: 'bottom',\n    animation: 'bottom'\n  },\n  'bottom right': {\n    position: 'bottom-end',\n    animation: 'bottom'\n  },\n  'left top': {\n    position: 'left-start',\n    animation: 'left'\n  },\n  'left middle': {\n    position: 'left',\n    animation: 'left'\n  },\n  'left bottom': {\n    position: 'left-end',\n    animation: 'left'\n  }\n};\nexport var POSITION_ATTRIBUTE_ENUM = {\n  values: ['top left', 'top center', 'top right', 'right top', 'right middle', 'right bottom', 'bottom left', 'bottom center', 'bottom right', 'left top', 'left middle', 'left bottom'],\n  default: 'right middle'\n};\n\nfunction positionToPopper(position) {\n  return position && positionMap[position] ? positionMap[position].position : null;\n}\n/* Convert the autoFlip property into the array format that Popper expects.\n * The first item must not include the edge-position variation, or Popper will not understand it.\n */\n\n\nexport function getFlipBehavior(props) {\n  return props.position && Array.isArray(props.autoFlip) ? [props.position.split(' ')[0]].concat(props.autoFlip) : null;\n}\nexport function positionPropToPopperPosition(position) {\n  return positionToPopper(position) || positionMap[POSITION_ATTRIBUTE_ENUM.default].position;\n}","import styled from 'styled-components';\nexport default styled.div.withConfig({\n  displayName: \"styledContentContainer\",\n  componentId: \"p0j3f7-0\"\n})([\"\\n  [data-role='droplistContent'] {\\n    \", \";\\n  }\\n\"], function (_ref) {\n  var maxHeight = _ref.maxHeight;\n  return maxHeight ? \"max-height: \".concat(maxHeight, \"px\") : '';\n});","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport styled from 'styled-components';\nimport rafSchedule from 'raf-schd';\nimport Popper from 'popper.js';\nimport ScrollBlock from './internal/ScrollBlock';\nimport { getFlipBehavior, positionPropToPopperPosition } from './internal/helpers';\nimport ContentContainer from '../styledContentContainer';\n// We create a dummy target when making the menu fixed so that we can force popper.js to use fixed positioning\n// without affecting child layout of the actual target since children of fixed position elements can't use percentage\n// heights/widths.\nvar FixedTarget = styled.div.withConfig({\n  displayName: \"Layer__FixedTarget\",\n  componentId: \"qunuuz-0\"\n})([\"\\n  \", \";\\n\"], function (_ref) {\n  var fixedOffset = _ref.fixedOffset,\n      targetRef = _ref.targetRef;\n\n  if (fixedOffset && targetRef) {\n    var actualTarget = targetRef.firstChild;\n    var rect = actualTarget.getBoundingClientRect();\n    return \"\\n        position: fixed;\\n        top: \".concat(fixedOffset.top, \"px;\\n        left: \").concat(fixedOffset.left, \"px;\\n        height: \").concat(rect.height, \"px;\\n        width: \").concat(rect.width, \"px;\\n        z-index: -1;\\n      \");\n  }\n\n  return 'display: none;';\n});\n\nvar Layer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Layer, _Component);\n\n  // TODO: get the value of zIndex from theme, not using it now as it is not\n  // working with extract-react-types\n  function Layer(props) {\n    var _this;\n\n    _classCallCheck(this, Layer);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Layer).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"popper\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"targetRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"contentRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fixedRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"extractStyles\", function (state) {\n      if (state) {\n        var popperHeight = state.offsets.popper.height;\n        var left = Math.round(state.offsets.popper.left); // The offset position is sometimes an object and sometimes just a string...\n\n        var cssPosition = _typeof(state.offsets.popper.position) === 'object' ? state.offsets.popper.position.position : state.offsets.popper.position;\n\n        var top = _this.fixPositionTopUnderflow(state.offsets.popper.top, cssPosition);\n\n        var originalHeight = _this.state.originalHeight || popperHeight;\n\n        var maxHeight = _this.calculateMaxHeight(originalHeight, popperHeight, top, cssPosition);\n\n        _this.setState({\n          // position: fixed or absolute\n          cssPosition: cssPosition,\n          hasExtractedStyles: true,\n          transform: \"translate3d(\".concat(left, \"px, \").concat(top, \"px, 0px)\"),\n          // state.flipped is either true or undefined\n          flipped: !!state.flipped,\n          actualPosition: state.position,\n          originalPosition: state.originalPosition,\n          originalHeight: originalHeight,\n          maxHeight: maxHeight\n        });\n      }\n    });\n\n    _this.state = {\n      hasExtractedStyles: false,\n      position: null,\n      transform: null,\n      flipped: false,\n      actualPosition: null,\n      // We set these default offsets to prevent a flash of popper content in the wrong position\n      // which can cause incorrect height calculations. Popper will calculate these values\n      offsets: {\n        popper: {\n          left: -9999,\n          top: -9999\n        }\n      },\n      originalPosition: null,\n      // fix Safari parent width: https://product-fabric.atlassian.net/browse/ED-1784\n      cssPosition: 'absolute',\n      originalHeight: null,\n      maxHeight: null,\n      fixedOffset: null\n    };\n    _this.extractStyles = rafSchedule(_this.extractStyles.bind(_assertThisInitialized(_assertThisInitialized(_this))));\n    return _this;\n  }\n\n  _createClass(Layer, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.applyPopper(this.props);\n      this.calculateFixedOffset(this.props);\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(nextProps) {\n      this.applyPopper(nextProps);\n      this.calculateFixedOffset(nextProps);\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps, prevState) {\n      var _this$props = this.props,\n          onFlippedChange = _this$props.onFlippedChange,\n          onPositioned = _this$props.onPositioned;\n      var _this$state = this.state,\n          flipped = _this$state.flipped,\n          actualPosition = _this$state.actualPosition,\n          originalPosition = _this$state.originalPosition,\n          hasExtractedStyles = _this$state.hasExtractedStyles;\n\n      if (prevState.flipped !== flipped && onFlippedChange) {\n        onFlippedChange({\n          flipped: flipped,\n          actualPosition: actualPosition,\n          originalPosition: originalPosition\n        });\n      } // This flag is set the first time the position is calculated from Popper and applied to the content\n\n\n      if (!prevState.hasExtractedStyles && hasExtractedStyles && onPositioned) {\n        onPositioned();\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.extractStyles.cancel();\n\n      if (this.popper) {\n        this.popper.destroy();\n      }\n    }\n    /* Calculate the max height of the popper if it's height is greater than the viewport to prevent\n     * the bottom of the popper not being viewable.\n     * Only works if the popper uses viewport as the boundary and has a fixed position ancestor.\n     */\n\n  }, {\n    key: \"calculateMaxHeight\",\n    value: function calculateMaxHeight(originalHeight, currentHeight, positionTop, cssPosition) {\n      var DocumentElementClientHeight = 0;\n\n      if (document.documentElement) {\n        DocumentElementClientHeight = document.documentElement.clientHeight;\n      }\n\n      if (cssPosition !== 'fixed' || this.props.boundariesElement !== 'viewport') {\n        return null;\n      }\n\n      var viewportHeight = Math.max(DocumentElementClientHeight, window.innerHeight || 0);\n      return viewportHeight < originalHeight && currentHeight + positionTop >= viewportHeight - 50 ? // allow some spacing either side of viewport height\n      viewportHeight - 12 : null;\n    }\n    /* Popper may return either a fixed or absolute position which would be applied to the\n     * content style. In order to overcome clipping issues for overflow containing blocks when\n     * the position is absolute, we create a fixed position wrapper.\n     */\n\n  }, {\n    key: \"calculateFixedOffset\",\n    value: function calculateFixedOffset(props) {\n      var isAlwaysFixed = props.isAlwaysFixed;\n\n      if (isAlwaysFixed && this.targetRef) {\n        var actualTarget = this.targetRef.firstChild;\n        this.setState({\n          fixedOffset: {\n            top: actualTarget.getBoundingClientRect().top,\n            left: actualTarget.getBoundingClientRect().left\n          }\n        });\n      } else if (!isAlwaysFixed && this.state.fixedOffset !== null) {\n        this.setState({\n          fixedOffset: null\n        });\n      }\n    }\n    /* Clamp fixed position to the window for fixed position poppers that flow off the top of the\n     * window.\n     * A fixed position popper is a popper who has an ancestor with position: fixed.\n     *\n     * It is too difficult to fix this for non-fixed position poppers without re-implementing popper's\n     * offset functionality or fixing the issue upstream.\n     */\n    // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: \"fixPositionTopUnderflow\",\n    value: function fixPositionTopUnderflow(popperTop, cssPosition) {\n      return popperTop >= 0 || cssPosition !== 'fixed' ? Math.round(popperTop) : 0;\n    }\n  }, {\n    key: \"applyPopper\",\n    value: function applyPopper(props) {\n      if (!this.fixedRef || !this.targetRef || !this.contentRef) {\n        return;\n      }\n\n      if (this.popper) {\n        this.popper.destroy();\n      } // \"new Popper(...)\" operation is very expensive when called on virtual DOM.\n      // This condition reduces the number of calls so we can run our tests faster\n      // (time was reduced from 100s to 13s).\n\n\n      if (!props.content) {\n        return;\n      } // we wrap our target in a div so that we can safely get a reference to it, but we pass the\n      // actual target to popper\n\n\n      var actualTarget = props.isAlwaysFixed ? this.fixedRef : this.targetRef.firstChild;\n      var popperOpts = {\n        placement: positionPropToPopperPosition(props.position),\n        onCreate: this.extractStyles,\n        onUpdate: this.extractStyles,\n        modifiers: {\n          applyStyle: {\n            enabled: false\n          },\n          hide: {\n            enabled: false\n          },\n          offset: {\n            enabled: true,\n            offset: this.props.offset\n          },\n          flip: {\n            enabled: !!this.props.autoFlip,\n            flipVariations: true,\n            boundariesElement: this.props.boundariesElement,\n            padding: 0 // leave 0 pixels between popper and the boundariesElement\n\n          },\n          preventOverflow: {\n            enabled: !!this.props.autoFlip,\n            escapeWithReference: !(this.props.boundariesElement === 'scrollParent')\n          }\n        }\n      };\n      var flipBehavior = getFlipBehavior(props);\n\n      if (flipBehavior) {\n        popperOpts.modifiers.flip.behavior = flipBehavior;\n      }\n\n      this.popper = new Popper(actualTarget, this.contentRef, popperOpts);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          zIndex = _this$props2.zIndex,\n          lockScroll = _this$props2.lockScroll;\n      var _this$state2 = this.state,\n          cssPosition = _this$state2.cssPosition,\n          transform = _this$state2.transform,\n          hasExtractedStyles = _this$state2.hasExtractedStyles,\n          maxHeight = _this$state2.maxHeight,\n          fixedOffset = _this$state2.fixedOffset;\n      var opacity = hasExtractedStyles ? {} : {\n        opacity: 0\n      };\n      return React.createElement(\"div\", null, React.createElement(\"div\", {\n        ref: function ref(_ref2) {\n          _this2.targetRef = _ref2;\n        }\n      }, this.props.children), React.createElement(FixedTarget, {\n        targetRef: this.targetRef,\n        fixedOffset: fixedOffset\n      }, React.createElement(\"div\", {\n        style: {\n          height: '100%',\n          width: '100%'\n        },\n        ref: function ref(_ref3) {\n          _this2.fixedRef = _ref3;\n        }\n      })), lockScroll && React.createElement(ScrollBlock, null), React.createElement(ContentContainer, {\n        maxHeight: maxHeight\n      }, React.createElement(\"div\", {\n        ref: function ref(_ref4) {\n          _this2.contentRef = _ref4;\n        },\n        style: _objectSpread({\n          top: 0,\n          left: 0,\n          position: cssPosition,\n          transform: transform,\n          zIndex: zIndex\n        }, opacity)\n      }, this.props.content)));\n    }\n  }]);\n\n  return Layer;\n}(Component);\n/* eslint-enable react/no-unused-prop-types */\n\n\n_defineProperty(Layer, \"defaultProps\", {\n  autoFlip: true,\n  boundariesElement: 'viewport',\n  children: null,\n  content: null,\n  offset: '0 0',\n  onFlippedChange: function onFlippedChange() {},\n  position: 'right middle',\n  zIndex: 400,\n  lockScroll: false,\n  isAlwaysFixed: false,\n  onPositioned: function onPositioned() {}\n});\n\nexport { Layer as default };","import styled, { css } from 'styled-components';\nimport { borderRadius, colors, gridSize, math } from '@atlaskit/theme';\n/* When dropdown contains more than 9 elements (droplist items, droplist groups),\n * it should have scroll and cut off half of the 10th item to indicate that there are more\n * items then are seen. This was previously calculated by mapping over children, but with\n * the current composed API it is simpler to just assume 9 items. */\n\nvar getMaxHeight = function getMaxHeight(_ref) {\n  var isTall = _ref.isTall,\n      maxHeight = _ref.maxHeight;\n  if (maxHeight) return \"\".concat(maxHeight, \"px\");\n  var heightWithoutPadding = 17;\n  var verticalPadding = gridSize();\n  var height = heightWithoutPadding + verticalPadding * 2;\n  var defaultMaxHeight = 9.5 * height + verticalPadding / 2;\n  return isTall ? '90vh' : \"\".concat(defaultMaxHeight, \"px\");\n};\n\nexport default styled.div.withConfig({\n  displayName: \"Droplist\",\n  componentId: \"sc-1z05y4v-0\"\n})([\"\\n  display: inline-flex;\\n\\n  \", \";\\n\"], function (props) {\n  return props.fit && \"\\n    display: block;\\n    flex: 1 1 auto;\\n  \";\n});\nvar backgroundColor = colors.backgroundOnLayer;\nvar boxShadow = css([\"\\n  box-shadow: 0 \", \"px \", \"px -\", \"px \", \",\\n    0 0 1px \", \";\\n\"], math.divide(gridSize, 2), gridSize, math.divide(gridSize, 4), colors.N50A, colors.N60A);\nexport var Content = styled.div.withConfig({\n  displayName: \"Droplist__Content\",\n  componentId: \"sc-1z05y4v-1\"\n})([\"\\n  background: \", \";\\n  border-radius: \", \"px;\\n  \", \";\\n  box-sizing: border-box;\\n  overflow: auto;\\n  padding: \", \"px 0;\\n  max-height: \", \";\\n\"], backgroundColor, borderRadius, boxShadow, math.divide(gridSize, 2), getMaxHeight);\nexport var SpinnerContainer = styled.div.withConfig({\n  displayName: \"Droplist__SpinnerContainer\",\n  componentId: \"sc-1z05y4v-2\"\n})([\"\\n  display: flex;\\n  justify-content: center;\\n  min-width: \", \"px;\\n  padding: \", \"px;\\n\"], math.multiply(gridSize, 20), math.multiply(gridSize, 2.5));\nexport var Trigger = styled.div.withConfig({\n  displayName: \"Droplist__Trigger\",\n  componentId: \"sc-1z05y4v-3\"\n})([\"\\n  display: inline-flex;\\n  transition-duration: 0.2s;\\n  transition: box-shadow 0.15s cubic-bezier(0.47, 0.03, 0.49, 1.38);\\n\\n  \", \";\\n\"], function (props) {\n  return props.fit && \"\\n    box-sizing: border-box;\\n    display: block;\\n  \";\n});","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { itemThemeNamespace } from '@atlaskit/item';\nimport { colors, gridSize, math, themed } from '@atlaskit/theme';\nvar dropdownPadding = {\n  bottom: gridSize,\n  left: math.multiply(gridSize, 1.5),\n  right: math.multiply(gridSize, 1.5),\n  top: gridSize\n};\nvar droplistItemTheme = {\n  padding: {\n    default: dropdownPadding,\n    compact: dropdownPadding\n  },\n  borderRadius: function borderRadius() {\n    return 0;\n  },\n  default: {\n    background: themed({\n      light: colors.N0,\n      dark: colors.DN50\n    }),\n    text: themed({\n      light: colors.N800,\n      dark: colors.DN600\n    }),\n    secondaryText: themed({\n      light: colors.N200,\n      dark: colors.DN300\n    })\n  },\n  hover: {\n    background: themed({\n      light: colors.N20,\n      dark: colors.DN70\n    }),\n    text: themed({\n      light: colors.N800,\n      dark: colors.DN600\n    }),\n    secondaryText: themed({\n      light: colors.N200,\n      dark: colors.DN300\n    })\n  },\n  active: {\n    background: themed({\n      light: colors.B75,\n      dark: colors.B75\n    }),\n    text: themed({\n      light: colors.N800,\n      dark: colors.B400\n    }),\n    secondaryText: themed({\n      light: colors.N200,\n      dark: colors.DN300\n    })\n  },\n  selected: {\n    background: 'transparent',\n    text: themed({\n      light: colors.N800,\n      dark: colors.DN600\n    }),\n    secondaryText: themed({\n      light: colors.N200,\n      dark: colors.DN300\n    })\n  },\n  disabled: {\n    background: 'transparent',\n    text: themed({\n      light: colors.N70,\n      dark: colors.DN80\n    }),\n    secondaryText: themed({\n      light: colors.N50,\n      dark: colors.DN70\n    })\n  },\n  focus: {\n    outline: themed({\n      light: colors.B100,\n      dark: colors.B75\n    })\n  }\n};\nexport default _defineProperty({}, itemThemeNamespace, droplistItemTheme);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport Layer from '@atlaskit/layer';\nimport Spinner from '@atlaskit/spinner';\nimport { ThemeProvider } from 'styled-components';\nimport { gridSize } from '@atlaskit/theme';\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport Wrapper, { Content, SpinnerContainer, Trigger } from '../styled/Droplist';\nimport itemTheme from '../theme/item-theme';\nvar halfFocusRing = 1;\nvar dropOffset = \"0 \".concat(gridSize(), \"px\");\n\nvar Droplist =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Droplist, _Component);\n\n  function Droplist() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Droplist);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Droplist)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidMount\", function () {\n      _this.setContentWidth(); // We use a captured event here to avoid a radio or checkbox dropdown item firing its\n      // click event first, which would cause a re-render of the element and prevent Droplist\n      // from detecting the actual source of this original click event.\n\n\n      document.addEventListener('click', _this.handleClickOutside, true);\n      document.addEventListener('keydown', _this.handleEsc);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidUpdate\", function () {\n      if (_this.props.isOpen) {\n        _this.setContentWidth();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentWillUnmount\", function () {\n      document.removeEventListener('click', _this.handleClickOutside, true);\n      document.removeEventListener('keydown', _this.handleEsc);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"setContentWidth\", function () {\n      var _assertThisInitialize = _assertThisInitialized(_assertThisInitialized(_this)),\n          dropContentRef = _assertThisInitialize.dropContentRef,\n          triggerRef = _assertThisInitialize.triggerRef;\n\n      var shouldFitContainer = _this.props.shouldFitContainer; // We need to manually set the content width to match the trigger width\n      // if props.shouldFitContainer is true\n\n      if (shouldFitContainer && dropContentRef && triggerRef) {\n        dropContentRef.style.width = \"\".concat(triggerRef.offsetWidth - halfFocusRing * 2, \"px\");\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"dropContentRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"triggerRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleEsc\", function (event) {\n      if (event.key === 'Escape' && _this.props.isOpen) {\n        _this.close(event);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleClickOutside\", function (event) {\n      if (_this.props.isOpen) {\n        // $FlowFixMe - flow is lost and if not an instance of Node\n        if (event.target instanceof Node) {\n          // Rather than check for the target within the entire Droplist, we specify the trigger/content.\n          // This aids with future effort in scroll-locking Droplist when isMenuFixed is enabled; the scroll\n          // blanket which stretches to the viewport should not stop 'close' from being triggered.\n          var withinTrigger = _this.triggerRef && _this.triggerRef.contains(event.target);\n\n          var withinContent = _this.dropContentRef && _this.dropContentRef.contains(event.target);\n\n          if (!withinTrigger && !withinContent) {\n            _this.close(event);\n          }\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"close\", function (event) {\n      if (_this.props.onOpenChange) {\n        _this.props.onOpenChange({\n          isOpen: false,\n          event: event\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleContentRef\", function (ref) {\n      _this.dropContentRef = ref; // If the dropdown has just been opened, we focus on the containing element so the\n      // user can tab to the first dropdown item. We will only receive this ref if isOpen\n      // is true or null, so no need to check for truthiness here.\n\n      if (ref) {\n        ref.focus();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleTriggerRef\", function (ref) {\n      _this.triggerRef = ref;\n    });\n\n    return _this;\n  }\n\n  _createClass(Droplist, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        shouldAllowMultilineItems: this.props.shouldAllowMultilineItems\n      };\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          boundariesElement = _this$props.boundariesElement,\n          children = _this$props.children,\n          isLoading = _this$props.isLoading,\n          isOpen = _this$props.isOpen,\n          maxHeight = _this$props.maxHeight,\n          onClick = _this$props.onClick,\n          onKeyDown = _this$props.onKeyDown,\n          position = _this$props.position,\n          isMenuFixed = _this$props.isMenuFixed,\n          shouldFitContainer = _this$props.shouldFitContainer,\n          shouldFlip = _this$props.shouldFlip,\n          trigger = _this$props.trigger,\n          onPositioned = _this$props.onPositioned;\n      var layerContent = isOpen ? React.createElement(Content, {\n        \"data-role\": \"droplistContent\",\n        isTall: appearance === 'tall',\n        innerRef: this.handleContentRef,\n        maxHeight: maxHeight\n      }, isLoading ? React.createElement(SpinnerContainer, null, React.createElement(Spinner, {\n        size: \"small\"\n      })) : React.createElement(ThemeProvider, {\n        theme: itemTheme\n      }, React.createElement(\"div\", null, children))) : null;\n      return React.createElement(Wrapper, {\n        fit: shouldFitContainer,\n        onClick: onClick,\n        onKeyDown: onKeyDown\n      }, React.createElement(Layer, {\n        autoFlip: shouldFlip,\n        boundariesElement: boundariesElement,\n        content: layerContent,\n        offset: dropOffset // $FlowFixMe - Cannot create `Layer` element because in property `position\n        ,\n        position: position,\n        isAlwaysFixed: isOpen && isMenuFixed,\n        onPositioned: onPositioned\n      }, React.createElement(Trigger, {\n        fit: shouldFitContainer,\n        innerRef: this.handleTriggerRef\n      }, trigger)));\n    }\n  }]);\n\n  return Droplist;\n}(Component);\n\n_defineProperty(Droplist, \"defaultProps\", {\n  appearance: 'default',\n  boundariesElement: 'viewport',\n  children: null,\n  isLoading: false,\n  isOpen: false,\n  onClick: function onClick() {},\n  onKeyDown: function onKeyDown() {},\n  onOpenChange: function onOpenChange() {},\n  position: 'bottom left',\n  isMenuFixed: false,\n  shouldAllowMultilineItems: false,\n  shouldFitContainer: false,\n  shouldFlip: true,\n  trigger: null,\n  onPositioned: function onPositioned() {}\n});\n\n_defineProperty(Droplist, \"childContextTypes\", {\n  shouldAllowMultilineItems: PropTypes.bool\n});\n\nexport { Droplist as DroplistWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'droplist',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onOpenChange: createAndFireEventOnAtlaskit({\n    action: 'toggled',\n    actionSubject: 'droplist',\n    attributes: {\n      componentName: 'droplist',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Droplist));","var prefix = function prefix(key) {\n  return \"@atlaskit-private-do-not-use/dropdown-menu:\".concat(key);\n};\n\nexport var focusManagerContext = prefix('focus-manager');\nexport var selectionCacheContext = prefix('selection-cache');\nexport var selectionManagerContext = prefix('selection-manager');\nexport var clickManagerContext = prefix('click-manager');","export var KEY_UP = 'ArrowUp';\nexport var KEY_DOWN = 'ArrowDown';\nexport var KEY_SPACE = ' ';\nexport var KEY_ENTER = 'Enter';\nexport var KEY_TAB = 'Tab';\nexport var KEY_ESC = 'Escape';","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { focusManagerContext } from '../../util/contextNamespace';\nimport { KEY_DOWN, KEY_UP, KEY_TAB } from '../../util/keys';\n\nvar DropdownItemFocusManager =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(DropdownItemFocusManager, _Component);\n\n  function DropdownItemFocusManager() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, DropdownItemFocusManager);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(DropdownItemFocusManager)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"registeredItems\", []);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focusedItemId\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleItemRegistered\", function (itemId, itemNode) {\n      _this.registeredItems.push({\n        itemId: itemId,\n        itemNode: itemNode\n      });\n\n      if (_this.props.autoFocus && _this.registeredItems.length === 1) {\n        _this.focusedItemId = itemId;\n        itemNode.focus();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleItemDeregistered\", function (itemId) {\n      _this.registeredItems = _this.registeredItems.filter(function (item) {\n        return item.itemId !== itemId;\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleItemFocused\", function (itemId) {\n      _this.focusedItemId = itemId;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleItemUpdated\", function (itemId, itemNode) {\n      var matchingIndex = -1;\n\n      for (var i = 0; i < _this.registeredItems.length; i++) {\n        if (_this.registeredItems[i].itemId === itemId) {\n          matchingIndex = i;\n          break;\n        }\n      }\n\n      if (matchingIndex === -1) {\n        _this.handleItemRegistered(itemId, itemNode);\n\n        return;\n      }\n\n      _this.registeredItems[matchingIndex].itemNode = itemNode;\n\n      if (_this.focusedItemIndex() === matchingIndex) {\n        itemNode.focus();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focusedItemIndex\", function () {\n      var _assertThisInitialize = _assertThisInitialized(_assertThisInitialized(_this)),\n          focusedItemId = _assertThisInitialize.focusedItemId,\n          registeredItems = _assertThisInitialize.registeredItems;\n\n      for (var i = 0; i < registeredItems.length; i++) {\n        if (registeredItems[i].itemId === focusedItemId) {\n          return i;\n        }\n      }\n\n      return -1;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleKeyboard\", function (event) {\n      var key = event.key,\n          shiftKey = event.shiftKey;\n\n      var focusedItemIndex = _this.focusedItemIndex();\n\n      if (key === KEY_UP || key === KEY_DOWN) {\n        // We prevent default here to avoid page scrolling when up/down\n        // pressed while dropdown is focused.\n        event.preventDefault();\n\n        if (focusedItemIndex < 0) {\n          return;\n        }\n\n        var nextItemIndex = key === KEY_UP ? Math.max(0, focusedItemIndex - 1) : Math.min(_this.registeredItems.length - 1, focusedItemIndex + 1);\n\n        _this.registeredItems[nextItemIndex].itemNode.focus();\n      }\n\n      if (key === KEY_TAB) {\n        if (!shiftKey && focusedItemIndex === _this.registeredItems.length - 1) {\n          if (_this.props.close) _this.props.close({\n            event: event,\n            source: 'keydown'\n          });\n        }\n\n        if (shiftKey && focusedItemIndex === 0) {\n          if (_this.props.close) _this.props.close({\n            event: event,\n            source: 'keydown'\n          });\n        }\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(DropdownItemFocusManager, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return _defineProperty({}, focusManagerContext, {\n        itemFocused: this.handleItemFocused,\n        registerItem: this.handleItemRegistered,\n        deregisterItem: this.handleItemDeregistered,\n        updateItem: this.handleItemUpdated\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n      return React.createElement(\"div\", {\n        onKeyDown: this.handleKeyboard\n      }, this.props.children);\n    }\n  }]);\n\n  return DropdownItemFocusManager;\n}(Component);\n\n_defineProperty(DropdownItemFocusManager, \"childContextTypes\", _defineProperty({}, focusManagerContext, PropTypes.object));\n\nexport { DropdownItemFocusManager as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { clickManagerContext } from '../../util/contextNamespace';\n\nvar DropdownItemClickManager =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(DropdownItemClickManager, _Component);\n\n  function DropdownItemClickManager() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, DropdownItemClickManager);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(DropdownItemClickManager)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleItemClicked\", function (event) {\n      _this.props.onItemClicked(event);\n    });\n\n    return _this;\n  }\n\n  _createClass(DropdownItemClickManager, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return _defineProperty({}, clickManagerContext, {\n        itemClicked: this.handleItemClicked\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return this.props.children;\n    }\n  }]);\n\n  return DropdownItemClickManager;\n}(Component);\n\n_defineProperty(DropdownItemClickManager, \"childContextTypes\", _defineProperty({}, clickManagerContext, PropTypes.object));\n\nexport { DropdownItemClickManager as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport find from 'array-find';\nimport { selectionCacheContext } from '../../util/contextNamespace';\n\nvar isItemInList = function isItemInList(itemList, itemId, groupId) {\n  return Boolean(find(itemList, function (item) {\n    return item.id === itemId && item.groupId === groupId;\n  }));\n};\n\nvar DropdownItemSelectionCache =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(DropdownItemSelectionCache, _Component);\n\n  function DropdownItemSelectionCache() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, DropdownItemSelectionCache);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(DropdownItemSelectionCache)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      lastCacheUpdate: 0\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"selectedItems\", []);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"alreadyDefaultedItems\", []);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleItemSelectionsChanged\", function (groupId, newGroupSelections) {\n      var newSelectedItems = _toConsumableArray(_this.selectedItems.filter(function (item) {\n        return item.groupId !== groupId;\n      })).concat(_toConsumableArray(newGroupSelections));\n\n      _this.selectedItems = newSelectedItems; // We store selectedItems in an instance variable (this.selectedItems) instead of state,\n      // because if multiple children update the cache at the same time it causes unexpected\n      // behaviour due to the asynchronous behaviour of setState. So we need to trigger setState\n      // with a different value to cause the children to be updated with their new selection values.\n\n      _this.setState({\n        lastCacheUpdate: Date.now()\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(DropdownItemSelectionCache, [{\n    key: \"getChildContext\",\n    // eslint-disable-line react/sort-comp\n    value: function getChildContext() {\n      var _this2 = this;\n\n      return _defineProperty({}, selectionCacheContext, {\n        // This function returns true/false describing whether the supplied navigation item\n        // (which must have a unique item and group ID) is currently selected - this is used\n        // by radio and checkbox dropdown items to retreive their 'selected' state when they\n        // re-mount, which happens when the dropdown is closed and then re-opened.\n        isItemSelected: function isItemSelected(groupId, itemId) {\n          return isItemInList(_this2.selectedItems, itemId, groupId);\n        },\n        itemsInGroup: function itemsInGroup(groupId) {\n          return _this2.selectedItems.filter(function (item) {\n            return item.groupId === groupId;\n          });\n        },\n        itemSelectionsChanged: this.handleItemSelectionsChanged,\n        hasItemAlreadyHadDefaultSelectedApplied: function hasItemAlreadyHadDefaultSelectedApplied(groupId, itemId) {\n          return isItemInList(_this2.alreadyDefaultedItems, itemId, groupId);\n        },\n        markItemAsDefaultApplied: function markItemAsDefaultApplied(groupId, itemId) {\n          _this2.alreadyDefaultedItems.push({\n            id: itemId,\n            groupId: groupId\n          });\n        }\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return React.createElement(\"div\", null, this.props.children);\n    }\n  }]);\n\n  return DropdownItemSelectionCache;\n}(Component);\n\n_defineProperty(DropdownItemSelectionCache, \"childContextTypes\", _defineProperty({}, selectionCacheContext, PropTypes.shape({\n  isItemSelected: PropTypes.func,\n  itemsInGroup: PropTypes.func,\n  itemSelectionsChanged: PropTypes.func\n})));\n\nexport { DropdownItemSelectionCache as default };","import styled from 'styled-components';\nexport default styled.div.withConfig({\n  displayName: \"WidthConstrainer\",\n  componentId: \"sc-15doeus-0\"\n})([\"\\n  \", \";\\n\"], function (_ref) {\n  var shouldFitContainer = _ref.shouldFitContainer;\n  return shouldFitContainer ? '' : 'max-width: 300px;';\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\n/* eslint-disable react/no-array-index-key */\nimport React, { Component, Fragment } from 'react';\nimport { findDOMNode } from 'react-dom';\nimport uuid from 'uuid/v1';\nimport { withAnalyticsEvents, createAndFireEvent } from '@atlaskit/analytics-next';\nimport Button from '@atlaskit/button';\nimport Droplist, { Item, Group } from '@atlaskit/droplist';\nimport ExpandIcon from '@atlaskit/icon/glyph/chevron-down';\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport DropdownItemFocusManager from './context/DropdownItemFocusManager';\nimport DropdownItemClickManager from './context/DropdownItemClickManager';\nimport DropdownItemSelectionCache from './context/DropdownItemSelectionCache';\nimport WidthConstrainer from '../styled/WidthConstrainer';\nimport { KEY_DOWN, KEY_SPACE, KEY_ENTER } from '../util/keys';\n\nvar DropdownMenuStateless =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(DropdownMenuStateless, _Component);\n\n  function DropdownMenuStateless() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, DropdownMenuStateless);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(DropdownMenuStateless)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"domItemsList\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focusedItem\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"triggerContainer\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"sourceOfIsOpen\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"dropdownListPositioned\", false);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      id: uuid(),\n      autoFocusDropdownItems: false\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidMount\", function () {\n      if (_this.isUsingDeprecatedAPI()) {\n        if (process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production') {\n          // eslint-disable-next-line no-console\n          console.log('DropdownMenu.items is deprecated. Please switch to the declarative API.');\n        }\n\n        if (_this.domItemsList) {\n          _this.focusFirstItem();\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"componentDidUpdate\", function (prevProp) {\n      if (_this.isUsingDeprecatedAPI() && _this.props.isOpen && !prevProp.isOpen) {\n        _this.focusFirstItem();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getNextFocusable\", function (indexItem, available) {\n      if (!_this.domItemsList) {\n        return null;\n      }\n\n      var currentItem = typeof indexItem !== 'number' ? -1 : indexItem;\n      var latestAvailable = typeof available !== 'number' ? currentItem : available;\n\n      if (currentItem < _this.domItemsList.length - 1) {\n        currentItem++;\n\n        if (_this.domItemsList[currentItem].getAttribute('aria-hidden') !== 'true') {\n          return currentItem;\n        }\n\n        return _this.getNextFocusable(currentItem, latestAvailable);\n      }\n\n      return latestAvailable;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getPrevFocusable\", function (indexItem, available) {\n      if (!_this.domItemsList) {\n        return null;\n      }\n\n      var currentItem = typeof indexItem !== 'number' ? -1 : indexItem;\n      var latestAvailable = typeof available !== 'number' ? currentItem : available;\n\n      if (currentItem && currentItem > 0) {\n        currentItem--;\n\n        if (_this.domItemsList[currentItem].getAttribute('aria-hidden') !== 'true') {\n          return currentItem;\n        }\n\n        return _this.getPrevFocusable(currentItem, latestAvailable);\n      }\n\n      return latestAvailable || currentItem;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focusFirstItem\", function () {\n      if (_this.sourceOfIsOpen === 'keydown') {\n        _this.focusItem(_this.getNextFocusable());\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focusNextItem\", function () {\n      _this.focusItem(_this.getNextFocusable(_this.focusedItem));\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focusPreviousItem\", function () {\n      _this.focusItem(_this.getPrevFocusable(_this.focusedItem));\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focusItem\", function (index) {\n      if (!_this.domItemsList || !index) {\n        return;\n      }\n\n      _this.focusedItem = index;\n\n      _this.domItemsList[_this.focusedItem].focus();\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"isTargetChildItem\", function (target) {\n      if (!target) return false;\n      var isDroplistItem = target.getAttribute('data-role') === 'droplistItem'; // eslint-disable-next-line react/no-find-dom-node\n\n      var thisDom = findDOMNode(_assertThisInitialized(_assertThisInitialized(_this)));\n      return isDroplistItem && thisDom ? thisDom.contains(target) : false;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleKeyboardInteractionForClosed\", function (event) {\n      if (_this.props.isOpen) {\n        return;\n      }\n\n      switch (event.key) {\n        case KEY_DOWN:\n        case KEY_SPACE:\n        case KEY_ENTER:\n          event.preventDefault();\n\n          _this.open({\n            event: event,\n            source: 'keydown'\n          });\n\n          break;\n\n        default:\n          break;\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleKeyboardInteractionsDeprecated\", function (event) {\n      // KeyboardEvent.target is typed as an EventTarget but we need to access methods on it which\n      // are specific to Element. Due limitations of the HTML spec flow doesn't know that an\n      // EventTarget can have these methods, so we cast it to Element through Object. This is the\n      // safest thing we can do in this situation.\n      var target = event.target;\n\n      if (_this.props.isOpen) {\n        if (_this.isTargetChildItem(target)) {\n          switch (event.key) {\n            case 'ArrowUp':\n              event.preventDefault();\n\n              _this.focusPreviousItem();\n\n              break;\n\n            case 'ArrowDown':\n              event.preventDefault();\n\n              _this.focusNextItem();\n\n              break;\n\n            case 'Tab':\n              event.preventDefault();\n\n              _this.close({\n                event: event\n              });\n\n              break;\n\n            default:\n              break;\n          }\n        } else if (event.key === 'ArrowDown') {\n          _this.sourceOfIsOpen = 'keydown';\n\n          _this.focusFirstItem();\n        } else if (event.key === 'Tab') {\n          _this.close({\n            event: event\n          });\n        }\n      } else {\n        switch (event.key) {\n          case KEY_DOWN:\n          case KEY_SPACE:\n          case KEY_ENTER:\n            event.preventDefault();\n\n            _this.open({\n              event: event,\n              source: 'keydown'\n            });\n\n            break;\n\n          default:\n            break;\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"domMenuContainer\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleClickDeprecated\", function (event) {\n      var menuContainer = _this.domMenuContainer; // Casting target to Element. See comment in `handleKeyboardInteractionsDeprecated`.\n\n      var target = event.target;\n\n      if (!menuContainer || menuContainer && !menuContainer.contains(target)) {\n        _this.toggle({\n          source: 'click',\n          event: event\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"isUsingDeprecatedAPI\", function () {\n      return Boolean(_this.props.items.length);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleClick\", function (event) {\n      // For any clicks we don't want autofocus\n      _this.setState({\n        autoFocusDropdownItems: false\n      });\n\n      if (_this.isUsingDeprecatedAPI()) {\n        _this.handleClickDeprecated(event);\n\n        return;\n      }\n\n      var _assertThisInitialize = _assertThisInitialized(_assertThisInitialized(_this)),\n          triggerContainer = _assertThisInitialize.triggerContainer; // Casting target to Element. See comment in `handleKeyboardInteractionsDeprecated`.\n\n\n      var target = event.target;\n\n      if (triggerContainer && triggerContainer.contains(target) && // $FlowFixMe - disabled is not in Element\n      target.disabled !== true) {\n        var isOpen = _this.props.isOpen;\n        _this.sourceOfIsOpen = 'mouse';\n\n        _this.props.onOpenChange({\n          isOpen: !isOpen,\n          event: event\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"triggerContent\", function () {\n      var _this$props = _this.props,\n          children = _this$props.children,\n          trigger = _this$props.trigger,\n          isOpen = _this$props.isOpen,\n          triggerButtonProps = _this$props.triggerButtonProps,\n          triggerType = _this$props.triggerType;\n      var insideTriggerContent = _this.isUsingDeprecatedAPI() ? children : trigger;\n\n      if (triggerType !== 'button') {\n        return insideTriggerContent;\n      }\n\n      var triggerProps = _objectSpread({}, triggerButtonProps);\n\n      var defaultButtonProps = {\n        ariaControls: _this.state.id,\n        ariaExpanded: isOpen,\n        ariaHaspopup: true,\n        isSelected: isOpen\n      };\n\n      if (!triggerProps.iconAfter && !triggerProps.iconBefore) {\n        triggerProps.iconAfter = React.createElement(ExpandIcon, {\n          size: \"medium\",\n          label: \"\"\n        });\n      }\n\n      return React.createElement(Button, _extends({}, defaultButtonProps, triggerProps), insideTriggerContent);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"open\", function (attrs) {\n      _this.sourceOfIsOpen = attrs.source;\n\n      _this.props.onOpenChange({\n        isOpen: true,\n        event: attrs.event\n      }); // Dropdown opened via keyboard gets auto focussed\n\n\n      _this.setState({\n        autoFocusDropdownItems: _this.sourceOfIsOpen === 'keydown'\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"close\", function (attrs) {\n      _this.sourceOfIsOpen = null;\n\n      _this.props.onOpenChange({\n        isOpen: false,\n        event: attrs.event\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"toggle\", function (attrs) {\n      if (attrs.source === 'keydown') return;\n\n      if (_this.props.isOpen) {\n        _this.close(attrs);\n      } else {\n        _this.open(attrs);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleItemClicked\", function (event) {\n      _this.props.onOpenChange({\n        isOpen: false,\n        event: event\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"renderTrigger\", function () {\n      var triggerContent = _this.triggerContent();\n\n      return _this.isUsingDeprecatedAPI() ? triggerContent : React.createElement(\"div\", {\n        ref: function ref(_ref) {\n          _this.triggerContainer = _ref;\n        }\n      }, triggerContent);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"renderItems\", function (items) {\n      return items.map(function (item, itemIndex) {\n        return React.createElement(Item, _extends({}, item, {\n          key: itemIndex,\n          onActivate: function onActivate(_ref2) {\n            var event = _ref2.event;\n\n            _this.props.onItemActivated({\n              item: item,\n              event: event\n            });\n          }\n        }), item.content);\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"renderGroups\", function (groups) {\n      return groups.map(function (group, groupIndex) {\n        return React.createElement(Group, {\n          heading: group.heading,\n          elemAfter: group.elemAfter,\n          key: groupIndex\n        }, _this.renderItems(group.items));\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"renderDeprecated\", function () {\n      var _this$props2 = _this.props,\n          items = _this$props2.items,\n          shouldFitContainer = _this$props2.shouldFitContainer;\n      var id = _this.state.id;\n      return React.createElement(\"div\", {\n        id: id,\n        ref: function ref(_ref3) {\n          _this.domMenuContainer = _ref3;\n          _this.domItemsList = _ref3 ? _ref3.querySelectorAll('[data-role=\"droplistItem\"]') : null;\n        },\n        role: \"menu\",\n        style: shouldFitContainer ? null : {\n          maxWidth: 300\n        }\n      }, _this.renderGroups(items));\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onDroplistPositioned\", function () {\n      _this.dropdownListPositioned = true; // Trigger render so item focus manager can auto focus for keyboard trigger\n\n      _this.setState({\n        autoFocusDropdownItems: _this.sourceOfIsOpen === 'keydown'\n      });\n\n      if (_this.props.onPositioned) _this.props.onPositioned();\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"renderDropdownItems\", function () {\n      if (_this.sourceOfIsOpen === 'keydown' && _this.dropdownListPositioned) {\n        return React.createElement(DropdownItemFocusManager, {\n          autoFocus: _this.state.autoFocusDropdownItems,\n          close: _this.close\n        }, _this.props.children);\n      }\n\n      return React.createElement(Fragment, null, _this.props.children);\n    });\n\n    return _this;\n  }\n\n  _createClass(DropdownMenuStateless, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props3 = this.props,\n          appearance = _this$props3.appearance,\n          boundariesElement = _this$props3.boundariesElement,\n          isLoading = _this$props3.isLoading,\n          isOpen = _this$props3.isOpen,\n          onOpenChange = _this$props3.onOpenChange,\n          position = _this$props3.position,\n          isMenuFixed = _this$props3.isMenuFixed,\n          shouldAllowMultilineItems = _this$props3.shouldAllowMultilineItems,\n          shouldFitContainer = _this$props3.shouldFitContainer,\n          shouldFlip = _this$props3.shouldFlip;\n      var id = this.state.id;\n      var isDeprecated = this.isUsingDeprecatedAPI();\n      var deprecatedProps = isDeprecated ? {\n        onKeyDown: this.handleKeyboardInteractionsDeprecated,\n        shouldAllowMultilineItems: shouldAllowMultilineItems\n      } : {\n        onKeyDown: this.handleKeyboardInteractionForClosed\n      };\n      return React.createElement(DropdownItemSelectionCache, null, React.createElement(Droplist, _extends({\n        appearance: appearance,\n        boundariesElement: boundariesElement,\n        isLoading: isLoading,\n        isOpen: isOpen,\n        onClick: this.handleClick,\n        onOpenChange: onOpenChange,\n        position: position,\n        isMenuFixed: isMenuFixed,\n        shouldFitContainer: shouldFitContainer,\n        shouldFlip: shouldFlip,\n        trigger: this.renderTrigger(),\n        onPositioned: this.onDroplistPositioned\n      }, deprecatedProps, {\n        analyticsContext: {\n          componentName: 'dropdownMenu',\n          packageName: packageName,\n          packageVersion: packageVersion\n        }\n      }), isDeprecated ? this.renderDeprecated() : React.createElement(WidthConstrainer, {\n        id: id,\n        role: \"menu\",\n        shouldFitContainer: shouldFitContainer\n      }, React.createElement(DropdownItemClickManager, {\n        onItemClicked: this.handleItemClicked\n      }, this.renderDropdownItems()))));\n    }\n  }]);\n\n  return DropdownMenuStateless;\n}(Component);\n\n_defineProperty(DropdownMenuStateless, \"defaultProps\", {\n  appearance: 'default',\n  boundariesElement: 'viewport',\n  isLoading: false,\n  isOpen: false,\n  items: [],\n  onItemActivated: function onItemActivated() {},\n  onOpenChange: function onOpenChange() {},\n  position: 'bottom left',\n  isMenuFixed: false,\n  shouldAllowMultilineItems: false,\n  shouldFitContainer: false,\n  shouldFlip: true,\n  triggerType: 'default',\n  onPositioned: function onPositioned() {}\n});\n\nexport { DropdownMenuStateless as DropdownMenuStatelessWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsEvents({\n  onOpenChange: createAndFireEventOnAtlaskit({\n    action: 'toggled',\n    actionSubject: 'dropdownMenu',\n    attributes: {\n      componentName: 'dropdownMenu',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(DropdownMenuStateless);","/* @flow */\n\nimport React, { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of\n * {@link DesktopSourcePreview}.\n */\ntype Props = {\n\n    /**\n     * The callback to invoke when the component is clicked. The id of the\n     * clicked on DesktopCapturerSource will be passed in.\n     */\n    onClick: Function,\n\n    /**\n     * The callback to invoke when the component is double clicked. The id of\n     * the DesktopCapturerSource will be passed in.\n     */\n    onDoubleClick: Function,\n\n    /**\n     * The indicator which determines whether this DesktopSourcePreview is\n     * selected. If true, the 'is-selected' CSS class will be added to the root\n     * of Component.\n     */\n    selected: boolean,\n\n    /**\n     * The DesktopCapturerSource to display.\n     */\n    source: Object,\n\n    /**\n     * The source type of the DesktopCapturerSources to display.\n     */\n    type: string\n};\n\n/**\n * React component for displaying a preview of a DesktopCapturerSource.\n *\n * @extends Component\n */\nclass DesktopSourcePreview extends Component<Props> {\n    /**\n     * Initializes a new DesktopSourcePreview instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onClick = this._onClick.bind(this);\n        this._onDoubleClick = this._onDoubleClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const selectedClass = this.props.selected ? 'is-selected' : '';\n        const displayClasses = `desktop-picker-source ${selectedClass}`;\n\n        return (\n            <div\n                className = { displayClasses }\n                onClick = { this._onClick }\n                onDoubleClick = { this._onDoubleClick }>\n                <div className = 'desktop-source-preview-image-container'>\n                    <img\n                        className = 'desktop-source-preview-thumbnail'\n                        src = { this.props.source.thumbnail.toDataURL() } />\n                </div>\n                <div className = 'desktop-source-preview-label'>\n                    { this.props.source.name }\n                </div>\n            </div>\n        );\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Invokes the passed in onClick callback.\n     *\n     * @returns {void}\n     */\n    _onClick() {\n        const { source, type } = this.props;\n\n        this.props.onClick(source.id, type);\n    }\n\n    _onDoubleClick: () => void;\n\n    /**\n     * Invokes the passed in onDoubleClick callback.\n     *\n     * @returns {void}\n     */\n    _onDoubleClick() {\n        const { source, type } = this.props;\n\n        this.props.onDoubleClick(source.id, type);\n    }\n}\n\nexport default DesktopSourcePreview;\n","/* @flow */\n\nimport { Checkbox } from '@atlaskit/checkbox';\nimport Spinner from '@atlaskit/spinner';\nimport React, { Component } from 'react';\n\nimport { Platform } from '../../base/react';\nimport { translate } from '../../base/i18n';\n\nimport DesktopSourcePreview from './DesktopSourcePreview';\n\n/**\n * The type of the React {@code Component} props of {@link DesktopPickerPane}.\n */\ntype Props = {\n\n    /**\n     * The handler to be invoked when a DesktopSourcePreview is clicked.\n     */\n    onClick: Function,\n\n    /**\n     * The handler to be invoked when a DesktopSourcePreview is double clicked.\n     */\n    onDoubleClick: Function,\n\n    /**\n     * The handler to be invoked if the users checks the audio screen sharing checkbox.\n     */\n    onShareAudioChecked: Function,\n\n    /**\n     * The id of the DesktopCapturerSource that is currently selected.\n     */\n    selectedSourceId: string,\n\n    /**\n     * An array of DesktopCapturerSources.\n     */\n    sources: Array<Object>,\n\n    /**\n     * The source type of the DesktopCapturerSources to display.\n     */\n    type: string,\n\n    /**\n     * Used to obtain translations.\n     */\n    t: Function\n};\n\n/**\n * React component for showing a grid of DesktopSourcePreviews.\n *\n * @extends Component\n */\nclass DesktopPickerPane extends Component<Props> {\n\n    /**\n     * Initializes a new DesktopPickerPane instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onShareAudioCheck = this._onShareAudioCheck.bind(this);\n    }\n\n    _onShareAudioCheck: (Object) => void;\n\n    /**\n     * Function to be called when the Checkbox is used.\n     *\n     * @param {boolean} checked - Checkbox status (checked or not).\n     * @returns {void}\n     */\n    _onShareAudioCheck({ target: { checked } }) {\n        this.props.onShareAudioChecked(checked);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            onClick,\n            onDoubleClick,\n            selectedSourceId,\n            sources,\n            type,\n            t\n        } = this.props;\n\n        const classNames\n            = `desktop-picker-pane default-scrollbar source-type-${type}`;\n        const previews\n            = sources\n                ? sources.map(source => (\n                    <DesktopSourcePreview\n                        key = { source.id }\n                        onClick = { onClick }\n                        onDoubleClick = { onDoubleClick }\n                        selected = { source.id === selectedSourceId }\n                        source = { source }\n                        type = { type } />))\n                : (\n                    <div className = 'desktop-picker-pane-spinner'>\n                        <Spinner\n                            isCompleting = { false }\n                            size = 'medium' />\n                    </div>\n                );\n\n        let checkBox;\n\n        // Only display the share audio checkbox if we're on windows and on\n        // desktop sharing tab.\n        // App window and Mac OS screen sharing doesn't work with system audio.\n        if (type === 'screen' && Platform.OS === 'windows') {\n            checkBox = (<Checkbox\n                label = { t('dialog.screenSharingAudio') }\n                name = 'share-system-audio'\n                onChange = { this._onShareAudioCheck } />);\n        }\n\n        return (\n            <div className = { classNames }>\n                { previews }\n                { checkBox }\n            </div>\n        );\n    }\n}\n\nexport default translate(DesktopPickerPane);\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/desktop-picker');\n","// @flow\n\nimport Tabs from '@atlaskit/tabs';\nimport React, { PureComponent } from 'react';\nimport { connect } from '../../base/redux';\nimport type { Dispatch } from 'redux';\n\nimport { Dialog, hideDialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\n\nimport DesktopPickerPane from './DesktopPickerPane';\nimport { obtainDesktopSources } from '../functions';\n\n/**\n * The size of the requested thumbnails.\n *\n * @type {Object}\n */\nconst THUMBNAIL_SIZE = {\n    height: 300,\n    width: 300\n};\n\n/**\n * The sources polling interval in ms.\n *\n * @type {int}\n */\nconst UPDATE_INTERVAL = 2000;\n\n/**\n * The default selected tab.\n *\n * @type {string}\n */\nconst DEFAULT_TAB_TYPE = 'screen';\n\nconst TAB_LABELS = {\n    screen: 'dialog.yourEntireScreen',\n    window: 'dialog.applicationWindow'\n};\n\nconst VALID_TYPES = Object.keys(TAB_LABELS);\n\n/**\n * The type of the React {@code Component} props of {@link DesktopPicker}.\n */\ntype Props = {\n\n    /**\n     * An array with desktop sharing sources to be displayed.\n     */\n    desktopSharingSources: Array<string>,\n\n    /**\n     * Used to request DesktopCapturerSources.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * The callback to be invoked when the component is closed or when a\n     * DesktopCapturerSource has been chosen.\n     */\n    onSourceChoose: Function,\n\n    /**\n     * Used to obtain translations.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link DesktopPicker}.\n */\ntype State = {\n\n    /**\n     * The state of the audio screen share checkbox.\n     */\n    screenShareAudio: boolean,\n\n    /**\n     * The currently higlighted DesktopCapturerSource.\n     */\n    selectedSource: Object,\n\n    /**\n     * The desktop source type currently being displayed.\n     */\n    selectedTab: number,\n\n    /**\n     * An object containing all the DesktopCapturerSources.\n     */\n    sources: Object,\n\n    /**\n     * The desktop source types to fetch previews for.\n     */\n    types: Array<string>\n};\n\n\n/**\n * React component for DesktopPicker.\n *\n * @extends Component\n */\nclass DesktopPicker extends PureComponent<Props, State> {\n    /**\n     * Implements React's {@link Component#getDerivedStateFromProps()}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props) {\n        return {\n            types: DesktopPicker._getValidTypes(props.desktopSharingSources)\n        };\n    }\n\n    /**\n     * Extracts only the valid types from the passed {@code types}.\n     *\n     * @param {Array<string>} types - The types to filter.\n     * @private\n     * @returns {Array<string>} The filtered types.\n     */\n    static _getValidTypes(types = []) {\n        return types.filter(\n            type => VALID_TYPES.includes(type));\n    }\n\n    _poller = null;\n\n    state = {\n        screenShareAudio: false,\n        selectedSource: {},\n        selectedTab: 0,\n        sources: {},\n        types: []\n    };\n\n    /**\n     * Stores the type of the selected tab.\n     *\n     * @type {string}\n     */\n    _selectedTabType = DEFAULT_TAB_TYPE;\n\n    /**\n     * Initializes a new DesktopPicker instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onCloseModal = this._onCloseModal.bind(this);\n        this._onPreviewClick = this._onPreviewClick.bind(this);\n        this._onShareAudioChecked = this._onShareAudioChecked.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n        this._onTabSelected = this._onTabSelected.bind(this);\n        this._updateSources = this._updateSources.bind(this);\n\n        this.state.types\n            = DesktopPicker._getValidTypes(this.props.desktopSharingSources);\n    }\n\n    /**\n     * Starts polling.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        this._startPolling();\n    }\n\n    /**\n     * Clean up component and DesktopCapturerSource store state.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._stopPolling();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (\n            <Dialog\n                isModal = { false }\n                okDisabled = { Boolean(!this.state.selectedSource.id) }\n                okKey = 'dialog.Share'\n                onCancel = { this._onCloseModal }\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.shareYourScreen'\n                width = 'medium' >\n                { this._renderTabs() }\n            </Dialog>\n        );\n    }\n\n    /**\n     * Computates the selected source.\n     *\n     * @param {Object} sources - The available sources.\n     * @returns {Object} The selectedSource value.\n     */\n    _getSelectedSource(sources = {}) {\n        const { selectedSource } = this.state;\n\n        /**\n         * If there are no sources for this type (or no sources for any type)\n         * we can't select anything.\n         */\n        if (!Array.isArray(sources[this._selectedTabType])\n                || sources[this._selectedTabType].length <= 0) {\n            return {};\n        }\n\n        /**\n         * Select the first available source for this type in the following\n         * scenarios:\n         * 1) Nothing is yet selected.\n         * 2) Tab change.\n         * 3) The selected source is no longer available.\n         */\n        if (!selectedSource // scenario 1)\n                || selectedSource.type !== this._selectedTabType // scenario 2)\n                || !sources[this._selectedTabType].some( // scenario 3)\n                        source => source.id === selectedSource.id)) {\n            return {\n                id: sources[this._selectedTabType][0].id,\n                type: this._selectedTabType\n            };\n        }\n\n        /**\n         * For all other scenarios don't change the selection.\n         */\n        return selectedSource;\n    }\n\n    _onCloseModal: (?string, string, ?boolean) => void;\n\n    /**\n     * Dispatches an action to hide the DesktopPicker and invokes the passed in\n     * callback with a selectedSource, if any.\n     *\n     * @param {string} [id] - The id of the DesktopCapturerSource to pass into\n     * the onSourceChoose callback.\n     * @param {string} type - The type of the DesktopCapturerSource to pass into\n     * the onSourceChoose callback.\n     * @param {boolean} screenShareAudio - Whether or not to add system audio to\n     * screen sharing session.\n     * @returns {void}\n     */\n    _onCloseModal(id = '', type, screenShareAudio = false) {\n        this.props.onSourceChoose(id, type, screenShareAudio);\n        this.props.dispatch(hideDialog());\n    }\n\n    _onPreviewClick: (string, string) => void;\n\n    /**\n     * Sets the currently selected DesktopCapturerSource.\n     *\n     * @param {string} id - The id of DesktopCapturerSource.\n     * @param {string} type - The type of DesktopCapturerSource.\n     * @returns {void}\n     */\n    _onPreviewClick(id, type) {\n        this.setState({\n            selectedSource: {\n                id,\n                type\n            }\n        });\n    }\n\n    _onSubmit: () => void;\n\n    /**\n     * Request to close the modal and execute callbacks with the selected source\n     * id.\n     *\n     * @returns {void}\n     */\n    _onSubmit() {\n        const { selectedSource: { id, type }, screenShareAudio } = this.state;\n\n        this._onCloseModal(id, type, screenShareAudio);\n    }\n\n    _onTabSelected: () => void;\n\n    /**\n     * Stores the selected tab and updates the selected source via\n     * {@code _getSelectedSource}.\n     *\n     * @param {Object} tab - The configuration passed into atlaskit tabs to\n     * describe how to display the selected tab.\n     * @param {number} tabIndex - The index of the tab within the array of\n     * displayed tabs.\n     * @returns {void}\n     */\n    _onTabSelected(tab, tabIndex) { // eslint-disable-line no-unused-vars\n        const { types, sources } = this.state;\n\n        this._selectedTabType = types[tabIndex];\n\n        // When we change tabs also reset the screenShareAudio state so we don't\n        // use the option from one tab when sharing from another.\n        this.setState({\n            screenShareAudio: false,\n            selectedSource: this._getSelectedSource(sources),\n            selectedTab: tabIndex\n        });\n    }\n\n    _onShareAudioChecked: (boolean) => void;\n\n    /**\n     * Set the screenSharingAudio state indicating whether or not to also share\n     * system audio.\n     *\n     * @param {boolean} checked - Share audio or not.\n     * @returns {void}\n     */\n    _onShareAudioChecked(checked) {\n        this.setState({ screenShareAudio: checked });\n    }\n\n    /**\n     * Configures and renders the tabs for display.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderTabs() {\n        const { selectedSource, sources, types } = this.state;\n        const { t } = this.props;\n        const tabs\n            = types.map(\n                type => {\n                    return {\n                        content: <DesktopPickerPane\n                            key = { type }\n                            onClick = { this._onPreviewClick }\n                            onDoubleClick = { this._onSubmit }\n                            onShareAudioChecked = { this._onShareAudioChecked }\n                            selectedSourceId = { selectedSource.id }\n                            sources = { sources[type] }\n                            type = { type } />,\n                        label: t(TAB_LABELS[type])\n                    };\n                });\n\n        return (\n            <Tabs\n                onSelect = { this._onTabSelected }\n                selected = { this.state.selectedTab }\n                tabs = { tabs } />);\n    }\n\n    /**\n     * Create an interval to update knwon available DesktopCapturerSources.\n     *\n     * @private\n     * @returns {void}\n     */\n    _startPolling() {\n        this._stopPolling();\n        this._updateSources();\n        this._poller = window.setInterval(this._updateSources, UPDATE_INTERVAL);\n    }\n\n    /**\n     * Cancels the interval to update DesktopCapturerSources.\n     *\n     * @private\n     * @returns {void}\n     */\n    _stopPolling() {\n        window.clearInterval(this._poller);\n        this._poller = null;\n    }\n\n    _updateSources: () => void;\n\n    /**\n     * Obtains the desktop sources and updates state with them.\n     *\n     * @private\n     * @returns {void}\n     */\n    _updateSources() {\n        const { types } = this.state;\n\n        if (types.length > 0) {\n            obtainDesktopSources(\n                this.state.types,\n                { thumbnailSize: THUMBNAIL_SIZE }\n            )\n            .then(sources => {\n                const selectedSource = this._getSelectedSource(sources);\n\n                // TODO: Maybe check if we have stopped the timer and unmounted\n                // the component.\n                this.setState({\n                    sources,\n                    selectedSource\n                });\n            })\n            .catch(() => { /* ignore */ });\n        }\n    }\n}\n\nexport default translate(connect()(DesktopPicker));\n","\nimport logger from './logger';\n\n/**\n * Begins a request to get available DesktopCapturerSources.\n *\n * @param {Array} types - An array with DesktopCapturerSource type strings.\n * @param {Object} options - Additional configuration for getting a list of\n * sources.\n * @param {Object} options.thumbnailSize - The desired height and width of the\n * return native image object used for the preview image of the source.\n * @returns {Function}\n */\nexport function obtainDesktopSources(types, options = {}) {\n    const capturerOptions = {\n        types\n    };\n\n    if (options.thumbnailSize) {\n        capturerOptions.thumbnailSize = options.thumbnailSize;\n    }\n\n    return new Promise((resolve, reject) => {\n        const { JitsiMeetElectron } = window;\n\n        if (JitsiMeetElectron && JitsiMeetElectron.obtainDesktopStreams) {\n            JitsiMeetElectron.obtainDesktopStreams(\n                sources => resolve(_seperateSourcesByType(sources)),\n                error => {\n                    logger.error(\n                        `Error while obtaining desktop sources: ${error}`);\n                    reject(error);\n                },\n                capturerOptions\n            );\n        } else {\n            const reason = 'Called JitsiMeetElectron.obtainDesktopStreams'\n                + ' but it is not defined';\n\n            logger.error(reason);\n\n            return Promise.reject(new Error(reason));\n        }\n    });\n}\n\n\n/**\n * Converts an array of DesktopCapturerSources to an object with types for keys\n * and values being an array with sources of the key's type.\n *\n * @param {Array} sources - DesktopCapturerSources.\n * @private\n * @returns {Object} An object with the sources split into seperate arrays based\n * on source type.\n */\nfunction _seperateSourcesByType(sources = []) {\n    const sourcesByType = {\n        screen: [],\n        window: []\n    };\n\n    sources.forEach(source => {\n        const idParts = source.id.split(':');\n        const type = idParts[0];\n\n        if (sourcesByType[type]) {\n            sourcesByType[type].push(source);\n        }\n    });\n\n    return sourcesByType;\n}\n","import { openDialog } from '../base/dialog';\n\nimport { DesktopPicker } from './components';\n\n/**\n * Signals to open a dialog with the DesktopPicker component.\n *\n * @param {Object} options - Desktop sharing settings.\n * @param {Function} onSourceChoose - The callback to invoke when\n * a DesktopCapturerSource has been chosen.\n * @returns {Object}\n */\nexport function showDesktopPicker(options = {}, onSourceChoose) {\n    const { desktopSharingSources } = options;\n\n    return openDialog(DesktopPicker, {\n        desktopSharingSources,\n        onSourceChoose\n    });\n}\n","export * from './actions';\nexport * from './components';\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Dialog, hideDialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { getParticipantById } from '../../base/participants';\nimport { connect } from '../../base/redux';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} props of\n * {@link RemoteControlAuthorizationDialog}.\n */\ntype Props = {\n\n    /**\n     * The display name of the participant who is requesting authorization for\n     * remote desktop control session.\n     */\n    _displayName: string,\n\n    /**\n     * Used to show/hide the dialog on cancel.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the participant who is requesting authorization for remote\n     * desktop control session.\n     */\n    participantId: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements a dialog for remote control authorization.\n */\nclass RemoteControlAuthorizationDialog extends Component<Props> {\n    /**\n     * Initializes a new RemoteControlAuthorizationDialog instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onCancel = this._onCancel.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (\n            <Dialog\n                okKey = { 'dialog.allow' }\n                onCancel = { this._onCancel }\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.remoteControlTitle'\n                width = 'small'>\n                {\n                    this.props.t(\n                        'dialog.remoteControlRequestMessage',\n                        { user: this.props._displayName })\n                }\n                {\n                    this._getAdditionalMessage()\n                }\n            </Dialog>\n        );\n    }\n\n    /**\n     * Renders additional message text for the dialog.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _getAdditionalMessage() {\n        // FIXME: Once we have this information in redux we should\n        // start getting it from there.\n        if (APP.conference.isSharingScreen\n                && APP.conference.getDesktopSharingSourceType() === 'screen') {\n            return null;\n        }\n\n        return (\n            <div>\n                <br />\n                { this.props.t('dialog.remoteControlShareScreenWarning') }\n            </div>\n        );\n    }\n\n    _onCancel: () => boolean;\n\n    /**\n     * Notifies the remote control module about the denial of the remote control\n     * request.\n     *\n     * @private\n     * @returns {boolean} Returns true to close the dialog.\n     */\n    _onCancel() {\n        // FIXME: This should be action one day.\n        APP.remoteControl.receiver.deny(this.props.participantId);\n\n        return true;\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Notifies the remote control module that the remote control request is\n     * accepted.\n     *\n     * @private\n     * @returns {boolean} Returns false to prevent closure because the dialog is\n     * closed manually to be sure that if the desktop picker dialog can be\n     * displayed (if this dialog is displayed when we try to display the desktop\n     * picker window, the action will be ignored).\n     */\n    _onSubmit() {\n        this.props.dispatch(hideDialog());\n\n        // FIXME: This should be action one day.\n        APP.remoteControl.receiver.grant(this.props.participantId);\n\n        return false;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the RemoteControlAuthorizationDialog's\n * props.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The React Component props passed to the associated\n * (instance of) RemoteControlAuthorizationDialog.\n * @private\n * @returns {{\n *     _displayName: string\n * }}\n */\nfunction _mapStateToProps(state, ownProps) {\n    const { _displayName, participantId } = ownProps;\n    const participant = getParticipantById(state, participantId);\n\n    return {\n        _displayName: participant ? participant.name : _displayName\n    };\n}\n\nexport default translate(\n    connect(_mapStateToProps)(RemoteControlAuthorizationDialog));\n","import { openDialog } from '../base/dialog';\n\nimport { RemoteControlAuthorizationDialog } from './components';\n\n/**\n * Signals that the remote control authorization dialog should be displayed.\n *\n * @param {string} participantId - The id of the participant who is requesting\n * the authorization.\n * @returns {{\n *     type: OPEN_DIALOG,\n *     component: {RemoteControlAuthorizationDialog},\n *     componentProps: {\n *         participantId: {string}\n *      }\n * }}\n * @public\n */\nexport function openRemoteControlAuthorizationDialog(participantId) {\n    return openDialog(RemoteControlAuthorizationDialog, { participantId });\n}\n","export * from './actions';\nexport * from './components';\n","/* @flow */\n\nimport React, { Component } from 'react';\n\n/**\n * The number of dots to display in AudioLevelIndicator.\n *\n * IMPORTANT: AudioLevelIndicator assumes that this is an odd number.\n */\nconst AUDIO_LEVEL_DOTS = 5;\n\n/**\n * The index of the dot that is at the direct middle of all other dots.\n */\nconst CENTER_DOT_INDEX = Math.floor(AUDIO_LEVEL_DOTS / 2);\n\n/**\n * The type of the React {@code Component} props of {@link AudioLevelIndicator}.\n */\ntype Props = {\n\n    /**\n     * The current audio level to display. The value should be a number between\n     * 0 and 1.\n     */\n    audioLevel: number\n};\n\n/**\n * Creates a ReactElement responsible for drawing audio levels.\n *\n * @extends {Component}\n */\nclass AudioLevelIndicator extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        // First make sure we are sensitive enough.\n        const audioLevel = Math.min(this.props.audioLevel * 1.2, 1);\n\n        // Let's now stretch the audio level over the number of dots we have.\n        const stretchedAudioLevel = AUDIO_LEVEL_DOTS * audioLevel;\n\n        const audioLevelDots = [];\n\n        for (let i = 0; i < AUDIO_LEVEL_DOTS; i++) {\n            const distanceFromCenter = CENTER_DOT_INDEX - i;\n            const audioLevelFromCenter\n                = stretchedAudioLevel - Math.abs(distanceFromCenter);\n            const cappedOpacity = Math.min(\n                1, Math.max(0, audioLevelFromCenter));\n            let className;\n\n            if (distanceFromCenter === 0) {\n                className = 'audiodot-middle';\n            } else if (distanceFromCenter < 0) {\n                className = 'audiodot-top';\n            } else {\n                className = 'audiodot-bottom';\n            }\n\n            audioLevelDots.push(\n                <span\n                    className = { className }\n                    key = { i }\n                    style = {{ opacity: cappedOpacity }} />\n            );\n        }\n\n        return (\n            <span className = 'audioindicator in-react'>\n                { audioLevelDots }\n            </span>\n        );\n    }\n}\n\nexport default AudioLevelIndicator;\n","export * from './components';\n","// @flow\n\n/**\n * SET_INTERVAL constant is used to set interval and it is set in\n * the id property of the request.data property. timeMs property must\n * also be set. request.data example:\n *\n * {\n *      id: SET_INTERVAL,\n *      timeMs: 33\n * }\n */\nexport const SET_INTERVAL = 1;\n\n/**\n * CLEAR_INTERVAL constant is used to clear the interval and it is set in\n * the id property of the request.data property.\n *\n * {\n *      id: CLEAR_INTERVAL\n * }\n */\nexport const CLEAR_INTERVAL = 2;\n\n/**\n * INTERVAL_TIMEOUT constant is used as response and it is set in the id\n * property.\n *\n * {\n *      id: INTERVAL_TIMEOUT\n * }\n */\nexport const INTERVAL_TIMEOUT = 3;\n\n/**\n * The following code is needed as string to create a URL from a Blob.\n * The URL is then passed to a WebWorker. Reason for this is to enable\n * use of setInterval that is not throttled when tab is inactive.\n */\nconst code = `\n    var timer;\n\n    onmessage = function(request) {\n        switch (request.data.id) {\n        case ${SET_INTERVAL}: {\n            timer = setInterval(() => {\n                postMessage({ id: ${INTERVAL_TIMEOUT} });\n            }, request.data.timeMs);\n            break;\n        }\n        case ${CLEAR_INTERVAL}: {\n            if (timer) {\n                clearInterval(timer);\n            }\n            break;\n        }\n        }\n    };\n`;\n\nexport const timerWorkerScript\n    = URL.createObjectURL(new Blob([ code ], { type: 'application/javascript' }));\n","// @flow\n\nimport {\n    CLEAR_INTERVAL,\n    INTERVAL_TIMEOUT,\n    SET_INTERVAL,\n    timerWorkerScript\n} from './TimeWorker';\n\n/**\n * Represents a modified MediaStream that adds video as pip on a desktop stream.\n * <tt>JitsiStreamPresenterEffect</tt> does the processing of the original\n * desktop stream.\n */\nexport default class JitsiStreamPresenterEffect {\n    _canvas: HTMLCanvasElement;\n    _ctx: CanvasRenderingContext2D;\n    _desktopElement: HTMLVideoElement;\n    _desktopStream: MediaStream;\n    _frameRate: number;\n    _onVideoFrameTimer: Function;\n    _onVideoFrameTimerWorker: Function;\n    _renderVideo: Function;\n    _videoFrameTimerWorker: Worker;\n    _videoElement: HTMLVideoElement;\n    isEnabled: Function;\n    startEffect: Function;\n    stopEffect: Function;\n\n    /**\n     * Represents a modified MediaStream that adds a camera track at the\n     * bottom right corner of the desktop track using a HTML canvas.\n     * <tt>JitsiStreamPresenterEffect</tt> does the processing of the original\n     * video stream.\n     *\n     * @param {MediaStream} videoStream - The video stream which is user for\n     * creating the canvas.\n     */\n    constructor(videoStream: MediaStream) {\n        const videoDiv = document.createElement('div');\n        const firstVideoTrack = videoStream.getVideoTracks()[0];\n        const { height, width, frameRate } = firstVideoTrack.getSettings() ?? firstVideoTrack.getConstraints();\n\n        this._canvas = document.createElement('canvas');\n        this._ctx = this._canvas.getContext('2d');\n\n        this._desktopElement = document.createElement('video');\n        this._videoElement = document.createElement('video');\n        videoDiv.appendChild(this._videoElement);\n        videoDiv.appendChild(this._desktopElement);\n        if (document.body !== null) {\n            document.body.appendChild(videoDiv);\n        }\n\n        // Set the video element properties\n        this._frameRate = parseInt(frameRate, 10);\n        this._videoElement.width = parseInt(width, 10);\n        this._videoElement.height = parseInt(height, 10);\n        this._videoElement.autoplay = true;\n        this._videoElement.srcObject = videoStream;\n\n        // set the style attribute of the div to make it invisible\n        videoDiv.style.display = 'none';\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onVideoFrameTimer = this._onVideoFrameTimer.bind(this);\n        this._videoFrameTimerWorker = new Worker(timerWorkerScript, { name: 'Presenter effect worker' });\n        this._videoFrameTimerWorker.onmessage = this._onVideoFrameTimer;\n    }\n\n    /**\n     * EventHandler onmessage for the videoFrameTimerWorker WebWorker.\n     *\n     * @private\n     * @param {EventHandler} response - The onmessage EventHandler parameter.\n     * @returns {void}\n     */\n    _onVideoFrameTimer(response) {\n        if (response.data.id === INTERVAL_TIMEOUT) {\n            this._renderVideo();\n        }\n    }\n\n    /**\n     * Loop function to render the video frame input and draw presenter effect.\n     *\n     * @private\n     * @returns {void}\n     */\n    _renderVideo() {\n        // adjust the canvas width/height on every frame incase the window has been resized.\n        const [ track ] = this._desktopStream.getVideoTracks();\n        const { height, width } = track.getSettings() ?? track.getConstraints();\n\n        this._canvas.width = parseInt(width, 10);\n        this._canvas.height = parseInt(height, 10);\n        this._ctx.drawImage(this._desktopElement, 0, 0, this._canvas.width, this._canvas.height);\n        this._ctx.drawImage(this._videoElement, this._canvas.width - this._videoElement.width, this._canvas.height\n            - this._videoElement.height, this._videoElement.width, this._videoElement.height);\n\n        // draw a border around the video element.\n        this._ctx.beginPath();\n        this._ctx.lineWidth = 2;\n        this._ctx.strokeStyle = '#A9A9A9'; // dark grey\n        this._ctx.rect(this._canvas.width - this._videoElement.width, this._canvas.height - this._videoElement.height,\n            this._videoElement.width, this._videoElement.height);\n        this._ctx.stroke();\n    }\n\n    /**\n     * Checks if the local track supports this effect.\n     *\n     * @param {JitsiLocalTrack} jitsiLocalTrack - Track to apply effect.\n     * @returns {boolean} - Returns true if this effect can run on the\n     * specified track, false otherwise.\n     */\n    isEnabled(jitsiLocalTrack: Object) {\n        return jitsiLocalTrack.isVideoTrack() && jitsiLocalTrack.videoType === 'desktop';\n    }\n\n    /**\n     * Starts loop to capture video frame and render presenter effect.\n     *\n     * @param {MediaStream} desktopStream - Stream to be used for processing.\n     * @returns {MediaStream} - The stream with the applied effect.\n     */\n    startEffect(desktopStream: MediaStream) {\n        const firstVideoTrack = desktopStream.getVideoTracks()[0];\n        const { height, width } = firstVideoTrack.getSettings() ?? firstVideoTrack.getConstraints();\n\n        // set the desktop element properties.\n        this._desktopStream = desktopStream;\n        this._desktopElement.width = parseInt(width, 10);\n        this._desktopElement.height = parseInt(height, 10);\n        this._desktopElement.autoplay = true;\n        this._desktopElement.srcObject = desktopStream;\n        this._canvas.width = parseInt(width, 10);\n        this._canvas.height = parseInt(height, 10);\n        this._videoFrameTimerWorker.postMessage({\n            id: SET_INTERVAL,\n            timeMs: 1000 / this._frameRate\n        });\n\n        return this._canvas.captureStream(this._frameRate);\n    }\n\n    /**\n     * Stops the capture and render loop.\n     *\n     * @returns {void}\n     */\n    stopEffect() {\n        this._videoFrameTimerWorker.postMessage({\n            id: CLEAR_INTERVAL\n        });\n    }\n\n}\n","// @flow\n\nimport JitsiStreamPresenterEffect from './JitsiStreamPresenterEffect';\n\n/**\n * Creates a new instance of JitsiStreamPresenterEffect.\n *\n * @param {MediaStream} stream - The video stream which will be used for\n * creating the presenter effect.\n * @returns {Promise<JitsiStreamPresenterEffect>}\n */\nexport function createPresenterEffect(stream: MediaStream) {\n    if (!MediaStreamTrack.prototype.getSettings\n        && !MediaStreamTrack.prototype.getConstraints) {\n        return Promise.reject(new Error('JitsiStreamPresenterEffect not supported!'));\n    }\n\n    return Promise.resolve(new JitsiStreamPresenterEffect(stream));\n}\n","// @flow\n\nimport { getJitsiMeetGlobalNS, loadScript } from '../base/util';\n\nlet loadRnnoisePromise;\n\n/**\n * Returns promise that resolves with a RnnoiseProcessor instance.\n *\n * @returns {Promise<RnnoiseProcessor>} - Resolves with the blur effect instance.\n */\nexport function createRnnoiseProcessorPromise() {\n    // Subsequent calls should not attempt to load the script multiple times.\n    if (!loadRnnoisePromise) {\n        loadRnnoisePromise = loadScript('libs/rnnoise-processor.min.js');\n    }\n\n    return loadRnnoisePromise.then(() => {\n        const ns = getJitsiMeetGlobalNS();\n\n        if (ns?.effects?.rnnoise?.createRnnoiseProcessor) {\n            return ns.effects.rnnoise.createRnnoiseProcessor();\n        }\n\n        throw new Error('Rnnoise module binding createRnnoiseProcessor not found!');\n    });\n}\n","\nexport * from './functions';\n","module.exports = global[\"jQuery\"] = require(\"-!./jquery.min.js\");","/*! jQuery v3.4.0 | (c) JS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(C,e){\"use strict\";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return\"function\"==typeof e&&\"number\"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement(\"script\");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?n[o.call(e)]||\"object\":typeof e}var f=\"3.4.0\",k=function(e,t){return new k.fn.init(e,t)},p=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;function d(e){var t=!!e&&\"length\"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&0<t&&t-1 in e)}k.fn=k.prototype={jquery:f,constructor:k,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(n){return this.pushStack(k.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},k.extend=k.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],\"__proto__\"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||k.isPlainObject(n)?n:{},i=!1,a[t]=k.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},k.extend({expando:\"jQuery\"+(f+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==o.call(e))&&(!(t=r(e))||\"function\"==typeof(n=v.call(t,\"constructor\")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){b(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(d(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(p,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(d(Object(e))?k.merge(n,\"string\"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(d(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g.apply([],a)},guid:1,support:y}),\"function\"==typeof Symbol&&(k.fn[Symbol.iterator]=t[Symbol.iterator]),k.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){n[\"[object \"+t+\"]\"]=t.toLowerCase()});var h=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k=\"sizzle\"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",I=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",W=\"\\\\[\"+M+\"*(\"+I+\")(?:\"+M+\"*([*^$|!~]?=)\"+M+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+I+\"))|)\"+M+\"*\\\\]\",$=\":(\"+I+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+W+\")*)|.*)\\\\)|)\",F=new RegExp(M+\"+\",\"g\"),B=new RegExp(\"^\"+M+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+M+\"+$\",\"g\"),_=new RegExp(\"^\"+M+\"*,\"+M+\"*\"),z=new RegExp(\"^\"+M+\"*([>+~]|\"+M+\")\"+M+\"*\"),U=new RegExp(M+\"|>\"),X=new RegExp($),V=new RegExp(\"^\"+I+\"$\"),G={ID:new RegExp(\"^#(\"+I+\")\"),CLASS:new RegExp(\"^\\\\.(\"+I+\")\"),TAG:new RegExp(\"^(\"+I+\"|[*])\"),ATTR:new RegExp(\"^\"+W),PSEUDO:new RegExp(\"^\"+$),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+M+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+M+\"*(?:([+-]|)\"+M+\"*(\\\\d+)|))\"+M+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+R+\")$\",\"i\"),needsContext:new RegExp(\"^\"+M+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+M+\"*((?:-\\\\d)?\\\\d*)\"+M+\"*\\\\)|)(?=[^-]|$)\",\"i\")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\\d$/i,K=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ee=/[+~]/,te=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+M+\"?|(\"+M+\")|.)\",\"ig\"),ne=function(e,t,n){var r=\"0x\"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ie=function(e,t){return t?\"\\0\"===e?\"\\ufffd\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&\"fieldset\"===e.nodeName.toLowerCase()},{dir:\"parentNode\",next:\"legend\"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],\"string\"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+\" \"]&&(!v||!v.test(t))&&(1!==p||\"object\"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute(\"id\"))?s=s.replace(re,ie):e.setAttribute(\"id\",s=k),o=(l=h(t)).length;while(o--)l[o]=\"#\"+s+\" \"+xe(l[o]);c=l.join(\",\"),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===k&&e.removeAttribute(\"id\")}}}return g(t.replace(B,\"$1\"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+\" \")>b.cacheLength&&delete e[r.shift()],e[t+\" \"]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split(\"|\"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return(\"input\"===t||\"button\"===t)&&e.type===n}}function ge(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||\"HTML\")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",oe,!1):n.attachEvent&&n.attachEvent(\"onunload\",oe)),d.attributes=ce(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute(\"id\")===t}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return t&&t.value===n}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML=\"<a id='\"+k+\"'></a><select id='\"+k+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&v.push(\"[*^$]=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||v.push(\"\\\\[\"+M+\"*(?:value|\"+R+\")\"),e.querySelectorAll(\"[id~=\"+k+\"-]\").length||v.push(\"~=\"),e.querySelectorAll(\":checked\").length||v.push(\":checked\"),e.querySelectorAll(\"a#\"+k+\"+*\").length||v.push(\".#.+[+~]\")}),ce(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=C.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&v.push(\"name\"+M+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&v.push(\":enabled\",\":disabled\"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&v.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),v.push(\",.*:\")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,\"*\"),c.call(e,\"[s!='']:x\"),s.push(\"!=\",$)}),v=v.length&&new RegExp(v.join(\"|\")),s=s.length&&new RegExp(s.join(\"|\")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!N[t+\" \"]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!==C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+\"\").replace(re,ie)},se.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||\"\").replace(te,ne),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+\" \"];return t||(t=new RegExp(\"(^|\"+M+\")\"+e+\"(\"+M+\"|$)\"))&&p(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?\"!=\"===r:!r||(t+=\"\",\"=\"===r?t===i:\"!=\"===r?t!==i:\"^=\"===r?i&&0===t.indexOf(i):\"*=\"===r?i&&-1<t.indexOf(i):\"$=\"===r?i&&t.slice(-i.length)===i:\"~=\"===r?-1<(\" \"+t.replace(F,\" \")+\" \").indexOf(i):\"|=\"===r&&(t===i||t.slice(0,i.length+1)===i+\"-\"))}},CHILD:function(h,e,t,g,v){var y=\"nth\"!==h.slice(0,3),m=\"last\"!==h.slice(-4),x=\"of-type\"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?\"nextSibling\":\"previousSibling\",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l=\"only\"===h&&!u&&\"nextSibling\"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[S,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[S,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error(\"unsupported pseudo: \"+e);return a[k]?a(o):1<a.length?(t=[e,e,\"\",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,\"$1\"));return s[k]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||\"\")||se.error(\"unsupported lang: \"+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(t=t.toLowerCase())===n||0===t.indexOf(n+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&\"parentNode\"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[S,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[k]||(e[k]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===S&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[k]&&(v=Ce(v)),y&&!y[k]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||\"*\",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[\" \"],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[k]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:\" \"===e[s-2].type?\"*\":\"\"})).replace(B,\"$1\"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+\" \"];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B,\" \")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+\" \"];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[k]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l=\"0\",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG(\"*\",i),h=S+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t===C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument===C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(S=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(S=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l=\"function\"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&\"ID\"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=k.split(\"\").sort(D).join(\"\")===k,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement(\"fieldset\"))}),ce(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||fe(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||fe(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute(\"disabled\")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);k.find=h,k.expr=h.selectors,k.expr[\":\"]=k.expr.pseudos,k.uniqueSort=k.unique=h.uniqueSort,k.text=h.getText,k.isXMLDoc=h.isXML,k.contains=h.contains,k.escapeSelector=h.escape;var T=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&k(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},A=k.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var D=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):\"string\"!=typeof n?k.grep(e,function(e){return-1<i.call(n,e)!==r}):k.filter(n,e,r)}k.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,function(e){return 1===e.nodeType}))},k.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(k(e).filter(function(){for(t=0;t<r;t++)if(k.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,i[t],n);return 1<r?k.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\"string\"==typeof e&&A.test(e)?k(e):e||[],!1).length}});var q,L=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,\"string\"==typeof e){if(!(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(k.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&k(e);if(!A.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&k.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?k.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?i.call(k(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,\"parentNode\")},parentsUntil:function(e,t,n){return T(e,\"parentNode\",n)},next:function(e){return P(e,\"nextSibling\")},prev:function(e){return P(e,\"previousSibling\")},nextAll:function(e){return T(e,\"nextSibling\")},prevAll:function(e){return T(e,\"previousSibling\")},nextUntil:function(e,t,n){return T(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return T(e,\"previousSibling\",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return\"undefined\"!=typeof e.contentDocument?e.contentDocument:(N(e,\"template\")&&(e=e.content||e),k.merge([],e.childNodes))}},function(r,i){k.fn[r]=function(e,t){var n=k.map(this,i,e);return\"Until\"!==r.slice(-5)&&(t=e),t&&\"string\"==typeof t&&(n=k.filter(t,n)),1<this.length&&(O[r]||k.uniqueSort(n),H.test(r)&&n.reverse()),this.pushStack(n)}});var R=/[^\\x20\\t\\r\\n\\f]+/g;function M(e){return e}function I(e){throw e}function W(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(r){var e,n;r=\"string\"==typeof r?(e=r,n={},k.each(e.match(R)||[],function(e,t){n[t]=!0}),n):k.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:\"\")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){k.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&\"string\"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return k.each(arguments,function(e,t){var n;while(-1<(n=k.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<k.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t=\"\",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=\"\"),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},k.extend({Deferred:function(e){var o=[[\"notify\",\"progress\",k.Callbacks(\"memory\"),k.Callbacks(\"memory\"),2],[\"resolve\",\"done\",k.Callbacks(\"once memory\"),k.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",k.Callbacks(\"once memory\"),k.Callbacks(\"once memory\"),1,\"rejected\"]],i=\"pending\",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},\"catch\":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return k.Deferred(function(r){k.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+\"With\"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError(\"Thenable self-resolution\");t=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,M,s),l(u,o,I,s)):(u++,t.call(e,l(u,o,M,s),l(u,o,I,s),l(u,o,M,o.notifyWith))):(a!==M&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==I&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(k.Deferred.getStackHook&&(t.stackTrace=k.Deferred.getStackHook()),C.setTimeout(t))}}return k.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:M,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:M)),o[2][3].add(l(0,e,m(n)?n:I))}).promise()},promise:function(e){return null!=e?k.extend(e,a):a}},s={};return k.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+\"With\"](this===s?void 0:this,arguments),this},s[t[0]+\"With\"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=k.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(W(e,o.done(a(t)).resolve,o.reject,!n),\"pending\"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)W(i[t],a(t),o.reject);return o.promise()}});var $=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&$.test(e.name)&&C.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},k.readyException=function(e){C.setTimeout(function(){throw e})};var F=k.Deferred();function B(){E.removeEventListener(\"DOMContentLoaded\",B),C.removeEventListener(\"load\",B),k.ready()}k.fn.ready=function(e){return F.then(e)[\"catch\"](function(e){k.readyException(e)}),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0)!==e&&0<--k.readyWait||F.resolveWith(E,[k])}}),k.ready.then=F.then,\"complete\"===E.readyState||\"loading\"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(k.ready):(E.addEventListener(\"DOMContentLoaded\",B),C.addEventListener(\"load\",B));var _=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===w(n))for(s in i=!0,n)_(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(k(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},z=/^-ms-/,U=/-([a-z])/g;function X(e,t){return t.toUpperCase()}function V(e){return e.replace(z,\"ms-\").replace(U,X)}var G=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Y(){this.expando=k.expando+Y.uid++}Y.uid=1,Y.prototype={cache:function(e){var t=e[this.expando];return t||(t={},G(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[V(t)]=n;else for(r in t)i[V(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][V(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(V):(t=V(t))in r?[t]:t.match(R)||[]).length;while(n--)delete r[t[n]]}(void 0===t||k.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new Y,J=new Y,K=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Z=/[A-Z]/g;function ee(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(Z,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=\"true\"===(i=n)||\"false\"!==i&&(\"null\"===i?null:i===+i+\"\"?+i:K.test(i)?JSON.parse(i):i)}catch(e){}J.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return J.hasData(e)||Q.hasData(e)},data:function(e,t,n){return J.access(e,t,n)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=J.get(o),1===o.nodeType&&!Q.get(o,\"hasDataAttrs\"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf(\"data-\")&&(r=V(r.slice(5)),ee(o,r,i[r]));Q.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof n?this.each(function(){J.set(this,n)}):_(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=J.get(o,n))?t:void 0!==(t=ee(o,n))?t:void 0;this.each(function(){J.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){J.remove(this,e)})}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=k.queue(e,t),r=n.length,i=n.shift(),o=k._queueHooks(e,t);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,function(){k.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks(\"once memory\").add(function(){Q.remove(e,[t+\"queue\",n])})})}}),k.fn.extend({queue:function(t,n){var e=2;return\"string\"!=typeof t&&(n=t,t=\"fx\",e--),arguments.length<e?k.queue(this[0],t):void 0===n?this:this.each(function(){var e=k.queue(this,t,n);k._queueHooks(this,t),\"fx\"===t&&\"inprogress\"!==e[0]&&k.dequeue(this,t)})},dequeue:function(e){return this.each(function(){k.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=k.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";while(a--)(n=Q.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var te=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ne=new RegExp(\"^(?:([+-])=|)(\"+te+\")([a-z%]*)$\",\"i\"),re=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ie=E.documentElement,oe=function(e){return k.contains(e.ownerDocument,e)},ae={composed:!0};ie.attachShadow&&(oe=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});var se=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&oe(e)&&\"none\"===k.css(e,\"display\")},ue=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=a[o];return i};function le(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return k.css(e,t,\"\")},u=s(),l=n&&n[3]||(k.cssNumber[t]?\"\":\"px\"),c=e.nodeType&&(k.cssNumber[t]||\"px\"!==l&&+u)&&ne.exec(k.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)k.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,k.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ce={};function fe(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?(\"none\"===n&&(l[c]=Q.get(r,\"display\")||null,l[c]||(r.style.display=\"\")),\"\"===r.style.display&&se(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ce[s])||(o=a.body.appendChild(a.createElement(s)),u=k.css(o,\"display\"),o.parentNode.removeChild(o),\"none\"===u&&(u=\"block\"),ce[s]=u)))):\"none\"!==n&&(l[c]=\"none\",Q.set(r,\"display\",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}k.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){se(this)?k(this).show():k(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,he=/^$|^module$|\\/(?:java|ecma)script/i,ge={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function ve(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&N(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Q.set(e[n],\"globalEval\",!t||Q.get(t[n],\"globalEval\"))}ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;var me,xe,be=/<|&#?\\w+;/;function we(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if(\"object\"===w(o))k.merge(p,o.nodeType?[o]:o);else if(be.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(de.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+k.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;k.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&-1<k.inArray(o,r))i&&i.push(o);else if(l=oe(o),a=ve(f.appendChild(o),\"script\"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||\"\")&&n.push(o)}return f}me=E.createDocumentFragment().appendChild(E.createElement(\"div\")),(xe=E.createElement(\"input\")).setAttribute(\"type\",\"radio\"),xe.setAttribute(\"checked\",\"checked\"),xe.setAttribute(\"name\",\"t\"),me.appendChild(xe),y.checkClone=me.cloneNode(!0).cloneNode(!0).lastChild.checked,me.innerHTML=\"<textarea>x</textarea>\",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ae(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==(\"focus\"===t)}function Ne(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){for(s in\"string\"!=typeof n&&(r=r||n,n=void 0),t)Ne(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n=void 0,r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n}else r&&(Q.set(this,i,k.event.trigger(k.extend(r.shift(),k.Event.prototype),r,this)),e.stopImmediatePropagation())}})):k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return\"undefined\"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||\"\").match(R)||[\"\"]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||\"\").match(R)||[\"\"]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,\"events\")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){a=k.event.handlers.call(this,s,l),t=0;while((i=a[t++])&&!s.isPropagationStopped()){s.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!s.isImmediatePropagationStopped())s.rnamespace&&!1!==o.namespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((k.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+\" \"]&&(a[i]=r.needsContext?-1<k(i,this).index(l):k.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(k.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&N(t,\"input\")&&void 0===Q.get(t,\"click\")&&De(t,\"click\",ke),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&N(t,\"input\")&&void 0===Q.get(t,\"click\")&&De(t,\"click\"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&N(t,\"input\")&&Q.get(t,\"click\")||N(t,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ke:Se,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ke,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ke,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ke,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Te.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ce.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},k.event.addProp),k.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){k.event.special[e]={setup:function(){return De(this,e,Ae),!1},trigger:function(){return De(this,e),!0},delegateType:t}}),k.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,i){k.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||k.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),k.fn.extend({on:function(e,t,n,r){return Ne(this,e,t,n,r)},one:function(e,t,n,r){return Ne(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=Se),this.each(function(){k.event.remove(this,e,n,t)})}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,qe=/<script|<style|<link/i,Le=/checked\\s*(?:[^=]|=\\s*.checked.)/i,He=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function Oe(e,t){return N(e,\"table\")&&N(11!==t.nodeType?t:t.firstChild,\"tr\")&&k(e).children(\"tbody\")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Re(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n<r;n++)k.event.add(t,i,l[i][n]);J.hasData(e)&&(s=J.access(e),u=k.extend({},s),J.set(t,u))}}function Ie(n,r,i,o){r=g.apply([],r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&\"string\"==typeof d&&!y.checkClone&&Le.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Ie(t,r,i,o)});if(f&&(t=(e=we(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=k.map(ve(e,\"script\"),Pe)).length;c<f;c++)u=e,c!==p&&(u=k.clone(u,!0,!0),s&&k.merge(a,ve(u,\"script\"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,k.map(a,Re),c=0;c<s;c++)u=a[c],he.test(u.type||\"\")&&!Q.access(u,\"globalEval\")&&k.contains(l,u)&&(u.src&&\"module\"!==(u.type||\"\").toLowerCase()?k._evalUrl&&!u.noModule&&k._evalUrl(u.src,{nonce:u.nonce||u.getAttribute(\"nonce\")}):b(u.textContent.replace(He,\"\"),u,l))}return n}function We(e,t,n){for(var r,i=t?k.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||k.cleanData(ve(r)),r.parentNode&&(n&&oe(r)&&ye(ve(r,\"script\")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e.replace(je,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,\"input\"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:\"input\"!==l&&\"textarea\"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Me(o[r],a[r]);else Me(e,c);return 0<(a=ve(c,\"script\")).length&&ye(a,!f&&ve(e,\"script\")),c},cleanData:function(e){for(var t,n,r,i=k.event.special,o=0;void 0!==(n=e[o]);o++)if(G(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)i[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),k.fn.extend({detach:function(e){return We(this,e,!0)},remove:function(e){return We(this,e)},text:function(e){return _(this,function(e){return void 0===e?k.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ie(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)})},prepend:function(){return Ie(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(ve(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return k.clone(this,e,t)})},html:function(e){return _(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!qe.test(e)&&!ge[(de.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Ie(this,arguments,function(e){var t=this.parentNode;k.inArray(this,n)<0&&(k.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),k.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,a){k.fn[e]=function(e){for(var t,n=[],r=k(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),k(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var $e=new RegExp(\"^(\"+te+\")(?!px)[a-z%]+$\",\"i\"),Fe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Be=new RegExp(re.join(\"|\"),\"i\");function _e(e,t,n){var r,i,o,a,s=e.style;return(n=n||Fe(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||oe(e)||(a=k.style(e,t)),!y.pixelBoxStyles()&&$e.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function ze(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){s.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",u.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",ie.appendChild(s).appendChild(u);var e=C.getComputedStyle(u);n=\"1%\"!==e.top,a=12===t(e.marginLeft),u.style.right=\"60%\",o=36===t(e.right),r=36===t(e.width),u.style.position=\"absolute\",i=12===t(u.offsetWidth/3),ie.removeChild(s),u=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s=E.createElement(\"div\"),u=E.createElement(\"div\");u.style&&(u.style.backgroundClip=\"content-box\",u.cloneNode(!0).style.backgroundClip=\"\",y.clearCloneStyle=\"content-box\"===u.style.backgroundClip,k.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),a},scrollboxSize:function(){return e(),i}}))}();var Ue=[\"Webkit\",\"Moz\",\"ms\"],Xe=E.createElement(\"div\").style,Ve={};function Ge(e){var t=k.cssProps[e]||Ve[e];return t||(e in Xe?e:Ve[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Ue.length;while(n--)if((e=Ue[n]+t)in Xe)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Je={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ke={letterSpacing:\"0\",fontWeight:\"400\"};function Ze(e,t,n){var r=ne.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function et(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=k.css(e,n+re[a],!0,i)),r?(\"content\"===n&&(u-=k.css(e,\"padding\"+re[a],!0,i)),\"margin\"!==n&&(u-=k.css(e,\"border\"+re[a]+\"Width\",!0,i))):(u+=k.css(e,\"padding\"+re[a],!0,i),\"padding\"!==n?u+=k.css(e,\"border\"+re[a]+\"Width\",!0,i):s+=k.css(e,\"border\"+re[a]+\"Width\",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r=Fe(e),i=(!y.boxSizingReliable()||n)&&\"border-box\"===k.css(e,\"boxSizing\",!1,r),o=i,a=_e(e,t,r),s=\"offset\"+t[0].toUpperCase()+t.slice(1);if($e.test(a)){if(!n)return a;a=\"auto\"}return(!y.boxSizingReliable()&&i||\"auto\"===a||!parseFloat(a)&&\"inline\"===k.css(e,\"display\",!1,r))&&e.getClientRects().length&&(i=\"border-box\"===k.css(e,\"boxSizing\",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(i?\"border\":\"content\"),o,r,a)+\"px\"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=_e(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=V(t),u=Qe.test(t),l=e.style;if(u||(t=Ge(s)),a=k.cssHooks[t]||k.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];\"string\"===(o=typeof n)&&(i=ne.exec(n))&&i[1]&&(n=le(e,t,i),o=\"number\"),null!=n&&n==n&&(\"number\"!==o||u||(n+=i&&i[3]||(k.cssNumber[s]?\"\":\"px\")),y.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=V(t);return Qe.test(t)||(t=Ge(s)),(a=k.cssHooks[t]||k.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=_e(e,t,r)),\"normal\"===i&&t in Ke&&(i=Ke[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),k.each([\"height\",\"width\"],function(e,u){k.cssHooks[u]={get:function(e,t,n){if(t)return!Ye.test(k.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,u,n):ue(e,Je,function(){return tt(e,u,n)})},set:function(e,t,n){var r,i=Fe(e),o=!y.scrollboxSize()&&\"absolute\"===i.position,a=(o||n)&&\"border-box\"===k.css(e,\"boxSizing\",!1,i),s=n?et(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e[\"offset\"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-et(e,u,\"border\",!1,i)-.5)),s&&(r=ne.exec(t))&&\"px\"!==(r[3]||\"px\")&&(e.style[u]=t,t=k.css(e,u)),Ze(0,t,s)}}}),k.cssHooks.marginLeft=ze(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(_e(e,\"marginLeft\"))||e.getBoundingClientRect().left-ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),k.each({margin:\"\",padding:\"\",border:\"Width\"},function(i,o){k.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r=\"string\"==typeof e?e.split(\" \"):[e];t<4;t++)n[i+re[t]+o]=r[t]||r[t-2]||r[0];return n}},\"margin\"!==i&&(k.cssHooks[i+o].set=Ze)}),k.fn.extend({css:function(e,t){return _(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Fe(e),i=t.length;a<i;a++)o[t[a]]=k.css(e,t[a],!1,r);return o}return void 0!==n?k.style(e,t,n):k.css(e,t)},e,t,1<arguments.length)}}),((k.Tween=nt).prototype={constructor:nt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(k.cssNumber[n]?\"\":\"px\")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}}).init.prototype=nt.prototype,(nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},k.fx=nt.prototype.init,k.fx.step={};var rt,it,ot,at,st=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function lt(){it&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(lt):C.setTimeout(lt,k.fx.interval),k.fx.tick())}function ct(){return C.setTimeout(function(){rt=void 0}),rt=Date.now()}function ft(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=re[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function pt(e,t,n){for(var r,i=(dt.tweeners[t]||[]).concat(dt.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function dt(o,e,t){var n,a,r=0,i=dt.prefilters.length,s=k.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=rt||ct(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:k.extend({},e),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},t),originalProperties:e,originalOptions:t,startTime:rt||ct(),duration:t.duration,tweens:[],createTween:function(e,t){var n=k.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=V(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=k.cssHooks[r])&&\"expand\"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=dt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(k._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return k.map(c,pt,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),k.fx.timer(k.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}k.Animation=k.extend(dt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return le(n.elem,e,ne.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=[\"*\"]):e=e.match(R);for(var n,r=0,i=e.length;r<i;r++)n=e[r],dt.tweeners[n]=dt.tweeners[n]||[],dt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f=\"width\"in t||\"height\"in t,p=this,d={},h=e.style,g=e.nodeType&&se(e),v=Q.get(e,\"fxshow\");for(r in n.queue||(null==(a=k._queueHooks(e,\"fx\")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,k.queue(e,\"fx\").length||a.empty.fire()})})),t)if(i=t[r],st.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||k.style(e,r)}if((u=!k.isEmptyObject(t))||!k.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Q.get(e,\"display\")),\"none\"===(c=k.css(e,\"display\"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=k.css(e,\"display\"),fe([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===k.css(e,\"float\")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l=\"none\"===c?\"\":c)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?\"hidden\"in v&&(g=v.hidden):v=Q.access(e,\"fxshow\",{display:l}),o&&(v.hidden=!g),g&&fe([e],!0),p.done(function(){for(r in g||fe([e]),Q.remove(e,\"fxshow\"),d)k.style(e,r,d[r])})),u=pt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?dt.prefilters.unshift(e):dt.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&\"object\"==typeof e?k.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return k.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(se).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=k.isEmptyObject(t),o=k.speed(e,n,r),a=function(){var e=dt(this,k.extend({},t),o);(i||Q.get(this,\"finish\"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return\"string\"!=typeof i&&(o=e,e=i,i=void 0),e&&!1!==i&&this.queue(i||\"fx\",[]),this.each(function(){var e=!0,t=null!=i&&i+\"queueHooks\",n=k.timers,r=Q.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&ut.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||k.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||\"fx\"),this.each(function(){var e,t=Q.get(this),n=t[a+\"queue\"],r=t[a+\"queueHooks\"],i=k.timers,o=n?n.length:0;for(t.finish=!0,k.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),k.each([\"toggle\",\"show\",\"hide\"],function(e,r){var i=k.fn[r];k.fn[r]=function(e,t,n){return null==e||\"boolean\"==typeof e?i.apply(this,arguments):this.animate(ft(r,!0),e,t,n)}}),k.each({slideDown:ft(\"show\"),slideUp:ft(\"hide\"),slideToggle:ft(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,r){k.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(rt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),rt=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){it||(it=!0,lt())},k.fx.stop=function(){it=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(r,e){return r=k.fx&&k.fx.speeds[r]||r,e=e||\"fx\",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},ot=E.createElement(\"input\"),at=E.createElement(\"select\").appendChild(E.createElement(\"option\")),ot.type=\"checkbox\",y.checkOn=\"\"!==ot.value,y.optSelected=at.selected,(ot=E.createElement(\"input\")).value=\"t\",ot.type=\"radio\",y.radioValue=\"t\"===ot.value;var ht,gt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return _(this,k.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){k.removeAttr(this,e)})}}),k.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?k.prop(e,t,n):(1===o&&k.isXMLDoc(e)||(i=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&\"radio\"===t&&N(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(R);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\\w+/g),function(e,t){var a=gt[t]||k.find.attr;gt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=gt[o],gt[o]=r,r=null!=a(e,t,n)?o:null,gt[o]=i),r}});var vt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function mt(e){return(e.match(R)||[]).join(\" \")}function xt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function bt(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match(R)||[]}k.fn.extend({prop:function(e,t){return _(this,k.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[k.propFix[e]||e]})}}),k.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&k.isXMLDoc(e)||(t=k.propFix[t]||t,i=k.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,\"tabindex\");return t?parseInt(t,10):vt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),y.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){k.propFix[this.toLowerCase()]=this}),k.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).addClass(t.call(this,e,xt(this)))});if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&\" \"+mt(i)+\" \"){a=0;while(o=e[a++])r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=mt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).removeClass(t.call(this,e,xt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&\" \"+mt(i)+\" \"){a=0;while(o=e[a++])while(-1<r.indexOf(\" \"+o+\" \"))r=r.replace(\" \"+o+\" \",\" \");i!==(s=mt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(i,t){var o=typeof i,a=\"string\"===o||Array.isArray(i);return\"boolean\"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){k(this).toggleClass(i.call(this,e,xt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=k(this),r=bt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&\"boolean\"!==o||((e=xt(this))&&Q.set(this,\"__className__\",e),this.setAttribute&&this.setAttribute(\"class\",e||!1===i?\"\":Q.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&-1<(\" \"+mt(xt(n))+\" \").indexOf(t))return!0;return!1}});var wt=/\\r/g;k.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,k(this).val()):n)?t=\"\":\"number\"==typeof t?t+=\"\":Array.isArray(t)&&(t=k.map(t,function(e){return null==e?\"\":e+\"\"})),(r=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&\"set\"in r&&void 0!==r.set(this,t,\"value\")||(this.value=t))})):t?(r=k.valHooks[t.type]||k.valHooks[t.nodeName.toLowerCase()])&&\"get\"in r&&void 0!==(e=r.get(t,\"value\"))?e:\"string\"==typeof(e=t.value)?e.replace(wt,\"\"):null==e?\"\":e:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,\"value\");return null!=t?t:mt(k.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,\"optgroup\"))){if(t=k(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=k.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<k.inArray(k.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),k.each([\"radio\",\"checkbox\"],function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<k.inArray(k(e).val(),t)}},y.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),y.focusin=\"onfocusin\"in C;var Tt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};k.extend(k.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,\"type\")?e.type:e,h=v.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!Tt.test(d+k.event.triggered)&&(-1<d.indexOf(\".\")&&(d=(h=d.split(\".\")).shift(),h.sort()),u=d.indexOf(\":\")<0&&\"on\"+d,(e=e[k.expando]?e:new k.Event(d,\"object\"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:k.makeArray(t,[e]),c=k.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,Tt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Q.get(o,\"events\")||{})[e.type]&&Q.get(o,\"handle\"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&G(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!G(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),k.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Ct),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Ct),k.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each(function(){k.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),y.focusin||k.each({focus:\"focusin\",blur:\"focusout\"},function(n,r){var i=function(e){k.event.simulate(r,e.target,k.event.fix(e))};k.event.special[r]={setup:function(){var e=this.ownerDocument||this,t=Q.access(e,r);t||e.addEventListener(n,i,!0),Q.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this,t=Q.access(e,r)-1;t?Q.access(e,r,t):(e.removeEventListener(n,i,!0),Q.remove(e,r))}}});var Et=C.location,kt=Date.now(),St=/\\?/;k.parseXML=function(e){var t;if(!e||\"string\"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,\"text/xml\")}catch(e){t=void 0}return t&&!t.getElementsByTagName(\"parsererror\").length||k.error(\"Invalid XML: \"+e),t};var At=/\\[\\]$/,Nt=/\\r?\\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function qt(n,e,r,i){var t;if(Array.isArray(e))k.each(e,function(e,t){r||At.test(n)?i(n,t):qt(n+\"[\"+(\"object\"==typeof t&&null!=t?e:\"\")+\"]\",t,r,i)});else if(r||\"object\"!==w(e))i(n,e);else for(t in e)qt(n+\"[\"+t+\"]\",e[t],r,i)}k.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==e)return\"\";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,function(){i(this.name,this.value)});else for(n in e)qt(n,e[n],t,i);return r.join(\"&\")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=k.prop(this,\"elements\");return e?k.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!k(this).is(\":disabled\")&&jt.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,function(e){return{name:t.name,value:e.replace(Nt,\"\\r\\n\")}}):{name:t.name,value:n.replace(Nt,\"\\r\\n\")}}).get()}});var Lt=/%20/g,Ht=/#.*$/,Ot=/([?&])_=[^&]*/,Pt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Mt=/^\\/\\//,It={},Wt={},$t=\"*/\".concat(\"*\"),Ft=E.createElement(\"a\");function Bt(o){return function(e,t){\"string\"!=typeof e&&(t=e,e=\"*\");var n,r=0,i=e.toLowerCase().match(R)||[];if(m(t))while(n=i[r++])\"+\"===n[0]?(n=n.slice(1)||\"*\",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function _t(t,i,o,a){var s={},u=t===Wt;function l(e){var r;return s[e]=!0,k.each(t[e]||[],function(e,t){var n=t(i,o,a);return\"string\"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s[\"*\"]&&l(\"*\")}function zt(e,t){var n,r,i=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}Ft.href=Et.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":$t,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,k.ajaxSettings),t):zt(k.ajaxSettings,e)},ajaxPrefilter:Bt(It),ajaxTransport:Bt(Wt),ajax:function(e,t){\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=k.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?k(y):k.event,x=k.Deferred(),b=k.Callbacks(\"once memory\"),w=v.statusCode||{},a={},s={},u=\"canceled\",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Pt.exec(p))n[t[1].toLowerCase()+\" \"]=(n[t[1].toLowerCase()+\" \"]||[]).concat(t[2])}t=n[e.toLowerCase()+\" \"]}return null==t?null:t.join(\", \")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+\"\").replace(Mt,Et.protocol+\"//\"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||\"*\").toLowerCase().match(R)||[\"\"],null==v.crossDomain){r=E.createElement(\"a\");try{r.href=v.url,r.href=r.href,v.crossDomain=Ft.protocol+\"//\"+Ft.host!=r.protocol+\"//\"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&\"string\"!=typeof v.data&&(v.data=k.param(v.data,v.traditional)),_t(It,v,t,T),h)return T;for(i in(g=k.event&&v.global)&&0==k.active++&&k.event.trigger(\"ajaxStart\"),v.type=v.type.toUpperCase(),v.hasContent=!Rt.test(v.type),f=v.url.replace(Ht,\"\"),v.hasContent?v.data&&v.processData&&0===(v.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(v.data=v.data.replace(Lt,\"+\")):(o=v.url.slice(f.length),v.data&&(v.processData||\"string\"==typeof v.data)&&(f+=(St.test(f)?\"&\":\"?\")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Ot,\"$1\"),o=(St.test(f)?\"&\":\"?\")+\"_=\"+kt+++o),v.url=f+o),v.ifModified&&(k.lastModified[f]&&T.setRequestHeader(\"If-Modified-Since\",k.lastModified[f]),k.etag[f]&&T.setRequestHeader(\"If-None-Match\",k.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader(\"Content-Type\",v.contentType),T.setRequestHeader(\"Accept\",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+(\"*\"!==v.dataTypes[0]?\", \"+$t+\"; q=0.01\":\"\"):v.accepts[\"*\"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u=\"abort\",b.add(v.complete),T.done(v.success),T.fail(v.error),c=_t(Wt,v,t,T)){if(T.readyState=1,g&&m.trigger(\"ajaxSend\",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort(\"timeout\")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,\"No Transport\");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||\"\",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s=i.split(\" \"))[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader(\"Last-Modified\"))&&(k.lastModified[f]=u),(u=T.getResponseHeader(\"etag\"))&&(k.etag[f]=u)),204===e||\"HEAD\"===v.type?l=\"nocontent\":304===e?l=\"notmodified\":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l=\"error\",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+\"\",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?\"ajaxSuccess\":\"ajaxError\",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger(\"ajaxComplete\",[T,v]),--k.active||k.event.trigger(\"ajaxStop\")))}return T},getJSON:function(e,t,n){return k.get(e,t,n,\"json\")},getScript:function(e,t){return k.get(e,void 0,t,\"script\")}}),k.each([\"get\",\"post\"],function(e,i){k[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),k.ajax(k.extend({url:e,type:i,dataType:r,data:t,success:n},k.isPlainObject(e)&&e))}}),k._evalUrl=function(e,t){return k.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(e){k.globalEval(e,t)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){k(this).wrapInner(n.call(this,e))}):this.each(function(){var e=k(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){k(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){k(this).replaceWith(this.childNodes)}),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Xt=k.ajaxSettings.xhr();y.cors=!!Xt&&\"withCredentials\"in Xt,y.ajax=Xt=!!Xt,k.ajaxTransport(function(i){var o,a;if(y.cors||Xt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e[\"X-Requested-With\"]||(e[\"X-Requested-With\"]=\"XMLHttpRequest\"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,\"abort\"===e?r.abort():\"error\"===e?\"number\"!=typeof r.status?t(0,\"error\"):t(r.status,r.statusText):t(Ut[r.status]||r.status,r.statusText,\"text\"!==(r.responseType||\"text\")||\"string\"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o(\"error\"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o(\"abort\");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),k.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),k.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),k.ajaxTransport(\"script\",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=k(\"<script>\").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on(\"load error\",i=function(e){r.remove(),i=null,e&&t(\"error\"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\\?(?=&|$)|\\?\\?/;k.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Gt.pop()||k.expando+\"_\"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter(\"json jsonp\",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Yt.test(e.data)&&\"data\");if(a||\"jsonp\"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,\"$1\"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+r),e.converters[\"script json\"]=function(){return o||k.error(r+\" was not called\"),o[0]},e.dataTypes[0]=\"json\",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),\"script\"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return\"string\"!=typeof e?[]:(\"boolean\"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return-1<s&&(r=mt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),0<a.length&&k.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?k(\"<div>\").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,\"position\"),c=k(e),f={};\"static\"===l&&(e.style.position=\"relative\"),s=c.offset(),o=k.css(e,\"top\"),u=k.css(e,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&-1<(o+u).indexOf(\"auto\")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),\"using\"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===k.css(r,\"position\"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&\"static\"===k.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,\"borderTopWidth\",!0),i.left+=k.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-k.css(r,\"marginTop\",!0),left:t.left-i.left-k.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===k.css(e,\"position\"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(t,i){var o=\"pageYOffset\"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each([\"top\",\"left\"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+\"px\":t})}),k.each({Height:\"height\",Width:\"width\"},function(a,s){k.each({padding:\"inner\"+a,content:s,\"\":\"outer\"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||\"boolean\"!=typeof e),i=r||(!0===e||!0===t?\"margin\":\"border\");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf(\"outer\")?e[\"inner\"+a]:e.document.documentElement[\"client\"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body[\"scroll\"+a],r[\"scroll\"+a],e.body[\"offset\"+a],r[\"offset\"+a],r[\"client\"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,n){k.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),k.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),k.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||k.guid++,i},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=N,k.isFunction=m,k.isWindow=x,k.camelCase=V,k.type=w,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return k});var Qt=C.jQuery,Jt=C.$;return k.noConflict=function(e){return C.$===k&&(C.$=Jt),e&&C.jQuery===k&&(C.jQuery=Qt),k},e||(C.jQuery=C.$=k),k});\n","/**\r\n * jQuery contextMenu v2.4.5 - Plugin for simple contextMenu handling\r\n *\r\n * Version: v2.4.5\r\n *\r\n * Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF)\r\n * Web: http://swisnl.github.io/jQuery-contextMenu/\r\n *\r\n * Copyright (c) 2011-2017 SWIS BV and contributors\r\n *\r\n * Licensed under\r\n *   MIT License http://www.opensource.org/licenses/mit-license\r\n *\r\n * Date: 2017-05-05T14:40:36.990Z\r\n */\r\n\r\n// jscs:disable\r\n/* jshint ignore:start */\r\n(function (factory) {\r\n    if (typeof define === 'function' && define.amd) {\r\n        // AMD. Register as anonymous module.\r\n        define(['jquery'], factory);\r\n    } else if (typeof exports === 'object') {\r\n        // Node / CommonJS\r\n        factory(require('jquery'));\r\n    } else {\r\n        // Browser globals.\r\n        factory(jQuery);\r\n    }\r\n})(function ($) {\r\n\r\n    'use strict';\r\n\r\n    // TODO: -\r\n    // ARIA stuff: menuitem, menuitemcheckbox und menuitemradio\r\n    // create <menu> structure if $.support[htmlCommand || htmlMenuitem] and !opt.disableNative\r\n\r\n    // determine html5 compatibility\r\n    $.support.htmlMenuitem = ('HTMLMenuItemElement' in window);\r\n    $.support.htmlCommand = ('HTMLCommandElement' in window);\r\n    $.support.eventSelectstart = ('onselectstart' in document.documentElement);\r\n    /* // should the need arise, test for css user-select\r\n     $.support.cssUserSelect = (function(){\r\n     var t = false,\r\n     e = document.createElement('div');\r\n\r\n     $.each('Moz|Webkit|Khtml|O|ms|Icab|'.split('|'), function(i, prefix) {\r\n     var propCC = prefix + (prefix ? 'U' : 'u') + 'serSelect',\r\n     prop = (prefix ? ('-' + prefix.toLowerCase() + '-') : '') + 'user-select';\r\n\r\n     e.style.cssText = prop + ': text;';\r\n     if (e.style[propCC] == 'text') {\r\n     t = true;\r\n     return false;\r\n     }\r\n\r\n     return true;\r\n     });\r\n\r\n     return t;\r\n     })();\r\n     */\r\n\r\n\r\n    if (!$.ui || !$.widget) {\r\n        // duck punch $.cleanData like jQueryUI does to get that remove event\r\n        $.cleanData = (function (orig) {\r\n            return function (elems) {\r\n                var events, elem, i;\r\n                for (i = 0; elems[i] != null; i++) {\r\n                    elem = elems[i];\r\n                    try {\r\n                        // Only trigger remove when necessary to save time\r\n                        events = $._data(elem, 'events');\r\n                        if (events && events.remove) {\r\n                            $(elem).triggerHandler('remove');\r\n                        }\r\n\r\n                        // Http://bugs.jquery.com/ticket/8235\r\n                    } catch (e) {\r\n                    }\r\n                }\r\n                orig(elems);\r\n            };\r\n        })($.cleanData);\r\n    }\r\n    /* jshint ignore:end */\r\n    // jscs:enable\r\n\r\n    var // currently active contextMenu trigger\r\n        $currentTrigger = null,\r\n        // is contextMenu initialized with at least one menu?\r\n        initialized = false,\r\n        // window handle\r\n        $win = $(window),\r\n        // number of registered menus\r\n        counter = 0,\r\n        // mapping selector to namespace\r\n        namespaces = {},\r\n        // mapping namespace to options\r\n        menus = {},\r\n        // custom command type handlers\r\n        types = {},\r\n        // default values\r\n        defaults = {\r\n            // selector of contextMenu trigger\r\n            selector: null,\r\n            // where to append the menu to\r\n            appendTo: null,\r\n            // method to trigger context menu [\"right\", \"left\", \"hover\"]\r\n            trigger: 'right',\r\n            // hide menu when mouse leaves trigger / menu elements\r\n            autoHide: false,\r\n            // ms to wait before showing a hover-triggered context menu\r\n            delay: 200,\r\n            // flag denoting if a second trigger should simply move (true) or rebuild (false) an open menu\r\n            // as long as the trigger happened on one of the trigger-element's child nodes\r\n            reposition: true,\r\n\r\n            //ability to select submenu\r\n            selectableSubMenu: false,\r\n\r\n            // Default classname configuration to be able avoid conflicts in frameworks\r\n            classNames: {\r\n                hover: 'context-menu-hover', // Item hover\r\n                disabled: 'context-menu-disabled', // Item disabled\r\n                visible: 'context-menu-visible', // Item visible\r\n                notSelectable: 'context-menu-not-selectable', // Item not selectable\r\n\r\n                icon: 'context-menu-icon',\r\n                iconEdit: 'context-menu-icon-edit',\r\n                iconCut: 'context-menu-icon-cut',\r\n                iconCopy: 'context-menu-icon-copy',\r\n                iconPaste: 'context-menu-icon-paste',\r\n                iconDelete: 'context-menu-icon-delete',\r\n                iconAdd: 'context-menu-icon-add',\r\n                iconQuit: 'context-menu-icon-quit',\r\n                iconLoadingClass: 'context-menu-icon-loading'\r\n            },\r\n\r\n            // determine position to show menu at\r\n            determinePosition: function ($menu) {\r\n                // position to the lower middle of the trigger element\r\n                if ($.ui && $.ui.position) {\r\n                    // .position() is provided as a jQuery UI utility\r\n                    // (...and it won't work on hidden elements)\r\n                    $menu.css('display', 'block').position({\r\n                        my: 'center top',\r\n                        at: 'center bottom',\r\n                        of: this,\r\n                        offset: '0 5',\r\n                        collision: 'fit'\r\n                    }).css('display', 'none');\r\n                } else {\r\n                    // determine contextMenu position\r\n                    var offset = this.offset();\r\n                    offset.top += this.outerHeight();\r\n                    offset.left += this.outerWidth() / 2 - $menu.outerWidth() / 2;\r\n                    $menu.css(offset);\r\n                }\r\n            },\r\n            // position menu\r\n            position: function (opt, x, y) {\r\n                var offset;\r\n                // determine contextMenu position\r\n                if (!x && !y) {\r\n                    opt.determinePosition.call(this, opt.$menu);\r\n                    return;\r\n                } else if (x === 'maintain' && y === 'maintain') {\r\n                    // x and y must not be changed (after re-show on command click)\r\n                    offset = opt.$menu.position();\r\n                } else {\r\n                    // x and y are given (by mouse event)\r\n                    var offsetParentOffset = opt.$menu.offsetParent().offset();\r\n                    offset = {top: y - offsetParentOffset.top, left: x -offsetParentOffset.left};\r\n                }\r\n\r\n                // correct offset if viewport demands it\r\n                var bottom = $win.scrollTop() + $win.height(),\r\n                    right = $win.scrollLeft() + $win.width(),\r\n                    height = opt.$menu.outerHeight(),\r\n                    width = opt.$menu.outerWidth();\r\n\r\n                if (offset.top + height > bottom) {\r\n                    offset.top -= height;\r\n                }\r\n\r\n                if (offset.top < 0) {\r\n                    offset.top = 0;\r\n                }\r\n\r\n                if (offset.left + width > right) {\r\n                    offset.left -= width;\r\n                }\r\n\r\n                if (offset.left < 0) {\r\n                    offset.left = 0;\r\n                }\r\n\r\n                opt.$menu.css(offset);\r\n            },\r\n            // position the sub-menu\r\n            positionSubmenu: function ($menu) {\r\n                if (typeof $menu === 'undefined') {\r\n                    // When user hovers over item (which has sub items) handle.focusItem will call this.\r\n                    // but the submenu does not exist yet if opt.items is a promise. just return, will\r\n                    // call positionSubmenu after promise is completed.\r\n                    return;\r\n                }\r\n                if ($.ui && $.ui.position) {\r\n                    // .position() is provided as a jQuery UI utility\r\n                    // (...and it won't work on hidden elements)\r\n                    $menu.css('display', 'block').position({\r\n                        my: 'left top-5',\r\n                        at: 'right top',\r\n                        of: this,\r\n                        collision: 'flipfit fit'\r\n                    }).css('display', '');\r\n                } else {\r\n                    // determine contextMenu position\r\n                    var offset = {\r\n                        top: -9,\r\n                        left: this.outerWidth() - 5\r\n                    };\r\n                    $menu.css(offset);\r\n                }\r\n            },\r\n            // offset to add to zIndex\r\n            zIndex: 1,\r\n            // show hide animation settings\r\n            animation: {\r\n                duration: 50,\r\n                show: 'slideDown',\r\n                hide: 'slideUp'\r\n            },\r\n            // events\r\n            events: {\r\n                show: $.noop,\r\n                hide: $.noop\r\n            },\r\n            // default callback\r\n            callback: null,\r\n            // list of contextMenu items\r\n            items: {}\r\n        },\r\n        // mouse position for hover activation\r\n        hoveract = {\r\n            timer: null,\r\n            pageX: null,\r\n            pageY: null\r\n        },\r\n        // determine zIndex\r\n        zindex = function ($t) {\r\n            var zin = 0,\r\n                $tt = $t;\r\n\r\n            while (true) {\r\n                zin = Math.max(zin, parseInt($tt.css('z-index'), 10) || 0);\r\n                $tt = $tt.parent();\r\n                if (!$tt || !$tt.length || 'html body'.indexOf($tt.prop('nodeName').toLowerCase()) > -1) {\r\n                    break;\r\n                }\r\n            }\r\n            return zin;\r\n        },\r\n        // event handlers\r\n        handle = {\r\n            // abort anything\r\n            abortevent: function (e) {\r\n                e.preventDefault();\r\n                e.stopImmediatePropagation();\r\n            },\r\n            // contextmenu show dispatcher\r\n            contextmenu: function (e) {\r\n                var $this = $(this);\r\n\r\n                // disable actual context-menu if we are using the right mouse button as the trigger\r\n                if (e.data.trigger === 'right') {\r\n                    e.preventDefault();\r\n                    e.stopImmediatePropagation();\r\n                }\r\n\r\n                // abort native-triggered events unless we're triggering on right click\r\n                if ((e.data.trigger !== 'right' && e.data.trigger !== 'demand') && e.originalEvent) {\r\n                    return;\r\n                }\r\n\r\n                // Let the current contextmenu decide if it should show or not based on its own trigger settings\r\n                if (typeof e.mouseButton !== 'undefined' && e.data) {\r\n                    if (!(e.data.trigger === 'left' && e.mouseButton === 0) && !(e.data.trigger === 'right' && e.mouseButton === 2)) {\r\n                        // Mouse click is not valid.\r\n                        return;\r\n                    }\r\n                }\r\n\r\n                // abort event if menu is visible for this trigger\r\n                if ($this.hasClass('context-menu-active')) {\r\n                    return;\r\n                }\r\n\r\n                if (!$this.hasClass('context-menu-disabled')) {\r\n                    // theoretically need to fire a show event at <menu>\r\n                    // http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#context-menus\r\n                    // var evt = jQuery.Event(\"show\", { data: data, pageX: e.pageX, pageY: e.pageY, relatedTarget: this });\r\n                    // e.data.$menu.trigger(evt);\r\n\r\n                    $currentTrigger = $this;\r\n                    if (e.data.build) {\r\n                        var built = e.data.build($currentTrigger, e);\r\n                        // abort if build() returned false\r\n                        if (built === false) {\r\n                            return;\r\n                        }\r\n\r\n                        // dynamically build menu on invocation\r\n                        e.data = $.extend(true, {}, defaults, e.data, built || {});\r\n\r\n                        // abort if there are no items to display\r\n                        if (!e.data.items || $.isEmptyObject(e.data.items)) {\r\n                            // Note: jQuery captures and ignores errors from event handlers\r\n                            if (window.console) {\r\n                                (console.error || console.log).call(console, 'No items specified to show in contextMenu');\r\n                            }\r\n\r\n                            throw new Error('No Items specified');\r\n                        }\r\n\r\n                        // backreference for custom command type creation\r\n                        e.data.$trigger = $currentTrigger;\r\n\r\n                        op.create(e.data);\r\n                    }\r\n                    var showMenu = false;\r\n                    for (var item in e.data.items) {\r\n                        if (e.data.items.hasOwnProperty(item)) {\r\n                            var visible;\r\n                            if ($.isFunction(e.data.items[item].visible)) {\r\n                                visible = e.data.items[item].visible.call($(e.currentTarget), item, e.data);\r\n                            } else if (typeof e.data.items[item] !== 'undefined' && e.data.items[item].visible) {\r\n                                visible = e.data.items[item].visible === true;\r\n                            } else {\r\n                                visible = true;\r\n                            }\r\n                            if (visible) {\r\n                                showMenu = true;\r\n                            }\r\n                        }\r\n                    }\r\n                    if (showMenu) {\r\n                        // show menu\r\n                        op.show.call($this, e.data, e.pageX, e.pageY);\r\n                    }\r\n                }\r\n            },\r\n            // contextMenu left-click trigger\r\n            click: function (e) {\r\n                e.preventDefault();\r\n                e.stopImmediatePropagation();\r\n                $(this).trigger($.Event('contextmenu', {data: e.data, pageX: e.pageX, pageY: e.pageY}));\r\n            },\r\n            // contextMenu right-click trigger\r\n            mousedown: function (e) {\r\n                // register mouse down\r\n                var $this = $(this);\r\n\r\n                // hide any previous menus\r\n                if ($currentTrigger && $currentTrigger.length && !$currentTrigger.is($this)) {\r\n                    $currentTrigger.data('contextMenu').$menu.trigger('contextmenu:hide');\r\n                }\r\n\r\n                // activate on right click\r\n                if (e.button === 2) {\r\n                    $currentTrigger = $this.data('contextMenuActive', true);\r\n                }\r\n            },\r\n            // contextMenu right-click trigger\r\n            mouseup: function (e) {\r\n                // show menu\r\n                var $this = $(this);\r\n                if ($this.data('contextMenuActive') && $currentTrigger && $currentTrigger.length && $currentTrigger.is($this) && !$this.hasClass('context-menu-disabled')) {\r\n                    e.preventDefault();\r\n                    e.stopImmediatePropagation();\r\n                    $currentTrigger = $this;\r\n                    $this.trigger($.Event('contextmenu', {data: e.data, pageX: e.pageX, pageY: e.pageY}));\r\n                }\r\n\r\n                $this.removeData('contextMenuActive');\r\n            },\r\n            // contextMenu hover trigger\r\n            mouseenter: function (e) {\r\n                var $this = $(this),\r\n                    $related = $(e.relatedTarget),\r\n                    $document = $(document);\r\n\r\n                // abort if we're coming from a menu\r\n                if ($related.is('.context-menu-list') || $related.closest('.context-menu-list').length) {\r\n                    return;\r\n                }\r\n\r\n                // abort if a menu is shown\r\n                if ($currentTrigger && $currentTrigger.length) {\r\n                    return;\r\n                }\r\n\r\n                hoveract.pageX = e.pageX;\r\n                hoveract.pageY = e.pageY;\r\n                hoveract.data = e.data;\r\n                $document.on('mousemove.contextMenuShow', handle.mousemove);\r\n                hoveract.timer = setTimeout(function () {\r\n                    hoveract.timer = null;\r\n                    $document.off('mousemove.contextMenuShow');\r\n                    $currentTrigger = $this;\r\n                    $this.trigger($.Event('contextmenu', {\r\n                        data: hoveract.data,\r\n                        pageX: hoveract.pageX,\r\n                        pageY: hoveract.pageY\r\n                    }));\r\n                }, e.data.delay);\r\n            },\r\n            // contextMenu hover trigger\r\n            mousemove: function (e) {\r\n                hoveract.pageX = e.pageX;\r\n                hoveract.pageY = e.pageY;\r\n            },\r\n            // contextMenu hover trigger\r\n            mouseleave: function (e) {\r\n                // abort if we're leaving for a menu\r\n                var $related = $(e.relatedTarget);\r\n                if ($related.is('.context-menu-list') || $related.closest('.context-menu-list').length) {\r\n                    return;\r\n                }\r\n\r\n                try {\r\n                    clearTimeout(hoveract.timer);\r\n                } catch (e) {\r\n                }\r\n\r\n                hoveract.timer = null;\r\n            },\r\n            // click on layer to hide contextMenu\r\n            layerClick: function (e) {\r\n                var $this = $(this),\r\n                    root = $this.data('contextMenuRoot'),\r\n                    button = e.button,\r\n                    x = e.pageX,\r\n                    y = e.pageY,\r\n                    target,\r\n                    offset;\r\n\r\n                e.preventDefault();\r\n\r\n                setTimeout(function () {\r\n                    var $window;\r\n                    var triggerAction = ((root.trigger === 'left' && button === 0) || (root.trigger === 'right' && button === 2));\r\n\r\n                    // find the element that would've been clicked, wasn't the layer in the way\r\n                    if (document.elementFromPoint && root.$layer) {\r\n                        root.$layer.hide();\r\n                        target = document.elementFromPoint(x - $win.scrollLeft(), y - $win.scrollTop());\r\n\r\n                        // also need to try and focus this element if we're in a contenteditable area,\r\n                        // as the layer will prevent the browser mouse action we want\r\n                        if (target.isContentEditable) {\r\n                            var range = document.createRange(),\r\n                                sel = window.getSelection();\r\n                            range.selectNode(target);\r\n                            range.collapse(true);\r\n                            sel.removeAllRanges();\r\n                            sel.addRange(range);\r\n                        }\r\n                        $(target).trigger(e);\r\n                        root.$layer.show();\r\n                    }\r\n\r\n                    if (root.reposition && triggerAction) {\r\n                        if (document.elementFromPoint) {\r\n                            if (root.$trigger.is(target)) {\r\n                                root.position.call(root.$trigger, root, x, y);\r\n                                return;\r\n                            }\r\n                        } else {\r\n                            offset = root.$trigger.offset();\r\n                            $window = $(window);\r\n                            // while this looks kinda awful, it's the best way to avoid\r\n                            // unnecessarily calculating any positions\r\n                            offset.top += $window.scrollTop();\r\n                            if (offset.top <= e.pageY) {\r\n                                offset.left += $window.scrollLeft();\r\n                                if (offset.left <= e.pageX) {\r\n                                    offset.bottom = offset.top + root.$trigger.outerHeight();\r\n                                    if (offset.bottom >= e.pageY) {\r\n                                        offset.right = offset.left + root.$trigger.outerWidth();\r\n                                        if (offset.right >= e.pageX) {\r\n                                            // reposition\r\n                                            root.position.call(root.$trigger, root, x, y);\r\n                                            return;\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    if (target && triggerAction) {\r\n                        root.$trigger.one('contextmenu:hidden', function () {\r\n                            $(target).contextMenu({x: x, y: y, button: button});\r\n                        });\r\n                    }\r\n\r\n                    if (root !== null && typeof root !== 'undefined' && root.$menu !== null  && typeof root.$menu !== 'undefined') {\r\n                        root.$menu.trigger('contextmenu:hide');\r\n                    }\r\n                }, 50);\r\n            },\r\n            // key handled :hover\r\n            keyStop: function (e, opt) {\r\n                if (!opt.isInput) {\r\n                    e.preventDefault();\r\n                }\r\n\r\n                e.stopPropagation();\r\n            },\r\n            key: function (e) {\r\n\r\n                var opt = {};\r\n\r\n                // Only get the data from $currentTrigger if it exists\r\n                if ($currentTrigger) {\r\n                    opt = $currentTrigger.data('contextMenu') || {};\r\n                }\r\n                // If the trigger happen on a element that are above the contextmenu do this\r\n                if (typeof opt.zIndex === 'undefined') {\r\n                    opt.zIndex = 0;\r\n                }\r\n                var targetZIndex = 0;\r\n                var getZIndexOfTriggerTarget = function (target) {\r\n                    if (target.style.zIndex !== '') {\r\n                        targetZIndex = target.style.zIndex;\r\n                    } else {\r\n                        if (target.offsetParent !== null && typeof target.offsetParent !== 'undefined') {\r\n                            getZIndexOfTriggerTarget(target.offsetParent);\r\n                        }\r\n                        else if (target.parentElement !== null && typeof target.parentElement !== 'undefined') {\r\n                            getZIndexOfTriggerTarget(target.parentElement);\r\n                        }\r\n                    }\r\n                };\r\n                getZIndexOfTriggerTarget(e.target);\r\n                // If targetZIndex is heigher then opt.zIndex dont progress any futher.\r\n                // This is used to make sure that if you are using a dialog with a input / textarea / contenteditable div\r\n                // and its above the contextmenu it wont steal keys events\r\n                if (opt.$menu && parseInt(targetZIndex,10) > parseInt(opt.$menu.css(\"zIndex\"),10)) {\r\n                    return;\r\n                }\r\n                switch (e.keyCode) {\r\n                    case 9:\r\n                    case 38: // up\r\n                        handle.keyStop(e, opt);\r\n                        // if keyCode is [38 (up)] or [9 (tab) with shift]\r\n                        if (opt.isInput) {\r\n                            if (e.keyCode === 9 && e.shiftKey) {\r\n                                e.preventDefault();\r\n                                if (opt.$selected) {\r\n                                    opt.$selected.find('input, textarea, select').blur();\r\n                                }\r\n                                if (opt.$menu !== null && typeof opt.$menu !== 'undefined') {\r\n                                    opt.$menu.trigger('prevcommand');\r\n                                }\r\n                                return;\r\n                            } else if (e.keyCode === 38 && opt.$selected.find('input, textarea, select').prop('type') === 'checkbox') {\r\n                                // checkboxes don't capture this key\r\n                                e.preventDefault();\r\n                                return;\r\n                            }\r\n                        } else if (e.keyCode !== 9 || e.shiftKey) {\r\n                            if (opt.$menu !== null && typeof opt.$menu !== 'undefined') {\r\n                                opt.$menu.trigger('prevcommand');\r\n                            }\r\n                            return;\r\n                        }\r\n                        break;\r\n                    // omitting break;\r\n                    // case 9: // tab - reached through omitted break;\r\n                    case 40: // down\r\n                        handle.keyStop(e, opt);\r\n                        if (opt.isInput) {\r\n                            if (e.keyCode === 9) {\r\n                                e.preventDefault();\r\n                                if (opt.$selected) {\r\n                                    opt.$selected.find('input, textarea, select').blur();\r\n                                }\r\n                                if (opt.$menu !== null && typeof opt.$menu !== 'undefined') {\r\n                                    opt.$menu.trigger('nextcommand');\r\n                                }\r\n                                return;\r\n                            } else if (e.keyCode === 40 && opt.$selected.find('input, textarea, select').prop('type') === 'checkbox') {\r\n                                // checkboxes don't capture this key\r\n                                e.preventDefault();\r\n                                return;\r\n                            }\r\n                        } else {\r\n                            if (opt.$menu !== null && typeof opt.$menu !== 'undefined') {\r\n                                opt.$menu.trigger('nextcommand');\r\n                            }\r\n                            return;\r\n                        }\r\n                        break;\r\n\r\n                    case 37: // left\r\n                        handle.keyStop(e, opt);\r\n                        if (opt.isInput || !opt.$selected || !opt.$selected.length) {\r\n                            break;\r\n                        }\r\n\r\n                        if (!opt.$selected.parent().hasClass('context-menu-root')) {\r\n                            var $parent = opt.$selected.parent().parent();\r\n                            opt.$selected.trigger('contextmenu:blur');\r\n                            opt.$selected = $parent;\r\n                            return;\r\n                        }\r\n                        break;\r\n\r\n                    case 39: // right\r\n                        handle.keyStop(e, opt);\r\n                        if (opt.isInput || !opt.$selected || !opt.$selected.length) {\r\n                            break;\r\n                        }\r\n\r\n                        var itemdata = opt.$selected.data('contextMenu') || {};\r\n                        if (itemdata.$menu && opt.$selected.hasClass('context-menu-submenu')) {\r\n                            opt.$selected = null;\r\n                            itemdata.$selected = null;\r\n                            itemdata.$menu.trigger('nextcommand');\r\n                            return;\r\n                        }\r\n                        break;\r\n\r\n                    case 35: // end\r\n                    case 36: // home\r\n                        if (opt.$selected && opt.$selected.find('input, textarea, select').length) {\r\n                            return;\r\n                        } else {\r\n                            (opt.$selected && opt.$selected.parent() || opt.$menu)\r\n                                .children(':not(.' + opt.classNames.disabled + ', .' + opt.classNames.notSelectable + ')')[e.keyCode === 36 ? 'first' : 'last']()\r\n                                .trigger('contextmenu:focus');\r\n                            e.preventDefault();\r\n                            return;\r\n                        }\r\n                        break;\r\n\r\n                    case 13: // enter\r\n                        handle.keyStop(e, opt);\r\n                        if (opt.isInput) {\r\n                            if (opt.$selected && !opt.$selected.is('textarea, select')) {\r\n                                e.preventDefault();\r\n                                return;\r\n                            }\r\n                            break;\r\n                        }\r\n                        if (typeof opt.$selected !== 'undefined' && opt.$selected !== null) {\r\n                            opt.$selected.trigger('mouseup');\r\n                        }\r\n                        return;\r\n\r\n                    case 32: // space\r\n                    case 33: // page up\r\n                    case 34: // page down\r\n                        // prevent browser from scrolling down while menu is visible\r\n                        handle.keyStop(e, opt);\r\n                        return;\r\n\r\n                    case 27: // esc\r\n                        handle.keyStop(e, opt);\r\n                        if (opt.$menu !== null && typeof opt.$menu !== 'undefined') {\r\n                            opt.$menu.trigger('contextmenu:hide');\r\n                        }\r\n                        return;\r\n\r\n                    default: // 0-9, a-z\r\n                        var k = (String.fromCharCode(e.keyCode)).toUpperCase();\r\n                        if (opt.accesskeys && opt.accesskeys[k]) {\r\n                            // according to the specs accesskeys must be invoked immediately\r\n                            opt.accesskeys[k].$node.trigger(opt.accesskeys[k].$menu ? 'contextmenu:focus' : 'mouseup');\r\n                            return;\r\n                        }\r\n                        break;\r\n                }\r\n                // pass event to selected item,\r\n                // stop propagation to avoid endless recursion\r\n                e.stopPropagation();\r\n                if (typeof opt.$selected !== 'undefined' && opt.$selected !== null) {\r\n                    opt.$selected.trigger(e);\r\n                }\r\n            },\r\n            // select previous possible command in menu\r\n            prevItem: function (e) {\r\n                e.stopPropagation();\r\n                var opt = $(this).data('contextMenu') || {};\r\n                var root = $(this).data('contextMenuRoot') || {};\r\n\r\n                // obtain currently selected menu\r\n                if (opt.$selected) {\r\n                    var $s = opt.$selected;\r\n                    opt = opt.$selected.parent().data('contextMenu') || {};\r\n                    opt.$selected = $s;\r\n                }\r\n\r\n                var $children = opt.$menu.children(),\r\n                    $prev = !opt.$selected || !opt.$selected.prev().length ? $children.last() : opt.$selected.prev(),\r\n                    $round = $prev;\r\n\r\n                // skip disabled or hidden elements\r\n                while ($prev.hasClass(root.classNames.disabled) || $prev.hasClass(root.classNames.notSelectable) || $prev.is(':hidden')) {\r\n                    if ($prev.prev().length) {\r\n                        $prev = $prev.prev();\r\n                    } else {\r\n                        $prev = $children.last();\r\n                    }\r\n                    if ($prev.is($round)) {\r\n                        // break endless loop\r\n                        return;\r\n                    }\r\n                }\r\n\r\n                // leave current\r\n                if (opt.$selected) {\r\n                    handle.itemMouseleave.call(opt.$selected.get(0), e);\r\n                }\r\n\r\n                // activate next\r\n                handle.itemMouseenter.call($prev.get(0), e);\r\n\r\n                // focus input\r\n                var $input = $prev.find('input, textarea, select');\r\n                if ($input.length) {\r\n                    $input.focus();\r\n                }\r\n            },\r\n            // select next possible command in menu\r\n            nextItem: function (e) {\r\n                e.stopPropagation();\r\n                var opt = $(this).data('contextMenu') || {};\r\n                var root = $(this).data('contextMenuRoot') || {};\r\n\r\n                // obtain currently selected menu\r\n                if (opt.$selected) {\r\n                    var $s = opt.$selected;\r\n                    opt = opt.$selected.parent().data('contextMenu') || {};\r\n                    opt.$selected = $s;\r\n                }\r\n\r\n                var $children = opt.$menu.children(),\r\n                    $next = !opt.$selected || !opt.$selected.next().length ? $children.first() : opt.$selected.next(),\r\n                    $round = $next;\r\n\r\n                // skip disabled\r\n                while ($next.hasClass(root.classNames.disabled) || $next.hasClass(root.classNames.notSelectable) || $next.is(':hidden')) {\r\n                    if ($next.next().length) {\r\n                        $next = $next.next();\r\n                    } else {\r\n                        $next = $children.first();\r\n                    }\r\n                    if ($next.is($round)) {\r\n                        // break endless loop\r\n                        return;\r\n                    }\r\n                }\r\n\r\n                // leave current\r\n                if (opt.$selected) {\r\n                    handle.itemMouseleave.call(opt.$selected.get(0), e);\r\n                }\r\n\r\n                // activate next\r\n                handle.itemMouseenter.call($next.get(0), e);\r\n\r\n                // focus input\r\n                var $input = $next.find('input, textarea, select');\r\n                if ($input.length) {\r\n                    $input.focus();\r\n                }\r\n            },\r\n            // flag that we're inside an input so the key handler can act accordingly\r\n            focusInput: function () {\r\n                var $this = $(this).closest('.context-menu-item'),\r\n                    data = $this.data(),\r\n                    opt = data.contextMenu,\r\n                    root = data.contextMenuRoot;\r\n\r\n                root.$selected = opt.$selected = $this;\r\n                root.isInput = opt.isInput = true;\r\n            },\r\n            // flag that we're inside an input so the key handler can act accordingly\r\n            blurInput: function () {\r\n                var $this = $(this).closest('.context-menu-item'),\r\n                    data = $this.data(),\r\n                    opt = data.contextMenu,\r\n                    root = data.contextMenuRoot;\r\n\r\n                root.isInput = opt.isInput = false;\r\n            },\r\n            // :hover on menu\r\n            menuMouseenter: function () {\r\n                var root = $(this).data().contextMenuRoot;\r\n                root.hovering = true;\r\n            },\r\n            // :hover on menu\r\n            menuMouseleave: function (e) {\r\n                var root = $(this).data().contextMenuRoot;\r\n                if (root.$layer && root.$layer.is(e.relatedTarget)) {\r\n                    root.hovering = false;\r\n                }\r\n            },\r\n            // :hover done manually so key handling is possible\r\n            itemMouseenter: function (e) {\r\n                var $this = $(this),\r\n                    data = $this.data(),\r\n                    opt = data.contextMenu,\r\n                    root = data.contextMenuRoot;\r\n\r\n                root.hovering = true;\r\n\r\n                // abort if we're re-entering\r\n                if (e && root.$layer && root.$layer.is(e.relatedTarget)) {\r\n                    e.preventDefault();\r\n                    e.stopImmediatePropagation();\r\n                }\r\n\r\n                // make sure only one item is selected\r\n                (opt.$menu ? opt : root).$menu\r\n                    .children('.' + root.classNames.hover).trigger('contextmenu:blur')\r\n                    .children('.hover').trigger('contextmenu:blur');\r\n\r\n                if ($this.hasClass(root.classNames.disabled) || $this.hasClass(root.classNames.notSelectable)) {\r\n                    opt.$selected = null;\r\n                    return;\r\n                }\r\n\r\n\r\n                $this.trigger('contextmenu:focus');\r\n            },\r\n            // :hover done manually so key handling is possible\r\n            itemMouseleave: function (e) {\r\n                var $this = $(this),\r\n                    data = $this.data(),\r\n                    opt = data.contextMenu,\r\n                    root = data.contextMenuRoot;\r\n\r\n                if (root !== opt && root.$layer && root.$layer.is(e.relatedTarget)) {\r\n                    if (typeof root.$selected !== 'undefined' && root.$selected !== null) {\r\n                        root.$selected.trigger('contextmenu:blur');\r\n                    }\r\n                    e.preventDefault();\r\n                    e.stopImmediatePropagation();\r\n                    root.$selected = opt.$selected = opt.$node;\r\n                    return;\r\n                }\r\n\r\n                if(opt && opt.$menu && opt.$menu.hasClass('context-menu-visible')){\r\n                    return;\r\n                }\r\n\r\n                $this.trigger('contextmenu:blur');\r\n            },\r\n            // contextMenu item click\r\n            itemClick: function (e) {\r\n                var $this = $(this),\r\n                    data = $this.data(),\r\n                    opt = data.contextMenu,\r\n                    root = data.contextMenuRoot,\r\n                    key = data.contextMenuKey,\r\n                    callback;\r\n\r\n                // abort if the key is unknown or disabled or is a menu\r\n                if (!opt.items[key] || $this.is('.' + root.classNames.disabled + ', .context-menu-separator, .' + root.classNames.notSelectable) || ($this.is('.context-menu-submenu') && root.selectableSubMenu === false )) {\r\n                    return;\r\n                }\r\n\r\n                e.preventDefault();\r\n                e.stopImmediatePropagation();\r\n\r\n                if ($.isFunction(opt.callbacks[key]) && Object.prototype.hasOwnProperty.call(opt.callbacks, key)) {\r\n                    // item-specific callback\r\n                    callback = opt.callbacks[key];\r\n                } else if ($.isFunction(root.callback)) {\r\n                    // default callback\r\n                    callback = root.callback;\r\n                } else {\r\n                    // no callback, no action\r\n                    return;\r\n                }\r\n\r\n                // hide menu if callback doesn't stop that\r\n                if (callback.call(root.$trigger, key, root) !== false) {\r\n                    root.$menu.trigger('contextmenu:hide');\r\n                } else if (root.$menu.parent().length) {\r\n                    op.update.call(root.$trigger, root);\r\n                }\r\n            },\r\n            // ignore click events on input elements\r\n            inputClick: function (e) {\r\n                e.stopImmediatePropagation();\r\n            },\r\n            // hide <menu>\r\n            hideMenu: function (e, data) {\r\n                var root = $(this).data('contextMenuRoot');\r\n                op.hide.call(root.$trigger, root, data && data.force);\r\n            },\r\n            // focus <command>\r\n            focusItem: function (e) {\r\n                e.stopPropagation();\r\n                var $this = $(this),\r\n                    data = $this.data(),\r\n                    opt = data.contextMenu,\r\n                    root = data.contextMenuRoot;\r\n\r\n                if ($this.hasClass(root.classNames.disabled) || $this.hasClass(root.classNames.notSelectable)) {\r\n                    return;\r\n                }\r\n\r\n                $this\r\n                    .addClass([root.classNames.hover, root.classNames.visible].join(' '))\r\n                    // select other items and included items\r\n                    .parent().find('.context-menu-item').not($this)\r\n                    .removeClass(root.classNames.visible)\r\n                    .filter('.' + root.classNames.hover)\r\n                    .trigger('contextmenu:blur');\r\n\r\n                // remember selected\r\n                opt.$selected = root.$selected = $this;\r\n\r\n\r\n                if(opt && opt.$node && opt.$node.hasClass('context-menu-submenu')){\r\n                    opt.$node.addClass(root.classNames.hover);\r\n                }\r\n\r\n                // position sub-menu - do after show so dumb $.ui.position can keep up\r\n                if (opt.$node) {\r\n                    root.positionSubmenu.call(opt.$node, opt.$menu);\r\n                }\r\n            },\r\n            // blur <command>\r\n            blurItem: function (e) {\r\n                e.stopPropagation();\r\n                var $this = $(this),\r\n                    data = $this.data(),\r\n                    opt = data.contextMenu,\r\n                    root = data.contextMenuRoot;\r\n\r\n                if (opt.autoHide) { // for tablets and touch screens this needs to remain\r\n                    $this.removeClass(root.classNames.visible);\r\n                }\r\n                $this.removeClass(root.classNames.hover);\r\n                opt.$selected = null;\r\n            }\r\n        },\r\n        // operations\r\n        op = {\r\n            show: function (opt, x, y) {\r\n                var $trigger = $(this),\r\n                    css = {};\r\n\r\n                // hide any open menus\r\n                $('#context-menu-layer').trigger('mousedown');\r\n\r\n                // backreference for callbacks\r\n                opt.$trigger = $trigger;\r\n\r\n                // show event\r\n                if (opt.events.show.call($trigger, opt) === false) {\r\n                    $currentTrigger = null;\r\n                    return;\r\n                }\r\n\r\n                // create or update context menu\r\n                op.update.call($trigger, opt);\r\n\r\n                // position menu\r\n                opt.position.call($trigger, opt, x, y);\r\n\r\n                // make sure we're in front\r\n                if (opt.zIndex) {\r\n                    var additionalZValue = opt.zIndex;\r\n                    // If opt.zIndex is a function, call the function to get the right zIndex.\r\n                    if (typeof opt.zIndex === 'function') {\r\n                        additionalZValue = opt.zIndex.call($trigger, opt);\r\n                    }\r\n                    css.zIndex = zindex($trigger) + additionalZValue;\r\n                }\r\n\r\n                // add layer\r\n                op.layer.call(opt.$menu, opt, css.zIndex);\r\n\r\n                // adjust sub-menu zIndexes\r\n                opt.$menu.find('ul').css('zIndex', css.zIndex + 1);\r\n\r\n                // position and show context menu\r\n                opt.$menu.css(css)[opt.animation.show](opt.animation.duration, function () {\r\n                    $trigger.trigger('contextmenu:visible');\r\n                });\r\n                // make options available and set state\r\n                $trigger\r\n                    .data('contextMenu', opt)\r\n                    .addClass('context-menu-active');\r\n\r\n                // register key handler\r\n                $(document).off('keydown.contextMenu').on('keydown.contextMenu', handle.key);\r\n                // register autoHide handler\r\n                if (opt.autoHide) {\r\n                    // mouse position handler\r\n                    $(document).on('mousemove.contextMenuAutoHide', function (e) {\r\n                        // need to capture the offset on mousemove,\r\n                        // since the page might've been scrolled since activation\r\n                        var pos = $trigger.offset();\r\n                        pos.right = pos.left + $trigger.outerWidth();\r\n                        pos.bottom = pos.top + $trigger.outerHeight();\r\n\r\n                        if (opt.$layer && !opt.hovering && (!(e.pageX >= pos.left && e.pageX <= pos.right) || !(e.pageY >= pos.top && e.pageY <= pos.bottom))) {\r\n                            /* Additional hover check after short time, you might just miss the edge of the menu */\r\n                            setTimeout(function () {\r\n                                if (!opt.hovering && opt.$menu !== null && typeof opt.$menu !== 'undefined') {\r\n                                    opt.$menu.trigger('contextmenu:hide');\r\n                                }\r\n                            }, 50);\r\n                        }\r\n                    });\r\n                }\r\n            },\r\n            hide: function (opt, force) {\r\n                var $trigger = $(this);\r\n                if (!opt) {\r\n                    opt = $trigger.data('contextMenu') || {};\r\n                }\r\n\r\n                // hide event\r\n                if (!force && opt.events && opt.events.hide.call($trigger, opt) === false) {\r\n                    return;\r\n                }\r\n\r\n                // remove options and revert state\r\n                $trigger\r\n                    .removeData('contextMenu')\r\n                    .removeClass('context-menu-active');\r\n\r\n                if (opt.$layer) {\r\n                    // keep layer for a bit so the contextmenu event can be aborted properly by opera\r\n                    setTimeout((function ($layer) {\r\n                        return function () {\r\n                            $layer.remove();\r\n                        };\r\n                    })(opt.$layer), 10);\r\n\r\n                    try {\r\n                        delete opt.$layer;\r\n                    } catch (e) {\r\n                        opt.$layer = null;\r\n                    }\r\n                }\r\n\r\n                // remove handle\r\n                $currentTrigger = null;\r\n                // remove selected\r\n                opt.$menu.find('.' + opt.classNames.hover).trigger('contextmenu:blur');\r\n                opt.$selected = null;\r\n                // collapse all submenus\r\n                opt.$menu.find('.' + opt.classNames.visible).removeClass(opt.classNames.visible);\r\n                // unregister key and mouse handlers\r\n                // $(document).off('.contextMenuAutoHide keydown.contextMenu'); // http://bugs.jquery.com/ticket/10705\r\n                $(document).off('.contextMenuAutoHide').off('keydown.contextMenu');\r\n                // hide menu\r\n                if (opt.$menu) {\r\n                    opt.$menu[opt.animation.hide](opt.animation.duration, function () {\r\n                        // tear down dynamically built menu after animation is completed.\r\n                        if (opt.build) {\r\n                            opt.$menu.remove();\r\n                            $.each(opt, function (key) {\r\n                                switch (key) {\r\n                                    case 'ns':\r\n                                    case 'selector':\r\n                                    case 'build':\r\n                                    case 'trigger':\r\n                                        return true;\r\n\r\n                                    default:\r\n                                        opt[key] = undefined;\r\n                                        try {\r\n                                            delete opt[key];\r\n                                        } catch (e) {\r\n                                        }\r\n                                        return true;\r\n                                }\r\n                            });\r\n                        }\r\n\r\n                        setTimeout(function () {\r\n                            $trigger.trigger('contextmenu:hidden');\r\n                        }, 10);\r\n                    });\r\n                }\r\n            },\r\n            create: function (opt, root) {\r\n                if (typeof root === 'undefined') {\r\n                    root = opt;\r\n                }\r\n\r\n                // create contextMenu\r\n                opt.$menu = $('<ul class=\"context-menu-list\"></ul>').addClass(opt.className || '').data({\r\n                    'contextMenu': opt,\r\n                    'contextMenuRoot': root\r\n                });\r\n\r\n                $.each(['callbacks', 'commands', 'inputs'], function (i, k) {\r\n                    opt[k] = {};\r\n                    if (!root[k]) {\r\n                        root[k] = {};\r\n                    }\r\n                });\r\n\r\n                if (!root.accesskeys) {\r\n                    root.accesskeys = {};\r\n                }\r\n\r\n                function createNameNode(item) {\r\n                    var $name = $('<span></span>');\r\n                    if (item._accesskey) {\r\n                        if (item._beforeAccesskey) {\r\n                            $name.append(document.createTextNode(item._beforeAccesskey));\r\n                        }\r\n                        $('<span></span>')\r\n                            .addClass('context-menu-accesskey')\r\n                            .text(item._accesskey)\r\n                            .appendTo($name);\r\n                        if (item._afterAccesskey) {\r\n                            $name.append(document.createTextNode(item._afterAccesskey));\r\n                        }\r\n                    } else {\r\n                        if (item.isHtmlName) {\r\n                            // restrict use with access keys\r\n                            if (typeof item.accesskey !== 'undefined') {\r\n                                throw new Error('accesskeys are not compatible with HTML names and cannot be used together in the same item');\r\n                            }\r\n                            $name.html(item.name);\r\n                        } else {\r\n                            $name.text(item.name);\r\n                        }\r\n                    }\r\n                    return $name;\r\n                }\r\n\r\n                // create contextMenu items\r\n                $.each(opt.items, function (key, item) {\r\n                    var $t = $('<li class=\"context-menu-item\"></li>').addClass(item.className || ''),\r\n                        $label = null,\r\n                        $input = null;\r\n\r\n                    // iOS needs to see a click-event bound to an element to actually\r\n                    // have the TouchEvents infrastructure trigger the click event\r\n                    $t.on('click', $.noop);\r\n\r\n                    // Make old school string seperator a real item so checks wont be\r\n                    // akward later.\r\n                    // And normalize 'cm_separator' into 'cm_seperator'.\r\n                    if (typeof item === 'string' || item.type === 'cm_separator') {\r\n                        item = {type: 'cm_seperator'};\r\n                    }\r\n\r\n                    item.$node = $t.data({\r\n                        'contextMenu': opt,\r\n                        'contextMenuRoot': root,\r\n                        'contextMenuKey': key\r\n                    });\r\n\r\n                    // register accesskey\r\n                    // NOTE: the accesskey attribute should be applicable to any element, but Safari5 and Chrome13 still can't do that\r\n                    if (typeof item.accesskey !== 'undefined') {\r\n                        var aks = splitAccesskey(item.accesskey);\r\n                        for (var i = 0, ak; ak = aks[i]; i++) {\r\n                            if (!root.accesskeys[ak]) {\r\n                                root.accesskeys[ak] = item;\r\n                                var matched = item.name.match(new RegExp('^(.*?)(' + ak + ')(.*)$', 'i'));\r\n                                if (matched) {\r\n                                    item._beforeAccesskey = matched[1];\r\n                                    item._accesskey = matched[2];\r\n                                    item._afterAccesskey = matched[3];\r\n                                }\r\n                                break;\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    if (item.type && types[item.type]) {\r\n                        // run custom type handler\r\n                        types[item.type].call($t, item, opt, root);\r\n                        // register commands\r\n                        $.each([opt, root], function (i, k) {\r\n                            k.commands[key] = item;\r\n                            // Overwrite only if undefined or the item is appended to the root. This so it\r\n                            // doesn't overwrite callbacks of root elements if the name is the same.\r\n                            if ($.isFunction(item.callback) && (typeof k.callbacks[key] === 'undefined' || typeof opt.type === 'undefined')) {\r\n                                k.callbacks[key] = item.callback;\r\n                            }\r\n                        });\r\n                    } else {\r\n                        // add label for input\r\n                        if (item.type === 'cm_seperator') {\r\n                            $t.addClass('context-menu-separator ' + root.classNames.notSelectable);\r\n                        } else if (item.type === 'html') {\r\n                            $t.addClass('context-menu-html ' + root.classNames.notSelectable);\r\n                        } else if (item.type === 'sub') {\r\n                            // We don't want to execute the next else-if if it is a sub.\r\n                        } else if (item.type) {\r\n                            $label = $('<label></label>').appendTo($t);\r\n                            createNameNode(item).appendTo($label);\r\n\r\n                            $t.addClass('context-menu-input');\r\n                            opt.hasTypes = true;\r\n                            $.each([opt, root], function (i, k) {\r\n                                k.commands[key] = item;\r\n                                k.inputs[key] = item;\r\n                            });\r\n                        } else if (item.items) {\r\n                            item.type = 'sub';\r\n                        }\r\n\r\n                        switch (item.type) {\r\n                            case 'cm_seperator':\r\n                                break;\r\n\r\n                            case 'text':\r\n                                $input = $('<input type=\"text\" value=\"1\" name=\"\" />')\r\n                                    .attr('name', 'context-menu-input-' + key)\r\n                                    .val(item.value || '')\r\n                                    .appendTo($label);\r\n                                break;\r\n\r\n                            case 'textarea':\r\n                                $input = $('<textarea name=\"\"></textarea>')\r\n                                    .attr('name', 'context-menu-input-' + key)\r\n                                    .val(item.value || '')\r\n                                    .appendTo($label);\r\n\r\n                                if (item.height) {\r\n                                    $input.height(item.height);\r\n                                }\r\n                                break;\r\n\r\n                            case 'checkbox':\r\n                                $input = $('<input type=\"checkbox\" value=\"1\" name=\"\" />')\r\n                                    .attr('name', 'context-menu-input-' + key)\r\n                                    .val(item.value || '')\r\n                                    .prop('checked', !!item.selected)\r\n                                    .prependTo($label);\r\n                                break;\r\n\r\n                            case 'radio':\r\n                                $input = $('<input type=\"radio\" value=\"1\" name=\"\" />')\r\n                                    .attr('name', 'context-menu-input-' + item.radio)\r\n                                    .val(item.value || '')\r\n                                    .prop('checked', !!item.selected)\r\n                                    .prependTo($label);\r\n                                break;\r\n\r\n                            case 'select':\r\n                                $input = $('<select name=\"\"></select>')\r\n                                    .attr('name', 'context-menu-input-' + key)\r\n                                    .appendTo($label);\r\n                                if (item.options) {\r\n                                    $.each(item.options, function (value, text) {\r\n                                        $('<option></option>').val(value).text(text).appendTo($input);\r\n                                    });\r\n                                    $input.val(item.selected);\r\n                                }\r\n                                break;\r\n\r\n                            case 'sub':\r\n                                createNameNode(item).appendTo($t);\r\n                                item.appendTo = item.$node;\r\n                                $t.data('contextMenu', item).addClass('context-menu-submenu');\r\n                                item.callback = null;\r\n\r\n                                // If item contains items, and this is a promise, we should create it later\r\n                                // check if subitems is of type promise. If it is a promise we need to create\r\n                                // it later, after promise has been resolved.\r\n                                if ('function' === typeof item.items.then) {\r\n                                    // probably a promise, process it, when completed it will create the sub menu's.\r\n                                    op.processPromises(item, root, item.items);\r\n                                } else {\r\n                                    // normal submenu.\r\n                                    op.create(item, root);\r\n                                }\r\n                                break;\r\n\r\n                            case 'html':\r\n                                $(item.html).appendTo($t);\r\n                                break;\r\n\r\n                            default:\r\n                                $.each([opt, root], function (i, k) {\r\n                                    k.commands[key] = item;\r\n                                    // Overwrite only if undefined or the item is appended to the root. This so it\r\n                                    // doesn't overwrite callbacks of root elements if the name is the same.\r\n                                    if ($.isFunction(item.callback) && (typeof k.callbacks[key] === 'undefined' || typeof opt.type === 'undefined')) {\r\n                                        k.callbacks[key] = item.callback;\r\n                                    }\r\n                                });\r\n                                createNameNode(item).appendTo($t);\r\n                                break;\r\n                        }\r\n\r\n                        // disable key listener in <input>\r\n                        if (item.type && item.type !== 'sub' && item.type !== 'html' && item.type !== 'cm_seperator') {\r\n                            $input\r\n                                .on('focus', handle.focusInput)\r\n                                .on('blur', handle.blurInput);\r\n\r\n                            if (item.events) {\r\n                                $input.on(item.events, opt);\r\n                            }\r\n                        }\r\n\r\n                        // add icons\r\n                        if (item.icon) {\r\n                            if ($.isFunction(item.icon)) {\r\n                                item._icon = item.icon.call(this, this, $t, key, item);\r\n                            } else {\r\n                                if (typeof(item.icon) === 'string' && item.icon.substring(0, 3) === 'fa-') {\r\n                                    // to enable font awesome\r\n                                    item._icon = root.classNames.icon + ' ' + root.classNames.icon + '--fa fa ' + item.icon;\r\n                                } else {\r\n                                    item._icon = root.classNames.icon + ' ' + root.classNames.icon + '-' + item.icon;\r\n                                }\r\n                            }\r\n                            $t.addClass(item._icon);\r\n                        }\r\n                    }\r\n\r\n                    // cache contained elements\r\n                    item.$input = $input;\r\n                    item.$label = $label;\r\n\r\n                    // attach item to menu\r\n                    $t.appendTo(opt.$menu);\r\n\r\n                    // Disable text selection\r\n                    if (!opt.hasTypes && $.support.eventSelectstart) {\r\n                        // browsers support user-select: none,\r\n                        // IE has a special event for text-selection\r\n                        // browsers supporting neither will not be preventing text-selection\r\n                        $t.on('selectstart.disableTextSelect', handle.abortevent);\r\n                    }\r\n                });\r\n                // attach contextMenu to <body> (to bypass any possible overflow:hidden issues on parents of the trigger element)\r\n                if (!opt.$node) {\r\n                    opt.$menu.css('display', 'none').addClass('context-menu-root');\r\n                }\r\n                opt.$menu.appendTo(opt.appendTo || document.body);\r\n            },\r\n            resize: function ($menu, nested) {\r\n                var domMenu;\r\n                // determine widths of submenus, as CSS won't grow them automatically\r\n                // position:absolute within position:absolute; min-width:100; max-width:200; results in width: 100;\r\n                // kinda sucks hard...\r\n\r\n                // determine width of absolutely positioned element\r\n                $menu.css({position: 'absolute', display: 'block'});\r\n                // don't apply yet, because that would break nested elements' widths\r\n                $menu.data('width',\r\n                    (domMenu = $menu.get(0)).getBoundingClientRect ?\r\n                        Math.ceil(domMenu.getBoundingClientRect().width) :\r\n                        $menu.outerWidth() + 1); // outerWidth() returns rounded pixels\r\n                // reset styles so they allow nested elements to grow/shrink naturally\r\n                $menu.css({\r\n                    position: 'static',\r\n                    minWidth: '0px',\r\n                    maxWidth: '100000px'\r\n                });\r\n                // identify width of nested menus\r\n                $menu.find('> li > ul').each(function () {\r\n                    op.resize($(this), true);\r\n                });\r\n                // reset and apply changes in the end because nested\r\n                // elements' widths wouldn't be calculatable otherwise\r\n                if (!nested) {\r\n                    $menu.find('ul').addBack().css({\r\n                        position: '',\r\n                        display: '',\r\n                        minWidth: '',\r\n                        maxWidth: ''\r\n                    }).outerWidth(function () {\r\n                        return $(this).data('width');\r\n                    });\r\n                }\r\n            },\r\n            update: function (opt, root) {\r\n                var $trigger = this;\r\n                if (typeof root === 'undefined') {\r\n                    root = opt;\r\n                    op.resize(opt.$menu);\r\n                }\r\n                // re-check disabled for each item\r\n                opt.$menu.children().each(function () {\r\n                    var $item = $(this),\r\n                        key = $item.data('contextMenuKey'),\r\n                        item = opt.items[key],\r\n                        disabled = ($.isFunction(item.disabled) && item.disabled.call($trigger, key, root)) || item.disabled === true,\r\n                        visible;\r\n                    if ($.isFunction(item.visible)) {\r\n                        visible = item.visible.call($trigger, key, root);\r\n                    } else if (typeof item.visible !== 'undefined') {\r\n                        visible = item.visible === true;\r\n                    } else {\r\n                        visible = true;\r\n                    }\r\n                    $item[visible ? 'show' : 'hide']();\r\n\r\n                    // dis- / enable item\r\n                    $item[disabled ? 'addClass' : 'removeClass'](root.classNames.disabled);\r\n\r\n                    if ($.isFunction(item.icon)) {\r\n                        $item.removeClass(item._icon);\r\n                        item._icon = item.icon.call(this, $trigger, $item, key, item);\r\n                        $item.addClass(item._icon);\r\n                    }\r\n\r\n                    if (item.type) {\r\n                        // dis- / enable input elements\r\n                        $item.find('input, select, textarea').prop('disabled', disabled);\r\n\r\n                        // update input states\r\n                        switch (item.type) {\r\n                            case 'text':\r\n                            case 'textarea':\r\n                                item.$input.val(item.value || '');\r\n                                break;\r\n\r\n                            case 'checkbox':\r\n                            case 'radio':\r\n                                item.$input.val(item.value || '').prop('checked', !!item.selected);\r\n                                break;\r\n\r\n                            case 'select':\r\n                                item.$input.val((item.selected === 0 ? \"0\" : item.selected) || '');\r\n                                break;\r\n                        }\r\n                    }\r\n\r\n                    if (item.$menu) {\r\n                        // update sub-menu\r\n                        op.update.call($trigger, item, root);\r\n                    }\r\n                });\r\n            },\r\n            layer: function (opt, zIndex) {\r\n                // add transparent layer for click area\r\n                // filter and background for Internet Explorer, Issue #23\r\n                var $layer = opt.$layer = $('<div id=\"context-menu-layer\"></div>')\r\n                    .css({\r\n                        height: $win.height(),\r\n                        width: $win.width(),\r\n                        display: 'block',\r\n                        position: 'fixed',\r\n                        'z-index': zIndex,\r\n                        top: 0,\r\n                        left: 0,\r\n                        opacity: 0,\r\n                        filter: 'alpha(opacity=0)',\r\n                        'background-color': '#000'\r\n                    })\r\n                    .data('contextMenuRoot', opt)\r\n                    .insertBefore(this)\r\n                    .on('contextmenu', handle.abortevent)\r\n                    .on('mousedown', handle.layerClick);\r\n\r\n                // IE6 doesn't know position:fixed;\r\n                if (typeof document.body.style.maxWidth === 'undefined') { // IE6 doesn't support maxWidth\r\n                    $layer.css({\r\n                        'position': 'absolute',\r\n                        'height': $(document).height()\r\n                    });\r\n                }\r\n\r\n                return $layer;\r\n            },\r\n            processPromises: function (opt, root, promise) {\r\n                // Start\r\n                opt.$node.addClass(root.classNames.iconLoadingClass);\r\n\r\n                function completedPromise(opt, root, items) {\r\n                    // Completed promise (dev called promise.resolve). We now have a list of items which can\r\n                    // be used to create the rest of the context menu.\r\n                    if (typeof items === 'undefined') {\r\n                        // Null result, dev should have checked\r\n                        errorPromise(undefined);//own error object\r\n                    }\r\n                    finishPromiseProcess(opt, root, items);\r\n                }\r\n\r\n                function errorPromise(opt, root, errorItem) {\r\n                    // User called promise.reject() with an error item, if not, provide own error item.\r\n                    if (typeof errorItem === 'undefined') {\r\n                        errorItem = {\r\n                            \"error\": {\r\n                                name: \"No items and no error item\",\r\n                                icon: \"context-menu-icon context-menu-icon-quit\"\r\n                            }\r\n                        };\r\n                        if (window.console) {\r\n                            (console.error || console.log).call(console, 'When you reject a promise, provide an \"items\" object, equal to normal sub-menu items');\r\n                        }\r\n                    } else if (typeof errorItem === 'string') {\r\n                        errorItem = {\"error\": {name: errorItem}};\r\n                    }\r\n                    finishPromiseProcess(opt, root, errorItem);\r\n                }\r\n\r\n                function finishPromiseProcess(opt, root, items) {\r\n                    if (typeof root.$menu === 'undefined' || !root.$menu.is(':visible')) {\r\n                        return;\r\n                    }\r\n                    opt.$node.removeClass(root.classNames.iconLoadingClass);\r\n                    opt.items = items;\r\n                    op.create(opt, root, true); // Create submenu\r\n                    op.update(opt, root); // Correctly update position if user is already hovered over menu item\r\n                    root.positionSubmenu.call(opt.$node, opt.$menu); // positionSubmenu, will only do anything if user already hovered over menu item that just got new subitems.\r\n                }\r\n\r\n                // Wait for promise completion. .then(success, error, notify) (we don't track notify). Bind the opt\r\n                // and root to avoid scope problems\r\n                promise.then(completedPromise.bind(this, opt, root), errorPromise.bind(this, opt, root));\r\n            }\r\n        };\r\n\r\n    // split accesskey according to http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#assigned-access-key\r\n    function splitAccesskey(val) {\r\n        var t = val.split(/\\s+/);\r\n        var keys = [];\r\n\r\n        for (var i = 0, k; k = t[i]; i++) {\r\n            k = k.charAt(0).toUpperCase(); // first character only\r\n            // theoretically non-accessible characters should be ignored, but different systems, different keyboard layouts, ... screw it.\r\n            // a map to look up already used access keys would be nice\r\n            keys.push(k);\r\n        }\r\n\r\n        return keys;\r\n    }\r\n\r\n// handle contextMenu triggers\r\n    $.fn.contextMenu = function (operation) {\r\n        var $t = this, $o = operation;\r\n        if (this.length > 0) {  // this is not a build on demand menu\r\n            if (typeof operation === 'undefined') {\r\n                this.first().trigger('contextmenu');\r\n            } else if (typeof operation.x !== 'undefined' && typeof operation.y !== 'undefined') {\r\n                this.first().trigger($.Event('contextmenu', {\r\n                    pageX: operation.x,\r\n                    pageY: operation.y,\r\n                    mouseButton: operation.button\r\n                }));\r\n            } else if (operation === 'hide') {\r\n                var $menu = this.first().data('contextMenu') ? this.first().data('contextMenu').$menu : null;\r\n                if ($menu) {\r\n                    $menu.trigger('contextmenu:hide');\r\n                }\r\n            } else if (operation === 'destroy') {\r\n                $.contextMenu('destroy', {context: this});\r\n            } else if ($.isPlainObject(operation)) {\r\n                operation.context = this;\r\n                $.contextMenu('create', operation);\r\n            } else if (operation) {\r\n                this.removeClass('context-menu-disabled');\r\n            } else if (!operation) {\r\n                this.addClass('context-menu-disabled');\r\n            }\r\n        } else {\r\n            $.each(menus, function () {\r\n                if (this.selector === $t.selector) {\r\n                    $o.data = this;\r\n\r\n                    $.extend($o.data, {trigger: 'demand'});\r\n                }\r\n            });\r\n\r\n            handle.contextmenu.call($o.target, $o);\r\n        }\r\n\r\n        return this;\r\n    };\r\n\r\n    // manage contextMenu instances\r\n    $.contextMenu = function (operation, options) {\r\n        if (typeof operation !== 'string') {\r\n            options = operation;\r\n            operation = 'create';\r\n        }\r\n\r\n        if (typeof options === 'string') {\r\n            options = {selector: options};\r\n        } else if (typeof options === 'undefined') {\r\n            options = {};\r\n        }\r\n\r\n        // merge with default options\r\n        var o = $.extend(true, {}, defaults, options || {});\r\n        var $document = $(document);\r\n        var $context = $document;\r\n        var _hasContext = false;\r\n\r\n        if (!o.context || !o.context.length) {\r\n            o.context = document;\r\n        } else {\r\n            // you never know what they throw at you...\r\n            $context = $(o.context).first();\r\n            o.context = $context.get(0);\r\n            _hasContext = !$(o.context).is(document);\r\n        }\r\n\r\n        switch (operation) {\r\n            case 'create':\r\n                // no selector no joy\r\n                if (!o.selector) {\r\n                    throw new Error('No selector specified');\r\n                }\r\n                // make sure internal classes are not bound to\r\n                if (o.selector.match(/.context-menu-(list|item|input)($|\\s)/)) {\r\n                    throw new Error('Cannot bind to selector \"' + o.selector + '\" as it contains a reserved className');\r\n                }\r\n                if (!o.build && (!o.items || $.isEmptyObject(o.items))) {\r\n                    throw new Error('No Items specified');\r\n                }\r\n                counter++;\r\n                o.ns = '.contextMenu' + counter;\r\n                if (!_hasContext) {\r\n                    namespaces[o.selector] = o.ns;\r\n                }\r\n                menus[o.ns] = o;\r\n\r\n                // default to right click\r\n                if (!o.trigger) {\r\n                    o.trigger = 'right';\r\n                }\r\n\r\n                if (!initialized) {\r\n                    var itemClick = o.itemClickEvent === 'click' ? 'click.contextMenu' : 'mouseup.contextMenu';\r\n                    var contextMenuItemObj = {\r\n                        // 'mouseup.contextMenu': handle.itemClick,\r\n                        // 'click.contextMenu': handle.itemClick,\r\n                        'contextmenu:focus.contextMenu': handle.focusItem,\r\n                        'contextmenu:blur.contextMenu': handle.blurItem,\r\n                        'contextmenu.contextMenu': handle.abortevent,\r\n                        'mouseenter.contextMenu': handle.itemMouseenter,\r\n                        'mouseleave.contextMenu': handle.itemMouseleave\r\n                    };\r\n                    contextMenuItemObj[itemClick] = handle.itemClick;\r\n                    // make sure item click is registered first\r\n                    $document\r\n                        .on({\r\n                            'contextmenu:hide.contextMenu': handle.hideMenu,\r\n                            'prevcommand.contextMenu': handle.prevItem,\r\n                            'nextcommand.contextMenu': handle.nextItem,\r\n                            'contextmenu.contextMenu': handle.abortevent,\r\n                            'mouseenter.contextMenu': handle.menuMouseenter,\r\n                            'mouseleave.contextMenu': handle.menuMouseleave\r\n                        }, '.context-menu-list')\r\n                        .on('mouseup.contextMenu', '.context-menu-input', handle.inputClick)\r\n                        .on(contextMenuItemObj, '.context-menu-item');\r\n\r\n                    initialized = true;\r\n                }\r\n\r\n                // engage native contextmenu event\r\n                $context\r\n                    .on('contextmenu' + o.ns, o.selector, o, handle.contextmenu);\r\n\r\n                if (_hasContext) {\r\n                    // add remove hook, just in case\r\n                    $context.on('remove' + o.ns, function () {\r\n                        $(this).contextMenu('destroy');\r\n                    });\r\n                }\r\n\r\n                switch (o.trigger) {\r\n                    case 'hover':\r\n                        $context\r\n                            .on('mouseenter' + o.ns, o.selector, o, handle.mouseenter)\r\n                            .on('mouseleave' + o.ns, o.selector, o, handle.mouseleave);\r\n                        break;\r\n\r\n                    case 'left':\r\n                        $context.on('click' + o.ns, o.selector, o, handle.click);\r\n                        break;\r\n                    /*\r\n                     default:\r\n                     // http://www.quirksmode.org/dom/events/contextmenu.html\r\n                     $document\r\n                     .on('mousedown' + o.ns, o.selector, o, handle.mousedown)\r\n                     .on('mouseup' + o.ns, o.selector, o, handle.mouseup);\r\n                     break;\r\n                     */\r\n                }\r\n\r\n                // create menu\r\n                if (!o.build) {\r\n                    op.create(o);\r\n                }\r\n                break;\r\n\r\n            case 'destroy':\r\n                var $visibleMenu;\r\n                if (_hasContext) {\r\n                    // get proper options\r\n                    var context = o.context;\r\n                    $.each(menus, function (ns, o) {\r\n\r\n                        if (!o) {\r\n                            return true;\r\n                        }\r\n\r\n                        // Is this menu equest to the context called from\r\n                        if (!$(context).is(o.selector)) {\r\n                            return true;\r\n                        }\r\n\r\n                        $visibleMenu = $('.context-menu-list').filter(':visible');\r\n                        if ($visibleMenu.length && $visibleMenu.data().contextMenuRoot.$trigger.is($(o.context).find(o.selector))) {\r\n                            $visibleMenu.trigger('contextmenu:hide', {force: true});\r\n                        }\r\n\r\n                        try {\r\n                            if (menus[o.ns].$menu) {\r\n                                menus[o.ns].$menu.remove();\r\n                            }\r\n\r\n                            delete menus[o.ns];\r\n                        } catch (e) {\r\n                            menus[o.ns] = null;\r\n                        }\r\n\r\n                        $(o.context).off(o.ns);\r\n\r\n                        return true;\r\n                    });\r\n                } else if (!o.selector) {\r\n                    $document.off('.contextMenu .contextMenuAutoHide');\r\n                    $.each(menus, function (ns, o) {\r\n                        $(o.context).off(o.ns);\r\n                    });\r\n\r\n                    namespaces = {};\r\n                    menus = {};\r\n                    counter = 0;\r\n                    initialized = false;\r\n\r\n                    $('#context-menu-layer, .context-menu-list').remove();\r\n                } else if (namespaces[o.selector]) {\r\n                    $visibleMenu = $('.context-menu-list').filter(':visible');\r\n                    if ($visibleMenu.length && $visibleMenu.data().contextMenuRoot.$trigger.is(o.selector)) {\r\n                        $visibleMenu.trigger('contextmenu:hide', {force: true});\r\n                    }\r\n\r\n                    try {\r\n                        if (menus[namespaces[o.selector]].$menu) {\r\n                            menus[namespaces[o.selector]].$menu.remove();\r\n                        }\r\n\r\n                        delete menus[namespaces[o.selector]];\r\n                    } catch (e) {\r\n                        menus[namespaces[o.selector]] = null;\r\n                    }\r\n\r\n                    $document.off(namespaces[o.selector]);\r\n                }\r\n                break;\r\n\r\n            case 'html5':\r\n                // if <command> or <menuitem> are not handled by the browser,\r\n                // or options was a bool true,\r\n                // initialize $.contextMenu for them\r\n                if ((!$.support.htmlCommand && !$.support.htmlMenuitem) || (typeof options === 'boolean' && options)) {\r\n                    $('menu[type=\"context\"]').each(function () {\r\n                        if (this.id) {\r\n                            $.contextMenu({\r\n                                selector: '[contextmenu=' + this.id + ']',\r\n                                items: $.contextMenu.fromMenu(this)\r\n                            });\r\n                        }\r\n                    }).css('display', 'none');\r\n                }\r\n                break;\r\n\r\n            default:\r\n                throw new Error('Unknown operation \"' + operation + '\"');\r\n        }\r\n\r\n        return this;\r\n    };\r\n\r\n// import values into <input> commands\r\n    $.contextMenu.setInputValues = function (opt, data) {\r\n        if (typeof data === 'undefined') {\r\n            data = {};\r\n        }\r\n\r\n        $.each(opt.inputs, function (key, item) {\r\n            switch (item.type) {\r\n                case 'text':\r\n                case 'textarea':\r\n                    item.value = data[key] || '';\r\n                    break;\r\n\r\n                case 'checkbox':\r\n                    item.selected = data[key] ? true : false;\r\n                    break;\r\n\r\n                case 'radio':\r\n                    item.selected = (data[item.radio] || '') === item.value;\r\n                    break;\r\n\r\n                case 'select':\r\n                    item.selected = data[key] || '';\r\n                    break;\r\n            }\r\n        });\r\n    };\r\n\r\n// export values from <input> commands\r\n    $.contextMenu.getInputValues = function (opt, data) {\r\n        if (typeof data === 'undefined') {\r\n            data = {};\r\n        }\r\n\r\n        $.each(opt.inputs, function (key, item) {\r\n            switch (item.type) {\r\n                case 'text':\r\n                case 'textarea':\r\n                case 'select':\r\n                    data[key] = item.$input.val();\r\n                    break;\r\n\r\n                case 'checkbox':\r\n                    data[key] = item.$input.prop('checked');\r\n                    break;\r\n\r\n                case 'radio':\r\n                    if (item.$input.prop('checked')) {\r\n                        data[item.radio] = item.value;\r\n                    }\r\n                    break;\r\n            }\r\n        });\r\n\r\n        return data;\r\n    };\r\n\r\n// find <label for=\"xyz\">\r\n    function inputLabel(node) {\r\n        return (node.id && $('label[for=\"' + node.id + '\"]').val()) || node.name;\r\n    }\r\n\r\n// convert <menu> to items object\r\n    function menuChildren(items, $children, counter) {\r\n        if (!counter) {\r\n            counter = 0;\r\n        }\r\n\r\n        $children.each(function () {\r\n            var $node = $(this),\r\n                node = this,\r\n                nodeName = this.nodeName.toLowerCase(),\r\n                label,\r\n                item;\r\n\r\n            // extract <label><input>\r\n            if (nodeName === 'label' && $node.find('input, textarea, select').length) {\r\n                label = $node.text();\r\n                $node = $node.children().first();\r\n                node = $node.get(0);\r\n                nodeName = node.nodeName.toLowerCase();\r\n            }\r\n\r\n            /*\r\n             * <menu> accepts flow-content as children. that means <embed>, <canvas> and such are valid menu items.\r\n             * Not being the sadistic kind, $.contextMenu only accepts:\r\n             * <command>, <menuitem>, <hr>, <span>, <p> <input [text, radio, checkbox]>, <textarea>, <select> and of course <menu>.\r\n             * Everything else will be imported as an html node, which is not interfaced with contextMenu.\r\n             */\r\n\r\n            // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#concept-command\r\n            switch (nodeName) {\r\n                // http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#the-menu-element\r\n                case 'menu':\r\n                    item = {name: $node.attr('label'), items: {}};\r\n                    counter = menuChildren(item.items, $node.children(), counter);\r\n                    break;\r\n\r\n                // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#using-the-a-element-to-define-a-command\r\n                case 'a':\r\n                // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#using-the-button-element-to-define-a-command\r\n                case 'button':\r\n                    item = {\r\n                        name: $node.text(),\r\n                        disabled: !!$node.attr('disabled'),\r\n                        callback: (function () {\r\n                            return function () {\r\n                                $node.get(0).click()\r\n                            };\r\n                        })()\r\n                    };\r\n                    break;\r\n\r\n                // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#using-the-command-element-to-define-a-command\r\n                case 'menuitem':\r\n                case 'command':\r\n                    switch ($node.attr('type')) {\r\n                        case undefined:\r\n                        case 'command':\r\n                        case 'menuitem':\r\n                            item = {\r\n                                name: $node.attr('label'),\r\n                                disabled: !!$node.attr('disabled'),\r\n                                icon: $node.attr('icon'),\r\n                                callback: (function () {\r\n                                    return function () {\r\n                                        $node.get(0).click()\r\n                                    };\r\n                                })()\r\n                            };\r\n                            break;\r\n\r\n                        case 'checkbox':\r\n                            item = {\r\n                                type: 'checkbox',\r\n                                disabled: !!$node.attr('disabled'),\r\n                                name: $node.attr('label'),\r\n                                selected: !!$node.attr('checked')\r\n                            };\r\n                            break;\r\n                        case 'radio':\r\n                            item = {\r\n                                type: 'radio',\r\n                                disabled: !!$node.attr('disabled'),\r\n                                name: $node.attr('label'),\r\n                                radio: $node.attr('radiogroup'),\r\n                                value: $node.attr('id'),\r\n                                selected: !!$node.attr('checked')\r\n                            };\r\n                            break;\r\n\r\n                        default:\r\n                            item = undefined;\r\n                    }\r\n                    break;\r\n\r\n                case 'hr':\r\n                    item = '-------';\r\n                    break;\r\n\r\n                case 'input':\r\n                    switch ($node.attr('type')) {\r\n                        case 'text':\r\n                            item = {\r\n                                type: 'text',\r\n                                name: label || inputLabel(node),\r\n                                disabled: !!$node.attr('disabled'),\r\n                                value: $node.val()\r\n                            };\r\n                            break;\r\n\r\n                        case 'checkbox':\r\n                            item = {\r\n                                type: 'checkbox',\r\n                                name: label || inputLabel(node),\r\n                                disabled: !!$node.attr('disabled'),\r\n                                selected: !!$node.attr('checked')\r\n                            };\r\n                            break;\r\n\r\n                        case 'radio':\r\n                            item = {\r\n                                type: 'radio',\r\n                                name: label || inputLabel(node),\r\n                                disabled: !!$node.attr('disabled'),\r\n                                radio: !!$node.attr('name'),\r\n                                value: $node.val(),\r\n                                selected: !!$node.attr('checked')\r\n                            };\r\n                            break;\r\n\r\n                        default:\r\n                            item = undefined;\r\n                            break;\r\n                    }\r\n                    break;\r\n\r\n                case 'select':\r\n                    item = {\r\n                        type: 'select',\r\n                        name: label || inputLabel(node),\r\n                        disabled: !!$node.attr('disabled'),\r\n                        selected: $node.val(),\r\n                        options: {}\r\n                    };\r\n                    $node.children().each(function () {\r\n                        item.options[this.value] = $(this).text();\r\n                    });\r\n                    break;\r\n\r\n                case 'textarea':\r\n                    item = {\r\n                        type: 'textarea',\r\n                        name: label || inputLabel(node),\r\n                        disabled: !!$node.attr('disabled'),\r\n                        value: $node.val()\r\n                    };\r\n                    break;\r\n\r\n                case 'label':\r\n                    break;\r\n\r\n                default:\r\n                    item = {type: 'html', html: $node.clone(true)};\r\n                    break;\r\n            }\r\n\r\n            if (item) {\r\n                counter++;\r\n                items['key' + counter] = item;\r\n            }\r\n        });\r\n\r\n        return counter;\r\n    }\r\n\r\n// convert html5 menu\r\n    $.contextMenu.fromMenu = function (element) {\r\n        var $this = $(element),\r\n            items = {};\r\n\r\n        menuChildren(items, $this.children());\r\n\r\n        return items;\r\n    };\r\n\r\n// make defaults accessible\r\n    $.contextMenu.defaults = defaults;\r\n    $.contextMenu.types = types;\r\n// export internal functions - undocumented, for hacking only!\r\n    $.contextMenu.handle = handle;\r\n    $.contextMenu.op = op;\r\n    $.contextMenu.menus = menus;\r\n});\r\n","(function(root, factory) {\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(['jquery'], factory);\r\n\t} else {\r\n\t\tfactory(root.jQuery);\r\n\t}\r\n}(this, function($) {\r\n\t'use strict';\r\n\r\n\t// ########################################################################\r\n\t// Base object\r\n\t// ########################################################################\r\n\r\n\t/**\r\n\t* Imp - Impromptu object - passing no params will not open, only return the instance\r\n\t* @param message String/Object - String of html or Object of states\r\n\t* @param options Object - Options to set the prompt\r\n\t* @return Imp - the instance of this Impromptu object\r\n\t*/\r\n\tvar Imp = function(message, options){\r\n\t\tvar t = this;\r\n\t\tt.id = Imp.count++;\r\n\r\n\t\tImp.lifo.push(t);\r\n\r\n\t\tif(message){\r\n\t\t\tt.open(message, options);\r\n\t\t}\r\n\t\treturn t;\r\n\t};\r\n\r\n\t// ########################################################################\r\n\t// static properties and methods\r\n\t// ########################################################################\r\n\r\n\t/**\r\n\t* defaults - the default options\r\n\t*/\r\n\tImp.defaults = {\r\n\t\tprefix:'jqi',\r\n\t\tclasses: {\r\n\t\t\tbox: '',\r\n\t\t\tfade: '',\r\n\t\t\tprompt: '',\r\n\t\t\tform: '',\r\n\t\t\tclose: '',\r\n\t\t\ttitle: '',\r\n\t\t\tmessage: '',\r\n\t\t\tbuttons: '',\r\n\t\t\tbutton: '',\r\n\t\t\tdefaultButton: ''\r\n\t\t},\r\n\t\ttitle: '',\r\n\t\tcloseText: '&times;',\r\n\t\tbuttons: {\r\n\t\t\tOk: true\r\n\t\t},\r\n\t\tloaded: function(e){},\r\n\t\tsubmit: function(e,v,m,f){},\r\n\t\tclose: function(e,v,m,f){},\r\n\t\tstatechanging: function(e, from, to){},\r\n\t\tstatechanged: function(e, to){},\r\n\t\topacity: 0.6,\r\n\t\tzIndex: 999,\r\n\t\toverlayspeed: 'slow',\r\n\t\tpromptspeed: 'fast',\r\n\t\tshow: 'fadeIn',\r\n\t\thide: 'fadeOut',\r\n\t\tfocus: 0,\r\n\t\tdefaultButton: 0,\r\n\t\tuseiframe: false,\r\n\t\ttop: '15%',\r\n\t\tposition: {\r\n\t\t\tcontainer: null,\r\n\t\t\tx: null,\r\n\t\t\ty: null,\r\n\t\t\tarrow: null,\r\n\t\t\twidth: null\r\n\t\t},\r\n\t\tpersistent: true,\r\n\t\ttimeout: 0,\r\n\t\tstates: {},\r\n\t\tstate: {\r\n\t\t\tname: null,\r\n\t\t\ttitle: '',\r\n\t\t\thtml: '',\r\n\t\t\tbuttons: {\r\n\t\t\t\tOk: true\r\n\t\t\t},\r\n\t\t\tfocus: 0,\r\n\t\t\tdefaultButton: 0,\r\n\t\t\tposition: {\r\n\t\t\t\tcontainer: null,\r\n\t\t\t\tx: null,\r\n\t\t\t\ty: null,\r\n\t\t\t\tarrow: null,\r\n\t\t\t\twidth: null\r\n\t\t\t},\r\n\t\t\tsubmit: function(e,v,m,f){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t* setDefaults - Sets the default options\r\n\t* @param o Object - Options to set as defaults\r\n\t* @return void\r\n\t*/\r\n\tImp.setDefaults = function(o) {\r\n\t\tImp.defaults = $.extend({}, Imp.defaults, o);\r\n\t};\r\n\r\n\t/**\r\n\t* setStateDefaults - Sets the default options for a state\r\n\t* @param o Object - Options to set as defaults\r\n\t* @return void\r\n\t*/\r\n\tImp.setStateDefaults = function(o) {\r\n\t\tImp.defaults.state = $.extend({}, Imp.defaults.state, o);\r\n\t};\r\n\r\n\t/**\r\n\t* @var Int - A counter used to provide a unique ID for new prompts\r\n\t*/\r\n\tImp.count = 0;\r\n\r\n\t/**\r\n\t* @var Array - An array of Impromptu intances in a LIFO queue (last in first out)\r\n\t*/\r\n\tImp.lifo = [];\r\n\r\n\t/**\r\n\t* getLast - get the last element from the queue (doesn't pop, just returns)\r\n\t* @return Imp - the instance of this Impromptu object or false if queue is empty\r\n\t*/\r\n\tImp.getLast = function(){\r\n\t\tvar l = Imp.lifo.length;\r\n\t\treturn (l > 0)? Imp.lifo[l-1] : false;\r\n\t};\r\n\r\n\t/**\r\n\t* removeFromStack - remove an element from the lifo stack by its id\r\n\t* @param id int - id of the instance to remove\r\n\t* @return api - The api of the element removed from the stack or void\r\n\t*/\r\n\tImp.removeFromStack = function(id){\r\n\t\tfor(var i=Imp.lifo.length-1; i>=0; i--){\r\n\t\t\tif(Imp.lifo[i].id === id){\r\n\t\t\t\treturn Imp.lifo.splice(i,1)[0];\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// ########################################################################\r\n\t// extend our object instance properties and methods\r\n\t// ########################################################################\r\n\tImp.prototype = {\r\n\r\n\t\t/**\r\n\t\t* @var Int - A unique id, simply an autoincremented number\r\n\t\t*/\r\n\t\tid: null,\r\n\r\n\t\t/**\r\n\t\t* open - Opens the prompt\r\n\t\t* @param message String/Object - String of html or Object of states\r\n\t\t* @param options Object - Options to set the prompt\r\n\t\t* @return Imp - the instance of this Impromptu object\r\n\t\t*/\r\n\t\topen: function(message, options) {\r\n\t\t\tvar t = this;\r\n\r\n\t\t\tt.options = $.extend({},Imp.defaults,options);\r\n\r\n\t\t\t// Be sure any previous timeouts are destroyed\r\n\t\t\tif(t.timeout){\r\n\t\t\t\tclearTimeout(t.timeout);\r\n\t\t\t}\r\n\t\t\tt.timeout = false;\r\n\r\n\t\t\tvar opts = t.options,\r\n\t\t\t\t$body = $(document.body),\r\n\t\t\t\t$window = $(window);\r\n\r\n\t\t\t//build the box and fade\r\n\t\t\tvar msgbox = '<div class=\"'+ opts.prefix +'box '+ opts.classes.box +'\">';\r\n\t\t\tif(opts.useiframe && ($('object, applet').length > 0)) {\r\n\t\t\t\tmsgbox += '<iframe src=\"javascript:false;\" style=\"display:block;position:absolute;z-index:-1;\" class=\"'+ opts.prefix +'fade '+ opts.classes.fade +'\"></iframe>';\r\n\t\t\t} else {\r\n\t\t\t\tmsgbox += '<div class=\"'+ opts.prefix +'fade '+ opts.classes.fade +'\"></div>';\r\n\t\t\t}\r\n\t\t\tmsgbox += '<div class=\"'+ opts.prefix +' '+ opts.classes.prompt +'\">'+\r\n\t\t\t\t\t\t'<form action=\"javascript:false;\" onsubmit=\"return false;\" class=\"'+ opts.prefix +'form '+ opts.classes.form +'\">'+\r\n\t\t\t\t\t\t\t'<div class=\"'+ opts.prefix +'close '+ opts.classes.close +'\">'+ opts.closeText +'</div>'+\r\n\t\t\t\t\t\t\t'<div class=\"'+ opts.prefix +'states\"></div>'+\r\n\t\t\t\t\t\t'</form>'+\r\n\t\t\t\t\t'</div>'+\r\n\t\t\t\t'</div>';\r\n\r\n\t\t\tt.jqib = $(msgbox).appendTo($body);\r\n\t\t\tt.jqi = t.jqib.children('.'+ opts.prefix);\r\n\t\t\tt.jqif = t.jqib.children('.'+ opts.prefix +'fade');\r\n\r\n\t\t\t//if a string was passed, convert to a single state\r\n\t\t\tif(message.constructor === String){\r\n\t\t\t\tmessage = {\r\n\t\t\t\t\tstate0: {\r\n\t\t\t\t\t\ttitle: opts.title,\r\n\t\t\t\t\t\thtml: message,\r\n\t\t\t\t\t\tbuttons: opts.buttons,\r\n\t\t\t\t\t\tposition: opts.position,\r\n\t\t\t\t\t\tfocus: opts.focus,\r\n\t\t\t\t\t\tdefaultButton: opts.defaultButton,\r\n\t\t\t\t\t\tsubmit: opts.submit\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\t//build the states\r\n\t\t\tt.options.states = {};\r\n\t\t\tvar k,v;\r\n\t\t\tfor(k in message){\r\n\t\t\t\tv = $.extend({},Imp.defaults.state,{name:k},message[k]);\r\n\t\t\t\tt.addState(v.name, v);\r\n\r\n\t\t\t\tif(t.currentStateName === ''){\r\n\t\t\t\t\tt.currentStateName = v.name;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//Events\r\n\t\t\tt.jqi.on('click', '.'+ opts.prefix +'buttons button', function(e){\r\n\t\t\t\tvar $t = $(this),\r\n\t\t\t\t\t$state = $t.parents('.'+ opts.prefix +'state'),\r\n\t\t\t\t\tstateobj = t.options.states[$state.data('jqi-name')],\r\n\t\t\t\t\tmsg = $state.children('.'+ opts.prefix +'message'),\r\n\t\t\t\t\tclicked = stateobj.buttons[$t.text()] || stateobj.buttons[$t.html()],\r\n\t\t\t\t\tforminputs = {};\r\n\r\n\t\t\t\t// if for some reason we couldn't get the value\r\n\t\t\t\tif(clicked === undefined){\r\n\t\t\t\t\tfor(var i in stateobj.buttons){\r\n\t\t\t\t\t\tif(stateobj.buttons[i].title === $t.text() || stateobj.buttons[i].title === $t.html()){\r\n\t\t\t\t\t\t\tclicked = stateobj.buttons[i].value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//collect all form element values from all states.\r\n\t\t\t\t$.each(t.jqi.children('form').serializeArray(),function(i,obj){\r\n\t\t\t\t\tif (forminputs[obj.name] === undefined) {\r\n\t\t\t\t\t\tforminputs[obj.name] = obj.value;\r\n\t\t\t\t\t} else if (typeof forminputs[obj.name] === Array || typeof forminputs[obj.name] === 'object') {\r\n\t\t\t\t\t\tforminputs[obj.name].push(obj.value);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tforminputs[obj.name] = [forminputs[obj.name],obj.value];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// trigger an event\r\n\t\t\t\tvar promptsubmite = new $.Event('impromptu:submit');\r\n\t\t\t\tpromptsubmite.stateName = stateobj.name;\r\n\t\t\t\tpromptsubmite.state = $state;\r\n\t\t\t\t$state.trigger(promptsubmite, [clicked, msg, forminputs]);\r\n\r\n\t\t\t\tif(!promptsubmite.isDefaultPrevented()){\r\n\t\t\t\t\tt.close(true, clicked,msg,forminputs);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// if the fade is clicked blink the prompt\r\n\t\t\tvar fadeClicked = function(){\r\n\t\t\t\tif(opts.persistent){\r\n\t\t\t\t\tvar offset = (opts.top.toString().indexOf('%') >= 0? ($window.height()*(parseInt(opts.top,10)/100)) : parseInt(opts.top,10)),\r\n\t\t\t\t\t\ttop = parseInt(t.jqi.css('top').replace('px',''),10) - offset;\r\n\r\n\t\t\t\t\t//$window.scrollTop(top);\r\n\t\t\t\t\t$('html,body').animate({ scrollTop: top }, 'fast', function(){\r\n\t\t\t\t\t\tvar i = 0;\r\n\t\t\t\t\t\tt.jqib.addClass(opts.prefix +'warning');\r\n\t\t\t\t\t\tvar intervalid = setInterval(function(){\r\n\t\t\t\t\t\t\tt.jqib.toggleClass(opts.prefix +'warning');\r\n\t\t\t\t\t\t\tif(i++ > 1){\r\n\t\t\t\t\t\t\t\tclearInterval(intervalid);\r\n\t\t\t\t\t\t\t\tt.jqib.removeClass(opts.prefix +'warning');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, 100);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tt.close(true);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// listen for esc or tab keys\r\n\t\t\tvar keyDownEventHandler = function(e){\r\n\t\t\t\tvar key = (window.event) ? event.keyCode : e.keyCode;\r\n\r\n\t\t\t\t//escape key closes\r\n\t\t\t\tif(key === 27) {\r\n\t\t\t\t\tfadeClicked();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//enter key pressed trigger the default button if its not on it, ignore if it is a textarea\r\n\t\t\t\tif(key === 13){\r\n\t\t\t\t\tvar $defBtn = t.getCurrentState().find('.'+ opts.prefix +'defaultbutton');\r\n\t\t\t\t\tvar $tgt = $(e.target);\r\n\r\n\t\t\t\t\tif($tgt.is('textarea,.'+opts.prefix+'button') === false && $defBtn.length > 0){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t$defBtn.click();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//constrain tabs, tabs should iterate through the state and not leave\r\n\t\t\t\tif (key === 9){\r\n\t\t\t\t\tvar $inputels = $('input,select,textarea,button',t.getCurrentState());\r\n\t\t\t\t\tvar fwd = !e.shiftKey && e.target === $inputels[$inputels.length-1];\r\n\t\t\t\t\tvar back = e.shiftKey && e.target === $inputels[0];\r\n\t\t\t\t\tif (fwd || back) {\r\n\t\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\t\tif (!$inputels){\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tvar el = $inputels[back===true ? $inputels.length-1 : 0];\r\n\r\n\t\t\t\t\t\t\tif (el){\r\n\t\t\t\t\t\t\t\tel.focus();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},10);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tt.position();\r\n\t\t\tt.style();\r\n\r\n\t\t\t// store copy of the window resize function for interal use only\r\n\t\t\tt._windowResize = function(e){\r\n\t\t\t\tt.position(e);\r\n\t\t\t};\r\n\t\t\t$window.resize({ animate: false }, t._windowResize);\r\n\r\n\t\t\tt.jqif.click(fadeClicked);\r\n\t\t\tt.jqi.find('.'+ opts.prefix +'close').click(function(){ t.close(); });\r\n\t\t\tt.jqib.on(\"keydown\",keyDownEventHandler)\r\n\t\t\t\t\t\t.on('impromptu:loaded', opts.loaded)\r\n\t\t\t\t\t\t.on('impromptu:close', opts.close)\r\n\t\t\t\t\t\t.on('impromptu:statechanging', opts.statechanging)\r\n\t\t\t\t\t\t.on('impromptu:statechanged', opts.statechanged);\r\n\r\n\t\t\t// Show it\r\n\t\t\tt.jqif[opts.show](opts.overlayspeed);\r\n\t\t\tt.jqi[opts.show](opts.promptspeed, function(){\r\n\r\n\t\t\t\tvar $firstState = t.jqi.find('.'+ opts.prefix +'states .'+ opts.prefix +'state').eq(0);\r\n\t\t\t\tt.goToState($firstState.data('jqi-name'));\r\n\r\n\t\t\t\tt.jqib.trigger('impromptu:loaded');\r\n\t\t\t});\r\n\r\n\t\t\t// Timeout\r\n\t\t\tif(opts.timeout > 0){\r\n\t\t\t\tt.timeout = setTimeout(function(){ t.close(true); },opts.timeout);\r\n\t\t\t}\r\n\r\n\t\t\treturn t;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* close - Closes the prompt\r\n\t\t* @param callback Function - called when the transition is complete\r\n\t\t* @param clicked String - value of the button clicked (only used internally)\r\n\t\t* @param msg jQuery - The state message body (only used internally)\r\n\t\t* @param forvals Object - key/value pairs of all form field names and values (only used internally)\r\n\t\t* @return Imp - the instance of this Impromptu object\r\n\t\t*/\r\n\t\tclose: function(callCallback, clicked, msg, formvals){\r\n\t\t\tvar t = this;\r\n\t\t\tImp.removeFromStack(t.id);\r\n\r\n\t\t\tif(t.timeout){\r\n\t\t\t\tclearTimeout(t.timeout);\r\n\t\t\t\tt.timeout = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(t.jqib){\r\n\t\t\t\tt.jqib[t.options.hide]('fast',function(){\r\n\t\t\t\t\t\r\n\t\t\t\t\tt.jqib.trigger('impromptu:close', [clicked,msg,formvals]);\r\n\t\t\t\t\t\r\n\t\t\t\t\tt.jqib.remove();\r\n\t\t\t\t\t\r\n\t\t\t\t\t$(window).off('resize', t._windowResize);\r\n\r\n\t\t\t\t\tif(typeof callCallback === 'function'){\r\n\t\t\t\t\t\tcallCallback();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tt.currentStateName = \"\";\r\n\r\n\t\t\treturn t;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* addState - Injects a state into the prompt\r\n\t\t* @param statename String - Name of the state\r\n\t\t* @param stateobj Object - options for the state\r\n\t\t* @param afterState String - selector of the state to insert after\r\n\t\t* @return jQuery - the newly created state\r\n\t\t*/\r\n\t\taddState: function(statename, stateobj, afterState) {\r\n\t\t\tvar t = this,\r\n\t\t\t\tstate = '',\r\n\t\t\t\t$state = null,\r\n\t\t\t\tarrow = '',\r\n\t\t\t\ttitle = '',\r\n\t\t\t\topts = t.options,\r\n\t\t\t\t$jqistates = $('.'+ opts.prefix +'states'),\r\n\t\t\t\tbuttons = [],\r\n\t\t\t\tshowHtml,defbtn,k,v,l,i=0;\r\n\r\n\t\t\tstateobj = $.extend({},Imp.defaults.state, {name:statename}, stateobj);\r\n\r\n\t\t\tif(stateobj.position.arrow !== null){\r\n\t\t\t\tarrow = '<div class=\"'+ opts.prefix + 'arrow '+ opts.prefix + 'arrow'+ stateobj.position.arrow +'\"></div>';\r\n\t\t\t}\r\n\t\t\tif(stateobj.title && stateobj.title !== ''){\r\n\t\t\t\ttitle = '<div class=\"lead '+ opts.prefix + 'title '+ opts.classes.title +'\">'+  stateobj.title +'</div>';\r\n\t\t\t}\r\n\r\n\t\t\tshowHtml = stateobj.html;\r\n\t\t\tif (typeof stateobj.html === 'function') {\r\n\t\t\t\tshowHtml = 'Error: html function must return text';\r\n\t\t\t}\r\n\r\n\t\t\tstate += '<div class=\"'+ opts.prefix + 'state\" data-jqi-name=\"'+ statename +'\" style=\"display:none;\">'+\r\n\t\t\t\t\t\tarrow + title +\r\n\t\t\t\t\t\t'<div class=\"'+ opts.prefix +'message '+ opts.classes.message +'\">' + showHtml +'</div>'+\r\n\t\t\t\t\t\t'<div class=\"'+ opts.prefix +'buttons '+ opts.classes.buttons +'\"'+ ($.isEmptyObject(stateobj.buttons)? 'style=\"display:none;\"':'') +'>';\r\n\r\n\t\t\t// state buttons may be in object or array, lets convert objects to arrays\r\n\t\t\tif($.isArray(stateobj.buttons)){\r\n\t\t\t\tbuttons = stateobj.buttons;\r\n\t\t\t}\r\n\t\t\telse if($.isPlainObject(stateobj.buttons)){\r\n\t\t\t\tfor(k in stateobj.buttons){\r\n\t\t\t\t\tif(stateobj.buttons.hasOwnProperty(k)){\r\n\t\t\t\t\t\tbuttons.push({ title: k, value: stateobj.buttons[k] });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// iterate over each button and create them\r\n\t\t\tfor(i=0, l=buttons.length; i<l; i++){\r\n\t\t\t\tv = buttons[i],\r\n\t\t\t\tdefbtn = stateobj.focus === i || (isNaN(stateobj.focus) && stateobj.defaultButton === i) ? (opts.prefix + 'defaultbutton ' + opts.classes.defaultButton) : '';\r\n\r\n\t\t\t\tstate += '<button class=\"'+ opts.classes.button +' '+ opts.prefix + 'button '+ defbtn;\r\n\r\n\t\t\t\tif(typeof v.classes !== \"undefined\"){\r\n\t\t\t\t\tstate += ' '+ ($.isArray(v.classes)? v.classes.join(' ') : v.classes) + ' ';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstate += '\" name=\"' + opts.prefix + '_' + statename + '_button' + v.title.replace(/[^a-z0-9]+/gi,'') + '\" value=\"' + v.value + '\">' + v.title + '</button>';\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tstate += '</div></div>';\r\n\r\n\t\t\t$state = $(state);\r\n\r\n\t\t\t$state.on('impromptu:submit', stateobj.submit);\r\n\r\n\t\t\tif(afterState !== undefined){\r\n\t\t\t\t$jqistates.find('[data-jqi-name=\"'+afterState+'\"]').after($state);\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\t$jqistates.append($state);\r\n\t\t\t}\r\n\r\n\t\t\tt.options.states[statename] = stateobj;\r\n\r\n\t\t\treturn $state;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* removeState - Removes a state from the prompt\r\n\t\t* @param state String - Name of the state\r\n\t\t* @param newState String - Name of the state to transition to\r\n\t\t* @return Boolean - returns true on success, false on failure\r\n\t\t*/\r\n\t\tremoveState: function(state, newState) {\r\n\t\t\tvar t = this,\r\n\t\t\t\t$state = t.getState(state),\r\n\t\t\t\trm = function(){ $state.remove(); };\r\n\r\n\t\t\tif($state.length === 0){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// transition away from it before deleting\r\n\t\t\tif($state.css('display') !== 'none'){\r\n\t\t\t\tif(newState !== undefined && t.getState(newState).length > 0){\r\n\t\t\t\t\tt.goToState(newState, false, rm);\r\n\t\t\t\t}\r\n\t\t\t\telse if($state.next().length > 0){\r\n\t\t\t\t\tt.nextState(rm);\r\n\t\t\t\t}\r\n\t\t\t\telse if($state.prev().length > 0){\r\n\t\t\t\t\tt.prevState(rm);\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\tt.close();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\t$state.slideUp('slow', rm);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* getApi - Get the api, so you can extract it from $.prompt stack\r\n\t\t* @return jQuery - the prompt\r\n\t\t*/\r\n\t\tgetApi: function() {\r\n\t\t\treturn this;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* getBox - Get the box containing fade and prompt\r\n\t\t* @return jQuery - the prompt\r\n\t\t*/\r\n\t\tgetBox: function() {\r\n\t\t\treturn this.jqib;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* getPrompt - Get the prompt\r\n\t\t* @return jQuery - the prompt\r\n\t\t*/\r\n\t\tgetPrompt: function() {\r\n\t\t\treturn this.jqi;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* getState - Get the state by its name\r\n\t\t* @param statename String - Name of the state\r\n\t\t* @return jQuery - the state\r\n\t\t*/\r\n\t\tgetState: function(statename) {\r\n\t\t\treturn this.jqi.find('[data-jqi-name=\"'+ statename +'\"]');\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* getCurrentState - Get the current visible state\r\n\t\t* @return jQuery - the current visible state\r\n\t\t*/\r\n\t\tgetCurrentState: function() {\r\n\t\t\treturn this.getState(this.getCurrentStateName());\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* getCurrentStateName - Get the name of the current visible state/substate\r\n\t\t* @return String - the current visible state's name\r\n\t\t*/\r\n\t\tgetCurrentStateName: function() {\r\n\t\t\treturn this.currentStateName;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* position - Repositions the prompt (Used internally)\r\n\t\t* @return void\r\n\t\t*/\r\n\t\tposition: function(e){\r\n\t\t\tvar t = this,\r\n\t\t\t\trestoreFx = $.fx.off,\r\n\t\t\t\t$state = t.getCurrentState(),\r\n\t\t\t\tstateObj = t.options.states[$state.data('jqi-name')],\r\n\t\t\t\tpos = stateObj? stateObj.position : undefined,\r\n\t\t\t\t$window = $(window),\r\n\t\t\t\tbodyHeight = document.body.scrollHeight, //$(document.body).outerHeight(true),\r\n\t\t\t\twindowHeight = $(window).height(),\r\n\t\t\t\tdocumentHeight = $(document).height(),\r\n\t\t\t\theight = bodyHeight > windowHeight ? bodyHeight : windowHeight,\r\n\t\t\t\ttop = parseInt($window.scrollTop(),10) + (t.options.top.toString().indexOf('%') >= 0?\r\n\t\t\t\t\t\t(windowHeight*(parseInt(t.options.top,10)/100)) : parseInt(t.options.top,10));\r\n\r\n\t\t\t// when resizing the window turn off animation\r\n\t\t\tif(e !== undefined && e.data.animate === false){\r\n\t\t\t\t$.fx.off = true;\r\n\t\t\t}\r\n\r\n\t\t\tt.jqib.css({\r\n\t\t\t\tposition: \"absolute\",\r\n\t\t\t\theight: height,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\ttop: 0,\r\n\t\t\t\tleft: 0,\r\n\t\t\t\tright: 0,\r\n\t\t\t\tbottom: 0\r\n\t\t\t});\r\n\t\t\tt.jqif.css({\r\n\t\t\t\tposition: \"fixed\",\r\n\t\t\t\theight: height,\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\ttop: 0,\r\n\t\t\t\tleft: 0,\r\n\t\t\t\tright: 0,\r\n\t\t\t\tbottom: 0\r\n\t\t\t});\r\n\r\n\t\t\t// tour positioning\r\n\t\t\tif(pos && pos.container){\r\n\t\t\t\tvar offset = $(pos.container).offset();\r\n\r\n\t\t\t\tif($.isPlainObject(offset) && offset.top !== undefined){\r\n\t\t\t\t\tt.jqi.css({\r\n\t\t\t\t\t\tposition: \"absolute\"\r\n\t\t\t\t\t});\r\n\t\t\t\t\tt.jqi.animate({\r\n\t\t\t\t\t\ttop: offset.top + pos.y,\r\n\t\t\t\t\t\tleft: offset.left + pos.x,\r\n\t\t\t\t\t\tmarginLeft: 0,\r\n\t\t\t\t\t\twidth: (pos.width !== undefined)? pos.width : null\r\n\t\t\t\t\t});\r\n\t\t\t\t\ttop = (offset.top + pos.y) - (t.options.top.toString().indexOf('%') >= 0? (windowHeight*(parseInt(t.options.top,10)/100)) : parseInt(t.options.top,10));\r\n\t\t\t\t\t$('html,body').animate({ scrollTop: top }, 'slow', 'swing', function(){});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// custom state width animation\r\n\t\t\telse if(pos && pos.width){\r\n\t\t\t\tt.jqi.css({\r\n\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\tleft: '50%'\r\n\t\t\t\t\t});\r\n\t\t\t\tt.jqi.animate({\r\n\t\t\t\t\t\ttop: pos.y || top,\r\n\t\t\t\t\t\tleft: pos.x || '50%',\r\n\t\t\t\t\t\tmarginLeft: ((pos.width/2)*-1),\r\n\t\t\t\t\t\twidth: pos.width\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t// standard prompt positioning\r\n\t\t\telse{\r\n\t\t\t\tt.jqi.css({\r\n\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\ttop: top,\r\n\t\t\t\t\tleft: '50%',//$window.width()/2,\r\n\t\t\t\t\tmarginLeft: ((t.jqi.outerWidth(false)/2)*-1)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// restore fx settings\r\n\t\t\tif(e !== undefined && e.data.animate === false){\r\n\t\t\t\t$.fx.off = restoreFx;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* style - Restyles the prompt (Used internally)\r\n\t\t* @return void\r\n\t\t*/\r\n\t\tstyle: function(){\r\n\t\t\tvar t = this;\r\n\t\t\t\r\n\t\t\tt.jqif.css({\r\n\t\t\t\tzIndex: t.options.zIndex,\r\n\t\t\t\tdisplay: \"none\",\r\n\t\t\t\topacity: t.options.opacity\r\n\t\t\t});\r\n\t\t\tt.jqi.css({\r\n\t\t\t\tzIndex: t.options.zIndex+1,\r\n\t\t\t\tdisplay: \"none\"\r\n\t\t\t});\r\n\t\t\tt.jqib.css({\r\n\t\t\t\tzIndex: t.options.zIndex\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* goToState - Goto the specified state\r\n\t\t* @param state String - name of the state to transition to\r\n\t\t* @param subState Boolean - true to be a sub state within the currently open state\r\n\t\t* @param callback Function - called when the transition is complete\r\n\t\t* @return jQuery - the newly active state\r\n\t\t*/\r\n\t\tgoToState: function(state, subState, callback) {\r\n\t\t\tvar t = this,\r\n\t\t\t\t$jqi = t.jqi,\r\n\t\t\t\tjqiopts = t.options,\r\n\t\t\t\t$state = t.getState(state),\r\n\t\t\t\tstateobj = jqiopts.states[$state.data('jqi-name')],\r\n\t\t\t\tpromptstatechanginge = new $.Event('impromptu:statechanging'),\r\n\t\t\t\topts = t.options;\r\n\r\n\t\t\tif(stateobj !== undefined){\r\n\r\n\r\n\t\t\t\tif (typeof stateobj.html === 'function') {\r\n\t\t\t\t\tvar contentLaterFunc = stateobj.html;\r\n\t\t\t\t\t$state.find('.' + opts.prefix +'message ').html(contentLaterFunc());\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// subState can be ommitted\r\n\t\t\t\tif(typeof subState === 'function'){\r\n\t\t\t\t\tcallback = subState;\r\n\t\t\t\t\tsubState = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tt.jqib.trigger(promptstatechanginge, [t.getCurrentStateName(), state]);\r\n\r\n\t\t\t\tif(!promptstatechanginge.isDefaultPrevented() && $state.length > 0){\r\n\t\t\t\t\tt.jqi.find('.'+ opts.prefix +'parentstate').removeClass(opts.prefix +'parentstate');\r\n\r\n\t\t\t\t\tif(subState){ // hide any open substates\r\n\t\t\t\t\t\t// get rid of any substates\r\n\t\t\t\t\t\tt.jqi.find('.'+ opts.prefix +'substate').not($state)\r\n\t\t\t\t\t\t\t.slideUp(jqiopts.promptspeed)\r\n\t\t\t\t\t\t\t.removeClass('.'+ opts.prefix +'substate')\r\n\t\t\t\t\t\t\t.find('.'+ opts.prefix +'arrow').hide();\r\n\r\n\t\t\t\t\t\t// add parent state class so it can be visible, but blocked\r\n\t\t\t\t\t\tt.jqi.find('.'+ opts.prefix +'state:visible').addClass(opts.prefix +'parentstate');\r\n\r\n\t\t\t\t\t\t// add substate class so we know it will be smaller\r\n\t\t\t\t\t\t$state.addClass(opts.prefix +'substate');\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse{ // hide any open states\r\n\t\t\t\t\t\tt.jqi.find('.'+ opts.prefix +'state').not($state)\r\n\t\t\t\t\t\t\t.slideUp(jqiopts.promptspeed)\r\n\t\t\t\t\t\t\t.find('.'+ opts.prefix +'arrow').hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tt.currentStateName = stateobj.name;\r\n\r\n\t\t\t\t\t$state.slideDown(jqiopts.promptspeed,function(){\r\n\t\t\t\t\t\tvar $t = $(this);\r\n\r\n\t\t\t\t\t\t// if focus is a selector, find it, else its button index\r\n\t\t\t\t\t\tif(typeof(stateobj.focus) === 'string'){\r\n\t\t\t\t\t\t\t$t.find(stateobj.focus).eq(0).focus();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t\t$t.find('.'+ opts.prefix +'defaultbutton').focus();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t$t.find('.'+ opts.prefix +'arrow').show(jqiopts.promptspeed);\r\n\r\n\t\t\t\t\t\tif (typeof callback === 'function'){\r\n\t\t\t\t\t\t\tt.jqib.on('impromptu:statechanged', callback);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tt.jqib.trigger('impromptu:statechanged', [state]);\r\n\t\t\t\t\t\tif (typeof callback === 'function'){\r\n\t\t\t\t\t\t\tt.jqib.off('impromptu:statechanged', callback);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif(!subState){\r\n\t\t\t\t\t\tt.position();\r\n\t\t\t\t\t}\r\n\t\t\t\t} // end isDefaultPrevented()\t\r\n\t\t\t}// end stateobj !== undefined\r\n\r\n\t\t\treturn $state;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* nextState - Transition to the next state\r\n\t\t* @param callback Function - called when the transition is complete\r\n\t\t* @return jQuery - the newly active state\r\n\t\t*/\r\n\t\tnextState: function(callback) {\r\n\t\t\tvar t = this,\r\n\t\t\t\t$next = t.getCurrentState().next();\r\n\t\t\tif($next.length > 0){\r\n\t\t\t\tt.goToState( $next.data('jqi-name'), callback );\r\n\t\t\t}\r\n\t\t\treturn $next;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t* prevState - Transition to the previous state\r\n\t\t* @param callback Function - called when the transition is complete\r\n\t\t* @return jQuery - the newly active state\r\n\t\t*/\r\n\t\tprevState: function(callback) {\r\n\t\t\tvar t = this,\r\n\t\t\t\t$prev = t.getCurrentState().prev();\r\n\t\t\tif($prev.length > 0){\r\n\t\t\t\tt.goToState( $prev.data('jqi-name'), callback );\r\n\t\t\t}\r\n\t\t\treturn $prev;\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t// ########################################################################\r\n\t// $.prompt will manage a queue of Impromptu instances\r\n\t// ########################################################################\r\n\r\n\t/**\r\n\t* $.prompt create a new Impromptu instance and push it on the stack of instances\r\n\t* @param message String/Object - String of html or Object of states\r\n\t* @param options Object - Options to set the prompt\r\n\t* @return jQuery - the jQuery object of the prompt within the modal\r\n\t*/\r\n\t$.prompt = function(message, options){\r\n\t\tvar api = new Imp(message, options);\r\n\t\treturn api.jqi;\r\n\t};\r\n\r\n\t/**\r\n\t* Copy over static methods\r\n\t*/\r\n\t$.each(Imp, function(k,v){\r\n\t\t$.prompt[k] = v;\r\n\t});\r\n\r\n\t/**\r\n\t* Create a proxy for accessing all instance methods. The close method pops from queue.\r\n\t*/\r\n\t$.each(Imp.prototype, function(k,v){\r\n\t\t$.prompt[k] = function(){\r\n\t\t\tvar api = Imp.getLast(); // always use the last instance on the stack\r\n\r\n\t\t\tif(api && typeof api[k] === \"function\"){\r\n\t\t\t\treturn api[k].apply(api, arguments);\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n\r\n\t// ########################################################################\r\n\t// jQuery Plugin and public access\r\n\t// ########################################################################\r\n\r\n\t/**\r\n\t* Enable using $('.selector').prompt({});\r\n\t* This will grab the html within the prompt as the prompt message\r\n\t*/\r\n\t$.fn.prompt = function(options){\r\n\t\tif(options === undefined){\r\n\t\t\toptions = {};\r\n\t\t}\r\n\t\tif(options.withDataAndEvents === undefined){\r\n\t\t\toptions.withDataAndEvents = false;\r\n\t\t}\r\n\r\n\t\t$.prompt($(this).clone(options.withDataAndEvents).html(),options);\r\n\t};\r\n\r\n\t/**\r\n\t* Export it as Impromptu and $.prompt\r\n\t* Can be used from here forth as new Impromptu(states, opts)\r\n\t*/\r\n\twindow.Impromptu = Imp;\r\n\r\n}));\r\n","var atob = require('./atob');\n\nfunction b64DecodeUnicode(str) {\n  return decodeURIComponent(atob(str).replace(/(.)/g, function (m, p) {\n    var code = p.charCodeAt(0).toString(16).toUpperCase();\n    if (code.length < 2) {\n      code = '0' + code;\n    }\n    return '%' + code;\n  }));\n}\n\nmodule.exports = function(str) {\n  var output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  switch (output.length % 4) {\n    case 0:\n      break;\n    case 2:\n      output += \"==\";\n      break;\n    case 3:\n      output += \"=\";\n      break;\n    default:\n      throw \"Illegal base64url string!\";\n  }\n\n  try{\n    return b64DecodeUnicode(output);\n  } catch (err) {\n    return atob(output);\n  }\n};\n","/**\n * The code was extracted from:\n * https://github.com/davidchambers/Base64.js\n */\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction InvalidCharacterError(message) {\n  this.message = message;\n}\n\nInvalidCharacterError.prototype = new Error();\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\nfunction polyfill (input) {\n  var str = String(input).replace(/=+$/, '');\n  if (str.length % 4 == 1) {\n    throw new InvalidCharacterError(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n  }\n  for (\n    // initialize result and counters\n    var bc = 0, bs, buffer, idx = 0, output = '';\n    // get next character\n    buffer = str.charAt(idx++);\n    // character found in table? initialize bit storage and add its ascii value;\n    ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n      // and if not first of each 4 characters,\n      // convert the first 8 bits to one ascii character\n      bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n  ) {\n    // try to find character in table (0-63, not found => -1)\n    buffer = chars.indexOf(buffer);\n  }\n  return output;\n}\n\n\nmodule.exports = typeof window !== 'undefined' && window.atob && window.atob.bind(window) || polyfill;\n","/** @license React v16.9.0\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var h=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,aa=n?Symbol.for(\"react.suspense_list\"):60120,ba=n?Symbol.for(\"react.memo\"):\n60115,ca=n?Symbol.for(\"react.lazy\"):60116;n&&Symbol.for(\"react.fundamental\");n&&Symbol.for(\"react.responder\");var z=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction A(a){for(var b=a.message,d=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+b,c=1;c<arguments.length;c++)d+=\"&args[]=\"+encodeURIComponent(arguments[c]);a.message=\"Minified React error #\"+b+\"; visit \"+d+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings. \";return a}var B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C={};\nfunction D(a,b,d){this.props=a;this.context=b;this.refs=C;this.updater=d||B}D.prototype.isReactComponent={};D.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw A(Error(85));this.updater.enqueueSetState(this,a,b,\"setState\")};D.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function E(){}E.prototype=D.prototype;function F(a,b,d){this.props=a;this.context=b;this.refs=C;this.updater=d||B}var G=F.prototype=new E;\nG.constructor=F;h(G,D.prototype);G.isPureReactComponent=!0;var H={current:null},I={suspense:null},J={current:null},K=Object.prototype.hasOwnProperty,L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,d){var c=void 0,e={},g=null,k=null;if(null!=b)for(c in void 0!==b.ref&&(k=b.ref),void 0!==b.key&&(g=\"\"+b.key),b)K.call(b,c)&&!L.hasOwnProperty(c)&&(e[c]=b[c]);var f=arguments.length-2;if(1===f)e.children=d;else if(1<f){for(var l=Array(f),m=0;m<f;m++)l[m]=arguments[m+2];e.children=l}if(a&&a.defaultProps)for(c in f=a.defaultProps,f)void 0===e[c]&&(e[c]=f[c]);return{$$typeof:p,type:a,key:g,ref:k,props:e,_owner:J.current}}\nfunction da(a,b){return{$$typeof:p,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function N(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===p}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+a).replace(/[=:]/g,function(a){return b[a]})}var O=/\\/+/g,P=[];function Q(a,b,d,c){if(P.length){var e=P.pop();e.result=a;e.keyPrefix=b;e.func=d;e.context=c;e.count=0;return e}return{result:a,keyPrefix:b,func:d,context:c,count:0}}\nfunction R(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>P.length&&P.push(a)}\nfunction S(a,b,d,c){var e=typeof a;if(\"undefined\"===e||\"boolean\"===e)a=null;var g=!1;if(null===a)g=!0;else switch(e){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return d(c,a,\"\"===b?\".\"+T(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k<a.length;k++){e=a[k];var f=b+T(e,k);g+=S(e,f,d,c)}else if(null===a||\"object\"!==typeof a?f=null:(f=z&&a[z]||a[\"@@iterator\"],f=\"function\"===typeof f?f:null),\"function\"===typeof f)for(a=f.call(a),k=\n0;!(e=a.next()).done;)e=e.value,f=b+T(e,k++),g+=S(e,f,d,c);else if(\"object\"===e)throw d=\"\"+a,A(Error(31),\"[object Object]\"===d?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":d,\"\");return g}function U(a,b,d){return null==a?0:S(a,\"\",b,d)}function T(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(a.key):b.toString(36)}function ea(a,b){a.func.call(a.context,b,a.count++)}\nfunction fa(a,b,d){var c=a.result,e=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?V(a,c,d,function(a){return a}):null!=a&&(N(a)&&(a=da(a,e+(!a.key||b&&b.key===a.key?\"\":(\"\"+a.key).replace(O,\"$&/\")+\"/\")+d)),c.push(a))}function V(a,b,d,c,e){var g=\"\";null!=d&&(g=(\"\"+d).replace(O,\"$&/\")+\"/\");b=Q(b,g,c,e);U(a,fa,b);R(b)}function W(){var a=H.current;if(null===a)throw A(Error(321));return a}\nvar X={Children:{map:function(a,b,d){if(null==a)return a;var c=[];V(a,c,null,b,d);return c},forEach:function(a,b,d){if(null==a)return a;b=Q(null,null,b,d);U(a,ea,b);R(b)},count:function(a){return U(a,function(){return null},null)},toArray:function(a){var b=[];V(a,b,null,function(a){return a});return b},only:function(a){if(!N(a))throw A(Error(143));return a}},createRef:function(){return{current:null}},Component:D,PureComponent:F,createContext:function(a,b){void 0===b&&(b=null);a={$$typeof:w,_calculateChangedBits:b,\n_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:v,_context:a};return a.Consumer=a},forwardRef:function(a){return{$$typeof:x,render:a}},lazy:function(a){return{$$typeof:ca,_ctor:a,_status:-1,_result:null}},memo:function(a,b){return{$$typeof:ba,type:a,compare:void 0===b?null:b}},useCallback:function(a,b){return W().useCallback(a,b)},useContext:function(a,b){return W().useContext(a,b)},useEffect:function(a,b){return W().useEffect(a,b)},useImperativeHandle:function(a,\nb,d){return W().useImperativeHandle(a,b,d)},useDebugValue:function(){},useLayoutEffect:function(a,b){return W().useLayoutEffect(a,b)},useMemo:function(a,b){return W().useMemo(a,b)},useReducer:function(a,b,d){return W().useReducer(a,b,d)},useRef:function(a){return W().useRef(a)},useState:function(a){return W().useState(a)},Fragment:r,Profiler:u,StrictMode:t,Suspense:y,unstable_SuspenseList:aa,createElement:M,cloneElement:function(a,b,d){if(null===a||void 0===a)throw A(Error(267),a);var c=void 0,e=\nh({},a.props),g=a.key,k=a.ref,f=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,f=J.current);void 0!==b.key&&(g=\"\"+b.key);var l=void 0;a.type&&a.type.defaultProps&&(l=a.type.defaultProps);for(c in b)K.call(b,c)&&!L.hasOwnProperty(c)&&(e[c]=void 0===b[c]&&void 0!==l?l[c]:b[c])}c=arguments.length-2;if(1===c)e.children=d;else if(1<c){l=Array(c);for(var m=0;m<c;m++)l[m]=arguments[m+2];e.children=l}return{$$typeof:p,type:a.type,key:g,ref:k,props:e,_owner:f}},createFactory:function(a){var b=M.bind(null,a);\nb.type=a;return b},isValidElement:N,version:\"16.9.0\",unstable_withSuspenseConfig:function(a,b){var d=I.suspense;I.suspense=void 0===b?null:b;try{a()}finally{I.suspense=d}},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentDispatcher:H,ReactCurrentBatchConfig:I,ReactCurrentOwner:J,IsSomeRendererActing:{current:!1},assign:h}},Y={default:X},Z=Y&&X||Y;module.exports=Z.default||Z;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","/** @license React v16.9.0\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';Object.defineProperty(exports,\"__esModule\",{value:!0});\nvar b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?Symbol.for(\"react.suspense_list\"):\n60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.fundamental\"):60117,w=b?Symbol.for(\"react.responder\"):60118;function x(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case h:return a;default:return u}}case t:case r:case d:return u}}}function y(a){return x(a)===m}exports.typeOf=x;exports.AsyncMode=l;\nexports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;exports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===v||a.$$typeof===w)};exports.isAsyncMode=function(a){return y(a)||x(a)===l};exports.isConcurrentMode=y;exports.isContextConsumer=function(a){return x(a)===k};exports.isContextProvider=function(a){return x(a)===h};\nexports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return x(a)===n};exports.isFragment=function(a){return x(a)===e};exports.isLazy=function(a){return x(a)===t};exports.isMemo=function(a){return x(a)===r};exports.isPortal=function(a){return x(a)===d};exports.isProfiler=function(a){return x(a)===g};exports.isStrictMode=function(a){return x(a)===f};exports.isSuspense=function(a){return x(a)===p};\n","/** @license React v16.9.0\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';Object.defineProperty(exports,\"__esModule\",{value:!0});\nvar b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?Symbol.for(\"react.suspense_list\"):\n60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.fundamental\"):60117,w=b?Symbol.for(\"react.responder\"):60118;function x(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case h:return a;default:return u}}case t:case r:case d:return u}}}function y(a){return x(a)===m}exports.typeOf=x;exports.AsyncMode=l;\nexports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;exports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===v||a.$$typeof===w)};exports.isAsyncMode=function(a){return y(a)||x(a)===l};exports.isConcurrentMode=y;exports.isContextConsumer=function(a){return x(a)===k};exports.isContextProvider=function(a){return x(a)===h};\nexports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return x(a)===n};exports.isFragment=function(a){return x(a)===e};exports.isLazy=function(a){return x(a)===t};exports.isMemo=function(a){return x(a)===r};exports.isPortal=function(a){return x(a)===d};exports.isProfiler=function(a){return x(a)===g};exports.isStrictMode=function(a){return x(a)===f};exports.isSuspense=function(a){return x(a)===p};\n","/** @license React v16.9.0\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),m=require(\"object-assign\"),q=require(\"scheduler\");function t(a){for(var b=a.message,c=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+b,d=1;d<arguments.length;d++)c+=\"&args[]=\"+encodeURIComponent(arguments[d]);a.message=\"Minified React error #\"+b+\"; visit \"+c+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings. \";return a}if(!aa)throw t(Error(227));var ba=null,ca={};\nfunction da(){if(ba)for(var a in ca){var b=ca[a],c=ba.indexOf(a);if(!(-1<c))throw t(Error(96),a);if(!ea[c]){if(!b.extractEvents)throw t(Error(97),a);ea[c]=b;c=b.eventTypes;for(var d in c){var e=void 0;var f=c[d],h=b,g=d;if(fa.hasOwnProperty(g))throw t(Error(99),g);fa[g]=f;var k=f.phasedRegistrationNames;if(k){for(e in k)k.hasOwnProperty(e)&&ha(k[e],h,g);e=!0}else f.registrationName?(ha(f.registrationName,h,g),e=!0):e=!1;if(!e)throw t(Error(98),d,a);}}}}\nfunction ha(a,b,c){if(ia[a])throw t(Error(100),a);ia[a]=b;ja[a]=b.eventTypes[c].dependencies}var ea=[],fa={},ia={},ja={};function ka(a,b,c,d,e,f,h,g,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(n){this.onError(n)}}var la=!1,ma=null,na=!1,oa=null,pa={onError:function(a){la=!0;ma=a}};function qa(a,b,c,d,e,f,h,g,k){la=!1;ma=null;ka.apply(pa,arguments)}\nfunction ra(a,b,c,d,e,f,h,g,k){qa.apply(this,arguments);if(la){if(la){var l=ma;la=!1;ma=null}else throw t(Error(198));na||(na=!0,oa=l)}}var sa=null,ta=null,va=null;function wa(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=va(c);ra(d,b,void 0,a);a.currentTarget=null}function xa(a,b){if(null==b)throw t(Error(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}\nfunction ya(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var za=null;function Aa(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;d<b.length&&!a.isPropagationStopped();d++)wa(a,b[d],c[d]);else b&&wa(a,b,c);a._dispatchListeners=null;a._dispatchInstances=null;a.isPersistent()||a.constructor.release(a)}}function Ba(a){null!==a&&(za=xa(za,a));a=za;za=null;if(a){ya(a,Aa);if(za)throw t(Error(95));if(na)throw a=oa,na=!1,oa=null,a;}}\nvar Ca={injectEventPluginOrder:function(a){if(ba)throw t(Error(101));ba=Array.prototype.slice.call(a);da()},injectEventPluginsByName:function(a){var b=!1,c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];if(!ca.hasOwnProperty(c)||ca[c]!==d){if(ca[c])throw t(Error(102),c);ca[c]=d;b=!0}}b&&da()}};\nfunction Da(a,b){var c=a.stateNode;if(!c)return null;var d=sa(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw t(Error(231),b,typeof c);\nreturn c}var Ea=Math.random().toString(36).slice(2),Fa=\"__reactInternalInstance$\"+Ea,Ga=\"__reactEventHandlers$\"+Ea;function Ha(a){if(a[Fa])return a[Fa];for(;!a[Fa];)if(a.parentNode)a=a.parentNode;else return null;a=a[Fa];return 5===a.tag||6===a.tag?a:null}function Ia(a){a=a[Fa];return!a||5!==a.tag&&6!==a.tag?null:a}function Ja(a){if(5===a.tag||6===a.tag)return a.stateNode;throw t(Error(33));}function Ka(a){return a[Ga]||null}function La(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Ma(a,b,c){if(b=Da(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=xa(c._dispatchListeners,b),c._dispatchInstances=xa(c._dispatchInstances,a)}function Na(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=La(b);for(b=c.length;0<b--;)Ma(c[b],\"captured\",a);for(b=0;b<c.length;b++)Ma(c[b],\"bubbled\",a)}}\nfunction Oa(a,b,c){a&&c&&c.dispatchConfig.registrationName&&(b=Da(a,c.dispatchConfig.registrationName))&&(c._dispatchListeners=xa(c._dispatchListeners,b),c._dispatchInstances=xa(c._dispatchInstances,a))}function Pa(a){a&&a.dispatchConfig.registrationName&&Oa(a._targetInst,null,a)}function Qa(a){ya(a,Na)}var Ra=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement);\nfunction Sa(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Ta={animationend:Sa(\"Animation\",\"AnimationEnd\"),animationiteration:Sa(\"Animation\",\"AnimationIteration\"),animationstart:Sa(\"Animation\",\"AnimationStart\"),transitionend:Sa(\"Transition\",\"TransitionEnd\")},Ua={},Va={};\nRa&&(Va=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Ta.animationend.animation,delete Ta.animationiteration.animation,delete Ta.animationstart.animation),\"TransitionEvent\"in window||delete Ta.transitionend.transition);function Wa(a){if(Ua[a])return Ua[a];if(!Ta[a])return a;var b=Ta[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Va)return Ua[a]=b[c];return a}\nvar Xa=Wa(\"animationend\"),Ya=Wa(\"animationiteration\"),Za=Wa(\"animationstart\"),ab=Wa(\"transitionend\"),bb=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),cb=null,db=null,eb=null;\nfunction fb(){if(eb)return eb;var a,b=db,c=b.length,d,e=\"value\"in cb?cb.value:cb.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var h=c-a;for(d=1;d<=h&&b[c-d]===e[f-d];d++);return eb=e.slice(a,1<d?1-d:void 0)}function gb(){return!0}function hb(){return!1}\nfunction y(a,b,c,d){this.dispatchConfig=a;this._targetInst=b;this.nativeEvent=c;a=this.constructor.Interface;for(var e in a)a.hasOwnProperty(e)&&((b=a[e])?this[e]=b(c):\"target\"===e?this.target=d:this[e]=c[e]);this.isDefaultPrevented=(null!=c.defaultPrevented?c.defaultPrevented:!1===c.returnValue)?gb:hb;this.isPropagationStopped=hb;return this}\nm(y.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&(a.returnValue=!1),this.isDefaultPrevented=gb)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=gb)},persist:function(){this.isPersistent=gb},isPersistent:hb,destructor:function(){var a=this.constructor.Interface,\nb;for(b in a)this[b]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null;this.isPropagationStopped=this.isDefaultPrevented=hb;this._dispatchInstances=this._dispatchListeners=null}});y.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};\ny.extend=function(a){function b(){}function c(){return d.apply(this,arguments)}var d=this;b.prototype=d.prototype;var e=new b;m(e,c.prototype);c.prototype=e;c.prototype.constructor=c;c.Interface=m({},d.Interface,a);c.extend=d.extend;ib(c);return c};ib(y);function jb(a,b,c,d){if(this.eventPool.length){var e=this.eventPool.pop();this.call(e,a,b,c,d);return e}return new this(a,b,c,d)}\nfunction kb(a){if(!(a instanceof this))throw t(Error(279));a.destructor();10>this.eventPool.length&&this.eventPool.push(a)}function ib(a){a.eventPool=[];a.getPooled=jb;a.release=kb}var lb=y.extend({data:null}),mb=y.extend({data:null}),nb=[9,13,27,32],ob=Ra&&\"CompositionEvent\"in window,pb=null;Ra&&\"documentMode\"in document&&(pb=document.documentMode);\nvar qb=Ra&&\"TextEvent\"in window&&!pb,sb=Ra&&(!ob||pb&&8<pb&&11>=pb),tb=String.fromCharCode(32),ub={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},vb=!1;\nfunction wb(a,b){switch(a){case \"keyup\":return-1!==nb.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function xb(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var yb=!1;function Ab(a,b){switch(a){case \"compositionend\":return xb(b);case \"keypress\":if(32!==b.which)return null;vb=!0;return tb;case \"textInput\":return a=b.data,a===tb&&vb?null:a;default:return null}}\nfunction Bb(a,b){if(yb)return\"compositionend\"===a||!ob&&wb(a,b)?(a=fb(),eb=db=cb=null,yb=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return sb&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar Cb={eventTypes:ub,extractEvents:function(a,b,c,d){var e=void 0;var f=void 0;if(ob)b:{switch(a){case \"compositionstart\":e=ub.compositionStart;break b;case \"compositionend\":e=ub.compositionEnd;break b;case \"compositionupdate\":e=ub.compositionUpdate;break b}e=void 0}else yb?wb(a,c)&&(e=ub.compositionEnd):\"keydown\"===a&&229===c.keyCode&&(e=ub.compositionStart);e?(sb&&\"ko\"!==c.locale&&(yb||e!==ub.compositionStart?e===ub.compositionEnd&&yb&&(f=fb()):(cb=d,db=\"value\"in cb?cb.value:cb.textContent,yb=\n!0)),e=lb.getPooled(e,b,c,d),f?e.data=f:(f=xb(c),null!==f&&(e.data=f)),Qa(e),f=e):f=null;(a=qb?Ab(a,c):Bb(a,c))?(b=mb.getPooled(ub.beforeInput,b,c,d),b.data=a,Qa(b)):b=null;return null===f?b:null===b?f:[f,b]}},Db=null,Eb=null,Fb=null;function Gb(a){if(a=ta(a)){if(\"function\"!==typeof Db)throw t(Error(280));var b=sa(a.stateNode);Db(a.stateNode,a.type,b)}}function Hb(a){Eb?Fb?Fb.push(a):Fb=[a]:Eb=a}function Ib(){if(Eb){var a=Eb,b=Fb;Fb=Eb=null;Gb(a);if(b)for(a=0;a<b.length;a++)Gb(b[a])}}\nfunction Jb(a,b){return a(b)}function Kb(a,b,c,d){return a(b,c,d)}function Lb(){}var Mb=Jb,Nb=!1;function Ob(){if(null!==Eb||null!==Fb)Lb(),Ib()}var Pb={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Qb(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!Pb[a.type]:\"textarea\"===b?!0:!1}\nfunction Rb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}function Sb(a){if(!Ra)return!1;a=\"on\"+a;var b=a in document;b||(b=document.createElement(\"div\"),b.setAttribute(a,\"return;\"),b=\"function\"===typeof b[a]);return b}function Tb(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ub(a){var b=Tb(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Vb(a){a._valueTracker||(a._valueTracker=Ub(a))}function Wb(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Tb(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}var Xb=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Xb.hasOwnProperty(\"ReactCurrentDispatcher\")||(Xb.ReactCurrentDispatcher={current:null});Xb.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Xb.ReactCurrentBatchConfig={suspense:null});\nvar Yb=/^(.*)[\\\\\\/]/,B=\"function\"===typeof Symbol&&Symbol.for,Zb=B?Symbol.for(\"react.element\"):60103,$b=B?Symbol.for(\"react.portal\"):60106,ac=B?Symbol.for(\"react.fragment\"):60107,bc=B?Symbol.for(\"react.strict_mode\"):60108,cc=B?Symbol.for(\"react.profiler\"):60114,dc=B?Symbol.for(\"react.provider\"):60109,ec=B?Symbol.for(\"react.context\"):60110,fc=B?Symbol.for(\"react.concurrent_mode\"):60111,gc=B?Symbol.for(\"react.forward_ref\"):60112,hc=B?Symbol.for(\"react.suspense\"):60113,ic=B?Symbol.for(\"react.suspense_list\"):\n60120,jc=B?Symbol.for(\"react.memo\"):60115,kc=B?Symbol.for(\"react.lazy\"):60116;B&&Symbol.for(\"react.fundamental\");B&&Symbol.for(\"react.responder\");var lc=\"function\"===typeof Symbol&&Symbol.iterator;function mc(a){if(null===a||\"object\"!==typeof a)return null;a=lc&&a[lc]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nfunction oc(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ac:return\"Fragment\";case $b:return\"Portal\";case cc:return\"Profiler\";case bc:return\"StrictMode\";case hc:return\"Suspense\";case ic:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case ec:return\"Context.Consumer\";case dc:return\"Context.Provider\";case gc:var b=a.render;b=b.displayName||b.name||\"\";return a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\n\"ForwardRef\");case jc:return oc(a.type);case kc:if(a=1===a._status?a._result:null)return oc(a)}return null}function pc(a){var b=\"\";do{a:switch(a.tag){case 3:case 4:case 6:case 7:case 10:case 9:var c=\"\";break a;default:var d=a._debugOwner,e=a._debugSource,f=oc(a.type);c=null;d&&(c=oc(d.type));d=f;f=\"\";e?f=\" (at \"+e.fileName.replace(Yb,\"\")+\":\"+e.lineNumber+\")\":c&&(f=\" (created by \"+c+\")\");c=\"\\n    in \"+(d||\"Unknown\")+f}b+=c;a=a.return}while(a);return b}\nvar qc=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,rc=Object.prototype.hasOwnProperty,sc={},tc={};\nfunction uc(a){if(rc.call(tc,a))return!0;if(rc.call(sc,a))return!1;if(qc.test(a))return tc[a]=!0;sc[a]=!0;return!1}function vc(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction wc(a,b,c,d){if(null===b||\"undefined\"===typeof b||vc(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function D(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var F={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){F[a]=new D(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];F[b]=new D(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){F[a]=new D(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){F[a]=new D(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){F[a]=new D(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){F[a]=new D(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){F[a]=new D(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){F[a]=new D(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){F[a]=new D(a,5,!1,a.toLowerCase(),null,!1)});var xc=/[\\-:]([a-z])/g;function yc(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(xc,\nyc);F[b]=new D(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(xc,yc);F[b]=new D(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(xc,yc);F[b]=new D(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){F[a]=new D(a,1,!1,a.toLowerCase(),null,!1)});\nF.xlinkHref=new D(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){F[a]=new D(a,1,!1,a.toLowerCase(),null,!0)});\nfunction zc(a,b,c,d){var e=F.hasOwnProperty(b)?F[b]:null;var f=null!==e?0===e.type:d?!1:!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1]?!1:!0;f||(wc(b,c,e,d)&&(c=null),d||null===e?uc(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c))))}\nfunction Ac(a){switch(typeof a){case \"boolean\":case \"number\":case \"object\":case \"string\":case \"undefined\":return a;default:return\"\"}}function Bc(a,b){var c=b.checked;return m({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}\nfunction Cc(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Ac(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function Dc(a,b){b=b.checked;null!=b&&zc(a,\"checked\",b,!1)}\nfunction Ec(a,b){Dc(a,b);var c=Ac(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?Fc(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&Fc(a,b.type,Ac(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction Gc(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!a.defaultChecked;a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction Fc(a,b,c){if(\"number\"!==b||a.ownerDocument.activeElement!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var Hc={change:{phasedRegistrationNames:{bubbled:\"onChange\",captured:\"onChangeCapture\"},dependencies:\"blur change click focus input keydown keyup selectionchange\".split(\" \")}};function Ic(a,b,c){a=y.getPooled(Hc.change,a,b,c);a.type=\"change\";Hb(c);Qa(a);return a}var Jc=null,Kc=null;function Lc(a){Ba(a)}\nfunction Mc(a){var b=Ja(a);if(Wb(b))return a}function Nc(a,b){if(\"change\"===a)return b}var Oc=!1;Ra&&(Oc=Sb(\"input\")&&(!document.documentMode||9<document.documentMode));function Pc(){Jc&&(Jc.detachEvent(\"onpropertychange\",Qc),Kc=Jc=null)}function Qc(a){if(\"value\"===a.propertyName&&Mc(Kc))if(a=Ic(Kc,a,Rb(a)),Nb)Ba(a);else{Nb=!0;try{Jb(Lc,a)}finally{Nb=!1,Ob()}}}function Rc(a,b,c){\"focus\"===a?(Pc(),Jc=b,Kc=c,Jc.attachEvent(\"onpropertychange\",Qc)):\"blur\"===a&&Pc()}\nfunction Sc(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return Mc(Kc)}function Tc(a,b){if(\"click\"===a)return Mc(b)}function Uc(a,b){if(\"input\"===a||\"change\"===a)return Mc(b)}\nvar Vc={eventTypes:Hc,_isInputEventSupported:Oc,extractEvents:function(a,b,c,d){var e=b?Ja(b):window,f=void 0,h=void 0,g=e.nodeName&&e.nodeName.toLowerCase();\"select\"===g||\"input\"===g&&\"file\"===e.type?f=Nc:Qb(e)?Oc?f=Uc:(f=Sc,h=Rc):(g=e.nodeName)&&\"input\"===g.toLowerCase()&&(\"checkbox\"===e.type||\"radio\"===e.type)&&(f=Tc);if(f&&(f=f(a,b)))return Ic(f,c,d);h&&h(a,e,b);\"blur\"===a&&(a=e._wrapperState)&&a.controlled&&\"number\"===e.type&&Fc(e,\"number\",e.value)}},Wc=y.extend({view:null,detail:null}),Xc={Alt:\"altKey\",\nControl:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Yc(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Xc[a])?!!b[a]:!1}function Zc(){return Yc}\nvar $c=0,ad=0,bd=!1,cd=!1,dd=Wc.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Zc,button:null,buttons:null,relatedTarget:function(a){return a.relatedTarget||(a.fromElement===a.srcElement?a.toElement:a.fromElement)},movementX:function(a){if(\"movementX\"in a)return a.movementX;var b=$c;$c=a.screenX;return bd?\"mousemove\"===a.type?a.screenX-b:0:(bd=!0,0)},movementY:function(a){if(\"movementY\"in a)return a.movementY;\nvar b=ad;ad=a.screenY;return cd?\"mousemove\"===a.type?a.screenY-b:0:(cd=!0,0)}}),ed=dd.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),fd={mouseEnter:{registrationName:\"onMouseEnter\",dependencies:[\"mouseout\",\"mouseover\"]},mouseLeave:{registrationName:\"onMouseLeave\",dependencies:[\"mouseout\",\"mouseover\"]},pointerEnter:{registrationName:\"onPointerEnter\",dependencies:[\"pointerout\",\"pointerover\"]},pointerLeave:{registrationName:\"onPointerLeave\",\ndependencies:[\"pointerout\",\"pointerover\"]}},gd={eventTypes:fd,extractEvents:function(a,b,c,d){var e=\"mouseover\"===a||\"pointerover\"===a,f=\"mouseout\"===a||\"pointerout\"===a;if(e&&(c.relatedTarget||c.fromElement)||!f&&!e)return null;e=d.window===d?d:(e=d.ownerDocument)?e.defaultView||e.parentWindow:window;f?(f=b,b=(b=c.relatedTarget||c.toElement)?Ha(b):null):f=null;if(f===b)return null;var h=void 0,g=void 0,k=void 0,l=void 0;if(\"mouseout\"===a||\"mouseover\"===a)h=dd,g=fd.mouseLeave,k=fd.mouseEnter,l=\"mouse\";\nelse if(\"pointerout\"===a||\"pointerover\"===a)h=ed,g=fd.pointerLeave,k=fd.pointerEnter,l=\"pointer\";var n=null==f?e:Ja(f);e=null==b?e:Ja(b);a=h.getPooled(g,f,c,d);a.type=l+\"leave\";a.target=n;a.relatedTarget=e;c=h.getPooled(k,b,c,d);c.type=l+\"enter\";c.target=e;c.relatedTarget=n;d=b;if(f&&d)a:{b=f;e=d;l=0;for(h=b;h;h=La(h))l++;h=0;for(k=e;k;k=La(k))h++;for(;0<l-h;)b=La(b),l--;for(;0<h-l;)e=La(e),h--;for(;l--;){if(b===e||b===e.alternate)break a;b=La(b);e=La(e)}b=null}else b=null;e=b;for(b=[];f&&f!==e;){l=\nf.alternate;if(null!==l&&l===e)break;b.push(f);f=La(f)}for(f=[];d&&d!==e;){l=d.alternate;if(null!==l&&l===e)break;f.push(d);d=La(d)}for(d=0;d<b.length;d++)Oa(b[d],\"bubbled\",a);for(d=f.length;0<d--;)Oa(f[d],\"captured\",c);return[a,c]}};function hd(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var id=Object.prototype.hasOwnProperty;\nfunction jd(a,b){if(hd(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!id.call(b,c[d])||!hd(a[c[d]],b[c[d]]))return!1;return!0}function kd(a,b){return{responder:a,props:b}}new Map;new Map;new Set;new Map;\nfunction ld(a){var b=a;if(a.alternate)for(;b.return;)b=b.return;else{if(0!==(b.effectTag&2))return 1;for(;b.return;)if(b=b.return,0!==(b.effectTag&2))return 1}return 3===b.tag?2:3}function od(a){if(2!==ld(a))throw t(Error(188));}\nfunction pd(a){var b=a.alternate;if(!b){b=ld(a);if(3===b)throw t(Error(188));return 1===b?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return od(e),a;if(f===d)return od(e),b;f=f.sibling}throw t(Error(188));}if(c.return!==d.return)c=e,d=f;else{for(var h=!1,g=e.child;g;){if(g===c){h=!0;c=e;d=f;break}if(g===d){h=!0;d=e;c=f;break}g=g.sibling}if(!h){for(g=f.child;g;){if(g===\nc){h=!0;c=f;d=e;break}if(g===d){h=!0;d=f;c=e;break}g=g.sibling}if(!h)throw t(Error(189));}}if(c.alternate!==d)throw t(Error(190));}if(3!==c.tag)throw t(Error(188));return c.stateNode.current===c?a:b}function qd(a){a=pd(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nvar rd=y.extend({animationName:null,elapsedTime:null,pseudoElement:null}),sd=y.extend({clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),td=Wc.extend({relatedTarget:null});function ud(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}\nvar vd={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},wd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",\n116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},xd=Wc.extend({key:function(a){if(a.key){var b=vd[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=ud(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?wd[a.keyCode]||\"Unidentified\":\"\"},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Zc,charCode:function(a){return\"keypress\"===\na.type?ud(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===a.type?ud(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),yd=dd.extend({dataTransfer:null}),zd=Wc.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Zc}),Ad=y.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),Bd=dd.extend({deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in\na?-a.wheelDeltaX:0},deltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:null,deltaMode:null}),Cd=[[\"blur\",\"blur\",0],[\"cancel\",\"cancel\",0],[\"click\",\"click\",0],[\"close\",\"close\",0],[\"contextmenu\",\"contextMenu\",0],[\"copy\",\"copy\",0],[\"cut\",\"cut\",0],[\"auxclick\",\"auxClick\",0],[\"dblclick\",\"doubleClick\",0],[\"dragend\",\"dragEnd\",0],[\"dragstart\",\"dragStart\",0],[\"drop\",\"drop\",0],[\"focus\",\"focus\",0],[\"input\",\"input\",0],[\"invalid\",\"invalid\",0],\n[\"keydown\",\"keyDown\",0],[\"keypress\",\"keyPress\",0],[\"keyup\",\"keyUp\",0],[\"mousedown\",\"mouseDown\",0],[\"mouseup\",\"mouseUp\",0],[\"paste\",\"paste\",0],[\"pause\",\"pause\",0],[\"play\",\"play\",0],[\"pointercancel\",\"pointerCancel\",0],[\"pointerdown\",\"pointerDown\",0],[\"pointerup\",\"pointerUp\",0],[\"ratechange\",\"rateChange\",0],[\"reset\",\"reset\",0],[\"seeked\",\"seeked\",0],[\"submit\",\"submit\",0],[\"touchcancel\",\"touchCancel\",0],[\"touchend\",\"touchEnd\",0],[\"touchstart\",\"touchStart\",0],[\"volumechange\",\"volumeChange\",0],[\"drag\",\"drag\",\n1],[\"dragenter\",\"dragEnter\",1],[\"dragexit\",\"dragExit\",1],[\"dragleave\",\"dragLeave\",1],[\"dragover\",\"dragOver\",1],[\"mousemove\",\"mouseMove\",1],[\"mouseout\",\"mouseOut\",1],[\"mouseover\",\"mouseOver\",1],[\"pointermove\",\"pointerMove\",1],[\"pointerout\",\"pointerOut\",1],[\"pointerover\",\"pointerOver\",1],[\"scroll\",\"scroll\",1],[\"toggle\",\"toggle\",1],[\"touchmove\",\"touchMove\",1],[\"wheel\",\"wheel\",1],[\"abort\",\"abort\",2],[Xa,\"animationEnd\",2],[Ya,\"animationIteration\",2],[Za,\"animationStart\",2],[\"canplay\",\"canPlay\",2],[\"canplaythrough\",\n\"canPlayThrough\",2],[\"durationchange\",\"durationChange\",2],[\"emptied\",\"emptied\",2],[\"encrypted\",\"encrypted\",2],[\"ended\",\"ended\",2],[\"error\",\"error\",2],[\"gotpointercapture\",\"gotPointerCapture\",2],[\"load\",\"load\",2],[\"loadeddata\",\"loadedData\",2],[\"loadedmetadata\",\"loadedMetadata\",2],[\"loadstart\",\"loadStart\",2],[\"lostpointercapture\",\"lostPointerCapture\",2],[\"playing\",\"playing\",2],[\"progress\",\"progress\",2],[\"seeking\",\"seeking\",2],[\"stalled\",\"stalled\",2],[\"suspend\",\"suspend\",2],[\"timeupdate\",\"timeUpdate\",\n2],[ab,\"transitionEnd\",2],[\"waiting\",\"waiting\",2]],Dd={},Ed={},Fd=0;for(;Fd<Cd.length;Fd++){var Gd=Cd[Fd],Hd=Gd[0],Id=Gd[1],Jd=Gd[2],Kd=\"on\"+(Id[0].toUpperCase()+Id.slice(1)),Ld={phasedRegistrationNames:{bubbled:Kd,captured:Kd+\"Capture\"},dependencies:[Hd],eventPriority:Jd};Dd[Id]=Ld;Ed[Hd]=Ld}\nvar Md={eventTypes:Dd,getEventPriority:function(a){a=Ed[a];return void 0!==a?a.eventPriority:2},extractEvents:function(a,b,c,d){var e=Ed[a];if(!e)return null;switch(a){case \"keypress\":if(0===ud(c))return null;case \"keydown\":case \"keyup\":a=xd;break;case \"blur\":case \"focus\":a=td;break;case \"click\":if(2===c.button)return null;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":a=dd;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":a=\nyd;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":a=zd;break;case Xa:case Ya:case Za:a=rd;break;case ab:a=Ad;break;case \"scroll\":a=Wc;break;case \"wheel\":a=Bd;break;case \"copy\":case \"cut\":case \"paste\":a=sd;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":a=ed;break;default:a=y}b=a.getPooled(e,b,c,d);Qa(b);return b}},Nd=Md.getEventPriority,Od=[];\nfunction Pd(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d;for(d=c;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo;if(!d)break;a.ancestors.push(c);c=Ha(d)}while(c);for(c=0;c<a.ancestors.length;c++){b=a.ancestors[c];var e=Rb(a.nativeEvent);d=a.topLevelType;for(var f=a.nativeEvent,h=null,g=0;g<ea.length;g++){var k=ea[g];k&&(k=k.extractEvents(d,b,f,e))&&(h=xa(h,k))}Ba(h)}}var Qd=!0;function G(a,b){Rd(b,a,!1)}\nfunction Rd(a,b,c){switch(Nd(b)){case 0:var d=Sd.bind(null,b,1);break;case 1:d=Td.bind(null,b,1);break;default:d=Ud.bind(null,b,1)}c?a.addEventListener(b,d,!0):a.addEventListener(b,d,!1)}function Sd(a,b,c){Nb||Lb();var d=Ud,e=Nb;Nb=!0;try{Kb(d,a,b,c)}finally{(Nb=e)||Ob()}}function Td(a,b,c){Ud(a,b,c)}\nfunction Ud(a,b,c){if(Qd){b=Rb(c);b=Ha(b);null===b||\"number\"!==typeof b.tag||2===ld(b)||(b=null);if(Od.length){var d=Od.pop();d.topLevelType=a;d.nativeEvent=c;d.targetInst=b;a=d}else a={topLevelType:a,nativeEvent:c,targetInst:b,ancestors:[]};try{if(c=a,Nb)Pd(c,void 0);else{Nb=!0;try{Mb(Pd,c,void 0)}finally{Nb=!1,Ob()}}}finally{a.topLevelType=null,a.nativeEvent=null,a.targetInst=null,a.ancestors.length=0,10>Od.length&&Od.push(a)}}}var Vd=new (\"function\"===typeof WeakMap?WeakMap:Map);\nfunction Wd(a){var b=Vd.get(a);void 0===b&&(b=new Set,Vd.set(a,b));return b}function Xd(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function Yd(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Zd(a,b){var c=Yd(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Yd(c)}}function $d(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?$d(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction ae(){for(var a=window,b=Xd();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xd(a.document)}return b}function be(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nvar ce=Ra&&\"documentMode\"in document&&11>=document.documentMode,de={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ee=null,fe=null,ge=null,he=!1;\nfunction ie(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(he||null==ee||ee!==Xd(c))return null;c=ee;\"selectionStart\"in c&&be(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return ge&&jd(ge,c)?null:(ge=c,a=y.getPooled(de.select,fe,a,b),a.type=\"select\",a.target=ee,Qa(a),a)}\nvar je={eventTypes:de,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=Wd(e);f=ja.onSelect;for(var h=0;h<f.length;h++)if(!e.has(f[h])){e=!1;break a}e=!0}f=!e}if(f)return null;e=b?Ja(b):window;switch(a){case \"focus\":if(Qb(e)||\"true\"===e.contentEditable)ee=e,fe=b,ge=null;break;case \"blur\":ge=fe=ee=null;break;case \"mousedown\":he=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":return he=!1,ie(c,d);case \"selectionchange\":if(ce)break;\ncase \"keydown\":case \"keyup\":return ie(c,d)}return null}};Ca.injectEventPluginOrder(\"ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \"));sa=Ka;ta=Ia;va=Ja;Ca.injectEventPluginsByName({SimpleEventPlugin:Md,EnterLeaveEventPlugin:gd,ChangeEventPlugin:Vc,SelectEventPlugin:je,BeforeInputEventPlugin:Cb});function ke(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}\nfunction le(a,b){a=m({children:void 0},b);if(b=ke(b.children))a.children=b;return a}function me(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+Ac(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction ne(a,b){if(null!=b.dangerouslySetInnerHTML)throw t(Error(91));return m({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function oe(a,b){var c=b.value;if(null==c){c=b.defaultValue;b=b.children;if(null!=b){if(null!=c)throw t(Error(92));if(Array.isArray(b)){if(!(1>=b.length))throw t(Error(93));b=b[0]}c=b}null==c&&(c=\"\")}a._wrapperState={initialValue:Ac(c)}}\nfunction pe(a,b){var c=Ac(b.value),d=Ac(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function qe(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)}var re={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction se(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function te(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?se(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar ue=void 0,ve=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==re.svg||\"innerHTML\"in a)a.innerHTML=b;else{ue=ue||document.createElement(\"div\");ue.innerHTML=\"<svg>\"+b+\"</svg>\";for(b=ue.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction we(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar xe={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ye=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(xe).forEach(function(a){ye.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);xe[b]=xe[a]})});function ze(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||xe.hasOwnProperty(a)&&xe[a]?(\"\"+b).trim():b+\"px\"}\nfunction Ae(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=ze(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var Ce=m({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction De(a,b){if(b){if(Ce[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw t(Error(137),a,\"\");if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw t(Error(60));if(!(\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML))throw t(Error(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw t(Error(62),\"\");}}\nfunction Ee(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}\nfunction Fe(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=Wd(a);b=ja[b];for(var d=0;d<b.length;d++){var e=b[d];if(!c.has(e)){switch(e){case \"scroll\":Rd(a,\"scroll\",!0);break;case \"focus\":case \"blur\":Rd(a,\"focus\",!0);Rd(a,\"blur\",!0);c.add(\"blur\");c.add(\"focus\");break;case \"cancel\":case \"close\":Sb(e)&&Rd(a,e,!0);break;case \"invalid\":case \"submit\":case \"reset\":break;default:-1===bb.indexOf(e)&&G(e,a)}c.add(e)}}}function Ge(){}var He=null,Ie=null;\nfunction Je(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}function Ke(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Le=\"function\"===typeof setTimeout?setTimeout:void 0,Me=\"function\"===typeof clearTimeout?clearTimeout:void 0;\nfunction Ne(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}new Set;var Oe=[],Pe=-1;function H(a){0>Pe||(a.current=Oe[Pe],Oe[Pe]=null,Pe--)}function J(a,b){Pe++;Oe[Pe]=a.current;a.current=b}var Qe={},L={current:Qe},M={current:!1},Re=Qe;\nfunction Se(a,b){var c=a.type.contextTypes;if(!c)return Qe;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function N(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Te(a){H(M,a);H(L,a)}function Ue(a){H(M,a);H(L,a)}\nfunction Ve(a,b,c){if(L.current!==Qe)throw t(Error(168));J(L,b,a);J(M,c,a)}function We(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw t(Error(108),oc(b)||\"Unknown\",e);return m({},c,d)}function Xe(a){var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||Qe;Re=L.current;J(L,b,a);J(M,M.current,a);return!0}\nfunction Ye(a,b,c){var d=a.stateNode;if(!d)throw t(Error(169));c?(b=We(a,b,Re),d.__reactInternalMemoizedMergedChildContext=b,H(M,a),H(L,a),J(L,b,a)):H(M,a);J(M,c,a)}\nvar Ze=q.unstable_runWithPriority,$e=q.unstable_scheduleCallback,af=q.unstable_cancelCallback,bf=q.unstable_shouldYield,cf=q.unstable_requestPaint,df=q.unstable_now,ef=q.unstable_getCurrentPriorityLevel,ff=q.unstable_ImmediatePriority,hf=q.unstable_UserBlockingPriority,jf=q.unstable_NormalPriority,kf=q.unstable_LowPriority,lf=q.unstable_IdlePriority,mf={},nf=void 0!==cf?cf:function(){},of=null,pf=null,qf=!1,rf=df(),sf=1E4>rf?df:function(){return df()-rf};\nfunction tf(){switch(ef()){case ff:return 99;case hf:return 98;case jf:return 97;case kf:return 96;case lf:return 95;default:throw t(Error(332));}}function uf(a){switch(a){case 99:return ff;case 98:return hf;case 97:return jf;case 96:return kf;case 95:return lf;default:throw t(Error(332));}}function vf(a,b){a=uf(a);return Ze(a,b)}function wf(a,b,c){a=uf(a);return $e(a,b,c)}function xf(a){null===of?(of=[a],pf=$e(ff,yf)):of.push(a);return mf}function O(){null!==pf&&af(pf);yf()}\nfunction yf(){if(!qf&&null!==of){qf=!0;var a=0;try{var b=of;vf(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});of=null}catch(c){throw null!==of&&(of=of.slice(a+1)),$e(ff,O),c;}finally{qf=!1}}}function zf(a,b){if(1073741823===b)return 99;if(1===b)return 95;a=10*(1073741821-b)-10*(1073741821-a);return 0>=a?99:250>=a?98:5250>=a?97:95}function Af(a,b){if(a&&a.defaultProps){b=m({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c])}return b}\nfunction Bf(a){var b=a._result;switch(a._status){case 1:return b;case 2:throw b;case 0:throw b;default:a._status=0;b=a._ctor;b=b();b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)});switch(a._status){case 1:return a._result;case 2:throw a._result;}a._result=b;throw b;}}var Cf={current:null},Df=null,Ef=null,Ff=null;function Gf(){Ff=Ef=Df=null}\nfunction Hf(a,b){var c=a.type._context;J(Cf,c._currentValue,a);c._currentValue=b}function If(a){var b=Cf.current;H(Cf,a);a.type._context._currentValue=b}function Jf(a,b){for(;null!==a;){var c=a.alternate;if(a.childExpirationTime<b)a.childExpirationTime=b,null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);else if(null!==c&&c.childExpirationTime<b)c.childExpirationTime=b;else break;a=a.return}}\nfunction Kf(a,b){Df=a;Ff=Ef=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(a.expirationTime>=b&&(Lf=!0),a.firstContext=null)}function Mf(a,b){if(Ff!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)Ff=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===Ef){if(null===Df)throw t(Error(308));Ef=b;Df.dependencies={expirationTime:0,firstContext:b,responders:null}}else Ef=Ef.next=b}return a._currentValue}var Nf=!1;\nfunction Of(a){return{baseState:a,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Pf(a){return{baseState:a.baseState,firstUpdate:a.firstUpdate,lastUpdate:a.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}\nfunction Qf(a,b){return{expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function Rf(a,b){null===a.lastUpdate?a.firstUpdate=a.lastUpdate=b:(a.lastUpdate.next=b,a.lastUpdate=b)}\nfunction Sf(a,b){var c=a.alternate;if(null===c){var d=a.updateQueue;var e=null;null===d&&(d=a.updateQueue=Of(a.memoizedState))}else d=a.updateQueue,e=c.updateQueue,null===d?null===e?(d=a.updateQueue=Of(a.memoizedState),e=c.updateQueue=Of(c.memoizedState)):d=a.updateQueue=Pf(e):null===e&&(e=c.updateQueue=Pf(d));null===e||d===e?Rf(d,b):null===d.lastUpdate||null===e.lastUpdate?(Rf(d,b),Rf(e,b)):(Rf(d,b),e.lastUpdate=b)}\nfunction Tf(a,b){var c=a.updateQueue;c=null===c?a.updateQueue=Of(a.memoizedState):Uf(a,c);null===c.lastCapturedUpdate?c.firstCapturedUpdate=c.lastCapturedUpdate=b:(c.lastCapturedUpdate.next=b,c.lastCapturedUpdate=b)}function Uf(a,b){var c=a.alternate;null!==c&&b===c.updateQueue&&(b=a.updateQueue=Pf(b));return b}\nfunction Vf(a,b,c,d,e,f){switch(c.tag){case 1:return a=c.payload,\"function\"===typeof a?a.call(f,d,e):a;case 3:a.effectTag=a.effectTag&-2049|64;case 0:a=c.payload;e=\"function\"===typeof a?a.call(f,d,e):a;if(null===e||void 0===e)break;return m({},d,e);case 2:Nf=!0}return d}\nfunction Wf(a,b,c,d,e){Nf=!1;b=Uf(a,b);for(var f=b.baseState,h=null,g=0,k=b.firstUpdate,l=f;null!==k;){var n=k.expirationTime;n<e?(null===h&&(h=k,f=l),g<n&&(g=n)):(Xf(n,k.suspenseConfig),l=Vf(a,b,k,l,c,d),null!==k.callback&&(a.effectTag|=32,k.nextEffect=null,null===b.lastEffect?b.firstEffect=b.lastEffect=k:(b.lastEffect.nextEffect=k,b.lastEffect=k)));k=k.next}n=null;for(k=b.firstCapturedUpdate;null!==k;){var z=k.expirationTime;z<e?(null===n&&(n=k,null===h&&(f=l)),g<z&&(g=z)):(l=Vf(a,b,k,l,c,d),null!==\nk.callback&&(a.effectTag|=32,k.nextEffect=null,null===b.lastCapturedEffect?b.firstCapturedEffect=b.lastCapturedEffect=k:(b.lastCapturedEffect.nextEffect=k,b.lastCapturedEffect=k)));k=k.next}null===h&&(b.lastUpdate=null);null===n?b.lastCapturedUpdate=null:a.effectTag|=32;null===h&&null===n&&(f=l);b.baseState=f;b.firstUpdate=h;b.firstCapturedUpdate=n;a.expirationTime=g;a.memoizedState=l}\nfunction Yf(a,b,c){null!==b.firstCapturedUpdate&&(null!==b.lastUpdate&&(b.lastUpdate.next=b.firstCapturedUpdate,b.lastUpdate=b.lastCapturedUpdate),b.firstCapturedUpdate=b.lastCapturedUpdate=null);Zf(b.firstEffect,c);b.firstEffect=b.lastEffect=null;Zf(b.firstCapturedEffect,c);b.firstCapturedEffect=b.lastCapturedEffect=null}function Zf(a,b){for(;null!==a;){var c=a.callback;if(null!==c){a.callback=null;var d=b;if(\"function\"!==typeof c)throw t(Error(191),c);c.call(d)}a=a.nextEffect}}\nvar $f=Xb.ReactCurrentBatchConfig,ag=(new aa.Component).refs;function bg(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:m({},b,c);a.memoizedState=c;d=a.updateQueue;null!==d&&0===a.expirationTime&&(d.baseState=c)}\nvar fg={isMounted:function(a){return(a=a._reactInternalFiber)?2===ld(a):!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=cg(),e=$f.suspense;d=dg(d,a,e);e=Qf(d,e);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);Sf(a,e);eg(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=cg(),e=$f.suspense;d=dg(d,a,e);e=Qf(d,e);e.tag=1;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);Sf(a,e);eg(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=cg(),d=$f.suspense;\nc=dg(c,a,d);d=Qf(c,d);d.tag=2;void 0!==b&&null!==b&&(d.callback=b);Sf(a,d);eg(a,c)}};function gg(a,b,c,d,e,f,h){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,h):b.prototype&&b.prototype.isPureReactComponent?!jd(c,d)||!jd(e,f):!0}\nfunction hg(a,b,c){var d=!1,e=Qe;var f=b.contextType;\"object\"===typeof f&&null!==f?f=Mf(f):(e=N(b)?Re:L.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Se(a,e):Qe);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=fg;a.stateNode=b;b._reactInternalFiber=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction ig(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&fg.enqueueReplaceState(b,b.state,null)}\nfunction jg(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=ag;var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=Mf(f):(f=N(b)?Re:L.current,e.context=Se(a,f));f=a.updateQueue;null!==f&&(Wf(a,f,c,e,d),e.state=a.memoizedState);f=b.getDerivedStateFromProps;\"function\"===typeof f&&(bg(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==\ntypeof e.componentWillMount||(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&fg.enqueueReplaceState(e,e.state,null),f=a.updateQueue,null!==f&&(Wf(a,f,c,e,d),e.state=a.memoizedState));\"function\"===typeof e.componentDidMount&&(a.effectTag|=4)}var kg=Array.isArray;\nfunction lg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;var d=void 0;if(c){if(1!==c.tag)throw t(Error(309));d=c.stateNode}if(!d)throw t(Error(147),a);var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===ag&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if(\"string\"!==typeof a)throw t(Error(284));if(!c._owner)throw t(Error(290),a);}return a}\nfunction mg(a,b){if(\"textarea\"!==a.type)throw t(Error(31),\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\");}\nfunction ng(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b,c){a=og(a,b,c);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.effectTag=\n2,c):d;b.effectTag=2;return c}function h(b){a&&null===b.alternate&&(b.effectTag=2);return b}function g(a,b,c,d){if(null===b||6!==b.tag)return b=pg(c,a.mode,d),b.return=a,b;b=e(b,c,d);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props,d),d.ref=lg(a,b,c),d.return=a,d;d=qg(c.type,c.key,c.props,null,a.mode,d);d.ref=lg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==\nc.implementation)return b=rg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[],d);b.return=a;return b}function n(a,b,c,d,f){if(null===b||7!==b.tag)return b=sg(c,a.mode,d,f),b.return=a,b;b=e(b,c,d);b.return=a;return b}function z(a,b,c){if(\"string\"===typeof b||\"number\"===typeof b)return b=pg(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case Zb:return c=qg(b.type,b.key,b.props,null,a.mode,c),c.ref=lg(a,null,b),c.return=a,c;case $b:return b=rg(b,a.mode,c),b.return=a,b}if(kg(b)||\nmc(b))return b=sg(b,a.mode,c,null),b.return=a,b;mg(a,b)}return null}function x(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c||\"number\"===typeof c)return null!==e?null:g(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Zb:return c.key===e?c.type===ac?n(a,b,c.props.children,d,e):k(a,b,c,d):null;case $b:return c.key===e?l(a,b,c,d):null}if(kg(c)||mc(c))return null!==e?null:n(a,b,c,d,null);mg(a,c)}return null}function v(a,b,c,d,e){if(\"string\"===typeof d||\"number\"===typeof d)return a=\na.get(c)||null,g(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case Zb:return a=a.get(null===d.key?c:d.key)||null,d.type===ac?n(b,a,d.props.children,e,d.key):k(b,a,d,e);case $b:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e)}if(kg(d)||mc(d))return a=a.get(c)||null,n(b,a,d,e,null);mg(b,d)}return null}function rb(e,h,g,k){for(var l=null,u=null,n=h,w=h=0,C=null;null!==n&&w<g.length;w++){n.index>w?(C=n,n=null):C=n.sibling;var p=x(e,n,g[w],k);if(null===p){null===n&&(n=C);break}a&&\nn&&null===p.alternate&&b(e,n);h=f(p,h,w);null===u?l=p:u.sibling=p;u=p;n=C}if(w===g.length)return c(e,n),l;if(null===n){for(;w<g.length;w++)n=z(e,g[w],k),null!==n&&(h=f(n,h,w),null===u?l=n:u.sibling=n,u=n);return l}for(n=d(e,n);w<g.length;w++)C=v(n,e,w,g[w],k),null!==C&&(a&&null!==C.alternate&&n.delete(null===C.key?w:C.key),h=f(C,h,w),null===u?l=C:u.sibling=C,u=C);a&&n.forEach(function(a){return b(e,a)});return l}function Be(e,h,g,k){var l=mc(g);if(\"function\"!==typeof l)throw t(Error(150));g=l.call(g);\nif(null==g)throw t(Error(151));for(var n=l=null,u=h,w=h=0,C=null,p=g.next();null!==u&&!p.done;w++,p=g.next()){u.index>w?(C=u,u=null):C=u.sibling;var r=x(e,u,p.value,k);if(null===r){null===u&&(u=C);break}a&&u&&null===r.alternate&&b(e,u);h=f(r,h,w);null===n?l=r:n.sibling=r;n=r;u=C}if(p.done)return c(e,u),l;if(null===u){for(;!p.done;w++,p=g.next())p=z(e,p.value,k),null!==p&&(h=f(p,h,w),null===n?l=p:n.sibling=p,n=p);return l}for(u=d(e,u);!p.done;w++,p=g.next())p=v(u,e,w,p.value,k),null!==p&&(a&&null!==\np.alternate&&u.delete(null===p.key?w:p.key),h=f(p,h,w),null===n?l=p:n.sibling=p,n=p);a&&u.forEach(function(a){return b(e,a)});return l}return function(a,d,f,g){var k=\"object\"===typeof f&&null!==f&&f.type===ac&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Zb:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){if(7===k.tag?f.type===ac:k.elementType===f.type){c(a,k.sibling);d=e(k,f.type===ac?f.props.children:f.props,g);d.ref=lg(a,k,f);d.return=a;a=d;break a}c(a,\nk);break}else b(a,k);k=k.sibling}f.type===ac?(d=sg(f.props.children,a.mode,g,f.key),d.return=a,a=d):(g=qg(f.type,f.key,f.props,null,a.mode,g),g.ref=lg(a,d,f),g.return=a,a=g)}return h(a);case $b:a:{for(k=f.key;null!==d;){if(d.key===k){if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[],g);d.return=a;a=d;break a}c(a,d);break}else b(a,d);d=d.sibling}d=rg(f,a.mode,g);d.return=a;a=d}return h(a)}if(\"string\"===typeof f||\n\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,g),d.return=a,a=d):(c(a,d),d=pg(f,a.mode,g),d.return=a,a=d),h(a);if(kg(f))return rb(a,d,f,g);if(mc(f))return Be(a,d,f,g);l&&mg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,t(Error(152),a.displayName||a.name||\"Component\");}return c(a,d)}}var tg=ng(!0),ug=ng(!1),vg={},wg={current:vg},xg={current:vg},yg={current:vg};function zg(a){if(a===vg)throw t(Error(174));return a}\nfunction Ag(a,b){J(yg,b,a);J(xg,a,a);J(wg,vg,a);var c=b.nodeType;switch(c){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:te(null,\"\");break;default:c=8===c?b.parentNode:b,b=c.namespaceURI||null,c=c.tagName,b=te(b,c)}H(wg,a);J(wg,b,a)}function Bg(a){H(wg,a);H(xg,a);H(yg,a)}function Cg(a){zg(yg.current);var b=zg(wg.current);var c=te(b,a.type);b!==c&&(J(xg,a,a),J(wg,c,a))}function Dg(a){xg.current===a&&(H(wg,a),H(xg,a))}var Eg=1,Fg=1,Gg=2,P={current:0};\nfunction Hg(a){for(var b=a;null!==b;){if(13===b.tag){if(null!==b.memoizedState)return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}\nvar Ig=0,Jg=2,Kg=4,Lg=8,Mg=16,Ng=32,Og=64,Pg=128,Qg=Xb.ReactCurrentDispatcher,Rg=0,Sg=null,Q=null,Tg=null,Ug=null,R=null,Vg=null,Wg=0,Xg=null,Yg=0,Zg=!1,$g=null,ah=0;function bh(){throw t(Error(321));}function ch(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!hd(a[c],b[c]))return!1;return!0}\nfunction dh(a,b,c,d,e,f){Rg=f;Sg=b;Tg=null!==a?a.memoizedState:null;Qg.current=null===Tg?eh:fh;b=c(d,e);if(Zg){do Zg=!1,ah+=1,Tg=null!==a?a.memoizedState:null,Vg=Ug,Xg=R=Q=null,Qg.current=fh,b=c(d,e);while(Zg);$g=null;ah=0}Qg.current=hh;a=Sg;a.memoizedState=Ug;a.expirationTime=Wg;a.updateQueue=Xg;a.effectTag|=Yg;a=null!==Q&&null!==Q.next;Rg=0;Vg=R=Ug=Tg=Q=Sg=null;Wg=0;Xg=null;Yg=0;if(a)throw t(Error(300));return b}\nfunction ih(){Qg.current=hh;Rg=0;Vg=R=Ug=Tg=Q=Sg=null;Wg=0;Xg=null;Yg=0;Zg=!1;$g=null;ah=0}function jh(){var a={memoizedState:null,baseState:null,queue:null,baseUpdate:null,next:null};null===R?Ug=R=a:R=R.next=a;return R}function kh(){if(null!==Vg)R=Vg,Vg=R.next,Q=Tg,Tg=null!==Q?Q.next:null;else{if(null===Tg)throw t(Error(310));Q=Tg;var a={memoizedState:Q.memoizedState,baseState:Q.baseState,queue:Q.queue,baseUpdate:Q.baseUpdate,next:null};R=null===R?Ug=a:R.next=a;Tg=Q.next}return R}\nfunction lh(a,b){return\"function\"===typeof b?b(a):b}\nfunction mh(a){var b=kh(),c=b.queue;if(null===c)throw t(Error(311));c.lastRenderedReducer=a;if(0<ah){var d=c.dispatch;if(null!==$g){var e=$g.get(c);if(void 0!==e){$g.delete(c);var f=b.memoizedState;do f=a(f,e.action),e=e.next;while(null!==e);hd(f,b.memoizedState)||(Lf=!0);b.memoizedState=f;b.baseUpdate===c.last&&(b.baseState=f);c.lastRenderedState=f;return[f,d]}}return[b.memoizedState,d]}d=c.last;var h=b.baseUpdate;f=b.baseState;null!==h?(null!==d&&(d.next=null),d=h.next):d=null!==d?d.next:null;if(null!==\nd){var g=e=null,k=d,l=!1;do{var n=k.expirationTime;n<Rg?(l||(l=!0,g=h,e=f),n>Wg&&(Wg=n)):(Xf(n,k.suspenseConfig),f=k.eagerReducer===a?k.eagerState:a(f,k.action));h=k;k=k.next}while(null!==k&&k!==d);l||(g=h,e=f);hd(f,b.memoizedState)||(Lf=!0);b.memoizedState=f;b.baseUpdate=g;b.baseState=e;c.lastRenderedState=f}return[b.memoizedState,c.dispatch]}\nfunction nh(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};null===Xg?(Xg={lastEffect:null},Xg.lastEffect=a.next=a):(b=Xg.lastEffect,null===b?Xg.lastEffect=a.next=a:(c=b.next,b.next=a,a.next=c,Xg.lastEffect=a));return a}function oh(a,b,c,d){var e=jh();Yg|=a;e.memoizedState=nh(b,c,void 0,void 0===d?null:d)}\nfunction ph(a,b,c,d){var e=kh();d=void 0===d?null:d;var f=void 0;if(null!==Q){var h=Q.memoizedState;f=h.destroy;if(null!==d&&ch(d,h.deps)){nh(Ig,c,f,d);return}}Yg|=a;e.memoizedState=nh(b,c,f,d)}function qh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function rh(){}\nfunction sh(a,b,c){if(!(25>ah))throw t(Error(301));var d=a.alternate;if(a===Sg||null!==d&&d===Sg)if(Zg=!0,a={expirationTime:Rg,suspenseConfig:null,action:c,eagerReducer:null,eagerState:null,next:null},null===$g&&($g=new Map),c=$g.get(b),void 0===c)$g.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}else{var e=cg(),f=$f.suspense;e=dg(e,a,f);f={expirationTime:e,suspenseConfig:f,action:c,eagerReducer:null,eagerState:null,next:null};var h=b.last;if(null===h)f.next=f;else{var g=h.next;null!==g&&\n(f.next=g);h.next=f}b.last=f;if(0===a.expirationTime&&(null===d||0===d.expirationTime)&&(d=b.lastRenderedReducer,null!==d))try{var k=b.lastRenderedState,l=d(k,c);f.eagerReducer=d;f.eagerState=l;if(hd(l,k))return}catch(n){}finally{}eg(a,e)}}\nvar hh={readContext:Mf,useCallback:bh,useContext:bh,useEffect:bh,useImperativeHandle:bh,useLayoutEffect:bh,useMemo:bh,useReducer:bh,useRef:bh,useState:bh,useDebugValue:bh,useResponder:bh},eh={readContext:Mf,useCallback:function(a,b){jh().memoizedState=[a,void 0===b?null:b];return a},useContext:Mf,useEffect:function(a,b){return oh(516,Pg|Og,a,b)},useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return oh(4,Kg|Ng,qh.bind(null,b,a),c)},useLayoutEffect:function(a,b){return oh(4,\nKg|Ng,a,b)},useMemo:function(a,b){var c=jh();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=jh();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={last:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=sh.bind(null,Sg,a);return[d.memoizedState,a]},useRef:function(a){var b=jh();a={current:a};return b.memoizedState=a},useState:function(a){var b=jh();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue=\n{last:null,dispatch:null,lastRenderedReducer:lh,lastRenderedState:a};a=a.dispatch=sh.bind(null,Sg,a);return[b.memoizedState,a]},useDebugValue:rh,useResponder:kd},fh={readContext:Mf,useCallback:function(a,b){var c=kh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&ch(b,d[1]))return d[0];c.memoizedState=[a,b];return a},useContext:Mf,useEffect:function(a,b){return ph(516,Pg|Og,a,b)},useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ph(4,Kg|Ng,qh.bind(null,\nb,a),c)},useLayoutEffect:function(a,b){return ph(4,Kg|Ng,a,b)},useMemo:function(a,b){var c=kh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&ch(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a},useReducer:mh,useRef:function(){return kh().memoizedState},useState:function(a){return mh(lh,a)},useDebugValue:rh,useResponder:kd},th=null,uh=null,vh=!1;\nfunction wh(a,b){var c=xh(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function yh(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction zh(a){if(vh){var b=uh;if(b){var c=b;if(!yh(a,b)){b=Ne(c.nextSibling);if(!b||!yh(a,b)){a.effectTag|=2;vh=!1;th=a;return}wh(th,c)}th=a;uh=Ne(b.firstChild)}else a.effectTag|=2,vh=!1,th=a}}function Ah(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&18!==a.tag;)a=a.return;th=a}\nfunction Bh(a){if(a!==th)return!1;if(!vh)return Ah(a),vh=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!Ke(b,a.memoizedProps))for(b=uh;b;)wh(a,b),b=Ne(b.nextSibling);Ah(a);uh=th?Ne(a.stateNode.nextSibling):null;return!0}function Ch(){uh=th=null;vh=!1}var Dh=Xb.ReactCurrentOwner,Lf=!1;function S(a,b,c,d){b.child=null===a?ug(b,null,c,d):tg(b,a.child,c,d)}\nfunction Eh(a,b,c,d,e){c=c.render;var f=b.ref;Kf(b,e);d=dh(a,b,c,d,f,e);if(null!==a&&!Lf)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),Fh(a,b,e);b.effectTag|=1;S(a,b,d,e);return b.child}\nfunction Gh(a,b,c,d,e,f){if(null===a){var h=c.type;if(\"function\"===typeof h&&!Hh(h)&&void 0===h.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=h,Ih(a,b,h,d,e,f);a=qg(c.type,null,d,null,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}h=a.child;if(e<f&&(e=h.memoizedProps,c=c.compare,c=null!==c?c:jd,c(e,d)&&a.ref===b.ref))return Fh(a,b,f);b.effectTag|=1;a=og(h,d,f);a.ref=b.ref;a.return=b;return b.child=a}\nfunction Ih(a,b,c,d,e,f){return null!==a&&jd(a.memoizedProps,d)&&a.ref===b.ref&&(Lf=!1,e<f)?Fh(a,b,f):Jh(a,b,c,d,f)}function Kh(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.effectTag|=128}function Jh(a,b,c,d,e){var f=N(c)?Re:L.current;f=Se(b,f);Kf(b,e);c=dh(a,b,c,d,f,e);if(null!==a&&!Lf)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),Fh(a,b,e);b.effectTag|=1;S(a,b,c,e);return b.child}\nfunction Lh(a,b,c,d,e){if(N(c)){var f=!0;Xe(b)}else f=!1;Kf(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),hg(b,c,d,e),jg(b,c,d,e),d=!0;else if(null===a){var h=b.stateNode,g=b.memoizedProps;h.props=g;var k=h.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=Mf(l):(l=N(c)?Re:L.current,l=Se(b,l));var n=c.getDerivedStateFromProps,z=\"function\"===typeof n||\"function\"===typeof h.getSnapshotBeforeUpdate;z||\"function\"!==typeof h.UNSAFE_componentWillReceiveProps&&\n\"function\"!==typeof h.componentWillReceiveProps||(g!==d||k!==l)&&ig(b,h,d,l);Nf=!1;var x=b.memoizedState;k=h.state=x;var v=b.updateQueue;null!==v&&(Wf(b,v,d,h,e),k=b.memoizedState);g!==d||x!==k||M.current||Nf?(\"function\"===typeof n&&(bg(b,c,n,d),k=b.memoizedState),(g=Nf||gg(b,c,g,d,x,k,l))?(z||\"function\"!==typeof h.UNSAFE_componentWillMount&&\"function\"!==typeof h.componentWillMount||(\"function\"===typeof h.componentWillMount&&h.componentWillMount(),\"function\"===typeof h.UNSAFE_componentWillMount&&\nh.UNSAFE_componentWillMount()),\"function\"===typeof h.componentDidMount&&(b.effectTag|=4)):(\"function\"===typeof h.componentDidMount&&(b.effectTag|=4),b.memoizedProps=d,b.memoizedState=k),h.props=d,h.state=k,h.context=l,d=g):(\"function\"===typeof h.componentDidMount&&(b.effectTag|=4),d=!1)}else h=b.stateNode,g=b.memoizedProps,h.props=b.type===b.elementType?g:Af(b.type,g),k=h.context,l=c.contextType,\"object\"===typeof l&&null!==l?l=Mf(l):(l=N(c)?Re:L.current,l=Se(b,l)),n=c.getDerivedStateFromProps,(z=\n\"function\"===typeof n||\"function\"===typeof h.getSnapshotBeforeUpdate)||\"function\"!==typeof h.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof h.componentWillReceiveProps||(g!==d||k!==l)&&ig(b,h,d,l),Nf=!1,k=b.memoizedState,x=h.state=k,v=b.updateQueue,null!==v&&(Wf(b,v,d,h,e),x=b.memoizedState),g!==d||k!==x||M.current||Nf?(\"function\"===typeof n&&(bg(b,c,n,d),x=b.memoizedState),(n=Nf||gg(b,c,g,d,k,x,l))?(z||\"function\"!==typeof h.UNSAFE_componentWillUpdate&&\"function\"!==typeof h.componentWillUpdate||\n(\"function\"===typeof h.componentWillUpdate&&h.componentWillUpdate(d,x,l),\"function\"===typeof h.UNSAFE_componentWillUpdate&&h.UNSAFE_componentWillUpdate(d,x,l)),\"function\"===typeof h.componentDidUpdate&&(b.effectTag|=4),\"function\"===typeof h.getSnapshotBeforeUpdate&&(b.effectTag|=256)):(\"function\"!==typeof h.componentDidUpdate||g===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof h.getSnapshotBeforeUpdate||g===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),b.memoizedProps=\nd,b.memoizedState=x),h.props=d,h.state=x,h.context=l,d=n):(\"function\"!==typeof h.componentDidUpdate||g===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof h.getSnapshotBeforeUpdate||g===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),d=!1);return Mh(a,b,c,d,f,e)}\nfunction Mh(a,b,c,d,e,f){Kh(a,b);var h=0!==(b.effectTag&64);if(!d&&!h)return e&&Ye(b,c,!1),Fh(a,b,f);d=b.stateNode;Dh.current=b;var g=h&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.effectTag|=1;null!==a&&h?(b.child=tg(b,a.child,null,f),b.child=tg(b,null,g,f)):S(a,b,g,f);b.memoizedState=d.state;e&&Ye(b,c,!0);return b.child}function Nh(a){var b=a.stateNode;b.pendingContext?Ve(a,b.pendingContext,b.pendingContext!==b.context):b.context&&Ve(a,b.context,!1);Ag(a,b.containerInfo)}\nvar Oh={};\nfunction Ph(a,b,c){var d=b.mode,e=b.pendingProps,f=P.current,h=null,g=!1,k;(k=0!==(b.effectTag&64))||(k=0!==(f&Gg)&&(null===a||null!==a.memoizedState));k?(h=Oh,g=!0,b.effectTag&=-65):null!==a&&null===a.memoizedState||void 0===e.fallback||!0===e.unstable_avoidThisFallback||(f|=Fg);f&=Eg;J(P,f,b);if(null===a)if(g){e=e.fallback;a=sg(null,d,0,null);a.return=b;if(0===(b.mode&2))for(g=null!==b.memoizedState?b.child.child:b.child,a.child=g;null!==g;)g.return=a,g=g.sibling;c=sg(e,d,c,null);c.return=b;a.sibling=\nc;d=a}else d=c=ug(b,null,e.children,c);else{if(null!==a.memoizedState)if(f=a.child,d=f.sibling,g){e=e.fallback;c=og(f,f.pendingProps,0);c.return=b;if(0===(b.mode&2)&&(g=null!==b.memoizedState?b.child.child:b.child,g!==f.child))for(c.child=g;null!==g;)g.return=c,g=g.sibling;e=og(d,e,d.expirationTime);e.return=b;c.sibling=e;d=c;c.childExpirationTime=0;c=e}else d=c=tg(b,f.child,e.children,c);else if(f=a.child,g){g=e.fallback;e=sg(null,d,0,null);e.return=b;e.child=f;null!==f&&(f.return=e);if(0===(b.mode&\n2))for(f=null!==b.memoizedState?b.child.child:b.child,e.child=f;null!==f;)f.return=e,f=f.sibling;c=sg(g,d,c,null);c.return=b;e.sibling=c;c.effectTag|=2;d=e;e.childExpirationTime=0}else c=d=tg(b,f,e.children,c);b.stateNode=a.stateNode}b.memoizedState=h;b.child=d;return c}function Qh(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,last:d,tail:c,tailExpiration:0,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.last=d,f.tail=c,f.tailExpiration=0,f.tailMode=e)}\nfunction Rh(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;S(a,b,d.children,c);d=P.current;if(0!==(d&Gg))d=d&Eg|Gg,b.effectTag|=64;else{if(null!==a&&0!==(a.effectTag&64))a:for(a=b.child;null!==a;){if(13===a.tag){if(null!==a.memoizedState){a.expirationTime<c&&(a.expirationTime=c);var h=a.alternate;null!==h&&h.expirationTime<c&&(h.expirationTime=c);Jf(a.return,c)}}else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===\nb)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=Eg}J(P,d,b);if(0===(b.mode&2))b.memoizedState=null;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)d=c.alternate,null!==d&&null===Hg(d)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);Qh(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){d=e.alternate;if(null!==d&&null===Hg(d)){b.child=e;break}d=e.sibling;e.sibling=c;c=e;e=d}Qh(b,!0,c,null,f);break;case \"together\":Qh(b,\n!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}function Fh(a,b,c){null!==a&&(b.dependencies=a.dependencies);if(b.childExpirationTime<c)return null;if(null!==a&&b.child!==a.child)throw t(Error(153));if(null!==b.child){a=b.child;c=og(a,a.pendingProps,a.expirationTime);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=og(a,a.pendingProps,a.expirationTime),c.return=b;c.sibling=null}return b.child}function Sh(a){a.effectTag|=4}\nvar Th=void 0,Uh=void 0,Vh=void 0,Wh=void 0;Th=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(20===c.tag)a.appendChild(c.stateNode.instance);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};Uh=function(){};\nVh=function(a,b,c,d,e){var f=a.memoizedProps;if(f!==d){var h=b.stateNode;zg(wg.current);a=null;switch(c){case \"input\":f=Bc(h,f);d=Bc(h,d);a=[];break;case \"option\":f=le(h,f);d=le(h,d);a=[];break;case \"select\":f=m({},f,{value:void 0});d=m({},d,{value:void 0});a=[];break;case \"textarea\":f=ne(h,f);d=ne(h,d);a=[];break;default:\"function\"!==typeof f.onClick&&\"function\"===typeof d.onClick&&(h.onclick=Ge)}De(c,d);h=c=void 0;var g=null;for(c in f)if(!d.hasOwnProperty(c)&&f.hasOwnProperty(c)&&null!=f[c])if(\"style\"===\nc){var k=f[c];for(h in k)k.hasOwnProperty(h)&&(g||(g={}),g[h]=\"\")}else\"dangerouslySetInnerHTML\"!==c&&\"children\"!==c&&\"suppressContentEditableWarning\"!==c&&\"suppressHydrationWarning\"!==c&&\"autoFocus\"!==c&&(ia.hasOwnProperty(c)?a||(a=[]):(a=a||[]).push(c,null));for(c in d){var l=d[c];k=null!=f?f[c]:void 0;if(d.hasOwnProperty(c)&&l!==k&&(null!=l||null!=k))if(\"style\"===c)if(k){for(h in k)!k.hasOwnProperty(h)||l&&l.hasOwnProperty(h)||(g||(g={}),g[h]=\"\");for(h in l)l.hasOwnProperty(h)&&k[h]!==l[h]&&(g||\n(g={}),g[h]=l[h])}else g||(a||(a=[]),a.push(c,g)),g=l;else\"dangerouslySetInnerHTML\"===c?(l=l?l.__html:void 0,k=k?k.__html:void 0,null!=l&&k!==l&&(a=a||[]).push(c,\"\"+l)):\"children\"===c?k===l||\"string\"!==typeof l&&\"number\"!==typeof l||(a=a||[]).push(c,\"\"+l):\"suppressContentEditableWarning\"!==c&&\"suppressHydrationWarning\"!==c&&(ia.hasOwnProperty(c)?(null!=l&&Fe(e,c),a||k===l||(a=[])):(a=a||[]).push(c,l))}g&&(a=a||[]).push(\"style\",g);e=a;(b.updateQueue=e)&&Sh(b)}};Wh=function(a,b,c,d){c!==d&&Sh(b)};\nfunction $h(a,b){switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction ai(a){switch(a.tag){case 1:N(a.type)&&Te(a);var b=a.effectTag;return b&2048?(a.effectTag=b&-2049|64,a):null;case 3:Bg(a);Ue(a);b=a.effectTag;if(0!==(b&64))throw t(Error(285));a.effectTag=b&-2049|64;return a;case 5:return Dg(a),null;case 13:return H(P,a),b=a.effectTag,b&2048?(a.effectTag=b&-2049|64,a):null;case 18:return null;case 19:return H(P,a),null;case 4:return Bg(a),null;case 10:return If(a),null;default:return null}}function bi(a,b){return{value:a,source:b,stack:pc(b)}}\nvar ci=\"function\"===typeof WeakSet?WeakSet:Set;function di(a,b){var c=b.source,d=b.stack;null===d&&null!==c&&(d=pc(c));null!==c&&oc(c.type);b=b.value;null!==a&&1===a.tag&&oc(a.type);try{console.error(b)}catch(e){setTimeout(function(){throw e;})}}function ei(a,b){try{b.props=a.memoizedProps,b.state=a.memoizedState,b.componentWillUnmount()}catch(c){fi(a,c)}}function gi(a){var b=a.ref;if(null!==b)if(\"function\"===typeof b)try{b(null)}catch(c){fi(a,c)}else b.current=null}\nfunction hi(a,b,c){c=c.updateQueue;c=null!==c?c.lastEffect:null;if(null!==c){var d=c=c.next;do{if((d.tag&a)!==Ig){var e=d.destroy;d.destroy=void 0;void 0!==e&&e()}(d.tag&b)!==Ig&&(e=d.create,d.destroy=e());d=d.next}while(d!==c)}}\nfunction ii(a,b){\"function\"===typeof ji&&ji(a);switch(a.tag){case 0:case 11:case 14:case 15:var c=a.updateQueue;if(null!==c&&(c=c.lastEffect,null!==c)){var d=c.next;vf(97<b?97:b,function(){var b=d;do{var c=b.destroy;if(void 0!==c){var h=a;try{c()}catch(g){fi(h,g)}}b=b.next}while(b!==d)})}break;case 1:gi(a);b=a.stateNode;\"function\"===typeof b.componentWillUnmount&&ei(a,b);break;case 5:gi(a);break;case 4:ki(a,b)}}\nfunction li(a,b){for(var c=a;;)if(ii(c,b),null!==c.child&&4!==c.tag)c.child.return=c,c=c.child;else{if(c===a)break;for(;null===c.sibling;){if(null===c.return||c.return===a)return;c=c.return}c.sibling.return=c.return;c=c.sibling}}function mi(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction ni(a){a:{for(var b=a.return;null!==b;){if(mi(b)){var c=b;break a}b=b.return}throw t(Error(160));}b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw t(Error(161));}c.effectTag&16&&(we(b,\"\"),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||mi(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.effectTag&2)continue b;\nif(null===c.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}for(var e=a;;){var f=5===e.tag||6===e.tag;if(f||20===e.tag){var h=f?e.stateNode:e.stateNode.instance;if(c)if(d){f=b;var g=h;h=c;8===f.nodeType?f.parentNode.insertBefore(g,h):f.insertBefore(g,h)}else b.insertBefore(h,c);else d?(g=b,8===g.nodeType?(f=g.parentNode,f.insertBefore(h,g)):(f=g,f.appendChild(h)),g=g._reactRootContainer,null!==g&&void 0!==g||null!==f.onclick||(f.onclick=Ge)):\nb.appendChild(h)}else if(4!==e.tag&&null!==e.child){e.child.return=e;e=e.child;continue}if(e===a)break;for(;null===e.sibling;){if(null===e.return||e.return===a)return;e=e.return}e.sibling.return=e.return;e=e.sibling}}\nfunction ki(a,b){for(var c=a,d=!1,e=void 0,f=void 0;;){if(!d){d=c.return;a:for(;;){if(null===d)throw t(Error(160));e=d.stateNode;switch(d.tag){case 5:f=!1;break a;case 3:e=e.containerInfo;f=!0;break a;case 4:e=e.containerInfo;f=!0;break a}d=d.return}d=!0}if(5===c.tag||6===c.tag)if(li(c,b),f){var h=e,g=c.stateNode;8===h.nodeType?h.parentNode.removeChild(g):h.removeChild(g)}else e.removeChild(c.stateNode);else if(20===c.tag)g=c.stateNode.instance,li(c,b),f?(h=e,8===h.nodeType?h.parentNode.removeChild(g):\nh.removeChild(g)):e.removeChild(g);else if(4===c.tag){if(null!==c.child){e=c.stateNode.containerInfo;f=!0;c.child.return=c;c=c.child;continue}}else if(ii(c,b),null!==c.child){c.child.return=c;c=c.child;continue}if(c===a)break;for(;null===c.sibling;){if(null===c.return||c.return===a)return;c=c.return;4===c.tag&&(d=!1)}c.sibling.return=c.return;c=c.sibling}}\nfunction oi(a,b){switch(b.tag){case 0:case 11:case 14:case 15:hi(Kg,Lg,b);break;case 1:break;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps,e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[Ga]=d;\"input\"===a&&\"radio\"===d.type&&null!=d.name&&Dc(c,d);Ee(a,e);b=Ee(a,d);for(e=0;e<f.length;e+=2){var h=f[e],g=f[e+1];\"style\"===h?Ae(c,g):\"dangerouslySetInnerHTML\"===h?ve(c,g):\"children\"===h?we(c,g):zc(c,h,g,b)}switch(a){case \"input\":Ec(c,d);break;case \"textarea\":pe(c,\nd);break;case \"select\":b=c._wrapperState.wasMultiple,c._wrapperState.wasMultiple=!!d.multiple,a=d.value,null!=a?me(c,!!d.multiple,a,!1):b!==!!d.multiple&&(null!=d.defaultValue?me(c,!!d.multiple,d.defaultValue,!0):me(c,!!d.multiple,d.multiple?[]:\"\",!1))}}}break;case 6:if(null===b.stateNode)throw t(Error(162));b.stateNode.nodeValue=b.memoizedProps;break;case 3:break;case 12:break;case 13:c=b;null===b.memoizedState?d=!1:(d=!0,c=b.child,pi=sf());if(null!==c)a:for(a=c;;){if(5===a.tag)f=a.stateNode,d?(f=\nf.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(f=a.stateNode,e=a.memoizedProps.style,e=void 0!==e&&null!==e&&e.hasOwnProperty(\"display\")?e.display:null,f.style.display=ze(\"display\",e));else if(6===a.tag)a.stateNode.nodeValue=d?\"\":a.memoizedProps;else if(13===a.tag&&null!==a.memoizedState){f=a.child.sibling;f.return=a;a=f;continue}else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===c)break a;for(;null===a.sibling;){if(null===\na.return||a.return===c)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}qi(b);break;case 19:qi(b);break;case 17:break;case 20:break;default:throw t(Error(163));}}function qi(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new ci);b.forEach(function(b){var d=ri.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}var si=\"function\"===typeof WeakMap?WeakMap:Map;\nfunction ti(a,b,c){c=Qf(c,null);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){ui||(ui=!0,vi=d);di(a,b)};return c}\nfunction wi(a,b,c){c=Qf(c,null);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){di(a,b);return d(e)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){\"function\"!==typeof d&&(null===xi?xi=new Set([this]):xi.add(this),di(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nvar yi=Math.ceil,zi=Xb.ReactCurrentDispatcher,Ai=Xb.ReactCurrentOwner,T=0,Bi=8,Ci=16,Di=32,Ei=0,Fi=1,Gi=2,Hi=3,Ii=4,U=T,Ji=null,V=null,W=0,X=Ei,Ki=1073741823,Li=1073741823,Mi=null,Ni=!1,pi=0,Oi=500,Y=null,ui=!1,vi=null,xi=null,Pi=!1,Qi=null,Ri=90,Si=0,Ti=null,Ui=0,Vi=null,Wi=0;function cg(){return(U&(Ci|Di))!==T?1073741821-(sf()/10|0):0!==Wi?Wi:Wi=1073741821-(sf()/10|0)}\nfunction dg(a,b,c){b=b.mode;if(0===(b&2))return 1073741823;var d=tf();if(0===(b&4))return 99===d?1073741823:1073741822;if((U&Ci)!==T)return W;if(null!==c)a=1073741821-25*(((1073741821-a+(c.timeoutMs|0||5E3)/10)/25|0)+1);else switch(d){case 99:a=1073741823;break;case 98:a=1073741821-10*(((1073741821-a+15)/10|0)+1);break;case 97:case 96:a=1073741821-25*(((1073741821-a+500)/25|0)+1);break;case 95:a=1;break;default:throw t(Error(326));}null!==Ji&&a===W&&--a;return a}var Xi=0;\nfunction eg(a,b){if(50<Ui)throw Ui=0,Vi=null,t(Error(185));a=Yi(a,b);if(null!==a){a.pingTime=0;var c=tf();if(1073741823===b)if((U&Bi)!==T&&(U&(Ci|Di))===T)for(var d=Z(a,1073741823,!0);null!==d;)d=d(!0);else Zi(a,99,1073741823),U===T&&O();else Zi(a,c,b);(U&4)===T||98!==c&&99!==c||(null===Ti?Ti=new Map([[a,b]]):(c=Ti.get(a),(void 0===c||c>b)&&Ti.set(a,b)))}}\nfunction Yi(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);var d=a.return,e=null;if(null===d&&3===a.tag)e=a.stateNode;else for(;null!==d;){c=d.alternate;d.childExpirationTime<b&&(d.childExpirationTime=b);null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);if(null===d.return&&3===d.tag){e=d.stateNode;break}d=d.return}null!==e&&(b>e.firstPendingTime&&(e.firstPendingTime=b),a=e.lastPendingTime,0===a||b<a)&&(e.lastPendingTime=\nb);return e}function Zi(a,b,c){if(a.callbackExpirationTime<c){var d=a.callbackNode;null!==d&&d!==mf&&af(d);a.callbackExpirationTime=c;1073741823===c?a.callbackNode=xf($i.bind(null,a,Z.bind(null,a,c))):(d=null,1!==c&&(d={timeout:10*(1073741821-c)-sf()}),a.callbackNode=wf(b,$i.bind(null,a,Z.bind(null,a,c)),d))}}function $i(a,b,c){var d=a.callbackNode,e=null;try{return e=b(c),null!==e?$i.bind(null,a,e):null}finally{null===e&&d===a.callbackNode&&(a.callbackNode=null,a.callbackExpirationTime=0)}}\nfunction aj(){(U&(1|Ci|Di))===T&&(bj(),cj())}function dj(a,b){var c=a.firstBatch;return null!==c&&c._defer&&c._expirationTime>=b?(wf(97,function(){c._onComplete();return null}),!0):!1}function bj(){if(null!==Ti){var a=Ti;Ti=null;a.forEach(function(a,c){xf(Z.bind(null,c,a))});O()}}function ej(a,b){var c=U;U|=1;try{return a(b)}finally{U=c,U===T&&O()}}function fj(a,b,c,d){var e=U;U|=4;try{return vf(98,a.bind(null,b,c,d))}finally{U=e,U===T&&O()}}\nfunction gj(a,b){var c=U;U&=-2;U|=Bi;try{return a(b)}finally{U=c,U===T&&O()}}\nfunction hj(a,b){a.finishedWork=null;a.finishedExpirationTime=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Me(c));if(null!==V)for(c=V.return;null!==c;){var d=c;switch(d.tag){case 1:var e=d.type.childContextTypes;null!==e&&void 0!==e&&Te(d);break;case 3:Bg(d);Ue(d);break;case 5:Dg(d);break;case 4:Bg(d);break;case 13:H(P,d);break;case 19:H(P,d);break;case 10:If(d)}c=c.return}Ji=a;V=og(a.current,null,b);W=b;X=Ei;Li=Ki=1073741823;Mi=null;Ni=!1}\nfunction Z(a,b,c){if((U&(Ci|Di))!==T)throw t(Error(327));if(a.firstPendingTime<b)return null;if(c&&a.finishedExpirationTime===b)return ij.bind(null,a);cj();if(a!==Ji||b!==W)hj(a,b);else if(X===Hi)if(Ni)hj(a,b);else{var d=a.lastPendingTime;if(d<b)return Z.bind(null,a,d)}if(null!==V){d=U;U|=Ci;var e=zi.current;null===e&&(e=hh);zi.current=hh;if(c){if(1073741823!==b){var f=cg();if(f<b)return U=d,Gf(),zi.current=e,Z.bind(null,a,f)}}else Wi=0;do try{if(c)for(;null!==V;)V=jj(V);else for(;null!==V&&!bf();)V=\njj(V);break}catch(rb){Gf();ih();f=V;if(null===f||null===f.return)throw hj(a,b),U=d,rb;a:{var h=a,g=f.return,k=f,l=rb,n=W;k.effectTag|=1024;k.firstEffect=k.lastEffect=null;if(null!==l&&\"object\"===typeof l&&\"function\"===typeof l.then){var z=l,x=0!==(P.current&Fg);l=g;do{var v;if(v=13===l.tag)null!==l.memoizedState?v=!1:(v=l.memoizedProps,v=void 0===v.fallback?!1:!0!==v.unstable_avoidThisFallback?!0:x?!1:!0);if(v){g=l.updateQueue;null===g?(g=new Set,g.add(z),l.updateQueue=g):g.add(z);if(0===(l.mode&\n2)){l.effectTag|=64;k.effectTag&=-1957;1===k.tag&&(null===k.alternate?k.tag=17:(n=Qf(1073741823,null),n.tag=2,Sf(k,n)));k.expirationTime=1073741823;break a}k=h;h=n;x=k.pingCache;null===x?(x=k.pingCache=new si,g=new Set,x.set(z,g)):(g=x.get(z),void 0===g&&(g=new Set,x.set(z,g)));g.has(h)||(g.add(h),k=kj.bind(null,k,z,h),z.then(k,k));l.effectTag|=2048;l.expirationTime=n;break a}l=l.return}while(null!==l);l=Error((oc(k.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\"+\npc(k))}X!==Ii&&(X=Fi);l=bi(l,k);k=g;do{switch(k.tag){case 3:k.effectTag|=2048;k.expirationTime=n;n=ti(k,l,n);Tf(k,n);break a;case 1:if(z=l,h=k.type,g=k.stateNode,0===(k.effectTag&64)&&(\"function\"===typeof h.getDerivedStateFromError||null!==g&&\"function\"===typeof g.componentDidCatch&&(null===xi||!xi.has(g)))){k.effectTag|=2048;k.expirationTime=n;n=wi(k,z,n);Tf(k,n);break a}}k=k.return}while(null!==k)}V=lj(f)}while(1);U=d;Gf();zi.current=e;if(null!==V)return Z.bind(null,a,b)}a.finishedWork=a.current.alternate;\na.finishedExpirationTime=b;if(dj(a,b))return null;Ji=null;switch(X){case Ei:throw t(Error(328));case Fi:return d=a.lastPendingTime,d<b?Z.bind(null,a,d):c?ij.bind(null,a):(hj(a,b),xf(Z.bind(null,a,b)),null);case Gi:if(1073741823===Ki&&!c&&(c=pi+Oi-sf(),10<c)){if(Ni)return hj(a,b),Z.bind(null,a,b);d=a.lastPendingTime;if(d<b)return Z.bind(null,a,d);a.timeoutHandle=Le(ij.bind(null,a),c);return null}return ij.bind(null,a);case Hi:if(!c){if(Ni)return hj(a,b),Z.bind(null,a,b);c=a.lastPendingTime;if(c<b)return Z.bind(null,\na,c);1073741823!==Li?c=10*(1073741821-Li)-sf():1073741823===Ki?c=0:(c=10*(1073741821-Ki)-5E3,d=sf(),b=10*(1073741821-b)-d,c=d-c,0>c&&(c=0),c=(120>c?120:480>c?480:1080>c?1080:1920>c?1920:3E3>c?3E3:4320>c?4320:1960*yi(c/1960))-c,b<c&&(c=b));if(10<c)return a.timeoutHandle=Le(ij.bind(null,a),c),null}return ij.bind(null,a);case Ii:return!c&&1073741823!==Ki&&null!==Mi&&(d=Ki,e=Mi,b=e.busyMinDurationMs|0,0>=b?b=0:(c=e.busyDelayMs|0,d=sf()-(10*(1073741821-d)-(e.timeoutMs|0||5E3)),b=d<=c?0:c+b-d),10<b)?(a.timeoutHandle=\nLe(ij.bind(null,a),b),null):ij.bind(null,a);default:throw t(Error(329));}}function Xf(a,b){a<Ki&&1<a&&(Ki=a);null!==b&&a<Li&&1<a&&(Li=a,Mi=b)}function jj(a){var b=mj(a.alternate,a,W);a.memoizedProps=a.pendingProps;null===b&&(b=lj(a));Ai.current=null;return b}\nfunction lj(a){V=a;do{var b=V.alternate;a=V.return;if(0===(V.effectTag&1024)){a:{var c=b;b=V;var d=W,e=b.pendingProps;switch(b.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:N(b.type)&&Te(b);break;case 3:Bg(b);Ue(b);d=b.stateNode;d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===c||null===c.child)Bh(b),b.effectTag&=-3;Uh(b);break;case 5:Dg(b);d=zg(yg.current);var f=b.type;if(null!==c&&null!=b.stateNode)Vh(c,b,f,e,d),c.ref!==b.ref&&(b.effectTag|=128);else if(e){var h=\nzg(wg.current);if(Bh(b)){c=b;e=void 0;f=c.stateNode;var g=c.type,k=c.memoizedProps;f[Fa]=c;f[Ga]=k;switch(g){case \"iframe\":case \"object\":case \"embed\":G(\"load\",f);break;case \"video\":case \"audio\":for(var l=0;l<bb.length;l++)G(bb[l],f);break;case \"source\":G(\"error\",f);break;case \"img\":case \"image\":case \"link\":G(\"error\",f);G(\"load\",f);break;case \"form\":G(\"reset\",f);G(\"submit\",f);break;case \"details\":G(\"toggle\",f);break;case \"input\":Cc(f,k);G(\"invalid\",f);Fe(d,\"onChange\");break;case \"select\":f._wrapperState=\n{wasMultiple:!!k.multiple};G(\"invalid\",f);Fe(d,\"onChange\");break;case \"textarea\":oe(f,k),G(\"invalid\",f),Fe(d,\"onChange\")}De(g,k);l=null;for(e in k)k.hasOwnProperty(e)&&(h=k[e],\"children\"===e?\"string\"===typeof h?f.textContent!==h&&(l=[\"children\",h]):\"number\"===typeof h&&f.textContent!==\"\"+h&&(l=[\"children\",\"\"+h]):ia.hasOwnProperty(e)&&null!=h&&Fe(d,e));switch(g){case \"input\":Vb(f);Gc(f,k,!0);break;case \"textarea\":Vb(f);qe(f,k);break;case \"select\":case \"option\":break;default:\"function\"===typeof k.onClick&&\n(f.onclick=Ge)}d=l;c.updateQueue=d;null!==d&&Sh(b)}else{k=f;c=e;g=b;l=9===d.nodeType?d:d.ownerDocument;h===re.html&&(h=se(k));h===re.html?\"script\"===k?(k=l.createElement(\"div\"),k.innerHTML=\"<script>\\x3c/script>\",l=k.removeChild(k.firstChild)):\"string\"===typeof c.is?l=l.createElement(k,{is:c.is}):(l=l.createElement(k),\"select\"===k&&(k=l,c.multiple?k.multiple=!0:c.size&&(k.size=c.size))):l=l.createElementNS(h,k);k=l;k[Fa]=g;k[Ga]=c;c=k;Th(c,b,!1,!1);g=c;var n=d,z=Ee(f,e);switch(f){case \"iframe\":case \"object\":case \"embed\":G(\"load\",\ng);d=e;break;case \"video\":case \"audio\":for(d=0;d<bb.length;d++)G(bb[d],g);d=e;break;case \"source\":G(\"error\",g);d=e;break;case \"img\":case \"image\":case \"link\":G(\"error\",g);G(\"load\",g);d=e;break;case \"form\":G(\"reset\",g);G(\"submit\",g);d=e;break;case \"details\":G(\"toggle\",g);d=e;break;case \"input\":Cc(g,e);d=Bc(g,e);G(\"invalid\",g);Fe(n,\"onChange\");break;case \"option\":d=le(g,e);break;case \"select\":g._wrapperState={wasMultiple:!!e.multiple};d=m({},e,{value:void 0});G(\"invalid\",g);Fe(n,\"onChange\");break;case \"textarea\":oe(g,\ne);d=ne(g,e);G(\"invalid\",g);Fe(n,\"onChange\");break;default:d=e}De(f,d);k=void 0;l=f;h=g;var x=d;for(k in x)if(x.hasOwnProperty(k)){var v=x[k];\"style\"===k?Ae(h,v):\"dangerouslySetInnerHTML\"===k?(v=v?v.__html:void 0,null!=v&&ve(h,v)):\"children\"===k?\"string\"===typeof v?(\"textarea\"!==l||\"\"!==v)&&we(h,v):\"number\"===typeof v&&we(h,\"\"+v):\"suppressContentEditableWarning\"!==k&&\"suppressHydrationWarning\"!==k&&\"autoFocus\"!==k&&(ia.hasOwnProperty(k)?null!=v&&Fe(n,k):null!=v&&zc(h,k,v,z))}switch(f){case \"input\":Vb(g);\nGc(g,e,!1);break;case \"textarea\":Vb(g);qe(g,e);break;case \"option\":null!=e.value&&g.setAttribute(\"value\",\"\"+Ac(e.value));break;case \"select\":d=g;g=e;d.multiple=!!g.multiple;k=g.value;null!=k?me(d,!!g.multiple,k,!1):null!=g.defaultValue&&me(d,!!g.multiple,g.defaultValue,!0);break;default:\"function\"===typeof d.onClick&&(g.onclick=Ge)}Je(f,e)&&Sh(b);b.stateNode=c}null!==b.ref&&(b.effectTag|=128)}else if(null===b.stateNode)throw t(Error(166));break;case 6:if(c&&null!=b.stateNode)Wh(c,b,c.memoizedProps,\ne);else{if(\"string\"!==typeof e&&null===b.stateNode)throw t(Error(166));c=zg(yg.current);zg(wg.current);Bh(b)?(d=b.stateNode,c=b.memoizedProps,d[Fa]=b,d.nodeValue!==c&&Sh(b)):(d=b,c=(9===c.nodeType?c:c.ownerDocument).createTextNode(e),c[Fa]=b,d.stateNode=c)}break;case 11:break;case 13:H(P,b);e=b.memoizedState;if(0!==(b.effectTag&64)){b.expirationTime=d;break a}d=null!==e;e=!1;null===c?Bh(b):(f=c.memoizedState,e=null!==f,d||null===f||(f=c.child.sibling,null!==f&&(g=b.firstEffect,null!==g?(b.firstEffect=\nf,f.nextEffect=g):(b.firstEffect=b.lastEffect=f,f.nextEffect=null),f.effectTag=8)));if(d&&!e&&0!==(b.mode&2))if(null===c&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(P.current&Fg))X===Ei&&(X=Gi);else if(X===Ei||X===Gi)X=Hi;if(d||e)b.effectTag|=4;break;case 7:break;case 8:break;case 12:break;case 4:Bg(b);Uh(b);break;case 10:If(b);break;case 9:break;case 14:break;case 17:N(b.type)&&Te(b);break;case 18:break;case 19:H(P,b);e=b.memoizedState;if(null===e)break;f=0!==(b.effectTag&64);g=e.rendering;\nif(null===g)if(f)$h(e,!1);else{if(X!==Ei||null!==c&&0!==(c.effectTag&64))for(c=b.child;null!==c;){g=Hg(c);if(null!==g){b.effectTag|=64;$h(e,!1);c=g.updateQueue;null!==c&&(b.updateQueue=c,b.effectTag|=4);b.firstEffect=b.lastEffect=null;for(c=b.child;null!==c;)e=c,f=d,e.effectTag&=2,e.nextEffect=null,e.firstEffect=null,e.lastEffect=null,g=e.alternate,null===g?(e.childExpirationTime=0,e.expirationTime=f,e.child=null,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null):(e.childExpirationTime=\ng.childExpirationTime,e.expirationTime=g.expirationTime,e.child=g.child,e.memoizedProps=g.memoizedProps,e.memoizedState=g.memoizedState,e.updateQueue=g.updateQueue,f=g.dependencies,e.dependencies=null===f?null:{expirationTime:f.expirationTime,firstContext:f.firstContext,responders:f.responders}),c=c.sibling;J(P,P.current&Eg|Gg,b);b=b.child;break a}c=c.sibling}}else{if(!f)if(c=Hg(g),null!==c){if(b.effectTag|=64,f=!0,$h(e,!0),null===e.tail&&\"hidden\"===e.tailMode){d=c.updateQueue;null!==d&&(b.updateQueue=\nd,b.effectTag|=4);b=b.lastEffect=e.lastEffect;null!==b&&(b.nextEffect=null);break}}else sf()>e.tailExpiration&&1<d&&(b.effectTag|=64,f=!0,$h(e,!1),b.expirationTime=b.childExpirationTime=d-1);e.isBackwards?(g.sibling=b.child,b.child=g):(d=e.last,null!==d?d.sibling=g:b.child=g,e.last=g)}if(null!==e.tail){0===e.tailExpiration&&(e.tailExpiration=sf()+500);d=e.tail;e.rendering=d;e.tail=d.sibling;e.lastEffect=b.lastEffect;d.sibling=null;c=P.current;c=f?c&Eg|Gg:c&Eg;J(P,c,b);b=d;break a}break;case 20:break;\ndefault:throw t(Error(156));}b=null}d=V;if(1===W||1!==d.childExpirationTime){c=0;for(e=d.child;null!==e;)f=e.expirationTime,g=e.childExpirationTime,f>c&&(c=f),g>c&&(c=g),e=e.sibling;d.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&1024)&&(null===a.firstEffect&&(a.firstEffect=V.firstEffect),null!==V.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=V.firstEffect),a.lastEffect=V.lastEffect),1<V.effectTag&&(null!==a.lastEffect?a.lastEffect.nextEffect=V:a.firstEffect=V,\na.lastEffect=V))}else{b=ai(V,W);if(null!==b)return b.effectTag&=1023,b;null!==a&&(a.firstEffect=a.lastEffect=null,a.effectTag|=1024)}b=V.sibling;if(null!==b)return b;V=a}while(null!==V);X===Ei&&(X=Ii);return null}function ij(a){var b=tf();vf(99,nj.bind(null,a,b));null!==Qi&&wf(97,function(){cj();return null});return null}\nfunction nj(a,b){cj();if((U&(Ci|Di))!==T)throw t(Error(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw t(Error(177));a.callbackNode=null;a.callbackExpirationTime=0;var e=c.expirationTime,f=c.childExpirationTime;e=f>e?f:e;a.firstPendingTime=e;e<a.lastPendingTime&&(a.lastPendingTime=e);a===Ji&&(V=Ji=null,W=0);1<c.effectTag?null!==c.lastEffect?(c.lastEffect.nextEffect=c,e=c.firstEffect):e=c:e=c.firstEffect;\nif(null!==e){f=U;U|=Di;Ai.current=null;He=Qd;var h=ae();if(be(h)){if(\"selectionStart\"in h)var g={start:h.selectionStart,end:h.selectionEnd};else a:{g=(g=h.ownerDocument)&&g.defaultView||window;var k=g.getSelection&&g.getSelection();if(k&&0!==k.rangeCount){g=k.anchorNode;var l=k.anchorOffset,n=k.focusNode;k=k.focusOffset;try{g.nodeType,n.nodeType}catch(zb){g=null;break a}var z=0,x=-1,v=-1,rb=0,Be=0,u=h,w=null;b:for(;;){for(var C;;){u!==g||0!==l&&3!==u.nodeType||(x=z+l);u!==n||0!==k&&3!==u.nodeType||\n(v=z+k);3===u.nodeType&&(z+=u.nodeValue.length);if(null===(C=u.firstChild))break;w=u;u=C}for(;;){if(u===h)break b;w===g&&++rb===l&&(x=z);w===n&&++Be===k&&(v=z);if(null!==(C=u.nextSibling))break;u=w;w=u.parentNode}u=C}g=-1===x||-1===v?null:{start:x,end:v}}else g=null}g=g||{start:0,end:0}}else g=null;Ie={focusedElem:h,selectionRange:g};Qd=!1;Y=e;do try{for(;null!==Y;){if(0!==(Y.effectTag&256)){var I=Y.alternate;h=Y;switch(h.tag){case 0:case 11:case 15:hi(Jg,Ig,h);break;case 1:if(h.effectTag&256&&null!==\nI){var E=I.memoizedProps,ua=I.memoizedState,gh=h.stateNode,oj=gh.getSnapshotBeforeUpdate(h.elementType===h.type?E:Af(h.type,E),ua);gh.__reactInternalSnapshotBeforeUpdate=oj}break;case 3:case 5:case 6:case 4:case 17:break;default:throw t(Error(163));}}Y=Y.nextEffect}}catch(zb){if(null===Y)throw t(Error(330));fi(Y,zb);Y=Y.nextEffect}while(null!==Y);Y=e;do try{for(I=b;null!==Y;){var A=Y.effectTag;A&16&&we(Y.stateNode,\"\");if(A&128){var p=Y.alternate;if(null!==p){var r=p.ref;null!==r&&(\"function\"===typeof r?\nr(null):r.current=null)}}switch(A&14){case 2:ni(Y);Y.effectTag&=-3;break;case 6:ni(Y);Y.effectTag&=-3;oi(Y.alternate,Y);break;case 4:oi(Y.alternate,Y);break;case 8:E=Y;ki(E,I);E.return=null;E.child=null;E.memoizedState=null;E.updateQueue=null;E.dependencies=null;var K=E.alternate;null!==K&&(K.return=null,K.child=null,K.memoizedState=null,K.updateQueue=null,K.dependencies=null)}Y=Y.nextEffect}}catch(zb){if(null===Y)throw t(Error(330));fi(Y,zb);Y=Y.nextEffect}while(null!==Y);r=Ie;p=ae();A=r.focusedElem;\nI=r.selectionRange;if(p!==A&&A&&A.ownerDocument&&$d(A.ownerDocument.documentElement,A)){null!==I&&be(A)&&(p=I.start,r=I.end,void 0===r&&(r=p),\"selectionStart\"in A?(A.selectionStart=p,A.selectionEnd=Math.min(r,A.value.length)):(r=(p=A.ownerDocument||document)&&p.defaultView||window,r.getSelection&&(r=r.getSelection(),E=A.textContent.length,K=Math.min(I.start,E),I=void 0===I.end?K:Math.min(I.end,E),!r.extend&&K>I&&(E=I,I=K,K=E),E=Zd(A,K),ua=Zd(A,I),E&&ua&&(1!==r.rangeCount||r.anchorNode!==E.node||r.anchorOffset!==\nE.offset||r.focusNode!==ua.node||r.focusOffset!==ua.offset)&&(p=p.createRange(),p.setStart(E.node,E.offset),r.removeAllRanges(),K>I?(r.addRange(p),r.extend(ua.node,ua.offset)):(p.setEnd(ua.node,ua.offset),r.addRange(p))))));p=[];for(r=A;r=r.parentNode;)1===r.nodeType&&p.push({element:r,left:r.scrollLeft,top:r.scrollTop});\"function\"===typeof A.focus&&A.focus();for(A=0;A<p.length;A++)r=p[A],r.element.scrollLeft=r.left,r.element.scrollTop=r.top}Ie=null;Qd=!!He;He=null;a.current=c;Y=e;do try{for(A=d;null!==\nY;){var $a=Y.effectTag;if($a&36){var nc=Y.alternate;p=Y;r=A;switch(p.tag){case 0:case 11:case 15:hi(Mg,Ng,p);break;case 1:var md=p.stateNode;if(p.effectTag&4)if(null===nc)md.componentDidMount();else{var Fj=p.elementType===p.type?nc.memoizedProps:Af(p.type,nc.memoizedProps);md.componentDidUpdate(Fj,nc.memoizedState,md.__reactInternalSnapshotBeforeUpdate)}var Xh=p.updateQueue;null!==Xh&&Yf(p,Xh,md,r);break;case 3:var Yh=p.updateQueue;if(null!==Yh){K=null;if(null!==p.child)switch(p.child.tag){case 5:K=\np.child.stateNode;break;case 1:K=p.child.stateNode}Yf(p,Yh,K,r)}break;case 5:var Gj=p.stateNode;null===nc&&p.effectTag&4&&(r=Gj,Je(p.type,p.memoizedProps)&&r.focus());break;case 6:break;case 4:break;case 12:break;case 13:case 19:case 17:case 20:break;default:throw t(Error(163));}}if($a&128){var nd=Y.ref;if(null!==nd){var Zh=Y.stateNode;switch(Y.tag){case 5:var gf=Zh;break;default:gf=Zh}\"function\"===typeof nd?nd(gf):nd.current=gf}}$a&512&&(Pi=!0);Y=Y.nextEffect}}catch(zb){if(null===Y)throw t(Error(330));\nfi(Y,zb);Y=Y.nextEffect}while(null!==Y);Y=null;nf();U=f}else a.current=c;if(Pi)Pi=!1,Qi=a,Si=d,Ri=b;else for(Y=e;null!==Y;)b=Y.nextEffect,Y.nextEffect=null,Y=b;b=a.firstPendingTime;0!==b?($a=cg(),$a=zf($a,b),Zi(a,$a,b)):xi=null;\"function\"===typeof pj&&pj(c.stateNode,d);1073741823===b?a===Vi?Ui++:(Ui=0,Vi=a):Ui=0;if(ui)throw ui=!1,a=vi,vi=null,a;if((U&Bi)!==T)return null;O();return null}\nfunction cj(){if(null===Qi)return!1;var a=Qi,b=Si,c=Ri;Qi=null;Si=0;Ri=90;return vf(97<c?97:c,qj.bind(null,a,b))}function qj(a){if((U&(Ci|Di))!==T)throw t(Error(331));var b=U;U|=Di;for(a=a.current.firstEffect;null!==a;){try{var c=a;if(0!==(c.effectTag&512))switch(c.tag){case 0:case 11:case 15:hi(Pg,Ig,c),hi(Ig,Og,c)}}catch(d){if(null===a)throw t(Error(330));fi(a,d)}c=a.nextEffect;a.nextEffect=null;a=c}U=b;O();return!0}\nfunction rj(a,b,c){b=bi(c,b);b=ti(a,b,1073741823);Sf(a,b);a=Yi(a,1073741823);null!==a&&Zi(a,99,1073741823)}function fi(a,b){if(3===a.tag)rj(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){rj(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===xi||!xi.has(d))){a=bi(b,a);a=wi(c,a,1073741823);Sf(c,a);c=Yi(c,1073741823);null!==c&&Zi(c,99,1073741823);break}}c=c.return}}\nfunction kj(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);Ji===a&&W===c?X===Hi||X===Gi&&1073741823===Ki&&sf()-pi<Oi?hj(a,W):Ni=!0:a.lastPendingTime<c||(b=a.pingTime,0!==b&&b<c||(a.pingTime=c,a.finishedExpirationTime===c&&(a.finishedExpirationTime=0,a.finishedWork=null),b=cg(),b=zf(b,c),Zi(a,b,c)))}function ri(a,b){var c=a.stateNode;null!==c&&c.delete(b);c=cg();b=dg(c,a,null);c=zf(c,b);a=Yi(a,b);null!==a&&Zi(a,c,b)}var mj=void 0;\nmj=function(a,b,c){var d=b.expirationTime;if(null!==a){var e=b.pendingProps;if(a.memoizedProps!==e||M.current)Lf=!0;else if(d<c){Lf=!1;switch(b.tag){case 3:Nh(b);Ch();break;case 5:Cg(b);if(b.mode&4&&1!==c&&e.hidden)return b.expirationTime=b.childExpirationTime=1,null;break;case 1:N(b.type)&&Xe(b);break;case 4:Ag(b,b.stateNode.containerInfo);break;case 10:Hf(b,b.memoizedProps.value);break;case 13:if(null!==b.memoizedState){d=b.child.childExpirationTime;if(0!==d&&d>=c)return Ph(a,b,c);J(P,P.current&\nEg,b);b=Fh(a,b,c);return null!==b?b.sibling:null}J(P,P.current&Eg,b);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return Rh(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);J(P,P.current,b);if(!d)return null}return Fh(a,b,c)}}else Lf=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Se(b,L.current);Kf(b,c);e=dh(null,b,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&\nnull!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;ih();if(N(d)){var f=!0;Xe(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;var h=d.getDerivedStateFromProps;\"function\"===typeof h&&bg(b,d,h,a);e.updater=fg;b.stateNode=e;e._reactInternalFiber=b;jg(b,d,a,c);b=Mh(null,b,d,!0,f,c)}else b.tag=0,S(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Bf(e);b.type=e;f=b.tag=sj(e);\na=Af(e,a);switch(f){case 0:b=Jh(null,b,e,a,c);break;case 1:b=Lh(null,b,e,a,c);break;case 11:b=Eh(null,b,e,a,c);break;case 14:b=Gh(null,b,e,Af(e.type,a),d,c);break;default:throw t(Error(306),e,\"\");}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Af(d,e),Jh(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Af(d,e),Lh(a,b,d,e,c);case 3:Nh(b);d=b.updateQueue;if(null===d)throw t(Error(282));e=b.memoizedState;e=null!==e?e.element:null;Wf(b,d,b.pendingProps,\nnull,c);d=b.memoizedState.element;if(d===e)Ch(),b=Fh(a,b,c);else{e=b.stateNode;if(e=(null===a||null===a.child)&&e.hydrate)uh=Ne(b.stateNode.containerInfo.firstChild),th=b,e=vh=!0;e?(b.effectTag|=2,b.child=ug(b,null,d,c)):(S(a,b,d,c),Ch());b=b.child}return b;case 5:return Cg(b),null===a&&zh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,h=e.children,Ke(d,e)?h=null:null!==f&&Ke(d,f)&&(b.effectTag|=16),Kh(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):\n(S(a,b,h,c),b=b.child),b;case 6:return null===a&&zh(b),null;case 13:return Ph(a,b,c);case 4:return Ag(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=tg(b,null,d,c):S(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Af(d,e),Eh(a,b,d,e,c);case 7:return S(a,b,b.pendingProps,c),b.child;case 8:return S(a,b,b.pendingProps.children,c),b.child;case 12:return S(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;h=b.memoizedProps;\nf=e.value;Hf(b,f);if(null!==h){var g=h.value;f=hd(g,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(g,f):1073741823)|0;if(0===f){if(h.children===e.children&&!M.current){b=Fh(a,b,c);break a}}else for(g=b.child,null!==g&&(g.return=b);null!==g;){var k=g.dependencies;if(null!==k){h=g.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===g.tag&&(l=Qf(c,null),l.tag=2,Sf(g,l));g.expirationTime<c&&(g.expirationTime=c);l=g.alternate;null!==l&&l.expirationTime<\nc&&(l.expirationTime=c);Jf(g.return,c);k.expirationTime<c&&(k.expirationTime=c);break}l=l.next}}else h=10===g.tag?g.type===b.type?null:g.child:g.child;if(null!==h)h.return=g;else for(h=g;null!==h;){if(h===b){h=null;break}g=h.sibling;if(null!==g){g.return=h.return;h=g;break}h=h.return}g=h}}S(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,f=b.pendingProps,d=f.children,Kf(b,c),e=Mf(e,f.unstable_observedBits),d=d(e),b.effectTag|=1,S(a,b,d,c),b.child;case 14:return e=b.type,f=Af(e,b.pendingProps),\nf=Af(e.type,f),Gh(a,b,e,f,d,c);case 15:return Ih(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Af(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),b.tag=1,N(d)?(a=!0,Xe(b)):a=!1,Kf(b,c),hg(b,d,e,c),jg(b,d,e,c),Mh(null,b,d,!0,a,c);case 19:return Rh(a,b,c)}throw t(Error(156));};var pj=null,ji=null;\nfunction tj(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);pj=function(a){try{b.onCommitFiberRoot(c,a,void 0,64===(a.current.effectTag&64))}catch(e){}};ji=function(a){try{b.onCommitFiberUnmount(c,a)}catch(e){}}}catch(d){}return!0}\nfunction uj(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childExpirationTime=this.expirationTime=0;this.alternate=null}function xh(a,b,c,d){return new uj(a,b,c,d)}\nfunction Hh(a){a=a.prototype;return!(!a||!a.isReactComponent)}function sj(a){if(\"function\"===typeof a)return Hh(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===gc)return 11;if(a===jc)return 14}return 2}\nfunction og(a,b){var c=a.alternate;null===c?(c=xh(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.effectTag=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childExpirationTime=a.childExpirationTime;c.expirationTime=a.expirationTime;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{expirationTime:b.expirationTime,\nfirstContext:b.firstContext,responders:b.responders};c.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction qg(a,b,c,d,e,f){var h=2;d=a;if(\"function\"===typeof a)Hh(a)&&(h=1);else if(\"string\"===typeof a)h=5;else a:switch(a){case ac:return sg(c.children,e,f,b);case fc:h=8;e|=7;break;case bc:h=8;e|=1;break;case cc:return a=xh(12,c,b,e|8),a.elementType=cc,a.type=cc,a.expirationTime=f,a;case hc:return a=xh(13,c,b,e),a.type=hc,a.elementType=hc,a.expirationTime=f,a;case ic:return a=xh(19,c,b,e),a.elementType=ic,a.expirationTime=f,a;default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case dc:h=\n10;break a;case ec:h=9;break a;case gc:h=11;break a;case jc:h=14;break a;case kc:h=16;d=null;break a}throw t(Error(130),null==a?a:typeof a,\"\");}b=xh(h,c,b,e);b.elementType=a;b.type=d;b.expirationTime=f;return b}function sg(a,b,c,d){a=xh(7,a,d,b);a.expirationTime=c;return a}function pg(a,b,c){a=xh(6,a,null,b);a.expirationTime=c;return a}\nfunction rg(a,b,c){b=xh(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction vj(a,b,c){this.tag=b;this.current=null;this.containerInfo=a;this.pingCache=this.pendingChildren=null;this.finishedExpirationTime=0;this.finishedWork=null;this.timeoutHandle=-1;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=this.firstBatch=null;this.pingTime=this.lastPendingTime=this.firstPendingTime=this.callbackExpirationTime=0}function wj(a,b,c){a=new vj(a,b,c);b=xh(3,null,null,2===b?7:1===b?3:0);a.current=b;return b.stateNode=a}\nfunction xj(a,b,c,d,e,f){var h=b.current;a:if(c){c=c._reactInternalFiber;b:{if(2!==ld(c)||1!==c.tag)throw t(Error(170));var g=c;do{switch(g.tag){case 3:g=g.stateNode.context;break b;case 1:if(N(g.type)){g=g.stateNode.__reactInternalMemoizedMergedChildContext;break b}}g=g.return}while(null!==g);throw t(Error(171));}if(1===c.tag){var k=c.type;if(N(k)){c=We(c,k,g);break a}}c=g}else c=Qe;null===b.context?b.context=c:b.pendingContext=c;b=f;e=Qf(d,e);e.payload={element:a};b=void 0===b?null:b;null!==b&&\n(e.callback=b);Sf(h,e);eg(h,d);return d}function yj(a,b,c,d){var e=b.current,f=cg(),h=$f.suspense;e=dg(f,e,h);return xj(a,b,c,e,h,d)}function zj(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function Aj(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:$b,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nDb=function(a,b,c){switch(b){case \"input\":Ec(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Ka(d);if(!e)throw t(Error(90));Wb(d);Ec(d,e)}}}break;case \"textarea\":pe(a,c);break;case \"select\":b=c.value,null!=b&&me(a,!!c.multiple,b,!1)}};\nfunction Bj(a){var b=1073741821-25*(((1073741821-cg()+500)/25|0)+1);b<=Xi&&--b;this._expirationTime=Xi=b;this._root=a;this._callbacks=this._next=null;this._hasChildren=this._didComplete=!1;this._children=null;this._defer=!0}Bj.prototype.render=function(a){if(!this._defer)throw t(Error(250));this._hasChildren=!0;this._children=a;var b=this._root._internalRoot,c=this._expirationTime,d=new Cj;xj(a,b,null,c,null,d._onCommit);return d};\nBj.prototype.then=function(a){if(this._didComplete)a();else{var b=this._callbacks;null===b&&(b=this._callbacks=[]);b.push(a)}};\nBj.prototype.commit=function(){var a=this._root._internalRoot,b=a.firstBatch;if(!this._defer||null===b)throw t(Error(251));if(this._hasChildren){var c=this._expirationTime;if(b!==this){this._hasChildren&&(c=this._expirationTime=b._expirationTime,this.render(this._children));for(var d=null,e=b;e!==this;)d=e,e=e._next;if(null===d)throw t(Error(251));d._next=e._next;this._next=b;a.firstBatch=this}this._defer=!1;b=c;if((U&(Ci|Di))!==T)throw t(Error(253));xf(Z.bind(null,a,b));O();b=this._next;this._next=\nnull;b=a.firstBatch=b;null!==b&&b._hasChildren&&b.render(b._children)}else this._next=null,this._defer=!1};Bj.prototype._onComplete=function(){if(!this._didComplete){this._didComplete=!0;var a=this._callbacks;if(null!==a)for(var b=0;b<a.length;b++)(0,a[b])()}};function Cj(){this._callbacks=null;this._didCommit=!1;this._onCommit=this._onCommit.bind(this)}Cj.prototype.then=function(a){if(this._didCommit)a();else{var b=this._callbacks;null===b&&(b=this._callbacks=[]);b.push(a)}};\nCj.prototype._onCommit=function(){if(!this._didCommit){this._didCommit=!0;var a=this._callbacks;if(null!==a)for(var b=0;b<a.length;b++){var c=a[b];if(\"function\"!==typeof c)throw t(Error(191),c);c()}}};function Dj(a,b,c){this._internalRoot=wj(a,b,c)}function Ej(a,b){this._internalRoot=wj(a,2,b)}Ej.prototype.render=Dj.prototype.render=function(a,b){var c=this._internalRoot,d=new Cj;b=void 0===b?null:b;null!==b&&d.then(b);yj(a,c,null,d._onCommit);return d};\nEj.prototype.unmount=Dj.prototype.unmount=function(a){var b=this._internalRoot,c=new Cj;a=void 0===a?null:a;null!==a&&c.then(a);yj(null,b,null,c._onCommit);return c};Ej.prototype.createBatch=function(){var a=new Bj(this),b=a._expirationTime,c=this._internalRoot,d=c.firstBatch;if(null===d)c.firstBatch=a,a._next=null;else{for(c=null;null!==d&&d._expirationTime>=b;)c=d,d=d._next;a._next=d;null!==c&&(c._next=a)}return a};\nfunction Hj(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}Jb=ej;Kb=fj;Lb=aj;Mb=function(a,b){var c=U;U|=2;try{return a(b)}finally{U=c,U===T&&O()}};function Ij(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new Dj(a,0,b)}\nfunction Jj(a,b,c,d,e){var f=c._reactRootContainer,h=void 0;if(f){h=f._internalRoot;if(\"function\"===typeof e){var g=e;e=function(){var a=zj(h);g.call(a)}}yj(b,h,a,e)}else{f=c._reactRootContainer=Ij(c,d);h=f._internalRoot;if(\"function\"===typeof e){var k=e;e=function(){var a=zj(h);k.call(a)}}gj(function(){yj(b,h,a,e)})}return zj(h)}function Kj(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Hj(b))throw t(Error(200));return Aj(a,b,null,c)}\nvar Nj={createPortal:Kj,findDOMNode:function(a){if(null==a)a=null;else if(1!==a.nodeType){var b=a._reactInternalFiber;if(void 0===b){if(\"function\"===typeof a.render)throw t(Error(188));throw t(Error(268),Object.keys(a));}a=qd(b);a=null===a?null:a.stateNode}return a},hydrate:function(a,b,c){if(!Hj(b))throw t(Error(200));return Jj(null,a,b,!0,c)},render:function(a,b,c){if(!Hj(b))throw t(Error(200));return Jj(null,a,b,!1,c)},unstable_renderSubtreeIntoContainer:function(a,b,c,d){if(!Hj(c))throw t(Error(200));\nif(null==a||void 0===a._reactInternalFiber)throw t(Error(38));return Jj(a,b,c,!1,d)},unmountComponentAtNode:function(a){if(!Hj(a))throw t(Error(40));return a._reactRootContainer?(gj(function(){Jj(null,null,a,!1,function(){a._reactRootContainer=null})}),!0):!1},unstable_createPortal:function(){return Kj.apply(void 0,arguments)},unstable_batchedUpdates:ej,unstable_interactiveUpdates:function(a,b,c,d){aj();return fj(a,b,c,d)},unstable_discreteUpdates:fj,unstable_flushDiscreteUpdates:aj,flushSync:function(a,\nb){if((U&(Ci|Di))!==T)throw t(Error(187));var c=U;U|=1;try{return vf(99,a.bind(null,b))}finally{U=c,O()}},unstable_createRoot:Lj,unstable_createSyncRoot:Mj,unstable_flushControlled:function(a){var b=U;U|=1;try{vf(99,a)}finally{U=b,U===T&&O()}},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{Events:[Ia,Ja,Ka,Ca.injectEventPluginsByName,fa,Qa,function(a){ya(a,Pa)},Hb,Ib,Ud,Ba,cj,{current:!1}]}};\nfunction Lj(a,b){if(!Hj(a))throw t(Error(299),\"unstable_createRoot\");return new Ej(a,null!=b&&!0===b.hydrate)}function Mj(a,b){if(!Hj(a))throw t(Error(299),\"unstable_createRoot\");return new Dj(a,1,null!=b&&!0===b.hydrate)}\n(function(a){var b=a.findFiberByHostInstance;return tj(m({},a,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Xb.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=qd(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null}))})({findFiberByHostInstance:Ha,bundleType:0,version:\"16.9.0\",\nrendererPackageName:\"react-dom\"});var Oj={default:Nj},Pj=Oj&&Nj||Oj;module.exports=Pj.default||Pj;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/** @license React v0.15.0\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';Object.defineProperty(exports,\"__esModule\",{value:!0});var d=void 0,e=void 0,g=void 0,m=void 0,n=void 0;exports.unstable_now=void 0;exports.unstable_forceFrameRate=void 0;\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var p=null,q=null,r=function(){if(null!==p)try{var a=exports.unstable_now();p(!0,a);p=null}catch(b){throw setTimeout(r,0),b;}};exports.unstable_now=function(){return Date.now()};d=function(a){null!==p?setTimeout(d,0,a):(p=a,setTimeout(r,0))};e=function(a,b){q=setTimeout(a,b)};g=function(){clearTimeout(q)};m=function(){return!1};n=exports.unstable_forceFrameRate=function(){}}else{var t=window.performance,u=window.Date,v=window.setTimeout,\nw=window.clearTimeout,x=window.requestAnimationFrame,y=window.cancelAnimationFrame;\"undefined\"!==typeof console&&(\"function\"!==typeof x&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"),\"function\"!==typeof y&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"));exports.unstable_now=\"object\"===typeof t&&\n\"function\"===typeof t.now?function(){return t.now()}:function(){return u.now()};var z=!1,A=null,B=-1,C=-1,D=33.33,E=-1,F=-1,G=0,H=!1;m=function(){return exports.unstable_now()>=G};n=function(){};exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported\"):0<a?(D=Math.floor(1E3/a),H=!0):(D=33.33,H=!1)};var J=function(){if(null!==A){var a=exports.unstable_now(),b=0<G-a;try{A(b,\na)||(A=null)}catch(c){throw I.postMessage(null),c;}}},K=new MessageChannel,I=K.port2;K.port1.onmessage=J;var L=function(a){if(null===A)F=E=-1,z=!1;else{z=!0;x(function(a){w(B);L(a)});var b=function(){G=exports.unstable_now()+D/2;J();B=v(b,3*D)};B=v(b,3*D);if(-1!==E&&.1<a-E){var c=a-E;!H&&-1!==F&&c<D&&F<D&&(D=c<F?F:c,8.33>D&&(D=8.33));F=c}E=a;G=a+D;I.postMessage(null)}};d=function(a){A=a;z||(z=!0,x(function(a){L(a)}))};e=function(a,b){C=v(function(){a(exports.unstable_now())},b)};g=function(){w(C);\nC=-1}}var M=null,N=null,O=null,P=3,Q=!1,R=!1,S=!1;\nfunction T(a,b){var c=a.next;if(c===a)M=null;else{a===M&&(M=c);var f=a.previous;f.next=c;c.previous=f}a.next=a.previous=null;c=a.callback;f=P;var l=O;P=a.priorityLevel;O=a;try{var h=a.expirationTime<=b;switch(P){case 1:var k=c(h);break;case 2:k=c(h);break;case 3:k=c(h);break;case 4:k=c(h);break;case 5:k=c(h)}}catch(Z){throw Z;}finally{P=f,O=l}if(\"function\"===typeof k)if(b=a.expirationTime,a.callback=k,null===M)M=a.next=a.previous=a;else{k=null;h=M;do{if(b<=h.expirationTime){k=h;break}h=h.next}while(h!==\nM);null===k?k=M:k===M&&(M=a);b=k.previous;b.next=k.previous=a;a.next=k;a.previous=b}}function U(a){if(null!==N&&N.startTime<=a){do{var b=N,c=b.next;if(b===c)N=null;else{N=c;var f=b.previous;f.next=c;c.previous=f}b.next=b.previous=null;V(b,b.expirationTime)}while(null!==N&&N.startTime<=a)}}function W(a){S=!1;U(a);R||(null!==M?(R=!0,d(X)):null!==N&&e(W,N.startTime-a))}\nfunction X(a,b){R=!1;S&&(S=!1,g());U(b);Q=!0;try{if(!a)for(;null!==M&&M.expirationTime<=b;)T(M,b),b=exports.unstable_now(),U(b);else if(null!==M){do T(M,b),b=exports.unstable_now(),U(b);while(null!==M&&!m())}if(null!==M)return!0;null!==N&&e(W,N.startTime-b);return!1}finally{Q=!1}}function Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}\nfunction V(a,b){if(null===M)M=a.next=a.previous=a;else{var c=null,f=M;do{if(b<f.expirationTime){c=f;break}f=f.next}while(f!==M);null===c?c=M:c===M&&(M=a);b=c.previous;b.next=c.previous=a;a.next=c;a.previous=b}}var aa=n;exports.unstable_ImmediatePriority=1;exports.unstable_UserBlockingPriority=2;exports.unstable_NormalPriority=3;exports.unstable_IdlePriority=5;exports.unstable_LowPriority=4;\nexports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=P;P=a;try{return b()}finally{P=c}};exports.unstable_next=function(a){switch(P){case 1:case 2:case 3:var b=3;break;default:b=P}var c=P;P=b;try{return a()}finally{P=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var f=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var l=c.delay;l=\"number\"===typeof l&&0<l?f+l:f;c=\"number\"===typeof c.timeout?c.timeout:Y(a)}else c=Y(a),l=f;c=l+c;a={callback:b,priorityLevel:a,startTime:l,expirationTime:c,next:null,previous:null};if(l>f){c=l;if(null===N)N=a.next=a.previous=a;else{b=null;var h=N;do{if(c<h.startTime){b=h;break}h=h.next}while(h!==N);null===b?b=N:b===N&&(N=a);c=b.previous;c.next=b.previous=a;a.next=b;a.previous=\nc}null===M&&N===a&&(S?g():S=!0,e(W,l-f))}else V(a,c),R||Q||(R=!0,d(X));return a};exports.unstable_cancelCallback=function(a){var b=a.next;if(null!==b){if(a===b)a===M?M=null:a===N&&(N=null);else{a===M?M=b:a===N&&(N=b);var c=a.previous;c.next=b;b.previous=c}a.next=a.previous=null}};exports.unstable_wrapCallback=function(a){var b=P;return function(){var c=P;P=b;try{return a.apply(this,arguments)}finally{P=c}}};exports.unstable_getCurrentPriorityLevel=function(){return P};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();U(a);return null!==O&&null!==M&&M.startTime<=a&&M.expirationTime<O.expirationTime||m()};exports.unstable_requestPaint=aa;exports.unstable_continueExecution=function(){R||Q||(R=!0,d(X))};exports.unstable_pauseExecution=function(){};exports.unstable_getFirstCallbackNode=function(){return M};\n","/* Copyright @ 2016-present 8x8, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar Logger = require('./Logger.js');\n\n/**\n * Creates new <tt>LogCollector</tt>. Class implements <tt>LoggerTransport</tt>\n * and thus can be added as global transport in order to capture all the logs.\n *\n * It captures subsequent log lines created whenever <tt>Logger</tt> logs\n * a message and stores them in a queue in order to batch log entries. There are\n * time and size limit constraints which determine how often batch entries are\n * stored. Whenever one of these limits is exceeded the <tt>LogCollector</tt>\n * will use the <tt>logStorage</tt> object given as an argument to save\n * the batch log entry.\n *\n * @param {Object} logStorage an object which allows to store the logs collected\n * @param {function(string|object[])} logStorage.storeLogs a method called when\n * this <tt>LogCollector</tt> requests log entry storage. The method's argument\n * is an array which can contain <tt>string</tt>s and <tt>object</tt>s. If given\n * item is an object it means that it's an aggregated message. That is a message\n * which is the same as the previous one and it's representation has\n * the following format:\n * {\n *   {string} text: 'the text of some duplicated message'\n *   {number} count: 3 // how many times the message appeared in a row\n * }\n * If a message \"B\" after an aggregated message \"A\" is different, then it breaks\n * the sequence of \"A\". Which means that even if the next message \"C\" is\n * the same as \"A\" it will start a new aggregated message \"C\".\n * @param {function()} logStorage.isReady a method which should return\n * a <tt>boolean</tt> to tell the collector that it's ready to store. During the\n * time storage is not ready log batches will be cached and stored on the next\n * occasion (flush or interval timeout).\n *\n * @param {Object} options the <tt>LogCollector</tt> configuration options.\n * @param {number} options.maxEntryLength the size limit for a single log entry\n * to be stored. The <tt>LogCollector</tt> will push the entry as soon as it\n * reaches or exceeds this limit given that <tt>logStorage.isReady</tt>\n * returns <tt>true</tt>. Otherwise the log entry will be cached until the log\n * storage becomes ready. Note that the \"is ready\" condition is checked every\n * <tt>options.storeInterval</tt> milliseconds.\n * @param {number} options.storeInterval how often the logs should be stored in\n * case <tt>maxEntryLength</tt> was not exceeded.\n * @param {boolean} options.stringifyObjects indicates whether or not object\n * arguments should be \"stringified\" with <tt>JSON.stringify</tt> when a log\n * message is composed. Note that objects logged on the error log level are\n * always stringified.\n *\n * @constructor\n */\nfunction LogCollector(logStorage, options) {\n    this.logStorage = logStorage;\n    this.stringifyObjects = options && options.stringifyObjects ? options.stringifyObjects : false;\n    this.storeInterval = options && options.storeInterval ? options.storeInterval: 30000;\n    this.maxEntryLength = options && options.maxEntryLength ? options.maxEntryLength : 10000;\n    // Bind the log method for each level to the corresponding method name\n    // in order to implement \"global log transport\" object.\n    Object.keys(Logger.levels).forEach(\n    function (logLevel) {\n        var methodName = Logger.levels[logLevel];\n        this[methodName] = function () {\n            this._log.apply(this, arguments);\n        }.bind(this, logLevel);\n    }.bind(this));\n    /**\n     * The ID of store logs interval if one is currently scheduled or\n     * <tt>null</tt> otherwise.\n     * @type {number|null}\n     */\n    this.storeLogsIntervalID = null;\n    /**\n     * The log messages that are to be batched into log entry when\n     * {@link LogCollector._flush} method is called.\n     * @type {string[]}\n     */\n    this.queue = [];\n    /**\n     * The total length of all messages currently stored in the {@link queue}.\n     * @type {number}\n     */\n    this.totalLen = 0;\n    /**\n     * An array used to temporarily store log batches, before the storage gets\n     * ready.\n     * @type {string[]}\n     */\n    this.outputCache = [];\n}\n\n/**\n * Method called inside of {@link formatLogMessage} in order to covert an\n * <tt>Object</tt> argument to string. The conversion will happen when either\n * 'stringifyObjects' option is enabled or on the {@link Logger.levels.ERROR}\n * log level. The default implementation uses <tt>JSON.stringify</tt> and\n * returns \"[object with circular refs?]\" instead of an object if it fails.\n *\n * @param {object} someObject the <tt>object</tt> to be stringified.\n *\n * @return {string} the result of <tt>JSON.stringify</tt> or\n * \"[object with circular refs?]\" if any error occurs during \"stringification\".\n *\n * @protected\n */\nLogCollector.prototype.stringify = function (someObject) {\n    try {\n        return JSON.stringify(someObject);\n    } catch (error) {\n        return '[object with circular refs?]';\n    }\n};\n\n/**\n * Formats log entry for the given logging level and arguments passed to the\n * <tt>Logger</tt>'s log method. The first argument is log level and the next\n * arguments have to be captured using JS built-in 'arguments' variable.\n *\n * @param {Logger.levels} logLevel provides the logging level of the message to\n * be logged.\n * @param {Date} timestamp - The {@code Date} when a message has been logged.\n *\n * @return {string|null} a non-empty string representation of the log entry\n * crafted from the log arguments. If the return value is <tt>null</tt> then\n * the message wil be discarded by this <tt>LogCollector</tt>.\n *\n * @protected\n */\nLogCollector.prototype.formatLogMessage = function (\nlogLevel /* timestamp, arg2, arg3, arg4... */) {\n    var msg = '';\n    for (var i = 1, len = arguments.length; i < len; i++) {\n        var arg = arguments[i];\n        // objects logged on error level are always converted to JSON\n        if ((this.stringifyObjects || logLevel === Logger.levels.ERROR) &&\n            typeof arg === 'object') {\n            arg = this.stringify(arg);\n        }\n        msg += arg;\n        if (i !== len - 1) {\n            msg += ' ';\n        }\n    }\n    return msg.length ? msg : null;\n};\n\n/**\n * The log method bound to each of the logging levels in order to implement\n * \"global log transport\" object.\n *\n * @private\n */\nLogCollector.prototype._log = function() {\n\n    // var logLevel = arguments[0]; first argument is the log level\n    var timestamp = arguments[1];\n    var msg = this.formatLogMessage.apply(this, arguments);\n    if (msg) {\n        // The same as the previous message aggregation logic\n        var prevMessage = this.queue[this.queue.length - 1];\n        var prevMessageText = prevMessage && prevMessage.text;\n        if (prevMessageText === msg) {\n            prevMessage.count += 1;\n        } else {\n            this.queue.push({\n                text: msg,\n                timestamp: timestamp,\n                count: 1\n            });\n            this.totalLen += msg.length;\n        }\n    }\n\n    if (this.totalLen >= this.maxEntryLength) {\n        this._flush(true /* force */, true /* reschedule */);\n    }\n};\n\n/**\n * Starts periodical \"store logs\" task which will be triggered at the interval\n * specified in the constructor options.\n */\nLogCollector.prototype.start = function () {\n    this._reschedulePublishInterval();\n};\n\n/**\n * Reschedules the periodical \"store logs\" task which will store the next batch\n * log entry in the storage.\n * @private\n */\nLogCollector.prototype._reschedulePublishInterval = function () {\n    if (this.storeLogsIntervalID) {\n        window.clearTimeout(this.storeLogsIntervalID);\n        this.storeLogsIntervalID = null;\n    }\n    // It's actually a timeout, because it is rescheduled on every flush\n    this.storeLogsIntervalID = window.setTimeout(\n        this._flush.bind(\n            this, false /* do not force */, true /* reschedule */),\n        this.storeInterval);\n};\n\n/**\n * Call this method to flush the log entry buffer and store it in the log\n * storage immediately (given that the storage is ready).\n */\nLogCollector.prototype.flush = function() {\n    this._flush(\n        false /* do not force, as it will not be stored anyway */,\n        true /* reschedule next update */ );\n};\n\n/**\n * Stores the next batch log entry in the log storage.\n * @param {boolean} force enforce current logs batch to be stored or cached if\n * there is anything to be logged, but the storage is not ready yet. One of\n * legitimate reasons to force is when the logs length exceeds size limit which\n * could result in truncation.\n * @param {boolean} reschedule <tt>true</tt> if the next periodic task should be\n * scheduled after the log entry is stored. <tt>false</tt> will end the periodic\n * task cycle.\n * @private\n */\nLogCollector.prototype._flush = function(force, reschedule) {\n    // Publish only if there's anything to be logged\n    if (this.totalLen > 0 && (this.logStorage.isReady() || force)) {\n        //FIXME avoid truncating\n        // right now we don't care if the message size is \"slightly\" exceeded\n        if (this.logStorage.isReady()) {\n            // Sends all cached logs\n            if (this.outputCache.length) {\n                this.outputCache.forEach(\n                    function (cachedQueue) {\n                        this.logStorage.storeLogs(cachedQueue);\n                    }.bind(this)\n                );\n                // Clear the cache\n                this.outputCache = [];\n            }\n            // Send current batch\n            this.logStorage.storeLogs(this.queue);\n        } else {\n            this.outputCache.push(this.queue);\n        }\n\n        this.queue = [];\n        this.totalLen = 0;\n    }\n\n    if (reschedule) {\n        this._reschedulePublishInterval();\n    }\n};\n\n/**\n * Stops the periodical \"store logs\" task and immediately stores any pending\n * log entries as a batch.\n */\nLogCollector.prototype.stop = function() {\n    // Flush and stop publishing logs\n    this._flush(false /* do not force */, false /* do not reschedule */);\n};\n\nmodule.exports = LogCollector;\n","function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;","function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nmodule.exports = _defineProperty;","/*jshint -W030 */\nvar tagRE = /(?:<!--[\\S\\s]*?-->|<(?:\"[^\"]*\"['\"]*|'[^']*'['\"]*|[^'\">])+>)/g;\nvar parseTag = require('./parse-tag');\n// re-used obj for quick lookups of components\nvar empty = Object.create ? Object.create(null) : {};\n// common logic for pushing a child node onto a list\nfunction pushTextNode(list, html, level, start, ignoreWhitespace) {\n    // calculate correct end of the content slice in case there's\n    // no tag after the text node.\n    var end = html.indexOf('<', start);\n    var content = html.slice(start, end === -1 ? undefined : end);\n    // if a node is nothing but whitespace, collapse it as the spec states:\n    // https://www.w3.org/TR/html4/struct/text.html#h-9.1\n    if (/^\\s*$/.test(content)) {\n        content = ' ';\n    }\n    // don't add whitespace-only text nodes if they would be trailing text nodes\n    // or if they would be leading whitespace-only text nodes:\n    //  * end > -1 indicates this is not a trailing text node\n    //  * leading node is when level is -1 and list has length 0\n    if ((!ignoreWhitespace && end > -1 && level + list.length >= 0) || content !== ' ') {\n        list.push({\n            type: 'text',\n            content: content\n        });\n    }\n}\n\nmodule.exports = function parse(html, options) {\n    options || (options = {});\n    options.components || (options.components = empty);\n    var result = [];\n    var current;\n    var level = -1;\n    var arr = [];\n    var byTag = {};\n    var inComponent = false;\n\n    html.replace(tagRE, function (tag, index) {\n        if (inComponent) {\n            if (tag !== ('</' + current.name + '>')) {\n                return;\n            } else {\n                inComponent = false;\n            }\n        }\n\n        var isOpen = tag.charAt(1) !== '/';\n        var isComment = tag.indexOf('<!--') === 0;\n        var start = index + tag.length;\n        var nextChar = html.charAt(start);\n        var parent;\n\n        if (isOpen && !isComment) {\n            level++;\n\n            current = parseTag(tag);\n            if (current.type === 'tag' && options.components[current.name]) {\n                current.type = 'component';\n                inComponent = true;\n            }\n\n            if (!current.voidElement && !inComponent && nextChar && nextChar !== '<') {\n                pushTextNode(current.children, html, level, start, options.ignoreWhitespace);\n            }\n\n            byTag[current.tagName] = current;\n\n            // if we're at root, push new base node\n            if (level === 0) {\n                result.push(current);\n            }\n\n            parent = arr[level - 1];\n\n            if (parent) {\n                parent.children.push(current);\n            }\n\n            arr[level] = current;\n        }\n\n        if (isComment || !isOpen || current.voidElement) {\n            if (!isComment) {\n                level--;\n            }\n            if (!inComponent && nextChar !== '<' && nextChar) {\n                // trailing text node\n                // if we're at the root, push a base text node. otherwise add as\n                // a child to the current node.\n                parent = level === -1 ? result : arr[level].children;\n                pushTextNode(parent, html, level, start, options.ignoreWhitespace);\n            }\n        }\n    });\n\n    // If the \"html\" passed isn't actually html, add it as a text node.\n    if (!result.length && html.length) {\n        pushTextNode(result, html, 0, 0, options.ignoreWhitespace);\n    }\n\n    return result;\n};\n","var attrRE = /([\\w-]+)|=|(['\"])([.\\s\\S]*?)\\2/g;\nvar voidElements = require('void-elements');\n\nmodule.exports = function (tag) {\n    var i = 0;\n    var key;\n    var expectingValueAfterEquals = true;\n    var res = {\n        type: 'tag',\n        name: '',\n        voidElement: false,\n        attrs: {},\n        children: []\n    };\n\n    tag.replace(attrRE, function (match) {\n        if (match === '=') {\n            expectingValueAfterEquals = true;\n            i++;\n            return;\n        }\n\n        if (!expectingValueAfterEquals) {\n            if (key) {\n                res.attrs[key] = key; // boolean attribute\n            }\n            key=match;\n        } else {\n            if (i === 0) {\n                if (voidElements[match] || tag.charAt(tag.length - 2) === '/') {\n                    res.voidElement = true;\n                }\n                res.name = match;\n            } else {\n                res.attrs[key] = match.replace(/^['\"]|['\"]$/g, '');\n                key=undefined;\n            }\n        }\n        i++;\n        expectingValueAfterEquals = false;\n    });\n\n    return res;\n};\n","/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n  \"area\": true,\n  \"base\": true,\n  \"br\": true,\n  \"col\": true,\n  \"embed\": true,\n  \"hr\": true,\n  \"img\": true,\n  \"input\": true,\n  \"keygen\": true,\n  \"link\": true,\n  \"menuitem\": true,\n  \"meta\": true,\n  \"param\": true,\n  \"source\": true,\n  \"track\": true,\n  \"wbr\": true\n};\n","function attrString(attrs) {\n    var buff = [];\n    for (var key in attrs) {\n        buff.push(key + '=\"' + attrs[key] + '\"');\n    }\n    if (!buff.length) {\n        return '';\n    }\n    return ' ' + buff.join(' ');\n}\n\nfunction stringify(buff, doc) {\n    switch (doc.type) {\n    case 'text':\n        return buff + doc.content;\n    case 'tag':\n        buff += '<' + doc.name + (doc.attrs ? attrString(doc.attrs) : '') + (doc.voidElement ? '/>' : '>');\n        if (doc.voidElement) {\n            return buff;\n        }\n        return buff + doc.children.reduce(stringify, '') + '</' + doc.name + '>';\n    }\n}\n\nmodule.exports = function (doc) {\n    return doc.reduce(function (token, rootEl) {\n        return token + stringify('', rootEl);\n    }, '');\n};\n","function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _iterableToArrayLimit(arr, i) {\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nmodule.exports = _nonIterableRest;","var map = {\n\t\"./af\": 370,\n\t\"./af.js\": 370,\n\t\"./ar\": 371,\n\t\"./ar-dz\": 372,\n\t\"./ar-dz.js\": 372,\n\t\"./ar-kw\": 373,\n\t\"./ar-kw.js\": 373,\n\t\"./ar-ly\": 374,\n\t\"./ar-ly.js\": 374,\n\t\"./ar-ma\": 375,\n\t\"./ar-ma.js\": 375,\n\t\"./ar-sa\": 376,\n\t\"./ar-sa.js\": 376,\n\t\"./ar-tn\": 377,\n\t\"./ar-tn.js\": 377,\n\t\"./ar.js\": 371,\n\t\"./az\": 378,\n\t\"./az.js\": 378,\n\t\"./be\": 379,\n\t\"./be.js\": 379,\n\t\"./bg\": 305,\n\t\"./bg.js\": 305,\n\t\"./bm\": 380,\n\t\"./bm.js\": 380,\n\t\"./bn\": 381,\n\t\"./bn.js\": 381,\n\t\"./bo\": 382,\n\t\"./bo.js\": 382,\n\t\"./br\": 383,\n\t\"./br.js\": 383,\n\t\"./bs\": 384,\n\t\"./bs.js\": 384,\n\t\"./ca\": 385,\n\t\"./ca.js\": 385,\n\t\"./cs\": 386,\n\t\"./cs.js\": 386,\n\t\"./cv\": 387,\n\t\"./cv.js\": 387,\n\t\"./cy\": 388,\n\t\"./cy.js\": 388,\n\t\"./da\": 389,\n\t\"./da.js\": 389,\n\t\"./de\": 306,\n\t\"./de-at\": 390,\n\t\"./de-at.js\": 390,\n\t\"./de-ch\": 391,\n\t\"./de-ch.js\": 391,\n\t\"./de.js\": 306,\n\t\"./dv\": 392,\n\t\"./dv.js\": 392,\n\t\"./el\": 393,\n\t\"./el.js\": 393,\n\t\"./en-au\": 394,\n\t\"./en-au.js\": 394,\n\t\"./en-ca\": 395,\n\t\"./en-ca.js\": 395,\n\t\"./en-gb\": 396,\n\t\"./en-gb.js\": 396,\n\t\"./en-ie\": 397,\n\t\"./en-ie.js\": 397,\n\t\"./en-nz\": 398,\n\t\"./en-nz.js\": 398,\n\t\"./eo\": 307,\n\t\"./eo.js\": 307,\n\t\"./es\": 308,\n\t\"./es-do\": 399,\n\t\"./es-do.js\": 399,\n\t\"./es-us\": 400,\n\t\"./es-us.js\": 400,\n\t\"./es.js\": 308,\n\t\"./et\": 401,\n\t\"./et.js\": 401,\n\t\"./eu\": 402,\n\t\"./eu.js\": 402,\n\t\"./fa\": 403,\n\t\"./fa.js\": 403,\n\t\"./fi\": 404,\n\t\"./fi.js\": 404,\n\t\"./fo\": 405,\n\t\"./fo.js\": 405,\n\t\"./fr\": 309,\n\t\"./fr-ca\": 406,\n\t\"./fr-ca.js\": 406,\n\t\"./fr-ch\": 407,\n\t\"./fr-ch.js\": 407,\n\t\"./fr.js\": 309,\n\t\"./fy\": 408,\n\t\"./fy.js\": 408,\n\t\"./gd\": 409,\n\t\"./gd.js\": 409,\n\t\"./gl\": 410,\n\t\"./gl.js\": 410,\n\t\"./gom-latn\": 411,\n\t\"./gom-latn.js\": 411,\n\t\"./gu\": 412,\n\t\"./gu.js\": 412,\n\t\"./he\": 413,\n\t\"./he.js\": 413,\n\t\"./hi\": 414,\n\t\"./hi.js\": 414,\n\t\"./hr\": 415,\n\t\"./hr.js\": 415,\n\t\"./hu\": 416,\n\t\"./hu.js\": 416,\n\t\"./hy-am\": 310,\n\t\"./hy-am.js\": 310,\n\t\"./id\": 417,\n\t\"./id.js\": 417,\n\t\"./is\": 418,\n\t\"./is.js\": 418,\n\t\"./it\": 311,\n\t\"./it.js\": 311,\n\t\"./ja\": 419,\n\t\"./ja.js\": 419,\n\t\"./jv\": 420,\n\t\"./jv.js\": 420,\n\t\"./ka\": 421,\n\t\"./ka.js\": 421,\n\t\"./kk\": 422,\n\t\"./kk.js\": 422,\n\t\"./km\": 423,\n\t\"./km.js\": 423,\n\t\"./kn\": 424,\n\t\"./kn.js\": 424,\n\t\"./ko\": 425,\n\t\"./ko.js\": 425,\n\t\"./ky\": 426,\n\t\"./ky.js\": 426,\n\t\"./lb\": 427,\n\t\"./lb.js\": 427,\n\t\"./lo\": 428,\n\t\"./lo.js\": 428,\n\t\"./lt\": 429,\n\t\"./lt.js\": 429,\n\t\"./lv\": 430,\n\t\"./lv.js\": 430,\n\t\"./me\": 431,\n\t\"./me.js\": 431,\n\t\"./mi\": 432,\n\t\"./mi.js\": 432,\n\t\"./mk\": 433,\n\t\"./mk.js\": 433,\n\t\"./ml\": 434,\n\t\"./ml.js\": 434,\n\t\"./mr\": 435,\n\t\"./mr.js\": 435,\n\t\"./ms\": 436,\n\t\"./ms-my\": 437,\n\t\"./ms-my.js\": 437,\n\t\"./ms.js\": 436,\n\t\"./my\": 438,\n\t\"./my.js\": 438,\n\t\"./nb\": 312,\n\t\"./nb.js\": 312,\n\t\"./ne\": 439,\n\t\"./ne.js\": 439,\n\t\"./nl\": 440,\n\t\"./nl-be\": 441,\n\t\"./nl-be.js\": 441,\n\t\"./nl.js\": 440,\n\t\"./nn\": 442,\n\t\"./nn.js\": 442,\n\t\"./pa-in\": 443,\n\t\"./pa-in.js\": 443,\n\t\"./pl\": 313,\n\t\"./pl.js\": 313,\n\t\"./pt\": 314,\n\t\"./pt-br\": 315,\n\t\"./pt-br.js\": 315,\n\t\"./pt.js\": 314,\n\t\"./ro\": 444,\n\t\"./ro.js\": 444,\n\t\"./ru\": 316,\n\t\"./ru.js\": 316,\n\t\"./sd\": 445,\n\t\"./sd.js\": 445,\n\t\"./se\": 446,\n\t\"./se.js\": 446,\n\t\"./si\": 447,\n\t\"./si.js\": 447,\n\t\"./sk\": 317,\n\t\"./sk.js\": 317,\n\t\"./sl\": 318,\n\t\"./sl.js\": 318,\n\t\"./sq\": 448,\n\t\"./sq.js\": 448,\n\t\"./sr\": 449,\n\t\"./sr-cyrl\": 450,\n\t\"./sr-cyrl.js\": 450,\n\t\"./sr.js\": 449,\n\t\"./ss\": 451,\n\t\"./ss.js\": 451,\n\t\"./sv\": 319,\n\t\"./sv.js\": 319,\n\t\"./sw\": 452,\n\t\"./sw.js\": 452,\n\t\"./ta\": 453,\n\t\"./ta.js\": 453,\n\t\"./te\": 454,\n\t\"./te.js\": 454,\n\t\"./tet\": 455,\n\t\"./tet.js\": 455,\n\t\"./th\": 456,\n\t\"./th.js\": 456,\n\t\"./tl-ph\": 457,\n\t\"./tl-ph.js\": 457,\n\t\"./tlh\": 458,\n\t\"./tlh.js\": 458,\n\t\"./tr\": 320,\n\t\"./tr.js\": 320,\n\t\"./tzl\": 459,\n\t\"./tzl.js\": 459,\n\t\"./tzm\": 460,\n\t\"./tzm-latn\": 461,\n\t\"./tzm-latn.js\": 461,\n\t\"./tzm.js\": 460,\n\t\"./uk\": 462,\n\t\"./uk.js\": 462,\n\t\"./ur\": 463,\n\t\"./ur.js\": 463,\n\t\"./uz\": 464,\n\t\"./uz-latn\": 465,\n\t\"./uz-latn.js\": 465,\n\t\"./uz.js\": 464,\n\t\"./vi\": 466,\n\t\"./vi.js\": 466,\n\t\"./x-pseudo\": 467,\n\t\"./x-pseudo.js\": 467,\n\t\"./yo\": 468,\n\t\"./yo.js\": 468,\n\t\"./zh-cn\": 321,\n\t\"./zh-cn.js\": 321,\n\t\"./zh-hk\": 469,\n\t\"./zh-hk.js\": 469,\n\t\"./zh-tw\": 470,\n\t\"./zh-tw.js\": 470\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 669;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _utils = require('./utils.js');\n\nvar utils = _interopRequireWildcard(_utils);\n\nvar _cookie = require('./browserLookups/cookie.js');\n\nvar _cookie2 = _interopRequireDefault(_cookie);\n\nvar _querystring = require('./browserLookups/querystring.js');\n\nvar _querystring2 = _interopRequireDefault(_querystring);\n\nvar _localStorage = require('./browserLookups/localStorage.js');\n\nvar _localStorage2 = _interopRequireDefault(_localStorage);\n\nvar _navigator = require('./browserLookups/navigator.js');\n\nvar _navigator2 = _interopRequireDefault(_navigator);\n\nvar _htmlTag = require('./browserLookups/htmlTag.js');\n\nvar _htmlTag2 = _interopRequireDefault(_htmlTag);\n\nvar _path = require('./browserLookups/path.js');\n\nvar _path2 = _interopRequireDefault(_path);\n\nvar _subdomain = require('./browserLookups/subdomain.js');\n\nvar _subdomain2 = _interopRequireDefault(_subdomain);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getDefaults() {\n  return {\n    order: ['querystring', 'cookie', 'localStorage', 'navigator', 'htmlTag'],\n    lookupQuerystring: 'lng',\n    lookupCookie: 'i18next',\n    lookupLocalStorage: 'i18nextLng',\n\n    // cache user language\n    caches: ['localStorage'],\n    excludeCacheFor: ['cimode']\n    //cookieMinutes: 10,\n    //cookieDomain: 'myDomain'\n  };\n}\n\nvar Browser = function () {\n  function Browser(services) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Browser);\n\n    this.type = 'languageDetector';\n    this.detectors = {};\n\n    this.init(services, options);\n  }\n\n  _createClass(Browser, [{\n    key: 'init',\n    value: function init(services) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var i18nOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      this.services = services;\n      this.options = utils.defaults(options, this.options || {}, getDefaults());\n\n      // backwards compatibility\n      if (this.options.lookupFromUrlIndex) this.options.lookupFromPathIndex = this.options.lookupFromUrlIndex;\n\n      this.i18nOptions = i18nOptions;\n\n      this.addDetector(_cookie2.default);\n      this.addDetector(_querystring2.default);\n      this.addDetector(_localStorage2.default);\n      this.addDetector(_navigator2.default);\n      this.addDetector(_htmlTag2.default);\n      this.addDetector(_path2.default);\n      this.addDetector(_subdomain2.default);\n    }\n  }, {\n    key: 'addDetector',\n    value: function addDetector(detector) {\n      this.detectors[detector.name] = detector;\n    }\n  }, {\n    key: 'detect',\n    value: function detect(detectionOrder) {\n      var _this = this;\n\n      if (!detectionOrder) detectionOrder = this.options.order;\n\n      var detected = [];\n      detectionOrder.forEach(function (detectorName) {\n        if (_this.detectors[detectorName]) {\n          var lookup = _this.detectors[detectorName].lookup(_this.options);\n          if (lookup && typeof lookup === 'string') lookup = [lookup];\n          if (lookup) detected = detected.concat(lookup);\n        }\n      });\n\n      var found = void 0;\n      detected.forEach(function (lng) {\n        if (found) return;\n        var cleanedLng = _this.services.languageUtils.formatLanguageCode(lng);\n        if (_this.services.languageUtils.isWhitelisted(cleanedLng)) found = cleanedLng;\n      });\n\n      if (!found) {\n        var fallbacks = this.i18nOptions.fallbackLng;\n        if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n        if (!fallbacks) fallbacks = [];\n\n        if (Object.prototype.toString.apply(fallbacks) === '[object Array]') {\n          found = fallbacks[0];\n        } else {\n          found = fallbacks[0] || fallbacks.default && fallbacks.default[0];\n        }\n      };\n\n      return found;\n    }\n  }, {\n    key: 'cacheUserLanguage',\n    value: function cacheUserLanguage(lng, caches) {\n      var _this2 = this;\n\n      if (!caches) caches = this.options.caches;\n      if (!caches) return;\n      if (this.options.excludeCacheFor && this.options.excludeCacheFor.indexOf(lng) > -1) return;\n      caches.forEach(function (cacheName) {\n        if (_this2.detectors[cacheName]) _this2.detectors[cacheName].cacheUserLanguage(lng, _this2.options);\n      });\n    }\n  }]);\n\n  return Browser;\n}();\n\nBrowser.type = 'languageDetector';\n\nexports.default = Browser;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaults = defaults;\nexports.extend = extend;\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\n\nfunction defaults(obj) {\n  each.call(slice.call(arguments, 1), function (source) {\n    if (source) {\n      for (var prop in source) {\n        if (obj[prop] === undefined) obj[prop] = source[prop];\n      }\n    }\n  });\n  return obj;\n}\n\nfunction extend(obj) {\n  each.call(slice.call(arguments, 1), function (source) {\n    if (source) {\n      for (var prop in source) {\n        obj[prop] = source[prop];\n      }\n    }\n  });\n  return obj;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar cookie = {\n  create: function create(name, value, minutes, domain) {\n    var expires = void 0;\n    if (minutes) {\n      var date = new Date();\n      date.setTime(date.getTime() + minutes * 60 * 1000);\n      expires = '; expires=' + date.toGMTString();\n    } else expires = '';\n    domain = domain ? 'domain=' + domain + ';' : '';\n    document.cookie = name + '=' + value + expires + ';' + domain + 'path=/';\n  },\n\n  read: function read(name) {\n    var nameEQ = name + '=';\n    var ca = document.cookie.split(';');\n    for (var i = 0; i < ca.length; i++) {\n      var c = ca[i];\n      while (c.charAt(0) === ' ') {\n        c = c.substring(1, c.length);\n      }if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n    }\n    return null;\n  },\n\n  remove: function remove(name) {\n    this.create(name, '', -1);\n  }\n};\n\nexports.default = {\n  name: 'cookie',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n\n    if (options.lookupCookie && typeof document !== 'undefined') {\n      var c = cookie.read(options.lookupCookie);\n      if (c) found = c;\n    }\n\n    return found;\n  },\n  cacheUserLanguage: function cacheUserLanguage(lng, options) {\n    if (options.lookupCookie && typeof document !== 'undefined') {\n      cookie.create(options.lookupCookie, lng, options.cookieMinutes, options.cookieDomain);\n    }\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'querystring',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n\n    if (typeof window !== 'undefined') {\n      var query = window.location.search.substring(1);\n      var params = query.split('&');\n      for (var i = 0; i < params.length; i++) {\n        var pos = params[i].indexOf('=');\n        if (pos > 0) {\n          var key = params[i].substring(0, pos);\n          if (key === options.lookupQuerystring) {\n            found = params[i].substring(pos + 1);\n          }\n        }\n      }\n    }\n\n    return found;\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar hasLocalStorageSupport = void 0;\ntry {\n  hasLocalStorageSupport = window !== 'undefined' && window.localStorage !== null;\n  var testKey = 'i18next.translate.boo';\n  window.localStorage.setItem(testKey, 'foo');\n  window.localStorage.removeItem(testKey);\n} catch (e) {\n  hasLocalStorageSupport = false;\n}\n\nexports.default = {\n  name: 'localStorage',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n\n    if (options.lookupLocalStorage && hasLocalStorageSupport) {\n      var lng = window.localStorage.getItem(options.lookupLocalStorage);\n      if (lng) found = lng;\n    }\n\n    return found;\n  },\n  cacheUserLanguage: function cacheUserLanguage(lng, options) {\n    if (options.lookupLocalStorage && hasLocalStorageSupport) {\n      window.localStorage.setItem(options.lookupLocalStorage, lng);\n    }\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'navigator',\n\n  lookup: function lookup(options) {\n    var found = [];\n\n    if (typeof navigator !== 'undefined') {\n      if (navigator.languages) {\n        // chrome only; not an array, so can't use .push.apply instead of iterating\n        for (var i = 0; i < navigator.languages.length; i++) {\n          found.push(navigator.languages[i]);\n        }\n      }\n      if (navigator.userLanguage) {\n        found.push(navigator.userLanguage);\n      }\n      if (navigator.language) {\n        found.push(navigator.language);\n      }\n    }\n\n    return found.length > 0 ? found : undefined;\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'htmlTag',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n    var htmlTag = options.htmlTag || (typeof document !== 'undefined' ? document.documentElement : null);\n\n    if (htmlTag && typeof htmlTag.getAttribute === 'function') {\n      found = htmlTag.getAttribute('lang');\n    }\n\n    return found;\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'path',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n    if (typeof window !== 'undefined') {\n      var language = window.location.pathname.match(/\\/([a-zA-Z-]*)/g);\n      if (language instanceof Array) {\n        if (typeof options.lookupFromPathIndex === 'number') {\n          if (typeof language[options.lookupFromPathIndex] !== 'string') {\n            return undefined;\n          }\n          found = language[options.lookupFromPathIndex].replace('/', '');\n        } else {\n          found = language[0].replace('/', '');\n        }\n      }\n    }\n    return found;\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'subdomain',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n    if (typeof window !== 'undefined') {\n      var language = window.location.href.match(/(?:http[s]*\\:\\/\\/)*(.*?)\\.(?=[^\\/]*\\..{2,5})/gi);\n      if (language instanceof Array) {\n        if (typeof options.lookupFromSubdomainIndex === 'number') {\n          found = language[options.lookupFromSubdomainIndex].replace('http://', '').replace('https://', '').replace('.', '');\n        } else {\n          found = language[0].replace('http://', '').replace('https://', '').replace('.', '');\n        }\n      }\n    }\n    return found;\n  }\n};","/*! Moment Duration Format v2.2.2\n *  https://github.com/jsmreese/moment-duration-format\n *  Date: 2018-02-16\n *\n *  Duration format plugin function for the Moment.js library\n *  http://momentjs.com/\n *\n *  Copyright 2018 John Madhavan-Reese\n *  Released under the MIT license\n */\n\n(function (root, factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['moment'], factory);\n    } else if (typeof exports === 'object') {\n        // Node. Does not work with strict CommonJS, but only CommonJS-like\n        // enviroments that support module.exports, like Node.\n        try {\n            module.exports = factory(require('moment'));\n        } catch (e) {\n            // If moment is not available, leave the setup up to the user.\n            // Like when using moment-timezone or similar moment-based package.\n            module.exports = factory;\n        }\n    }\n\n    if (root) {\n        // Globals.\n        root.momentDurationFormatSetup = root.moment ? factory(root.moment) : factory;\n    }\n})(this, function (moment) {\n    // `Number#tolocaleString` is tested on plugin initialization.\n    // If the feature test passes, `toLocaleStringWorks` will be set to `true` and the\n    // native function will be used to generate formatted output. If the feature\n    // test fails, the fallback format function internal to this plugin will be\n    // used.\n    var toLocaleStringWorks = false;\n\n    // `Number#toLocaleString` rounds incorrectly for select numbers in Microsoft\n    // environments (Edge, IE11, Windows Phone) and possibly other environments.\n    // If the rounding test fails and `toLocaleString` will be used for formatting,\n    // the plugin will \"pre-round\" number values using the fallback number format\n    // function before passing them to `toLocaleString` for final formatting.\n    var toLocaleStringRoundingWorks = false;\n\n    // Token type names in order of descending magnitude.\n    var types = \"escape years months weeks days hours minutes seconds milliseconds general\".split(\" \");\n\n    var bubbles = [\n        {\n            type: \"seconds\",\n            targets: [\n                { type: \"minutes\", value: 60 },\n                { type: \"hours\", value: 3600 },\n                { type: \"days\", value: 86400 },\n                { type: \"weeks\", value: 604800 },\n                { type: \"months\", value: 2678400 },\n                { type: \"years\", value: 31536000 }\n            ]\n        },\n        {\n            type: \"minutes\",\n            targets: [\n                { type: \"hours\", value: 60 },\n                { type: \"days\", value: 1440 },\n                { type: \"weeks\", value: 10080 },\n                { type: \"months\", value: 44640 },\n                { type: \"years\", value: 525600 }\n            ]\n        },\n        {\n            type: \"hours\",\n            targets: [\n                { type: \"days\", value: 24 },\n                { type: \"weeks\", value: 168 },\n                { type: \"months\", value: 744 },\n                { type: \"years\", value: 8760 }\n            ]\n        },\n        {\n            type: \"days\",\n            targets: [\n                { type: \"weeks\", value: 7 },\n                { type: \"months\", value: 31 },\n                { type: \"years\", value: 365 }\n            ]\n        },\n        {\n            type: \"months\",\n            targets: [\n                { type: \"years\", value: 12 }\n            ]\n        }\n    ];\n\n    // stringIncludes\n    function stringIncludes(str, search) {\n        if (search.length > str.length) {\n          return false;\n        }\n\n        return str.indexOf(search) !== -1;\n    }\n\n    // repeatZero(qty)\n    // Returns \"0\" repeated `qty` times.\n    // `qty` must be a integer >= 0.\n    function repeatZero(qty) {\n        var result = \"\";\n\n        while (qty) {\n            result += \"0\";\n            qty -= 1;\n        }\n\n        return result;\n    }\n\n    function stringRound(digits) {\n        var digitsArray = digits.split(\"\").reverse();\n        var i = 0;\n        var carry = true;\n\n        while (carry && i < digitsArray.length) {\n            if (i) {\n                if (digitsArray[i] === \"9\") {\n                    digitsArray[i] = \"0\";\n                } else {\n                    digitsArray[i] = (parseInt(digitsArray[i], 10) + 1).toString();\n                    carry = false;\n                }\n            } else {\n                if (parseInt(digitsArray[i], 10) < 5) {\n                    carry = false;\n                }\n\n                digitsArray[i] = \"0\";\n            }\n\n            i += 1;\n        }\n\n        if (carry) {\n            digitsArray.push(\"1\");\n        }\n\n        return digitsArray.reverse().join(\"\");\n    }\n\n    // formatNumber\n    // Formats any number greater than or equal to zero using these options:\n    // - userLocale\n    // - useToLocaleString\n    // - useGrouping\n    // - grouping\n    // - maximumSignificantDigits\n    // - minimumIntegerDigits\n    // - fractionDigits\n    // - groupingSeparator\n    // - decimalSeparator\n    //\n    // `useToLocaleString` will use `toLocaleString` for formatting.\n    // `userLocale` option is passed through to `toLocaleString`.\n    // `fractionDigits` is passed through to `maximumFractionDigits` and `minimumFractionDigits`\n    // Using `maximumSignificantDigits` will override `minimumIntegerDigits` and `fractionDigits`.\n    function formatNumber(number, options, userLocale) {\n        var useToLocaleString = options.useToLocaleString;\n        var useGrouping = options.useGrouping;\n        var grouping = useGrouping && options.grouping.slice();\n        var maximumSignificantDigits = options.maximumSignificantDigits;\n        var minimumIntegerDigits = options.minimumIntegerDigits || 1;\n        var fractionDigits = options.fractionDigits || 0;\n        var groupingSeparator = options.groupingSeparator;\n        var decimalSeparator = options.decimalSeparator;\n\n        if (useToLocaleString && userLocale) {\n            var localeStringOptions = {\n                minimumIntegerDigits: minimumIntegerDigits,\n                useGrouping: useGrouping\n            };\n\n            if (fractionDigits) {\n                localeStringOptions.maximumFractionDigits = fractionDigits;\n                localeStringOptions.minimumFractionDigits = fractionDigits;\n            }\n\n            // toLocaleString output is \"0.0\" instead of \"0\" for HTC browsers\n            // when maximumSignificantDigits is set. See #96.\n            if (maximumSignificantDigits && number > 0) {\n                localeStringOptions.maximumSignificantDigits = maximumSignificantDigits;\n            }\n\n            if (!toLocaleStringRoundingWorks) {\n                var roundingOptions = extend({}, options);\n                roundingOptions.useGrouping = false;\n                roundingOptions.decimalSeparator = \".\";\n                number = parseFloat(formatNumber(number, roundingOptions), 10);\n            }\n\n            return number.toLocaleString(userLocale, localeStringOptions);\n        }\n\n        var numberString;\n\n        // Add 1 to digit output length for floating point errors workaround. See below.\n        if (maximumSignificantDigits) {\n            numberString = number.toPrecision(maximumSignificantDigits + 1);\n        } else {\n            numberString = number.toFixed(fractionDigits + 1);\n        }\n\n        var integerString;\n        var fractionString;\n        var exponentString;\n\n        var temp = numberString.split(\"e\");\n\n        exponentString = temp[1] || \"\";\n\n        temp = temp[0].split(\".\");\n\n        fractionString = temp[1] || \"\";\n        integerString = temp[0] || \"\";\n\n        // Workaround for floating point errors in `toFixed` and `toPrecision`.\n        // (3.55).toFixed(1); --> \"3.5\"\n        // (123.55 - 120).toPrecision(2); --> \"3.5\"\n        // (123.55 - 120); --> 3.549999999999997\n        // (123.55 - 120).toFixed(2); --> \"3.55\"\n        // Round by examing the string output of the next digit.\n\n        // *************** Implement String Rounding here ***********************\n        // Check integerString + fractionString length of toPrecision before rounding.\n        // Check length of fractionString from toFixed output before rounding.\n        var integerLength = integerString.length;\n        var fractionLength = fractionString.length;\n        var digitCount = integerLength + fractionLength;\n        var digits = integerString + fractionString;\n\n        if (maximumSignificantDigits && digitCount === (maximumSignificantDigits + 1) || !maximumSignificantDigits && fractionLength === (fractionDigits + 1)) {\n            // Round digits.\n            digits = stringRound(digits);\n\n            if (digits.length === digitCount + 1) {\n                integerLength = integerLength + 1;\n            }\n\n            // Discard final fractionDigit.\n            if (fractionLength) {\n                digits = digits.slice(0, -1);\n            }\n\n            // Separate integer and fraction.\n            integerString = digits.slice(0, integerLength);\n            fractionString = digits.slice(integerLength);\n        }\n\n        // Trim trailing zeroes from fractionString because toPrecision outputs\n        // precision, not significant digits.\n        if (maximumSignificantDigits) {\n            fractionString = fractionString.replace(/0*$/, \"\");\n        }\n\n        // Handle exponent.\n        var exponent = parseInt(exponentString, 10);\n\n        if (exponent > 0) {\n            if (fractionString.length <= exponent) {\n                fractionString = fractionString + repeatZero(exponent - fractionString.length);\n\n                integerString = integerString + fractionString;\n                fractionString = \"\";\n            } else {\n                integerString = integerString + fractionString.slice(0, exponent);\n                fractionString = fractionString.slice(exponent);\n            }\n        } else if (exponent < 0) {\n            fractionString = (repeatZero(Math.abs(exponent) - integerString.length) + integerString + fractionString);\n\n            integerString = \"0\";\n        }\n\n        if (!maximumSignificantDigits) {\n            // Trim or pad fraction when not using maximumSignificantDigits.\n            fractionString = fractionString.slice(0, fractionDigits);\n\n            if (fractionString.length < fractionDigits) {\n                fractionString = fractionString + repeatZero(fractionDigits - fractionString.length);\n            }\n\n            // Pad integer when using minimumIntegerDigits\n            // and not using maximumSignificantDigits.\n            if (integerString.length < minimumIntegerDigits) {\n                integerString = repeatZero(minimumIntegerDigits - integerString.length) + integerString;\n            }\n        }\n\n        var formattedString = \"\";\n\n        // Handle grouping.\n        if (useGrouping) {\n            temp = integerString;\n            var group;\n\n            while (temp.length) {\n                if (grouping.length) {\n                    group = grouping.shift();\n                }\n\n                if (formattedString) {\n                    formattedString = groupingSeparator + formattedString;\n                }\n\n                formattedString = temp.slice(-group) + formattedString;\n\n                temp = temp.slice(0, -group);\n            }\n        } else {\n            formattedString = integerString;\n        }\n\n        // Add decimalSeparator and fraction.\n        if (fractionString) {\n            formattedString = formattedString + decimalSeparator + fractionString;\n        }\n\n        return formattedString;\n    }\n\n    // durationLabelCompare\n    function durationLabelCompare(a, b) {\n        if (a.label.length > b.label.length) {\n            return -1;\n        }\n\n        if (a.label.length < b.label.length) {\n            return 1;\n        }\n\n        // a must be equal to b\n        return 0;\n    }\n\n    // durationGetLabels\n    function durationGetLabels(token, localeData) {\n        var labels = [];\n\n        each(keys(localeData), function (localeDataKey) {\n            if (localeDataKey.slice(0, 15) !== \"_durationLabels\") {\n                return;\n            }\n\n            var labelType = localeDataKey.slice(15).toLowerCase();\n\n            each(keys(localeData[localeDataKey]), function (labelKey) {\n                if (labelKey.slice(0, 1) === token) {\n                    labels.push({\n                        type: labelType,\n                        key: labelKey,\n                        label: localeData[localeDataKey][labelKey]\n                    });\n                }\n            });\n        });\n\n        return labels;\n    }\n\n    // durationPluralKey\n    function durationPluralKey(token, integerValue, decimalValue) {\n        // Singular for a value of `1`, but not for `1.0`.\n        if (integerValue === 1 && decimalValue === null) {\n            return token;\n        }\n\n        return token + token;\n    }\n\n    var engLocale = {\n        durationLabelsStandard: {\n            S: 'millisecond',\n            SS: 'milliseconds',\n            s: 'second',\n            ss: 'seconds',\n            m: 'minute',\n            mm: 'minutes',\n            h: 'hour',\n            hh: 'hours',\n            d: 'day',\n            dd: 'days',\n            w: 'week',\n            ww: 'weeks',\n            M: 'month',\n            MM: 'months',\n            y: 'year',\n            yy: 'years'\n        },\n        durationLabelsShort: {\n            S: 'msec',\n            SS: 'msecs',\n            s: 'sec',\n            ss: 'secs',\n            m: 'min',\n            mm: 'mins',\n            h: 'hr',\n            hh: 'hrs',\n            d: 'dy',\n            dd: 'dys',\n            w: 'wk',\n            ww: 'wks',\n            M: 'mo',\n            MM: 'mos',\n            y: 'yr',\n            yy: 'yrs'\n        },\n        durationTimeTemplates: {\n            HMS: 'h:mm:ss',\n            HM: 'h:mm',\n            MS: 'm:ss'\n        },\n        durationLabelTypes: [\n            { type: \"standard\", string: \"__\" },\n            { type: \"short\", string: \"_\" }\n        ],\n        durationPluralKey: durationPluralKey\n    };\n\n    // isArray\n    function isArray(array) {\n        return Object.prototype.toString.call(array) === \"[object Array]\";\n    }\n\n    // isObject\n    function isObject(obj) {\n        return Object.prototype.toString.call(obj) === \"[object Object]\";\n    }\n\n    // findLast\n    function findLast(array, callback) {\n        var index = array.length;\n\n        while (index -= 1) {\n            if (callback(array[index])) { return array[index]; }\n        }\n    }\n\n    // find\n    function find(array, callback) {\n        var index = 0;\n\n        var max = array && array.length || 0;\n\n        var match;\n\n        if (typeof callback !== \"function\") {\n            match = callback;\n            callback = function (item) {\n                return item === match;\n            };\n        }\n\n        while (index < max) {\n            if (callback(array[index])) { return array[index]; }\n            index += 1;\n        }\n    }\n\n    // each\n    function each(array, callback) {\n        var index = 0,\n            max = array.length;\n\n        if (!array || !max) { return; }\n\n        while (index < max) {\n            if (callback(array[index], index) === false) { return; }\n            index += 1;\n        }\n    }\n\n    // map\n    function map(array, callback) {\n        var index = 0,\n            max = array.length,\n            ret = [];\n\n        if (!array || !max) { return ret; }\n\n        while (index < max) {\n            ret[index] = callback(array[index], index);\n            index += 1;\n        }\n\n        return ret;\n    }\n\n    // pluck\n    function pluck(array, prop) {\n        return map(array, function (item) {\n            return item[prop];\n        });\n    }\n\n    // compact\n    function compact(array) {\n        var ret = [];\n\n        each(array, function (item) {\n            if (item) { ret.push(item); }\n        });\n\n        return ret;\n    }\n\n    // unique\n    function unique(array) {\n        var ret = [];\n\n        each(array, function (_a) {\n            if (!find(ret, _a)) { ret.push(_a); }\n        });\n\n        return ret;\n    }\n\n    // intersection\n    function intersection(a, b) {\n        var ret = [];\n\n        each(a, function (_a) {\n            each(b, function (_b) {\n                if (_a === _b) { ret.push(_a); }\n            });\n        });\n\n        return unique(ret);\n    }\n\n    // rest\n    function rest(array, callback) {\n        var ret = [];\n\n        each(array, function (item, index) {\n            if (!callback(item)) {\n                ret = array.slice(index);\n                return false;\n            }\n        });\n\n        return ret;\n    }\n\n    // initial\n    function initial(array, callback) {\n        var reversed = array.slice().reverse();\n\n        return rest(reversed, callback).reverse();\n    }\n\n    // extend\n    function extend(a, b) {\n        for (var key in b) {\n            if (b.hasOwnProperty(key)) { a[key] = b[key]; }\n        }\n\n        return a;\n    }\n\n    // keys\n    function keys(a) {\n        var ret = [];\n\n        for (var key in a) {\n            if (a.hasOwnProperty(key)) { ret.push(key); }\n        }\n\n        return ret;\n    }\n\n    // any\n    function any(array, callback) {\n        var index = 0,\n            max = array.length;\n\n        if (!array || !max) { return false; }\n\n        while (index < max) {\n            if (callback(array[index], index) === true) { return true; }\n            index += 1;\n        }\n\n        return false;\n    }\n\n    // flatten\n    function flatten(array) {\n        var ret = [];\n\n        each(array, function(child) {\n            ret = ret.concat(child);\n        });\n\n        return ret;\n    }\n\n    function toLocaleStringSupportsLocales() {\n        var number = 0;\n        try {\n            number.toLocaleString('i');\n        } catch (e) {\n            return e.name === 'RangeError';\n        }\n        return false;\n    }\n\n    function featureTestToLocaleStringRounding() {\n        return (3.55).toLocaleString(\"en\", {\n            useGrouping: false,\n            minimumIntegerDigits: 1,\n            minimumFractionDigits: 1,\n            maximumFractionDigits: 1\n        }) === \"3.6\";\n    }\n\n    function featureTestToLocaleString() {\n        var passed = true;\n\n        // Test locale.\n        passed = passed && toLocaleStringSupportsLocales();\n        if (!passed) { return false; }\n\n        // Test minimumIntegerDigits.\n        passed = passed && (1).toLocaleString(\"en\", { minimumIntegerDigits: 1 }) === \"1\";\n        passed = passed && (1).toLocaleString(\"en\", { minimumIntegerDigits: 2 }) === \"01\";\n        passed = passed && (1).toLocaleString(\"en\", { minimumIntegerDigits: 3 }) === \"001\";\n        if (!passed) { return false; }\n\n        // Test maximumFractionDigits and minimumFractionDigits.\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumFractionDigits: 0, minimumFractionDigits: 0 }) === \"100\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumFractionDigits: 1, minimumFractionDigits: 1 }) === \"100.0\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumFractionDigits: 2, minimumFractionDigits: 2 }) === \"99.99\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumFractionDigits: 3, minimumFractionDigits: 3 }) === \"99.990\";\n        if (!passed) { return false; }\n\n        // Test maximumSignificantDigits.\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumSignificantDigits: 1 }) === \"100\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumSignificantDigits: 2 }) === \"100\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumSignificantDigits: 3 }) === \"100\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumSignificantDigits: 4 }) === \"99.99\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumSignificantDigits: 5 }) === \"99.99\";\n        if (!passed) { return false; }\n\n        // Test grouping.\n        passed = passed && (1000).toLocaleString(\"en\", { useGrouping: true }) === \"1,000\";\n        passed = passed && (1000).toLocaleString(\"en\", { useGrouping: false }) === \"1000\";\n        if (!passed) { return false; }\n\n        return true;\n    }\n\n    // durationsFormat(durations [, template] [, precision] [, settings])\n    function durationsFormat() {\n        var args = [].slice.call(arguments);\n        var settings = {};\n        var durations;\n\n        // Parse arguments.\n        each(args, function (arg, index) {\n            if (!index) {\n                if (!isArray(arg)) {\n                    throw \"Expected array as the first argument to durationsFormat.\";\n                }\n\n                durations = arg;\n            }\n\n            if (typeof arg === \"string\" || typeof arg === \"function\") {\n                settings.template = arg;\n                return;\n            }\n\n            if (typeof arg === \"number\") {\n                settings.precision = arg;\n                return;\n            }\n\n            if (isObject(arg)) {\n                extend(settings, arg);\n            }\n        });\n\n        if (!durations || !durations.length) {\n            return [];\n        }\n\n        settings.returnMomentTypes = true;\n\n        var formattedDurations = map(durations, function (dur) {\n            return dur.format(settings);\n        });\n\n        // Merge token types from all durations.\n        var outputTypes = intersection(types, unique(pluck(flatten(formattedDurations), \"type\")));\n\n        var largest = settings.largest;\n\n        if (largest) {\n            outputTypes = outputTypes.slice(0, largest);\n        }\n\n        settings.returnMomentTypes = false;\n        settings.outputTypes = outputTypes;\n\n        return map(durations, function (dur) {\n            return dur.format(settings);\n        });\n    }\n\n    // durationFormat([template] [, precision] [, settings])\n    function durationFormat() {\n\n        var args = [].slice.call(arguments);\n        var settings = extend({}, this.format.defaults);\n\n        // Keep a shadow copy of this moment for calculating remainders.\n        // Perform all calculations on positive duration value, handle negative\n        // sign at the very end.\n        var asMilliseconds = this.asMilliseconds();\n        var asMonths = this.asMonths();\n\n        // Treat invalid durations as having a value of 0 milliseconds.\n        if (typeof this.isValid === \"function\" && this.isValid() === false) {\n            asMilliseconds = 0;\n            asMonths = 0;\n        }\n\n        var isNegative = asMilliseconds < 0;\n\n        // Two shadow copies are needed because of the way moment.js handles\n        // duration arithmetic for years/months and for weeks/days/hours/minutes/seconds.\n        var remainder = moment.duration(Math.abs(asMilliseconds), \"milliseconds\");\n        var remainderMonths = moment.duration(Math.abs(asMonths), \"months\");\n\n        // Parse arguments.\n        each(args, function (arg) {\n            if (typeof arg === \"string\" || typeof arg === \"function\") {\n                settings.template = arg;\n                return;\n            }\n\n            if (typeof arg === \"number\") {\n                settings.precision = arg;\n                return;\n            }\n\n            if (isObject(arg)) {\n                extend(settings, arg);\n            }\n        });\n\n        var momentTokens = {\n            years: \"y\",\n            months: \"M\",\n            weeks: \"w\",\n            days: \"d\",\n            hours: \"h\",\n            minutes: \"m\",\n            seconds: \"s\",\n            milliseconds: \"S\"\n        };\n\n        var tokenDefs = {\n            escape: /\\[(.+?)\\]/,\n            years: /\\*?[Yy]+/,\n            months: /\\*?M+/,\n            weeks: /\\*?[Ww]+/,\n            days: /\\*?[Dd]+/,\n            hours: /\\*?[Hh]+/,\n            minutes: /\\*?m+/,\n            seconds: /\\*?s+/,\n            milliseconds: /\\*?S+/,\n            general: /.+?/\n        };\n\n        // Types array is available in the template function.\n        settings.types = types;\n\n        var typeMap = function (token) {\n            return find(types, function (type) {\n                return tokenDefs[type].test(token);\n            });\n        };\n\n        var tokenizer = new RegExp(map(types, function (type) {\n            return tokenDefs[type].source;\n        }).join(\"|\"), \"g\");\n\n        // Current duration object is available in the template function.\n        settings.duration = this;\n\n        // Eval template function and cache template string.\n        var template = typeof settings.template === \"function\" ? settings.template.apply(settings) : settings.template;\n\n        // outputTypes and returnMomentTypes are settings to support durationsFormat().\n\n        // outputTypes is an array of moment token types that determines\n        // the tokens returned in formatted output. This option overrides\n        // trim, largest, stopTrim, etc.\n        var outputTypes = settings.outputTypes;\n\n        // returnMomentTypes is a boolean that sets durationFormat to return\n        // the processed momentTypes instead of formatted output.\n        var returnMomentTypes = settings.returnMomentTypes;\n\n        var largest = settings.largest;\n\n        // Setup stopTrim array of token types.\n        var stopTrim = [];\n\n        if (!outputTypes) {\n            if (isArray(settings.stopTrim)) {\n                settings.stopTrim = settings.stopTrim.join(\"\");\n            }\n\n            // Parse stopTrim string to create token types array.\n            if (settings.stopTrim) {\n                each(settings.stopTrim.match(tokenizer), function (token) {\n                    var type = typeMap(token);\n\n                    if (type === \"escape\" || type === \"general\") {\n                        return;\n                    }\n\n                    stopTrim.push(type);\n                });\n            }\n        }\n\n        // Cache moment's locale data.\n        var localeData = moment.localeData();\n\n        if (!localeData) {\n            localeData = {};\n        }\n\n        // Fall back to this plugin's `eng` extension.\n        each(keys(engLocale), function (key) {\n            if (typeof engLocale[key] === \"function\") {\n                if (!localeData[key]) {\n                    localeData[key] = engLocale[key];\n                }\n\n                return;\n            }\n\n            if (!localeData[\"_\" + key]) {\n                localeData[\"_\" + key] = engLocale[key];\n            }\n        });\n\n        // Replace Duration Time Template strings.\n        // For locale `eng`: `_HMS_`, `_HM_`, and `_MS_`.\n        each(keys(localeData._durationTimeTemplates), function (item) {\n            template = template.replace(\"_\" + item + \"_\", localeData._durationTimeTemplates[item]);\n        });\n\n        // Determine user's locale.\n        var userLocale = settings.userLocale || moment.locale();\n\n        var useLeftUnits = settings.useLeftUnits;\n        var usePlural = settings.usePlural;\n        var precision = settings.precision;\n        var forceLength = settings.forceLength;\n        var useGrouping = settings.useGrouping;\n        var trunc = settings.trunc;\n\n        // Use significant digits only when precision is greater than 0.\n        var useSignificantDigits = settings.useSignificantDigits && precision > 0;\n        var significantDigits = useSignificantDigits ? settings.precision : 0;\n        var significantDigitsCache = significantDigits;\n\n        var minValue = settings.minValue;\n        var isMinValue = false;\n\n        var maxValue = settings.maxValue;\n        var isMaxValue = false;\n\n        // formatNumber fallback options.\n        var useToLocaleString = settings.useToLocaleString;\n        var groupingSeparator = settings.groupingSeparator;\n        var decimalSeparator = settings.decimalSeparator;\n        var grouping = settings.grouping;\n\n        useToLocaleString = useToLocaleString && toLocaleStringWorks;\n\n        // Trim options.\n        var trim = settings.trim;\n\n        if (isArray(trim)) {\n            trim = trim.join(\" \");\n        }\n\n        if (trim === null && (largest || maxValue || useSignificantDigits)) {\n            trim = \"all\";\n        }\n\n        if (trim === null || trim === true || trim === \"left\" || trim === \"right\") {\n            trim = \"large\";\n        }\n\n        if (trim === false) {\n            trim = \"\";\n        }\n\n        var trimIncludes = function (item) {\n            return item.test(trim);\n        };\n\n        var rLarge = /large/;\n        var rSmall = /small/;\n        var rBoth = /both/;\n        var rMid = /mid/;\n        var rAll = /^all|[^sm]all/;\n        var rFinal = /final/;\n\n        var trimLarge = largest > 0 || any([rLarge, rBoth, rAll], trimIncludes);\n        var trimSmall = any([rSmall, rBoth, rAll], trimIncludes);\n        var trimMid = any([rMid, rAll], trimIncludes);\n        var trimFinal = any([rFinal, rAll], trimIncludes);\n\n        // Parse format string to create raw tokens array.\n        var rawTokens = map(template.match(tokenizer), function (token, index) {\n            var type = typeMap(token);\n\n            if (token.slice(0, 1) === \"*\") {\n                token = token.slice(1);\n\n                if (type !== \"escape\" && type !== \"general\") {\n                    stopTrim.push(type);\n                }\n            }\n\n            return {\n                index: index,\n                length: token.length,\n                text: \"\",\n\n                // Replace escaped tokens with the non-escaped token text.\n                token: (type === \"escape\" ? token.replace(tokenDefs.escape, \"$1\") : token),\n\n                // Ignore type on non-moment tokens.\n                type: ((type === \"escape\" || type === \"general\") ? null : type)\n            };\n        });\n\n        // Associate text tokens with moment tokens.\n        var currentToken = {\n            index: 0,\n            length: 0,\n            token: \"\",\n            text: \"\",\n            type: null\n        };\n\n        var tokens = [];\n\n        if (useLeftUnits) {\n            rawTokens.reverse();\n        }\n\n        each(rawTokens, function (token) {\n            if (token.type) {\n                if (currentToken.type || currentToken.text) {\n                    tokens.push(currentToken);\n                }\n\n                currentToken = token;\n\n                return;\n            }\n\n            if (useLeftUnits) {\n                currentToken.text = token.token + currentToken.text;\n            } else {\n                currentToken.text += token.token;\n            }\n        });\n\n        if (currentToken.type || currentToken.text) {\n            tokens.push(currentToken);\n        }\n\n        if (useLeftUnits) {\n            tokens.reverse();\n        }\n\n        // Find unique moment token types in the template in order of\n        // descending magnitude.\n        var momentTypes = intersection(types, unique(compact(pluck(tokens, \"type\"))));\n\n        // Exit early if there are no moment token types.\n        if (!momentTypes.length) {\n            return pluck(tokens, \"text\").join(\"\");\n        }\n\n        // Calculate values for each moment type in the template.\n        // For processing the settings, values are associated with moment types.\n        // Values will be assigned to tokens at the last step in order to\n        // assume nothing about frequency or order of tokens in the template.\n        momentTypes = map(momentTypes, function (momentType, index) {\n            // Is this the least-magnitude moment token found?\n            var isSmallest = ((index + 1) === momentTypes.length);\n\n            // Is this the greatest-magnitude moment token found?\n            var isLargest = (!index);\n\n            // Get the raw value in the current units.\n            var rawValue;\n\n            if (momentType === \"years\" || momentType === \"months\") {\n                rawValue = remainderMonths.as(momentType);\n            } else {\n                rawValue = remainder.as(momentType);\n            }\n\n            var wholeValue = Math.floor(rawValue);\n            var decimalValue = rawValue - wholeValue;\n\n            var token = find(tokens, function (token) {\n                return momentType === token.type;\n            });\n\n            if (isLargest && maxValue && rawValue > maxValue) {\n                isMaxValue = true;\n            }\n\n            if (isSmallest && minValue && Math.abs(settings.duration.as(momentType)) < minValue) {\n                isMinValue = true;\n            }\n\n            // Note the length of the largest-magnitude moment token:\n            // if it is greater than one and forceLength is not set,\n            // then default forceLength to `true`.\n            //\n            // Rationale is this: If the template is \"h:mm:ss\" and the\n            // moment value is 5 minutes, the user-friendly output is\n            // \"5:00\", not \"05:00\". We shouldn't pad the `minutes` token\n            // even though it has length of two if the template is \"h:mm:ss\";\n            //\n            // If the minutes output should always include the leading zero\n            // even when the hour is trimmed then set `{ forceLength: true }`\n            // to output \"05:00\". If the template is \"hh:mm:ss\", the user\n            // clearly wanted everything padded so we should output \"05:00\";\n            //\n            // If the user wants the full padded output, they can use\n            // template \"hh:mm:ss\" and set `{ trim: false }` to output\n            // \"00:05:00\".\n            if (isLargest && forceLength === null && token.length > 1) {\n                forceLength = true;\n            }\n\n            // Update remainder.\n            remainder.subtract(wholeValue, momentType);\n            remainderMonths.subtract(wholeValue, momentType);\n\n            return {\n                rawValue: rawValue,\n                wholeValue: wholeValue,\n                // Decimal value is only retained for the least-magnitude\n                // moment type in the format template.\n                decimalValue: isSmallest ? decimalValue : 0,\n                isSmallest: isSmallest,\n                isLargest: isLargest,\n                type: momentType,\n                // Tokens can appear multiple times in a template string,\n                // but all instances must share the same length.\n                tokenLength: token.length\n            };\n        });\n\n        var truncMethod = trunc ? Math.floor : Math.round;\n        var truncate = function (value, places) {\n            var factor = Math.pow(10, places);\n            return truncMethod(value * factor) / factor;\n        };\n\n        var foundFirst = false;\n        var bubbled = false;\n\n        var formatValue = function (momentType, index) {\n            var formatOptions = {\n                useGrouping: useGrouping,\n                groupingSeparator: groupingSeparator,\n                decimalSeparator: decimalSeparator,\n                grouping: grouping,\n                useToLocaleString: useToLocaleString\n            };\n\n            if (useSignificantDigits) {\n                if (significantDigits <= 0) {\n                    momentType.rawValue = 0;\n                    momentType.wholeValue = 0;\n                    momentType.decimalValue = 0;\n                } else {\n                    formatOptions.maximumSignificantDigits = significantDigits;\n                    momentType.significantDigits = significantDigits;\n                }\n            }\n\n            if (isMaxValue && !bubbled) {\n                if (momentType.isLargest) {\n                    momentType.wholeValue = maxValue;\n                    momentType.decimalValue = 0;\n                } else {\n                    momentType.wholeValue = 0;\n                    momentType.decimalValue = 0;\n                }\n            }\n\n            if (isMinValue && !bubbled) {\n                if (momentType.isSmallest) {\n                    momentType.wholeValue = minValue;\n                    momentType.decimalValue = 0;\n                } else {\n                    momentType.wholeValue = 0;\n                    momentType.decimalValue = 0;\n                }\n            }\n\n            if (momentType.isSmallest || momentType.significantDigits && momentType.significantDigits - momentType.wholeValue.toString().length <= 0) {\n                // Apply precision to least significant token value.\n                if (precision < 0) {\n                    momentType.value = truncate(momentType.wholeValue, precision);\n                } else if (precision === 0) {\n                    momentType.value = truncMethod(momentType.wholeValue + momentType.decimalValue);\n                } else { // precision > 0\n                    if (useSignificantDigits) {\n                        if (trunc) {\n                            momentType.value = truncate(momentType.rawValue, significantDigits - momentType.wholeValue.toString().length);\n                        } else {\n                            momentType.value = momentType.rawValue;\n                        }\n\n                        if (momentType.wholeValue) {\n                            significantDigits -= momentType.wholeValue.toString().length;\n                        }\n                    } else {\n                        formatOptions.fractionDigits = precision;\n\n                        if (trunc) {\n                            momentType.value = momentType.wholeValue + truncate(momentType.decimalValue, precision);\n                        } else {\n                            momentType.value = momentType.wholeValue + momentType.decimalValue;\n                        }\n                    }\n                }\n            } else {\n                if (useSignificantDigits && momentType.wholeValue) {\n                    // Outer Math.round required here to handle floating point errors.\n                    momentType.value = Math.round(truncate(momentType.wholeValue, momentType.significantDigits - momentType.wholeValue.toString().length));\n\n                    significantDigits -= momentType.wholeValue.toString().length;\n                } else {\n                    momentType.value = momentType.wholeValue;\n                }\n            }\n\n            if (momentType.tokenLength > 1 && (forceLength || foundFirst)) {\n                formatOptions.minimumIntegerDigits = momentType.tokenLength;\n\n                if (bubbled && formatOptions.maximumSignificantDigits < momentType.tokenLength) {\n                    delete formatOptions.maximumSignificantDigits;\n                }\n            }\n\n            if (!foundFirst && (momentType.value > 0 || trim === \"\" /* trim: false */ || find(stopTrim, momentType.type) || find(outputTypes, momentType.type))) {\n                foundFirst = true;\n            }\n\n            momentType.formattedValue = formatNumber(momentType.value, formatOptions, userLocale);\n\n            formatOptions.useGrouping = false;\n            formatOptions.decimalSeparator = \".\";\n            momentType.formattedValueEn = formatNumber(momentType.value, formatOptions, \"en\");\n\n            if (momentType.tokenLength === 2 && momentType.type === \"milliseconds\") {\n                momentType.formattedValueMS = formatNumber(momentType.value, {\n                    minimumIntegerDigits: 3,\n                    useGrouping: false\n                }, \"en\").slice(0, 2);\n            }\n\n            return momentType;\n        };\n\n        // Calculate formatted values.\n        momentTypes = map(momentTypes, formatValue);\n        momentTypes = compact(momentTypes);\n\n        // Bubble rounded values.\n        if (momentTypes.length > 1) {\n            var findType = function (type) {\n                return find(momentTypes, function (momentType) {\n                    return momentType.type === type;\n                });\n            };\n\n            var bubbleTypes = function (bubble) {\n                var bubbleMomentType = findType(bubble.type);\n\n                if (!bubbleMomentType) {\n                    return;\n                }\n\n                each(bubble.targets, function (target) {\n                    var targetMomentType = findType(target.type);\n\n                    if (!targetMomentType) {\n                        return;\n                    }\n\n                    if (parseInt(bubbleMomentType.formattedValueEn, 10) === target.value) {\n                        bubbleMomentType.rawValue = 0;\n                        bubbleMomentType.wholeValue = 0;\n                        bubbleMomentType.decimalValue = 0;\n                        targetMomentType.rawValue += 1;\n                        targetMomentType.wholeValue += 1;\n                        targetMomentType.decimalValue = 0;\n                        targetMomentType.formattedValueEn = targetMomentType.wholeValue.toString();\n                        bubbled = true;\n                    }\n                });\n            };\n\n            each(bubbles, bubbleTypes);\n        }\n\n        // Recalculate formatted values.\n        if (bubbled) {\n            foundFirst = false;\n            significantDigits = significantDigitsCache;\n            momentTypes = map(momentTypes, formatValue);\n            momentTypes = compact(momentTypes);\n        }\n\n        if (outputTypes && !(isMaxValue && !settings.trim)) {\n            momentTypes = map(momentTypes, function (momentType) {\n                if (find(outputTypes, function (outputType) {\n                    return momentType.type === outputType;\n                })) {\n                    return momentType;\n                }\n\n                return null;\n            });\n\n            momentTypes = compact(momentTypes);\n        } else {\n            // Trim Large.\n            if (trimLarge) {\n                momentTypes = rest(momentTypes, function (momentType) {\n                    // Stop trimming on:\n                    // - the smallest moment type\n                    // - a type marked for stopTrim\n                    // - a type that has a whole value\n                    return !momentType.isSmallest && !momentType.wholeValue && !find(stopTrim, momentType.type);\n                });\n            }\n\n            // Largest.\n            if (largest && momentTypes.length) {\n                momentTypes = momentTypes.slice(0, largest);\n            }\n\n            // Trim Small.\n            if (trimSmall && momentTypes.length > 1) {\n                momentTypes = initial(momentTypes, function (momentType) {\n                    // Stop trimming on:\n                    // - a type marked for stopTrim\n                    // - a type that has a whole value\n                    // - the largest momentType\n                    return !momentType.wholeValue && !find(stopTrim, momentType.type) && !momentType.isLargest;\n                });\n            }\n\n            // Trim Mid.\n            if (trimMid) {\n                momentTypes = map(momentTypes, function (momentType, index) {\n                    if (index > 0 && index < momentTypes.length - 1 && !momentType.wholeValue) {\n                        return null;\n                    }\n\n                    return momentType;\n                });\n\n                momentTypes = compact(momentTypes);\n            }\n\n            // Trim Final.\n            if (trimFinal && momentTypes.length === 1 && !momentTypes[0].wholeValue && !(!trunc && momentTypes[0].isSmallest && momentTypes[0].rawValue < minValue)) {\n                momentTypes = [];\n            }\n        }\n\n        if (returnMomentTypes) {\n            return momentTypes;\n        }\n\n        // Localize and pluralize unit labels.\n        each(tokens, function (token) {\n            var key = momentTokens[token.type];\n\n            var momentType = find(momentTypes, function (momentType) {\n                return momentType.type === token.type;\n            });\n\n            if (!key || !momentType) {\n                return;\n            }\n\n            var values = momentType.formattedValueEn.split(\".\");\n\n            values[0] = parseInt(values[0], 10);\n\n            if (values[1]) {\n                values[1] = parseFloat(\"0.\" + values[1], 10);\n            } else {\n                values[1] = null;\n            }\n\n            var pluralKey = localeData.durationPluralKey(key, values[0], values[1]);\n\n            var labels = durationGetLabels(key, localeData);\n\n            var autoLocalized = false;\n\n            var pluralizedLabels = {};\n\n            // Auto-Localized unit labels.\n            each(localeData._durationLabelTypes, function (labelType) {\n                var label = find(labels, function (label) {\n                    return label.type === labelType.type && label.key === pluralKey;\n                });\n\n                if (label) {\n                    pluralizedLabels[label.type] = label.label;\n\n                    if (stringIncludes(token.text, labelType.string)) {\n                        token.text = token.text.replace(labelType.string, label.label);\n                        autoLocalized = true;\n                    }\n                }\n            });\n\n            // Auto-pluralized unit labels.\n            if (usePlural && !autoLocalized) {\n                labels.sort(durationLabelCompare);\n\n                each(labels, function (label) {\n                    if (pluralizedLabels[label.type] === label.label) {\n                        if (stringIncludes(token.text, label.label)) {\n                            // Stop checking this token if its label is already\n                            // correctly pluralized.\n                            return false;\n                        }\n\n                        // Skip this label if it is correct, but not present in\n                        // the token's text.\n                        return;\n                    }\n\n                    if (stringIncludes(token.text, label.label)) {\n                        // Replece this token's label and stop checking.\n                        token.text = token.text.replace(label.label, pluralizedLabels[label.type]);\n                        return false;\n                    }\n                });\n            }\n        });\n\n        // Build ouptut.\n        tokens = map(tokens, function (token) {\n            if (!token.type) {\n                return token.text;\n            }\n\n            var momentType = find(momentTypes, function (momentType) {\n                return momentType.type === token.type;\n            });\n\n            if (!momentType) {\n                return \"\";\n            }\n\n            var out = \"\";\n\n            if (useLeftUnits) {\n                out += token.text;\n            }\n\n            if (isNegative && isMaxValue || !isNegative && isMinValue) {\n                out += \"< \";\n                isMaxValue = false;\n                isMinValue = false;\n            }\n\n            if (isNegative && isMinValue || !isNegative && isMaxValue) {\n                out += \"> \";\n                isMaxValue = false;\n                isMinValue = false;\n            }\n\n            if (isNegative && (momentType.value > 0 || trim === \"\" || find(stopTrim, momentType.type) || find(outputTypes, momentType.type))) {\n                out += \"-\";\n                isNegative = false;\n            }\n\n            if (token.type === \"milliseconds\" && momentType.formattedValueMS) {\n                out += momentType.formattedValueMS;\n            } else {\n                out += momentType.formattedValue;\n            }\n\n            if (!useLeftUnits) {\n                out += token.text;\n            }\n\n            return out;\n        });\n\n        // Trim leading and trailing comma, space, colon, and dot.\n        return tokens.join(\"\").replace(/(,| |:|\\.)*$/, \"\").replace(/^(,| |:|\\.)*/, \"\");\n    }\n\n    // defaultFormatTemplate\n    function defaultFormatTemplate() {\n        var dur = this.duration;\n\n        var findType = function findType(type) {\n            return dur._data[type];\n        };\n\n        var firstType = find(this.types, findType);\n\n        var lastType = findLast(this.types, findType);\n\n        // Default template strings for each duration dimension type.\n        switch (firstType) {\n            case \"milliseconds\":\n                return \"S __\";\n            case \"seconds\": // Fallthrough.\n            case \"minutes\":\n                return \"*_MS_\";\n            case \"hours\":\n                return \"_HMS_\";\n            case \"days\": // Possible Fallthrough.\n                if (firstType === lastType) {\n                    return \"d __\";\n                }\n            case \"weeks\":\n                if (firstType === lastType) {\n                    return \"w __\";\n                }\n\n                if (this.trim === null) {\n                    this.trim = \"both\";\n                }\n\n                return \"w __, d __, h __\";\n            case \"months\": // Possible Fallthrough.\n                if (firstType === lastType) {\n                    return \"M __\";\n                }\n            case \"years\":\n                if (firstType === lastType) {\n                    return \"y __\";\n                }\n\n                if (this.trim === null) {\n                    this.trim = \"both\";\n                }\n\n                return \"y __, M __, d __\";\n            default:\n                if (this.trim === null) {\n                    this.trim = \"both\";\n                }\n\n                return \"y __, d __, h __, m __, s __\";\n        }\n    }\n\n    // init\n    function init(context) {\n        if (!context) {\n            throw \"Moment Duration Format init cannot find moment instance.\";\n        }\n\n        context.duration.format = durationsFormat;\n        context.duration.fn.format = durationFormat;\n\n        context.duration.fn.format.defaults = {\n            // Many options are defaulted to `null` to distinguish between\n            // 'not set' and 'set to `false`'\n\n            // trim\n            // Can be a string, a delimited list of strings, an array of strings,\n            // or a boolean.\n            // \"large\" - will trim largest-magnitude zero-value tokens until\n            // finding a token with a value, a token identified as 'stopTrim', or\n            // the final token of the format string.\n            // \"small\" - will trim smallest-magnitude zero-value tokens until\n            // finding a token with a value, a token identified as 'stopTrim', or\n            // the final token of the format string.\n            // \"both\" - will execute \"large\" trim then \"small\" trim.\n            // \"mid\" - will trim any zero-value tokens that are not the first or\n            // last tokens. Usually used in conjunction with \"large\" or \"both\".\n            // e.g. \"large mid\" or \"both mid\".\n            // \"final\" - will trim the final token if it is zero-value. Use this\n            // option with \"large\" or \"both\" to output an empty string when\n            // formatting a zero-value duration. e.g. \"large final\" or \"both final\".\n            // \"all\" - Will trim all zero-value tokens. Shorthand for \"both mid final\".\n            // \"left\" - maps to \"large\" to support plugin's version 1 API.\n            // \"right\" - maps to \"large\" to support plugin's version 1 API.\n            // `false` - template tokens are not trimmed.\n            // `true` - treated as \"large\".\n            // `null` - treated as \"large\".\n            trim: null,\n\n            // stopTrim\n            // A moment token string, a delimited set of moment token strings,\n            // or an array of moment token strings. Trimming will stop when a token\n            // listed in this option is reached. A \"*\" character in the format\n            // template string will also mark a moment token as stopTrim.\n            // e.g. \"d [days] *h:mm:ss\" will always stop trimming at the 'hours' token.\n            stopTrim: null,\n\n            // largest\n            // Set to a positive integer to output only the \"n\" largest-magnitude\n            // moment tokens that have a value. All lesser-magnitude moment tokens\n            // will be ignored. This option takes effect even if `trim` is set\n            // to `false`.\n            largest: null,\n\n            // maxValue\n            // Use `maxValue` to render generalized output for large duration values,\n            // e.g. `\"> 60 days\"`. `maxValue` must be a positive integer and is\n            /// applied to the greatest-magnitude moment token in the format template.\n            maxValue: null,\n\n            // minValue\n            // Use `minValue` to render generalized output for small duration values,\n            // e.g. `\"< 5 minutes\"`. `minValue` must be a positive integer and is\n            // applied to the least-magnitude moment token in the format template.\n            minValue: null,\n\n            // precision\n            // If a positive integer, number of decimal fraction digits to render.\n            // If a negative integer, number of integer place digits to truncate to 0.\n            // If `useSignificantDigits` is set to `true` and `precision` is a positive\n            // integer, sets the maximum number of significant digits used in the\n            // formatted output.\n            precision: 0,\n\n            // trunc\n            // Default behavior rounds final token value. Set to `true` to\n            // truncate final token value, which was the default behavior in\n            // version 1 of this plugin.\n            trunc: false,\n\n            // forceLength\n            // Force first moment token with a value to render at full length\n            // even when template is trimmed and first moment token has length of 1.\n            forceLength: null,\n\n            // userLocale\n            // Formatted numerical output is rendered using `toLocaleString`\n            // and the locale of the user's environment. Set this option to render\n            // numerical output using a different locale. Unit names are rendered\n            // and detected using the locale set in moment.js, which can be different\n            // from the locale of user's environment.\n            userLocale: null,\n\n            // usePlural\n            // Will automatically singularize or pluralize unit names when they\n            // appear in the text associated with each moment token. Standard and\n            // short unit labels are singularized and pluralized, based on locale.\n            // e.g. in english, \"1 second\" or \"1 sec\" would be rendered instead\n            // of \"1 seconds\" or \"1 secs\". The default pluralization function\n            // renders a plural label for a value with decimal precision.\n            // e.g. \"1.0 seconds\" is never rendered as \"1.0 second\".\n            // Label types and pluralization function are configurable in the\n            // localeData extensions.\n            usePlural: true,\n\n            // useLeftUnits\n            // The text to the right of each moment token in a format string\n            // is treated as that token's units for the purposes of trimming,\n            // singularizing, and auto-localizing.\n            // e.g. \"h [hours], m [minutes], s [seconds]\".\n            // To properly singularize or localize a format string such as\n            // \"[hours] h, [minutes] m, [seconds] s\", where the units appear\n            // to the left of each moment token, set useLeftUnits to `true`.\n            // This plugin is not tested in the context of rtl text.\n            useLeftUnits: false,\n\n            // useGrouping\n            // Enables locale-based digit grouping in the formatted output. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n            useGrouping: true,\n\n            // useSignificantDigits\n            // Treat the `precision` option as the maximum significant digits\n            // to be rendered. Precision must be a positive integer. Significant\n            // digits extend across unit types,\n            // e.g. \"6 hours 37.5 minutes\" represents 4 significant digits.\n            // Enabling this option causes token length to be ignored. See  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n            useSignificantDigits: false,\n\n            // template\n            // The template string used to format the duration. May be a function\n            // or a string. Template functions are executed with the `this` binding\n            // of the settings object so that template strings may be dynamically\n            // generated based on the duration object (accessible via `this.duration`)\n            // or any of the other settings. Leading and trailing space, comma,\n            // period, and colon characters are trimmed from the resulting string.\n            template: defaultFormatTemplate,\n\n            // useToLocaleString\n            // Set this option to `false` to ignore the `toLocaleString` feature\n            // test and force the use of the `formatNumber` fallback function\n            // included in this plugin.\n            useToLocaleString: true,\n\n            // formatNumber fallback options.\n            // When `toLocaleString` is detected and passes the feature test, the\n            // following options will have no effect: `toLocaleString` will be used\n            // for formatting and the grouping separator, decimal separator, and\n            // integer digit grouping will be determined by the user locale.\n\n            // groupingSeparator\n            // The integer digit grouping separator used when using the fallback\n            // formatNumber function.\n            groupingSeparator: \",\",\n\n            // decimalSeparator\n            // The decimal separator used when using the fallback formatNumber\n            // function.\n            decimalSeparator: \".\",\n\n            // grouping\n            // The integer digit grouping used when using the fallback formatNumber\n            // function. Must be an array. The default value of `[3]` gives the\n            // standard 3-digit thousand/million/billion digit groupings for the\n            // \"en\" locale. Setting this option to `[3, 2]` would generate the\n            // thousand/lakh/crore digit groupings used in the \"en-IN\" locale.\n            grouping: [3]\n        };\n\n        context.updateLocale('en', engLocale);\n    }\n\n    // Run feature tests for `Number#toLocaleString`.\n    toLocaleStringWorks = featureTestToLocaleString();\n    toLocaleStringRoundingWorks = toLocaleStringWorks && featureTestToLocaleStringRounding();\n\n    // Initialize duration format on the global moment instance.\n    init(moment);\n\n    // Return the init function so that duration format can be\n    // initialized on other moment instances.\n    return init;\n});\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar _uppercasePattern = /([A-Z])/g;\n\n/**\n * Hyphenates a camelcased string, for example:\n *\n *   > hyphenate('backgroundColor')\n *   < \"background-color\"\n *\n * For CSS style names, use `hyphenateStyleName` instead which works properly\n * with all vendor prefixes, including `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenate(string) {\n  return string.replace(_uppercasePattern, '-$1').toLowerCase();\n}\n\nmodule.exports = hyphenate;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar invariant = require('fbjs/lib/invariant');\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    invariant(\n      false,\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim\n  };\n\n  ReactPropTypes.checkPropTypes = emptyFunction;\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (process.env.NODE_ENV !== 'production') {\n  validateFormat = function validateFormat(format) {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n  validateFormat(format);\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(format.replace(/%s/g, function () {\n        return args[argIndex++];\n      }));\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n}\n\nmodule.exports = invariant;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/** @license React v16.5.2\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';Object.defineProperty(exports,\"__esModule\",{value:!0});\nvar b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.forward_ref\"):60112,n=b?Symbol.for(\"react.placeholder\"):60113;\nfunction q(a){if(\"object\"===typeof a&&null!==a){var p=a.$$typeof;switch(p){case c:switch(a=a.type,a){case l:case e:case g:case f:return a;default:switch(a=a&&a.$$typeof,a){case k:case m:case h:return a;default:return p}}case d:return p}}}exports.typeOf=q;exports.AsyncMode=l;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=m;exports.Fragment=e;exports.Profiler=g;exports.Portal=d;exports.StrictMode=f;\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===l||a===g||a===f||a===n||\"object\"===typeof a&&null!==a&&(\"function\"===typeof a.then||a.$$typeof===h||a.$$typeof===k||a.$$typeof===m)};exports.isAsyncMode=function(a){return q(a)===l};exports.isContextConsumer=function(a){return q(a)===k};exports.isContextProvider=function(a){return q(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};\nexports.isForwardRef=function(a){return q(a)===m};exports.isFragment=function(a){return q(a)===e};exports.isProfiler=function(a){return q(a)===g};exports.isPortal=function(a){return q(a)===d};exports.isStrictMode=function(a){return q(a)===f};\n","function _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n      arr2[i] = arr[i];\n    }\n\n    return arr2;\n  }\n}\n\nmodule.exports = _arrayWithoutHoles;","function _iterableToArray(iter) {\n  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;","function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nmodule.exports = _nonIterableSpread;","function _setPrototypeOf(o, p) {\n  module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options == 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sizes = void 0;\nvar sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexports.sizes = sizes;","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || 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; };\n\nvar _propTypes = require('prop-types');\n\nvar PropTypes = _interopRequireWildcard(_propTypes);\n\nvar _addClass = require('dom-helpers/class/addClass');\n\nvar _addClass2 = _interopRequireDefault(_addClass);\n\nvar _removeClass = require('dom-helpers/class/removeClass');\n\nvar _removeClass2 = _interopRequireDefault(_removeClass);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Transition = require('./Transition');\n\nvar _Transition2 = _interopRequireDefault(_Transition);\n\nvar _PropTypes = require('./utils/PropTypes');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar addClass = function addClass(node, classes) {\n  return node && classes && classes.split(' ').forEach(function (c) {\n    return (0, _addClass2.default)(node, c);\n  });\n};\nvar removeClass = function removeClass(node, classes) {\n  return node && classes && classes.split(' ').forEach(function (c) {\n    return (0, _removeClass2.default)(node, c);\n  });\n};\n\nvar propTypes = _extends({}, _Transition2.default.propTypes, {\n\n  /**\n   * The animation classNames applied to the component as it enters, exits or has finished the transition.\n   * A single name can be provided and it will be suffixed for each stage: e.g.\n   *\n   * `classNames=\"fade\"` applies `fade-enter`, `fade-enter-active`, `fade-enter-done`,\n   * `fade-exit`, `fade-exit-active`, `fade-exit-done`, `fade-appear`, and `fade-appear-active`.\n   * Each individual classNames can also be specified independently like:\n   *\n   * ```js\n   * classNames={{\n   *  appear: 'my-appear',\n   *  appearActive: 'my-active-appear',\n   *  enter: 'my-enter',\n   *  enterActive: 'my-active-enter',\n   *  enterDone: 'my-done-enter',\n   *  exit: 'my-exit',\n   *  exitActive: 'my-active-exit',\n   *  exitDone: 'my-done-exit',\n   * }}\n   * ```\n   *\n   * If you want to set these classes using CSS Modules:\n   *\n   * ```js\n   * import styles from './styles.css';\n   * ```\n   *\n   * you might want to use camelCase in your CSS file, that way could simply spread\n   * them instead of listing them one by one:\n   *\n   * ```js\n   * classNames={{ ...styles }}\n   * ```\n   *\n   * @type {string | {\n   *  appear?: string,\n   *  appearActive?: string,\n   *  enter?: string,\n   *  enterActive?: string,\n   *  enterDone?: string,\n   *  exit?: string,\n   *  exitActive?: string,\n   *  exitDone?: string,\n   * }}\n   */\n  classNames: _PropTypes.classNamesShape,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is\n   * applied.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter-active' or\n   * 'appear-active' class is applied.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter' or\n   * 'appear' classes are **removed** and the `done` class is added to the DOM node.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit' class is\n   * applied.\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit-active' is applied.\n   *\n   * @type Function(node: HtmlElement\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit' classes\n   * are **removed** and the `exit-done` class is added to the DOM node.\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExited: PropTypes.func\n});\n\n/**\n * A `Transition` component using CSS transitions and animations.\n * It's inspired by the excellent [ng-animate](http://www.nganimate.org/) library.\n *\n * `CSSTransition` applies a pair of class names during the `appear`, `enter`,\n * and `exit` stages of the transition. The first class is applied and then a\n * second \"active\" class in order to activate the css animation. After the animation,\n * matching `done` class names are applied to persist the animation state.\n *\n * When the `in` prop is toggled to `true` the Component will get\n * the `example-enter` CSS class and the `example-enter-active` CSS class\n * added in the next tick. This is a convention based on the `classNames` prop.\n *\n * ## Example\n *\n * <iframe src=\"https://codesandbox.io/embed/m77l2vp00x?fontsize=14\" style=\"width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;\" sandbox=\"allow-modals allow-forms allow-popups allow-scripts allow-same-origin\"></iframe>\n */\n\nvar CSSTransition = function (_React$Component) {\n  _inherits(CSSTransition, _React$Component);\n\n  function CSSTransition() {\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, CSSTransition);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.onEnter = function (node, appearing) {\n      var _this$getClassNames = _this.getClassNames(appearing ? 'appear' : 'enter'),\n          className = _this$getClassNames.className;\n\n      _this.removeClasses(node, 'exit');\n      addClass(node, className);\n\n      if (_this.props.onEnter) {\n        _this.props.onEnter(node);\n      }\n    }, _this.onEntering = function (node, appearing) {\n      var _this$getClassNames2 = _this.getClassNames(appearing ? 'appear' : 'enter'),\n          activeClassName = _this$getClassNames2.activeClassName;\n\n      _this.reflowAndAddClass(node, activeClassName);\n\n      if (_this.props.onEntering) {\n        _this.props.onEntering(node);\n      }\n    }, _this.onEntered = function (node, appearing) {\n      var _this$getClassNames3 = _this.getClassNames('enter'),\n          doneClassName = _this$getClassNames3.doneClassName;\n\n      _this.removeClasses(node, appearing ? 'appear' : 'enter');\n      addClass(node, doneClassName);\n\n      if (_this.props.onEntered) {\n        _this.props.onEntered(node);\n      }\n    }, _this.onExit = function (node) {\n      var _this$getClassNames4 = _this.getClassNames('exit'),\n          className = _this$getClassNames4.className;\n\n      _this.removeClasses(node, 'appear');\n      _this.removeClasses(node, 'enter');\n      addClass(node, className);\n\n      if (_this.props.onExit) {\n        _this.props.onExit(node);\n      }\n    }, _this.onExiting = function (node) {\n      var _this$getClassNames5 = _this.getClassNames('exit'),\n          activeClassName = _this$getClassNames5.activeClassName;\n\n      _this.reflowAndAddClass(node, activeClassName);\n\n      if (_this.props.onExiting) {\n        _this.props.onExiting(node);\n      }\n    }, _this.onExited = function (node) {\n      var _this$getClassNames6 = _this.getClassNames('exit'),\n          doneClassName = _this$getClassNames6.doneClassName;\n\n      _this.removeClasses(node, 'exit');\n      addClass(node, doneClassName);\n\n      if (_this.props.onExited) {\n        _this.props.onExited(node);\n      }\n    }, _this.getClassNames = function (type) {\n      var classNames = _this.props.classNames;\n\n\n      var className = typeof classNames !== 'string' ? classNames[type] : classNames + '-' + type;\n\n      var activeClassName = typeof classNames !== 'string' ? classNames[type + 'Active'] : className + '-active';\n\n      var doneClassName = typeof classNames !== 'string' ? classNames[type + 'Done'] : className + '-done';\n\n      return {\n        className: className,\n        activeClassName: activeClassName,\n        doneClassName: doneClassName\n      };\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  CSSTransition.prototype.removeClasses = function removeClasses(node, type) {\n    var _getClassNames = this.getClassNames(type),\n        className = _getClassNames.className,\n        activeClassName = _getClassNames.activeClassName,\n        doneClassName = _getClassNames.doneClassName;\n\n    className && removeClass(node, className);\n    activeClassName && removeClass(node, activeClassName);\n    doneClassName && removeClass(node, doneClassName);\n  };\n\n  CSSTransition.prototype.reflowAndAddClass = function reflowAndAddClass(node, className) {\n    // This is for to force a repaint,\n    // which is necessary in order to transition styles when adding a class name.\n    if (className) {\n      /* eslint-disable no-unused-expressions */\n      node && node.scrollTop;\n      /* eslint-enable no-unused-expressions */\n      addClass(node, className);\n    }\n  };\n\n  CSSTransition.prototype.render = function render() {\n    var props = _extends({}, this.props);\n\n    delete props.classNames;\n\n    return _react2.default.createElement(_Transition2.default, _extends({}, props, {\n      onEnter: this.onEnter,\n      onEntered: this.onEntered,\n      onEntering: this.onEntering,\n      onExit: this.onExit,\n      onExiting: this.onExiting,\n      onExited: this.onExited\n    }));\n  };\n\n  return CSSTransition;\n}(_react2.default.Component);\n\nCSSTransition.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\n\nexports.default = CSSTransition;\nmodule.exports = exports['default'];","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim\n  };\n\n  ReactPropTypes.checkPropTypes = emptyFunction;\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = addClass;\n\nvar _hasClass = require('./hasClass');\n\nvar _hasClass2 = _interopRequireDefault(_hasClass);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction addClass(element, className) {\n  if (element.classList) element.classList.add(className);else if (!(0, _hasClass2.default)(element, className)) if (typeof element.className === 'string') element.className = element.className + ' ' + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + ' ' + className);\n}\nmodule.exports = exports['default'];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = hasClass;\nfunction hasClass(element, className) {\n  if (element.classList) return !!className && element.classList.contains(className);else return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}\nmodule.exports = exports[\"default\"];","'use strict';\n\nfunction replaceClassName(origClass, classToRemove) {\n  return origClass.replace(new RegExp('(^|\\\\s)' + classToRemove + '(?:\\\\s|$)', 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n\nmodule.exports = function removeClass(element, className) {\n  if (element.classList) element.classList.remove(className);else if (typeof element.className === 'string') element.className = replaceClassName(element.className, className);else element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n};","'use strict';\n\nexports.__esModule = true;\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _TransitionGroup = require('./TransitionGroup');\n\nvar _TransitionGroup2 = _interopRequireDefault(_TransitionGroup);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar propTypes = {\n  in: _propTypes2.default.bool.isRequired,\n  children: function children(props, propName) {\n    if (_react2.default.Children.count(props[propName]) !== 2) return new Error('\"' + propName + '\" must be exactly two transition components.');\n\n    return null;\n  }\n};\n\n/**\n * The `<ReplaceTransition>` component is a specialized `Transition` component\n * that animates between two children.\n *\n * ```jsx\n * <ReplaceTransition in>\n *   <Fade><div>I appear first</div></Fade>\n *   <Fade><div>I replace the above</div></Fade>\n * </ReplaceTransition>\n * ```\n */\n\nvar ReplaceTransition = function (_React$Component) {\n  _inherits(ReplaceTransition, _React$Component);\n\n  function ReplaceTransition() {\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, ReplaceTransition);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _initialiseProps.call(_this), _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  ReplaceTransition.prototype.handleLifecycle = function handleLifecycle(handler, idx, originalArgs) {\n    var _child$props;\n\n    var children = this.props.children;\n\n    var child = _react2.default.Children.toArray(children)[idx];\n\n    if (child.props[handler]) (_child$props = child.props)[handler].apply(_child$props, originalArgs);\n    if (this.props[handler]) this.props[handler]((0, _reactDom.findDOMNode)(this));\n  };\n\n  ReplaceTransition.prototype.render = function render() {\n    var _props = this.props,\n        children = _props.children,\n        inProp = _props.in,\n        props = _objectWithoutProperties(_props, ['children', 'in']);\n\n    var _React$Children$toArr = _react2.default.Children.toArray(children),\n        first = _React$Children$toArr[0],\n        second = _React$Children$toArr[1];\n\n    delete props.onEnter;\n    delete props.onEntering;\n    delete props.onEntered;\n    delete props.onExit;\n    delete props.onExiting;\n    delete props.onExited;\n\n    return _react2.default.createElement(\n      _TransitionGroup2.default,\n      props,\n      inProp ? _react2.default.cloneElement(first, {\n        key: 'first',\n        onEnter: this.handleEnter,\n        onEntering: this.handleEntering,\n        onEntered: this.handleEntered\n\n      }) : _react2.default.cloneElement(second, {\n        key: 'second',\n        onEnter: this.handleExit,\n        onEntering: this.handleExiting,\n        onEntered: this.handleExited\n      })\n    );\n  };\n\n  return ReplaceTransition;\n}(_react2.default.Component);\n\nvar _initialiseProps = function _initialiseProps() {\n  var _this2 = this;\n\n  this.handleEnter = function () {\n    for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    return _this2.handleLifecycle('onEnter', 0, args);\n  };\n\n  this.handleEntering = function () {\n    for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n\n    return _this2.handleLifecycle('onEntering', 0, args);\n  };\n\n  this.handleEntered = function () {\n    for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n\n    return _this2.handleLifecycle('onEntered', 0, args);\n  };\n\n  this.handleExit = function () {\n    for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n      args[_key5] = arguments[_key5];\n    }\n\n    return _this2.handleLifecycle('onExit', 1, args);\n  };\n\n  this.handleExiting = function () {\n    for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n      args[_key6] = arguments[_key6];\n    }\n\n    return _this2.handleLifecycle('onExiting', 1, args);\n  };\n\n  this.handleExited = function () {\n    for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n      args[_key7] = arguments[_key7];\n    }\n\n    return _this2.handleLifecycle('onExited', 1, args);\n  };\n};\n\nReplaceTransition.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\n\nexports.default = ReplaceTransition;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\nexports.getChildMapping = getChildMapping;\nexports.mergeChildMappings = mergeChildMappings;\nexports.getInitialChildMapping = getInitialChildMapping;\nexports.getNextChildMapping = getNextChildMapping;\n\nvar _react = require('react');\n\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\nfunction getChildMapping(children, mapFn) {\n  var mapper = function mapper(child) {\n    return mapFn && (0, _react.isValidElement)(child) ? mapFn(child) : child;\n  };\n\n  var result = Object.create(null);\n  if (children) _react.Children.map(children, function (c) {\n    return c;\n  }).forEach(function (child) {\n    // run the map function here instead so that the key is the computed one\n    result[child.key] = mapper(child);\n  });\n  return result;\n}\n\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\nfunction mergeChildMappings(prev, next) {\n  prev = prev || {};\n  next = next || {};\n\n  function getValueForKey(key) {\n    return key in next ? next[key] : prev[key];\n  }\n\n  // For each key of `next`, the list of keys to insert before that key in\n  // the combined list\n  var nextKeysPending = Object.create(null);\n\n  var pendingKeys = [];\n  for (var prevKey in prev) {\n    if (prevKey in next) {\n      if (pendingKeys.length) {\n        nextKeysPending[prevKey] = pendingKeys;\n        pendingKeys = [];\n      }\n    } else {\n      pendingKeys.push(prevKey);\n    }\n  }\n\n  var i = void 0;\n  var childMapping = {};\n  for (var nextKey in next) {\n    if (nextKeysPending[nextKey]) {\n      for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n        var pendingNextKey = nextKeysPending[nextKey][i];\n        childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n      }\n    }\n    childMapping[nextKey] = getValueForKey(nextKey);\n  }\n\n  // Finally, add the keys which didn't appear before any key in `next`\n  for (i = 0; i < pendingKeys.length; i++) {\n    childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n  }\n\n  return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n  return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nfunction getInitialChildMapping(props, onExited) {\n  return getChildMapping(props.children, function (child) {\n    return (0, _react.cloneElement)(child, {\n      onExited: onExited.bind(null, child),\n      in: true,\n      appear: getProp(child, 'appear', props),\n      enter: getProp(child, 'enter', props),\n      exit: getProp(child, 'exit', props)\n    });\n  });\n}\n\nfunction getNextChildMapping(nextProps, prevChildMapping, onExited) {\n  var nextChildMapping = getChildMapping(nextProps.children);\n  var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n\n  Object.keys(children).forEach(function (key) {\n    var child = children[key];\n\n    if (!(0, _react.isValidElement)(child)) return;\n\n    var hasPrev = key in prevChildMapping;\n    var hasNext = key in nextChildMapping;\n\n    var prevChild = prevChildMapping[key];\n    var isLeaving = (0, _react.isValidElement)(prevChild) && !prevChild.props.in;\n\n    // item is new (entering)\n    if (hasNext && (!hasPrev || isLeaving)) {\n      // console.log('entering', key)\n      children[key] = (0, _react.cloneElement)(child, {\n        onExited: onExited.bind(null, child),\n        in: true,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    } else if (!hasNext && hasPrev && !isLeaving) {\n      // item is old (exiting)\n      // console.log('leaving', key)\n      children[key] = (0, _react.cloneElement)(child, { in: false });\n    } else if (hasNext && hasPrev && (0, _react.isValidElement)(prevChild)) {\n      // item hasn't changed transition states\n      // copy over the last transition props;\n      // console.log('unchanged', key)\n      children[key] = (0, _react.cloneElement)(child, {\n        onExited: onExited.bind(null, child),\n        in: prevChild.props.in,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    }\n  });\n\n  return children;\n}","var getPrototypeOf = require(\"./getPrototypeOf\");\n\nfunction _superPropBase(object, property) {\n  while (!Object.prototype.hasOwnProperty.call(object, property)) {\n    object = getPrototypeOf(object);\n    if (object === null) break;\n  }\n\n  return object;\n}\n\nmodule.exports = _superPropBase;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _reactDom = require('react-dom');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NodeResolver = function (_Component) {\n  _inherits(NodeResolver, _Component);\n\n  function NodeResolver() {\n    _classCallCheck(this, NodeResolver);\n\n    return _possibleConstructorReturn(this, (NodeResolver.__proto__ || Object.getPrototypeOf(NodeResolver)).apply(this, arguments));\n  }\n\n  _createClass(NodeResolver, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.props.innerRef((0, _reactDom.findDOMNode)(this));\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.props.innerRef(null);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return this.props.children;\n    }\n  }]);\n\n  return NodeResolver;\n}(_react.Component);\n\nexports.default = NodeResolver;","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/symbol/iterator\"), __esModule: true };","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","module.exports = function () { /* empty */ };\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/symbol\"), __esModule: true };","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f = $propertyIsEnumerable;\n  require('./_object-gops').f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !require('./_library')) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","module.exports = { \"default\": require(\"core-js/library/fn/object/set-prototype-of\"), __esModule: true };","require('../../modules/es6.object.set-prototype-of');\nmodule.exports = require('../../modules/_core').Object.setPrototypeOf;\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/object/create\"), __esModule: true };","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n  return $Object.create(P, D);\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _gud = require('gud');\n\nvar _gud2 = _interopRequireDefault(_gud);\n\nvar _warning = require('fbjs/lib/warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\n\n// Inlined Object.is polyfill.\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\nfunction objectIs(x, y) {\n  if (x === y) {\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\n\nfunction createEventEmitter(value) {\n  var handlers = [];\n  return {\n    on: function on(handler) {\n      handlers.push(handler);\n    },\n    off: function off(handler) {\n      handlers = handlers.filter(function (h) {\n        return h !== handler;\n      });\n    },\n    get: function get() {\n      return value;\n    },\n    set: function set(newValue, changedBits) {\n      value = newValue;\n      handlers.forEach(function (handler) {\n        return handler(value, changedBits);\n      });\n    }\n  };\n}\n\nfunction onlyChild(children) {\n  return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n  var _Provider$childContex, _Consumer$contextType;\n\n  var contextProp = '__create-react-context-' + (0, _gud2.default)() + '__';\n\n  var Provider = function (_Component) {\n    _inherits(Provider, _Component);\n\n    function Provider() {\n      var _temp, _this, _ret;\n\n      _classCallCheck(this, Provider);\n\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.emitter = createEventEmitter(_this.props.value), _temp), _possibleConstructorReturn(_this, _ret);\n    }\n\n    Provider.prototype.getChildContext = function getChildContext() {\n      var _ref;\n\n      return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n    };\n\n    Provider.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      if (this.props.value !== nextProps.value) {\n        var oldValue = this.props.value;\n        var newValue = nextProps.value;\n        var changedBits = void 0;\n\n        if (objectIs(oldValue, newValue)) {\n          changedBits = 0; // No change\n        } else {\n          changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n          if (process.env.NODE_ENV !== 'production') {\n            (0, _warning2.default)((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: %s', changedBits);\n          }\n\n          changedBits |= 0;\n\n          if (changedBits !== 0) {\n            this.emitter.set(nextProps.value, changedBits);\n          }\n        }\n      }\n    };\n\n    Provider.prototype.render = function render() {\n      return this.props.children;\n    };\n\n    return Provider;\n  }(_react.Component);\n\n  Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = _propTypes2.default.object.isRequired, _Provider$childContex);\n\n  var Consumer = function (_Component2) {\n    _inherits(Consumer, _Component2);\n\n    function Consumer() {\n      var _temp2, _this2, _ret2;\n\n      _classCallCheck(this, Consumer);\n\n      for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return _ret2 = (_temp2 = (_this2 = _possibleConstructorReturn(this, _Component2.call.apply(_Component2, [this].concat(args))), _this2), _this2.state = {\n        value: _this2.getValue()\n      }, _this2.onUpdate = function (newValue, changedBits) {\n        var observedBits = _this2.observedBits | 0;\n        if ((observedBits & changedBits) !== 0) {\n          _this2.setState({ value: _this2.getValue() });\n        }\n      }, _temp2), _possibleConstructorReturn(_this2, _ret2);\n    }\n\n    Consumer.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      var observedBits = nextProps.observedBits;\n\n      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default\n      : observedBits;\n    };\n\n    Consumer.prototype.componentDidMount = function componentDidMount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].on(this.onUpdate);\n      }\n      var observedBits = this.props.observedBits;\n\n      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default\n      : observedBits;\n    };\n\n    Consumer.prototype.componentWillUnmount = function componentWillUnmount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].off(this.onUpdate);\n      }\n    };\n\n    Consumer.prototype.getValue = function getValue() {\n      if (this.context[contextProp]) {\n        return this.context[contextProp].get();\n      } else {\n        return defaultValue;\n      }\n    };\n\n    Consumer.prototype.render = function render() {\n      return onlyChild(this.props.children)(this.state.value);\n    };\n\n    return Consumer;\n  }(_react.Component);\n\n  Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = _propTypes2.default.object, _Consumer$contextType);\n\n\n  return {\n    Provider: Provider,\n    Consumer: Consumer\n  };\n}\n\nexports.default = createReactContext;\nmodule.exports = exports['default'];","// @flow\n'use strict';\n\nvar key = '__global_unique_id__';\n\nmodule.exports = function() {\n  return global[key] = (global[key] || 0) + 1;\n};\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (process.env.NODE_ENV !== 'production') {\n  var printWarning = function printWarning(format) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    var argIndex = 0;\n    var message = 'Warning: ' + format.replace(/%s/g, function () {\n      return args[argIndex++];\n    });\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n\n  warning = function warning(condition, format) {\n    if (format === undefined) {\n      throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n    }\n\n    if (format.indexOf('Failed Composite propType: ') === 0) {\n      return; // Ignore CompositeComponent proptype check.\n    }\n\n    if (!condition) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n        args[_key2 - 2] = arguments[_key2];\n      }\n\n      printWarning.apply(undefined, [format].concat(args));\n    }\n  };\n}\n\nmodule.exports = warning;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar React = _interopRequireWildcard(_react);\n\nvar _defaultComponentDecorator = require('../decorators/defaultComponentDecorator');\n\nvar _defaultComponentDecorator2 = _interopRequireDefault(_defaultComponentDecorator);\n\nvar _defaultHrefDecorator = require('../decorators/defaultHrefDecorator');\n\nvar _defaultHrefDecorator2 = _interopRequireDefault(_defaultHrefDecorator);\n\nvar _defaultMatchDecorator = require('../decorators/defaultMatchDecorator');\n\nvar _defaultMatchDecorator2 = _interopRequireDefault(_defaultMatchDecorator);\n\nvar _defaultTextDecorator = require('../decorators/defaultTextDecorator');\n\nvar _defaultTextDecorator2 = _interopRequireDefault(_defaultTextDecorator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Linkify = function (_React$Component) {\n  _inherits(Linkify, _React$Component);\n\n  function Linkify() {\n    _classCallCheck(this, Linkify);\n\n    return _possibleConstructorReturn(this, (Linkify.__proto__ || Object.getPrototypeOf(Linkify)).apply(this, arguments));\n  }\n\n  _createClass(Linkify, [{\n    key: 'parseString',\n    value: function parseString(string) {\n      var _this2 = this;\n\n      if (string === '') {\n        return string;\n      }\n\n      var matches = this.props.matchDecorator(string);\n      if (!matches) {\n        return string;\n      }\n\n      var elements = [];\n      var lastIndex = 0;\n      matches.forEach(function (match, i) {\n        // Push preceding text if there is any\n        if (match.index > lastIndex) {\n          elements.push(string.substring(lastIndex, match.index));\n        }\n\n        var decoratedHref = _this2.props.hrefDecorator(match.url);\n        var decoratedText = _this2.props.textDecorator(match.text);\n        var decoratedComponent = _this2.props.componentDecorator(decoratedHref, decoratedText, i);\n        elements.push(decoratedComponent);\n\n        lastIndex = match.lastIndex;\n      });\n\n      // Push remaining text if there is any\n      if (string.length > lastIndex) {\n        elements.push(string.substring(lastIndex));\n      }\n\n      return elements.length === 1 ? elements[0] : elements;\n    }\n  }, {\n    key: 'parse',\n    value: function parse(children) {\n      var _this3 = this;\n\n      var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      if (typeof children === 'string') {\n        return this.parseString(children);\n      } else if (React.isValidElement(children) && children.type !== 'a' && children.type !== 'button') {\n        return React.cloneElement(children, { key: key }, this.parse(children.props.children));\n      } else if (Array.isArray(children)) {\n        return children.map(function (child, i) {\n          return _this3.parse(child, i);\n        });\n      }\n\n      return children;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return React.createElement(\n        React.Fragment,\n        null,\n        this.parse(this.props.children)\n      );\n    }\n  }]);\n\n  return Linkify;\n}(React.Component);\n\nLinkify.defaultProps = {\n  componentDecorator: _defaultComponentDecorator2.default,\n  hrefDecorator: _defaultHrefDecorator2.default,\n  matchDecorator: _defaultMatchDecorator2.default,\n  textDecorator: _defaultTextDecorator2.default\n};\nexports.default = Linkify;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar React = _interopRequireWildcard(_react);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nexports.default = function (decoratedHref, decoratedText, key) {\n  return React.createElement(\n    'a',\n    { href: decoratedHref, key: key },\n    decoratedText\n  );\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (href) {\n  return href;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _linkifyIt = require('linkify-it');\n\nvar _linkifyIt2 = _interopRequireDefault(_linkifyIt);\n\nvar _tlds = require('tlds');\n\nvar _tlds2 = _interopRequireDefault(_tlds);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar linkify = new _linkifyIt2.default();\nlinkify.tlds(_tlds2.default);\n\nexports.default = function (text) {\n  return linkify.match(text);\n};","'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n\n  sources.forEach(function (source) {\n    if (!source) { return; }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n\n  return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n  fuzzyLink: true,\n  fuzzyEmail: true,\n  fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n  return Object.keys(obj || {}).reduce(function (acc, k) {\n    return acc || defaultOptions.hasOwnProperty(k);\n  }, false);\n}\n\n\nvar defaultSchemas = {\n  'http:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.http) {\n        // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.http =  new RegExp(\n          '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n        );\n      }\n      if (self.re.http.test(tail)) {\n        return tail.match(self.re.http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'https:':  'http:',\n  'ftp:':    'http:',\n  '//':      {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.no_http) {\n      // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.no_http =  new RegExp(\n          '^' +\n          self.re.src_auth +\n          // Don't allow single-level domains, because of false positives like '//test'\n          // with code comments\n          '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n          self.re.src_port +\n          self.re.src_host_terminator +\n          self.re.src_path,\n\n          'i'\n        );\n      }\n\n      if (self.re.no_http.test(tail)) {\n        // should not be `://` & `///`, that protects from errors in protocol name\n        if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n        if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n        return tail.match(self.re.no_http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'mailto:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.mailto) {\n        self.re.mailto =  new RegExp(\n          '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n        );\n      }\n      if (self.re.mailto.test(tail)) {\n        return tail.match(self.re.mailto)[0].length;\n      }\n      return 0;\n    }\n  }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n  self.__index__ = -1;\n  self.__text_cache__   = '';\n}\n\nfunction createValidator(re) {\n  return function (text, pos) {\n    var tail = text.slice(pos);\n\n    if (re.test(tail)) {\n      return tail.match(re)[0].length;\n    }\n    return 0;\n  };\n}\n\nfunction createNormalizer() {\n  return function (match, self) {\n    self.normalize(match);\n  };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n  // Load & clone RE patterns.\n  var re = self.re = require('./lib/re')(self.__opts__);\n\n  // Define dynamic patterns\n  var tlds = self.__tlds__.slice();\n\n  self.onCompile();\n\n  if (!self.__tlds_replaced__) {\n    tlds.push(tlds_2ch_src_re);\n  }\n  tlds.push(re.src_xn);\n\n  re.src_tlds = tlds.join('|');\n\n  function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n  re.email_fuzzy      = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n  re.link_fuzzy       = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n  re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n  re.host_fuzzy_test  = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n  //\n  // Compile each schema\n  //\n\n  var aliases = [];\n\n  self.__compiled__ = {}; // Reset compiled data\n\n  function schemaError(name, val) {\n    throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n  }\n\n  Object.keys(self.__schemas__).forEach(function (name) {\n    var val = self.__schemas__[name];\n\n    // skip disabled methods\n    if (val === null) { return; }\n\n    var compiled = { validate: null, link: null };\n\n    self.__compiled__[name] = compiled;\n\n    if (isObject(val)) {\n      if (isRegExp(val.validate)) {\n        compiled.validate = createValidator(val.validate);\n      } else if (isFunction(val.validate)) {\n        compiled.validate = val.validate;\n      } else {\n        schemaError(name, val);\n      }\n\n      if (isFunction(val.normalize)) {\n        compiled.normalize = val.normalize;\n      } else if (!val.normalize) {\n        compiled.normalize = createNormalizer();\n      } else {\n        schemaError(name, val);\n      }\n\n      return;\n    }\n\n    if (isString(val)) {\n      aliases.push(name);\n      return;\n    }\n\n    schemaError(name, val);\n  });\n\n  //\n  // Compile postponed aliases\n  //\n\n  aliases.forEach(function (alias) {\n    if (!self.__compiled__[self.__schemas__[alias]]) {\n      // Silently fail on missed schemas to avoid errons on disable.\n      // schemaError(alias, self.__schemas__[alias]);\n      return;\n    }\n\n    self.__compiled__[alias].validate =\n      self.__compiled__[self.__schemas__[alias]].validate;\n    self.__compiled__[alias].normalize =\n      self.__compiled__[self.__schemas__[alias]].normalize;\n  });\n\n  //\n  // Fake record for guessed links\n  //\n  self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n  //\n  // Build schema condition\n  //\n  var slist = Object.keys(self.__compiled__)\n                      .filter(function (name) {\n                        // Filter disabled & fake schemas\n                        return name.length > 0 && self.__compiled__[name];\n                      })\n                      .map(escapeRE)\n                      .join('|');\n  // (?!_) cause 1.5x slowdown\n  self.re.schema_test   = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n  self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n\n  self.re.pretest = RegExp(\n    '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n    'i'\n  );\n\n  //\n  // Cleanup\n  //\n\n  resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n  var start = self.__index__,\n      end   = self.__last_index__,\n      text  = self.__text_cache__.slice(start, end);\n\n  /**\n   * Match#schema -> String\n   *\n   * Prefix (protocol) for matched string.\n   **/\n  this.schema    = self.__schema__.toLowerCase();\n  /**\n   * Match#index -> Number\n   *\n   * First position of matched string.\n   **/\n  this.index     = start + shift;\n  /**\n   * Match#lastIndex -> Number\n   *\n   * Next position after matched string.\n   **/\n  this.lastIndex = end + shift;\n  /**\n   * Match#raw -> String\n   *\n   * Matched string.\n   **/\n  this.raw       = text;\n  /**\n   * Match#text -> String\n   *\n   * Notmalized text of matched string.\n   **/\n  this.text      = text;\n  /**\n   * Match#url -> String\n   *\n   * Normalized url of matched string.\n   **/\n  this.url       = text;\n}\n\nfunction createMatch(self, shift) {\n  var match = new Match(self, shift);\n\n  self.__compiled__[match.schema].normalize(match, self);\n\n  return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n *   for example). `linkify-it` makes shure that prefix is not preceeded with\n *   alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n *   - _String_ - just alias to existing rule\n *   - _Object_\n *     - _validate_ - validator function (should return matched length on success),\n *       or `RegExp`.\n *     - _normalize_ - optional function to normalize text & url of matched result\n *       (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n *   like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n  if (!(this instanceof LinkifyIt)) {\n    return new LinkifyIt(schemas, options);\n  }\n\n  if (!options) {\n    if (isOptionsObj(schemas)) {\n      options = schemas;\n      schemas = {};\n    }\n  }\n\n  this.__opts__           = assign({}, defaultOptions, options);\n\n  // Cache last tested result. Used to skip repeating steps on next `match` call.\n  this.__index__          = -1;\n  this.__last_index__     = -1; // Next scan position\n  this.__schema__         = '';\n  this.__text_cache__     = '';\n\n  this.__schemas__        = assign({}, defaultSchemas, schemas);\n  this.__compiled__       = {};\n\n  this.__tlds__           = tlds_default;\n  this.__tlds_replaced__  = false;\n\n  this.re = {};\n\n  compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n  this.__schemas__[schema] = definition;\n  compile(this);\n  return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n  this.__opts__ = assign(this.__opts__, options);\n  return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n  // Reset scan cache\n  this.__text_cache__ = text;\n  this.__index__      = -1;\n\n  if (!text.length) { return false; }\n\n  var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n  // try to scan for link with schema - that's the most simple rule\n  if (this.re.schema_test.test(text)) {\n    re = this.re.schema_search;\n    re.lastIndex = 0;\n    while ((m = re.exec(text)) !== null) {\n      len = this.testSchemaAt(text, m[2], re.lastIndex);\n      if (len) {\n        this.__schema__     = m[2];\n        this.__index__      = m.index + m[1].length;\n        this.__last_index__ = m.index + m[0].length + len;\n        break;\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n    // guess schemaless links\n    tld_pos = text.search(this.re.host_fuzzy_test);\n    if (tld_pos >= 0) {\n      // if tld is located after found link - no need to check fuzzy pattern\n      if (this.__index__ < 0 || tld_pos < this.__index__) {\n        if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n          shift = ml.index + ml[1].length;\n\n          if (this.__index__ < 0 || shift < this.__index__) {\n            this.__schema__     = '';\n            this.__index__      = shift;\n            this.__last_index__ = ml.index + ml[0].length;\n          }\n        }\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n    // guess schemaless emails\n    at_pos = text.indexOf('@');\n    if (at_pos >= 0) {\n      // We can't skip this check, because this cases are possible:\n      // 192.168.1.1@gmail.com, my.in@example.com\n      if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n        shift = me.index + me[1].length;\n        next  = me.index + me[0].length;\n\n        if (this.__index__ < 0 || shift < this.__index__ ||\n            (shift === this.__index__ && next > this.__last_index__)) {\n          this.__schema__     = 'mailto:';\n          this.__index__      = shift;\n          this.__last_index__ = next;\n        }\n      }\n    }\n  }\n\n  return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n  return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n  // If not supported schema check requested - terminate\n  if (!this.__compiled__[schema.toLowerCase()]) {\n    return 0;\n  }\n  return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n *   protocol-neutral  links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n  var shift = 0, result = [];\n\n  // Try to take previous element from cache, if .test() called before\n  if (this.__index__ >= 0 && this.__text_cache__ === text) {\n    result.push(createMatch(this, shift));\n    shift = this.__last_index__;\n  }\n\n  // Cut head if cache was used\n  var tail = shift ? text.slice(shift) : text;\n\n  // Scan string until end reached\n  while (this.test(tail)) {\n    result.push(createMatch(this, shift));\n\n    tail = tail.slice(this.__last_index__);\n    shift += this.__last_index__;\n  }\n\n  if (result.length) {\n    return result;\n  }\n\n  return null;\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n *   are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n  list = Array.isArray(list) ? list : [ list ];\n\n  if (!keepOld) {\n    this.__tlds__ = list.slice();\n    this.__tlds_replaced__ = true;\n    compile(this);\n    return this;\n  }\n\n  this.__tlds__ = this.__tlds__.concat(list)\n                                  .sort()\n                                  .filter(function (el, idx, arr) {\n                                    return el !== arr[idx - 1];\n                                  })\n                                  .reverse();\n\n  compile(this);\n  return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n  // Do minimal possible changes by default. Need to collect feedback prior\n  // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n  if (!match.schema) { match.url = 'http://' + match.url; }\n\n  if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n    match.url = 'mailto:' + match.url;\n  }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n","'use strict';\n\n\nmodule.exports = function (opts) {\n  var re = {};\n\n  // Use direct extract instead of `regenerate` to reduse browserified size\n  re.src_Any = require('uc.micro/properties/Any/regex').source;\n  re.src_Cc  = require('uc.micro/categories/Cc/regex').source;\n  re.src_Z   = require('uc.micro/categories/Z/regex').source;\n  re.src_P   = require('uc.micro/categories/P/regex').source;\n\n  // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n  re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n  // \\p{\\Z\\Cc} (white spaces + control)\n  re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n  // Experimental. List of chars, completely prohibited in links\n  // because can separate it from other part of text\n  var text_separators = '[><\\uff5c]';\n\n  // All possible word characters (everything without punctuation, spaces & controls)\n  // Defined via punctuation & spaces to save space\n  // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n  re.src_pseudo_letter       = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n  // The same as abothe but without [0-9]\n  // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n  ////////////////////////////////////////////////////////////////////////////////\n\n  re.src_ip4 =\n\n    '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n  // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n  re.src_auth    = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n  re.src_port =\n\n    '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n  re.src_host_terminator =\n\n    '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n  re.src_path =\n\n    '(?:' +\n      '[/?#]' +\n        '(?:' +\n          '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-]).|' +\n          '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n          '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n          '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n          '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n          \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n          \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' +  // allow `I'm_king` if no pair found\n          '\\\\.{2,4}[a-zA-Z0-9%/]|' + // github has ... in commit range links,\n                                     // google has .... in links (issue #66)\n                                     // Restrict to\n                                     // - english\n                                     // - percent-encoded\n                                     // - parts of file path\n                                     // until more examples found.\n          '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n          (opts && opts['---'] ?\n            '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n            :\n            '\\\\-+|'\n          ) +\n          '\\\\,(?!' + re.src_ZCc + ').|' +      // allow `,,,` in paths\n          '\\\\!(?!' + re.src_ZCc + '|[!]).|' +\n          '\\\\?(?!' + re.src_ZCc + '|[?]).' +\n        ')+' +\n      '|\\\\/' +\n    ')?';\n\n  // Allow anything in markdown spec, forbid quote (\") at the first position\n  // because emails enclosed in quotes are far more common\n  re.src_email_name =\n\n    '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n  re.src_xn =\n\n    'xn--[a-z0-9\\\\-]{1,59}';\n\n  // More to read about domain names\n  // http://serverfault.com/questions/638260/\n\n  re.src_domain_root =\n\n    // Allow letters & digits (http://test1)\n    '(?:' +\n      re.src_xn +\n      '|' +\n      re.src_pseudo_letter + '{1,63}' +\n    ')';\n\n  re.src_domain =\n\n    '(?:' +\n      re.src_xn +\n      '|' +\n      '(?:' + re.src_pseudo_letter + ')' +\n      '|' +\n      '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n    ')';\n\n  re.src_host =\n\n    '(?:' +\n    // Don't need IP check, because digits are already allowed in normal domain names\n    //   src_ip4 +\n    // '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n    ')';\n\n  re.tpl_host_fuzzy =\n\n    '(?:' +\n      re.src_ip4 +\n    '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n    ')';\n\n  re.tpl_host_no_ip_fuzzy =\n\n    '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n  re.src_host_strict =\n\n    re.src_host + re.src_host_terminator;\n\n  re.tpl_host_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_host_terminator;\n\n  re.src_host_port_strict =\n\n    re.src_host + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_no_ip_fuzzy_strict =\n\n    re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Main rules\n\n  // Rude test fuzzy links by host, for quick deny\n  re.tpl_host_fuzzy_test =\n\n    'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n  re.tpl_email_fuzzy =\n\n      '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n      '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n  re.tpl_link_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n  re.tpl_link_no_ip_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n  return re;\n};\n","module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/","module.exports=/[\\0-\\x1F\\x7F-\\x9F]/","module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/","module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/","module.exports = [\n  \"aaa\",\n  \"aarp\",\n  \"abarth\",\n  \"abb\",\n  \"abbott\",\n  \"abbvie\",\n  \"abc\",\n  \"able\",\n  \"abogado\",\n  \"abudhabi\",\n  \"ac\",\n  \"academy\",\n  \"accenture\",\n  \"accountant\",\n  \"accountants\",\n  \"aco\",\n  \"active\",\n  \"actor\",\n  \"ad\",\n  \"adac\",\n  \"ads\",\n  \"adult\",\n  \"ae\",\n  \"aeg\",\n  \"aero\",\n  \"aetna\",\n  \"af\",\n  \"afamilycompany\",\n  \"afl\",\n  \"africa\",\n  \"ag\",\n  \"agakhan\",\n  \"agency\",\n  \"ai\",\n  \"aig\",\n  \"aigo\",\n  \"airbus\",\n  \"airforce\",\n  \"airtel\",\n  \"akdn\",\n  \"al\",\n  \"alfaromeo\",\n  \"alibaba\",\n  \"alipay\",\n  \"allfinanz\",\n  \"allstate\",\n  \"ally\",\n  \"alsace\",\n  \"alstom\",\n  \"am\",\n  \"americanexpress\",\n  \"americanfamily\",\n  \"amex\",\n  \"amfam\",\n  \"amica\",\n  \"amsterdam\",\n  \"analytics\",\n  \"android\",\n  \"anquan\",\n  \"anz\",\n  \"ao\",\n  \"aol\",\n  \"apartments\",\n  \"app\",\n  \"apple\",\n  \"aq\",\n  \"aquarelle\",\n  \"ar\",\n  \"arab\",\n  \"aramco\",\n  \"archi\",\n  \"army\",\n  \"arpa\",\n  \"art\",\n  \"arte\",\n  \"as\",\n  \"asda\",\n  \"asia\",\n  \"associates\",\n  \"at\",\n  \"athleta\",\n  \"attorney\",\n  \"au\",\n  \"auction\",\n  \"audi\",\n  \"audible\",\n  \"audio\",\n  \"auspost\",\n  \"author\",\n  \"auto\",\n  \"autos\",\n  \"avianca\",\n  \"aw\",\n  \"aws\",\n  \"ax\",\n  \"axa\",\n  \"az\",\n  \"azure\",\n  \"ba\",\n  \"baby\",\n  \"baidu\",\n  \"banamex\",\n  \"bananarepublic\",\n  \"band\",\n  \"bank\",\n  \"bar\",\n  \"barcelona\",\n  \"barclaycard\",\n  \"barclays\",\n  \"barefoot\",\n  \"bargains\",\n  \"baseball\",\n  \"basketball\",\n  \"bauhaus\",\n  \"bayern\",\n  \"bb\",\n  \"bbc\",\n  \"bbt\",\n  \"bbva\",\n  \"bcg\",\n  \"bcn\",\n  \"bd\",\n  \"be\",\n  \"beats\",\n  \"beauty\",\n  \"beer\",\n  \"bentley\",\n  \"berlin\",\n  \"best\",\n  \"bestbuy\",\n  \"bet\",\n  \"bf\",\n  \"bg\",\n  \"bh\",\n  \"bharti\",\n  \"bi\",\n  \"bible\",\n  \"bid\",\n  \"bike\",\n  \"bing\",\n  \"bingo\",\n  \"bio\",\n  \"biz\",\n  \"bj\",\n  \"black\",\n  \"blackfriday\",\n  \"blanco\",\n  \"blockbuster\",\n  \"blog\",\n  \"bloomberg\",\n  \"blue\",\n  \"bm\",\n  \"bms\",\n  \"bmw\",\n  \"bn\",\n  \"bnl\",\n  \"bnpparibas\",\n  \"bo\",\n  \"boats\",\n  \"boehringer\",\n  \"bofa\",\n  \"bom\",\n  \"bond\",\n  \"boo\",\n  \"book\",\n  \"booking\",\n  \"bosch\",\n  \"bostik\",\n  \"boston\",\n  \"bot\",\n  \"boutique\",\n  \"box\",\n  \"br\",\n  \"bradesco\",\n  \"bridgestone\",\n  \"broadway\",\n  \"broker\",\n  \"brother\",\n  \"brussels\",\n  \"bs\",\n  \"bt\",\n  \"budapest\",\n  \"bugatti\",\n  \"build\",\n  \"builders\",\n  \"business\",\n  \"buy\",\n  \"buzz\",\n  \"bv\",\n  \"bw\",\n  \"by\",\n  \"bz\",\n  \"bzh\",\n  \"ca\",\n  \"cab\",\n  \"cafe\",\n  \"cal\",\n  \"call\",\n  \"calvinklein\",\n  \"cam\",\n  \"camera\",\n  \"camp\",\n  \"cancerresearch\",\n  \"canon\",\n  \"capetown\",\n  \"capital\",\n  \"capitalone\",\n  \"car\",\n  \"caravan\",\n  \"cards\",\n  \"care\",\n  \"career\",\n  \"careers\",\n  \"cars\",\n  \"cartier\",\n  \"casa\",\n  \"case\",\n  \"caseih\",\n  \"cash\",\n  \"casino\",\n  \"cat\",\n  \"catering\",\n  \"catholic\",\n  \"cba\",\n  \"cbn\",\n  \"cbre\",\n  \"cbs\",\n  \"cc\",\n  \"cd\",\n  \"ceb\",\n  \"center\",\n  \"ceo\",\n  \"cern\",\n  \"cf\",\n  \"cfa\",\n  \"cfd\",\n  \"cg\",\n  \"ch\",\n  \"chanel\",\n  \"channel\",\n  \"chase\",\n  \"chat\",\n  \"cheap\",\n  \"chintai\",\n  \"christmas\",\n  \"chrome\",\n  \"chrysler\",\n  \"church\",\n  \"ci\",\n  \"cipriani\",\n  \"circle\",\n  \"cisco\",\n  \"citadel\",\n  \"citi\",\n  \"citic\",\n  \"city\",\n  \"cityeats\",\n  \"ck\",\n  \"cl\",\n  \"claims\",\n  \"cleaning\",\n  \"click\",\n  \"clinic\",\n  \"clinique\",\n  \"clothing\",\n  \"cloud\",\n  \"club\",\n  \"clubmed\",\n  \"cm\",\n  \"cn\",\n  \"co\",\n  \"coach\",\n  \"codes\",\n  \"coffee\",\n  \"college\",\n  \"cologne\",\n  \"com\",\n  \"comcast\",\n  \"commbank\",\n  \"community\",\n  \"company\",\n  \"compare\",\n  \"computer\",\n  \"comsec\",\n  \"condos\",\n  \"construction\",\n  \"consulting\",\n  \"contact\",\n  \"contractors\",\n  \"cooking\",\n  \"cookingchannel\",\n  \"cool\",\n  \"coop\",\n  \"corsica\",\n  \"country\",\n  \"coupon\",\n  \"coupons\",\n  \"courses\",\n  \"cr\",\n  \"credit\",\n  \"creditcard\",\n  \"creditunion\",\n  \"cricket\",\n  \"crown\",\n  \"crs\",\n  \"cruise\",\n  \"cruises\",\n  \"csc\",\n  \"cu\",\n  \"cuisinella\",\n  \"cv\",\n  \"cw\",\n  \"cx\",\n  \"cy\",\n  \"cymru\",\n  \"cyou\",\n  \"cz\",\n  \"dabur\",\n  \"dad\",\n  \"dance\",\n  \"data\",\n  \"date\",\n  \"dating\",\n  \"datsun\",\n  \"day\",\n  \"dclk\",\n  \"dds\",\n  \"de\",\n  \"deal\",\n  \"dealer\",\n  \"deals\",\n  \"degree\",\n  \"delivery\",\n  \"dell\",\n  \"deloitte\",\n  \"delta\",\n  \"democrat\",\n  \"dental\",\n  \"dentist\",\n  \"desi\",\n  \"design\",\n  \"dev\",\n  \"dhl\",\n  \"diamonds\",\n  \"diet\",\n  \"digital\",\n  \"direct\",\n  \"directory\",\n  \"discount\",\n  \"discover\",\n  \"dish\",\n  \"diy\",\n  \"dj\",\n  \"dk\",\n  \"dm\",\n  \"dnp\",\n  \"do\",\n  \"docs\",\n  \"doctor\",\n  \"dodge\",\n  \"dog\",\n  \"doha\",\n  \"domains\",\n  \"dot\",\n  \"download\",\n  \"drive\",\n  \"dtv\",\n  \"dubai\",\n  \"duck\",\n  \"dunlop\",\n  \"duns\",\n  \"dupont\",\n  \"durban\",\n  \"dvag\",\n  \"dvr\",\n  \"dz\",\n  \"earth\",\n  \"eat\",\n  \"ec\",\n  \"eco\",\n  \"edeka\",\n  \"edu\",\n  \"education\",\n  \"ee\",\n  \"eg\",\n  \"email\",\n  \"emerck\",\n  \"energy\",\n  \"engineer\",\n  \"engineering\",\n  \"enterprises\",\n  \"epost\",\n  \"epson\",\n  \"equipment\",\n  \"er\",\n  \"ericsson\",\n  \"erni\",\n  \"es\",\n  \"esq\",\n  \"estate\",\n  \"esurance\",\n  \"et\",\n  \"etisalat\",\n  \"eu\",\n  \"eurovision\",\n  \"eus\",\n  \"events\",\n  \"everbank\",\n  \"exchange\",\n  \"expert\",\n  \"exposed\",\n  \"express\",\n  \"extraspace\",\n  \"fage\",\n  \"fail\",\n  \"fairwinds\",\n  \"faith\",\n  \"family\",\n  \"fan\",\n  \"fans\",\n  \"farm\",\n  \"farmers\",\n  \"fashion\",\n  \"fast\",\n  \"fedex\",\n  \"feedback\",\n  \"ferrari\",\n  \"ferrero\",\n  \"fi\",\n  \"fiat\",\n  \"fidelity\",\n  \"fido\",\n  \"film\",\n  \"final\",\n  \"finance\",\n  \"financial\",\n  \"fire\",\n  \"firestone\",\n  \"firmdale\",\n  \"fish\",\n  \"fishing\",\n  \"fit\",\n  \"fitness\",\n  \"fj\",\n  \"fk\",\n  \"flickr\",\n  \"flights\",\n  \"flir\",\n  \"florist\",\n  \"flowers\",\n  \"fly\",\n  \"fm\",\n  \"fo\",\n  \"foo\",\n  \"food\",\n  \"foodnetwork\",\n  \"football\",\n  \"ford\",\n  \"forex\",\n  \"forsale\",\n  \"forum\",\n  \"foundation\",\n  \"fox\",\n  \"fr\",\n  \"free\",\n  \"fresenius\",\n  \"frl\",\n  \"frogans\",\n  \"frontdoor\",\n  \"frontier\",\n  \"ftr\",\n  \"fujitsu\",\n  \"fujixerox\",\n  \"fun\",\n  \"fund\",\n  \"furniture\",\n  \"futbol\",\n  \"fyi\",\n  \"ga\",\n  \"gal\",\n  \"gallery\",\n  \"gallo\",\n  \"gallup\",\n  \"game\",\n  \"games\",\n  \"gap\",\n  \"garden\",\n  \"gb\",\n  \"gbiz\",\n  \"gd\",\n  \"gdn\",\n  \"ge\",\n  \"gea\",\n  \"gent\",\n  \"genting\",\n  \"george\",\n  \"gf\",\n  \"gg\",\n  \"ggee\",\n  \"gh\",\n  \"gi\",\n  \"gift\",\n  \"gifts\",\n  \"gives\",\n  \"giving\",\n  \"gl\",\n  \"glade\",\n  \"glass\",\n  \"gle\",\n  \"global\",\n  \"globo\",\n  \"gm\",\n  \"gmail\",\n  \"gmbh\",\n  \"gmo\",\n  \"gmx\",\n  \"gn\",\n  \"godaddy\",\n  \"gold\",\n  \"goldpoint\",\n  \"golf\",\n  \"goo\",\n  \"goodhands\",\n  \"goodyear\",\n  \"goog\",\n  \"google\",\n  \"gop\",\n  \"got\",\n  \"gov\",\n  \"gp\",\n  \"gq\",\n  \"gr\",\n  \"grainger\",\n  \"graphics\",\n  \"gratis\",\n  \"green\",\n  \"gripe\",\n  \"grocery\",\n  \"group\",\n  \"gs\",\n  \"gt\",\n  \"gu\",\n  \"guardian\",\n  \"gucci\",\n  \"guge\",\n  \"guide\",\n  \"guitars\",\n  \"guru\",\n  \"gw\",\n  \"gy\",\n  \"hair\",\n  \"hamburg\",\n  \"hangout\",\n  \"haus\",\n  \"hbo\",\n  \"hdfc\",\n  \"hdfcbank\",\n  \"health\",\n  \"healthcare\",\n  \"help\",\n  \"helsinki\",\n  \"here\",\n  \"hermes\",\n  \"hgtv\",\n  \"hiphop\",\n  \"hisamitsu\",\n  \"hitachi\",\n  \"hiv\",\n  \"hk\",\n  \"hkt\",\n  \"hm\",\n  \"hn\",\n  \"hockey\",\n  \"holdings\",\n  \"holiday\",\n  \"homedepot\",\n  \"homegoods\",\n  \"homes\",\n  \"homesense\",\n  \"honda\",\n  \"honeywell\",\n  \"horse\",\n  \"hospital\",\n  \"host\",\n  \"hosting\",\n  \"hot\",\n  \"hoteles\",\n  \"hotels\",\n  \"hotmail\",\n  \"house\",\n  \"how\",\n  \"hr\",\n  \"hsbc\",\n  \"ht\",\n  \"hu\",\n  \"hughes\",\n  \"hyatt\",\n  \"hyundai\",\n  \"ibm\",\n  \"icbc\",\n  \"ice\",\n  \"icu\",\n  \"id\",\n  \"ie\",\n  \"ieee\",\n  \"ifm\",\n  \"ikano\",\n  \"il\",\n  \"im\",\n  \"imamat\",\n  \"imdb\",\n  \"immo\",\n  \"immobilien\",\n  \"in\",\n  \"industries\",\n  \"infiniti\",\n  \"info\",\n  \"ing\",\n  \"ink\",\n  \"institute\",\n  \"insurance\",\n  \"insure\",\n  \"int\",\n  \"intel\",\n  \"international\",\n  \"intuit\",\n  \"investments\",\n  \"io\",\n  \"ipiranga\",\n  \"iq\",\n  \"ir\",\n  \"irish\",\n  \"is\",\n  \"iselect\",\n  \"ismaili\",\n  \"ist\",\n  \"istanbul\",\n  \"it\",\n  \"itau\",\n  \"itv\",\n  \"iveco\",\n  \"iwc\",\n  \"jaguar\",\n  \"java\",\n  \"jcb\",\n  \"jcp\",\n  \"je\",\n  \"jeep\",\n  \"jetzt\",\n  \"jewelry\",\n  \"jio\",\n  \"jlc\",\n  \"jll\",\n  \"jm\",\n  \"jmp\",\n  \"jnj\",\n  \"jo\",\n  \"jobs\",\n  \"joburg\",\n  \"jot\",\n  \"joy\",\n  \"jp\",\n  \"jpmorgan\",\n  \"jprs\",\n  \"juegos\",\n  \"juniper\",\n  \"kaufen\",\n  \"kddi\",\n  \"ke\",\n  \"kerryhotels\",\n  \"kerrylogistics\",\n  \"kerryproperties\",\n  \"kfh\",\n  \"kg\",\n  \"kh\",\n  \"ki\",\n  \"kia\",\n  \"kim\",\n  \"kinder\",\n  \"kindle\",\n  \"kitchen\",\n  \"kiwi\",\n  \"km\",\n  \"kn\",\n  \"koeln\",\n  \"komatsu\",\n  \"kosher\",\n  \"kp\",\n  \"kpmg\",\n  \"kpn\",\n  \"kr\",\n  \"krd\",\n  \"kred\",\n  \"kuokgroup\",\n  \"kw\",\n  \"ky\",\n  \"kyoto\",\n  \"kz\",\n  \"la\",\n  \"lacaixa\",\n  \"ladbrokes\",\n  \"lamborghini\",\n  \"lamer\",\n  \"lancaster\",\n  \"lancia\",\n  \"lancome\",\n  \"land\",\n  \"landrover\",\n  \"lanxess\",\n  \"lasalle\",\n  \"lat\",\n  \"latino\",\n  \"latrobe\",\n  \"law\",\n  \"lawyer\",\n  \"lb\",\n  \"lc\",\n  \"lds\",\n  \"lease\",\n  \"leclerc\",\n  \"lefrak\",\n  \"legal\",\n  \"lego\",\n  \"lexus\",\n  \"lgbt\",\n  \"li\",\n  \"liaison\",\n  \"lidl\",\n  \"life\",\n  \"lifeinsurance\",\n  \"lifestyle\",\n  \"lighting\",\n  \"like\",\n  \"lilly\",\n  \"limited\",\n  \"limo\",\n  \"lincoln\",\n  \"linde\",\n  \"link\",\n  \"lipsy\",\n  \"live\",\n  \"living\",\n  \"lixil\",\n  \"lk\",\n  \"llc\",\n  \"loan\",\n  \"loans\",\n  \"locker\",\n  \"locus\",\n  \"loft\",\n  \"lol\",\n  \"london\",\n  \"lotte\",\n  \"lotto\",\n  \"love\",\n  \"lpl\",\n  \"lplfinancial\",\n  \"lr\",\n  \"ls\",\n  \"lt\",\n  \"ltd\",\n  \"ltda\",\n  \"lu\",\n  \"lundbeck\",\n  \"lupin\",\n  \"luxe\",\n  \"luxury\",\n  \"lv\",\n  \"ly\",\n  \"ma\",\n  \"macys\",\n  \"madrid\",\n  \"maif\",\n  \"maison\",\n  \"makeup\",\n  \"man\",\n  \"management\",\n  \"mango\",\n  \"map\",\n  \"market\",\n  \"marketing\",\n  \"markets\",\n  \"marriott\",\n  \"marshalls\",\n  \"maserati\",\n  \"mattel\",\n  \"mba\",\n  \"mc\",\n  \"mckinsey\",\n  \"md\",\n  \"me\",\n  \"med\",\n  \"media\",\n  \"meet\",\n  \"melbourne\",\n  \"meme\",\n  \"memorial\",\n  \"men\",\n  \"menu\",\n  \"meo\",\n  \"merckmsd\",\n  \"metlife\",\n  \"mg\",\n  \"mh\",\n  \"miami\",\n  \"microsoft\",\n  \"mil\",\n  \"mini\",\n  \"mint\",\n  \"mit\",\n  \"mitsubishi\",\n  \"mk\",\n  \"ml\",\n  \"mlb\",\n  \"mls\",\n  \"mm\",\n  \"mma\",\n  \"mn\",\n  \"mo\",\n  \"mobi\",\n  \"mobile\",\n  \"mobily\",\n  \"moda\",\n  \"moe\",\n  \"moi\",\n  \"mom\",\n  \"monash\",\n  \"money\",\n  \"monster\",\n  \"mopar\",\n  \"mormon\",\n  \"mortgage\",\n  \"moscow\",\n  \"moto\",\n  \"motorcycles\",\n  \"mov\",\n  \"movie\",\n  \"movistar\",\n  \"mp\",\n  \"mq\",\n  \"mr\",\n  \"ms\",\n  \"msd\",\n  \"mt\",\n  \"mtn\",\n  \"mtr\",\n  \"mu\",\n  \"museum\",\n  \"mutual\",\n  \"mv\",\n  \"mw\",\n  \"mx\",\n  \"my\",\n  \"mz\",\n  \"na\",\n  \"nab\",\n  \"nadex\",\n  \"nagoya\",\n  \"name\",\n  \"nationwide\",\n  \"natura\",\n  \"navy\",\n  \"nba\",\n  \"nc\",\n  \"ne\",\n  \"nec\",\n  \"net\",\n  \"netbank\",\n  \"netflix\",\n  \"network\",\n  \"neustar\",\n  \"new\",\n  \"newholland\",\n  \"news\",\n  \"next\",\n  \"nextdirect\",\n  \"nexus\",\n  \"nf\",\n  \"nfl\",\n  \"ng\",\n  \"ngo\",\n  \"nhk\",\n  \"ni\",\n  \"nico\",\n  \"nike\",\n  \"nikon\",\n  \"ninja\",\n  \"nissan\",\n  \"nissay\",\n  \"nl\",\n  \"no\",\n  \"nokia\",\n  \"northwesternmutual\",\n  \"norton\",\n  \"now\",\n  \"nowruz\",\n  \"nowtv\",\n  \"np\",\n  \"nr\",\n  \"nra\",\n  \"nrw\",\n  \"ntt\",\n  \"nu\",\n  \"nyc\",\n  \"nz\",\n  \"obi\",\n  \"observer\",\n  \"off\",\n  \"office\",\n  \"okinawa\",\n  \"olayan\",\n  \"olayangroup\",\n  \"oldnavy\",\n  \"ollo\",\n  \"om\",\n  \"omega\",\n  \"one\",\n  \"ong\",\n  \"onl\",\n  \"online\",\n  \"onyourside\",\n  \"ooo\",\n  \"open\",\n  \"oracle\",\n  \"orange\",\n  \"org\",\n  \"organic\",\n  \"origins\",\n  \"osaka\",\n  \"otsuka\",\n  \"ott\",\n  \"ovh\",\n  \"pa\",\n  \"page\",\n  \"panasonic\",\n  \"panerai\",\n  \"paris\",\n  \"pars\",\n  \"partners\",\n  \"parts\",\n  \"party\",\n  \"passagens\",\n  \"pay\",\n  \"pccw\",\n  \"pe\",\n  \"pet\",\n  \"pf\",\n  \"pfizer\",\n  \"pg\",\n  \"ph\",\n  \"pharmacy\",\n  \"phd\",\n  \"philips\",\n  \"phone\",\n  \"photo\",\n  \"photography\",\n  \"photos\",\n  \"physio\",\n  \"piaget\",\n  \"pics\",\n  \"pictet\",\n  \"pictures\",\n  \"pid\",\n  \"pin\",\n  \"ping\",\n  \"pink\",\n  \"pioneer\",\n  \"pizza\",\n  \"pk\",\n  \"pl\",\n  \"place\",\n  \"play\",\n  \"playstation\",\n  \"plumbing\",\n  \"plus\",\n  \"pm\",\n  \"pn\",\n  \"pnc\",\n  \"pohl\",\n  \"poker\",\n  \"politie\",\n  \"porn\",\n  \"post\",\n  \"pr\",\n  \"pramerica\",\n  \"praxi\",\n  \"press\",\n  \"prime\",\n  \"pro\",\n  \"prod\",\n  \"productions\",\n  \"prof\",\n  \"progressive\",\n  \"promo\",\n  \"properties\",\n  \"property\",\n  \"protection\",\n  \"pru\",\n  \"prudential\",\n  \"ps\",\n  \"pt\",\n  \"pub\",\n  \"pw\",\n  \"pwc\",\n  \"py\",\n  \"qa\",\n  \"qpon\",\n  \"quebec\",\n  \"quest\",\n  \"qvc\",\n  \"racing\",\n  \"radio\",\n  \"raid\",\n  \"re\",\n  \"read\",\n  \"realestate\",\n  \"realtor\",\n  \"realty\",\n  \"recipes\",\n  \"red\",\n  \"redstone\",\n  \"redumbrella\",\n  \"rehab\",\n  \"reise\",\n  \"reisen\",\n  \"reit\",\n  \"reliance\",\n  \"ren\",\n  \"rent\",\n  \"rentals\",\n  \"repair\",\n  \"report\",\n  \"republican\",\n  \"rest\",\n  \"restaurant\",\n  \"review\",\n  \"reviews\",\n  \"rexroth\",\n  \"rich\",\n  \"richardli\",\n  \"ricoh\",\n  \"rightathome\",\n  \"ril\",\n  \"rio\",\n  \"rip\",\n  \"rmit\",\n  \"ro\",\n  \"rocher\",\n  \"rocks\",\n  \"rodeo\",\n  \"rogers\",\n  \"room\",\n  \"rs\",\n  \"rsvp\",\n  \"ru\",\n  \"rugby\",\n  \"ruhr\",\n  \"run\",\n  \"rw\",\n  \"rwe\",\n  \"ryukyu\",\n  \"sa\",\n  \"saarland\",\n  \"safe\",\n  \"safety\",\n  \"sakura\",\n  \"sale\",\n  \"salon\",\n  \"samsclub\",\n  \"samsung\",\n  \"sandvik\",\n  \"sandvikcoromant\",\n  \"sanofi\",\n  \"sap\",\n  \"sapo\",\n  \"sarl\",\n  \"sas\",\n  \"save\",\n  \"saxo\",\n  \"sb\",\n  \"sbi\",\n  \"sbs\",\n  \"sc\",\n  \"sca\",\n  \"scb\",\n  \"schaeffler\",\n  \"schmidt\",\n  \"scholarships\",\n  \"school\",\n  \"schule\",\n  \"schwarz\",\n  \"science\",\n  \"scjohnson\",\n  \"scor\",\n  \"scot\",\n  \"sd\",\n  \"se\",\n  \"search\",\n  \"seat\",\n  \"secure\",\n  \"security\",\n  \"seek\",\n  \"select\",\n  \"sener\",\n  \"services\",\n  \"ses\",\n  \"seven\",\n  \"sew\",\n  \"sex\",\n  \"sexy\",\n  \"sfr\",\n  \"sg\",\n  \"sh\",\n  \"shangrila\",\n  \"sharp\",\n  \"shaw\",\n  \"shell\",\n  \"shia\",\n  \"shiksha\",\n  \"shoes\",\n  \"shop\",\n  \"shopping\",\n  \"shouji\",\n  \"show\",\n  \"showtime\",\n  \"shriram\",\n  \"si\",\n  \"silk\",\n  \"sina\",\n  \"singles\",\n  \"site\",\n  \"sj\",\n  \"sk\",\n  \"ski\",\n  \"skin\",\n  \"sky\",\n  \"skype\",\n  \"sl\",\n  \"sling\",\n  \"sm\",\n  \"smart\",\n  \"smile\",\n  \"sn\",\n  \"sncf\",\n  \"so\",\n  \"soccer\",\n  \"social\",\n  \"softbank\",\n  \"software\",\n  \"sohu\",\n  \"solar\",\n  \"solutions\",\n  \"song\",\n  \"sony\",\n  \"soy\",\n  \"space\",\n  \"spiegel\",\n  \"sport\",\n  \"spot\",\n  \"spreadbetting\",\n  \"sr\",\n  \"srl\",\n  \"srt\",\n  \"st\",\n  \"stada\",\n  \"staples\",\n  \"star\",\n  \"starhub\",\n  \"statebank\",\n  \"statefarm\",\n  \"statoil\",\n  \"stc\",\n  \"stcgroup\",\n  \"stockholm\",\n  \"storage\",\n  \"store\",\n  \"stream\",\n  \"studio\",\n  \"study\",\n  \"style\",\n  \"su\",\n  \"sucks\",\n  \"supplies\",\n  \"supply\",\n  \"support\",\n  \"surf\",\n  \"surgery\",\n  \"suzuki\",\n  \"sv\",\n  \"swatch\",\n  \"swiftcover\",\n  \"swiss\",\n  \"sx\",\n  \"sy\",\n  \"sydney\",\n  \"symantec\",\n  \"systems\",\n  \"sz\",\n  \"tab\",\n  \"taipei\",\n  \"talk\",\n  \"taobao\",\n  \"target\",\n  \"tatamotors\",\n  \"tatar\",\n  \"tattoo\",\n  \"tax\",\n  \"taxi\",\n  \"tc\",\n  \"tci\",\n  \"td\",\n  \"tdk\",\n  \"team\",\n  \"tech\",\n  \"technology\",\n  \"tel\",\n  \"telecity\",\n  \"telefonica\",\n  \"temasek\",\n  \"tennis\",\n  \"teva\",\n  \"tf\",\n  \"tg\",\n  \"th\",\n  \"thd\",\n  \"theater\",\n  \"theatre\",\n  \"tiaa\",\n  \"tickets\",\n  \"tienda\",\n  \"tiffany\",\n  \"tips\",\n  \"tires\",\n  \"tirol\",\n  \"tj\",\n  \"tjmaxx\",\n  \"tjx\",\n  \"tk\",\n  \"tkmaxx\",\n  \"tl\",\n  \"tm\",\n  \"tmall\",\n  \"tn\",\n  \"to\",\n  \"today\",\n  \"tokyo\",\n  \"tools\",\n  \"top\",\n  \"toray\",\n  \"toshiba\",\n  \"total\",\n  \"tours\",\n  \"town\",\n  \"toyota\",\n  \"toys\",\n  \"tr\",\n  \"trade\",\n  \"trading\",\n  \"training\",\n  \"travel\",\n  \"travelchannel\",\n  \"travelers\",\n  \"travelersinsurance\",\n  \"trust\",\n  \"trv\",\n  \"tt\",\n  \"tube\",\n  \"tui\",\n  \"tunes\",\n  \"tushu\",\n  \"tv\",\n  \"tvs\",\n  \"tw\",\n  \"tz\",\n  \"ua\",\n  \"ubank\",\n  \"ubs\",\n  \"uconnect\",\n  \"ug\",\n  \"uk\",\n  \"unicom\",\n  \"university\",\n  \"uno\",\n  \"uol\",\n  \"ups\",\n  \"us\",\n  \"uy\",\n  \"uz\",\n  \"va\",\n  \"vacations\",\n  \"vana\",\n  \"vanguard\",\n  \"vc\",\n  \"ve\",\n  \"vegas\",\n  \"ventures\",\n  \"verisign\",\n  \"versicherung\",\n  \"vet\",\n  \"vg\",\n  \"vi\",\n  \"viajes\",\n  \"video\",\n  \"vig\",\n  \"viking\",\n  \"villas\",\n  \"vin\",\n  \"vip\",\n  \"virgin\",\n  \"visa\",\n  \"vision\",\n  \"vista\",\n  \"vistaprint\",\n  \"viva\",\n  \"vivo\",\n  \"vlaanderen\",\n  \"vn\",\n  \"vodka\",\n  \"volkswagen\",\n  \"volvo\",\n  \"vote\",\n  \"voting\",\n  \"voto\",\n  \"voyage\",\n  \"vu\",\n  \"vuelos\",\n  \"wales\",\n  \"walmart\",\n  \"walter\",\n  \"wang\",\n  \"wanggou\",\n  \"warman\",\n  \"watch\",\n  \"watches\",\n  \"weather\",\n  \"weatherchannel\",\n  \"webcam\",\n  \"weber\",\n  \"website\",\n  \"wed\",\n  \"wedding\",\n  \"weibo\",\n  \"weir\",\n  \"wf\",\n  \"whoswho\",\n  \"wien\",\n  \"wiki\",\n  \"williamhill\",\n  \"win\",\n  \"windows\",\n  \"wine\",\n  \"winners\",\n  \"wme\",\n  \"wolterskluwer\",\n  \"woodside\",\n  \"work\",\n  \"works\",\n  \"world\",\n  \"wow\",\n  \"ws\",\n  \"wtc\",\n  \"wtf\",\n  \"xbox\",\n  \"xerox\",\n  \"xfinity\",\n  \"xihuan\",\n  \"xin\",\n  \"कॉम\", // xn--11b4c3d\n  \"セール\", // xn--1ck2e1b\n  \"佛山\", // xn--1qqw23a\n  \"ಭಾರತ\", // xn--2scrj9c\n  \"慈善\", // xn--30rr7y\n  \"集团\", // xn--3bst00m\n  \"在线\", // xn--3ds443g\n  \"한국\", // xn--3e0b707e\n  \"ଭାରତ\", // xn--3hcrj9c\n  \"大众汽车\", // xn--3oq18vl8pn36a\n  \"点看\", // xn--3pxu8k\n  \"คอม\", // xn--42c2d9a\n  \"ভাৰত\", // xn--45br5cyl\n  \"ভারত\", // xn--45brj9c\n  \"八卦\", // xn--45q11c\n  \"موقع\", // xn--4gbrim\n  \"বাংলা\", // xn--54b7fta0cc\n  \"公益\", // xn--55qw42g\n  \"公司\", // xn--55qx5d\n  \"香格里拉\", // xn--5su34j936bgsg\n  \"网站\", // xn--5tzm5g\n  \"移动\", // xn--6frz82g\n  \"我爱你\", // xn--6qq986b3xl\n  \"москва\", // xn--80adxhks\n  \"қаз\", // xn--80ao21a\n  \"католик\", // xn--80aqecdr1a\n  \"онлайн\", // xn--80asehdb\n  \"сайт\", // xn--80aswg\n  \"联通\", // xn--8y0a063a\n  \"срб\", // xn--90a3ac\n  \"бг\", // xn--90ae\n  \"бел\", // xn--90ais\n  \"קום\", // xn--9dbq2a\n  \"时尚\", // xn--9et52u\n  \"微博\", // xn--9krt00a\n  \"淡马锡\", // xn--b4w605ferd\n  \"ファッション\", // xn--bck1b9a5dre4c\n  \"орг\", // xn--c1avg\n  \"नेट\", // xn--c2br7g\n  \"ストア\", // xn--cck2b3b\n  \"삼성\", // xn--cg4bki\n  \"சிங்கப்பூர்\", // xn--clchc0ea0b2g2a9gcd\n  \"商标\", // xn--czr694b\n  \"商店\", // xn--czrs0t\n  \"商城\", // xn--czru2d\n  \"дети\", // xn--d1acj3b\n  \"мкд\", // xn--d1alf\n  \"ею\", // xn--e1a4c\n  \"ポイント\", // xn--eckvdtc9d\n  \"新闻\", // xn--efvy88h\n  \"工行\", // xn--estv75g\n  \"家電\", // xn--fct429k\n  \"كوم\", // xn--fhbei\n  \"中文网\", // xn--fiq228c5hs\n  \"中信\", // xn--fiq64b\n  \"中国\", // xn--fiqs8s\n  \"中國\", // xn--fiqz9s\n  \"娱乐\", // xn--fjq720a\n  \"谷歌\", // xn--flw351e\n  \"భారత్\", // xn--fpcrj9c3d\n  \"ලංකා\", // xn--fzc2c9e2c\n  \"電訊盈科\", // xn--fzys8d69uvgm\n  \"购物\", // xn--g2xx48c\n  \"クラウド\", // xn--gckr3f0f\n  \"ભારત\", // xn--gecrj9c\n  \"通販\", // xn--gk3at1e\n  \"भारतम्\", // xn--h2breg3eve\n  \"भारत\", // xn--h2brj9c\n  \"भारोत\", // xn--h2brj9c8c\n  \"网店\", // xn--hxt814e\n  \"संगठन\", // xn--i1b6b1a6a2e\n  \"餐厅\", // xn--imr513n\n  \"网络\", // xn--io0a7i\n  \"ком\", // xn--j1aef\n  \"укр\", // xn--j1amh\n  \"香港\", // xn--j6w193g\n  \"诺基亚\", // xn--jlq61u9w7b\n  \"食品\", // xn--jvr189m\n  \"飞利浦\", // xn--kcrx77d1x4a\n  \"台湾\", // xn--kprw13d\n  \"台灣\", // xn--kpry57d\n  \"手表\", // xn--kpu716f\n  \"手机\", // xn--kput3i\n  \"мон\", // xn--l1acc\n  \"الجزائر\", // xn--lgbbat1ad8j\n  \"عمان\", // xn--mgb9awbf\n  \"ارامكو\", // xn--mgba3a3ejt\n  \"ایران\", // xn--mgba3a4f16a\n  \"العليان\", // xn--mgba7c0bbn0a\n  \"اتصالات\", // xn--mgbaakc7dvf\n  \"امارات\", // xn--mgbaam7a8h\n  \"بازار\", // xn--mgbab2bd\n  \"پاکستان\", // xn--mgbai9azgqp6j\n  \"الاردن\", // xn--mgbayh7gpa\n  \"موبايلي\", // xn--mgbb9fbpob\n  \"بارت\", // xn--mgbbh1a\n  \"بھارت\", // xn--mgbbh1a71e\n  \"المغرب\", // xn--mgbc0a9azcg\n  \"ابوظبي\", // xn--mgbca7dzdo\n  \"السعودية\", // xn--mgberp4a5d4ar\n  \"ڀارت\", // xn--mgbgu82a\n  \"كاثوليك\", // xn--mgbi4ecexp\n  \"سودان\", // xn--mgbpl2fh\n  \"همراه\", // xn--mgbt3dhd\n  \"عراق\", // xn--mgbtx2b\n  \"مليسيا\", // xn--mgbx4cd0ab\n  \"澳門\", // xn--mix891f\n  \"닷컴\", // xn--mk1bu44c\n  \"政府\", // xn--mxtq1m\n  \"شبكة\", // xn--ngbc5azd\n  \"بيتك\", // xn--ngbe9e0a\n  \"عرب\", // xn--ngbrx\n  \"გე\", // xn--node\n  \"机构\", // xn--nqv7f\n  \"组织机构\", // xn--nqv7fs00ema\n  \"健康\", // xn--nyqy26a\n  \"ไทย\", // xn--o3cw4h\n  \"سورية\", // xn--ogbpf8fl\n  \"招聘\", // xn--otu796d\n  \"рус\", // xn--p1acf\n  \"рф\", // xn--p1ai\n  \"珠宝\", // xn--pbt977c\n  \"تونس\", // xn--pgbs0dh\n  \"大拿\", // xn--pssy2u\n  \"みんな\", // xn--q9jyb4c\n  \"グーグル\", // xn--qcka1pmc\n  \"ελ\", // xn--qxam\n  \"世界\", // xn--rhqv96g\n  \"書籍\", // xn--rovu88b\n  \"ഭാരതം\", // xn--rvc1e0am3e\n  \"ਭਾਰਤ\", // xn--s9brj9c\n  \"网址\", // xn--ses554g\n  \"닷넷\", // xn--t60b56a\n  \"コム\", // xn--tckwe\n  \"天主教\", // xn--tiq49xqyj\n  \"游戏\", // xn--unup4y\n  \"vermögensberater\", // xn--vermgensberater-ctb\n  \"vermögensberatung\", // xn--vermgensberatung-pwb\n  \"企业\", // xn--vhquv\n  \"信息\", // xn--vuq861b\n  \"嘉里大酒店\", // xn--w4r85el8fhu5dnra\n  \"嘉里\", // xn--w4rs40l\n  \"مصر\", // xn--wgbh1c\n  \"قطر\", // xn--wgbl6a\n  \"广东\", // xn--xhq521b\n  \"இலங்கை\", // xn--xkc2al3hye2a\n  \"இந்தியா\", // xn--xkc2dl3a5ee0h\n  \"հայ\", // xn--y9a3aq\n  \"新加坡\", // xn--yfro4i67o\n  \"فلسطين\", // xn--ygbi2ammx\n  \"政务\", // xn--zfr164b\n  \"xperia\",\n  \"xxx\",\n  \"xyz\",\n  \"yachts\",\n  \"yahoo\",\n  \"yamaxun\",\n  \"yandex\",\n  \"ye\",\n  \"yodobashi\",\n  \"yoga\",\n  \"yokohama\",\n  \"you\",\n  \"youtube\",\n  \"yt\",\n  \"yun\",\n  \"za\",\n  \"zappos\",\n  \"zara\",\n  \"zero\",\n  \"zip\",\n  \"zippo\",\n  \"zm\",\n  \"zone\",\n  \"zuerich\",\n  \"zw\"\n];\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (text) {\n  return text;\n};","require('../../modules/es6.object.get-prototype-of');\nmodule.exports = require('../../modules/_core').Object.getPrototypeOf;\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n  return function getPrototypeOf(it) {\n    return $getPrototypeOf(toObject(it));\n  };\n});\n","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n  return $Object.defineProperty(it, key, desc);\n};\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","module.exports = { \"default\": require(\"core-js/library/fn/object/define-properties\"), __esModule: true };","require('../../modules/es6.object.define-properties');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperties(T, D) {\n  return $Object.defineProperties(T, D);\n};\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","module.exports = { \"default\": require(\"core-js/library/fn/object/freeze\"), __esModule: true };","require('../../modules/es6.object.freeze');\nmodule.exports = require('../../modules/_core').Object.freeze;\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n  return function freeze(it) {\n    return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n  };\n});\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sizes = void 0;\nvar sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexports.sizes = sizes;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _exenv = require('exenv');\n\nvar _utils = require('./utils');\n\nvar _withTouchListeners = require('./withTouchListeners');\n\nvar _withTouchListeners2 = _interopRequireDefault(_withTouchListeners);\n\nvar _StyleSheet = require('./StyleSheet');\n\nvar _StyleSheet2 = _interopRequireDefault(_StyleSheet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ScrollLock = function (_PureComponent) {\n  _inherits(ScrollLock, _PureComponent);\n\n  function ScrollLock() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, ScrollLock);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = ScrollLock.__proto__ || Object.getPrototypeOf(ScrollLock)).call.apply(_ref, [this].concat(args))), _this), _this.getStyles = function () {\n      var accountForScrollbars = _this.props.accountForScrollbars;\n\n\n      var height = (0, _utils.getDocumentHeight)();\n      var paddingRight = accountForScrollbars ? (0, _utils.getPadding)() : null;\n      var styles = 'body {\\n      box-sizing: border-box !important;\\n      overflow: hidden !important;\\n      position: relative !important;\\n      ' + (height ? 'height: ' + height + 'px !important;' : '') + '\\n      ' + (paddingRight ? 'padding-right: ' + paddingRight + 'px !important;' : '') + '\\n    }';\n\n      return styles;\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(ScrollLock, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      if (!_exenv.canUseDOM) return;\n      this.initialHeight = window.innerHeight;\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      var offset = window.innerHeight - this.initialHeight;\n\n      // adjust scroll if the window has been resized since the lock was engaged\n      // e.g. mobile safari dynamic chrome heights\n      if (offset) {\n        window.scrollTo(0, window.pageYOffset + offset);\n      }\n\n      // reset the initial height in case this scroll lock is used again\n      this.initialHeight = window.innerHeight;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return _react2.default.createElement(_StyleSheet2.default, { styles: this.getStyles() });\n    }\n  }]);\n\n  return ScrollLock;\n}(_react.PureComponent);\n\nScrollLock.defaultProps = {\n  accountForScrollbars: true\n};\nexports.default = (0, _withTouchListeners2.default)(ScrollLock);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports.default = withTouchListeners;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _exenv = require('exenv');\n\nvar _utils = require('./utils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction withTouchListeners(WrappedComponent) {\n  return function (_PureComponent) {\n    _inherits(TouchProvider, _PureComponent);\n\n    function TouchProvider() {\n      var _ref;\n\n      var _temp, _this, _ret;\n\n      _classCallCheck(this, TouchProvider);\n\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = TouchProvider.__proto__ || Object.getPrototypeOf(TouchProvider)).call.apply(_ref, [this].concat(args))), _this), _this.listenerOptions = {\n        capture: false,\n        passive: false\n      }, _temp), _possibleConstructorReturn(_this, _ret);\n    }\n\n    _createClass(TouchProvider, [{\n      key: 'componentDidMount',\n      value: function componentDidMount() {\n        if (!_exenv.canUseDOM) return;\n\n        var touchScrollTarget = this.props.touchScrollTarget;\n\n        var target = document.body;\n\n        // account for touch devices\n        if (target && (0, _utils.isTouchDevice)()) {\n          // Mobile Safari ignores { overflow: hidden } declaration on the body.\n          target.addEventListener('touchmove', _utils.preventTouchMove, this.listenerOptions);\n\n          // Allow scroll on provided target\n          if (touchScrollTarget) {\n            touchScrollTarget.addEventListener('touchstart', _utils.preventInertiaScroll, this.listenerOptions);\n            touchScrollTarget.addEventListener('touchmove', _utils.allowTouchMove, this.listenerOptions);\n          }\n        }\n      }\n    }, {\n      key: 'componentWillUnmount',\n      value: function componentWillUnmount() {\n        if (!_exenv.canUseDOM) return;\n\n        var touchScrollTarget = this.props.touchScrollTarget;\n\n        var target = document.body;\n\n        // remove touch listeners\n        if (target && (0, _utils.isTouchDevice)()) {\n          target.removeEventListener('touchmove', _utils.preventTouchMove, this.listenerOptions);\n\n          if (touchScrollTarget) {\n            touchScrollTarget.removeEventListener('touchstart', _utils.preventInertiaScroll, this.listenerOptions);\n            touchScrollTarget.removeEventListener('touchmove', _utils.allowTouchMove, this.listenerOptions);\n          }\n        }\n      }\n    }, {\n      key: 'render',\n      value: function render() {\n        return _react2.default.createElement(WrappedComponent, this.props);\n      }\n    }]);\n\n    return TouchProvider;\n  }(_react.PureComponent);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _exenv = require('exenv');\n\nvar _utils = require('./utils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Sheet = function (_PureComponent) {\n  _inherits(Sheet, _PureComponent);\n\n  function Sheet() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, Sheet);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Sheet.__proto__ || Object.getPrototypeOf(Sheet)).call.apply(_ref, [this].concat(args))), _this), _this.addSheet = function () {\n      var styles = _this.props.styles;\n\n\n      var sheet = (0, _utils.makeStyleTag)();\n      if (!sheet) return;\n\n      (0, _utils.injectStyles)(sheet, styles);\n      (0, _utils.insertStyleTag)(sheet);\n\n      _this.sheet = sheet;\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(Sheet, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      if (!_exenv.canUseDOM) return;\n      this.addSheet();\n    }\n  }, {\n    key: 'removeSheet',\n    value: function removeSheet() {\n      if (!this.sheet) return;\n\n      // $FlowFixMe\n      this.sheet.parentNode.removeChild(this.sheet);\n      this.sheet = null;\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.removeSheet();\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return null;\n    }\n  }]);\n\n  return Sheet;\n}(_react.PureComponent);\n\nexports.default = Sheet;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.size = exports.default = exports.IconWrapper = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _uuid = _interopRequireDefault(require(\"uuid\"));\n\nvar _theme = require(\"@atlaskit/theme\");\n\nvar _constants = require(\"../constants\");\n\nvar getSize = function getSize(props) {\n  if (props.size) {\n    return \"height: \".concat(_constants.sizes[props.size], \"; width: \").concat(_constants.sizes[props.size], \";\");\n  }\n\n  return null;\n};\n\nvar IconWrapper = _styledComponents.default.span.withConfig({\n  displayName: \"Icon__IconWrapper\",\n  componentId: \"dyhwwi-0\"\n})([\"\\n  \", \" color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \" max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n  /* Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"], getSize, function (p) {\n  return p.primaryColor || 'currentColor';\n}, function (p) {\n  return p.secondaryColor || _theme.colors.background;\n}, getSize);\n\nexports.IconWrapper = IconWrapper;\n\nvar Icon =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inherits2.default)(Icon, _Component);\n\n  function Icon() {\n    (0, _classCallCheck2.default)(this, Icon);\n    return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Icon).apply(this, arguments));\n  }\n\n  (0, _createClass2.default)(Icon, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          Glyph = _this$props.glyph,\n          dangerouslySetGlyph = _this$props.dangerouslySetGlyph,\n          onClick = _this$props.onClick,\n          primaryColor = _this$props.primaryColor,\n          secondaryColor = _this$props.secondaryColor,\n          size = _this$props.size; // handling the glyphs as strings\n\n      if (dangerouslySetGlyph) {\n        return _react.default.createElement(IconWrapper, {\n          onClick: onClick,\n          primaryColor: primaryColor,\n          secondaryColor: secondaryColor,\n          size: size,\n          \"aria-label\": this.props.label,\n          dangerouslySetInnerHTML: {\n            __html: Icon.insertDynamicGradientID(dangerouslySetGlyph)\n          }\n        });\n      } // handling the glyphs when passed through as functions\n\n\n      return _react.default.createElement(IconWrapper, {\n        onClick: onClick,\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        size: size,\n        \"aria-label\": this.props.label\n      }, Glyph ? _react.default.createElement(Glyph, {\n        role: \"presentation\"\n      }) : null);\n    }\n  }], [{\n    key: \"insertDynamicGradientID\",\n\n    /* Icons need unique gradient IDs across instances for different gradient definitions to work\n     * correctly.\n     * A step in the icon build process replaces linear gradient IDs and their references in paths\n     * to a placeholder string so we can replace them with a dynamic ID here.\n     * Replacing the original IDs with placeholders in the build process is more robust than not\n     * using placeholders as we do not have to rely on regular expressions to find specific element\n     * to replace.\n     */\n    value: function insertDynamicGradientID(svgStr) {\n      var id = (0, _uuid.default)();\n      var replacedSvgStr = svgStr.replace(/id=\"([^\"]+)-idPlaceholder\"/g, \"id=$1-\".concat(id)).replace(/fill=\"url\\(#([^\"]+)-idPlaceholder\\)\"/g, \"fill=\\\"url(#$1-\".concat(id, \")\\\"\"));\n      return replacedSvgStr;\n    }\n  }]);\n  return Icon;\n}(_react.Component);\n\nexports.default = Icon;\n(0, _defineProperty2.default)(Icon, \"defaultProps\", {\n  onClick: function onClick() {}\n});\nvar size = Object.keys(_constants.sizes).reduce(function (p, c) {\n  return Object.assign(p, (0, _defineProperty2.default)({}, c, c));\n}, {});\nexports.size = size;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sizes = void 0;\nvar sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexports.sizes = sizes;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.size = exports.default = exports.IconWrapper = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _uuid = _interopRequireDefault(require(\"uuid\"));\n\nvar _theme = require(\"@atlaskit/theme\");\n\nvar _constants = require(\"../constants\");\n\nvar getSize = function getSize(props) {\n  if (props.size) {\n    return \"height: \".concat(_constants.sizes[props.size], \"; width: \").concat(_constants.sizes[props.size], \";\");\n  }\n\n  return null;\n};\n\nvar IconWrapper = _styledComponents.default.span.withConfig({\n  displayName: \"Icon__IconWrapper\",\n  componentId: \"dyhwwi-0\"\n})([\"\\n  \", \" color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \" max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n  /* Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"], getSize, function (p) {\n  return p.primaryColor || 'currentColor';\n}, function (p) {\n  return p.secondaryColor || _theme.colors.background;\n}, getSize);\n\nexports.IconWrapper = IconWrapper;\n\nvar Icon =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inherits2.default)(Icon, _Component);\n\n  function Icon() {\n    (0, _classCallCheck2.default)(this, Icon);\n    return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Icon).apply(this, arguments));\n  }\n\n  (0, _createClass2.default)(Icon, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          Glyph = _this$props.glyph,\n          dangerouslySetGlyph = _this$props.dangerouslySetGlyph,\n          onClick = _this$props.onClick,\n          primaryColor = _this$props.primaryColor,\n          secondaryColor = _this$props.secondaryColor,\n          size = _this$props.size; // handling the glyphs as strings\n\n      if (dangerouslySetGlyph) {\n        return _react.default.createElement(IconWrapper, {\n          onClick: onClick,\n          primaryColor: primaryColor,\n          secondaryColor: secondaryColor,\n          size: size,\n          \"aria-label\": this.props.label,\n          dangerouslySetInnerHTML: {\n            __html: Icon.insertDynamicGradientID(dangerouslySetGlyph)\n          }\n        });\n      } // handling the glyphs when passed through as functions\n\n\n      return _react.default.createElement(IconWrapper, {\n        onClick: onClick,\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        size: size,\n        \"aria-label\": this.props.label\n      }, Glyph ? _react.default.createElement(Glyph, {\n        role: \"presentation\"\n      }) : null);\n    }\n  }], [{\n    key: \"insertDynamicGradientID\",\n\n    /* Icons need unique gradient IDs across instances for different gradient definitions to work\n     * correctly.\n     * A step in the icon build process replaces linear gradient IDs and their references in paths\n     * to a placeholder string so we can replace them with a dynamic ID here.\n     * Replacing the original IDs with placeholders in the build process is more robust than not\n     * using placeholders as we do not have to rely on regular expressions to find specific element\n     * to replace.\n     */\n    value: function insertDynamicGradientID(svgStr) {\n      var id = (0, _uuid.default)();\n      var replacedSvgStr = svgStr.replace(/id=\"([^\"]+)-idPlaceholder\"/g, \"id=$1-\".concat(id)).replace(/fill=\"url\\(#([^\"]+)-idPlaceholder\\)\"/g, \"fill=\\\"url(#$1-\".concat(id, \")\\\"\"));\n      return replacedSvgStr;\n    }\n  }]);\n  return Icon;\n}(_react.Component);\n\nexports.default = Icon;\n(0, _defineProperty2.default)(Icon, \"defaultProps\", {\n  onClick: function onClick() {}\n});\nvar size = Object.keys(_constants.sizes).reduce(function (p, c) {\n  return Object.assign(p, (0, _defineProperty2.default)({}, c, c));\n}, {});\nexports.size = size;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sizes = void 0;\nvar sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexports.sizes = sizes;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.size = exports.default = exports.IconWrapper = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _uuid = _interopRequireDefault(require(\"uuid\"));\n\nvar _theme = require(\"@atlaskit/theme\");\n\nvar _constants = require(\"../constants\");\n\nvar getSize = function getSize(props) {\n  if (props.size) {\n    return \"height: \".concat(_constants.sizes[props.size], \"; width: \").concat(_constants.sizes[props.size], \";\");\n  }\n\n  return null;\n};\n\nvar IconWrapper = _styledComponents.default.span.withConfig({\n  displayName: \"Icon__IconWrapper\",\n  componentId: \"dyhwwi-0\"\n})([\"\\n  \", \" color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \" max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n  /* Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"], getSize, function (p) {\n  return p.primaryColor || 'currentColor';\n}, function (p) {\n  return p.secondaryColor || _theme.colors.background;\n}, getSize);\n\nexports.IconWrapper = IconWrapper;\n\nvar Icon =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inherits2.default)(Icon, _Component);\n\n  function Icon() {\n    (0, _classCallCheck2.default)(this, Icon);\n    return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Icon).apply(this, arguments));\n  }\n\n  (0, _createClass2.default)(Icon, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          Glyph = _this$props.glyph,\n          dangerouslySetGlyph = _this$props.dangerouslySetGlyph,\n          onClick = _this$props.onClick,\n          primaryColor = _this$props.primaryColor,\n          secondaryColor = _this$props.secondaryColor,\n          size = _this$props.size; // handling the glyphs as strings\n\n      if (dangerouslySetGlyph) {\n        return _react.default.createElement(IconWrapper, {\n          onClick: onClick,\n          primaryColor: primaryColor,\n          secondaryColor: secondaryColor,\n          size: size,\n          \"aria-label\": this.props.label,\n          dangerouslySetInnerHTML: {\n            __html: Icon.insertDynamicGradientID(dangerouslySetGlyph)\n          }\n        });\n      } // handling the glyphs when passed through as functions\n\n\n      return _react.default.createElement(IconWrapper, {\n        onClick: onClick,\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        size: size,\n        \"aria-label\": this.props.label\n      }, Glyph ? _react.default.createElement(Glyph, {\n        role: \"presentation\"\n      }) : null);\n    }\n  }], [{\n    key: \"insertDynamicGradientID\",\n\n    /* Icons need unique gradient IDs across instances for different gradient definitions to work\n     * correctly.\n     * A step in the icon build process replaces linear gradient IDs and their references in paths\n     * to a placeholder string so we can replace them with a dynamic ID here.\n     * Replacing the original IDs with placeholders in the build process is more robust than not\n     * using placeholders as we do not have to rely on regular expressions to find specific element\n     * to replace.\n     */\n    value: function insertDynamicGradientID(svgStr) {\n      var id = (0, _uuid.default)();\n      var replacedSvgStr = svgStr.replace(/id=\"([^\"]+)-idPlaceholder\"/g, \"id=$1-\".concat(id)).replace(/fill=\"url\\(#([^\"]+)-idPlaceholder\\)\"/g, \"fill=\\\"url(#$1-\".concat(id, \")\\\"\"));\n      return replacedSvgStr;\n    }\n  }]);\n  return Icon;\n}(_react.Component);\n\nexports.default = Icon;\n(0, _defineProperty2.default)(Icon, \"defaultProps\", {\n  onClick: function onClick() {}\n});\nvar size = Object.keys(_constants.sizes).reduce(function (p, c) {\n  return Object.assign(p, (0, _defineProperty2.default)({}, c, c));\n}, {});\nexports.size = size;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sizes = void 0;\nvar sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexports.sizes = sizes;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sizes = void 0;\nvar sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexports.sizes = sizes;","/* eslint-disable no-unused-vars, no-var */\n\n// Logging configuration\nvar loggingConfig = {\n    // default log level for the app and lib-jitsi-meet\n    defaultLogLevel: 'trace',\n\n    // Option to disable LogCollector (which stores the logs on CallStats)\n    // disableLogCollector: true,\n\n    // The following are too verbose in their logging with the\n    // {@link #defaultLogLevel}:\n    'modules/RTC/TraceablePeerConnection.js': 'info',\n    'modules/statistics/CallStats.js': 'info',\n    'modules/xmpp/strophe.util.js': 'log'\n};\n\n/* eslint-enable no-unused-vars, no-var */\n\n// XXX Web/React server-includes logging_config.js into index.html.\n// Mobile/react-native requires it in react/features/base/logging. For the\n// purposes of the latter, (try to) export loggingConfig. The following\n// detection of a module system is inspired by webpack.\ntypeof module === 'object'\n    && typeof exports === 'object'\n    && (module.exports = loggingConfig);\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n  var len = b64.length\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n  // base64 is 4/3 + up to two characters of the original data\n  return (b64.length * 3 / 4) - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n  var i, l, tmp, placeHolders, arr\n  var len = b64.length\n  placeHolders = placeHoldersCount(b64)\n\n  arr = new Arr((len * 3 / 4) - placeHolders)\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len\n\n  var L = 0\n\n  for (i = 0; i < l; i += 4) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n    arr[L++] = (tmp >> 16) & 0xFF\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[L++] = tmp & 0xFF\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var output = ''\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    output += lookup[tmp >> 2]\n    output += lookup[(tmp << 4) & 0x3F]\n    output += '=='\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n    output += lookup[tmp >> 10]\n    output += lookup[(tmp >> 4) & 0x3F]\n    output += lookup[(tmp << 2) & 0x3F]\n    output += '='\n  }\n\n  parts.push(output)\n\n  return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sizes = void 0;\nvar sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexports.sizes = sizes;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sizes = void 0;\nvar sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexports.sizes = sizes;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.size = exports.default = exports.IconWrapper = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _uuid = _interopRequireDefault(require(\"uuid\"));\n\nvar _theme = require(\"@atlaskit/theme\");\n\nvar _constants = require(\"../constants\");\n\nvar getSize = function getSize(props) {\n  if (props.size) {\n    return \"height: \".concat(_constants.sizes[props.size], \"; width: \").concat(_constants.sizes[props.size], \";\");\n  }\n\n  return null;\n};\n\nvar IconWrapper = _styledComponents.default.span.withConfig({\n  displayName: \"Icon__IconWrapper\",\n  componentId: \"dyhwwi-0\"\n})([\"\\n  \", \" color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \" max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n  /* Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"], getSize, function (p) {\n  return p.primaryColor || 'currentColor';\n}, function (p) {\n  return p.secondaryColor || _theme.colors.background;\n}, getSize);\n\nexports.IconWrapper = IconWrapper;\n\nvar Icon =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inherits2.default)(Icon, _Component);\n\n  function Icon() {\n    (0, _classCallCheck2.default)(this, Icon);\n    return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Icon).apply(this, arguments));\n  }\n\n  (0, _createClass2.default)(Icon, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          Glyph = _this$props.glyph,\n          dangerouslySetGlyph = _this$props.dangerouslySetGlyph,\n          onClick = _this$props.onClick,\n          primaryColor = _this$props.primaryColor,\n          secondaryColor = _this$props.secondaryColor,\n          size = _this$props.size; // handling the glyphs as strings\n\n      if (dangerouslySetGlyph) {\n        return _react.default.createElement(IconWrapper, {\n          onClick: onClick,\n          primaryColor: primaryColor,\n          secondaryColor: secondaryColor,\n          size: size,\n          \"aria-label\": this.props.label,\n          dangerouslySetInnerHTML: {\n            __html: Icon.insertDynamicGradientID(dangerouslySetGlyph)\n          }\n        });\n      } // handling the glyphs when passed through as functions\n\n\n      return _react.default.createElement(IconWrapper, {\n        onClick: onClick,\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        size: size,\n        \"aria-label\": this.props.label\n      }, Glyph ? _react.default.createElement(Glyph, {\n        role: \"presentation\"\n      }) : null);\n    }\n  }], [{\n    key: \"insertDynamicGradientID\",\n\n    /* Icons need unique gradient IDs across instances for different gradient definitions to work\n     * correctly.\n     * A step in the icon build process replaces linear gradient IDs and their references in paths\n     * to a placeholder string so we can replace them with a dynamic ID here.\n     * Replacing the original IDs with placeholders in the build process is more robust than not\n     * using placeholders as we do not have to rely on regular expressions to find specific element\n     * to replace.\n     */\n    value: function insertDynamicGradientID(svgStr) {\n      var id = (0, _uuid.default)();\n      var replacedSvgStr = svgStr.replace(/id=\"([^\"]+)-idPlaceholder\"/g, \"id=$1-\".concat(id)).replace(/fill=\"url\\(#([^\"]+)-idPlaceholder\\)\"/g, \"fill=\\\"url(#$1-\".concat(id, \")\\\"\"));\n      return replacedSvgStr;\n    }\n  }]);\n  return Icon;\n}(_react.Component);\n\nexports.default = Icon;\n(0, _defineProperty2.default)(Icon, \"defaultProps\", {\n  onClick: function onClick() {}\n});\nvar size = Object.keys(_constants.sizes).reduce(function (p, c) {\n  return Object.assign(p, (0, _defineProperty2.default)({}, c, c));\n}, {});\nexports.size = size;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sizes = void 0;\nvar sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexports.sizes = sizes;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || 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; };\n\nexports.toArray = toArray;\nexports.default = Emoji;\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _classnames2 = require(\"classnames\");\n\nvar _classnames3 = _interopRequireDefault(_classnames2);\n\nvar _stringReplaceToArray = require(\"string-replace-to-array\");\n\nvar _stringReplaceToArray2 = _interopRequireDefault(_stringReplaceToArray);\n\nvar _emojiRegex = require(\"emoji-regex\");\n\nvar _emojiRegex2 = _interopRequireDefault(_emojiRegex);\n\nvar _asciiRegex = require(\"./asciiRegex\");\n\nvar _asciiRegex2 = _interopRequireDefault(_asciiRegex);\n\nvar _normalizeProtocol = require(\"./normalizeProtocol\");\n\nvar _normalizeProtocol2 = _interopRequireDefault(_normalizeProtocol);\n\nvar _unicodeToCodepoint = require(\"./unicodeToCodepoint\");\n\nvar _unicodeToCodepoint2 = _interopRequireDefault(_unicodeToCodepoint);\n\nvar _aliases = require(\"../data/aliases\");\n\nvar _aliases2 = _interopRequireDefault(_aliases);\n\nvar _asciiAliases = require(\"../data/asciiAliases\");\n\nvar _asciiAliases2 = _interopRequireDefault(_asciiAliases);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _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; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar asciiAliasesRegex = (0, _asciiRegex2.default)();\nvar unicodeEmojiRegex = (0, _emojiRegex2.default)();\nvar aliasesRegex = /:([\\w\\-\\_\\+]+):/g;\n\n// using em's we can ensure size matches surrounding font\nvar style = {\n  width: \"1em\",\n  height: \"1em\",\n  margin: \"0 .05em 0 .1em\",\n  verticalAlign: \"-0.1em\"\n};\n\nfunction toArray(text) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  var protocol = (0, _normalizeProtocol2.default)(options.protocol);\n\n  function replaceUnicodeEmoji(match, i) {\n    if (!options.baseUrl) {\n      return _react2.default.createElement(\n        \"span\",\n        { key: i, style: style, className: options.className },\n        match\n      );\n    }\n\n    var codepoint = (0, _unicodeToCodepoint2.default)(match, removeHelperCharacters);\n\n    // if Emojione we don't want to add helper characters in the URL\n    var removeHelperCharacters = options.emojione;\n    if (removeHelperCharacters) {\n      codepoint = codepoint.replace(/-200d/g, \"\").replace(/-fe0f/g, \"\");\n    }\n\n    var separator = options.size ? \"/\" : \"\";\n    var src = \"\" + protocol + options.baseUrl + options.size + separator + codepoint + \".\" + options.ext;\n\n    return _react2.default.createElement(\"img\", _extends({\n      key: i,\n      alt: match,\n      src: src,\n      style: style,\n      className: options.className\n    }, options.props));\n  }\n\n  function replaceAsciiAliases() {\n    var asciiAliasKeys = Object.keys(_asciiAliases2.default);\n\n    for (var _len = arguments.length, match = Array(_len), _key = 0; _key < _len; _key++) {\n      match[_key] = arguments[_key];\n    }\n\n    for (var i in asciiAliasKeys) {\n      var alias = asciiAliasKeys[i];\n      var data = _asciiAliases2.default[alias];\n      var aliasFound = match[2];\n\n      if (data.includes(aliasFound)) {\n        var isEdgeCase = match[1];\n        var fullMatchContent = match[0].slice(1, -1); // remove \":\" at the beginning and end\n        var validAsciiAlias = !_aliases2.default[fullMatchContent]; // \":\" + fullMatchContent + \":\" alias doesn't exist\n\n        if (!isEdgeCase && validAsciiAlias) {\n          return \":\" + alias + \":\";\n        }\n\n        // return the original word to replace its value in aliasesRegex\n        return match[0];\n      }\n    }\n  }\n\n  function replaceAliases() {\n    for (var _len2 = arguments.length, match = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      match[_key2] = arguments[_key2];\n    }\n\n    return _aliases2.default[match[1]] || match[0];\n  }\n\n  return (0, _stringReplaceToArray2.default)(text.replace(asciiAliasesRegex, replaceAsciiAliases).replace(aliasesRegex, replaceAliases), unicodeEmojiRegex, replaceUnicodeEmoji);\n}\n\nfunction Emoji(_ref) {\n  var text = _ref.text,\n      onlyEmojiClassName = _ref.onlyEmojiClassName,\n      _ref$options = _ref.options,\n      options = _ref$options === undefined ? {} : _ref$options,\n      className = _ref.className,\n      rest = _objectWithoutProperties(_ref, [\"text\", \"onlyEmojiClassName\", \"options\", \"className\"]);\n\n  function isOnlyEmoji(output) {\n    if (output.length > 3) return false;\n\n    for (var i = 0; i < output.length; i++) {\n      if (typeof output[i] === \"string\") return false;\n    }\n\n    return true;\n  }\n\n  var output = toArray(text, options);\n  var classes = (0, _classnames3.default)(className, _defineProperty({}, onlyEmojiClassName, isOnlyEmoji(output)));\n\n  return _react2.default.createElement(\n    \"span\",\n    _extends({}, rest, { className: classes }),\n    output\n  );\n}\n\nEmoji.propTypes = {\n  text: _propTypes2.default.string,\n  props: _propTypes2.default.object,\n  onlyEmojiClassName: _propTypes2.default.string,\n  options: _propTypes2.default.shape({\n    baseUrl: _propTypes2.default.string,\n    size: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]),\n    ext: _propTypes2.default.string,\n    className: _propTypes2.default.string\n  })\n};","/*!\n  Copyright (c) 2016 Jed Watson.\n  Licensed under the MIT License (MIT), see\n  http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tclasses.push(classNames.apply(null, arg));\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","// Inspiration: https://github.com/facebook/react/issues/3386\n\nvar invariant = require('invariant'),\n\tisString = require('lodash.isstring'),\n\tflatten = require('lodash.flatten')\n\nfunction replace (string, regexpOrSubstr, newValueOrFn) {\n\tinvariant(typeof string === 'string', 'First param must be a string')\n\tinvariant(typeof regexpOrSubstr === 'string' || regexpOrSubstr instanceof RegExp, 'Second param must be a string pattern or a regular expression')\n\n\tvar fn = (typeof regexpOrSubstr === 'string') ? replaceUsingString : replaceUsingRegexp\n\n\treturn fn(string, regexpOrSubstr, newValueOrFn)\n}\n\nfunction replaceUsingString (string, patternString, newValueOrFn) {\n\tvar index = string.indexOf(patternString)\n\n\tif (index >= 0) {\n\t\tvar arr = []\n\t\tvar endIndex = index + patternString.length\n\n\t\tif (index > 0) {\n\t\t\tarr.push(string.substring(0, index))\n\t\t}\n\n\t\tarr.push(\n\t\t\t(typeof newValueOrFn === 'function') ?\n\t\t\t\tnewValueOrFn(\n\t\t\t\t\tstring.substring(index, endIndex),\n\t\t\t\t\tindex,\n\t\t\t\t\tstring\n\t\t\t\t) :\n\t\t\t\tnewValueOrFn\n\t\t)\n\n\t\tif (endIndex < string.length) {\n\t\t\tarr.push(string.substring(endIndex))\n\t\t}\n\n\t\treturn arr\n\t} else {\n\t\treturn [string]\n\t}\n}\n\nfunction replaceUsingRegexp (string, regexp, newValueOrFn) {\n\tvar output = []\n\n\tvar replacerIsFn = (typeof newValueOrFn === 'function')\n\n\tvar storedLastIndex = regexp.lastIndex\n\tregexp.lastIndex = 0\n\n\tvar result\n\tvar lastIndex = 0\n\twhile (result = regexp.exec(string)) {\n\t\tvar index = result.index\n\n\t\tif (result[0] === '') {\n\t\t\t// When the regexp is an empty string\n\t\t\t// we still want to advance our cursor to the next item.\n\t\t\t// This is the behavior of String.replace.\n\t\t\tregexp.lastIndex++\n\t\t}\n\n\t\tif (index !== lastIndex) {\n\t\t\toutput.push(string.substring(lastIndex, index))\n\t\t}\n\n\t\tvar match = result[0]\n\t\tlastIndex = index + match.length\n\t\t\n\t\tvar out = replacerIsFn ?\n\t\t\tnewValueOrFn.apply(this, result.concat(index, result.input)) :\n\t\t\tnewValueOrFn\n\t\toutput.push(out)\n\n\t\tif (!regexp.global) {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif (lastIndex < string.length) {\n\t\toutput.push(string.substring(lastIndex))\n\t}\n\n\tregexp.lastIndex = storedLastIndex\n\treturn output\n}\n\nmodule.exports = function stringReplaceToArray (string, regexpOrSubstr, newSubStrOrFn) {\n\tif (isString(string)) {\n\t\treturn replace(string, regexpOrSubstr, newSubStrOrFn)\n\t} else if (!Array.isArray(string) || !string[0]) {\n\t\tthrow new TypeError('First argument must be an array or non-empty string');\n\t} else {\n\t\treturn flatten(string.map(function (string) {\n\t\t\tif (!isString(string)) return string\n\t\t\treturn replace(string, regexpOrSubstr, newSubStrOrFn)\n\t\t}))\n\t}\n}","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n","/**\n * lodash 4.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n","\"use strict\";\n\nmodule.exports = function () {\n\t// https://mathiasbynens.be/notes/es-unicode-property-escapes#emoji\n\treturn (/\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74)\\uDB40\\uDC7F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC68(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92])|(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2695\\u2696\\u2708]\\uFE0F|(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]))|\\uD83D\\uDC69\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2695\\u2696\\u2708]|(?:(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)\\uFE0F|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDD6-\\uDDDD])(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\u200D[\\u2640\\u2642])|\\uD83D\\uDC69\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC68(?:\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDD1-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC69\\uDC6E\\uDC70-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3D\\uDD3E\\uDDD1-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])?|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDEEB\\uDEEC\\uDEF4-\\uDEF8]|\\uD83E[\\uDD10-\\uDD3A\\uDD3C-\\uDD3E\\uDD40-\\uDD45\\uDD47-\\uDD4C\\uDD50-\\uDD6B\\uDD80-\\uDD97\\uDDC0\\uDDD0-\\uDDE6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEF8]|\\uD83E[\\uDD10-\\uDD3A\\uDD3C-\\uDD3E\\uDD40-\\uDD45\\uDD47-\\uDD4C\\uDD50-\\uDD6B\\uDD80-\\uDD97\\uDDC0\\uDDD0-\\uDDE6])\\uFE0F/g\n\t);\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function () {\n  return new RegExp(\"(\" + edgeCases + \")?(\" + names + \")((?!(\" + edgeCases + \"))[a-z0-9_\\\\-\\\\+]+:)?\", \"g\");\n};\n\nvar _asciiAliases = require(\"../data/asciiAliases\");\n\nvar _asciiAliases2 = _interopRequireDefault(_asciiAliases);\n\nvar _lodash = require(\"lodash.flatten\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction quoteRE(str) {\n  return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, \"\\\\$&\");\n}\n\nvar names = (0, _lodash2.default)(Object.keys(_asciiAliases2.default).map(function (name) {\n  return _asciiAliases2.default[name].map(function (alias) {\n    return quoteRE(alias);\n  });\n})).join(\"|\");\n\nvar edgeCases = [\"http\", \"https\"].join(\"|\");\n\n// Regex reads as following:\n//\n// Match ascii aliases with optional edge cases before it (to know if parsing is needed)\n// Additionally, after the ascii alias:\n//    - Forbid edge cases\n//    - Allow characters included in normal aliases (to check later cases like :s and :smile:)","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = normalizeProtocol;\n// ensure protocol has trailing : if missing\nfunction normalizeProtocol(protocol) {\n  if (protocol && !protocol.endsWith(\":\")) return protocol + \":\";\n  return protocol;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = unicodeToCodepoint;\n// avoid runtime RegExp creation for not so smart,\n// not JIT based, and old browsers / engines\n// https://github.com/twitter/twemoji/blob/gh-pages/2/twemoji.js#L232\nvar UFE0Fg = /\\uFE0F/g;\n\n// \\u200D is a zero-width joiner character\n// https://github.com/twitter/twemoji/blob/gh-pages/2/twemoji.js#L235\nvar U200D = String.fromCharCode(0x200d);\n\n// convert utf16 into code points\nfunction toCodePoint(input) {\n  var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"-\";\n\n  var codePoints = [];\n  var _iteratorNormalCompletion = true;\n  var _didIteratorError = false;\n  var _iteratorError = undefined;\n\n  try {\n    for (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n      var codePoint = _step.value;\n\n      codePoints.push(codePoint.codePointAt(0).toString(16));\n    }\n  } catch (err) {\n    _didIteratorError = true;\n    _iteratorError = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion && _iterator.return) {\n        _iterator.return();\n      }\n    } finally {\n      if (_didIteratorError) {\n        throw _iteratorError;\n      }\n    }\n  }\n\n  return codePoints.join(separator);\n}\n\nfunction unicodeToCodepoint(input) {\n  return toCodePoint(input.indexOf(U200D) < 0 ? input.replace(UFE0Fg, \"\") : input);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sizes = void 0;\nvar sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexports.sizes = sizes;","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license   Licensed under MIT license\n *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version   v4.2.4+314e4831\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n  var type = typeof x;\n  return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n  return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n  _isArray = Array.isArray;\n} else {\n  _isArray = function (x) {\n    return Object.prototype.toString.call(x) === '[object Array]';\n  };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n  queue[len] = callback;\n  queue[len + 1] = arg;\n  len += 2;\n  if (len === 2) {\n    // If len is 2, that means that we need to schedule an async flush.\n    // If additional callbacks are queued before the queue is flushed, they\n    // will be processed by this flush that we are scheduling.\n    if (customSchedulerFn) {\n      customSchedulerFn(flush);\n    } else {\n      scheduleFlush();\n    }\n  }\n};\n\nfunction setScheduler(scheduleFn) {\n  customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n  asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n  // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n  // see https://github.com/cujojs/when/issues/410 for details\n  return function () {\n    return process.nextTick(flush);\n  };\n}\n\n// vertx\nfunction useVertxTimer() {\n  if (typeof vertxNext !== 'undefined') {\n    return function () {\n      vertxNext(flush);\n    };\n  }\n\n  return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n  var iterations = 0;\n  var observer = new BrowserMutationObserver(flush);\n  var node = document.createTextNode('');\n  observer.observe(node, { characterData: true });\n\n  return function () {\n    node.data = iterations = ++iterations % 2;\n  };\n}\n\n// web worker\nfunction useMessageChannel() {\n  var channel = new MessageChannel();\n  channel.port1.onmessage = flush;\n  return function () {\n    return channel.port2.postMessage(0);\n  };\n}\n\nfunction useSetTimeout() {\n  // Store setTimeout reference so es6-promise will be unaffected by\n  // other code modifying setTimeout (like sinon.useFakeTimers())\n  var globalSetTimeout = setTimeout;\n  return function () {\n    return globalSetTimeout(flush, 1);\n  };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n  for (var i = 0; i < len; i += 2) {\n    var callback = queue[i];\n    var arg = queue[i + 1];\n\n    callback(arg);\n\n    queue[i] = undefined;\n    queue[i + 1] = undefined;\n  }\n\n  len = 0;\n}\n\nfunction attemptVertx() {\n  try {\n    var vertx = Function('return this')().require('vertx');\n    vertxNext = vertx.runOnLoop || vertx.runOnContext;\n    return useVertxTimer();\n  } catch (e) {\n    return useSetTimeout();\n  }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n  scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n  scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n  scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n  scheduleFlush = attemptVertx();\n} else {\n  scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n  var parent = this;\n\n  var child = new this.constructor(noop);\n\n  if (child[PROMISE_ID] === undefined) {\n    makePromise(child);\n  }\n\n  var _state = parent._state;\n\n\n  if (_state) {\n    var callback = arguments[_state - 1];\n    asap(function () {\n      return invokeCallback(_state, child, callback, parent._result);\n    });\n  } else {\n    subscribe(parent, child, onFulfillment, onRejection);\n  }\n\n  return child;\n}\n\n/**\n  `Promise.resolve` returns a promise that will become resolved with the\n  passed `value`. It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    resolve(1);\n  });\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.resolve(1);\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  @method resolve\n  @static\n  @param {Any} value value that the returned promise will be resolved with\n  Useful for tooling.\n  @return {Promise} a promise that will become fulfilled with the given\n  `value`\n*/\nfunction resolve$1(object) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (object && typeof object === 'object' && object.constructor === Constructor) {\n    return object;\n  }\n\n  var promise = new Constructor(noop);\n  resolve(promise, object);\n  return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nvar TRY_CATCH_ERROR = { error: null };\n\nfunction selfFulfillment() {\n  return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n  return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n  try {\n    return promise.then;\n  } catch (error) {\n    TRY_CATCH_ERROR.error = error;\n    return TRY_CATCH_ERROR;\n  }\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n  try {\n    then$$1.call(value, fulfillmentHandler, rejectionHandler);\n  } catch (e) {\n    return e;\n  }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n  asap(function (promise) {\n    var sealed = false;\n    var error = tryThen(then$$1, thenable, function (value) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n      if (thenable !== value) {\n        resolve(promise, value);\n      } else {\n        fulfill(promise, value);\n      }\n    }, function (reason) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n\n      reject(promise, reason);\n    }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n    if (!sealed && error) {\n      sealed = true;\n      reject(promise, error);\n    }\n  }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n  if (thenable._state === FULFILLED) {\n    fulfill(promise, thenable._result);\n  } else if (thenable._state === REJECTED) {\n    reject(promise, thenable._result);\n  } else {\n    subscribe(thenable, undefined, function (value) {\n      return resolve(promise, value);\n    }, function (reason) {\n      return reject(promise, reason);\n    });\n  }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n  if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n    handleOwnThenable(promise, maybeThenable);\n  } else {\n    if (then$$1 === TRY_CATCH_ERROR) {\n      reject(promise, TRY_CATCH_ERROR.error);\n      TRY_CATCH_ERROR.error = null;\n    } else if (then$$1 === undefined) {\n      fulfill(promise, maybeThenable);\n    } else if (isFunction(then$$1)) {\n      handleForeignThenable(promise, maybeThenable, then$$1);\n    } else {\n      fulfill(promise, maybeThenable);\n    }\n  }\n}\n\nfunction resolve(promise, value) {\n  if (promise === value) {\n    reject(promise, selfFulfillment());\n  } else if (objectOrFunction(value)) {\n    handleMaybeThenable(promise, value, getThen(value));\n  } else {\n    fulfill(promise, value);\n  }\n}\n\nfunction publishRejection(promise) {\n  if (promise._onerror) {\n    promise._onerror(promise._result);\n  }\n\n  publish(promise);\n}\n\nfunction fulfill(promise, value) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n\n  promise._result = value;\n  promise._state = FULFILLED;\n\n  if (promise._subscribers.length !== 0) {\n    asap(publish, promise);\n  }\n}\n\nfunction reject(promise, reason) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n  promise._state = REJECTED;\n  promise._result = reason;\n\n  asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n  var _subscribers = parent._subscribers;\n  var length = _subscribers.length;\n\n\n  parent._onerror = null;\n\n  _subscribers[length] = child;\n  _subscribers[length + FULFILLED] = onFulfillment;\n  _subscribers[length + REJECTED] = onRejection;\n\n  if (length === 0 && parent._state) {\n    asap(publish, parent);\n  }\n}\n\nfunction publish(promise) {\n  var subscribers = promise._subscribers;\n  var settled = promise._state;\n\n  if (subscribers.length === 0) {\n    return;\n  }\n\n  var child = void 0,\n      callback = void 0,\n      detail = promise._result;\n\n  for (var i = 0; i < subscribers.length; i += 3) {\n    child = subscribers[i];\n    callback = subscribers[i + settled];\n\n    if (child) {\n      invokeCallback(settled, child, callback, detail);\n    } else {\n      callback(detail);\n    }\n  }\n\n  promise._subscribers.length = 0;\n}\n\nfunction tryCatch(callback, detail) {\n  try {\n    return callback(detail);\n  } catch (e) {\n    TRY_CATCH_ERROR.error = e;\n    return TRY_CATCH_ERROR;\n  }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n  var hasCallback = isFunction(callback),\n      value = void 0,\n      error = void 0,\n      succeeded = void 0,\n      failed = void 0;\n\n  if (hasCallback) {\n    value = tryCatch(callback, detail);\n\n    if (value === TRY_CATCH_ERROR) {\n      failed = true;\n      error = value.error;\n      value.error = null;\n    } else {\n      succeeded = true;\n    }\n\n    if (promise === value) {\n      reject(promise, cannotReturnOwn());\n      return;\n    }\n  } else {\n    value = detail;\n    succeeded = true;\n  }\n\n  if (promise._state !== PENDING) {\n    // noop\n  } else if (hasCallback && succeeded) {\n    resolve(promise, value);\n  } else if (failed) {\n    reject(promise, error);\n  } else if (settled === FULFILLED) {\n    fulfill(promise, value);\n  } else if (settled === REJECTED) {\n    reject(promise, value);\n  }\n}\n\nfunction initializePromise(promise, resolver) {\n  try {\n    resolver(function resolvePromise(value) {\n      resolve(promise, value);\n    }, function rejectPromise(reason) {\n      reject(promise, reason);\n    });\n  } catch (e) {\n    reject(promise, e);\n  }\n}\n\nvar id = 0;\nfunction nextId() {\n  return id++;\n}\n\nfunction makePromise(promise) {\n  promise[PROMISE_ID] = id++;\n  promise._state = undefined;\n  promise._result = undefined;\n  promise._subscribers = [];\n}\n\nfunction validationError() {\n  return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n  function Enumerator(Constructor, input) {\n    this._instanceConstructor = Constructor;\n    this.promise = new Constructor(noop);\n\n    if (!this.promise[PROMISE_ID]) {\n      makePromise(this.promise);\n    }\n\n    if (isArray(input)) {\n      this.length = input.length;\n      this._remaining = input.length;\n\n      this._result = new Array(this.length);\n\n      if (this.length === 0) {\n        fulfill(this.promise, this._result);\n      } else {\n        this.length = this.length || 0;\n        this._enumerate(input);\n        if (this._remaining === 0) {\n          fulfill(this.promise, this._result);\n        }\n      }\n    } else {\n      reject(this.promise, validationError());\n    }\n  }\n\n  Enumerator.prototype._enumerate = function _enumerate(input) {\n    for (var i = 0; this._state === PENDING && i < input.length; i++) {\n      this._eachEntry(input[i], i);\n    }\n  };\n\n  Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n    var c = this._instanceConstructor;\n    var resolve$$1 = c.resolve;\n\n\n    if (resolve$$1 === resolve$1) {\n      var _then = getThen(entry);\n\n      if (_then === then && entry._state !== PENDING) {\n        this._settledAt(entry._state, i, entry._result);\n      } else if (typeof _then !== 'function') {\n        this._remaining--;\n        this._result[i] = entry;\n      } else if (c === Promise$1) {\n        var promise = new c(noop);\n        handleMaybeThenable(promise, entry, _then);\n        this._willSettleAt(promise, i);\n      } else {\n        this._willSettleAt(new c(function (resolve$$1) {\n          return resolve$$1(entry);\n        }), i);\n      }\n    } else {\n      this._willSettleAt(resolve$$1(entry), i);\n    }\n  };\n\n  Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n    var promise = this.promise;\n\n\n    if (promise._state === PENDING) {\n      this._remaining--;\n\n      if (state === REJECTED) {\n        reject(promise, value);\n      } else {\n        this._result[i] = value;\n      }\n    }\n\n    if (this._remaining === 0) {\n      fulfill(promise, this._result);\n    }\n  };\n\n  Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n    var enumerator = this;\n\n    subscribe(promise, undefined, function (value) {\n      return enumerator._settledAt(FULFILLED, i, value);\n    }, function (reason) {\n      return enumerator._settledAt(REJECTED, i, reason);\n    });\n  };\n\n  return Enumerator;\n}();\n\n/**\n  `Promise.all` accepts an array of promises, and returns a new promise which\n  is fulfilled with an array of fulfillment values for the passed promises, or\n  rejected with the reason of the first passed promise to be rejected. It casts all\n  elements of the passed iterable to promises as it runs this algorithm.\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = resolve(2);\n  let promise3 = resolve(3);\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // The array here would be [ 1, 2, 3 ];\n  });\n  ```\n\n  If any of the `promises` given to `all` are rejected, the first promise\n  that is rejected will be given as an argument to the returned promises's\n  rejection handler. For example:\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = reject(new Error(\"2\"));\n  let promise3 = reject(new Error(\"3\"));\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // Code here never runs because there are rejected promises!\n  }, function(error) {\n    // error.message === \"2\"\n  });\n  ```\n\n  @method all\n  @static\n  @param {Array} entries array of promises\n  @param {String} label optional string for labeling the promise.\n  Useful for tooling.\n  @return {Promise} promise that is fulfilled when all `promises` have been\n  fulfilled, or rejected if any of them become rejected.\n  @static\n*/\nfunction all(entries) {\n  return new Enumerator(this, entries).promise;\n}\n\n/**\n  `Promise.race` returns a new promise which is settled in the same way as the\n  first passed promise to settle.\n\n  Example:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 2');\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // result === 'promise 2' because it was resolved before promise1\n    // was resolved.\n  });\n  ```\n\n  `Promise.race` is deterministic in that only the state of the first\n  settled promise matters. For example, even if other promises given to the\n  `promises` array argument are resolved, but the first settled promise has\n  become rejected before the other promises became fulfilled, the returned\n  promise will become rejected:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      reject(new Error('promise 2'));\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // Code here never runs\n  }, function(reason){\n    // reason.message === 'promise 2' because promise 2 became rejected before\n    // promise 1 became fulfilled\n  });\n  ```\n\n  An example real-world use case is implementing timeouts:\n\n  ```javascript\n  Promise.race([ajax('foo.json'), timeout(5000)])\n  ```\n\n  @method race\n  @static\n  @param {Array} promises array of promises to observe\n  Useful for tooling.\n  @return {Promise} a promise which settles in the same way as the first passed\n  promise to settle.\n*/\nfunction race(entries) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (!isArray(entries)) {\n    return new Constructor(function (_, reject) {\n      return reject(new TypeError('You must pass an array to race.'));\n    });\n  } else {\n    return new Constructor(function (resolve, reject) {\n      var length = entries.length;\n      for (var i = 0; i < length; i++) {\n        Constructor.resolve(entries[i]).then(resolve, reject);\n      }\n    });\n  }\n}\n\n/**\n  `Promise.reject` returns a promise rejected with the passed `reason`.\n  It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    reject(new Error('WHOOPS'));\n  });\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.reject(new Error('WHOOPS'));\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  @method reject\n  @static\n  @param {Any} reason value that the returned promise will be rejected with.\n  Useful for tooling.\n  @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n  /*jshint validthis:true */\n  var Constructor = this;\n  var promise = new Constructor(noop);\n  reject(promise, reason);\n  return promise;\n}\n\nfunction needsResolver() {\n  throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n  throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n  Promise objects represent the eventual result of an asynchronous operation. The\n  primary way of interacting with a promise is through its `then` method, which\n  registers callbacks to receive either a promise's eventual value or the reason\n  why the promise cannot be fulfilled.\n\n  Terminology\n  -----------\n\n  - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n  - `thenable` is an object or function that defines a `then` method.\n  - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n  - `exception` is a value that is thrown using the throw statement.\n  - `reason` is a value that indicates why a promise was rejected.\n  - `settled` the final resting state of a promise, fulfilled or rejected.\n\n  A promise can be in one of three states: pending, fulfilled, or rejected.\n\n  Promises that are fulfilled have a fulfillment value and are in the fulfilled\n  state.  Promises that are rejected have a rejection reason and are in the\n  rejected state.  A fulfillment value is never a thenable.\n\n  Promises can also be said to *resolve* a value.  If this value is also a\n  promise, then the original promise's settled state will match the value's\n  settled state.  So a promise that *resolves* a promise that rejects will\n  itself reject, and a promise that *resolves* a promise that fulfills will\n  itself fulfill.\n\n\n  Basic Usage:\n  ------------\n\n  ```js\n  let promise = new Promise(function(resolve, reject) {\n    // on success\n    resolve(value);\n\n    // on failure\n    reject(reason);\n  });\n\n  promise.then(function(value) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Advanced Usage:\n  ---------------\n\n  Promises shine when abstracting away asynchronous interactions such as\n  `XMLHttpRequest`s.\n\n  ```js\n  function getJSON(url) {\n    return new Promise(function(resolve, reject){\n      let xhr = new XMLHttpRequest();\n\n      xhr.open('GET', url);\n      xhr.onreadystatechange = handler;\n      xhr.responseType = 'json';\n      xhr.setRequestHeader('Accept', 'application/json');\n      xhr.send();\n\n      function handler() {\n        if (this.readyState === this.DONE) {\n          if (this.status === 200) {\n            resolve(this.response);\n          } else {\n            reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n          }\n        }\n      };\n    });\n  }\n\n  getJSON('/posts.json').then(function(json) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Unlike callbacks, promises are great composable primitives.\n\n  ```js\n  Promise.all([\n    getJSON('/posts'),\n    getJSON('/comments')\n  ]).then(function(values){\n    values[0] // => postsJSON\n    values[1] // => commentsJSON\n\n    return values;\n  });\n  ```\n\n  @class Promise\n  @param {Function} resolver\n  Useful for tooling.\n  @constructor\n*/\n\nvar Promise$1 = function () {\n  function Promise(resolver) {\n    this[PROMISE_ID] = nextId();\n    this._result = this._state = undefined;\n    this._subscribers = [];\n\n    if (noop !== resolver) {\n      typeof resolver !== 'function' && needsResolver();\n      this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n    }\n  }\n\n  /**\n  The primary way of interacting with a promise is through its `then` method,\n  which registers callbacks to receive either a promise's eventual value or the\n  reason why the promise cannot be fulfilled.\n   ```js\n  findUser().then(function(user){\n    // user is available\n  }, function(reason){\n    // user is unavailable, and you are given the reason why\n  });\n  ```\n   Chaining\n  --------\n   The return value of `then` is itself a promise.  This second, 'downstream'\n  promise is resolved with the return value of the first promise's fulfillment\n  or rejection handler, or rejected if the handler throws an exception.\n   ```js\n  findUser().then(function (user) {\n    return user.name;\n  }, function (reason) {\n    return 'default name';\n  }).then(function (userName) {\n    // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n    // will be `'default name'`\n  });\n   findUser().then(function (user) {\n    throw new Error('Found user, but still unhappy');\n  }, function (reason) {\n    throw new Error('`findUser` rejected and we're unhappy');\n  }).then(function (value) {\n    // never reached\n  }, function (reason) {\n    // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n    // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n  });\n  ```\n  If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n   ```js\n  findUser().then(function (user) {\n    throw new PedagogicalException('Upstream error');\n  }).then(function (value) {\n    // never reached\n  }).then(function (value) {\n    // never reached\n  }, function (reason) {\n    // The `PedgagocialException` is propagated all the way down to here\n  });\n  ```\n   Assimilation\n  ------------\n   Sometimes the value you want to propagate to a downstream promise can only be\n  retrieved asynchronously. This can be achieved by returning a promise in the\n  fulfillment or rejection handler. The downstream promise will then be pending\n  until the returned promise is settled. This is called *assimilation*.\n   ```js\n  findUser().then(function (user) {\n    return findCommentsByAuthor(user);\n  }).then(function (comments) {\n    // The user's comments are now available\n  });\n  ```\n   If the assimliated promise rejects, then the downstream promise will also reject.\n   ```js\n  findUser().then(function (user) {\n    return findCommentsByAuthor(user);\n  }).then(function (comments) {\n    // If `findCommentsByAuthor` fulfills, we'll have the value here\n  }, function (reason) {\n    // If `findCommentsByAuthor` rejects, we'll have the reason here\n  });\n  ```\n   Simple Example\n  --------------\n   Synchronous Example\n   ```javascript\n  let result;\n   try {\n    result = findResult();\n    // success\n  } catch(reason) {\n    // failure\n  }\n  ```\n   Errback Example\n   ```js\n  findResult(function(result, err){\n    if (err) {\n      // failure\n    } else {\n      // success\n    }\n  });\n  ```\n   Promise Example;\n   ```javascript\n  findResult().then(function(result){\n    // success\n  }, function(reason){\n    // failure\n  });\n  ```\n   Advanced Example\n  --------------\n   Synchronous Example\n   ```javascript\n  let author, books;\n   try {\n    author = findAuthor();\n    books  = findBooksByAuthor(author);\n    // success\n  } catch(reason) {\n    // failure\n  }\n  ```\n   Errback Example\n   ```js\n   function foundBooks(books) {\n   }\n   function failure(reason) {\n   }\n   findAuthor(function(author, err){\n    if (err) {\n      failure(err);\n      // failure\n    } else {\n      try {\n        findBoooksByAuthor(author, function(books, err) {\n          if (err) {\n            failure(err);\n          } else {\n            try {\n              foundBooks(books);\n            } catch(reason) {\n              failure(reason);\n            }\n          }\n        });\n      } catch(error) {\n        failure(err);\n      }\n      // success\n    }\n  });\n  ```\n   Promise Example;\n   ```javascript\n  findAuthor().\n    then(findBooksByAuthor).\n    then(function(books){\n      // found books\n  }).catch(function(reason){\n    // something went wrong\n  });\n  ```\n   @method then\n  @param {Function} onFulfilled\n  @param {Function} onRejected\n  Useful for tooling.\n  @return {Promise}\n  */\n\n  /**\n  `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n  as the catch block of a try/catch statement.\n  ```js\n  function findAuthor(){\n  throw new Error('couldn't find that author');\n  }\n  // synchronous\n  try {\n  findAuthor();\n  } catch(reason) {\n  // something went wrong\n  }\n  // async with promises\n  findAuthor().catch(function(reason){\n  // something went wrong\n  });\n  ```\n  @method catch\n  @param {Function} onRejection\n  Useful for tooling.\n  @return {Promise}\n  */\n\n\n  Promise.prototype.catch = function _catch(onRejection) {\n    return this.then(null, onRejection);\n  };\n\n  /**\n    `finally` will be invoked regardless of the promise's fate just as native\n    try/catch/finally behaves\n  \n    Synchronous example:\n  \n    ```js\n    findAuthor() {\n      if (Math.random() > 0.5) {\n        throw new Error();\n      }\n      return new Author();\n    }\n  \n    try {\n      return findAuthor(); // succeed or fail\n    } catch(error) {\n      return findOtherAuther();\n    } finally {\n      // always runs\n      // doesn't affect the return value\n    }\n    ```\n  \n    Asynchronous example:\n  \n    ```js\n    findAuthor().catch(function(reason){\n      return findOtherAuther();\n    }).finally(function(){\n      // author was either found, or not\n    });\n    ```\n  \n    @method finally\n    @param {Function} callback\n    @return {Promise}\n  */\n\n\n  Promise.prototype.finally = function _finally(callback) {\n    var promise = this;\n    var constructor = promise.constructor;\n\n    return promise.then(function (value) {\n      return constructor.resolve(callback()).then(function () {\n        return value;\n      });\n    }, function (reason) {\n      return constructor.resolve(callback()).then(function () {\n        throw reason;\n      });\n    });\n  };\n\n  return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n  var local = void 0;\n\n  if (typeof global !== 'undefined') {\n    local = global;\n  } else if (typeof self !== 'undefined') {\n    local = self;\n  } else {\n    try {\n      local = Function('return this')();\n    } catch (e) {\n      throw new Error('polyfill failed because global object is unavailable in this environment');\n    }\n  }\n\n  var P = local.Promise;\n\n  if (P) {\n    var promiseToString = null;\n    try {\n      promiseToString = Object.prototype.toString.call(P.resolve());\n    } catch (e) {\n      // silently ignored\n    }\n\n    if (promiseToString === '[object Promise]' && !P.cast) {\n      return;\n    }\n  }\n\n  local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n","// the whatwg-fetch polyfill installs the fetch() function\n// on the global object (window or self)\n//\n// Return that as the export for use in Webpack, Browserify etc.\nrequire('whatwg-fetch');\nmodule.exports = self.fetch.bind(self);\n","(function(self) {\n  'use strict';\n\n  if (self.fetch) {\n    return\n  }\n\n  var support = {\n    searchParams: 'URLSearchParams' in self,\n    iterable: 'Symbol' in self && 'iterator' in Symbol,\n    blob: 'FileReader' in self && 'Blob' in self && (function() {\n      try {\n        new Blob()\n        return true\n      } catch(e) {\n        return false\n      }\n    })(),\n    formData: 'FormData' in self,\n    arrayBuffer: 'ArrayBuffer' in self\n  }\n\n  if (support.arrayBuffer) {\n    var viewClasses = [\n      '[object Int8Array]',\n      '[object Uint8Array]',\n      '[object Uint8ClampedArray]',\n      '[object Int16Array]',\n      '[object Uint16Array]',\n      '[object Int32Array]',\n      '[object Uint32Array]',\n      '[object Float32Array]',\n      '[object Float64Array]'\n    ]\n\n    var isDataView = function(obj) {\n      return obj && DataView.prototype.isPrototypeOf(obj)\n    }\n\n    var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n      return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n    }\n  }\n\n  function normalizeName(name) {\n    if (typeof name !== 'string') {\n      name = String(name)\n    }\n    if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n      throw new TypeError('Invalid character in header field name')\n    }\n    return name.toLowerCase()\n  }\n\n  function normalizeValue(value) {\n    if (typeof value !== 'string') {\n      value = String(value)\n    }\n    return value\n  }\n\n  // Build a destructive iterator for the value list\n  function iteratorFor(items) {\n    var iterator = {\n      next: function() {\n        var value = items.shift()\n        return {done: value === undefined, value: value}\n      }\n    }\n\n    if (support.iterable) {\n      iterator[Symbol.iterator] = function() {\n        return iterator\n      }\n    }\n\n    return iterator\n  }\n\n  function Headers(headers) {\n    this.map = {}\n\n    if (headers instanceof Headers) {\n      headers.forEach(function(value, name) {\n        this.append(name, value)\n      }, this)\n    } else if (Array.isArray(headers)) {\n      headers.forEach(function(header) {\n        this.append(header[0], header[1])\n      }, this)\n    } else if (headers) {\n      Object.getOwnPropertyNames(headers).forEach(function(name) {\n        this.append(name, headers[name])\n      }, this)\n    }\n  }\n\n  Headers.prototype.append = function(name, value) {\n    name = normalizeName(name)\n    value = normalizeValue(value)\n    var oldValue = this.map[name]\n    this.map[name] = oldValue ? oldValue+','+value : value\n  }\n\n  Headers.prototype['delete'] = function(name) {\n    delete this.map[normalizeName(name)]\n  }\n\n  Headers.prototype.get = function(name) {\n    name = normalizeName(name)\n    return this.has(name) ? this.map[name] : null\n  }\n\n  Headers.prototype.has = function(name) {\n    return this.map.hasOwnProperty(normalizeName(name))\n  }\n\n  Headers.prototype.set = function(name, value) {\n    this.map[normalizeName(name)] = normalizeValue(value)\n  }\n\n  Headers.prototype.forEach = function(callback, thisArg) {\n    for (var name in this.map) {\n      if (this.map.hasOwnProperty(name)) {\n        callback.call(thisArg, this.map[name], name, this)\n      }\n    }\n  }\n\n  Headers.prototype.keys = function() {\n    var items = []\n    this.forEach(function(value, name) { items.push(name) })\n    return iteratorFor(items)\n  }\n\n  Headers.prototype.values = function() {\n    var items = []\n    this.forEach(function(value) { items.push(value) })\n    return iteratorFor(items)\n  }\n\n  Headers.prototype.entries = function() {\n    var items = []\n    this.forEach(function(value, name) { items.push([name, value]) })\n    return iteratorFor(items)\n  }\n\n  if (support.iterable) {\n    Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n  }\n\n  function consumed(body) {\n    if (body.bodyUsed) {\n      return Promise.reject(new TypeError('Already read'))\n    }\n    body.bodyUsed = true\n  }\n\n  function fileReaderReady(reader) {\n    return new Promise(function(resolve, reject) {\n      reader.onload = function() {\n        resolve(reader.result)\n      }\n      reader.onerror = function() {\n        reject(reader.error)\n      }\n    })\n  }\n\n  function readBlobAsArrayBuffer(blob) {\n    var reader = new FileReader()\n    var promise = fileReaderReady(reader)\n    reader.readAsArrayBuffer(blob)\n    return promise\n  }\n\n  function readBlobAsText(blob) {\n    var reader = new FileReader()\n    var promise = fileReaderReady(reader)\n    reader.readAsText(blob)\n    return promise\n  }\n\n  function readArrayBufferAsText(buf) {\n    var view = new Uint8Array(buf)\n    var chars = new Array(view.length)\n\n    for (var i = 0; i < view.length; i++) {\n      chars[i] = String.fromCharCode(view[i])\n    }\n    return chars.join('')\n  }\n\n  function bufferClone(buf) {\n    if (buf.slice) {\n      return buf.slice(0)\n    } else {\n      var view = new Uint8Array(buf.byteLength)\n      view.set(new Uint8Array(buf))\n      return view.buffer\n    }\n  }\n\n  function Body() {\n    this.bodyUsed = false\n\n    this._initBody = function(body) {\n      this._bodyInit = body\n      if (!body) {\n        this._bodyText = ''\n      } else if (typeof body === 'string') {\n        this._bodyText = body\n      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n        this._bodyBlob = body\n      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n        this._bodyFormData = body\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this._bodyText = body.toString()\n      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n        this._bodyArrayBuffer = bufferClone(body.buffer)\n        // IE 10-11 can't handle a DataView body.\n        this._bodyInit = new Blob([this._bodyArrayBuffer])\n      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n        this._bodyArrayBuffer = bufferClone(body)\n      } else {\n        throw new Error('unsupported BodyInit type')\n      }\n\n      if (!this.headers.get('content-type')) {\n        if (typeof body === 'string') {\n          this.headers.set('content-type', 'text/plain;charset=UTF-8')\n        } else if (this._bodyBlob && this._bodyBlob.type) {\n          this.headers.set('content-type', this._bodyBlob.type)\n        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n        }\n      }\n    }\n\n    if (support.blob) {\n      this.blob = function() {\n        var rejected = consumed(this)\n        if (rejected) {\n          return rejected\n        }\n\n        if (this._bodyBlob) {\n          return Promise.resolve(this._bodyBlob)\n        } else if (this._bodyArrayBuffer) {\n          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n        } else if (this._bodyFormData) {\n          throw new Error('could not read FormData body as blob')\n        } else {\n          return Promise.resolve(new Blob([this._bodyText]))\n        }\n      }\n\n      this.arrayBuffer = function() {\n        if (this._bodyArrayBuffer) {\n          return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n        } else {\n          return this.blob().then(readBlobAsArrayBuffer)\n        }\n      }\n    }\n\n    this.text = function() {\n      var rejected = consumed(this)\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return readBlobAsText(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as text')\n      } else {\n        return Promise.resolve(this._bodyText)\n      }\n    }\n\n    if (support.formData) {\n      this.formData = function() {\n        return this.text().then(decode)\n      }\n    }\n\n    this.json = function() {\n      return this.text().then(JSON.parse)\n    }\n\n    return this\n  }\n\n  // HTTP methods whose capitalization should be normalized\n  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n  function normalizeMethod(method) {\n    var upcased = method.toUpperCase()\n    return (methods.indexOf(upcased) > -1) ? upcased : method\n  }\n\n  function Request(input, options) {\n    options = options || {}\n    var body = options.body\n\n    if (input instanceof Request) {\n      if (input.bodyUsed) {\n        throw new TypeError('Already read')\n      }\n      this.url = input.url\n      this.credentials = input.credentials\n      if (!options.headers) {\n        this.headers = new Headers(input.headers)\n      }\n      this.method = input.method\n      this.mode = input.mode\n      if (!body && input._bodyInit != null) {\n        body = input._bodyInit\n        input.bodyUsed = true\n      }\n    } else {\n      this.url = String(input)\n    }\n\n    this.credentials = options.credentials || this.credentials || 'omit'\n    if (options.headers || !this.headers) {\n      this.headers = new Headers(options.headers)\n    }\n    this.method = normalizeMethod(options.method || this.method || 'GET')\n    this.mode = options.mode || this.mode || null\n    this.referrer = null\n\n    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n      throw new TypeError('Body not allowed for GET or HEAD requests')\n    }\n    this._initBody(body)\n  }\n\n  Request.prototype.clone = function() {\n    return new Request(this, { body: this._bodyInit })\n  }\n\n  function decode(body) {\n    var form = new FormData()\n    body.trim().split('&').forEach(function(bytes) {\n      if (bytes) {\n        var split = bytes.split('=')\n        var name = split.shift().replace(/\\+/g, ' ')\n        var value = split.join('=').replace(/\\+/g, ' ')\n        form.append(decodeURIComponent(name), decodeURIComponent(value))\n      }\n    })\n    return form\n  }\n\n  function parseHeaders(rawHeaders) {\n    var headers = new Headers()\n    rawHeaders.split(/\\r?\\n/).forEach(function(line) {\n      var parts = line.split(':')\n      var key = parts.shift().trim()\n      if (key) {\n        var value = parts.join(':').trim()\n        headers.append(key, value)\n      }\n    })\n    return headers\n  }\n\n  Body.call(Request.prototype)\n\n  function Response(bodyInit, options) {\n    if (!options) {\n      options = {}\n    }\n\n    this.type = 'default'\n    this.status = 'status' in options ? options.status : 200\n    this.ok = this.status >= 200 && this.status < 300\n    this.statusText = 'statusText' in options ? options.statusText : 'OK'\n    this.headers = new Headers(options.headers)\n    this.url = options.url || ''\n    this._initBody(bodyInit)\n  }\n\n  Body.call(Response.prototype)\n\n  Response.prototype.clone = function() {\n    return new Response(this._bodyInit, {\n      status: this.status,\n      statusText: this.statusText,\n      headers: new Headers(this.headers),\n      url: this.url\n    })\n  }\n\n  Response.error = function() {\n    var response = new Response(null, {status: 0, statusText: ''})\n    response.type = 'error'\n    return response\n  }\n\n  var redirectStatuses = [301, 302, 303, 307, 308]\n\n  Response.redirect = function(url, status) {\n    if (redirectStatuses.indexOf(status) === -1) {\n      throw new RangeError('Invalid status code')\n    }\n\n    return new Response(null, {status: status, headers: {location: url}})\n  }\n\n  self.Headers = Headers\n  self.Request = Request\n  self.Response = Response\n\n  self.fetch = function(input, init) {\n    return new Promise(function(resolve, reject) {\n      var request = new Request(input, init)\n      var xhr = new XMLHttpRequest()\n\n      xhr.onload = function() {\n        var options = {\n          status: xhr.status,\n          statusText: xhr.statusText,\n          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n        }\n        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n        var body = 'response' in xhr ? xhr.response : xhr.responseText\n        resolve(new Response(body, options))\n      }\n\n      xhr.onerror = function() {\n        reject(new TypeError('Network request failed'))\n      }\n\n      xhr.ontimeout = function() {\n        reject(new TypeError('Network request failed'))\n      }\n\n      xhr.open(request.method, request.url, true)\n\n      if (request.credentials === 'include') {\n        xhr.withCredentials = true\n      }\n\n      if ('responseType' in xhr && support.blob) {\n        xhr.responseType = 'blob'\n      }\n\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value)\n      })\n\n      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n    })\n  }\n  self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar RequestMethod;\r\n(function (RequestMethod) {\r\n    RequestMethod[\"GET\"] = \"GET\";\r\n    RequestMethod[\"PATCH\"] = \"PATCH\";\r\n    RequestMethod[\"POST\"] = \"POST\";\r\n    RequestMethod[\"PUT\"] = \"PUT\";\r\n    RequestMethod[\"DELETE\"] = \"DELETE\";\r\n})(RequestMethod = exports.RequestMethod || (exports.RequestMethod = {}));\r\n//# sourceMappingURL=RequestMethod.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar GraphHelper = (function () {\r\n    function GraphHelper() {\r\n    }\r\n    GraphHelper.serializeContent = function (content) {\r\n        var className = content.constructor.name;\r\n        if (className === 'Buffer'\r\n            || className === 'Blob'\r\n            || className === 'File'\r\n            || className === 'FormData'\r\n            || typeof content === 'string') {\r\n            return content;\r\n        }\r\n        if (className === 'ArrayBuffer') {\r\n            content = Buffer.from(content);\r\n        }\r\n        else if (className === 'Int8Array'\r\n            || className === 'Int16Array'\r\n            || className === 'Int32Array'\r\n            || className === 'Uint8Array'\r\n            || className === 'Uint16Array'\r\n            || className === 'Uint32Array'\r\n            || className === 'Uint8ClampedArray'\r\n            || className === 'Float32Array'\r\n            || className === 'Float64Array'\r\n            || className === 'DataView') {\r\n            content = Buffer.from(content.buffer);\r\n        }\r\n        else {\r\n            try {\r\n                content = JSON.stringify(content);\r\n            }\r\n            catch (error) {\r\n                console.log(error);\r\n                throw new Error('Invalid JSON content');\r\n            }\r\n        }\r\n        return content;\r\n    };\r\n    return GraphHelper;\r\n}());\r\nexports.GraphHelper = GraphHelper;\r\n//# sourceMappingURL=GraphHelper.js.map","\"use strict\";\nexports.__esModule = true;\nvar WindowsZoneName;\n(function (WindowsZoneName) {\n    WindowsZoneName[\"DatelineStandardTime\"] = \"Dateline Standard Time\";\n    WindowsZoneName[\"UtcMinus_11\"] = \"UTC-11\";\n    WindowsZoneName[\"AleutianStandardTime\"] = \"Aleutian Standard Time\";\n    WindowsZoneName[\"HawaiianStandardTime\"] = \"Hawaiian Standard Time\";\n    WindowsZoneName[\"MarquesasStandardTime\"] = \"Marquesas Standard Time\";\n    WindowsZoneName[\"AlaskanStandardTime\"] = \"Alaskan Standard Time\";\n    WindowsZoneName[\"UtcMinus_09\"] = \"UTC-09\";\n    WindowsZoneName[\"PacificStandardTimeMexico\"] = \"Pacific Standard Time (Mexico)\";\n    WindowsZoneName[\"UtcMinus_08\"] = \"UTC-08\";\n    WindowsZoneName[\"PacificStandardTime\"] = \"Pacific Standard Time\";\n    WindowsZoneName[\"UsMountainStandardTime\"] = \"US Mountain Standard Time\";\n    WindowsZoneName[\"MountainStandardTimeMexico\"] = \"Mountain Standard Time (Mexico)\";\n    WindowsZoneName[\"MountainStandardTime\"] = \"Mountain Standard Time\";\n    WindowsZoneName[\"CentralAmericaStandardTime\"] = \"Central America Standard Time\";\n    WindowsZoneName[\"CentralStandardTime\"] = \"Central Standard Time\";\n    WindowsZoneName[\"EasterIslandStandardTime\"] = \"Easter Island Standard Time\";\n    WindowsZoneName[\"CentralStandardTimeMexico\"] = \"Central Standard Time (Mexico)\";\n    WindowsZoneName[\"CanadaCentralStandardTime\"] = \"Canada Central Standard Time\";\n    WindowsZoneName[\"SaPacificStandardTime\"] = \"SA Pacific Standard Time\";\n    WindowsZoneName[\"EasternStandardTimeMexico\"] = \"Eastern Standard Time (Mexico)\";\n    WindowsZoneName[\"EasternStandardTime\"] = \"Eastern Standard Time\";\n    WindowsZoneName[\"HaitiStandardTime\"] = \"Haiti Standard Time\";\n    WindowsZoneName[\"CubaStandardTime\"] = \"Cuba Standard Time\";\n    WindowsZoneName[\"UsEasternStandardTime\"] = \"US Eastern Standard Time\";\n    WindowsZoneName[\"ParaguayStandardTime\"] = \"Paraguay Standard Time\";\n    WindowsZoneName[\"AtlanticStandardTime\"] = \"Atlantic Standard Time\";\n    WindowsZoneName[\"VenezuelaStandardTime\"] = \"Venezuela Standard Time\";\n    WindowsZoneName[\"CentralBrazilianStandardTime\"] = \"Central Brazilian Standard Time\";\n    WindowsZoneName[\"SaWesternStandardTime\"] = \"SA Western Standard Time\";\n    WindowsZoneName[\"PacificSaStandardTime\"] = \"Pacific SA Standard Time\";\n    WindowsZoneName[\"TurksAndCaicosStandardTime\"] = \"Turks And Caicos Standard Time\";\n    WindowsZoneName[\"NewfoundlandStandardTime\"] = \"Newfoundland Standard Time\";\n    WindowsZoneName[\"TocantinsStandardTime\"] = \"Tocantins Standard Time\";\n    WindowsZoneName[\"ESouthAmericaStandardTime\"] = \"E. South America Standard Time\";\n    WindowsZoneName[\"SaEasternStandardTime\"] = \"SA Eastern Standard Time\";\n    WindowsZoneName[\"ArgentinaStandardTime\"] = \"Argentina Standard Time\";\n    WindowsZoneName[\"GreenlandStandardTime\"] = \"Greenland Standard Time\";\n    WindowsZoneName[\"MontevideoStandardTime\"] = \"Montevideo Standard Time\";\n    WindowsZoneName[\"MagallanesStandardTime\"] = \"Magallanes Standard Time\";\n    WindowsZoneName[\"SaintPierreStandardTime\"] = \"Saint Pierre Standard Time\";\n    WindowsZoneName[\"BahiaStandardTime\"] = \"Bahia Standard Time\";\n    WindowsZoneName[\"UtcMinus_02\"] = \"UTC-02\";\n    WindowsZoneName[\"AzoresStandardTime\"] = \"Azores Standard Time\";\n    WindowsZoneName[\"CapeVerdeStandardTime\"] = \"Cape Verde Standard Time\";\n    WindowsZoneName[\"Utc\"] = \"UTC\";\n    WindowsZoneName[\"GmtStandardTime\"] = \"GMT Standard Time\";\n    WindowsZoneName[\"GreenwichStandardTime\"] = \"Greenwich Standard Time\";\n    WindowsZoneName[\"WEuropeStandardTime\"] = \"W. Europe Standard Time\";\n    WindowsZoneName[\"CentralEuropeStandardTime\"] = \"Central Europe Standard Time\";\n    WindowsZoneName[\"RomanceStandardTime\"] = \"Romance Standard Time\";\n    WindowsZoneName[\"MoroccoStandardTime\"] = \"Morocco Standard Time\";\n    WindowsZoneName[\"SaoTomeStandardTime\"] = \"Sao Tome Standard Time\";\n    WindowsZoneName[\"CentralEuropeanStandardTime\"] = \"Central European Standard Time\";\n    WindowsZoneName[\"WCentralAfricaStandardTime\"] = \"W. Central Africa Standard Time\";\n    WindowsZoneName[\"JordanStandardTime\"] = \"Jordan Standard Time\";\n    WindowsZoneName[\"GtbStandardTime\"] = \"GTB Standard Time\";\n    WindowsZoneName[\"MiddleEastStandardTime\"] = \"Middle East Standard Time\";\n    WindowsZoneName[\"EgyptStandardTime\"] = \"Egypt Standard Time\";\n    WindowsZoneName[\"EEuropeStandardTime\"] = \"E. Europe Standard Time\";\n    WindowsZoneName[\"SyriaStandardTime\"] = \"Syria Standard Time\";\n    WindowsZoneName[\"WestBankStandardTime\"] = \"West Bank Standard Time\";\n    WindowsZoneName[\"SouthAfricaStandardTime\"] = \"South Africa Standard Time\";\n    WindowsZoneName[\"FleStandardTime\"] = \"FLE Standard Time\";\n    WindowsZoneName[\"IsraelStandardTime\"] = \"Israel Standard Time\";\n    WindowsZoneName[\"KaliningradStandardTime\"] = \"Kaliningrad Standard Time\";\n    WindowsZoneName[\"SudanStandardTime\"] = \"Sudan Standard Time\";\n    WindowsZoneName[\"LibyaStandardTime\"] = \"Libya Standard Time\";\n    WindowsZoneName[\"NamibiaStandardTime\"] = \"Namibia Standard Time\";\n    WindowsZoneName[\"ArabicStandardTime\"] = \"Arabic Standard Time\";\n    WindowsZoneName[\"TurkeyStandardTime\"] = \"Turkey Standard Time\";\n    WindowsZoneName[\"ArabStandardTime\"] = \"Arab Standard Time\";\n    WindowsZoneName[\"BelarusStandardTime\"] = \"Belarus Standard Time\";\n    WindowsZoneName[\"RussianStandardTime\"] = \"Russian Standard Time\";\n    WindowsZoneName[\"EAfricaStandardTime\"] = \"E. Africa Standard Time\";\n    WindowsZoneName[\"IranStandardTime\"] = \"Iran Standard Time\";\n    WindowsZoneName[\"ArabianStandardTime\"] = \"Arabian Standard Time\";\n    WindowsZoneName[\"AstrakhanStandardTime\"] = \"Astrakhan Standard Time\";\n    WindowsZoneName[\"AzerbaijanStandardTime\"] = \"Azerbaijan Standard Time\";\n    WindowsZoneName[\"RussiaTimeZone_3\"] = \"Russia Time Zone 3\";\n    WindowsZoneName[\"MauritiusStandardTime\"] = \"Mauritius Standard Time\";\n    WindowsZoneName[\"SaratovStandardTime\"] = \"Saratov Standard Time\";\n    WindowsZoneName[\"GeorgianStandardTime\"] = \"Georgian Standard Time\";\n    WindowsZoneName[\"CaucasusStandardTime\"] = \"Caucasus Standard Time\";\n    WindowsZoneName[\"AfghanistanStandardTime\"] = \"Afghanistan Standard Time\";\n    WindowsZoneName[\"WestAsiaStandardTime\"] = \"West Asia Standard Time\";\n    WindowsZoneName[\"EkaterinburgStandardTime\"] = \"Ekaterinburg Standard Time\";\n    WindowsZoneName[\"PakistanStandardTime\"] = \"Pakistan Standard Time\";\n    WindowsZoneName[\"IndiaStandardTime\"] = \"India Standard Time\";\n    WindowsZoneName[\"SriLankaStandardTime\"] = \"Sri Lanka Standard Time\";\n    WindowsZoneName[\"NepalStandardTime\"] = \"Nepal Standard Time\";\n    WindowsZoneName[\"CentralAsiaStandardTime\"] = \"Central Asia Standard Time\";\n    WindowsZoneName[\"BangladeshStandardTime\"] = \"Bangladesh Standard Time\";\n    WindowsZoneName[\"OmskStandardTime\"] = \"Omsk Standard Time\";\n    WindowsZoneName[\"MyanmarStandardTime\"] = \"Myanmar Standard Time\";\n    WindowsZoneName[\"SeAsiaStandardTime\"] = \"SE Asia Standard Time\";\n    WindowsZoneName[\"AltaiStandardTime\"] = \"Altai Standard Time\";\n    WindowsZoneName[\"WMongoliaStandardTime\"] = \"W. Mongolia Standard Time\";\n    WindowsZoneName[\"NorthAsiaStandardTime\"] = \"North Asia Standard Time\";\n    WindowsZoneName[\"NCentralAsiaStandardTime\"] = \"N. Central Asia Standard Time\";\n    WindowsZoneName[\"TomskStandardTime\"] = \"Tomsk Standard Time\";\n    WindowsZoneName[\"ChinaStandardTime\"] = \"China Standard Time\";\n    WindowsZoneName[\"NorthAsiaEastStandardTime\"] = \"North Asia East Standard Time\";\n    WindowsZoneName[\"SingaporeStandardTime\"] = \"Singapore Standard Time\";\n    WindowsZoneName[\"WAustraliaStandardTime\"] = \"W. Australia Standard Time\";\n    WindowsZoneName[\"TaipeiStandardTime\"] = \"Taipei Standard Time\";\n    WindowsZoneName[\"UlaanbaatarStandardTime\"] = \"Ulaanbaatar Standard Time\";\n    WindowsZoneName[\"AusCentralWStandardTime\"] = \"Aus Central W. Standard Time\";\n    WindowsZoneName[\"TransbaikalStandardTime\"] = \"Transbaikal Standard Time\";\n    WindowsZoneName[\"TokyoStandardTime\"] = \"Tokyo Standard Time\";\n    WindowsZoneName[\"NorthKoreaStandardTime\"] = \"North Korea Standard Time\";\n    WindowsZoneName[\"KoreaStandardTime\"] = \"Korea Standard Time\";\n    WindowsZoneName[\"YakutskStandardTime\"] = \"Yakutsk Standard Time\";\n    WindowsZoneName[\"CenAustraliaStandardTime\"] = \"Cen. Australia Standard Time\";\n    WindowsZoneName[\"AusCentralStandardTime\"] = \"AUS Central Standard Time\";\n    WindowsZoneName[\"EAustraliaStandardTime\"] = \"E. Australia Standard Time\";\n    WindowsZoneName[\"AusEasternStandardTime\"] = \"AUS Eastern Standard Time\";\n    WindowsZoneName[\"WestPacificStandardTime\"] = \"West Pacific Standard Time\";\n    WindowsZoneName[\"TasmaniaStandardTime\"] = \"Tasmania Standard Time\";\n    WindowsZoneName[\"VladivostokStandardTime\"] = \"Vladivostok Standard Time\";\n    WindowsZoneName[\"LordHoweStandardTime\"] = \"Lord Howe Standard Time\";\n    WindowsZoneName[\"BougainvilleStandardTime\"] = \"Bougainville Standard Time\";\n    WindowsZoneName[\"RussiaTimeZone_10\"] = \"Russia Time Zone 10\";\n    WindowsZoneName[\"MagadanStandardTime\"] = \"Magadan Standard Time\";\n    WindowsZoneName[\"NorfolkStandardTime\"] = \"Norfolk Standard Time\";\n    WindowsZoneName[\"SakhalinStandardTime\"] = \"Sakhalin Standard Time\";\n    WindowsZoneName[\"CentralPacificStandardTime\"] = \"Central Pacific Standard Time\";\n    WindowsZoneName[\"RussiaTimeZone_11\"] = \"Russia Time Zone 11\";\n    WindowsZoneName[\"NewZealandStandardTime\"] = \"New Zealand Standard Time\";\n    WindowsZoneName[\"UtcMinusPlus_12\"] = \"UTC+12\";\n    WindowsZoneName[\"FijiStandardTime\"] = \"Fiji Standard Time\";\n    WindowsZoneName[\"ChathamIslandsStandardTime\"] = \"Chatham Islands Standard Time\";\n    WindowsZoneName[\"UtcMinusPlus_13\"] = \"UTC+13\";\n    WindowsZoneName[\"TongaStandardTime\"] = \"Tonga Standard Time\";\n    WindowsZoneName[\"SamoaStandardTime\"] = \"Samoa Standard Time\";\n    WindowsZoneName[\"LineIslandsStandardTime\"] = \"Line Islands Standard Time\";\n})(WindowsZoneName = exports.WindowsZoneName || (exports.WindowsZoneName = {}));\nvar Territory;\n(function (Territory) {\n    Territory[\"001\"] = \"001\";\n    Territory[\"Zz\"] = \"ZZ\";\n    Territory[\"As\"] = \"AS\";\n    Territory[\"Nu\"] = \"NU\";\n    Territory[\"Um\"] = \"UM\";\n    Territory[\"Us\"] = \"US\";\n    Territory[\"Ck\"] = \"CK\";\n    Territory[\"Pf\"] = \"PF\";\n    Territory[\"Mx\"] = \"MX\";\n    Territory[\"Pn\"] = \"PN\";\n    Territory[\"Ca\"] = \"CA\";\n    Territory[\"Bz\"] = \"BZ\";\n    Territory[\"Cr\"] = \"CR\";\n    Territory[\"Ec\"] = \"EC\";\n    Territory[\"Gt\"] = \"GT\";\n    Territory[\"Hn\"] = \"HN\";\n    Territory[\"Ni\"] = \"NI\";\n    Territory[\"Sv\"] = \"SV\";\n    Territory[\"Cl\"] = \"CL\";\n    Territory[\"Br\"] = \"BR\";\n    Territory[\"Co\"] = \"CO\";\n    Territory[\"Jm\"] = \"JM\";\n    Territory[\"Ky\"] = \"KY\";\n    Territory[\"Pa\"] = \"PA\";\n    Territory[\"Pe\"] = \"PE\";\n    Territory[\"Bs\"] = \"BS\";\n    Territory[\"Ht\"] = \"HT\";\n    Territory[\"Cu\"] = \"CU\";\n    Territory[\"Py\"] = \"PY\";\n    Territory[\"Bm\"] = \"BM\";\n    Territory[\"Gl\"] = \"GL\";\n    Territory[\"Ve\"] = \"VE\";\n    Territory[\"Ag\"] = \"AG\";\n    Territory[\"Ai\"] = \"AI\";\n    Territory[\"Aw\"] = \"AW\";\n    Territory[\"Bb\"] = \"BB\";\n    Territory[\"Bl\"] = \"BL\";\n    Territory[\"Bo\"] = \"BO\";\n    Territory[\"Bq\"] = \"BQ\";\n    Territory[\"Cw\"] = \"CW\";\n    Territory[\"Dm\"] = \"DM\";\n    Territory[\"Do\"] = \"DO\";\n    Territory[\"Gd\"] = \"GD\";\n    Territory[\"Gp\"] = \"GP\";\n    Territory[\"Gy\"] = \"GY\";\n    Territory[\"Kn\"] = \"KN\";\n    Territory[\"Lc\"] = \"LC\";\n    Territory[\"Mf\"] = \"MF\";\n    Territory[\"Mq\"] = \"MQ\";\n    Territory[\"Ms\"] = \"MS\";\n    Territory[\"Pr\"] = \"PR\";\n    Territory[\"Sx\"] = \"SX\";\n    Territory[\"Tt\"] = \"TT\";\n    Territory[\"Vc\"] = \"VC\";\n    Territory[\"Vg\"] = \"VG\";\n    Territory[\"Vi\"] = \"VI\";\n    Territory[\"Tc\"] = \"TC\";\n    Territory[\"Aq\"] = \"AQ\";\n    Territory[\"Fk\"] = \"FK\";\n    Territory[\"Gf\"] = \"GF\";\n    Territory[\"Sr\"] = \"SR\";\n    Territory[\"Ar\"] = \"AR\";\n    Territory[\"Uy\"] = \"UY\";\n    Territory[\"Pm\"] = \"PM\";\n    Territory[\"Gs\"] = \"GS\";\n    Territory[\"Pt\"] = \"PT\";\n    Territory[\"Cv\"] = \"CV\";\n    Territory[\"Es\"] = \"ES\";\n    Territory[\"Fo\"] = \"FO\";\n    Territory[\"Gb\"] = \"GB\";\n    Territory[\"Gg\"] = \"GG\";\n    Territory[\"Ie\"] = \"IE\";\n    Territory[\"Im\"] = \"IM\";\n    Territory[\"Je\"] = \"JE\";\n    Territory[\"Bf\"] = \"BF\";\n    Territory[\"Ci\"] = \"CI\";\n    Territory[\"Gh\"] = \"GH\";\n    Territory[\"Gm\"] = \"GM\";\n    Territory[\"Gn\"] = \"GN\";\n    Territory[\"Gw\"] = \"GW\";\n    Territory[\"Is\"] = \"IS\";\n    Territory[\"Lr\"] = \"LR\";\n    Territory[\"Ml\"] = \"ML\";\n    Territory[\"Mr\"] = \"MR\";\n    Territory[\"Sh\"] = \"SH\";\n    Territory[\"Sl\"] = \"SL\";\n    Territory[\"Sn\"] = \"SN\";\n    Territory[\"Tg\"] = \"TG\";\n    Territory[\"Ad\"] = \"AD\";\n    Territory[\"At\"] = \"AT\";\n    Territory[\"Ch\"] = \"CH\";\n    Territory[\"De\"] = \"DE\";\n    Territory[\"Gi\"] = \"GI\";\n    Territory[\"It\"] = \"IT\";\n    Territory[\"Li\"] = \"LI\";\n    Territory[\"Lu\"] = \"LU\";\n    Territory[\"Mc\"] = \"MC\";\n    Territory[\"Mt\"] = \"MT\";\n    Territory[\"Nl\"] = \"NL\";\n    Territory[\"No\"] = \"NO\";\n    Territory[\"Se\"] = \"SE\";\n    Territory[\"Sj\"] = \"SJ\";\n    Territory[\"Sm\"] = \"SM\";\n    Territory[\"Va\"] = \"VA\";\n    Territory[\"Al\"] = \"AL\";\n    Territory[\"Cz\"] = \"CZ\";\n    Territory[\"Hu\"] = \"HU\";\n    Territory[\"Me\"] = \"ME\";\n    Territory[\"Rs\"] = \"RS\";\n    Territory[\"Si\"] = \"SI\";\n    Territory[\"Sk\"] = \"SK\";\n    Territory[\"Be\"] = \"BE\";\n    Territory[\"Dk\"] = \"DK\";\n    Territory[\"Fr\"] = \"FR\";\n    Territory[\"Eh\"] = \"EH\";\n    Territory[\"Ma\"] = \"MA\";\n    Territory[\"St\"] = \"ST\";\n    Territory[\"Ba\"] = \"BA\";\n    Territory[\"Hr\"] = \"HR\";\n    Territory[\"Mk\"] = \"MK\";\n    Territory[\"Pl\"] = \"PL\";\n    Territory[\"Ao\"] = \"AO\";\n    Territory[\"Bj\"] = \"BJ\";\n    Territory[\"Cd\"] = \"CD\";\n    Territory[\"Cf\"] = \"CF\";\n    Territory[\"Cg\"] = \"CG\";\n    Territory[\"Cm\"] = \"CM\";\n    Territory[\"Dz\"] = \"DZ\";\n    Territory[\"Ga\"] = \"GA\";\n    Territory[\"Gq\"] = \"GQ\";\n    Territory[\"Ne\"] = \"NE\";\n    Territory[\"Ng\"] = \"NG\";\n    Territory[\"Td\"] = \"TD\";\n    Territory[\"Tn\"] = \"TN\";\n    Territory[\"Jo\"] = \"JO\";\n    Territory[\"Cy\"] = \"CY\";\n    Territory[\"Gr\"] = \"GR\";\n    Territory[\"Ro\"] = \"RO\";\n    Territory[\"Lb\"] = \"LB\";\n    Territory[\"Eg\"] = \"EG\";\n    Territory[\"Md\"] = \"MD\";\n    Territory[\"Sy\"] = \"SY\";\n    Territory[\"Ps\"] = \"PS\";\n    Territory[\"Bi\"] = \"BI\";\n    Territory[\"Bw\"] = \"BW\";\n    Territory[\"Ls\"] = \"LS\";\n    Territory[\"Mw\"] = \"MW\";\n    Territory[\"Mz\"] = \"MZ\";\n    Territory[\"Rw\"] = \"RW\";\n    Territory[\"Sz\"] = \"SZ\";\n    Territory[\"Za\"] = \"ZA\";\n    Territory[\"Zm\"] = \"ZM\";\n    Territory[\"Zw\"] = \"ZW\";\n    Territory[\"Ax\"] = \"AX\";\n    Territory[\"Bg\"] = \"BG\";\n    Territory[\"Ee\"] = \"EE\";\n    Territory[\"Fi\"] = \"FI\";\n    Territory[\"Lt\"] = \"LT\";\n    Territory[\"Lv\"] = \"LV\";\n    Territory[\"Ua\"] = \"UA\";\n    Territory[\"Il\"] = \"IL\";\n    Territory[\"Ru\"] = \"RU\";\n    Territory[\"Sd\"] = \"SD\";\n    Territory[\"Ly\"] = \"LY\";\n    Territory[\"Na\"] = \"NA\";\n    Territory[\"Iq\"] = \"IQ\";\n    Territory[\"Tr\"] = \"TR\";\n    Territory[\"Bh\"] = \"BH\";\n    Territory[\"Kw\"] = \"KW\";\n    Territory[\"Qa\"] = \"QA\";\n    Territory[\"Sa\"] = \"SA\";\n    Territory[\"Ye\"] = \"YE\";\n    Territory[\"By\"] = \"BY\";\n    Territory[\"Dj\"] = \"DJ\";\n    Territory[\"Er\"] = \"ER\";\n    Territory[\"Et\"] = \"ET\";\n    Territory[\"Ke\"] = \"KE\";\n    Territory[\"Km\"] = \"KM\";\n    Territory[\"Mg\"] = \"MG\";\n    Territory[\"So\"] = \"SO\";\n    Territory[\"Ss\"] = \"SS\";\n    Territory[\"Tz\"] = \"TZ\";\n    Territory[\"Ug\"] = \"UG\";\n    Territory[\"Yt\"] = \"YT\";\n    Territory[\"Ir\"] = \"IR\";\n    Territory[\"Ae\"] = \"AE\";\n    Territory[\"Om\"] = \"OM\";\n    Territory[\"Az\"] = \"AZ\";\n    Territory[\"Mu\"] = \"MU\";\n    Territory[\"Re\"] = \"RE\";\n    Territory[\"Sc\"] = \"SC\";\n    Territory[\"Ge\"] = \"GE\";\n    Territory[\"Am\"] = \"AM\";\n    Territory[\"Af\"] = \"AF\";\n    Territory[\"Kz\"] = \"KZ\";\n    Territory[\"Mv\"] = \"MV\";\n    Territory[\"Tf\"] = \"TF\";\n    Territory[\"Tj\"] = \"TJ\";\n    Territory[\"Tm\"] = \"TM\";\n    Territory[\"Uz\"] = \"UZ\";\n    Territory[\"Pk\"] = \"PK\";\n    Territory[\"In\"] = \"IN\";\n    Territory[\"Lk\"] = \"LK\";\n    Territory[\"Np\"] = \"NP\";\n    Territory[\"Cn\"] = \"CN\";\n    Territory[\"Io\"] = \"IO\";\n    Territory[\"Kg\"] = \"KG\";\n    Territory[\"Bd\"] = \"BD\";\n    Territory[\"Bt\"] = \"BT\";\n    Territory[\"Cc\"] = \"CC\";\n    Territory[\"Mm\"] = \"MM\";\n    Territory[\"Cx\"] = \"CX\";\n    Territory[\"Id\"] = \"ID\";\n    Territory[\"Kh\"] = \"KH\";\n    Territory[\"La\"] = \"LA\";\n    Territory[\"Th\"] = \"TH\";\n    Territory[\"Vn\"] = \"VN\";\n    Territory[\"Mn\"] = \"MN\";\n    Territory[\"Hk\"] = \"HK\";\n    Territory[\"Mo\"] = \"MO\";\n    Territory[\"Bn\"] = \"BN\";\n    Territory[\"My\"] = \"MY\";\n    Territory[\"Ph\"] = \"PH\";\n    Territory[\"Sg\"] = \"SG\";\n    Territory[\"Au\"] = \"AU\";\n    Territory[\"Tw\"] = \"TW\";\n    Territory[\"Jp\"] = \"JP\";\n    Territory[\"Pw\"] = \"PW\";\n    Territory[\"Tl\"] = \"TL\";\n    Territory[\"Kp\"] = \"KP\";\n    Territory[\"Kr\"] = \"KR\";\n    Territory[\"Fm\"] = \"FM\";\n    Territory[\"Gu\"] = \"GU\";\n    Territory[\"Mp\"] = \"MP\";\n    Territory[\"Pg\"] = \"PG\";\n    Territory[\"Nf\"] = \"NF\";\n    Territory[\"Nc\"] = \"NC\";\n    Territory[\"Sb\"] = \"SB\";\n    Territory[\"Vu\"] = \"VU\";\n    Territory[\"Nz\"] = \"NZ\";\n    Territory[\"Ki\"] = \"KI\";\n    Territory[\"Mh\"] = \"MH\";\n    Territory[\"Nr\"] = \"NR\";\n    Territory[\"Tv\"] = \"TV\";\n    Territory[\"Wf\"] = \"WF\";\n    Territory[\"Fj\"] = \"FJ\";\n    Territory[\"Tk\"] = \"TK\";\n    Territory[\"To\"] = \"TO\";\n    Territory[\"Ws\"] = \"WS\";\n})(Territory = exports.Territory || (exports.Territory = {}));\nvar IanaName;\n(function (IanaName) {\n    IanaName[\"EtcGmtMinusPlus_12\"] = \"Etc/GMT+12\";\n    IanaName[\"EtcGmtMinusPlus_11\"] = \"Etc/GMT+11\";\n    IanaName[\"PacificPagoPago\"] = \"Pacific/Pago_Pago\";\n    IanaName[\"PacificNiue\"] = \"Pacific/Niue\";\n    IanaName[\"PacificMidway\"] = \"Pacific/Midway\";\n    IanaName[\"AmericaAdak\"] = \"America/Adak\";\n    IanaName[\"PacificHonolulu\"] = \"Pacific/Honolulu\";\n    IanaName[\"PacificRarotonga\"] = \"Pacific/Rarotonga\";\n    IanaName[\"PacificTahiti\"] = \"Pacific/Tahiti\";\n    IanaName[\"PacificJohnston\"] = \"Pacific/Johnston\";\n    IanaName[\"EtcGmtMinusPlus_10\"] = \"Etc/GMT+10\";\n    IanaName[\"PacificMarquesas\"] = \"Pacific/Marquesas\";\n    IanaName[\"AmericaAnchorage\"] = \"America/Anchorage\";\n    IanaName[\"EtcGmtMinusPlus_9\"] = \"Etc/GMT+9\";\n    IanaName[\"PacificGambier\"] = \"Pacific/Gambier\";\n    IanaName[\"AmericaTijuana\"] = \"America/Tijuana\";\n    IanaName[\"EtcGmtMinusPlus_8\"] = \"Etc/GMT+8\";\n    IanaName[\"PacificPitcairn\"] = \"Pacific/Pitcairn\";\n    IanaName[\"AmericaLosAngeles\"] = \"America/Los_Angeles\";\n    IanaName[\"AmericaVancouver\"] = \"America/Vancouver\";\n    IanaName[\"Pst8Pdt\"] = \"PST8PDT\";\n    IanaName[\"AmericaPhoenix\"] = \"America/Phoenix\";\n    IanaName[\"AmericaDawsonCreek\"] = \"America/Dawson_Creek\";\n    IanaName[\"AmericaHermosillo\"] = \"America/Hermosillo\";\n    IanaName[\"EtcGmtMinusPlus_7\"] = \"Etc/GMT+7\";\n    IanaName[\"AmericaChihuahua\"] = \"America/Chihuahua\";\n    IanaName[\"AmericaDenver\"] = \"America/Denver\";\n    IanaName[\"AmericaEdmonton\"] = \"America/Edmonton\";\n    IanaName[\"AmericaOjinaga\"] = \"America/Ojinaga\";\n    IanaName[\"Mst7Mdt\"] = \"MST7MDT\";\n    IanaName[\"AmericaGuatemala\"] = \"America/Guatemala\";\n    IanaName[\"AmericaBelize\"] = \"America/Belize\";\n    IanaName[\"AmericaCostaRica\"] = \"America/Costa_Rica\";\n    IanaName[\"PacificGalapagos\"] = \"Pacific/Galapagos\";\n    IanaName[\"AmericaTegucigalpa\"] = \"America/Tegucigalpa\";\n    IanaName[\"AmericaManagua\"] = \"America/Managua\";\n    IanaName[\"AmericaElSalvador\"] = \"America/El_Salvador\";\n    IanaName[\"EtcGmtMinusPlus_6\"] = \"Etc/GMT+6\";\n    IanaName[\"AmericaChicago\"] = \"America/Chicago\";\n    IanaName[\"AmericaWinnipeg\"] = \"America/Winnipeg\";\n    IanaName[\"AmericaMatamoros\"] = \"America/Matamoros\";\n    IanaName[\"Cst6Cdt\"] = \"CST6CDT\";\n    IanaName[\"PacificEaster\"] = \"Pacific/Easter\";\n    IanaName[\"AmericaMexicoCity\"] = \"America/Mexico_City\";\n    IanaName[\"AmericaRegina\"] = \"America/Regina\";\n    IanaName[\"AmericaBogota\"] = \"America/Bogota\";\n    IanaName[\"AmericaRioBranco\"] = \"America/Rio_Branco\";\n    IanaName[\"AmericaCoralHarbour\"] = \"America/Coral_Harbour\";\n    IanaName[\"AmericaGuayaquil\"] = \"America/Guayaquil\";\n    IanaName[\"AmericaJamaica\"] = \"America/Jamaica\";\n    IanaName[\"AmericaCayman\"] = \"America/Cayman\";\n    IanaName[\"AmericaPanama\"] = \"America/Panama\";\n    IanaName[\"AmericaLima\"] = \"America/Lima\";\n    IanaName[\"EtcGmtMinusPlus_5\"] = \"Etc/GMT+5\";\n    IanaName[\"AmericaCancun\"] = \"America/Cancun\";\n    IanaName[\"AmericaNewYork\"] = \"America/New_York\";\n    IanaName[\"AmericaNassau\"] = \"America/Nassau\";\n    IanaName[\"AmericaToronto\"] = \"America/Toronto\";\n    IanaName[\"Est5Edt\"] = \"EST5EDT\";\n    IanaName[\"AmericaPortMinusAuPrince\"] = \"America/Port-au-Prince\";\n    IanaName[\"AmericaHavana\"] = \"America/Havana\";\n    IanaName[\"AmericaIndianapolis\"] = \"America/Indianapolis\";\n    IanaName[\"AmericaAsuncion\"] = \"America/Asuncion\";\n    IanaName[\"AmericaHalifax\"] = \"America/Halifax\";\n    IanaName[\"AtlanticBermuda\"] = \"Atlantic/Bermuda\";\n    IanaName[\"AmericaThule\"] = \"America/Thule\";\n    IanaName[\"AmericaCaracas\"] = \"America/Caracas\";\n    IanaName[\"AmericaCuiaba\"] = \"America/Cuiaba\";\n    IanaName[\"AmericaLaPaz\"] = \"America/La_Paz\";\n    IanaName[\"AmericaAntigua\"] = \"America/Antigua\";\n    IanaName[\"AmericaAnguilla\"] = \"America/Anguilla\";\n    IanaName[\"AmericaAruba\"] = \"America/Aruba\";\n    IanaName[\"AmericaBarbados\"] = \"America/Barbados\";\n    IanaName[\"AmericaStBarthelemy\"] = \"America/St_Barthelemy\";\n    IanaName[\"AmericaKralendijk\"] = \"America/Kralendijk\";\n    IanaName[\"AmericaManaus\"] = \"America/Manaus\";\n    IanaName[\"AmericaBlancMinusSablon\"] = \"America/Blanc-Sablon\";\n    IanaName[\"AmericaCuracao\"] = \"America/Curacao\";\n    IanaName[\"AmericaDominica\"] = \"America/Dominica\";\n    IanaName[\"AmericaSantoDomingo\"] = \"America/Santo_Domingo\";\n    IanaName[\"AmericaGrenada\"] = \"America/Grenada\";\n    IanaName[\"AmericaGuadeloupe\"] = \"America/Guadeloupe\";\n    IanaName[\"AmericaGuyana\"] = \"America/Guyana\";\n    IanaName[\"AmericaStKitts\"] = \"America/St_Kitts\";\n    IanaName[\"AmericaStLucia\"] = \"America/St_Lucia\";\n    IanaName[\"AmericaMarigot\"] = \"America/Marigot\";\n    IanaName[\"AmericaMartinique\"] = \"America/Martinique\";\n    IanaName[\"AmericaMontserrat\"] = \"America/Montserrat\";\n    IanaName[\"AmericaPuertoRico\"] = \"America/Puerto_Rico\";\n    IanaName[\"AmericaLowerPrinces\"] = \"America/Lower_Princes\";\n    IanaName[\"AmericaPortOfSpain\"] = \"America/Port_of_Spain\";\n    IanaName[\"AmericaStVincent\"] = \"America/St_Vincent\";\n    IanaName[\"AmericaTortola\"] = \"America/Tortola\";\n    IanaName[\"AmericaStThomas\"] = \"America/St_Thomas\";\n    IanaName[\"EtcGmtMinusPlus_4\"] = \"Etc/GMT+4\";\n    IanaName[\"AmericaSantiago\"] = \"America/Santiago\";\n    IanaName[\"AmericaGrandTurk\"] = \"America/Grand_Turk\";\n    IanaName[\"AmericaStJohns\"] = \"America/St_Johns\";\n    IanaName[\"AmericaAraguaina\"] = \"America/Araguaina\";\n    IanaName[\"AmericaSaoPaulo\"] = \"America/Sao_Paulo\";\n    IanaName[\"AmericaCayenne\"] = \"America/Cayenne\";\n    IanaName[\"AntarcticaRothera\"] = \"Antarctica/Rothera\";\n    IanaName[\"AmericaFortaleza\"] = \"America/Fortaleza\";\n    IanaName[\"AtlanticStanley\"] = \"Atlantic/Stanley\";\n    IanaName[\"AmericaParamaribo\"] = \"America/Paramaribo\";\n    IanaName[\"EtcGmtMinusPlus_3\"] = \"Etc/GMT+3\";\n    IanaName[\"AmericaBuenosAires\"] = \"America/Buenos_Aires\";\n    IanaName[\"AmericaGodthab\"] = \"America/Godthab\";\n    IanaName[\"AmericaMontevideo\"] = \"America/Montevideo\";\n    IanaName[\"AmericaPuntaArenas\"] = \"America/Punta_Arenas\";\n    IanaName[\"AntarcticaPalmer\"] = \"Antarctica/Palmer\";\n    IanaName[\"AmericaMiquelon\"] = \"America/Miquelon\";\n    IanaName[\"AmericaBahia\"] = \"America/Bahia\";\n    IanaName[\"EtcGmtMinusPlus_2\"] = \"Etc/GMT+2\";\n    IanaName[\"AmericaNoronha\"] = \"America/Noronha\";\n    IanaName[\"AtlanticSouthGeorgia\"] = \"Atlantic/South_Georgia\";\n    IanaName[\"AtlanticAzores\"] = \"Atlantic/Azores\";\n    IanaName[\"AmericaScoresbysund\"] = \"America/Scoresbysund\";\n    IanaName[\"AtlanticCapeVerde\"] = \"Atlantic/Cape_Verde\";\n    IanaName[\"EtcGmtMinusPlus_1\"] = \"Etc/GMT+1\";\n    IanaName[\"EtcGmt\"] = \"Etc/GMT\";\n    IanaName[\"AmericaDanmarkshavn\"] = \"America/Danmarkshavn\";\n    IanaName[\"EuropeLondon\"] = \"Europe/London\";\n    IanaName[\"AtlanticCanary\"] = \"Atlantic/Canary\";\n    IanaName[\"AtlanticFaeroe\"] = \"Atlantic/Faeroe\";\n    IanaName[\"EuropeGuernsey\"] = \"Europe/Guernsey\";\n    IanaName[\"EuropeDublin\"] = \"Europe/Dublin\";\n    IanaName[\"EuropeIsleOfMan\"] = \"Europe/Isle_of_Man\";\n    IanaName[\"EuropeJersey\"] = \"Europe/Jersey\";\n    IanaName[\"EuropeLisbon\"] = \"Europe/Lisbon\";\n    IanaName[\"AtlanticReykjavik\"] = \"Atlantic/Reykjavik\";\n    IanaName[\"AfricaOuagadougou\"] = \"Africa/Ouagadougou\";\n    IanaName[\"AfricaAbidjan\"] = \"Africa/Abidjan\";\n    IanaName[\"AfricaAccra\"] = \"Africa/Accra\";\n    IanaName[\"AfricaBanjul\"] = \"Africa/Banjul\";\n    IanaName[\"AfricaConakry\"] = \"Africa/Conakry\";\n    IanaName[\"AfricaBissau\"] = \"Africa/Bissau\";\n    IanaName[\"AfricaMonrovia\"] = \"Africa/Monrovia\";\n    IanaName[\"AfricaBamako\"] = \"Africa/Bamako\";\n    IanaName[\"AfricaNouakchott\"] = \"Africa/Nouakchott\";\n    IanaName[\"AtlanticStHelena\"] = \"Atlantic/St_Helena\";\n    IanaName[\"AfricaFreetown\"] = \"Africa/Freetown\";\n    IanaName[\"AfricaDakar\"] = \"Africa/Dakar\";\n    IanaName[\"AfricaLome\"] = \"Africa/Lome\";\n    IanaName[\"EuropeBerlin\"] = \"Europe/Berlin\";\n    IanaName[\"EuropeAndorra\"] = \"Europe/Andorra\";\n    IanaName[\"EuropeVienna\"] = \"Europe/Vienna\";\n    IanaName[\"EuropeZurich\"] = \"Europe/Zurich\";\n    IanaName[\"EuropeGibraltar\"] = \"Europe/Gibraltar\";\n    IanaName[\"EuropeRome\"] = \"Europe/Rome\";\n    IanaName[\"EuropeVaduz\"] = \"Europe/Vaduz\";\n    IanaName[\"EuropeLuxembourg\"] = \"Europe/Luxembourg\";\n    IanaName[\"EuropeMonaco\"] = \"Europe/Monaco\";\n    IanaName[\"EuropeMalta\"] = \"Europe/Malta\";\n    IanaName[\"EuropeAmsterdam\"] = \"Europe/Amsterdam\";\n    IanaName[\"EuropeOslo\"] = \"Europe/Oslo\";\n    IanaName[\"EuropeStockholm\"] = \"Europe/Stockholm\";\n    IanaName[\"ArcticLongyearbyen\"] = \"Arctic/Longyearbyen\";\n    IanaName[\"EuropeSanMarino\"] = \"Europe/San_Marino\";\n    IanaName[\"EuropeVatican\"] = \"Europe/Vatican\";\n    IanaName[\"EuropeBudapest\"] = \"Europe/Budapest\";\n    IanaName[\"EuropeTirane\"] = \"Europe/Tirane\";\n    IanaName[\"EuropePrague\"] = \"Europe/Prague\";\n    IanaName[\"EuropePodgorica\"] = \"Europe/Podgorica\";\n    IanaName[\"EuropeBelgrade\"] = \"Europe/Belgrade\";\n    IanaName[\"EuropeLjubljana\"] = \"Europe/Ljubljana\";\n    IanaName[\"EuropeBratislava\"] = \"Europe/Bratislava\";\n    IanaName[\"EuropeParis\"] = \"Europe/Paris\";\n    IanaName[\"EuropeBrussels\"] = \"Europe/Brussels\";\n    IanaName[\"EuropeCopenhagen\"] = \"Europe/Copenhagen\";\n    IanaName[\"EuropeMadrid\"] = \"Europe/Madrid\";\n    IanaName[\"AfricaCasablanca\"] = \"Africa/Casablanca\";\n    IanaName[\"AfricaElAaiun\"] = \"Africa/El_Aaiun\";\n    IanaName[\"AfricaSaoTome\"] = \"Africa/Sao_Tome\";\n    IanaName[\"EuropeWarsaw\"] = \"Europe/Warsaw\";\n    IanaName[\"EuropeSarajevo\"] = \"Europe/Sarajevo\";\n    IanaName[\"EuropeZagreb\"] = \"Europe/Zagreb\";\n    IanaName[\"EuropeSkopje\"] = \"Europe/Skopje\";\n    IanaName[\"AfricaLagos\"] = \"Africa/Lagos\";\n    IanaName[\"AfricaLuanda\"] = \"Africa/Luanda\";\n    IanaName[\"AfricaPortoMinusNovo\"] = \"Africa/Porto-Novo\";\n    IanaName[\"AfricaKinshasa\"] = \"Africa/Kinshasa\";\n    IanaName[\"AfricaBangui\"] = \"Africa/Bangui\";\n    IanaName[\"AfricaBrazzaville\"] = \"Africa/Brazzaville\";\n    IanaName[\"AfricaDouala\"] = \"Africa/Douala\";\n    IanaName[\"AfricaAlgiers\"] = \"Africa/Algiers\";\n    IanaName[\"AfricaLibreville\"] = \"Africa/Libreville\";\n    IanaName[\"AfricaMalabo\"] = \"Africa/Malabo\";\n    IanaName[\"AfricaNiamey\"] = \"Africa/Niamey\";\n    IanaName[\"AfricaNdjamena\"] = \"Africa/Ndjamena\";\n    IanaName[\"AfricaTunis\"] = \"Africa/Tunis\";\n    IanaName[\"EtcGmtMinus_1\"] = \"Etc/GMT-1\";\n    IanaName[\"AsiaAmman\"] = \"Asia/Amman\";\n    IanaName[\"EuropeBucharest\"] = \"Europe/Bucharest\";\n    IanaName[\"AsiaFamagusta\"] = \"Asia/Famagusta\";\n    IanaName[\"EuropeAthens\"] = \"Europe/Athens\";\n    IanaName[\"AsiaBeirut\"] = \"Asia/Beirut\";\n    IanaName[\"AfricaCairo\"] = \"Africa/Cairo\";\n    IanaName[\"EuropeChisinau\"] = \"Europe/Chisinau\";\n    IanaName[\"AsiaDamascus\"] = \"Asia/Damascus\";\n    IanaName[\"AsiaHebron\"] = \"Asia/Hebron\";\n    IanaName[\"AfricaJohannesburg\"] = \"Africa/Johannesburg\";\n    IanaName[\"AfricaBujumbura\"] = \"Africa/Bujumbura\";\n    IanaName[\"AfricaGaborone\"] = \"Africa/Gaborone\";\n    IanaName[\"AfricaLubumbashi\"] = \"Africa/Lubumbashi\";\n    IanaName[\"AfricaMaseru\"] = \"Africa/Maseru\";\n    IanaName[\"AfricaBlantyre\"] = \"Africa/Blantyre\";\n    IanaName[\"AfricaMaputo\"] = \"Africa/Maputo\";\n    IanaName[\"AfricaKigali\"] = \"Africa/Kigali\";\n    IanaName[\"AfricaMbabane\"] = \"Africa/Mbabane\";\n    IanaName[\"AfricaLusaka\"] = \"Africa/Lusaka\";\n    IanaName[\"AfricaHarare\"] = \"Africa/Harare\";\n    IanaName[\"EtcGmtMinus_2\"] = \"Etc/GMT-2\";\n    IanaName[\"EuropeKiev\"] = \"Europe/Kiev\";\n    IanaName[\"EuropeMariehamn\"] = \"Europe/Mariehamn\";\n    IanaName[\"EuropeSofia\"] = \"Europe/Sofia\";\n    IanaName[\"EuropeTallinn\"] = \"Europe/Tallinn\";\n    IanaName[\"EuropeHelsinki\"] = \"Europe/Helsinki\";\n    IanaName[\"EuropeVilnius\"] = \"Europe/Vilnius\";\n    IanaName[\"EuropeRiga\"] = \"Europe/Riga\";\n    IanaName[\"AsiaJerusalem\"] = \"Asia/Jerusalem\";\n    IanaName[\"EuropeKaliningrad\"] = \"Europe/Kaliningrad\";\n    IanaName[\"AfricaKhartoum\"] = \"Africa/Khartoum\";\n    IanaName[\"AfricaTripoli\"] = \"Africa/Tripoli\";\n    IanaName[\"AfricaWindhoek\"] = \"Africa/Windhoek\";\n    IanaName[\"AsiaBaghdad\"] = \"Asia/Baghdad\";\n    IanaName[\"EuropeIstanbul\"] = \"Europe/Istanbul\";\n    IanaName[\"AsiaRiyadh\"] = \"Asia/Riyadh\";\n    IanaName[\"AsiaBahrain\"] = \"Asia/Bahrain\";\n    IanaName[\"AsiaKuwait\"] = \"Asia/Kuwait\";\n    IanaName[\"AsiaQatar\"] = \"Asia/Qatar\";\n    IanaName[\"AsiaAden\"] = \"Asia/Aden\";\n    IanaName[\"EuropeMinsk\"] = \"Europe/Minsk\";\n    IanaName[\"EuropeMoscow\"] = \"Europe/Moscow\";\n    IanaName[\"EuropeSimferopol\"] = \"Europe/Simferopol\";\n    IanaName[\"AfricaNairobi\"] = \"Africa/Nairobi\";\n    IanaName[\"AntarcticaSyowa\"] = \"Antarctica/Syowa\";\n    IanaName[\"AfricaDjibouti\"] = \"Africa/Djibouti\";\n    IanaName[\"AfricaAsmera\"] = \"Africa/Asmera\";\n    IanaName[\"AfricaAddisAbaba\"] = \"Africa/Addis_Ababa\";\n    IanaName[\"IndianComoro\"] = \"Indian/Comoro\";\n    IanaName[\"IndianAntananarivo\"] = \"Indian/Antananarivo\";\n    IanaName[\"AfricaMogadishu\"] = \"Africa/Mogadishu\";\n    IanaName[\"AfricaJuba\"] = \"Africa/Juba\";\n    IanaName[\"AfricaDarEsSalaam\"] = \"Africa/Dar_es_Salaam\";\n    IanaName[\"AfricaKampala\"] = \"Africa/Kampala\";\n    IanaName[\"IndianMayotte\"] = \"Indian/Mayotte\";\n    IanaName[\"EtcGmtMinus_3\"] = \"Etc/GMT-3\";\n    IanaName[\"AsiaTehran\"] = \"Asia/Tehran\";\n    IanaName[\"AsiaDubai\"] = \"Asia/Dubai\";\n    IanaName[\"AsiaMuscat\"] = \"Asia/Muscat\";\n    IanaName[\"EtcGmtMinus_4\"] = \"Etc/GMT-4\";\n    IanaName[\"EuropeAstrakhan\"] = \"Europe/Astrakhan\";\n    IanaName[\"AsiaBaku\"] = \"Asia/Baku\";\n    IanaName[\"EuropeSamara\"] = \"Europe/Samara\";\n    IanaName[\"IndianMauritius\"] = \"Indian/Mauritius\";\n    IanaName[\"IndianReunion\"] = \"Indian/Reunion\";\n    IanaName[\"IndianMahe\"] = \"Indian/Mahe\";\n    IanaName[\"EuropeSaratov\"] = \"Europe/Saratov\";\n    IanaName[\"AsiaTbilisi\"] = \"Asia/Tbilisi\";\n    IanaName[\"AsiaYerevan\"] = \"Asia/Yerevan\";\n    IanaName[\"AsiaKabul\"] = \"Asia/Kabul\";\n    IanaName[\"AsiaTashkent\"] = \"Asia/Tashkent\";\n    IanaName[\"AntarcticaMawson\"] = \"Antarctica/Mawson\";\n    IanaName[\"AsiaOral\"] = \"Asia/Oral\";\n    IanaName[\"IndianMaldives\"] = \"Indian/Maldives\";\n    IanaName[\"IndianKerguelen\"] = \"Indian/Kerguelen\";\n    IanaName[\"AsiaDushanbe\"] = \"Asia/Dushanbe\";\n    IanaName[\"AsiaAshgabat\"] = \"Asia/Ashgabat\";\n    IanaName[\"EtcGmtMinus_5\"] = \"Etc/GMT-5\";\n    IanaName[\"AsiaYekaterinburg\"] = \"Asia/Yekaterinburg\";\n    IanaName[\"AsiaKarachi\"] = \"Asia/Karachi\";\n    IanaName[\"AsiaCalcutta\"] = \"Asia/Calcutta\";\n    IanaName[\"AsiaColombo\"] = \"Asia/Colombo\";\n    IanaName[\"AsiaKatmandu\"] = \"Asia/Katmandu\";\n    IanaName[\"AsiaAlmaty\"] = \"Asia/Almaty\";\n    IanaName[\"AntarcticaVostok\"] = \"Antarctica/Vostok\";\n    IanaName[\"AsiaUrumqi\"] = \"Asia/Urumqi\";\n    IanaName[\"IndianChagos\"] = \"Indian/Chagos\";\n    IanaName[\"AsiaBishkek\"] = \"Asia/Bishkek\";\n    IanaName[\"EtcGmtMinus_6\"] = \"Etc/GMT-6\";\n    IanaName[\"AsiaDhaka\"] = \"Asia/Dhaka\";\n    IanaName[\"AsiaThimphu\"] = \"Asia/Thimphu\";\n    IanaName[\"AsiaOmsk\"] = \"Asia/Omsk\";\n    IanaName[\"AsiaRangoon\"] = \"Asia/Rangoon\";\n    IanaName[\"IndianCocos\"] = \"Indian/Cocos\";\n    IanaName[\"AsiaBangkok\"] = \"Asia/Bangkok\";\n    IanaName[\"AntarcticaDavis\"] = \"Antarctica/Davis\";\n    IanaName[\"IndianChristmas\"] = \"Indian/Christmas\";\n    IanaName[\"AsiaJakarta\"] = \"Asia/Jakarta\";\n    IanaName[\"AsiaPhnomPenh\"] = \"Asia/Phnom_Penh\";\n    IanaName[\"AsiaVientiane\"] = \"Asia/Vientiane\";\n    IanaName[\"AsiaSaigon\"] = \"Asia/Saigon\";\n    IanaName[\"EtcGmtMinus_7\"] = \"Etc/GMT-7\";\n    IanaName[\"AsiaBarnaul\"] = \"Asia/Barnaul\";\n    IanaName[\"AsiaHovd\"] = \"Asia/Hovd\";\n    IanaName[\"AsiaKrasnoyarsk\"] = \"Asia/Krasnoyarsk\";\n    IanaName[\"AsiaNovosibirsk\"] = \"Asia/Novosibirsk\";\n    IanaName[\"AsiaTomsk\"] = \"Asia/Tomsk\";\n    IanaName[\"AsiaShanghai\"] = \"Asia/Shanghai\";\n    IanaName[\"AsiaHongKong\"] = \"Asia/Hong_Kong\";\n    IanaName[\"AsiaMacau\"] = \"Asia/Macau\";\n    IanaName[\"AsiaIrkutsk\"] = \"Asia/Irkutsk\";\n    IanaName[\"AsiaSingapore\"] = \"Asia/Singapore\";\n    IanaName[\"AsiaBrunei\"] = \"Asia/Brunei\";\n    IanaName[\"AsiaMakassar\"] = \"Asia/Makassar\";\n    IanaName[\"AsiaKualaLumpur\"] = \"Asia/Kuala_Lumpur\";\n    IanaName[\"AsiaManila\"] = \"Asia/Manila\";\n    IanaName[\"EtcGmtMinus_8\"] = \"Etc/GMT-8\";\n    IanaName[\"AustraliaPerth\"] = \"Australia/Perth\";\n    IanaName[\"AntarcticaCasey\"] = \"Antarctica/Casey\";\n    IanaName[\"AsiaTaipei\"] = \"Asia/Taipei\";\n    IanaName[\"AsiaUlaanbaatar\"] = \"Asia/Ulaanbaatar\";\n    IanaName[\"AustraliaEucla\"] = \"Australia/Eucla\";\n    IanaName[\"AsiaChita\"] = \"Asia/Chita\";\n    IanaName[\"AsiaTokyo\"] = \"Asia/Tokyo\";\n    IanaName[\"AsiaJayapura\"] = \"Asia/Jayapura\";\n    IanaName[\"PacificPalau\"] = \"Pacific/Palau\";\n    IanaName[\"AsiaDili\"] = \"Asia/Dili\";\n    IanaName[\"EtcGmtMinus_9\"] = \"Etc/GMT-9\";\n    IanaName[\"AsiaPyongyang\"] = \"Asia/Pyongyang\";\n    IanaName[\"AsiaSeoul\"] = \"Asia/Seoul\";\n    IanaName[\"AsiaYakutsk\"] = \"Asia/Yakutsk\";\n    IanaName[\"AustraliaAdelaide\"] = \"Australia/Adelaide\";\n    IanaName[\"AustraliaDarwin\"] = \"Australia/Darwin\";\n    IanaName[\"AustraliaBrisbane\"] = \"Australia/Brisbane\";\n    IanaName[\"AustraliaSydney\"] = \"Australia/Sydney\";\n    IanaName[\"PacificPortMoresby\"] = \"Pacific/Port_Moresby\";\n    IanaName[\"AntarcticaDumontDUrville\"] = \"Antarctica/DumontDUrville\";\n    IanaName[\"PacificTruk\"] = \"Pacific/Truk\";\n    IanaName[\"PacificGuam\"] = \"Pacific/Guam\";\n    IanaName[\"PacificSaipan\"] = \"Pacific/Saipan\";\n    IanaName[\"EtcGmtMinus_10\"] = \"Etc/GMT-10\";\n    IanaName[\"AustraliaHobart\"] = \"Australia/Hobart\";\n    IanaName[\"AsiaVladivostok\"] = \"Asia/Vladivostok\";\n    IanaName[\"AustraliaLordHowe\"] = \"Australia/Lord_Howe\";\n    IanaName[\"PacificBougainville\"] = \"Pacific/Bougainville\";\n    IanaName[\"AsiaSrednekolymsk\"] = \"Asia/Srednekolymsk\";\n    IanaName[\"AsiaMagadan\"] = \"Asia/Magadan\";\n    IanaName[\"PacificNorfolk\"] = \"Pacific/Norfolk\";\n    IanaName[\"AsiaSakhalin\"] = \"Asia/Sakhalin\";\n    IanaName[\"PacificGuadalcanal\"] = \"Pacific/Guadalcanal\";\n    IanaName[\"AntarcticaMacquarie\"] = \"Antarctica/Macquarie\";\n    IanaName[\"PacificPonape\"] = \"Pacific/Ponape\";\n    IanaName[\"PacificNoumea\"] = \"Pacific/Noumea\";\n    IanaName[\"PacificEfate\"] = \"Pacific/Efate\";\n    IanaName[\"EtcGmtMinus_11\"] = \"Etc/GMT-11\";\n    IanaName[\"AsiaKamchatka\"] = \"Asia/Kamchatka\";\n    IanaName[\"PacificAuckland\"] = \"Pacific/Auckland\";\n    IanaName[\"AntarcticaMcMurdo\"] = \"Antarctica/McMurdo\";\n    IanaName[\"EtcGmtMinus_12\"] = \"Etc/GMT-12\";\n    IanaName[\"PacificTarawa\"] = \"Pacific/Tarawa\";\n    IanaName[\"PacificMajuro\"] = \"Pacific/Majuro\";\n    IanaName[\"PacificNauru\"] = \"Pacific/Nauru\";\n    IanaName[\"PacificFunafuti\"] = \"Pacific/Funafuti\";\n    IanaName[\"PacificWake\"] = \"Pacific/Wake\";\n    IanaName[\"PacificWallis\"] = \"Pacific/Wallis\";\n    IanaName[\"PacificFiji\"] = \"Pacific/Fiji\";\n    IanaName[\"PacificChatham\"] = \"Pacific/Chatham\";\n    IanaName[\"EtcGmtMinus_13\"] = \"Etc/GMT-13\";\n    IanaName[\"PacificEnderbury\"] = \"Pacific/Enderbury\";\n    IanaName[\"PacificFakaofo\"] = \"Pacific/Fakaofo\";\n    IanaName[\"PacificTongatapu\"] = \"Pacific/Tongatapu\";\n    IanaName[\"PacificApia\"] = \"Pacific/Apia\";\n    IanaName[\"PacificKiritimati\"] = \"Pacific/Kiritimati\";\n    IanaName[\"EtcGmtMinus_14\"] = \"Etc/GMT-14\";\n})(IanaName = exports.IanaName || (exports.IanaName = {}));\n//# sourceMappingURL=enums.js.map","\"use strict\";\nexports.__esModule = true;\nvar mapContent = require(\"../windowsZones.json\");\nexports.map = mapContent;\n//# sourceMappingURL=time-zone-map.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sizes = void 0;\nvar sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexports.sizes = sizes;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.size = exports.default = exports.IconWrapper = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _uuid = _interopRequireDefault(require(\"uuid\"));\n\nvar _theme = require(\"@atlaskit/theme\");\n\nvar _constants = require(\"../constants\");\n\nvar getSize = function getSize(props) {\n  if (props.size) {\n    return \"height: \".concat(_constants.sizes[props.size], \"; width: \").concat(_constants.sizes[props.size], \";\");\n  }\n\n  return null;\n};\n\nvar IconWrapper = _styledComponents.default.span.withConfig({\n  displayName: \"Icon__IconWrapper\",\n  componentId: \"dyhwwi-0\"\n})([\"\\n  \", \" color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \" max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n  /* Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"], getSize, function (p) {\n  return p.primaryColor || 'currentColor';\n}, function (p) {\n  return p.secondaryColor || _theme.colors.background;\n}, getSize);\n\nexports.IconWrapper = IconWrapper;\n\nvar Icon =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inherits2.default)(Icon, _Component);\n\n  function Icon() {\n    (0, _classCallCheck2.default)(this, Icon);\n    return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Icon).apply(this, arguments));\n  }\n\n  (0, _createClass2.default)(Icon, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          Glyph = _this$props.glyph,\n          dangerouslySetGlyph = _this$props.dangerouslySetGlyph,\n          onClick = _this$props.onClick,\n          primaryColor = _this$props.primaryColor,\n          secondaryColor = _this$props.secondaryColor,\n          size = _this$props.size; // handling the glyphs as strings\n\n      if (dangerouslySetGlyph) {\n        return _react.default.createElement(IconWrapper, {\n          onClick: onClick,\n          primaryColor: primaryColor,\n          secondaryColor: secondaryColor,\n          size: size,\n          \"aria-label\": this.props.label,\n          dangerouslySetInnerHTML: {\n            __html: Icon.insertDynamicGradientID(dangerouslySetGlyph)\n          }\n        });\n      } // handling the glyphs when passed through as functions\n\n\n      return _react.default.createElement(IconWrapper, {\n        onClick: onClick,\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        size: size,\n        \"aria-label\": this.props.label\n      }, Glyph ? _react.default.createElement(Glyph, {\n        role: \"presentation\"\n      }) : null);\n    }\n  }], [{\n    key: \"insertDynamicGradientID\",\n\n    /* Icons need unique gradient IDs across instances for different gradient definitions to work\n     * correctly.\n     * A step in the icon build process replaces linear gradient IDs and their references in paths\n     * to a placeholder string so we can replace them with a dynamic ID here.\n     * Replacing the original IDs with placeholders in the build process is more robust than not\n     * using placeholders as we do not have to rely on regular expressions to find specific element\n     * to replace.\n     */\n    value: function insertDynamicGradientID(svgStr) {\n      var id = (0, _uuid.default)();\n      var replacedSvgStr = svgStr.replace(/id=\"([^\"]+)-idPlaceholder\"/g, \"id=$1-\".concat(id)).replace(/fill=\"url\\(#([^\"]+)-idPlaceholder\\)\"/g, \"fill=\\\"url(#$1-\".concat(id, \")\\\"\"));\n      return replacedSvgStr;\n    }\n  }]);\n  return Icon;\n}(_react.Component);\n\nexports.default = Icon;\n(0, _defineProperty2.default)(Icon, \"defaultProps\", {\n  onClick: function onClick() {}\n});\nvar size = Object.keys(_constants.sizes).reduce(function (p, c) {\n  return Object.assign(p, (0, _defineProperty2.default)({}, c, c));\n}, {});\nexports.size = size;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sizes = void 0;\nvar sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexports.sizes = sizes;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || 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; };\n\nvar defaults = {\n  tName: 't',\n  i18nName: 'i18n',\n  handleName: 'localize',\n  selectorAttr: 'data-i18n',\n  targetAttr: 'i18n-target',\n  optionsAttr: 'i18n-options',\n  useOptionsAttr: false,\n  parseDefaultValueFromContent: true\n};\n\nfunction init(i18next, $) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n\n  options = _extends({}, defaults, options);\n\n  function parse(ele, key, opts) {\n    if (key.length === 0) return;\n\n    var attr = 'text';\n\n    if (key.indexOf('[') === 0) {\n      var parts = key.split(']');\n      key = parts[1];\n      attr = parts[0].substr(1, parts[0].length - 1);\n    }\n\n    if (key.indexOf(';') === key.length - 1) {\n      key = key.substr(0, key.length - 2);\n    }\n\n    function extendDefault(o, val) {\n      if (!options.parseDefaultValueFromContent) return o;\n      return _extends({}, o, { defaultValue: val });\n    }\n\n    if (attr === 'html') {\n      ele.html(i18next.t(key, extendDefault(opts, ele.html())));\n    } else if (attr === 'text') {\n      ele.text(i18next.t(key, extendDefault(opts, ele.text())));\n    } else if (attr === 'prepend') {\n      ele.prepend(i18next.t(key, extendDefault(opts, ele.html())));\n    } else if (attr === 'append') {\n      ele.append(i18next.t(key, extendDefault(opts, ele.html())));\n    } else if (attr.indexOf('data-') === 0) {\n      var dataAttr = attr.substr('data-'.length);\n      var translated = i18next.t(key, extendDefault(opts, ele.data(dataAttr)));\n\n      // we change into the data cache\n      ele.data(dataAttr, translated);\n      // we change into the dom\n      ele.attr(attr, translated);\n    } else {\n      ele.attr(attr, i18next.t(key, extendDefault(opts, ele.attr(attr))));\n    }\n  }\n\n  function localize(ele, opts) {\n    var key = ele.attr(options.selectorAttr);\n    if (!key && typeof key !== 'undefined' && key !== false) key = ele.text() || ele.val();\n    if (!key) return;\n\n    var target = ele,\n        targetSelector = ele.data(options.targetAttr);\n\n    if (targetSelector) target = ele.find(targetSelector) || ele;\n\n    if (!opts && options.useOptionsAttr === true) opts = ele.data(options.optionsAttr);\n\n    opts = opts || {};\n\n    if (key.indexOf(';') >= 0) {\n      var keys = key.split(';');\n\n      $.each(keys, function (m, k) {\n        // .trim(): Trim the comma-separated parameters on the data-i18n attribute.\n        if (k !== '') parse(target, k.trim(), opts);\n      });\n    } else {\n      parse(target, key, opts);\n    }\n\n    if (options.useOptionsAttr === true) {\n      var clone = {};\n      clone = _extends({ clone: clone }, opts);\n\n      delete clone.lng;\n      ele.data(options.optionsAttr, clone);\n    }\n  }\n\n  function handle(opts) {\n    return this.each(function () {\n      // localize element itself\n      localize($(this), opts);\n\n      // localize children\n      var elements = $(this).find('[' + options.selectorAttr + ']');\n      elements.each(function () {\n        localize($(this), opts);\n      });\n    });\n  };\n\n  // $.t $.i18n shortcut\n  $[options.tName] = i18next.t.bind(i18next);\n  $[options.i18nName] = i18next;\n\n  // selector function $(mySelector).localize(opts);\n  $.fn[options.handleName] = handle;\n}\n\nexports.default = {\n  init: init\n};","/* @flow */\n\nimport jqueryI18next from 'jquery-i18next';\n\nimport { i18next } from '../../react/features/base/i18n';\n\ndeclare var $: Function;\n\n/**\n * Notifies that the {@link i18next} instance has finished its initialization.\n *\n * @returns {void}\n * @private\n */\nfunction _onI18nInitialized() {\n    $('[data-i18n]').localize();\n}\n\n/**\n *\n */\nclass Translation {\n    /**\n     *\n     */\n    constructor() {\n        jqueryI18next.init(i18next, $, { useOptionsAttr: true });\n\n        if (i18next.isInitialized) {\n            _onI18nInitialized();\n        } else {\n            i18next.on('initialized', _onI18nInitialized);\n        }\n\n        i18next.on('languageChanged', _onI18nInitialized);\n    }\n\n    /**\n     *\n     */\n    generateTranslationHTML(key: string, options: Object) {\n        const optAttr\n            = options ? ` data-i18n-options='${JSON.stringify(options)}'` : '';\n\n        // XXX i18next expects undefined if options are missing.\n        const text = i18next.t(key, options ? options : undefined);\n\n        return `<span data-i18n=\"${key}\"${optAttr}>${text}</span>`;\n    }\n\n    /**\n     *\n     */\n    translateElement(selector: Object, options: Object) {\n        // XXX i18next expects undefined if options are missing.\n        selector.localize(options ? options : undefined);\n    }\n}\n\nexport default new Translation();\n","/* global APP */\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { getJitsiMeetTransport } from '../modules/transport';\n\nimport { App } from './features/app';\nimport { getLogger } from './features/base/logging/functions';\nimport { Platform } from './features/base/react';\n\nconst logger = getLogger('index.web');\nconst OS = Platform.OS;\n\n/**\n * Renders the app when the DOM tree has been loaded.\n */\ndocument.addEventListener('DOMContentLoaded', () => {\n    const now = window.performance.now();\n\n    APP.connectionTimes['document.ready'] = now;\n    logger.log('(TIME) document ready:\\t', now);\n\n    // Render the main/root Component.\n    ReactDOM.render(<App />, document.getElementById('react'));\n});\n\n// Workaround for the issue when returning to a page with the back button and\n// the page is loaded from the 'back-forward' cache on iOS which causes nothing\n// to be rendered.\nif (OS === 'ios') {\n    window.addEventListener('pageshow', event => {\n        // Detect pages loaded from the 'back-forward' cache\n        // (https://webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/)\n        if (event.persisted) {\n            // Maybe there is a more graceful approach but in the moment of\n            // writing nothing else resolves the issue. I tried to execute our\n            // DOMContentLoaded handler but it seems that the 'onpageshow' event\n            // is triggered only when 'window.location.reload()' code exists.\n            window.location.reload();\n        }\n    });\n}\n\n/**\n * Stops collecting the logs and disposing the API when the user closes the\n * page.\n */\nwindow.addEventListener('beforeunload', () => {\n    // Stop the LogCollector\n    if (APP.logCollectorStarted) {\n        APP.logCollector.stop();\n        APP.logCollectorStarted = false;\n    }\n    APP.API.notifyConferenceLeft(APP.conference.roomName);\n    APP.API.dispose();\n    getJitsiMeetTransport().dispose();\n});\n","/* application specific logic */\n\nimport 'jquery';\nimport 'jquery-contextmenu';\nimport 'jQuery-Impromptu';\n\nimport conference from './conference';\nimport API from './modules/API';\nimport keyboardshortcut from './modules/keyboardshortcut/keyboardshortcut';\nimport remoteControl from './modules/remotecontrol/RemoteControl';\nimport translation from './modules/translation/translation';\nimport UI from './modules/UI/UI';\n\nwindow.APP = {\n    API,\n    conference,\n\n    // Used by do_external_connect.js if we receive the attach data after\n    // connect was already executed. status property can be 'initialized',\n    // 'ready', or 'connecting'. We are interested in 'ready' status only which\n    // means that connect was executed but we have to wait for the attach data.\n    // In status 'ready' handler property will be set to a function that will\n    // finish the connect process when the attach data or error is received.\n    connect: {\n        handler: null,\n        status: 'initialized'\n    },\n\n    // Used for automated performance tests.\n    connectionTimes: {\n        'index.loaded': window.indexLoadedTime\n    },\n\n    keyboardshortcut,\n    remoteControl,\n    translation,\n    UI\n};\n\n// TODO The execution of the mobile app starts from react/index.native.js.\n// Similarly, the execution of the Web app should start from react/index.web.js\n// for the sake of consistency and ease of understanding. Temporarily though\n// because we are at the beginning of introducing React into the Web app, allow\n// the execution of the Web app to start from app.js in order to reduce the\n// complexity of the beginning step.\nimport './react';\n","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport StatelessMenu from './DropdownMenuStateless';\n\nvar DropdownMenu =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(DropdownMenu, _Component);\n\n  function DropdownMenu() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, DropdownMenu);\n\n    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n      _args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(DropdownMenu)).call.apply(_getPrototypeOf2, [this].concat(_args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      isOpen: _this.props.defaultOpen,\n      items: _toConsumableArray(_this.props.items)\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"findActivatedGroup\", function (item) {\n      return _this.state.items.filter(function (group) {\n        return group.items.indexOf(item) > -1;\n      })[0];\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleItemActivation\", function (attrs) {\n      var activatedItem = attrs.item;\n\n      var activatedGroup = _this.findActivatedGroup(activatedItem);\n\n      var items = _toConsumableArray(_this.state.items);\n\n      switch (activatedItem.type) {\n        case 'checkbox':\n          activatedItem.isChecked = !activatedItem.isChecked;\n\n          _this.props.onItemActivated({\n            item: activatedItem\n          });\n\n          _this.setState({\n            items: items\n          });\n\n          break;\n\n        case 'radio':\n          activatedGroup.items.forEach(function (i) {\n            if (i === activatedItem) {\n              i.isChecked = true; // eslint-disable-line no-param-reassign\n            } else {\n              i.isChecked = false; // eslint-disable-line no-param-reassign\n            }\n          });\n\n          _this.props.onItemActivated({\n            item: activatedItem\n          });\n\n          _this.setState({\n            items: items\n          });\n\n          break;\n\n        case 'link':\n        default:\n          _this.props.onItemActivated({\n            item: activatedItem\n          });\n\n          _this.close();\n\n          break;\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleOpenChange\", function (attrs) {\n      var _this$props;\n\n      if (_this.state.isOpen === attrs.isOpen) return;\n\n      _this.setState({\n        isOpen: attrs.isOpen\n      });\n\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      (_this$props = _this.props).onOpenChange.apply(_this$props, [attrs].concat(args));\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"close\", function () {\n      var _this$props2;\n\n      if (_this.state.isOpen === false) return;\n\n      _this.setState({\n        isOpen: false\n      });\n\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      (_this$props2 = _this.props).onOpenChange.apply(_this$props2, [{\n        isOpen: false\n      }].concat(args));\n    });\n\n    return _this;\n  }\n\n  _createClass(DropdownMenu, [{\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(nextProps) {\n      if (nextProps.items !== this.state.items) {\n        this.setState({\n          items: _toConsumableArray(nextProps.items)\n        });\n      }\n\n      if (nextProps.isOpen !== this.props.isOpen) {\n        this.setState({\n          isOpen: nextProps.isOpen\n        });\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var isOpen = this.state.isOpen;\n      var _this$props3 = this.props,\n          appearance = _this$props3.appearance,\n          boundariesElement = _this$props3.boundariesElement,\n          children = _this$props3.children,\n          isLoading = _this$props3.isLoading,\n          items = _this$props3.items,\n          position = _this$props3.position,\n          isMenuFixed = _this$props3.isMenuFixed,\n          shouldAllowMultilineItems = _this$props3.shouldAllowMultilineItems,\n          shouldFitContainer = _this$props3.shouldFitContainer,\n          shouldFlip = _this$props3.shouldFlip,\n          trigger = _this$props3.trigger,\n          triggerButtonProps = _this$props3.triggerButtonProps,\n          triggerType = _this$props3.triggerType,\n          onPositioned = _this$props3.onPositioned;\n      return React.createElement(StatelessMenu, {\n        appearance: appearance,\n        boundariesElement: boundariesElement,\n        isOpen: isOpen,\n        isLoading: isLoading,\n        items: items,\n        onItemActivated: this.handleItemActivation,\n        onOpenChange: this.handleOpenChange,\n        position: position,\n        isMenuFixed: isMenuFixed,\n        shouldAllowMultilineItems: shouldAllowMultilineItems,\n        shouldFitContainer: shouldFitContainer,\n        shouldFlip: shouldFlip,\n        trigger: trigger,\n        triggerButtonProps: triggerButtonProps,\n        triggerType: triggerType,\n        onPositioned: onPositioned\n      }, children);\n    }\n  }]);\n\n  return DropdownMenu;\n}(Component);\n\n_defineProperty(DropdownMenu, \"defaultProps\", {\n  appearance: 'default',\n  boundariesElement: 'viewport',\n  defaultOpen: false,\n  isLoading: false,\n  isOpen: false,\n  items: [],\n  onItemActivated: function onItemActivated() {},\n  onOpenChange: function onOpenChange() {},\n  position: 'bottom left',\n  isMenuFixed: false,\n  shouldAllowMultilineItems: false,\n  shouldFitContainer: false,\n  shouldFlip: true,\n  triggerType: 'default',\n  onPositioned: function onPositioned() {}\n});\n\nexport { DropdownMenu as default };","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return _toConsumableArray(ancestorData).concat([data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_assertThisInitialized(_this)), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}","import styled, { css } from 'styled-components';\nimport { colors, themed, gridSize } from '@atlaskit/theme';\nvar spacing = gridSize();\nvar fontSize = 12;\nvar innerHeight = spacing * 2; // 16px\n\nvar lineHeight = innerHeight / fontSize;\n\nvar getPadding = function getPadding(_ref) {\n  var firstChild = _ref.firstChild,\n      inlineEdit = _ref.inlineEdit;\n  var right = 0;\n  var bottom = spacing / 2;\n  var left = 0;\n  var top = spacing * 2.5;\n\n  if (inlineEdit) {\n    bottom = 0;\n    left = spacing;\n    top = spacing;\n  }\n\n  if (firstChild) {\n    top = spacing / 2;\n  }\n\n  return css([\"\\n    padding: \", \"px \", \"px \", \"px \", \"px;\\n  \"], top, right, bottom, left);\n};\n\nexport var LabelWrapper = styled.label.withConfig({\n  displayName: \"Label__LabelWrapper\",\n  componentId: \"sc-17towfw-0\"\n})([\"\\n  display: block;\\n\"]);\nvar getColor = themed({\n  light: colors.N200,\n  dark: colors.DN90\n});\nvar getDisabledColor = themed({\n  light: colors.N60,\n  dark: colors.DN300\n});\nexport var LabelInner = styled.div.withConfig({\n  displayName: \"Label__LabelInner\",\n  componentId: \"sc-17towfw-1\"\n})([\"\\n  color: \", \";\\n  font-size: \", \"px;\\n  font-weight: 600;\\n  line-height: \", \";\\n  \", \";\\n\\n  \", \";\\n\"], function (props) {\n  return props.isDisabled ? getDisabledColor(props) : getColor(props);\n}, fontSize, lineHeight, getPadding, function (p) {\n  return p.isHidden && 'display: none;';\n});\nexport var RequiredIndicator = styled.span.withConfig({\n  displayName: \"Label__RequiredIndicator\",\n  componentId: \"sc-17towfw-2\"\n})([\"\\n  color: \", \";\\n  padding-left: 2px;\\n\"], colors.red);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { LabelWrapper, RequiredIndicator, LabelInner } from '../styled/Label';\n\nvar Label =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Label, _Component);\n\n  function Label() {\n    _classCallCheck(this, Label);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(Label).apply(this, arguments));\n  }\n\n  _createClass(Label, [{\n    key: \"render\",\n\n    /* eslint-disable jsx-a11y/no-static-element-interactions */\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          children = _this$props.children,\n          htmlFor = _this$props.htmlFor,\n          isFirstChild = _this$props.isFirstChild,\n          isLabelHidden = _this$props.isLabelHidden,\n          isDisabled = _this$props.isDisabled,\n          isRequired = _this$props.isRequired,\n          label = _this$props.label,\n          onClick = _this$props.onClick;\n      return React.createElement(LabelWrapper, {\n        htmlFor: htmlFor\n      }, React.createElement(LabelInner, {\n        isHidden: isLabelHidden,\n        inlineEdit: appearance === 'inline-edit',\n        firstChild: isFirstChild,\n        isDisabled: isDisabled\n      }, React.createElement(\"span\", {\n        onClick: onClick\n      }, label), isRequired ? React.createElement(RequiredIndicator, {\n        role: \"presentation\"\n      }, \"*\") : null), children);\n    }\n  }]);\n\n  return Label;\n}(Component);\n\n_defineProperty(Label, \"defaultProps\", {\n  appearance: 'default'\n});\n\nexport { Label as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport memoizeOne from 'memoize-one';\nimport { Popper as ReactPopper } from 'react-popper';\nexport { Manager, Reference } from 'react-popper';\n\nvar getFlipBehavior = function getFlipBehavior(side) {\n  return {\n    auto: [],\n    top: ['top', 'bottom', 'top'],\n    right: ['right', 'left', 'right'],\n    bottom: ['bottom', 'top', 'bottom'],\n    left: ['left', 'right', 'left']\n  }[side];\n};\n\nexport var Popper =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Popper, _Component);\n\n  function Popper() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Popper);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Popper)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getModifiers\", memoizeOne(function (placement) {\n      var flipBehavior = getFlipBehavior(placement.split('-')[0]);\n      var modifiers = {\n        flip: {\n          enabled: true,\n          behavior: flipBehavior,\n          boundariesElement: 'viewport'\n        },\n        hide: {\n          enabled: true,\n          boundariesElement: 'scrollParent'\n        },\n        offset: {\n          enabled: true,\n          offset: _this.props.offset\n        },\n        preventOverflow: {\n          enabled: true,\n          escapeWithReference: false,\n          boundariesElement: 'window'\n        }\n      };\n      return modifiers;\n    }));\n\n    return _this;\n  }\n\n  _createClass(Popper, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          placement = _this$props.placement,\n          children = _this$props.children,\n          referenceElement = _this$props.referenceElement;\n      var modifiers = this.getModifiers(this.props.placement);\n      return React.createElement(ReactPopper, _extends({\n        positionFixed: true,\n        modifiers: modifiers,\n        placement: placement\n      }, referenceElement ? {\n        referenceElement: referenceElement\n      } : {}), children);\n    }\n  }]);\n\n  return Popper;\n}(Component);\n\n_defineProperty(Popper, \"defaultProps\", {\n  children: function children() {},\n  offset: '0, 8px',\n  placement: 'bottom-start'\n});","import styled from 'styled-components';\nimport { borderRadius, colors, gridSize, math, themed, elevation, layers } from '@atlaskit/theme';\nvar backgroundColor = themed({\n  light: colors.N0,\n  dark: colors.DN50\n});\nvar textColor = themed({\n  light: colors.N900,\n  dark: colors.DN600\n}); // eslint-disable-next-line import/prefer-default-export\n\nexport var Container = styled.div.withConfig({\n  displayName: \"styled__Container\",\n  componentId: \"sc-1v7azd6-0\"\n})([\"\\n  background: \", \";\\n  border-radius: \", \"px;\\n  box-sizing: content-box; /* do not set this to border-box or it will break the overflow handling */\\n  color: \", \";\\n  max-height: \", \"px;\\n  max-width: \", \"px;\\n  padding: \", \"px \", \"px;\\n  z-index: \", \";\\n\\n  \", \";\\n\\n  &:focus {\\n    outline: none;\\n  }\\n\"], backgroundColor, borderRadius, textColor, math.multiply(gridSize, 56), math.multiply(gridSize, 56), math.multiply(gridSize, 2), math.multiply(gridSize, 3), layers.dialog, elevation.e200);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport NodeResolver from 'react-node-resolver';\nimport { Manager, Reference, Popper } from '@atlaskit/popper';\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport { Container } from './styled';\n\nvar InlineDialog =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(InlineDialog, _Component);\n\n  function InlineDialog() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, InlineDialog);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(InlineDialog)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"containerRef\", null);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"triggerRef\", null);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleClickOutside\", function (event) {\n      var _this$props = _this.props,\n          isOpen = _this$props.isOpen,\n          onClose = _this$props.onClose;\n      if (event.defaultPrevented) return;\n      var container = _this.containerRef;\n      var trigger = _this.triggerRef;\n      var target = event.target; // exit if we click outside but on the trigger — it can handle the clicks itself\n\n      if (trigger && trigger.contains(target)) return; // call onClose if the click originated from outside the dialog\n\n      if (isOpen && container && !container.contains(target)) {\n        onClose({\n          isOpen: false,\n          event: event\n        });\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(InlineDialog, [{\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (typeof window === 'undefined') return;\n\n      if (!prevProps.isOpen && this.props.isOpen) {\n        window.addEventListener('click', this.handleClickOutside, true);\n      } else if (prevProps.isOpen && !this.props.isOpen) {\n        window.removeEventListener('click', this.handleClickOutside);\n      }\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      if (typeof window === 'undefined') return;\n\n      if (this.props.isOpen) {\n        window.addEventListener('click', this.handleClickOutside, true);\n      }\n    }\n  }, {\n    key: \"componentWillUnMount\",\n    value: function componentWillUnMount() {\n      if (typeof window === 'undefined') return;\n      window.removeEventListener('click', this.handleClickOutside);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          children = _this$props2.children,\n          placement = _this$props2.placement,\n          isOpen = _this$props2.isOpen,\n          content = _this$props2.content,\n          onContentBlur = _this$props2.onContentBlur,\n          onContentFocus = _this$props2.onContentFocus,\n          onContentClick = _this$props2.onContentClick;\n      var popper = isOpen ? React.createElement(Popper, {\n        placement: placement\n      }, function (_ref) {\n        var ref = _ref.ref,\n            style = _ref.style,\n            outOfBoundaries = _ref.outOfBoundaries;\n        return React.createElement(Container, {\n          onBlur: onContentBlur,\n          onFocus: onContentFocus,\n          onClick: onContentClick,\n          outOfBoundaries: outOfBoundaries,\n          innerRef: function innerRef(node) {\n            _this2.containerRef = node;\n            ref(node);\n          },\n          style: style\n        }, content);\n      }) : null;\n      return React.createElement(Manager, null, React.createElement(Reference, null, function (_ref2) {\n        var ref = _ref2.ref;\n        return React.createElement(NodeResolver, {\n          innerRef: function innerRef(node) {\n            _this2.triggerRef = node;\n            ref(node);\n          }\n        }, children);\n      }), popper);\n    }\n  }]);\n\n  return InlineDialog;\n}(Component);\n\n_defineProperty(InlineDialog, \"defaultProps\", {\n  children: null,\n  content: null,\n  isOpen: false,\n  onContentBlur: function onContentBlur() {},\n  onContentClick: function onContentClick() {},\n  onContentFocus: function onContentFocus() {},\n  onClose: function onClose() {},\n  placement: 'bottom-start'\n});\n\nexport { InlineDialog as InlineDialogWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'inlineDialog',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onClose: createAndFireEventOnAtlaskit({\n    action: 'closed',\n    actionSubject: 'inlineDialog',\n    attributes: {\n      componentName: 'inlineDialog',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(InlineDialog));","import { colors, themed } from '@atlaskit/theme'; // The following are the name for color mappings in @atlaskit/themes\n// The exports are the functions, not the objects, so could not be used here\n\nvar disabled = {\n  light: colors.N20,\n  dark: colors.DN20\n}; // For validation red is the new 'yellow' which was { light: colors.Y300, dark: colors.Y300 }\n\nvar red = {\n  light: colors.R400,\n  dark: colors.R400\n}; // The following do not yet have a darkmode 'map': N20A, N10\n\nexport var getBackgroundColor = themed('appearance', {\n  standard: {\n    light: colors.N10,\n    dark: colors.DN10\n  },\n  disabled: disabled,\n  invalid: {\n    light: colors.N10,\n    dark: colors.DN10\n  },\n  subtle: {\n    light: 'transparent',\n    dark: 'transparent'\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBackgroundColorFocus = themed('appearance', {\n  standard: {\n    light: colors.N0,\n    dark: colors.DN10\n  },\n  disabled: disabled,\n  invalid: {\n    light: colors.N0,\n    dark: colors.DN10\n  },\n  subtle: {\n    light: colors.N0,\n    dark: colors.DN10\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBackgroundColorHover = themed('appearance', {\n  standard: {\n    light: colors.N30,\n    dark: colors.DN30\n  },\n  disabled: disabled,\n  invalid: {\n    light: colors.N30,\n    dark: colors.DN30\n  },\n  subtle: {\n    light: colors.N30,\n    dark: colors.DN30\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBorderColor = themed('appearance', {\n  standard: {\n    light: colors.N40,\n    dark: colors.DN40\n  },\n  disabled: {\n    light: colors.N40,\n    dark: colors.DN40\n  },\n  invalid: red,\n  subtle: {\n    light: 'transparent',\n    dark: 'transparent'\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBorderColorFocus = themed('appearance', {\n  standard: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  disabled: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  invalid: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  subtle: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});","import styled, { css } from 'styled-components';\nimport { gridSize, fontSize, colors, themed } from '@atlaskit/theme';\nimport { getBackgroundColor, getBackgroundColorFocus, getBackgroundColorHover, getBorderColor, getBorderColorFocus } from './theme';\nvar borderRadius = '3px';\nvar borderWidth = 2;\nvar grid = gridSize();\nvar lineHeightBase = grid * 2.5;\nvar lineHeightCompact = grid * 2;\nvar heightBase = grid * 5;\nvar heightCompact = grid * 4;\nvar horizontalPadding = grid;\nvar innerHeight = grid * 3;\nvar transitionDuration = '0.2s';\n\nvar getBorderAndPadding = function getBorderAndPadding(_ref) {\n  var paddingDisabled = _ref.paddingDisabled,\n      compact = _ref.compact;\n  var height = compact ? heightCompact : heightBase;\n  var padding = paddingDisabled ? \"0\" : \"\".concat((height - 2 * borderWidth - innerHeight) / 2, \"px \").concat(horizontalPadding - borderWidth, \"px\");\n  return css([\"\\n    border-width: \", \"px;\\n    padding: \", \";\\n  \"], borderWidth, padding);\n};\n\nvar getLineHeight = function getLineHeight(props) {\n  var currentLineHeight = props.compact ? lineHeightCompact : lineHeightBase;\n  return currentLineHeight / fontSize();\n};\n\nvar getDisabledColor = themed({\n  light: colors.N70,\n  dark: colors.DN90\n});\n\nvar getDisabledState = function getDisabledState(props) {\n  return props.disabled && css([\"\\n    color: \", \";\\n    pointer-events: none;\\n  \"], getDisabledColor(props));\n};\n\nvar getHoverState = function getHoverState(props) {\n  if (props.readOnly || props.isFocused || props.none) return null;\n  return css([\"\\n    &:hover {\\n      background-color: \", \";\\n    }\\n  \"], getBackgroundColorHover(props));\n};\n\nvar getBorderStyle = function getBorderStyle(props) {\n  return props.appearance === 'none' ? 'none' : 'solid';\n};\n\nvar getMinHeight = function getMinHeight(_ref2) {\n  var compact = _ref2.compact;\n  var minHeight = compact ? heightCompact : heightBase;\n  return css([\"\\n    min-height: \", \"px;\\n  \"], minHeight);\n}; // need an element wrapping the children because IE11 doesn't apply min-height correctly\n// to flex-elements. See https://github.com/philipwalton/flexbugs#3-min-height-on-a-flex-container-wont-apply-to-its-flex-items\n\n\nexport var ChildWrapper = styled.div.withConfig({\n  displayName: \"Content__ChildWrapper\",\n  componentId: \"ve26fj-0\"\n})([\"\\n  display: flex;\\n  flex-direction: column;\\n  flex: 1 0 auto;\\n  max-width: 100%;\\n  \", \";\\n\"], function (p) {\n  return getMinHeight(p);\n});\nvar getColor = themed({\n  light: colors.N900,\n  dark: colors.DN600\n});\nexport var Content = styled.div.withConfig({\n  displayName: \"Content\",\n  componentId: \"ve26fj-1\"\n})([\"\\n  align-items: center;\\n  background-color: \", \";\\n  border-color: \", \";\\n  border-radius: \", \";\\n  border-style: \", \";\\n  box-sizing: border-box;\\n  color: \", \";\\n  display: flex;\\n  flex: 1 0 auto;\\n  font-size: \", \"px;\\n  justify-content: space-between;\\n  line-height: \", \";\\n  max-width: 100%;\\n  overflow: hidden;\\n  transition: background-color \", \" ease-in-out,\\n    border-color \", \" ease-in-out;\\n  word-wrap: break-word;\\n  \", \" \", \" \", \";\\n\"], function (props) {\n  return props.isFocused ? getBackgroundColorFocus(props) : getBackgroundColor(props);\n}, function (props) {\n  return props.isFocused ? getBorderColorFocus(props) : getBorderColor(props);\n}, borderRadius, getBorderStyle, getColor, fontSize, getLineHeight, transitionDuration, transitionDuration, getBorderAndPadding, getHoverState, getDisabledState);\n\nvar getMaxWidth = function getMaxWidth(maxWidth) {\n  return maxWidth ? \"\".concat(maxWidth, \"px\") : '100%';\n};\n/* IE11 does not respect max-width when using flex-grow + nested flex content, similar to https://github.com/philipwalton/flexbugs#flexbug-11\n * and https://github.com/philipwalton/flexbugs#flexbug-17.\n * This can be fixed by setting the basis to 100%, allowing shrinking and setting the min-width to the original flex-basis value\n * (or 0 if it was auto).\n * Alternatively since we're just setting the contents to fit parent container when grow is set to true, we can just change flex-basis\n * to 100% and not worry about shrinking or growing.\n * See AK-4285.\n */\n\n\nexport var ContentWrapper = styled.div.withConfig({\n  displayName: \"Content__ContentWrapper\",\n  componentId: \"ve26fj-2\"\n})([\"\\n  \", \" \", \" \", \" max-width: \", \";\\n\"], function (props) {\n  return props.disabled && \"\\n      cursor: not-allowed;\\n    \";\n}, function (props) {\n  return props.grow ? css([\"\\n        flex: 0 0 \", \";\\n      \"], getMaxWidth(props.maxWidth)) : \"\\n          flex: 0 0 auto;\\n        \";\n}, function (props) {\n  return props.grow ? \"\\n          display: block;\\n        \" : \"\\n          display: inline-block;\\n          vertical-align: top;\\n        \";\n}, function (props) {\n  return getMaxWidth(props.maxWidth);\n});","export var SIZES_MAP = {\n  xsmall: 8,\n  small: 16,\n  medium: 24,\n  large: 48,\n  xlarge: 96\n};\nexport var DEFAULT_SIZE = SIZES_MAP.small;","import styled, { keyframes } from 'styled-components';\n\n/* Define keyframes statically to prevent a perfomance issue in styled components v1 where the keyframes function\n * does not cache previous values resulting in each spinner injecting the same keyframe definition\n * in the DOM.\n * This can be reverted to use dynamic keyframes when we upgrade to styled components v2\n */\nvar keyframeNames = {\n  noop: keyframes([\"\\n    from { opacity: 0; }\\n    to { opacity: 0; }\\n  \"]),\n  enterRotate: keyframes([\"\\n    from { transform: rotate(50deg); }\\n    to { transform: rotate(230deg); }\\n  \"]),\n  leaveRotate: keyframes([\"\\n    from { transform: rotate(230deg); }\\n    to { transform: rotate(510deg); }\\n  \"]),\n  leaveOpacity: keyframes([\"\\n    from { opacity: 1; }\\n    to { opacity: 0; }\\n  \"])\n};\nexport var getContainerAnimation = function getContainerAnimation(_ref) {\n  var delay = _ref.delay,\n      phase = _ref.phase;\n\n  if (phase === 'DELAY') {\n    /* This hides the spinner and allows us to use animationend events to move to the next phase in\n     * the same way we do with the other lifecycle stages */\n    return \"animation: \".concat(delay, \"s \").concat(keyframeNames.noop, \";\");\n  }\n\n  if (phase === 'ENTER' || phase === 'IDLE') {\n    return \"animation: 1s ease-in-out forwards \".concat(keyframeNames.enterRotate, \";\");\n  }\n\n  if (phase === 'LEAVE') {\n    return \"animation: 0.53s ease-in-out forwards \".concat(keyframeNames.leaveRotate, \",\\n      0.2s ease-in-out 0.33s \").concat(keyframeNames.leaveOpacity, \";\");\n  }\n\n  return '';\n};\n\nvar getSize = function getSize(_ref2) {\n  var size = _ref2.size;\n  return \"\".concat(size, \"px\");\n};\n\nvar Container = styled.div.withConfig({\n  displayName: \"styledContainer__Container\",\n  componentId: \"sc-1qs8wxp-0\"\n})([\"\\n  \", \" display: flex;\\n  height: \", \";\\n  width: \", \";\\n\\n  /* Rapidly creating and removing spinners will result in multiple spinners being visible while\\n   * they complete their exit animations. This rules hides the spinner if another one has been\\n   * added. */\\n  div + & {\\n    display: none;\\n  }\\n\"], getContainerAnimation, getSize, getSize);\nContainer.displayName = 'SpinnerContainer';\nexport default Container;","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport styled, { css, keyframes } from 'styled-components';\nimport { colors, themed } from '@atlaskit/theme';\nimport { SIZES_MAP } from './constants';\n\nvar getStrokeWidth = function getStrokeWidth(size) {\n  return Math.round(size / 10);\n};\n\nvar getStrokeCircumference = function getStrokeCircumference(size) {\n  var strokeWidth = getStrokeWidth(size);\n  var strokeRadius = size / 2 - strokeWidth / 2;\n  return Math.PI * strokeRadius * 2;\n};\n/* Define keyframes statically to prevent a perfomance issue in styled components v1 where the keyframes function\n * does not cache previous values resulting in each spinner injecting the same keyframe definition\n * in the DOM.\n * This can be reverted to dynamic keyframes when we upgrade to styled components v2\n */\n\n\nvar keyframeNames = {\n  noop: keyframes([\"\\n    from { opacity: 0; }\\n    to { opacity: 0; }\\n  \"]),\n  rotate: keyframes([\"\\n    to { transform: rotate(360deg); }\\n  \"]),\n  enterOpacity: keyframes([\"\\n    from { opacity: 0; }\\n    to { opacity: 1; }\\n  \"]),\n  smallEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.small), getStrokeCircumference(SIZES_MAP.small) * 0.8),\n  mediumEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.medium), getStrokeCircumference(SIZES_MAP.medium) * 0.8),\n  largeEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.large), getStrokeCircumference(SIZES_MAP.large) * 0.8),\n  xlargeEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.xlarge), getStrokeCircumference(SIZES_MAP.xlarge) * 0.8)\n};\n/* If a standard size is used, we can use one of our statically defined keyframes, otherwise\n * we're forced to dynamically create the keyframe and incur a performance cost.\n */\n\nvar getEnterStrokeKeyframe = function getEnterStrokeKeyframe(size) {\n  var standardSizeName = Object.keys(SIZES_MAP).find(function (sizeName) {\n    return size === SIZES_MAP[sizeName];\n  });\n\n  if (standardSizeName) {\n    return keyframeNames[\"\".concat(standardSizeName, \"EnterStroke\")];\n  }\n\n  var circumference = getStrokeCircumference(size);\n  return keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], circumference, circumference * 0.8);\n};\n\nvar spinnerColor = themed({\n  light: colors.N500,\n  dark: colors.N0\n});\nvar spinnerColorInverted = themed({\n  light: colors.N0,\n  dark: colors.N0\n});\nexport var getStrokeColor = function getStrokeColor(_ref // $FlowFixMe - theme is not found in props\n) {\n  var invertColor = _ref.invertColor,\n      props = _objectWithoutProperties(_ref, [\"invertColor\"]);\n\n  return invertColor ? spinnerColorInverted(props) : spinnerColor(props);\n};\nexport var svgStyles = css([\"\\n  \", \";\\n\"], function (props) {\n  var circumference = getStrokeCircumference(props.size);\n  var idleRotation = \"0.86s cubic-bezier(0.4, 0.15, 0.6, 0.85) infinite \".concat(keyframeNames.rotate);\n  var spinUpStroke = \"0.8s ease-in-out \".concat(getEnterStrokeKeyframe(props.size));\n  var spinUpOpacity = \"0.2s ease-in-out \".concat(keyframeNames.enterOpacity);\n  var activeAnimations = [idleRotation];\n\n  if (props.phase === 'ENTER') {\n    activeAnimations.push(spinUpStroke, spinUpOpacity);\n  }\n\n  return css([\"\\n      animation: \", \";\\n      fill: none;\\n      stroke: \", \";\\n      stroke-dasharray: \", \"px;\\n      stroke-dashoffset: \", \"px;\\n      stroke-linecap: round;\\n      stroke-width: \", \"px;\\n      transform-origin: center;\\n    \"], activeAnimations.join(', '), getStrokeColor, circumference, circumference * 0.8, getStrokeWidth(props.size));\n});\nvar Svg = styled.svg.withConfig({\n  displayName: \"styledSvg__Svg\",\n  componentId: \"y2l69q-0\"\n})([\"\\n  \", \";\\n\"], svgStyles);\nSvg.displayName = 'SpinnerSvg';\nexport default Svg;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { Transition } from 'react-transition-group';\nimport styled from 'styled-components';\nimport { SIZES_MAP, DEFAULT_SIZE } from './constants';\nimport Container from './styledContainer';\nimport Svg from './styledSvg';\nvar Outer = styled.div.withConfig({\n  displayName: \"Spinner__Outer\",\n  componentId: \"sc-1ejgacn-0\"\n})([\"\\n  display: inline-block;\\n  vertical-align: middle;\\n\"]);\nOuter.displayName = 'Outer';\n\nvar Spinner =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Spinner, _Component);\n\n  function Spinner(props) {\n    var _this;\n\n    _classCallCheck(this, Spinner);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Spinner).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"transitionNode\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"enter\", function () {\n      var delay = _this.props.delay;\n\n      if (delay) {\n        _this.setState({\n          phase: 'DELAY'\n        });\n      } else {\n        _this.setState({\n          phase: 'ENTER'\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"idle\", function () {\n      _this.setState({\n        phase: 'IDLE'\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"exit\", function () {\n      _this.setState({\n        phase: 'LEAVE'\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"endListener\", function (node, done) {\n      var executeCallback = function executeCallback(event) {\n        // ignore animation events on the glyph\n        // $FlowFixMe - tagName does not exist in event.target\n        if (event.target.tagName === 'svg') {\n          return false;\n        }\n\n        if (_this.state.phase === 'DELAY') {\n          _this.setState({\n            phase: 'ENTER'\n          });\n\n          _this.endListener(node, done);\n        } else {\n          done();\n        }\n\n        return node && node.removeEventListener('animationend', executeCallback);\n      };\n\n      return node && node.addEventListener('animationend', executeCallback);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"validateSize\", function () {\n      var size = _this.props.size;\n      var spinnerSize = SIZES_MAP[size] || size;\n      return typeof spinnerSize === 'number' ? spinnerSize : DEFAULT_SIZE;\n    });\n\n    _this.state = {\n      phase: ''\n    };\n    return _this;\n  }\n\n  _createClass(Spinner, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var phase = this.state.phase;\n      var _this$props = this.props,\n          delay = _this$props.delay,\n          invertColor = _this$props.invertColor,\n          isCompleting = _this$props.isCompleting;\n      var size = this.validateSize();\n      var strokeWidth = Math.round(size / 10);\n      var strokeRadius = size / 2 - strokeWidth / 2;\n      return React.createElement(Outer, null, React.createElement(Transition, {\n        addEndListener: this.endListener,\n        appear: true,\n        in: !isCompleting,\n        mountOnEnter: true,\n        unmountOnExit: true,\n        onEnter: this.enter,\n        onEntered: this.idle,\n        onExit: this.exit,\n        onExited: function onExited() {\n          return _this2.props.onComplete();\n        },\n        ref: function ref(node) {\n          _this2.transitionNode = node;\n        }\n      }, React.createElement(Container, {\n        delay: delay / 1000,\n        phase: phase,\n        size: size\n      }, React.createElement(Svg, {\n        focusable: \"false\",\n        height: size,\n        invertColor: invertColor,\n        phase: phase,\n        size: size,\n        viewBox: \"0 0 \".concat(size, \" \").concat(size),\n        width: size,\n        xmlns: \"http://www.w3.org/2000/svg\"\n      }, React.createElement(\"circle\", {\n        cx: size / 2,\n        cy: size / 2,\n        r: strokeRadius\n      })))));\n    }\n  }]);\n\n  return Spinner;\n}(Component);\n\n_defineProperty(Spinner, \"defaultProps\", {\n  delay: 100,\n  isCompleting: false,\n  invertColor: false,\n  onComplete: function onComplete() {},\n  size: 'medium'\n});\n\nexport { Spinner as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport styled from 'styled-components';\nimport React, { Component } from 'react';\nimport { colors } from '@atlaskit/theme';\nimport Spinner from '@atlaskit/spinner';\nimport Icon from '@atlaskit/icon/glyph/warning'; // exported for testing\n\nexport var WarningIcon = styled.div.withConfig({\n  displayName: \"ValidationElement__WarningIcon\",\n  componentId: \"sc-1fk9yms-0\"\n})([\"\\n  align-items: center;\\n  color: \", \";\\n  display: flex;\\n  flex-shrink: 0;\\n\"], colors.yellow); // Spinner needs set height to avoid height jumping\n// Also needs a margin so there is space between it and preceding text\n\nvar SpinnerParent = styled.div.withConfig({\n  displayName: \"ValidationElement__SpinnerParent\",\n  componentId: \"sc-1fk9yms-1\"\n})([\"\\n  height: 20px;\\n  margin-left: 10px;\\n\"]);\n\nvar ValidationElement =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(ValidationElement, _Component);\n\n  function ValidationElement() {\n    _classCallCheck(this, ValidationElement);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(ValidationElement).apply(this, arguments));\n  }\n\n  _createClass(ValidationElement, [{\n    key: \"render\",\n    value: function render() {\n      if (!this.props.isDisabled && this.props.isInvalid) {\n        return React.createElement(WarningIcon, null, React.createElement(Icon, {\n          label: \"warning\"\n        }));\n      }\n\n      return this.props.isLoading ? React.createElement(SpinnerParent, null, React.createElement(Spinner, {\n        size: \"small\"\n      })) : null;\n    }\n  }]);\n\n  return ValidationElement;\n}(Component);\n\n_defineProperty(ValidationElement, \"defaultProps\", {\n  isDisabled: false,\n  isInvalid: false,\n  isLoading: false\n});\n\nexport { ValidationElement as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport { Content, ContentWrapper, ChildWrapper } from '../styled/Content';\nimport ValidationElement from './ValidationElement';\n\nvar FieldBaseStateless =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(FieldBaseStateless, _Component);\n\n  function FieldBaseStateless() {\n    _classCallCheck(this, FieldBaseStateless);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(FieldBaseStateless).apply(this, arguments));\n  }\n\n  _createClass(FieldBaseStateless, [{\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      if (this.props.shouldReset) {\n        this.props.onBlur();\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          children = _this$props.children,\n          invalidMessage = _this$props.invalidMessage,\n          isCompact = _this$props.isCompact,\n          isDialogOpen = _this$props.isDialogOpen,\n          isDisabled = _this$props.isDisabled,\n          isFitContainerWidthEnabled = _this$props.isFitContainerWidthEnabled,\n          isFocused = _this$props.isFocused,\n          isInvalid = _this$props.isInvalid,\n          isLoading = _this$props.isLoading,\n          isPaddingDisabled = _this$props.isPaddingDisabled,\n          isReadOnly = _this$props.isReadOnly,\n          maxWidth = _this$props.maxWidth,\n          onBlur = _this$props.onBlur,\n          onDialogBlur = _this$props.onDialogBlur,\n          onDialogClick = _this$props.onDialogClick,\n          onDialogFocus = _this$props.onDialogFocus,\n          onFocus = _this$props.onFocus,\n          isValidationHidden = _this$props.isValidationHidden;\n\n      function getAppearance(a) {\n        if (isDisabled) return 'disabled';\n        if (isInvalid) return 'invalid';\n        return a;\n      }\n\n      return React.createElement(ContentWrapper, {\n        disabled: isDisabled,\n        maxWidth: maxWidth,\n        grow: isFitContainerWidthEnabled\n      }, React.createElement(InlineDialog, {\n        content: invalidMessage,\n        isOpen: isDialogOpen && !!invalidMessage && !isValidationHidden,\n        onContentBlur: onDialogBlur,\n        onContentClick: onDialogClick,\n        onContentFocus: onDialogFocus,\n        placement: \"right\"\n      }, React.createElement(ChildWrapper, {\n        compact: isCompact\n      }, React.createElement(Content, {\n        appearance: getAppearance(appearance),\n        compact: isCompact,\n        disabled: isDisabled,\n        isFocused: isFocused,\n        invalid: isInvalid && !isFocused,\n        none: appearance === 'none',\n        onBlurCapture: onBlur,\n        onFocusCapture: onFocus,\n        paddingDisabled: isPaddingDisabled,\n        readOnly: isReadOnly,\n        subtle: appearance === 'subtle'\n      }, children, !isValidationHidden ? React.createElement(ValidationElement, {\n        isDisabled: isDisabled,\n        isInvalid: isInvalid,\n        isLoading: isLoading\n      }) : null))));\n    }\n  }]);\n\n  return FieldBaseStateless;\n}(Component);\n\n_defineProperty(FieldBaseStateless, \"defaultProps\", {\n  appearance: 'standard',\n  invalidMessage: '',\n  isCompact: false,\n  isDialogOpen: false,\n  isDisabled: false,\n  isFitContainerWidthEnabled: false,\n  isFocused: false,\n  isInvalid: false,\n  isLoading: false,\n  isPaddingDisabled: false,\n  isReadOnly: false,\n  onDialogBlur: function onDialogBlur() {},\n  onDialogClick: function onDialogClick() {},\n  onDialogFocus: function onDialogFocus() {},\n  shouldReset: false,\n  isValidationHidden: false\n});\n\nexport { FieldBaseStateless as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport FieldBaseStateless from './FieldBaseStateless';\nvar ON_BLUR_KEY = 'onBlurKey';\nvar ON_CONTENT_BLUR_KEY = 'onContentBlurKey';\n\nfunction waitForRender(cb) {\n  // Execute the callback after any upcoming render calls in the execution queue\n  setTimeout(cb, 0);\n}\n\nvar FieldBase =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(FieldBase, _Component);\n\n  function FieldBase() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, FieldBase);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(FieldBase)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      isFocused: _this.props.defaultIsFocused,\n      isDialogFocused: false,\n      shouldIgnoreNextDialogBlur: false\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"timers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onFocus\", function (e) {\n      _this.setState({\n        isFocused: true\n      });\n\n      _this.props.onFocus(e); // Escape from a possible race-condition when blur and focus happen one by one\n      // (otherwise the dialog might be left closed)\n\n\n      _this.cancelSchedule(ON_BLUR_KEY);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onBlur\", function (e) {\n      // Because the blur event fires before the focus event, we want to make sure that we don't\n      // render and close the dialog before we can check if the dialog is focused.\n      _this.reschedule(ON_BLUR_KEY, function () {\n        _this.setState({\n          isFocused: false\n        });\n\n        _this.props.onBlur(e);\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onContentFocus\", function () {\n      if (_this.state.isDialogFocused) {\n        // If we are tabbing between two elements in the warning dialog, we need to prevent the\n        // dialog from closing.\n        _this.setState({\n          shouldIgnoreNextDialogBlur: true\n        });\n      } else {\n        _this.setState({\n          isDialogFocused: true\n        });\n      } // Escape from a possible race-condition when blur and focus happen one by one\n      // (otherwise the dialog might be left closed)\n\n\n      _this.cancelSchedule(ON_CONTENT_BLUR_KEY);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onContentBlur\", function () {\n      waitForRender(function () {\n        if (_this.state.shouldIgnoreNextDialogBlur) {\n          // Ignore the blur event if we are still focused in the dialog.\n          _this.setState({\n            shouldIgnoreNextDialogBlur: false\n          });\n        } else {\n          _this.setState({\n            isDialogFocused: false\n          });\n        }\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(FieldBase, [{\n    key: \"cancelSchedule\",\n    value: function cancelSchedule(key) {\n      this.timers = this.timers || {};\n\n      if (this.timers[key]) {\n        clearTimeout(this.timers[key]);\n        delete this.timers[key];\n      }\n    }\n  }, {\n    key: \"reschedule\",\n    value: function reschedule(key, callback) {\n      var _this2 = this;\n\n      // Use reschedule (not just schedule) to avoid race conditions when multiple blur events\n      // happen one by one.\n      this.timers = this.timers || {};\n      this.cancelSchedule(key);\n      this.timers[key] = setTimeout(function () {\n        callback();\n\n        _this2.cancelSchedule(key);\n      }, 0);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          defaultIsFocused = _this$props.defaultIsFocused,\n          props = _objectWithoutProperties(_this$props, [\"defaultIsFocused\"]);\n\n      var _this$state = this.state,\n          isFocused = _this$state.isFocused,\n          isDialogFocused = _this$state.isDialogFocused;\n      return React.createElement(FieldBaseStateless, _extends({}, props, {\n        isDialogOpen: isFocused || isDialogFocused,\n        isFocused: isFocused,\n        onBlur: this.onBlur,\n        onFocus: this.onFocus,\n        onDialogFocus: this.onContentFocus,\n        onDialogBlur: this.onContentBlur\n      }));\n    }\n  }]);\n\n  return FieldBase;\n}(Component);\n\n_defineProperty(FieldBase, \"defaultProps\", {\n  defaultIsFocused: false,\n  onFocus: function onFocus() {},\n  onBlur: function onBlur() {}\n});\n\nexport { FieldBase as default };","import styled, { css } from 'styled-components';\nimport { codeFontFamily, colors, fontSize, themed } from '@atlaskit/theme';\n\nvar getPlaceholderColor = function getPlaceholderColor(_ref) {\n  var disabled = _ref.disabled;\n\n  if (disabled) {\n    return themed({\n      light: colors.N70,\n      dark: colors.DN90\n    });\n  }\n\n  return themed({\n    light: colors.N100,\n    dark: colors.DN90\n  });\n}; // can't group these placeholder styles into one block because browsers drop\n// entire style blocks when any single selector fails to parse\n\n\nvar getPlaceholderStyle = function getPlaceholderStyle() {\n  return css([\"\\n  &::-webkit-input-placeholder {\\n    /* WebKit, Blink, Edge */\\n    color: \", \";\\n  }\\n  &::-moz-placeholder {\\n    /* Mozilla Firefox 19+ */\\n    color: \", \";\\n    opacity: 1;\\n  }\\n  &::-ms-input-placeholder {\\n    /* Microsoft Edge */\\n    color: \", \";\\n  }\\n  &:-ms-input-placeholder {\\n    /* Internet Explorer 10-11 */\\n    color: \", \";\\n  }\\n\"], getPlaceholderColor, getPlaceholderColor, getPlaceholderColor, getPlaceholderColor);\n}; // Safari puts on some difficult to remove styles, mainly for disabled inputs\n// but we want full control so need to override them in all cases\n\n\nvar overrideSafariDisabledStyles = \"\\n  -webkit-text-fill-color: unset;\\n  -webkit-opacity: 1;\\n\";\nvar InputElement = styled.input.withConfig({\n  displayName: \"Input__InputElement\",\n  componentId: \"sc-1o6bj35-0\"\n})([\"\\n  background: transparent;\\n  border: 0;\\n  box-sizing: border-box;\\n  color: inherit;\\n  cursor: inherit;\\n  font-family: \", \";\\n  font-size: \", \"px;\\n  min-width: 0;\\n  outline: none;\\n  width: 100%;\\n\\n  [disabled] {\\n    \", \";\\n  }\\n\\n  &::-ms-clear {\\n    display: none;\\n  }\\n\\n  &:invalid {\\n    box-shadow: none;\\n  }\\n  \", \";\\n\"], function (p) {\n  return p.isMonospaced ? codeFontFamily() : 'inherit';\n}, fontSize, overrideSafariDisabledStyles, getPlaceholderStyle);\nexport default InputElement;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport styled from 'styled-components';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport Base, { Label } from '@atlaskit/field-base';\nimport { name as packageName, version as packageVersion } from '../package.json';\nimport Input from './styled/Input';\nvar Wrapper = styled.div.withConfig({\n  displayName: \"FieldTextStateless__Wrapper\",\n  componentId: \"ynbdsh-0\"\n})([\"\\n  flex: 1 1 100%;\\n\"]);\n\nvar FieldTextStateless =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(FieldTextStateless, _Component);\n\n  function FieldTextStateless() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, FieldTextStateless);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(FieldTextStateless)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"input\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"setInputRef\", function (input) {\n      _this.input = input; // $FlowFixMe - Cannot call `this.props.innerRef` because undefined [1] is not a function\n\n      _this.props.innerRef(input);\n    });\n\n    return _this;\n  }\n\n  _createClass(FieldTextStateless, [{\n    key: \"focus\",\n    value: function focus() {\n      if (this.input) {\n        this.input.focus();\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return React.createElement(Wrapper, null, !this.props.isLabelHidden && React.createElement(Label, {\n        htmlFor: this.props.id,\n        isDisabled: this.props.disabled,\n        isLabelHidden: this.props.isLabelHidden,\n        isRequired: this.props.required,\n        label: this.props.label || ''\n      }), React.createElement(Base, {\n        invalidMessage: this.props.invalidMessage,\n        isCompact: this.props.compact,\n        isDisabled: this.props.disabled,\n        isFitContainerWidthEnabled: this.props.shouldFitContainer,\n        isInvalid: this.props.isInvalid,\n        isReadOnly: this.props.isReadOnly,\n        isRequired: this.props.required,\n        isValidationHidden: this.props.isValidationHidden\n      }, React.createElement(Input, {\n        autoComplete: this.props.autoComplete,\n        autoFocus: this.props.autoFocus,\n        disabled: this.props.disabled,\n        form: this.props.form,\n        id: this.props.id,\n        innerRef: this.setInputRef,\n        isMonospaced: this.props.isMonospaced,\n        maxLength: this.props.maxLength,\n        min: this.props.min,\n        max: this.props.max,\n        name: this.props.name,\n        onBlur: this.props.onBlur,\n        onChange: this.props.onChange,\n        onFocus: this.props.onFocus,\n        onKeyDown: this.props.onKeyDown,\n        onKeyPress: this.props.onKeyPress,\n        onKeyUp: this.props.onKeyUp,\n        pattern: this.props.pattern,\n        placeholder: this.props.placeholder,\n        readOnly: this.props.isReadOnly,\n        required: this.props.required,\n        spellCheck: this.props.isSpellCheckEnabled,\n        type: this.props.type,\n        value: this.props.value\n      })));\n    }\n  }]);\n\n  return FieldTextStateless;\n}(Component);\n\n_defineProperty(FieldTextStateless, \"defaultProps\", {\n  compact: false,\n  disabled: false,\n  isInvalid: false,\n  isReadOnly: false,\n  isSpellCheckEnabled: true,\n  onChange: function onChange() {},\n  required: false,\n  type: 'text',\n  isValidationHidden: false,\n  innerRef: function innerRef() {}\n});\n\nexport { FieldTextStateless as FieldTextStatelessWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'fieldText',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onBlur: createAndFireEventOnAtlaskit({\n    action: 'blurred',\n    actionSubject: 'textField',\n    attributes: {\n      componentName: 'fieldText',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  }),\n  onFocus: createAndFireEventOnAtlaskit({\n    action: 'focused',\n    actionSubject: 'textField',\n    attributes: {\n      componentName: 'fieldText',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(FieldTextStateless));","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return _toConsumableArray(ancestorData).concat([data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_assertThisInitialized(_this)), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}","import * as tslib_1 from \"tslib\";\nvar getAppearanceProps = function (props, state) {\n    var appearance = props.appearance, className = props.className, isDisabled = props.isDisabled, isLoading = props.isLoading, isSelected = props.isSelected, spacing = props.spacing, shouldFitContainer = props.shouldFitContainer;\n    var isActive = state.isActive, isFocus = state.isFocus, isHover = state.isHover;\n    return {\n        appearance: appearance,\n        className: className,\n        disabled: isDisabled,\n        isActive: isActive,\n        isFocus: isFocus,\n        isHover: isHover,\n        isLoading: isLoading,\n        isSelected: isSelected,\n        spacing: spacing,\n        fit: shouldFitContainer,\n    };\n};\nvar getInteractionProps = function (component) {\n    var onBlur = component.onBlur, onFocus = component.onFocus, onMouseDown = component.onMouseDown, onMouseEnter = component.onMouseEnter, onMouseLeave = component.onMouseLeave, onMouseUp = component.onMouseUp;\n    var tabIndex = component.props.tabIndex;\n    // Block onClick/Keyboard submit while isLoading\n    var onClick = component.props.isLoading\n        ? function (e) { return e.preventDefault(); }\n        : component.props.onClick;\n    return {\n        onBlur: onBlur,\n        onClick: onClick,\n        onFocus: onFocus,\n        onMouseDown: onMouseDown,\n        onMouseEnter: onMouseEnter,\n        onMouseLeave: onMouseLeave,\n        onMouseUp: onMouseUp,\n        tabIndex: tabIndex,\n    };\n};\nvar getLinkElementProps = function (props) {\n    var href = props.href, target = props.target;\n    return { href: href, target: target };\n};\nvar getButtonElementProps = function (props) {\n    var ariaHaspopup = props.ariaHaspopup, ariaExpanded = props.ariaExpanded, ariaControls = props.ariaControls, form = props.form, type = props.type;\n    return {\n        'aria-haspopup': ariaHaspopup,\n        'aria-expanded': ariaExpanded,\n        'aria-controls': ariaControls,\n        form: form,\n        type: type,\n    };\n};\nvar getButtonProps = function (component) {\n    var props = component.props, state = component.state;\n    var defaultProps = tslib_1.__assign({ id: props.id }, getAppearanceProps(props, state), getInteractionProps(component), { 'aria-label': props.ariaLabel });\n    if (props.component) {\n        return tslib_1.__assign({}, props, defaultProps);\n    }\n    if (props.href) {\n        if (props.isDisabled) {\n            return defaultProps;\n        }\n        return tslib_1.__assign({}, defaultProps, getLinkElementProps(props));\n    }\n    return tslib_1.__assign({}, defaultProps, getButtonElementProps(props));\n};\nexport default getButtonProps;\n//# sourceMappingURL=getButtonProps.js.map","import * as tslib_1 from \"tslib\";\n// @flow\nimport * as React from 'react';\nimport { cleanProps } from '@atlaskit/analytics-next';\nvar CustomComponentProxy = /** @class */ (function (_super) {\n    tslib_1.__extends(CustomComponentProxy, _super);\n    function CustomComponentProxy() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    CustomComponentProxy.prototype.render = function () {\n        var _a = cleanProps(this.props), appearance = _a.appearance, children = _a.children, component = _a.component, isActive = _a.isActive, isDisabled = _a.isDisabled, isFocus = _a.isFocus, isHover = _a.isHover, isSelected = _a.isSelected, shouldFitContainer = _a.shouldFitContainer, fit = _a.fit, iconBefore = _a.iconBefore, iconAfter = _a.iconAfter, isLoading = _a.isLoading, proxiedProps = tslib_1.__rest(_a, [\"appearance\", \"children\", \"component\", \"isActive\", \"isDisabled\", \"isFocus\", \"isHover\", \"isSelected\", \"shouldFitContainer\", \"fit\", \"iconBefore\", \"iconAfter\", \"isLoading\"]);\n        if (!component) {\n            throw new Error('No custom component provided while trying to use custom button component');\n        }\n        var ProxiedComponent = component;\n        return React.createElement(ProxiedComponent, tslib_1.__assign({}, proxiedProps), children);\n    };\n    return CustomComponentProxy;\n}(React.Component));\nexport default CustomComponentProxy;\n//# sourceMappingURL=CustomComponentProxy.js.map","import * as tslib_1 from \"tslib\";\nimport { css } from 'styled-components';\nimport { borderRadius, fontSize, gridSize, math } from '@atlaskit/theme';\nimport themeDefinitions from './themeDefinitions';\nimport { themeNamespace } from '../theme';\n// TODO: Type correctly when @atlaskit/theme is typescript\nvar getProvidedTheme = function (_a) {\n    var theme = _a.theme;\n    return (theme && theme[themeNamespace]) || {};\n};\nvar getAppearanceProperty = function (property, appearance, providedTheme, inBuiltTheme) {\n    var defaultAppearanceStyles = inBuiltTheme.default;\n    if (!appearance) {\n        return defaultAppearanceStyles[property];\n    }\n    var providedAppearanceStyles = providedTheme[appearance];\n    var inBuiltAppearanceStyles = inBuiltTheme[appearance];\n    return ((providedAppearanceStyles && providedAppearanceStyles[property]) ||\n        (inBuiltAppearanceStyles && inBuiltAppearanceStyles[property]) ||\n        defaultAppearanceStyles[property]);\n};\nvar getState = function (_a) {\n    var disabled = _a.disabled, isActive = _a.isActive, isFocus = _a.isFocus, isHover = _a.isHover, isSelected = _a.isSelected;\n    if (disabled) {\n        return 'disabled';\n    }\n    if (isSelected && isFocus) {\n        return 'focusSelected';\n    }\n    if (isSelected) {\n        return 'selected';\n    }\n    if (isActive) {\n        return 'active';\n    }\n    if (isHover) {\n        return 'hover';\n    }\n    if (isFocus) {\n        return 'focus';\n    }\n    return 'default';\n};\nexport var getPropertyAppearance = function (property, props, definitions) {\n    if (props === void 0) { props = {}; }\n    if (definitions === void 0) { definitions = themeDefinitions; }\n    var appearance = props.appearance;\n    var fallbacks = definitions.fallbacks, inBuiltTheme = definitions.theme;\n    var providedTheme = getProvidedTheme(props);\n    var propertyStyles = getAppearanceProperty(property, appearance, providedTheme, inBuiltTheme);\n    if (!propertyStyles) {\n        return fallbacks[property] || 'initial';\n    }\n    var state = getState(props);\n    return propertyStyles[state] || propertyStyles.default || fallbacks[property];\n};\nexport default function getButtonStyles(props) {\n    // $FlowFixMe - should be fixed when theme work is done\n    var baseSize = fontSize(props);\n    var buttonHeight = math.divide(math.multiply(gridSize, 4), baseSize)(props) + \"em\";\n    var compactButtonHeight = math.divide(math.multiply(gridSize, 3), baseSize)(props) + \"em\";\n    /**\n     * Variable styles\n     */\n    var cursor = 'default';\n    var height = buttonHeight;\n    var lineHeight = buttonHeight;\n    var outline = 'none';\n    // $FlowFixMe - should be fixed when theme work is done\n    var padding = \"0 \" + gridSize(props) + \"px\";\n    var transitionDuration = '0.1s, 0.15s';\n    var transition = 'background 0.1s ease-out, box-shadow 0.15s cubic-bezier(0.47, 0.03, 0.49, 1.38)';\n    var verticalAlign = 'middle';\n    var width = 'auto';\n    /**\n     * Appearance + Theme styles\n     */\n    var background = getPropertyAppearance('background', props);\n    var color = getPropertyAppearance('color', props);\n    var boxShadowColor = getPropertyAppearance('boxShadowColor', props);\n    var boxShadow = boxShadowColor\n        ? css(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject([\"\\n        box-shadow: 0 0 0 2px \", \";\\n      \"], [\"\\n        box-shadow: 0 0 0 2px \", \";\\n      \"])), boxShadowColor) : null;\n    var textDecoration = getPropertyAppearance('textDecoration', props);\n    // Spacing: Compact\n    if (props.spacing === 'compact') {\n        height = compactButtonHeight;\n        lineHeight = compactButtonHeight;\n    }\n    // Spacing: None\n    if (props.spacing === 'none') {\n        height = 'auto';\n        lineHeight = 'inherit';\n        padding = '0';\n        verticalAlign = 'baseline';\n    }\n    // Interaction: Hover\n    if (props.isHover) {\n        cursor = 'pointer';\n        transition =\n            'background 0s ease-out, box-shadow 0.15s cubic-bezier(0.47, 0.03, 0.49, 1.38)';\n    }\n    // Interaction: Active\n    if (props.isActive) {\n        transitionDuration = '0s';\n    }\n    // Interaction: Focus\n    if (props.isFocus) {\n        outline = 'none';\n        transitionDuration = '0s, 0.2s';\n    }\n    // Disabled\n    if (props.disabled) {\n        cursor = 'not-allowed';\n    }\n    // Loading\n    var isLoadingStyles = function (p) {\n        return p.isLoading ? 'pointer-events: none;' : null;\n    };\n    // Fit to parent width\n    if (props.fit) {\n        width = '100%';\n    }\n    /* Note use of !important to override the ThemeReset on anchor tag styles */\n    return css(templateObject_2 || (templateObject_2 = tslib_1.__makeTemplateObject([\"\\n    align-items: baseline;\\n    background: \", \";\\n    border-radius: \", \"px;\\n    border-width: 0;\\n    box-sizing: border-box;\\n    color: \", \" !important;\\n    cursor: \", \";\\n    display: inline-flex;\\n    font-size: inherit;\\n    font-style: normal;\\n    height: \", \";\\n    line-height: \", \";\\n    margin: 0;\\n    max-width: 100%;\\n    outline: \", \" !important;\\n    padding: \", \";\\n    text-align: center;\\n    text-decoration: \", \";\\n    transition: \", \";\\n    transition-duration: \", \";\\n    vertical-align: \", \";\\n    white-space: nowrap;\\n    width: \", \";\\n    \", \" &::-moz-focus-inner {\\n      border: 0;\\n      margin: 0;\\n      padding: 0;\\n    }\\n    \", \";\\n  \"], [\"\\n    align-items: baseline;\\n    background: \", \";\\n    border-radius: \", \"px;\\n    border-width: 0;\\n    box-sizing: border-box;\\n    color: \", \" !important;\\n    cursor: \", \";\\n    display: inline-flex;\\n    font-size: inherit;\\n    font-style: normal;\\n    height: \", \";\\n    line-height: \", \";\\n    margin: 0;\\n    max-width: 100%;\\n    outline: \", \" !important;\\n    padding: \", \";\\n    text-align: center;\\n    text-decoration: \", \";\\n    transition: \", \";\\n    transition-duration: \", \";\\n    vertical-align: \", \";\\n    white-space: nowrap;\\n    width: \", \";\\n    \", \" &::-moz-focus-inner {\\n      border: 0;\\n      margin: 0;\\n      padding: 0;\\n    }\\n    \", \";\\n  \"])), background, borderRadius, color, cursor, height, lineHeight, outline, padding, textDecoration, transition, transitionDuration, verticalAlign, width, boxShadow, isLoadingStyles);\n}\nvar templateObject_1, templateObject_2;\n//# sourceMappingURL=getButtonStyles.js.map","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\n\n/*\ncleanProps removes props added by the withAnalyticsEvents HOC from an object\n*/\nexport default function cleanProps(props) {\n  /* eslint-disable no-unused-vars */\n  var createAnalyticsEvent = props.createAnalyticsEvent,\n      cleanedProps = _objectWithoutProperties(props, [\"createAnalyticsEvent\"]);\n  /* eslint-enable no-unused-vars */\n\n\n  return cleanedProps;\n}","import { colors, themed } from '@atlaskit/theme';\n/**\n * Convert a hex colour code to RGBA.\n * @param {String} hex Hex colour code.\n * @param {Number} alpha Optional alpha value (defaults to 1).\n *\n */\nvar hex2rgba = function (hex, alpha) {\n    if (alpha === void 0) { alpha = 1; }\n    if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) {\n        var colorArr = hex.substring(1).split('');\n        if (colorArr.length === 3) {\n            colorArr = [\n                colorArr[0],\n                colorArr[0],\n                colorArr[1],\n                colorArr[1],\n                colorArr[2],\n                colorArr[2],\n            ];\n        }\n        var color = \"0x\" + colorArr.join('');\n        // FIXME: `>>` operand can validly take a string value\n        var r = (color >> 16) & 255;\n        var g = (color >> 8) & 255;\n        var b = color & 255;\n        return \"rgba(\" + [r, g, b].join(',') + \", \" + alpha + \")\";\n    }\n    throw new Error('Bad Hex');\n};\n/* eslint-enable no-bitwise */\nexport default {\n    // Fallbacks\n    fallbacks: {\n        background: themed({ light: colors.N20A, dark: colors.DN70 }),\n        color: themed({ light: colors.N400, dark: colors.DN400 }),\n        textDecoration: 'none',\n    },\n    // Themes\n    theme: {\n        // Default appearance\n        default: {\n            background: {\n                default: themed({ light: colors.N20A, dark: colors.DN70 }),\n                hover: themed({ light: colors.N30A, dark: colors.DN60 }),\n                active: themed({ light: hex2rgba(colors.B75, 0.6), dark: colors.B75 }),\n                disabled: themed({ light: colors.N20A, dark: colors.DN70 }),\n                selected: themed({ light: colors.N700, dark: colors.DN0 }),\n                focusSelected: themed({ light: colors.N700, dark: colors.DN0 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: hex2rgba(colors.B200, 0.6), dark: colors.B75 }),\n                focusSelected: themed({\n                    light: hex2rgba(colors.B200, 0.6),\n                    dark: colors.B75,\n                }),\n            },\n            color: {\n                default: themed({ light: colors.N400, dark: colors.DN400 }),\n                active: themed({ light: colors.B400, dark: colors.B400 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN30 }),\n                selected: themed({ light: colors.N20, dark: colors.DN400 }),\n                focusSelected: themed({ light: colors.N20, dark: colors.DN400 }),\n            },\n        },\n        // Primary appearance\n        primary: {\n            background: {\n                default: themed({ light: colors.B400, dark: colors.B100 }),\n                hover: themed({ light: colors.B300, dark: colors.B75 }),\n                active: themed({ light: colors.B500, dark: colors.B200 }),\n                disabled: themed({ light: colors.N20A, dark: colors.DN70 }),\n                selected: themed({ light: colors.N700, dark: colors.DN0 }),\n                focusSelected: themed({ light: colors.N700, dark: colors.DN0 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: hex2rgba(colors.B200, 0.6), dark: colors.B75 }),\n                focusSelected: themed({\n                    light: hex2rgba(colors.B200, 0.6),\n                    dark: colors.B75,\n                }),\n            },\n            color: {\n                default: themed({ light: colors.N0, dark: colors.DN30 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN30 }),\n                selected: themed({ light: colors.N20, dark: colors.DN400 }),\n                focusSelected: themed({ light: colors.N20, dark: colors.DN400 }),\n            },\n        },\n        // Warning appearance\n        warning: {\n            background: {\n                default: themed({ light: colors.Y300, dark: colors.Y300 }),\n                hover: themed({ light: colors.Y200, dark: colors.Y200 }),\n                active: themed({ light: colors.Y400, dark: colors.Y400 }),\n                disabled: themed({ light: colors.N20A, dark: colors.DN70 }),\n                selected: themed({ light: colors.Y400, dark: colors.Y400 }),\n                focusSelected: themed({ light: colors.Y400, dark: colors.Y400 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: colors.Y500, dark: colors.Y500 }),\n                focusSelected: themed({ light: colors.Y500, dark: colors.Y500 }),\n            },\n            color: {\n                default: themed({ light: colors.N800, dark: colors.N800 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN30 }),\n                selected: themed({ light: colors.N800, dark: colors.N800 }),\n                focusSelected: themed({ light: colors.N800, dark: colors.N800 }),\n            },\n        },\n        // Danger appearance\n        danger: {\n            background: {\n                default: themed({ light: colors.R400, dark: colors.R400 }),\n                hover: themed({ light: colors.R300, dark: colors.R300 }),\n                active: themed({ light: colors.R500, dark: colors.R500 }),\n                disabled: themed({ light: colors.N20A, dark: colors.DN70 }),\n                selected: themed({ light: colors.R500, dark: colors.R500 }),\n                focusSelected: themed({ light: colors.R500, dark: colors.R500 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: colors.R100, dark: colors.R100 }),\n                focusSelected: themed({ light: colors.R100, dark: colors.R100 }),\n            },\n            color: {\n                default: themed({ light: colors.N0, dark: colors.N0 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN30 }),\n                selected: themed({ light: colors.N0, dark: colors.N0 }),\n                focusSelected: themed({ light: colors.N0, dark: colors.N0 }),\n            },\n        },\n        // Help appearance\n        help: {\n            background: {\n                default: themed({ light: colors.P400, dark: colors.P400 }),\n                hover: themed({ light: colors.P200, dark: colors.P200 }),\n                active: themed({ light: colors.P500, dark: colors.P500 }),\n                disabled: themed({ light: colors.N20A, dark: colors.DN70 }),\n                selected: themed({ light: colors.N700, dark: colors.DN0 }),\n                focusSelected: themed({ light: colors.R500, dark: colors.R500 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: colors.P100, dark: colors.P100 }),\n                focusSelected: themed({ light: colors.P100, dark: colors.P100 }),\n            },\n            color: {\n                default: themed({ light: colors.N0, dark: colors.N0 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN30 }),\n                selected: themed({ light: colors.N20, dark: colors.DN400 }),\n                focusSelected: themed({ light: colors.N0, dark: colors.N0 }),\n            },\n        },\n        // Link appearance\n        link: {\n            background: {\n                default: themed({ light: 'none', dark: 'none' }),\n                selected: themed({ light: colors.N700, dark: colors.N20 }),\n                focusSelected: themed({ light: colors.N700, dark: colors.N20 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: hex2rgba(colors.B200, 0.6), dark: colors.B75 }),\n                focusSelected: themed({\n                    light: hex2rgba(colors.B200, 0.6),\n                    dark: colors.B75,\n                }),\n            },\n            color: {\n                default: themed({ light: colors.B400, dark: colors.B100 }),\n                hover: themed({ light: colors.B300, dark: colors.B75 }),\n                active: themed({ light: colors.B500, dark: colors.B200 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN100 }),\n                selected: themed({ light: colors.N20, dark: colors.N700 }),\n                focusSelected: themed({ light: colors.N20, dark: colors.N700 }),\n            },\n            textDecoration: {\n                hover: 'underline',\n            },\n        },\n        // Subtle appearance\n        subtle: {\n            background: {\n                default: themed({ light: 'none', dark: 'none' }),\n                hover: themed({ light: colors.N30A, dark: colors.DN60 }),\n                active: themed({ light: hex2rgba(colors.B75, 0.6), dark: colors.B75 }),\n                disabled: themed({ light: 'none', dark: 'none' }),\n                selected: themed({ light: colors.N700, dark: colors.DN0 }),\n                focusSelected: themed({ light: colors.N700, dark: colors.DN0 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: hex2rgba(colors.B200, 0.6), dark: colors.B75 }),\n                focusSelected: themed({\n                    light: hex2rgba(colors.B200, 0.6),\n                    dark: colors.B75,\n                }),\n            },\n            color: {\n                default: themed({ light: colors.N400, dark: colors.DN400 }),\n                active: themed({ light: colors.B400, dark: colors.B400 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN100 }),\n                selected: themed({ light: colors.N20, dark: colors.DN400 }),\n                focusSelected: themed({ light: colors.N20, dark: colors.DN400 }),\n            },\n        },\n        // Subtle Link appearance\n        'subtle-link': {\n            background: {\n                default: themed({ light: 'none', dark: 'none' }),\n                selected: themed({ light: colors.N700, dark: colors.N20 }),\n                focusSelected: themed({ light: colors.N700, dark: colors.N20 }),\n            },\n            boxShadowColor: {\n                focus: themed({ light: hex2rgba(colors.B200, 0.6), dark: colors.B75 }),\n                focusSelected: themed({\n                    light: hex2rgba(colors.B200, 0.6),\n                    dark: colors.B75,\n                }),\n            },\n            color: {\n                default: themed({ light: colors.N200, dark: colors.DN400 }),\n                hover: themed({ light: colors.N90, dark: colors.B50 }),\n                active: themed({ light: colors.N400, dark: colors.DN300 }),\n                disabled: themed({ light: colors.N70, dark: colors.DN100 }),\n                selected: themed({ light: colors.N20, dark: colors.DN400 }),\n                focusSelected: themed({ light: colors.N20, dark: colors.DN400 }),\n            },\n            textDecoration: {\n                hover: 'underline',\n            },\n        },\n    },\n};\n//# sourceMappingURL=themeDefinitions.js.map","import * as tslib_1 from \"tslib\";\nimport { css } from 'styled-components';\nvar isLoadingStyle = css(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject([\"\\n  transition: opacity 0.3s;\\n  opacity: \", \";\\n\"], [\"\\n  transition: opacity 0.3s;\\n  opacity: \", \";\\n\"])), function (_a) {\n    var isLoading = _a.isLoading;\n    return (isLoading ? 0 : 1);\n});\nvar getLoadingStyle = function (_a) {\n    var isLoading = _a.isLoading;\n    return ({\n        transition: 'opacity 0.3s',\n        opacity: isLoading ? 0 : 1,\n    });\n};\nexport { isLoadingStyle, getLoadingStyle };\nvar templateObject_1;\n//# sourceMappingURL=utils.js.map","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nimport { gridSize, math } from '@atlaskit/theme';\nimport { getLoadingStyle } from './utils';\nvar getAlignment = function (p) { return (p.followsIcon ? 'baseline' : 'center'); };\nvar gridSizeDiv2 = math.divide(gridSize, 2);\nvar getMargin = function (p) {\n    return p.spacing === 'none' ? 0 : \"0 \" + gridSizeDiv2(p) + \"px\";\n};\nvar ButtonContent = function (props) {\n    var style = tslib_1.__assign({ alignItems: getAlignment(props), alignSelf: getAlignment(props), flex: '1 1 auto', margin: getMargin(props), maxWidth: '100%', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }, getLoadingStyle(props));\n    return React.createElement(\"span\", { style: style }, props.children);\n};\nexport default ButtonContent;\n//# sourceMappingURL=ButtonContent.js.map","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nvar ButtonWrapper = function (props) {\n    var style = {\n        alignSelf: 'center',\n        display: 'inline-flex',\n        flexWrap: 'nowrap',\n        maxWidth: '100%',\n        position: 'relative',\n    };\n    if (props.fit) {\n        style.width = '100%';\n        style.justifyContent = 'center';\n    }\n    var optionalProps = {};\n    if (props.onClick) {\n        optionalProps.onClick = props.onClick;\n    }\n    return (React.createElement(\"span\", tslib_1.__assign({ style: style }, optionalProps), props.children));\n};\nexport default ButtonWrapper;\n//# sourceMappingURL=ButtonWrapper.js.map","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nimport { gridSize, math } from '@atlaskit/theme';\nimport { getLoadingStyle } from './utils';\nvar getMargin = function (props) {\n    if (props.spacing === 'none') {\n        return 0;\n    }\n    if (props.isOnlyChild) {\n        return \"0 -\" + math.divide(gridSize, 4)(props) + \"px\";\n    }\n    return \"0 \" + math.divide(gridSize, 2)(props) + \"px\";\n};\nvar IconWrapper = function (props) {\n    var style = tslib_1.__assign({ alignSelf: 'center', display: 'flex', flexShrink: 0, lineHeight: 0, fontSize: 0, margin: getMargin(props), userSelect: 'none' }, getLoadingStyle(props));\n    return React.createElement(\"span\", { style: style }, props.children);\n};\nexport default IconWrapper;\n//# sourceMappingURL=IconWrapper.js.map","export var SIZES_MAP = {\n  xsmall: 8,\n  small: 16,\n  medium: 24,\n  large: 48,\n  xlarge: 96\n};\nexport var DEFAULT_SIZE = SIZES_MAP.small;","import styled, { keyframes } from 'styled-components';\n\n/* Define keyframes statically to prevent a perfomance issue in styled components v1 where the keyframes function\n * does not cache previous values resulting in each spinner injecting the same keyframe definition\n * in the DOM.\n * This can be reverted to use dynamic keyframes when we upgrade to styled components v2\n */\nvar keyframeNames = {\n  noop: keyframes([\"\\n    from { opacity: 0; }\\n    to { opacity: 0; }\\n  \"]),\n  enterRotate: keyframes([\"\\n    from { transform: rotate(50deg); }\\n    to { transform: rotate(230deg); }\\n  \"]),\n  leaveRotate: keyframes([\"\\n    from { transform: rotate(230deg); }\\n    to { transform: rotate(510deg); }\\n  \"]),\n  leaveOpacity: keyframes([\"\\n    from { opacity: 1; }\\n    to { opacity: 0; }\\n  \"])\n};\nexport var getContainerAnimation = function getContainerAnimation(_ref) {\n  var delay = _ref.delay,\n      phase = _ref.phase;\n\n  if (phase === 'DELAY') {\n    /* This hides the spinner and allows us to use animationend events to move to the next phase in\n     * the same way we do with the other lifecycle stages */\n    return \"animation: \".concat(delay, \"s \").concat(keyframeNames.noop, \";\");\n  }\n\n  if (phase === 'ENTER' || phase === 'IDLE') {\n    return \"animation: 1s ease-in-out forwards \".concat(keyframeNames.enterRotate, \";\");\n  }\n\n  if (phase === 'LEAVE') {\n    return \"animation: 0.53s ease-in-out forwards \".concat(keyframeNames.leaveRotate, \",\\n      0.2s ease-in-out 0.33s \").concat(keyframeNames.leaveOpacity, \";\");\n  }\n\n  return '';\n};\n\nvar getSize = function getSize(_ref2) {\n  var size = _ref2.size;\n  return \"\".concat(size, \"px\");\n};\n\nvar Container = styled.div.withConfig({\n  displayName: \"styledContainer__Container\",\n  componentId: \"sc-1qs8wxp-0\"\n})([\"\\n  \", \" display: flex;\\n  height: \", \";\\n  width: \", \";\\n\\n  /* Rapidly creating and removing spinners will result in multiple spinners being visible while\\n   * they complete their exit animations. This rules hides the spinner if another one has been\\n   * added. */\\n  div + & {\\n    display: none;\\n  }\\n\"], getContainerAnimation, getSize, getSize);\nContainer.displayName = 'SpinnerContainer';\nexport default Container;","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport styled, { css, keyframes } from 'styled-components';\nimport { colors, themed } from '@atlaskit/theme';\nimport { SIZES_MAP } from './constants';\n\nvar getStrokeWidth = function getStrokeWidth(size) {\n  return Math.round(size / 10);\n};\n\nvar getStrokeCircumference = function getStrokeCircumference(size) {\n  var strokeWidth = getStrokeWidth(size);\n  var strokeRadius = size / 2 - strokeWidth / 2;\n  return Math.PI * strokeRadius * 2;\n};\n/* Define keyframes statically to prevent a perfomance issue in styled components v1 where the keyframes function\n * does not cache previous values resulting in each spinner injecting the same keyframe definition\n * in the DOM.\n * This can be reverted to dynamic keyframes when we upgrade to styled components v2\n */\n\n\nvar keyframeNames = {\n  noop: keyframes([\"\\n    from { opacity: 0; }\\n    to { opacity: 0; }\\n  \"]),\n  rotate: keyframes([\"\\n    to { transform: rotate(360deg); }\\n  \"]),\n  enterOpacity: keyframes([\"\\n    from { opacity: 0; }\\n    to { opacity: 1; }\\n  \"]),\n  smallEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.small), getStrokeCircumference(SIZES_MAP.small) * 0.8),\n  mediumEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.medium), getStrokeCircumference(SIZES_MAP.medium) * 0.8),\n  largeEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.large), getStrokeCircumference(SIZES_MAP.large) * 0.8),\n  xlargeEnterStroke: keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], getStrokeCircumference(SIZES_MAP.xlarge), getStrokeCircumference(SIZES_MAP.xlarge) * 0.8)\n};\n/* If a standard size is used, we can use one of our statically defined keyframes, otherwise\n * we're forced to dynamically create the keyframe and incur a performance cost.\n */\n\nvar getEnterStrokeKeyframe = function getEnterStrokeKeyframe(size) {\n  var standardSizeName = Object.keys(SIZES_MAP).find(function (sizeName) {\n    return size === SIZES_MAP[sizeName];\n  });\n\n  if (standardSizeName) {\n    return keyframeNames[\"\".concat(standardSizeName, \"EnterStroke\")];\n  }\n\n  var circumference = getStrokeCircumference(size);\n  return keyframes([\"\\n    from { stroke-dashoffset: \", \"px; }\\n    to { stroke-dashoffset: \", \"px; }\\n  \"], circumference, circumference * 0.8);\n};\n\nvar spinnerColor = themed({\n  light: colors.N500,\n  dark: colors.N0\n});\nvar spinnerColorInverted = themed({\n  light: colors.N0,\n  dark: colors.N0\n});\nexport var getStrokeColor = function getStrokeColor(_ref // $FlowFixMe - theme is not found in props\n) {\n  var invertColor = _ref.invertColor,\n      props = _objectWithoutProperties(_ref, [\"invertColor\"]);\n\n  return invertColor ? spinnerColorInverted(props) : spinnerColor(props);\n};\nexport var svgStyles = css([\"\\n  \", \";\\n\"], function (props) {\n  var circumference = getStrokeCircumference(props.size);\n  var idleRotation = \"0.86s cubic-bezier(0.4, 0.15, 0.6, 0.85) infinite \".concat(keyframeNames.rotate);\n  var spinUpStroke = \"0.8s ease-in-out \".concat(getEnterStrokeKeyframe(props.size));\n  var spinUpOpacity = \"0.2s ease-in-out \".concat(keyframeNames.enterOpacity);\n  var activeAnimations = [idleRotation];\n\n  if (props.phase === 'ENTER') {\n    activeAnimations.push(spinUpStroke, spinUpOpacity);\n  }\n\n  return css([\"\\n      animation: \", \";\\n      fill: none;\\n      stroke: \", \";\\n      stroke-dasharray: \", \"px;\\n      stroke-dashoffset: \", \"px;\\n      stroke-linecap: round;\\n      stroke-width: \", \"px;\\n      transform-origin: center;\\n    \"], activeAnimations.join(', '), getStrokeColor, circumference, circumference * 0.8, getStrokeWidth(props.size));\n});\nvar Svg = styled.svg.withConfig({\n  displayName: \"styledSvg__Svg\",\n  componentId: \"y2l69q-0\"\n})([\"\\n  \", \";\\n\"], svgStyles);\nSvg.displayName = 'SpinnerSvg';\nexport default Svg;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { Transition } from 'react-transition-group';\nimport styled from 'styled-components';\nimport { SIZES_MAP, DEFAULT_SIZE } from './constants';\nimport Container from './styledContainer';\nimport Svg from './styledSvg';\nvar Outer = styled.div.withConfig({\n  displayName: \"Spinner__Outer\",\n  componentId: \"sc-1ejgacn-0\"\n})([\"\\n  display: inline-block;\\n  vertical-align: middle;\\n\"]);\nOuter.displayName = 'Outer';\n\nvar Spinner =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Spinner, _Component);\n\n  function Spinner(props) {\n    var _this;\n\n    _classCallCheck(this, Spinner);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Spinner).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"transitionNode\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"enter\", function () {\n      var delay = _this.props.delay;\n\n      if (delay) {\n        _this.setState({\n          phase: 'DELAY'\n        });\n      } else {\n        _this.setState({\n          phase: 'ENTER'\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"idle\", function () {\n      _this.setState({\n        phase: 'IDLE'\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"exit\", function () {\n      _this.setState({\n        phase: 'LEAVE'\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"endListener\", function (node, done) {\n      var executeCallback = function executeCallback(event) {\n        // ignore animation events on the glyph\n        // $FlowFixMe - tagName does not exist in event.target\n        if (event.target.tagName === 'svg') {\n          return false;\n        }\n\n        if (_this.state.phase === 'DELAY') {\n          _this.setState({\n            phase: 'ENTER'\n          });\n\n          _this.endListener(node, done);\n        } else {\n          done();\n        }\n\n        return node && node.removeEventListener('animationend', executeCallback);\n      };\n\n      return node && node.addEventListener('animationend', executeCallback);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"validateSize\", function () {\n      var size = _this.props.size;\n      var spinnerSize = SIZES_MAP[size] || size;\n      return typeof spinnerSize === 'number' ? spinnerSize : DEFAULT_SIZE;\n    });\n\n    _this.state = {\n      phase: ''\n    };\n    return _this;\n  }\n\n  _createClass(Spinner, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var phase = this.state.phase;\n      var _this$props = this.props,\n          delay = _this$props.delay,\n          invertColor = _this$props.invertColor,\n          isCompleting = _this$props.isCompleting;\n      var size = this.validateSize();\n      var strokeWidth = Math.round(size / 10);\n      var strokeRadius = size / 2 - strokeWidth / 2;\n      return React.createElement(Outer, null, React.createElement(Transition, {\n        addEndListener: this.endListener,\n        appear: true,\n        in: !isCompleting,\n        mountOnEnter: true,\n        unmountOnExit: true,\n        onEnter: this.enter,\n        onEntered: this.idle,\n        onExit: this.exit,\n        onExited: function onExited() {\n          return _this2.props.onComplete();\n        },\n        ref: function ref(node) {\n          _this2.transitionNode = node;\n        }\n      }, React.createElement(Container, {\n        delay: delay / 1000,\n        phase: phase,\n        size: size\n      }, React.createElement(Svg, {\n        focusable: \"false\",\n        height: size,\n        invertColor: invertColor,\n        phase: phase,\n        size: size,\n        viewBox: \"0 0 \".concat(size, \" \").concat(size),\n        width: size,\n        xmlns: \"http://www.w3.org/2000/svg\"\n      }, React.createElement(\"circle\", {\n        cx: size / 2,\n        cy: size / 2,\n        r: strokeRadius\n      })))));\n    }\n  }]);\n\n  return Spinner;\n}(Component);\n\n_defineProperty(Spinner, \"defaultProps\", {\n  delay: 100,\n  isCompleting: false,\n  invertColor: false,\n  onComplete: function onComplete() {},\n  size: 'medium'\n});\n\nexport { Spinner as default };","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport Spinner from '@atlaskit/spinner';\nvar LoadingDiv = styled.div(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject([\"\\n  display: flex;\\n  position: absolute;\\n  left: 50%;\\n  top: 50%;\\n  transform: translate(-50%, -50%);\\n\"], [\"\\n  display: flex;\\n  position: absolute;\\n  left: 50%;\\n  top: 50%;\\n  transform: translate(-50%, -50%);\\n\"])));\nvar LoadingSpinner = /** @class */ (function (_super) {\n    tslib_1.__extends(LoadingSpinner, _super);\n    function LoadingSpinner() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.invertSpinner = function () {\n            var _a = _this.props, appearance = _a.appearance, isSelected = _a.isSelected, isDisabled = _a.isDisabled;\n            if (isSelected) {\n                return true;\n            }\n            if (isDisabled) {\n                return false;\n            }\n            if (appearance === 'primary' ||\n                appearance === 'danger' ||\n                appearance === 'help') {\n                return true;\n            }\n            return false;\n        };\n        return _this;\n    }\n    LoadingSpinner.prototype.render = function () {\n        var spacing = this.props.spacing;\n        var spinnerSize = 'medium';\n        if (spacing !== 'default') {\n            spinnerSize = 'small';\n        }\n        return (React.createElement(LoadingDiv, null,\n            React.createElement(Spinner, { size: spinnerSize, invertColor: this.invertSpinner() })));\n    };\n    return LoadingSpinner;\n}(React.Component));\nexport default LoadingSpinner;\nvar templateObject_1;\n//# sourceMappingURL=LoadingSpinner.js.map","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent, } from '@atlaskit/analytics-next';\nimport withDeprecationWarnings from './withDeprecationWarnings';\nimport getButtonProps from './getButtonProps';\nimport CustomComponentProxy from './CustomComponentProxy';\nimport getButtonStyles from '../styled/getButtonStyles';\nimport ButtonContent from '../styled/ButtonContent';\nimport ButtonWrapper from '../styled/ButtonWrapper';\nimport IconWrapper from '../styled/IconWrapper';\nimport LoadingSpinner from '../styled/LoadingSpinner';\nimport { name as packageName, version as packageVersion, } from '../../package.json';\nimport { withDefaultProps } from '@atlaskit/type-helpers';\nvar StyledButton = styled.button(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject([\"\\n  \", \";\\n\"], [\"\\n  \", \";\\n\"])), getButtonStyles);\nStyledButton.displayName = 'StyledButton';\n// Target the <a> here to override a:hover specificity.\nvar StyledLink = styled.a(templateObject_2 || (templateObject_2 = tslib_1.__makeTemplateObject([\"\\n  a& {\\n    \", \";\\n  }\\n\"], [\"\\n  a& {\\n    \", \";\\n  }\\n\"])), getButtonStyles);\nStyledLink.displayName = 'StyledLink';\nvar StyledSpan = styled.span(templateObject_3 || (templateObject_3 = tslib_1.__makeTemplateObject([\"\\n  \", \";\\n\"], [\"\\n  \", \";\\n\"])), getButtonStyles);\nStyledSpan.displayName = 'StyledSpan';\nvar createStyledComponent = function () {\n    // Override pseudo-state specificity.\n    // This is necessary because we don't know what DOM element the custom component will render.\n    var component = styled(CustomComponentProxy)(templateObject_4 || (templateObject_4 = tslib_1.__makeTemplateObject([\"\\n    &,\\n    a&,\\n    &:hover,\\n    &:active,\\n    &:focus {\\n      \", \"\\n    }\\n  \"], [\"\\n    &,\\n    a&,\\n    &:hover,\\n    &:active,\\n    &:focus {\\n      \", \"\\n    }\\n  \"])), getButtonStyles);\n    component.displayName = 'StyledCustomComponent';\n    return component;\n};\nexport var defaultProps = {\n    appearance: 'default',\n    isDisabled: false,\n    isSelected: false,\n    isLoading: false,\n    spacing: 'default',\n    type: 'button',\n    shouldFitContainer: false,\n    autoFocus: false,\n};\nvar Button = /** @class */ (function (_super) {\n    tslib_1.__extends(Button, _super);\n    function Button() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.state = {\n            isActive: false,\n            isFocus: false,\n            isHover: false,\n        };\n        _this.customComponent = null;\n        _this.isInteractive = function () { return !_this.props.isDisabled && !_this.props.isLoading; };\n        _this.onMouseEnter = function () {\n            _this.setState({ isHover: true });\n        };\n        _this.onMouseLeave = function () { return _this.setState({ isHover: false, isActive: false }); };\n        _this.onMouseDown = function (e) {\n            e.preventDefault();\n            _this.setState({ isActive: true });\n        };\n        _this.onMouseUp = function () { return _this.setState({ isActive: false }); };\n        _this.onFocus = function (event) {\n            _this.setState({ isFocus: true });\n            if (_this.props.onFocus) {\n                _this.props.onFocus(event);\n            }\n        };\n        _this.onBlur = function (event) {\n            _this.setState({ isFocus: false });\n            if (_this.props.onBlur) {\n                _this.props.onBlur(event);\n            }\n        };\n        /* Swallow click events when the button is disabled to prevent inner child clicks bubbling up */\n        _this.onInnerClick = function (e) {\n            if (!_this.isInteractive()) {\n                e.stopPropagation();\n            }\n            return true;\n        };\n        _this.getInnerRef = function (ref) {\n            _this.button = ref;\n            if (_this.props.innerRef) {\n                _this.props.innerRef(ref);\n            }\n        };\n        return _this;\n    }\n    Button.prototype.componentWillReceiveProps = function (nextProps) {\n        if (this.props.component !== nextProps.component) {\n            delete this.customComponent;\n        }\n    };\n    Button.prototype.componentDidMount = function () {\n        if (this.props.autoFocus && this.button) {\n            this.button.focus();\n        }\n    };\n    Button.prototype.getStyledComponent = function () {\n        if (this.props.component) {\n            if (!this.customComponent) {\n                this.customComponent = createStyledComponent();\n            }\n            return this.customComponent;\n        }\n        if (this.props.href) {\n            return this.props.isDisabled ? StyledSpan : StyledLink;\n        }\n        return StyledButton;\n    };\n    Button.prototype.render = function () {\n        var _a = this.props, children = _a.children, iconBefore = _a.iconBefore, iconAfter = _a.iconAfter, isLoading = _a.isLoading, shouldFitContainer = _a.shouldFitContainer, spacing = _a.spacing, appearance = _a.appearance, isSelected = _a.isSelected, isDisabled = _a.isDisabled;\n        var buttonProps = getButtonProps(this);\n        var StyledComponent = this.getStyledComponent();\n        var iconIsOnlyChild = !!((iconBefore && !iconAfter && !children) ||\n            (iconAfter && !iconBefore && !children));\n        return (React.createElement(StyledComponent, tslib_1.__assign({ innerRef: this.getInnerRef }, buttonProps),\n            React.createElement(ButtonWrapper, { onClick: this.onInnerClick, fit: !!shouldFitContainer },\n                isLoading ? (React.createElement(LoadingSpinner, { spacing: spacing, appearance: appearance, isSelected: isSelected, isDisabled: isDisabled })) : null,\n                iconBefore ? (React.createElement(IconWrapper, { isLoading: isLoading, spacing: buttonProps.spacing, isOnlyChild: iconIsOnlyChild }, iconBefore)) : null,\n                children ? (React.createElement(ButtonContent, { isLoading: isLoading, followsIcon: !!iconBefore, spacing: buttonProps.spacing }, children)) : null,\n                iconAfter ? (React.createElement(IconWrapper, { isLoading: isLoading, spacing: buttonProps.spacing, isOnlyChild: iconIsOnlyChild }, iconAfter)) : null)));\n    };\n    return Button;\n}(React.Component));\nexport { Button };\nexport var DefaultedButton = withDefaultProps(defaultProps, Button);\nexport var ButtonBase = Button;\nexport var ButtonWithoutAnalytics = withDeprecationWarnings(DefaultedButton);\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n    componentName: 'button',\n    packageName: packageName,\n    packageVersion: packageVersion,\n})(withAnalyticsEvents({\n    onClick: createAndFireEventOnAtlaskit({\n        action: 'clicked',\n        actionSubject: 'button',\n        attributes: {\n            componentName: 'button',\n            packageName: packageName,\n            packageVersion: packageVersion,\n        },\n    }),\n})(ButtonWithoutAnalytics));\nvar templateObject_1, templateObject_2, templateObject_3, templateObject_4;\n//# sourceMappingURL=Button.js.map","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return _toConsumableArray(ancestorData).concat([data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_assertThisInitialized(_this)), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","export function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","import styled from 'styled-components';\nimport { borderRadius, colors, gridSize, math, themed } from '@atlaskit/theme';\n\nfunction lockSelectedColor(normal) {\n  var selected = {\n    light: colors.B400,\n    dark: colors.B100\n  };\n  return themed('status', {\n    normal: normal,\n    selected: selected\n  });\n}\n\nvar labelColor = lockSelectedColor({\n  light: colors.N500,\n  dark: colors.DN400\n});\nvar activeLabelColor = lockSelectedColor({\n  light: colors.B500,\n  dark: colors.B200\n});\nvar focusLabelColor = lockSelectedColor({\n  light: colors.B100,\n  dark: colors.B100\n});\nvar hoverLabelColor = lockSelectedColor({\n  light: colors.B400,\n  dark: colors.B75\n});\nvar underlineColor = lockSelectedColor({\n  light: colors.N30,\n  dark: colors.DN0\n});\nvar underlineHeight = '2px';\n/*\n  NOTE min-height attribute\n  FF http://stackoverflow.com/questions/28636832/firefox-overflow-y-not-working-with-nested-flexbox\n*/\n// Tabs\n\nexport var Tabs = styled.div.withConfig({\n  displayName: \"styled__Tabs\",\n  componentId: \"sc-716rt7-0\"\n})([\"\\n  display: flex;\\n  flex-basis: 100%;\\n  flex-direction: column;\\n  flex-grow: 1;\\n  max-width: 100%;\\n  min-height: 0%; /* See min-height note */\\n\"]); // TabPane\n\nexport var TabPane = styled.div.withConfig({\n  displayName: \"styled__TabPane\",\n  componentId: \"sc-716rt7-1\"\n})([\"\\n  display: flex;\\n  flex-grow: 1;\\n  min-height: 0%; /* See min-height note */\\n  padding-left: \", \"px;\\n  padding-right: \", \"px;\\n\"], gridSize, gridSize); // TabNav\n\nexport var NavWrapper = styled.div.withConfig({\n  displayName: \"styled__NavWrapper\",\n  componentId: \"sc-716rt7-2\"\n})([\"\\n  position: relative;\\n\"]);\nexport var Nav = styled.div.withConfig({\n  displayName: \"styled__Nav\",\n  componentId: \"sc-716rt7-3\"\n})([\"\\n  display: flex;\\n  font-weight: 500;\\n  list-style-type: none;\\n  margin: 0;\\n  padding: 0;\\n\"]);\nexport var NavLine = styled.span.withConfig({\n  displayName: \"styled__NavLine\",\n  componentId: \"sc-716rt7-4\"\n})([\"\\n  background-color: \", \";\\n  border-radius: \", \";\\n  bottom: 0;\\n  content: '';\\n  height: \", \";\\n  left: \", \"px;\\n  margin: 0;\\n  position: absolute;\\n  right: \", \"px;\\n  width: inherit;\\n\"], underlineColor, underlineHeight, underlineHeight, gridSize, gridSize);\nexport var NavItem = styled.div.withConfig({\n  displayName: \"styled__NavItem\",\n  componentId: \"sc-716rt7-5\"\n})([\"\\n  color: \", \";\\n  cursor: pointer;\\n  line-height: 1.8;\\n  margin: 0;\\n  padding: \", \"px \", \"px;\\n  position: relative;\\n  white-space: nowrap;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n\\n  &:hover {\\n    color: \", \";\\n  }\\n  &:active,\\n  &:active::before {\\n    color: \", \";\\n  }\\n\\n  &:focus {\\n    border-radius: \", \"px;\\n    box-shadow: 0 0 0 2px \", \" inset;\\n    outline: none;\\n  }\\n\"], labelColor, math.divide(gridSize, 2), gridSize, hoverLabelColor, activeLabelColor, borderRadius, focusLabelColor);","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { Nav, NavLine, NavWrapper } from '../styled';\n\nvar TabsNavigation =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(TabsNavigation, _Component);\n\n  function TabsNavigation() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, TabsNavigation);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(TabsNavigation)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"elementRefs\", []);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"tabKeyDownHandler\", function (e) {\n      if (!['ArrowRight', 'ArrowLeft'].includes(e.key)) {\n        return;\n      }\n\n      var _this$props = _this.props,\n          selected = _this$props.selected,\n          tabs = _this$props.tabs;\n      var modifier = e.key === 'ArrowRight' ? 1 : -1;\n      var newselectedIndex = tabs.indexOf(selected) + modifier;\n\n      if (newselectedIndex < 0 || newselectedIndex >= tabs.length) {\n        return;\n      }\n\n      _this.onSelect(tabs[newselectedIndex], newselectedIndex);\n\n      _this.elementRefs[newselectedIndex].focus();\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onSelect\", function (selected, selectedIndex) {\n      _this.props.onSelect(selected, selectedIndex);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"tabMouseDownHandler\", function (e) {\n      return e.preventDefault();\n    });\n\n    return _this;\n  }\n\n  _createClass(TabsNavigation, [{\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.tabs !== this.props.tabs) {\n        this.elementRefs = [];\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          selected = _this$props2.selected,\n          Item = _this$props2.component,\n          tabs = _this$props2.tabs;\n      return React.createElement(NavWrapper, null, React.createElement(NavLine, {\n        status: \"normal\"\n      }), React.createElement(Nav, {\n        role: \"tablist\"\n      }, tabs.map(function (tab, index) {\n        var isSelected = tab === selected;\n        var elementProps = {\n          'aria-posinset': index + 1,\n          'aria-selected': isSelected,\n          'aria-setsize': tabs.length,\n          onClick: function onClick() {\n            return _this2.onSelect(tab, index);\n          },\n          onKeyDown: _this2.tabKeyDownHandler,\n          onMouseDown: _this2.tabMouseDownHandler,\n          role: 'tab',\n          tabIndex: isSelected ? 0 : -1\n        };\n\n        var innerRef = function innerRef(ref) {\n          _this2.elementRefs[index] = ref;\n        };\n\n        var itemProps = {\n          elementProps: elementProps,\n          innerRef: innerRef,\n          data: tab,\n          isSelected: isSelected\n        }; // eslint-disable-next-line react/no-array-index-key\n\n        return React.createElement(Item, _extends({\n          key: index\n        }, itemProps));\n      })));\n    }\n  }]);\n\n  return TabsNavigation;\n}(Component);\n\nexport { TabsNavigation as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { TabPane } from '../styled';\n\nvar TabContent =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(TabContent, _Component);\n\n  function TabContent() {\n    _classCallCheck(this, TabContent);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(TabContent).apply(this, arguments));\n  }\n\n  _createClass(TabContent, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          data = _this$props.data,\n          elementProps = _this$props.elementProps;\n      return React.createElement(TabPane, elementProps, data.content);\n    }\n  }]);\n\n  return TabContent;\n}(Component);\n\n_defineProperty(TabContent, \"defaultProps\", {\n  data: {},\n  elementProps: {}\n});\n\nexport { TabContent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { NavItem, NavLine } from '../styled';\n\nvar noop = function noop() {};\n\nvar TabItem =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(TabItem, _Component);\n\n  function TabItem() {\n    _classCallCheck(this, TabItem);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(TabItem).apply(this, arguments));\n  }\n\n  _createClass(TabItem, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          data = _this$props.data,\n          elementProps = _this$props.elementProps,\n          innerRef = _this$props.innerRef,\n          isSelected = _this$props.isSelected;\n      return React.createElement(NavItem, _extends({}, elementProps, {\n        innerRef: innerRef,\n        status: isSelected ? 'selected' : 'normal'\n      }), data.label, isSelected ? React.createElement(NavLine, {\n        status: \"selected\"\n      }) : null);\n    }\n  }]);\n\n  return TabItem;\n}(Component);\n\n_defineProperty(TabItem, \"defaultProps\", {\n  data: {},\n  elementProps: {},\n  innerRef: noop,\n  isSelected: false\n});\n\nexport { TabItem as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport TabsNavigation from './TabsNavigation';\nimport DefaultTabContent from './TabContent';\nimport DefaultTabItem from './TabItem';\nimport { Tabs as StyledTabs } from '../styled';\n\nvar defaultIsSelectedTestNumber = function defaultIsSelectedTestNumber(selectedIndex, tab, tabIndex) {\n  return selectedIndex === tabIndex;\n};\n\nvar defaultIsSelectedTestObject = function defaultIsSelectedTestObject(selected, tab) {\n  return selected === tab;\n};\n\nvar defaultComponents = {\n  Content: DefaultTabContent,\n  Item: DefaultTabItem\n};\n\nvar Tabs =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Tabs, _Component);\n\n  function Tabs(props) {\n    var _this;\n\n    _classCallCheck(this, Tabs);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Tabs).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"resolveSelected\", function (selected, newProps) {\n      var _ref = newProps || _this.props,\n          tabs = _ref.tabs,\n          isSelectedTest = _ref.isSelectedTest;\n\n      var testFunction = function () {\n        if (isSelectedTest) {\n          return isSelectedTest;\n        }\n\n        if (typeof selected === 'number') {\n          return defaultIsSelectedTestNumber;\n        }\n\n        return defaultIsSelectedTestObject;\n      }();\n\n      return tabs.find(function (tab, tabIndex) {\n        return testFunction(selected, tab, tabIndex);\n      }) || tabs[0];\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onSelect\", function (newselected, newSelectedIndex) {\n      var _this$props = _this.props,\n          onSelect = _this$props.onSelect,\n          selected = _this$props.selected;\n\n      if (typeof onSelect === 'function') {\n        onSelect(newselected, newSelectedIndex);\n      }\n\n      if (typeof selected === 'undefined') {\n        _this.setState({\n          selected: newselected\n        });\n      }\n    });\n\n    var initiallyselected = _this.props.selected || _this.props.defaultSelected || _this.props.tabs[0];\n\n    var _selected = _this.resolveSelected(initiallyselected);\n\n    _this.state = {\n      selected: _selected\n    };\n    return _this;\n  }\n\n  _createClass(Tabs, [{\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (typeof newProps.selected !== 'undefined' && newProps.selected !== this.state.selected) {\n        var selected = this.resolveSelected(newProps.selected, newProps);\n        this.setState({\n          selected: selected\n        });\n      } else if (newProps.tabs !== this.props.tabs) {\n        var updatedselected = this.resolveSelected(this.state.selected, newProps);\n        this.setState({\n          selected: updatedselected\n        });\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props2 = this.props,\n          components = _this$props2.components,\n          tabs = _this$props2.tabs;\n      var selected = this.state.selected;\n\n      var _defaultComponents$co = _objectSpread({}, defaultComponents, components),\n          Content = _defaultComponents$co.Content,\n          Item = _defaultComponents$co.Item;\n\n      var contentProps = {\n        data: selected,\n        elementProps: {\n          role: 'tabpanel'\n        }\n      };\n      return React.createElement(StyledTabs, null, React.createElement(TabsNavigation, {\n        component: Item,\n        onSelect: this.onSelect,\n        selected: selected,\n        tabs: tabs\n      }), React.createElement(Content, contentProps));\n    }\n  }]);\n\n  return Tabs;\n}(Component);\n\n_defineProperty(Tabs, \"defaultProps\", {\n  components: {}\n});\n\nexport { Tabs as TabsWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'tabs',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onSelect: createAndFireEventOnAtlaskit({\n    action: 'clicked',\n    actionSubject: 'tab',\n    attributes: {\n      componentName: 'tabs',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Tabs));","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport memoizeOne from 'memoize-one';\nimport { Popper as ReactPopper } from 'react-popper';\nexport { Manager, Reference } from 'react-popper';\n\nvar getFlipBehavior = function getFlipBehavior(side) {\n  return {\n    auto: [],\n    top: ['top', 'bottom', 'top'],\n    right: ['right', 'left', 'right'],\n    bottom: ['bottom', 'top', 'bottom'],\n    left: ['left', 'right', 'left']\n  }[side];\n};\n\nexport var Popper =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Popper, _Component);\n\n  function Popper() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Popper);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Popper)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getModifiers\", memoizeOne(function (placement) {\n      var flipBehavior = getFlipBehavior(placement.split('-')[0]);\n      var modifiers = {\n        flip: {\n          enabled: true,\n          behavior: flipBehavior,\n          boundariesElement: 'viewport'\n        },\n        hide: {\n          enabled: true,\n          boundariesElement: 'scrollParent'\n        },\n        offset: {\n          enabled: true,\n          offset: _this.props.offset\n        },\n        preventOverflow: {\n          enabled: true,\n          escapeWithReference: false,\n          boundariesElement: 'window'\n        }\n      };\n      return modifiers;\n    }));\n\n    return _this;\n  }\n\n  _createClass(Popper, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          placement = _this$props.placement,\n          children = _this$props.children,\n          referenceElement = _this$props.referenceElement;\n      var modifiers = this.getModifiers(this.props.placement);\n      return React.createElement(ReactPopper, _extends({\n        positionFixed: true,\n        modifiers: modifiers,\n        placement: placement\n      }, referenceElement ? {\n        referenceElement: referenceElement\n      } : {}), children);\n    }\n  }]);\n\n  return Popper;\n}(Component);\n\n_defineProperty(Popper, \"defaultProps\", {\n  children: function children() {},\n  offset: '0, 8px',\n  placement: 'bottom-start'\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport invariant from 'tiny-invariant';\nimport { canUseDOM } from 'exenv';\n\nvar createContainer = function createContainer(zIndex) {\n  var container = document.createElement('div');\n  container.setAttribute('class', 'atlaskit-portal');\n  container.setAttribute('style', \"z-index: \".concat(zIndex, \";\"));\n  return container;\n};\n\nvar body = function body() {\n  invariant(document && document.body, 'cannot find document.body');\n  return document.body;\n};\n\nvar portalParent = function portalParent() {\n  var parentElement = document.querySelector('body > .atlaskit-portal-container');\n\n  if (!parentElement) {\n    var parent = document.createElement('div');\n    parent.setAttribute('class', 'atlaskit-portal-container');\n    parent.setAttribute('style', \"display: flex;\");\n    body().appendChild(parent);\n    return parent;\n  }\n\n  return parentElement;\n}; // This is a generic component does two things:\n// 1. Portals it's children using React.createPortal\n// 2. Creates the DOM node container for the portal based on props\n// 3. Ensures DOM the container creates it's own stacking context\n\n\nvar Portal =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inherits(Portal, _React$Component);\n\n  function Portal() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Portal);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Portal)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      container: canUseDOM ? createContainer(_this.props.zIndex) : undefined\n    });\n\n    return _this;\n  }\n\n  _createClass(Portal, [{\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps, prevState) {\n      var container = this.state.container;\n      var zIndex = this.props.zIndex;\n\n      if (container && prevProps.zIndex !== zIndex) {\n        var newContainer = createContainer(zIndex);\n        portalParent().replaceChild(container, newContainer); // eslint-disable-next-line react/no-did-update-set-state\n\n        this.setState({\n          container: newContainer\n        });\n      } else if (!prevState.container && container) {\n        // SSR path\n        portalParent().appendChild(container);\n      }\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var container = this.state.container;\n      var zIndex = this.props.zIndex;\n\n      if (container) {\n        portalParent().appendChild(container);\n      } else {\n        // SSR path\n        var newContainer = createContainer(zIndex); // eslint-disable-next-line react/no-did-mount-set-state\n\n        this.setState({\n          container: newContainer\n        });\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      var container = this.state.container;\n\n      if (container) {\n        portalParent().removeChild(container); // clean up parent element if there are no more portals\n\n        var portals = !!document.querySelector('body > .atlaskit-portal-container > .atlaskit-portal');\n\n        if (!portals) {\n          body().removeChild(portalParent());\n        }\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var container = this.state.container;\n      return container ? ReactDOM.createPortal(this.props.children, container) : this.props.children;\n    }\n  }]);\n\n  return Portal;\n}(React.Component);\n\n_defineProperty(Portal, \"defaultProps\", {\n  zIndex: 0\n});\n\nexport default Portal;","export var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];","import { DEFAULT_THEME_MODE } from '../constants';\nvar defaultTheme = {\n  mode: DEFAULT_THEME_MODE\n};\nexport default function getTheme(props) {\n  if (props && props.theme && props.theme.__ATLASKIT_THEME__) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme.__ATLASKIT_THEME__;\n  } else if (props && props.theme && props.theme.mode) {\n    // $FlowFixMe - cannot narrow type between input types\n    return props.theme;\n  }\n\n  return defaultTheme;\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes) {\n        return modes[theme.mode];\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    var theme = getTheme(props);\n    return modes[theme.mode];\n  };\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport themed from './utils/themed';\n// Reds\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n}); // Jira Portfolio\n\nexport var colorPalette8 = [{\n  background: N800,\n  text: N0\n}, {\n  background: R400,\n  text: N0\n}, {\n  background: P400,\n  text: P50\n}, {\n  background: B400,\n  text: B75\n}, {\n  background: T300,\n  text: N800\n}, {\n  background: G400,\n  text: N0\n}, {\n  background: Y400,\n  text: N800\n}, {\n  background: N70,\n  text: N800\n}];\nexport var colorPalette16 = colorPalette8.concat([{\n  background: N500,\n  text: N0\n}, {\n  background: R100,\n  text: N800\n}, {\n  background: P75,\n  text: N800\n}, {\n  background: B100,\n  text: N800\n}, {\n  background: T100,\n  text: N800\n}, {\n  background: G100,\n  text: G500\n}, {\n  background: Y200,\n  text: N800\n}, {\n  background: N0,\n  text: N800\n}]);\nexport var colorPalette24 = _toConsumableArray(colorPalette16).concat([{\n  background: N100,\n  text: N0\n}, {\n  background: N40,\n  text: N800\n}, {\n  background: N50,\n  text: R500\n}, {\n  background: P50,\n  text: P500\n}, {\n  background: B50,\n  text: B500\n}, {\n  background: T75,\n  text: N800\n}, {\n  background: G50,\n  text: G500\n}, {\n  background: Y75,\n  text: N800\n}]);\nexport var colorPalette = function colorPalette() {\n  var palette = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '8';\n\n  switch (palette) {\n    case '8':\n      return colorPalette8;\n\n    case '16':\n      return colorPalette16;\n\n    case '24':\n      return colorPalette24;\n\n    default:\n      throw new Error('The only available color palette is 8, 16, 24');\n  }\n};","import { createTheme } from '../utils/createTheme';\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext } from 'react';\nexport function createTheme(defaultThemeFn) {\n  var emptyThemeFn = function emptyThemeFn(tokens, props) {\n    return tokens(props);\n  };\n\n  var ThemeContext = createContext(defaultThemeFn);\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    return React.createElement(ThemeContext.Consumer, null, function (theme) {\n      var themeFn = theme || emptyThemeFn;\n      return props.children(themeFn(themeProps));\n    });\n  }\n\n  function Provider(props) {\n    return React.createElement(ThemeContext.Consumer, null, function (themeFn) {\n      var valueFn = props.value || emptyThemeFn;\n\n      var mixedFn = function mixedFn(themeProps) {\n        return valueFn(themeFn, themeProps);\n      };\n\n      return React.createElement(ThemeContext.Provider, {\n        value: mixedFn\n      }, props.children);\n    });\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(state) {\n  var backgroundColor = colors.background(state);\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div.withConfig({\n  displayName: \"AtlaskitThemeProvider__LegacyReset\",\n  componentId: \"sc-431dkp-0\"\n})([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"], colors.background, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(AtlaskitThemeProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"stylesheet\", void 0);\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"componentWillMount\",\n    value: function componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider) {\n        var css = getStylesheetResetCSS(this.state);\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newThemeState);\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: function value() {\n            return {\n              mode: theme[CHANNEL].mode\n            };\n          }\n        }, React.createElement(ThemeProvider, {\n          theme: theme\n        }, React.createElement(LegacyReset, null, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import { css } from 'styled-components';\nimport * as colors from './colors';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif';\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return '\"SFMono-Medium\", \"SF Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Ubuntu Mono\", Menlo, Consolas, Courier, monospace';\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 200;\n  },\n  navigation: function navigation() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var assistive = function assistive() {\n  return css([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n}; // New API\n\nexport * from './components/Reset';\nexport { default } from './components/Theme';\nexport * from './hoc';\nexport * from './utils/createTheme';","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return _toConsumableArray(ancestorData).concat([data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_assertThisInitialized(_this)), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\n/* eslint-disable react/require-default-props */\nimport React, { Children, Component, Fragment } from 'react';\nimport NodeResolver from 'react-node-resolver';\nimport flushable from 'flushable';\nimport { Popper } from '@atlaskit/popper';\nimport Portal from '@atlaskit/portal';\nimport { layers } from '@atlaskit/theme';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport { Tooltip as StyledTooltip } from '../styled';\nimport Animation from './Animation';\nimport { hoveredPayload, unhoveredPayload } from './utils/analytics-payloads';\n\nfunction getMousePosition(mouseCoordinates) {\n  var safeMouse = mouseCoordinates || {\n    top: 0,\n    left: 0\n  };\n\n  var getBoundingClientRect = function getBoundingClientRect() {\n    return {\n      top: safeMouse.top,\n      left: safeMouse.left,\n      bottom: safeMouse.top,\n      right: safeMouse.left,\n      width: 0,\n      height: 0\n    };\n  };\n\n  return {\n    getBoundingClientRect: getBoundingClientRect,\n    clientWidth: 0,\n    clientHeight: 0\n  };\n}\n\nvar pendingHide;\n\nvar showTooltip = function showTooltip(fn, defaultDelay) {\n  var isHidePending = pendingHide && pendingHide.pending();\n\n  if (isHidePending) {\n    pendingHide.flush();\n  }\n\n  var pendingShow = flushable(function () {\n    return fn(isHidePending);\n  }, isHidePending ? 0 : defaultDelay);\n  return pendingShow.cancel;\n};\n\nvar hideTooltip = function hideTooltip(fn, defaultDelay) {\n  pendingHide = flushable(function (flushed) {\n    return fn(flushed);\n  }, defaultDelay);\n  return pendingHide.cancel;\n};\n\nvar Tooltip =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Tooltip, _Component);\n\n  function Tooltip() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Tooltip);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Tooltip)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"wrapperRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"targetRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fakeMouseElement\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"cancelPendingSetState\", function () {});\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      immediatelyHide: false,\n      immediatelyShow: false,\n      isVisible: false,\n      renderTooltip: false\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleWindowScroll\", function () {\n      if (_this.state.isVisible) {\n        _this.cancelPendingSetState();\n\n        _this.setState({\n          isVisible: false,\n          immediatelyHide: true\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseClick\", function () {\n      if (_this.props.hideTooltipOnClick) {\n        _this.cancelPendingSetState();\n\n        _this.setState({\n          isVisible: false,\n          immediatelyHide: true\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseDown\", function () {\n      if (_this.props.hideTooltipOnMouseDown) {\n        _this.cancelPendingSetState();\n\n        _this.setState({\n          isVisible: false,\n          immediatelyHide: true\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseOver\", function (e) {\n      if (e.target === _this.wrapperRef) return; // In the case where a tooltip is newly rendered but immediately becomes hovered,\n      // we need to set the coordinates in the mouseOver event.\n\n      if (!_this.fakeMouseElement) _this.fakeMouseElement = getMousePosition({\n        left: e.clientX,\n        top: e.clientY\n      });\n\n      _this.cancelPendingSetState();\n\n      if (Boolean(_this.props.content) && !_this.state.isVisible) {\n        _this.cancelPendingSetState = showTooltip(function (immediatelyShow) {\n          _this.setState({\n            isVisible: true,\n            renderTooltip: true,\n            immediatelyShow: immediatelyShow\n          });\n        }, _this.props.delay);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseLeave\", function (e) {\n      if (e.target === _this.wrapperRef) return;\n\n      _this.cancelPendingSetState();\n\n      if (_this.state.isVisible) {\n        _this.cancelPendingSetState = hideTooltip(function (immediatelyHide) {\n          _this.setState({\n            isVisible: false,\n            immediatelyHide: immediatelyHide\n          });\n        }, _this.props.delay);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleMouseMove\", function (event) {\n      if (!_this.state.renderTooltip) {\n        _this.fakeMouseElement = getMousePosition({\n          left: event.clientX,\n          top: event.clientY\n        });\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(Tooltip, [{\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.cancelPendingSetState();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps, prevState) {\n      var scrollOptions = {\n        capture: true,\n        passive: true\n      };\n\n      if (!prevState.isVisible && this.state.isVisible) {\n        if (this.props.onShow) this.props.onShow();\n        window.addEventListener('scroll', this.handleWindowScroll, scrollOptions);\n      } else if (prevState.isVisible && !this.state.isVisible) {\n        if (this.props.onHide) this.props.onHide();\n        window.removeEventListener('scroll', this.handleWindowScroll, scrollOptions);\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          children = _this$props.children,\n          content = _this$props.content,\n          position = _this$props.position,\n          mousePosition = _this$props.mousePosition,\n          truncate = _this$props.truncate,\n          TooltipContainer = _this$props.component,\n          TargetContainer = _this$props.tag;\n      var _this$state = this.state,\n          isVisible = _this$state.isVisible,\n          renderTooltip = _this$state.renderTooltip,\n          immediatelyShow = _this$state.immediatelyShow,\n          immediatelyHide = _this$state.immediatelyHide;\n      return React.createElement(Fragment, null, React.createElement(TargetContainer, {\n        onClick: this.handleMouseClick,\n        onMouseOver: this.handleMouseOver,\n        onMouseOut: this.handleMouseLeave,\n        onMouseMove: this.handleMouseMove,\n        onMouseDown: this.handleMouseDown,\n        ref: function ref(wrapperRef) {\n          _this2.wrapperRef = wrapperRef;\n        }\n      }, React.createElement(NodeResolver, {\n        innerRef: function innerRef(targetRef) {\n          _this2.targetRef = targetRef;\n        }\n      }, Children.only(children))), renderTooltip && this.targetRef && this.fakeMouseElement ? React.createElement(Popper, {\n        referenceElement: // https://github.com/FezVrasta/react-popper#usage-without-a-reference-htmlelement\n        // We are using a popper technique to pass in a faked element when we use mouse.\n        // This is fine.\n        // $FlowFixMe\n        position === 'mouse' ? this.fakeMouseElement : this.targetRef,\n        placement: position === 'mouse' ? mousePosition : position\n      }, function (_ref) {\n        var ref = _ref.ref,\n            style = _ref.style,\n            placement = _ref.placement;\n        return React.createElement(Animation, {\n          immediatelyShow: immediatelyShow,\n          immediatelyHide: immediatelyHide,\n          onExited: function onExited() {\n            return _this2.setState({\n              renderTooltip: false\n            });\n          },\n          in: isVisible\n        }, function (getAnimationStyles) {\n          return React.createElement(Portal, {\n            zIndex: layers.tooltip()\n          }, React.createElement(TooltipContainer, {\n            innerRef: ref,\n            style: _objectSpread({}, getAnimationStyles(placement), style),\n            truncate: truncate\n          }, content));\n        });\n      }) : null);\n    }\n  }]);\n\n  return Tooltip;\n}(Component);\n\n_defineProperty(Tooltip, \"defaultProps\", {\n  component: StyledTooltip,\n  delay: 300,\n  mousePosition: 'bottom',\n  position: 'bottom',\n  tag: 'div'\n});\n\nexport { Tooltip as TooltipWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'tooltip',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onHide: unhoveredPayload,\n  onShow: createAndFireEventOnAtlaskit(_objectSpread({}, hoveredPayload))\n})(Tooltip));","import styled, { css } from 'styled-components';\nimport { borderRadius, colors, themed, layers } from '@atlaskit/theme';\nvar backgroundColor = themed({\n  light: colors.N800,\n  dark: colors.DN0\n});\nvar textColor = themed({\n  light: colors.N0,\n  dark: colors.DN600\n});\n\nvar truncate = function truncate(p) {\n  return p.truncate ? css([\"\\n        max-width: 420px;\\n        overflow: hidden;\\n        text-overflow: ellipsis;\\n        white-space: nowrap;\\n      \"]) : '';\n};\n\nexport var TooltipPrimitive = styled.div.withConfig({\n  displayName: \"styled__TooltipPrimitive\",\n  componentId: \"fadon5-0\"\n})([\"\\n  z-index: \", \";\\n  pointer-events: none;\\n  position: fixed;\\n\"], layers.tooltip);\nexport var Tooltip = styled(TooltipPrimitive).withConfig({\n  displayName: \"styled__Tooltip\",\n  componentId: \"fadon5-1\"\n})([\"\\n  background-color: \", \";\\n  border-radius: \", \"px;\\n  box-sizing: border-box;\\n  color: \", \";\\n  font-size: 12px;\\n  left: 0;\\n  line-height: 1.3;\\n  max-width: 240px;\\n  padding: 2px 6px;\\n  top: 0;\\n  /* Edge does not support overflow-wrap */\\n  word-wrap: break-word;\\n  overflow-wrap: break-word;\\n  \", \";\\n\"], backgroundColor, borderRadius, textColor, truncate); // The inline-block here is needed to keep the tooltip appearing in the correct position\n// when nested inside a wider parent (see position: relative example).\n\nexport var Target = styled.div.withConfig({\n  displayName: \"styled__Target\",\n  componentId: \"fadon5-2\"\n})([\"\\n  display: inline-block;\\n\"]);","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nimport { Transition } from 'react-transition-group';\nvar ENTER_DURATION = 120;\nvar EXIT_DURATION = 80;\nvar easing = 'cubic-bezier(0.23, 1, 0.32, 1)'; // easeOutQuint\n\nvar distance = 8;\nvar horizontalOffset = {\n  left: distance,\n  right: -distance,\n  top: 0,\n  bottom: 0\n};\nvar verticalOffset = {\n  bottom: -distance,\n  top: distance,\n  left: 0,\n  right: 0\n};\n\nvar defaultStyle = function defaultStyle(timeout) {\n  return {\n    transition: \"transform \".concat(timeout.enter, \"ms \").concat(easing, \", opacity \").concat(timeout.enter, \"ms linear\"),\n    opacity: 0\n  };\n};\n\nvar transitionStyle = function transitionStyle(timeout, state, position) {\n  var transitions = {\n    entering: {\n      transform: \"translate3d(\".concat(horizontalOffset[position], \"px, \").concat(verticalOffset[position], \"px, 0)\")\n    },\n    entered: {\n      opacity: 1\n    },\n    exiting: {\n      opacity: 0,\n      transition: \"\".concat(timeout.exit, \"ms linear\"),\n      transform: \"translate3d(\".concat(horizontalOffset[position] / 2, \"px, \").concat(verticalOffset[position] / 2, \"px, 0)\")\n    }\n  };\n  return transitions[state];\n};\n\nvar getStyle = function getStyle(timeout, state) {\n  return function (position) {\n    return _objectSpread({}, defaultStyle(timeout), transitionStyle(timeout, state, position));\n  };\n};\n\nvar Animation = function Animation(_ref) {\n  var children = _ref.children,\n      immediatelyHide = _ref.immediatelyHide,\n      immediatelyShow = _ref.immediatelyShow,\n      onExited = _ref.onExited,\n      inProp = _ref.in;\n  var timeout = {\n    enter: immediatelyShow ? 1 : ENTER_DURATION,\n    exit: immediatelyHide ? 1 : EXIT_DURATION\n  };\n  return React.createElement(Transition, {\n    timeout: timeout,\n    in: inProp,\n    onExited: onExited,\n    unmountOnExit: true,\n    appear: true\n  }, function (state) {\n    return children(getStyle(timeout, state));\n  });\n};\n\nexport default Animation;","import { name as packageName, version as packageVersion } from '../../../package.json';\nexport var hoveredPayload = {\n  action: 'displayed',\n  actionSubject: 'tooltip',\n  attributes: {\n    componentName: 'tooltip',\n    packageName: packageName,\n    packageVersion: packageVersion\n  }\n};\nexport var unhoveredPayload = {\n  action: 'hidden',\n  actionSubject: 'tooltip',\n  attributes: {\n    componentName: 'tooltip',\n    packageName: packageName,\n    packageVersion: packageVersion\n  }\n};","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return _toConsumableArray(ancestorData).concat([data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_assertThisInitialized(_this)), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport memoizeOne from 'memoize-one';\nimport { Popper as ReactPopper } from 'react-popper';\nexport { Manager, Reference } from 'react-popper';\n\nvar getFlipBehavior = function getFlipBehavior(side) {\n  return {\n    auto: [],\n    top: ['top', 'bottom', 'top'],\n    right: ['right', 'left', 'right'],\n    bottom: ['bottom', 'top', 'bottom'],\n    left: ['left', 'right', 'left']\n  }[side];\n};\n\nexport var Popper =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Popper, _Component);\n\n  function Popper() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Popper);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Popper)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getModifiers\", memoizeOne(function (placement) {\n      var flipBehavior = getFlipBehavior(placement.split('-')[0]);\n      var modifiers = {\n        flip: {\n          enabled: true,\n          behavior: flipBehavior,\n          boundariesElement: 'viewport'\n        },\n        hide: {\n          enabled: true,\n          boundariesElement: 'scrollParent'\n        },\n        offset: {\n          enabled: true,\n          offset: _this.props.offset\n        },\n        preventOverflow: {\n          enabled: true,\n          escapeWithReference: false,\n          boundariesElement: 'window'\n        }\n      };\n      return modifiers;\n    }));\n\n    return _this;\n  }\n\n  _createClass(Popper, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          placement = _this$props.placement,\n          children = _this$props.children,\n          referenceElement = _this$props.referenceElement;\n      var modifiers = this.getModifiers(this.props.placement);\n      return React.createElement(ReactPopper, _extends({\n        positionFixed: true,\n        modifiers: modifiers,\n        placement: placement\n      }, referenceElement ? {\n        referenceElement: referenceElement\n      } : {}), children);\n    }\n  }]);\n\n  return Popper;\n}(Component);\n\n_defineProperty(Popper, \"defaultProps\", {\n  children: function children() {},\n  offset: '0, 8px',\n  placement: 'bottom-start'\n});","import styled from 'styled-components';\nimport { borderRadius, colors, gridSize, math, themed, elevation, layers } from '@atlaskit/theme';\nvar backgroundColor = themed({\n  light: colors.N0,\n  dark: colors.DN50\n});\nvar textColor = themed({\n  light: colors.N900,\n  dark: colors.DN600\n}); // eslint-disable-next-line import/prefer-default-export\n\nexport var Container = styled.div.withConfig({\n  displayName: \"styled__Container\",\n  componentId: \"sc-1v7azd6-0\"\n})([\"\\n  background: \", \";\\n  border-radius: \", \"px;\\n  box-sizing: content-box; /* do not set this to border-box or it will break the overflow handling */\\n  color: \", \";\\n  max-height: \", \"px;\\n  max-width: \", \"px;\\n  padding: \", \"px \", \"px;\\n  z-index: \", \";\\n\\n  \", \";\\n\\n  &:focus {\\n    outline: none;\\n  }\\n\"], backgroundColor, borderRadius, textColor, math.multiply(gridSize, 56), math.multiply(gridSize, 56), math.multiply(gridSize, 2), math.multiply(gridSize, 3), layers.dialog, elevation.e200);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport NodeResolver from 'react-node-resolver';\nimport { Manager, Reference, Popper } from '@atlaskit/popper';\nimport { name as packageName, version as packageVersion } from '../../package.json';\nimport { Container } from './styled';\n\nvar InlineDialog =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(InlineDialog, _Component);\n\n  function InlineDialog() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, InlineDialog);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(InlineDialog)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"containerRef\", null);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"triggerRef\", null);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleClickOutside\", function (event) {\n      var _this$props = _this.props,\n          isOpen = _this$props.isOpen,\n          onClose = _this$props.onClose;\n      if (event.defaultPrevented) return;\n      var container = _this.containerRef;\n      var trigger = _this.triggerRef;\n      var target = event.target; // exit if we click outside but on the trigger — it can handle the clicks itself\n\n      if (trigger && trigger.contains(target)) return; // call onClose if the click originated from outside the dialog\n\n      if (isOpen && container && !container.contains(target)) {\n        onClose({\n          isOpen: false,\n          event: event\n        });\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(InlineDialog, [{\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (typeof window === 'undefined') return;\n\n      if (!prevProps.isOpen && this.props.isOpen) {\n        window.addEventListener('click', this.handleClickOutside, true);\n      } else if (prevProps.isOpen && !this.props.isOpen) {\n        window.removeEventListener('click', this.handleClickOutside);\n      }\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      if (typeof window === 'undefined') return;\n\n      if (this.props.isOpen) {\n        window.addEventListener('click', this.handleClickOutside, true);\n      }\n    }\n  }, {\n    key: \"componentWillUnMount\",\n    value: function componentWillUnMount() {\n      if (typeof window === 'undefined') return;\n      window.removeEventListener('click', this.handleClickOutside);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          children = _this$props2.children,\n          placement = _this$props2.placement,\n          isOpen = _this$props2.isOpen,\n          content = _this$props2.content,\n          onContentBlur = _this$props2.onContentBlur,\n          onContentFocus = _this$props2.onContentFocus,\n          onContentClick = _this$props2.onContentClick;\n      var popper = isOpen ? React.createElement(Popper, {\n        placement: placement\n      }, function (_ref) {\n        var ref = _ref.ref,\n            style = _ref.style,\n            outOfBoundaries = _ref.outOfBoundaries;\n        return React.createElement(Container, {\n          onBlur: onContentBlur,\n          onFocus: onContentFocus,\n          onClick: onContentClick,\n          outOfBoundaries: outOfBoundaries,\n          innerRef: function innerRef(node) {\n            _this2.containerRef = node;\n            ref(node);\n          },\n          style: style\n        }, content);\n      }) : null;\n      return React.createElement(Manager, null, React.createElement(Reference, null, function (_ref2) {\n        var ref = _ref2.ref;\n        return React.createElement(NodeResolver, {\n          innerRef: function innerRef(node) {\n            _this2.triggerRef = node;\n            ref(node);\n          }\n        }, children);\n      }), popper);\n    }\n  }]);\n\n  return InlineDialog;\n}(Component);\n\n_defineProperty(InlineDialog, \"defaultProps\", {\n  children: null,\n  content: null,\n  isOpen: false,\n  onContentBlur: function onContentBlur() {},\n  onContentClick: function onContentClick() {},\n  onContentFocus: function onContentFocus() {},\n  onClose: function onClose() {},\n  placement: 'bottom-start'\n});\n\nexport { InlineDialog as InlineDialogWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'inlineDialog',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onClose: createAndFireEventOnAtlaskit({\n    action: 'closed',\n    actionSubject: 'inlineDialog',\n    attributes: {\n      componentName: 'inlineDialog',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(InlineDialog));","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","import { gridSize } from '@atlaskit/theme';\nimport WarningIcon from '@atlaskit/icon/glyph/warning';\nimport CheckCircleIcon from '@atlaskit/icon/glyph/check-circle';\nimport InfoIcon from '@atlaskit/icon/glyph/info';\nimport ErrorIcon from '@atlaskit/icon/glyph/error';\nexport var itemSpacing = gridSize() / 2;\nexport var typesMapping = {\n  connectivity: {\n    icon: WarningIcon,\n    iconSize: 'medium'\n  },\n  confirmation: {\n    icon: CheckCircleIcon,\n    iconSize: 'medium'\n  },\n  info: {\n    icon: InfoIcon,\n    iconSize: 'medium'\n  },\n  warning: {\n    icon: WarningIcon,\n    iconSize: 'medium'\n  },\n  error: {\n    icon: ErrorIcon,\n    iconSize: 'medium'\n  }\n};","import styled from 'styled-components';\nimport { colors, themed } from '@atlaskit/theme';\nimport { itemSpacing } from '../../constants';\n// $FlowFixMe - theme is not found in props\nvar getBaseColor = themed('appearance', {\n  connectivity: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  confirmation: {\n    light: colors.G300,\n    dark: colors.G300\n  },\n  info: {\n    light: colors.P300,\n    dark: colors.P300\n  },\n  warning: {\n    light: colors.Y300,\n    dark: colors.Y300\n  },\n  error: {\n    light: colors.R400,\n    dark: colors.R400\n  }\n});\nvar getHoverColor = themed('appearance', {\n  connectivity: {\n    light: colors.B300,\n    dark: colors.B75\n  },\n  confirmation: {\n    light: colors.G200,\n    dark: colors.G200\n  },\n  info: {\n    light: colors.P200,\n    dark: colors.P200\n  },\n  warning: {\n    light: colors.Y200,\n    dark: colors.Y200\n  },\n  error: {\n    light: colors.R300,\n    dark: colors.R300\n  }\n});\n\nvar getColor = function getColor(props) {\n  if (props.isHovered || props.isOpen) return getHoverColor(props);\n  return getBaseColor(props);\n};\n\nvar IconWrapper = styled.span.withConfig({\n  displayName: \"styledIconForType__IconWrapper\",\n  componentId: \"sc-1aldrej-0\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n  flex: 0 0 auto;\\n  padding: 0 \", \";\\n  color: \", \";\\n\"], itemSpacing, getColor);\nexport default IconWrapper;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport React, { Component } from 'react';\nimport IconWrapper from './styledIconForType';\nimport { typesMapping } from '../../constants';\n\nvar SelectedIconForType =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(SelectedIconForType, _Component);\n\n  function SelectedIconForType() {\n    _classCallCheck(this, SelectedIconForType);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(SelectedIconForType).apply(this, arguments));\n  }\n\n  _createClass(SelectedIconForType, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          type = _this$props.type,\n          isHovered = _this$props.isHovered,\n          isOpen = _this$props.isOpen;\n      var _typesMapping$type = typesMapping[type],\n          SelectedIcon = _typesMapping$type.icon,\n          iconSize = _typesMapping$type.iconSize;\n      return React.createElement(IconWrapper, {\n        appearance: type,\n        isHovered: isHovered,\n        isOpen: isOpen\n      }, React.createElement(SelectedIcon, {\n        label: \"Inline message icon\",\n        size: iconSize\n      }));\n    }\n  }]);\n\n  return SelectedIconForType;\n}(Component);\n\nexport { SelectedIconForType as default };","import styled, { css } from 'styled-components';\nimport { colors, themed } from '@atlaskit/theme';\nimport { itemSpacing } from '../../constants';\nvar getFocusColor = themed('appearance', {\n  connectivity: {\n    light: colors.B500,\n    dark: colors.B200\n  },\n  confirmation: {\n    light: colors.G400,\n    dark: colors.G400\n  },\n  info: {\n    light: colors.P500,\n    dark: colors.P300\n  },\n  warning: {\n    light: colors.Y500,\n    dark: colors.Y500\n  },\n  error: {\n    light: colors.R500,\n    dark: colors.R500\n  }\n});\nexport var Root = styled.div.withConfig({\n  displayName: \"styledInlineMessage__Root\",\n  componentId: \"sc-1o0swkp-0\"\n})([\"\\n  display: inline-block;\\n  max-width: 100%;\\n  &:focus {\\n    outline: 1px solid \", \";\\n  }\\n\"], getFocusColor);\nexport var ButtonContents = styled.div.withConfig({\n  displayName: \"styledInlineMessage__ButtonContents\",\n  componentId: \"sc-1o0swkp-1\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n  text-decoration: none;\\n  \", \";\\n\"], function (_ref) {\n  var isHovered = _ref.isHovered;\n  return isHovered && css([\"\\n      color: \", \";\\n      text-decoration: underline;\\n    \"], colors.N600);\n});\nvar getTitleColor = themed({\n  light: colors.N600,\n  dark: colors.DN600\n});\nvar getTextColor = themed({\n  light: colors.N300,\n  dark: colors.DN100\n});\nexport var Title = styled.span.withConfig({\n  displayName: \"styledInlineMessage__Title\",\n  componentId: \"sc-1o0swkp-2\"\n})([\"\\n  color: \", \";\\n  font-weight: 500;\\n  padding: 0 \", \"px;\\n\"], getTitleColor, itemSpacing);\nexport var Text = styled.span.withConfig({\n  displayName: \"styledInlineMessage__Text\",\n  componentId: \"sc-1o0swkp-3\"\n})([\"\\n  color: \", \";\\n  padding: 0 \", \"px;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n\"], getTextColor, itemSpacing);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport Button from '@atlaskit/button';\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport IconForType from '../IconForType';\nimport { Root, ButtonContents, Text, Title } from './styledInlineMessage';\n\nvar InlineMessage =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(InlineMessage, _Component);\n\n  function InlineMessage() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, InlineMessage);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(InlineMessage)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      isOpen: false,\n      isHovered: false\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMouseEnter\", function () {\n      _this.setState({\n        isHovered: true\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMouseLeave\", function () {\n      _this.setState({\n        isHovered: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"toggleDialog\", function () {\n      _this.setState({\n        isOpen: !_this.state.isOpen\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(InlineMessage, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          children = _this$props.children,\n          placement = _this$props.placement,\n          secondaryText = _this$props.secondaryText,\n          title = _this$props.title,\n          type = _this$props.type;\n      var _this$state = this.state,\n          isHovered = _this$state.isHovered,\n          isOpen = _this$state.isOpen;\n      return React.createElement(Root, {\n        onMouseEnter: this.onMouseEnter,\n        onMouseLeave: this.onMouseLeave,\n        appearance: type\n      }, React.createElement(InlineDialog, {\n        onClose: function onClose() {\n          _this2.setState({\n            isOpen: false\n          });\n        },\n        content: children,\n        isOpen: isOpen,\n        placement: placement\n      }, React.createElement(Button, {\n        appearance: \"subtle-link\",\n        onClick: this.toggleDialog,\n        spacing: \"none\"\n      }, React.createElement(ButtonContents, {\n        isHovered: isHovered\n      }, React.createElement(IconForType, {\n        type: type,\n        isHovered: isHovered,\n        isOpen: isOpen\n      }), title ? React.createElement(Title, {\n        isHovered: isHovered\n      }, title) : null, secondaryText ? React.createElement(Text, {\n        isHovered: isHovered\n      }, secondaryText) : null))));\n    }\n  }]);\n\n  return InlineMessage;\n}(Component);\n\n_defineProperty(InlineMessage, \"defaultProps\", {\n  children: null,\n  placement: 'bottom-start',\n  secondaryText: '',\n  title: '',\n  type: 'connectivity'\n});\n\nexport { InlineMessage as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func\n};\n\nvar AnalyticsContext =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  function AnalyticsContext() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContext)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var getAtlaskitAnalyticsContext = _this.context.getAtlaskitAnalyticsContext;\n      var ancestorData = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      return _toConsumableArray(ancestorData).concat([data]);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      return Children.only(this.props.children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport { AnalyticsContext as default };","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar AnalyticsEvent =\n/*#__PURE__*/\nfunction () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"payload\", void 0);\n\n    _defineProperty(this, \"clone\", function () {\n      // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      } else if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread({}, this.payload, updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport AnalyticsEvent from './AnalyticsEvent';\nvar _console = console,\n    warn = _console.warn;\n\nvar UIAnalyticsEvent =\n/*#__PURE__*/\nfunction (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(UIAnalyticsEvent).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"context\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handlers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasFired\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clone\", function () {\n      if (_this.hasFired) {\n        warn(\"Cannot clone an event after it's been fired.\");\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers); // We stringify and parse here to get a hacky \"deep clone\" of the object.\n      // This has some limitations in that it wont support functions, regexs, Maps, Sets, etc,\n      // but none of those need to be represented in our payload, so we consider this fine\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        warn('Cannot fire an event twice.');\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        handler(_assertThisInitialized(_assertThisInitialized(_this)), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        warn(\"Cannot update an event after it's been fired.\");\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport UIAnalyticsEvent from './UIAnalyticsEvent';\n\n// This component is used to grab the analytics functions off context.\n// It uses legacy context, but provides an API similar to 16.3 context.\n// This makes it easier to use with the forward ref API.\nvar AnalyticsContextConsumer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(AnalyticsContextConsumer, _Component);\n\n  function AnalyticsContextConsumer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, AnalyticsContextConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnalyticsContextConsumer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createAnalyticsEvent\", function (payload) {\n      var _this$context = _this.context,\n          getAtlaskitAnalyticsEventHandlers = _this$context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsContext = _this$context.getAtlaskitAnalyticsContext;\n      var context = typeof getAtlaskitAnalyticsContext === 'function' && getAtlaskitAnalyticsContext() || [];\n      var handlers = typeof getAtlaskitAnalyticsEventHandlers === 'function' && getAtlaskitAnalyticsEventHandlers() || [];\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(AnalyticsContextConsumer, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children(this.createAnalyticsEvent);\n    }\n  }]);\n\n  return AnalyticsContextConsumer;\n}(Component); // patch the callback so it provides analytics information.\n\n\n_defineProperty(AnalyticsContextConsumer, \"contextTypes\", {\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func,\n  getAtlaskitAnalyticsContext: PropTypes.func\n});\n\nvar modifyCallbackProp = function modifyCallbackProp(propName, eventMapEntry, props, createAnalyticsEvent) {\n  return function () {\n    var event = typeof eventMapEntry === 'function' ? eventMapEntry(createAnalyticsEvent, props) : createAnalyticsEvent(eventMapEntry);\n    var providedCallback = props[propName];\n\n    if (providedCallback) {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      providedCallback.apply(void 0, args.concat([event]));\n    }\n  };\n};\n\n// helper that provides an easy way to map an object's values\n// ({ string: A }, (string, A) => B) => { string: B }\nvar vmap = function vmap(obj, fn) {\n  return Object.keys(obj).reduce(function (curr, k) {\n    return _objectSpread({}, curr, _defineProperty({}, k, fn(k, obj[k])));\n  }, {});\n};\n/* This must use $Supertype to work with multiple HOCs - https://github.com/facebook/flow/issues/6057#issuecomment-414157781\n * We also cannot alias this as a generic of withAnalyticsEvents itself as\n * that causes issues with multiple HOCs - https://github.com/facebook/flow/issues/6587\n */\n\n\nexport default function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsEvents = React.forwardRef(function (props, ref) {\n      return React.createElement(AnalyticsContextConsumer, null, function (createAnalyticsEvent) {\n        var modifiedProps = vmap(createEventMap, function (propName, entry) {\n          return modifyCallbackProp(propName, entry, props, createAnalyticsEvent);\n        });\n        return React.createElement(WrappedComponent, _extends({}, props, modifiedProps, {\n          createAnalyticsEvent: createAnalyticsEvent,\n          ref: ref\n        }));\n      });\n    });\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport styled, { css } from 'styled-components';\nimport { colors, themed } from '@atlaskit/theme';\nexport var HiddenCheckbox = styled.input.withConfig({\n  displayName: \"Checkbox__HiddenCheckbox\",\n  componentId: \"sc-1asqokg-0\"\n})([\"\\n  left: 50%;\\n  margin: 0;\\n  opacity: 0;\\n  padding: 0;\\n  position: absolute;\\n  transform: translate(-50%, -50%);\\n  top: 50%;\\n\"]);\nvar disabledColor = themed({\n  light: colors.N80,\n  dark: colors.N80\n});\nexport var Label = styled.label.withConfig({\n  displayName: \"Checkbox__Label\",\n  componentId: \"sc-1asqokg-1\"\n})([\"\\n  align-items: flex-start;\\n  display: flex;\\n  color: \", \";\\n  \", \";\\n\"], function (props // $FlowFixMe - theme is not found in props\n) {\n  return props.isDisabled ? disabledColor(props) : colors.text(props);\n}, function (_ref) {\n  var isDisabled = _ref.isDisabled;\n  return isDisabled ? css([\"\\n          cursor: not-allowed;\\n        \"]) : '';\n});\nvar borderColor = themed({\n  light: colors.N40,\n  dark: colors.DN80\n});\nvar focusBorder = css([\"\\n  stroke: \", \";\\n  stroke-width: 2px;\\n\"], themed({\n  light: colors.B100,\n  dark: colors.B75\n}));\nvar invalidBorder = css([\"\\n  stroke: \", \";\\n  stroke-width: 2px;\\n\"], themed({\n  light: colors.R300,\n  dark: colors.R300\n}));\nvar activeBorder = css([\"\\n  stroke: currentColor;\\n  stroke-width: 2px;\\n\"]);\nvar checkedBorder = css([\"\\n  stroke: currentColor;\\n  stroke-width: 2px;\\n\"]);\nvar border = css([\"\\n  stroke: \", \";\\n  stroke-width: 2px;\\n\"], function (_ref2) {\n  var isHovered = _ref2.isHovered,\n      rest = _objectWithoutProperties(_ref2, [\"isHovered\"]);\n\n  return isHovered ? themed({\n    light: colors.N40,\n    dark: colors.DN200\n  })(rest) : borderColor(rest);\n});\n\nvar getBorderColor = function getBorderColor(props) {\n  if (props.isDisabled) return '';\n  if (props.isFocused) return focusBorder;\n  if (props.isActive) return activeBorder;\n  if (props.isInvalid) return invalidBorder;\n  if (props.isChecked) return checkedBorder;\n  return border;\n};\n\nvar getTickColor = function getTickColor(props) {\n  var isChecked = props.isChecked,\n      isDisabled = props.isDisabled,\n      isActive = props.isActive,\n      rest = _objectWithoutProperties(props, [\"isChecked\", \"isDisabled\", \"isActive\"]);\n\n  var color = themed({\n    light: colors.N10,\n    dark: colors.DN10\n  });\n\n  if (isDisabled && isChecked) {\n    color = themed({\n      light: colors.N70,\n      dark: colors.DN90\n    });\n  } else if (isActive && isChecked && !isDisabled) {\n    color = themed({\n      light: colors.B400,\n      dark: colors.DN10\n    });\n  } else if (!isChecked) {\n    color = themed({\n      light: 'transparent',\n      dark: 'transparent'\n    });\n  }\n\n  return color(rest);\n};\n\nvar getBoxColor = function getBoxColor(props) {\n  var isChecked = props.isChecked,\n      isDisabled = props.isDisabled,\n      isActive = props.isActive,\n      isHovered = props.isHovered,\n      rest = _objectWithoutProperties(props, [\"isChecked\", \"isDisabled\", \"isActive\", \"isHovered\"]); // set the default\n\n\n  var color = themed({\n    light: colors.N10,\n    dark: colors.DN10\n  });\n\n  if (isDisabled) {\n    color = themed({\n      light: colors.N20,\n      dark: colors.DN10\n    });\n  } else if (isActive) {\n    color = themed({\n      light: colors.B50,\n      dark: colors.B200\n    });\n  } else if (isHovered && isChecked) {\n    color = themed({\n      light: colors.B300,\n      dark: colors.B75\n    });\n  } else if (isHovered) {\n    color = themed({\n      light: colors.N30,\n      dark: colors.DN30\n    });\n  } else if (isChecked) {\n    color = themed({\n      light: colors.B400,\n      dark: colors.B400\n    });\n  }\n\n  return color(rest);\n};\n\nexport var LabelText = styled.span.withConfig({\n  displayName: \"Checkbox__LabelText\",\n  componentId: \"sc-1asqokg-2\"\n})([\"\\n  padding: 2px 4px;\\n\"]);\nexport var CheckboxWrapper = styled.span.withConfig({\n  displayName: \"Checkbox__CheckboxWrapper\",\n  componentId: \"sc-1asqokg-3\"\n})([\"\\n  display: flex;\\n  flex-shrink: 0;\\n  position: relative;\\n\"]);\nexport var IconWrapper = styled.span.withConfig({\n  displayName: \"Checkbox__IconWrapper\",\n  componentId: \"sc-1asqokg-4\"\n})([\"\\n  line-height: 0;\\n  flex-shrink: 0;\\n  color: \", \";\\n  fill: \", \";\\n  transition: all 0.2s ease-in-out;\\n\\n  /* This is adding a property to the inner svg, to add a border to the checkbox */\\n  & rect:first-child {\\n    transition: stroke 0.2s ease-in-out;\\n    \", \";\\n  }\\n\"], getBoxColor, getTickColor, getBorderColor);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport Icon from '@atlaskit/icon/glyph/checkbox';\nimport CheckboxIndeterminateIcon from '@atlaskit/icon/glyph/checkbox-indeterminate';\nimport { IconWrapper } from './styled/Checkbox';\n\nvar CheckboxIcon =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(CheckboxIcon, _Component);\n\n  function CheckboxIcon() {\n    _classCallCheck(this, CheckboxIcon);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(CheckboxIcon).apply(this, arguments));\n  }\n\n  _createClass(CheckboxIcon, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          isChecked = _this$props.isChecked,\n          isDisabled = _this$props.isDisabled,\n          isInvalid = _this$props.isInvalid,\n          isActive = _this$props.isActive,\n          isFocused = _this$props.isFocused,\n          isHovered = _this$props.isHovered,\n          isIndeterminate = _this$props.isIndeterminate,\n          primaryColor = _this$props.primaryColor,\n          secondaryColor = _this$props.secondaryColor;\n      return React.createElement(IconWrapper, {\n        isChecked: isChecked,\n        isDisabled: isDisabled,\n        isFocused: isFocused,\n        isActive: isActive,\n        isHovered: isHovered,\n        isInvalid: isInvalid\n      }, isIndeterminate ? React.createElement(CheckboxIndeterminateIcon, {\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        isHovered: isHovered,\n        isActive: isActive,\n        label: \"\"\n      }) : React.createElement(Icon, {\n        primaryColor: primaryColor,\n        secondaryColor: secondaryColor,\n        isHovered: isHovered,\n        isActive: isActive,\n        label: \"\"\n      }));\n    }\n  }]);\n\n  return CheckboxIcon;\n}(Component);\n\n_defineProperty(CheckboxIcon, \"defaultProps\", {\n  primaryColor: 'inherit',\n  secondaryColor: 'inherit',\n  isIndeterminate: false\n});\n\nexport { CheckboxIcon as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport { ThemeProvider } from 'styled-components';\nimport CheckboxIcon from './CheckboxIcon';\nimport { name as packageName, version as packageVersion } from '../package.json';\nimport { HiddenCheckbox, Label, LabelText, CheckboxWrapper } from './styled/Checkbox';\nvar emptyTheme = {};\n\nvar Checkbox =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Checkbox, _Component);\n\n  function Checkbox() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, Checkbox);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Checkbox)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      isActive: false,\n      isFocused: false,\n      isHovered: false,\n      isMouseDown: false,\n      isChecked: _this.props.isChecked !== undefined ? _this.props.isChecked : _this.props.defaultChecked\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"checkbox\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"actionKeys\", [' ']);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getProp\", function (key) {\n      return key in _this.props ? _this.props[key] : _this.state[key];\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onChange\", function (event) {\n      if (_this.props.isDisabled) return null;\n      event.persist();\n\n      if (event.target.checked !== undefined) {\n        _this.setState({\n          isChecked: event.target.checked\n        });\n      }\n\n      if (_this.props.onChange) {\n        _this.props.onChange(event);\n      }\n\n      return true;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"blur\", function () {\n      if (_this.checkbox && _this.checkbox.blur) _this.checkbox.blur();\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focus\", function () {\n      if (_this.checkbox && _this.checkbox.focus) _this.checkbox.focus();\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onBlur\", function () {\n      return _this.setState({\n        // onBlur is called after onMouseDown if the checkbox was focused, however\n        // in this case on blur is called immediately after, and we need to check\n        // whether the mouse is down.\n        isActive: _this.state.isMouseDown && _this.state.isActive,\n        isFocused: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onFocus\", function () {\n      return _this.setState({\n        isFocused: true\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMouseLeave\", function () {\n      return _this.setState({\n        isActive: false,\n        isHovered: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMouseEnter\", function () {\n      return _this.setState({\n        isHovered: true\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMouseUp\", function () {\n      return _this.setState({\n        isActive: false,\n        isMouseDown: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMouseDown\", function () {\n      return _this.setState({\n        isActive: true,\n        isMouseDown: true\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onKeyDown\", function (event) {\n      if (_this.actionKeys.includes(event.key)) {\n        _this.setState({\n          isActive: true\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onKeyUp\", function (event) {\n      if (_this.actionKeys.includes(event.key)) {\n        _this.setState({\n          isActive: false\n        });\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(Checkbox, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var isIndeterminate = this.props.isIndeterminate; // there is no HTML attribute for indeterminate, and thus no prop equivalent.\n      // it must be set via the ref.\n\n      if (this.checkbox) {\n        this.checkbox.indeterminate = !!isIndeterminate;\n\n        if (this.props.inputRef) {\n          this.props.inputRef(this.checkbox);\n        }\n      }\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var isIndeterminate = this.props.isIndeterminate;\n\n      if (prevProps.isIndeterminate !== isIndeterminate && this.checkbox) {\n        this.checkbox.indeterminate = !!isIndeterminate;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          isDisabled = _this$props.isDisabled,\n          isInvalid = _this$props.isInvalid,\n          isIndeterminate = _this$props.isIndeterminate,\n          label = _this$props.label,\n          name = _this$props.name,\n          value = _this$props.value,\n          onChange = _this$props.onChange,\n          props = _objectWithoutProperties(_this$props, [\"isDisabled\", \"isInvalid\", \"isIndeterminate\", \"label\", \"name\", \"value\", \"onChange\"]);\n\n      var isChecked = this.getProp('isChecked');\n      var _this$state = this.state,\n          isFocused = _this$state.isFocused,\n          isActive = _this$state.isActive,\n          isHovered = _this$state.isHovered;\n      return React.createElement(ThemeProvider, {\n        theme: emptyTheme\n      }, React.createElement(Label, _extends({}, props, {\n        isDisabled: isDisabled,\n        onMouseDown: this.onMouseDown,\n        onMouseEnter: this.onMouseEnter,\n        onMouseLeave: this.onMouseLeave,\n        onMouseUp: this.onMouseUp\n      }), React.createElement(CheckboxWrapper, null, React.createElement(HiddenCheckbox, {\n        disabled: isDisabled,\n        checked: isChecked,\n        onChange: this.onChange,\n        onBlur: this.onBlur,\n        onFocus: this.onFocus,\n        onKeyUp: this.onKeyUp,\n        onKeyDown: this.onKeyDown,\n        type: \"checkbox\",\n        value: value,\n        name: name,\n        innerRef: function innerRef(r) {\n          return _this2.checkbox = r;\n        } // eslint-disable-line\n\n      }), React.createElement(CheckboxIcon, {\n        isChecked: isChecked,\n        isDisabled: isDisabled,\n        isFocused: isFocused,\n        isActive: isActive,\n        isHovered: isHovered,\n        isInvalid: isInvalid,\n        isIndeterminate: isIndeterminate,\n        primaryColor: \"inherit\",\n        secondaryColor: \"inherit\",\n        label: \"\"\n      })), React.createElement(LabelText, null, label)));\n    }\n  }]);\n\n  return Checkbox;\n}(Component);\n\n_defineProperty(Checkbox, \"defaultProps\", {\n  isDisabled: false,\n  isInvalid: false,\n  defaultChecked: false,\n  isIndeterminate: false\n});\n\nexport { Checkbox as CheckboxWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'checkbox',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onChange: createAndFireEventOnAtlaskit({\n    action: 'changed',\n    actionSubject: 'checkbox',\n    attributes: {\n      componentName: 'checkbox',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Checkbox));","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      consumerEvent.clone().fire(channel);\n      return consumerEvent;\n    };\n  };\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport AnalyticsContext from './AnalyticsContext';\nexport default function withAnalyticsContext() {\n  var defaultData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    // $FlowFixMe - flow 0.67 doesn't know about forwardRef\n    var WithAnalyticsContext = React.forwardRef(function (props, ref) {\n      var _props$analyticsConte = props.analyticsContext,\n          analyticsContext = _props$analyticsConte === void 0 ? {} : _props$analyticsConte,\n          others = _objectWithoutProperties(props, [\"analyticsContext\"]);\n\n      var data = _objectSpread({}, defaultData, analyticsContext);\n\n      return React.createElement(AnalyticsContext, {\n        data: data\n      }, React.createElement(WrappedComponent, _extends({}, others, {\n        ref: ref\n      })));\n    });\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat(WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n}","// from https://facebook.github.io/react/docs/higher-order-components.html\nvar getDisplayName = function getDisplayName(WrappedComponent) {\n  return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n};\n\nexport default getDisplayName;","// There are cases where the context is not available, such as when a dropdown item is used\n// inside @atlaskit/navigation. For this reason we have this helper function which safely calls\n// the context functions if they are available.\nexport default (function (instance, contextKey) {\n  return function (fnToCall) {\n    var _instance$context$con;\n\n    if (!instance.context[contextKey]) {\n      return null;\n    }\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return (_instance$context$con = instance.context[contextKey])[fnToCall].apply(_instance$context$con, args);\n  };\n});","var prefix = function prefix(key) {\n  return \"@atlaskit-private-do-not-use/dropdown-menu:\".concat(key);\n};\n\nexport var focusManagerContext = prefix('focus-manager');\nexport var selectionCacheContext = prefix('selection-cache');\nexport var selectionManagerContext = prefix('selection-manager');\nexport var clickManagerContext = prefix('click-manager');","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n// We currently need to keep the dropdown open if an item with `href` is clicked, to avoid the\n// analytics package to track the href value without the event target disappearing. Without this\n// requirement, we could just use a native click event all the way up to DropdownMenuStateless,\n// and could get rid of this HOC and DropdownItemClickManager.\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport getDisplayName from '../../util/getDisplayName';\nimport safeContextCall from '../../util/safeContextCall';\nimport { clickManagerContext } from '../../util/contextNamespace';\n\n// HOC that typically wraps @atlaskit/item\nvar withItemClick = function withItemClick(WrappedItem) {\n  var _class, _temp;\n\n  return _temp = _class =\n  /*#__PURE__*/\n  function (_Component) {\n    _inherits(WithItemClick, _Component);\n\n    function WithItemClick() {\n      var _getPrototypeOf2;\n\n      var _this;\n\n      _classCallCheck(this, WithItemClick);\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(WithItemClick)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"callContextFn\", safeContextCall(_assertThisInitialized(_assertThisInitialized(_this)), clickManagerContext));\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"shouldCloseAfterClick\", function () {\n        return !_this.props.isDisabled && !_this.props.href;\n      });\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleClick\", function (event) {\n        _this.props.onClick(event);\n\n        if (_this.shouldCloseAfterClick()) {\n          _this.callContextFn('itemClicked');\n        }\n      });\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleKeyDown\", function (event) {\n        if (_this.props.onKeyDown) {\n          _this.props.onKeyDown(event);\n        } else if (event.key === 'Space' || event.key === 'Enter') {\n          _this.handleClick(event);\n        }\n      });\n\n      return _this;\n    }\n\n    _createClass(WithItemClick, [{\n      key: \"render\",\n      value: function render() {\n        var _this$props = this.props,\n            children = _this$props.children,\n            otherProps = _objectWithoutProperties(_this$props, [\"children\"]);\n\n        return React.createElement(WrappedItem, _extends({}, otherProps, {\n          onClick: this.handleClick,\n          onKeyDown: this.handleKeyDown\n        }), children);\n      }\n    }]);\n\n    return WithItemClick;\n  }(Component), _defineProperty(_class, \"displayName\", \"WithItemClick(\".concat(getDisplayName(WrappedItem), \")\")), _defineProperty(_class, \"defaultProps\", {\n    onClick: function onClick() {}\n  }), _defineProperty(_class, \"contextTypes\", _defineProperty({}, clickManagerContext, PropTypes.object)), _temp;\n};\n\nexport default withItemClick;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport uuid from 'uuid';\nimport getDisplayName from '../../util/getDisplayName';\nimport safeContextCall from '../../util/safeContextCall';\nimport { focusManagerContext } from '../../util/contextNamespace';\n\nvar withItemFocus = function withItemFocus(WrappedComponent) {\n  var _class, _temp;\n\n  return _temp = _class =\n  /*#__PURE__*/\n  function (_Component) {\n    _inherits(WithItemFocus, _Component);\n\n    function WithItemFocus() {\n      var _getPrototypeOf2;\n\n      var _this;\n\n      _classCallCheck(this, WithItemFocus);\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(WithItemFocus)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"contextId\", void 0);\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"callContextFn\", safeContextCall(_assertThisInitialized(_assertThisInitialized(_this)), focusManagerContext));\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"isFocusable\", function () {\n        return !_this.props.isDisabled && !_this.props.isHidden;\n      });\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleFocus\", function () {\n        if (_this.isFocusable()) {\n          _this.callContextFn('itemFocused', _this.contextId);\n        }\n      });\n\n      return _this;\n    }\n\n    _createClass(WithItemFocus, [{\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        if (!this.isFocusable()) {\n          return;\n        }\n\n        this.contextId = uuid();\n        this.callContextFn('registerItem', this.contextId, ReactDOM.findDOMNode(this) // eslint-disable-line react/no-find-dom-node\n        );\n      }\n    }, {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate() {\n        if (!this.isFocusable()) {\n          return;\n        }\n\n        this.callContextFn('updateItem', this.contextId, ReactDOM.findDOMNode(this) // eslint-disable-line react/no-find-dom-node\n        );\n      }\n    }, {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        if (this.isFocusable()) {\n          this.callContextFn('deregisterItem', this.contextId);\n        }\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        var _this$props = this.props,\n            children = _this$props.children,\n            otherProps = _objectWithoutProperties(_this$props, [\"children\"]);\n\n        return React.createElement(WrappedComponent, _extends({\n          onFocus: this.handleFocus,\n          role: \"menuitem\"\n        }, otherProps), children);\n      }\n    }]);\n\n    return WithItemFocus;\n  }(Component), _defineProperty(_class, \"displayName\", \"WithItemFocus(\".concat(getDisplayName(WrappedComponent), \")\")), _defineProperty(_class, \"contextTypes\", _defineProperty({}, focusManagerContext, PropTypes.object)), _temp;\n};\n\nexport default withItemFocus;","import styled, { css } from 'styled-components';\nimport { colors } from '@atlaskit/theme';\nimport { getThemeStyle, themeNamespace } from '../util/theme';\n\nvar getItemState = function getItemState(stateName) {\n  return function (_ref) {\n    var theme = _ref.theme;\n    var stateStyles = getThemeStyle(theme[themeNamespace], stateName);\n    return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n    fill: \", \";\\n    text-decoration: none;\\n\\n    &:focus {\\n      color: \", \";\\n    }\\n  \"], stateStyles.background, stateStyles.text, stateStyles.background, stateStyles.text);\n  };\n};\n\nvar getPadding = function getPadding(_ref2) {\n  var isCompact = _ref2.isCompact,\n      theme = _ref2.theme,\n      description = _ref2.description;\n  var paddingKey = isCompact ? 'compact' : 'default';\n\n  var _getThemeStyle = getThemeStyle(theme[themeNamespace], paddingKey, 'padding'),\n      _getThemeStyle$bottom = _getThemeStyle.bottom,\n      bottom = _getThemeStyle$bottom === void 0 ? 0 : _getThemeStyle$bottom,\n      _getThemeStyle$left = _getThemeStyle.left,\n      left = _getThemeStyle$left === void 0 ? 0 : _getThemeStyle$left,\n      _getThemeStyle$right = _getThemeStyle.right,\n      right = _getThemeStyle$right === void 0 ? 0 : _getThemeStyle$right,\n      _getThemeStyle$top = _getThemeStyle.top,\n      top = _getThemeStyle$top === void 0 ? 0 : _getThemeStyle$top;\n\n  var adjustedTop = typeof top === 'function' ? top() : top;\n  var adjustedBottom = typeof bottom === 'function' ? bottom() : bottom; // Subtract the 1px padding-bottom added to the content and description elements\n  // to maintain original height\n\n  adjustedTop = Math.max(description ? adjustedTop - 1 : adjustedTop, 0);\n  adjustedBottom = Math.max(adjustedBottom - 1, 0);\n  return css([\"\\n    padding: \", \"px \", \"px \", \"px \", \"px;\\n  \"], adjustedTop, right, adjustedBottom, left);\n};\n\nvar getHeightStyles = function getHeightStyles(_ref3) {\n  var isCompact = _ref3.isCompact,\n      theme = _ref3.theme;\n  var heightKey = isCompact ? 'compact' : 'default';\n  var height = getThemeStyle(theme[themeNamespace], heightKey, 'height');\n  return height ? css([\"\\n        height: \", \"px;\\n      \"], height) : '';\n}; // This function is responsible for drawing any focus styles for the element\n\n\nvar getInteractiveStyles = function getInteractiveStyles(_ref4) {\n  var theme = _ref4.theme,\n      isDisabled = _ref4.isDisabled,\n      isDragging = _ref4.isDragging,\n      isSelected = _ref4.isSelected;\n\n  if (isDragging) {\n    return css([\"\\n      \", \" box-shadow: 0 4px 8px -2px \", \",\\n        0 0 1px \", \";\\n    \"], getItemState('dragging'), colors.N60A, colors.N60A);\n  }\n\n  var standardFocus = css([\"\\n    &:focus {\\n      box-shadow: 0 0 0 2px\\n        \", \" inset;\\n      text-decoration: none;\\n    }\\n  \"], getThemeStyle(theme[themeNamespace], 'outline', 'focus'));\n\n  if (isDisabled) {\n    return css([\"\\n      cursor: not-allowed;\\n      \", \" \", \";\\n    \"], getItemState('disabled'), standardFocus);\n  }\n\n  if (isSelected) {\n    return css([\"\\n      \", \" &:hover {\\n        \", \";\\n      }\\n\\n      &:active {\\n        \", \";\\n      }\\n\\n      \", \";\\n    \"], getItemState('selected'), getItemState('hover'), getItemState('active'), standardFocus);\n  }\n\n  return css([\"\\n    &:hover {\\n      \", \";\\n    }\\n\\n    &:active {\\n      \", \";\\n    }\\n\\n    \", \";\\n  \"], getItemState('hover'), getItemState('active'), standardFocus);\n}; // This is the main item style. It is defined as a basic style variable so it can\n// later be applied to different component types (span / a / custom link component)\n\n\nexport var ItemBase = function ItemBase(_ref5) {\n  var theme = _ref5.theme;\n  return css([\"\\n  && {\\n    align-items: center;\\n    border-radius: \", \"px;\\n    box-sizing: border-box;\\n    cursor: pointer;\\n    display: \", \";\\n    flex: none;\\n    \", \" \", \" \", \" \", \" &:focus {\\n      /* focus shadow drawn by getInteractiveStyles */\\n\\n      outline: none;\\n      /* relative position prevents bgcolor of a hovered element from\\n      obfuscating focus ring of a focused sibling element */\\n      position: relative;\\n    }\\n  }\\n\"], getThemeStyle(theme[themeNamespace], 'borderRadius'), function (_ref6) {\n    var isHidden = _ref6.isHidden;\n    return isHidden ? 'none' : 'flex';\n  }, getItemState('default'), getPadding, getInteractiveStyles, getHeightStyles);\n}; // Given some optional link-related props, returns the relevant styled\n// component. For links, it styles the linkComponent if provided, otherwise\n// falling back to a styled <a> tag. If no href is present, a styled <span>\n// is returned. When we upgrade to styled-components@2.x we will be able to\n// simplify this by taking advantage of the withComponent() functionality.\n\nvar styledRootElement = function styledRootElement(_ref7) {\n  var href = _ref7.href,\n      linkComponent = _ref7.linkComponent;\n\n  if (linkComponent) {\n    return styled(linkComponent).withConfig({\n      displayName: \"Item\",\n      componentId: \"z6qfkt-0\"\n    })([\"\\n      \", \";\\n    \"], ItemBase);\n  }\n\n  if (href) {\n    return styled.a.withConfig({\n      displayName: \"Item\",\n      componentId: \"z6qfkt-1\"\n    })([\"\\n      \", \";\\n    \"], ItemBase);\n  }\n\n  return styled.span.withConfig({\n    displayName: \"Item\",\n    componentId: \"z6qfkt-2\"\n  })([\"\\n    \", \";\\n  \"], ItemBase);\n};\n\nexport default styledRootElement;","import styled, { css } from 'styled-components';\nimport { fontSize, fontSizeSmall } from '@atlaskit/theme';\nimport { getThemeStyle, themeNamespace, compactSmallFontSize, compactLineHeight } from '../util/theme'; // Checkbox/Radio wrapper -- sits left of the children\n\nexport var InputWrapper = styled.span.withConfig({\n  displayName: \"ItemParts__InputWrapper\",\n  componentId: \"sc-14xek3m-0\"\n})([\"\\n  display: flex;\\n  margin: 0 2px;\\n\"]); // Elements injected before/after the children\n\nvar BeforeAfterBase = styled.span.withConfig({\n  displayName: \"ItemParts__BeforeAfterBase\",\n  componentId: \"sc-14xek3m-1\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n  flex-shrink: 0;\\n  /* Fix windows line-height issue */\\n  padding-bottom: 1px;\\n\"]);\n\nvar getBeforeSpacing = function getBeforeSpacing(_ref) {\n  var isCompact = _ref.isCompact,\n      theme = _ref.theme;\n  var spaceKey = isCompact ? 'compact' : 'default';\n  var space = getThemeStyle(theme[themeNamespace], spaceKey, 'beforeItemSpacing');\n  return css([\"\\n    margin-right: \", \"px;\\n  \"], space);\n};\n\nexport var Before = styled(BeforeAfterBase).withConfig({\n  displayName: \"ItemParts__Before\",\n  componentId: \"sc-14xek3m-2\"\n})([\"\\n  \", \";\\n\"], getBeforeSpacing);\n\nvar getAfterSpacing = function getAfterSpacing(_ref2) {\n  var isCompact = _ref2.isCompact,\n      theme = _ref2.theme;\n  var spaceKey = isCompact ? 'compact' : 'default';\n  var space = getThemeStyle(theme[themeNamespace], spaceKey, 'afterItemSpacing');\n  return css([\"\\n    margin-left: \", \"px;\\n  \"], space);\n};\n\nexport var After = styled(BeforeAfterBase).withConfig({\n  displayName: \"ItemParts__After\",\n  componentId: \"sc-14xek3m-3\"\n})([\"\\n  \", \";\\n\"], getAfterSpacing); // Alignment and layout for the children\n\nexport var ContentWrapper = styled.span.withConfig({\n  displayName: \"ItemParts__ContentWrapper\",\n  componentId: \"sc-14xek3m-4\"\n})([\"\\n  display: flex;\\n  flex-direction: column;\\n  flex-grow: 1;\\n  margin: 0;\\n  overflow: hidden;\\n\\n  &:first-child {\\n    margin: 0;\\n  }\\n\"]);\nexport var Content = styled.span.withConfig({\n  displayName: \"ItemParts__Content\",\n  componentId: \"sc-14xek3m-5\"\n})([\"\\n  display: block;\\n  flex: 1 1 auto;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: \", \";\\n  line-height: \", \";\\n  /* Fix windows line-height issue */\\n  padding-bottom: 1px;\\n\"], function (_ref3) {\n  var allowMultiline = _ref3.allowMultiline;\n  return allowMultiline ? 'normal' : 'nowrap';\n}, 16 / fontSize());\n\nvar getColorStyle = function getColorStyle(_ref4) {\n  var isDisabled = _ref4.isDisabled,\n      theme = _ref4.theme;\n\n  if (isDisabled) {\n    return css([\"\\n      color: \", \";\\n    \"], getThemeStyle(theme[themeNamespace], 'secondaryText', 'disabled'));\n  }\n\n  return css([\"\\n    color: \", \";\\n\\n    /* This detects hover on the grandparent. Saves us having to maintain isHovered\\n       state in the grandparent. */\\n    *:hover > * > & {\\n      color: \", \";\\n    }\\n\\n    *:active > * > & {\\n      color: \", \";\\n    }\\n  \"], getThemeStyle(theme[themeNamespace], 'secondaryText', 'default'), function () {\n    return getThemeStyle(theme[themeNamespace], 'secondaryText', 'hover');\n  }, function () {\n    return getThemeStyle(theme[themeNamespace], 'secondaryText', 'active');\n  });\n};\n\nvar getDescriptionFontStyles = function getDescriptionFontStyles(_ref5) {\n  var isCompact = _ref5.isCompact;\n  var descriptionFontSize = isCompact ? compactSmallFontSize : fontSizeSmall();\n  var lineHeight = isCompact ? compactLineHeight : 14 / descriptionFontSize;\n  return css([\"\\n    font-size: \", \"px;\\n    line-height: \", \";\\n    /* Fix windows line-height issue */\\n    padding-bottom: 1px;\\n  \"], descriptionFontSize, lineHeight);\n}; // Description is a block element below the children, like a subtitle\n\n\nexport var Description = styled.span.withConfig({\n  displayName: \"ItemParts__Description\",\n  componentId: \"sc-14xek3m-6\"\n})([\"\\n  flex: 1 1 auto;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n  \", \" \", \";\\n\"], getColorStyle, getDescriptionFontStyles);","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport styledRootElement from '../styled/Item';\nimport { Before, After, Content, ContentWrapper, Description } from '../styled/ItemParts';\n\nvar Item =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Item, _Component);\n\n  // eslint-disable-next-line react/sort-comp\n  function Item(props) {\n    var _this;\n\n    _classCallCheck(this, Item);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Item).call(this, props)); // The type of element rendered at the root of render() can vary based on the `href`\n    // and `linkComponent` props provided. We generate this component here to avoid re-\n    // generating the component inside render(). This is for performance reasons, and also\n    // allows us to avoid generating a new `ref` for the root element each render().\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"rootComponent\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"ref\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"setRef\", function (ref) {\n      _this.ref = ref;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"href\", function () {\n      return _this.props.isDisabled ? null : _this.props.href;\n    });\n\n    _this.rootComponent = styledRootElement({\n      href: _this.href(),\n      linkComponent: props.linkComponent\n    });\n    return _this;\n  }\n\n  _createClass(Item, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      if (this.ref && this.props.autoFocus) {\n        this.ref.focus();\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          _onClick = _this$props.onClick,\n          _onKeyDown = _this$props.onKeyDown,\n          isCompact = _this$props.isCompact,\n          isDisabled = _this$props.isDisabled,\n          isDragging = _this$props.isDragging,\n          isHidden = _this$props.isHidden,\n          isSelected = _this$props.isSelected,\n          onMouseEnter = _this$props.onMouseEnter,\n          onMouseLeave = _this$props.onMouseLeave,\n          role = _this$props.role,\n          dnd = _this$props.dnd,\n          otherProps = _objectWithoutProperties(_this$props, [\"onClick\", \"onKeyDown\", \"isCompact\", \"isDisabled\", \"isDragging\", \"isHidden\", \"isSelected\", \"onMouseEnter\", \"onMouseLeave\", \"role\", \"dnd\"]);\n\n      var Root = this.rootComponent;\n      var dragHandleProps = dnd && dnd.dragHandleProps || null;\n      var patchedEventHandlers = {\n        onClick: function onClick(event) {\n          var original = function original() {\n            if (!isDisabled && _onClick) {\n              _onClick(event);\n            }\n          };\n\n          if (!dragHandleProps || !dragHandleProps.onClick) {\n            original();\n            return;\n          } // Drag and drop has its own disabled mechansim\n          // So not checking for isDisabled\n\n\n          dragHandleProps.onClick(event); // if default is prevent - do not fire the onClick prop\n\n          if (event.defaultPrevented) {\n            return;\n          }\n\n          original();\n        },\n        onMouseDown: function onMouseDown(event) {\n          if (dragHandleProps && dragHandleProps.onMouseDown) {\n            dragHandleProps.onMouseDown(event);\n          } // We want to prevent the item from getting focus when clicked\n\n\n          event.preventDefault();\n        },\n        onKeyDown: function onKeyDown(event) {\n          var original = function original() {\n            if (!isDisabled && _onKeyDown) {\n              _onKeyDown(event);\n            }\n          };\n\n          if (!dragHandleProps || !dragHandleProps.onKeyDown) {\n            original();\n            return;\n          }\n\n          dragHandleProps.onKeyDown(event); // if default is prevent - do not fire other handlers\n\n          if (event.defaultPrevented) {\n            return;\n          } // not allowing keyboard events on the element while dragging\n\n\n          if (isDragging) {\n            return;\n          }\n\n          original();\n        }\n      };\n\n      var patchedInnerRef = function patchedInnerRef(ref) {\n        _this2.setRef(ref);\n\n        if (dnd && dnd.innerRef) {\n          dnd.innerRef(ref);\n        }\n      };\n\n      return React.createElement(Root, _extends({\n        \"aria-disabled\": isDisabled,\n        href: this.href(),\n        isCompact: isCompact,\n        isDisabled: isDisabled,\n        isDragging: isDragging,\n        isHidden: isHidden,\n        isSelected: isSelected,\n        onMouseEnter: onMouseEnter,\n        onMouseLeave: onMouseLeave,\n        role: role,\n        tabIndex: isDisabled || isHidden || this.props.href ? null : 0,\n        target: this.props.target,\n        title: this.props.title,\n        innerRef: patchedInnerRef\n      }, dnd && dnd.draggableProps, dragHandleProps, patchedEventHandlers, otherProps), !!this.props.elemBefore && React.createElement(Before, {\n        isCompact: isCompact\n      }, this.props.elemBefore), React.createElement(ContentWrapper, null, React.createElement(Content, {\n        allowMultiline: this.props.shouldAllowMultiline\n      }, this.props.children), !!this.props.description && React.createElement(Description, {\n        isCompact: this.props.isCompact,\n        isDisabled: this.props.isDisabled\n      }, this.props.description)), !!this.props.elemAfter && React.createElement(After, {\n        isCompact: isCompact\n      }, this.props.elemAfter));\n    }\n  }]);\n\n  return Item;\n}(Component);\n\n_defineProperty(Item, \"defaultProps\", {\n  autoFocus: false,\n  description: '',\n  isCompact: false,\n  isDisabled: false,\n  isHidden: false,\n  role: 'button',\n  shouldAllowMultiline: false\n});\n\nexport { Item as default };","import Item, { withItemFocus, withItemClick } from '@atlaskit/item';\nexport default withItemClick(withItemFocus(Item));","import styled, { css } from 'styled-components';\nimport { fontSizeSmall } from '@atlaskit/theme';\nimport { getThemeStyle, gridSize, themeNamespace } from '../util/theme';\n\nvar getPadding = function getPadding(_ref) {\n  var isCompact = _ref.isCompact,\n      theme = _ref.theme;\n  var paddingType = isCompact ? 'compact' : 'default';\n\n  var _getThemeStyle = getThemeStyle(theme[themeNamespace], paddingType, 'padding'),\n      _getThemeStyle$bottom = _getThemeStyle.bottom,\n      bottom = _getThemeStyle$bottom === void 0 ? 0 : _getThemeStyle$bottom,\n      _getThemeStyle$left = _getThemeStyle.left,\n      left = _getThemeStyle$left === void 0 ? 0 : _getThemeStyle$left,\n      _getThemeStyle$right = _getThemeStyle.right,\n      right = _getThemeStyle$right === void 0 ? 0 : _getThemeStyle$right,\n      _getThemeStyle$top = _getThemeStyle.top,\n      top = _getThemeStyle$top === void 0 ? 0 : _getThemeStyle$top;\n\n  return css([\"\\n    padding: \", \"px \", \"px \", \"px \", \"px;\\n  \"], top, right, bottom, left);\n}; // eslint-disable-next-line import/prefer-default-export\n\n\nvar GroupTitle = styled.div.withConfig({\n  displayName: \"ItemGroup__GroupTitle\",\n  componentId: \"ofbfv9-0\"\n})([\"\\n  align-items: center;\\n  color: \", \";\\n  display: flex;\\n  flex: 1 1 auto;\\n  \", \";\\n\"], function (_ref2) {\n  var theme = _ref2.theme;\n  return getThemeStyle(theme[themeNamespace], 'secondaryText', 'default');\n}, getPadding);\nGroupTitle.displayName = 'ItemGroupTitle';\nvar GroupTitleAfter = styled.div.withConfig({\n  displayName: \"ItemGroup__GroupTitleAfter\",\n  componentId: \"ofbfv9-1\"\n})([\"\\n  flex: 0 0 auto;\\n  margin-right: -\", \"px;\\n\"], gridSize / 2);\nGroupTitleAfter.displayName = 'ItemGroupTitleAfter';\nvar GroupTitleText = styled.div.withConfig({\n  displayName: \"ItemGroup__GroupTitleText\",\n  componentId: \"ofbfv9-2\"\n})([\"\\n  flex: 1 1 auto;\\n  font-size: \", \"px;\\n  line-height: 1;\\n  text-transform: uppercase;\\n  /* Required for children to truncate */\\n  min-width: 0;\\n\"], fontSizeSmall);\nGroupTitleText.displayName = 'ItemGroupTitleText';\nexport { GroupTitle, GroupTitleAfter, GroupTitleText };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React, { Component } from 'react';\nimport textContent from 'react-addons-text-content';\nimport { GroupTitle, GroupTitleText, GroupTitleAfter } from '../styled/ItemGroup';\n\nvar ItemGroup =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(ItemGroup, _Component);\n\n  function ItemGroup() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, ItemGroup);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ItemGroup)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"headingAfterElement\", void 0);\n\n    return _this;\n  }\n\n  _createClass(ItemGroup, [{\n    key: \"render\",\n    // eslint-disable-line react/sort-comp\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          children = _this$props.children,\n          elemAfter = _this$props.elemAfter,\n          isCompact = _this$props.isCompact,\n          title = _this$props.title,\n          label = _this$props.label,\n          innerRef = _this$props.innerRef,\n          role = _this$props.role;\n\n      var ariaLabel = function () {\n        if (label) {\n          return textContent(label);\n        }\n\n        if (title) {\n          return textContent(title);\n        }\n\n        return '';\n      }();\n\n      return React.createElement(\"div\", {\n        \"aria-label\": ariaLabel,\n        role: role,\n        ref: innerRef\n      }, title ? React.createElement(GroupTitle, {\n        \"aria-hidden\": \"true\",\n        isCompact: isCompact\n      }, React.createElement(GroupTitleText, null, title), elemAfter ? React.createElement(GroupTitleAfter, {\n        innerRef: function innerRef(r) {\n          _this2.headingAfterElement = r;\n        }\n      }, elemAfter) : null) : null, children);\n    }\n  }]);\n\n  return ItemGroup;\n}(Component);\n\n_defineProperty(ItemGroup, \"defaultProps\", {\n  role: 'group'\n});\n\nexport { ItemGroup as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport React, { Component } from 'react';\nimport { ItemGroup } from '@atlaskit/item';\n\nvar DropdownItemGroup =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(DropdownItemGroup, _Component);\n\n  function DropdownItemGroup() {\n    _classCallCheck(this, DropdownItemGroup);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(DropdownItemGroup).apply(this, arguments));\n  }\n\n  _createClass(DropdownItemGroup, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          children = _this$props.children,\n          elemAfter = _this$props.elemAfter,\n          title = _this$props.title;\n      return React.createElement(ItemGroup, {\n        elemAfter: elemAfter,\n        title: title,\n        role: \"menu\"\n      }, children);\n    }\n  }]);\n\n  return DropdownItemGroup;\n}(Component);\n\nexport { DropdownItemGroup as default };","import * as tslib_1 from \"tslib\";\nimport styled from 'styled-components';\nimport { gridSize } from '@atlaskit/theme';\nexport default styled.div(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject([\"\\n  display: inline-flex;\\n\"], [\"\\n  display: inline-flex;\\n\"])));\nexport var GroupItem = styled.div(templateObject_2 || (templateObject_2 = tslib_1.__makeTemplateObject([\"\\n  flex: 1 0 auto;\\n  display: flex;\\n\\n  /* margins don't flip when the layout uses dir=\\\"rtl\\\", whereas pseudos do */\\n  & + &::before {\\n    content: '';\\n    display: inline-block;\\n    width: \", \"px;\\n  }\\n\"], [\"\\n  flex: 1 0 auto;\\n  display: flex;\\n\\n  /* margins don't flip when the layout uses dir=\\\"rtl\\\", whereas pseudos do */\\n  & + &::before {\\n    content: '';\\n    display: inline-block;\\n    width: \", \"px;\\n  }\\n\"])), gridSize() / 2);\nvar templateObject_1, templateObject_2;\n//# sourceMappingURL=ButtonGroup.js.map","import * as tslib_1 from \"tslib\";\nimport * as React from 'react';\nimport withDeprecationWarnings from './withDeprecationWarnings';\nimport Group, { GroupItem } from '../styled/ButtonGroup';\nvar ButtonGroup = /** @class */ (function (_super) {\n    tslib_1.__extends(ButtonGroup, _super);\n    function ButtonGroup() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ButtonGroup.prototype.render = function () {\n        var _a = this.props, appearance = _a.appearance, children = _a.children;\n        return (React.createElement(Group, null, React.Children.map(children, function (child, idx) {\n            if (!child) {\n                return null;\n            }\n            return (React.createElement(GroupItem, { key: idx }, appearance\n                ? React.cloneElement(child, { appearance: appearance })\n                : child));\n        })));\n    };\n    return ButtonGroup;\n}(React.Component));\nexport default withDeprecationWarnings(ButtonGroup);\n//# sourceMappingURL=ButtonGroup.js.map"],"sourceRoot":""}