@100mslive/roomkit-react 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/{ActiveSpeakerView-H3VYXANB.js → ActiveSpeakerView-G32BDM5F.js} +6 -6
- package/dist/{HLSView-6BVBCQM7.css → ActiveSpeakerView-LW4WDBC6.css} +2 -2
- package/dist/{PinnedTrackView-QQ5FDXJX.css.map → ActiveSpeakerView-LW4WDBC6.css.map} +1 -1
- package/dist/{conference-KN6OKGDU.css → HLSView-DIQQF2PP.css} +2 -2
- package/dist/{HLSView-6BVBCQM7.css.map → HLSView-DIQQF2PP.css.map} +1 -1
- package/dist/{HLSView-3RDXRV7Y.js → HLSView-ZYNT3HJD.js} +5 -5
- package/dist/{PinnedTrackView-453PELNU.js → PinnedTrackView-GTXL2UTS.js} +6 -6
- package/dist/{PinnedTrackView-QQ5FDXJX.css → PinnedTrackView-OAA4HAID.css} +2 -2
- package/dist/{conference-KN6OKGDU.css.map → PinnedTrackView-OAA4HAID.css.map} +1 -1
- package/dist/{VirtualBackground-LHYBWUT5.js → VirtualBackground-HWU22Q6S.js} +3 -3
- package/dist/{chunk-KYYP6ZVK.js → chunk-4VY5NUK7.js} +2 -2
- package/dist/{chunk-KYYP6ZVK.js.map → chunk-4VY5NUK7.js.map} +1 -1
- package/dist/{chunk-XRJXE6UO.js → chunk-A2PNZIK7.js} +2 -2
- package/dist/{chunk-ULXGBUSC.js → chunk-BSQIN5RC.js} +2 -2
- package/dist/{chunk-7YUYZ64D.js → chunk-TEHZYXCJ.js} +457 -781
- package/dist/chunk-TEHZYXCJ.js.map +7 -0
- package/dist/chunk-ZET2HMGS.js +8331 -0
- package/dist/chunk-ZET2HMGS.js.map +7 -0
- package/dist/{ActiveSpeakerView-REZLWPPI.css → conference-LE4T3ZNF.css} +2 -2
- package/dist/{ActiveSpeakerView-REZLWPPI.css.map → conference-LE4T3ZNF.css.map} +1 -1
- package/dist/{conference-IDNRO4WK.js → conference-YHO2J3Z6.js} +11 -11
- package/dist/index.cjs.css +1 -1
- package/dist/index.cjs.css.map +1 -1
- package/dist/index.cjs.js +1383 -1641
- package/dist/index.cjs.js.map +4 -4
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.js +4 -4
- package/dist/meta.cjs.json +43 -38
- package/dist/meta.esbuild.json +129 -124
- package/dist/{transcription-BTSB7FZH.js → transcription-L6VBK75V.js} +3 -3
- package/package.json +3 -2
- package/src/Prebuilt/components/Streaming/RTMPIcon.jsx +58 -13
- package/src/TileMenu/StyledMenuTile.tsx +3 -1
- package/dist/chunk-7YUYZ64D.js.map +0 -7
- package/dist/chunk-HCAGFNXW.js +0 -8270
- package/dist/chunk-HCAGFNXW.js.map +0 -7
- /package/dist/{ActiveSpeakerView-H3VYXANB.js.map → ActiveSpeakerView-G32BDM5F.js.map} +0 -0
- /package/dist/{HLSView-3RDXRV7Y.js.map → HLSView-ZYNT3HJD.js.map} +0 -0
- /package/dist/{PinnedTrackView-453PELNU.js.map → PinnedTrackView-GTXL2UTS.js.map} +0 -0
- /package/dist/{VirtualBackground-LHYBWUT5.js.map → VirtualBackground-HWU22Q6S.js.map} +0 -0
- /package/dist/{chunk-XRJXE6UO.js.map → chunk-A2PNZIK7.js.map} +0 -0
- /package/dist/{chunk-ULXGBUSC.js.map → chunk-BSQIN5RC.js.map} +0 -0
- /package/dist/{conference-IDNRO4WK.js.map → conference-YHO2J3Z6.js.map} +0 -0
- /package/dist/{transcription-BTSB7FZH.js.map → transcription-L6VBK75V.js.map} +0 -0
@@ -0,0 +1,7 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"sources": ["../src/index.ts", "../src/Button/index.tsx", "../src/Button/Button.tsx", "../src/Theme/ThemeProvider.tsx", "../src/Theme/useSSR.tsx", "../src/Avatar/index.ts", "../src/Avatar/Avatar.tsx", "../src/Avatar/getAvatarBg.ts", "../src/Divider/index.ts", "../src/Divider/Divider.tsx", "../src/Switch/index.ts", "../src/Switch/Switch.tsx", "../src/Select/index.ts", "../src/Select/Select.tsx", "../src/Slider/index.ts", "../src/Slider/Slider.tsx", "../src/Modal/index.ts", "../src/Modal/Dialog.tsx", "../src/Modal/DialogContent.tsx", "../src/Input/Input.tsx", "../src/VideoTile/index.tsx", "../src/VideoTile/StyledVideoTile.tsx", "../src/VideoList/index.tsx", "../src/VideoList/videoListUtils.tsx", "../src/VideoList/StyledVideoList.tsx", "../src/Pagination/index.tsx", "../src/Pagination/StyledPagination.tsx", "../src/Dropdown/Dropdown.tsx", "../src/Video/index.tsx", "../src/Video/Video.tsx", "../src/TileMenu/index.tsx", "../src/TileMenu/StyledMenuTile.tsx", "../src/AudioLevel/index.ts", "../src/AudioLevel/AudioLevel.tsx", "../src/Popover/index.tsx", "../src/Stats/index.tsx", "../src/Stats/Stats.tsx", "../src/Stats/formatBytes.ts", "../src/Stats/StyledStats.tsx", "../src/Checkbox/Checkbox.tsx", "../src/Label/Label.tsx", "../src/RadioGroup/RadioGroup.tsx", "../src/Toast/Toast.tsx", "../src/Accordion/index.ts", "../src/Accordion/Accordion.tsx", "../src/Fieldset/Fieldset.tsx", "../src/Footer/index.tsx", "../src/Footer/Footer.tsx", "../src/ReactSelect/index.ts", "../src/ReactSelect/ReactSelect.tsx", "../src/Tabs/Tabs.tsx", "../src/QRCode/QRCode.tsx", "../src/Link/index.tsx", "../src/Link/Link.tsx", "../src/Collapsible/Collapsible.tsx", "../src/Prebuilt/index.js", "../src/Prebuilt/App.jsx", "../src/Prebuilt/components/AppData/AppData.jsx", "../src/Prebuilt/components/init/initUtils.js", "../src/Prebuilt/components/hooks/useUserPreferences.jsx", "../src/Prebuilt/components/AppData/useSidepane.js", "../src/Prebuilt/components/AppData/useUISettings.js", "../src/Prebuilt/common/utils.js", "../src/Prebuilt/components/AudioLevel/BeamSpeakerLabelsLogging.jsx", "../src/Prebuilt/services/FeatureFlags.jsx", "../src/Prebuilt/components/AuthToken.jsx", "../src/Prebuilt/AppContext.jsx", "../src/Prebuilt/primitives/DialogContent.jsx", "../src/Prebuilt/services/tokenService.js", "../src/Prebuilt/components/ErrorBoundary.jsx", "../src/Prebuilt/components/FullPageProgress.jsx", "../src/Prebuilt/components/init/Init.jsx", "../src/Prebuilt/components/Input/KeyboardInputManager.js", "../src/Prebuilt/components/Notifications/index.jsx", "../src/Prebuilt/components/Notifications/Notifications.jsx", "../src/Prebuilt/components/Toast/ToastBatcher.js", "../src/Prebuilt/components/Toast/ToastConfig.jsx", "../src/Prebuilt/hms.js", "../src/Prebuilt/components/Toast/ToastManager.js", "../src/Prebuilt/components/Notifications/AutoplayBlockedModal.jsx", "../src/Prebuilt/components/Notifications/InitErrorModal.jsx", "../src/Prebuilt/components/Notifications/MessageNotifications.jsx", "../src/Prebuilt/components/Notifications/PeerNotifications.jsx", "../src/Prebuilt/components/Notifications/PermissionErrorModal.jsx", "../src/Prebuilt/components/Notifications/ReconnectNotifications.jsx", "../src/Prebuilt/components/Notifications/TrackBulkUnmuteModal.jsx", "../src/Prebuilt/components/Notifications/TrackNotifications.jsx", "../src/Prebuilt/components/Notifications/TrackUnmuteModal.jsx", "../src/Prebuilt/components/hooks/useNavigation.js", "../src/Prebuilt/components/PostLeave.jsx", "../src/Prebuilt/components/Header/index.jsx", "../src/Prebuilt/components/Header/Header.jsx", "../src/Prebuilt/components/Header/ConferencingHeader.jsx", "../src/Prebuilt/components/Header/HeaderComponents.jsx", "../src/Prebuilt/components/Header/ParticipantList.jsx", "../src/Prebuilt/components/Connection/ConnectionIndicator.jsx", "../src/Prebuilt/components/Connection/connectionQualityUtils.js", "../src/Prebuilt/components/RoleChangeModal.jsx", "../src/Prebuilt/components/hooks/useDropdownSelection.jsx", "../src/Prebuilt/common/hooks.js", "../src/Prebuilt/components/Header/ParticipantFilter.jsx", "../src/Prebuilt/components/Header/StreamActions.jsx", "../src/Prebuilt/components/GoLiveButton.jsx", "../src/Prebuilt/components/Streaming/ResolutionInput.jsx", "../src/Prebuilt/components/Streaming/RTMPStreaming.jsx", "../src/Prebuilt/components/Streaming/Common.jsx", "../src/Prebuilt/components/Header/AdditionalRoomState.jsx", "../src/Prebuilt/plugins/whiteboard/useWhiteboardMetadata.js", "../src/Prebuilt/components/hooks/useMetadata.jsx", "../src/Prebuilt/components/hooks/usePlaylistMusic.js", "../src/Prebuilt/components/hooks/useScreenshareAudio.js", "../src/Prebuilt/components/Header/StreamingHeader.jsx", "../src/Prebuilt/components/EmojiReaction.jsx", "../src/Prebuilt/components/hooks/useDropdownList.jsx", "../src/Prebuilt/components/LeaveRoom.jsx", "../src/Prebuilt/components/MetaActions.jsx", "../src/Prebuilt/components/Preview/PreviewContainer.jsx", "../src/Prebuilt/layouts/SidePane.jsx", "../src/Prebuilt/components/Chat/Chat.jsx", "../src/Prebuilt/components/Chat/ChatBody.jsx", "../src/Prebuilt/components/hooks/useSetPinnedMessage.js", "../src/Prebuilt/components/Chat/ChatFooter.jsx", "../src/Prebuilt/components/AppData/useChatState.js", "../src/Prebuilt/components/Chat/useEmojiPickerStyles.js", "../src/Prebuilt/components/Chat/ChatHeader.jsx", "../src/Prebuilt/components/Chat/ChatSelector.jsx", "../src/Prebuilt/components/Chat/useUnreadCount.js", "../src/Prebuilt/components/Streaming/StreamingLanding.jsx", "../src/Prebuilt/components/Streaming/HLSStreaming.jsx", "../src/Prebuilt/components/Streaming/RTMPIcon.jsx", "../src/Prebuilt/components/Preview/PreviewJoin.jsx", "../src/Prebuilt/components/AudioVideoToggle.jsx", "../src/Prebuilt/components/Connection/TileConnection.jsx", "../src/Prebuilt/components/Settings/SettingsModal.jsx", "../src/Prebuilt/components/Settings/DeviceSettings.jsx", "../src/Prebuilt/primitives/DropdownTrigger.jsx", "../src/Prebuilt/components/Settings/common.js", "../src/Prebuilt/components/Settings/LayoutSettings.jsx", "../src/Prebuilt/components/Settings/SwitchWithLabel.jsx", "../src/Prebuilt/components/Settings/NotificationSettings.jsx", "../src/Prebuilt/components/Preview/PreviewName.jsx", "../src/Prebuilt/components/hooks/useSkipPreview.jsx", "../src/Prebuilt/components/Toast/ToastContainer.jsx", "../src/Prebuilt/components/Toast/Toast.jsx", "../src/Prebuilt/plugins/confetti.jsx", "../src/Prebuilt/plugins/FlyingEmoji.jsx", "../src/Prebuilt/plugins/RemoteStopScreenshare.jsx", "../src/Progress/index.tsx"],
|
4
|
+
"sourcesContent": ["export * from './Button';\nexport * from './Text';\nexport * from './IconButton';\nexport * from './Layout';\nexport * from './Avatar';\nexport * from './Divider';\nexport * from './Switch';\nexport * from './Tooltip';\nexport * from './Select';\nexport * from './Slider';\nexport * from './Modal';\nexport * from './Loading';\nexport * from './Input';\nexport * from './VideoTile';\nexport * from './VideoList';\nexport * from './Pagination';\nexport * from './Dropdown';\nexport { textEllipsis, flexCenter, slideLeftAndFade } from './utils';\nexport * from './Video';\nexport * from './TileMenu';\nexport * from './AudioLevel';\nexport * from './Popover';\nexport * from './Stats';\nexport * from './Theme';\nexport * from './Checkbox';\nexport * from './Label';\nexport * from './RadioGroup';\nexport * from './Toast';\nexport * from './Accordion';\nexport * from './Fieldset';\nexport * from './Footer';\nexport * as HMSSelect from './ReactSelect';\nexport * from './Tabs';\nexport * from './QRCode';\nexport * from './Link';\nexport * from './Collapsible';\nexport * from './Prebuilt';\nexport * from './Progress';\n", "export { Button } from './Button';\n", "import React, { ComponentPropsWithRef, PropsWithChildren } from 'react';\nimport { Flex } from '../Layout';\nimport { Loading } from '../Loading';\nimport { styled } from '../Theme';\nimport { flexCenter } from '../utils/styles';\n\n/**\n * @param base bg color\n * @param hover hover state bg color\n * @param active active state bg color\n * @returns CSS object based on the state\n */\n\nconst getOutlinedVariants = (base: string, hover: string, active: string, disabled: string) => {\n return {\n bg: '$transparent',\n border: `solid $space$px ${base}`,\n c: '$textHighEmp',\n '&[disabled]': {\n c: '$textAccentDisabled',\n bg: '$transparent',\n border: `solid $space$px ${disabled}`,\n cursor: 'not-allowed',\n },\n '&:not([disabled]):hover': {\n border: `solid $space$px ${hover}`,\n bg: '$transparent',\n },\n '&:not([disabled]):active': {\n border: `solid $space$px ${active}`,\n bg: '$transparent',\n },\n '&:not([disabled]):focus-visible': {\n boxShadow: `0 0 0 3px ${base}`,\n },\n };\n};\n\nconst getButtonVariants = (base: string, hover: string, active: string, disabled: string) => {\n return {\n bg: base,\n border: `1px solid ${base}`,\n c: '$textAccentHigh',\n '&[disabled]': {\n c: '$textAccentDisabled',\n cursor: 'not-allowed',\n bg: disabled,\n border: `1px solid ${disabled}`,\n },\n '&:not([disabled]):hover': {\n bg: hover,\n border: `1px solid ${hover}`,\n },\n '&:not([disabled]):active': {\n bg: active,\n border: `1px solid ${active}`,\n },\n '&:not([disabled]):focus-visible': {\n boxShadow: `0 0 0 3px ${base}`,\n },\n };\n};\n\nconst StyledButton = styled('button', {\n ...flexCenter,\n cursor: 'pointer',\n fontFamily: '$sans',\n lineHeight: 'inherit',\n textTransform: 'none',\n position: 'relative',\n outline: 'none',\n border: 'none',\n fs: '$md',\n r: '$1',\n backgroundColor: '$primaryDefault',\n fontWeight: '500',\n whiteSpace: 'nowrap',\n p: '$4 $8',\n '-webkit-appearance': 'button',\n '&:focus': {\n outline: 'none',\n },\n '&:not([disabled]):focus-visible': {\n boxShadow: '0 0 0 3px $colors$primaryDefault',\n },\n transition: 'all 0.2s ease',\n compoundVariants: [\n {\n variant: 'standard',\n outlined: true,\n css: getOutlinedVariants('$secondaryDefault', '$secondaryLight', '$secondaryDark', '$secondaryDisabled'),\n },\n {\n variant: 'danger',\n outlined: true,\n css: getOutlinedVariants('$errorDefault', '$errorLight', '$errorDark', '$errorDisabled'),\n },\n {\n variant: 'primary',\n outlined: true,\n css: getOutlinedVariants('$primaryDefault', '$primaryLight', '$primaryDark', '$primaryDisabled'),\n },\n ],\n variants: {\n variant: {\n standard: getButtonVariants('$secondaryDefault', '$secondaryLight', '$secondaryDark', '$secondaryDisabled'),\n danger: getButtonVariants('$errorDefault', '$errorLight', '$errorDark', '$errorDisabled'),\n primary: getButtonVariants('$primaryDefault', '$primaryLight', '$primaryDark', '$primaryDisabled'),\n },\n outlined: {\n true: {},\n },\n icon: {\n true: {},\n },\n },\n defaultVariants: {\n variant: 'primary',\n },\n});\n\nexport const Button = React.forwardRef<\n HTMLButtonElement,\n PropsWithChildren<{ loading?: boolean } & ComponentPropsWithRef<typeof StyledButton>>\n>(({ children, loading = false, icon, ...buttonProps }, ref) => {\n return (\n <StyledButton {...buttonProps} ref={ref}>\n <>\n {loading && (\n <Flex align=\"center\" justify=\"center\" css={{ w: '100%', position: 'absolute', left: '0' }}>\n <Loading color=\"currentColor\" />\n </Flex>\n )}\n <Flex\n align=\"center\"\n justify=\"center\"\n css={{ visibility: loading ? 'hidden' : 'visible', gap: icon ? '$4' : '0' }}\n >\n {children}\n </Flex>\n </>\n </StyledButton>\n );\n});\n", "import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useMedia } from 'react-use';\nimport type { Theme } from './stitches.config';\nimport { createTheme, theme } from './stitches.config';\nimport useSSR from './useSSR';\n\nconst defaultAspectRatio = {\n width: 1,\n height: 1,\n};\n\nexport enum ThemeTypes {\n // eslint-disable-next-line no-unused-vars\n light = 'light',\n // eslint-disable-next-line no-unused-vars\n dark = 'dark',\n}\n\nexport type ThemeContextValue = {\n themeType: ThemeTypes;\n theme: Theme;\n aspectRatio: { width: number; height: number };\n /**\n * @param {ThemeTypes} themeToUpdateTo - optional\n * Use this to toggle or update the currentTheme.\n * if a param is passed, it will set the theme to passed value, otherwise will toggle between light and dark\n * depending on current applied theme\n */\n toggleTheme: (themeToUpdateTo?: ThemeTypes) => void;\n};\n\nexport type ThemeProviderProps = {\n themeType?: ThemeTypes;\n theme?: Theme;\n aspectRatio?: { width: number; height: number };\n};\n\nconst defaultContext = {\n themeType: ThemeTypes.dark,\n theme,\n aspectRatio: { width: 1, height: 1 },\n toggleTheme: (_themeToUpdateTo?: ThemeTypes) => {\n return;\n },\n};\nexport const ThemeContext = React.createContext(defaultContext);\n\n/**\n * Wrap this around your root component to get access to theme\n * eg:\n * <ThemeProvider type=\"dark\" appBuilder={{ aspectRatio: { width:1, height: 1} }}>\n * <App />\n * </ThemeProvider>\n */\nexport const HMSThemeProvider: React.FC<React.PropsWithChildren<ThemeProviderProps>> = ({\n themeType,\n theme: userTheme,\n aspectRatio = defaultAspectRatio,\n children,\n}) => {\n const systemTheme = useMedia('prefers-color-scheme: dark') ? ThemeTypes.dark : ThemeTypes.light;\n const [currentTheme, setCurrentTheme] = useState(themeType || systemTheme);\n const previousClassName = useRef('');\n const { isBrowser } = useSSR();\n const updatedTheme = useMemo(() => {\n const updatedTheme = createTheme({ themeType: currentTheme, theme: userTheme || {} });\n if (!isBrowser) {\n return updatedTheme;\n }\n if (previousClassName.current) {\n document.documentElement.classList.remove(previousClassName.current);\n }\n previousClassName.current = updatedTheme.className;\n document.documentElement.classList.add(updatedTheme);\n return updatedTheme;\n }, [userTheme, currentTheme, isBrowser]);\n\n const toggleTheme = useCallback(\n (themeToUpdateTo?: ThemeTypes) => {\n if (themeToUpdateTo) {\n setCurrentTheme(themeToUpdateTo);\n return;\n }\n setCurrentTheme(currentTheme === ThemeTypes.dark ? ThemeTypes.light : ThemeTypes.dark);\n },\n [currentTheme],\n );\n\n useEffect(() => {\n if (themeType) {\n setCurrentTheme(themeType);\n }\n }, [themeType]);\n\n return (\n <ThemeContext.Provider\n value={{ themeType: currentTheme, theme: updatedTheme as unknown as Theme, aspectRatio, toggleTheme }}\n >\n {children}\n </ThemeContext.Provider>\n );\n};\n\nexport const useTheme = () => React.useContext(ThemeContext);\n", "import { useEffect, useState } from 'react';\n\nconst isBrowser = (): boolean => {\n return Boolean(typeof window !== 'undefined' && window.document && window.document.createElement);\n};\n\nexport type SSRState = {\n isBrowser: boolean;\n isServer: boolean;\n};\n\nconst useSSR = (): SSRState => {\n const [browser, setBrowser] = useState<boolean>(false);\n useEffect(() => {\n setBrowser(isBrowser());\n }, []);\n\n return {\n isBrowser: browser,\n isServer: !browser,\n };\n};\n\nexport default useSSR;\n", "export { Avatar, StyledAvatar } from './Avatar';\n", "import React from 'react';\nimport { VariantProps } from '@stitches/react';\nimport { styled } from '../Theme';\nimport { getAvatarBg } from './getAvatarBg';\nimport { flexCenter } from '../utils/styles';\n\nconst getAvatarShape = (radii: string) => ({\n borderRadius: radii,\n});\n\nexport const StyledAvatar = styled('div', {\n ...flexCenter,\n color: '$white',\n fontFamily: '$sans',\n aspectRatio: 1,\n fontWeight: 600,\n fontSize: '$space$9',\n variants: {\n shape: {\n circle: getAvatarShape('$round'),\n square: getAvatarShape('$1'),\n },\n size: {\n small: {\n height: '$16 !important',\n fontSize: '$space$6',\n },\n medium: {\n height: '$18 !important',\n fontSize: '$space$10',\n },\n large: {\n height: '$20 !important',\n fontSize: '$space$12',\n },\n },\n },\n defaultVariants: {\n shape: 'circle',\n },\n});\n\ntype Props = VariantProps<typeof StyledAvatar> &\n React.ComponentProps<typeof StyledAvatar> & {\n name: string;\n };\n\nexport const Avatar: React.FC<Props> = ({ name, css, ...props }) => {\n const { initials, color } = getAvatarBg(name);\n return (\n <StyledAvatar css={{ bg: color, ...css }} {...props}>\n {initials}\n </StyledAvatar>\n );\n};\n", "const getInitials = (name: string | undefined) => {\n if (!name) {\n return undefined;\n } else {\n return name\n .trim()\n .match(/(^\\S\\S?|\\b\\S)?/g)\n ?.join('')\n ?.match(/(^\\S|\\S$)?/g)\n ?.join('')\n .toUpperCase();\n }\n};\n\n/**\n calculates the initials of the name and choose a background color based on the first later of the initials\n */\nexport const getAvatarBg = (name: string): { initials: string; color: string } => {\n const initials = getInitials(name);\n const indexFactor = 20;\n const colorIndex = ((initials?.codePointAt(0) || 0) % indexFactor) + 1;\n return { initials: initials || '', color: colorsList[colorIndex - 1] };\n};\n\nconst colorsList = [\n '#616161',\n '#F44336',\n '#3F51B5',\n '#4CAF50',\n '#FFA000',\n '#795548',\n '#E91E63',\n '#2F80FF',\n '#8BC34A',\n '#F57C00',\n '#4E342E',\n '#9C27B0',\n '#00BCD4',\n '#C0CA33',\n '#F4511E',\n '#673AB7',\n '#009688',\n '#FBC02D',\n '#BF360C',\n '#455A64',\n];\n", "export { HorizontalDivider, VerticalDivider } from './Divider';\n", "import { styled } from '../Theme';\n\nconst getVerticalSpace = (space: string) => ({\n marginLeft: space,\n marginRight: space,\n});\nconst getHorizontalSpace = (space: string) => ({\n marginTop: space,\n marginBottom: space,\n});\n\nexport const VerticalDivider = styled('span', {\n height: '25px',\n width: '1px',\n backgroundColor: '$borderLight',\n variants: {\n space: {\n 1: getVerticalSpace('$1'),\n 2: getVerticalSpace('$2'),\n 3: getVerticalSpace('$3'),\n 4: getVerticalSpace('$4'),\n },\n },\n defaultVariants: {\n space: 1,\n },\n});\n\nexport const HorizontalDivider = styled('span', {\n height: '1px',\n width: '100%',\n display: 'block',\n backgroundColor: '$borderLight',\n variants: {\n space: {\n 1: getHorizontalSpace('$1'),\n 2: getHorizontalSpace('$2'),\n 3: getHorizontalSpace('$3'),\n 4: getHorizontalSpace('$4'),\n },\n },\n defaultVariants: {\n space: 1,\n },\n});\n", "export { Switch } from './Switch';\n", "import React from 'react';\nimport * as BaseSwitch from '@radix-ui/react-switch';\nimport { styled } from '../Theme';\n\nconst SwitchRoot = styled(BaseSwitch.Root, {\n all: 'unset',\n width: '30px',\n height: '14px',\n border: 'solid $space$px $secondaryDefault',\n borderRadius: '$3',\n p: '$2',\n position: 'relative',\n cursor: 'pointer',\n '&[data-state=\"checked\"]': {\n backgroundColor: '$primaryDefault',\n border: 'solid $space$px $primaryDefault',\n },\n '&:focus': {\n outline: 'none',\n },\n '&[disabled]': {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n});\n\nconst SwitchThumb = styled(BaseSwitch.Thumb, {\n display: 'block',\n top: '3px',\n position: 'absolute',\n width: '$md',\n height: '$md',\n backgroundColor: '$secondaryDefault',\n borderRadius: '$round',\n transition: 'right 500ms ease-in',\n left: '$2',\n '&[data-state=\"checked\"]': {\n left: 'unset',\n right: '$2',\n backgroundColor: '$textAccentHigh',\n },\n});\n\ntype SwitchProps = React.ComponentProps<typeof SwitchRoot>;\n\nexport const Switch: React.FC<SwitchProps> = props => (\n <SwitchRoot {...props}>\n <SwitchThumb />\n </SwitchRoot>\n);\n\nSwitch.displayName = 'Switch';\n", "export { Select } from './Select';\n", "import React from 'react';\nimport { ChevronDownIcon } from '@100mslive/react-icons';\nimport { styled } from '../Theme';\n\nconst Root = styled('div', {\n color: '$textPrimary',\n display: 'inline-flex',\n position: 'relative',\n outline: 'none',\n overflow: 'hidden',\n borderRadius: '$1',\n backgroundColor: '$menuBg',\n maxWidth: '100%',\n});\n\n// TODO: replace these with tokens\nconst SelectRoot = styled('select', {\n h: '$16',\n fontSize: '$md',\n fontWeight: '500',\n lineHeight: 'inherit',\n textTransform: 'none',\n appearance: 'none',\n color: '$textAccentHigh',\n padding: '5px',\n paddingLeft: '12px',\n paddingRight: '30px',\n border: 'none',\n borderRadius: '8px',\n backgroundColor: '$secondaryDefault',\n '&:not([disabled]):focus-visible': {\n boxShadow: '0 0 0 3px $colors$brandDefault',\n },\n '&[disabled]': {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n});\n\nconst Arrow = styled('span', {\n color: '$textAccentMedium',\n width: '30px',\n height: '100%',\n position: 'absolute',\n right: 0,\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n transition: 'border .2s ease 0s',\n});\n\nconst DefaultDownIcon = ({ ...props }) => (\n <Arrow {...props}>\n <ChevronDownIcon />\n </Arrow>\n);\n\nexport const Select = {\n Root,\n DownIcon: Arrow,\n DefaultDownIcon,\n Select: SelectRoot,\n};\n", "export { Slider } from './Slider';\n", "import React from 'react';\nimport * as BaseSlider from '@radix-ui/react-slider';\nimport { CSS } from '@stitches/react';\nimport { styled } from '../Theme';\nimport { Tooltip } from '../Tooltip';\n\nconst Root = styled(BaseSlider.Root, {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n userSelect: 'none',\n touchAction: 'none',\n width: '100%',\n '&[data-orientation=\"horizontal\"]': {\n height: 20,\n },\n});\n\nconst Track = styled(BaseSlider.Track, {\n backgroundColor: '$secondaryGray',\n position: 'relative',\n flexGrow: 1,\n borderRadius: '$round',\n cursor: 'pointer',\n '&[data-orientation=\"horizontal\"]': { height: 3 },\n});\n\nconst Range = styled(BaseSlider.Range, {\n position: 'absolute',\n backgroundColor: '$primaryDefault',\n borderRadius: '$round',\n height: '100%',\n});\n\nconst Thumb = styled(BaseSlider.Thumb, {\n all: 'unset',\n display: 'block',\n width: '$8',\n height: '$8',\n backgroundColor: '$primaryDefault',\n cursor: 'pointer',\n boxShadow: `0 2px 10px $colors$grayDefault`,\n borderRadius: 10,\n '&:hover': { backgroundColor: '$primaryDefault' },\n '&:focus': { boxShadow: 'none' },\n});\n\ntype SliderProps = React.ComponentProps<typeof Root> & {\n thumbStyles?: CSS;\n showTooltip?: boolean;\n};\n\nexport const Slider: React.FC<SliderProps & { showTooltip?: boolean }> = ({\n showTooltip = true,\n thumbStyles,\n ...props\n}) => (\n <Root {...props}>\n <Track>\n <Range />\n </Track>\n {showTooltip ? (\n <Tooltip title={String(props.value?.[0])}>\n <Thumb css={thumbStyles} />\n </Tooltip>\n ) : (\n <Thumb css={thumbStyles} />\n )}\n </Root>\n);\n", "export { Dialog } from './Dialog';\n", "import { Root } from '@radix-ui/react-dialog';\nimport { styled } from '@stitches/react';\nimport {\n DialogClose,\n DialogDefaultCloseIcon,\n DialogDescription,\n DialogTitle,\n StyledDialogContent,\n StyledDialogOverlay,\n StyledDialogPortal,\n StyledDialogTrigger,\n} from './DialogContent';\n\nconst StyledDialog = styled(Root, {});\n\nexport const Dialog = {\n Root: StyledDialog,\n Trigger: StyledDialogTrigger,\n Overlay: StyledDialogOverlay,\n Content: StyledDialogContent,\n Title: DialogTitle,\n Description: DialogDescription,\n Close: DialogClose,\n DefaultClose: DialogDefaultCloseIcon,\n Portal: StyledDialogPortal,\n};\n", "import React, { ComponentProps } from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { CrossIcon } from '@100mslive/react-icons';\nimport { IconButton } from '../IconButton';\nimport { styled } from '../Theme';\nimport { dialogClose, dialogOpen } from '../utils/animations';\n\nexport const DialogClose = styled(DialogPrimitive.Close, {\n backgroundColor: 'transparent',\n padding: '0',\n margin: '0',\n border: 'none',\n backgroundImage: 'none',\n});\n\nexport const StyledDialogTrigger = styled(DialogPrimitive.Trigger, {\n appearance: 'none !important', // Needed for safari it shows white overlay\n});\n\nexport const StyledDialogOverlay = styled(DialogPrimitive.Overlay, {\n backgroundColor: 'rgba(0, 0, 0, 0.5);',\n position: 'fixed',\n inset: 0,\n});\n\nexport const StyledDialogPortal = styled(DialogPrimitive.Portal, {});\n\nexport const StyledDialogContent = styled(DialogPrimitive.Content, {\n color: '$textMedEmp',\n backgroundColor: '$surfaceDefault',\n borderRadius: '8px',\n position: 'fixed',\n top: '50%',\n left: '50%',\n border: '$space$px solid $borderDefault',\n boxShadow: '0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23)',\n transform: 'translate(-50%, -50%)',\n zIndex: 999,\n padding: '$12',\n '@allowMotion': {\n '&[data-state=\"open\"]': {\n animation: `${dialogOpen} 150ms cubic-bezier(0.16, 1, 0.3, 1)`,\n },\n '&[data-state=\"closed\"]': {\n animation: `${dialogClose} 150ms cubic-bezier(0.16, 1, 0.3, 1)`,\n },\n },\n '&:focus': { outline: 'none' },\n});\n\nexport const DialogTitle = styled(DialogPrimitive.Title, {\n margin: 0,\n});\n\nexport const DialogDescription = styled(DialogPrimitive.Description, {});\n\nexport const DialogDefaultCloseIcon = (props: ComponentProps<typeof IconButton>) => (\n <DialogClose asChild>\n <IconButton {...props}>\n <CrossIcon />\n </IconButton>\n </DialogClose>\n);\n", "import React, { ComponentProps, PropsWithChildren, PropsWithRef } from 'react';\nimport { CSS } from '@stitches/react';\nimport { CopyIcon, EyeCloseIcon, EyeOpenIcon } from '@100mslive/react-icons';\nimport { Flex } from '../Layout';\nimport { styled } from '../Theme';\n\nexport const Input = styled('input', {\n fontFamily: '$sans',\n lineHeight: 'inherit',\n backgroundColor: '$surfaceLight',\n borderRadius: '8px',\n outline: 'none',\n border: '1px solid $borderLight',\n padding: '0.5rem 0.75rem',\n color: '$textPrimary',\n fontSize: '$md',\n '&:focus': {\n boxShadow: '0 0 0 1px $colors$borderAccent',\n border: '1px solid transparent',\n },\n '&::placeholder': {\n color: '$textDisabled',\n },\n variants: {\n error: {\n true: {\n '&:focus': {\n boxShadow: '0 0 0 3px $colors$error',\n },\n },\n },\n },\n});\n\nconst PasswordRoot = styled('div', {\n w: '100%',\n position: 'relative',\n display: 'flex',\n});\n\nconst PasswordShowIcon: React.FC<ComponentProps<typeof Flex> & { showPassword?: boolean; css?: CSS }> = ({\n showPassword,\n css,\n ...props\n}) => {\n return (\n <Flex css={{ ...css }} {...props}>\n {showPassword ? <EyeOpenIcon /> : <EyeCloseIcon />}\n </Flex>\n );\n};\n\nconst PasswordCopyIcon: React.FC<ComponentProps<typeof Flex & { css?: CSS }>> = ({ css, ...props }) => {\n return (\n <Flex css={{ ...css }} {...props}>\n <CopyIcon />\n </Flex>\n );\n};\n\nconst PasswordIcons = React.forwardRef<HTMLDivElement, PropsWithChildren<ComponentProps<typeof Flex & { css?: CSS }>>>(\n ({ css, ...props }, ref) => {\n return (\n <Flex\n css={{\n position: 'absolute',\n top: 0,\n height: '100%',\n zIndex: 10,\n right: '$4',\n bg: '$surfaceLight',\n alignItems: 'center',\n ...css,\n }}\n ref={ref}\n {...props}\n >\n {props.children}\n </Flex>\n );\n },\n);\n\nconst ReactInput: React.FC<PropsWithRef<ComponentProps<typeof Input> & { showPassword?: boolean; css?: CSS }>> =\n React.forwardRef<\n HTMLInputElement,\n PropsWithRef<ComponentProps<typeof Input> & { showPassword?: boolean; css?: CSS }>\n >(({ showPassword = false, css, ...props }, ref) => {\n return (\n <Input\n css={{ flexGrow: 1, width: '100%', ...css }}\n type={showPassword ? 'text' : 'password'}\n {...props}\n ref={ref}\n />\n );\n });\n\nexport const PasswordInput = {\n Root: PasswordRoot,\n Icons: PasswordIcons,\n Input: ReactInput,\n ShowIcon: PasswordShowIcon,\n CopyIcon: PasswordCopyIcon,\n};\n", "export { StyledVideoTile } from './StyledVideoTile';\n", "import { Box } from '../Layout';\nimport { styled } from '../Theme';\nimport { flexCenter } from '../utils';\n\nexport const Root = styled('div', {\n padding: '0.75rem',\n // show videotile context menu on hover\n // [`&:hover .tile-menu`]: {\n // display: 'inline-block',\n // },\n});\n\nconst Container = styled('div', {\n width: '100%',\n height: '100%',\n position: 'relative',\n borderRadius: '$2',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: '$tileBg',\n variants: {\n transparentBg: {\n true: {\n background: 'transparent',\n },\n },\n noRadius: {\n true: {\n borderRadius: 0,\n },\n },\n },\n});\n\nconst Overlay = styled('div', {\n position: 'absolute',\n width: '100%',\n height: '100%',\n});\n\nconst Info = styled('div', {\n color: '$textPrimary',\n position: 'absolute',\n bottom: '5px',\n left: '50%',\n fontSize: '$sm',\n transform: 'translateX(-50%)',\n textAlign: 'center',\n width: '80%',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n fontFamily: '$sans',\n});\n\nconst AttributeBox = styled('div', {\n position: 'absolute',\n color: '$textPrimary',\n});\n\nconst AudioIndicator = styled('div', {\n position: 'absolute',\n top: '$2',\n right: '$2',\n color: '$white',\n bg: '$error',\n borderRadius: '$round',\n width: '$13',\n height: '$13',\n mb: '5px',\n ...flexCenter,\n variants: {\n size: {\n small: {\n width: '$10',\n height: '$10',\n '& > svg': {\n width: '$8',\n height: '$8',\n },\n },\n medium: {\n width: '$13',\n height: '$13',\n },\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n});\n\nconst FullScreenButton = styled('button', {\n width: '2.25rem',\n height: '2.25rem',\n color: '$textHighEmp',\n borderRadius: '$round',\n backgroundColor: '$menuBg',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n position: 'absolute',\n top: '$2',\n right: '$2',\n zIndex: 5,\n '&:not([disabled]):focus': {\n outline: 'none',\n boxShadow: '0 0 0 3px $colors$brandLight',\n },\n});\n\nconst AvatarContainer = styled(Box, {\n ...flexCenter,\n flexDirection: 'column',\n position: 'absolute',\n left: '50%',\n top: '50%',\n transform: 'translateX(-50%) translateY(-50%)',\n width: '40%',\n height: '40%',\n '& > div': {\n maxHeight: '$20',\n height: '100%',\n },\n});\n\ninterface VideoTileType {\n Root: typeof Root;\n Container: typeof Container;\n Overlay: typeof Overlay;\n Info: typeof Info;\n AudioIndicator: typeof AudioIndicator;\n AvatarContainer: typeof AvatarContainer;\n AttributeBox: typeof AttributeBox;\n FullScreenButton: typeof FullScreenButton;\n}\n\nexport const StyledVideoTile: VideoTileType = {\n Root,\n Container,\n Overlay,\n Info,\n AudioIndicator,\n AvatarContainer,\n AttributeBox,\n FullScreenButton,\n};\n", "export { getLeft } from './videoListUtils';\nexport { StyledVideoList } from './StyledVideoList';\n", "export const getLeft = (index: number, currentPageIndex: number) => {\n //active slide\n if (index === currentPageIndex) {\n return 0;\n }\n //prev slide\n if (index + 1 === currentPageIndex) {\n return '-100%';\n }\n //next slide\n if (index - 1 === currentPageIndex) {\n return '100%';\n }\n //all slides before prev\n if (index < currentPageIndex) {\n return '-200%';\n }\n //all slides after next\n return '200%';\n};\n", "import { styled } from '../Theme';\n\nconst Root = styled('div', {\n height: '100%',\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n});\n\nconst Container = styled('div', {\n height: '100%',\n width: '100%',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden',\n});\n\nconst View = styled('div', {\n height: '100%',\n width: '100%',\n position: 'absolute',\n display: 'flex',\n placeContent: 'center',\n flexWrap: 'wrap',\n alignItems: 'center',\n});\n\ninterface VideoListType {\n Root: typeof Root;\n Container: typeof Container;\n View: typeof View;\n}\n\nexport const StyledVideoList: VideoListType = {\n Root,\n Container,\n View,\n};\n", "export { StyledPagination } from './StyledPagination';\n", "import { styled } from '../Theme';\n\nconst Root = styled('div', {\n height: '2rem',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n width: '100%',\n '& > * + *': {\n marginRight: '0',\n marginLeft: '0.5rem',\n },\n});\n\nconst Chevron = styled('button', {\n color: '$textPrimary',\n '&:focus': {\n outline: 'none',\n },\n '&[disabled]': {\n color: '$grayDefault',\n cursor: 'not-allowed',\n },\n display: 'flex',\n});\n\nconst Dots = styled('div', {\n display: 'flex',\n alignItems: 'center',\n '& > * + *': {\n marginRight: '0',\n marginLeft: '0.5rem',\n },\n});\n\nconst Dot = styled('button', {\n '&:focus': {\n outline: 'none',\n },\n borderRadius: '9999px',\n width: '0.5rem',\n height: '0.5rem',\n backgroundColor: '$textDisabled',\n padding: '0px',\n border: 'none',\n cursor: 'pointer',\n variants: {\n active: {\n true: {\n backgroundColor: '$textPrimary',\n },\n },\n },\n});\n\ninterface PaginationType {\n Root: typeof Root;\n Chevron: typeof Chevron;\n Dots: typeof Dots;\n Dot: typeof Dot;\n}\n\nexport const StyledPagination: PaginationType = {\n Root,\n Chevron,\n Dots,\n Dot,\n};\n", "import {\n CheckboxItem,\n Content,\n Group,\n Item,\n ItemIndicator,\n Label,\n Portal,\n Root,\n Separator,\n Sub,\n SubContent,\n SubTrigger,\n Trigger,\n} from '@radix-ui/react-dropdown-menu';\nimport { styled } from '../Theme';\n\nconst DropdownRoot = styled(Root, {});\n\nconst DropdownTrigger = styled(Trigger, {\n cursor: 'pointer',\n appearance: 'none !important',\n '&[data-state=\"open\"]': {\n backgroundColor: '$surfaceLight',\n },\n '&:focus': {\n outline: 'none',\n },\n '&:focus-visible': {\n boxShadow: '0 0 0 3px $colors$primaryDefault',\n },\n});\n\nconst DropdownTriggerItem = styled(SubTrigger, {\n w: '100%',\n color: '$textPrimary',\n p: '$8',\n display: 'flex',\n alignItems: 'center',\n '&:hover': {\n cursor: 'pointer',\n bg: '$surfaceLighter',\n },\n '&:focus-visible': {\n bg: '$surfaceLighter',\n },\n});\n\nconst DropdownItem = styled(Item, {\n color: '$textPrimary',\n p: '$8',\n display: 'flex',\n alignItems: 'center',\n outline: 'none',\n '&:hover': {\n cursor: 'pointer',\n bg: '$surfaceLighter',\n },\n '&:focus-visible': {\n bg: '$surfaceLighter',\n },\n});\n\nconst DropdownItemSeparator = styled(Separator, {\n h: 1,\n backgroundColor: '$grayDefault',\n m: '$4 $8',\n});\n\nconst DropdownContent = styled(Content, {\n w: '$80',\n maxHeight: '$64',\n r: '$1',\n py: '$4',\n backgroundColor: '$surfaceLight',\n overflowY: 'auto',\n boxShadow: '0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23)',\n zIndex: 20,\n fontFamily: '$sans',\n});\n\nconst DropdownLabel = styled(Label, {\n display: 'flex',\n alignItems: 'center',\n h: '$12',\n w: '100%',\n p: '$8 $4',\n});\n\nconst DropdownGroup = styled(Group, {});\n\nconst DropdownSubMenu = styled(Sub, {});\n\nconst DropdownSubMenuContent = styled(SubContent, {\n w: '$80',\n maxHeight: '$64',\n r: '$1',\n py: '$4',\n backgroundColor: '$surfaceLight',\n overflowY: 'auto',\n boxShadow: '0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23)',\n zIndex: 20,\n});\n\nconst DropdownCheckboxItem = styled(CheckboxItem, {\n color: '$textPrimary',\n p: '$8',\n display: 'flex',\n alignItems: 'center',\n outline: 'none',\n '&:hover': {\n cursor: 'pointer',\n bg: '$surfaceLighter',\n },\n '&:focus-visible': {\n bg: '$surfaceLighter',\n },\n gap: '$2',\n});\n\nconst DropdownItemIndicator = styled(ItemIndicator, {\n w: '$10',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n});\n\nexport const Dropdown = {\n Root: DropdownRoot,\n Trigger: DropdownTrigger,\n TriggerItem: DropdownTriggerItem,\n Content: DropdownContent,\n Portal: Portal,\n SubMenu: DropdownSubMenu,\n SubMenuContent: DropdownSubMenuContent,\n Item: DropdownItem,\n Label: DropdownLabel,\n Group: DropdownGroup,\n ItemSeparator: DropdownItemSeparator,\n CheckboxItem: DropdownCheckboxItem,\n ItemIndicator: DropdownItemIndicator,\n};\n", "export { StyledVideo, Video } from './Video';\n", "import React from 'react';\nimport type { VariantProps } from '@stitches/react';\nimport { HMSPeer, useVideo } from '@100mslive/react-sdk';\nimport { styled } from '../Theme';\n\nexport const StyledVideo = styled('video', {\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: '$2',\n objectFit: 'cover',\n background: '$tileBg',\n variants: {\n mirror: {\n true: {\n transform: 'scaleX(-1)',\n },\n },\n screenShare: {\n true: {\n objectFit: 'contain',\n },\n },\n degraded: {\n // send the video behind when it's degraded so avatar can show on top of it. Video will be stuck frame in this case.\n // not hiding by using display none, because it will lead it to be detached as it will no longer be in view.\n true: {\n zIndex: -100,\n },\n },\n noRadius: {\n true: {\n borderRadius: 0,\n },\n },\n },\n defaultVariants: {\n mirror: false,\n },\n});\n\ntype StyledProps = VariantProps<typeof StyledVideo> & React.ComponentProps<typeof StyledVideo>;\n\ninterface Props {\n /**\n * trackID for peer (videoTrack)\n */\n trackId: HMSPeer['videoTrack'];\n /**\n * Boolean stating whether to override the internal behaviour.\n * when attach is false, even if tile is inView or enabled, it won't be rendered\n */\n attach?: boolean;\n}\n\nexport const Video: React.FC<Props & StyledProps> = ({ trackId, attach, ...props }) => {\n const { videoRef } = useVideo({ trackId, attach });\n return <StyledVideo autoPlay muted playsInline controls={false} ref={videoRef} {...props} />;\n};\n", "export { StyledMenuTile } from './StyledMenuTile';\n", "import * as Popover from '@radix-ui/react-popover';\nimport { styled } from '../Theme';\nimport { popoverAnimation } from '../utils/animations';\nimport { flexCenter } from '../utils/styles';\n\nconst Root = Popover.Root;\n\nconst StyledTrigger = styled(Popover.Trigger, {\n position: 'absolute',\n bottom: '$2',\n right: '$2',\n zIndex: 10,\n width: '$13',\n height: '$13',\n color: '$textPrimary',\n borderRadius: '$round',\n backgroundColor: '$menuBg',\n border: 'none',\n ...flexCenter,\n '&:not([disabled]):focus': {\n outline: 'none',\n boxShadow: '0 0 0 3px $colors$brandLight',\n },\n});\n\nconst StyledContent = styled(Popover.Content, {\n fontFamily: '$sans',\n backgroundColor: '$menuBg',\n padding: '$5 0',\n display: 'flex',\n flexDirection: 'column',\n borderRadius: '$space$6',\n zIndex: 11,\n width: '$60',\n ...popoverAnimation,\n});\n\nconst styledItem = {\n fontSize: '$sm',\n color: '$textPrimary',\n display: 'flex',\n alignItems: 'center',\n padding: '$4 $6',\n width: '100%',\n backgroundColor: '$menuBg',\n};\n\nconst StyledItemButton = styled('button', {\n ...styledItem,\n height: '$14',\n '&:hover': {\n backgroundColor: '$grayDefault',\n },\n cursor: 'pointer',\n // TODO: default focus applied cause issues with this style\n '&:focus': {\n outline: 'none',\n // backgroundColor: '$grey3',\n },\n '& > * + *': {\n marginRight: '0',\n marginLeft: '$4',\n },\n});\n\nconst StyledVolumeItem = styled('div', {\n // TODO: maybe keep this as base comp and extend button variant\n ...styledItem,\n alignItems: 'start',\n flexDirection: 'column',\n marginBottom: '0',\n});\n\nexport const Flex = styled('div', {\n display: 'flex',\n '& > * + *': {\n marginRight: '0',\n marginLeft: '$4',\n },\n});\n\nconst RemoveMenuItem = styled(StyledItemButton, {\n color: '$error',\n borderTop: '1px solid $borderLight',\n});\n\ninterface MenuTileType {\n Root: typeof Root;\n Trigger: typeof StyledTrigger;\n Content: typeof StyledContent;\n ItemButton: typeof StyledItemButton;\n VolumeItem: typeof StyledVolumeItem;\n RemoveItem: typeof RemoveMenuItem;\n}\n\nexport const StyledMenuTile: MenuTileType = {\n Root,\n Trigger: StyledTrigger,\n Content: StyledContent,\n ItemButton: StyledItemButton,\n VolumeItem: StyledVolumeItem,\n RemoveItem: RemoveMenuItem,\n};\n", "export { useBorderAudioLevel } from './AudioLevel';\n", "import { useCallback, useRef } from 'react';\nimport { HMSTrackID } from '@100mslive/hms-video-store';\nimport { useAudioLevelStyles } from '@100mslive/react-sdk';\nimport { useTheme } from '../Theme';\n\n/**\n * pass in a track id and get a ref. That ref can be attached to an element which will have border\n * as per audio level post that.\n */\nexport function useBorderAudioLevel(audioTrackId?: HMSTrackID) {\n const { theme } = useTheme();\n const color = theme.colors.brandDefault.value;\n const getStyle = useCallback(\n (level: number) => {\n const style: Record<string, string> = {\n transition: 'outline 0.4s ease-in-out',\n };\n style['outline'] = level ? `${sigmoid(level) * 4}px solid ${color}` : '0px solid transparent';\n return style;\n },\n [color],\n );\n const ref = useRef(null);\n useAudioLevelStyles({\n trackId: audioTrackId,\n getStyle,\n ref,\n });\n return ref;\n}\n\nexport const sigmoid = (z: number) => {\n return 1 / (1 + Math.exp(-z));\n};\n", "import { Arrow, Content, Popover as Root, Portal, Trigger } from '@radix-ui/react-popover';\nimport { styled } from '../Theme';\nimport { popoverAnimation } from '../utils/animations';\n\nconst StyledContent = styled(Content, {\n padding: '$6',\n borderRadius: '$2',\n backgroundColor: '$bgSecondary',\n boxShadow: '$sm',\n zIndex: 12,\n ...popoverAnimation,\n});\n\nconst StyledArrow = styled(Arrow, {\n ...popoverAnimation,\n});\n\nconst StyledTrigger = styled(Trigger, {});\n\nexport const Popover = {\n Root,\n Content: StyledContent,\n Trigger: StyledTrigger,\n Portal: Portal,\n Arrow: StyledArrow,\n};\n", "export { VideoTileStats } from './Stats';\n", "import React, { Fragment } from 'react';\nimport {\n HMSPeerID,\n HMSTrackID,\n HMSTrackStats,\n RID,\n selectConnectionQualityByPeerID,\n selectHMSStats,\n simulcastMapping,\n useHMSStatsStore,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { Tooltip } from '../Tooltip';\nimport { formatBytes } from './formatBytes';\nimport { Stats } from './StyledStats';\n\nexport interface VideoTileStatsProps {\n videoTrackID?: HMSTrackID;\n audioTrackID?: HMSTrackID;\n peerID?: HMSPeerID;\n isLocal: boolean;\n}\n\n/**\n * This component can be used to overlay webrtc stats over the Video Tile. For the local tracks it also includes\n * remote inbound stats as sent by the SFU in receiver report.\n */\nexport function VideoTileStats({ videoTrackID, audioTrackID, peerID, isLocal = false }: VideoTileStatsProps) {\n const audioSelector = isLocal ? selectHMSStats.localAudioTrackStatsByID : selectHMSStats.trackStatsByID;\n const audioTrackStats = useHMSStatsStore(audioSelector(audioTrackID));\n const localVideoTrackStats = useHMSStatsStore(selectHMSStats.localVideoTrackStatsByID(videoTrackID));\n const remoteVideoTrackStats = useHMSStatsStore(selectHMSStats.trackStatsByID(videoTrackID));\n const videoTrackStats = isLocal ? localVideoTrackStats?.[0] : remoteVideoTrackStats;\n const downlinkScore = useHMSStore(selectConnectionQualityByPeerID(peerID))?.downlinkQuality;\n const availableOutgoingBitrate = useHMSStatsStore(selectHMSStats.availablePublishBitrate);\n\n // Viewer role - no stats to show\n if (!(audioTrackStats || videoTrackStats)) {\n return null;\n }\n return (\n <Stats.Root>\n <table>\n <tbody>\n {isLocal ? (\n <Fragment>\n <StatsRow\n show={isNotNullishAndNot0(availableOutgoingBitrate)}\n label=\"AOBR\"\n tooltip=\"Available Outgoing Bitrate\"\n value={formatBytes(availableOutgoingBitrate, 'b/s')}\n />\n {localVideoTrackStats?.map(stat => {\n if (!stat) {\n return null;\n }\n const layer = stat.rid ? simulcastMapping[stat.rid as RID] : '';\n return (\n <Fragment>\n {layer && <StatsRow label={layer.toUpperCase()} value=\"\" />}\n <StatsRow\n show={isNotNullishAndNot0(stat.frameWidth)}\n label=\"Width\"\n value={stat.frameWidth?.toString()}\n />\n <StatsRow\n show={isNotNullishAndNot0(stat.frameHeight)}\n label=\"Height\"\n value={stat.frameHeight?.toString()}\n />\n <StatsRow\n show={isNotNullishAndNot0(stat.framesPerSecond)}\n label=\"FPS\"\n value={`${stat.framesPerSecond} ${\n isNotNullishAndNot0(stat.framesDropped) ? `(${stat.framesDropped} dropped)` : ''\n }`}\n />\n <StatsRow\n show={isNotNullish(stat.bitrate)}\n label=\"Bitrate(V)\"\n value={formatBytes(stat.bitrate, 'b/s')}\n />\n <Stats.Gap />\n </Fragment>\n );\n })}\n </Fragment>\n ) : (\n <Fragment>\n <StatsRow\n show={isNotNullishAndNot0(videoTrackStats?.frameWidth)}\n label=\"Width\"\n value={videoTrackStats?.frameWidth?.toString()}\n />\n <StatsRow\n show={isNotNullishAndNot0(videoTrackStats?.frameHeight)}\n label=\"Height\"\n value={videoTrackStats?.frameHeight?.toString()}\n />\n <StatsRow\n show={isNotNullishAndNot0(videoTrackStats?.framesPerSecond)}\n label=\"FPS\"\n value={`${videoTrackStats?.framesPerSecond} ${\n isNotNullishAndNot0(videoTrackStats?.framesDropped)\n ? `(${videoTrackStats?.framesDropped} dropped)`\n : ''\n }`}\n />\n <StatsRow\n show={isNotNullish(videoTrackStats?.bitrate)}\n label=\"Bitrate(V)\"\n value={formatBytes(videoTrackStats?.bitrate, 'b/s')}\n />\n </Fragment>\n )}\n\n <StatsRow\n show={isNotNullish(audioTrackStats?.bitrate)}\n label=\"Bitrate(A)\"\n value={formatBytes(audioTrackStats?.bitrate, 'b/s')}\n />\n\n <StatsRow show={isNotNullish(downlinkScore)} label=\"Downlink\" value={`${downlinkScore}`} />\n\n <StatsRow show={isNotNullish(videoTrackStats?.codec)} label=\"Codec(V)\" value={videoTrackStats?.codec} />\n\n <StatsRow show={isNotNullish(audioTrackStats?.codec)} label=\"Codec(A)\" value={audioTrackStats?.codec} />\n\n <PacketLostAndJitter audioTrackStats={audioTrackStats} videoTrackStats={videoTrackStats} />\n </tbody>\n </table>\n </Stats.Root>\n );\n}\n\nconst PacketLostAndJitter = ({\n audioTrackStats,\n videoTrackStats,\n}: {\n audioTrackStats?: HMSTrackStats;\n videoTrackStats?: HMSTrackStats;\n}) => {\n // for local peer, we'll use the remote inbound stats to get packet loss and jitter, to know whether the track is\n // local we check if the stats type has outbound in it as it's being published from local. Both audio and video\n // tracks are checked in case the user has permission to publish only one of them.\n const isLocalPeer = audioTrackStats?.type.includes('outbound') || videoTrackStats?.type.includes('outbound');\n const audioStats = isLocalPeer ? audioTrackStats?.remote : audioTrackStats;\n const videoStats = isLocalPeer ? videoTrackStats?.remote : videoTrackStats;\n return (\n <>\n <TrackPacketsLostRow label=\"Packet Loss(V)\" stats={videoStats} />\n <TrackPacketsLostRow label=\"Packet Loss(A)\" stats={audioStats} />\n <StatsRow show={isNotNullish(videoStats?.jitter)} label=\"Jitter(V)\" value={videoStats?.jitter?.toFixed(4)} />\n <StatsRow show={isNotNullish(audioStats?.jitter)} label=\"Jitter(A)\" value={audioStats?.jitter?.toFixed(4)} />\n </>\n );\n};\n\nconst TrackPacketsLostRow = ({\n stats,\n label,\n}: {\n stats?: Pick<HMSTrackStats, 'packetsLost' | 'packetsLostRate'>;\n label: string;\n}) => {\n const packetsLostRate = `${stats?.packetsLostRate ? stats.packetsLostRate.toFixed(2) : 0}/s`;\n\n return (\n <StatsRow\n show={isNotNullishAndNot0(stats?.packetsLost)}\n label={label}\n value={`${stats?.packetsLost}(${packetsLostRate})`}\n />\n );\n};\n\nconst RawStatsRow = ({ label = '', value = '', tooltip = '', show = true }) => {\n const statsLabel = <Stats.Label css={{ fontWeight: !value ? '$semiBold' : '$regular' }}>{label}</Stats.Label>;\n\n return (\n <>\n {show ? (\n <Stats.Row>\n {tooltip ? (\n <Tooltip side=\"top\" title={tooltip}>\n {statsLabel}\n </Tooltip>\n ) : (\n statsLabel\n )}\n {value === '' ? <Stats.Value /> : <Stats.Value>{value}</Stats.Value>}\n </Stats.Row>\n ) : null}\n </>\n );\n};\n\n// memoize so only the rows which change rerender\nconst StatsRow = React.memo(RawStatsRow);\n\nexport function isNotNullishAndNot0(value: number | undefined | null) {\n return isNotNullish(value) && value !== 0;\n}\n\n/**\n * Check only for presence(not truthy) of a value.\n * Use in places where 0, false need to be considered valid.\n */\nexport function isNotNullish(value: number | string | undefined | null) {\n return value !== undefined && value !== null;\n}\n", "export const formatBytes = (bytes?: number, unit = 'B', decimals = 2) => {\n if (bytes === 0) {\n return `0 ${unit}`;\n }\n if (!bytes) {\n return '-';\n }\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'].map(size => size + unit);\n\n let i = Math.floor(Math.log(bytes) / Math.log(k));\n\n // B to KB\n i === 0 && i++;\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n};\n", "import { styled } from '../Theme';\n\nexport const Root = styled('div', {\n backgroundColor: '$statsBg',\n position: 'absolute',\n top: '$3',\n left: '$3',\n zIndex: 7,\n borderRadius: '$2',\n padding: '$2',\n fontSize: '$xs',\n overflowY: 'auto',\n maxHeight: '75%',\n maxWidth: '85%',\n});\n\nexport const Table = styled('table', {});\n\nexport const Row = styled('tr', {\n width: '100%',\n '& > * + *': {\n px: '$4',\n },\n whiteSpace: 'nowrap',\n textAlign: 'left',\n});\n\nexport const Label = styled('td', {\n color: '$textPrimary',\n fontWeight: '$regular',\n});\n\nexport const Value = styled('td', {\n color: '$textPrimary',\n});\n\nexport const Gap = styled('tr', {\n height: '$4',\n});\n\ninterface StatsType {\n Root: typeof Root;\n Row: typeof Row;\n Label: typeof Label;\n Value: typeof Value;\n Table: typeof Table;\n Gap: typeof Gap;\n}\n\nexport const Stats: StatsType = {\n Root,\n Row,\n Label,\n Value,\n Table,\n Gap,\n};\n", "import * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { styled } from '../Theme';\n\nconst CheckboxRoot = styled(CheckboxPrimitive.Root, {\n all: 'unset',\n border: '1px solid $brandDefault',\n backgroundColor: '$white',\n width: '$8',\n height: '$8',\n borderRadius: '$0',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: 'none',\n outline: 'none',\n cursor: 'pointer',\n '&:focus': {\n boxShadow: 'none',\n outline: 'none',\n },\n '&[data-state=\"checked\"]': {\n backgroundColor: '$brandDefault',\n },\n});\n\nconst CheckboxIndicator = styled(CheckboxPrimitive.Indicator, {\n color: '$white',\n});\n\nexport const Checkbox = {\n Root: CheckboxRoot,\n Indicator: CheckboxIndicator,\n};\n", "import * as LabelPrimitive from '@radix-ui/react-label';\nimport { styled } from '../Theme';\n\nexport const Label = styled(LabelPrimitive.Root, {\n fontFamily: '$sans',\n fontSize: '$md',\n color: '$textPrimary',\n});\n", "import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { styled } from '../Theme';\n\nconst RadioGroupRoot = styled(RadioGroupPrimitive.Root, {\n display: 'flex',\n alignItems: 'center',\n});\n\nconst RadioGroupItem = styled(RadioGroupPrimitive.Item, {\n bg: '$white',\n width: '$8',\n height: '$8',\n border: '1px solid $brandDefault',\n cursor: 'pointer',\n borderRadius: '$round',\n '&:focus': {\n boxShadow: 'none',\n outline: 'none',\n },\n '&[data-state=\"checked\"]': {\n borderWidth: '$space$2',\n p: '$1',\n },\n});\nconst RadioGroupIndicator = styled(RadioGroupPrimitive.Indicator, {\n bg: '$brandDefault',\n});\n\nexport const RadioGroup = {\n Root: RadioGroupRoot,\n Item: RadioGroupItem,\n Indicator: RadioGroupIndicator,\n};\n", "import React, { ComponentProps } from 'react';\nimport type { ToastProps } from '@radix-ui/react-toast';\nimport * as ToastPrimitives from '@radix-ui/react-toast';\nimport { CrossIcon } from '@100mslive/react-icons';\nimport { IconButton } from '../IconButton';\nimport { Box, Flex } from '../Layout';\nimport { Text } from '../Text';\nimport { styled } from '../Theme';\nimport { toastAnimation } from '../utils';\n\nconst getToastVariant = (base: string) => {\n return {\n borderLeftColor: base,\n borderLeft: 0,\n '&:before': {\n position: 'absolute',\n top: '-1px',\n left: '-$4',\n width: '$8',\n borderLeft: `solid $space$px ${base}`,\n borderTop: `solid $space$px ${base}`,\n borderBottom: `solid $space$px ${base}`,\n borderTopLeftRadius: '$3',\n borderBottomLeftRadius: '$3',\n bg: base,\n content: ' ',\n height: '100%',\n zIndex: 10,\n },\n '@sm': {\n '&:before': {\n content: 'none',\n },\n border: `solid $space$px ${base}`,\n },\n };\n};\n\nconst ToastRoot = styled(ToastPrimitives.Root, {\n r: '$3',\n bg: '$surfaceDefault',\n p: '$10',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n fontFamily: '$sans',\n border: 'solid $space$px $borderLight',\n overflow: 'hidden',\n ...toastAnimation,\n '@sm': {\n p: '$8 $11',\n },\n variants: {\n variant: {\n standard: getToastVariant('$secondaryDefault'),\n warning: getToastVariant('$warning'),\n error: getToastVariant('$error'),\n success: getToastVariant('$success'),\n },\n },\n defaultVariants: {\n variant: 'standard',\n },\n});\n\nconst ToastTitle = styled(ToastPrimitives.Title, {\n fontSize: '$md',\n color: '$textHighEmp',\n fontWeight: '$semiBold',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n});\nconst ToastDescription = styled(ToastPrimitives.Description, {\n color: '$textMedEmp',\n});\nconst ToastClose = styled(ToastPrimitives.Close, {});\nconst ToastAction = styled(ToastPrimitives.Action, {\n cursor: 'pointer',\n});\nconst ToastViewport = styled(ToastPrimitives.Viewport, {\n position: 'fixed',\n bottom: 0,\n left: 0,\n display: 'flex',\n flexDirection: 'column',\n padding: '$8',\n gap: 10,\n width: 390,\n '@sm': {\n width: '100%',\n padding: '$6',\n },\n maxWidth: '100vw',\n margin: 0,\n listStyle: 'none',\n zIndex: 1000,\n});\n\nconst DefaultClose = ({ css }: Pick<ComponentProps<typeof ToastClose>, 'css'>) => {\n return (\n <ToastClose css={css} asChild>\n <IconButton>\n <CrossIcon />\n </IconButton>\n </ToastClose>\n );\n};\n\ninterface HMSToastProps extends ToastProps {\n title: string;\n description?: string;\n isClosable?: boolean;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n inlineAction?: boolean;\n}\n\nconst HMSToast: React.FC<HMSToastProps> = ({\n title,\n description,\n isClosable = true,\n icon,\n action,\n inlineAction = false,\n ...props\n}) => {\n return (\n <>\n <ToastRoot {...props}>\n <ToastTitle>\n <Flex align=\"center\" css={{ gap: '$4', flex: '1 1 0', minWidth: 0 }}>\n {icon ? <Box css={{ w: '$10', h: '$10', alignSelf: 'start', mt: '$2' }}>{icon}</Box> : null}\n <Text variant=\"sub1\" css={{ c: 'inherit', wordBreak: 'break-word' }}>\n {title}\n </Text>\n </Flex>\n {isClosable ? <DefaultClose /> : null}\n {!isClosable && inlineAction && action ? (\n <ToastAction altText={`${title}Action`}>{action}</ToastAction>\n ) : null}\n </ToastTitle>\n {description ? (\n <ToastDescription>\n <Text variant=\"body1\" css={{ fontWeight: '$regular', c: '$textMedEmp' }}>\n {description}\n </Text>\n </ToastDescription>\n ) : null}\n {!inlineAction && action ? (\n <ToastAction altText={`${title}Action`} css={{ mt: '$10' }}>\n {action}\n </ToastAction>\n ) : null}\n </ToastRoot>\n </>\n );\n};\nexport const Toast = {\n Provider: ToastPrimitives.Provider,\n Root: ToastRoot,\n Title: ToastTitle,\n Description: ToastDescription,\n Close: DefaultClose,\n Action: ToastAction,\n Viewport: ToastViewport,\n HMSToast: HMSToast,\n};\n", "import { AccordionContent, AccordionHeader, AccordionItem, AccordionRoot } from './Accordion';\n\nexport const Accordion = {\n Root: AccordionRoot,\n Item: AccordionItem,\n Content: AccordionContent,\n Header: AccordionHeader,\n};\n", "import React, { PropsWithChildren } from 'react';\nimport * as BaseAccordion from '@radix-ui/react-accordion';\nimport { CSS } from '@stitches/react';\nimport { ChevronUpIcon } from '@100mslive/react-icons';\nimport { Box } from '../Layout';\nimport { styled } from '../Theme';\nimport { slideDown, slideUp } from '../utils';\n\nconst StyledAccordion = styled(BaseAccordion.Root, {});\n\nconst StyledItem = styled(BaseAccordion.Item, {\n marginTop: '$px',\n display: 'block',\n '&:first-child': {\n marginTop: 0,\n borderTopLeftRadius: '$0',\n borderTopRightRadius: '$0',\n },\n '&:last-child': {\n borderBottomLeftRadius: '$4',\n borderBottomRightRadius: '$4',\n },\n});\n\nconst StyledHeader = styled(BaseAccordion.Header, {\n all: 'unset',\n display: 'flex',\n fontFamily: '$sans',\n});\n\nconst StyledTrigger = styled(BaseAccordion.Trigger, {\n all: 'unset',\n fontFamily: '$sans',\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n fontSize: '$md',\n lineHeight: '$md',\n color: '$textHighEmp',\n});\n\nconst StyledContent = styled(BaseAccordion.Content, {\n display: 'contents',\n fontSize: '$md',\n fontFamily: '$sans',\n color: '$textMedEmp',\n '&[data-state=\"open\"]': {\n animation: `${slideDown('--radix-accordion-content-height')} 300ms cubic-bezier(0.87, 0, 0.13, 1) forwards`,\n },\n '&[data-state=\"closed\"]': {\n animation: `${slideUp('--radix-accordion-content-height')} 300ms cubic-bezier(0.87, 0, 0.13, 1) forwards`,\n },\n});\n\nconst StyledChevron = styled(ChevronUpIcon, {\n color: '$textPrimary',\n transition: 'transform 300ms cubic-bezier(0.87, 0, 0.13, 1)',\n '[data-state=closed] &': { transform: 'rotate(180deg)' },\n});\n\n// Exports\nexport const AccordionRoot = StyledAccordion;\nexport const AccordionItem = StyledItem;\n\nexport const AccordionHeader: React.FC<\n PropsWithChildren<BaseAccordion.AccordionTriggerProps & { iconStyles?: CSS; css?: CSS }>\n> = React.forwardRef<\n HTMLButtonElement,\n PropsWithChildren<BaseAccordion.AccordionTriggerProps & { iconStyles?: CSS; css?: CSS }>\n>(({ children, iconStyles, css, ...props }, forwardedRef) => (\n <StyledHeader css={css}>\n <StyledTrigger {...props} ref={forwardedRef}>\n {children}\n <StyledChevron aria-hidden css={iconStyles} />\n </StyledTrigger>\n </StyledHeader>\n));\n\nexport const AccordionContent: React.FC<\n PropsWithChildren<BaseAccordion.AccordionContentProps & { contentStyles?: CSS }>\n> = React.forwardRef<HTMLDivElement, PropsWithChildren<BaseAccordion.AccordionContentProps & { contentStyles?: CSS }>>(\n ({ children, contentStyles, ...props }, forwardedRef) => (\n <StyledContent {...props} ref={forwardedRef}>\n <Box css={contentStyles}>{children}</Box>\n </StyledContent>\n ),\n);\n", "import { styled } from '../Theme';\n\nconst StyledFieldset = styled('fieldset', {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n border: 'none',\n backgroundColor: '$transparent',\n});\n\nexport const Fieldset = StyledFieldset;\n", "export { Footer } from './Footer';\n", "import { Flex } from '../Layout';\nimport { styled } from '../Theme';\n\nconst Root = styled(Flex, {\n justifyContent: 'space-between',\n alignItems: 'center',\n py: '$4',\n position: 'relative',\n height: '100%',\n '@md': { flexWrap: 'wrap', gap: '$4' },\n});\n\nconst Left = styled(Flex, {\n alignItems: 'center',\n position: 'absolute',\n left: '$10',\n gap: '$8',\n '@md': {\n position: 'unset',\n justifyContent: 'center',\n w: '100%',\n },\n});\n\nconst Center = styled(Flex, {\n w: '100%',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '$8',\n});\n\nconst Right = styled(Flex, {\n alignItems: 'center',\n position: 'absolute',\n right: '$10',\n gap: '$8',\n '@md': {\n display: 'none',\n },\n});\n\nexport const Footer = {\n Root,\n Left,\n Center,\n Right,\n};\n", "export { Select } from './ReactSelect';\n", "import * as SelectPrimitive from '@radix-ui/react-select';\nimport { styled } from '../Theme';\n\nconst StyledRoot = styled(SelectPrimitive.Root, {});\n\nconst StyledTrigger = styled(SelectPrimitive.SelectTrigger, {\n all: 'unset',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '$2',\n padding: '$8',\n lineHeight: '$px',\n gap: '$8',\n backgroundColor: '$secondaryDefault',\n color: '$white',\n fontSize: '$8',\n cursor: 'pointer',\n r: '$1',\n});\n\nconst StyledContent = styled(SelectPrimitive.Content, {\n overflow: 'hidden',\n backgroundColor: '$surfaceLight',\n r: '$1',\n h: '$80',\n});\n\nconst StyledViewport = styled(SelectPrimitive.Viewport, {\n padding: '$3',\n});\n\nconst StyledItem = styled(SelectPrimitive.Item, {\n all: 'unset',\n fontSize: '$7',\n r: '$1',\n display: 'flex',\n p: '$4 $8',\n w: '$52',\n position: 'relative',\n userSelect: 'none',\n cursor: 'pointer',\n});\n\nconst StyledLabel = styled(SelectPrimitive.Label, {\n p: '$4 $8',\n lineHeight: '$10',\n color: '$white',\n});\n\nconst StyledSeparator = styled(SelectPrimitive.Separator, {\n height: '$px',\n backgroundColor: '$white',\n margin: '$4',\n opacity: 0.4,\n});\n\nconst StyledItemIndicator = styled(SelectPrimitive.ItemIndicator, {\n position: 'absolute',\n right: '$8',\n width: '$8',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '$white',\n});\n\nconst scrollButtonStyles = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n p: '$4',\n backgroundColor: '$surfaceLight',\n color: '$white',\n cursor: 'default',\n};\n\nconst StyledScrollUpButton = styled(SelectPrimitive.ScrollUpButton, scrollButtonStyles);\n\nconst StyledScrollDownButton = styled(SelectPrimitive.ScrollDownButton, scrollButtonStyles);\n\nexport const Select = {\n Root: StyledRoot,\n Trigger: StyledTrigger,\n Content: StyledContent,\n Viewport: StyledViewport,\n Item: StyledItem,\n Label: StyledLabel,\n Separator: StyledSeparator,\n ItemIndicator: StyledItemIndicator,\n ScrollUpButton: StyledScrollUpButton,\n ScrollDownButton: StyledScrollDownButton,\n Value: SelectPrimitive.Value,\n Icon: SelectPrimitive.Icon,\n ItemText: SelectPrimitive.ItemText,\n Group: SelectPrimitive.Group,\n};\n", "import * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { styled } from '../Theme';\n\nconst StyledTabsRoot = styled(TabsPrimitive.Root, {\n display: 'flex',\n});\n\nconst StyledList = styled(TabsPrimitive.List, {\n flexShrink: 0,\n display: 'flex',\n});\n\nconst StyledTrigger = styled(TabsPrimitive.Trigger, {\n all: 'unset',\n fontFamily: '$sans',\n p: '$8',\n display: 'flex',\n alignItems: 'center',\n fontSize: '$sm',\n lineHeight: '$sm',\n color: '$textHighEmp',\n userSelect: 'none',\n cursor: 'pointer',\n '&[data-state=\"active\"]': {\n bg: '$surfaceLighter',\n r: '$1',\n },\n});\n\nconst StyledContent = styled(TabsPrimitive.Content, {\n flex: '1 1 0',\n padding: '$10',\n outline: 'none',\n});\n\nexport const Tabs = {\n Root: StyledTabsRoot,\n List: StyledList,\n Content: StyledContent,\n Trigger: StyledTrigger,\n};\n", "import React, { ComponentProps } from 'react';\nimport { QRCodeSVG } from 'qrcode.react';\n\nexport const QRCode = (props: ComponentProps<typeof QRCodeSVG>) => {\n return <QRCodeSVG style={{ width: '100%', height: '100%' }} {...props} />;\n};\n", "export { Link } from './Link';\nexport type { LinkProps } from './Link';\n", "import React from 'react';\nimport * as icons from '@100mslive/react-icons';\nimport { Flex } from '../Layout';\nimport { Text } from '../Text';\nimport { styled } from '../Theme';\n\nconst LinkComponent = styled('a', {\n textDecoration: 'none',\n display: 'flex',\n alignItems: 'center',\n gap: '$5',\n variants: {\n color: {\n highEmp: {\n color: '$textHighEmp',\n '&:hover': {\n color: '$textMedEmp',\n },\n },\n primary: {\n color: '$primaryLight',\n '&:hover': {\n color: '$primaryDefault',\n },\n },\n },\n },\n});\n\nexport interface LinkProps extends React.ComponentProps<typeof LinkComponent> {\n as?: React.ElementType;\n iconSide?: 'left' | 'right' | 'none';\n icon?: keyof typeof icons;\n color?: 'highEmp' | 'primary';\n}\n\nexport const Link = ({ iconSide = 'left', icon, color = 'primary', children, ...rest }: LinkProps) => {\n const Icon = icon ? icons[icon] : React.Fragment;\n const renderedIcon = icon ? (\n <Flex as=\"span\">\n <Icon height={13.33} width={13.33} />{' '}\n </Flex>\n ) : null;\n\n return (\n <LinkComponent {...rest} color={color}>\n {iconSide === 'left' && renderedIcon}\n <Text as=\"span\" variant=\"body2\" css={{ color: 'inherit' }}>\n {children}\n </Text>\n {iconSide === 'right' && renderedIcon}\n </LinkComponent>\n );\n};\n", "import { Content, Root, Trigger } from '@radix-ui/react-collapsible';\nimport { styled } from '../Theme';\nimport { slideDown, slideUp } from '../utils';\n\nconst CollapsibleRoot = styled(Root, {});\n\nconst CollapsibleTrigger = styled(Trigger, {\n cursor: 'pointer',\n appearance: 'none !important',\n '&:focus': {\n outline: 'none',\n },\n '&:focus-visible': {\n boxShadow: '0 0 0 3px $colors$primaryDefault',\n },\n});\n\nconst CollapsibleContent = styled(Content, {\n w: '$80',\n r: '$1',\n overflowY: 'auto',\n '&[data-state=\"open\"]': {\n animation: `${slideDown('--radix-collapsible-content-height')} 300ms cubic-bezier(0.87, 0, 0.13, 1) forwards`,\n },\n '&[data-state=\"closed\"]': {\n animation: `${slideUp('--radix-collapsible-content-height')} 300ms cubic-bezier(0.87, 0, 0.13, 1) forwards`,\n },\n});\n\nexport const Collapsible = {\n Root: CollapsibleRoot,\n Trigger: CollapsibleTrigger,\n Content: CollapsibleContent,\n};\n", "import { HMSPrebuilt } from './App.jsx';\nexport { HMSPrebuilt };\n", "import React, { Suspense, useEffect } from 'react';\nimport { BrowserRouter, MemoryRouter, Navigate, Route, Routes, useParams } from 'react-router-dom';\nimport { HMSRoomProvider, selectIsConnectedToRoom, useHMSActions, useHMSStore } from '@100mslive/react-sdk';\nimport { AppData } from './components/AppData/AppData';\nimport { BeamSpeakerLabelsLogging } from './components/AudioLevel/BeamSpeakerLabelsLogging';\nimport AuthToken from './components/AuthToken';\nimport { ErrorBoundary } from './components/ErrorBoundary';\nimport FullPageProgress from './components/FullPageProgress';\nimport { Init } from './components/init/Init';\nimport { KeyboardHandler } from './components/Input/KeyboardInputManager';\nimport { Notifications } from './components/Notifications';\nimport PostLeave from './components/PostLeave';\nimport PreviewContainer from './components/Preview/PreviewContainer';\nimport { ToastContainer } from './components/Toast/ToastContainer';\nimport { Box } from '../Layout';\nimport { globalStyles, HMSThemeProvider } from '../Theme';\nimport { HMSPrebuiltContext, useHMSPrebuiltContext } from './AppContext';\nimport { hmsActions, hmsNotifications, hmsStats, hmsStore } from './hms.js';\nimport { Confetti } from './plugins/confetti';\nimport { FlyingEmoji } from './plugins/FlyingEmoji';\nimport { RemoteStopScreenshare } from './plugins/RemoteStopScreenshare';\nimport { getRoutePrefix, shadeColor } from './common/utils';\nimport { FeatureFlags } from './services/FeatureFlags';\n\nconst Conference = React.lazy(() => import('./components/conference'));\n\n// TODO: remove now that there are options to change to portrait\nconst getAspectRatio = ({ width, height }) => {\n const host = process.env.REACT_APP_HOST_NAME;\n const portraitDomains = (process.env.REACT_APP_PORTRAIT_MODE_DOMAINS || '').split(',');\n if (portraitDomains.includes(host) && width > height) {\n return { width: height, height: width };\n }\n return { width, height };\n};\n\nexport const HMSPrebuilt = React.forwardRef(\n (\n {\n roomCode = '',\n logo: { url: logoUrl = '' } = {},\n options: {\n userName = '',\n userId = '',\n endPoints: { init: initEndpoint = '', tokenByRoomCode = '', tokenByRoomIdRole = '' } = {},\n } = {},\n onLeave,\n },\n ref,\n ) => {\n const aspectRatio = '1-1';\n const color = '#2F80FF';\n const theme = 'dark';\n const metadata = '';\n const recordingUrl = '';\n const { 0: width, 1: height } = aspectRatio.split('-').map(el => parseInt(el));\n\n const [hyderated, setHyderated] = React.useState(false);\n useEffect(() => setHyderated(true), []);\n useEffect(() => {\n if (!ref) {\n return;\n }\n ref.current = {\n hmsActions,\n hmsStats,\n hmsStore,\n hmsNotifications,\n };\n }, [ref]);\n\n // leave room when component unmounts\n useEffect(\n () => () => {\n return hmsActions.leave();\n },\n [],\n );\n\n const endPoints = {\n tokenByRoomCode,\n init: initEndpoint,\n tokenByRoomIdRole,\n };\n\n if (!hyderated) {\n return null;\n }\n\n globalStyles();\n\n return (\n <ErrorBoundary>\n <HMSPrebuiltContext.Provider\n value={{\n roomId: '',\n role: '',\n roomCode,\n showPreview: true,\n showLeave: true,\n onLeave,\n userName,\n userId,\n endPoints,\n }}\n >\n <HMSThemeProvider\n themeType={theme}\n aspectRatio={getAspectRatio({ width, height })}\n theme={{\n colors: {\n brandDefault: color,\n brandDark: shadeColor(color, -30),\n brandLight: shadeColor(color, 30),\n brandDisabled: shadeColor(color, 10),\n },\n fonts: {\n sans: ['Roboto', 'Inter', 'sans-serif'],\n },\n }}\n >\n <HMSRoomProvider\n isHMSStatsOn={FeatureFlags.enableStatsForNerds}\n actions={hmsActions}\n store={hmsStore}\n notifications={hmsNotifications}\n stats={hmsStats}\n >\n <AppData\n appDetails={metadata}\n recordingUrl={recordingUrl}\n logo={logoUrl}\n tokenEndpoint={endPoints.tokenByRoomIdRole}\n />\n <Init />\n <Box\n css={{\n bg: '$mainBg',\n size: '100%',\n lineHeight: '1.5',\n '-webkit-text-size-adjust': '100%',\n }}\n >\n <AppRoutes authTokenByRoomCodeEndpoint={endPoints.tokenByRoomCode} />\n </Box>\n </HMSRoomProvider>\n </HMSThemeProvider>\n </HMSPrebuiltContext.Provider>\n </ErrorBoundary>\n );\n },\n);\n\nHMSPrebuilt.displayName = 'HMSPrebuilt';\n\nconst Redirector = ({ showPreview }) => {\n const { roomId, role } = useParams();\n\n if (!roomId && !role) {\n return <Navigate to=\"/\" />;\n }\n if (!roomId) {\n return <Navigate to=\"/\" />;\n }\n if (['streaming', 'preview', 'meeting', 'leave'].includes(roomId) && !role) {\n return <Navigate to=\"/\" />;\n }\n\n return <Navigate to={`${getRoutePrefix()}/${showPreview ? 'preview' : 'meeting'}/${roomId}/${role || ''}`} />;\n};\n\nconst RouteList = () => {\n const { showPreview, showLeave } = useHMSPrebuiltContext();\n\n return (\n <Routes>\n {showPreview && (\n <Route path=\"preview\">\n <Route\n path=\":roomId/:role\"\n element={\n <Suspense fallback={<FullPageProgress />}>\n <PreviewContainer />\n </Suspense>\n }\n />\n <Route\n path=\":roomId\"\n element={\n <Suspense fallback={<FullPageProgress />}>\n <PreviewContainer />\n </Suspense>\n }\n />\n </Route>\n )}\n <Route path=\"meeting\">\n <Route\n path=\":roomId/:role\"\n element={\n <Suspense fallback={<FullPageProgress />}>\n <Conference />\n </Suspense>\n }\n />\n <Route\n path=\":roomId\"\n element={\n <Suspense fallback={<FullPageProgress />}>\n <Conference />\n </Suspense>\n }\n />\n </Route>\n {showLeave && (\n <Route path=\"leave\">\n <Route path=\":roomId/:role\" element={<PostLeave />} />\n <Route path=\":roomId\" element={<PostLeave />} />\n </Route>\n )}\n <Route path=\"/:roomId/:role\" element={<Redirector showPreview={showPreview} />} />\n <Route path=\"/:roomId/\" element={<Redirector showPreview={showPreview} />} />\n </Routes>\n );\n};\n\nconst BackSwipe = () => {\n const isConnectedToRoom = useHMSStore(selectIsConnectedToRoom);\n const hmsActions = useHMSActions();\n useEffect(() => {\n const onRouteLeave = async () => {\n if (isConnectedToRoom) {\n await hmsActions.leave();\n }\n };\n window.addEventListener('popstate', onRouteLeave);\n return () => {\n window.removeEventListener('popstate', onRouteLeave);\n };\n }, [hmsActions, isConnectedToRoom]);\n return null;\n};\n\nconst Router = ({ children }) => {\n const { roomId, role, roomCode } = useHMSPrebuiltContext();\n return [roomId, role, roomCode].every(value => !value) ? (\n <BrowserRouter>{children}</BrowserRouter>\n ) : (\n <MemoryRouter initialEntries={[`/${roomCode ? roomCode : `${roomId}/${role || ''}`}`]} initialIndex={0}>\n {children}\n </MemoryRouter>\n );\n};\n\nfunction AppRoutes({ authTokenByRoomCodeEndpoint }) {\n return (\n <Router>\n <ToastContainer />\n <Notifications />\n <BackSwipe />\n <Confetti />\n <FlyingEmoji />\n <RemoteStopScreenshare />\n <KeyboardHandler />\n <BeamSpeakerLabelsLogging />\n <AuthToken authTokenByRoomCodeEndpoint={authTokenByRoomCodeEndpoint} />\n <Routes>\n <Route path=\"/*\" element={<RouteList />} />\n <Route path=\"/streaming/*\" element={<RouteList />} />\n </Routes>\n </Router>\n );\n}\n", "import React, { useEffect } from 'react';\nimport { useSearchParam } from 'react-use';\nimport {\n HMSRoomState,\n selectAvailableRoleNames,\n selectHLSState,\n selectIsConnectedToRoom,\n selectLocalPeerRoleName,\n selectRolesMap,\n selectRoomState,\n selectRTMPState,\n useHMSActions,\n useHMSStore,\n useRecordingStreaming,\n} from '@100mslive/react-sdk';\nimport { normalizeAppPolicyConfig } from '../init/initUtils';\nimport { UserPreferencesKeys, useUserPreferences } from '../hooks/useUserPreferences';\nimport { useIsSidepaneTypeOpen, useSidepaneReset, useSidepaneState, useSidepaneToggle } from './useSidepane';\nimport { useSetAppDataByKey } from './useUISettings';\nimport { getMetadata } from '../../common/utils';\nimport {\n APP_DATA,\n CHAT_SELECTOR,\n DEFAULT_HLS_ROLE_KEY,\n DEFAULT_HLS_VIEWER_ROLE,\n DEFAULT_WAITING_VIEWER_ROLE,\n QUERY_PARAM_VIEW_MODE,\n SIDE_PANE_OPTIONS,\n UI_MODE_ACTIVE_SPEAKER,\n UI_MODE_GRID,\n UI_SETTINGS,\n} from '../../common/constants';\n\nexport const getAppDetails = appDetails => {\n try {\n return !appDetails ? {} : JSON.parse(appDetails);\n } catch (error) {\n return {};\n }\n};\n\nconst initialAppData = {\n [APP_DATA.uiSettings]: {\n [UI_SETTINGS.isAudioOnly]: false,\n [UI_SETTINGS.isHeadless]: false,\n [UI_SETTINGS.maxTileCount]: 9,\n [UI_SETTINGS.showStatsOnTiles]: false,\n [UI_SETTINGS.enableAmbientMusic]: false,\n [UI_SETTINGS.uiViewMode]: UI_MODE_GRID,\n [UI_SETTINGS.mirrorLocalVideo]: true,\n [UI_SETTINGS.activeSpeakerSorting]: process.env.REACT_APP_ENV === 'qa',\n [UI_SETTINGS.hideLocalVideo]: false,\n },\n [APP_DATA.subscribedNotifications]: {\n PEER_JOINED: false,\n PEER_LEFT: false,\n NEW_MESSAGE: true,\n ERROR: true,\n METADATA_UPDATED: true,\n },\n [APP_DATA.chatOpen]: false,\n [APP_DATA.chatSelector]: {\n [CHAT_SELECTOR.ROLE]: '',\n [CHAT_SELECTOR.PEER_ID]: '',\n },\n [APP_DATA.chatDraft]: '',\n [APP_DATA.sidePane]: '',\n [APP_DATA.hlsStarted]: false,\n [APP_DATA.rtmpStarted]: false,\n [APP_DATA.recordingStarted]: false,\n [APP_DATA.hlsViewerRole]: DEFAULT_HLS_VIEWER_ROLE,\n [APP_DATA.waitingViewerRole]: DEFAULT_WAITING_VIEWER_ROLE,\n [APP_DATA.dropdownList]: [],\n [APP_DATA.authToken]: '',\n};\n\nexport const AppData = React.memo(({ appDetails, logo, recordingUrl, tokenEndpoint }) => {\n const hmsActions = useHMSActions();\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const sidePane = useSidepaneState();\n const resetSidePane = useSidepaneReset();\n const [preferences = {}] = useUserPreferences(UserPreferencesKeys.UI_SETTINGS);\n const roleNames = useHMSStore(selectAvailableRoleNames);\n const rolesMap = useHMSStore(selectRolesMap);\n const localPeerRole = useHMSStore(selectLocalPeerRoleName);\n const isDefaultModeActiveSpeaker = useSearchParam(QUERY_PARAM_VIEW_MODE) === UI_MODE_ACTIVE_SPEAKER;\n\n useEffect(() => {\n if (!isConnected && sidePane && sidePane !== SIDE_PANE_OPTIONS.PARTICIPANTS) {\n resetSidePane();\n }\n }, [isConnected, sidePane, resetSidePane]);\n\n useEffect(() => {\n hmsActions.initAppData(initialAppData);\n }, [hmsActions]);\n\n useEffect(() => {\n const uiSettings = preferences || {};\n const updatedSettings = {\n ...uiSettings,\n [UI_SETTINGS.uiViewMode]: isDefaultModeActiveSpeaker\n ? UI_MODE_ACTIVE_SPEAKER\n : uiSettings.uiViewMode || UI_MODE_GRID,\n };\n hmsActions.setAppData(APP_DATA.uiSettings, updatedSettings, true);\n }, [preferences, isDefaultModeActiveSpeaker, hmsActions]);\n\n useEffect(() => {\n const appData = {\n [APP_DATA.recordingUrl]: recordingUrl,\n [APP_DATA.tokenEndpoint]: tokenEndpoint,\n [APP_DATA.logo]: logo,\n [APP_DATA.hlsViewerRole]: getMetadata(appDetails)[DEFAULT_HLS_ROLE_KEY] || DEFAULT_HLS_VIEWER_ROLE,\n [APP_DATA.appConfig]: getAppDetails(appDetails),\n };\n for (const key in appData) {\n hmsActions.setAppData([key], appData[key]);\n }\n }, [appDetails, logo, recordingUrl, tokenEndpoint, hmsActions]);\n\n useEffect(() => {\n if (!preferences.subscribedNotifications) {\n return;\n }\n hmsActions.setAppData(APP_DATA.subscribedNotifications, preferences.subscribedNotifications, true);\n }, [preferences.subscribedNotifications, hmsActions]);\n\n useEffect(() => {\n if (localPeerRole) {\n const config = normalizeAppPolicyConfig(roleNames, rolesMap);\n hmsActions.setAppData(APP_DATA.appLayout, config[localPeerRole]);\n }\n }, [roleNames, rolesMap, localPeerRole, hmsActions]);\n\n return <ResetStreamingStart />;\n});\n\n/**\n * reset hlsStarted, rtmpStarted values when streaming starts\n */\nconst ResetStreamingStart = () => {\n const { isHLSRunning, isRTMPRunning, isBrowserRecordingOn } = useRecordingStreaming();\n const hlsError = useHMSStore(selectHLSState).error;\n const rtmpError = useHMSStore(selectRTMPState).error;\n const roomState = useHMSStore(selectRoomState);\n const [hlsStarted, setHLSStarted] = useSetAppDataByKey(APP_DATA.hlsStarted);\n const [recordingStarted, setRecordingStarted] = useSetAppDataByKey(APP_DATA.recordingStarted);\n const [rtmpStarted, setRTMPStarted] = useSetAppDataByKey(APP_DATA.rtmpStarted);\n const toggleStreaming = useSidepaneToggle(SIDE_PANE_OPTIONS.STREAMING);\n const isStreamingOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.STREAMING);\n\n useEffect(() => {\n if (isBrowserRecordingOn && recordingStarted) {\n setRecordingStarted(false);\n }\n }, [isBrowserRecordingOn, recordingStarted, setRecordingStarted]);\n /**\n * Reset on leave\n */\n useEffect(() => {\n if (roomState === HMSRoomState.Disconnected) {\n setHLSStarted(false);\n setRecordingStarted(false);\n setRTMPStarted(false);\n }\n }, [roomState, setHLSStarted, setRTMPStarted, setRecordingStarted]);\n useEffect(() => {\n if (isHLSRunning || hlsError) {\n if (hlsStarted) {\n setHLSStarted(false);\n if (isStreamingOpen) {\n toggleStreaming();\n }\n }\n }\n }, [isHLSRunning, hlsStarted, setHLSStarted, hlsError, isStreamingOpen, toggleStreaming]);\n useEffect(() => {\n if (isRTMPRunning || rtmpError || isBrowserRecordingOn) {\n if (rtmpStarted) {\n setRTMPStarted(false);\n if (isStreamingOpen) {\n toggleStreaming();\n }\n }\n }\n }, [isRTMPRunning, setRTMPStarted, rtmpStarted, rtmpError, isBrowserRecordingOn, isStreamingOpen, toggleStreaming]);\n return null;\n};\n", "import { identify } from 'zipyai';\n\nconst zipyKey = process.env.REACT_APP_ZIPY_KEY;\nexport const setUpZipy = ({ localPeer, roomId, sessionId }) => {\n if (!zipyKey) {\n return;\n }\n\n let domain;\n if (typeof window !== 'undefined') {\n domain = window.location.hostname;\n }\n\n identify(localPeer.id, {\n firstName: localPeer.name,\n customerName: domain,\n email: domain,\n role: localPeer.roleName,\n sessionId,\n roomId,\n });\n};\n\n// interface RoleConfig {\n// center?: HMSRoleName[];\n// sidepane?: HMSRoleName[];\n// selfRoleChangeTo?: HMSRoleName[];\n// remoteRoleChangeFor?: HMSRoleName[];\n// }\n\n// interface PolicyConfig {\n// [role: string]: RoleConfig;\n// }\n\n/**\n * check if a role is allowed to publish either of audio or video\n */\nfunction canPublishAV(role) {\n const params = role?.publishParams;\n if (params?.allowed) {\n return params.allowed.includes('video') || params.allowed.includes('audio');\n }\n return false;\n}\n\n/**\n * Figure out the layout for each role. There is some extra work being done\n * here currently to figure out the layout for roles other than local peer too\n * which can be avoided.\n */\nexport const normalizeAppPolicyConfig = (roleNames, rolesMap, appPolicyConfig = {}) => {\n const newConfig = Object.assign({}, appPolicyConfig);\n // eslint-disable-next-line complexity\n roleNames.forEach(roleName => {\n if (!newConfig[roleName]) {\n newConfig[roleName] = {};\n }\n const subscribedRoles = rolesMap[roleName].subscribeParams?.subscribeToRoles || [];\n\n const isNotSubscribingOrSubscribingToSelf =\n subscribedRoles.length === 0 || (subscribedRoles.length === 1 && subscribedRoles[0] === roleName);\n if (!newConfig[roleName].center) {\n const publishingRoleNames = roleNames.filter(\n roleName => canPublishAV(rolesMap[roleName]) && subscribedRoles.includes(roleName),\n );\n if (isNotSubscribingOrSubscribingToSelf) {\n newConfig[roleName].center = [roleName];\n } else {\n // all other publishing roles apart from local role in center by default\n newConfig[roleName].center = publishingRoleNames.filter(rName => rName !== roleName);\n }\n }\n // everyone from my role is in sidepane by default if they can publish\n if (!newConfig[roleName].sidepane) {\n if (isNotSubscribingOrSubscribingToSelf) {\n newConfig[roleName].sidepane = [];\n } else {\n newConfig[roleName].sidepane = canPublishAV(rolesMap[roleName]) ? [roleName] : [];\n }\n }\n if (!newConfig[roleName].selfRoleChangeTo) {\n newConfig[roleName].selfRoleChangeTo = roleNames;\n }\n if (!newConfig[roleName].remoteRoleChangeFor) {\n newConfig[roleName].remoteRoleChangeFor = roleNames;\n }\n });\n\n return newConfig;\n};\n", "import { useState } from 'react';\nimport { useLocalStorage } from 'react-use';\n\nexport const UserPreferencesKeys = {\n PREVIEW: 'preview',\n NOTIFICATIONS: 'notifications',\n UI_SETTINGS: 'uiSettings',\n RTMP_URLS: 'rtmpUrls',\n};\n\nexport const defaultPreviewPreference = {\n name: '',\n isAudioMuted: false,\n isVideoMuted: false,\n};\n\nexport const useUserPreferences = (key, defaultPreference) => {\n const [localStorageValue, setStorageValue] = useLocalStorage(key, defaultPreference);\n const [preference, setPreference] = useState(localStorageValue || defaultPreference);\n const changePreference = value => {\n setPreference(value);\n setStorageValue(value);\n };\n return [preference, changePreference];\n};\n", "import { useCallback } from 'react';\nimport { selectAppData, useHMSActions, useHMSStore, useHMSVanillaStore } from '@100mslive/react-sdk';\nimport { APP_DATA } from '../../common/constants';\n\n/**\n * Gives a boolean value if the sidepaneType matches current sidepane value in store\n * @param {string} sidepaneType\n * @returns {boolean} - if the sidepaneType is passed returns boolean else the current value\n */\nexport const useIsSidepaneTypeOpen = sidepaneType => {\n if (!sidepaneType) {\n throw Error('Pass one of the side pane options');\n }\n return useHMSStore(selectAppData(APP_DATA.sidePane)) === sidepaneType;\n};\n\n/**\n * Gives the current value of sidepane in store\n * @returns {string} - if the sidepaneType is passed returns boolean else the current value\n */\nexport const useSidepaneState = () => {\n const sidePane = useHMSStore(selectAppData(APP_DATA.sidePane));\n return sidePane;\n};\n\n/**\n * Toggle the sidepane value between passed sidePaneType and '';\n * @param {string} sidepaneType\n */\nexport const useSidepaneToggle = sidepaneType => {\n const hmsActions = useHMSActions();\n const vanillaStore = useHMSVanillaStore();\n const toggleSidepane = useCallback(() => {\n const isOpen = vanillaStore.getState(selectAppData(APP_DATA.sidePane)) === sidepaneType;\n hmsActions.setAppData(APP_DATA.sidePane, !isOpen ? sidepaneType : '');\n }, [vanillaStore, hmsActions, sidepaneType]);\n return toggleSidepane;\n};\n\n/**\n * reset's the sidepane value\n */\nexport const useSidepaneReset = () => {\n const hmsActions = useHMSActions();\n const resetSidepane = useCallback(() => {\n hmsActions.setAppData(APP_DATA.sidePane, '');\n }, [hmsActions]);\n return resetSidepane;\n};\n", "import { useCallback } from 'react';\nimport {\n selectAppData,\n selectAppDataByPath,\n selectSessionStore,\n selectTrackByID,\n useHMSActions,\n useHMSStore,\n useHMSVanillaStore,\n} from '@100mslive/react-sdk';\nimport { UserPreferencesKeys, useUserPreferences } from '../hooks/useUserPreferences';\nimport { APP_DATA, SESSION_STORE_KEY, UI_SETTINGS } from '../../common/constants';\n\n/**\n * fields saved related to UI settings in store's app data can be\n * accessed using this hook. key is optional if not passed\n * the whole UI settings object is returned. Usage -\n * 1. val = useUiSettings(\"isAudioOnly\");\n * console.log(val); // false\n * 2. val = useUISettings();\n * console.log(val); // {isAudioOnly: false}\n * @param {string | undefined} uiSettingKey\n */\nexport const useUISettings = uiSettingKey => {\n const uiSettings = useHMSStore(selectAppDataByPath(APP_DATA.uiSettings, uiSettingKey));\n return uiSettings;\n};\n\n/**\n * fields saved related to UI settings in store's app data can be\n * accessed using this hook. key is optional if not passed\n * the whole UI settings object is returned. Usage -\n * [val, setVal] = useUiSettings(\"isAudioOnly\");\n * console.log(val); // false\n * setVal(true);\n * @param {string} uiSettingKey\n */\nexport const useSetUiSettings = uiSettingKey => {\n const value = useUISettings(uiSettingKey);\n const setValue = useSetAppData({\n key1: APP_DATA.uiSettings,\n key2: uiSettingKey,\n });\n return [value, setValue];\n};\n\nexport const useIsHeadless = () => {\n const isHeadless = useUISettings(UI_SETTINGS.isHeadless);\n return isHeadless;\n};\n\nexport const useActiveSpeakerSorting = () => {\n const activeSpeakerSorting = useUISettings(UI_SETTINGS.activeSpeakerSorting);\n return activeSpeakerSorting;\n};\n\nexport const useHLSViewerRole = () => {\n return useHMSStore(selectAppData(APP_DATA.hlsViewerRole));\n};\n\nexport const useWaitingViewerRole = () => {\n return useHMSStore(selectAppData(APP_DATA.waitingViewerRole));\n};\nexport const useIsHLSStartedFromUI = () => {\n return useHMSStore(selectAppData(APP_DATA.hlsStarted));\n};\n\nexport const useIsRTMPStartedFromUI = () => {\n return useHMSStore(selectAppData(APP_DATA.rtmpStarted));\n};\n\nexport const useTokenEndpoint = () => {\n return useHMSStore(selectAppData(APP_DATA.tokenEndpoint));\n};\n\nexport const useAuthToken = () => {\n return useHMSStore(selectAppData(APP_DATA.authToken));\n};\n\nexport const useLogo = () => {\n return useHMSStore(selectAppData(APP_DATA.logo));\n};\n\nexport const useUrlToEmbed = () => {\n return useHMSStore(selectAppData(APP_DATA.embedConfig))?.url;\n};\n\nexport const usePDFAnnotator = () => {\n return useHMSStore(selectAppData(APP_DATA.pdfConfig))?.state;\n};\nexport const usePinnedTrack = () => {\n const pinnedTrackId = useHMSStore(selectAppData(APP_DATA.pinnedTrackId));\n const spotlightTrackId = useHMSStore(selectSessionStore(SESSION_STORE_KEY.SPOTLIGHT));\n return useHMSStore(selectTrackByID(pinnedTrackId || spotlightTrackId));\n};\n\nexport const useSubscribedNotifications = notificationKey => {\n const notificationPreference = useHMSStore(selectAppDataByPath(APP_DATA.subscribedNotifications, notificationKey));\n return notificationPreference;\n};\n\nexport const useSetSubscribedNotifications = notificationKey => {\n const value = useSubscribedNotifications(notificationKey);\n const setValue = useSetAppData({\n key1: APP_DATA.subscribedNotifications,\n key2: notificationKey,\n });\n return [value, setValue];\n};\n\nexport const useSubscribeChatSelector = chatSelectorKey => {\n const chatSelectorPreference = useHMSStore(selectAppDataByPath(APP_DATA.chatSelector, chatSelectorKey));\n return chatSelectorPreference;\n};\n\nexport const useSetSubscribedChatSelector = chatSelectorKey => {\n const value = useSubscribeChatSelector(chatSelectorKey);\n const setValue = useSetAppData({\n key1: APP_DATA.chatSelector,\n key2: chatSelectorKey,\n });\n return [value, setValue];\n};\n\nexport const useSetAppDataByKey = appDataKey => {\n const value = useHMSStore(selectAppData(appDataKey));\n const actions = useHMSActions();\n const setValue = useCallback(\n value => {\n actions.setAppData(appDataKey, value);\n },\n [actions, appDataKey],\n );\n return [value, setValue];\n};\n\nconst useSetAppData = ({ key1, key2 }) => {\n const actions = useHMSActions();\n const store = useHMSVanillaStore();\n const [, setPreferences] = useUserPreferences(UserPreferencesKeys.UI_SETTINGS);\n const setValue = useCallback(\n value => {\n if (!key1) {\n return;\n }\n actions.setAppData(\n key1,\n key2\n ? {\n [key2]: value,\n }\n : value,\n true,\n );\n const appData = store.getState(selectAppData());\n setPreferences({\n ...appData.uiSettings,\n subscribedNotifications: appData.subscribedNotifications,\n });\n },\n [actions, key1, key2, store, setPreferences],\n );\n return setValue;\n};\n", "import { QUERY_PARAM_SKIP_PREVIEW } from './constants';\n\n// eslint-disable-next-line complexity\nexport function shadeColor(color, percent) {\n let R = parseInt(color.substring(1, 3), 16);\n let G = parseInt(color.substring(3, 5), 16);\n let B = parseInt(color.substring(5, 7), 16);\n\n R = Math.floor((R * (100 + percent)) / 100);\n G = Math.floor((G * (100 + percent)) / 100);\n B = Math.floor((B * (100 + percent)) / 100);\n\n R = R < 255 ? R : 255;\n G = G < 255 ? G : 255;\n B = B < 255 ? B : 255;\n\n const RR = R.toString(16).length === 1 ? `0${R.toString(16)}` : R.toString(16);\n const GG = G.toString(16).length === 1 ? `0${G.toString(16)}` : G.toString(16);\n const BB = B.toString(16).length === 1 ? `0${B.toString(16)}` : B.toString(16);\n\n return `#${RR}${GG}${BB}`;\n}\n\n/**\n * TODO: this is currently an O(N**2) function, don't use with peer lists, it's currently\n * being used to find intersection between list of role names where the complexity shouldn't matter much.\n */\nexport const arrayIntersection = (a, b) => {\n if (a === undefined || b === undefined) {\n return [];\n }\n // ensure \"a\" is the bigger array\n if (b.length > a.length) {\n let t = b;\n b = a;\n a = t;\n }\n return a.filter(function (e) {\n return b.indexOf(e) > -1;\n });\n};\n\nexport const getMetadata = metadataString => {\n try {\n return metadataString === '' ? {} : JSON.parse(metadataString);\n } catch (error) {\n return {};\n }\n};\n\nexport const metadataProps = function (peer) {\n return {\n isHandRaised: getMetadata(peer.metadata)?.isHandRaised,\n };\n};\n\nexport const isScreenshareSupported = () => {\n return typeof navigator.mediaDevices.getDisplayMedia !== 'undefined';\n};\n\nexport const getDefaultMeetingUrl = () => {\n return `${window.location.href.replace('meeting', 'preview')}?${QUERY_PARAM_SKIP_PREVIEW}=true`;\n};\n\nexport const getRoutePrefix = () => {\n return window.location.pathname.startsWith('/streaming') ? '/streaming' : '';\n};\n\nexport const isStreamingKit = () => {\n return window.location.pathname.startsWith('/streaming');\n};\n\nexport const isInternalRole = role => role && role.startsWith('__internal');\n\nexport const metadataPayloadParser = payload => {\n try {\n const data = window.atob(payload);\n const parsedData = JSON.parse(data);\n return parsedData;\n } catch (e) {\n return { payload };\n }\n};\n\n// For bottom action sheet, returns updated height based on drag\nexport const getUpdatedHeight = (e, MINIMUM_HEIGHT) => {\n const heightToPercentage = 100 - ((e?.touches?.[0] || e).pageY / window.innerHeight) * 100;\n // Snap to top if height > 80%, should be at least 40vh\n const sheetHeightInVH = Math.max(MINIMUM_HEIGHT, heightToPercentage > 80 ? 100 : heightToPercentage);\n return `${sheetHeightInVH}vh`;\n};\n", "import { useEffect } from 'react';\nimport { useHMSActions } from '@100mslive/react-sdk';\nimport { useIsHeadless } from '../AppData/useUISettings';\nimport { FeatureFlags } from '../../services/FeatureFlags';\n\nexport function BeamSpeakerLabelsLogging() {\n const hmsActions = useHMSActions();\n const isHeadless = useIsHeadless();\n\n useEffect(() => {\n if (FeatureFlags.enableBeamSpeakersLogging && isHeadless) {\n hmsActions.enableBeamSpeakerLabelsLogging();\n }\n }, [hmsActions, isHeadless]);\n return null;\n}\n", "import { useEffect } from 'react';\nimport { selectRoomID, useHMSStore } from '@100mslive/react-sdk';\n\nexport class FeatureFlags {\n static enableTranscription = process.env.REACT_APP_ENABLE_TRANSCRIPTION === 'true';\n static enableStatsForNerds = process.env.REACT_APP_ENABLE_STATS_FOR_NERDS === 'true';\n static enableWhiteboard =\n process.env.REACT_APP_ENABLE_WHITEBOARD &&\n process.env.REACT_APP_PUSHER_APP_KEY &&\n process.env.REACT_APP_PUSHER_AUTHENDPOINT;\n static enableBeamSpeakersLogging = process.env.REACT_APP_ENABLE_BEAM_SPEAKERS_LOGGING === 'true';\n\n static init(roomId) {\n if (!window.HMS) {\n window.HMS = {};\n }\n // some extra config to hls js to bring down latency\n window.HMS.OPTIMISE_HLS_LATENCY = false;\n // ask permissions in preview even if role doesn't have it\n window.HMS.ALWAYS_REQUEST_PERMISSIONS = false;\n window.HMS.SHOW_NS = process.env.REACT_APP_ENV !== 'prod';\n\n this.enableTranscription = process.env.REACT_APP_TRANSCRIPTION_ROOM_ID === roomId;\n }\n\n static showNS() {\n return window.HMS.SHOW_NS;\n }\n\n static optimiseHLSLatency() {\n return window.HMS.OPTIMISE_HLS_LATENCY;\n }\n\n static alwaysRequestPermissions() {\n return window.HMS.ALWAYS_REQUEST_PERMISSIONS;\n }\n}\n\nexport function FeatureFlagsInit() {\n const roomId = useHMSStore(selectRoomID);\n useEffect(() => {\n if (roomId) {\n FeatureFlags.init(roomId);\n }\n }, [roomId]);\n return null;\n}\n", "import React, { useEffect, useMemo, useState } from 'react';\nimport { matchPath, useLocation } from 'react-router-dom';\nimport { useSearchParam } from 'react-use';\nimport { v4 as uuid } from 'uuid';\nimport { useHMSActions } from '@100mslive/react-sdk';\nimport { styled } from '../../Theme';\nimport { useHMSPrebuiltContext } from '../AppContext';\nimport { ErrorDialog } from '../primitives/DialogContent';\nimport { useSetAppDataByKey, useTokenEndpoint } from './AppData/useUISettings';\nimport getToken from '../services/tokenService';\nimport { APP_DATA, QUERY_PARAM_AUTH_TOKEN } from '../common/constants';\n\n/**\n * query params exposed -\n * skip_preview=true => used by recording and streaming service, skips preview and directly joins\n * header and footer don't show up in this case\n * skip_preview_headful=true => used by automation testing to skip preview without impacting the UI\n * name=abc => gives the initial name for the peer joining\n * auth_token=123 => uses the passed in token to join instead of fetching from token endpoint\n * ui_mode=activespeaker => lands in active speaker mode after joining the room\n */\nconst AuthToken = React.memo(({ authTokenByRoomCodeEndpoint }) => {\n const hmsActions = useHMSActions();\n const tokenEndpoint = useTokenEndpoint();\n const { showPreview, roomCode } = useHMSPrebuiltContext();\n const location = useLocation();\n const matches = useMemo(\n () =>\n matchPath(`${showPreview ? 'preview' : 'meeting'}/:roomId/:role`, location.pathname) ||\n matchPath(`${showPreview ? 'preview' : 'meeting'}/:roomCode/`, location.pathname),\n [location, showPreview],\n );\n const { roomCode: urlRoomCode, roomId: urlRoomId, role: userRole } = matches?.params || {};\n const [error, setError] = useState({ title: '', body: '' });\n let authToken = useSearchParam(QUERY_PARAM_AUTH_TOKEN);\n const [, setAuthTokenInAppData] = useSetAppDataByKey(APP_DATA.authToken);\n\n useEffect(() => {\n if (authToken) {\n setAuthTokenInAppData(authToken);\n return;\n }\n if (!tokenEndpoint && !urlRoomId && !roomCode && !urlRoomCode) {\n return;\n }\n const code = !userRole && (roomCode || urlRoomCode);\n\n const getTokenFn = code\n ? () => hmsActions.getAuthTokenByRoomCode({ roomCode: code }, { endpoint: authTokenByRoomCodeEndpoint })\n : () => getToken(tokenEndpoint, uuid(), userRole, urlRoomId);\n\n getTokenFn()\n .then(token => {\n setAuthTokenInAppData(token);\n })\n .catch(error => {\n setError(convertError(error));\n });\n }, [\n hmsActions,\n tokenEndpoint,\n urlRoomId,\n urlRoomCode,\n userRole,\n authToken,\n authTokenByRoomCodeEndpoint,\n setAuthTokenInAppData,\n roomCode,\n ]);\n\n if (error.title) {\n return <ErrorDialog title={error.title}>{error.body}</ErrorDialog>;\n }\n return null;\n});\n\nconst convertError = error => {\n console.error('[error]', { error });\n if (error.action === 'GET_TOKEN' && error.code === 403) {\n return {\n title: 'Room code is disabled',\n body: ErrorWithSupportLink('Room code corresponding to this link is no more active.'),\n };\n } else if (error.action === 'GET_TOKEN' && error.code === 404) {\n return {\n title: 'Room code does not exist',\n body: ErrorWithSupportLink('We could not find a room code corresponding to this link.'),\n };\n } else if (error.action === 'GET_TOKEN' && error.code === 2003) {\n return {\n title: 'Endpoint is not reachable',\n body: ErrorWithSupportLink(`Endpoint is not reachable. ${error.description}.`),\n };\n } else if (error.response && error.response.status === 404) {\n return {\n title: 'Room does not exist',\n body: ErrorWithSupportLink('We could not find a room corresponding to this link.'),\n };\n } else if (error.response && error.response.status === 403) {\n return {\n title: 'Accessing room using this link format is disabled',\n body: ErrorWithSupportLink('You can re-enable this from the developer section in Dashboard.'),\n };\n } else {\n console.error('Token API Error', error);\n return {\n title: 'Error fetching token',\n body: ErrorWithSupportLink(\n 'An error occurred while fetching the app token. Please look into logs for more details.',\n ),\n };\n }\n};\n\nconst Link = styled('a', {\n color: '#2f80e1',\n});\n\nexport const ErrorWithSupportLink = errorMessage => (\n <div>\n {errorMessage} If you think this is a mistake on our side, please create{' '}\n <Link target=\"_blank\" href=\"https://github.com/100mslive/100ms-web/issues\" rel=\"noreferrer\">\n an issue\n </Link>{' '}\n or reach out over{' '}\n <Link target=\"_blank\" href=\"https://discord.com/invite/kGdmszyzq2\" rel=\"noreferrer\">\n Discord\n </Link>\n .\n </div>\n);\n\nexport default AuthToken;\n", "import React, { useContext } from 'react';\n\nexport const HMSPrebuiltContext = React.createContext({\n showPreview: true,\n showLeave: true,\n roomCode: '',\n userName: '',\n userId: '',\n endPoints: {},\n onLeave: undefined,\n});\n\nHMSPrebuiltContext.displayName = 'HMSPrebuiltContext';\n\nexport const useHMSPrebuiltContext = () => {\n const context = useContext(HMSPrebuiltContext);\n if (!context) {\n throw Error('Make sure HMSPrebuiltContext.Provider is present at the top level of your application');\n }\n return context;\n};\n", "import React, { useRef } from 'react';\nimport { CheckIcon, CloudUploadIcon, CrossIcon } from '@100mslive/react-icons';\nimport { Button } from '../../Button';\nimport { Checkbox } from '../../Checkbox';\nimport { HorizontalDivider } from '../../Divider';\nimport { IconButton } from '../../IconButton';\nimport { Input } from '../../Input';\nimport { Label } from '../../Label';\nimport { Box, Flex } from '../../Layout';\nimport { Dialog } from '../../Modal';\nimport { Select } from '../../Select';\nimport { Switch } from '../../Switch';\nimport { Text } from '../../Text';\n\nexport const DialogContent = ({ Icon, title, closeable = true, children, css, iconCSS = {}, ...props }) => {\n return (\n <Dialog.Portal>\n <Dialog.Overlay />\n <Dialog.Content css={{ width: 'min(600px, 100%)', ...css }} {...props}>\n <Dialog.Title>\n <Flex justify=\"between\">\n <Flex align=\"center\" css={{ mb: '$1' }}>\n {Icon ? (\n <Box css={{ mr: '$2', color: '$textPrimary', ...iconCSS }}>\n <Icon />\n </Box>\n ) : null}\n <Text variant=\"h6\" inline>\n {title}\n </Text>\n </Flex>\n {closeable && <Dialog.DefaultClose data-testid=\"dialoge_cross_icon\" />}\n </Flex>\n </Dialog.Title>\n <HorizontalDivider css={{ mt: '0.8rem' }} />\n <Box>{children}</Box>\n </Dialog.Content>\n </Dialog.Portal>\n );\n};\n\nexport const ErrorDialog = ({ open = true, onOpenChange, title, children, ...props }) => {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <DialogContent\n Icon={CrossIcon}\n title={title}\n onInteractOutside={e => e.preventDefault()}\n onEscapeKeyDown={e => e.preventDefault()}\n onPointerDownOutside={e => e.preventDefault()}\n closeable={false}\n iconCSS={{ color: '$error' }}\n {...props}\n >\n <Box css={{ mt: '$lg' }}>{children}</Box>\n </DialogContent>\n </Dialog.Root>\n );\n};\n\nexport const RequestDialog = ({ open = true, onOpenChange, title, body, actionText = 'Accept', onAction, Icon }) => (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay />\n <Dialog.Content css={{ width: 'min(400px,80%)', p: '$10' }}>\n <Dialog.Title css={{ p: 0, display: 'flex', flexDirection: 'row', gap: '$md' }}>\n {Icon ? Icon : null}\n <Text variant=\"h6\">{title}</Text>\n </Dialog.Title>\n <Text\n variant=\"md\"\n css={{\n fontWeight: 400,\n mt: '$4',\n mb: '$10',\n c: '$textMedEmp',\n }}\n >\n {body}\n </Text>\n <Flex justify=\"center\" align=\"center\" css={{ width: '100%', gap: '$md' }}>\n <Box css={{ width: '50%' }}>\n <Dialog.Close css={{ width: '100%' }}>\n <Button variant=\"standard\" outlined css={{ width: '100%' }}>\n Cancel\n </Button>\n </Dialog.Close>\n </Box>\n <Box css={{ width: '50%' }}>\n <Button variant=\"primary\" css={{ width: '100%' }} onClick={onAction}>\n {actionText}\n </Button>\n </Box>\n </Flex>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n);\n\n/**\n * a row of items which breaks into column on small screen. For e.g. title on left and options to select\n * from on right for select component.\n */\nexport const DialogRow = ({ children, breakSm = false, css, justify = 'between' }) => {\n let finalCSS = {\n margin: '$10 0',\n w: '100%',\n };\n if (breakSm) {\n finalCSS['@sm'] = {\n flexDirection: 'column',\n alignItems: 'flex-start',\n };\n }\n if (css) {\n finalCSS = Object.assign(finalCSS, css);\n }\n return (\n <Flex align=\"center\" justify={justify} css={finalCSS}>\n {children}\n </Flex>\n );\n};\n\nexport const DialogCol = ({ children, breakSm = false, css, align = 'center', justify = 'between', ...props }) => {\n let finalCSS = {\n margin: '$10 0',\n w: '100%',\n };\n if (breakSm) {\n finalCSS['@sm'] = {\n alignItems: 'flex-start',\n };\n }\n if (css) {\n finalCSS = Object.assign(finalCSS, css);\n }\n return (\n <Flex direction=\"column\" align={align} justify={justify} css={finalCSS} {...props}>\n {children}\n </Flex>\n );\n};\n\n/**\n * key field and label field are optional, option is directly used if not passed\n */\nexport const DialogSelect = ({ title, options, keyField, labelField, selected, onChange, ...props }) => {\n return (\n <DialogRow breakSm>\n <Label>{title}</Label>\n <Select.Root data-testid={`dialog_select_${title}`} css={{ width: '70%', '@sm': { width: '100%' } }} {...props}>\n <Select.DefaultDownIcon />\n <Select.Select onChange={e => onChange(e.target.value)} value={selected} css={{ width: '100%' }}>\n {options.map(option => {\n const id = keyField ? option[keyField] : option;\n const label = labelField ? option[labelField] : option;\n return (\n <option value={id} key={id}>\n {label}\n </option>\n );\n })}\n </Select.Select>\n </Select.Root>\n </DialogRow>\n );\n};\n\nexport const DialogInput = ({ title, value, onChange, placeholder, disabled, type, ...props }) => {\n return (\n <DialogRow breakSm>\n <Label>{title}</Label>\n <Input\n css={{ width: '70%', '@sm': { width: '100%' } }}\n value={value}\n onChange={e => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n type={type}\n {...props}\n />\n </DialogRow>\n );\n};\n\nexport const DialogInputFile = ({ value, onChange, placeholder, disabled, type, ...props }) => {\n const inputRef = useRef();\n return (\n <DialogCol\n breakSm\n onClick={() => inputRef.current?.click()}\n css={{\n justifyContent: 'center',\n position: 'relative',\n cursor: 'pointer',\n py: '$12',\n border: '1px dashed $borderLight',\n r: '$1',\n height: 'max(140px, 30%)',\n alignItems: 'center',\n m: '$6 0',\n }}\n gap=\"8\"\n >\n <IconButton\n variant=\"standard\"\n css={{\n border: 'none',\n background: 'none',\n '&:hover': {\n border: 'none',\n background: 'none',\n bg: '$transparent !important',\n },\n }}\n >\n <CloudUploadIcon\n style={{\n width: '3rem',\n height: '3rem',\n }}\n />\n </IconButton>\n <Flex direction=\"row\">\n <Input\n ref={inputRef}\n css={{ width: '70%', '@sm': { width: '100%' } }}\n value={value}\n onChange={e => onChange(e.target)}\n placeholder={placeholder}\n disabled={disabled}\n type={type}\n hidden={true}\n {...props}\n />\n <IconButton\n variant=\"standard\"\n css={{\n background: 'none',\n border: 'none',\n textDecoration: 'underline',\n '&:hover': {\n background: 'none !important',\n border: 'none !important',\n },\n }}\n >\n <Text variant=\"md\">{placeholder}</Text>\n </IconButton>\n </Flex>\n </DialogCol>\n );\n};\n\nexport const DialogSwitch = ({ title, value, onChange, disabled }) => {\n return (\n <DialogRow>\n <Text>{title}</Text>\n <Flex justify=\"end\" css={{ width: '70%' }}>\n <Switch checked={value} disabled={disabled} onCheckedChange={onChange} />\n </Flex>\n </DialogRow>\n );\n};\n\nexport const DialogCheckbox = ({ title, value, onChange, disabled, css, id }) => {\n return (\n <DialogRow css={css}>\n <Label htmlFor={id} css={{ cursor: 'pointer' }}>\n {title}\n </Label>\n <Checkbox.Root checked={value} onCheckedChange={value => onChange(value)} disabled={disabled} id={id}>\n <Checkbox.Indicator>\n <CheckIcon width={16} height={16} />\n </Checkbox.Indicator>\n </Checkbox.Root>\n </DialogRow>\n );\n};\n", "/**\n * @param {RequestInfo} url\n * @param {RequestInit} options\n * @returns {Promise<Response>}\n */\nconst fetchWithRetry = async (url, options) => {\n const MAX_RETRIES = 4;\n let error = Error('something went wrong');\n for (let i = 0; i < MAX_RETRIES; i++) {\n try {\n return await fetch(url, options);\n } catch (err) {\n error = err;\n }\n }\n console.error('Fetch failed after max retries', { url, options });\n throw error;\n};\n\nexport default async function getToken(tokenEndpoint, userId, role, roomId) {\n try {\n const response = await fetchWithRetry(`${tokenEndpoint}api/token`, {\n method: 'POST',\n body: JSON.stringify({\n role,\n room_id: roomId,\n user_id: userId,\n }),\n });\n\n if (!response.ok) {\n let error = new Error('Request failed!');\n error.response = response;\n throw error;\n }\n\n const data = await response.json();\n const { token } = data;\n // response will be sucess and token is null when url is valid but response\n // domain is not present in 100ms\n if (token === null) {\n throw Error(data.msg);\n }\n return token;\n } catch (err) {\n console.error(err);\n throw err;\n }\n}\n", "import React, { Component } from 'react';\nimport { logMessage } from 'zipyai';\nimport { CopyIcon } from '@100mslive/react-icons';\nimport { Button } from '../../Button';\nimport { Box, Flex } from '../../Layout';\nimport { Text } from '../../Text';\nimport { Tooltip } from '../../Tooltip';\nimport { ErrorWithSupportLink } from './AuthToken';\n\nexport class ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.state = { error: null, errorInfo: null, isErrorCopied: false };\n }\n\n componentDidCatch(error, errorInfo) {\n console.error(`react error boundary - ${error.message}`, error, errorInfo);\n // Catch errors in any components below and re-render with error message\n this.setState(\n {\n error: error?.message,\n errorInfo: errorInfo,\n },\n () => {\n logMessage(`uiError - ${this.state.error} - ${JSON.stringify(this.state.errorInfo)}`);\n },\n );\n }\n\n render() {\n if (this.state.errorInfo) {\n return (\n <Flex\n align=\"center\"\n justify=\"center\"\n css={{\n size: '100%',\n height: '100vh',\n width: '100%',\n color: '$textPrimary',\n backgroundColor: 'black',\n }}\n >\n <Box css={{ position: 'relative', overflow: 'hidden', r: '$3', height: '100%', width: '100%' }}>\n <Flex\n direction=\"column\"\n css={{\n position: 'absolute',\n size: '100%',\n top: '33.33%',\n left: 0,\n }}\n >\n <div style={{ margin: '1.5rem', width: '100%' }}>\n <Text>Something went wrong</Text>\n <Text>Message: ${this.state.error}</Text>\n <br />\n {ErrorWithSupportLink(`Please reload to see if it works.`)}\n </div>\n <Flex>\n <Tooltip title=\"Reload page\">\n <Button\n onClick={() => {\n window.location.reload();\n }}\n css={{ mx: '$8' }}\n data-testid=\"join_again_btn\"\n >\n Reload\n </Button>\n </Tooltip>\n <Tooltip title=\"Copy error details to clipboard\">\n <Button\n onClick={() => {\n const { error, errorInfo } = this.state;\n navigator.clipboard.writeText(\n JSON.stringify({\n error,\n errorInfo,\n }),\n );\n this.setState({ isErrorCopied: true });\n }}\n css={{ mx: '$8' }}\n data-testid=\"join_again_btn\"\n >\n <CopyIcon /> {this.state.isErrorCopied ? 'Copied' : 'Copy Details'}\n </Button>\n </Tooltip>\n </Flex>\n\n <details style={{ whiteSpace: 'pre-wrap', margin: '1.5rem' }}>\n <Text>{this.state.error && this.state.error.toString()}</Text>\n <br />\n <Text>{JSON.stringify(this.state.errorInfo)}</Text>\n </details>\n </Flex>\n </Box>\n </Flex>\n );\n }\n\n return this.props.children;\n }\n}\n", "import React from 'react';\nimport { Flex } from '../../Layout';\nimport { Loading } from '../../Loading';\n\nconst FullPageProgress = () => (\n <Flex justify=\"center\" align=\"center\" css={{ size: '100%' }}>\n <Loading size={100} />\n </Flex>\n);\n\nexport default FullPageProgress;\n", "import React, { useEffect } from 'react';\nimport {\n selectLocalPeerID,\n selectLocalPeerName,\n selectLocalPeerRoleName,\n selectSessionId,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { useTheme } from '../../../';\nimport { setUpZipy } from './initUtils';\nimport { FeatureFlagsInit } from '../../services/FeatureFlags';\n\nconst Init = () => {\n const localPeerID = useHMSStore(selectLocalPeerID);\n const localPeerRole = useHMSStore(selectLocalPeerRoleName);\n const localPeerName = useHMSStore(selectLocalPeerName);\n const sessionId = useHMSStore(selectSessionId);\n const { toggleTheme } = useTheme();\n\n useEffect(() => {\n window.toggleUiTheme = toggleTheme;\n }, [toggleTheme]);\n\n useEffect(() => {\n function resetHeight() {\n // reset the body height to that of the inner browser\n // The window.innerHeight property returns integer values. When the actual height is in decimal, window.innerHeight returns a larger value than the actual value. This can cause a scrollbar to appear on some screens.\n // Hence using window.visualViewport.height which returns a decimal value.\n document.body.style.height = `${window.visualViewport?.height || window.innerHeight}px`;\n }\n // reset the height whenever the window's resized\n window.addEventListener('resize', resetHeight);\n // called to initially set the height.\n resetHeight();\n return () => {\n window.removeEventListener('resize', resetHeight);\n };\n }, []);\n\n useEffect(() => {\n if (localPeerID && localPeerRole && localPeerName) {\n const peerData = {\n localPeer: {\n id: localPeerID,\n name: localPeerName,\n roleName: localPeerRole,\n },\n sessionId,\n };\n setUpZipy(peerData);\n }\n // eslint-disable-next-line\n }, [localPeerID, localPeerName, localPeerRole, sessionId]);\n\n return <FeatureFlagsInit />;\n};\n\nexport { Init };\n", "import { useEffect } from 'react';\nimport {\n selectAppData,\n selectIsLocalAudioEnabled,\n selectIsLocalVideoEnabled,\n useHMSActions,\n useHMSVanillaStore,\n} from '@100mslive/react-sdk';\nimport { APP_DATA, isMacOS } from '../../common/constants';\n\nlet isEvenListenersAttached = false;\nexport class KeyboardInputManager {\n #actions;\n #store;\n constructor(store, actions) {\n this.#actions = actions;\n this.#store = store;\n }\n #toggleAudio = async () => {\n const enabled = this.#store.getState(selectIsLocalAudioEnabled);\n await this.#actions.setLocalAudioEnabled(!enabled);\n };\n\n #toggleVideo = async () => {\n const enabled = this.#store.getState(selectIsLocalVideoEnabled);\n await this.#actions.setLocalVideoEnabled(!enabled);\n };\n\n #hideSidepane = () => {\n if (this.#store.getState(selectAppData(APP_DATA.sidePane))) {\n this.#actions.setAppData(APP_DATA.sidePane, '');\n }\n };\n\n #toggleStatsForNerds = () => {\n const uiSettings = this.#store.getState(selectAppData(APP_DATA.uiSettings));\n const statsEnabled = uiSettings.showStatsOnTiles;\n this.#actions.setAppData(APP_DATA.uiSettings, {\n ...uiSettings,\n showStatsOnTiles: !statsEnabled,\n });\n };\n\n #toggleHlsStats = () => {\n this.#actions.setAppData(APP_DATA.hlsStats, !this.#store.getState(selectAppData(APP_DATA.hlsStats)));\n };\n\n // eslint-disable-next-line complexity\n #keyDownHandler = async e => {\n const CONTROL_KEY = isMacOS ? e.metaKey : e.ctrlKey;\n const D_KEY = e.key === 'd' || e.key === 'D';\n const E_KEY = e.key === 'e' || e.key === 'E';\n const SNF_KEY = e.key === ']' || e.key === '}';\n\n const SHORTCUT_TOGGLE_AUDIO = CONTROL_KEY && D_KEY;\n const SHORTCUT_TOGGLE_VIDEO = CONTROL_KEY && E_KEY;\n const SHORTCUT_SIDEPANE_CLOSE = e.key === 'Escape';\n const SHORTCUT_STATS_FOR_NERDS = CONTROL_KEY && SNF_KEY;\n\n if (SHORTCUT_TOGGLE_AUDIO) {\n e.preventDefault();\n await this.#toggleAudio();\n } else if (SHORTCUT_TOGGLE_VIDEO) {\n e.preventDefault();\n await this.#toggleVideo();\n } else if (SHORTCUT_SIDEPANE_CLOSE) {\n this.#hideSidepane();\n } else if (SHORTCUT_STATS_FOR_NERDS) {\n this.#toggleHlsStats();\n this.#toggleStatsForNerds();\n }\n };\n\n #bind = () => {\n document.addEventListener('keydown', this.#keyDownHandler, false);\n };\n\n #unbind = () => {\n document.removeEventListener('keydown', this.#keyDownHandler, false);\n };\n\n bindAllShortcuts = () => {\n if (!isEvenListenersAttached) {\n this.#bind();\n isEvenListenersAttached = true;\n }\n };\n\n unbindAllShortcuts = () => {\n if (isEvenListenersAttached) {\n this.#unbind();\n isEvenListenersAttached = false;\n }\n };\n}\n\nexport const KeyboardHandler = () => {\n const store = useHMSVanillaStore();\n const actions = useHMSActions();\n\n useEffect(() => {\n const keyboardManager = new KeyboardInputManager(store, actions);\n keyboardManager.bindAllShortcuts();\n return keyboardManager.unbindAllShortcuts;\n }, [actions, store]);\n return null;\n};\n", "export { Notifications } from './Notifications';\n", "/* eslint-disable no-case-declarations */\nimport React, { useEffect } from 'react';\nimport { logMessage } from 'zipyai';\nimport { HMSNotificationTypes, useHMSNotifications } from '@100mslive/react-sdk';\nimport { Button } from '../../../';\nimport { ToastBatcher } from '../Toast/ToastBatcher';\nimport { ToastManager } from '../Toast/ToastManager';\nimport { AutoplayBlockedModal } from './AutoplayBlockedModal';\nimport { InitErrorModal } from './InitErrorModal';\nimport { MessageNotifications } from './MessageNotifications';\nimport { PeerNotifications } from './PeerNotifications';\nimport { PermissionErrorModal } from './PermissionErrorModal';\nimport { ReconnectNotifications } from './ReconnectNotifications';\nimport { TrackBulkUnmuteModal } from './TrackBulkUnmuteModal';\nimport { TrackNotifications } from './TrackNotifications';\nimport { TrackUnmuteModal } from './TrackUnmuteModal';\nimport { useHLSViewerRole, useIsHeadless, useSubscribedNotifications } from '../AppData/useUISettings';\nimport { useNavigation } from '../hooks/useNavigation';\nimport { getMetadata } from '../../common/utils';\n\nexport function Notifications() {\n const notification = useHMSNotifications();\n const navigate = useNavigation();\n const HLS_VIEWER_ROLE = useHLSViewerRole();\n const subscribedNotifications = useSubscribedNotifications() || {};\n const isHeadless = useIsHeadless();\n\n useEffect(() => {\n if (!notification) {\n return;\n }\n switch (notification.type) {\n case HMSNotificationTypes.METADATA_UPDATED:\n // Don't toast message when metadata is updated and raiseHand is false.\n // Don't toast message in case of local peer.\n const metadata = getMetadata(notification.data?.metadata);\n if (!metadata?.isHandRaised || notification.data.isLocal || isHeadless) return;\n\n console.debug('Metadata updated', notification.data);\n if (!subscribedNotifications.METADATA_UPDATED) return;\n ToastBatcher.showToast({ notification });\n break;\n case HMSNotificationTypes.NAME_UPDATED:\n console.log(notification.data.id + ' changed their name to ' + notification.data.name);\n break;\n case HMSNotificationTypes.ERROR:\n if (notification.data?.isTerminal && notification.data?.action !== 'INIT') {\n if ([500, 6008].includes(notification.data?.code)) {\n ToastManager.addToast({\n title: `Error: ${notification.data?.message}`,\n });\n } else {\n logMessage('Disconnected');\n // show button action when the error is terminal\n const toastId = ToastManager.addToast({\n title:\n notification.data?.message ||\n 'We couldn\u2019t reconnect you. When you\u2019re back online, try joining the room.',\n inlineAction: true,\n action: (\n <Button\n as=\"div\"\n variant=\"primary\"\n onClick={() => {\n ToastManager.removeToast(toastId);\n window.location.reload();\n }}\n >\n Rejoin\n </Button>\n ),\n close: false,\n });\n }\n // goto leave for terminal if any action is not performed within 2secs\n // if network is still unavailable going to preview will throw an error\n setTimeout(() => {\n const previewLocation = window.location.pathname.replace('meeting', 'leave');\n ToastManager.clearAllToast();\n navigate(previewLocation);\n }, 2000);\n return;\n }\n // Autoplay error or user denied screen share(cancelled browser pop-up)\n if (notification.data?.code === 3008 || notification.data?.code === 3001 || notification.data?.code === 3011) {\n return;\n }\n if (notification.data?.action === 'INIT') {\n return;\n }\n if (!subscribedNotifications.ERROR) return;\n ToastManager.addToast({\n title: `Error: ${notification.data?.message} - ${notification.data?.description}`,\n });\n break;\n case HMSNotificationTypes.ROLE_UPDATED:\n if (notification.data.roleName === HLS_VIEWER_ROLE) {\n return;\n }\n if (notification.data?.isLocal) {\n ToastManager.addToast({\n title: `You are now a ${notification.data.roleName}`,\n });\n }\n break;\n case HMSNotificationTypes.CHANGE_TRACK_STATE_REQUEST:\n const track = notification.data?.track;\n if (!notification.data.enabled) {\n ToastManager.addToast({\n title: `Your ${track.source} ${track.type} was muted by\n ${notification.data.requestedBy?.name}.`,\n });\n }\n break;\n case HMSNotificationTypes.REMOVED_FROM_ROOM:\n case HMSNotificationTypes.ROOM_ENDED:\n ToastManager.addToast({\n title: `${notification.message}. \n ${notification.data.reason && `Reason: ${notification.data.reason}`}`,\n });\n setTimeout(() => {\n const leaveLocation = window.location.pathname.replace('meeting', 'leave');\n navigate(leaveLocation);\n ToastManager.clearAllToast();\n }, 2000);\n break;\n case HMSNotificationTypes.DEVICE_CHANGE_UPDATE:\n ToastManager.addToast({\n title: notification.message,\n });\n break;\n default:\n break;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [notification, subscribedNotifications.ERROR, subscribedNotifications.METADATA_UPDATED, HLS_VIEWER_ROLE]);\n\n return (\n <>\n {!isHeadless && <TrackUnmuteModal />}\n {!isHeadless && <TrackBulkUnmuteModal />}\n <TrackNotifications />\n <PeerNotifications />\n <ReconnectNotifications />\n <AutoplayBlockedModal />\n <PermissionErrorModal />\n <MessageNotifications />\n <InitErrorModal notification={notification} />\n </>\n );\n}\n", "import { ToastConfig } from './ToastConfig';\nimport { ToastManager } from './ToastManager';\n\nexport const ToastBatcher = {\n toastsType: new Map(),\n showToastInternal({ notification, duration, type }) {\n let notificationType = type;\n if (!type) {\n notificationType = notification.type;\n }\n const toastType = this.toastsType.has(notificationType);\n if (toastType) {\n let { notifications } = this.toastsType.get(notificationType);\n const { id } = this.toastsType.get(notificationType);\n notifications.push(notification);\n const toastObject = ToastConfig[notificationType].multiple(notifications);\n const toastId = ToastManager.replaceToast(id, {\n ...toastObject,\n duration: duration,\n });\n this.toastsType.set(notificationType, {\n id: toastId,\n notifications: notifications,\n duration: duration,\n });\n } else {\n const toastObject = ToastConfig[notificationType].single(notification);\n const toastId = ToastManager.addToast({\n ...toastObject,\n duration: duration,\n });\n let notifications = [];\n notifications.push(notification);\n this.toastsType.set(notificationType, {\n id: toastId,\n notifications: [...notifications],\n duration: duration,\n });\n }\n },\n showToast({ notification, duration = 3000, type }) {\n try {\n this.showToastInternal({ notification, duration, type });\n } catch (err) {\n console.debug('Notifications', err);\n }\n },\n syncUItoast(toastsDisplaying) {\n for (const [toastType, toastInfo] of this.toastsType.entries()) {\n if (!toastsDisplaying.find(toast => toast.id === toastInfo.id)) {\n this.toastsType.delete(toastType);\n }\n }\n },\n};\n\nToastManager.addListener(ToastBatcher.syncUItoast.bind(ToastBatcher));\n", "import React from 'react';\nimport { selectAppData } from '@100mslive/react-sdk';\nimport { ChatIcon, ConnectivityIcon, HandIcon, PersonIcon, PoorConnectivityIcon } from '@100mslive/react-icons';\nimport { Button } from '../../../Button';\nimport { hmsActions, hmsStore } from '../../hms';\nimport { APP_DATA, SIDE_PANE_OPTIONS } from '../../common/constants';\n\nconst isChatOpen = () => {\n return hmsStore.getState(selectAppData(APP_DATA.sidePane)) === SIDE_PANE_OPTIONS.CHAT;\n};\n\nconst ChatAction = React.forwardRef((_, ref) => {\n return (\n <Button\n outlined\n as=\"div\"\n variant=\"standard\"\n css={{ w: 'max-content' }}\n onClick={() => {\n hmsActions.setAppData(APP_DATA.sidePane, SIDE_PANE_OPTIONS.CHAT);\n }}\n ref={ref}\n >\n Open Chat\n </Button>\n );\n});\n\nexport const ToastConfig = {\n PEER_LIST: {\n single: function (notification) {\n if (notification.data.length === 1) {\n return {\n title: `${notification.data[0]?.name} joined`,\n icon: <PersonIcon />,\n };\n }\n return {\n title: `${notification.data[notification.data.length - 1]?.name} and ${\n notification.data.length - 1\n } others joined`,\n icon: <PersonIcon />,\n };\n },\n multiple: notifications => {\n return {\n title: `${notifications[0].data.name} and ${notifications.length - 1} others joined`,\n icon: <PersonIcon />,\n };\n },\n },\n PEER_JOINED: {\n single: function (notification) {\n return {\n title: `${notification.data?.name} joined`,\n icon: <PersonIcon />,\n };\n },\n multiple: function (notifications) {\n return {\n title: `${notifications[notifications.length - 1].data.name} and ${notifications.length - 1} others joined`,\n icon: <PersonIcon />,\n };\n },\n },\n PEER_LEFT: {\n single: function (notification) {\n return {\n title: `${notification.data?.name} left`,\n icon: <PersonIcon />,\n };\n },\n multiple: function (notifications) {\n return {\n title: `${notifications[notifications.length - 1].data.name} and ${notifications.length - 1} others left`,\n icon: <PersonIcon />,\n };\n },\n },\n METADATA_UPDATED: {\n single: notification => {\n return {\n title: `${notification.data?.name} raised hand`,\n icon: <HandIcon />,\n };\n },\n multiple: notifications => {\n return {\n title: `${notifications[notifications.length - 1].data?.name} and ${\n notifications.length - 1\n } others raised hand`,\n icon: <HandIcon />,\n };\n },\n },\n NEW_MESSAGE: {\n single: notification => {\n return {\n title: `New message from ${notification.data?.senderName}`,\n icon: <ChatIcon />,\n action: isChatOpen() ? null : <ChatAction />,\n };\n },\n multiple: notifications => {\n return {\n title: `${notifications.length} new messages`,\n icon: <ChatIcon />,\n action: isChatOpen() ? null : <ChatAction />,\n };\n },\n },\n RECONNECTED: {\n single: () => {\n return {\n title: `You are now connected`,\n icon: <ConnectivityIcon />,\n variant: 'success',\n duration: 3000,\n };\n },\n },\n RECONNECTING: {\n single: message => {\n return {\n title: `You are offline for now. while we try to reconnect, please check\n your internet connection. ${message}.\n `,\n icon: <PoorConnectivityIcon />,\n variant: 'warning',\n duration: 30000,\n };\n },\n },\n};\n", "import { HMSReactiveStore } from '@100mslive/react-sdk';\n\nconst hms = new HMSReactiveStore();\nexport const hmsStore = hms.getStore();\nexport const hmsActions = hms.getActions();\nexport const hmsNotifications = hms.getNotifications();\nexport const hmsStats = hms.getStats();\n", "import { v4 } from 'uuid';\n\nexport const ToastManager = {\n toasts: new Map(),\n listeners: new Map(),\n addToast(toast) {\n const id = toast.id ? toast.id : v4();\n this.toasts.set(id, { ...toast, id });\n this.onChange();\n return id;\n },\n\n clearAllToast() {\n this.toasts.clear();\n this.onChange();\n },\n\n removeToast(id) {\n this.toasts.delete(id);\n this.onChange();\n },\n replaceToast(id, toast) {\n if (this.isActive(id)) {\n this.toasts.set(id, { ...this.toasts.get(id), ...toast });\n this.onChange();\n return id;\n } else {\n return this.addToast(toast);\n }\n },\n addListener(cb) {\n this.listeners.set(cb, cb);\n },\n removeListener(cb) {\n this.listeners.delete(cb);\n },\n isActive(id) {\n return this.toasts.has(id);\n },\n onChange() {\n const toasts = Array.from(this.toasts.values());\n this.listeners.forEach(listener => listener(toasts));\n },\n};\n", "import React from 'react';\nimport { useAutoplayError } from '@100mslive/react-sdk';\nimport { Button, Dialog, Text } from '../../../';\nimport { DialogContent, DialogRow } from '../../primitives/DialogContent';\n\nexport function AutoplayBlockedModal() {\n const { error, resetError, unblockAudio } = useAutoplayError();\n return (\n <Dialog.Root\n open={!!error}\n onOpenChange={value => {\n if (!value) {\n unblockAudio();\n }\n resetError();\n }}\n >\n <DialogContent title=\"Permission Error\" closeable={false}>\n <DialogRow>\n <Text variant=\"md\">\n The browser wants us to get a confirmation for playing the Audio. Please allow audio to proceed.\n </Text>\n </DialogRow>\n <DialogRow justify=\"end\">\n <Button\n variant=\"primary\"\n onClick={() => {\n unblockAudio();\n resetError();\n }}\n >\n Allow Audio\n </Button>\n </DialogRow>\n </DialogContent>\n </Dialog.Root>\n );\n}\n", "import React, { useEffect, useState } from 'react';\nimport { Text } from '../../../';\nimport { ErrorDialog } from '../../primitives/DialogContent';\n\nexport const InitErrorModal = ({ notification }) => {\n const [showModal, setShowModal] = useState(false);\n const [info, setInfo] = useState({ title: 'Init Error', description: '' });\n\n useEffect(() => {\n const data = notification?.data;\n if (!data || data.action !== 'INIT') {\n return;\n }\n let description;\n let title;\n if (data.description.includes('role is invalid')) {\n description = 'This role does not exist for the given room. Try again with a valid role.';\n title = 'Invalid Role';\n } else if (data.description.includes('room is not active')) {\n title = 'Room is disabled';\n description =\n 'This room is disabled and cannot be joined. To enable the room, use the 100ms dashboard or the API.';\n } else {\n description = data.description;\n title = 'Init Error';\n }\n setInfo({ title, description });\n setShowModal(true);\n }, [notification]);\n\n return (\n <ErrorDialog open={showModal} onOpenChange={setShowModal} title={info.title}>\n <Text variant=\"sm\" css={{ wordBreak: 'break-word' }}>\n {info.description} <br />\n Current URL - {window.location.href}\n </Text>\n </ErrorDialog>\n );\n};\n", "import { useEffect } from 'react';\nimport { HMSNotificationTypes, useHMSNotifications } from '@100mslive/react-sdk';\nimport { ToastBatcher } from '../Toast/ToastBatcher';\nimport { useIsHeadless, useSubscribedNotifications } from '../AppData/useUISettings';\nimport { useIsFeatureEnabled } from '../hooks/useFeatures';\nimport { FEATURE_LIST, SUBSCRIBED_NOTIFICATIONS } from '../../common/constants';\n\nexport const MessageNotifications = () => {\n const notification = useHMSNotifications(HMSNotificationTypes.NEW_MESSAGE);\n const isChatEnabled = useIsFeatureEnabled(FEATURE_LIST.CHAT);\n const isNewMessageSubscribed = useSubscribedNotifications(SUBSCRIBED_NOTIFICATIONS.NEW_MESSAGE);\n const isHeadless = useIsHeadless();\n useEffect(() => {\n if (!notification) {\n return;\n }\n console.debug(`[${notification.type}]`, notification);\n if (!isNewMessageSubscribed || notification.data?.ignored || !isChatEnabled) {\n return;\n }\n ToastBatcher.showToast({ notification });\n }, [notification, isNewMessageSubscribed, isHeadless, isChatEnabled]);\n\n return null;\n};\n", "import { useEffect } from 'react';\nimport { HMSNotificationTypes, useHMSNotifications } from '@100mslive/react-sdk';\nimport { ToastBatcher } from '../Toast/ToastBatcher';\nimport { useSubscribedNotifications } from '../AppData/useUISettings';\nimport { SUBSCRIBED_NOTIFICATIONS } from '../../common/constants';\n\nconst notificationTypes = [\n HMSNotificationTypes.PEER_LIST,\n HMSNotificationTypes.PEER_JOINED,\n HMSNotificationTypes.PEER_LEFT,\n];\n\nexport const PeerNotifications = () => {\n const notification = useHMSNotifications(notificationTypes);\n const isPeerJoinSubscribed = useSubscribedNotifications(SUBSCRIBED_NOTIFICATIONS.PEER_JOINED);\n const isPeerLeftSubscribed = useSubscribedNotifications(SUBSCRIBED_NOTIFICATIONS.PEER_LEFT);\n useEffect(() => {\n if (!notification) {\n return;\n }\n console.debug(`[${notification.type}]`, notification);\n switch (notification.type) {\n case HMSNotificationTypes.PEER_LIST:\n if (!isPeerJoinSubscribed || notification.data?.length === 0) {\n return;\n }\n break;\n case HMSNotificationTypes.PEER_JOINED:\n if (!isPeerJoinSubscribed) {\n return;\n }\n break;\n case HMSNotificationTypes.PEER_LEFT:\n if (!isPeerLeftSubscribed) {\n return;\n }\n break;\n default:\n return;\n }\n ToastBatcher.showToast({ notification });\n }, [notification, isPeerJoinSubscribed, isPeerLeftSubscribed]);\n\n return null;\n};\n", "import React, { useEffect, useState } from 'react';\nimport { HMSNotificationTypes, useHMSNotifications } from '@100mslive/react-sdk';\nimport { Dialog, Text } from '../../../';\n\nexport function PermissionErrorModal() {\n const notification = useHMSNotifications(HMSNotificationTypes.ERROR);\n const [deviceType, setDeviceType] = useState('');\n const [isSystemError, setIsSystemError] = useState(false);\n useEffect(() => {\n if (\n !notification ||\n (notification.data?.code !== 3001 && notification.data?.code !== 3011) ||\n (notification.data?.code === 3001 && notification.data?.message.includes('screen'))\n ) {\n return;\n }\n console.error(`[${notification.type}]`, notification);\n const errorMessage = notification.data?.message;\n const hasAudio = errorMessage.includes('audio');\n const hasVideo = errorMessage.includes('video');\n const hasScreen = errorMessage.includes('screen');\n if (hasAudio && hasVideo) {\n setDeviceType('Camera and Microphone');\n } else if (hasAudio) {\n setDeviceType('Microphone');\n } else if (hasVideo) {\n setDeviceType('Camera');\n } else if (hasScreen) {\n setDeviceType('Screenshare');\n }\n setIsSystemError(notification.data.code === 3011);\n }, [notification]);\n return deviceType ? (\n <Dialog.Root\n open\n onOpenChange={value => {\n if (!value) {\n setDeviceType('');\n }\n }}\n >\n <Dialog.Portal>\n <Dialog.Overlay />\n <Dialog.Content css={{ w: 'min(480px, 90%)' }}>\n <Dialog.Title\n css={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderBottom: '1px solid $borderDefault',\n pb: '$8',\n }}\n >\n <Text css={{ fontWeight: '$semiBold' }}>{deviceType} permissions are blocked</Text>\n <Dialog.DefaultClose data-testid=\"dialoge_cross_icon\" css={{ alignSelf: 'start' }} />\n </Dialog.Title>\n <Text variant=\"md\" css={{ py: '$10' }}>\n Access to {deviceType} is required. \n {isSystemError\n ? `Enable permissions for ${deviceType} from sytem settings`\n : `Enable permissions for ${deviceType} from address bar or browser settings`}\n </Text>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n ) : null;\n}\n", "import React, { useEffect, useState } from 'react';\nimport { logMessage } from 'zipyai';\nimport { HMSNotificationTypes, useHMSNotifications } from '@100mslive/react-sdk';\nimport { Dialog, Flex, Loading, Text } from '../../../';\nimport { ToastConfig } from '../Toast/ToastConfig';\nimport { ToastManager } from '../Toast/ToastManager';\n\nconst notificationTypes = [\n HMSNotificationTypes.RECONNECTED,\n HMSNotificationTypes.RECONNECTING,\n HMSNotificationTypes.ERROR,\n];\nlet notificationId = null;\n\nconst isQA = process.env.REACT_APP_ENV === 'qa';\nexport const ReconnectNotifications = () => {\n const notification = useHMSNotifications(notificationTypes);\n const [open, setOpen] = useState(false);\n useEffect(() => {\n if (notification?.type === HMSNotificationTypes.ERROR && notification?.data?.isTerminal) {\n logMessage('Error ', notification.data?.description);\n setOpen(false);\n } else if (notification?.type === HMSNotificationTypes.RECONNECTED) {\n logMessage('Reconnected');\n notificationId = ToastManager.replaceToast(notificationId, ToastConfig.RECONNECTED.single());\n setOpen(false);\n } else if (notification?.type === HMSNotificationTypes.RECONNECTING) {\n logMessage('Reconnecting');\n if (isQA) {\n ToastManager.removeToast(notificationId);\n setOpen(true);\n } else {\n notificationId = ToastManager.replaceToast(\n notificationId,\n ToastConfig.RECONNECTING.single(notification.data.message),\n );\n }\n }\n }, [notification]);\n if (!open || !isQA) return null;\n return (\n <Dialog.Root open={open} modal={true}>\n <Dialog.Portal container={document.getElementById('conferencing')}>\n <Dialog.Overlay />\n <Dialog.Content\n css={{\n width: 'fit-content',\n maxWidth: '80%',\n p: '$4 $8',\n position: 'relative',\n top: 'unset',\n bottom: '$9',\n transform: 'translate(-50%, -100%)',\n animation: 'none !important',\n }}\n >\n <Flex align=\"center\">\n <div style={{ display: 'inline', margin: '0.25rem' }}>\n <Loading size={16} />\n </div>\n <Text css={{ fontSize: '$space$8', color: '$textHighEmp' }}>\n You lost your network connection. Trying to reconnect.\n </Text>\n </Flex>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n", "import React, { useEffect, useState } from 'react';\nimport { HMSNotificationTypes, useHMSActions, useHMSNotifications } from '@100mslive/react-sdk';\nimport { MicOnIcon } from '@100mslive/react-icons';\nimport { RequestDialog } from '../../primitives/DialogContent';\n\nexport const TrackBulkUnmuteModal = () => {\n const hmsActions = useHMSActions();\n const [muteNotification, setMuteNotification] = useState(null);\n const notification = useHMSNotifications([\n HMSNotificationTypes.CHANGE_MULTI_TRACK_STATE_REQUEST,\n HMSNotificationTypes.ROOM_ENDED,\n HMSNotificationTypes.REMOVED_FROM_ROOM,\n ]);\n\n useEffect(() => {\n switch (notification?.type) {\n case HMSNotificationTypes.REMOVED_FROM_ROOM:\n case HMSNotificationTypes.ROOM_ENDED:\n setMuteNotification(null);\n break;\n case HMSNotificationTypes.CHANGE_MULTI_TRACK_STATE_REQUEST:\n if (notification?.data.enabled) {\n setMuteNotification(notification.data);\n }\n break;\n default:\n return;\n }\n }, [notification]);\n\n if (!muteNotification) {\n return null;\n }\n\n const { requestedBy: peer, tracks, enabled } = muteNotification;\n\n return (\n <RequestDialog\n title=\"Track Unmute Request\"\n body={`${peer?.name} has requested you to unmute your tracks.`}\n onOpenChange={value => !value && setMuteNotification(null)}\n onAction={() => {\n tracks.forEach(track => {\n hmsActions.setEnabledTrack(track.id, enabled);\n });\n setMuteNotification(null);\n }}\n Icon={MicOnIcon}\n />\n );\n};\n", "import { useEffect } from 'react';\nimport { HMSNotificationTypes, useHMSNotifications } from '@100mslive/react-sdk';\n\nconst notificationTypes = [\n HMSNotificationTypes.TRACK_ADDED,\n HMSNotificationTypes.TRACK_REMOVED,\n HMSNotificationTypes.TRACK_MUTED,\n HMSNotificationTypes.TRACK_UNMUTED,\n];\nexport const TrackNotifications = () => {\n const notification = useHMSNotifications(notificationTypes);\n useEffect(() => {\n if (notification) {\n console.debug(`[${notification.type}]`, notification);\n }\n }, [notification]);\n\n return null;\n};\n", "import React, { useEffect, useState } from 'react';\nimport { HMSNotificationTypes, useHMSActions, useHMSNotifications } from '@100mslive/react-sdk';\nimport { MicOnIcon } from '@100mslive/react-icons';\nimport { RequestDialog } from '../../primitives/DialogContent';\n\nexport const TrackUnmuteModal = () => {\n const hmsActions = useHMSActions();\n const notification = useHMSNotifications([\n HMSNotificationTypes.CHANGE_TRACK_STATE_REQUEST,\n HMSNotificationTypes.ROOM_ENDED,\n HMSNotificationTypes.REMOVED_FROM_ROOM,\n ]);\n const [muteNotification, setMuteNotification] = useState(null);\n\n useEffect(() => {\n switch (notification?.type) {\n case HMSNotificationTypes.REMOVED_FROM_ROOM:\n case HMSNotificationTypes.ROOM_ENDED:\n setMuteNotification(null);\n break;\n case HMSNotificationTypes.CHANGE_TRACK_STATE_REQUEST:\n if (notification?.data.enabled) {\n setMuteNotification(notification.data);\n }\n break;\n default:\n return;\n }\n }, [notification]);\n\n if (!muteNotification) {\n return null;\n }\n\n const { requestedBy: peer, track, enabled } = muteNotification;\n\n return (\n <RequestDialog\n title=\"Track Unmute Request\"\n onOpenChange={value => !value && setMuteNotification(null)}\n body={`${peer?.name} has requested you to unmute your ${track?.source} ${track?.type}.`}\n onAction={() => {\n hmsActions.setEnabledTrack(track.id, enabled);\n setMuteNotification(null);\n }}\n Icon={MicOnIcon}\n />\n );\n};\n", "import { useCallback } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { getRoutePrefix } from '../../common/utils';\n\nexport const useNavigation = () => {\n const navigate = useNavigate();\n const navigation = useCallback(\n path => {\n const prefix = getRoutePrefix();\n let route = path;\n if (prefix && !path.startsWith(prefix)) {\n route = `${prefix}${path}`;\n }\n navigate(route);\n },\n [navigate],\n );\n return navigation;\n};\n", "import React from 'react';\nimport { useParams } from 'react-router-dom';\nimport { ExitIcon } from '@100mslive/react-icons';\nimport { ToastManager } from './Toast/ToastManager';\nimport { Button } from '../../Button';\nimport { Box, Flex } from '../../Layout';\nimport { Text } from '../../Text';\nimport { useHMSPrebuiltContext } from '../AppContext';\nimport { Header } from './Header';\nimport { useNavigation } from './hooks/useNavigation';\nimport { defaultPreviewPreference, UserPreferencesKeys, useUserPreferences } from './hooks/useUserPreferences';\nimport { getRoutePrefix } from '../common/utils';\nimport { textEllipsis } from '../../utils';\n\nconst PostLeave = () => {\n const navigate = useNavigation();\n const { showPreview, roomCode } = useHMSPrebuiltContext();\n const { roomId, role } = useParams();\n const [previewPreference] = useUserPreferences(UserPreferencesKeys.PREVIEW, defaultPreviewPreference);\n return (\n <Flex direction=\"column\" css={{ size: '100%' }}>\n <Box css={{ h: '$18', '@md': { h: '$17' } }} data-testid=\"header\">\n <Header />\n </Box>\n <Flex\n justify=\"center\"\n direction=\"column\"\n align=\"center\"\n css={{ bg: '$mainBg', flex: '1 1 0', position: 'relative' }}\n >\n <Text variant=\"h2\" css={{ fontWeight: '$semiBold' }}>\n \uD83D\uDC4B\n </Text>\n <Text variant=\"h4\" css={{ color: '$textHighEmp', fontWeight: '$semiBold', mt: '$12' }}>\n You left the {getRoutePrefix() ? 'stream' : 'room'}\n </Text>\n <Text\n variant=\"body1\"\n css={{\n color: '$textMedEmp',\n mt: '$8',\n fontWeight: '$regular',\n textAlign: 'center',\n }}\n >\n Have a nice day\n {previewPreference.name && (\n <Box as=\"span\" css={{ ...textEllipsis(100) }}>\n , {previewPreference.name}\n </Box>\n )}\n !\n </Text>\n <Flex css={{ mt: '$14', gap: '$10', alignItems: 'center' }}>\n <Text variant=\"body1\" css={{ color: '$textMedEmp', fontWeight: '$regular' }}>\n Left by mistake?\n </Text>\n <Button\n onClick={() => {\n let redirectUrl = `${showPreview ? '/preview/' : '/meeting/'}${roomCode || roomId}`;\n if (role && roomId) redirectUrl += '/' + role;\n navigate(redirectUrl);\n ToastManager.clearAllToast();\n }}\n data-testid=\"join_again_btn\"\n >\n <ExitIcon />\n <Text css={{ ml: '$3', fontWeight: '$semiBold', color: 'inherit' }}>Rejoin</Text>\n </Button>\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport default PostLeave;\n", "export { Header } from './Header';\n", "import React from 'react';\nimport { ConferencingHeader } from './ConferencingHeader';\nimport { StreamingHeader } from './StreamingHeader';\nimport { isStreamingKit } from '../../common/utils';\n\nexport const Header = () => {\n return isStreamingKit() ? <StreamingHeader /> : <ConferencingHeader />;\n};\n", "import React from 'react';\nimport { Flex, VerticalDivider } from '../../../';\nimport { Logo, SpeakerTag } from './HeaderComponents';\nimport { ParticipantCount } from './ParticipantList';\nimport { StreamActions } from './StreamActions';\n\nexport const ConferencingHeader = ({ isPreview }) => {\n return (\n <Flex justify=\"between\" align=\"center\" css={{ position: 'relative', height: '100%' }}>\n <Flex align=\"center\" css={{ position: 'absolute', left: '$10' }}>\n <Logo />\n <VerticalDivider css={{ ml: '$8' }} />\n {!isPreview ? <SpeakerTag /> : null}\n </Flex>\n\n <Flex\n align=\"center\"\n css={{\n position: 'absolute',\n right: '$10',\n gap: '$4',\n }}\n >\n <StreamActions />\n <ParticipantCount />\n </Flex>\n </Flex>\n );\n};\n", "import React from 'react';\nimport { useMedia } from 'react-use';\nimport { selectDominantSpeaker, selectIsConnectedToRoom, useHMSStore } from '@100mslive/react-sdk';\nimport { VolumeOneIcon } from '@100mslive/react-icons';\nimport { config as cssConfig, Flex, styled, Text, textEllipsis } from '../../../';\nimport { useLogo } from '../AppData/useUISettings';\nimport { isStreamingKit } from '../../common/utils';\n\nexport const SpeakerTag = () => {\n const dominantSpeaker = useHMSStore(selectDominantSpeaker);\n return dominantSpeaker && dominantSpeaker.name ? (\n <Flex align=\"center\" justify=\"center\" css={{ flex: '1 1 0', color: '$textPrimary', '@md': { display: 'none' } }}>\n <VolumeOneIcon />\n <Text variant=\"md\" css={{ ...textEllipsis(200), ml: '$2' }} title={dominantSpeaker.name}>\n {dominantSpeaker.name}\n </Text>\n </Flex>\n ) : (\n <></>\n );\n};\n\nconst LogoImg = styled('img', {\n maxHeight: '$14',\n p: '$2',\n w: 'auto',\n '@md': {\n maxHeight: '$12',\n },\n});\n\nexport const Logo = () => {\n const logo = useLogo();\n const isMobile = useMedia(cssConfig.media.md);\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n // Hide logo for now as there is not enough space\n if (isConnected && isMobile && isStreamingKit()) {\n return null;\n }\n return logo ? <LogoImg src={logo} alt=\"Brand Logo\" width={132} height={40} /> : null;\n};\n", "import React, { Fragment, useCallback, useEffect, useState } from 'react';\nimport { useDebounce, useMeasure } from 'react-use';\nimport { FixedSizeList } from 'react-window';\nimport {\n selectAudioTrackByPeerID,\n selectLocalPeerID,\n selectPeerCount,\n selectPeerMetadata,\n selectPermissions,\n useHMSActions,\n useHMSStore,\n useParticipants,\n} from '@100mslive/react-sdk';\nimport {\n ChangeRoleIcon,\n CrossIcon,\n HandRaiseIcon,\n PeopleIcon,\n RemoveUserIcon,\n SearchIcon,\n SpeakerIcon,\n VerticalMenuIcon,\n} from '@100mslive/react-icons';\nimport { Avatar, Box, Dropdown, Flex, Input, Slider, Text, textEllipsis } from '../../../';\nimport IconButton from '../../IconButton';\nimport { ConnectionIndicator } from '../Connection/ConnectionIndicator';\nimport { RoleChangeModal } from '../RoleChangeModal';\nimport { ParticipantFilter } from './ParticipantFilter';\nimport { useIsSidepaneTypeOpen, useSidepaneToggle } from '../AppData/useSidepane';\nimport { isInternalRole } from '../../common/utils';\nimport { SIDE_PANE_OPTIONS } from '../../common/constants';\n\nexport const ParticipantList = () => {\n const [filter, setFilter] = useState();\n const { participants, isConnected, peerCount, rolesWithParticipants } = useParticipants(filter);\n const [selectedPeerId, setSelectedPeerId] = useState(null);\n const toggleSidepane = useSidepaneToggle(SIDE_PANE_OPTIONS.PARTICIPANTS);\n const onSearch = useCallback(value => {\n setFilter(filterValue => {\n if (!filterValue) {\n filterValue = {};\n }\n filterValue.search = value;\n return { ...filterValue };\n });\n }, []);\n if (peerCount === 0) {\n return null;\n }\n\n return (\n <Fragment>\n <Flex direction=\"column\" css={{ size: '100%' }}>\n <Flex align=\"center\" css={{ w: '100%', mb: '$10' }}>\n <Text css={{ fontWeight: '$semiBold', mr: '$4' }}>Participants</Text>\n <ParticipantFilter\n selection={filter}\n onSelection={setFilter}\n isConnected={isConnected}\n roles={rolesWithParticipants}\n />\n <IconButton onClick={toggleSidepane} css={{ w: '$11', h: '$11', ml: 'auto' }}>\n <CrossIcon />\n </IconButton>\n </Flex>\n {!filter?.search && participants.length === 0 ? null : <ParticipantSearch onSearch={onSearch} />}\n {participants.length === 0 && (\n <Flex align=\"center\" justify=\"center\" css={{ w: '100%', p: '$8 0' }}>\n <Text variant=\"sm\">{!filter ? 'No participants' : 'No matching participants'}</Text>\n </Flex>\n )}\n <VirtualizedParticipants\n participants={participants}\n isConnected={isConnected}\n setSelectedPeerId={setSelectedPeerId}\n />\n </Flex>\n {selectedPeerId && (\n <RoleChangeModal\n peerId={selectedPeerId}\n onOpenChange={value => {\n !value && setSelectedPeerId(null);\n }}\n />\n )}\n </Fragment>\n );\n};\n\nexport const ParticipantCount = () => {\n const peerCount = useHMSStore(selectPeerCount);\n const toggleSidepane = useSidepaneToggle(SIDE_PANE_OPTIONS.PARTICIPANTS);\n const isParticipantsOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.PARTICIPANTS);\n useEffect(() => {\n if (isParticipantsOpen && peerCount === 0) {\n toggleSidepane();\n }\n }, [isParticipantsOpen, peerCount, toggleSidepane]);\n\n if (peerCount === 0) {\n return null;\n }\n return (\n <IconButton\n css={{\n w: 'auto',\n p: '$4',\n h: 'auto',\n }}\n onClick={() => {\n if (peerCount > 0) {\n toggleSidepane();\n }\n }}\n active={!isParticipantsOpen}\n data-testid=\"participant_list\"\n >\n <PeopleIcon />\n <Text variant=\"sm\" css={{ mx: '$4', c: 'inherit' }}>\n {peerCount}\n </Text>\n </IconButton>\n );\n};\n\nfunction itemKey(index, data) {\n return data.participants[index].id;\n}\n\nconst VirtualizedParticipants = ({ participants, isConnected, setSelectedPeerId }) => {\n const [ref, { width, height }] = useMeasure();\n return (\n <Box\n ref={ref}\n css={{\n flex: '1 1 0',\n mr: '-$10',\n }}\n >\n <FixedSizeList\n itemSize={68}\n itemData={{ participants, isConnected, setSelectedPeerId }}\n itemKey={itemKey}\n itemCount={participants.length}\n width={width}\n height={height}\n >\n {VirtualisedParticipantListItem}\n </FixedSizeList>\n </Box>\n );\n};\n\nconst VirtualisedParticipantListItem = React.memo(({ style, index, data }) => {\n return (\n <div style={style} key={data.participants[index].id}>\n <Participant\n peer={data.participants[index]}\n isConnected={data.isConnected}\n setSelectedPeerId={data.setSelectedPeerId}\n />\n </div>\n );\n});\n\nconst Participant = ({ peer, isConnected, setSelectedPeerId }) => {\n return (\n <Fragment>\n <Flex\n key={peer.id}\n css={{ w: '100%', py: '$4', pr: '$10' }}\n align=\"center\"\n data-testid={'participant_' + peer.name}\n >\n <Avatar\n name={peer.name}\n css={{\n position: 'unset',\n transform: 'unset',\n mr: '$8',\n fontSize: '$sm',\n size: '$12',\n p: '$4',\n }}\n />\n <Flex direction=\"column\" css={{ flex: '1 1 0' }}>\n <Text variant=\"md\" css={{ ...textEllipsis(150), fontWeight: '$semiBold' }}>\n {peer.name}\n </Text>\n <Text variant=\"sub2\">{peer.roleName}</Text>\n </Flex>\n {isConnected && (\n <ParticipantActions\n peerId={peer.id}\n role={peer.roleName}\n onSettings={() => {\n setSelectedPeerId(peer.id);\n }}\n />\n )}\n </Flex>\n </Fragment>\n );\n};\n\n/**\n * shows settings to change for a participant like changing their role\n */\nconst ParticipantActions = React.memo(({ onSettings, peerId, role }) => {\n const isHandRaised = useHMSStore(selectPeerMetadata(peerId))?.isHandRaised;\n const canChangeRole = useHMSStore(selectPermissions)?.changeRole;\n const audioTrack = useHMSStore(selectAudioTrackByPeerID(peerId));\n const localPeerId = useHMSStore(selectLocalPeerID);\n const canChangeVolume = peerId !== localPeerId && audioTrack;\n const shouldShowMoreActions = canChangeRole || canChangeVolume;\n\n return (\n <Flex align=\"center\" css={{ flexShrink: 0 }}>\n <ConnectionIndicator peerId={peerId} />\n {isHandRaised && <HandRaiseIcon />}\n {shouldShowMoreActions && !isInternalRole(role) && (\n <ParticipantMoreActions onRoleChange={onSettings} peerId={peerId} role={role} />\n )}\n </Flex>\n );\n});\n\nconst ParticipantMoreActions = ({ onRoleChange, peerId }) => {\n const { changeRole: canChangeRole, removeOthers: canRemoveOthers } = useHMSStore(selectPermissions);\n const localPeerId = useHMSStore(selectLocalPeerID);\n const isLocal = localPeerId === peerId;\n const actions = useHMSActions();\n const [open, setOpen] = useState(false);\n return (\n <Dropdown.Root open={open} onOpenChange={value => setOpen(value)}>\n <Dropdown.Trigger asChild data-testid=\"participant_more_actions\" css={{ p: '$2', r: '$0' }} tabIndex={0}>\n <Text>\n <VerticalMenuIcon />\n </Text>\n </Dropdown.Trigger>\n <Dropdown.Portal>\n <Dropdown.Content align=\"end\" sideOffset={8} css={{ w: '$64' }}>\n {canChangeRole && (\n <Dropdown.Item onClick={() => onRoleChange(peerId)}>\n <ChangeRoleIcon />\n <Text css={{ ml: '$4' }}>Change Role</Text>\n </Dropdown.Item>\n )}\n <ParticipantVolume peerId={peerId} />\n {!isLocal && canRemoveOthers && (\n <Dropdown.Item\n onClick={async () => {\n try {\n await actions.removePeer(peerId, '');\n } catch (error) {\n // TODO: Toast here\n }\n }}\n >\n <RemoveUserIcon />\n <Text css={{ ml: '$4', color: '$error' }}>Remove Participant</Text>\n </Dropdown.Item>\n )}\n </Dropdown.Content>\n </Dropdown.Portal>\n </Dropdown.Root>\n );\n};\n\nconst ParticipantVolume = ({ peerId }) => {\n const audioTrack = useHMSStore(selectAudioTrackByPeerID(peerId));\n const localPeerId = useHMSStore(selectLocalPeerID);\n const hmsActions = useHMSActions();\n // No volume control for local peer or non audio publishing role\n if (peerId === localPeerId || !audioTrack) {\n return null;\n }\n\n return (\n <Dropdown.Item css={{ h: 'auto' }}>\n <Flex direction=\"column\" css={{ w: '100%' }}>\n <Flex align=\"center\">\n <SpeakerIcon />\n <Text css={{ ml: '$4' }}>Volume{audioTrack.volume ? `(${audioTrack.volume})` : ''}</Text>\n </Flex>\n <Slider\n css={{ my: '0.5rem' }}\n step={5}\n value={[audioTrack.volume]}\n onValueChange={e => {\n hmsActions.setVolume(e[0], audioTrack?.id);\n }}\n />\n </Flex>\n </Dropdown.Item>\n );\n};\n\nexport const ParticipantSearch = ({ onSearch, placeholder }) => {\n const [value, setValue] = React.useState('');\n useDebounce(\n () => {\n onSearch(value);\n },\n 300,\n [value, onSearch],\n );\n return (\n <Box css={{ p: '$4 0', my: '$8', position: 'relative' }}>\n <Box\n css={{\n position: 'absolute',\n left: '$4',\n top: '$2',\n transform: 'translateY(50%)',\n color: '$textMedEmp',\n }}\n >\n <SearchIcon />\n </Box>\n <Input\n type=\"text\"\n placeholder={placeholder || 'Find what you are looking for'}\n css={{ w: '100%', pl: '$14' }}\n value={value}\n onKeyDown={event => {\n event.stopPropagation();\n }}\n onChange={event => {\n setValue(event.currentTarget.value);\n }}\n autoComplete=\"off\"\n aria-autocomplete=\"none\"\n />\n </Box>\n );\n};\n", "import React from 'react';\nimport { selectConnectionQualityByPeerID, useHMSStore } from '@100mslive/react-sdk';\nimport { PoorConnectivityIcon } from '@100mslive/react-icons';\nimport { styled, Tooltip, useTheme } from '../../../';\nimport { getColor, getTooltipText } from './connectionQualityUtils';\n\nconst Wrapper = styled('span', {\n width: '28px',\n height: '28px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '$transparentBg',\n borderRadius: '$round',\n variants: {\n isTile: {\n true: {\n width: 'unset',\n height: 'unset',\n },\n },\n },\n});\n\nexport const ConnectionIndicator = ({ peerId, isTile = false }) => {\n const downlinkQuality = useHMSStore(selectConnectionQualityByPeerID(peerId))?.downlinkQuality;\n const { theme } = useTheme();\n const defaultColor = theme.colors.bgTertiary;\n if (downlinkQuality === -1 || downlinkQuality === undefined) {\n return null;\n }\n if (downlinkQuality === 0) {\n return (\n <Tooltip title={getTooltipText(downlinkQuality)}>\n <Wrapper isTile={isTile} css={{ color: '#ED4C5A' }} data-testid=\"tile_network\">\n <PoorConnectivityIcon />\n </Wrapper>\n </Tooltip>\n );\n }\n const size = isTile ? 12 : 16;\n return (\n <Tooltip title={getTooltipText(downlinkQuality)}>\n <Wrapper isTile={isTile} data-testid=\"tile_network\">\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 14 12\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlSpace=\"preserve\"\n style={{\n fillRule: 'evenodd',\n clipRule: 'evenodd',\n strokeLinejoin: 'round',\n strokeMiterlimit: 2,\n }}\n >\n <path\n d=\"M6.875 0c2.549.035 4.679.902 6.445 2.648.366.362.45.796.216 1.096-.239.306-.714.34-1.142.072a2.28 2.28 0 0 1-.341-.271C9.24.862 4.924.775 1.992 3.346c-.284.249-.594.419-.983.393-.272-.019-.49-.135-.613-.388-.125-.261-.05-.498.114-.713.073-.092.156-.177.245-.254C2.516.804 4.591.039 6.875 0Z\"\n fill={getColor(4, downlinkQuality, defaultColor)}\n transform=\"translate(-.333)\"\n />\n <path\n d=\"M7.056 2.964c1.756.035 3.208.7 4.499 1.763.162.134.277.315.354.512.098.251.114.503-.075.72-.193.222-.452.259-.725.198-.293-.066-.518-.247-.738-.443a4.859 4.859 0 0 0-6.198-.26c-.166.127-.318.271-.475.409-.242.211-.513.343-.843.317-.43-.034-.679-.397-.561-.81.062-.211.181-.4.345-.546 1.265-1.162 2.733-1.836 4.417-1.86Z\"\n fill={getColor(3, downlinkQuality, defaultColor)}\n transform=\"translate(-.333)\"\n />\n <path\n d=\"M7.384,6.052C8.293,6.068 9.157,6.449 9.783,7.108C10.005,7.339 10.157,7.6 10.07,7.942C9.959,8.377 9.435,8.581 9.071,8.243C7.935,7.191 6.356,7.183 5.152,8.183C4.816,8.462 4.6,8.485 4.332,8.27C4.063,8.055 3.998,7.691 4.177,7.358C4.273,7.179 4.414,7.038 4.57,6.911C5.26,6.349 6.149,6.05 7.384,6.052L7.384,6.052Z\"\n fill={getColor(2, downlinkQuality, defaultColor)}\n />\n <path\n d=\"M8.214,9.941C8.214,10.234 8.097,10.515 7.888,10.721C7.68,10.928 7.398,11.042 7.104,11.039C6.471,11.036 5.982,10.541 5.993,9.912C6.004,9.259 6.499,8.766 7.133,8.779C7.744,8.791 8.22,9.301 8.214,9.941Z\"\n fill={getColor(1, downlinkQuality, defaultColor)}\n />\n </svg>\n </Wrapper>\n </Tooltip>\n );\n};\n", "const connectionTooltip = {\n 0: 'Reconnecting',\n 1: 'Very Bad Connection',\n 2: 'Bad Connection',\n 3: 'Moderate Connection',\n 4: 'Good Connection',\n 5: 'Excellent Connection',\n};\nconnectionTooltip[-1] = 'Network Unknown';\n\n/**\n * @param connectionScore -> 1-5 connection score for network quality\n */\nexport const getTooltipText = connectionScore => {\n return connectionTooltip[connectionScore];\n};\n\n/**\n * position is needed here as we don't want all the dots/arcs to be colored,\n * the non colored ones will be passed in the default color. If user is\n * disconnected(score=0), no dot/arc will be colored.\n * @param position -> 1 to 5\n * @param connectionScore -> 0 to 5, 0 means disconnected\n * @param defaultColor -> color for components not taking the connection color\n */\nexport const getColor = (position, connectionScore, defaultColor) => {\n const shouldBeColored = position <= connectionScore;\n if (!shouldBeColored) {\n return defaultColor;\n }\n if (connectionScore >= 4) {\n return '#37F28D';\n } else if (connectionScore >= 3) {\n return '#FAC919';\n } else if (connectionScore >= 1) {\n return '#ED4C5A';\n }\n return defaultColor;\n};\n", "import React, { forwardRef, useRef, useState } from 'react';\nimport { selectPeerByID, useHMSActions, useHMSStore } from '@100mslive/react-sdk';\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from '@100mslive/react-icons';\nimport { Button } from '../../Button';\nimport { Checkbox } from '../../Checkbox';\nimport { Dropdown } from '../../Dropdown';\nimport { Label } from '../../Label';\nimport { Box, Flex } from '../../Layout';\nimport { Dialog } from '../../Modal';\nimport { Text } from '../../Text';\nimport { Tooltip } from '../../Tooltip';\nimport { useDropdownSelection } from './hooks/useDropdownSelection';\nimport { useFilteredRoles } from '../common/hooks';\nimport { textEllipsis } from '../../utils';\n\nconst PeerName = forwardRef(({ children, maxWidth, ...rest }, ref) => (\n <Text\n {...rest}\n ref={ref}\n as=\"strong\"\n variant=\"body2\"\n css={{\n ...textEllipsis(maxWidth),\n display: 'inline-block',\n fontWeight: '$semiBold',\n c: 'inherit',\n }}\n >\n {children}\n </Text>\n));\n\nexport const RoleChangeModal = ({ peerId, onOpenChange }) => {\n const peer = useHMSStore(selectPeerByID(peerId));\n const roles = useFilteredRoles();\n const [selectedRole, setRole] = useState(peer?.roleName);\n const [requestPermission, setRequestPermission] = useState(true);\n const hmsActions = useHMSActions();\n const [open, setOpen] = useState(false);\n const selectionBg = useDropdownSelection();\n const [peerNameRef, setPeerNameRef] = useState();\n const ref = useRef();\n if (!peer) {\n return null;\n }\n\n const peerNameMaxWidth = 200;\n return (\n <Dialog.Root defaultOpen onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay />\n <Dialog.Content css={{ width: 'min(400px,80%)', p: '$10' }}>\n <Dialog.Title css={{ p: 0 }} asChild>\n <Text as=\"h6\" variant=\"h6\">\n Change Role\n </Text>\n </Dialog.Title>\n <Dialog.Description asChild>\n <Text\n variant=\"body2\"\n css={{\n mt: '$4',\n mb: '$8',\n c: '$textMedEmp',\n display: 'flex',\n flexWrap: 'wrap',\n columnGap: '4px',\n }}\n >\n Change the role of\n {peerNameRef && peerNameRef.clientWidth === peerNameMaxWidth ? (\n <Tooltip title={peer.name} side=\"top\">\n <PeerName ref={setPeerNameRef} maxWidth={peerNameMaxWidth}>\n {peer.name}\n </PeerName>\n </Tooltip>\n ) : (\n <PeerName ref={setPeerNameRef} maxWidth={peerNameMaxWidth}>\n {peer.name}\n </PeerName>\n )}\n to\n </Text>\n </Dialog.Description>\n <Flex\n align=\"center\"\n css={{\n w: '100%',\n mb: '$10',\n }}\n >\n <Box\n css={{\n position: 'relative',\n flex: '1 1 0',\n minWidth: 0,\n }}\n >\n <Dropdown.Root open={open} onOpenChange={setOpen} css={{ width: '100%' }}>\n <Dropdown.Trigger\n data-testid=\"open_role_selection_dropdown\"\n asChild\n css={{\n border: '1px solid $borderLight',\n bg: '$surfaceLight',\n r: '$1',\n p: '$6 $9',\n }}\n ref={ref}\n >\n <Flex align=\"center\" justify=\"between\" css={{ width: '100%' }}>\n <Text>{selectedRole}</Text>\n {open ? <ChevronUpIcon /> : <ChevronDownIcon />}\n </Flex>\n </Dropdown.Trigger>\n <Dropdown.Portal>\n <Dropdown.Content\n align=\"start\"\n sideOffset={8}\n css={{ zIndex: 1000, width: ref.current?.clientWidth }}\n >\n {roles.map(role => {\n return (\n <Dropdown.Item\n data-testid={role}\n key={role}\n onSelect={() => setRole(role)}\n css={{\n px: '$9',\n bg: role === selectedRole ? selectionBg : undefined,\n }}\n >\n {role}\n </Dropdown.Item>\n );\n })}\n </Dropdown.Content>\n </Dropdown.Portal>\n </Dropdown.Root>\n </Box>\n </Flex>\n {!peer.isLocal && (\n <Flex justify=\"between\" css={{ w: '100%', mb: '$10' }}>\n <Label htmlFor=\"requestRoleChangePermission\" css={{ cursor: 'pointer' }}>\n Request Permission\n </Label>\n <Checkbox.Root\n checked={requestPermission}\n onCheckedChange={value => setRequestPermission(value)}\n id=\"requestRoleChangePermission\"\n data-testid=\"force_role_change_checkbox\"\n >\n <Checkbox.Indicator>\n <CheckIcon width={16} height={16} />\n </Checkbox.Indicator>\n </Checkbox.Root>\n </Flex>\n )}\n <Flex justify=\"center\" align=\"center\" css={{ width: '100%', gap: '$md' }}>\n <Box css={{ width: '50%' }}>\n <Dialog.Close css={{ width: '100%', p: '$4 $8' }} asChild>\n <Button variant=\"standard\" outlined css={{ width: '100%' }} data-testid=\"cancel_button\">\n Cancel\n </Button>\n </Dialog.Close>\n </Box>\n <Box css={{ width: '50%' }}>\n <Button\n data-testid=\"change_button\"\n variant=\"primary\"\n css={{ width: '100%' }}\n onClick={async () => {\n await hmsActions.changeRole(peerId, selectedRole, peer.isLocal ? true : !requestPermission);\n onOpenChange(false);\n }}\n >\n Change\n </Button>\n </Box>\n </Flex>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n", "import { useTheme } from '../../../';\n\nexport const useDropdownSelection = () => {\n const { themeType } = useTheme();\n return themeType === 'dark' ? '$primaryDark' : '$grayLight';\n};\n", "// @ts-check\nimport { useEffect, useRef, useState } from 'react';\nimport { selectAvailableRoleNames, selectIsConnectedToRoom, selectPeerCount, useHMSStore } from '@100mslive/react-sdk';\nimport { isInternalRole } from './utils';\n\n/**\n * Hook to execute a callback when alone in room(after a certain 5d of time)\n * @param {number} thresholdMs The threshold(in ms) after which the callback is executed,\n * starting from the instant when alone in room.\n * note: the cb is not called when another peer joins during this period.\n */\nexport const useWhenAloneInRoom = (thresholdMs = 5 * 60 * 1000) => {\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const peerCount = useHMSStore(selectPeerCount);\n const [aloneForLong, setAloneForLong] = useState(false);\n const cbTimeout = useRef(null);\n const alone = isConnected && peerCount === 1;\n\n useEffect(() => {\n if (alone && !cbTimeout.current) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n cbTimeout.current = setTimeout(() => {\n setAloneForLong(true);\n }, thresholdMs);\n } else if (!alone) {\n cbTimeout.current && clearTimeout(cbTimeout.current);\n cbTimeout.current = null;\n setAloneForLong(false);\n }\n }, [alone, thresholdMs]);\n\n useEffect(() => {\n return () => {\n if (cbTimeout.current) {\n clearTimeout(cbTimeout.current);\n }\n };\n }, []);\n\n return { alone, aloneForLong };\n};\n\nexport const useFilteredRoles = () => {\n const roles = useHMSStore(selectAvailableRoleNames).filter(role => !isInternalRole(role));\n return roles;\n};\n", "import React, { useCallback, useState } from 'react';\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon, HandRaiseIcon, PeopleIcon } from '@100mslive/react-icons';\nimport { Box, Dropdown, Flex, Text, textEllipsis } from '../../../';\nimport { isInternalRole } from '../../common/utils';\n\nexport const ParticipantFilter = ({ selection, onSelection, isConnected, roles }) => {\n const [open, setOpen] = useState(false);\n const selectionValue = selection?.role || (selection?.metadata?.isHandRaised ? 'Raised Hand' : '');\n const onItemClick = useCallback(value => {\n onSelection(value);\n setOpen(false);\n }, []); //eslint-disable-line\n if (!isConnected) {\n return null;\n }\n return (\n <Dropdown.Root open={open} onOpenChange={value => setOpen(value)}>\n <Dropdown.Trigger\n asChild\n data-testid=\"participant_list_filter\"\n css={{\n border: '1px solid $textDisabled',\n r: '$0',\n p: '$2 $4',\n }}\n tabIndex={0}\n >\n <Flex align=\"center\">\n <Text variant=\"sm\" css={{ ...textEllipsis(80) }}>\n {selectionValue || 'Everyone'}\n </Text>\n <Box css={{ ml: '$2', color: '$textDisabled' }}>\n {open ? <ChevronUpIcon width={14} height={14} /> : <ChevronDownIcon width={14} height={14} />}\n </Box>\n </Flex>\n </Dropdown.Trigger>\n <Dropdown.Content\n align=\"start\"\n sideOffset={8}\n css={{\n height: 'auto',\n maxHeight: '$96',\n boxShadow: '$md',\n w: '$48',\n }}\n >\n <Item selected={!selection} title=\"Everyone\" onSelection={onItemClick} icon={<PeopleIcon />} />\n <Item\n selected={selection?.metadata?.isHandRaised}\n title=\"Raised Hand\"\n onSelection={onItemClick}\n icon={<HandRaiseIcon />}\n value={{ metadata: { isHandRaised: true }, role: '' }}\n />\n <Dropdown.ItemSeparator />\n {roles\n .filter(role => !isInternalRole(role))\n .map(role => (\n <Item\n key={role}\n selected={selectionValue === role}\n title={role}\n value={{ metadata: { isHandRaised: false }, role }}\n onSelection={onItemClick}\n />\n ))}\n </Dropdown.Content>\n </Dropdown.Root>\n );\n};\n\nconst Item = ({ selected, title, onSelection, value, icon }) => {\n return (\n <Dropdown.Item\n onClick={e => {\n e.preventDefault();\n onSelection(value);\n }}\n >\n <Flex align=\"center\" css={{ flex: '1 1 0' }}>\n {icon && <Text>{icon}</Text>}\n <Text css={{ ml: '$4' }}>{title}</Text>\n </Flex>\n {selected && (\n <Text>\n <CheckIcon widht={16} height={16} />\n </Text>\n )}\n </Dropdown.Item>\n );\n};\n", "import React, { Fragment, useEffect, useState } from 'react';\nimport { useMedia } from 'react-use';\nimport {\n selectAppData,\n selectIsConnectedToRoom,\n selectPermissions,\n useHMSActions,\n useHMSStore,\n useRecordingStreaming,\n} from '@100mslive/react-sdk';\nimport { RecordIcon, WrenchIcon } from '@100mslive/react-icons';\nimport { Box, Button, config as cssConfig, Flex, Loading, Popover, Text, Tooltip } from '../../../';\nimport GoLiveButton from '../GoLiveButton';\nimport { ResolutionInput } from '../Streaming/ResolutionInput';\nimport { getResolution } from '../Streaming/RTMPStreaming';\nimport { ToastManager } from '../Toast/ToastManager';\nimport { AdditionalRoomState, getRecordingText } from './AdditionalRoomState';\nimport { useSidepaneState, useSidepaneToggle } from '../AppData/useSidepane';\nimport { useSetAppDataByKey } from '../AppData/useUISettings';\nimport { APP_DATA, RTMP_RECORD_DEFAULT_RESOLUTION, SIDE_PANE_OPTIONS } from '../../common/constants';\n\nexport const LiveStatus = () => {\n const { isHLSRunning, isRTMPRunning } = useRecordingStreaming();\n if (!isHLSRunning && !isRTMPRunning) {\n return null;\n }\n return (\n <Flex align=\"center\">\n <Box css={{ w: '$4', h: '$4', r: '$round', bg: '$error', mr: '$2' }} />\n <Text>\n Live\n <Text as=\"span\" css={{ '@md': { display: 'none' } }}>\n with {isHLSRunning ? 'HLS' : 'RTMP'}\n </Text>\n </Text>\n </Flex>\n );\n};\n\nexport const RecordingStatus = () => {\n const { isBrowserRecordingOn, isServerRecordingOn, isHLSRecordingOn, isRecordingOn } = useRecordingStreaming();\n const permissions = useHMSStore(selectPermissions);\n\n if (\n !isRecordingOn ||\n // if only browser recording is enabled, stop recording is shown\n // so no need to show this as it duplicates\n [permissions?.browserRecording, !isServerRecordingOn, !isHLSRecordingOn, isBrowserRecordingOn].every(\n value => !!value,\n )\n ) {\n return null;\n }\n return (\n <Tooltip\n title={getRecordingText({\n isBrowserRecordingOn,\n isServerRecordingOn,\n isHLSRecordingOn,\n })}\n >\n <Box\n css={{\n color: '$error',\n }}\n >\n <RecordIcon width={24} height={24} />\n </Box>\n </Tooltip>\n );\n};\n\nconst EndStream = () => {\n const toggleStreaming = useSidepaneToggle(SIDE_PANE_OPTIONS.STREAMING);\n const sidePane = useSidepaneState();\n useEffect(() => {\n if (window && !sidePane) {\n const userStartedStream = window.sessionStorage.getItem('userStartedStream');\n if (userStartedStream === 'true') {\n toggleStreaming();\n window.sessionStorage.setItem('userStartedStream', '');\n }\n }\n }, [sidePane, toggleStreaming]);\n\n return (\n <Button data-testid=\"end_stream\" variant=\"danger\" icon onClick={toggleStreaming}>\n <WrenchIcon />\n Manage Stream\n </Button>\n );\n};\n\nconst StartRecording = () => {\n const permissions = useHMSStore(selectPermissions);\n const recordingUrl = useHMSStore(selectAppData(APP_DATA.recordingUrl));\n const [resolution, setResolution] = useState(RTMP_RECORD_DEFAULT_RESOLUTION);\n const [open, setOpen] = useState(false);\n const [recordingStarted, setRecordingState] = useSetAppDataByKey(APP_DATA.recordingStarted);\n const { isBrowserRecordingOn, isStreamingOn, isHLSRunning } = useRecordingStreaming();\n const hmsActions = useHMSActions();\n if (!permissions?.browserRecording || isHLSRunning) {\n return null;\n }\n if (isBrowserRecordingOn) {\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <Button variant=\"danger\" data-testid=\"stop_recording\" icon outlined onClick={() => setOpen(true)}>\n <RecordIcon />\n <Text as=\"span\" css={{ '@md': { display: 'none' }, color: 'currentColor' }}>\n Stop Recording\n </Text>\n </Button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content align=\"end\" sideOffset={8} css={{ w: '$64' }}>\n <Text variant=\"body\" css={{ color: '$textMedEmp' }}>\n Are you sure you want to end the recording?\n </Text>\n <Button\n data-testid=\"stop_recording_confirm\"\n variant=\"danger\"\n icon\n css={{ ml: 'auto' }}\n onClick={async () => {\n try {\n await hmsActions.stopRTMPAndRecording();\n } catch (error) {\n ToastManager.addToast({\n title: error.message,\n variant: 'error',\n });\n }\n setOpen(false);\n }}\n >\n Stop\n </Button>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n }\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <Button\n data-testid=\"start_recording\"\n variant=\"standard\"\n icon\n disabled={recordingStarted || isStreamingOn}\n onClick={() => setOpen(true)}\n >\n {recordingStarted ? <Loading size={24} color=\"currentColor\" /> : <RecordIcon />}\n <Text as=\"span\" css={{ '@md': { display: 'none' }, color: 'currentColor' }}>\n {recordingStarted ? 'Starting' : 'Start'} Recording\n </Text>\n </Button>\n </Popover.Trigger>\n <Popover.Content align=\"end\" sideOffset={8} css={{ w: '$64' }}>\n <ResolutionInput\n testId=\"recording_resolution\"\n css={{ flexDirection: 'column', alignItems: 'start' }}\n onResolutionChange={setResolution}\n />\n <Button\n data-testid=\"start_recording_confirm\"\n variant=\"primary\"\n icon\n css={{ ml: 'auto' }}\n type=\"submit\"\n disabled={recordingStarted || isStreamingOn}\n onClick={async () => {\n try {\n setRecordingState(true);\n await hmsActions.startRTMPOrRecording({\n meetingURL: recordingUrl,\n resolution: getResolution(resolution),\n record: true,\n });\n } catch (error) {\n if (error.message.includes('stream already running')) {\n ToastManager.addToast({\n title: 'Recording already running',\n variant: 'error',\n });\n } else {\n ToastManager.addToast({\n title: error.message,\n variant: 'error',\n });\n }\n setRecordingState(false);\n }\n setOpen(false);\n }}\n >\n Start\n </Button>\n </Popover.Content>\n </Popover.Root>\n );\n};\n\nexport const StreamActions = () => {\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const permissions = useHMSStore(selectPermissions);\n const isMobile = useMedia(cssConfig.media.md);\n const { isStreamingOn } = useRecordingStreaming();\n\n return (\n <Flex align=\"center\" css={{ gap: '$4' }}>\n <AdditionalRoomState />\n <Flex align=\"center\" css={{ gap: '$4', '@md': { display: 'none' } }}>\n <LiveStatus />\n <RecordingStatus />\n </Flex>\n {isConnected && !isMobile ? <StartRecording /> : null}\n {isConnected && (permissions.hlsStreaming || permissions.rtmpStreaming) && (\n <Fragment>{isStreamingOn ? <EndStream /> : <GoLiveButton />}</Fragment>\n )}\n </Flex>\n );\n};\n", "import React from 'react';\nimport { useRecordingStreaming } from '@100mslive/react-sdk';\nimport { GoLiveIcon } from '@100mslive/react-icons';\nimport { Button } from '../../Button';\nimport { Tooltip } from '../../Tooltip';\nimport { useIsSidepaneTypeOpen, useSidepaneToggle } from './AppData/useSidepane';\nimport { useIsHLSStartedFromUI, useIsRTMPStartedFromUI } from './AppData/useUISettings';\nimport { SIDE_PANE_OPTIONS } from './../common/constants';\n\nconst GoLiveButton = () => {\n const isStreamingSidepaneOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.STREAMING);\n const toggleStreaming = useSidepaneToggle(SIDE_PANE_OPTIONS.STREAMING);\n const { isStreamingOn, isBrowserRecordingOn } = useRecordingStreaming();\n const isHLSStartedFromUI = useIsHLSStartedFromUI();\n const isRTMPStartedFromUI = useIsRTMPStartedFromUI();\n let tooltipText = 'Start streaming';\n if (isHLSStartedFromUI || isRTMPStartedFromUI) {\n if (isHLSStartedFromUI) {\n tooltipText = 'HLS start in progress';\n }\n if (isRTMPStartedFromUI) {\n tooltipText = 'RTMP start in progress';\n }\n }\n return (\n <Tooltip title={tooltipText}>\n <Button\n data-testid=\"go_live\"\n variant={isStreamingSidepaneOpen ? 'standard' : 'primary'}\n onClick={() => {\n toggleStreaming();\n window.sessionStorage.setItem('userStartedStream', 'true');\n }}\n icon\n loading={isRTMPStartedFromUI || isHLSStartedFromUI}\n disabled={isBrowserRecordingOn && !isStreamingOn}\n >\n <GoLiveIcon />\n Go Live\n </Button>\n </Tooltip>\n );\n};\n\nexport default GoLiveButton;\n", "import React, { useCallback, useState } from 'react';\nimport { InfoIcon } from '@100mslive/react-icons';\nimport { Flex, Input, Label, Text, Tooltip } from '../../../';\nimport { DialogRow } from '../../primitives/DialogContent';\nimport {\n RTMP_RECORD_DEFAULT_RESOLUTION,\n RTMP_RECORD_RESOLUTION_MAX,\n RTMP_RECORD_RESOLUTION_MIN,\n} from '../../common/constants';\n\nexport const ResolutionInput = ({ onResolutionChange, disabled, tooltipText, css, testId }) => {\n const [resolution, setResolution] = useState(RTMP_RECORD_DEFAULT_RESOLUTION);\n\n const resolutionChangeHandler = useCallback(\n event => {\n const { name, value } = event.target;\n let width = name === 'resWidth' ? Number(value) : resolution.width;\n let height = name === 'resHeight' ? Number(value) : resolution.height;\n\n if (width === 0) {\n width = null;\n }\n if (height === 0) {\n height = null;\n }\n const newResolution = {\n width: !isNaN(width) ? width : RTMP_RECORD_DEFAULT_RESOLUTION.width,\n height: !isNaN(height) ? height : RTMP_RECORD_DEFAULT_RESOLUTION.height,\n };\n setResolution(newResolution);\n },\n [resolution],\n );\n\n return (\n <DialogRow breakSm css={css}>\n <Flex gap={1}>\n <Label css={{ mb: '$8' }}>Resolution</Label>\n {tooltipText && (\n <Tooltip title={tooltipText}>\n <div>\n <InfoIcon color=\"#B0C3DB\" />\n </div>\n </Tooltip>\n )}\n </Flex>\n <Flex\n justify=\"between\"\n css={{ width: !tooltipText ? '100%' : '70%', '@sm': { width: '100%' } }}\n gap={2}\n direction=\"column\"\n >\n <Flex justify=\"between\" gap={2}>\n <Flex direction=\"column\" css={{ width: '50%' }}>\n <Text variant=\"xs\">Width</Text>\n <Input\n data-testid={`${testId}_width`}\n css={{ width: '100%', mt: '$4' }}\n name=\"resWidth\"\n value={resolution.width}\n onChange={resolutionChangeHandler}\n readOnly={disabled}\n min={RTMP_RECORD_RESOLUTION_MIN}\n max={RTMP_RECORD_RESOLUTION_MAX}\n onBlur={() => onResolutionChange(resolution)}\n type=\"number\"\n />\n </Flex>\n <Flex direction=\"column\" css={{ width: '50%' }}>\n <Text variant=\"xs\">Height</Text>\n <Input\n data-testid={`${testId}_height`}\n css={{ width: '100%', mt: '$4' }}\n name=\"resHeight\"\n value={resolution.height}\n onChange={resolutionChangeHandler}\n onBlur={() => onResolutionChange(resolution)}\n readOnly={disabled}\n min={RTMP_RECORD_RESOLUTION_MIN}\n max={RTMP_RECORD_RESOLUTION_MAX}\n type=\"number\"\n />\n </Flex>\n </Flex>\n </Flex>\n </DialogRow>\n );\n};\n", "import React, { useEffect, useRef, useState } from 'react';\nimport { selectAppData, useHMSActions, useHMSStore, useRecordingStreaming } from '@100mslive/react-sdk';\nimport { AddCircleIcon, EndStreamIcon, GoLiveIcon, PencilIcon, SettingsIcon, TrashIcon } from '@100mslive/react-icons';\nimport { Accordion, Box, Button, Flex, Input, Label, Loading, Text } from '../../../';\nimport { Container, ContentBody, ContentHeader, ErrorText, RecordStream } from './Common';\nimport { ResolutionInput } from './ResolutionInput';\nimport { useSetAppDataByKey } from '../AppData/useUISettings';\nimport { UserPreferencesKeys, useUserPreferences } from '../hooks/useUserPreferences';\nimport { APP_DATA, RTMP_RECORD_DEFAULT_RESOLUTION } from '../../common/constants';\n\nexport const RTMPStreaming = ({ onBack }) => {\n const { isRTMPRunning } = useRecordingStreaming();\n\n return (\n <Container>\n <ContentHeader title=\"Start Streaming\" content=\"Choose a destination\" onBack={onBack} />\n <ContentBody Icon={SettingsIcon} title=\"RTMP\">\n Live Stream your call to Twitch, YouTube, Facebook and any app which supports RTMP, all at the same time\n </ContentBody>\n {!isRTMPRunning ? <StartRTMP /> : <EndRTMP />}\n </Container>\n );\n};\n\nconst StartRTMP = () => {\n const [rtmpPreference = [], setRTMPPreference] = useUserPreferences(UserPreferencesKeys.RTMP_URLS);\n const [rtmpStreams, setRTMPStreams] = useState(\n rtmpPreference.length > 0\n ? rtmpPreference\n : [\n {\n name: 'Stream',\n id: Date.now(),\n rtmpURL: '',\n streamKey: '',\n },\n ],\n );\n const hmsActions = useHMSActions();\n const recordingUrl = useHMSStore(selectAppData(APP_DATA.recordingUrl));\n const [error, setError] = useState(false);\n const [record, setRecord] = useState(false);\n const [resolution, setResolution] = useState(RTMP_RECORD_DEFAULT_RESOLUTION);\n const [isRTMPStarted, setRTMPStarted] = useSetAppDataByKey(APP_DATA.rtmpStarted);\n const hasRTMPURL = rtmpStreams.some(value => value.rtmpURL && value.streamKey);\n\n return (\n <Box\n css={{ overflowY: 'auto' }}\n as=\"form\"\n onSubmit={e => {\n e.preventDefault();\n }}\n >\n {rtmpStreams.length > 0 && (\n <Box css={{ px: '$10' }}>\n <Accordion.Root type=\"single\" collapsible defaultValue={rtmpStreams[0].id}>\n {rtmpStreams.map((rtmp, index) => {\n return (\n <Accordion.Item\n value={rtmp.id}\n key={rtmp.id}\n css={{\n border: '2px solid $surfaceLight !important',\n r: '$1',\n my: '$4',\n }}\n >\n <AccordionHeader rtmp={rtmp} setRTMPStreams={setRTMPStreams} />\n <Accordion.Content css={{ px: '$8', py: 0 }}>\n <RTMPForm {...rtmp} setRTMPStreams={setRTMPStreams} testId={`${index}_rtmp`} />\n </Accordion.Content>\n </Accordion.Item>\n );\n })}\n </Accordion.Root>\n </Box>\n )}\n <ResolutionInput\n testId=\"rtmp_resolution\"\n onResolutionChange={setResolution}\n css={{\n flexDirection: 'column',\n alignItems: 'start',\n px: '$10',\n my: '$8',\n }}\n />\n <RecordStream record={record} setRecord={setRecord} testId=\"rtmp_recording\" />\n <Box css={{ p: '$8 $10', '@lg': { display: 'flex', gap: '$4' } }}>\n {rtmpStreams.length < 3 && (\n <Button\n data-testid=\"add_stream\"\n variant=\"standard\"\n outlined\n icon\n css={{ my: '$4', w: '100%' }}\n onClick={() => {\n setRTMPStreams(streams => [\n ...streams,\n {\n name: 'Stream',\n id: Date.now(),\n rtmpURL: '',\n streamKey: '',\n },\n ]);\n }}\n >\n <AddCircleIcon /> Add Stream\n </Button>\n )}\n\n <Button\n data-testid=\"start_rtmp\"\n variant=\"primary\"\n icon\n type=\"submit\"\n css={{ w: '100%', my: '$4' }}\n disabled={isRTMPStarted || (rtmpStreams.length === 0 && !record)}\n onClick={async () => {\n try {\n const hasInvalidData = rtmpStreams.find(\n value => (value.rtmpURL && !value.streamKey) || (value.streamKey && !value.rtmpURL),\n );\n if (hasInvalidData || (rtmpStreams.length > 0 && !hasRTMPURL)) {\n return;\n }\n setError('');\n setRTMPStarted(true);\n const urls = hasRTMPURL ? rtmpStreams.map(value => `${value.rtmpURL}/${value.streamKey}`) : [];\n await hmsActions.startRTMPOrRecording({\n rtmpURLs: urls,\n meetingURL: recordingUrl,\n resolution: getResolution(resolution),\n record: record,\n });\n setRTMPPreference(rtmpStreams);\n } catch (error) {\n console.error(error);\n setError(error.message);\n setRTMPStarted(false);\n }\n }}\n >\n {isRTMPStarted ? <Loading size={24} color=\"currentColor\" /> : <GoLiveIcon />}\n {isRTMPStarted ? 'Starting stream...' : 'Go Live'}\n </Button>\n <ErrorText error={error} />\n </Box>\n </Box>\n );\n};\n\nconst EndRTMP = () => {\n const hmsActions = useHMSActions();\n const [inProgress, setInProgress] = useState(false);\n const [error, setError] = useState('');\n const { isRTMPRunning } = useRecordingStreaming();\n\n useEffect(() => {\n if (inProgress && !isRTMPRunning) {\n setInProgress(false);\n }\n }, [inProgress, isRTMPRunning]);\n\n return (\n <Box css={{ p: '$4 $10' }}>\n <ErrorText error={error} />\n <Button\n data-testid=\"stop_rtmp\"\n variant=\"danger\"\n css={{ w: '100%', r: '$0', my: '$8' }}\n icon\n loading={inProgress}\n disabled={inProgress}\n onClick={async () => {\n try {\n setInProgress(true);\n await hmsActions.stopRTMPAndRecording();\n } catch (error) {\n setError(error.message);\n setInProgress(false);\n }\n }}\n >\n <EndStreamIcon />\n End Stream\n </Button>\n </Box>\n );\n};\n\nconst ActionIcon = ({ icon: Icon, onClick }) => {\n return (\n <Text as=\"span\" css={{ mx: '$2', cursor: 'pointer' }} onClick={onClick}>\n <Icon width={16} height={16} />\n </Text>\n );\n};\n\nconst FormLabel = ({ id, children }) => {\n return (\n <Label htmlFor={id} css={{ color: '$textHighEmp', my: '$4', fontSize: '$sm' }}>\n {children}\n </Label>\n );\n};\n\nconst RTMPForm = ({ rtmpURL, id, streamKey, setRTMPStreams, testId }) => {\n const formRef = useRef(null);\n return (\n <Flex id={id} direction=\"column\" css={{ mb: '$8', px: '$8' }} ref={formRef}>\n <FormLabel id=\"rtmpURL\">\n RTMP URL\n <Asterik />\n </FormLabel>\n <Input\n data-testid={`${testId}_url`}\n placeholder=\"Enter RTMP URL\"\n id=\"rtmpURL\"\n name=\"rtmpURL\"\n value={rtmpURL}\n onChange={e => {\n setRTMPStreams(streams =>\n updateStream({\n streams,\n id,\n value: e.target.value,\n key: e.target.name,\n }),\n );\n }}\n required\n />\n <FormLabel id=\"streamKey\">\n Stream Key\n <Asterik />\n </FormLabel>\n <Input\n placeholder=\"Enter Stream Key\"\n id=\"streamKey\"\n name=\"streamKey\"\n value={streamKey}\n data-testid={`${testId}_key`}\n onChange={e => {\n setRTMPStreams(streams =>\n updateStream({\n streams,\n id,\n value: e.target.value,\n key: e.target.name,\n }),\n );\n }}\n required\n />\n </Flex>\n );\n};\n\nconst Asterik = () => {\n return (\n <Text variant=\"sm\" as=\"span\" css={{ color: '$error', mx: '$2' }}>\n *\n </Text>\n );\n};\nconst AccordionHeader = ({ rtmp, setRTMPStreams }) => {\n const [edit, setEdit] = useState(false);\n return (\n <Accordion.Header css={{ px: '$8' }}>\n {edit ? (\n <Input\n defaultValue={rtmp.name}\n autoFocus\n onBlur={e => {\n const value = e.currentTarget.value.trim();\n if (value) {\n setRTMPStreams(streams =>\n streams.map(stream => {\n if (stream.id === rtmp.id) {\n stream.name = value;\n }\n return stream;\n }),\n );\n setEdit(false);\n }\n }}\n />\n ) : (\n <Text css={{ flex: '1 1 0' }}>{rtmp.name}</Text>\n )}\n <Flex css={{ mx: '$4', gap: '$2' }}>\n <ActionIcon\n onClick={e => {\n e.stopPropagation();\n setEdit(true);\n }}\n icon={PencilIcon}\n />\n <ActionIcon\n onClick={() => {\n setRTMPStreams(streams => streams.filter(stream => stream.id !== rtmp.id));\n }}\n icon={TrashIcon}\n />\n </Flex>\n </Accordion.Header>\n );\n};\n\nconst updateStream = ({ streams, id, key, value }) =>\n streams.map(stream => {\n if (stream.id === id) {\n return {\n ...stream,\n [key]: value,\n };\n }\n return stream;\n });\n\nexport function getResolution(recordingResolution) {\n const resolution = {};\n if (recordingResolution.width) {\n resolution.width = recordingResolution.width;\n }\n if (recordingResolution.height) {\n resolution.height = recordingResolution.height;\n }\n if (Object.keys(resolution).length > 0) {\n return resolution;\n }\n}\n", "import React from 'react';\nimport { selectPermissions, useHMSStore } from '@100mslive/react-sdk';\nimport { ChevronLeftIcon, ChevronRightIcon, CrossIcon, RecordIcon } from '@100mslive/react-icons';\nimport { Box, Flex, IconButton, slideLeftAndFade, Switch, Text } from '../../../';\n\nexport const StreamCard = ({ title, subtitle, Icon, css = {}, onClick, testId }) => {\n return (\n <Flex\n css={{\n w: '100%',\n p: '$10',\n r: '$1',\n cursor: 'pointer',\n bg: '$surfaceLight',\n mb: '$10',\n mt: '$8',\n ...css,\n }}\n data-testid={testId}\n onClick={onClick}\n >\n <Text css={{ alignSelf: 'center', p: '$4' }}>\n <Icon width={40} height={40} />\n </Text>\n <Box css={{ flex: '1 1 0', mx: '$8' }}>\n <Text variant=\"h6\" css={{ mb: '$4' }}>\n {title}\n </Text>\n <Text variant=\"sm\" css={{ color: '$textMedEmp' }}>\n {subtitle}\n </Text>\n </Box>\n <Text css={{ alignSelf: 'center' }}>\n <ChevronRightIcon />\n </Text>\n </Flex>\n );\n};\n\nexport const ContentHeader = ({ onBack, title, content }) => {\n return (\n <Flex css={{ w: '100%', py: '$8', px: '$10', cursor: 'pointer' }}>\n <Text\n css={{ p: '$2', bg: '$surfaceLight', r: '$round', alignSelf: 'center' }}\n onClick={onBack}\n data-testid=\"go_back\"\n >\n <ChevronLeftIcon width={16} height={16} />\n </Text>\n <Box css={{ flex: '1 1 0', mx: '$8' }}>\n <Text\n variant=\"tiny\"\n css={{\n textTransform: 'uppercase',\n fontWeight: '$semiBold',\n color: '$textMedEmp',\n }}\n >\n {title}\n </Text>\n <Text variant=\"h6\">{content}</Text>\n </Box>\n <IconButton onClick={onBack} css={{ alignSelf: 'flex-start' }} data-testid=\"close_stream_section\">\n <CrossIcon width={16} height={16} />\n </IconButton>\n </Flex>\n );\n};\n\nexport const Container = ({ children, rounded = false }) => {\n return (\n <Box\n css={{\n size: '100%',\n zIndex: 2,\n position: 'absolute',\n top: 0,\n left: 0,\n bg: '$surfaceDefault',\n transform: 'translateX(10%)',\n animation: `${slideLeftAndFade('10%')} 100ms ease-out forwards`,\n display: 'flex',\n flexDirection: 'column',\n borderRadius: rounded ? '$2' : '0',\n }}\n >\n {children}\n </Box>\n );\n};\n\nexport const ContentBody = ({ Icon, title, removeVerticalPadding = false, children }) => {\n return (\n <Box css={{ p: removeVerticalPadding ? '$0 $10' : '$10' }}>\n <Text css={{ display: 'flex', alignItems: 'center', mb: '$4' }}>\n <Icon />\n <Text as=\"span\" css={{ fontWeight: '$semiBold', ml: '$4' }}>\n {title}\n </Text>\n </Text>\n <Text variant=\"sm\" css={{ color: '$textMedEmp' }}>\n {children}\n </Text>\n </Box>\n );\n};\n\nexport const RecordStream = ({ record, setRecord, testId }) => {\n const permissions = useHMSStore(selectPermissions);\n return permissions?.browserRecording ? (\n <Flex align=\"center\" css={{ bg: '$surfaceLight', m: '$8 $10', p: '$8', r: '$0' }}>\n <Text css={{ color: '$error' }}>\n <RecordIcon />\n </Text>\n <Text variant=\"sm\" css={{ flex: '1 1 0', mx: '$8' }}>\n Record the stream\n </Text>\n <Switch checked={record} onCheckedChange={setRecord} data-testid={testId} />\n </Flex>\n ) : null;\n};\n\nexport const ErrorText = ({ error }) => {\n if (!error) {\n return null;\n }\n return (\n <Text variant=\"sm\" css={{ mb: '$8', color: '$error' }}>\n {error}\n </Text>\n );\n};\n", "import React, { useState } from 'react';\nimport { selectLocalPeerID, selectPeerSharingVideoPlaylist, useHMSStore, useScreenShare } from '@100mslive/react-sdk';\nimport {\n AudioPlayerIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n MusicIcon,\n PencilDrawIcon,\n ShareScreenIcon,\n VideoPlayerIcon,\n} from '@100mslive/react-icons';\nimport { Box, Dropdown, Flex, Text, Tooltip } from '../../../';\nimport { useWhiteboardMetadata } from '../../plugins/whiteboard/useWhiteboardMetadata';\nimport { useUISettings } from '../AppData/useUISettings';\nimport { usePlaylistMusic } from '../hooks/usePlaylistMusic';\nimport { useScreenshareAudio } from '../hooks/useScreenshareAudio';\nimport { UI_SETTINGS } from '../../common/constants';\n\nexport const getRecordingText = ({ isBrowserRecordingOn, isServerRecordingOn, isHLSRecordingOn }, delimiter = ', ') => {\n if (!isBrowserRecordingOn && !isServerRecordingOn && !isHLSRecordingOn) {\n return '';\n }\n const title = [];\n if (isBrowserRecordingOn) {\n title.push('Browser');\n }\n if (isServerRecordingOn) {\n title.push('Server');\n }\n if (isHLSRecordingOn) {\n title.push('HLS');\n }\n return title.join(delimiter);\n};\n\n/**\n * Display state of recording, streaming, playlist, whiteboard\n */\nexport const AdditionalRoomState = () => {\n const playlist = usePlaylistMusic();\n const isAudioOnly = useUISettings(UI_SETTINGS.isAudioOnly);\n const screenshareAudio = useScreenshareAudio();\n const [open, setOpen] = useState(false);\n const isPlaylistInactive = [\n !playlist.peer || !playlist.track,\n !playlist.peer?.isLocal && !playlist.track?.enabled,\n playlist.peer?.isLocal && !playlist.selection,\n ].some(Boolean);\n const isAudioshareInactive = [\n !screenshareAudio.peer || !screenshareAudio.track,\n !screenshareAudio.peer?.isLocal && !screenshareAudio.track?.enabled,\n ].some(Boolean);\n\n const peerSharingPlaylist = useHMSStore(selectPeerSharingVideoPlaylist);\n const localPeerID = useHMSStore(selectLocalPeerID);\n const isVideoPlayListPlaying = !!peerSharingPlaylist?.id;\n const { screenSharingPeerName, screenSharingPeerId, screenShareVideoTrackId } = useScreenShare();\n\n const isVideoScreenSharingOn = !!screenShareVideoTrackId;\n const { whiteboardOwner, amIWhiteboardOwner, toggleWhiteboard } = useWhiteboardMetadata();\n const shouldShowScreenShareState = isAudioOnly && isVideoScreenSharingOn;\n const shouldShowVideoState = isAudioOnly && isVideoPlayListPlaying;\n if (\n isPlaylistInactive &&\n isAudioshareInactive &&\n !shouldShowScreenShareState &&\n !shouldShowVideoState &&\n !whiteboardOwner\n ) {\n return null;\n }\n\n return (\n <Dropdown.Root open={open} onOpenChange={setOpen}>\n <Dropdown.Trigger asChild>\n <Flex\n align=\"center\"\n css={{\n color: '$textPrimary',\n borderRadius: '$1',\n border: '1px solid $textDisabled',\n padding: '$4',\n '@sm': { display: 'none' },\n }}\n data-testid=\"record_status_dropdown\"\n >\n {!isAudioshareInactive && (\n <Tooltip title=\"Screenshare Audio\">\n <Flex align=\"center\" css={{ color: '$textPrimary', mx: '$2' }}>\n <MusicIcon width={24} height={24} />\n </Flex>\n </Tooltip>\n )}\n {shouldShowScreenShareState && (\n <Tooltip title=\"Screenshare\">\n <Flex align=\"center\" css={{ color: '$textPrimary', mx: '$2' }}>\n <ShareScreenIcon width={24} height={24} />\n </Flex>\n </Tooltip>\n )}\n {shouldShowVideoState && (\n <Tooltip title=\"video playlist\">\n <Flex align=\"center\" css={{ color: '$textPrimary', mx: '$2' }}>\n <VideoPlayerIcon width={24} height={24} />\n </Flex>\n </Tooltip>\n )}\n {!isPlaylistInactive && (\n <Tooltip title=\"Playlist Music\">\n <Flex align=\"center\" css={{ color: '$textPrimary', mx: '$2' }}>\n <AudioPlayerIcon width={24} height={24} />\n </Flex>\n </Tooltip>\n )}\n {whiteboardOwner && (\n <Tooltip title=\"Whiteboard\">\n <Flex align=\"center\" css={{ color: '$textPrimary', mx: '$2' }}>\n <PencilDrawIcon width={24} height={24} />\n </Flex>\n </Tooltip>\n )}\n <Box css={{ '@lg': { display: 'none' }, color: '$textDisabled' }}>\n {open ? <ChevronUpIcon /> : <ChevronDownIcon />}\n </Box>\n </Flex>\n </Dropdown.Trigger>\n <Dropdown.Content sideOffset={5} align=\"end\" css={{ w: '$60' }}>\n {!isPlaylistInactive && (\n <Dropdown.Item css={{ color: '$textPrimary' }}>\n <AudioPlayerIcon width={24} height={24} />\n <Text variant=\"sm\" css={{ ml: '$2', flex: '1 1 0' }}>\n Playlist is playing\n </Text>\n {playlist.peer.isLocal ? (\n <Text\n variant=\"sm\"\n css={{ color: '$error', cursor: 'pointer', ml: '$2' }}\n onClick={e => {\n e.preventDefault();\n playlist.selection.playing ? playlist.pause() : playlist.play(playlist.selection.id);\n }}\n >\n {playlist.selection.playing ? 'Pause' : 'Play'}\n </Text>\n ) : (\n <Text\n variant=\"sm\"\n css={{ color: '$error', ml: '$2', cursor: 'pointer' }}\n onClick={e => {\n e.preventDefault();\n playlist.setVolume(!playlist.track.volume ? 100 : 0);\n }}\n >\n {playlist.track.volume === 0 ? 'Unmute' : 'Mute'}\n </Text>\n )}\n </Dropdown.Item>\n )}\n {!isAudioshareInactive && (\n <Dropdown.Item css={{ color: '$textPrimary' }}>\n <MusicIcon width={24} height={24} />\n <Text variant=\"sm\" css={{ ml: '$2', flex: '1 1 0' }}>\n Music is playing\n </Text>\n <Text\n variant=\"sm\"\n css={{ color: '$error', ml: '$2', cursor: 'pointer' }}\n onClick={e => {\n e.preventDefault();\n screenshareAudio.onToggle();\n }}\n >\n {screenshareAudio.muted ? 'Unmute' : 'Mute'}\n </Text>\n </Dropdown.Item>\n )}\n {shouldShowScreenShareState && (\n <Dropdown.Item css={{ color: '$textPrimary' }}>\n <ShareScreenIcon width={24} height={24} />\n <Text variant=\"sm\" css={{ ml: '$2', flex: '1 1 0' }}>\n {`Shared by: ${screenSharingPeerId === localPeerID ? 'You' : screenSharingPeerName}`}\n </Text>\n </Dropdown.Item>\n )}\n {shouldShowVideoState && (\n <Dropdown.Item css={{ color: '$textPrimary' }}>\n <VideoPlayerIcon width={24} height={24} />\n <Text variant=\"sm\" css={{ ml: '$2', flex: '1 1 0' }}>\n {`Shared by: ${peerSharingPlaylist.id === localPeerID ? 'You' : peerSharingPlaylist.name}`}\n </Text>\n </Dropdown.Item>\n )}\n {whiteboardOwner && (\n <Dropdown.Item css={{ color: '$textPrimary' }}>\n <PencilDrawIcon width={24} height={24} />\n <Text variant=\"sm\" css={{ ml: '$2', flex: '1 1 0' }}>\n Whiteboard Owner - {whiteboardOwner.name}\n {amIWhiteboardOwner && '(You)'}\n </Text>\n {amIWhiteboardOwner && (\n <Text\n variant=\"sm\"\n css={{ color: '$error', ml: '$2', cursor: 'pointer' }}\n onClick={e => {\n e.preventDefault();\n toggleWhiteboard();\n }}\n >\n Stop\n </Text>\n )}\n </Dropdown.Item>\n )}\n </Dropdown.Content>\n </Dropdown.Root>\n );\n};\n", "import { useCallback, useEffect, useMemo } from 'react';\nimport { selectLocalPeerID, selectPeerByCondition, useHMSStore } from '@100mslive/react-sdk';\nimport { useMyMetadata } from '../../components/hooks/useMetadata';\nimport { getMetadata } from '../../common/utils';\nimport { FeatureFlags } from '../../services/FeatureFlags';\n\nconst isWhiteboardOwner = peer => {\n return !!getMetadata(peer?.metadata).whiteboardOwner;\n};\n\nexport const useWhiteboardMetadata = () => {\n const localPeerID = useHMSStore(selectLocalPeerID);\n const { updateMetaData } = useMyMetadata();\n const whiteboardOwner = useHMSStore(selectPeerByCondition(isWhiteboardOwner));\n const amIWhiteboardOwner = useMemo(() => localPeerID === whiteboardOwner?.id, [localPeerID, whiteboardOwner]);\n\n /**\n * @param enabled {boolean}\n */\n const toggleWhiteboard = useCallback(async () => {\n if (!process.env.REACT_APP_PUSHER_APP_KEY) {\n console.error('Cannot start whiteboard - Pusher Key unavailable');\n }\n try {\n if (!whiteboardOwner || amIWhiteboardOwner) {\n await updateMetaData({ whiteboardOwner: !whiteboardOwner });\n } else {\n console.warn('Cannot toggle whiteboard as it was shared by another peer');\n }\n } catch (error) {\n console.error('failed to toggle whiteboard to ', !whiteboardOwner, error);\n }\n }, [whiteboardOwner, updateMetaData, amIWhiteboardOwner]);\n\n useEffect(() => {\n window.toggleWhiteboard = toggleWhiteboard;\n }, [toggleWhiteboard]);\n\n return {\n /** is whiteboard enabled for the room */\n whiteboardEnabled: FeatureFlags.enableWhiteboard,\n /** owner of the active whiteboard, can also be used to check if whiteboard is active */\n whiteboardOwner,\n amIWhiteboardOwner,\n toggleWhiteboard,\n };\n};\n", "import { useCallback, useState } from 'react';\nimport { selectLocalPeerID, selectPeerMetadata, useHMSActions, useHMSStore } from '@100mslive/react-sdk';\n\nexport const useMyMetadata = () => {\n const hmsActions = useHMSActions();\n const localPeerId = useHMSStore(selectLocalPeerID);\n const metaData = useHMSStore(selectPeerMetadata(localPeerId));\n const [isHandRaised, setHandRaised] = useState(metaData?.isHandRaised || false);\n const [isBRBOn, setBRBOn] = useState(metaData?.isBRBOn || false); // BRB = be right back\n\n const update = async updatedFields => {\n try {\n await hmsActions.changeMetadata(Object.assign(metaData, updatedFields));\n return true;\n } catch (error) {\n console.error('failed to update metadata ', metaData, updatedFields);\n }\n };\n\n const toggleHandRaise = useCallback(async () => {\n const brbUpdate = !isHandRaised ? false : isBRBOn;\n const success = await update({\n isHandRaised: !isHandRaised,\n isBRBOn: brbUpdate,\n });\n if (success) {\n setBRBOn(brbUpdate);\n setHandRaised(!isHandRaised);\n }\n }, [isHandRaised, isBRBOn]); //eslint-disable-line\n\n const toggleBRB = useCallback(async () => {\n const handRaiseUpdate = !isBRBOn ? false : isHandRaised;\n const success = await update({\n isHandRaised: handRaiseUpdate,\n isBRBOn: !isBRBOn,\n });\n if (success) {\n setBRBOn(!isBRBOn);\n setHandRaised(handRaiseUpdate);\n }\n }, [isHandRaised, isBRBOn]); //eslint-disable-line\n\n return {\n isHandRaised,\n isBRBOn,\n metaData,\n updateMetaData: update,\n toggleHandRaise,\n toggleBRB,\n };\n};\n", "import { useCallback } from 'react';\nimport {\n selectAudioPlaylist,\n selectAudioPlaylistTrackByPeerID,\n selectPeerSharingAudioPlaylist,\n useHMSActions,\n useHMSStore,\n} from '@100mslive/react-sdk';\n\nexport const usePlaylistMusic = () => {\n const peer = useHMSStore(selectPeerSharingAudioPlaylist);\n const track = useHMSStore(selectAudioPlaylistTrackByPeerID(peer?.id));\n const selection = useHMSStore(selectAudioPlaylist.selectedItem);\n const hmsActions = useHMSActions();\n\n const play = useCallback(\n async selectedId => {\n await hmsActions.audioPlaylist.play(selectedId);\n },\n [hmsActions],\n );\n\n const pause = useCallback(() => {\n hmsActions.audioPlaylist.pause();\n }, [hmsActions]);\n\n const setVolume = useCallback(\n value => {\n hmsActions.setVolume(value, track?.id);\n },\n [hmsActions, track],\n );\n\n return { selection, peer, track, play, pause, setVolume };\n};\n", "import { useCallback } from 'react';\nimport {\n selectPeerSharingAudio,\n selectScreenShareAudioByPeerID,\n useHMSActions,\n useHMSStore,\n} from '@100mslive/react-sdk';\n\nexport const useScreenshareAudio = () => {\n const hmsActions = useHMSActions();\n const peer = useHMSStore(selectPeerSharingAudio);\n const track = useHMSStore(selectScreenShareAudioByPeerID(peer?.id));\n\n const handleMute = useCallback(() => {\n if (!peer.isLocal) {\n hmsActions.setVolume(!track.volume ? 100 : 0, track.id);\n } else {\n hmsActions.setEnabledTrack(track.id, !track.enabled).catch(console.error);\n }\n }, [peer, hmsActions, track]);\n\n let muted = undefined;\n if (peer && track) {\n muted = peer.isLocal ? !track.enabled : track.volume === 0;\n }\n\n return { peer, track, muted, onToggle: handleMute };\n};\n", "import React from 'react';\nimport { useMedia } from 'react-use';\nimport { config as cssConfig, Flex } from '../../../';\nimport { EmojiReaction } from '../EmojiReaction';\nimport { LeaveRoom } from '../LeaveRoom';\nimport MetaActions from '../MetaActions';\nimport { Logo, SpeakerTag } from './HeaderComponents';\nimport { ParticipantCount } from './ParticipantList';\nimport { LiveStatus, RecordingStatus, StreamActions } from './StreamActions';\n\nexport const StreamingHeader = ({ isPreview }) => {\n const isMobile = useMedia(cssConfig.media.md);\n return (\n <Flex justify=\"between\" align=\"center\" css={{ position: 'relative', height: '100%' }}>\n <Flex\n align=\"center\"\n css={{\n position: 'absolute',\n left: '$10',\n }}\n >\n <Logo />\n {isMobile && (\n <Flex align=\"center\" gap={2}>\n <LeaveRoom />\n <LiveStatus />\n <RecordingStatus />\n </Flex>\n )}\n {!isPreview ? <SpeakerTag /> : null}\n </Flex>\n\n <Flex\n align=\"center\"\n css={{\n position: 'absolute',\n right: '$10',\n gap: '$4',\n }}\n >\n {isMobile ? (\n <>\n <EmojiReaction />\n <MetaActions compact />\n </>\n ) : (\n <Flex css={{ gap: '$4' }}>\n <StreamActions />\n </Flex>\n )}\n <ParticipantCount />\n </Flex>\n </Flex>\n );\n};\n", "import React, { Fragment, useCallback, useMemo, useState } from 'react';\nimport data from '@emoji-mart/data/sets/14/apple.json';\nimport { init } from 'emoji-mart';\nimport {\n selectAvailableRoleNames,\n selectIsConnectedToRoom,\n selectLocalPeerID,\n selectLocalPeerRoleName,\n useCustomEvent,\n useHMSActions,\n useHMSStore,\n useRecordingStreaming,\n} from '@100mslive/react-sdk';\nimport { EmojiIcon } from '@100mslive/react-icons';\nimport { Dropdown } from '../../Dropdown';\nimport { Box, Flex } from '../../Layout';\nimport { Text } from '../../Text';\nimport { styled } from '../../Theme';\nimport { Tooltip } from '../../Tooltip';\nimport IconButton from '../IconButton';\nimport { useHLSViewerRole } from './AppData/useUISettings';\nimport { useDropdownList } from './hooks/useDropdownList';\nimport { useIsFeatureEnabled } from './hooks/useFeatures';\nimport { EMOJI_REACTION_TYPE, FEATURE_LIST, HLS_TIMED_METADATA_DOC_URL } from '../common/constants';\n\ninit({ data });\n\n// When changing emojis in the grid, keep in mind that the payload used in sendHLSTimedMetadata has a limit of 100 characters. Using bigger emoji Ids can cause the limit to be exceeded.\nconst emojiReactionList = [\n [{ emojiId: '+1' }, { emojiId: '-1' }, { emojiId: 'wave' }, { emojiId: 'clap' }, { emojiId: 'fire' }],\n [{ emojiId: 'tada' }, { emojiId: 'heart_eyes' }, { emojiId: 'joy' }, { emojiId: 'open_mouth' }, { emojiId: 'sob' }],\n];\n\nexport const EmojiReaction = () => {\n const [open, setOpen] = useState(false);\n const hmsActions = useHMSActions();\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const roles = useHMSStore(selectAvailableRoleNames);\n const localPeerRole = useHMSStore(selectLocalPeerRoleName);\n const localPeerId = useHMSStore(selectLocalPeerID);\n const hlsViewerRole = useHLSViewerRole();\n const { isStreamingOn } = useRecordingStreaming();\n const isFeatureEnabled = useIsFeatureEnabled(FEATURE_LIST.EMOJI_REACTION);\n const filteredRoles = useMemo(() => roles.filter(role => role !== hlsViewerRole), [roles, hlsViewerRole]);\n useDropdownList({ open: open, name: 'EmojiReaction' });\n\n const onEmojiEvent = useCallback(data => {\n window.showFlyingEmoji(data?.emojiId, data?.senderId);\n }, []);\n\n const { sendEvent } = useCustomEvent({\n type: EMOJI_REACTION_TYPE,\n onEvent: onEmojiEvent,\n });\n\n const sendReaction = async emojiId => {\n const data = {\n type: EMOJI_REACTION_TYPE,\n emojiId: emojiId,\n senderId: localPeerId,\n };\n sendEvent(data, { roleNames: filteredRoles });\n if (isStreamingOn) {\n await hmsActions.sendHLSTimedMetadata([\n {\n payload: JSON.stringify(data),\n duration: 2,\n },\n ]);\n }\n };\n\n if (!isConnected || localPeerRole === hlsViewerRole || !isFeatureEnabled) {\n return null;\n }\n return (\n <Fragment>\n <Dropdown.Root open={open} onOpenChange={setOpen}>\n <Dropdown.Trigger asChild data-testid=\"emoji_reaction_btn\">\n <IconButton>\n <Tooltip title=\"Emoji reaction\">\n <Box>\n <EmojiIcon />\n </Box>\n </Tooltip>\n </IconButton>\n </Dropdown.Trigger>\n <Dropdown.Content sideOffset={5} align=\"center\" css={{ p: '$8', bg: '$surfaceDefault' }}>\n {emojiReactionList.map((emojiLine, index) => (\n <Flex key={index} justify=\"between\" css={{ mb: '$8' }}>\n {emojiLine.map(emoji => (\n <EmojiContainer key={emoji.emojiId} onClick={() => sendReaction(emoji.emojiId)}>\n <em-emoji id={emoji.emojiId} size=\"100%\" set=\"apple\"></em-emoji>\n </EmojiContainer>\n ))}\n </Flex>\n ))}\n <div style={{ textAlign: 'center' }}>\n <Text\n variant=\"sm\"\n inline={true}\n css={{\n color: '$textSecondary',\n }}\n >\n Reactions will be timed for Live Streaming viewers.{' '}\n </Text>\n <Text\n variant=\"sm\"\n inline={true}\n css={{\n color: '$primaryLight',\n fontWeight: '$semiBold',\n }}\n >\n <a href={HLS_TIMED_METADATA_DOC_URL} target=\"_blank\" rel=\"noopener noreferrer\">\n {'Learn more ->'}\n </a>\n </Text>\n </div>\n </Dropdown.Content>\n </Dropdown.Root>\n </Fragment>\n );\n};\n\nconst EmojiContainer = styled('span', {\n position: 'relative',\n cursor: 'pointer',\n width: '$16',\n height: '$16',\n p: '$4',\n '&:hover': {\n p: '7px',\n bg: '$surfaceLighter',\n borderRadius: '$1',\n },\n});\n", "import { useEffect } from 'react';\nimport { useSetAppDataByKey } from '../AppData/useUISettings';\nimport { APP_DATA } from '../../common/constants';\n\nexport const useDropdownList = ({ name, open }) => {\n const [dropdownList = [], setDropdownList] = useSetAppDataByKey(APP_DATA.dropdownList);\n\n useEffect(() => {\n if (open) {\n if (!dropdownList.includes(name)) {\n setDropdownList([...dropdownList, name]);\n }\n } else {\n const index = dropdownList.indexOf(name);\n if (index >= 0) {\n const newDropdownList = [...dropdownList];\n newDropdownList.splice(index, 1);\n setDropdownList(newDropdownList);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, name]);\n};\n", "import React, { Fragment, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { selectIsConnectedToRoom, selectPermissions, useHMSActions, useHMSStore } from '@100mslive/react-sdk';\nimport { AlertTriangleIcon, ExitIcon, HangUpIcon, VerticalMenuIcon } from '@100mslive/react-icons';\nimport { ToastManager } from './Toast/ToastManager';\nimport { Button } from '../../Button';\nimport { Dropdown } from '../../Dropdown';\nimport { IconButton } from '../../IconButton';\nimport { Box, Flex } from '../../Layout';\nimport { Dialog } from '../../Modal';\nimport { Text } from '../../Text';\nimport { styled } from '../../Theme';\nimport { Tooltip } from '../../Tooltip';\nimport { useHMSPrebuiltContext } from '../AppContext';\nimport { DialogCheckbox, DialogContent, DialogRow } from '../primitives/DialogContent';\nimport { useDropdownList } from './hooks/useDropdownList';\nimport { useNavigation } from './hooks/useNavigation';\nimport { isStreamingKit } from '../common/utils';\n\nexport const LeaveRoom = () => {\n const navigate = useNavigation();\n const params = useParams();\n const [open, setOpen] = useState(false);\n const [showEndRoomModal, setShowEndRoomModal] = useState(false);\n const [lockRoom, setLockRoom] = useState(false);\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const permissions = useHMSStore(selectPermissions);\n const hmsActions = useHMSActions();\n const { showLeave, onLeave } = useHMSPrebuiltContext();\n useDropdownList({ open, name: 'LeaveRoom' });\n\n const redirectToLeavePage = () => {\n if (showLeave) {\n if (params.role) {\n navigate('/leave/' + params.roomId + '/' + params.role);\n } else {\n navigate('/leave/' + params.roomId);\n }\n }\n ToastManager.clearAllToast();\n onLeave?.();\n };\n\n const leaveRoom = () => {\n hmsActions.leave();\n redirectToLeavePage();\n };\n\n const endRoom = () => {\n hmsActions.endRoom(lockRoom, 'End Room');\n redirectToLeavePage();\n };\n\n const isStreamKit = isStreamingKit();\n if (!permissions || !isConnected) {\n return null;\n }\n\n return (\n <Fragment>\n {permissions.endRoom ? (\n <Flex>\n <LeaveIconButton\n variant=\"danger\"\n key=\"LeaveRoom\"\n data-testid=\"leave_room_btn\"\n css={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}\n onClick={leaveRoom}\n >\n <Tooltip title=\"Leave Room\">\n {!isStreamKit ? (\n <Box>\n <HangUpIcon key=\"hangUp\" />\n </Box>\n ) : (\n <Flex gap={2}>\n <Box css={{ '@md': { transform: 'rotate(180deg)' } }}>\n <ExitIcon key=\"hangUp\" />\n </Box>\n <Text css={{ '@md': { display: 'none' }, color: 'inherit' }} variant=\"button\">\n Leave Studio\n </Text>\n </Flex>\n )}\n </Tooltip>\n </LeaveIconButton>\n <Dropdown.Root open={open} onOpenChange={setOpen}>\n <Dropdown.Trigger\n asChild\n css={{\n '&[data-state=\"open\"]': {\n bg: '$errorDark',\n },\n }}\n >\n <MenuTriggerButton variant=\"danger\" data-testid=\"leave_end_dropdown_trigger\">\n <VerticalMenuIcon />\n </MenuTriggerButton>\n </Dropdown.Trigger>\n <Dropdown.Content css={{ p: 0 }} alignOffset={-50} sideOffset={10}>\n <Dropdown.Item\n css={{ w: '100%', bg: 'rgba(178, 71, 81, 0.1)' }}\n onClick={() => {\n setShowEndRoomModal(true);\n }}\n data-testid=\"end_room_btn\"\n >\n <Flex gap={4}>\n <Box css={{ color: '$error' }}>\n <AlertTriangleIcon />\n </Box>\n <Flex direction=\"column\" align=\"start\">\n <Text variant=\"lg\" css={{ c: '$error' }}>\n End Room for All\n </Text>\n <Text variant=\"sm\" css={{ c: '$textMedEmp', mt: '$2' }}>\n Warning: You can\u2019t undo this action\n </Text>\n </Flex>\n </Flex>\n </Dropdown.Item>\n <Dropdown.Item css={{ bg: '$surfaceDefault' }} onClick={leaveRoom} data-testid=\"just_leave_btn\">\n <Flex gap={4}>\n <Box>\n <ExitIcon />\n </Box>\n <Flex direction=\"column\" align=\"start\">\n <Text variant=\"lg\">Leave {isStreamKit ? 'Studio' : 'Room'}</Text>\n <Text variant=\"sm\" css={{ c: '$textMedEmp', mt: '$2' }}>\n You can always rejoin later\n </Text>\n </Flex>\n </Flex>\n </Dropdown.Item>\n </Dropdown.Content>\n </Dropdown.Root>\n </Flex>\n ) : (\n <LeaveIconButton onClick={leaveRoom} variant=\"danger\" key=\"LeaveRoom\" data-testid=\"leave_room_btn\">\n <Tooltip title=\"Leave Room\">\n <Box>\n {isStreamKit ? (\n <Box css={{ '@md': { transform: 'rotate(180deg)' } }}>\n <ExitIcon />\n </Box>\n ) : (\n <HangUpIcon key=\"hangUp\" />\n )}\n </Box>\n </Tooltip>\n </LeaveIconButton>\n )}\n\n <Dialog.Root\n open={showEndRoomModal}\n onOpenChange={value => {\n if (!value) {\n setLockRoom(false);\n }\n setShowEndRoomModal(value);\n }}\n >\n <DialogContent title=\"End Room\" Icon={HangUpIcon}>\n <DialogCheckbox id=\"lockRoom\" title=\"Disable future joins\" value={lockRoom} onChange={setLockRoom} />\n <DialogRow justify=\"end\">\n <Button variant=\"danger\" onClick={endRoom} data-testid=\"lock_end_room\">\n End Room\n </Button>\n </DialogRow>\n </DialogContent>\n </Dialog.Root>\n </Fragment>\n );\n};\n\nconst LeaveIconButton = styled(IconButton, {\n color: '$white',\n h: '$14',\n px: '$8',\n r: '$1',\n bg: '$error',\n '&:not([disabled]):hover': {\n bg: '$errorTint',\n },\n '&:not([disabled]):active': {\n bg: '$errorTint',\n },\n '@md': {\n px: '$4',\n mx: 0,\n },\n});\n\nconst MenuTriggerButton = styled(LeaveIconButton, {\n borderLeft: '1px solid $errorDark',\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n px: '$3',\n '@md': {\n px: '$2',\n },\n});\n", "import React from 'react';\nimport { selectIsConnectedToRoom, useHMSStore } from '@100mslive/react-sdk';\nimport { BrbIcon, HandIcon } from '@100mslive/react-icons';\nimport { Flex } from '../../Layout';\nimport { Tooltip } from '../../Tooltip';\nimport IconButton from '../IconButton';\nimport { useIsFeatureEnabled } from './hooks/useFeatures';\nimport { useMyMetadata } from './hooks/useMetadata';\nimport { FEATURE_LIST } from '../common/constants';\n\nconst MetaActions = ({ isMobile = false, compact = false }) => {\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const { isHandRaised, isBRBOn, toggleHandRaise, toggleBRB } = useMyMetadata();\n const isHandRaiseEnabled = useIsFeatureEnabled(FEATURE_LIST.HAND_RAISE);\n const isBRBEnabled = useIsFeatureEnabled(FEATURE_LIST.BRB);\n\n if (!isConnected || (!isHandRaiseEnabled && !isBRBEnabled)) {\n return null;\n }\n\n return (\n <Flex align=\"center\" css={{ gap: compact ? '$4' : '$8' }}>\n {isHandRaiseEnabled && (\n <Tooltip title={`${!isHandRaised ? 'Raise' : 'Unraise'} hand`}>\n <IconButton\n onClick={toggleHandRaise}\n active={!isHandRaised}\n data-testid={`${isMobile ? 'raise_hand_btn_mobile' : 'raise_hand_btn'}`}\n >\n <HandIcon />\n </IconButton>\n </Tooltip>\n )}\n {isBRBEnabled && (\n <Tooltip title={`${isBRBOn ? `I'm back` : `I'll be right back`}`}>\n <IconButton onClick={toggleBRB} active={!isBRBOn} data-testid=\"brb_btn\">\n <BrbIcon />\n </IconButton>\n </Tooltip>\n )}\n </Flex>\n );\n};\n\nexport default MetaActions;\n", "import React from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useSearchParam } from 'react-use';\nimport { Box, Flex, Loading } from '../../../';\nimport SidePane from '../../layouts/SidePane';\nimport { Header } from '../Header';\nimport PreviewJoin from './PreviewJoin';\nimport { useAuthToken } from '../AppData/useUISettings';\nimport { useNavigation } from '../hooks/useNavigation';\nimport { useSkipPreview } from '../hooks/useSkipPreview';\nimport { QUERY_PARAM_NAME, QUERY_PARAM_PREVIEW_AS_ROLE } from '../../common/constants';\n\nconst PreviewContainer = () => {\n const navigate = useNavigation();\n const skipPreview = useSkipPreview();\n const previewAsRole = useSearchParam(QUERY_PARAM_PREVIEW_AS_ROLE);\n const initialName = useSearchParam(QUERY_PARAM_NAME) || (skipPreview ? 'Beam' : '');\n const { roomId: urlRoomId, role: userRole } = useParams(); // from the url\n const authToken = useAuthToken();\n\n const onJoin = () => {\n let meetingURL = `/meeting/${urlRoomId}`;\n if (userRole) {\n meetingURL += `/${userRole}`;\n }\n navigate(meetingURL);\n };\n return (\n <Flex direction=\"column\" css={{ size: '100%' }}>\n <Box css={{ h: '$18', '@md': { h: '$17', flexShrink: 0 } }} data-testid=\"header\">\n <Header />\n </Box>\n <Flex css={{ flex: '1 1 0', position: 'relative', overflowY: 'auto' }} justify=\"center\" align=\"center\">\n {authToken ? (\n <PreviewJoin initialName={initialName} skipPreview={skipPreview} asRole={previewAsRole} onJoin={onJoin} />\n ) : (\n <Loading size={100} />\n )}\n <SidePane\n css={{\n position: 'unset',\n mr: '$10',\n '@lg': { position: 'fixed', mr: '$0' },\n }}\n />\n </Flex>\n </Flex>\n );\n};\n\nexport default PreviewContainer;\n", "import React from 'react';\nimport { selectAppData, useHMSStore } from '@100mslive/react-sdk';\nimport { Chat } from '../components/Chat/Chat';\nimport { ParticipantList } from '../components/Header/ParticipantList';\nimport { StreamingLanding } from '../components/Streaming/StreamingLanding';\nimport { Box } from '../../Layout';\nimport { APP_DATA, SIDE_PANE_OPTIONS } from '../common/constants';\n\nconst SidePane = ({ css = {} }) => {\n const sidepane = useHMSStore(selectAppData(APP_DATA.sidePane));\n let ViewComponent;\n if (sidepane === SIDE_PANE_OPTIONS.PARTICIPANTS) {\n ViewComponent = ParticipantList;\n } else if (sidepane === SIDE_PANE_OPTIONS.CHAT) {\n ViewComponent = Chat;\n } else if (sidepane === SIDE_PANE_OPTIONS.STREAMING) {\n ViewComponent = StreamingLanding;\n }\n if (!ViewComponent) {\n return null;\n }\n return (\n <Box\n css={{\n position: 'absolute',\n w: '$100',\n h: '100%',\n p: '$10',\n bg: '$surfaceDefault',\n r: '$1',\n top: 0,\n right: '$10',\n zIndex: 10,\n boxShadow: '$md',\n ...css,\n '@lg': {\n w: '100%',\n right: 0,\n position: 'fixed',\n bottom: 0,\n height: 'unset',\n ...(css['@lg'] || {}),\n },\n }}\n >\n <ViewComponent />\n </Box>\n );\n};\n\nexport default SidePane;\n", "import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n HMSNotificationTypes,\n selectHMSMessagesCount,\n selectPeerNameByID,\n selectPermissions,\n selectSessionStore,\n useHMSActions,\n useHMSNotifications,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { ChevronDownIcon, CrossIcon, PinIcon } from '@100mslive/react-icons';\nimport { Button } from '../../../Button';\nimport { Box, Flex } from '../../../Layout';\nimport { Text } from '../../../Text';\nimport IconButton from '../../IconButton';\nimport { AnnotisedMessage, ChatBody } from './ChatBody';\nimport { ChatFooter } from './ChatFooter';\nimport { ChatHeader } from './ChatHeader';\nimport { useSetSubscribedChatSelector } from '../AppData/useUISettings';\nimport { useSetPinnedMessage } from '../hooks/useSetPinnedMessage';\nimport { useUnreadCount } from './useUnreadCount';\nimport { CHAT_SELECTOR, SESSION_STORE_KEY } from '../../common/constants';\n\nconst PinnedMessage = ({ clearPinnedMessage }) => {\n const permissions = useHMSStore(selectPermissions);\n const pinnedMessage = useHMSStore(selectSessionStore(SESSION_STORE_KEY.PINNED_MESSAGE));\n\n return pinnedMessage ? (\n <Flex css={{ p: '$8', color: '$textMedEmp', bg: '$surfaceLight', r: '$1' }} align=\"center\" justify=\"between\">\n <Box>\n <PinIcon />\n </Box>\n <Box\n css={{\n ml: '$8',\n color: '$textMedEmp',\n w: '100%',\n maxHeight: '$18',\n overflowY: 'auto',\n }}\n >\n <Text variant=\"sm\">\n <AnnotisedMessage message={pinnedMessage} />\n </Text>\n </Box>\n {permissions.removeOthers && (\n <IconButton onClick={() => clearPinnedMessage()}>\n <CrossIcon />\n </IconButton>\n )}\n </Flex>\n ) : null;\n};\n\nexport const Chat = () => {\n const notification = useHMSNotifications(HMSNotificationTypes.PEER_LEFT);\n const [peerSelector, setPeerSelector] = useSetSubscribedChatSelector(CHAT_SELECTOR.PEER_ID);\n const [roleSelector, setRoleSelector] = useSetSubscribedChatSelector(CHAT_SELECTOR.ROLE);\n const peerName = useHMSStore(selectPeerNameByID(peerSelector));\n const [chatOptions, setChatOptions] = useState({\n role: roleSelector || '',\n peerId: peerSelector && peerName ? peerSelector : '',\n selection: roleSelector ? roleSelector : peerSelector && peerName ? peerName : 'Everyone',\n });\n const [isSelectorOpen, setSelectorOpen] = useState(false);\n const listRef = useRef(null);\n const hmsActions = useHMSActions();\n const { setPinnedMessage } = useSetPinnedMessage();\n useEffect(() => {\n if (notification && notification.data && peerSelector === notification.data.id) {\n setPeerSelector('');\n setChatOptions({\n role: '',\n peerId: '',\n selection: 'Everyone',\n });\n }\n }, [notification, peerSelector, setPeerSelector]);\n\n const storeMessageSelector = selectHMSMessagesCount;\n\n const messagesCount = useHMSStore(storeMessageSelector) || 0;\n const scrollToBottom = useCallback(\n (unreadCount = 0) => {\n if (listRef.current && listRef.current.scrollToItem && unreadCount > 0) {\n listRef.current?.scrollToItem(messagesCount, 'end');\n requestAnimationFrame(() => {\n listRef.current?.scrollToItem(messagesCount, 'end');\n });\n hmsActions.setMessageRead(true);\n }\n },\n [hmsActions, messagesCount],\n );\n\n return (\n <Flex direction=\"column\" css={{ size: '100%' }}>\n <ChatHeader\n selectorOpen={isSelectorOpen}\n selection={chatOptions.selection}\n onSelect={({ role, peerId, selection }) => {\n setChatOptions({\n role,\n peerId,\n selection,\n });\n setPeerSelector(peerId);\n setRoleSelector(role);\n }}\n role={chatOptions.role}\n peerId={chatOptions.peerId}\n onToggle={() => {\n setSelectorOpen(value => !value);\n }}\n />\n <PinnedMessage clearPinnedMessage={setPinnedMessage} />\n\n <ChatBody role={chatOptions.role} peerId={chatOptions.peerId} ref={listRef} scrollToBottom={scrollToBottom} />\n <ChatFooter role={chatOptions.role} peerId={chatOptions.peerId} onSend={() => scrollToBottom(1)}>\n {!isSelectorOpen && (\n <NewMessageIndicator role={chatOptions.role} peerId={chatOptions.peerId} scrollToBottom={scrollToBottom} />\n )}\n </ChatFooter>\n </Flex>\n );\n};\n\nconst NewMessageIndicator = ({ role, peerId, scrollToBottom }) => {\n const unreadCount = useUnreadCount({ role, peerId });\n if (!unreadCount) {\n return null;\n }\n return (\n <Flex\n justify=\"center\"\n css={{\n width: '100%',\n left: 0,\n bottom: '100%',\n position: 'absolute',\n }}\n >\n <Button\n onClick={() => {\n scrollToBottom(unreadCount);\n }}\n css={{ p: '$2 $4', '& > svg': { ml: '$4' } }}\n >\n New Messages\n <ChevronDownIcon width={16} height={16} />\n </Button>\n </Flex>\n );\n};\n", "import React, { Fragment, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { useInView } from 'react-intersection-observer';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { VariableSizeList } from 'react-window';\nimport {\n selectHMSMessages,\n selectLocalPeerID,\n selectLocalPeerRoleName,\n selectMessagesByPeerID,\n selectMessagesByRole,\n selectPeerNameByID,\n selectPermissions,\n useHMSActions,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { HorizontalMenuIcon, PinIcon } from '@100mslive/react-icons';\nimport { Dropdown } from '../../../Dropdown';\nimport { IconButton } from '../../../IconButton';\nimport { Box, Flex } from '../../../Layout';\nimport { Text } from '../../../Text';\nimport { styled } from '../../../Theme';\nimport { Tooltip } from '../../../Tooltip';\nimport { useSetPinnedMessage } from '../hooks/useSetPinnedMessage';\n\nconst formatTime = date => {\n if (!(date instanceof Date)) {\n return '';\n }\n let hours = date.getHours();\n let mins = date.getMinutes();\n const suffix = hours > 11 ? 'PM' : 'AM';\n if (hours < 10) {\n hours = '0' + hours;\n }\n if (mins < 10) {\n mins = '0' + mins;\n }\n return `${hours}:${mins} ${suffix}`;\n};\n\nconst MessageTypeContainer = ({ left, right }) => {\n return (\n <Flex\n align=\"center\"\n css={{\n ml: 'auto',\n mr: '$4',\n p: '$2 $4',\n border: '1px solid $textDisabled',\n r: '$0',\n }}\n >\n {left && (\n <SenderName variant=\"tiny\" as=\"span\" css={{ color: '$textMedEmp' }}>\n {left}\n </SenderName>\n )}\n {left && right && <Box css={{ borderLeft: '1px solid $textDisabled', mx: '$4', h: '$8' }} />}\n {right && (\n <SenderName as=\"span\" variant=\"tiny\">\n {right}\n </SenderName>\n )}\n </Flex>\n );\n};\n\nconst MessageType = ({ roles, hasCurrentUserSent, receiver }) => {\n const peerName = useHMSStore(selectPeerNameByID(receiver));\n const localPeerRoleName = useHMSStore(selectLocalPeerRoleName);\n if (receiver) {\n return (\n <MessageTypeContainer\n left={hasCurrentUserSent ? `${peerName ? `TO ${peerName}` : ''}` : 'TO YOU'}\n right=\"PRIVATE\"\n />\n );\n }\n\n if (roles && roles.length) {\n return <MessageTypeContainer left=\"TO\" right={hasCurrentUserSent ? roles.join(',') : localPeerRoleName} />;\n }\n return null;\n};\n\nconst URL_REGEX =\n /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/;\n\nconst Link = styled('a', {\n color: '$brandDefault',\n wordBreak: 'break-word',\n '&:hover': {\n textDecoration: 'underline',\n },\n});\n\nexport const AnnotisedMessage = ({ message }) => {\n if (!message) {\n return <Fragment />;\n }\n\n return (\n <Fragment>\n {message\n .trim()\n .split(/(\\s)/)\n .map(part =>\n URL_REGEX.test(part) ? (\n <Link href={part} key={part} target=\"_blank\" rel=\"noopener noreferrer\">\n {part}\n </Link>\n ) : (\n part\n ),\n )}\n </Fragment>\n );\n};\n\nconst getMessageType = ({ roles, receiver }) => {\n if (roles && roles.length > 0) {\n return 'role';\n }\n return receiver ? 'private' : '';\n};\n\nconst ChatActions = ({ onPin }) => {\n const [open, setOpen] = useState(false);\n\n return (\n <Dropdown.Root open={open} onOpenChange={setOpen}>\n <Dropdown.Trigger asChild>\n <IconButton>\n <Tooltip title=\"More options\">\n <Box>\n <HorizontalMenuIcon />\n </Box>\n </Tooltip>\n </IconButton>\n </Dropdown.Trigger>\n <Dropdown.Portal>\n <Dropdown.Content sideOffset={5} align=\"end\" css={{ width: '$48' }}>\n <Dropdown.Item data-testid=\"pin_message_btn\" onClick={onPin}>\n <PinIcon />\n <Text variant=\"sm\" css={{ ml: '$4' }}>\n Pin Message\n </Text>\n </Dropdown.Item>\n </Dropdown.Content>\n </Dropdown.Portal>\n </Dropdown.Root>\n );\n};\n\nconst SenderName = styled(Text, {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '24ch',\n minWidth: 0,\n});\n\nconst ChatMessage = React.memo(({ index, style = {}, message, setRowHeight, onPin }) => {\n const { ref, inView } = useInView({ threshold: 0.5, triggerOnce: true });\n const rowRef = useRef(null);\n useEffect(() => {\n if (rowRef.current) {\n setRowHeight(index, rowRef.current.clientHeight);\n }\n }, [index, setRowHeight]);\n\n const hmsActions = useHMSActions();\n const localPeerId = useHMSStore(selectLocalPeerID);\n const permissions = useHMSStore(selectPermissions);\n const messageType = getMessageType({\n roles: message.recipientRoles,\n receiver: message.recipientPeer,\n });\n // show pin action only if peer has remove others permission and the message is of broadcast type\n const showPinAction = permissions.removeOthers && !messageType;\n\n useEffect(() => {\n if (message.id && !message.read && inView) {\n hmsActions.setMessageRead(true, message.id);\n }\n }, [message.read, hmsActions, inView, message.id]);\n\n return (\n <Box ref={ref} as=\"div\" css={{ mb: '$10', pr: '$10' }} style={style}>\n <Flex\n ref={rowRef}\n align=\"center\"\n css={{\n flexWrap: 'wrap',\n bg: messageType ? '$surfaceLight' : undefined,\n r: messageType ? '$1' : undefined,\n px: messageType ? '$4' : '$2',\n py: messageType ? '$4' : 0,\n userSelect: 'none',\n }}\n key={message.time}\n data-testid=\"chat_msg\"\n >\n <Text\n css={{\n color: '$textHighEmp',\n fontWeight: '$semiBold',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n }}\n as=\"div\"\n >\n <Flex align=\"center\">\n {message.senderName === 'You' || !message.senderName ? (\n <SenderName as=\"span\">{message.senderName || 'Anonymous'}</SenderName>\n ) : (\n <Tooltip title={message.senderName} side=\"top\" align=\"start\">\n <SenderName as=\"span\">{message.senderName}</SenderName>\n </Tooltip>\n )}\n <Text\n as=\"span\"\n variant=\"sm\"\n css={{\n ml: '$4',\n color: '$textSecondary',\n flexShrink: 0,\n }}\n >\n {formatTime(message.time)}\n </Text>\n </Flex>\n <MessageType\n hasCurrentUserSent={message.sender === localPeerId}\n receiver={message.recipientPeer}\n roles={message.recipientRoles}\n />\n {showPinAction && <ChatActions onPin={onPin} />}\n </Text>\n <Text\n variant=\"body2\"\n css={{\n w: '100%',\n mt: '$2',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap',\n userSelect: 'all',\n }}\n onClick={e => e.stopPropagation()}\n >\n <AnnotisedMessage message={message.message} />\n </Text>\n </Flex>\n </Box>\n );\n});\nconst ChatList = React.forwardRef(\n ({ width, height, setRowHeight, getRowHeight, messages, scrollToBottom }, listRef) => {\n const { setPinnedMessage } = useSetPinnedMessage();\n useLayoutEffect(() => {\n if (listRef.current && listRef.current.scrollToItem) {\n scrollToBottom(1);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [listRef]);\n\n return (\n <VariableSizeList\n ref={listRef}\n itemCount={messages.length}\n itemSize={getRowHeight}\n width={width}\n height={height - 1}\n style={{\n overflowX: 'hidden',\n }}\n >\n {({ index, style }) => (\n <ChatMessage\n style={style}\n index={index}\n key={messages[index].id}\n message={messages[index]}\n setRowHeight={setRowHeight}\n onPin={() => setPinnedMessage(messages[index])}\n />\n )}\n </VariableSizeList>\n );\n },\n);\nconst VirtualizedChatMessages = React.forwardRef(({ messages, scrollToBottom }, listRef) => {\n const rowHeights = useRef({});\n\n function getRowHeight(index) {\n // 72 will be default row height for any message length\n // 16 will add margin value as clientHeight don't include margin\n return rowHeights.current[index] + 16 || 72;\n }\n\n const setRowHeight = useCallback(\n (index, size) => {\n listRef.current.resetAfterIndex(0);\n rowHeights.current = { ...rowHeights.current, [index]: size };\n },\n [listRef],\n );\n\n return (\n <Box\n css={{\n mr: '-$10',\n h: '100%',\n }}\n as=\"div\"\n >\n <AutoSizer\n style={{\n width: '90%',\n }}\n >\n {({ height, width }) => (\n <ChatList\n width={width}\n height={height}\n messages={messages}\n setRowHeight={setRowHeight}\n getRowHeight={getRowHeight}\n scrollToBottom={scrollToBottom}\n ref={listRef}\n />\n )}\n </AutoSizer>\n </Box>\n );\n});\n\nexport const ChatBody = React.forwardRef(({ role, peerId, scrollToBottom }, listRef) => {\n const storeMessageSelector = role\n ? selectMessagesByRole(role)\n : peerId\n ? selectMessagesByPeerID(peerId)\n : selectHMSMessages;\n const messages = useHMSStore(storeMessageSelector) || [];\n\n if (messages.length === 0) {\n return (\n <Flex\n css={{\n width: '100%',\n height: '100%',\n textAlign: 'center',\n px: '$4',\n }}\n align=\"center\"\n justify=\"center\"\n >\n <Text>There are no messages here</Text>\n </Flex>\n );\n }\n\n return (\n <Fragment>\n <VirtualizedChatMessages messages={messages} scrollToBottom={scrollToBottom} ref={listRef} />\n </Fragment>\n );\n});\n", "// @ts-check\nimport { useCallback } from 'react';\nimport {\n selectPeerNameByID,\n selectSessionMetadata,\n useHMSActions,\n useHMSStore,\n useHMSVanillaStore,\n} from '@100mslive/react-sdk';\nimport { ToastManager } from '../Toast/ToastManager';\nimport { SESSION_STORE_KEY } from '../../common/constants';\n\n/**\n * set pinned chat message by updating the session store\n */\nexport const useSetPinnedMessage = () => {\n const hmsActions = useHMSActions();\n const vanillaStore = useHMSVanillaStore();\n const pinnedMessage = useHMSStore(selectSessionMetadata);\n\n const setPinnedMessage = useCallback(\n /**\n * @param {import(\"@100mslive/react-sdk\").HMSMessage | undefined} message\n */\n async message => {\n const peerName = vanillaStore.getState(selectPeerNameByID(message?.sender)) || message?.senderName;\n const newPinnedMessage = message ? (peerName ? `${peerName}: ${message.message}` : message.message) : null;\n if (newPinnedMessage !== pinnedMessage) {\n await hmsActions.sessionStore\n .set(SESSION_STORE_KEY.PINNED_MESSAGE, newPinnedMessage)\n .catch(err => ToastManager.addToast({ title: err.description }));\n }\n },\n [hmsActions, vanillaStore, pinnedMessage],\n );\n\n return { setPinnedMessage };\n};\n", "import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport data from '@emoji-mart/data';\nimport Picker from '@emoji-mart/react';\nimport { useHMSActions } from '@100mslive/react-sdk';\nimport { EmojiIcon, SendIcon } from '@100mslive/react-icons';\nimport { Box, Flex, IconButton, Popover, styled } from '../../../';\nimport { ToastManager } from '../Toast/ToastManager';\nimport { useChatDraftMessage } from '../AppData/useChatState';\nimport { useEmojiPickerStyles } from './useEmojiPickerStyles';\n\nconst TextArea = styled('textarea', {\n width: '100%',\n bg: 'transparent',\n color: '$textPrimary',\n resize: 'none',\n lineHeight: '1rem',\n position: 'relative',\n fontFamily: '$sans',\n fontSize: '100%',\n margin: 0,\n padding: 0,\n top: '$3',\n '&:focus': {\n boxShadow: 'none',\n outline: 'none',\n },\n});\n\nfunction EmojiPicker({ onSelect }) {\n const [showEmoji, setShowEmoji] = useState(false);\n const ref = useEmojiPickerStyles(showEmoji);\n return (\n <Popover.Root open={showEmoji} onOpenChange={setShowEmoji}>\n <Popover.Trigger asChild css={{ appearance: 'none' }}>\n <IconButton as=\"div\">\n <EmojiIcon />\n </IconButton>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n alignOffset={-40}\n sideOffset={16}\n align=\"end\"\n css={{\n p: 0,\n }}\n >\n <Box\n css={{\n minWidth: 352,\n minHeight: 435,\n }}\n ref={ref}\n >\n <Picker onEmojiSelect={onSelect} data={data} previewPosition=\"none\" skinPosition=\"search\" />\n </Box>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n\nexport const ChatFooter = ({ role, peerId, onSend, children }) => {\n const hmsActions = useHMSActions();\n const inputRef = useRef(null);\n const [draftMessage, setDraftMessage] = useChatDraftMessage();\n\n const sendMessage = useCallback(async () => {\n const message = inputRef.current.value;\n if (!message || !message.trim().length) {\n return;\n }\n try {\n if (role) {\n await hmsActions.sendGroupMessage(message, [role]);\n } else if (peerId) {\n await hmsActions.sendDirectMessage(message, peerId);\n } else {\n await hmsActions.sendBroadcastMessage(message);\n }\n inputRef.current.value = '';\n setTimeout(() => {\n onSend();\n }, 0);\n } catch (error) {\n ToastManager.addToast({ title: error.message });\n }\n }, [role, peerId, hmsActions, onSend]);\n\n useEffect(() => {\n const messageElement = inputRef.current;\n if (messageElement) {\n messageElement.value = draftMessage;\n }\n }, [draftMessage]);\n\n useEffect(() => {\n const messageElement = inputRef.current;\n return () => {\n setDraftMessage(messageElement?.value || '');\n };\n }, [setDraftMessage]);\n\n return (\n <Flex\n align=\"center\"\n css={{\n bg: '$surfaceLight',\n minHeight: '$16',\n maxHeight: '$24',\n position: 'relative',\n py: '$6',\n pl: '$8',\n r: '$1',\n }}\n >\n {children}\n <TextArea\n placeholder=\"Write something here\"\n ref={inputRef}\n autoFocus\n onKeyPress={async event => {\n if (event.key === 'Enter') {\n if (!event.shiftKey) {\n event.preventDefault();\n await sendMessage();\n }\n }\n }}\n autoComplete=\"off\"\n aria-autocomplete=\"none\"\n onPaste={e => e.stopPropagation()}\n onCut={e => e.stopPropagation()}\n onCopy={e => e.stopPropagation()}\n />\n <EmojiPicker\n onSelect={emoji => {\n inputRef.current.value += ` ${emoji.native} `;\n }}\n />\n <IconButton\n onClick={sendMessage}\n css={{ ml: 'auto', height: 'max-content', mr: '$4' }}\n data-testid=\"send_msg_btn\"\n >\n <SendIcon />\n </IconButton>\n </Flex>\n );\n};\n", "import { useCallback } from 'react';\nimport { selectAppData, useHMSActions, useHMSStore } from '@100mslive/react-sdk';\nimport { APP_DATA } from '../../common/constants';\n\nexport const useChatDraftMessage = () => {\n const hmsActions = useHMSActions();\n let chatDraftMessage = useHMSStore(selectAppData(APP_DATA.chatDraft));\n if (chatDraftMessage === undefined || chatDraftMessage === null) {\n chatDraftMessage = '';\n }\n const setDraftMessage = useCallback(\n message => {\n hmsActions.setAppData(APP_DATA.chatDraft, message, true);\n },\n [hmsActions],\n );\n return [chatDraftMessage, setDraftMessage];\n};\n", "import { useEffect, useRef } from 'react';\n\nexport const useEmojiPickerStyles = showing => {\n const ref = useRef(null);\n useEffect(() => {\n if (showing) {\n setTimeout(() => {\n const root = ref.current?.querySelector('em-emoji-picker')?.shadowRoot;\n const style = document.createElement('style');\n style.textContent = `\n #root {\n --em-rgb-color: var(--hms-ui-colors-textPrimary);\n --em-rgb-input: var(--hms-ui-colors-textPrimary);\n --em-color-border: var(--hms-ui-colors-surfaceDefault);\n --color-b: var(--hms-ui-colors-textPrimary);\n --rgb-background: transparent;\n color: var(--hms-ui-colors-textPrimary);\n font-family: var(--hms-ui-fonts-sans);\n }\n .sticky {\n background-color: var(--hms-ui-colors-surfaceLight);\n }\n `;\n root?.appendChild(style);\n }, 0);\n }\n }, [showing]);\n\n return ref;\n};\n", "import React, { useState } from 'react';\nimport { ChevronDownIcon, ChevronUpIcon, CrossIcon } from '@100mslive/react-icons';\nimport { Box, Dropdown, Flex, IconButton, Text, textEllipsis } from '../../../';\nimport { ChatSelector } from './ChatSelector';\nimport { useSidepaneToggle } from '../AppData/useSidepane';\nimport { SIDE_PANE_OPTIONS } from '../../common/constants';\n\nexport const ChatHeader = React.memo(({ selection, selectorOpen, onToggle, onSelect, role, peerId }) => {\n const [open, setOpen] = useState(false);\n const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);\n return (\n <Flex\n onClick={onToggle}\n align=\"center\"\n css={{\n color: '$textPrimary',\n h: '$16',\n mb: '$2',\n }}\n >\n <Text variant=\"h6\">Chat </Text>\n <Dropdown.Root open={open} onOpenChange={value => setOpen(value)}>\n <Dropdown.Trigger\n asChild\n data-testid=\"participant_list_filter\"\n css={{\n border: '1px solid $textDisabled',\n r: '$0',\n p: '$2 $4',\n ml: '$8',\n }}\n tabIndex={0}\n >\n <Flex align=\"center\">\n <Text variant=\"sm\" css={{ ...textEllipsis(80) }}>\n {selection}\n </Text>\n <Box css={{ ml: '$2', color: '$textDisabled' }}>\n {open ? <ChevronUpIcon width={14} height={14} /> : <ChevronDownIcon width={14} height={14} />}\n </Box>\n </Flex>\n </Dropdown.Trigger>\n <Dropdown.Content\n css={{\n w: '$64',\n overflow: 'hidden',\n maxHeight: 'unset',\n }}\n align=\"start\"\n sideOffset={8}\n >\n <ChatSelector onSelect={onSelect} role={role} peerId={peerId} />\n </Dropdown.Content>\n </Dropdown.Root>\n <IconButton\n css={{ ml: 'auto' }}\n onClick={e => {\n e.stopPropagation();\n selectorOpen ? onToggle() : toggleChat();\n }}\n data-testid=\"close_chat\"\n >\n <CrossIcon />\n </IconButton>\n </Flex>\n );\n});\n", "import React, { Fragment, useMemo, useState } from 'react';\nimport { useMeasure } from 'react-use';\nimport { FixedSizeList } from 'react-window';\nimport {\n selectMessagesUnreadCountByPeerID,\n selectMessagesUnreadCountByRole,\n selectRemotePeers,\n selectUnreadHMSMessagesCount,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { CheckIcon } from '@100mslive/react-icons';\nimport { Box, Dropdown, Flex, HorizontalDivider, Text, Tooltip } from '../../../';\nimport { ParticipantSearch } from '../Header/ParticipantList';\nimport { useFilteredRoles } from '../../common/hooks';\n\nconst ChatDotIcon = () => {\n return <Box css={{ size: '$6', bg: '$brandDefault', mx: '$2', r: '$round' }} />;\n};\n\nconst SelectorItem = ({ value, active, onClick, unreadCount }) => {\n return (\n <Dropdown.Item data-testid=\"chat_members\" css={{ align: 'center', px: '$10' }} onClick={onClick}>\n <Text variant=\"sm\">{value}</Text>\n <Flex align=\"center\" css={{ ml: 'auto', color: '$textPrimary' }}>\n {unreadCount > 0 && (\n <Tooltip title={`${unreadCount} unread`}>\n <Box css={{ mr: active ? '$3' : 0 }}>\n <ChatDotIcon />\n </Box>\n </Tooltip>\n )}\n {active && <CheckIcon width={16} height={16} />}\n </Flex>\n </Dropdown.Item>\n );\n};\n\nconst SelectorHeader = React.memo(({ children }) => {\n return (\n <Box css={{ flexShrink: 0 }}>\n <HorizontalDivider space={4} />\n <Text variant=\"md\" css={{ p: '$4 $10', fontWeight: '$semiBold' }}>\n {children}\n </Text>\n </Box>\n );\n});\n\nconst Everyone = React.memo(({ onSelect, active }) => {\n const unreadCount = useHMSStore(selectUnreadHMSMessagesCount);\n return (\n <SelectorItem\n value=\"Everyone\"\n active={active}\n unreadCount={unreadCount}\n onClick={() => {\n onSelect({ role: '', peerId: '', selection: 'Everyone' });\n }}\n />\n );\n});\n\nconst RoleItem = React.memo(({ onSelect, role, active }) => {\n const unreadCount = useHMSStore(selectMessagesUnreadCountByRole(role));\n return (\n <SelectorItem\n value={role}\n active={active}\n unreadCount={unreadCount}\n onClick={() => {\n onSelect({ role: role, selection: role });\n }}\n />\n );\n});\n\nconst PeerItem = ({ onSelect, peerId, name, active }) => {\n const unreadCount = useHMSStore(selectMessagesUnreadCountByPeerID(peerId));\n return (\n <SelectorItem\n value={name}\n active={active}\n unreadCount={unreadCount}\n onClick={() => {\n onSelect({ role: '', peerId, selection: name });\n }}\n />\n );\n};\n\nconst VirtualizedSelectItemList = ({ peers, selectedRole, selectedPeerId, searchValue, onSelect }) => {\n const [ref, { width, height }] = useMeasure();\n const roles = useFilteredRoles();\n const filteredPeers = useMemo(\n () =>\n peers.filter(\n // search should be empty or search phrase should be included in name\n peer => !searchValue || peer.name.toLowerCase().includes(searchValue.toLowerCase()),\n ),\n [peers, searchValue],\n );\n\n const listItems = useMemo(() => {\n const selectItems = [<Everyone onSelect={onSelect} active={!selectedRole && !selectedPeerId} />];\n\n roles.length > 0 && selectItems.push(<SelectorHeader>Roles</SelectorHeader>);\n roles.forEach(userRole =>\n selectItems.push(\n <RoleItem key={userRole} active={selectedRole === userRole} role={userRole} onSelect={onSelect} />,\n ),\n );\n\n filteredPeers.length > 0 && selectItems.push(<SelectorHeader>Participants</SelectorHeader>);\n filteredPeers.forEach(peer =>\n selectItems.push(\n <PeerItem\n key={peer.id}\n name={peer.name}\n peerId={peer.id}\n active={peer.id === selectedPeerId}\n onSelect={onSelect}\n />,\n ),\n );\n\n return selectItems;\n }, [onSelect, selectedRole, selectedPeerId, roles, filteredPeers]);\n\n return (\n <Dropdown.Group ref={ref} css={{ height: '$64', overflowY: 'auto' }}>\n <FixedSizeList itemSize={52} itemCount={listItems.length} width={width} height={height}>\n {({ index, style }) => (\n <div style={style} key={index}>\n {listItems[index]}\n </div>\n )}\n </FixedSizeList>\n </Dropdown.Group>\n );\n};\n\nexport const ChatSelector = ({ role, peerId, onSelect }) => {\n const peers = useHMSStore(selectRemotePeers);\n const [search, setSearch] = useState('');\n\n return (\n <Fragment>\n {peers.length > 0 && (\n <Box css={{ px: '$8' }}>\n <ParticipantSearch onSearch={setSearch} placeholder=\"Search participants\" />\n </Box>\n )}\n <VirtualizedSelectItemList\n selectedRole={role}\n selectedPeerId={peerId}\n onSelect={onSelect}\n peers={peers}\n searchValue={search}\n />\n </Fragment>\n );\n};\n", "import {\n selectMessagesUnreadCountByPeerID,\n selectMessagesUnreadCountByRole,\n selectUnreadHMSMessagesCount,\n useHMSStore,\n} from '@100mslive/react-sdk';\n\nexport const useUnreadCount = ({ role, peerId }) => {\n const unreadCountSelector = role\n ? selectMessagesUnreadCountByRole(role)\n : peerId\n ? selectMessagesUnreadCountByPeerID(peerId)\n : selectUnreadHMSMessagesCount;\n\n const unreadCount = useHMSStore(unreadCountSelector);\n return unreadCount;\n};\n", "import React, { Fragment, useState } from 'react';\nimport { selectPermissions, useHMSStore, useRecordingStreaming } from '@100mslive/react-sdk';\nimport { ColoredHandIcon, CrossIcon, GoLiveIcon } from '@100mslive/react-icons';\nimport { Box, Flex } from '../../../Layout';\nimport { Text } from '../../../Text';\nimport IconButton from '../../IconButton';\nimport { StreamCard } from './Common';\nimport { HLSStreaming } from './HLSStreaming';\nimport { RTMPIcon } from './RTMPIcon';\nimport { RTMPStreaming } from './RTMPStreaming';\nimport { useSidepaneToggle } from '../AppData/useSidepane';\nimport { SIDE_PANE_OPTIONS } from '../../common/constants';\n\nexport const StreamingLanding = () => {\n const toggleStreaming = useSidepaneToggle(SIDE_PANE_OPTIONS.STREAMING);\n const { isHLSRunning, isRTMPRunning } = useRecordingStreaming();\n const permissions = useHMSStore(selectPermissions);\n const [showHLS, setShowHLS] = useState(isHLSRunning);\n const [showRTMP, setShowRTMP] = useState(isRTMPRunning);\n\n if (!permissions?.hlsStreaming && !permissions?.rtmpStreaming) {\n toggleStreaming();\n return null;\n }\n\n return (\n <Fragment>\n <Flex css={{ w: '100%', py: '$8' }}>\n <Box\n css={{\n alignSelf: 'center',\n p: '$4',\n bg: '$surfaceLight',\n r: '$round',\n }}\n >\n <ColoredHandIcon width={40} height={40} />\n </Box>\n <Box css={{ flex: '1 1 0', mx: '$8' }}>\n <Text variant=\"sm\">Welcome !</Text>\n <Text variant=\"h6\">Let\u2019s get you started</Text>\n </Box>\n <IconButton onClick={toggleStreaming} css={{ alignSelf: 'flex-start' }} data-testid=\"close_streaming\">\n <CrossIcon />\n </IconButton>\n </Flex>\n <Text variant=\"tiny\" color=\"$textMedEmp\">\n Start Streaming\n </Text>\n {permissions?.hlsStreaming && (\n <StreamCard\n testId=\"hls_stream\"\n title=\"Live Stream with HLS\"\n subtitle=\"Stream to millions, edit and control what the viewer sees and more!\"\n css={{ my: '$8' }}\n onClick={() => setShowHLS(true)}\n Icon={GoLiveIcon}\n />\n )}\n {permissions?.rtmpStreaming && (\n <StreamCard\n testId=\"rtmp_stream\"\n title=\"Stream live to Facebook, Twitch, and others\"\n subtitle=\"Stream to a specific destination directly from your app.\"\n css={{ my: '$8' }}\n onClick={() => {\n setShowRTMP(true);\n }}\n Icon={RTMPIcon}\n />\n )}\n {showHLS && <HLSStreaming onBack={() => setShowHLS(false)} />}\n {showRTMP && <RTMPStreaming onBack={() => setShowRTMP(false)} />}\n </Fragment>\n );\n};\n", "import React, { Fragment, useCallback, useEffect, useState } from 'react';\nimport { selectAppData, selectRoomID, useHMSActions, useHMSStore, useRecordingStreaming } from '@100mslive/react-sdk';\nimport {\n EndStreamIcon,\n EyeOpenIcon,\n GoLiveIcon,\n InfoIcon,\n LinkIcon,\n PeopleIcon,\n SupportIcon,\n WrenchIcon,\n} from '@100mslive/react-icons';\nimport { Box, Button, Flex, Loading, Text } from '../../../';\nimport { Container, ContentBody, ContentHeader, ErrorText, RecordStream } from './Common';\nimport { useSetAppDataByKey } from '../AppData/useUISettings';\nimport { useFilteredRoles } from '../../common/hooks';\nimport { getDefaultMeetingUrl } from '../../common/utils';\nimport { APP_DATA } from '../../common/constants';\n\nconst getCardData = (roleName, roomId) => {\n let data = {};\n const formattedRoleName = roleName[0].toUpperCase() + roleName.slice(1);\n\n switch (roleName) {\n case 'broadcaster': {\n data = {\n title: formattedRoleName,\n content: 'Broadcasters can livestream audio or video, manage stream appearance and control the room via HLS.',\n icon: <SupportIcon />,\n };\n break;\n }\n case 'hls-viewer': {\n data = {\n title: 'HLS Viewer',\n content:\n 'Viewers can view and send chat messages, but need to be made broadcasters to participate with audio or video.',\n icon: <EyeOpenIcon />,\n };\n break;\n }\n default:\n data = {\n title: formattedRoleName,\n content: `${formattedRoleName} is customised with specific permissions, which will determine how it interacts with this room.`,\n icon: <WrenchIcon />,\n order: 1,\n };\n }\n data['link'] = `/${roomId}/${roleName}`;\n return data;\n};\n\nconst Card = ({ title, icon, link, content, isHLSRunning, order = 0 }) => {\n const [copied, setCopied] = useState(false);\n return isHLSRunning ? (\n <Box\n key={title}\n css={{\n backgroundColor: '$surfaceLight',\n padding: '$10',\n order,\n borderRadius: '$2',\n }}\n >\n <Flex align=\"center\" gap=\"2\" css={{ color: '$primaryLight' }}>\n {icon}\n <Text variant=\"h6\" css={{ fontWeight: '$semiBold' }}>\n {title}\n </Text>\n </Flex>\n <Text variant=\"sm\" css={{ color: '$textMedEmp', mt: '$6' }}>\n {content}\n </Text>\n <Button\n variant=\"standard\"\n onClick={() => {\n navigator.clipboard.writeText(`${window.location.origin}${link}`);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }}\n css={{ w: '100%', r: '$1', mt: '$10', fontWeight: '$semiBold' }}\n icon\n >\n {copied ? (\n <>Link copied!</>\n ) : (\n <>\n <LinkIcon style={{ color: 'inherit' }} />\n Copy Invite Link\n </>\n )}\n </Button>\n </Box>\n ) : null;\n};\n\nexport const HLSStreaming = ({ onBack }) => {\n const roleNames = useFilteredRoles();\n const roomId = useHMSStore(selectRoomID);\n const cards = roleNames.map(roleName => getCardData(roleName, roomId));\n\n const { isHLSRunning } = useRecordingStreaming();\n const [showLinks, setShowLinks] = useState(false);\n return !showLinks ? (\n <Container rounded>\n <ContentHeader title=\"Start Streaming\" content=\"HLS\" onBack={onBack} />\n <ContentBody title=\"HLS Streaming\" Icon={GoLiveIcon} removeVerticalPadding>\n Stream directly from the browser using any device with multiple hosts and real-time messaging, all within this\n platform.\n </ContentBody>\n {isHLSRunning ? <EndHLS setShowLinks={setShowLinks} /> : <StartHLS />}\n </Container>\n ) : (\n <Container rounded>\n <ContentHeader title=\"Invite People\" content=\"Start the conversation\" onBack={() => setShowLinks(false)} />\n\n <Flex direction=\"column\" css={{ gap: '$10', p: '$0 $10', overflowY: 'auto', mb: '$10' }}>\n {cards.map(card => (\n <Card key={card.title} {...card} isHLSRunning={isHLSRunning} />\n ))}\n </Flex>\n </Container>\n );\n};\n\nconst StartHLS = () => {\n const [record, setRecord] = useState(false);\n const [error, setError] = useState(false);\n const hmsActions = useHMSActions();\n const recordingUrl = useHMSStore(selectAppData(APP_DATA.recordingUrl));\n const [isHLSStarted, setHLSStarted] = useSetAppDataByKey(APP_DATA.hlsStarted);\n const startHLS = useCallback(\n async variants => {\n try {\n if (isHLSStarted) {\n return;\n }\n setHLSStarted(true);\n setError('');\n await hmsActions.startHLSStreaming({\n variants,\n recording: { hlsVod: record, singleFilePerLayer: record },\n });\n } catch (error) {\n if (error.message.includes('invalid input')) {\n await startHLS([{ meetingURL: recordingUrl || getDefaultMeetingUrl() }]);\n return;\n }\n setHLSStarted(false);\n setError(error.message);\n }\n },\n [hmsActions, record, isHLSStarted, setHLSStarted, recordingUrl],\n );\n\n return (\n <Fragment>\n <RecordStream record={record} setRecord={setRecord} testId=\"hls-recording\" />\n <Box css={{ p: '$4 $10' }}>\n <ErrorText error={error} />\n <Button\n data-testid=\"start_hls\"\n css={{ w: '100%', r: '$0' }}\n icon\n onClick={() => startHLS()}\n disabled={isHLSStarted}\n >\n {isHLSStarted ? <Loading size={24} color=\"currentColor\" /> : <GoLiveIcon />}\n {isHLSStarted ? 'Starting stream...' : 'Go Live'}\n </Button>\n </Box>\n <Flex align=\"center\" css={{ p: '$4 $10' }}>\n <Text>\n <InfoIcon width={16} height={16} />\n </Text>\n <Text variant=\"tiny\" color=\"$textMedEmp\" css={{ mx: '$8' }}>\n You cannot start recording once the stream starts, you will have to stop the stream to enable recording.\n </Text>\n </Flex>\n </Fragment>\n );\n};\n\nconst EndHLS = ({ setShowLinks }) => {\n const hmsActions = useHMSActions();\n\n const [inProgress, setInProgress] = useState(false);\n const [error, setError] = useState('');\n const { isHLSRunning } = useRecordingStreaming();\n\n useEffect(() => {\n if (inProgress && !isHLSRunning) {\n setInProgress(false);\n }\n }, [inProgress, isHLSRunning]);\n\n return (\n <Box css={{ p: '$4 $10' }}>\n <ErrorText error={error} />\n <Button\n data-testid=\"stop_hls\"\n variant=\"danger\"\n css={{ w: '100%', r: '$0', mt: '$8' }}\n icon\n loading={inProgress}\n disabled={inProgress}\n onClick={async () => {\n try {\n setInProgress(true);\n await hmsActions.stopHLSStreaming();\n } catch (error) {\n setError(error.message);\n setInProgress(false);\n }\n }}\n >\n <EndStreamIcon />\n End Stream\n </Button>\n <Button icon css={{ w: '100%', r: '$0', mt: '$8' }} onClick={() => setShowLinks(true)}>\n <PeopleIcon /> Invite People\n </Button>\n </Box>\n );\n};\n", "import React from 'react';\n\nexport const RTMPIcon = props => {\n return (\n <svg width=\"49\" height=\"50\" viewBox=\"0 0 49 50\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <rect x=\"1.36775\" y=\"22.6295\" width=\"21.1485\" height=\"21.1485\" rx=\"10.5742\" fill=\"white\" />\n <rect x=\"1.36775\" y=\"22.6295\" width=\"21.1485\" height=\"21.1485\" rx=\"10.5742\" fill=\"url(#pattern0)\" />\n <rect\n x=\"1.36775\"\n y=\"22.6295\"\n width=\"21.1485\"\n height=\"21.1485\"\n rx=\"10.5742\"\n stroke=\"#1B1F26\"\n strokeWidth=\"1.42857\"\n />\n <rect\n x=\"12.2857\"\n y=\"0.785714\"\n width=\"26.5266\"\n height=\"27.423\"\n rx=\"13.2633\"\n fill=\"url(#pattern1)\"\n stroke=\"#1B1F26\"\n strokeWidth=\"1.42857\"\n />\n <rect x=\"20.2432\" y=\"21.0294\" width=\"27.8927\" height=\"27.8927\" rx=\"13.9464\" fill=\"#9146FF\" />\n <rect x=\"20.2432\" y=\"21.0294\" width=\"27.8927\" height=\"27.8927\" rx=\"13.9464\" fill=\"url(#pattern2)\" />\n <rect\n x=\"20.2432\"\n y=\"21.0294\"\n width=\"27.8927\"\n height=\"27.8927\"\n rx=\"13.9464\"\n stroke=\"#1B1F26\"\n strokeWidth=\"1.42857\"\n />\n <defs>\n <pattern id=\"pattern0\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlinkHref=\"#image0_3622_12940\" transform=\"translate(0.0938539 0.0951671) scale(0.000996094)\" />\n </pattern>\n <pattern id=\"pattern1\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlinkHref=\"#image1_3622_12940\" transform=\"translate(-0.0178571) scale(0.000647321 0.000625)\" />\n </pattern>\n <pattern id=\"pattern2\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlinkHref=\"#image2_3622_12940\" transform=\"translate(0.078125 0.09375) scale(0.00117187)\" />\n </pattern>\n <image\n id=\"image0_3622_12940\"\n width=\"800\"\n height=\"800\"\n xlinkHref=\"data:image/png;base64,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A1VwIiACIiACIiACIiCBpTwgAiIgAiIgAiIgAgsmIIG1YKAKTgREQAREQAREQAQksJQHREAEREAEREAERGDBBCSwFgxUwYmACIiACIiACIiABJbygAiIgAiIgAiIgAgsmIAE1oKBKjgREAEREAEREAERkMBSHhABERABERABERCBBROQwFowUAUnAiIgAiIgAiIgAhJYygMiIAIiIAIiIAIisGACElgLBqrgREAEREAEREAEREACS3lABERABERABERABBZMQAJrwUAVnAiIgAiIgAiIgAhIYCkPiIAIiIAIiIAIiMCCCUhgLRioghMBERABERABERABCSzlAREQAREQAREQARFYMAEJrAUDVXAiIAIiIAIiIAIiIIGlPCACIiACIiACIiACCyYggbVgoApOBERABERABERABCSwlAdEQAREQAREQAREYMEEJLAWDFTBiYAIiIAIiIAIiIAElvKACIiACIiACIiACCyYgATWgoEqOBEQAREQAREQARGQwFIeEAEREAEREAEREIEFE5DAWjBQBScCIiACIiACIiACEljKAyIgAiIgAiIgAiKwYAISWAsGquBEQAREQAREQAREQAJLeUAEREAEREAEREAEFkxAAmvBQBWcCIiACIiACIiACEhgKQ+IgAiIgAiIgAiIwIIJSGAtGKiCEwEREAEREAEREAEJLOUBERABERABERABEVgwAQmsBQNVcCIgAiIgAiIgAiIggaU8IAIiIAIiIAIiIAILJiCBtWCgCk4EREAEREAEREAEJLCUB0RABERABERABERgwQQksBYMVMGJgAiIgAiIgAiIgASW8oAIiIAIiIAIiIAILJiABNaCgSo4ERABERABERABEZDAUh4QAREQAREQAREQgQUTkMBaMFAFJwIiIAIiIAIiIAISWMoDIiACIiACIiACIrBgAhJYCwaq4ERABERABERABERAAkt5QAREQAREQAREQAQWTEACa8FAFZwIiIAIiIAIiIAISGApD4iACIiACIiACIjAgglIYC0YqIITAREQAREQAREQAQks5QEREAEREAEREAERWDABCawFA1VwIiACIiACIiACIiCBpTwgAiIgAiIgAiIgAgsmIIG1YKAKTgREQAREQAREQAQksJQHREAEREAEREAERGDBBCSwFgxUwYmACIiACIiACIiABJbygAiIgAiIgAiIgAgsmIAE1oKBKjgREAEREAEREAERkMBSHhABERABERABERCBBROQwFowUAUnAiIgAiIgAiIgAhJYygMiIAIiIAIiIAIisGACElgLBqrgREAEREAEREAEREACS3lABERABERABERABBZMQAJrwUAVnAiIgAiIgAiIgAhIYCkPiIAIiIAIiIAIiMCCCUhgLRioghMBERABERABERABCSzlAREQAREQAREQARFYMAEJrAUDVXAiIAIiIAIiIAIiIIGlPCACIiACIiACIiACCyYggbVgoApOBERABERABERABCSwlAdEQAREQAREQAREYMEEJLAWDFTBiYAIiIAIiIAIiIAElvKACIiACIiACIiACCyYgATWgoEqOBEQAREQAREQARGQwFIeEAEREAEREAEREIEFE5DAWjBQBScCIiACIiACIiACEljKAyIgAiIgAiIgAiKwYAISWAsGquBEQAREQAREQAREQAJLeUAEREAEREAEREAEFkxAAmvBQBWcCIiACIiACIiACEhgKQ+IgAiIgAiIgAiIwIIJSGAtGKiCEwEREAEREAEREAEJLOUBERABERABERABEVgwAQmsBQNVcCIgAiIgAiIgAiIggaU8IAIiIAIiIAIiIAILJiCBtWCgCk4EREAEREAEREAEJLCUB0RABERABERABERgwQQksBYMVMGJgAiIgAiIgAiIgASW8oAIiIAIiIAIiIAILJiABNaCgSo4ERABERABERABEZDAUh4QAREQAREQAREQgQUTkMBaMFAFJwIiIAIiIAIiIAISWMoDIiACIiACIiACIrBgAhJYCwaq4ERABERABERABERAAkt5QAREQAREQAREQAQWTEACa8FAFZwIiIAIiIAIiIAISGApD4iACIiACIiACIjAgglIYC0YqIITAREQAREQAREQAQks5QEREAEREAEREAERWDABCawFA1VwIiACIiACIiACIiCBpTwgAiIgAiIgAiIgAgsmIIG1YKAKTgREQAREQAREQAQksJQHREAEREAEREAERGDBBCSwFgxUwYmACIiACIiACIiABJbygAiIgAiIgAiIgAgsmIAE1oKBKjgREAEREAEREAERkMBSHhABERABERABERCBBROQwFowUAUnAiIgAiIgAiIgAhJYygMiIAIiIAIiIAIisGACElgLBqrgREAEREAEREAEREACS3lABERABERABERABBZMQAJrwUAVnAiIgAiIgAiIgAhIYCkPiIAIiIAIiIAIiMCCCUhgLRioghMBERABERABERABCSzlAREQAREQAREQARFYMAEJrAUDVXAiIAIiIAIiIAIiIIGlPCACIiACIiACIiACCyYggbVgoApOBERABERABERABCSwlAdEQAREQAREQAREYMEEJLAWDFTBiYAIiIAIiIAIiIAElvKACIiACIiACIiACCyYgATWgoEqOBEQAREQAREQARGQwFIeEAEREAEREAEREIEFE5DAWjBQBScCIiACIiACIiACEljKAyIgAiIgAiIgAiKwYAISWAsGquBEQAREQAREQAREQAJLeUAEREAEREAEREAEFkxAAmvBQBWcCIiACIiACIiACEhgKQ+IgAiIgAiIgAiIwIIJSGAtGKiCEwEREAEREAEREAEJLOUBERABERABERABEVgwAQmsBQNVcCIgAiIgAiIgAiIggaU8IAIiIAIiIAIiIAILJiCBtWCgCk4EREAEREAEREAEJLCUB0RABERABERABERgwQQksBYMVMGJgAiIgAiIgAiIgASW8oAIiIAIiIAIiIAILJiABNaCgSo4ERABERABERABEZDAUh4QAREQAREQAREQgQUTkMBaMFAFJwIiIAIiIAIiIAISWMoDIiACIiACIiACIrBgAhJYCwaq4ERABERABERABERAAkt5QAREQAREQAREQAQWTEACa8FAFZwIiIAIiIAIiIAISGApD4iACIiACIiACIjAgglIYC0YqIITAREQAREQAREQAQks5QEREAEREAEREAERWDABCawFA1VwIiACIiACIiACIiCBpTwgAiIgAiIgAiIgAgsmIIG1YKAKTgREQAREQAREQAQksJQHREAEREAEREAERGDBBCSwFgxUwYmACIiACIiACIiABJbygAiIgAiIgAiIgAgsmEBvweEpOBE4bQTqUCUhjesQqhB467jT+n7SVoeQ4J+g7mOpQ3rohLu8A1nw9xk+JxCv+cUDmXc4sN15PkTkgKd2h6hC0vZi2k+ybs89+d+ThPpgfvbjcPLz7ZxDd2w/mIffivmhy5H3DPDQ3ezScacTE4t8Feo0JIfucHfNeXeC8ft7XHBHr9VEhgOHlkOxPHRUuyJwVghIYJ2VO6l0PBABdFUVKq9MbN1Wlkiu/W3bbCtRKjzf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bAdLa2hz1UeMWVWux1A8tahtMziaxsI269TjOsr9mDNxu3IxE261NBu1Q/PX0sN/PFjoMZTWcxSfpuPXTRjaEIGHgYAE1sOQi7qGeyaAkKLsb9YeTlRQx6/blVkVaXQ65oBXM1aRHF7aPtvbXiF5nVf5v+nMw+Hcwd7N9ioXjtWZ7chxIjpc2uvbxnAkBPPfOMWN26053o7x5O3bpueohyYxRw88oH0L/26/UrxF1LdIKkD43fliwdRB1X+rs28Oxz3HO46DLVmLnLJo63X8ZrZ+wTgmMUdiij7csXmyPPaYhIM19ir3e7A+NqRjYpSTCHSBgJoIu5BLSqMIiIAIiIAIiECnCMRXh04lWYkVAREQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQgARWBzNNSRYBERABERABEVhvAhJY650/Sp0IiIAIiIAIiEAHCUhgdTDTlGQREAEREAEREIH1JiCBtd75o9SJgAiIgAiIgAh0kIAEVgczTUkWAREQAREQARFYbwISWOudP0qdCIiACIiACIhABwlIYHUw05RkERABERABERCB9SYggbXe+aPUiYAIiIAIiIAIdJCABFYHM01JFgEREAEREAERWG8CEljrnT9KnQiIgAiIgAiIQAcJSGB1MNOUZBEQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQgARWBzNNSRYBERABERABEVhvAhJY650/Sp0IiIAIiIAIiEAHCUhgdTDTlGQREAEREAEREIH1JiCBtd75o9SJgAiIgAiIgAh0kIAEVgczTUkWAREQAREQARFYbwISWOudP0qdCIiACIiACIhABwlIYHUw05RkERABERABERCB9SYggbXe+aPUiYAIiIAIiIAIdJCABFYHM01JFgEREAEREAERWG8CEljrnT9KnQiIgAiIgAiIQAcJSGB1MNOUZBEQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQgARWBzNNSRYBERABERABEVhvAhJY650/Sp0IiIAIiIAIiEAHCUhgdTDTlGQREAEREAEREIH1JiCBtd75o9SJgAiIgAiIgAh0kIAEVgczTUkWAREQAREQARFYbwISWOudP0qdCIiACIiACIhABwlIYHUw05RkERABERABERCB9SYggbXe+aPUiYAIiIAIiIAIdJCABFYHM01JFgEREAEREAERWG8CEljrnT9KnQiIgAiIgAiIQAcJSGB1MNOUZBEQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQgARWBzNNSRYBERABERABEVhvAhJY650/Sp0IiIAIiIAIiEAHCUhgdTDTlGQREAEREAEREIH1JiCBtd75o9SJgAiIgAiIgAh0kIAEVgczTUkWAREQAREQARFYbwISWOudP0qdCIiACIiACIhABwlIYHUw05RkERABERABERCB9SYggbXe+aPUiYAIiIAIiIAIdJCABFYHM01JFgEREAEREAERWG8CEljrnT9KnQiIgAiIgAiIQAcJSGB1MNOUZBEQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQgARWBzNNSRYBERABERABEVhvAhJY650/Sp0IiIAIiIAIiEAHCUhgdTDTlGQREAEREAEREIH1JiCBtd75o9SJgAiIgAiIgAh0kIAEVgczTUkWAREQAREQARFYbwISWOudP0qdCIiACIiACIhABwlIYHUw05RkERABERABERCB9SYggbXe+aPUiYAIiIAIiIAIdJCABFYHM01JFgEREAEREAERWG8CEljrnT9KnQiIgAiIgAiIQAcJSGB1MNOUZBEQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQgARWBzNNSRYBERABERABEVhvAhJY650/Sp0IiIAIiIAIiEAHCUhgdTDTlGQREAEREAEREIH1JiCBtd75o9SJgAiIgAiIgAh0kIAEVgczTUkWAREQAREQARFYbwISWOudP0qdCIiACIiACIhABwlIYHUw05RkERABERABERCB9SYggbXe+aPUiYAIiIAIiIAIdJCABFYHM01JFgEREAEREAERWG8CEljrnT9KnQiIgAiIgAiIQAcJSGB1MNOUZBEQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQgARWBzNNSRYBERABERABEVhvAhJY650/Sp0IiIAIiIAIiEAHCUhgdTDTlGQREAEREAEREIH1JiCBtd75o9SJgAiIgAiIgAh0kIAEVgczTUkWAREQAREQARFYbwISWOudP0qdCIiACIiACIhABwlIYHUw05RkERABERABERCB9SYggbXe+aPUiYAIiIAIiIAIdJCABFYHM01JFgEREAEREAERWG8CEljrnT9KnQiIgAiIgAiIQAcJSGB1MNOUZBEQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQgARWBzNNSRYBERABERABEVhvAhJY650/Sp0IiIAIiIAIiEAHCUhgdTDTlGQREAEREAEREIH1JiCBtd75o9SJgAiIgAiIgAh0kIAEVgczTUkWAREQAREQARFYbwISWOudP0qdCIiACIiACIhABwlIYHUw05RkERABERABERCB9SYggbXe+aPUiYAIiIAIiIAIdJCABFYHM01JFgEREAEREAERWG8CEljrnT9KnQiIgAiIgAiIQAcJSGB1MNOUZBEQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQgARWBzNNSRYBERABERABEVhvAhJY650/Sp0IiIAIiIAIiEAHCUhgdTDTlGQREAEREAEREIH1JiCBtd75o9SJgAiIgAiIgAh0kIAEVgczTUkWAREQAREQARFYbwISWOudP0qdCIiACIiACIhABwlIYHUw05RkERABERABERCB9SYggbXe+aPUiYAIiIAIiIAIdJCABFYHM01JFgEREAEREAERWG8CEljrnT9KnQiIgAiIgAiIQAcJSGB1MNOUZBEQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQgARWBzNNSRYBERABERABEVhvAhJY650/Sp0IiIAIiIAIiEAHCUhgdTDTlGQREAEREAEREIH1JiCBtd75o9SJgAiIgAiIgAh0kIAEVgczTUkWAREQAREQARFYbwISWOudP0qdCIiACIiACIhABwlIYHUw05RkERABERABERCB9SYggbXe+aPUiYAIiIAIiIAIdJCABFYHM01JFgEREAEREAERWG8CEljrnT9KnQiIgAiIgAiIQAcJSGB1MNOUZBEQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQgARWBzNNSRYBERABERABEVhvAhJY650/Sp0IiIAIiIAIiEAHCUhgdTDTlGQREAEREAEREIH1JiCBtd75o9SJgAiIgAiIgAh0kIAEVgczTUkWAREQAREQARFYbwISWOudP0qdCIiACIiACIhABwlIYHUw05RkERABERABERCB9SYggbXe+aPUiYAIiIAIiIAIdJCABFYHM01JFgEREAEREAERWG8CEljrnT9KnQiIgAiIgAiIQAcJSGB1MNOUZBEQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQgARWBzNNSRYBERABERABEVhvAhJY650/Sp0IiIAIiIAIiEAHCUhgdTDTlGQREAEREAEREIH1JiCBtd75o9SJgAiIgAiIgAh0kIAEVgczTUkWAREQAREQARFYbwISWOudP0qdCIiACIiACIhABwlIYHUw05RkERABERABERCB9SYggbXe+aPUiYAIiIAIiIAIdJCABFYHM01JFgEREAEREAERWG8CEljrnT9KnQiIgAiIgAiIQAcJSGB1MNOUZBEQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQgARWBzNNSRYBERABERABEVhvAhJY650/Sp0IiIAIiIAIiEAHCUhgdTDTlGQREAEREAEREIH1JiCBtd75o9SJgAiIgAiIgAh0kIAEVgczTUkWAREQAREQARFYbwISWOudP0qdCIiACIiACIhABwlIYHUw05RkERABERABERCB9SYggbXe+aPUiYAIiIAIiIAIdJCABFYHM01JFgEREAEREAERWG8CEljrnT9KnQiIgAiIgAiIQAcJSGB1MNOUZBEQAREQAREQgfUmIIG13vmj1ImACIiACIiACHSQwP8PlN36U1NuNsMAAAAASUVORK5CYII=\"\n />\n <image\n id=\"image1_3622_12940\"\n width=\"1600\"\n height=\"1600\"\n xlinkHref=\"data:image/png;base64,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AQIECBAgQIAAAQIECBAgQGCwwKgsY2gAEjIByGBORwkQIECAAAECBAgQIECAAAECBAgQIECAAIEkBEZkGQMDkEd+8dYTIWQPJ1G8IggQIECAAAECBAgQIECAAAECBAgQIECAAAECAwWyhzcyjb0fDgxAPvpw7vVXe60cIUCAAAECBAgQIECAAAECBAgQIECAAAECBBITGJZpDAxAevGIACSxCVQOAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFdgWKYxMADJsvj39g7hCAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgLYFhmcbAACRmmSdA0po/1RAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIDBIZlGgMDkJBFAcgARIcIECBAgAABAgQIECBAgAABAgQIECBAgACBxASGZBoDA5AsegIkselTDgECBAgQIECAAAECBAgQIECAAAECBAgQIDBAYFimMTAACcEeIAMMHSJAgAABAgQIECBAgAABAgQIECBAgAABAgSSExicaQwIQF7oxZA9m1z9CiJAgAABAgQIECBAgAABAgQIECBAgAABAgQI7BLYyDRe2JN37DnwyV/6xaezLDyw6/v+JECAAAECBAgQIECAAAECBAgQIECAAAECBAgkJ1BlGlW2sbuwPQHIkeJBG6DvVvI3AQIECBAgQIAAAQIECBAgQIAAAQIECBAgkKzAoGxjTwCSZYPflZVsVwojQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEOi0wKNvYE4AUvZ4nQDp9m2ieAAECBAgQIECAAAECBAgQIECAAAECBAg0S2BQtrEnAMliFIA0a15VS4AAAQIECBAgQIAAAQIECBAgQIAAAQIEOi0wKNvYG4BkmQCk07eJ5gkQIECAAAECBAgQIECAAAECBAgQIECAQLMEsgHZxp4AJAR7gDRrWlVLgAABAgQIECBAgAABAgQIECBAgAABAgS6LrA329gTgMSQPdd1Jv0TIECAAAECBAgQIECAAAECBAgQIECAAAECzRGIMfv07mp3ByBZecKndp/kbwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAsgJZeLKsrco4tn52BCCP/OKtY+WnR7c+9QsBAgQIECBAgAABAgQIECBAgAABAgQIECBAIHGBKtuoMo7tZe4IQB746NpT2z/0OwECBAgQIECAAAECBAgQIECAAAECBAgQIECgCQK7M44dAciDR3oCkCbMohoJECBAgAABAgQIECBAgAABAgQIECBAgACBHQIPZr3qNVhbPzsCkHKTkB0fbp3lFwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAwgIxy3Y85LEjAAm7Pky4D6URIECAAAECBAgQIECAAAECBAgQIECAAAECBD4U2JVxCEA+pPEbAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0FSBkQFIDF6B1dSJVTcBAgQIECBAgAABAgQIECBAgAABAgQIEOiywK6MY9cTIHHH+7G67KR3AgQIECBAgAABAgQIECBAgAABAgQIECBAoEEC2c6MY2cAEoMApEFM0VAuAABAAElEQVRzqVQCBAgQIECAAAECBAgQIECAAAECBAgQIEBgU2BXxrEzAMm8AsuNQoAAAQIECBAgQIAAAQIECBAgQIAAAQIECDRQYFfGsSMAyWLmCZAGzqmSCRAgQIAAAQIECBAgQIAAAQIECBAgQIBA1wV2ZxxbAcgnf+nyIyELD3UdSP8ECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAAwXKjKOfdWyWvhWA9OIDTzawHSUTIECAAAECBAgQIECAAAECBAgQIECAAAECBPoC27OOrQAk9Hpef+UGIUCAAAECBAgQIECAAAECBAgQIECAAAECBJorsC3r+DAAyXMBSHOnVOUECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAtqzjwwDkSOYVWG4NAgQIECBAgAABAgQIECBAgAABAgQIECBAoLkC27KODwOQIvMESHOnVOUECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAtqxjKwDpZUEA4tYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEGiuwPevYCkBC8Aqsxs6owgkQIECAAAECBAgQIECAAAECBAgQIECAAIFS4MOsYysAiSE+zoYAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0FSB7VnHVgCSZeETTW1I3QQIECBAgAABAgQIECBAgAABAgQIECBAgACB7VnHVgASowDErUGAAAECBAgQIECAAAECBAgQIECAAAECBAg0V2B71rEVgGQheAVWc+dU5QQIECBAgAABAgQIECBAgAABAgQIECBAoPMC27OOrQAkhuyxzssAIECAAAECBAgQIECAAAECBAgQIECAAAECBBorsD3r6Acgn/yly4+U78U60tiOFE6AAAECBAgQIECAAAECBAgQIECAAAECBAh0XqDKOqrMo4LoByDFes8G6J2/LQAQIECAAAECBAgQIECAAAECBAgQIECAAIHmC9zPPPoByAMPZAKQ5s+pDggQIECAAAECBAgQIECAAAECBAgQIECAQOcF7mcem0+AZDZA7/wtAYAAAQIECBAgQIAAAQIECBAgQIAAAQIECDRfoFjfyDz6AUjvyBFPgDR/TnVAgAABAgQIECBAgAABAgQIECBAgAABAgQ6L3A/8+gHIDFGAUjnbwkABAgQIECAAAECBAgQIECAAAECBAgQIECg+QL3M49+AFLuii4Aaf6c6oAAAQIECBAgQIAAAQIECBAgQIAAAQIECHRe4H7msfkEiACk83cEAAIECBAgQIAAAQIECBAgQIAAAQIECBAg0AKBGDcyj/tPgNgEvQWTqgUCBAgQIECAAAECBAgQIECAAAECBAgQINB1gay3LQCJXoHV9ftB/wQIECBAgAABAgQIECBAgAABAgQIECBAoBUCMYT+Qx8bT4DEzB4grZhWTRAgQIAAAQIECBAgQIAAAQIECBAgQIAAgW4LZJuZRz8ACZ4A6fbdoHsCBAgQIECAAAECBAgQIECAAAECBAgQINAWgc3MYyMAidETIG2ZWH0QIECAAAECBAgQIECAAAECBAgQIECAAIEuC2xmHp4A6fJNoHcCBAgQIECAAAECBAgQIECAAAECBAgQINA2gR1PgGxuCNK2HvVDgAABAgQIECBAgAABAgQIECBAgAABAgQIdE7gw03QQ8w+3rn2NUyAAAECBAgQIECAAAECBAgQIECAAAECBAi0T2Az8+iFX3j7wSwLR9rXoY4IECBAgAABAgQIECBAgAABAgQIECBAgACBrgn0M48y++h94tPPPty15vVLgAABAgQIECBAgAABAgQIECBAgAABAgQItFegyj56R8P6Q+1tUWcECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA1wSq7KPXe+ABT4B0beb1S4AAAQIECBAgQIAAAQIECBAgQIAAAQIEWixQZR+9rFcIQFo8yVojQIAAAQIECBAgQIAAAQIECBAgQIAAAQJdE6iyj14Wj3gFVtdmXr8ECBAgQIAAAQIECBAgQIAAAQIECBAgQKDFAlX20QuFJ0BaPMdaI0CAAAECBAgQIECAAAECBAgQIECAAAEC3RMos49envW8Aqt7U69jAgQIECBAgAABAgQIECBAgAABAgQIECDQWoEq++iFLApAWjvFGiNAgAABAgQIECBAgAABAgQIECBAgAABAt0TyEJ8qJeFzB4g3Zt7HRMgQIAAAQIECBAgQIAAAQIECBAgQIAAgfYKZJknQNo7uzojQIAAAQIECBAgQIAAAQIECBAgQIAAAQIdFSjfftXLiswrsDo6/9omQIAAAQIECBAgQIAAAQIECBAgQIAAAQJtFKiyj14o34PVxub0RIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHRVoNwDJJTvwepq+/omQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEWiiwsQdIEIC0cG61RIAAAQIECBAgQIAAAQIECBAgQIAAAQIEOiuQhXIPkBi8Aquzd4DGCRAgQIAAAQIECBAgQIAAAQIECBAgQIBA+wSq7KN8BZYnQNo3tToiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIdFqieAAnRHiAdvgW0ToAAAQIECBAgQIAAAQIECBAgQIAAAQIE2idQZh+9mEWvwGrf1OqIAAECBAgQIECAAAECBAgQIECAAAECBAh0VqDKPnohZAKQzt4CGidAgAABAgQIECBAgAABAgQIECBAgAABAm0UyB7qZSEcbWNreiJAgAABAgQIECBAgAABAgQIECBAgAABAgS6KVBlH70YowCkm/OvawIECBAgQIAAAQIECBAgQIAAAQIECBAg0EqBKvvohSwcaWV3miJAgAABAgQIECBAgAABAgQIECBAgAABAgS6KVBmH70sCkC6Ofu6JkCAAAECBAgQIECAAAECBAgQIECAAAEC7RSosg9PgLRzbnVFgAABAgQIECBAgAABAgQIECBAgAABAgS6K1A9ARJj5hVY3b0FdE6AAAECBAgQIECAAAECBAgQIECAAAECBFonUGUfvbIrAUjrplZDBAgQIECAAAECBAgQIECAAAECBAgQIECg0wLlHiAhHu00geYJECBAgAABAgQIECBAgAABAgQIECBAgACBVglU2Ucvlu/BalVXmiFAgAABAgQIECBAgAABAgQIECBAgAABAgQ6LVBlH71Q7oTeaQXNEyBAgAABAgQIECBAgAABAgQIECBAgAABAu0S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gEAbBbZnHR8GIHm0B0gbZ1tPBAgQIECAAAECBAgQIECAQOMF3rtQrDS+CQ0QIECAAIEZCMRtWcdWALIWC0+AzADfJQgQIECAAAECBAgQIECAAAECkwq8tpA/MOl3nE+AAAECBLoosD3r2ApAbnzp8RsxhrUuguiZAAECBAgQIECAAAECBAgQIJCywImF/PGU61MbAQIECBBIQaDKOKqs434tWwHI5gHvk7wv418CBAgQIECAAAECBAgQIECAQCICb10onkukFGUQIECAAIGUBXZkHDsDkCzYByTlqVMbAQIECBAgQIAAAQIECBAg0DmBIobFpZXwaOca1zABAgQIEJhUYFfGsTMAicE+IJOCOp8AAQIECBAgQIAAAQIECBAgMEWB63fj+SkOb2gCBAgQINAegV0Zx84AJERPgLRnqnVCgAABAgQIECBAgAABAgQItEDgJ1eL2y1oQwsECBAgQGAGAjszjl0BSLg4gwpcggABAgQIECBAgAABAgQIECBAYEyBN8/lccxTnUaAAAECBLousCPj2BGAZFk813Ud/RMgQIAAAQIECBAgQIAAAQIEUhI4frp4OKV61EKAAAECBFIV2J1x7AhAijzzTslUZ05dBAgQIECAAAECBAgQIECAQCcFjp/Jn+5k45omQIAAAQITCuzOOHYEIFmwqdaEnk4nQIAAAQIECBAgQIAAAQIECExTYOX01fjsNC9gbAIECBAg0BaB3RnHjgAk7/W8AqstM60PAgQIECBAgAABAgQIECBAoPEC99bCQrkByJHGN6IBAgQIECAwA4HdGceOACSEFa/AmsEkuAQBAgQIECBAgAABAgQIECBAYByBi7fyq+Oc5xwCBAgQIECgEtiZcewIQK587lO3Y4hLoAgQIECAAAECBAgQIECAAAECBOYv8N7FeG/+VaiAAAECBAikL1BlG1XGsb3SHQFI9UEWg9dgbRfyOwECBAgQIECAAAECBAgQIEBgTgInzuRH53RplyVAgAABAo0SGJRt7AlAYsi8BqtR06pYAgQIECBAgAABAgQIECBAoK0Cxxfyx9vam74IECBAgECdAoOyjT0BSPkIiCdA6lQ3FgECBAgQIECAAAECBAgQIEDggAJvXcifO+BXfY0AAQIECHRLYEC2sScAiYUnQLp1V+iWAAECBAgQIECAAAECBAgQSFGgiOHSreXssRRr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cAASbq+/HkMoBpfkKAECBAgQIECAAAECBAgQIECAwCCBE2eLJwYdd4wAAQIECBDYKdDPIMosYufR8f86cABy+atPLmUx/nD8SzmTAAECBAgQIECAAAECBAgQINB5geL9xeL5zisAIECAAAECYwhUGUSVRYxx6sBTDhyAVKPFzD4gA1UdJECAAAECBAgQIECAAAECBAgMEFgrwtmV9eAVWANsHCJAgAABArsFDptBHC4AiZl9QHbPiL8JECBAgAABAgQIECBAgAABAkMEri6FxSEfOUyAAAECBAjsEoiHzCAOFYD0go3Qd82HPwkQIECAAAECBAgQIECAAAECQwV+dGn97tAPfUCAAAECBAjsEDhsBnGoAOTeaji5oxp/ECBAgAABAgQIECBAgAABAgQIDBV441yRDf3QBwQIECBAgMAOgcNmEIcKQG586fEbMcYf76jIHwQIECBAgAABAgQIECBAgAABAgMFvncqf3TgBw4SIECAAAECOwSq7KHKIHYcnPCPQwUg1bWyzD4gE5o7nQABAgQIECBAgAABAgQIEOioQPkEyDMdbV3bBAgQIEBgIoE6sodDByAxFDZCn2janEyAAAECBAgQIECAAAECBAh0VOD24q34VEd71zYBAgQIEJhIoI7s4fABSBEEIBNNm5MJECBAgAABAgQIECBAgACBLgosrYQzXexbzwQIECBA4CACMYbjB/ne9u8cOgBZXYvfKwuJ2wf1OwECBAgQIECAAAECBAgQIECAwE6Bszfy6zuP+IsAAQIECBAYJFBlDqur8dVBn01y7NABSLUJSRbCe5Nc1LkECBAgQIAAAQIECBAgQIAAga4JvHshrnWtZ/0SIECAAIGDCFSZw2E3QK+ue+gApBqkfBfX31X/+iFAgAABAgQIECBAgAABAgQIEBgs8Nrp/CODP3GUAAECBAgQ2C5QV+ZQSwBSFiYA2T47fidAgAABAgQIECBAgAABAgQI7BI4cSZ/YtchfxIgQIAAAQKDBWrJHGoJQGLhCZDBc+QoAQIECBAgQIAAAQIECBAgQKAvEN+7UDzPggABAgQIEBhDICv+doyz9j2llgDk0ku/+la5J8nSvldzAgECBAgQIECAAAECBAgQIECggwLreTx3Lw8PdbB1LRMgQIAAgYkEqqxh8cVffXuiLw05uZYAJIQXihCy7w25hsMECBAgQIAA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CDREoFzj76/1J1JuMgFI3yPGbybiogwCBAgQIECAAAECBAgQIECAAAECBAgQIEBgEoHE1viTCkBWs/yPJ7F0LgECBAgQIECAAAECBAgQIECAAAECBAgQIJCGQGpr/EkFINdfPLYQQjyexlSpggABAgQIECBAgAABAgQIECBAgAABAgQIEBhPIB7fWOMf7+xZnJVUAFI1HBN7RGYWk+AaBAgQIECAAAECBAgQIECAAAECBAgQIECgyQIpru0nF4Cs5bl9QJp8l6udAAECBAgQIECAAAECBAgQIECAAAECBDonkOLafnIByLUvPPFO+RzI+527OzRMgAABAgQIECBAgAABAgQIECBAgAABAgQaKRDf31jbT6v45AKQiifGzFMgad0nqiFAgAABAgQIECBAgAABAgQIECBAgAABAgMFUl3TTzIACUUUgAy8jRwkQIAAAQIECBAgQIAAAQIECBAgQIAAAQKJCSS6pp9kALL40mPfizGcT2wKlUOAAAECBAgQIECAAAECBAgQIECAAAECBAhsE6jW8qs1/W2Hkvk1yQCk1IlZiH+cjJJCCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgT0Cm2v5cc8HCRxINQAJMdFHZhKYMyUQIECAAAECBAgQIECAAAECBAgQIECAAIEkBFJey082AFl87eQr5YMg15OYQUUQIECAAAECBAgQIECAAAECBAgQIECAAAECuwTi9Y21/F2HE/kz2QAkvPLZ9RDDnyXipAwCBAgQIECAAAECBAgQIECAAAECBAgQIEBgu0C1hl+t5Sf6k24AUoIVRfHNRN2URYAAAQIECBAgQIAAAQIECBAgQIAAAQIEOi2Q+hp+0gHIpXzpL2KIS52+gzRPgAABAgQIECBAgAABAgQIECBAgAABAgQSE6jW7qs1/MTK2lFO0gFIePn55bLaP9lRsT8IECBAgAABAgQIECBAgAABAgQIECBAgACBeQv8yeYa/rzrGHr9tAOQquyYfX1o9T4gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEZi/QgLX75AOQxeXFb5WP0tyc/ey5IgECBAgQIECAAAECBAgQIECAAAECBAgQILBboFqzr9budx9P7e/kA5Dw5Z9ZiSHYDD21O0c9BAgQIECAAAECBAgQIECAAAECBAgQINBJgf6afbl2n3rz6QcgpWAsgtdgpX4nqY8AAQIECBAgQIAAAQIECBAgQIAAAQIEOiHQlDX7RgQgl1898e0yBrnaiTtHkwQIECBAgAABAgQIECBAgAABAgQIECBAIFmBeHVjzT7ZArcKa0QAEl757HqM2f/cqtovBAgQIECAAAECBAgQIECAAAECBAgQIECAwMwF+mv15Zr9zC98gAs2IwCpGisKr8E6wAT7CgECBAgQIECAAAECBAgQIECAAAECBAgQqE2gQWv1jQlAFk//5V+XG6ss1jZJBiJAgAABAgQIECBAgAABAgQIECBAgAABAgTGFqjW6Ku1+rG/MOcTGxOAhG/8qzzE+I05e7k8AQIECBAgQIAAAQIECBAgQIAAAQIECBDopkC1Rl+t1TfkpzkBSAlaZLnXYDXkxlImAQIECBAgQIAAAQIECBAgQIAAAQIECLRLoGlr9I0KQC6/eOz/hhjOtuuW0Q0BAgQIECBAgAABAgQIECBAgAABAgQIEEhcoFyb76/RJ17m9vIaFYCUhZevGIt/uL0BvxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLTFuivzZdr9M35aVoAUsl6DVZz7i+VEiBAgAABAgQIECBAgAABAgQIECBAgEA7BBq3Nt+4AOTi5x77LPcyjAAAQABJREFUXozxJ+24X3RBgAABAgQIECBAgAABAgQIECBAgAABAgTSFqjW5Ku1+bSr3Ftd4wKQjRYyr8HaO5eOECBAgAABAgQIECBAgAABAgQIECBAgACB+gWyrHFPf1QIzQxAivXfq38GjUiAAAECBAgQIECAAAECBAgQIECAAAECBAjsEcjXf3/PsQYcaGQAsvjSsbfKzdBPNsBXiQQIECBAgAABAgQIECBAgAABAgQIECBAoMEC8eTGmnzzWmhkAFIxxxh+p3ncKiZAgAABAgQIECBAgAABAgQIECBAgAABAs0RaPJafHMDkJV7/yOGsN6c20SlBAgQIECAAAECBAgQIECAAAECBAgQIECgOQLVGnws1+KbU/HOShsbgFz6lacWsxj/cmc7/iJAgAABAgQIECBAgAABAgQIECBAgAABAgTqEKjW4Ku1+DrGmscYjQ1AKqwYo9dgzeOucU0CBAgQIECAAAECBAgQIECAAAECBAgQaL1A09fgGx2ALF6+/r9iiDdbf5dpkAABAgQIECBAgAABAgQIECBAgAABAgQIzFCgWnuv1uBneMnaL9XoACR87TP3Qsy+UbuKAQkQIECAAAECBAgQIECAAAECBAgQIECAQJcFqrX3ag2+wT/NDkBK+CLPf7fB/konQIAAAQIECBAgQIAAAQIECBAgQIAAAQLJCbRh7b3xAcjlLzz+nfJRnFPJ3R0KIkCAAAECBAgQIECAAAECBAgQIECAAAECDRSo1tyrtfcGlr6j5MYHIGU3MYvBUyA7ptUfBAgQIECAAAECBAgQIECAAAECBAgQIEDgYAKba+7xYN9O51ttCEBCLgBJ545SCQECBAgQIECAAAECBAgQIECAAAECBAg0WqAta+6tCEAuf/6xH8YY/67Rd5TiCRAgQIAAAQIECBAgQIAAAQIECBAgQIDAnAWqtfZqzX3OZdRy+VYEIJVE+R6s36lFxCAECBAgQIAAAQIECBAgQIAAAQIECBAgQKCjAm1aa29NAHJvNft6eT+udvSe1DYBAgQIECBAgAABAgQIECBAgAABAgQIEDiswOrmWvthx0ni+60JQG69/Ni1EMOfJaGqCAIECBAgQIAAAQIECBAgQIAAAQIECBAg0DSBco29v9betLqH1NuaAKTqr9yS/reH9OkwAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEKgbWvsrQpAFr93/M9jDBdHzJ+PCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgV0C1dp6tca+63Cj/2xVABJe+ex6ORu/1egZUTwBAgQIECBAgAABAgQIECBAgAABAgQIEJi9wG9trrHP/spTumK7ApASKcbiv5VJVfmkjh8CBAgQIECAAAECBAgQIECAAAECBAgQIEBgP4FqTb1aW9/vvKZ93roA5NLnP/HjchJeadpEqJcAAQIECBAgQIAAAQIECBAgQIAAAQIECMxJ4JXNtfU5XX46l21dANJnivE3psNlVAIECBAgQIAAAQIECBAgQIAAAQIECBAg0DKBlq6ptzIAWbx87ZvlAzvXWnYLaocAAQIECBAgQIAAAQIECBAgQIAAAQIECNQrUK6lL9679Ef1DprGaK0MQMLXPnOv3ATk99IgVgUBAgQIECBAgAABAgQIECBAgAABAgQIEEhToL+W/uWfWUmzusNV1c4ApDLJ8v96OBrfJkCAAAECBAgQIECAAAECBAgQIECAAAECLRdo8Vp6awOQxRePvVluXP/dlt+a2iNAgAABAgQIECBAgAABAgQIECBAgAABAgcSqNbQq7X0A325AV9qbQDSty+ip0AacBMqkQABAgQIECBAgAABAgQIECBAgAABAgTmINDyNfRWByDFndU/KBOspTncNi5JgAABAgQIECBAgAABAgQIECBAgAABAgSSFajWzqs19GQLrKGwVgcgl7/65FKI2ddrcDIEAQIECBAgQIAAAQIECBAgQIAAAQIECBBoj0C5dt5fQ29PR3s6aXUA0u+2iL+xp2sHCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAlwU6sHbe+gBk8aXHvhtjeKvL97HeCRAgQIAAAQIECBAgQIAAAQIECBAgQIDAfYFqzbxaO7//d1v/bX0A0p+4aDP0tt7A+iJAgAABAgQIECBAgAABAgQIECBAgACBCQU6smbeiQBkeT38bohhZcJbwOkECBAgQIAAAQIECBAgQIAAAQIECBAgQKBdAuVaeX/NvF1dDeymEwHIrZcfuxZC/MOBAg4SIECAAAECBAgQIECAAAECBAgQIECAAIHOCMQ/3Fgzb3/DnQhAqmmMRfhK+6dThwQIECBAgAABAgQIECBAgAABAgQIECBAYLhAl9bKOxOAbGzoEo8Pn3afECBAgAABAgQIECBAgAABAgQIECBAgACBNgvE413Y/Pz+DHYmAOk3HDNPgdyfef8SIECAAAECBAgQIECAAAECBAgQIECAQLcEOrZG3qkA5OLazT8IMZb7gfghQIAAAQIECBAgQIAAAQIECBAgQIAAAQIdEijXxvtr5B1quVMBSHj5+eVyN5Df6tD8apUAAQIECBAgQIAAAQIECBAgQIAAAQIECJRL4/E3N9bIu4PRrQCknNcihl+LMcTuTLFOCRAgQIAAAQIECBAgQIAAAQIECBAgQKDLAtWaeBHCf+maQecCkEuf/8SPsxD/omsTrV8CBAgQIECAAAECBAgQIECAAAECBAgQ6KZAtSZerY13rfvOBSD9Cc6CzdC7dqfrlwABAgQIECBAgAABAgQIECBAgAABAl0V6OiaeCcDkIsvvvx/Yow/6eq9rm8CBAgQIECAAAECBAgQIECAAAECBAgQ6IZAtRZerYl3o9udXXYyAAnhhSIL2a/tpPAXAQIECBAgQIAAAQIECBAgQIAAAQIECBBol8DGWvgL5RYg3fvpaAASwp074TfL6b7XvSnXMQECBAgQIECAAAECBAgQIECAAAECBAh0RODe5lp4R9rd2WZnA5DbX3n0ahHiH+zk8BcBAgQIECBAgAABAgQIECBAgAABAgQIEGiHQLUGXq2Ft6ObybvobABSUeXr4auTk/kGAQIECBAgQIAAAQIECBAgQIAAAQIECBBIX6Dra+CdDkCufuGxV0OI5f/5IUCAAAECBAgQIECAAAECBAgQIECAAAECbRKIr26sgbepp8l66XQAUlHlMfvKZGTOJkCAAAECBAgQIECAAAECBAgQIECAAAECaQtY+w6h8wHI5UtXv17eppfTvlVVR4AAAQIECBAgQIAAAQIECBAgQIAAAQIExha4vLn2PfYX2nhi5wOQ8LXP3Asx2gukjXe3nggQIECAAAECBAgQIECAAAECBAgQINBFgWrNu1r77viPAKS8AWKx/NUQw0rH7wXtEyBAgAABAgQIECBAgAABAgQIECBAgEDTBcq17v6ad9P7qKF+AUiJuPjS05diFn6/Bk9DECBAgAABAgQIECBAgAABAgQIECBAgACBuQlUa93VmvfcCkjowgKQ+5ORr798/1f/EiBAgAABAgQIECBAgAABAgQIECBAgACBRgpY696aNgHIJsXiS8feijH+1ZaMXwgQIECAAAECBAgQIECAAAECBAgQIECAQIMEYoh/Wa11N6jkqZYqANnGW8TwxW1/+pUAAQIECBAgQIAAAQIECBAgQIAAAQIECDRGoCiCNx1tmy0ByDaMy59/7Fvln+9sO+RXAgQIECBAgAABAgQIECBAgAABAgQIECDQBIF3Nte4m1DrTGoUgOxkjjEUX9p5yF8ECBAgQIAAAQIECBAgQIAAAQIECBAgQCBtgc217Zh2lbOtTgCyy3tx8frvlocu7zrsTwIECBAgQIAAAQIECBAgQIAAAQIECBAgkKrA5c217VTrm0tdApDd7F/7zL0Q4q/tPuxvAgQIECBAgAABAgQIECBAgAABAgQIECCQpkC5pt1f206zunlVJQAZIF/cu/fVEMPKgI8cIkCAAAECBAgQIECAAAECBAgQIECAAAEC6QiUa9n9Ne10KkqmEgHIgKm49CtPLZbvS/vvAz5yiAABAgQIECBAgAABAgQIECBAgAABAgQIJCNQrWVXa9rJFJRQIQKQYZORFS8P+8hxAgQIECBAgAABAgQIECBAgAABAgQIECCQhIC17KHTIAAZQrP44rE3Y4jfHvKxwwQIECBAgAABAgQIECBAgAABAgQIECBAYK4C1Rp2tZY91yISvrgAZMTkFCF8ccTHPiJAgAABAgQIECBAgAABAgT+P3t3AmfZVRaKfp3uDtyr2FWVpNMJ7+rvet/T571Rr17AB44/nEEcEG4UrwL6UARUQkLSwTCEMJgaOt0xhHCjKKAM2niBpwxBJhFQpgQRcpUhjRBNnapOD0mPVXX2emudbkjS6a4+deoMe/jXz5iqc/Ze6/v+q0if9X299yZAgAABAgQIjE1ADXt1eg2QVXwWpyfeFWP47CqHeIsAAQIECBAgQIAAAQIECBAgQIAAAQIECIxcINeucw175BNXaEINkNUXK/0OxenVD/EuAQIECBAgQIAAAQIECBAgQIAAAQIECBAYrcCJ2nUc7azVmk0D5AzrtfCxW94YYvyXMxzmbQIECBAgQIAAAQIECBAgQIAAAQIECBAgMBqBVLPu1q5HM1tlZ9EAOdPSfeDRK+mQuTMd5n0CBAgQIECAAAECBAgQIECAAAECBAgQIDAigblwvHY9oumqOY0GSA/rNr9896vTYYs9HOoQAgQIECBAgAABAgQIECBAgAABAgQIECAwTIHFEzXrYc5Ri7E1QHpZxh3feCTG4rpeDnUMAQIECBAgQIAAAQIECBAgQIAAAQIECBAYlkC3Vp1q1sMav07jaoD0uJrHluINMcZ7ejzcYQQIECBAgAABAgQIECBAgAABAgQIECBAYKACuUada9UDHbTGg2mA9Li4+3dO7Y8hvqrHwx1GgAABAgQIECBAgAABAgQIECBAgAABAgQGKpBr1LlWPdBBazyYBsgaFrdYWt4RYji2hlMcSoAAAQIECBAgQIAAAQIECBAgQIAAAQIE1i+QatPdGvX6R2rMCBoga1jqPTu33BlDeN0aTnEoAQIECBAgQIAAAQIECBAgQIAAAQIECBBYt0CqTb8216jXPVCDBtAAWeNiF8txJv2iFWs8zeEECBAgQIAAAQIECBAgQIAAAQIECBAgQKAvgVyTTrXp2b5ObvBJGiBrXPzFHRNfCDG+eY2nOZwAAQIECBAgQIAAAQIECBAgQIAAAQIECPQnkGrS3dp0f2c39iwNkD6WvlgprunjNKcQIECAAAECBAgQIECAAAECBAgQIECAAIE1C6hJr5mse4IGSB9ui9dO3ZquArm5j1OdQoAAAQIECBAgQIAAAQIECBAgQIAAAQIEehdItehuTbr3Mxx5QkADpM9fhZVY/F6fpzqNAAECBAgQIECAAAECBAgQIECAAAECBAj0JKAW3RPTKQ/SADkly5lf3DM79Tcxxr8/85GOIECAAAECBAgQIECAAAECBAgQIECAAAECaxfINehci177mc7IAhog6/g9aLXCS9dxulMJECBAgAABAgQIECBAgAABAgQIECBAgMBpBdSgT0vT0xsaID0xnfqg+emJt4cQP3nqd71KgAABAgQIECBAgAABAgQIECBAgAABAgT6FYifPF6D7vd852mArPN3IBatq9Y5hNMJECBAgAABAgQIECBAgAABAgQIECBAgMD9BNSe78fR1w8aIH2x3XtSe3bzX4UYb7n3Fd8RIECAAAECBAgQIECAAAECBAgQIECAAIF1CKSac7f2vI4hnOoZIAP5HYih9eKBDGQQAgQIECBAgAABAgQIECBAgAABAgQIEGi8gJrzYH4FXAEyAMf2zOb/Lz0L5NYBDGUIAgQIECBAgAABAgQIECBAgAABAgQIEGi0QLz1eM250QgDSV4DZCCMqf3RKVwFMiBLwxAgQIAAAQIECBAgQIAAAQIECBAgQKCpAmrNg1t5DZABWbbnpt4WY/zUgIYzDAECBAgQIECAAAECBAgQIECAAAECBAg0TCDXmHOtuWFpDy1dDZAB0sbgKpABchqKAAECBAgQIECAAAECBAgQIECAAAECjRJQYx7scmuADNBzYSZdBRLCPwxwSEMRIECAAAECBAgQIECAAAECBAgQIECAQAMEcm0515gbkOrIUtQAGSx1jJ2OZ4EM1tRoBAgQIECAAAECBAgQIECAAAECBAgQqL3Aidpy6oP4GpSABsigJE+MszA39dYYw6cHPKzhCBAgQIAAAQIECBAgQIAAAQIECBAgQKCmArmmnGvLNU1vbGlpgAyePj2nprh68MMakQABAgQIECBAgAABAgQIECBAgAABAgTqKHCipuzqjwEvrgbIgEHzcAuzk/8r/ab+4xCGNiQBAgQIECBAgAABAgQIECBAgAABAgQI1Egg15JzTblGKZUmFQ2Q4SxFLFwFMhxZoxIgQIAAAQIECBAgQIAAAQIECBAgQKBGAidqya7+GMKaaoAMATUPuTgz+Rfpvm2fGdLwhiVAgAABAgQIECBAgAABAgQIECBAgACBigvkGnKuJVc8jdKGrwEyvKVJv7udFwxveCMTIECAAAECBAgQIECAAAECBAgQIECAQJUFTtSQXf0xpEXUABkSbB52YWbqremJ6B8b4hSGJkCAAAECBAgQIECAAAECBAgQIECAAIEKCuTaca4hVzD0yoSsATL0pYq/O/QpTECAAAECBAgQIECAAAECBAgQIECAAAECFRNQOx72gmmADFm4PTP53nT90vuGPI3hCRAgQIAAAQIECBAgQIAAAQIECBAgQKAiArlmnGvHFQm3smFqgIxi6To6eaNgNgcBAgQIECBAgAABAgQIECBAgAABAgQqIaBmPJJl0gAZAXN7buKjqaP3thFMZQoCBAgQIECAAAECBAgQIECAAAECBAgQKLFAjOGtuWZc4hBrE5oGyKiWsrPy/NQEKUY1nXkIECBAgAABAgQIECBAgAABAgQIECBAoFwC3RpxsfKCckVV32g0QEa0tu25sz8TQnzDiKYzDQECBAgQIECAAAECBAgQIECAAAECBAiUTKAV4+uP14pLFlhNw9EAGeXCLsUXpcublkc5pbkIECBAgAABAgQIECBAgAABAgQIECBAYPwCuTYcl+NV44+kORFogIxwrds7Jm9vteIfjnBKUxEgQIAAAQIECBAgQIAAAQIECBAgQIBACQRaIf5BrhGXIJTGhKABMuKlXjm29JIQw5ERT2s6AgQIECBAgAABAgQIECBAgAABAgQIEBiXQKoJrywtvXRc0zd1Xg2QEa/8np1b7ixiuH7E05qOAAECBAgQIECAAAECBAgQIECAAAECBMYkkB5+/vu5Njym6Rs7rQbIGJb+6EqcjiEeGMPUpiRAgAABAgQIECBAgAABAgQIECBAgACBEQrkWvCR5TgzwilNdUJAA2QMvwp375jYG4owN4apTUmAAAECBAgQIECAAAECBAgQIECAAAECoxSIcbZbEx7lnObqCmiAjOsXIR7ZEWNYGNf05iVAgAABAgQIECBAgAABAgQIECBAgACB4Qp0a8DF0Z3DncXopxPQADmdzJBfb8+dfyjE6KE3Q3Y2PAECBAgQIECAAAECBAgQIECAAAECBMYmkGrA3Vrw2AJo9sQaIGNc//aBz78qxvj5MYZgagIECBAgQIAAAQIECBAgQIAAAQIECBAYgkCu/eYa8BCGNmSPAhogPUIN5bCbHr4ci2LbUMY2KAECBAgQIECAAAECBAgQIECAAAECBAiMTaBb+0014LEFYOKgATLmX4KFuam3pBA+NOYwTE+AAAECBAgQIECAAAECBAgQIECAAAECgxP40Ina7+BGNNKaBTRA1kw2+BNiJz538KMakQABAgQIECBAgAABAgQIECBAgAABAgTGIaDmOw71B86pAfJAk5G/0p6b+Gi6H9yfjXxiExIgQIAAAQIECBAgQIAAAQIECBAgQIDAQAVyrTfXfAc6qMH6EtAA6YttCCcV8Xlp1KUhjGxIAgQIECBAgAABAgQIECBAgAABAgQIEBiNwFI4XusdzWxmWVVAA2RVntG92Z6b3B1ifMXoZjQTAQIECBAgQIAAAQIECBAgQIAAAQIECAxUINV4u7XegQ5qsH4FNED6lRvCeUfuiS8NIe4bwtCGJECAAAECBAgQIECAAAECBAgQIECAAIGhCsR9x2u8Q53E4GsQ0ABZA9awDz1w4+S+WISXDHse4xMgQIAAAQIECBAgQIAAAQIECBAgQIDAYAVybTfXeAc7qtHWI6ABsh69IZzb/tIdN8QQbx/C0IYkQIAAAQIECBAgQIAAAQIECBAgQIAAgSEI5Jpuru0OYWhDrkNAA2QdeEM5ddeFS63QfSD6UIY3KAECBAgQIECAAAECBAgQIECAAAECBAgMVqBb00213cGOarT1CmiArFdwCOfPT0/+eYzx74cwtCEJECBAgAABAgQIECBAgAABAgQIECBAYIACuZaba7oDHNJQAxLQABkQ5KCHibHz3EGPaTwCBAgQIECAAAECBAgQIECAAAECBAgQGKyAWu5gPQc5mgbIIDUHONbC7NkfTsP9xQCHNBQBAgQIECBAgAABAgQIECBAgAABAgQIDFbgL07Ucgc7qtEGIqABMhDG4QzSWYpXpJHdN244vEYlQIAAAQIECBAgQIAAAQIECBAgQIDAegSWTtRw1zOGc4cooAEyRNz1Dr24Y+ILRSyuW+84zidAgAABAgQIECBAgAABAgQIECBAgACBwQrk2m2u4Q52VKMNUkADZJCaQxirCMsviTHMD2FoQxIgQIAAAQIECBAgQIAAAQIECBAgQIBAHwK5Zptrt32c6pQRCmiAjBC7n6n2zGy5pwgh3wrLFwECBAgQIECAAAECBAgQIECAAAECBAiUQCDXbHPttgShCGEVAQ2QVXDK8tbizObXxRg/VpZ4xEGAAAECBAgQIECAAAECBAgQIECAAIGmCuRaba7ZNjX/KuWtAVKN1YqhCL+TLquK1QhXlAQIECBAgAABAgQIECBAgAABAgQIEKifQLdGm2q1KTO12gosrwZIBRYph9iem/hoK0RdxYqslzAJECBAgAABAgQIECBAgAABAgQIEKifQK7R5lpt/TKrZ0YaIBVa1048dkW6vMp95Sq0ZkIlQIAAAQIECBAgQIAAAQIECBAgQKAeArk2m2u09cimGVlogFRonRdnz5tvteJLKxSyUAkQIECAAAECBAgQIECAAAECBAgQIFALgVybzTXaWiTTkCQ0QCq20PO3/+vO1Gn8fMXCFi4BAgQIECBAgAABAgQIECBAgAABAgQqK5Brsrk2W9kEGhq4BkjVFn7XhUshti6pWtjiJUCAAAECBAgQIECAAAECBAgQIECAQGUFck0212Z9VUpAA6RSy3U82Pbs5r8KMb6rgqELmQABAgQIECBAgAABAgQIECBAgAABAtUSSLXYbk22WlGLNglogFT012AltC6OMSxXNHxhEyBAgAABAgQIECBAgAABAgQIECBAoPQCuQaba7GlD1SApxTQADklS/lf3DOz+Z9bofj98kcqQgIECBAgQIAAAQIECBAgQIAAAQIECFRTINdgcy22mtGLWgOkwr8DS0c6V8cQ2hVOQegECBAgQIAAAQIECBAgQIAAAQIECBAopUCuveYabCmDE1RPAhogPTGV86C9159zdyjC75YzOlERIECAAAECBAgQIECAAAECBAgQIECgwgKp9tqtwVY4haaHrgFS8d+A9PCdP44xfqTiaQifAAECBAgQIECAAAECBAgQIECAAAECpRHINddcey1NQALpS0ADpC+2Up0UY9F5Rroca6VUUQmGAAECBAgQIECAAAECBAgQIECAAAECFRTItdZcc02hp299VVlAA6TKq3ci9oW5sz/ditED0WuwllIgQIAAAQIECBAgQIAAAQIECBAgQGC8ArnWmmuu443C7IMQ0AAZhGIJxugcPPai1I781xKEIgQCBAgQIECAAAECBAgQIECAAAECBAhUUiDXWHOttZLBC/oBAhogDyCp5guLrzzvYBGLi6sZvagJECBAgAABAgQIECBAgAABAgQIECAwfoFcY8211vFHIoJBCGiADEKxJGMszky+OcT4rpKEIwwCBAgQIECAAAECBAgQIECAAAECBAhURyDVVrs11upELNIzCGiAnAGoam8XMf5Wivlo1eIWLwECBAgQIECAAAECBAgQIECAAAECBMYocPREbXWMIZh60AIaIIMWHfN4C7OTX0z/Q335mMMwPQECBAgQIECAAAECBAgQIECAAAECBCojkGuqubZamYAF2pOABkhPTNU6aOHIwkwI8XPVilq0BAgQIECAAAECBAgQIECAAAECBAgQGIdA/Nzxmuo45jbnMAU0QIapO66xr/+WY7ETnzWu6c1LgAABAgQIECBAgAABAgQIECBAgACBqgh0a6mpplqVeMXZu4AGSO9WlTqyPTf5nhjjmyoVtGAJECBAgAABAgQIECBAgAABAgQIECAwQoFcQ8211BFOaaoRCmiAjBB71FN1lpYuiSHePep5zUeAAAECBAgQIECAAAECBAgQIECAAIGyC+Taaa6hlj1O8fUvoAHSv13pz9yzc8udIYYXlD5QARIgQIAAAQIECBAgQIAAAQIECBAgQGDUAql22q2hjnpe841MQANkZNTjmai9++Yb0gPRbx3P7GYlQIAAAQIECBAgQIAAAQIECBAgQIBAGQXircdrp2WMTUyDEtAAGZRkWcfZdVEnXQXymzGEoqwhiosAAQIECBAgQIAAAQIECBAgQIAAAQKjEujWSlPNNOTaqa9aC2iA1Hp5jyc3PzPxsXQVyPUNSFWKBAgQIECAAAECBAgQIECAAAECBAgQOINAvP54zfQMh3m78gIaIJVfwh4T6By5MsT4Lz0e7TACBAgQIECAAAECBAgQIECAAAECBAjUTyDXSHOt1FcjBDRAGrHMIbTnzj9UtMLTG5KuNAkQIECAAAECBAgQIECAAAECBAgQIPAAgVwjzbXSB7zhhVoKaIDUcllPndTC9MTN6SqQPzn1u14lQIAAAQIECBAgQIAAAQIECBAgQIBAjQVSbbRbI61xilK7v4AGyP09av/ToUOt56QkF2ufqAQJECBAgAABAgQIECBAgAABAgQIECBwr8Diidrova/4rvYCGiC1X+L7J3jPDZvvikV89v1f9RMBAgQIECBAgAABAgQIECBAgAABAgTqK5Brork2Wt8MZXYqAQ2QU6nU/LX27MQb062w3lHzNKVHgAABAgQIECBAgAABAgQIECBAgACBkGuh3Zooi8YJaIA0bsmPJ7y0svKbMcSDDU1f2gQIECBAgAABAgQIECBAgAABAgQINEAg10BzLbQBqUrxFAIaIKdAacJLe6895yutGJ7XhFzlSIAAAQIECBAgQIAAAQIECBAgQIBAMwVyDTTXQpuZvaw1QBr8OzA/s+OVMcaPNJhA6gQIECBAgAABAgQIECBAgAABAgQI1FQg1z5zDbSm6UmrBwENkB6Q6nvIVcVyZ+XXU35L9c1RZgQIECBAgAABAgQIECBAgAABAgQINFBg6Xjt86qigblL+YSABkjDfxX2bj/ntqKIL2s4g/QJECBAgAABAgQIECBAgAABAgQIEKiRQK555tpnjVKSSh8CGiB9oNXtlIUv3XFNjOGzdctLPgQIECBAgAABAgQIECBAgAABAgQINE8g1zpzzbN5mcv4ZAENkJNFmvjzrgvTLbDi02IILgdr4vrLmQABAgQIECBAgAABAgQIECBAgEBNBI7XOOPTQrfmWZOkpNG3gAZI33T1OrE9M/H3qQlyXb2ykg0BAgQIECBAgAABAgQIECBAgAABAs0SiNcdr3U2K2vZnlpAA+TULo18tb1095WpCfK5RiYvaQIECBAgQIAAAQIECBAgQIAAAQIEKi4QP3e8xlnxNIQ/MAENkIFR1mCgHd94JN0f7ynpn04NspECAQIECBAgQIAAAQIECBAgQIAAAQINEci3vio6raeGVONsSMrS7EFAA6QHpCYdcuLysLkm5SxXAgQIECBAgAABAgQIECBAgAABAgSqLRCLMLcwt/nvqp2F6ActoAEyaNEajNc+0n5RSuO2GqQiBQIECBAgQIAAAQIECBAgQIAAAQIE6i9w28LR9gvrn6YM1yqgAbJWsSYcf/23HFuJxVPSZWMrTUhXjgQIECBAgAABAgQIECBAgAABAgQIVFMg1zBzLTOkmmY1MxD1MAU0QIapW+Gx98xMfiI9EP2aCqcgdAIECBAgQIAAAQIECBAgQIAAAQIE6i4Q4/TxWmbdE5VfPwIaIP2oNeSc9u13vCQ9EP3TDUlXmgQIECBAgAABAgQIECBAgAABAgQIVEgg1y7bu++4ukIhC3XEAhogIwav1HS7LlwqYucp6T8ky5WKW7AECBAgQIAAAQIECBAgQIAAAQIECNRaINcsc+0ypBpmrROV3LoENEDWxVf/kxdnpz4VY3xp/TOVIQECBAgQIECAAAECBAgQIECAAAECVRHINctcu6xKvOIcj4AGyHjcKzXrwsdveXmI8ZZKBS1YAgQIECBAgAABAgQIECBAgAABAgTqKZBqld2aZT2zk9UABTRABohZ26E+8OiVWKTLyUJwOVltF1liBAgQIECAAAECBAgQIECAAAECBCohsNStVaaaZSWiFeRYBTRAxspfncnbc2d/JsbiqupELFICBAgQIECAAAECBAgQIECAAAECBOomkGuUuVZZt7zkMxwBDZDhuNZy1Pbud8+ke+t9rJbJSYoAAQIECBAgQIAAAQIECBAgQIAAgVIL5NpkrlGWOkjBlUpAA6RUy1HyYHZd1FnpLOdbYR0teaTCI0CAAAECBAgQIECAAAECBAgQIECgXgJHu7XJVKOsV1qyGaaABsgwdWs49l3bz/2n9ED0y2qYmpQIECBAgAABAgQIECBAgAABAgQIECirQKpJdmuTZY1PXKUU0AAp5bKUO6j5mYlXpCbIu8odpegIECBAgAABAgQIECBAgAABAgQIEKiFQKpFdmuStUhGEqMU0AAZpXaN5urEY78aYthTo5SkQoAAAQIECBAgQIAAAQIECBAgQIBA2QRSDbJbiyxbXOKphIAGSCWWqXxBLs6eNx+LztPKF5mICBAgQIAAAQIECBAgQIAAAQIECBCoi0CuQeZaZF3ykcdoBTRARutdq9nac1NvizHcVKukJEOAAAECBAgQIECAAAECBAgQIECAQCkEcu0x1yBLEYwgKimgAVLJZStR0MXhS2KMny9RREIhQIAAAQIECBAgQIAAAQIECBAgQKDiAt2aY6o9VjwN4Y9ZQANkzAtQ9enbc+cfWumE/xFDWKl6LuInQIAAAQIECBAgQIAAAQIECBAgQGD8ArnWmGuOufY4/mhEUGUBDZAqr15JYr9r+8THQyyuKkk4wiBAgAABAgQIECBAgAABAgQIECBAoMoCqdbYrTlWOQexl0JAA6QUy1D9INq7331Nuiffh6ufiQwIECBAgAABAgQIECBAgAABAgQIEBiXQK4x5lrjuOY3b70ENEDqtZ7jy2bXRZ3WUueXY4h3jy8IMxMgQIAAAQIECBAgQIAAAQIECBAgUFWBXFvMNcaQao1VzUHc5RLQACnXelQ6mvmdU19KHdrfqnQSgidAgAABAgQIECBAgAABAgQIECBAYCwCubaYa4xjmdyktRTQAKnlso4vqYWZiT+JMf75+CIwMwECBAgQIECAAAECBAgQIECAAAECVRPINcVcW6xa3OItt4AGSLnXp5LRHb0n/maI4Y5KBi9oAgQIECBAgAABAgQIECBAgAABAgRGK5Bqid2a4mhnNVsDBDRAGrDIo07xwI2T+0LoPDmGUIx6bvMRIECAAAECBAgQIECAAAECBAgQIFAdgeM1xM6Tj9cUqxO3SKshoAFSjXWqXJTzM1PvT0FfU7nABUyAAAECBAgQIECAAAECBAgQIECAwCgFrjlRSxzlnOZqiIAGSEMWehxptj/6yRelBxd9eBxzm5MAAQIECBAgQIAAAQIECBAgQIAAgXIL5NphriGWO0rRVVlAA6TKq1f22D/w6JXlleUnhRj3lj1U8REgQIAAAQIECBAgQIAAAQIECBAgMEKBVDPs1g5TDXGEs5qqYQIaIA1b8FGnu/fac74Si+LXRj2v+QgQIECAAAECBAgQIECAAAECBAgQKK9Arhnm2mF5IxRZHQQ0QOqwiiXPoT039bYY4++XPEzhESBAgAABAgQIECBAgAABAgQIECAwAoEY4nW5ZjiCqUzRcAENkIb/Aowq/fbuOy5Lt8K6ZVTzmYcAAQIECBAgQIAAAQIECBAgQIAAgRIKpBph+/Y7Li9hZEKqoYAGSA0XtZQp7bpwqbMcfiFdCXJPKeMTFAECBAgQIECAAAECBAgQIECAAAECQxXItcFcIwypVjjUiQxO4ISABohfhZEJLO6Y+EKI4ekjm9BEBAgQIECAAAECBAgQIECAAAECBAiURyDVBrs1wvJEJJKaC2iA1HyBy5Zee3bijTGGV5ctLvEQIECAAAECBAgQIECAAAECBAgQIDA8gVwTzLXB4c1gZAIPFNAAeaCJV4Ys0N5/8HfSFLcNeRrDEyBAgAABAgQIECBAgAABAgQIECBQDoHbTtQEyxGNKBojoAHSmKUuUaI3PfRwCMsXpdthHSlRVEIhQIAAAQIECBAgQIAAAQIECBAgQGDQAt0aYKoFdmuCgx7ceARWF9AAWd3Hu0MSmJ8+57OxVTx7SMMblgABAgQIECBAgAABAgQIECBAgACBEgjkGmCuBZYgFCE0UEADpIGLXpaU29OTfxBjfFNZ4hEHAQIECBAgQIAAAQIECBAgQIAAAQKDE8i1v1wDHNyIRiKwNgENkLV5OXrAAstHVp6e/kP4xQEPazgCBAgQIECAAAECBAgQIECAAAECBMYokGt+ufY3xhBMTSBogPglGKvA3uvPubuIxRNTEEfHGojJCRAgQIAAAQIECBAgQIAAAQIECBAYlMDRXPPLtb9BDWgcAv0IaID0o+acgQoszk59KhbhWQMd1GAECBAgQIAAAQIECBAgQIAAAQIECIxFINf6cs1vLJOblMB9BDRA7oPh2/EJtGc3/1GM4dXji8DMBAgQIECAAAECBAgQIECAAAECBAisVyDX+HKtb73jOJ/AIAQ0QAahaIyBCLQX7vqtEOKtAxnMIAQIECBAgAABAgQIECBAgAABAgQIjFgg3nq8xjfiaU1H4DQCGiCngfHyGARe881HYyc+ITVB9o1hdlMSIECAAAECBAgQIECAAAECBAgQINC3QNzXre2lGl/fQziRwIAFNEAGDGq49Qm05yZ3x6L15HSpXFzfSM4mQIAAAQIECBAgQIAAAQIECBAgQGAUArmWl2t6ubY3ivnMQaBXAQ2QXqUcNzKBdI/Av0pXgbx8ZBOaiAABAgQIECBAgAABAgQIECBAgACBdQjElx+v6a1jCKcSGIKABsgQUA25foH2zI4Xxhjfu/6RjECAAAECBAgQIECAAAECBAgQIECAwLAEcg0v1/KGNb5xCaxHQANkPXrOHaLAVcWhI4eflG6EdccQJzE0AQIECBAgQIAAAQIECBAgQIAAAQL9CqTaXbeGF64q+h3CeQSGKaABMkxdY69L4OD1FywWRbgo3UNweV0DOZkAAQIECBAgQIAAAQIECBAgQIAAgYEK5Jpdrt3lGt5ABzYYgQEKaIAMENNQgxdYmNv8d+kRSpcOfmQjEiBAgAABAgQIECBAgAABAgQIECDQt0Cq2XVrd30P4EQCwxfQABm+sRnWKdCenbg+3UvwTescxukECBAgQIAAAQIECBAgQIAAAQIECAxAINfqcs1uAEMZgsBQBTRAhspr8IEJFEeelsa6bWDjGYgAAQIECBAgQIAAAQIECBAgQIAAgX4EbgvHa3X9nOscAiMV0AAZKbfJ+hVoz51/aHll6Qmpu3xPv2M4jwABAgQIECBAgAABAgQIECBAgACB/gVybS7X6HKtrv9RnElgdAIaIKOzNtM6Be7afu4/haL4lfSApbjOoZxOgAABAgQIECBAgAABAgQIECBAgMAaBLo1uVSb69bo1nCeQwmMU0ADZJz65l6zQHtu6m2p//HiNZ/oBAIECBAgQIAAAQIECBAgQIAAAQIE+hbINblcm+t7ACcSGIOABsgY0E25PoGFmYmrU8f5resbxdkECBAgQIAAAQIECBAgQIAAAQIECPQikGtxuSbXy7GOIVAmAQ2QMq2GWHoViMXBo/lWWJ/t9QTHESBAgAABAgQIECBAgAABAgQIECCwdoFcg8u1uHSm29Kvnc8ZYxbQABnzApi+P4HFV553sFiOP5f+u7uvvxGcRYAAAQIECBAgQIAAAQIECBAgQIDA6gJxX67B5Vrc6sd5l0A5BTRAyrkuoupBYHHHxBeKEJ6UutCdHg53CAECBAgQIECAAAECBAgQIECAAAECPQrkmluuveUaXI+nOIxA6QQ0QEq3JAJai8DC9MTNrRCet5ZzHEuAAAECBAgQIECAAAECBAgQIECAwOoCueaWa2+rH+VdAuUW0AAp9/qIrgeB+ZnNszHEN/RwqEMIECBAgAABAgQIECBAgAABAgQIEDiDQK615ZrbGQ7zNoHSC2iAlH6JBNiLQHvp7qeFGG/p5VjHECBAgAABAgQIECBAgAABAgQIECBwGoFUY+vW2k7ztpcJVElAA6RKqyXW0wvs+MYjx1qdx6cDFk9/kHcIECBAgAABAgQIECBAgAABAgQIEFhFYLFbY0u1tlWO8RaByghogFRmqQR6JoF902d/ubPSeWJ6QNPymY71PgECBAgQIECAAAECBAgQIECAAAEC9wrkmlqureUa272v+o5AtQU0QKq9fqI/SWBx+9QHWzE+56SX/UiAAAECBAgQIECAAAECBAgQIECAwCoC6bkfF+fa2iqHeItA5QQ0QCq3ZAI+k8D87MQNqWP96jMd530CBAgQIECAAAECBAgQIECAAAECBEJ6tG549cLMxCtZEKibgAZI3VZUPl2B9u6vPDN98yEcBAgQIECAAAECBAgQIECAAAECBAisKvChE7W0VQ/yJoEqCmiAVHHVxHxmgV0XLh1aOfj4dOne7Wc+2BEECBAgQIAAAQIECBAgQIAAAQIEmieQa2e5hhZSLa152cu4CQIaIE1Y5YbmeM/2h+5ZicuPS/8hP9BQAmkTIECAAAECBAgQIECAAAECBAgQOKVArpnl2lmuoZ3yAC8SqIGABkgNFlEKpxe4a+bc/x1j/O8xhJXTH+UdAgQIECBAgAABAgQIECBAgAABAs0RyLWyXDPLtbPmZC3TJgpogDRx1RuW88LM5F/HUPxOw9KWLgECBAgQIECAAAECBAgQIECAAIFTCuRaWa6ZnfJNLxKokYAGSI0WUyqnF1iYnrwxdbV///RHeIcAAQIECBAgQIAAAQIECBAgQIBA/QVyjSzXyuqfqQwJhKAB4regMQLt3TdfEmJ8R2MSligBAgQIECBAgAABAgQIECBAgACB+wqk2li3Rnbf13xPoMYCGiA1XlypnSSw66LOSlj6xRjDZ056x48ECBAgQIAAAQIECBAgQIAAAQIEai2Qa2K5NhZSjazWiUqOwH0ENEDug+Hb+gvsmdlyz7FO53HpP/gL9c9WhgQIECBAgAABAgQIECBAgAABAgRCuilKWMg1sVwb40GgSQIaIE1abbl2BfZvn/qX9J/9n00/HEVCgAABAgQIECBAgAABAgQIECBAoOYCqQYWf/Z4TazmmUqPwEkCGiAngfixGQLtmYm/j0X8tWZkK0sCBAgQIECAAAECBAgQIECAAIGmCuQaWK6FNTV/eTdbQAOk2evf6OzbsxNvTNf/vbjRCJInQIAAAQIECBAgQIAAAQIECBCor0CqfXVrYPXNUGYEVhXQAFmVx5t1F5ifmbgqxvimuucpPwIECBAgQIAAAQIECBAgQIAAgWYJ5JpXrn01K2vZEri/gAbI/T381ECB9sLeX01/IHykgalLmQABAgQIECBAgAABAgQIECBAoIYCudaVa141TE1KBNYkoAGyJi4H11LgNd989PCh1s+kh0F9rpb5SYoAAQIECBAgQIAAAQIECBAgQKBBAvFz3VpXqnk1KGmpEjilgAbIKVm82DSBe27YfFdcio+JMSw0LXf5EiBAgAABAgQIECBAgAABAgQI1EMg17ZyjSvXuuqRkSwIrE9AA2R9fs6ukUB7x+TtnVD8VLpE8FCN0pIKAQIECBAgQIAAAQIECBAgQIBAAwRyTSvXtnKNqwHpSpFATwIaID0xOagpAntmJj/RaoVfSN3yTlNylicBAgQIECBAgAABAgQIECBAgEC1BXItK9e0cm2r2pmInsBgBTRAButptBoIzE9PvD2E4pk1SEUKBAgQIECAAAECBAgQIECAAAECjRAonnm8ptWIZCVJoGcBDZCeqRzYJIH2zORN6bLBlzUpZ7kSIECAAAECBAgQIECAAAECBAhUTyDXsHItq3qRi5jA8AU0QIZvbIaKCrRnJp4fQnxdRcMXNgECBAgQIECAAAECBAgQIECAQO0F4uuO17Bqn6gECfQloAHSF5uTmiIwv+/zT4shvqcp+cqTAAECBAgQIECAAAECBAgQIECgGgK5ZpVrV9WIVpQExiOgATIed7NWReCmhy8vH155QgzhH6oSsjgJECBAgAABAgQIECBAgAABAgTqLZBrVblmFVLtqt6Zyo7A+gQ0QNbn5+wGCOy9/py7O/HYY0OMX2lAulIkQIAAAQIECBAgQIAAAQIECBAos0CqUeVaVa5ZlTlMsREog4AGSBlWQQylF9gzs+XfQmvlMemhUvtLH6wACRAgQIAAAQIECBAgQIAAAQIEainQrU2lGlW3VlXLDCVFYLACGiCD9TRajQXmp8/5bKsoHp9SXKpxmlIjQIAAAQIECBAgQIAAAQIECBAop8BSrk3lGlU5wxMVgfIJaICUb01EVGKB+bmpD6QHTD0l3WexKHGYQiNAgAABAgQIECBAgAABAgQIEKiRQK5FxaJ4cq5N1SgtqRAYuoAGyNCJTVA3gfb0xJtaRfyduuUlHwIECBAgQIAAAQIECBAgQIAAgXIK5FpUe3byz8oZnagIlFdAA6S8ayOyEgvMz07cUBTxRSUOUWgECBAgQIAAAQIECBAgQIAAAQI1EMg1qFyLqkEqUiAwcgENkJGTm7AuAguzE1enB0+9oi75yIMAAQIECBAgQIAAAQIECBAgQKBcArn2lGtQ5YpKNASqI6ABUp21EmkJBdozE7+TngnyhhKGJiQCBAgQIECAAAECBAgQIECAAIEKC+SaU649VTgFoRMYu4AGyNiXQAAVF4jtfZ9/aojxnRXPQ/gECBAgQIAAAQIECBAgQIAAAQJlEUi1pm7NKYT0/HNfBAj0K6AB0q+c8wh8VeCmhy/P7z/0xHRJ4ke++pJ/EyBAgAABAgQIECBAgAABAgQIEOhHINeYcq0ppJpTP+c7hwCBewU0QO618B2B/gVueujho/fEx8UYPtP/IM4kQIAAAQIECBAgQIAAAQIECBBoskCuLeUaU0i1piY7yJ3AoAQ0QAYlaZzGCxy4cXJfZ+nYj6cu/e7GYwAgQIAAAQIECBAgQIAAAQIECBBYk0CuKeXaUq4xrelEBxMgcFoBDZDT0niDwNoF9uzccmexHH483ZyxvfaznUGAAAECBAgQIECAAAECBAgQINBEgVxLyjWlXFtqYv5yJjAsAQ2QYckat7ECizsmvlAUnZ+MIR5oLILECRAgQIAAAQIECBAgQIAAAQIEehLINaRcS8o1pZ5OcBABAj0LaID0TOVAAr0LLM5OfapYKX4mnXG097McSYAAAQIECBAgQIAAAQIECBAg0DCBo7mGlGtJDctbugRGIqABMhJmkzRRYHH71AdjJ1yULmFcaWL+ciZAgAABAgQIECBAgAABAgQIEDi9QK4Z5dpRriGd/ijvECCwHgENkPXoOZfAGQTac5v/Mj3A6qnpD7TiDId6mwABAgQIECBAgAABAgQIECBAoCECuVaUa0a5dtSQlKVJYCwCGiBjYTdpkwQWZiZeH4ri6THd0LFJecuVAAECBAgQIECAAAECBAgQIEDggQLdGlGqFXVrRg982ysECAxQQANkgJiGInA6gfbs5B+GGJ99uve9ToAAAQIECBAgQIAAAQIECBAg0BCBVCPq1ooakq40CYxTQANknPrmbpRAe3bi+hCLKxqVtGQJECBAgAABAgQIECBAgAABAgTuFUi1oW6N6N5XfEeAwBAFNECGiGtoAicLzM9MTqcrQV588ut+JkCAAAECBAgQIECAAAECBAgQqLlAqgl1a0M1T1N6BMokoAFSptUQSyME5mcmripiMduIZCVJgAABAgQIECBAgAABAgQIECCQnnhezOaaEAoCBEYroAEyWm+zEegKLMxMXl6EeAMOAgQIECBAgAABAgQIECBAgACBegvkGlCuBdU7S9kRKKeABkg510VUDRBYmJ747RjCHzUgVSkSIECAAAECBAgQIECAAAECBBopkGs/uQbUyOQlTaAEAhogJVgEITRWILanr/31GOIbGisgcQIECBAgQIAAAQIECBAgQIBATQVyzSfXflJ6qQ/iiwCBcQhogIxD3ZwEviZwVdH+6C1PSX8KvuVrL/mGAAECBAgQIECAAAECBAgQIECg0gK51pNrPiFcVVQ6EcETqLiABkjFF1D4NRD4wKNX2rd/5RdDjO+oQTZSIECAAAECBAgQIECAAAECBAg0WyDVeLq1nlTzaTaE7AmMX0ADZPxrIAICIey6cGl+Ye8T0t8OeB8OAgQIECBAgAABAgQIECBAgACBagrk2k6u8eRaTzUzEDWBeglogNRrPWVTZYHXfPPR0Dn8MymFD1U5DbETIECAAAECBAgQIECAAAECBBoq8KFubSfXeHwRIFAKAQ2QUiyDIAgcF2jPnX+oc8/Rx6SfNEH8UhAgQIAAAQIECBAgQIAAAQIEqiPwoVzTybWd6oQsUgL1F9AAqf8ay7BiAouvPO+gJkjFFk24BAgQIECAAAECBAgQIECAQJMFus2PXNNpMoLcCZRRQAOkjKsipsYLfK0JEsPfNh4DAAECBAgQIECAAAECBAgQIECgrAKpdpP/IqvmR1kXSFxNF9AAafpvgPxLK5D/4IzF4Xw7rA+WNkiBESBAgAABAgQIECBAgAABAgSaK/DBXLvR/GjuL4DMyy+gAVL+NRJhgwXyfSNj5/BjQwx/02AGqRMgQIAAAQIECBAgQIAAAQIEyiWQajW5ZuOZH+VaFtEQOFlAA+RkET8TKJlAtwlSHP4pTZCSLYxwCBAgQIAAAQIECBAgQIAAgWYK5OZHqtVofjRz+WVdLQENkGqtl2gbKpD/QJ3ff/CxMYQPNJRA2gQIECBAgAABAgQIECBAgACBsQvk2kyu0Wh+jH0pBECgJwENkJ6YHESgBAI3PfRwe9/Bn4oxvL8E0QiBAAECBAgQIECAAAECBAgQINAogVyTybWZkGo0jUpcsgQqLKABUuHFE3oDBXITZP/Bx6W/bfC+BmYvZQIECBAgQIAAAQIECBAgQIDAWARyLSbXZDQ/xsJvUgJ9C2iA9E3nRAJjEjh+JchPa4KMyd+0BAgQIECAAAECBAgQIECAQKMEus2PpQOaH41adcnWRUADpC4rKY9mCeQmSPqDN8b43mYlLlsCBAgQIECAAAECBAgQIECAwOgEcu0l12DCjm88MrpZzUSAwKAENEAGJWkcAqMWSASn7+YAAEAASURBVH/wtpfvTleCxPeMemrzESBAgAABAgQIECBAgAABAgTqLpBrLrn2ovlR95WWX50FNEDqvLpyq79AboK09+YmyNvrn6wMCRAgQIAAAQIECBAgQIAAAQKjEci1llxz0fwYjbdZCAxLQANkWLLGJTAqgdd889H2vs8/PsTw5lFNaR4CBAgQIECAAAECBAgQIECAQG0FUo2lW2tJNZfa5igxAg0R0ABpyEJLs+YCNz18eX73u34xhPi6mmcqPQIECBAgQIAAAQIECBAgQIDAEAXi67o1llRrGeIkhiZAYEQCm0Y0j2kIEBi2wK6LOvMhPPX8bQcOhdB6xrCnMz4BAgQIECBAgAABAgQIECBAoF4C8cb56YlnpZxivfKSDYHmCrgCpLlrL/N6CsT0B/UzQ1HM1TM9WREgQIAAAQIECBAgQIAAAQIEhiCQaindmormxxBwDUlgfAIaIOOzNzOBoQnMz05eVsR41dAmMDABAgQIECBAgAABAgQIECBAoCYCuYaSayk1SUcaBAjcR0AD5D4YviVQJ4GFmYkXFzE8t045yYUAAQIECBAgQIAAAQIECBAgMEiBXDvJNZRBjmksAgTKI6ABUp61EAmBgQsszGzeXsTiGTG6d+XAcQ1IgAABAgQIECBAgAABAgQIVFYg10pyzSTXTiqbhMAJEDijgAbIGYkcQKDaAgszk69Kf6Y/Jf3B3ql2JqInQIAAAQIECBAgQIAAAQIECKxfINdIcq0k10zWP5oRCBAos4AGSJlXR2wEBiSQLuX8kxiLX0h/wC8PaEjDECBAgAABAgQIECBAgAABAgQqJ5BrI7lGkmsllQtewAQIrFlAA2TNZE4gUE2BhdnJv0gP9fq5FP3RamYgagIECBAgQIAAAQIECBAgQIDAugSO5tpIrpGsaxQnEyBQGQENkMoslUAJrF9gcXbiHSF2Hpsu8zy4/tGMQIAAAQIECBAgQIAAAQIECBCohkC3FpJqIt3aSDVCFiUBAgMQ0AAZAKIhCFRJYH5m6v0rK+GH02PR91QpbrESIECAAAECBAgQIECAAAECBPoSSDWQXAvJNZG+zncSAQKVFdAAqezSCZxA/wJ3bZ/4+EoI3x9C/HL/oziTAAECBAgQIECAAAECBAgQIFB2gfjlXAPJtZCyRyo+AgQGL6ABMnhTIxKohMCemc3/vLy0/L0p2NsqEbAgCRAgQIAAAQIECBAgQIAAAQJrE7gt1z5yDWRtpzmaAIG6CGiA1GUl5UGgD4G7dpz7r4eX4g/EGP+uj9OdQoAAAQIECBAgQIAAAQIECBAopUCudeSaR659lDJAQREgMBIBDZCRMJuEQHkF7t4xsbe9/9CPhhjfWd4oRUaAAAECBAgQIECAAAECBAgQ6FEg1ThyrSPXPHo8w2EECNRUQAOkpgsrLQJrErjpoYfnP3bLz8QQ/3RN5zmYAAECBAgQIECAAAECBAgQIFAigVzbyDWOkGodJQpLKAQIjElg05jmNS0BAmUT+MCjV9ofCE/euu3AYiu0nlO28MRDgAABAgQIECBAgAABAgQIEFhNIDU/drSnJy5Nx8TVjvMeAQLNEXAFSHPWWqYEehGI6YPCJTEUz+vlYMcQIECAAAECBAgQIECAAAECBMogkGsZuaaRYtH8KMOCiIFASQQ0QEqyEMIgUCaB9vTkNTEWT4sxdMoUl1gIECBAgAABAgQIECBAgAABAvcVyLWLXMPItYz7vu57AgQIZAENEL8HBAicUqA9M/nq9BniienNo6c8wIsECBAgQIAAAQIECBAgQIAAgfEKHM21i1zDGG8YZidAoKwCGiBlXRlxESiBwMLM1Fs7K52fSPfQPFCCcIRAgAABAgQIECBAgAABAgQIEOgK5FpFrlnk2gUSAgQInE5AA+R0Ml4nQKArsLh96oNxufihdAPNO5EQIECAAAECBAgQIECAAAECBMYtkGsUuVaRaxbjjsX8BAiUW0ADpNzrIzoCpRBYuHbqH5bCyiNTMLeVIiBBECBAgAABAgQIECBAgAABAk0VuC3XKHKtoqkA8iZAoHcBDZDerRxJoNEC+6bP/vLRY53vSw8Xe3+jISRPgAABAgQIECBAgAABAgQIjEUg1yRybSLXKMYSgEkJEKicgAZI5ZZMwATGJ7B/59T+9u6v/GSM8fXji8LMBAgQIECAAAECBAgQIECAQNMEci0i1yRybaJpucuXAIH+BTb1f6ozCRBopMCuC5faIfzy1m13/0srhN9tpIGkCRAgQIAAAQIECBAgQIAAgZEJpGd+vLw9M3HlyCY0EQECtRFwBUhtllIiBEYr0J7efGUMxW+kDyEro53ZbAQIECBAgAABAgQIECBAgEATBHLNIdcecg2iCfnKkQCBwQtogAze1IgEGiPQnp78gyLEn4khHmxM0hIlQIAAAQIECBAgQIAAAQIEhi6Qaw255pBrD0OfzAQECNRWQAOktksrMQKjEVicnnhnsVz8YPpbGXeOZkazECBAgAABAgQIECBAgAABAnUWyDWGXGvINYc65yk3AgSGL6ABMnxjMxCovcDitVO3LoWVR8YYPlv7ZCVIgAABAgQIECBAgAABAgQIDE0g1xZyjSHXGoY2iYEJEGiMgAZIY5ZaogSGK7Bv+uwvH1vqfH/6oPL+4c5kdAIECBAgQIAAAQIECBAgQKCOArmmkGsLucZQx/zkRIDA6AU0QEZvbkYCtRXYv3Nqf3v3V34y3afzT2ubpMQIECBAgAABAgQIECBAgACBgQvkWkKuKeTawsAHNyABAo0V2NTYzCVOgMBwBHZduNQO4Ve2Xn7gX1qt1pXDmcSoBAgQIECAAAECBAgQIECAQF0EYowva89MPL8u+ciDAIHyCLgCpDxrIRICtRLofnApwq+mpJZqlZhkCBAgQIAAAQIECBAgQIAAgUEJLIVUO9D8GBSncQgQOFlAA+RkET8TIDAwgfnZza/pFCs/GmLYM7BBDUSAAAECBAgQIECAAAECBAhUXyDVCnLNINcOqp+MDAgQKKuABkhZV0ZcBGoisDh79t/GovielM5tNUlJGgQIECBAgAABAgQIECBAgMD6BG7LtYJcM1jfMM4mQIDA6gIaIKv7eJcAgQEItOcmdy8dXn5UiPGdAxjOEAQIECBAgAABAgQIECBAgEBVBVJtINcIcq2gqimImwCB6ghogFRnrURKoNICe68/5+753Tf/dAzxukonIngCBAgQIECAAAECBAgQIECgL4FcE8i1gVwj6GsAJxEgQGCNApvWeLzDCRAg0L/Aros67RAu3nr5/ttCa8MNrRD8N6h/TWcSIECAAAECBAgQIECAAIFKCMQQVkIsntWembypEgELkgCB2gi4AqQ2SykRAtURyB94WrHz4yHEfdWJWqQECBAgQIAAAQIECBAgQIDA2gXivlwD0PxYu5wzCBBYv4AGyPoNjUCAQB8C8zNT7+8U4f9JzwX55z5OdwoBAgQIECBAgAABAgQIECBQdoG05897/1wDKHuo4iNAoJ4CGiD1XFdZEaiEwOLsxOePLhWPTPcAfU8lAhYkAQIECBAgQIAAAQIECBAg0JNA3uvnPX/e+/d0goMIECAwBAENkCGgGpIAgd4F9u+c2t/+6C2PSbfDurH3sxxJgAABAgQIECBAgAABAgQIlFcg3pj3+nnPX94YRUaAQBMENECasMpyJFB2gQ88emV+euKZ6XZYvx1j6JQ9XPERIECAAAECBAgQIECAAAECDxTo7unT3r67x097/Qce4RUCBAiMVkADZLTeZiNAYBWB+ZmJV8RQPCY1Qvaucpi3CBAgQIAAAQIECBAgQIAAgbIJpL183tPnvX3ZQhMPAQLNFdAAae7ay5xAKQUWZib/Ohbx4elvjXy6lAEKigABAgQIECBAgAABAgQIELifQN7D57183tPf7w0/ECBAYMwCGiBjXgDTEyDwQIH23OTu9v6Dj4ox/tkD3/UKAQIECBAgQIAAAQIECBAgUBaBvHfPe/i8ly9LTOIgQIDAVwU2ffUb/yZAgECpBG566OF2CL94/rb9t8Sw4fdaIWjYlmqBBEOAAAECBAgQIECAAAECTRaIIRStUDyvPTM502QHuRMgUG4BBcVyr4/oCDReYH56ciYW6bkgIe5rPAYAAgQIECBAgAABAgQIECBQCoG4L+/V8569FOEIggABAqcR0AA5DYyXCRAoj8DC7OS741J6LkgI/1ieqERCgAABAgQIECBAgAABAgSaJ5D35nmPnvfqzctexgQIVE1AA6RqKyZeAg0VaO+YvD10Dj8qpb+roQTSJkCAAAECBAgQIECAAAEC4xbYlffm3T36uCMxPwECBHoQ8AyQHpAcQoBAOQTac+cfSpFctHXb/ivSI0Fe5rkg5VgXURAgQIAAAQIECBAgQIBAvQXy8z7S/13Znp68pt6Zyo4AgboJuAKkbisqHwINEMgfuIoi/pTngjRgsaVIgAABAgQIECBAgAABAmMWiPvyHlzzY8zLYHoCBPoS0ADpi81JBAiMW2BxduJd6QPYI2IMnxl3LOYnQIAAAQIECBAgQIAAAQJ1FMh77rz3znvwOuYnJwIE6i+gAVL/NZYhgdoKpAeufbE4ePRRIYY31zZJiREgQIAAAQIECBAgQIAAgXEIpL123nPnvfc4pjcnAQIEBiHgGSCDUDQGAQJjE1h85XkH0+T//bxtdz83PRPk99I//rs2ttUwMQECBAgQIECAAAECBAhUXSA972Ml/fO8hZnNc1XPRfwECBBwBYjfAQIEaiGwML15rihWfjh9SLuzFglJggABAgQIECBAgAABAgQIjFgg76nz3jrvsUc8tekIECAwFAENkKGwGpQAgXEILM6e/bfx6JHvTvcoff845jcnAQIECBAgQIAAAQIECBCoqkDeS+c9dd5bVzUHcRMgQOBkAQ2Qk0X8TIBApQUWrtvabu9+14+lv7Xy8vThLf3LFwECBAgQIECAAAECBAgQIHA6gbx3znvovJfOe+rTHed1AgQIVFHAvfKruGpiJkBgdYFdF3XSJ7Yrz9924COpBfK60GqdvfoJ3iVAgAABAgQIECBAgAABAg0UiHFvqxWePD898fYGZi9lAgQaIOAKkAYsshQJNFWg+wFuqXhY+rssn2iqgbwJECBAgAABAgQIECBAgMApBfJeOe2ZNT9OqeNFAgRqIqABUpOFlAYBAqcWmN859aX53Xd8XwjxxlMf4VUCBAgQIECAAAECBAgQINA0gXhj3ivnPXPTMpcvAQLNEnALrGatt2wJNFNg14VL8yE8c+u2Ax9Kt8S6qdVqfX0zIWRNgAABAgQIECBAgAABAk0WiDEeCq3wG+3piTc02UHuBAg0R8AVIM1Za5kSaLxA/oC33Fn5ntQE+d+NxwBAgAABAgQIECBAgAABAs0SSHvhvCfW/GjWssuWQNMFNECa/hsgfwINE9i7/ZzbOgePfk/6Wy9vbFjq0iVAgAABAgQIECBAgACBhgrkPXDeC+c9cUMJpE2AQEMF3AKroQsvbQJNFlh85XkHU/6/dP5lBz4cWq3t6fLfBzfZQ+4ECBAgQIAAAQIECBAgUFOBGI6FGC9tz07cUNMMpUWAAIFVBVwBsiqPNwkQqLPAfPoA2ImdR6YPg/9c5zzlRoAAAQIECBAgQIAAAQINFEh73bznzXvfBmYvZQIECHQFNED8IhAg0GiBxdmpT8XiyMNSE+S1jYaQPAECBAgQIECAAAECBAjURyDtcfNeN+9565OUTAgQILB2AbfAWruZMwgQqJlAe+78Qymlp553+YG/boVwY6vV+oaapSgdAgQIECBAgAABAgQIEGiAQHrWxz0xhGcszEy8vgHpSpEAAQJnFHAFyBmJHECAQFME8gfEYjn8txDiJ5uSszwJECBAgAABAgQIECBAoC4C8ZN5T6v5UZf1lAcBAoMQ0AAZhKIxCBCojcDijokvzN9+x/fGEHfE9P9qk5hECBAgQIAAAQIECBAgQKCWAnnvmveweS+b97S1TFJSBAgQ6FPALbD6hHMaAQI1Fth14VI7hEu2XHbgPRtD67WhFc6tcbZSI0CAAAECBAgQIECAAIGqCsSwp4jxKYszE++oagriJkCAwDAFXAEyTF1jEyBQaYHF2Yl3rIRj/zX9VZr3VzoRwRMgQIAAAQIECBAgQIBA7QTyXjXvWfPetXbJSYgAAQIDEtAAGRCkYQgQqKfAnpkt/9aeufZHYxFfkD5cduqZpawIECBAgAABAgQIECBAoCoCeW+a96h5r5r3rFWJW5wECBAYh0BrHJOakwABAlUUOO+yvd+3YcPGN4TQ+qYqxi9mAgQIlFHgzmseUsawxESAwAAFLrji4ABHMxQBAgSaLhC/XBSdX1qYPfvDTZeQPwECBHoRcAVIL0qOIUCAQBLIHzCP3B2/Kz0Z/S1ACBAgQIAAAQIECBAgQIDAKAXyXjTvSTU/RqluLgIEqi6gAVL1FRQ/AQIjFThw4+S+9vTmn49F8esxRH+dcaT6JiNAgAABAgQIECBAgEDzBPLeM+9B814070mbJyBjAgQI9C+gAdK/nTMJEGiwQHt28g/TPVe/K8b4dw1mkDoBAgQIECBAgAABAgQIDFEg7znz3jPvQYc4jaEJECBQWwENkNourcQIEBi2wMLs5Bfbu2/+gSLGF6ZLkVeGPZ/xCRAgQIAAAQIECBAgQKAZAnmPmfeaec+Z957NyFqWBAgQGLyAh6AP3tSIBAg0UOCcSw884qxN4U/TA9K/tYHpS5kAAQJ9C3gIet90TiRQGQEPQa/MUgmUAIHSCMTPLa+EX75r+8THSxOSQAgQIFBRAVeAVHThhE2AQLkE8gfT+X2HvjvE+KpyRSYaAgQIECBAgAABAgQIEKiMQNpT5r2l5kdlVkygBAiUXGBTyeMTHgECBKojcNNDD8+H8Iwtlx34yw0bWn+ULrHbWp3gRUqAAAECBAgQIECAAAEC4xJIt7xqF0X8tcXZiXeMKwbzEiBAoI4CrgCp46rKiQCBsQrkD6yHDh/6jvQB9m1jDcTkBAgQIECAAAECBAgQIFB6gbx3zHtIzY/SL5UACRCooIArQCq4aEImQKD8Agevv2DxYAg/t/Xy/f9vaLV2tkLrIeWPWoQECBAgQIAAAQIECBAgMCqBGOLBdBvli9szk68e1ZzmIUCAQNMEXAHStBWXLwECIxXIH2RjEb8rxvh3I53YZAQIECBAgAABAgQIECBQWoG8R8x7Rc2P0i6RwAgQqImABkhNFlIaBAiUV2BhdvKL7d03/0AR4wtjDMvljVRkBAgQIECAAAECBAgQIDBMgbwnzHvDvEfMe8VhzmVsAgQIEAghPaPXFwECBAiMSmDLZfu+a0Nr42tbrfCdo5rTPAQIECizwJ3XuENgmddHbAQGIXDBFenGoL4IECBAIN3tKny6iJ2nLM5OfQoHAQIECIxGwBUgo3E2CwECBLoC+YNue//nHp4++b4kPehuBQsBAgQIECBAgAABAgQI1Fugu/dLe8C8F9T8qPday44AgfIJuAKkfGsiIgIEGiKw5ZJ9371h08bXuBqkIQsuTQIETingCpBTsniRQK0EXAFSq+WUDAECaxToXvWx0nnq4rVTt67xVIcTIECAwAAEXAEyAERDECBAoB+B/AG4vfsrj4ghvtTVIP0IOocAAQIECBAgQIAAAQLlFMh7vLzXy3s+zY9yrpGoCBBohsCmZqQpSwIECJRUYNeFS+0QXnDuZfvfsnHDhteky/K+o6SRCosAAQIECBAgQIAAAQIEehBIzY9/7BTFU/fMTt7Sw+EOIUCAAIEhCrgCZIi4hiZAgECvAvmDcfv2rzw8xvgyV4P0quY4AgQIECBAgAABAgQIlEege9VH2tPlvZ3mR3nWRSQECDRbwBUgzV5/2RMgUCaB41eDPP/cS9PVIBvT1SCt8O1lCk8sBAgQIECAAAECBAgQIHBqgfSsj890Oumqj+2Tnzz1EV4lQIAAgXEIuAJkHOrmJECAwCoC+QNzuk/sw9LfHnq5q0FWgfIWAQIECBAgQIAAAQIExizQveoj7d3yHk7zY8yLYXoCBAicQsAVIKdA8RIBAgTGLnD8apArz708XQ0SuleDXDj2mARAgAABAgQIECBAgAABAl8TSFd9fLYT0lUfM5Of+NqLviFAgACBUgm4AqRUyyEYAgQI3F8gf5BOf5Pov3WfDRLD8v3f9RMBAgQIECBAgAABAgQIjFogNT6W8x4t79U0P0atbz4CBAisTaC1tsMdTYAAAQLjEti6be93hLjxD1ut1veMKwbzEiBAYNACd17zkEEPaTwCBEomcMEVB0sWkXAIECDQv0BqfHwstDpPa0+f/Y/9j+JMAgQIEBiVgCtARiVtHgIECKxTIH/Abs/seFT6wP3sGKJKwjo9nU6AAAECBAgQIECAAIFeBfIeLO/F8p5M86NXNccRIEBg/AIaIONfAxEQIEBgDQJXFe2Zid9fCp0L0wfwt6/hRIcSIECAAAECBAgQIECAQB8Cee+V92B5LxbCVUUfQziFAAECBMYk4CHoY4I3LQECBNYjsG/67C+n8x+3dduBXwyxdV2rFc5bz3jOJUCAAAECBAgQIECAAIH7C6RnfSyEVrrqY3riTfd/x08ECBAgUBUBV4BUZaXESYAAgVMI5A/iR5bjf46x+ONTvO0lAgQIECBAgAABAgQIEOhDIO+x8l5L86MPPKcQIECgRAKuACnRYgiFAAEC/QjcvWNi790h/NrW5+7/07Cx9T9bofV/9TOOcwgQIECAAAECBAgQINB0gXS7qy+ETnx6e27yfU23kD8BAgTqIOAKkDqsohwIECCQBPIH9HZ773fEEK5J/6xAIUCAAAECBAgQIECAAIHeBPIeKu+l8p5K86M3M0cRIECgCgKtKgQpRgIECBBYm8B5l+z7rxvO2vAHIbQesbYzHU2AAIHRCtx5zUNGO6HZCBAYucAFVxwc+ZwmJECAwNoE4seL5eLXF66d+oe1nedoAgQIECi7gCtAyr5C4iNAgEAfAvmD+/ztNz8qxvic9M+hPoZwCgECBAgQIECAAAECBGotkPdKec80P73jkZoftV5qyREg0GABV4A0ePGlToBAMwTOvvyu//Cg1lk7U7ZPaEbGsiRAoEoCrgCp0mqJlUB/Aq4A6c/NWQQIDF3gL5bi8sV7Z865Y+gzmYAAAQIExibgIehjozcxAQIERiNw4gP9E8/bduAnUtf7FR6SPhp3sxAgQIAAAQIECBAgUD6B/JDz9KyP31qYnri5fNGJiAABAgQGLeAWWIMWNR4BAgRKKpA/4LcPL3x7UcQXpRCPljRMYREgQIAAAQIECBAgQGAYAkfzXijviTQ/hsFrTAIECJRTwC2wyrkuoiJAgMBQBbY+Z/9/ap3Vuj60Wo8d6kQGJ0CAwBkE3ALrDEDeJlADAbfAqsEiSoFA1QVifEdcjr/d3jF5e9VTET8BAgQIrE3ALbDW5uVoAgQI1ELgxAf/nzrv8n0/t6G14boQWt9Ui8QkQYAAAQIECBAgQIAAga8JxC8XsXj2wszUW7/2km8IECBAoFECboHVqOWWLAECBO4vkDcC8/sO/ed0D9xr0jtL93/XTwQIECBAgAABAgQIEKikwFLe4+S9juZHJddP0AQIEBiYgFtgDYzSQAQIEKi2wDmX7vm2TZsedEP6g+GHq52J6AkQqJKAW2BVabXESqA/AbfA6s/NWQQI9CeQGh/vW1lZetZd28/9p/5GcBYBAgQI1EnALbDqtJpyIUCAwDoETmwQfmTrZQeeFDa0tqdGyAXrGM6pBAgQIECAAAECBAgQGJlAanzcGYp4aXt24o0jm9REBAgQIFB6AbfAKv0SCZAAAQKjFcgbhuXDy98WY9wZY+iMdnazESBAgAABAgQIECBAoHeB1PhYyXuXvIfR/OjdzZEECBBoioBbYDVlpeVJgACBPgTO33bXhTFs2tkKrR/t43SnECBA4IwCboF1RiIHEKi8gFtgVX4JJUCgtAIxxPe0wsrF89PnfLa0QQqMAAECBMYq4BZYY+U3OQECBMotcGIj8WNbn7vvZ8OGDdtbrdb/We6IRUeAAAECBAgQIECAQN0F0hUfXwxFcWl7buptdc9VfgQIECCwPgG3wFqfn7MJECDQCIG8sWjvvuO/hFhckTYb9zQiaUkSIECAAAECBAgQIFAqge5eJO1J8t5E86NUSyMYAgQIlFZAA6S0SyMwAgQIlExg14VL8zOT00U89q0xFn+cng+SbrfriwABAgQIECBAgAABAsMVyHuPvAfJe5G8JwlpbzLcGY1OgAABAnUR8AyQuqykPAgQIDBigXMv3//wjaF1Xbot1veOeGrTESBQIwHPAKnRYkqFwGkEPAPkNDBeJkCgJ4HU+fhIJ8Rn75mZ/ERPJziIAAECBAjcR8AzQO6D4VsCBAgQ6F3gxAbk+7ZuO/BLrdiaDq3wH3o/25EECBAgQIAAAQIECBBYRSCGO2IrbmvPTLxhlaO8RYAAAQIEVhVwC6xVebxJgAABAmcSaE9PvGF+/8H/O4R4dbop1pEzHe99AgQIECBAgAABAgQInFagu6eIV+c9Rt5rnPY4bxAgQIAAgR4E3AKrBySHECBAgEBvAlPb9n7Tg+LG2XRbrIt6O8NRBAg0XcAtsJr+GyD/Jgi4BVYTVlmOBAYjkG539edLrc5l+6bP/vJgRjQKAQIECDRdQAOk6b8B8idAgMAQBLZctvcHNm7YuCOE1sOGMLwhCRCokYAGSI0WUyoETiOgAXIaGC8TIHAfgfjJTtF5zuLs2X97nxd9S4AAAQIE1i3gGSDrJjQAAQIECJwscGLj8ojzLk/PB2mFl7ZC6z+efIyfCRAgQIAAAQIECBBotkAM8UsxhucvHH/OR2y2huwJECBAYBgCngEyDFVjEiBAgEAWiGkj8/r24YVvK0K4LP24DwsBAgQIECBAgAABAgTy3iDvEfJeIe8Zkojmh18LAgQIEBiKgFtgDYXVoAQIECBwssDEM/ZP/ftvCFeGsOG3Qis8+OT3/UyAQDMF3AKrmesu62YJuAVWs9ZbtgRWFYjhWAjFK47cE1524MZJf0FqVSxvEiBAgMAgBDRABqFoDAIECBDoWeD8i/f9x/jgDS8LsfWkdHssfw71LOdAAvUU0ACp57rKisB9BTRA7qvhewLNFEi3uYqhFd/YOlZcOb9z6kvNVJA1AQIECIxDQOFpHOrmJECAAIFw7qX7H7Zx44bZ1AR5NA4CBJoroAHS3LWXeXMENECas9YyJXAqgdT8eH+nU1y2Z/vkJ0/1vtcIECBAgMAwBTwEfZi6xiZAgACB0wqc2AD98JbLDjx2Q6s1nRoh337ag71BgAABAgQIECBAgEClBFLj4zNFjNsWZyfeUanABUuAAAECtRLwEPRaLadkCBAgUD2BvCFq737Xd8VYPC1tkv6tehmImAABAgQIECBAgACBrwrkz/T5s33+jK/58VUV/yZAgACBcQm4Bda45M1LgAABAg8U+I1/+7qtE19/SXoyyOWtVusbHniAVwgQqJuAW2DVbUXlQ+CBAm6B9UATrxCoo0CM8Z70pI+Z9oFD14abHnq4jjnKiQABAgSqJ6ABUr01EzEBAgRqL/CQ375zy9d/3dc9Lz0j/Rkp2X9X+4QlSKDBAhogDV58qTdGQAOkMUst0eYKHE3POL/x0OHDv3fw+gsWm8sgcwIECBAoo4AGSBlXRUwECBAg0BU45zl7/o9Nmx70gnRFyK+lZ4SchYUAgfoJaIDUb01lROBkAQ2Qk0X8TKAeAulWV8vpio8/WllZesldO87913pkJQsCBAgQqJuABkjdVlQ+BAgQqKHA1ufs/0+ts1pXxVbrf6Q/uDy/qoZrLKXmCmiANHftZd4cAQ2Q5qy1TJshEEMoWjG+Pi7Hq9o7Jm9vRtayJECAAIGqCmiAVHXlxE2AAIEGCpx96V3/5UEbz3pJuiLk5xuYvpQJ1FJAA6SWyyopAvcT0AC5H4cfCFRWIF3xEVMR6S1LneUX7N1+zm2VTUTgBAgQINAogU2NylayBAgQIFBpgRMbrSece+n+h23a2HppaLV+stIJCZ4AAQIECBAgQIBAFQRifFenE5+/Z/vkJ6sQrhgJECBAgMBXBTRAvirh3wQIECBQGYETG6/HbNm29/s3hk0vS4H/YGWCFygBAgQIECBAgACB6gh8sBNWrlycOftD1QlZpAQIECBA4F4BDZB7LXxHgAABAhUTWJzubsR+6LxtB35iQwz5ipCHVywF4RIgQIAAAQIECBAon0CMnyha4fkL0xM3ly84EREgQIAAgd4FNEB6t3IkAQIECJRU4MTG7Obznrvv8a0NG1/SaoULSxqqsAgQIECAAAECBAiUViA95+Ozsei8YGFu6i2lDVJgBAgQIEBgDQIb1nCsQwkQIECAQKkF8katPXPtd6bnMz4pb95KHazgCBAgQIAAAQIECJREoNv4SJ+h82dpzY+SLIowCBAgQGAgAq2BjGIQAgQIECBQPoHW+Zftf2JsbXh+uiLkO8sXnogIEMgCd17zEBAECNRc4IIrDtY8Q+kRqK5Aanx8uhWLl87PTr45ZRGrm4nICRAgQIDAqQU0QE7t4lUCBAgQqI9AK90a6+c2bNzwghBa312ftGRCoB4CGiD1WEdZEFhNQANkNR3vERiXQLy16BQvSVd7vDVFoPExrmUwLwECBAgMXUADZOjEJiBAgACBsghsfe7dP93aEF/oYellWRFxEHAFiN8BAk0Q0ABpwirLsTIC6eHmsWhd3Z7b/JeViVmgBAgQIEBgHQIegr4OPKcSIECAQLUETmz0/nLLtgOP2RDDC1ut1iOrlYFoCRAgQIAAAQIECKxdIMb490UrXL04M/HOtZ/tDAIECBAgUF0BDZDqrp3ICRAgQKBPgcXp7sbvneddtv/HW60NqRESvq/PoZxGgAABAgQIECBAoLQC6RkfH46xuHphdvLdpQ1SYAQIECBAYIgCGiBDxDU0AQIECJRb4MRG8N1bn7v/h1sbNqRbY4UfKnfEoiNAgAABAgQIECDQg0AMfxOLIt3qavJ9PRztEAIECBAgUFsBDZDaLq3ECBAgQKBXgRMbw/dtuXTfD6aHpedbY/1Ir+c6jgABAgQIECBAgEBZBNKtrt6bHm5+9eL2qQ+WJSZxECBAgACBcQpogIxT39wECBAgUCqBExvFHz3n0gOPOGtTa1sM4fGtEDaUKkjBECBAgAABAgQIELiPQPrMmh7vEd6yvBKn79o+8fH7vOVbAgQIECDQeAENkMb/CgAgQIAAgZMFTmwcn3juJXd/68ZN4bK0ofyVdHusB598nJ8JECBAgAABAgQIjE0ghmOp+fEnnZUwu+fazZ8bWxwmJkCAAAECJRZINR1fBAgQIECAwGoC5168eMGGsx58cWtD/M1WaG1e7VjvESCwNoE7r3nI2k5wNAEClRO44IqDlYtZwATKLBBDvDsWrVcVy8d27tm55c4yxyo2AgQIECAwbgENkHGvgPkJECBAoDICU9v2TjwobHhGiBue3WqF8ysTuEAJlFhAA6TEiyM0AgMS0AAZEKRhGi8QY5gPreK6pVDcuG/67AONBwFAgAABAgR6ENAA6QHJIQQIECBA4H4Cv/35B2/991ueEkLruemB6d9yv/f8QIDAmgQ0QNbE5WAClRTQAKnksgm6RALpweafDyHOtY8svjZc/y3HShSaUAgQIECAQOkFNEBKv0QCJECAAIHyCly1YcvlF//8xtDaFlqth5c3TpERKK+ABkh510ZkBAYloAEyKEnjNE4gxk90QpxenNn5v0K4qmhc/hImQIAAAQIDENAAGQCiIQgQIECAwNbL9/9IuiJkW7oi5MdoECDQu4AGSO9WjiRQVQENkKqunLjHJZCu+PjrdMXHdHtm8r3jisG8BAgQIECgLgKb6pKIPAgQIECAwDgFTmxQ37vlkn3fveGsDZeE2PqF9JyQs8YZk7kJECBAgAABAgSqIZCe77EcWvHPiuXi2sVrp26tRtSiJECAAAEC5RdwBUj510iEBAgQIFBBgXMvXrxg44Me9KxWaD09tMK5FUxByARGIuAKkJEwm4TAWAVcATJWfpOXXSCGPTHE/9lZWrphz84td5Y9XPERIECAAIGqCWiAVG3FxEuAAAEC1RJ46u5/t/X/b+/uY6O6zjyOn3NnbGzeDPgN0qRAEho2ToVIu0CrJS2F7ZZI3bC7JV2ppKsqUlbNFiVsCPk3/4aQJRFtqkZC3W3oahvSLtlK0G6gtGGVAtsGoeIsCXmBhgbssQHzZmPP3GefaxsDCR7s8bzcc+53pKs7M/ftPJ9jbDM/n3sap64yNnhUR4S0uNV4WotA6QUIQEpvzBUQqLQAAUile4Drx1FAR3y0Ggmfbcuc3mL+dXZPHNtImxBAAAEEEPBBgADEh16kBgQQQAABJwSa1p35y8DYNWLsVzQM4WewE71GI0stQABSamHOj0DlBQhAKt8HtCAeAhp6iDXyi9DIxvb1U3SeDx4IIIAAAgggUGoB5gAptTDnRwABBBBAYFBg8D+6rzasO3tH2sgj+vY/6MTp4wFCAAEEEEAAAQQQ8FlALmp1/5Yz9rmO9XVv+VwptSGAAAIIIBA3Af76NG49QnsQQAABBBIjUPftM1NrJ5mHjAm+o+NBbk5M4RSKwFUCjAC5CoOnCHgqwAgQTzuWsm4sIOa4MeF3u8+ZF7q+P+X0jQ9gDwQQQAABBBAotgABSLFFOR8CCCCAAAKjFfji7nTzwru/poc9qnfGWjjaw9kfAZcFCEBc7j3ajsDIBAhARubEXv4I6J2u9mk1z7bte+Nl8+slWX8qoxIEEEAAAQTcEyAAca/PaDECCCCAgMcCzeu6Fml537HWrtR1tcelUhoC/QIEIHwhIOC/AAGI/31Mhf0CvSKyVZ99t2193V5MEEAAAQQQQCAeAgQg8egHWoEAAggggMA1AhNXn2icML72QZ0j5B91VMisazbyAgGPBAhAPOpMSkFgGAECkGFgeNsLAR3tcdQY+cGFi92bz2+akfGiKIpAAAEEEEDAIwECEI86k1IQQAABBHwUeDKY/sSa5UbMw2LtV/QHd+BjldSUXAECkOT2PZUnR4AAJDl9nZRKRSf2sCK/0Dncnj/51MYdxjwZJqV26kQAAQQQQMA1AQIQ13qM9iKAAAIIJFagee2Z2SYIdESIeVD/w92QWAgK90qAAMSr7qQYBK4rQAByXRbedFFATIeGH5tNGP6gbcOU910sgTYjgAACCCCQNAECkKT1OPUigAACCLgvsPrIuKbapq/pD/GHda6Qz7tfEBUkWYAAJMm9T+1JESAASUpP+1unzu3xugYfz7d3t79sNs255G+lVIYAAggggIB/AgQg/vUpFSGAAAIIJEig6Z9Pz7Pp1MN67+lvaBgyIUGlU6onAgQgnnQkZSCQR4AAJA8Om2IroKHHBZ2L7ceSzT3f/i9TD8a2oTQMAQQQQAABBPIKEIDk5WEjAggggAACbghMW905ubo2/U1j7be1xXe60WpaiYAxBCB8FSDgvwABiP997FmFbxqR7/d2Z390alP9Wc9qoxwEEEAAAQQSJ0AAkrgup2AEEEAAAd8FGh8/tThlU9E8ISv1LxfH+14v9bktQADidv/RegRGIkAAMhIl9qmsgFw0YrbmJLc58/S0PZVtC1dHAAEEEEAAgWIKEIAUU5NzIYAAAgggECOBaFRIVW3q7zUEeVBvj7UgRk2jKQgMCRCADFHwBAFvBQhAvO1a5wvT21zt19uIbu7rzv0Hoz2c704KQAABBBBA4LoCBCDXZeFNBBBAAAEE/BJoXnvqLhOkNAgxD2ggUu9XdVTjsgABiMu9R9sRGJkAAcjInNirXALSKWJeNGFuc9uGaYfKdVWugwACCCCAAAKVESAAqYw7V0UAAQQQQKAyAitbq6ff+okVoqNCNAhZpr8IBJVpCFdFYECAAISvBAT8FyAA8b+P416hGBPqSI+dVkd7nHzvT9vM1pbeuLeZ9iGAAAIIIIBAcQQIQIrjyFkQQAABBBBwTmDqE6c+WSWpb2kC8i2dPH2mcwXQYC8ECEC86EaKQCCvAAFIXh42llJA5JgmHz/ss7kfnn5q2h9LeSnOjQACCCCAAALxFCAAiWe/0CoEEEAAAQTKKWCb1p3R0SA6V4ixK3Ty9HHlvDjXSrYAAUiy+5/qkyFAAJKMfo5NlWIuiZFtumxuXz9lp7ZLB4DwQAABBBBAAIGkCqSTWjh1I4AAAggggMCQgOgHBK/qq1cnr+maVltlVulcId/UW2R9ZmgPniCAAAIIIIAAArEWkN/r3B4/6u4zW85urDsV66bSOAQQQAABBBAomwAjQMpGzYUQQAABBBBwS6D+sY656XT1A1bkG9wiy62+c6m1jABxqbdoKwKFCTACpDA3jhqBgN7iSqz9cTbb+2LnMw2HR3AEuyCAAAIIIIBAwgQIQBLW4ZSLAAIIIIBAAQK28bHTi4NUapXeRWKltXZKAefgEASuK0AAcl0W3kTAKwECEK+6s+LFiMgZHaW6NczltmSembpHG8QtrireKzQAAQQQQACB+AoQgMS3b2gZAggggAAC8RNYfWRcY23jVwMbrNKPG+7VW2VVxa+RtMglAQIQl3qLtiJQmAABSGFuHHVFQG9t1adzlG0PJdyS6c783Gyac+nKVp4hgAACCCCAAALDCxCADG/DFgQQQAABBBDIIxDNF1JTLV+3Yh/QUSGfy7MrmxAYVoAAZFgaNiDgjQABiDddWfZCdLTHb8XKiz299ifM61F2fi6IAAIIIICAFwIEIF50I0UggAACCCBQWYGmx8/cpvOERJOnr7LG3l7Z1nB1lwQIQFzqLdqKQGECBCCFuSX1KDHyjo742GJEtrQ/PeXdpDpQNwIIIIAAAggUR4AApDiOnAUBBBBAAAEEBgWa13Ut0qfRxOl/p79ozAAGgXwCBCD5dNiGgB8CBCB+9GMpq9BJPE7oVB4v6+01/71tfd3eUl6LcyOAAAIIIIBAsgQIQJLV31SLAAIIIIBAGQWeDBoef2Rx2gb3y0AY0lzGi3MpRwQIQBzpKJqJwBgECEDGgOfxoRp6tFmRn2YlfKnj6ed0MvMnQ4/LpTQEEEAAAQQQqJAAAUiF4LksAggggAACiRJY+VKqeeaXv2A0DLGB+VutvTFR9VPssAIEIMPSsAEBbwQIQLzpymIUkpHQ/Mxo6NF27L9/Y7benyvGSTkHAggggAACCCAwnAAByHAyvI8AAggggAACpREYCEOWmEDDECsahtj60lyIs7ogQADiQi/RRgTGJkAAMjY/94+WThH7MxP2hx67CT3c71EqQAABBBBAwCUBAhCXeou2IoAAAggg4JvAF3enmxbevVQnTr/fGvkbDUOm+lYi9eQXIADJ78NWBHwQIADxoRdHW4OcFmP/Uyc0f6l93xu7zK+XZEd7BvZHAAEEEEAAAQSKIUAAUgxFzoEAAggggAACYxd46HdVjVPnLEuJ+breF/w+a+2UsZ+UM8RdgAAk7j1E+xAYuwAByNgNXTiDiJzRDxheyVnzk8zpIzvNC5/tc6HdtBEBBBBAAAEE/BYgAPG7f6kOAQQQQAABNwVWtlY33nrz0kDsCi3gr601090shFbfSIAA5EZCbEfAfQECEPf7cLgKRMxJ3fZfoZVtmfeO7zJbW3qH25f3EUAAAQQQQACBSggQgFRCnWsigAACCCCAwGgEbNPas4uMNSsCK/cZa+8YzcHsG28BApB49w+tQ6AYAgQgxVCM0TlE3grFvmLEbGvfMHmvtkwHbvJAAAEEEEAAAQTiKUAAEs9+oVUIIIAAAgggMIxA/WMdc9PptI4M0dEhYhfo6BB+nxnGyoW3CUBc6CXaiMDYBAhAxuZX6aN1lIdO5yH7NefYls1mt3U+03C40m3i+ggggAACCCCAwEgF+MBgpFLshwACCCCAAAKxE2h4NDMjqK66LzA2GhnyJW1gdewaSYPyChCA5OVhIwJeCBCAONmNvUbkV6GRV8Levlc6nm084WQVNBoBBBBAAAEEEi9AAJL4LwEAEEAAAQQQ8ENg2urOyVU1qeUahKzQMSH36sCQyX5U5ncVBCB+9y/VIRAJEIC48XWgAz3O6liP7Rp8bOvrye04tan+rBstp5UIIIAAAggggMDwAgQgw9uwBQEEEEAAAQRcFdBJ1JtuvXmJNv+r+svOcg1DbnW1FN/bTQDiew9THwIEIHH+GtDQ4z2dwGOHtvHn7e8d380k5nHuLdqGAAIIIIAAAoUIpAs5iGMQQAABBBBAAIFYC2xt6W035pfaxmgxDevO3pEyslyfRiND7tERIuOi93kggAACCCCQKAExlzT0eE1r3p4zdkfH+rq3ElU/xSKAAAIIIIBA4gQYAZK4LqdgBBBAAAEEki3QvPbkBGPGf8kGcq9KRLfMmplskcpWzwiQyvpzdQTKIcAtsMqhnOcaIsd06w4J7XZjLv6qbcP0C3n2ZhMCCCCAAAIIIOCVAAGIV91JMQgggAACCCAwWoFpj3XemU5VLbf984aYv9DjmUh9tIhj2J8AZAx4HIqAIwIEIGXvqF69rdX/iM7nkc317Tj1TP2bZW8BF0QAAQQQQAABBGIiQAASk46gGQgggAACCCBQeYHGh9sn2olVy6xJ6a2yotEh5ubKt8rvFhCA+N2/VIdAJEAAUoavAzHHo7k8xOS2y/m+nZnnm86X4apcAgEEEEAAAQQQiL0AAUjsu4gGIoAAAggggEClBJqfOPVpMem/CkSWaRiy2Bg7vlJt8fW6BCC+9ix1IXBFgADkikXxnslFI2ZPaO1Oa7K/bHtq2h+Kd27OhAACCCCAAAII+CNAAOJPX1IJAggggAACCJRSYGVrdcOsmz6XtsFS/SvbpTp3yAL9RSpdyksm4dwEIEnoZWpMugAByNi/AvTnTtaI7NefO7uyEu7qOPrhb83Wlt6xn5kzIIAAAggggAACfgsQgPjdv1SHAAIIIIAAAiUSaFiXmZSScV8wVpbqyJBlOofIXSW6lNenJQDxunspDoF+AQKQwr4QdA6PQ8bITiN2V85e+k3H+sZzhZ2JoxBAAAEEEEAAgeQKEIAkt++pHAEEEEAAAQSKKND0SFuzramJwpClVjQUsXZmEU/v7akIQLztWgpDYEiAAGSIIv8TkWNi7S4NPXZJT8+u9uea2/IfwFYEEEAAAQQQQACBGwkQgNxIiO0IIIAAAggggEABAo1rum631bI0MMFSvU/7Ep1DpKGA03h/CAGI911MgQgwCfpwXwNiOvRnw+7QhLuk1+7KbKx7Z7hdeR8BBBBAAAEEEECgMAECkMLcOAoBBBBAAAEEEBiNgJ3+ROedoaQWW2sXW9EJ1a29ZTQn8HVfAhBfe5a6ELgiwAiQQQuRD8SaPSKyJ7C5PSefqn9Tt+j0HjwQQAABBBBAAAEESiVAAFIqWc6LAAIIIIAAAgjkEZj+6OlZYXWw2BoNRIzco4HIHXl293YTAYi3XUthCAwJJDYAEXlLjH1NjAYeveGek89OPTqEwhMEEEAAAQQQQACBsgiky3IVLoIAAggggAACCCBwjcDgB2FH9c0Xow0TV59oHF9bo2FIFIqYe/RDs3k6sXoq2sYDAQQQQCDeAjpheU7D7IM6nEMDj3DPxe6ePec3zcjEu9W0DgEEEEAAAQQQ8F+AESD+9zEVIoAAAggggICDAg3rMpMCW/356HZZOkpER4iYP9cyahwsJW+TGQGSl4eNCHgh4OkIkB69edX/6uiO16LbWoXS+3rH+sZzXnQYRSCAAAIIIIAAAh4JEIB41JmUggACCCCAAAIeC6w+Mq65tmm+fuC2UMOQhVrpIp1PZLbrFROAuN6DtB+BGwv4EIDovB3va6V79XvwPv0evK+tu/2A2TTn0o2rZw8EEEAAAQQQQACBSgpwC6xK6nNtBBBAAAEEEEBgpAL6QVtb9OHbwNJ/VHTbrAk1ExaaQBYOBiMLdLRI3UhPyX4IIIAAAh8X0FEdXfo9dX8UdJjQ7rvQc2Eft7P6uBPvIIAAAggggAACLggwAsSFXqKNCCCAAAIIIIDAyARs/bqOuVVSraNENBTRkSI6l8in9Re+2P7RCyNARtax7IWAywJxHgGic3Zkde6OP/SP7BC7r8/27utc33BYvXUTDwQQQAABBBBAAAHXBQhAXO9B2o8AAggggAACCOQTeOjD8Y11NZ+xQXph0H/7LFlgjP1kvkPKuY0ApJzaXAuBygjEKwCRPxqx+0Md3SFhdl+mq+f35oWbLlZGhqsigAACCCCAAAIIlFogtn8NWOrCOT8CCCCAAAIIIJAIAf1gL2PMHq01Wvofk/7pbP342nC+TZm7Rex8/YuY+WLtHF0Hl/dhjQACCLgsoMM3QityRNcHrJUDkjNvXOwODpz7Xl2ny3XRdgQQQAABBBBAAIHRCRCAjM6LvRFAAAEEEEAAAecFzn1vcuc5Y3ZqIdHS/2hee3JCmBo/LwglCkM0FJH5xtq7dGP14C6sEEAAgbgK9BqRQ3rLvwMaehwIA13nLh48uWH6hbg2mHYhgAACCCCAAAIIlEeAAKQ8zlwFAQQQQAABBBCItUDbwAeFr2sjo2Xg8dDvqhrrbmtJ2ZSGIqKhiJ0vIvOstZMu78IaAQQQKKeAfg86p9+DDupE5Rp22AM5yR3IdL3bal74bF8528G1EEAAAQQQQAABBNwQYA4QN/qJViKAAAIIIIAAAnERsI2Pd92uk6zPS5lohIht0Ya1iDXRLbRG/cc1zAESl26lHQiUTqCQOUD6JycXc0Rb1arzkbfmjBzSuTsOZp6ue0ffY4Ly0nUXZ0YAAQQQQAABBLwSGPV/Ur2qnmIQQAABBBBAAAEERisg+gFk9KFktLw8dPDK1urmmTM+ZVKp6LZZGorYFr2NVovOMXKbtSY1tB9PEEAAgasERExO5+h4V29f1R906KZWk8sdajt24m2ztaX3ql15igACCCCAAAIIIIDAqAUIQEZNxgEIIIAAAggggAACHxPQDyrbjDmk70fLlcfqI+Oaqhrm2qqgPxTR+/QPBCTWzmbS9StMPEPAd4FoUnL99/++1tmq8wvp9wlplb6wtb2v47DZNOeS7/VTHwIIIIAAAggggEBlBAhAKuPOVRFAAAEEEEAAgWQI6Aeb7cYc1GKj5cpjzQe1DelJf6afic7V0SKf0g262DkDazP5yo48QwABxwTOanvf1oAjGiUWrd/OhuHhjuy5/zMbb+l2rBaaiwACCCCAAAIIIOC4AHOAON6BNB8BBBBAAAEEEPBNQOR8szHjNAyJgpH+5XIwcrvWWuNbvdSDgIMCPdrmaC6OwaBD+oMOYy4dsXaiDgbjgQACCCCAAAIIIIBAPAQIQOLRD7QCAQQQQAABBBBA4AYCohOKGNNzi861rsFIEIUiUUgyW9fRMkuXOl14IIBAcQS69DRHddHbVvXfukpHdIS6ZDXsqPnA6sQdxbkMZ0EAAQQQQAABBBBAoHQC+p9IHggggAACCCCAAAIIuC8gcmaqMeNnaTiigYjVdRSMXF73ByQT9D0eCCAwIHBBV0d1iQKOq9ahvr541Nopp3UbDwQQQAABBBBAAAEEnBYgAHG6+2g8AggggAACCCCAwEgFRM416q21NBQJZg2OHNHRJPZmPf4TukTrJl0CXXgg4LpAqAXo9DvmuC5/0oAjWn8wMJIjPKq3qnrf2kkZfY8HAggggAACCCCAAAJeCxCAeN29FIcAAggggAACCCAwUgGR3WljFt2kt9jSQCQKRuzlYGTwdX9QEr1XPdJzsh8CJRDo1XNqqDEUbETPNeCQwaAjq+u9H1q7JFuCa3NKBBBAAAEEEEDy3+FJAAABuklEQVQAAQScEiAAcaq7aCwCCCCAAAIIIIBAJQUG5iE536AjSaJQRCdrtzpqJFr3jx4ZfG0uv45GlFRVsr1c2xmBPm1pNGIjWnQScRlcR69l8HW0vqThxsQO5t9wpl9pKAIIIIAAAggggECFBQhAKtwBXB4BBBBAAAEEEEDAX4GBeUlqNRAJBoOSKDDpD0jqdT1NwxOdtyRam8vrKfqc23ApgsOP6PZTZ3Q5pUs0j4auZXBtOvX1VYFGqAFHdxvzbagKDwQQQAABBBBAAAEESiBAAFICVE6JAAIIIIAAAggggEAhAgMjTM7UGVOjgUhqMCCxHw1KorBkkoYnupiJA8+vWUeTvfN7viIU8BA9Jpoc/Lwu565dS/Q6WqIw46pgQwYDjpyue/T9KV2M0FAhHggggAACCCCAAAIIxECA/xjFoBNoAgIIIIAAAggggAACxRIYCFEyGoJM0IAkpQFJEIUluh4KTKLn4/R6NbrkWdvhtkdzoESjVFIFrvUwE42SyBW4jubAuKRLz7Vr+cjrj26PXkt0XBRu6BIFGqLrUNc5XV/QdeMFwgvV4YEAAggggAACCCCAgCcC/w/6TbXyTJ5/7QAAAABJRU5ErkJggg==\"\n />\n <image\n id=\"image2_3622_12940\"\n width=\"720\"\n height=\"720\"\n xlinkHref=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAALQCAYAAAC5V0ecAAAMbWlDQ1BJQ0MgUHJvZmlsZQAASImVVwdYU8kWnluSkJDQAghICb0jUgNICaEFkF4EGyEJJJQYE4KKvSwquHYRxYquiii2lWYBsSuLYu+LBRVlXdTFhsqbkICu+8r3zvfNvX/OnPlPuTO59wCg+YErkeShWgDkiwukCeHBjDFp6QzSU4ADKtABnsCQy5NJWHFx0QDK4P3v8u4GQBT3q84Krn/O/1fR4QtkPACQcRBn8mW8fIibAcA38CTSAgCICr3llAKJAs+BWFcKA4R4tQJnK/EuBc5U4qMDNkkJbIgvA6BG5XKl2QBo3IN6RiEvG/JofIbYVcwXiQHQdII4gCfk8iFWxO6Unz9JgcshtoP2EohhPICZ+R1n9t/4M4f4udzsIazMa0DUQkQySR532v9Zmv8t+XnyQR82cFCF0ogERf6whrdyJ0UpMBXibnFmTKyi1hB/EPGVdQcApQjlEclKe9SYJ2PD+gF9iF353JAoiI0hDhPnxUSr9JlZojAOxHC3oFNFBZwkiA0gXiSQhSaqbLZIJyWofKG1WVI2S6U/x5UO+FX4eiDPTWap+N8IBRwVP6ZRJExKhZgCsVWhKCUGYg2IXWS5iVEqm1FFQnbMoI1UnqCI3wriBIE4PFjJjxVmScMSVPYl+bLBfLEtQhEnRoUPFgiTIpT1wU7xuAPxw1ywywIxK3mQRyAbEz2YC18QEqrMHXsuECcnqng+SAqCE5RrcYokL05lj1sI8sIVeguIPWSFiaq1eEoB3JxKfjxLUhCXpIwTL8rhRsYp48GXg2jABiGAAeRwZIJJIAeI2rrruuEv5UwY4AIpyAYC4KzSDK5IHZgRw2siKAJ/QCQAsqF1wQOzAlAI9V+GtMqrM8gamC0cWJELnkKcD6JAHvwtH1glHvKWAp5Ajegf3rlw8GC8eXAo5v+9flD7TcOCmmiVRj7okaE5aEkMJYYQI4hhRHvcCA/A/fBoeA2Cww1n4j6DeXyzJzwltBMeEa4TOgi3J4rmSX+IcjTogPxhqlpkfl8L3AZyeuLBuD9kh8y4Pm4EnHEP6IeFB0LPnlDLVsWtqArjB+6/ZfDd01DZkV3JKHkYOYhs9+NKDQcNzyEWRa2/r48y1syherOHZn70z/6u+nx4j/rREluEHcLOYiew89hRrA4wsCasHmvFjinw0O56MrC7Br0lDMSTC3lE//A3+GQVlZS5Vrt2uX5WzhUIphYoDh57kmSaVJQtLGCw4NtBwOCIeS5ODDdXNzcAFO8a5d/X2/iBdwii3/pNN/93APyb+vv7j3zTRTYBcMAbHv+Gbzo7JgDa6gCca+DJpYVKHa64EOC/hCY8aYbAFFgCO5iPG/ACfiAIhIJIEAuSQBqYAKMXwn0uBVPADDAXFINSsBysAevBZrAN7AJ7wUFQB46CE+AMuAgug+vgLtw9neAl6AHvQB+CICSEhtARQ8QMsUYcETeEiQQgoUg0koCkIRlINiJG5MgMZD5SiqxE1iNbkSrkANKAnEDOI+3IbeQh0oW8QT6hGEpFdVET1AYdgTJRFhqFJqHj0Wx0MlqELkCXouVoJboHrUVPoBfR62gH+hLtxQCmjulj5pgzxsTYWCyWjmVhUmwWVoKVYZVYDdYIn/NVrAPrxj7iRJyOM3BnuIMj8GSch0/GZ+FL8PX4LrwWP4VfxR/iPfhXAo1gTHAk+BI4hDGEbMIUQjGhjLCDcJhwGp6lTsI7IpGoT7QlesOzmEbMIU4nLiFuJO4jNhPbiY+JvSQSyZDkSPInxZK4pAJSMWkdaQ+piXSF1En6oKauZqbmphamlq4mVpunVqa2W+242hW1Z2p9ZC2yNdmXHEvmk6eRl5G3kxvJl8id5D6KNsWW4k9JouRQ5lLKKTWU05R7lLfq6uoW6j7q8eoi9Tnq5er71c+pP1T/SNWhOlDZ1HFUOXUpdSe1mXqb+pZGo9nQgmjptALaUloV7STtAe2DBl3DRYOjwdeYrVGhUatxReOVJlnTWpOlOUGzSLNM85DmJc1uLbKWjRZbi6s1S6tCq0HrplavNl17pHasdr72Eu3d2ue1n+uQdGx0QnX4Ogt0tumc1HlMx+iWdDadR59P304/Te/UJera6nJ0c3RLdffqtun26Onoeeil6E3Vq9A7ptehj+nb6HP08/SX6R/Uv6H/aZjJMNYwwbDFw2qGXRn23mC4QZCBwKDEYJ/BdYNPhgzDUMNcwxWGdYb3jXAjB6N4oylGm4xOG3UP1x3uN5w3vGT4weF3jFFjB+ME4+nG24xbjXtNTE3CTSQm60xOmnSb6psGmeaYrjY9btplRjcLMBOZrTZrMnvB0GOwGHmMcsYpRo+5sXmEudx8q3mbeZ+FrUWyxTyLfRb3LSmWTMssy9WWLZY9VmZWo61mWFVb3bEmWzOthdZrrc9av7extUm1WWhTZ/Pc1sCWY1tkW217z45mF2g32a7S7po90Z5pn2u/0f6yA+rg6SB0qHC45Ig6ejmKHDc6tjsRnHycxE6VTjedqc4s50LnaueHLvou0S7zXOpcXo2wGpE+YsWIsyO+unq65rlud707Umdk5Mh5IxtHvnFzcOO5Vbhdc6e5h7nPdq93f+3h6CHw2ORxy5PuOdpzoWeL5xcvby+pV41Xl7eVd4b3Bu+bTF1mHHMJ85wPwSfYZ7bPUZ+Pvl6+Bb4Hff/0c/bL9dvt93yU7SjBqO2jHvtb+HP9t/p3BDACMgK2BHQEmgdyAysDHwVZBvGDdgQ9Y9mzclh7WK+CXYOlwYeD37N92TPZzSFYSHhISUhbqE5ocuj60AdhFmHZYdVhPeGe4dPDmyMIEVERKyJuckw4PE4VpyfSO3Jm5KkoalRi1PqoR9EO0dLoxtHo6MjRq0bfi7GOEcfUxYJYTuyq2PtxtnGT447EE+Pj4ivinyaMTJiRcDaRnjgxcXfiu6TgpGVJd5PtkuXJLSmaKeNSqlLep4akrkztGDNizMwxF9OM0kRp9emk9JT0Hem9Y0PHrhnbOc5zXPG4G+Ntx08df36C0YS8Cccmak7kTjyUQchIzdid8Zkby63k9mZyMjdk9vDYvLW8l/wg/mp+l8BfsFLwLMs/a2XW82z/7FXZXcJAYZmwW8QWrRe9zonI2ZzzPjc2d2duf15q3r58tfyM/AaxjjhXfGqS6aSpk9oljpJiScdk38lrJvdIo6Q7ZIhsvKy+QBd+1LfK7eQ/yR8WBhRWFH6YkjLl0FTtqeKprdMcpi2e9qworOiX6fh03vSWGeYz5s54OJM1c+ssZFbmrJbZlrMXzO6cEz5n11zK3Ny5v81znbdy3l/zU+c3LjBZMGfB45/Cf6ou1iiWFt9c6Ldw8yJ8kWhR22L3xesWfy3hl1wodS0tK/28hLfkws8jfy7/uX9p1tK2ZV7LNi0nLhcvv7EicMWuldori1Y+XjV6Ve1qxuqS1X+tmbjmfJlH2ea1lLXytR3l0eX166zWLV/3eb1w/fWK4Ip9G4w3LN7wfiN/45VNQZtqNptsLt38aYtoy62t4VtrK20qy7YRtxVue7o9ZfvZX5i/VO0w2lG648tO8c6OXQm7TlV5V1XtNt69rBqtlld37Rm35/LekL31Nc41W/fp7yvdD/bL9784kHHgxsGogy2HmIdqfrX+dcNh+uGSWqR2Wm1PnbCuoz6tvr0hsqGl0a/x8BGXIzuPmh+tOKZ3bNlxyvEFx/ubipp6myXN3SeyTzxumdhy9+SYk9dOxZ9qOx11+tyZsDMnz7LONp3zP3f0vO/5hgvMC3UXvS7Wtnq2Hv7N87fDbV5ttZe8L9Vf9rnc2D6q/fiVwCsnroZcPXONc+3i9Zjr7TeSb9y6Oe5mxy3+ree3826/vlN4p+/unHuEeyX3te6XPTB+UPm7/e/7Orw6jj0Medj6KPHR3ce8xy+fyJ587lzwlPa07JnZs6rnbs+PdoV1XX4x9kXnS8nLvu7iP7T/2PDK7tWvfwb92dozpqfztfR1/5slbw3f7vzL46+W3rjeB+/y3/W9L/lg+GHXR+bHs59SPz3rm/KZ9Ln8i/2Xxq9RX+/15/f3S7hS7sCnAAYHmpUFwJudANDSAKDDvo0yVtkLDgii7F8HEPhPWNkvDogXADXw+z2+G37d3ARg/3bYfkF+TdirxtEASPIBqLv70FCJLMvdTclFhX0K4UF//1vYs5FWAfBleX9/X2V//5dtMFjYOzaLlT2oQoiwZ9jC+ZKZnwn+jSj70+9y/PEOFBF4gB/v/wL6wZD5xrHqrwAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAC0KADAAQAAAABAAAC0AAAAABRXt+HAABAAElEQVR4AezdB5wlVZ33/+9N3dOTZ5ghZ1AJCmJGEAcki4rosCpITuJfjOs+ru5j+5hW1/SwLlGSIigjrBEU05geXTOrwBoZogjTk7t7Otxb/9+v6hbcmamZ6em+oW7Vp3gx3V19b9U571Pd/b3nnjqnIDYEmiQQKCgsWaziZUtU8EMulWpSwf7f/Hbls4Ppq2ZpfrGk+aWi5qmq+YWStgtq2r5Y0AJ75nZ2tIX2cYEddFoQqMe+rtjX/n9P+DFQpWD7AvvaPhZtHxsCCCCAQMoE7Pd3zX6Pj9rHMfs9PmbF8/9Hw4+2z35/j9rv8fX29XIFetw+DtQCLS8U9VhQ1YBKWlGtaWWtqhVz12rFhb8qDNljtrAFxUWK/iZcvFjB4iV+/oKdgg2BqQuEQWfqh+EIeRPoV1A8YLEK9zyuwgELFZy6pFBNMrCAXOnZQdvVitrBAvKu9otvd/sluZel3N3Xj2s3e9KOI+NhUO4rl1Qp2xVpvyzDBG4B2hO47JetLFCHm//mC3/72T9xMo+/Dj9GD+NfBBBAAIEUCoShw3/P18sW9njUv473hX8D7Av/ngXo8He+/w0Yt8/Hq2HoHu4ta3lJerSnrAdt9/32oGXWEfOABeyHijX9ffTvGrCA7QF9k+2WxUEp/tt1zxIF/Vvp6NnkAOxAwATi6xUMBLYgEBT67TeMdSmHv+v6lxbGkx587QnBwlJJe1UD7W89Bc+wX3RPr1a17/qqdiwXNWNa2X4h1n9Revi1x8kCdfhL0UOy7ws/RMnYPn1ii65TP3vw5DUbFsYfYl0KTzySTxBAAAEE0i9gb1l6IaNf9/XiFmzfkzs2/Btgv/DtF33Rf+9bJ4y8s8UCs0r+0fb5gz1sW8eMxmsanFbSo/b36M/WMfN7e2fzd/a4e+3v0X3n3FHwnu1Ntv5Fgf2Fsm2Ravb3zo5ET/UmSOzYQMAuPTYENhZ4MjBvrnf5xlMC700+yH7NHGy9As+wz/cbrWlP+wU2z4Oy/4LzX2YWosOA7GHZehC8l9o+C//xTgbrx7aHWigOL0SCsNOwIYAAAghsTsCCt/8RCSxs2wDB8M1J+/sR/l2x3QX7w1LyUO0B28Jz2GnjT/BgbR04K3uKYU/1/9j3f2eJ/C4L4f99+m2FhzY+XdxLTaDeWIavY4Ewt8Rf8DG/AvH4ZRfYeDiGvzLfY5b2tV8+z7EL5oWj43ruqAVmG5Ix039B+S8nf2ttzOKxvX0W2NcelH3z68tjccGey7UWkvAPAggggEArBazzJvovCtZhuLZempL9zSpU7G9WOFTQ/iJ5B4/9zVrXU9L/2FCQX9gD/58995f3r9WfN36n1QO1l5lx1K1sue46NqGmu9qriaUNCovthr8DbQyzDc2o9TeMAfPAvM8sHVQt6vDxcR1qv2SeZb3L+0yv2LtldsV4UB6zt9lsv7/ZFr/hZr+aCMpNbCAOhQACCCDQRIGGYP3E3y3rBCpW7O1QD9beGTQ0pqr1Uv/F9v+6XNZPSzX9+C9r9d+Ngbrf3ztdpOLddv/PErsx0fqJwpDexKJyqC4QIEB3QSM1r4hB4RYLzX68jXuZ7dX1LkPrdZiF42MtLL/IftE81QJz+AvFA/OI/YpoGIJRtCBd8P+bVzaOhAACCCCAQHsFLDT7u6YegD1Uh0NAeuuB2juMLFD70I8/Wqj+kYXsO6dP00/s7+fDjaWMe6dPJUw3smT+cwJQ5ps4Cs1+x3HjK+hLTwh655R0cDHQkSPSMTYk47n2y2G2/aKQDdHQiIVm+6XiNwv6NRINwSAwZ/5qoYIIIIBArgUsTIc91fYn0BwCC9HlXuudtiEe4X091qG0xoZ8/MJuUrzThn8sXV3VXZfcUbA/o9Hm7+BG9w7RMx2bZPUjATqjLdvfb28xLVWxMTT3K+jZ/QQdajdZnDxc1Yney9xnvcw+ftlDsw3JsNgc/tIo2q3OYU91RnmoFgIIIIAAAhMSqNXC3umwh9qGdpQ8TPs46uF673RfSbfbO7RffuAO/bRfBZ/XOtzCmT0W+aweW14PIX48H7tLgADdXe21xdLaC+fC+xaptEFotlfDe8/SC+wXwCvsJfJJ9nE/e/UcBma7K9lfYXto9r7lIjf6bZGXbyKAAAII5FygPo7aw7T//SzZrFMFD9T2Lq7Psfc/vdLX7eNX/rpWP9v4b/F7l6pqf2z9eWwZECBAd30jJo9r/sIpwQvWjehk61k+ycLxgTbp/MahmV7mrm97KoAAAggg0EmBht7pJ8K0LQ7m8fpuC9Zfn9mrL7/mtsLP4jIyXjqW6P6PBOgubUMbjhHeBdz4CveaY4KdyzP0qvExnW4/v8/zt5h8aEZDTzOhuUvbm2IjgAACCKRbIClM+xBJ67/6ebmiG8cHdeu53y48EtciHOKxdMNZsOLv8TH9AgTo9LfRBiX0sc0H3K1CPIuGB+l9T7YbAUd1hs2U8TLraZ7ns2YMR6+A/V9C8waCfIEAAggggEBrBZ4I03YTYp8laJ8mz3qmV9rNh1/tqehzf/6yvm/jpX0oiLxX+p4DbUlxxkq3tlGafHQCdJNBW3W4jX/APnNisIctl73YVvh7nY3JOsTuBQxDc/1GwAI3AbaqJTguAggggAACExeoh+nAb0D0MG33HvrUeL+xFRNvsruQlpx3e+F+P9rGHWQTPwOP7IQAAboT6hM+ZzS+Oe5t9qfdcFzwvGpZF9sNC6+slDU77G0eC29mqHEj4IRheSACCCCAAAJtFWi4AbFoM2CFqyKOjWtNb0W3FUd1+ZnfKvw8LpB3mjGvdKyRzo8E6BS2y6azaViQPkUnDo7oYhumcaK9itWgvYStVcN5mhmikcI2pEgIIIAAAghsTiAe4lEsqTzDp5O1oZe2gMvtM3p12am36XabHCucrcPHSTN7x+YUO7ufAN1Z/w3OvnFw/o9Fwcw5M3Tq+kBvsLmbn2OvXjVoM0zaAidVm9w9XA1wgwPwBQIIIIAAAgh0jUB9JcSa/U0vzegJh3b4qr+/nFbQ5asHdcsblxbWeWUI0ulrUgJ0CtrEg/MSW2I7Hqpx7QnBwlpJ59mS2uf1FLS338U7PBpO5B7Y2Gbrf2ZDAAEEEEAAgSwJWK90uC5DX4+K4Sxagf5qqyBeXRjXNefcUXjc6+pDOxbbkuHMJ935lidAd7QNgkJ/w8InnzgumD+vrIvWV/Ummz9yR5t+zqehC3+guCmwow3FyRFAAAEEEGiLQHzToeUAn1vac8CjNnvHv68c1xVv+1ZhhRfCe6T7bWGWeKhHWwrGSTYQIEBvwNGuLzYMzv96dDBnQa/OtxsCL7Fp6HYbsvHN9vm4LaZtuZkltdvVKpwHAQQQQACBtAjYHHe+iHjNpsArT7dx0jYN3oP2+aVDNV11yR2FNV5OgnTnWosA3Wb76M7agvcq68qXBdN7ajrXbgx8iy2vvfeQ9TjbHbnjNptGiWW129wwnA4BBBBAAIEUCtRn76jazFvhnNLWwfbXSlGfGi/qmgu/VhjyIjdmixRWIZNFIkC3qVl9fkc/lU+U7q8Yd52uc+2H4m2lkp76xFANuzGQ4NymBuE0CCCAAAIIdJFAPA1ePLTDZu74o80l/YmHhnSNr0rcmDO6qFpdW1QCdIubbuOZNa44KTjR+p/fZ2/DPMdXCwzHOBdlk2wwVKPFTcHhEUAAAQQQ6HqB+tCOwIN0uDBLVb8MSnrvRV8v2PR3zNjRrgYmQLdQuvEtlc+8NHi6vVLstwv/VfXFT7g5sIX2HBoBBBBAAIEsC8Q3G9qiLCVfKtw64m611Yn7z/tG4fde78YMkmWHTtWNAN0CeX8bpb/fVwcsBDe8JNiu2qt3jgZ6U7movrUj8umcbZAzPc4toOeQCCCAAAII5Eqgajcaepib1avieE3DNgXev1dG9NEzv1sYsJUjCpZH7P+C9d+xNVOAAN1MTb9QG6al+9zLgwtsRo1328qBu68bsdtpfQEUm8cZ9KaiczAEEEAAAQRyLeAdc7YAS9XuoyrN7A1XNnzAZu744Ou/WrjKYZito/mXB1muSaaNb5Vcd3zw3KBHH68EetFqn5LOZtbwVYbsf7yb5M1hEEAAAQQQQGBDgfrKhuGMHXNs6ruxgn5UGNXbz/5m4Rf+yMassuEz+WpbBQh02yq20eMbVxH8xKFB3+z5ene1qnfaAI3K0KhNcs7MGhuJ8SUCCCCAAAIItFIgnrFjeo+tXlzTmM349dE1K/TBt/20MOwhmtUMp65PgJ6CYeMruStODI4pBvpYuayD1qy3t1JsuAbLbk8Bl6cigAACCCCAwJQEfHlwfwd89jQb1jGu/7bB0u+46PbCt/2gjRlmSifJ6ZMJ0JNo+A16nW357dllfcAO8wYbvC8b8zzuY5AYrjEJWJ6CAAIIIIAAAk0V8GEdfg+WjYku2wQGPpb08jXjeo8vC05v9OSpCdDbaNf4iu2KE4JXWy/zR+2uwL2s19muUQXMrrGNoDwcAQQQQAABBFouUJ+tozBnmgrjge4rBfrHc28v3Oonbsw2LS9IRk5AgN6GhozuYi2Mf+SwYNaC+fqYvZDzWTZ8ffpxC9I2cwwbAggggAACCCCQTgGfrcOGdYz32rLg1iNtw6N11fIVesc//aSwNs446Sx5+kplGZBtawI+r7MP2/ClMj9zQnDYvLn6aSHQBauGVbWVBGvW60x43hoi30cAAQQQQACBjgp4R59nFs8unmE8y3imudyyjWecMOtY5uloIbvk5HSabqWhGl+RXfay4J/Ltgy3jSUqh2OdCc5b0ePbCCCAAAIIIJBGgbg32sdG271b4+O2HPjFXyt8yMvamH3SWPY0lIkAvdlWCAq3LFbx1CWF6qVHBfvMnK4reko6evmgz1XOWOfNsvENBBBAAAEEEOgaAR8b7fcWbjdDhdGqvjM4pIsu+V7hL9G4aB/lYf3UbJsI0E2/CYm98qq/feHh+aoTgtP6+vRftr780Y8PatxvX+VGwQQ0diGAAAIIIIBA1wmEmcayjXUQjts77Ed75vnMicHrPAN5ZeJM1HUVa3GB6YHeCPiJO1FtovHrhvQxW3r7LWtHw2UxWYZ7Iyu+RAABBBBAAIFsCHg3sy8HXi6pNKsn/PxTZ0/XO2RB+olslI2qNqUWBOgGxnjMz0cWBbvO79MNPUUdtWKE1QQbiPgUAQQQQAABBDIsEK9iOL9XpbGqvjuwXmf909LCQ3FGynDVt6lqBGjj8rtOl9THO19+fLDI5nX+nE1Lt+uaEaan26ariQcjgAACCCCAQNcLxDcYzu5V2aa9e8iGsb7+Dd8sLPWeaJYBj5o392OgfWxPwQbI+1ifK04K3lwu6js2j8uua63nmbmdu/53ABVAAAEEEEAAgW0U8N5Vz0CehcYsE1k2+vbVJwaXeFbyzMS46HBFx21UzdDD4zE9nzg06Ju7nf6jUtLZA8yykaEWpioIIIAAAgggMBWBxlk6bEjHdasG9Ma3/bQwHGeoqRy7m5+b2yEc8VgeH+88r09LbND8C1avD2fZKHmXdDc3KmVHAAEEEEAAAQSaJVAfF121ZcDL41X9bOWwFud9XHQug2Icni89Ojikt0e3WWDec62F52KJFQWb9cPGcRBAAAEEEEAgOwLhuOiqxmdZiLZAvWx8TK9847cLv40zVXZqOrGa5C5Axw19xfHBiTa+5yabIXzO0KiqNg9iaWJkPAoBBBBAAAEEEMingA3pqNrqhf5u/Wq7wfB1F32zcHucrfIkkpsA3TjTxtUvDS6wRr58ZFxFG8/jNwsSnvN01VNXBBBAAAEEEJi0gAXnqt03Vuopq1aq6aJz7yhcnbcZOnIRoD08+1Xid45edVLw/mkFvWfFep+9zr5RVO5nIpn0TxBPRAABBBBAAIFcCtiiKzUPVvOnqbA+0Acu+HrhXxrzVtZRMh8e42nqfJ7nS08IbphesvA8LJvS0AI14Tnr1zf1QwABBBBAAIEWCHiG8izlmcqz1b9bxipY1srLNHeZ7oH28NzfX6hZcO4tVbVkWkUvs8VRxqzRK5mueAt+UDgkAggggAACCCCwsYCHaOuNHrOVCyvDY/raaEmLL7mjMBJnsI0fn5WvM5sjF9tqOUtswm8b2D5zp179Z7mio9cMW3guEZ6zcvFSDwQQQAABBBDovEAYoqsam92nis3O8Z2/jeiV/UsL6+Is1vkSNr8EmQzQcYN9+PBg3rxZ+lpPSYet8mnqbFWdTFa4+dcFR0QAAQQQQAABBCYs4CHabi4cn2vT3I1W9ZOVa/Wyd/24sDLOZBM+UJc8MHN5Ml4Z54MvCXZY0KtvlAp6tg3bIDx3yQVJMRFAAAEEEECgOwXiED27V2W72exXy0f00nd/t/D3OJt1Z62SS52pAB030MePCHabOV132MIoB9o67oTn5LZnLwIIIIAAAggg0FSBOETPshBdq+rudUM64e0/LDwYZ7SmnqyDB8tMgI4b5rKjg70rvfqWme7r4dkWSCl30JdTI4AAAggggAACuROwBVfGPURbxf9sPdHHves7hb/GWS0LGJkI0PH4mo8sCnad26el1jD7DI4RnrNwgVIHBBBAAAEEEOhOAQ/RMyphiP7LqmEt+qelhYfizNadNXqy1F0/D7RPk+KzbVx+bLD93F59024UJDw/2b58hgACCCCAAAIIdETARwF4h6ZnM89ontXCGdIsu3WkQE08aVdXIJ5j8MMvDebZajh3FMvRmGeGbTTxCuFQCCCAAAIIIIDAJAU8k4X3o1lGs3vTbvfM5mt0eIab5CFT8bSuHcLRL1skRYXavx0bzJhV0rfKNlXdGpuqjvCciuuKQiCAAAIIIIAAAk8I+HCO2TbF3bhNcbe2quP+8c7CYJzlnnhQF33SlQE6Xmv97EXqPbRXX/NFUlYzz3MXXXYUFQEEEEAAAQTyJBDPzjHH54m2xVbGijrpTXdo1A18+e9us+jC7vOgsMTWWj9ykUpP79OSCuG52645yosAAggggAACORPwHltf0M47PHssu40HWuJZzjOdLQbedR26XRagg0K/YZ9qNw0u7tE125V0EisM5uwnkOoigAACCCCAQFcKxCHahtyOzSvrZZ7lPNN5tuu2EN1Vif+CZweVq35VGLvqxOD90yt6z/JBjdnrlkpXVaIrL3kKjQACCCCAAAIINEcgHK9R09iCGaoMjekDF9xe+Jc44zXnDK0/Stdkz+8vCspHLi2MX3VScP60gq5aMaxxC8/lrqlA69uSMyCAAAIIIIAAAl0hUA/R4/P7VF4f6IILvl64Os563VCBrhjC0V8Pz/9xXHC8DTO/YvWIqjZapkR47oZLjDIigAACCCCAAAIbCniG8yznmc6znWc87yj1zLfhI9P5VeozaLzs46XHBQdPK+qHo1XNGqvZHHZFH3TOhgACCCCAAAIIINCtArWaapWiCj0lrV1f0xGXfKtwV5z90lynVIdQn2TbB5dfc0ywc6Wkr1Sl2Raea4TnNF9SlA0BBBBAAAEEEJiYgGc6z3ae8TzreeYLbyxM+UIrqe0m97meC3ercN2ewbShkr7cU9Aea0dVtYVS7E5NNgQQQAABBBBAAIEsCFiILg2PqTqrV3sMV/Sflv1efPbdGguzYErniE5tD/T7fEoT630e3k9X9JX13LXRKoOE5yz8pFAHBBBAAAEEEECgQcA7SD3rTS/qeZ79PAOGWbDhMWn6NJUB2geQ99tA8steGrzJXo2cGa4yWFJqe8vT1KCUBQEEEEAAAQQQ6EaBomU9z3ye/TwDehZM602FqbuJMB44/uljgyN6K/resC3yaONiikVb57EbLwbKjAACCCCAAAIIIDAxgZqN27DhBrW+HtliHzry4m8UfhRnw4kdoT2PSlUPdHTToGqfPC7YycbD3DxWVcmWeiwQnttzMXAWBBBAAAEEEECgkwKe+Tz7eQa0HtQveCY8dYlqnhE7Wa6Nz52iXt2gcEu4Hrr06Gp911YafPFamxvQB5ZvXGi+RgABBBBAAAEEEMiugE1v5zcVlmylwh/sOEcv8Zp6kFZKbipMTZrvt5sGfdqSh1fp4zMtPK8Z0XiB8JzdnwxqhgACCCCAAAIIbEbAM6BnQc+Ej6zWx8Kp7XyCiZRsqeiBjm8avPz44DUzKrp5wJbpNjiW6U7JRUIxEEAAAQQQQACBdgv4ct9BTePb2XLfQ+N6zUV3FL4YZ8Z2l2Xj83W8B9rHtPQvVfXTpwR7FAq6bM2odc/bpNqpSPYba/E1AggggAACCCCAQFsEwixomXC1Z8OCLv/0UcEenhnTMB66wwHaVkFfGi3JXRnSdeWi5tmgcR8l3uFyteW64CQIIIAAAggggAACWxDwTDhu2dCGJcyrTNN14UPD7GgZsoNbR4Nqv41lCed7Pk7vmtGrI+2mQcY9d/Bi4NQIIIAAAggggEDaBHw8tGdEG+Z75BUn6n9F80N3djx0x9J7YEM3Cv2F2pXHBs8vlvUTG9uiILChG8z3nLbrlvIggAACCCCAAAIdFbCM6F3Otb6KxcVxHX7hnYX/irNkJwrWkR5oN3if1fazBwUzqgXdYAullKo2uoXw3IlLgHMigAACCCCAAALpFvCMWLX5oW0eu7Jnx3+zDOlZMsrV7S97RwL0+3zohvU+r95en7TVBp82OKqqrYHekbK0n5wzIoAAAggggAACCGyrgGdFz4zTLDtOswzpWdIz5bYepxmPb/sQjng5xqtPDF5RKenLq2zKOovOTFnXjNbkGAgggAACCCCAQIYFfGo7m5NjfK5NbWcTT5x8/u2Fr8TZsp3Vbmuvr3ez33Oggk+eHMy1IRuftlcRNqSFKeva2eCcCwEEEEAAAQQQ6FYB7/n17OgZ0rOkZ0rPlu0eytHWAB0P3SgN6l97ytp1pKqaLdXd1jJ06wVDuRFAAAEEEEAAAQQsPVt29AzpWdIzZSeGcrRtCMfixUFpiS3VbasNLrIKf9+mI6napNilthWAKw4BBBBAAAEEEEAgEwLhUI5A1Zm9Ko2N68g3fLOwNM6a7ahgW/Krd6sXFqt43eOqrOvRb8pl7Tdig8B9Xr92VJJzIIAAAggggAACCGRLwJb5rvb2qFSr6t7pI3rW2Qs1FixRzSbsCPN1K2vbluETSyw8y3qfB3v1LzN6tN8w4bmVbcqxEUAAAQQQQACBzAt4R+yQZUqbG3p/66B9j2fNMHO2oeYt74GOu9P/45jgmeWKfr5+TMXwxkEWTGlD83IKBBBAAAEEEEAguwLxAis2tV0tqOq5F32rcFecPVtZ67b0QPv0ItWSLrcO9UrN0jMLprSySTk2AggggAACCCCQDwHPlJ4tbWqOymhBV3jmbEfNWxqgvRJ+4+Djq3XW9LJeMDimcbtzsi0Vawce50AAAQQQQAABBBDorIBnyyHLmDMsa3rm9OzZ6iDdsiEc/QrCcD5nkWZP69U9tuziDmO2/qLtbGlo72wTcnYEEEAAAQQQQACBdgtYxKxVPGQG+vvIiA5YvVRrvAz94erfzS9Ny8LsAYtV8EJXevTPdofkTiPjYaJu2fmaT8MREUAAAQQQQAABBLpBwLPzqGXNaZY5S9P0z55BPYu2quwtCbT9/UHxVJtG5IZXBk+1OZ/ftG69ajbhc0vO1SoYjosAAggggAACCCDQPQJFy5qeOacV9KYbXhI81bOoZ9JW1KAlBz3gbk/8hWB4WB+1ykyrhhNBt+5VQCtgOCYCCCCAAAIIIIBA9wj4DYWeOYslTRvu1Uc9i0aZtPl1aHrXtg/aPtUGb19xbHBMT4/uXLPeVhy0wd1NP1HzLTgiAggggAACCCCAQBcLhCuo2AIrs6epNDqqYy+6s/DtOJs2s1pN7oEOCvccqODKC4JKtaaPjdqI7mjWumYWmWMhgAACCCCAAAIIILCpgHfYevb0DOpZ1DOpZ1Pb29S+3KYG6P5FKvX3F2pj9+lMm3njIF9x0KYWaeo5NqViDwIIIIAAAggggAACkYBnT8+gnkU9k3o29YzaTJ+mpXEf5vw+S/yzD1VvZY7utmlE9hyt2jgUAnQz24tjIYAAAggggAACCGxFoFZTradkU3EUtGxstQ5c81ONvDfshrZl/ZqwNa13+EjvfbZy9s7WuTMq2svCc43w3IQW4hAIIIAAAggggAAC2yTgGdSzqGfSafN0jmdUz6rbdJAtPLgpPdDe++znuGyRZqhH99h8G7uO+l2QLJqyBXq+hQACCCCAAAIIINAqAV9cpcdm5rAR0A9pVAdcvFSDfi7bNeVe6Kb0QHui98KMTtcFNt5kt7D3mfDcquuB4yKAAAIIIIAAAghsRcA7cj2TejYdt4zqWbVZvdBT7oGOe5+vOlqzx0u61yL9jmP0Pm+lSfk2AggggAACCCCAQKsFvBe6YsnZwvSja6ra/5++Ey3xPdVe6Cn3QL+v3vs81KOLp1W005iPfab3udXXA8dHAAEEEEAAAQQQ2IqAZ1LPpp5RK5ZVPTh7dt3K07b67Sn1QHvvsx/ghpdo/mBZ99YCLRizOxwJ0Ft15wEIIIAAAggggAACbRAIe6Ft6LPdsbd89rj2P/O7WuGDoKfSCz2lHugowReCkWk6r7eihWO28gvhuQ1XAqdAAAEEEEAAAQQQmJBA2AttGdVm5FjomdWz9FR7oafQAx3NvHHly9Q3NqZ77H7G3Zl5Y0LtyIMQQAABBBBAAAEE2igQz8hh6fWBSkUHXPg1DUenn9yMHJPuge4Px48UgtKYFk8raQ9m3mjjVcCpEEAAAQQQQAABBCYs4L3Q4Ywcllk1osXeCx1l2QkfYoMHTroHOhz/vFjFy1bpl8WyDl4/pprd4jjlQdkblI4vEEAAAQQQQAABBBBogkBgwzjsZsLi+KjuWv4iPfu9/b6QSRt7oG9ZHITzPl8xqGN6ynrm8JgVgPDchKblEAgggAACCCCAAAKtEPCs6pnVs+vOv9AxHp49007mXOXJPOmeA21NlyX2zEBv8yk3ws/CD/yDAAJTEQintZnKAXguAggggEBTBYIpr1nX1OJwsKkLBAVLv9Wa3m6H+tYTmXYbj7vNQzg8qZ+6pFC9/qXBs0dr+vngmE1OXbSZQNgQQGDyAvYT5D9E4yP2upRf1pN35JkIIIBAkwWKFRs8G3UWNvnIHK5TArWaApuRI+gp6nlnfaPwqzjbbkt5JtUD7ScYCfTmUklFjWncvpz0cbalsDwWgSwKeK9z1SZQX79amr7QAnQ1i7WkTggggEB3CXhfRrlHGrO5GrxjozCpN/q7q845Km21WFJ5pKY3W53PmEy9t6nnuN/WSOlXoXb5UcEuQUV/sCW7p4cXlQ0imczJeQ4CeReIw/PqR6WXf0g65BV5F6H+CCCAQLoEbv0n6U9LpRnb0cGRrpaZfGksu4YrAdoS30OFMT3tDd8rPBxn3IkeddvelFhkPc62lXv1GruLcYZ1gVctABCeJ6rN4xBoEPDeDB+yseYx6ZSPEZ4baPgUAQQQSI2Avyvo/xN2UtMkUy6IZ1fPsJ5li5ZpwwPWM+5ED76N10NQuMWmrvvbKv22p6Knrx9VzcYFbVsIn2jJeBwCGRawO4HDtwUHV0qnXio97cX2C7o+9nkbfygzrETVEEAAgc4J1Cw02zS9WmK3mv35B9Ks7SXfx5YNAQvQtXBKu3H9boe5OuTUJbK1ViY+pd2Ew288zce6dTq8UiY8Z+PyoRadEPDwPDIoDa+VTr/myfDswzn8/7Cbg484cA1wDXANdPQaCH8fd+KPBOdsi4B3APsaJqWynuHZ1k8aZ92JFGDCATo6WCEYK+jcnmggvSV1NgQQ2BYBnzpnZI31PtvQjbM+K+31HOt59te8/oeSDQEEEEAAAQTaKVDzTOvZ1v4S198HntjpJxSgfWC1T1139UuCHWwZxFfYJNT+qjCK0RM7D49CIPcC/lbg8Ap7C9Akzr1Z2uXAenie0E9h7vkAQAABBBBAoLkClmU903q29YzrWdcz70ROMqEHqT6wOujRqTZv3uzxqqpFbh6ciC+PQSAUsOlyNLjcbsCdJl1wi7T93hakved5Yj+BKCKAAAIIIIBAkwU8y3qm9WxbmKHF4eEneDPhhP58v3epqv39QXF0VGfZ4incidrkBuRw2RbwSfjXPi71zZPO/5I0d5coPDMxf7bbndohgAACCKRfwEdQera1iTHO9t5nz7wTKfVWA/RiW3nQAnqw8Fd6tk279Sw7QeBriU/k4DwGgbwL+LCN1Y9Is3e2nmcLz7NsHtHwzu6t/uTlXY76I4AAAggg0HoBz7RhtrWMu/AUy7qWeT37bu3MW/0zfuDjUYdzZVyv6rMVeWyE9YSS+dZOzPcRyLpAGJ4flhbuK11o4XnazHrP81Z/LLMuQ/0QQAABBBBIj4Bn2z7riq4M61Veqjj7bqmEWw3Q/UsL4/2LgrIPsB7xRbsLzPu8JVC+h4ALeHhe+aC080E2bOOLNvbZhnH4bBsM2+D6QAABBBBAIGUClm0943rW9czr2XdrJdxigI7nw9ttmp5rf/j3W1+1hVMI0Fsz5fs5F/DwvOJ+m6LuUOnsz9prTntVG05Vt8WftpyjUX0EEEAAAQQ6JODZNsy4Je3nmdeLEWfgzRVpi3/S76kP36iV9KppFgps/Ib1obEhgMDmBDw8DyyT9jvaFkm5MnoU4XlzWuxHAAEEEEAgJQKWcafZEMtaEA3jiDPw5kq3hQAdFLwL+8oLgsrIaH34hr0DvbkDsR+BvAv4lHQDf5UOfoUtz/2pSIPwnPergvojgAACCHSJQDSMI9DLPftGwzgCn6QjcdtsIL5lcRSWy3/T8234xr5h17Yte5h4FHYikHOBMDwvk557mnTyhyKMwO5K8P1sCCCAAAIIIJBuAcu64TAOG3b5FM++Xto4CyeVfLN/3uOu67FxvXqa3QDF8I0kPvYhEM2LPnCfdPh50onviUTC8LzZ162oIYAAAggggEDqBHwYh2Vez75etjgLJ5VzMwE6Gr5hA6h77I7Ek5h9I4mOfbkX8JsDDWHgAemot0pHv70u4j3PhOfcXx4AIIAAAgh0mcCTs3Gc5Bl4S8M4EgN03GW9fkQHWQ7YZ/24Lc3C7BtddhVQ3FYKhDNr2Izoqyw8H/du6YgL62fzRE14biU9x0YAAQQQQKAlAuFsHJZ5w+xrGdhPEmfijU+YGKDjLuuxQEdPt8VTbGPxlI3l+Dq3Ah6eq2MWnm2FwZd9QDr09KgnOuyOJjzn9rqg4ggggAACmRCoevb1DOy1iTPxxjVLDNBaFE1XN17VsTadh2/Ego3l+DqXAracvcZHpDWPSa/6mPQsW7MoHO/sGvyU5PKaoNIIIIAAApkSKHj29Qwc1qqeiTeu4SZ/8gPrufZ1wK9bFOw42KM/WT/2zGot2rnxk/kagTwJ+IwaY8PS4ErpH/5deuoR9fC8yU9RnlSoKwIIIJBNgcDee/dOkyV2f8uffyDN2t7mCOb9+Gw2dkOtrFMsKBXtVqZA62aM6ilnLy08GmfjhodtOi3d+xbJLheb8HmmDu+taKYl8Kon6sYn8TkCeRPw8DwyKA2vtQVSriE85639qS8CCCCAQD4EPPN69vUMXJ6lw7zWcTZuFEgewmGPGBnTsTaY2rdoEEf4Kf8gkD+BQtl+HtZY77MN3Tjrs7ZE93Psh8LW5PSx0GwIIIAAAgggkDkBnzxDw6M6bnM12yRAx6sPjgY6cnTcnsbsG5uzY38OBHxp7uEVFpjtB+m8m6VdDqyH501+cnKAQRURQAABBBDIh0DRM7Bn4SdXJdyw4hvEgP7+IPy692EdZGNA9rH5n5m+bkMvvsqRQNEGMw0ul8p90vm3SAv3tvFv3vO8wU9NjkCoKgIIIIAAAjkQ8FUJR6r2ZrNl4crf9AyvcpyR4+pvGAWWRmOibczGi6b32p2ETF8XO/ExZwJFW4lo7eNS3zzpwi9Jc3eOwrP9ULEhgAACCCCAQMYFrCO5OsOycKEmmzLAtnpGjqu9QRw4YGE03nkk0KE+NRcbAnkU8GEbq22OZw/NF9wqzZgf3XlNeM7j1UCdEUAAAQTyKuBZ2DOx1z/OyLFFQ4AOCqcuKVR9rIetAf7ssWiqlobvx0/hIwLZFQjD88M2XGNfC8/W8zxtRr3nOZybJrv1pmYIIIAAAgggsIFA0bOwZ2LPxp6Rozuiosc8EZD7+6Op6op/1b6WuPcYsbGePgZkg0PxBQIZFvDwvPJBu1Hw4GjMc8mGcfhsG/Q8Z7jRqRoCCCCAAAIJAp6BPQtXLRP3LNM+/pA4K/vnTwbk+tiOco+eY0sYli04RH3Q/ig2BDIu4OF5xf3S3i+0qepu8MlnmG0j401O9RBAAAEEENiigGfhmZaJ7b4om8DWtnpW9k+fDND+lW02w8AL6/PbMgo6IuHfjAt4D/PAMulpx0inXRFVNpzneZOfjoxDUD0EEEAAAQQQaBTw5bm9R9m61zbcnogI710a9TjbtB3PG7Mua9ue+N6GT+ErBLIj4FPSeXg++GRbnvuTUb0Iz9lpX2qCAAIIIIDAZAUsOxc8E9v/z/djxFnZPw9DcrzG9zXHBDvbg/bzQdO+lKE/gA2BrArE4fm5p0snfzCqpd9xyzzPWW1x6oUAAggggMA2CNhiguGNhJaNPSNbNLaY4Eur2RoR/s+SxRakl6hqC0c8s6eo6etGVStxA6HTsGVUwK9+73k+/ALp6LdGlQzDc4ZeNtb8hXBG249qIYBA9gR8KTdfPpkNgbQIeGeyBeiajYOebtfmM61cj8SZOQzQ9zxe/ztr37Tg7F/4II6wdzotlaAcCDRFwC5uD8orHpCOsuB8hAXocPOe54z94vaVFNkQQACBbhHI2K/gbmGnnFsR8EwcdioHYYC+Pc7MYYCOJ4culPV0H//JhkAWBTwge6/syoek498tvcCGboSb3y6bwd/cD9wlVXrqdeQDAgggkFIBHzY3OmSLV+0izd7eCpnR38kp5adYExDwjrfAMrI/NM7MYYA+dUnY46zRqvav52d6nycAykO6R8DDc3XMVhh8VHr5h6RnvbL+Ozpjv6j9BYL3PK/5u3SF3RjpC8Fk8cVB91x5lBQBBLYmULY591fYHPzH/4sNqbvEflfb77FSmE629ky+j0BbBIrjlhUK49rPzxZn5nJ8A+GVi4IFY4H2rHmC5gbCtrQIJ2mPQMEC5fiwtHa59KqPS08/PhrGEQ7ZyFjPc1ydcq80Z0dbhnxu+PPcHmjOggACCGyjgPdheID27DF9zjY+mYcj0A6BaBy0ioH28qx84dLCcs/O5VPrNxBOm6m9145pbrWmwAZKx3+H21E0zoFAywT8rcExe2twaJX0msukp76oITy37KzpOLD3RtfGrSy8n5SOBqEUCCCwiYC/NV6z31H+u4ohpJvwsCMFAp6JPRtbnpjrWdmKtNyzc/HxJVFYtqUK959mb5nYxWx/dtkQ6H4BD88jg9LwWun0a/IVnru/9agBAgjkQYDeujy0cvfX0bOxZ2TPyl4bz85PjjIq6RkFbiDs/lamBqGAX9kj1us8ZuOez7pR2sUueRZI4eJAAAEEEEAAgckIhMM+i3pG/NzyUnvnxL8YH9XTfayobbwgDBn4p1sFihaeh1bYhWzX83lflBbuRXju1rak3AgggAACCKRAoFCz4UaBZWUvy9Jo5FGhduUFQcVWIHyKr7ZiGwE6ZOCfbhTwGSgG7WbBcp90/pIoPPvNKT6cgw0BBBBAAAEEEJiEgC+oonHLyp6ZLVX40H2p54/azqaw29HGdnh8JkBPQpandF6gaJf02sekvvnShV+yOUV3speIdsEXCc+dbxxKgAACCCCAQLcK+I2ElpHXB9ph3DKzVyOMFmPTtWO5rOn+TWbg6NbWzXe5fdjG6kds6rZdo/A8w0J0PCdyvmWoPQIIIIAAAghMRSCcicMycqWoGRXLzH6sqAe6rF3CGThqzMAxFWCe2xmBMDw/LG3/FAvPNmyj1xYP8WEbLGXdmfbgrAgggAACCGRNwCYiCGfi6LHM7HWzfjsbFF3VHpauw0/Df/kHgS4R8PC88kFpt0Nsto0bokL7bBsM2+iSBqSYCCCAAAIIdIdAULKsbO9u7+7FDXugbX67PRj43B2tRymfFPDwvOJ+ae/DNgzP3DD4pBGfIYAAAggggEATBWzVbj9aGKAtcOxhnXay4R3kaFdhS72A9zAP3Cftf4x02uVRcZnnOfXNRgERQAABBBDoSgHPyJ6VPTN7BcIAPVrTbuENhF1ZJQqdNwHvYR5YJh30SmnxJ6Pa2zAkpqrL24VAfRFAAAEEEGiTgAdmz8qemf2U5bfuGvTZjh09VgdFhQuttKksnAaBbRaIw/PzTpdOfHf0dBuCFC6ass0H4wkIIIAAAggggMAEBDwj++xeQUE7enYub7e3FoyOa0HJonUhYBboCRjykE4I+OAiC8re83z4hdLRb4kKEYZnBh51okU4JwIIIIAAArkR8Iw8bjmkWtUCz87lcknzLX/0hUEkNwxUtKsE7AL1IRorH5KOept0xPn10nvPM+G5q5qSwiKAAAIIINCNAh43PCvb1ufZudxjC7bZDVkVH9dhYYQ4EtrwT1oEPCD7WyYeno9/j/SC0+ol84uYqzUtzUQ5EEAAAQQQyLaAZWS/idBGbFQ8O5cthMy3JK3xUdVsfGl4U2G2Bahdtwh4eK6O2QqDj0onf1h65snhKA4fakR47pZGpJwIIIAAAghkRMBm+6rZyt3F8aLmlW1Q9AI68jLSshmqRsFf1A1La5dLr7KZNp5+bPTWSThkgws2Qy1NVRBAAAEEEOgeAZ/MwLqbF5SLgRbUu52jkR3dUwdKmlEBvzjHhqShVdLrrpD2tYVSuFkwo41NtRBAAAEEEOgeAet3tq2mhWXr0VsY9up1T+EpaYYFPDyPDNo8i/b/6ddKez6L8Jzh5qZqCCCAAAIIdJWAZ2abym5h2bqdF9Toe+6qxstqYQu2NPeI9TrbFDE660Zp5/3tIrUR++HbJVmtNPVCAAEEEEAAga4R8HfEra9vO++BXlDPz4ws7Zrmy15BizbmeWiFXZQWos+x8LxwL3uHxMKzL9nNhgACCCCAAAIIpEAgnIkj7IG2wsQBOgXlogh5FPDwPDgg9c6Mep7n7kR4zuN1QJ0RQAABBBBIu0C903mB9fepzwZDh/3RaS805cueQLFiM23YNHUzFkrn3mwf50bzPnuoZkMAAQQQQAABBFIj4O+K+9BSX0zFlkeuhGmaZbxT0z55KYgP11j9iDRvdwvPn7ce6BmE57y0PfVEAAEEEECg6wQsK3tmtnHQFV9IxfoA2RBor0AYnh+Wtt8vGvNcsjDtNwzS89zeduBsCCCAAAIIILDNAhXvjK7U1/be5mfzBAQmI+DheeWD0i6HSOd/wZbFrIdnZtuYjCbPQQABBBBAAIF2CdTXpQgDdA9DoNvFznk8PA/cL+1ji6OcdV3kwVR1XBcIIIAAAgggkHaB+hBo2Qx2UQ902gtM+bIh4D3MA/dJBxxnKwxeHtWJ8JyNtqUWCCCAAAII5EXAeqF7ik/cRFjwmwrZEGiNgIfnFcukZ54iLf54dI7AFkxh2EZrvDkqAggggAACCDRZwLLyEzcReje0hWg2BFomEPY8L5Oe/3rphH+OThOOIWKqupaZc2AEEEAAAQQQaIGAZWbPzr6Ud08LDs8hEQgnSvQXZz5s40VvkF7y5gilPgAfIQQQQAABBBBAoKsELNb41uNLefuYaDYEmitgA4I8KK98wILz2y1An18/vO2za44NAQQQQAABBBDoSgHPzjYnAhsCzRXwgFyz8c0rH7IhG++xoRun1Y/vL9sIz83F5mgIIIAAAggg0HYBAnTbybN9Qg/P1TFbYdCW537Fh6VDTraeaKtyOOqe8Jztxqd2CCCAAAII5ESAAJ2Thm5HNQt2U+D4sLR2uc208Smbru6YaBhHOGSD8NyOJuAcCCCAAAIIINAGAQJ0G5DzcAqfaWNsSBpaZXM8XyHtawulcLNgHlqeOiKAAAIIIJA/AQJ0/tq86TX28DwyKI3a/2dcK+3+LMJz05E5IAIIIIAAAgikRoAAnZqm6M6CFOwKWm+9zn7T4Fmfl3bez8KzrQ3PAind2Z6UGgEEEEAAAQS2LkCA3roRj9iMgM/hMrRC4Vwu51p4XrCnBWkLz0UmRtyMGLsRQAABBBBAIAsCBOgstGIH6lC0GwYHH7eZxGdJ51h4nrMj4bkDzcApEUAAAQQQQKADAgToDqB3+ymLFZtpw6apm7nQwvNN0ox50RAOD9VsCCCAAAIIIIBA1gUI0Flv4SbXz4dtrH5Emre7dK6F597phOcmE3M4BBBAAAEEEEi5AAE65Q2UpuKF4flhaXu7UfCcG6WSXT1+wyA9z2lqJcqCAAIIIIAAAq0W4HavVgtn5Pgenlc+KO1yiHT+F54Mz8y2kZEGphoIIIAAAgggMGEBAvSEqfL7QA/PA/dL+9jiKGddFzkwVV1+rwdqjgACCCCAQN4FCNB5vwK2Un/vYR64z5blPs5WGLw8ejDheStofBsBBBBAAAEEMi1AgM50806tch6eVyyTnvlqafHHo2MFtmAKwzam5sqzEUAAAQQQQKC7BezNeTYENhUIe56XSc8/QzrhXdH3g8DCM1PVbYrFHgQQQAABBBDIlQABOlfNPbHK+mqCq2zM84sull5ySfScMDwXJvZ8HoUAAggggAACCGRZgACd5dadZN2GV0pHv1M6/Jz6AbznmfA8SU2ehgACCCCAAAJZE2AMdNZadAr18eEZw6ulPV+4YXgW4XkKqjwVAQQQQAABBLImQIDOWotOoT6ek2vjUqU3OojfMEh4ngIoT0UAAQQQQACBTAoQoDPZrFOrlE9Tx4YAAggggAACCCCQLECATnZhLwIIIIAAAggggAACiQIE6EQWdiKAAAIIIIAAAgggkCxAgE52YS8CCCCAAAIIIIAAAokCBOhEFnYigAACCCCAAAIIIJAsQIBOdmEvAggggAACCCCAAAKJAiykksjCTgQQQKDFArZAUeo25nxPXZNQIAQQSKcAATqd7UKpEEAgwwIFe++vaAsXpW2r2dzvTGNprZLWFxJpfNGVtouY8iDQJgECdJugOQ0CCCDgAp6BRtfaqp/2f6E+53onc1GcFQML9dPnSOW+9ObHdl1BtTFrJ2sUt+lk2zTW18tS9L/YcYM1fpPPEUCg7QIE6LaTc0IEEMirgPc8j66RdjhQ2uv59vmwhaIUBKKapcTe6dIfvy8NLLPPZ+a3J7pq4bng7w7YixvvkU/LVrQVYsdH7QVOxUqUgmsmLS6UA4FOCRCgOyXPeRFAIF8CFlJ92MaI9Tzv/QLpsHPSV/01j0qP/E7qs57oqofHnAU1D87rB6TTr5N2e4YZjNfDdCebyq8be+FVs0D/6ROtTBaiSz1WINvPhgACnRMgQHfOnjMjgEAOBXxowLD1Qvs2tr7+tnz0Zcf+9XHPZQtlI+usCDkLzY3oXnXv5e21YSy+ldLwF7LeHh6iPTyzIYBAOgTS8OshHRKUAgEEEGiHgAUiH8rhmwe0cFxr9GXH/o1vHIzL1bGCpODE/gInDqreA93xmz19nLz1jMeva+h4TsFFQhEQMAECNJcBAggg0CGB1IShuCDxxw55pOa0ca+vv9iJk2unCld/sdWp03NeBBBIFuBHM9mFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggkChCgE1nYiQACA35W/wAAQABJREFUCCCAAAIIIIBAsgABOtmFvQgggAACCCCAAAIIJAoQoBNZ2IkAAggggAACCCCAQLIAATrZhb0IIIAAAggggAACCCQKEKATWdiJAAIIIIAAAggggECyAAE62YW9CCCAAAIIIIAAAggk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\"\n />\n </defs>\n </svg>\n );\n};\n", "import React, { Fragment, Suspense, useCallback, useEffect, useState } from 'react';\nimport {\n selectIsLocalVideoEnabled,\n selectLocalPeer,\n selectVideoTrackByID,\n useAVToggle,\n useHMSStore,\n usePreviewJoin,\n} from '@100mslive/react-sdk';\nimport { SettingsIcon } from '@100mslive/react-icons';\nimport {\n Avatar,\n Flex,\n flexCenter,\n Loading,\n styled,\n StyledVideoTile,\n Text,\n textEllipsis,\n useBorderAudioLevel,\n useTheme,\n Video,\n} from '../../../';\nimport { useHMSPrebuiltContext } from '../../AppContext';\nimport IconButton from '../../IconButton';\nimport { AudioVideoToggle } from '../AudioVideoToggle';\nimport TileConnection from '../Connection/TileConnection';\nimport SettingsModal from '../Settings/SettingsModal';\nimport PreviewName from './PreviewName';\nimport { useAuthToken, useUISettings } from '../AppData/useUISettings';\nimport { defaultPreviewPreference, UserPreferencesKeys, useUserPreferences } from '../hooks/useUserPreferences';\nimport { UI_SETTINGS } from '../../common/constants';\n\nconst VirtualBackground = React.lazy(() => import('../../plugins/VirtualBackground/VirtualBackground'));\n\nconst PreviewJoin = ({ onJoin, skipPreview, initialName, asRole }) => {\n const [previewPreference, setPreviewPreference] = useUserPreferences(\n UserPreferencesKeys.PREVIEW,\n defaultPreviewPreference,\n );\n const authToken = useAuthToken();\n const [name, setName] = useState(initialName || previewPreference.name);\n const { isLocalAudioEnabled, isLocalVideoEnabled } = useAVToggle();\n const [previewError, setPreviewError] = useState(false);\n const { endPoints } = useHMSPrebuiltContext();\n const { enableJoin, preview, join } = usePreviewJoin({\n name,\n token: authToken,\n initEndpoint: endPoints?.init,\n initialSettings: {\n isAudioMuted: skipPreview || previewPreference.isAudioMuted,\n isVideoMuted: skipPreview || previewPreference.isVideoMuted,\n speakerAutoSelectionBlacklist: ['Yeti Stereo Microphone'],\n },\n captureNetworkQualityInPreview: true,\n handleError: (_, method) => {\n if (method === 'preview') {\n setPreviewError(true);\n }\n },\n asRole,\n });\n const savePreferenceAndJoin = useCallback(() => {\n setPreviewPreference({\n name,\n isAudioMuted: !isLocalAudioEnabled,\n isVideoMuted: !isLocalVideoEnabled,\n });\n join();\n onJoin && onJoin();\n }, [join, isLocalAudioEnabled, isLocalVideoEnabled, name, setPreviewPreference, onJoin]);\n useEffect(() => {\n if (authToken) {\n if (skipPreview) {\n savePreferenceAndJoin();\n } else {\n preview();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [authToken, skipPreview]);\n return (\n <Container>\n <Text variant=\"h4\" css={{ wordBreak: 'break-word', textAlign: 'center' }}>\n Get Started\n </Text>\n <Text css={{ c: '$textMedEmp', my: '$6', textAlign: 'center' }} variant=\"body1\">\n Setup your audio and video before joining\n </Text>\n <Flex\n align=\"center\"\n justify=\"center\"\n css={{\n '@sm': { width: '100%' },\n flexDirection: 'column',\n }}\n >\n <PreviewTile name={name} error={previewError} />\n <PreviewControls enableJoin={enableJoin} savePreferenceAndJoin={savePreferenceAndJoin} />\n <PreviewName name={name} onChange={setName} enableJoin={enableJoin} onJoin={savePreferenceAndJoin} />\n </Flex>\n </Container>\n );\n};\n\nconst Container = styled('div', {\n width: '100%',\n ...flexCenter,\n flexDirection: 'column',\n px: '$10',\n});\n\nconst PreviewTile = ({ name, error }) => {\n const localPeer = useHMSStore(selectLocalPeer);\n const borderAudioRef = useBorderAudioLevel(localPeer?.audioTrack);\n const isVideoOn = useHMSStore(selectIsLocalVideoEnabled);\n const mirrorLocalVideo = useUISettings(UI_SETTINGS.mirrorLocalVideo);\n const trackSelector = selectVideoTrackByID(localPeer?.videoTrack);\n const track = useHMSStore(trackSelector);\n\n const {\n aspectRatio: { width, height },\n } = useTheme();\n return (\n <StyledVideoTile.Container\n css={{\n bg: '$surfaceDefault',\n aspectRatio: width / height,\n width: 'unset',\n height: 'min(360px, 60vh)',\n mt: '$12',\n '@sm': {\n height: 'unset',\n width: 'min(360px, 100%)',\n maxWidth: '100%',\n },\n }}\n ref={borderAudioRef}\n >\n {localPeer ? (\n <>\n <TileConnection name={name} peerId={localPeer.id} hideLabel={true} />\n <Video\n mirror={track?.facingMode !== 'environment' && mirrorLocalVideo}\n trackId={localPeer.videoTrack}\n data-testid=\"preview_tile\"\n />\n {!isVideoOn ? (\n <StyledVideoTile.AvatarContainer>\n <Avatar name={name} data-testid=\"preview_avatar_tile\" />\n <Text css={{ ...textEllipsis('75%') }} variant=\"body2\">\n {name}\n </Text>\n </StyledVideoTile.AvatarContainer>\n ) : null}\n </>\n ) : !error ? (\n <Loading size={100} />\n ) : null}\n </StyledVideoTile.Container>\n );\n};\n\nconst PreviewControls = () => {\n return (\n <Flex\n justify=\"between\"\n css={{\n width: '100%',\n mt: '$8',\n }}\n >\n <Flex css={{ gap: '$4' }}>\n <AudioVideoToggle compact />\n <Suspense fallback=\"\">\n <VirtualBackground />\n </Suspense>\n </Flex>\n <PreviewSettings />\n </Flex>\n );\n};\n\nconst PreviewSettings = React.memo(() => {\n const [open, setOpen] = useState(false);\n return (\n <Fragment>\n <IconButton data-testid=\"preview_setting_btn\" onClick={() => setOpen(value => !value)}>\n <SettingsIcon />\n </IconButton>\n {open && <SettingsModal open={open} onOpenChange={setOpen} />}\n </Fragment>\n );\n});\n\nexport default PreviewJoin;\n", "import React, { Fragment } from 'react';\nimport {\n selectIsConnectedToRoom,\n selectLocalVideoTrackID,\n selectVideoTrackByID,\n useAVToggle,\n useHMSActions,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { CameraFlipIcon, MicOffIcon, MicOnIcon, VideoOffIcon, VideoOnIcon } from '@100mslive/react-icons';\nimport { ToastManager } from './Toast/ToastManager';\nimport { Tooltip } from '../../Tooltip';\nimport IconButton from '../IconButton';\nimport { isMacOS } from '../common/constants';\n\nexport const AudioVideoToggle = () => {\n const { isLocalVideoEnabled, isLocalAudioEnabled, toggleAudio, toggleVideo } = useAVToggle();\n const actions = useHMSActions();\n const videoTracKId = useHMSStore(selectLocalVideoTrackID);\n const localVideoTrack = useHMSStore(selectVideoTrackByID(videoTracKId));\n const isConnectedToRoom = useHMSStore(selectIsConnectedToRoom);\n\n return (\n <Fragment>\n {toggleAudio ? (\n <Tooltip title={`Turn ${isLocalAudioEnabled ? 'off' : 'on'} audio (${isMacOS ? '\u2318' : 'ctrl'} + d)`}>\n <IconButton active={isLocalAudioEnabled} onClick={toggleAudio} key=\"toggleAudio\" data-testid=\"audio_btn\">\n {!isLocalAudioEnabled ? (\n <MicOffIcon data-testid=\"audio_off_btn\" />\n ) : (\n <MicOnIcon data-testid=\"audio_on_btn\" />\n )}\n </IconButton>\n </Tooltip>\n ) : null}\n {toggleVideo ? (\n <Tooltip title={`Turn ${isLocalVideoEnabled ? 'off' : 'on'} video (${isMacOS ? '\u2318' : 'ctrl'} + e)`}>\n <IconButton key=\"toggleVideo\" active={isLocalVideoEnabled} onClick={toggleVideo} data-testid=\"video_btn\">\n {!isLocalVideoEnabled ? (\n <VideoOffIcon data-testid=\"video_off_btn\" />\n ) : (\n <VideoOnIcon data-testid=\"video_on_btn\" />\n )}\n </IconButton>\n </Tooltip>\n ) : null}\n {localVideoTrack?.facingMode && isConnectedToRoom ? (\n <Tooltip title=\"Switch Camera\" key=\"switchCamera\">\n <IconButton\n onClick={async () => {\n try {\n await actions.switchCamera();\n } catch (e) {\n ToastManager.addToast({\n title: `Error while flipping camera ${e.message || ''}`,\n variant: 'error',\n });\n }\n }}\n >\n <CameraFlipIcon />\n </IconButton>\n </Tooltip>\n ) : null}\n </Fragment>\n );\n};\n", "import React from 'react';\nimport { styled, Text, textEllipsis } from '../../../';\nimport { ConnectionIndicator } from './ConnectionIndicator';\n\nconst TileConnection = ({ name, peerId, hideLabel, width }) => {\n return (\n <Wrapper>\n {!hideLabel ? (\n <Text\n css={{\n c: '$textHighEmp',\n ...textEllipsis(width - 60),\n }}\n variant=\"xs\"\n >\n {name}\n </Text>\n ) : null}\n <ConnectionIndicator isTile peerId={peerId} />\n </Wrapper>\n );\n};\n\nconst Wrapper = styled('div', {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n position: 'absolute',\n bottom: '$2',\n left: '$2',\n backgroundColor: '$backgroundDark',\n borderRadius: '$1',\n maxWidth: '85%',\n zIndex: 1,\n '& p,span': {\n p: '$2 $3',\n },\n});\n\nexport default TileConnection;\n", "import React, { useCallback, useEffect, useState } from 'react';\nimport { useMedia } from 'react-use';\nimport { selectLocalPeerRoleName, useHMSStore } from '@100mslive/react-sdk';\nimport { ChevronLeftIcon, CrossIcon, GridFourIcon, NotificationsIcon, SettingsIcon } from '@100mslive/react-icons';\nimport { Box, config as cssConfig, Dialog, Flex, IconButton, Tabs, Text } from '../../../';\nimport DeviceSettings from './DeviceSettings';\nimport { LayoutSettings } from './LayoutSettings';\nimport { NotificationSettings } from './NotificationSettings';\nimport { useHLSViewerRole } from '../AppData/useUISettings';\nimport { settingContent } from './common.js';\n\nconst settings = [\n {\n tabName: 'devices',\n title: 'Device Settings',\n icon: SettingsIcon,\n content: DeviceSettings,\n },\n {\n tabName: 'notifications',\n title: 'Notifications',\n icon: NotificationsIcon,\n content: NotificationSettings,\n },\n {\n tabName: 'layout',\n title: 'Layout',\n icon: GridFourIcon,\n content: LayoutSettings,\n },\n];\n\nconst SettingsModal = ({ open, onOpenChange, children }) => {\n const mediaQueryLg = cssConfig.media.md;\n const isMobile = useMedia(mediaQueryLg);\n\n const hlsViewerRole = useHLSViewerRole();\n const localPeerRole = useHMSStore(selectLocalPeerRoleName);\n const isHlsViewer = hlsViewerRole === localPeerRole;\n\n const [showSetting, setShowSetting] = useState(() =>\n settings.reduce((obj, { tabName }) => ({ ...obj, [tabName]: true }), {}),\n );\n\n const hideSettingByTabName = useCallback(\n key => hide => setShowSetting(prev => ({ ...prev, [key]: !hide })),\n [setShowSetting],\n );\n\n useEffect(() => {\n if (isHlsViewer) {\n hideSettingByTabName('layout')(true);\n }\n }, [isHlsViewer, hideSettingByTabName]);\n\n const [selection, setSelection] = useState(() => Object.keys(showSetting).find(key => showSetting[key]) ?? '');\n const resetSelection = useCallback(() => {\n setSelection('');\n }, []);\n\n useEffect(() => {\n if (isMobile) {\n setSelection('');\n } else {\n const firstNotHiddenTabName = Object.keys(showSetting).find(key => showSetting[key]) ?? '';\n setSelection(firstNotHiddenTabName);\n }\n }, [isMobile, showSetting]);\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Trigger asChild>{children}</Dialog.Trigger>\n <Dialog.Portal>\n <Dialog.Overlay />\n <Dialog.Content\n css={{\n w: 'min(800px, 90%)',\n height: 'min(656px, 90%)',\n p: 0,\n r: '$4',\n }}\n >\n <Tabs.Root\n value={selection}\n activationMode={isMobile ? 'manual' : 'automatic'}\n onValueChange={setSelection}\n css={{ size: '100%', position: 'relative' }}\n >\n <Tabs.List\n css={{\n w: isMobile ? '100%' : '18.625rem',\n flexDirection: 'column',\n bg: '$backgroundDefault',\n p: '$14 $10',\n borderTopLeftRadius: '$4',\n borderBottomLeftRadius: '$4',\n }}\n >\n <Text variant=\"h5\">Settings </Text>\n <Flex direction=\"column\" css={{ mx: isMobile ? '-$8' : 0, overflowY: 'auto', pt: '$10' }}>\n {settings\n .filter(({ tabName }) => showSetting[tabName])\n .map(({ icon: Icon, tabName, title }) => {\n return (\n <Tabs.Trigger key={tabName} value={tabName} css={{ gap: '$8' }}>\n <Icon />\n {title}\n </Tabs.Trigger>\n );\n })}\n </Flex>\n </Tabs.List>\n {selection && (\n <Flex\n direction=\"column\"\n css={{\n flex: '1 1 0',\n minWidth: 0,\n mr: '$4',\n ...(isMobile\n ? {\n position: 'absolute',\n left: 0,\n right: 0,\n bg: '$surfaceDefault',\n width: '100%',\n height: '100%',\n }\n : {}),\n }}\n >\n {settings\n .filter(({ tabName }) => showSetting[tabName])\n .map(({ content: Content, title, tabName }) => {\n return (\n <Tabs.Content key={tabName} value={tabName} className={settingContent()}>\n <SettingsContentHeader onBack={resetSelection} isMobile={isMobile}>\n {title}\n </SettingsContentHeader>\n <Content setHide={hideSettingByTabName(tabName)} />\n </Tabs.Content>\n );\n })}\n </Flex>\n )}\n </Tabs.Root>\n <Dialog.Close css={{ position: 'absolute', right: '$10', top: '$10' }}>\n <IconButton as=\"div\" data-testid=\"dialog_cross_icon\">\n <CrossIcon />\n </IconButton>\n </Dialog.Close>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n\nconst SettingsContentHeader = ({ children, isMobile, onBack }) => {\n return (\n <Text variant=\"h6\" css={{ mb: '$12', display: 'flex', alignItems: 'center' }}>\n {isMobile && (\n <Box as=\"span\" css={{ bg: '$surfaceLight', mr: '$4', r: '$round', p: '$2' }} onClick={onBack}>\n <ChevronLeftIcon />\n </Box>\n )}\n {children}\n </Text>\n );\n};\n\nexport default SettingsModal;\n", "import React, { Fragment, useEffect, useRef, useState } from 'react';\nimport {\n DeviceType,\n selectIsLocalVideoEnabled,\n selectLocalVideoTrackID,\n selectVideoTrackByID,\n useDevices,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { MicOnIcon, SpeakerIcon, VideoOnIcon } from '@100mslive/react-icons';\nimport { Box, Button, Dropdown, Flex, StyledVideoTile, Text, Video } from '../../../';\nimport { DialogDropdownTrigger } from '../../primitives/DropdownTrigger';\nimport { useUISettings } from '../AppData/useUISettings';\nimport { useDropdownSelection } from '../hooks/useDropdownSelection';\nimport { settingOverflow } from './common.js';\nimport { UI_SETTINGS } from '../../common/constants';\n\n/**\n * wrap the button on click of whom settings should open, this component will take care of the rest,\n * it'll give the user options to change input/output device as well as check speaker.\n * There is also another controlled way of using this by passing in open and onOpenChange.\n */\nconst Settings = ({ setHide }) => {\n const { allDevices, selectedDeviceIDs, updateDevice } = useDevices();\n const { videoInput, audioInput, audioOutput } = allDevices;\n const videoTrackId = useHMSStore(selectLocalVideoTrackID);\n const isVideoOn = useHMSStore(selectIsLocalVideoEnabled);\n // don't show speaker selector where the API is not supported, and use\n // a generic word(\"Audio\") for Mic. In some cases(Chrome Android for e.g.) this changes both mic and speaker keeping them in sync.\n const shouldShowAudioOutput = 'setSinkId' in HTMLMediaElement.prototype;\n const mirrorLocalVideo = useUISettings(UI_SETTINGS.mirrorLocalVideo);\n const trackSelector = selectVideoTrackByID(videoTrackId);\n const track = useHMSStore(trackSelector);\n\n /**\n * Chromium browsers return an audioOutput with empty label when no permissions are given\n */\n const audioOutputFiltered = audioOutput?.filter(item => !!item.label) ?? [];\n\n if (!videoInput?.length && !audioInput?.length && !audioOutputFiltered?.length) {\n setHide(true);\n }\n\n return (\n <Box className={settingOverflow()}>\n {videoInput?.length ? (\n <Fragment>\n {isVideoOn && (\n <StyledVideoTile.Container\n css={{\n w: '90%',\n px: '$10',\n height: '$48',\n bg: 'transparent',\n m: '$10 auto',\n }}\n >\n <Video trackId={videoTrackId} mirror={track?.facingMode !== 'environment' && mirrorLocalVideo} />\n </StyledVideoTile.Container>\n )}\n <DeviceSelector\n title=\"Video\"\n devices={videoInput}\n icon={<VideoOnIcon />}\n selection={selectedDeviceIDs.videoInput}\n onChange={deviceId =>\n updateDevice({\n deviceId,\n deviceType: DeviceType.videoInput,\n })\n }\n />\n </Fragment>\n ) : null}\n {audioInput?.length ? (\n <DeviceSelector\n title={shouldShowAudioOutput ? 'Microphone' : 'Audio'}\n icon={<MicOnIcon />}\n devices={audioInput}\n selection={selectedDeviceIDs.audioInput}\n onChange={deviceId =>\n updateDevice({\n deviceId,\n deviceType: DeviceType.audioInput,\n })\n }\n />\n ) : null}\n {audioOutputFiltered?.length && shouldShowAudioOutput ? (\n <DeviceSelector\n title=\"Speaker\"\n icon={<SpeakerIcon />}\n devices={audioOutput}\n selection={selectedDeviceIDs.audioOutput}\n onChange={deviceId =>\n updateDevice({\n deviceId,\n deviceType: DeviceType.audioOutput,\n })\n }\n >\n <TestAudio id={selectedDeviceIDs.audioOutput} />\n </DeviceSelector>\n ) : null}\n </Box>\n );\n};\n\nconst DeviceSelector = ({ title, devices, selection, onChange, icon, children = null }) => {\n const [open, setOpen] = useState(false);\n const selectionBg = useDropdownSelection();\n const ref = useRef(null);\n\n return (\n <Box css={{ mb: '$10' }}>\n <Text css={{ mb: '$4' }}>{title}</Text>\n <Flex\n align=\"center\"\n css={{\n gap: '$4',\n '@md': {\n flexDirection: children ? 'column' : 'row',\n alignItems: children ? 'start' : 'center',\n },\n }}\n >\n <Box\n css={{\n position: 'relative',\n flex: '1 1 0',\n w: '100%',\n minWidth: 0,\n '@md': {\n mb: children ? '$8' : 0,\n },\n }}\n >\n <Dropdown.Root open={open} onOpenChange={setOpen}>\n <DialogDropdownTrigger\n ref={ref}\n css={{\n ...(children\n ? {\n flex: '1 1 0',\n minWidth: 0,\n }\n : {}),\n }}\n icon={icon}\n title={devices.find(({ deviceId }) => deviceId === selection)?.label || 'Select device from list'}\n open={open}\n />\n <Dropdown.Portal>\n <Dropdown.Content align=\"start\" sideOffset={8} css={{ w: ref.current?.clientWidth, zIndex: 1000 }}>\n {devices.map(device => {\n return (\n <Dropdown.Item\n key={device.label}\n onSelect={() => onChange(device.deviceId)}\n css={{\n px: '$9',\n bg: device.deviceId === selection ? selectionBg : undefined,\n }}\n >\n {device.label}\n </Dropdown.Item>\n );\n })}\n </Dropdown.Content>\n </Dropdown.Portal>\n </Dropdown.Root>\n </Box>\n {children}\n </Flex>\n </Box>\n );\n};\n\nconst TEST_AUDIO_URL = 'https://100ms.live/test-audio.wav';\n\nconst TestAudio = ({ id }) => {\n const audioRef = useRef(null);\n const [playing, setPlaying] = useState(false);\n useEffect(() => {\n if (audioRef.current && id) {\n try {\n if (typeof audioRef.current.setSinkId !== 'undefined') {\n audioRef.current.setSinkId(id);\n }\n } catch (error) {\n console.log(error);\n }\n }\n }, [id]);\n return (\n <>\n <Button\n variant=\"standard\"\n css={{\n flexShrink: 0,\n p: '$6 $9',\n '@md': {\n w: '100%',\n },\n }}\n onClick={() => audioRef.current?.play()}\n disabled={playing}\n >\n <SpeakerIcon />\n Test{' '}\n <Text as=\"span\" css={{ display: 'none', '@md': { display: 'inline' } }}>\n speaker\n </Text>\n </Button>\n <audio ref={audioRef} src={TEST_AUDIO_URL} onEnded={() => setPlaying(false)} onPlay={() => setPlaying(true)} />\n </>\n );\n};\n\nexport default Settings;\n", "import React from 'react';\nimport { ChevronDownIcon, ChevronUpIcon } from '@100mslive/react-icons';\nimport { Dropdown, Flex, Text, textEllipsis } from '../../index';\n\nconst DialogDropdownTrigger = React.forwardRef(({ title, css, open, icon, titleCSS = {} }, ref) => {\n return (\n <Dropdown.Trigger\n asChild\n data-testid={`${title}_selector`}\n css={{\n border: '1px solid $borderLight',\n bg: '$surfaceLight',\n r: '$1',\n p: '$6 $9',\n zIndex: 10,\n ...css,\n }}\n ref={ref}\n >\n <Flex\n css={{\n display: 'flex',\n justifyContent: 'space-between',\n color: '$textHighEmp',\n w: '100%',\n }}\n >\n {icon}\n <Text\n css={{\n color: 'inherit',\n ...textEllipsis('90%'),\n flex: '1 1 0',\n mx: icon ? '$6' : '0',\n ...titleCSS,\n }}\n >\n {title}\n </Text>\n {open ? <ChevronUpIcon /> : <ChevronDownIcon />}\n </Flex>\n </Dropdown.Trigger>\n );\n});\n\nexport { DialogDropdownTrigger };\n", "import { css } from '../../..';\nexport const settingOverflow = css({\n flex: '1 1 0',\n pr: '$12',\n mr: '-$12',\n overflowY: 'auto',\n});\n\nexport const settingContent = css({\n display: 'flex',\n flexDirection: 'column',\n '&[hidden]': {\n display: 'none',\n },\n});\n", "import React, { useCallback } from 'react';\nimport { selectIsLocalScreenShared, selectIsLocalVideoEnabled, useHMSActions, useHMSStore } from '@100mslive/react-sdk';\nimport { Box, Flex, Slider, Text } from '../../../';\nimport SwitchWithLabel from './SwitchWithLabel';\nimport { useSetUiSettings } from '../AppData/useUISettings';\nimport { settingOverflow } from './common.js';\nimport { UI_MODE_ACTIVE_SPEAKER, UI_MODE_GRID, UI_SETTINGS } from '../../common/constants';\n\nexport const LayoutSettings = () => {\n const hmsActions = useHMSActions();\n const isLocalVideoEnabled = useHMSStore(selectIsLocalVideoEnabled);\n const isLocalScreenShared = useHMSStore(selectIsLocalScreenShared);\n const [\n { isAudioOnly, uiViewMode, maxTileCount, mirrorLocalVideo, activeSpeakerSorting, hideLocalVideo },\n setUISettings,\n ] = useSetUiSettings();\n const toggleIsAudioOnly = useCallback(\n async isAudioOnlyModeOn => {\n if (isAudioOnlyModeOn) {\n // turn off video and screen share if user switches to audio only mode\n isLocalVideoEnabled && (await hmsActions.setLocalVideoEnabled(false));\n isLocalScreenShared && (await hmsActions.setScreenShareEnabled(false));\n }\n setUISettings({ [UI_SETTINGS.isAudioOnly]: isAudioOnlyModeOn });\n },\n [hmsActions, isLocalVideoEnabled, isLocalScreenShared, setUISettings],\n );\n\n return (\n <Box className={settingOverflow()}>\n <SwitchWithLabel\n checked={uiViewMode === UI_MODE_ACTIVE_SPEAKER}\n onChange={value => {\n setUISettings({\n [UI_SETTINGS.uiViewMode]: value ? UI_MODE_ACTIVE_SPEAKER : UI_MODE_GRID,\n });\n }}\n id=\"activeSpeakerMode\"\n label=\"Active Speaker Mode\"\n />\n <SwitchWithLabel\n label=\"Active Speaker Sorting\"\n id=\"activeSpeakerSortingMode\"\n checked={activeSpeakerSorting}\n onChange={value => {\n setUISettings({\n [UI_SETTINGS.activeSpeakerSorting]: value,\n });\n }}\n />\n <SwitchWithLabel label=\"Audio Only Mode\" id=\"audioOnlyMode\" checked={isAudioOnly} onChange={toggleIsAudioOnly} />\n <SwitchWithLabel\n label=\"Mirror Local Video\"\n id=\"mirrorMode\"\n checked={mirrorLocalVideo}\n onChange={value => {\n setUISettings({\n [UI_SETTINGS.mirrorLocalVideo]: value,\n });\n }}\n />\n <SwitchWithLabel\n label=\"Hide Local Video\"\n id=\"hideLocalVideo\"\n checked={hideLocalVideo}\n onChange={value => {\n setUISettings({\n [UI_SETTINGS.hideLocalVideo]: value,\n });\n }}\n />\n <Flex align=\"center\" css={{ w: '100%', my: '$2', py: '$8', '@md': { display: 'none' } }}>\n <Text variant=\"md\" css={{ fontWeight: '$semiBold' }}>\n Tiles In View({maxTileCount})\n </Text>\n <Flex justify=\"end\" css={{ flex: '1 1 0' }}>\n <Slider\n step={1}\n value={[maxTileCount]}\n min={1}\n max={49}\n onValueChange={e => {\n setUISettings({ [UI_SETTINGS.maxTileCount]: e[0] });\n }}\n css={{ w: '70%' }}\n />\n </Flex>\n </Flex>\n </Box>\n );\n};\n", "import React from 'react';\nimport { Label } from '../../../Label';\nimport { Flex } from '../../../Layout';\nimport { Switch } from '../../../Switch';\n// import { Flex, Label, Switch } from '../../../';\n\nconst SwitchWithLabel = ({ label, icon, id, onChange, checked, hide = false }) => {\n return (\n <Flex\n align=\"center\"\n css={{\n my: '$2',\n py: '$8',\n w: '100%',\n borderBottom: '1px solid $borderDefault',\n display: hide ? 'none' : 'flex',\n }}\n >\n <Label\n htmlFor={id}\n css={{\n fontSize: '$md',\n fontWeight: '$semiBold',\n color: checked ? '$textHighEmp' : '$textDisabled',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '$8',\n flex: '1 1 0',\n }}\n >\n {icon}\n {label}\n </Label>\n <Switch id={id} checked={checked} onCheckedChange={onChange} />\n </Flex>\n );\n};\n\nexport default SwitchWithLabel;\n", "import React from 'react';\nimport { AlertOctagonIcon, ChatIcon, ExitIcon, HandIcon, PersonIcon } from '@100mslive/react-icons';\nimport { Box } from '../../../';\nimport SwitchWithLabel from './SwitchWithLabel';\nimport { useSetSubscribedNotifications, useSubscribedNotifications } from '../AppData/useUISettings';\nimport { settingOverflow } from './common.js';\nimport { SUBSCRIBED_NOTIFICATIONS } from '../../common/constants';\n\nconst NotificationItem = ({ type, label, icon, checked }) => {\n const [, setSubscribedNotifications] = useSetSubscribedNotifications(type);\n return (\n <SwitchWithLabel\n label={label}\n id={type}\n icon={icon}\n checked={checked}\n onChange={value => {\n setSubscribedNotifications(value);\n }}\n />\n );\n};\n\nexport const NotificationSettings = () => {\n const subscribedNotifications = useSubscribedNotifications();\n\n return (\n <Box className={settingOverflow()}>\n <NotificationItem\n label=\"Peer Joined\"\n type={SUBSCRIBED_NOTIFICATIONS.PEER_JOINED}\n icon={<PersonIcon />}\n checked={subscribedNotifications.PEER_JOINED}\n />\n <NotificationItem\n label=\"Peer Leave\"\n type={SUBSCRIBED_NOTIFICATIONS.PEER_LEFT}\n icon={<ExitIcon />}\n checked={subscribedNotifications.PEER_LEFT}\n />\n <NotificationItem\n label=\"New Message\"\n type={SUBSCRIBED_NOTIFICATIONS.NEW_MESSAGE}\n icon={<ChatIcon />}\n checked={subscribedNotifications.NEW_MESSAGE}\n />\n <NotificationItem\n label=\"Hand Raised\"\n type={SUBSCRIBED_NOTIFICATIONS.METADATA_UPDATED}\n icon={<HandIcon />}\n checked={subscribedNotifications.METADATA_UPDATED}\n />\n <NotificationItem\n label=\"Error\"\n type={SUBSCRIBED_NOTIFICATIONS.ERROR}\n icon={<AlertOctagonIcon />}\n checked={subscribedNotifications.ERROR}\n />\n </Box>\n );\n};\n", "import React from 'react';\nimport { Button, Input, styled } from '../../../';\nimport { isStreamingKit } from '../../common/utils';\n\nconst PreviewName = ({ name, onChange, onJoin, enableJoin }) => {\n const formSubmit = e => {\n e.preventDefault();\n };\n return (\n <Form onSubmit={formSubmit}>\n <Input\n required\n id=\"name\"\n css={{ w: '100%' }}\n value={name}\n onChange={e => onChange(e.target.value)}\n placeholder=\"Enter your name\"\n autoFocus\n autoComplete=\"name\"\n />\n <Button type=\"submit\" disabled={!name || !enableJoin} onClick={onJoin}>\n {isStreamingKit() ? 'Join Studio' : 'Join Room'}\n </Button>\n </Form>\n );\n};\n\nconst Form = styled('form', {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n gap: '$4',\n mt: '$10',\n mb: '$10',\n});\n\nexport default PreviewName;\n", "import { useEffect } from 'react';\nimport { useSearchParam } from 'react-use';\nimport { useSetUiSettings } from '../AppData/useUISettings';\nimport { QUERY_PARAM_SKIP_PREVIEW, QUERY_PARAM_SKIP_PREVIEW_HEADFUL, UI_SETTINGS } from '../../common/constants';\n\nexport const useSkipPreview = () => {\n // way to skip preview for automated tests, beam recording and streaming\n const beamInToken = useSearchParam('token') === 'beam_recording'; // old format to remove\n // use this field to join directly for quick testing while in local\n const directJoinHeadfulFromEnv = process.env.REACT_APP_HEADLESS_JOIN === 'true';\n const directJoinHeadful = useSearchParam(QUERY_PARAM_SKIP_PREVIEW_HEADFUL) === 'true' || directJoinHeadfulFromEnv;\n let skipPreview = useSearchParam(QUERY_PARAM_SKIP_PREVIEW) === 'true';\n skipPreview = skipPreview || beamInToken || directJoinHeadful;\n const [, setIsHeadless] = useSetUiSettings(UI_SETTINGS.isHeadless);\n useEffect(() => {\n !directJoinHeadful && setIsHeadless(skipPreview);\n }, [directJoinHeadful, skipPreview]); //eslint-disable-line\n\n return skipPreview;\n};\n", "import React, { useEffect, useState } from 'react';\nimport { selectIsConnectedToRoom, useHMSStore } from '@100mslive/react-sdk';\nimport { Toast as ToastPrimitive } from '../../../Toast';\nimport { Toast } from './Toast';\nimport { ToastManager } from './ToastManager';\nimport { MAX_TOASTS } from '../../common/constants';\n\nexport const ToastContainer = () => {\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const [toasts, setToast] = useState([]);\n useEffect(() => {\n ToastManager.addListener(setToast);\n return () => {\n ToastManager.removeListener(setToast);\n };\n }, []);\n return (\n <ToastPrimitive.Provider swipeDirection=\"left\" duration={3000}>\n {toasts.slice(0, MAX_TOASTS).map(toast => {\n return <Toast key={toast.id} {...toast} onOpenChange={value => !value && ToastManager.removeToast(toast.id)} />;\n })}\n <ToastPrimitive.Viewport\n css={{\n position: 'absolute',\n ...(!isConnected ? {} : { bottom: '$24' }),\n }}\n />\n </ToastPrimitive.Provider>\n );\n};\n", "import React from 'react';\nimport { Toast as ToastPrimitive } from '../../../Toast';\n\nexport const Toast = ({ title, description, close = true, open, duration, onOpenChange, icon, ...props }) => {\n return (\n <ToastPrimitive.HMSToast\n title={title}\n description={description}\n open={open}\n isClosable={close}\n onOpenChange={onOpenChange}\n duration={!close ? 600000 : duration}\n icon={icon}\n {...props}\n />\n );\n};\n", "import React, { useCallback, useEffect, useRef } from 'react';\nimport { useMedia } from 'react-use';\nimport JSConfetti from 'js-confetti';\nimport { useCustomEvent } from '@100mslive/react-sdk';\n\nconst confettiMsgType = 'CONFETTI';\n\nconst emojiCollections = {\n hearts: ['\u2764\uFE0F', '\uD83D\uDE0D', '\u2665\uFE0F'],\n birthday: ['\uD83C\uDF82', '\uD83C\uDF70', '\uD83C\uDF81'],\n yes: ['\uD83D\uDE4C', '\u2728', '\uD83D\uDD25', '\u2764\uFE0F'],\n no: ['\uD83D\uDE45', '\u26D4', '\u274C'],\n};\n\n/**\n * This component shows a reference implementation of using [custom events](https://www.100ms.live/docs/javascript/v2/features/chat#custom-events).\n * One downside of the current implementation is that it doesn't take into account tab not in focus.\n * In this case multiple messages might accumulate leading to a lot of confetti when user comes back on the tab.\n */\nexport function Confetti() {\n // https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion\n const disableMotion = useMedia('(prefers-reduced-motion: reduce)');\n const jsConfetti = useRef(null);\n\n useEffect(() => {\n jsConfetti.current = new JSConfetti();\n });\n\n const onConfettiMsg = useCallback(\n config => {\n if (!disableMotion && jsConfetti.current) {\n jsConfetti.current.addConfetti(config);\n }\n },\n [disableMotion],\n );\n\n const { sendEvent } = useCustomEvent({\n type: confettiMsgType,\n onEvent: onConfettiMsg,\n });\n\n // e.g. sendConfetti(), sendConfetti({type: \"hearts\"}), sendConfetti({emojis: [\"\uD83D\uDD25\"]})\n const sendConfetti = useCallback(\n ({ type, emojis } = {}) => {\n if (type && emojiCollections[type]) {\n emojis = emojiCollections[type];\n }\n sendEvent({ emojis });\n },\n [sendEvent],\n );\n\n // putting the function to send on window for quick access\n useEffect(() => {\n window.sendConfetti = sendConfetti;\n }, [sendConfetti]);\n\n return <></>;\n}\n", "import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useMedia } from 'react-use';\nimport { selectLocalPeerID, selectPeerNameByID, useHMSStore, useHMSVanillaStore } from '@100mslive/react-sdk';\nimport { Box, Flex } from '../../Layout';\nimport { Text } from '../../Text';\nimport { config as cssConfig, keyframes } from '../../Theme';\n\nlet emojiCount = 1;\n\nconst flyAndFade = keyframes({\n '20%': { opacity: 1 },\n '100%': { bottom: '60%', opacity: 0 },\n});\n\nconst wiggleLeftRight = keyframes({\n '0%': { marginLeft: '-50px' },\n '100%': { marginLeft: '50px' },\n});\n\nconst wiggleRightLeft = keyframes({\n '0%': { marginLeft: '50px' },\n '100%': { marginLeft: '-50px' },\n});\n\nconst getStartingPoints = isMobile => {\n let arr = [];\n const min = 5;\n const max = isMobile ? 30 : 20;\n const inc = isMobile ? 8 : 5;\n for (let i = min; i <= max; i += inc) {\n arr.push(i);\n }\n return arr;\n};\n\nexport function FlyingEmoji() {\n const localPeerId = useHMSStore(selectLocalPeerID);\n const vanillaStore = useHMSVanillaStore();\n const [emojis, setEmojis] = useState([]);\n const isMobile = useMedia(cssConfig.media.md);\n\n const startingPoints = useMemo(() => getStartingPoints(isMobile), [isMobile]);\n\n const showFlyingEmoji = useCallback(\n (emojiId, senderId) => {\n if (!emojiId || !senderId || document.hidden) {\n return;\n }\n const senderPeerName = vanillaStore.getState(selectPeerNameByID(senderId));\n const nameToShow = localPeerId === senderId ? 'You' : senderPeerName;\n const startingPoint = startingPoints[emojiCount % startingPoints.length];\n const id = emojiCount++;\n\n setEmojis(emojis => {\n return [\n ...emojis,\n {\n id: id,\n emojiId: emojiId,\n senderName: nameToShow,\n startingPoint: `${startingPoint}%`,\n wiggleType: Math.random() < 0.5 ? 0 : 1,\n },\n ];\n });\n },\n [localPeerId, vanillaStore, startingPoints],\n );\n\n useEffect(() => {\n window.showFlyingEmoji = showFlyingEmoji;\n }, [showFlyingEmoji]);\n\n return (\n <Box\n css={{\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n overflow: 'hidden',\n pointerEvents: 'none',\n userSelect: 'none',\n zIndex: 999,\n }}\n >\n {emojis.map(emoji => {\n return (\n <Flex\n key={emoji.id}\n css={{\n left: emoji.startingPoint,\n flexDirection: 'column',\n alignItems: 'center',\n position: 'absolute',\n bottom: 0,\n animation: `${flyAndFade()} 5s forwards, ${\n emoji.wiggleType === 0 ? wiggleLeftRight() : wiggleRightLeft()\n } 1s ease-in-out infinite alternate`,\n }}\n onAnimationEnd={() => {\n setEmojis(emojis.filter(item => item.id !== emoji.id));\n }}\n >\n <Box>\n <em-emoji id={emoji.emojiId} size=\"48px\" set=\"apple\"></em-emoji>\n </Box>\n <Box\n css={{\n width: 'fit-content',\n padding: '$2 $4',\n background: '$surfaceLight',\n borderRadius: '$1',\n }}\n >\n <Text\n css={{\n fontSize: '$space$6',\n lineHeight: '$xs',\n color: '$textHighEmp',\n }}\n >\n {emoji.senderName}\n </Text>\n </Box>\n </Flex>\n );\n })}\n </Box>\n );\n}\n", "import React, { useCallback } from 'react';\nimport { useCustomEvent, useHMSActions } from '@100mslive/react-sdk';\nimport { REMOTE_STOP_SCREENSHARE_TYPE } from '../common/constants';\n\nexport function RemoteStopScreenshare() {\n const actions = useHMSActions();\n\n const onRemoteStopScreenshare = useCallback(async () => {\n await actions.setScreenShareEnabled(false);\n }, [actions]);\n\n useCustomEvent({\n type: REMOTE_STOP_SCREENSHARE_TYPE,\n onEvent: onRemoteStopScreenshare,\n });\n\n return <></>;\n}\n", "import { Indicator, Root } from '@radix-ui/react-progress';\nimport { styled } from '../Theme';\n\nconst StyledIndicator = styled(Indicator, { h: '$4', backgroundColor: '$primaryDefault' });\n\nconst StyledRoot = styled(Root, {\n w: '100%',\n h: '$4',\n borderRadius: '$round',\n backgroundColor: '$secondaryDark',\n overflow: 'hidden',\n});\n\nexport const Progress = {\n Root: StyledRoot,\n Content: StyledIndicator,\n};\n"],
|
5
|
+
"mappings": "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",
|
6
|
+
"names": ["React", "useEffect", "useState", "ThemeTypes", "useState", "isBrowser", "updatedTheme", "useEffect", "React", "React", "css", "React", "React", "React", "React", "Root", "React", "React", "Root", "Track", "Range", "Thumb", "_a", "React", "Root", "styled", "React", "React", "styled", "Root", "React", "css", "React", "Root", "Overlay", "Root", "Container", "Root", "Content", "Portal", "Root", "Trigger", "Root", "Trigger", "Content", "Portal", "React", "React", "Root", "Flex", "useCallback", "useRef", "theme", "useCallback", "useRef", "Arrow", "Content", "Root", "Portal", "Trigger", "StyledContent", "Content", "Arrow", "StyledTrigger", "Trigger", "Popover", "Root", "Portal", "React", "Root", "Label", "React", "_a", "_b", "Label", "React", "CrossIcon", "css", "React", "CrossIcon", "React", "StyledTrigger", "StyledContent", "React", "css", "Root", "Select", "StyledTrigger", "StyledContent", "StyledItem", "Select", "StyledTrigger", "StyledContent", "React", "React", "React", "Icon", "React", "Content", "Root", "Trigger", "Root", "Trigger", "Content", "React", "Suspense", "useEffect", "useParams", "selectIsConnectedToRoom", "useHMSActions", "useHMSStore", "React", "useEffect", "useHMSActions", "useHMSStore", "roleName", "useState", "useCallback", "useHMSStore", "useHMSStore", "hmsActions", "useCallback", "useCallback", "selectAppData", "useHMSActions", "useHMSStore", "useHMSVanillaStore", "useHMSStore", "selectAppData", "useHMSActions", "useCallback", "value", "useHMSVanillaStore", "React", "hmsActions", "useHMSActions", "useHMSStore", "useEffect", "config", "useEffect", "useHMSActions", "useEffect", "useHMSStore", "useHMSStore", "useEffect", "hmsActions", "useHMSActions", "useEffect", "React", "useEffect", "useMemo", "useState", "useSearchParam", "useHMSActions", "React", "React", "useRef", "CrossIcon", "Icon", "css", "React", "CrossIcon", "Label", "useRef", "_a", "css", "React", "Label", "value", "data", "React", "hmsActions", "useHMSActions", "useMemo", "useState", "useSearchParam", "useEffect", "error", "Link", "React", "CopyIcon", "React", "CopyIcon", "React", "React", "React", "useEffect", "selectLocalPeerRoleName", "useHMSStore", "useHMSStore", "selectLocalPeerRoleName", "useEffect", "React", "useEffect", "selectAppData", "useHMSActions", "useHMSVanillaStore", "selectAppData", "useHMSVanillaStore", "useHMSActions", "useEffect", "React", "useEffect", "logMessage", "HMSNotificationTypes", "useHMSNotifications", "React", "selectAppData", "selectAppData", "React", "React", "React", "React", "useEffect", "useState", "useState", "useEffect", "data", "React", "useEffect", "useEffect", "useEffect", "HMSNotificationTypes", "useHMSNotifications", "HMSNotificationTypes", "useHMSNotifications", "useEffect", "React", "useEffect", "useState", "HMSNotificationTypes", "useHMSNotifications", "useHMSNotifications", "HMSNotificationTypes", "useState", "useEffect", "React", "React", "useEffect", "useState", "logMessage", "HMSNotificationTypes", "useHMSNotifications", "notificationTypes", "HMSNotificationTypes", "useHMSNotifications", "useState", "useEffect", "logMessage", "React", "React", "useEffect", "useState", "HMSNotificationTypes", "useHMSActions", "useHMSNotifications", "hmsActions", "useHMSActions", "useState", "useHMSNotifications", "HMSNotificationTypes", "useEffect", "React", "useEffect", "HMSNotificationTypes", "useHMSNotifications", "notificationTypes", "React", "useEffect", "useState", "HMSNotificationTypes", "useHMSActions", "useHMSNotifications", "MicOnIcon", "hmsActions", "useHMSActions", "useHMSNotifications", "HMSNotificationTypes", "useState", "useEffect", "React", "MicOnIcon", "useCallback", "useCallback", "useHMSNotifications", "useEffect", "HMSNotificationTypes", "logMessage", "React", "React", "useParams", "ExitIcon", "React", "React", "React", "useMedia", "selectIsConnectedToRoom", "useHMSStore", "useHMSStore", "React", "useMedia", "selectIsConnectedToRoom", "React", "Fragment", "useCallback", "useEffect", "useState", "selectLocalPeerID", "selectPeerCount", "useHMSActions", "useHMSStore", "CrossIcon", "HandRaiseIcon", "PeopleIcon", "React", "selectConnectionQualityByPeerID", "useHMSStore", "PoorConnectivityIcon", "useHMSStore", "selectConnectionQualityByPeerID", "theme", "React", "PoorConnectivityIcon", "React", "useRef", "useState", "useHMSActions", "useHMSStore", "CheckIcon", "ChevronDownIcon", "ChevronUpIcon", "useEffect", "useRef", "useState", "selectAvailableRoleNames", "selectIsConnectedToRoom", "useHMSStore", "useHMSStore", "selectAvailableRoleNames", "React", "useHMSStore", "useState", "hmsActions", "useHMSActions", "useRef", "ChevronUpIcon", "ChevronDownIcon", "Label", "CheckIcon", "React", "useCallback", "useState", "CheckIcon", "ChevronDownIcon", "ChevronUpIcon", "useState", "useCallback", "React", "ChevronUpIcon", "ChevronDownIcon", "Item", "CheckIcon", "useState", "useCallback", "React", "Fragment", "CrossIcon", "useHMSStore", "selectPeerCount", "useEffect", "PeopleIcon", "data", "selectLocalPeerID", "HandRaiseIcon", "useHMSActions", "hmsActions", "React", "Fragment", "useEffect", "useState", "useMedia", "selectAppData", "selectIsConnectedToRoom", "selectPermissions", "useHMSActions", "useHMSStore", "useRecordingStreaming", "RecordIcon", "React", "useRecordingStreaming", "useRecordingStreaming", "React", "React", "useCallback", "useState", "css", "useState", "useCallback", "React", "Label", "React", "useEffect", "useRef", "useState", "selectAppData", "useHMSActions", "useHMSStore", "useRecordingStreaming", "GoLiveIcon", "React", "selectPermissions", "useHMSStore", "CrossIcon", "Icon", "css", "React", "CrossIcon", "Container", "useHMSStore", "selectPermissions", "useRecordingStreaming", "React", "Container", "useState", "hmsActions", "useHMSActions", "useHMSStore", "selectAppData", "AccordionHeader", "error", "GoLiveIcon", "useEffect", "Icon", "Label", "useRef", "React", "useState", "selectLocalPeerID", "useHMSStore", "ChevronDownIcon", "ChevronUpIcon", "useCallback", "useEffect", "useMemo", "selectLocalPeerID", "useHMSStore", "useCallback", "useState", "selectLocalPeerID", "selectPeerMetadata", "useHMSActions", "useHMSStore", "hmsActions", "useHMSActions", "useHMSStore", "selectLocalPeerID", "selectPeerMetadata", "useState", "useCallback", "useHMSStore", "selectLocalPeerID", "useMemo", "useCallback", "useEffect", "useCallback", "useHMSActions", "useHMSStore", "useHMSStore", "hmsActions", "useHMSActions", "useCallback", "useCallback", "useHMSActions", "useHMSStore", "hmsActions", "useState", "useHMSStore", "selectLocalPeerID", "React", "ChevronUpIcon", "ChevronDownIcon", "useRecordingStreaming", "React", "useHMSStore", "selectPermissions", "RecordIcon", "useEffect", "selectAppData", "useState", "hmsActions", "useHMSActions", "Popover", "selectIsConnectedToRoom", "useMedia", "Fragment", "React", "React", "useMedia", "React", "Fragment", "useCallback", "useMemo", "useState", "selectAvailableRoleNames", "selectIsConnectedToRoom", "selectLocalPeerID", "selectLocalPeerRoleName", "useHMSActions", "useHMSStore", "useRecordingStreaming", "useEffect", "useEffect", "useState", "hmsActions", "useHMSActions", "useHMSStore", "selectIsConnectedToRoom", "selectAvailableRoleNames", "selectLocalPeerRoleName", "selectLocalPeerID", "useRecordingStreaming", "useMemo", "useCallback", "data", "React", "Fragment", "React", "Fragment", "useState", "selectIsConnectedToRoom", "selectPermissions", "useHMSActions", "useHMSStore", "VerticalMenuIcon", "useState", "useHMSStore", "selectIsConnectedToRoom", "selectPermissions", "hmsActions", "useHMSActions", "React", "Fragment", "VerticalMenuIcon", "React", "selectIsConnectedToRoom", "useHMSStore", "HandIcon", "useHMSStore", "selectIsConnectedToRoom", "React", "HandIcon", "useMedia", "React", "Header", "React", "useParams", "React", "Header", "ExitIcon", "React", "useParams", "useSearchParam", "React", "selectAppData", "useHMSStore", "React", "useCallback", "useEffect", "useRef", "useState", "HMSNotificationTypes", "selectPeerNameByID", "selectPermissions", "selectSessionStore", "useHMSActions", "useHMSNotifications", "useHMSStore", "ChevronDownIcon", "CrossIcon", "PinIcon", "React", "Fragment", "useCallback", "useEffect", "useRef", "useState", "selectLocalPeerID", "selectLocalPeerRoleName", "selectPeerNameByID", "selectPermissions", "useHMSActions", "useHMSStore", "useCallback", "useHMSActions", "useHMSStore", "useHMSVanillaStore", "hmsActions", "useHMSActions", "useHMSVanillaStore", "useHMSStore", "useCallback", "React", "useHMSStore", "selectPeerNameByID", "selectLocalPeerRoleName", "Link", "Fragment", "useState", "useRef", "useEffect", "hmsActions", "useHMSActions", "selectLocalPeerID", "selectPermissions", "useCallback", "React", "useCallback", "useEffect", "useRef", "useState", "data", "useHMSActions", "EmojiIcon", "useCallback", "selectAppData", "useHMSActions", "useHMSStore", "hmsActions", "useHMSActions", "useHMSStore", "selectAppData", "useCallback", "useEffect", "useRef", "useState", "React", "Popover", "EmojiIcon", "data", "hmsActions", "useHMSActions", "useRef", "useCallback", "useEffect", "React", "useState", "ChevronDownIcon", "ChevronUpIcon", "CrossIcon", "React", "Fragment", "useMemo", "useState", "useMeasure", "FixedSizeList", "useHMSStore", "CheckIcon", "React", "CheckIcon", "useHMSStore", "useMeasure", "useMemo", "FixedSizeList", "useState", "Fragment", "React", "useState", "ChevronUpIcon", "ChevronDownIcon", "CrossIcon", "selectMessagesUnreadCountByPeerID", "selectMessagesUnreadCountByRole", "selectUnreadHMSMessagesCount", "useHMSStore", "useHMSStore", "selectPermissions", "selectSessionStore", "React", "PinIcon", "CrossIcon", "useHMSNotifications", "HMSNotificationTypes", "selectPeerNameByID", "useState", "useRef", "hmsActions", "useHMSActions", "useEffect", "useCallback", "_a", "ChevronDownIcon", "React", "Fragment", "useState", "selectPermissions", "useHMSStore", "useRecordingStreaming", "CrossIcon", "GoLiveIcon", "React", "Fragment", "useCallback", "useEffect", "useState", "selectAppData", "selectRoomID", "useHMSActions", "useHMSStore", "useRecordingStreaming", "EndStreamIcon", "EyeOpenIcon", "GoLiveIcon", "InfoIcon", "PeopleIcon", "WrenchIcon", "data", "React", "EyeOpenIcon", "WrenchIcon", "useState", "useHMSStore", "selectRoomID", "useRecordingStreaming", "Container", "GoLiveIcon", "hmsActions", "useHMSActions", "selectAppData", "useCallback", "error", "Fragment", "InfoIcon", "useEffect", "EndStreamIcon", "PeopleIcon", "React", "React", "useRecordingStreaming", "useHMSStore", "selectPermissions", "useState", "React", "Fragment", "CrossIcon", "GoLiveIcon", "css", "useHMSStore", "selectAppData", "React", "React", "Fragment", "useCallback", "useEffect", "useState", "selectIsLocalVideoEnabled", "selectVideoTrackByID", "useAVToggle", "useHMSStore", "SettingsIcon", "React", "Fragment", "selectIsConnectedToRoom", "useHMSActions", "useHMSStore", "MicOnIcon", "useHMSActions", "useHMSStore", "selectIsConnectedToRoom", "React", "Fragment", "MicOnIcon", "React", "React", "Wrapper", "React", "useCallback", "useEffect", "useState", "useMedia", "selectLocalPeerRoleName", "useHMSStore", "ChevronLeftIcon", "CrossIcon", "SettingsIcon", "React", "Fragment", "useEffect", "useRef", "useState", "selectIsLocalVideoEnabled", "selectLocalVideoTrackID", "selectVideoTrackByID", "useHMSStore", "MicOnIcon", "SpeakerIcon", "VideoOnIcon", "React", "ChevronDownIcon", "ChevronUpIcon", "React", "css", "ChevronUpIcon", "ChevronDownIcon", "useHMSStore", "selectLocalVideoTrackID", "selectIsLocalVideoEnabled", "selectVideoTrackByID", "React", "Fragment", "VideoOnIcon", "MicOnIcon", "SpeakerIcon", "useState", "useRef", "useEffect", "React", "useCallback", "selectIsLocalVideoEnabled", "useHMSActions", "useHMSStore", "React", "React", "Label", "hmsActions", "useHMSActions", "useHMSStore", "selectIsLocalVideoEnabled", "useCallback", "React", "React", "ChatIcon", "ExitIcon", "HandIcon", "PersonIcon", "React", "PersonIcon", "ExitIcon", "ChatIcon", "HandIcon", "SettingsIcon", "useMedia", "useHMSStore", "selectLocalPeerRoleName", "useState", "useCallback", "useEffect", "React", "Icon", "Content", "CrossIcon", "ChevronLeftIcon", "React", "React", "React", "useState", "useAVToggle", "useCallback", "useEffect", "Container", "useHMSStore", "selectIsLocalVideoEnabled", "selectVideoTrackByID", "Fragment", "SettingsIcon", "useEffect", "useSearchParam", "useSearchParam", "useEffect", "useSearchParam", "useParams", "React", "Header", "React", "useEffect", "useState", "selectIsConnectedToRoom", "useHMSStore", "React", "Toast", "React", "useHMSStore", "selectIsConnectedToRoom", "useState", "useEffect", "React", "Toast", "React", "useCallback", "useEffect", "useRef", "useMedia", "useCustomEvent", "config", "React", "useCallback", "useEffect", "useMemo", "useState", "useMedia", "selectLocalPeerID", "selectPeerNameByID", "useHMSStore", "useHMSVanillaStore", "useHMSStore", "selectLocalPeerID", "useHMSVanillaStore", "useState", "useMedia", "useMemo", "useCallback", "selectPeerNameByID", "emojis", "useEffect", "React", "React", "useCallback", "useCustomEvent", "useHMSActions", "useHMSActions", "useCallback", "useCustomEvent", "React", "React", "theme", "useEffect", "useParams", "Suspense", "useHMSStore", "selectIsConnectedToRoom", "hmsActions", "useHMSActions", "Indicator", "Root", "Indicator", "StyledRoot", "Root"]
|
7
|
+
}
|