From c798c79f416b7a00926b36034211e9ac0386c63f Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 20 Nov 2024 17:22:24 +0100 Subject: [PATCH 001/225] Add background Blur --- locales/en/app.json | 6 +++- package.json | 3 ++ src/livekit/useLiveKit.ts | 55 +++++++++++++++++++++++++++++++++- src/room/LobbyView.tsx | 35 ++++++++++++++++++---- src/settings/SettingsModal.tsx | 53 +++++++++++++++++++++++++++----- src/settings/settings.ts | 2 ++ yarn.lock | 22 ++++++++++++-- 7 files changed, 159 insertions(+), 17 deletions(-) diff --git a/locales/en/app.json b/locales/en/app.json index 07dd53e3..07edc5e5 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -150,6 +150,9 @@ "effect_volume_description": "Volume for sound effects such as: joining or leaving a call, and reactions.", "effect_volume_label": "Sound effect volume" }, + "background_blur_header": "Background", + "background_blur_label": "Enable background blurring", + "blur_not_supported_by_browser": "", "developer_settings_label": "Developer Settings", "developer_settings_label_description": "Expose developer settings in the settings window.", "developer_tab_title": "Developer", @@ -172,7 +175,8 @@ "preferences_tab_h4": "Preferences", "preferences_tab_show_hand_raised_timer_description": "Show a timer when a participant raises their hand", "preferences_tab_show_hand_raised_timer_label": "Show hand raise duration", - "speaker_device_selection_label": "Speaker" + "speaker_device_selection_label": "Speaker", + "video_tab_activate_background_blur": "Turn on background blur on your webcam video" }, "star_rating_input_label_one": "{{count}} star", "star_rating_input_label_other": "{{count}} stars", diff --git a/package.json b/package.json index 71e3f9c9..f0705f97 100644 --- a/package.json +++ b/package.json @@ -122,5 +122,8 @@ }, "resolutions": { "strip-ansi": "6.0.1" + }, + "dependencies": { + "@livekit/track-processors": "^0.3.2" } } diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLiveKit.ts index 4645fab7..208ed35d 100644 --- a/src/livekit/useLiveKit.ts +++ b/src/livekit/useLiveKit.ts @@ -9,7 +9,9 @@ import { ConnectionState, E2EEOptions, ExternalE2EEKeyProvider, + LocalTrackPublication, Room, + RoomEvent, RoomOptions, Track, } from "livekit-client"; @@ -17,6 +19,7 @@ import { useEffect, useMemo, useRef } from "react"; import E2EEWorker from "livekit-client/e2ee-worker?worker"; import { logger } from "matrix-js-sdk/src/logger"; import { MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; +import { BackgroundBlur } from "@livekit/track-processors"; import { defaultLiveKitOptions } from "./options"; import { SFUConfig } from "./openIDSFU"; @@ -26,6 +29,7 @@ import { MediaDevices, useMediaDevices, } from "./MediaDevicesContext"; +import { backgroundBlur as backgroundBlurSettings } from "../settings/settings"; import { ECConnectionState, useECConnectionState, @@ -33,6 +37,7 @@ import { import { MatrixKeyProvider } from "../e2ee/matrixKeyProvider"; import { E2eeType } from "../e2ee/e2eeType"; import { EncryptionSystem } from "../e2ee/sharedKeyManagement"; +import { useSetting } from "../settings/settings"; interface UseLivekitResult { livekitRoom?: Room; @@ -78,13 +83,16 @@ export function useLiveKit( const initialMuteStates = useRef(muteStates); const devices = useMediaDevices(); const initialDevices = useRef(devices); - + // eslint-disable-next-line new-cap + const blur = useMemo(() => BackgroundBlur(15), []); const roomOptions = useMemo( (): RoomOptions => ({ ...defaultLiveKitOptions, videoCaptureDefaults: { ...defaultLiveKitOptions.videoCaptureDefaults, deviceId: initialDevices.current.videoInput.selectedId, + // eslint-disable-next-line new-cap + processor: BackgroundBlur(15), }, audioCaptureDefaults: { ...defaultLiveKitOptions.audioCaptureDefaults, @@ -129,6 +137,51 @@ export function useLiveKit( sfuConfig, ); + const [showBackgroundBlur] = useSetting(backgroundBlurSettings); + const videoTrackPromise = useRef< + undefined | Promise + >(undefined); + + useEffect(() => { + if (!room || videoTrackPromise.current) return; + const update = async (): Promise => { + let publishCallback: undefined | ((track: LocalTrackPublication) => void); + videoTrackPromise.current = new Promise< + LocalTrackPublication | undefined + >((resolve) => { + const videoTrack = Array.from( + room.localParticipant.videoTrackPublications.values(), + ).find((v) => v.source === Track.Source.Camera); + if (videoTrack) { + resolve(videoTrack); + } + publishCallback = (videoTrack: LocalTrackPublication): void => { + if (videoTrack.source === Track.Source.Camera) { + resolve(videoTrack); + } + }; + room.on(RoomEvent.LocalTrackPublished, publishCallback); + }); + + const videoTrack = await videoTrackPromise.current; + + if (publishCallback) + room.off(RoomEvent.LocalTrackPublished, publishCallback); + + if (videoTrack !== undefined) { + if (showBackgroundBlur) { + logger.info("Blur: set blur"); + + void videoTrack.track?.setProcessor(blur); + } else { + void videoTrack.track?.stopProcessor(); + } + } + videoTrackPromise.current = undefined; + }; + void update(); + }, [blur, room, showBackgroundBlur]); + useEffect(() => { // Sync the requested mute states with LiveKit's mute states. We do it this // way around rather than using LiveKit as the source of truth, so that the diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index fd3df0c8..db630d09 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ -import { FC, useCallback, useMemo, useState } from "react"; +import { FC, useCallback, useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { MatrixClient } from "matrix-js-sdk/src/matrix"; import { Button } from "@vector-im/compound-web"; @@ -16,6 +16,7 @@ import { usePreviewTracks } from "@livekit/components-react"; import { LocalVideoTrack, Track } from "livekit-client"; import { useObservable } from "observable-hooks"; import { map } from "rxjs"; +import { BackgroundBlur } from "@livekit/track-processors"; import inCallStyles from "./InCallView.module.css"; import styles from "./LobbyView.module.css"; @@ -32,12 +33,14 @@ import { VideoButton, } from "../button/Button"; import { SettingsModal, defaultSettingsTab } from "../settings/SettingsModal"; +import { backgroundBlur as backgroundBlurSettings } from "../settings/settings"; import { useMediaQuery } from "../useMediaQuery"; import { E2eeType } from "../e2ee/e2eeType"; import { Link } from "../button/Link"; import { useMediaDevices } from "../livekit/MediaDevicesContext"; import { useInitial } from "../useInitial"; -import { useSwitchCamera } from "./useSwitchCamera"; +import { useSwitchCamera as useShowSwitchCamera } from "./useSwitchCamera"; +import { useSetting } from "../settings/settings"; interface Props { client: MatrixClient; @@ -108,6 +111,9 @@ export const LobbyView: FC = ({ muteStates.audio.enabled && { deviceId: devices.audioInput.selectedId }, ); + // eslint-disable-next-line new-cap + const blur = useMemo(() => BackgroundBlur(15), []); + const localTrackOptions = useMemo( () => ({ // The only reason we request audio here is to get the audio permission @@ -119,12 +125,15 @@ export const LobbyView: FC = ({ audio: Object.assign({}, initialAudioOptions), video: muteStates.video.enabled && { deviceId: devices.videoInput.selectedId, + // It should be possible to set a processor here: + // processor: blur, + // This causes a crash currently hence we do the effect below... }, }), [ initialAudioOptions, - devices.videoInput.selectedId, muteStates.video.enabled, + devices.videoInput.selectedId, ], ); @@ -146,7 +155,21 @@ export const LobbyView: FC = ({ [tracks], ); - const switchCamera = useSwitchCamera( + const [showBackgroundBlur] = useSetting(backgroundBlurSettings); + + useEffect(() => { + const updateBlur = async (showBlur: boolean): Promise => { + if (showBlur && !videoTrack?.getProcessor()) { + // eslint-disable-next-line new-cap + await videoTrack?.setProcessor(blur); + } else { + await videoTrack?.stopProcessor(); + } + }; + if (videoTrack) void updateBlur(showBackgroundBlur); + }, [videoTrack, showBackgroundBlur, blur]); + + const showSwitchCamera = useShowSwitchCamera( useObservable( (inputs) => inputs.pipe(map(([video]) => video)), [videoTrack], @@ -208,7 +231,9 @@ export const LobbyView: FC = ({ onClick={onVideoPress} disabled={muteStates.video.setEnabled === null} /> - {switchCamera && } + {showSwitchCamera && ( + + )} {!confineToRoom && } diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 9d7eb5a1..81e5f70e 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -5,10 +5,15 @@ SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ -import { ChangeEvent, FC, useCallback, useState } from "react"; +import { ChangeEvent, FC, ReactNode, useCallback, useState } from "react"; import { Trans, useTranslation } from "react-i18next"; import { MatrixClient } from "matrix-js-sdk/src/matrix"; -import { Root as Form, Text } from "@vector-im/compound-web"; +import { + Root as Form, + Separator, + Text, + Tooltip, +} from "@vector-im/compound-web"; import { Modal } from "../Modal"; import styles from "./SettingsModal.module.css"; @@ -26,6 +31,7 @@ import { useSetting, developerSettingsTab as developerSettingsTabSetting, duplicateTiles as duplicateTilesSetting, + backgroundBlur as backgroundBlurSetting, useOptInAnalytics, soundEffectVolumeSetting, } from "./settings"; @@ -70,6 +76,33 @@ export const SettingsModal: FC = ({ ); const [duplicateTiles, setDuplicateTiles] = useSetting(duplicateTilesSetting); + // Generate a `Checkbox` input to turn blur on or off. + const BlurCheckbox: React.FC = (): ReactNode => { + const [blur, setBlur] = useSetting(backgroundBlurSetting); + return ( + <> +

{t("settings.background_blur_header")}

+ + + setBlur(b.target.checked)} + disabled={isFirefox()} + /> + + + + ); + }; + const optInDescription = ( @@ -124,12 +157,16 @@ export const SettingsModal: FC = ({ key: "video", name: t("common.video"), content: ( -
- - + <> +
+ + + + + ), }; diff --git a/src/settings/settings.ts b/src/settings/settings.ts index b2da1674..6f52a525 100644 --- a/src/settings/settings.ts +++ b/src/settings/settings.ts @@ -88,6 +88,8 @@ export const videoInput = new Setting( undefined, ); +export const backgroundBlur = new Setting("background-blur", true); + export const showHandRaisedTimer = new Setting( "hand-raised-show-timer", false, diff --git a/yarn.lock b/yarn.lock index ab40c0c0..1a429fc8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1812,6 +1812,14 @@ dependencies: "@bufbuild/protobuf" "^1.10.0" +"@livekit/track-processors@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@livekit/track-processors/-/track-processors-0.3.2.tgz#eaff6a48b556c25e85f5dd2c4daf6dcf1bc3b143" + integrity sha512-4JUCzb7yIKoVsTo8J6FTzLZJHcI6DihfX/pGRDg0SOGaxprcDPrt8jaDBBTsnGBSXHeMxl2ugN+xQjdCWzLKEA== + dependencies: + "@mediapipe/holistic" "0.5.1675471629" + "@mediapipe/tasks-vision" "0.10.9" + "@matrix-org/matrix-sdk-crypto-wasm@^9.0.0": version "9.1.0" resolved "https://registry.yarnpkg.com/@matrix-org/matrix-sdk-crypto-wasm/-/matrix-sdk-crypto-wasm-9.1.0.tgz#f889653eb4fafaad2a963654d586bd34de62acd5" @@ -1822,6 +1830,16 @@ resolved "https://registry.yarnpkg.com/@matrix-org/olm/-/olm-3.2.15.tgz#55f3c1b70a21bbee3f9195cecd6846b1083451ec" integrity sha512-S7lOrndAK9/8qOtaTq/WhttJC/o4GAzdfK0MUPpo8ApzsJEC0QjtwrkC3KBXdFP1cD1MXi/mlKR7aaoVMKgs6Q== +"@mediapipe/holistic@0.5.1675471629": + version "0.5.1675471629" + resolved "https://registry.yarnpkg.com/@mediapipe/holistic/-/holistic-0.5.1675471629.tgz#f1127d43161ff27e8889d5d39aaea164f9730980" + integrity sha512-qY+cxtDeSOvVtevrLgnodiwXYaAtPi7dHZtNv/bUCGEjFicAOYtMmrZSqMmbPkTB2+4jLnPF1vgshkAqQRSYAw== + +"@mediapipe/tasks-vision@0.10.9": + version "0.10.9" + resolved "https://registry.yarnpkg.com/@mediapipe/tasks-vision/-/tasks-vision-0.10.9.tgz#fbd669f50ac2e888b2c64c9c9863927c111da02f" + integrity sha512-/gFguyJm1ng4Qr7VVH2vKO+zZcQd8wc3YafUfvBuYFX0Y5+CvrV+VNPEVkl5W/gUZF5KNKNZAiaHPULGPCIjyQ== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -6250,14 +6268,14 @@ matrix-js-sdk@matrix-org/matrix-js-sdk#develop: jwt-decode "^4.0.0" loglevel "^1.7.1" matrix-events-sdk "0.0.1" - matrix-widget-api "^1.10.0" + matrix-widget-api "^1.8.2" oidc-client-ts "^3.0.1" p-retry "4" sdp-transform "^2.14.1" unhomoglyph "^1.0.6" uuid "11" -matrix-widget-api@^1.10.0: +matrix-widget-api@^1.10.0, matrix-widget-api@^1.8.2: version "1.10.0" resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.10.0.tgz#d31ea073a5871a1fb1a511ef900b0c125a37bf55" integrity sha512-rkAJ29briYV7TJnfBVLVSKtpeBrBju15JZFSDP6wj8YdbCu1bdmlplJayQ+vYaw1x4fzI49Q+Nz3E85s46sRDw== From 140fe484d79bfdedd9f0068d65866a7561a0b4e4 Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 20 Nov 2024 17:31:40 +0100 Subject: [PATCH 002/225] make compatible with unsopported browsers --- src/livekit/useLiveKit.ts | 18 ++++++++++++++---- src/room/LobbyView.tsx | 13 ++++++++++++- src/settings/SettingsModal.tsx | 17 +++++++++++++++-- 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLiveKit.ts index 208ed35d..f99fbabd 100644 --- a/src/livekit/useLiveKit.ts +++ b/src/livekit/useLiveKit.ts @@ -83,8 +83,16 @@ export function useLiveKit( const initialMuteStates = useRef(muteStates); const devices = useMediaDevices(); const initialDevices = useRef(devices); - // eslint-disable-next-line new-cap - const blur = useMemo(() => BackgroundBlur(15), []); + const blur = useMemo(() => { + let b = undefined; + try { + // eslint-disable-next-line new-cap + b = BackgroundBlur(15); + } catch (e) { + logger.error("disable background blur", e); + } + return b; + }, []); const roomOptions = useMemo( (): RoomOptions => ({ ...defaultLiveKitOptions, @@ -92,7 +100,7 @@ export function useLiveKit( ...defaultLiveKitOptions.videoCaptureDefaults, deviceId: initialDevices.current.videoInput.selectedId, // eslint-disable-next-line new-cap - processor: BackgroundBlur(15), + processor: blur, }, audioCaptureDefaults: { ...defaultLiveKitOptions.audioCaptureDefaults, @@ -103,7 +111,7 @@ export function useLiveKit( }, e2ee: e2eeOptions, }), - [e2eeOptions], + [blur, e2eeOptions], ); // Store if audio/video are currently updating. If to prohibit unnecessary calls @@ -143,6 +151,8 @@ export function useLiveKit( >(undefined); useEffect(() => { + // Fon't even try if we cannot blur on this platform + if (!blur) return; if (!room || videoTrackPromise.current) return; const update = async (): Promise => { let publishCallback: undefined | ((track: LocalTrackPublication) => void); diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index db630d09..6b5db196 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -112,7 +112,16 @@ export const LobbyView: FC = ({ ); // eslint-disable-next-line new-cap - const blur = useMemo(() => BackgroundBlur(15), []); + const blur = useMemo(() => { + let b = undefined; + try { + // eslint-disable-next-line new-cap + b = BackgroundBlur(15); + } catch (e) { + logger.error("disable background blur", e); + } + return b; + }, []); const localTrackOptions = useMemo( () => ({ @@ -158,6 +167,8 @@ export const LobbyView: FC = ({ const [showBackgroundBlur] = useSetting(backgroundBlurSettings); useEffect(() => { + // Fon't even try if we cannot blur on this platform + if (!blur) return; const updateBlur = async (showBlur: boolean): Promise => { if (showBlur && !videoTrack?.getProcessor()) { // eslint-disable-next-line new-cap diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 81e5f70e..2fd19c38 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -14,6 +14,8 @@ import { Text, Tooltip, } from "@vector-im/compound-web"; +import { BackgroundBlur } from "@livekit/track-processors"; +import { logger } from "matrix-js-sdk/src/logger"; import { Modal } from "../Modal"; import styles from "./SettingsModal.module.css"; @@ -79,7 +81,18 @@ export const SettingsModal: FC = ({ // Generate a `Checkbox` input to turn blur on or off. const BlurCheckbox: React.FC = (): ReactNode => { const [blur, setBlur] = useSetting(backgroundBlurSetting); - return ( + let canBlur = true; + try { + // eslint-disable-next-line new-cap + BackgroundBlur(15); + } catch (e) { + logger.debug( + "Cannot blur, so we do not show the option in settings. error: ", + e, + ); + canBlur = false; + } + return canBlur ? ( <>

{t("settings.background_blur_header")}

@@ -100,7 +113,7 @@ export const SettingsModal: FC = ({ - ); + ) : null; }; const optInDescription = ( From 70ff435a8cedb650c5fc14d5d961cebc9ebd214a Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 21 Nov 2024 17:28:11 +0100 Subject: [PATCH 003/225] add types --- package.json | 2 ++ yarn.lock | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/package.json b/package.json index f0705f97..6e69dd28 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,8 @@ "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^14.5.1", "@types/content-type": "^1.1.5", + "@types/dom-mediacapture-transform": "^0.1.10", + "@types/dom-webcodecs": "^0.1.13", "@types/grecaptcha": "^3.0.9", "@types/jsdom": "^21.1.7", "@types/lodash-es": "^4.17.12", diff --git a/yarn.lock b/yarn.lock index 1a429fc8..9b4f1335 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2999,6 +2999,18 @@ resolved "https://registry.yarnpkg.com/@types/content-type/-/content-type-1.1.8.tgz#319644d07ee6b4bfc734483008393b89b99f0219" integrity sha512-1tBhmVUeso3+ahfyaKluXe38p+94lovUZdoVfQ3OnJo9uJC42JT7CBoN3k9HYhAae+GwiBYmHu+N9FZhOG+2Pg== +"@types/dom-mediacapture-transform@^0.1.10": + version "0.1.10" + resolved "https://registry.yarnpkg.com/@types/dom-mediacapture-transform/-/dom-mediacapture-transform-0.1.10.tgz#93e2c04284c95dd2faa2992216417599ee9d27a6" + integrity sha512-zUxMN2iShu7p3Fz5sqfvLp93qW/3sLs+RwXWWOkMb969hsuoVqUUokqrENjXqTMNmEEcVXKoHuMMbIGcWyrVVA== + dependencies: + "@types/dom-webcodecs" "*" + +"@types/dom-webcodecs@*", "@types/dom-webcodecs@^0.1.13": + version "0.1.13" + resolved "https://registry.yarnpkg.com/@types/dom-webcodecs/-/dom-webcodecs-0.1.13.tgz#d8be5da4f01b20721307b08ad2cca903ccf4f47f" + integrity sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ== + "@types/estree@1.0.6", "@types/estree@^1.0.0": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" From d23beefb6091ee1bc96c3776313ea7196449002f Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 27 Nov 2024 18:18:07 +0100 Subject: [PATCH 004/225] remove unused dependencies. --- package.json | 2 -- yarn.lock | 16 ++-------------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 6e69dd28..f0705f97 100644 --- a/package.json +++ b/package.json @@ -50,8 +50,6 @@ "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^14.5.1", "@types/content-type": "^1.1.5", - "@types/dom-mediacapture-transform": "^0.1.10", - "@types/dom-webcodecs": "^0.1.13", "@types/grecaptcha": "^3.0.9", "@types/jsdom": "^21.1.7", "@types/lodash-es": "^4.17.12", diff --git a/yarn.lock b/yarn.lock index 9b4f1335..4b5325c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2999,18 +2999,6 @@ resolved "https://registry.yarnpkg.com/@types/content-type/-/content-type-1.1.8.tgz#319644d07ee6b4bfc734483008393b89b99f0219" integrity sha512-1tBhmVUeso3+ahfyaKluXe38p+94lovUZdoVfQ3OnJo9uJC42JT7CBoN3k9HYhAae+GwiBYmHu+N9FZhOG+2Pg== -"@types/dom-mediacapture-transform@^0.1.10": - version "0.1.10" - resolved "https://registry.yarnpkg.com/@types/dom-mediacapture-transform/-/dom-mediacapture-transform-0.1.10.tgz#93e2c04284c95dd2faa2992216417599ee9d27a6" - integrity sha512-zUxMN2iShu7p3Fz5sqfvLp93qW/3sLs+RwXWWOkMb969hsuoVqUUokqrENjXqTMNmEEcVXKoHuMMbIGcWyrVVA== - dependencies: - "@types/dom-webcodecs" "*" - -"@types/dom-webcodecs@*", "@types/dom-webcodecs@^0.1.13": - version "0.1.13" - resolved "https://registry.yarnpkg.com/@types/dom-webcodecs/-/dom-webcodecs-0.1.13.tgz#d8be5da4f01b20721307b08ad2cca903ccf4f47f" - integrity sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ== - "@types/estree@1.0.6", "@types/estree@^1.0.0": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" @@ -6280,14 +6268,14 @@ matrix-js-sdk@matrix-org/matrix-js-sdk#develop: jwt-decode "^4.0.0" loglevel "^1.7.1" matrix-events-sdk "0.0.1" - matrix-widget-api "^1.8.2" + matrix-widget-api "^1.10.0" oidc-client-ts "^3.0.1" p-retry "4" sdp-transform "^2.14.1" unhomoglyph "^1.0.6" uuid "11" -matrix-widget-api@^1.10.0, matrix-widget-api@^1.8.2: +matrix-widget-api@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.10.0.tgz#d31ea073a5871a1fb1a511ef900b0c125a37bf55" integrity sha512-rkAJ29briYV7TJnfBVLVSKtpeBrBju15JZFSDP6wj8YdbCu1bdmlplJayQ+vYaw1x4fzI49Q+Nz3E85s46sRDw== From 95bc7db28ac38f59a3892e4a013fae4b351994a3 Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 27 Nov 2024 18:18:50 +0100 Subject: [PATCH 005/225] update blur checkbox (disabled state) --- locales/en/app.json | 2 +- src/settings/SettingsModal.tsx | 30 ++++++++++++++---------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/locales/en/app.json b/locales/en/app.json index 07edc5e5..3c2647bd 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -152,7 +152,7 @@ }, "background_blur_header": "Background", "background_blur_label": "Enable background blurring", - "blur_not_supported_by_browser": "", + "blur_not_supported_by_browser": "(Background blur is not supported by this browser.)", "developer_settings_label": "Developer Settings", "developer_settings_label_description": "Expose developer settings in the settings window.", "developer_tab_title": "Developer", diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 2fd19c38..41f66e8d 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -91,29 +91,27 @@ export const SettingsModal: FC = ({ e, ); canBlur = false; + setBlur(false); } - return canBlur ? ( + return ( <>

{t("settings.background_blur_header")}

+ - - setBlur(b.target.checked)} - disabled={isFirefox()} - /> - + type="checkbox" + checked={blur} + onChange={(b): void => setBlur(b.target.checked)} + disabled={!canBlur} + /> - ) : null; + ); }; const optInDescription = ( From 0be312a5e3f421277480f561fe7b6cc506c1015d Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 27 Nov 2024 18:25:37 +0100 Subject: [PATCH 006/225] i18n --- locales/en/app.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/locales/en/app.json b/locales/en/app.json index 3c2647bd..2b610560 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -175,8 +175,7 @@ "preferences_tab_h4": "Preferences", "preferences_tab_show_hand_raised_timer_description": "Show a timer when a participant raises their hand", "preferences_tab_show_hand_raised_timer_label": "Show hand raise duration", - "speaker_device_selection_label": "Speaker", - "video_tab_activate_background_blur": "Turn on background blur on your webcam video" + "speaker_device_selection_label": "Speaker" }, "star_rating_input_label_one": "{{count}} star", "star_rating_input_label_other": "{{count}} stars", From aade8f94a651c34cead3105bc16f9bfd816a9163 Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 27 Nov 2024 18:34:33 +0100 Subject: [PATCH 007/225] eslint + prettier --- src/settings/SettingsModal.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 41f66e8d..84583b8f 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -8,12 +8,7 @@ Please see LICENSE in the repository root for full details. import { ChangeEvent, FC, ReactNode, useCallback, useState } from "react"; import { Trans, useTranslation } from "react-i18next"; import { MatrixClient } from "matrix-js-sdk/src/matrix"; -import { - Root as Form, - Separator, - Text, - Tooltip, -} from "@vector-im/compound-web"; +import { Root as Form, Separator, Text } from "@vector-im/compound-web"; import { BackgroundBlur } from "@livekit/track-processors"; import { logger } from "matrix-js-sdk/src/logger"; From ae71c6e679463ec5c8eb5efdf50987e30fc5301d Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 27 Nov 2024 20:05:35 +0100 Subject: [PATCH 008/225] add @types/dom-mediacapture-transform for the remaining type errors --- package.json | 3 ++- yarn.lock | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index f0705f97..ede9bab3 100644 --- a/package.json +++ b/package.json @@ -124,6 +124,7 @@ "strip-ansi": "6.0.1" }, "dependencies": { - "@livekit/track-processors": "^0.3.2" + "@livekit/track-processors": "^0.3.2", + "@types/dom-mediacapture-transform": "^0.1.10" } } diff --git a/yarn.lock b/yarn.lock index 4b5325c3..1a456433 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2999,6 +2999,18 @@ resolved "https://registry.yarnpkg.com/@types/content-type/-/content-type-1.1.8.tgz#319644d07ee6b4bfc734483008393b89b99f0219" integrity sha512-1tBhmVUeso3+ahfyaKluXe38p+94lovUZdoVfQ3OnJo9uJC42JT7CBoN3k9HYhAae+GwiBYmHu+N9FZhOG+2Pg== +"@types/dom-mediacapture-transform@^0.1.10": + version "0.1.10" + resolved "https://registry.yarnpkg.com/@types/dom-mediacapture-transform/-/dom-mediacapture-transform-0.1.10.tgz#93e2c04284c95dd2faa2992216417599ee9d27a6" + integrity sha512-zUxMN2iShu7p3Fz5sqfvLp93qW/3sLs+RwXWWOkMb969hsuoVqUUokqrENjXqTMNmEEcVXKoHuMMbIGcWyrVVA== + dependencies: + "@types/dom-webcodecs" "*" + +"@types/dom-webcodecs@*": + version "0.1.13" + resolved "https://registry.yarnpkg.com/@types/dom-webcodecs/-/dom-webcodecs-0.1.13.tgz#d8be5da4f01b20721307b08ad2cca903ccf4f47f" + integrity sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ== + "@types/estree@1.0.6", "@types/estree@^1.0.0": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" From a6745ef34a6380cf9515dd8c46b1b9e3f08b08c6 Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 27 Nov 2024 20:15:37 +0100 Subject: [PATCH 009/225] properly add @livekit/track-processors --- knip.ts | 4 ++++ package.json | 6 ++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/knip.ts b/knip.ts index becafc2e..5ffe03c4 100644 --- a/knip.ts +++ b/knip.ts @@ -24,6 +24,10 @@ export default { // then Knip will flag it as a false positive // https://github.com/webpro-nl/knip/issues/766 "@vector-im/compound-web", + // We need this so the eslint is happy with @livekit/track-processors. + // This might be a bug in the livekit repo but for now we fix it on the + // element call side. + "@types/dom-mediacapture-transform", "matrix-widget-api", ], ignoreExportsUsedInFile: true, diff --git a/package.json b/package.json index ede9bab3..36e03468 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "@formatjs/intl-segmenter": "^11.7.3", "@livekit/components-core": "^0.11.0", "@livekit/components-react": "^2.0.0", + "@livekit/track-processors": "^0.3.2", "@opentelemetry/api": "^1.4.0", "@opentelemetry/core": "^1.25.1", "@opentelemetry/exporter-trace-otlp-http": "^0.55.0", @@ -50,6 +51,7 @@ "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^14.5.1", "@types/content-type": "^1.1.5", + "@types/dom-mediacapture-transform": "^0.1.10", "@types/grecaptcha": "^3.0.9", "@types/jsdom": "^21.1.7", "@types/lodash-es": "^4.17.12", @@ -122,9 +124,5 @@ }, "resolutions": { "strip-ansi": "6.0.1" - }, - "dependencies": { - "@livekit/track-processors": "^0.3.2", - "@types/dom-mediacapture-transform": "^0.1.10" } } From c2b651802745bb237f251b1a5cb61c94b6d469cc Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 27 Nov 2024 20:39:45 +0100 Subject: [PATCH 010/225] dont update if processor already set --- src/livekit/useLiveKit.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLiveKit.ts index f99fbabd..6e563f1c 100644 --- a/src/livekit/useLiveKit.ts +++ b/src/livekit/useLiveKit.ts @@ -151,7 +151,7 @@ export function useLiveKit( >(undefined); useEffect(() => { - // Fon't even try if we cannot blur on this platform + // Don't even try if we cannot blur on this platform if (!blur) return; if (!room || videoTrackPromise.current) return; const update = async (): Promise => { @@ -178,7 +178,10 @@ export function useLiveKit( if (publishCallback) room.off(RoomEvent.LocalTrackPublished, publishCallback); - if (videoTrack !== undefined) { + if ( + videoTrack !== undefined && + videoTrack.track?.getProcessor() === undefined + ) { if (showBackgroundBlur) { logger.info("Blur: set blur"); From 7d8e9a79695a876d7549d36b47b6e1490584c891 Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 27 Nov 2024 21:00:09 +0100 Subject: [PATCH 011/225] fixes and gpu based blurring --- src/livekit/useLiveKit.ts | 16 +++++++++------- src/room/LobbyView.tsx | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLiveKit.ts index 6e563f1c..d33077d2 100644 --- a/src/livekit/useLiveKit.ts +++ b/src/livekit/useLiveKit.ts @@ -87,7 +87,7 @@ export function useLiveKit( let b = undefined; try { // eslint-disable-next-line new-cap - b = BackgroundBlur(15); + b = BackgroundBlur(15, { delegate: "GPU" }); } catch (e) { logger.error("disable background blur", e); } @@ -178,15 +178,17 @@ export function useLiveKit( if (publishCallback) room.off(RoomEvent.LocalTrackPublished, publishCallback); - if ( - videoTrack !== undefined && - videoTrack.track?.getProcessor() === undefined - ) { - if (showBackgroundBlur) { + if (videoTrack !== undefined) { + if ( + showBackgroundBlur && + videoTrack.track?.getProcessor()?.name !== "background-blur" + ) { logger.info("Blur: set blur"); void videoTrack.track?.setProcessor(blur); - } else { + } else if ( + videoTrack.track?.getProcessor()?.name === "background-blur" + ) { void videoTrack.track?.stopProcessor(); } } diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index 6b5db196..486f872f 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -116,7 +116,7 @@ export const LobbyView: FC = ({ let b = undefined; try { // eslint-disable-next-line new-cap - b = BackgroundBlur(15); + b = BackgroundBlur(15, { delegate: "GPU" }); } catch (e) { logger.error("disable background blur", e); } From 9eae9190503e5171eb2c34db2aefacd7a4b5e284 Mon Sep 17 00:00:00 2001 From: Timo Date: Fri, 29 Nov 2024 18:18:40 +0100 Subject: [PATCH 012/225] make default false --- src/settings/settings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/settings.ts b/src/settings/settings.ts index 6f52a525..27d28011 100644 --- a/src/settings/settings.ts +++ b/src/settings/settings.ts @@ -88,7 +88,7 @@ export const videoInput = new Setting( undefined, ); -export const backgroundBlur = new Setting("background-blur", true); +export const backgroundBlur = new Setting("background-blur", false); export const showHandRaisedTimer = new Setting( "hand-raised-show-timer", From d179db1e8f9865617bedafef11cab44772162d32 Mon Sep 17 00:00:00 2001 From: Timo Date: Mon, 2 Dec 2024 11:55:22 +0100 Subject: [PATCH 013/225] more detailed error message --- src/room/LobbyView.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index 486f872f..4f9d3a85 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -118,7 +118,10 @@ export const LobbyView: FC = ({ // eslint-disable-next-line new-cap b = BackgroundBlur(15, { delegate: "GPU" }); } catch (e) { - logger.error("disable background blur", e); + logger.error( + "disable background blur because its not supported by the platform.", + e, + ); } return b; }, []); From 95c3ca88592c61e2d70a383d607cec4de0d9e47d Mon Sep 17 00:00:00 2001 From: Timo Date: Mon, 2 Dec 2024 17:35:43 +0100 Subject: [PATCH 014/225] review --- src/livekit/useLiveKit.ts | 6 ++---- src/room/LobbyView.tsx | 10 ++++------ 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLiveKit.ts index d33077d2..85f3178b 100644 --- a/src/livekit/useLiveKit.ts +++ b/src/livekit/useLiveKit.ts @@ -19,7 +19,7 @@ import { useEffect, useMemo, useRef } from "react"; import E2EEWorker from "livekit-client/e2ee-worker?worker"; import { logger } from "matrix-js-sdk/src/logger"; import { MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; -import { BackgroundBlur } from "@livekit/track-processors"; +import { BackgroundBlur as backgroundBlur } from "@livekit/track-processors"; import { defaultLiveKitOptions } from "./options"; import { SFUConfig } from "./openIDSFU"; @@ -86,8 +86,7 @@ export function useLiveKit( const blur = useMemo(() => { let b = undefined; try { - // eslint-disable-next-line new-cap - b = BackgroundBlur(15, { delegate: "GPU" }); + b = backgroundBlur(15, { delegate: "GPU" }); } catch (e) { logger.error("disable background blur", e); } @@ -99,7 +98,6 @@ export function useLiveKit( videoCaptureDefaults: { ...defaultLiveKitOptions.videoCaptureDefaults, deviceId: initialDevices.current.videoInput.selectedId, - // eslint-disable-next-line new-cap processor: blur, }, audioCaptureDefaults: { diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index 4f9d3a85..880fdc75 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -16,7 +16,7 @@ import { usePreviewTracks } from "@livekit/components-react"; import { LocalVideoTrack, Track } from "livekit-client"; import { useObservable } from "observable-hooks"; import { map } from "rxjs"; -import { BackgroundBlur } from "@livekit/track-processors"; +import { BackgroundBlur as backgroundBlur } from "@livekit/track-processors"; import inCallStyles from "./InCallView.module.css"; import styles from "./LobbyView.module.css"; @@ -115,8 +115,7 @@ export const LobbyView: FC = ({ const blur = useMemo(() => { let b = undefined; try { - // eslint-disable-next-line new-cap - b = BackgroundBlur(15, { delegate: "GPU" }); + b = backgroundBlur(15, { delegate: "GPU" }); } catch (e) { logger.error( "disable background blur because its not supported by the platform.", @@ -138,14 +137,14 @@ export const LobbyView: FC = ({ video: muteStates.video.enabled && { deviceId: devices.videoInput.selectedId, // It should be possible to set a processor here: - // processor: blur, - // This causes a crash currently hence we do the effect below... + processor: blur, }, }), [ initialAudioOptions, muteStates.video.enabled, devices.videoInput.selectedId, + blur, ], ); @@ -174,7 +173,6 @@ export const LobbyView: FC = ({ if (!blur) return; const updateBlur = async (showBlur: boolean): Promise => { if (showBlur && !videoTrack?.getProcessor()) { - // eslint-disable-next-line new-cap await videoTrack?.setProcessor(blur); } else { await videoTrack?.stopProcessor(); From c6d48446f40547fb2eeb77fc0de640cb7b783c36 Mon Sep 17 00:00:00 2001 From: Timo Date: Mon, 2 Dec 2024 17:45:32 +0100 Subject: [PATCH 015/225] review --- locales/en/app.json | 4 ++-- src/room/LobbyView.tsx | 1 - src/settings/SettingsModal.tsx | 5 ++--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/locales/en/app.json b/locales/en/app.json index 2b610560..6b72876a 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -151,8 +151,8 @@ "effect_volume_label": "Sound effect volume" }, "background_blur_header": "Background", - "background_blur_label": "Enable background blurring", - "blur_not_supported_by_browser": "(Background blur is not supported by this browser.)", + "background_blur_label": "Blur the background of the video", + "blur_not_supported_by_browser": "(Background blur is not supported by this browser)", "developer_settings_label": "Developer Settings", "developer_settings_label_description": "Expose developer settings in the settings window.", "developer_tab_title": "Developer", diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index 880fdc75..118302c6 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -111,7 +111,6 @@ export const LobbyView: FC = ({ muteStates.audio.enabled && { deviceId: devices.audioInput.selectedId }, ); - // eslint-disable-next-line new-cap const blur = useMemo(() => { let b = undefined; try { diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 84583b8f..4e9da359 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -9,7 +9,7 @@ import { ChangeEvent, FC, ReactNode, useCallback, useState } from "react"; import { Trans, useTranslation } from "react-i18next"; import { MatrixClient } from "matrix-js-sdk/src/matrix"; import { Root as Form, Separator, Text } from "@vector-im/compound-web"; -import { BackgroundBlur } from "@livekit/track-processors"; +import { BackgroundBlur as backgroundBlur } from "@livekit/track-processors"; import { logger } from "matrix-js-sdk/src/logger"; import { Modal } from "../Modal"; @@ -78,8 +78,7 @@ export const SettingsModal: FC = ({ const [blur, setBlur] = useSetting(backgroundBlurSetting); let canBlur = true; try { - // eslint-disable-next-line new-cap - BackgroundBlur(15); + backgroundBlur(15); } catch (e) { logger.debug( "Cannot blur, so we do not show the option in settings. error: ", From 574c89529a0d3392ddb4c56f18638118ede7300f Mon Sep 17 00:00:00 2001 From: Timo Date: Mon, 2 Dec 2024 17:51:31 +0100 Subject: [PATCH 016/225] disable blur in local track again --- src/room/LobbyView.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index 118302c6..3626f82e 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -136,14 +136,13 @@ export const LobbyView: FC = ({ video: muteStates.video.enabled && { deviceId: devices.videoInput.selectedId, // It should be possible to set a processor here: - processor: blur, + // processor: blur, }, }), [ initialAudioOptions, muteStates.video.enabled, devices.videoInput.selectedId, - blur, ], ); From b77c4afff2a539a5e4b80c7a4ee83e9587eed102 Mon Sep 17 00:00:00 2001 From: Timo Date: Fri, 6 Dec 2024 18:12:51 +0100 Subject: [PATCH 017/225] refactor - still should not work without a fixing upstream LK: https://github.com/livekit/components-js/pull/1042 https://github.com/livekit/components-js/pull/1043 --- src/App.tsx | 54 ++++++++----- src/livekit/TrackProcessorContext.tsx | 111 ++++++++++++++++++++++++++ src/livekit/useLiveKit.ts | 90 +++++---------------- src/room/LobbyView.tsx | 60 +++++--------- src/settings/SettingsModal.tsx | 30 +++---- yarn.lock | 16 ++-- 6 files changed, 204 insertions(+), 157 deletions(-) create mode 100644 src/livekit/TrackProcessorContext.tsx diff --git a/src/App.tsx b/src/App.tsx index 8d841dba..5d96877b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -28,6 +28,7 @@ import { Initializer } from "./initializer"; import { MediaDevicesProvider } from "./livekit/MediaDevicesContext"; import { widget } from "./widget"; import { useTheme } from "./useTheme"; +import { ProcessorProvider } from "./livekit/TrackProcessorContext"; const SentryRoute = Sentry.withSentryRouting(Route); @@ -82,27 +83,25 @@ export const App: FC = ({ history }) => { {loaded ? ( - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + ) : ( @@ -113,3 +112,16 @@ export const App: FC = ({ history }) => { ); }; + +const Providers: FC<{ + children: JSX.Element; +}> = ({ children }) => { + // We use this to stack all used providers to not make the App component to verbose + return ( + + + {children} + + + ); +}; diff --git a/src/livekit/TrackProcessorContext.tsx b/src/livekit/TrackProcessorContext.tsx new file mode 100644 index 00000000..c2bc3826 --- /dev/null +++ b/src/livekit/TrackProcessorContext.tsx @@ -0,0 +1,111 @@ +/* +Copyright 2024 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only +Please see LICENSE in the repository root for full details. +*/ + +import { + BackgroundBlur as backgroundBlur, + BackgroundOptions, + ProcessorWrapper, +} from "@livekit/track-processors"; +import { + createContext, + FC, + useCallback, + useContext, + useEffect, + useRef, + useState, +} from "react"; +import { logger } from "matrix-js-sdk/src/logger"; +import { LocalVideoTrack } from "livekit-client"; + +import { + backgroundBlur as backgroundBlurSettings, + useSetting, +} from "../settings/settings"; + +type ProcessorState = { + supported: boolean | undefined; + processor: undefined | ProcessorWrapper; + /** + * Call this method to try to initialize a processor. + * This only needs to happen if supported is undefined. + * If the backgroundBlur setting is set to true this does not need to be called + * and the processorState.supported will update automatically to the correct value. + */ + checkSupported: () => void; +}; +const ProcessorContext = createContext(undefined); + +export const useTrackProcessor = (): ProcessorState | undefined => + useContext(ProcessorContext); + +export const useTrackProcessorSync = ( + videoTrack: LocalVideoTrack | null, +): void => { + const { processor } = useTrackProcessor() || {}; + useEffect(() => { + if (processor && !videoTrack?.getProcessor()) { + void videoTrack?.setProcessor(processor); + } + if (!processor && videoTrack?.getProcessor()) { + void videoTrack?.stopProcessor(); + } + }, [processor, videoTrack]); +}; + +interface Props { + children: JSX.Element; +} +export const ProcessorProvider: FC = ({ children }) => { + // The setting the user wants to have + const [blurActivated] = useSetting(backgroundBlurSettings); + + // If `ProcessorState.supported` is undefined the user can activate that we want + // to have it at least checked (this is useful to show the settings menu properly) + // We dont want to try initializing the blur if the user is not even looking at the setting + const [shouldCheckSupport, setShouldCheckSupport] = useState(blurActivated); + + // Cache the processor so we only need to initialize it once. + const blur = useRef | undefined>( + undefined, + ); + + const checkSupported = useCallback(() => { + setShouldCheckSupport(true); + }, []); + // This is the actual state exposed through the context + const [processorState, setProcessorState] = useState(() => ({ + supported: false, + processor: undefined, + checkSupported, + })); + + useEffect(() => { + if (!shouldCheckSupport) return; + try { + if (!blur.current) blur.current = backgroundBlur(15, { delegate: "GPU" }); + setProcessorState({ + checkSupported, + supported: true, + processor: blurActivated ? blur.current : undefined, + }); + } catch (e) { + setProcessorState({ + checkSupported, + supported: false, + processor: undefined, + }); + logger.error("disable background blur", e); + } + }, [blurActivated, checkSupported, shouldCheckSupport]); + + return ( + + {children} + + ); +}; diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLiveKit.ts index 85f3178b..4836141e 100644 --- a/src/livekit/useLiveKit.ts +++ b/src/livekit/useLiveKit.ts @@ -9,9 +9,8 @@ import { ConnectionState, E2EEOptions, ExternalE2EEKeyProvider, - LocalTrackPublication, + LocalVideoTrack, Room, - RoomEvent, RoomOptions, Track, } from "livekit-client"; @@ -19,7 +18,6 @@ import { useEffect, useMemo, useRef } from "react"; import E2EEWorker from "livekit-client/e2ee-worker?worker"; import { logger } from "matrix-js-sdk/src/logger"; import { MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; -import { BackgroundBlur as backgroundBlur } from "@livekit/track-processors"; import { defaultLiveKitOptions } from "./options"; import { SFUConfig } from "./openIDSFU"; @@ -29,7 +27,6 @@ import { MediaDevices, useMediaDevices, } from "./MediaDevicesContext"; -import { backgroundBlur as backgroundBlurSettings } from "../settings/settings"; import { ECConnectionState, useECConnectionState, @@ -37,7 +34,11 @@ import { import { MatrixKeyProvider } from "../e2ee/matrixKeyProvider"; import { E2eeType } from "../e2ee/e2eeType"; import { EncryptionSystem } from "../e2ee/sharedKeyManagement"; -import { useSetting } from "../settings/settings"; +import { + useTrackProcessor, + useTrackProcessorSync, +} from "./TrackProcessorContext"; +import { useInitial } from "../useInitial"; interface UseLivekitResult { livekitRoom?: Room; @@ -83,22 +84,16 @@ export function useLiveKit( const initialMuteStates = useRef(muteStates); const devices = useMediaDevices(); const initialDevices = useRef(devices); - const blur = useMemo(() => { - let b = undefined; - try { - b = backgroundBlur(15, { delegate: "GPU" }); - } catch (e) { - logger.error("disable background blur", e); - } - return b; - }, []); + + const { processor } = useTrackProcessor() || {}; + const initialProcessor = useInitial(() => processor); const roomOptions = useMemo( (): RoomOptions => ({ ...defaultLiveKitOptions, videoCaptureDefaults: { ...defaultLiveKitOptions.videoCaptureDefaults, deviceId: initialDevices.current.videoInput.selectedId, - processor: blur, + processor: initialProcessor, }, audioCaptureDefaults: { ...defaultLiveKitOptions.audioCaptureDefaults, @@ -109,7 +104,7 @@ export function useLiveKit( }, e2ee: e2eeOptions, }), - [blur, e2eeOptions], + [e2eeOptions, initialProcessor], ); // Store if audio/video are currently updating. If to prohibit unnecessary calls @@ -134,6 +129,15 @@ export function useLiveKit( return r; }, [roomOptions, e2eeSystem]); + const videoTrack = useMemo( + () => + Array.from(room.localParticipant.videoTrackPublications.values()).find( + (v) => v.source === Track.Source.Camera, + )?.track as LocalVideoTrack | null, + [room.localParticipant.videoTrackPublications], + ); + useTrackProcessorSync(videoTrack); + const connectionState = useECConnectionState( { deviceId: initialDevices.current.audioInput.selectedId, @@ -143,58 +147,6 @@ export function useLiveKit( sfuConfig, ); - const [showBackgroundBlur] = useSetting(backgroundBlurSettings); - const videoTrackPromise = useRef< - undefined | Promise - >(undefined); - - useEffect(() => { - // Don't even try if we cannot blur on this platform - if (!blur) return; - if (!room || videoTrackPromise.current) return; - const update = async (): Promise => { - let publishCallback: undefined | ((track: LocalTrackPublication) => void); - videoTrackPromise.current = new Promise< - LocalTrackPublication | undefined - >((resolve) => { - const videoTrack = Array.from( - room.localParticipant.videoTrackPublications.values(), - ).find((v) => v.source === Track.Source.Camera); - if (videoTrack) { - resolve(videoTrack); - } - publishCallback = (videoTrack: LocalTrackPublication): void => { - if (videoTrack.source === Track.Source.Camera) { - resolve(videoTrack); - } - }; - room.on(RoomEvent.LocalTrackPublished, publishCallback); - }); - - const videoTrack = await videoTrackPromise.current; - - if (publishCallback) - room.off(RoomEvent.LocalTrackPublished, publishCallback); - - if (videoTrack !== undefined) { - if ( - showBackgroundBlur && - videoTrack.track?.getProcessor()?.name !== "background-blur" - ) { - logger.info("Blur: set blur"); - - void videoTrack.track?.setProcessor(blur); - } else if ( - videoTrack.track?.getProcessor()?.name === "background-blur" - ) { - void videoTrack.track?.stopProcessor(); - } - } - videoTrackPromise.current = undefined; - }; - void update(); - }, [blur, room, showBackgroundBlur]); - useEffect(() => { // Sync the requested mute states with LiveKit's mute states. We do it this // way around rather than using LiveKit as the source of truth, so that the @@ -261,6 +213,7 @@ export function useLiveKit( audioMuteUpdating.current = true; trackPublication = await participant.setMicrophoneEnabled( buttonEnabled.current.audio, + room.options.audioCaptureDefaults, ); audioMuteUpdating.current = false; break; @@ -268,6 +221,7 @@ export function useLiveKit( videoMuteUpdating.current = true; trackPublication = await participant.setCameraEnabled( buttonEnabled.current.video, + room.options.videoCaptureDefaults, ); videoMuteUpdating.current = false; break; diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index 3626f82e..545eff09 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -13,10 +13,13 @@ import classNames from "classnames"; import { useHistory } from "react-router-dom"; import { logger } from "matrix-js-sdk/src/logger"; import { usePreviewTracks } from "@livekit/components-react"; -import { LocalVideoTrack, Track } from "livekit-client"; +import { + CreateLocalTracksOptions, + LocalVideoTrack, + Track, +} from "livekit-client"; import { useObservable } from "observable-hooks"; import { map } from "rxjs"; -import { BackgroundBlur as backgroundBlur } from "@livekit/track-processors"; import inCallStyles from "./InCallView.module.css"; import styles from "./LobbyView.module.css"; @@ -33,14 +36,16 @@ import { VideoButton, } from "../button/Button"; import { SettingsModal, defaultSettingsTab } from "../settings/SettingsModal"; -import { backgroundBlur as backgroundBlurSettings } from "../settings/settings"; import { useMediaQuery } from "../useMediaQuery"; import { E2eeType } from "../e2ee/e2eeType"; import { Link } from "../button/Link"; import { useMediaDevices } from "../livekit/MediaDevicesContext"; import { useInitial } from "../useInitial"; import { useSwitchCamera as useShowSwitchCamera } from "./useSwitchCamera"; -import { useSetting } from "../settings/settings"; +import { + useTrackProcessor, + useTrackProcessorSync, +} from "../livekit/TrackProcessorContext"; interface Props { client: MatrixClient; @@ -111,20 +116,10 @@ export const LobbyView: FC = ({ muteStates.audio.enabled && { deviceId: devices.audioInput.selectedId }, ); - const blur = useMemo(() => { - let b = undefined; - try { - b = backgroundBlur(15, { delegate: "GPU" }); - } catch (e) { - logger.error( - "disable background blur because its not supported by the platform.", - e, - ); - } - return b; - }, []); + const { processor } = useTrackProcessor() || {}; - const localTrackOptions = useMemo( + const initialProcessor = useInitial(() => processor); + const localTrackOptions = useMemo( () => ({ // The only reason we request audio here is to get the audio permission // request over with at the same time. But changing the audio settings @@ -135,14 +130,14 @@ export const LobbyView: FC = ({ audio: Object.assign({}, initialAudioOptions), video: muteStates.video.enabled && { deviceId: devices.videoInput.selectedId, - // It should be possible to set a processor here: - // processor: blur, + processor: initialProcessor, }, }), [ initialAudioOptions, muteStates.video.enabled, devices.videoInput.selectedId, + initialProcessor, ], ); @@ -157,28 +152,11 @@ export const LobbyView: FC = ({ const tracks = usePreviewTracks(localTrackOptions, onError); - const videoTrack = useMemo( - () => - (tracks?.find((t) => t.kind === Track.Kind.Video) ?? - null) as LocalVideoTrack | null, - [tracks], - ); - - const [showBackgroundBlur] = useSetting(backgroundBlurSettings); - - useEffect(() => { - // Fon't even try if we cannot blur on this platform - if (!blur) return; - const updateBlur = async (showBlur: boolean): Promise => { - if (showBlur && !videoTrack?.getProcessor()) { - await videoTrack?.setProcessor(blur); - } else { - await videoTrack?.stopProcessor(); - } - }; - if (videoTrack) void updateBlur(showBackgroundBlur); - }, [videoTrack, showBackgroundBlur, blur]); - + const videoTrack = useMemo(() => { + const track = tracks?.find((t) => t.kind === Track.Kind.Video); + return track as LocalVideoTrack | null; + }, [tracks]); + useTrackProcessorSync(videoTrack); const showSwitchCamera = useShowSwitchCamera( useObservable( (inputs) => inputs.pipe(map(([video]) => video)), diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 4e9da359..11d73f4d 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -5,12 +5,10 @@ SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ -import { ChangeEvent, FC, ReactNode, useCallback, useState } from "react"; +import { ChangeEvent, FC, ReactNode, useCallback, useEffect, useState } from "react"; import { Trans, useTranslation } from "react-i18next"; import { MatrixClient } from "matrix-js-sdk/src/matrix"; import { Root as Form, Separator, Text } from "@vector-im/compound-web"; -import { BackgroundBlur as backgroundBlur } from "@livekit/track-processors"; -import { logger } from "matrix-js-sdk/src/logger"; import { Modal } from "../Modal"; import styles from "./SettingsModal.module.css"; @@ -36,6 +34,7 @@ import { isFirefox } from "../Platform"; import { PreferencesSettingsTab } from "./PreferencesSettingsTab"; import { Slider } from "../Slider"; import { DeviceSelection } from "./DeviceSelection"; +import { useTrackProcessor } from "../livekit/TrackProcessorContext"; type SettingsTab = | "audio" @@ -75,18 +74,11 @@ export const SettingsModal: FC = ({ // Generate a `Checkbox` input to turn blur on or off. const BlurCheckbox: React.FC = (): ReactNode => { - const [blur, setBlur] = useSetting(backgroundBlurSetting); - let canBlur = true; - try { - backgroundBlur(15); - } catch (e) { - logger.debug( - "Cannot blur, so we do not show the option in settings. error: ", - e, - ); - canBlur = false; - setBlur(false); - } + const { supported, checkSupported } = useTrackProcessor() || {}; + useEffect(() => checkSupported?.(), [checkSupported]); + + const [blurActive, setBlurActive] = useSetting(backgroundBlurSetting); + return ( <>

{t("settings.background_blur_header")}

@@ -96,12 +88,12 @@ export const SettingsModal: FC = ({ id="activateBackgroundBlur" label={t("settings.background_blur_label")} description={ - canBlur ? "" : t("settings.blur_not_supported_by_browser") + supported ? "" : t("settings.blur_not_supported_by_browser") } type="checkbox" - checked={blur} - onChange={(b): void => setBlur(b.target.checked)} - disabled={!canBlur} + checked={!!blurActive} + onChange={(b): void => setBlurActive(b.target.checked)} + disabled={!supported} /> diff --git a/yarn.lock b/yarn.lock index 1a456433..b4fc53aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1805,10 +1805,10 @@ resolved "https://registry.yarnpkg.com/@livekit/mutex/-/mutex-1.0.0.tgz#9493102d92ff75dfb0445eccc46c7c7ac189d385" integrity sha512-aiUhoThBNF9UyGTxEURFzJLhhPLIVTnQiEVMjRhPnfHNKLfo2JY9xovHKIus7B78UD5hsP6DlgpmAsjrz4U0Iw== -"@livekit/protocol@1.24.0": - version "1.24.0" - resolved "https://registry.yarnpkg.com/@livekit/protocol/-/protocol-1.24.0.tgz#b23acab25c11027bf26c1b42f9b782682f2da585" - integrity sha512-9dCsqnkMn7lvbI4NGh18zhLDsrXyUcpS++TEFgEk5Xv1WM3R2kT3EzqgL1P/mr3jaabM6rJ8wZA/KJLuQNpF5w== +"@livekit/protocol@1.29.3": + version "1.29.3" + resolved "https://registry.yarnpkg.com/@livekit/protocol/-/protocol-1.29.3.tgz#486ce215c0c591ad64036d9b13c7e28f5417cf03" + integrity sha512-5La/pm2LsSeCbm7xNe/TvHGYu7uVwDpLrlycpgo5nzofGq/TH67255vS8ni/1Y7vrFuAI8VYG/s42mcC1UF6tQ== dependencies: "@bufbuild/protobuf" "^1.10.0" @@ -6125,12 +6125,12 @@ lines-and-columns@^1.1.6: integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== livekit-client@^2.5.7: - version "2.7.0" - resolved "https://registry.yarnpkg.com/livekit-client/-/livekit-client-2.7.0.tgz#d7a80aff4ad335dd093b0c90d0d715466539651a" - integrity sha512-4vjfSReFNAUD+2oLUz9qFRWztJaI/+AexpOmCgizNsPYpvvqgAvEGxapnhuAug9uP7JVYaKPXaTCq90MWZoDHg== + version "2.7.3" + resolved "https://registry.yarnpkg.com/livekit-client/-/livekit-client-2.7.3.tgz#70a5f5016f3f50b1282f4b9090aa17a39f8bde09" + integrity sha512-oHEmUTFjIJARi5R87PsobZx8y2HCSUwla3Nu71EqDOAMnNY9aoGMLsJVao5Y+v1TSk71rgRm991fihgxtbg5xw== dependencies: "@livekit/mutex" "1.0.0" - "@livekit/protocol" "1.24.0" + "@livekit/protocol" "1.29.3" events "^3.3.0" loglevel "^1.8.0" sdp-transform "^2.14.1" From 59bc73cedfbd14ba22cf97a0e5db4cf4116af033 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Mon, 9 Dec 2024 22:04:09 +0000 Subject: [PATCH 018/225] Use local assets for blurring --- package.json | 1 + src/livekit/BlurBackgroundTransformer.ts | 62 ++++++++++++++++++ src/livekit/TrackProcessorContext.tsx | 14 ++-- src/mediapipe/imageSegmenter/README.md | 5 ++ .../imageSegmenter/selfie_segmenter.tflite | Bin 0 -> 249537 bytes yarn.lock | 5 ++ 6 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 src/livekit/BlurBackgroundTransformer.ts create mode 100644 src/mediapipe/imageSegmenter/README.md create mode 100644 src/mediapipe/imageSegmenter/selfie_segmenter.tflite diff --git a/package.json b/package.json index 36e03468..30f967e8 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@livekit/components-core": "^0.11.0", "@livekit/components-react": "^2.0.0", "@livekit/track-processors": "^0.3.2", + "@mediapipe/tasks-vision": "^0.10.18", "@opentelemetry/api": "^1.4.0", "@opentelemetry/core": "^1.25.1", "@opentelemetry/exporter-trace-otlp-http": "^0.55.0", diff --git a/src/livekit/BlurBackgroundTransformer.ts b/src/livekit/BlurBackgroundTransformer.ts new file mode 100644 index 00000000..7273e487 --- /dev/null +++ b/src/livekit/BlurBackgroundTransformer.ts @@ -0,0 +1,62 @@ +/* +Copyright 2024 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only +Please see LICENSE in the repository root for full details. +*/ + +import { + BackgroundTransformer, + VideoTransformer, + VideoTransformerInitOptions, +} from "@livekit/track-processors"; +import { ImageSegmenter } from "@mediapipe/tasks-vision"; + +interface WasmFileset { + /** The path to the Wasm loader script. */ + wasmLoaderPath: string; + /** The path to the Wasm binary. */ + wasmBinaryPath: string; +} + +// n.b. this only includes the SIMD versions of the WASM files which have good support: +// https://caniuse.com/?search=simd +const wasmFileset: WasmFileset = { + wasmLoaderPath: new URL( + "../../node_modules/@mediapipe/tasks-vision/wasm/vision_wasm_internal.js", + import.meta.url, + ).href, + wasmBinaryPath: new URL( + "../../node_modules/@mediapipe/tasks-vision/wasm/vision_wasm_internal.wasm", + import.meta.url, + ).href, +}; + +const modelAssetPath = new URL( + "../mediapipe/imageSegmenter/selfie_segmenter.tflite", + import.meta.url, +).href; + +export class BlurBackgroundTransformer extends BackgroundTransformer { + public async init({ + outputCanvas, + inputElement: inputVideo, + }: VideoTransformerInitOptions): Promise { + // call super.super.init() + await VideoTransformer.prototype.init.call(this, { + outputCanvas, + inputElement: inputVideo, + }); + + this.imageSegmenter = await ImageSegmenter.createFromOptions(wasmFileset, { + baseOptions: { + modelAssetPath, + delegate: "GPU", + ...this.options.segmenterOptions, + }, + runningMode: "VIDEO", + outputCategoryMask: true, + outputConfidenceMasks: false, + }); + } +} diff --git a/src/livekit/TrackProcessorContext.tsx b/src/livekit/TrackProcessorContext.tsx index c2bc3826..71714b6e 100644 --- a/src/livekit/TrackProcessorContext.tsx +++ b/src/livekit/TrackProcessorContext.tsx @@ -5,11 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ -import { - BackgroundBlur as backgroundBlur, - BackgroundOptions, - ProcessorWrapper, -} from "@livekit/track-processors"; +import { BackgroundOptions, ProcessorWrapper } from "@livekit/track-processors"; import { createContext, FC, @@ -26,6 +22,7 @@ import { backgroundBlur as backgroundBlurSettings, useSetting, } from "../settings/settings"; +import { BlurBackgroundTransformer } from "./BlurBackgroundTransformer"; type ProcessorState = { supported: boolean | undefined; @@ -87,7 +84,12 @@ export const ProcessorProvider: FC = ({ children }) => { useEffect(() => { if (!shouldCheckSupport) return; try { - if (!blur.current) blur.current = backgroundBlur(15, { delegate: "GPU" }); + if (!blur.current) { + blur.current = new ProcessorWrapper( + new BlurBackgroundTransformer({ blurRadius: 15 }), + "background-blur", + ); + } setProcessorState({ checkSupported, supported: true, diff --git a/src/mediapipe/imageSegmenter/README.md b/src/mediapipe/imageSegmenter/README.md new file mode 100644 index 00000000..39bea2d8 --- /dev/null +++ b/src/mediapipe/imageSegmenter/README.md @@ -0,0 +1,5 @@ +# Google AI Edge MediaPipe Selfie Segmentation + +- See: https://ai.google.dev/edge/mediapipe/solutions/vision/image_segmenter +- Latest: https://storage.googleapis.com/mediapipe-models/image_segmenter/selfie_segmenter/float16/latest/selfie_segmenter.tflite +- License: Apache 2.0 as per https://storage.googleapis.com/mediapipe-assets/Model%20Card%20MediaPipe%20Selfie%20Segmentation.pdf diff --git a/src/mediapipe/imageSegmenter/selfie_segmenter.tflite b/src/mediapipe/imageSegmenter/selfie_segmenter.tflite new file mode 100644 index 0000000000000000000000000000000000000000..a4ebd4777ede40ba04abc8e5c28a73407cb7a1a0 GIT binary patch literal 249537 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

SDFw!?va%i&|4Ps44A)N#z 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%0DlFro3}!1yvBBc;|pdU=F{vN z+SDGFcTMcu1`b*$;N^Bm&Tp>W3mo70>*$yJ(MRhH;>E2S&4O!u+2<%6N7tL{r*?XI zs=)E71h3Bm81Op2wQpJUd>4+RW$SIPO9~<`N4wt1KJZE2#q<06Rzx*lL6Atm`wh{L zea%nKZSzc5;>R(!^@Z9tj$^59#Ge*jyXd23w%M9E0B}k0_Yv*bme$09Adv#^7mR*A z`3VZ9`VqhO`DhRKL~=?q>^@xg+vo?*ZWA~)mY0sC|&Kn6{_pq(mEq>ujw2yv6%huc0>;(WP z1kd@=viy|R>;*w00q@7ar#vT9a~Q|ecWN8)JAM~!tBP*NHe2%& ze^~HU@#5H)*1Y7XZ6*4P;OkoTJLR6pWR3ZDBk$xlo-HOJ0z(ad4;Q}uvH=dk#l zzmGns5?<~D`FpEqM~OL0!B-08KB)gLLG>d?=L_f`0-rwMI`DaNte^5{Gy%s>3N~5K z>H$G&3-NdSA=*-16gjq}_3#eCSH+uS%dP6+67y{XpSHB;rZIPo4hv81(miWyLXA_- zbK1<~<|YKB`or>uu10?hV+^!Tz>Axkq{!epm5^EC-Ge?_XAm!LZZgG&&ab(t1c&2j zyxZD|`$zFs-=hg$a?^;H%Q*hPAESMDqmP#6Cj7lr{KkRWwN>zM5qxqks{g)meC z`UQeSO1!TFU)QQ9H(@h*YtN}j^b^o^EPl=w?4=r17 zTlbd$TonB4i3UDh@3ihO2@(l-UvANln^Emodx)R>YxLvm&_~Pkvvqs`;E>>7OSGe3 zTE_>1L<+nwfUo}U$uBthruq?oLhw$0aqqQ|bHU7E^NX!*txh}s7JU%FMaz7U*0zTQ zkDtG&@aY=es!3I=+Xnd2m@$bFD`W<%=ynqLZVIF81<%`Y|<18|fAa>U@tll-y;-P*o@ zKBa*4|0CMR?*yV%>&<5z%9GNkTC)P5PY9m2pjCK2m#*=0+laOl1c-3mhrsPwYkb!- z{i3D%AOKGxZ&r9*Yh%*{{+roE{3X$meYDgjE#E8Mh#B~2^a0luEw!mG->Dn%YSR?a z;8G{XOmnVp?&$}7P9b(ku#6=)1`)ie{p6h%{a%eeS|{MejX_Da)Q`N&!efnz)*gc< z>FWGzK%nS2xsA>J+yESf*mXCWcr|Oa8HZfko&=u0-#KL+UCE6ufS7sn{XPGL@BlReK8zqYN5K85&Y(UIR7MoZU9OZ>{`#P|It+QeLk zmhSnw#HSs^>snFw>%MN|IF#u|{JhM?doO6IZd$Tea}a-A@c3ybwp6#eBBgG`TiuR; zYyGC*P3AzlCSCL?#63u$qn9)f6d@IkK}!pul4vAzx!tNGsi|tZP)U(w*8pk zd9G8uIlt6r%hY!2@)Wpyr(I1h&aY31IV;#CzL0@)JBT0tZ?uDbwA2nQb1OTDDFjbF z(9$)mGcN5Q-ui48xcrR!o4F+W9vnW?wY0pagx70-Q$KaVqwx4yGY9{lJ_o}`^&DOF zDa1|uFZuyL5ysXDc;Wda<=eV}yanO0wn6Izym+}sA3Ldinm;(kJjS43*ylLaJwLoF zwnU%8tS`$Z7r*X>XcxyqOV?LR_&QFzf~S6pH*s2LLXJm$>^hBut9CFxq;_@n zDh!rBkNeHH;ezON8*pgVZ^$!;L{9TulllxGv+8fbGB2r)RiT_1GMVNBU6lTf!nTO`)58S Date: Mon, 9 Dec 2024 22:09:26 +0000 Subject: [PATCH 019/225] Lint --- src/settings/SettingsModal.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 11d73f4d..b7d4c846 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -5,7 +5,14 @@ SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ -import { ChangeEvent, FC, ReactNode, useCallback, useEffect, useState } from "react"; +import { + ChangeEvent, + FC, + ReactNode, + useCallback, + useEffect, + useState, +} from "react"; import { Trans, useTranslation } from "react-i18next"; import { MatrixClient } from "matrix-js-sdk/src/matrix"; import { Root as Form, Separator, Text } from "@vector-im/compound-web"; From aa5cf2f5918b8328e3a3431f9b259e3936d583a7 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Mon, 9 Dec 2024 22:11:30 +0000 Subject: [PATCH 020/225] Wording change --- locales/en/app.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/en/app.json b/locales/en/app.json index 6b72876a..7b57e125 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -152,7 +152,7 @@ }, "background_blur_header": "Background", "background_blur_label": "Blur the background of the video", - "blur_not_supported_by_browser": "(Background blur is not supported by this browser)", + "blur_not_supported_by_browser": "(Background blur is not supported by this device)", "developer_settings_label": "Developer Settings", "developer_settings_label_description": "Expose developer settings in the settings window.", "developer_tab_title": "Developer", From b6cc9c534ba749e327790a11f0cbc91599162141 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Mon, 9 Dec 2024 22:12:49 +0000 Subject: [PATCH 021/225] Lint --- src/room/LobbyView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index 545eff09..0321672b 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ -import { FC, useCallback, useEffect, useMemo, useState } from "react"; +import { FC, useCallback, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { MatrixClient } from "matrix-js-sdk/src/matrix"; import { Button } from "@vector-im/compound-web"; From c860be73f6a2cc0bbdd6455b2704710b8d18ecfc Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Wed, 11 Dec 2024 10:30:45 +0000 Subject: [PATCH 022/225] . --- src/settings/SettingsModal.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 58703ad4..46839b0d 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -27,7 +27,7 @@ import { import { widget } from "../widget"; import { useSetting, - developerSettingsTab as developerSettingsTabSetting, + developerSettingsTab, backgroundBlur as backgroundBlurSetting, soundEffectVolumeSetting, } from "./settings"; @@ -102,7 +102,7 @@ export const SettingsModal: FC = ({ const [soundVolume, setSoundVolume] = useSetting(soundEffectVolumeSetting); const [soundVolumeRaw, setSoundVolumeRaw] = useState(soundVolume); - const [showDeveloperSettingsTab] = useSetting(developerSettingsTabSetting); + const [showDeveloperSettingsTab] = useSetting(developerSettingsTab); const audioTab: Tab = { key: "audio", From f18ce5adf1563e7af4c0e153665c54fc61f955d3 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Wed, 11 Dec 2024 10:34:24 +0000 Subject: [PATCH 023/225] Format --- src/settings/SettingsModal.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 46839b0d..e3bd5017 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -5,12 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ -import { - type FC, - type ReactNode, - useEffect, - useState, -} from "react"; +import { type FC, type ReactNode, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { type MatrixClient } from "matrix-js-sdk/src/matrix"; import { Root as Form, Separator } from "@vector-im/compound-web"; From 3f48810034a4a13ba737635fff92e3ba5d2d7f99 Mon Sep 17 00:00:00 2001 From: Timo Date: Fri, 13 Dec 2024 09:57:55 +0100 Subject: [PATCH 024/225] bump components-js (not yet working) --- src/livekit/TrackProcessorContext.tsx | 18 +++++++++++------- yarn.lock | 6 +++--- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/livekit/TrackProcessorContext.tsx b/src/livekit/TrackProcessorContext.tsx index 71714b6e..e131dcb1 100644 --- a/src/livekit/TrackProcessorContext.tsx +++ b/src/livekit/TrackProcessorContext.tsx @@ -5,10 +5,13 @@ SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ -import { BackgroundOptions, ProcessorWrapper } from "@livekit/track-processors"; +import { + type BackgroundOptions, + ProcessorWrapper, +} from "@livekit/track-processors"; import { createContext, - FC, + type FC, useCallback, useContext, useEffect, @@ -16,7 +19,7 @@ import { useState, } from "react"; import { logger } from "matrix-js-sdk/src/logger"; -import { LocalVideoTrack } from "livekit-client"; +import { type LocalVideoTrack } from "livekit-client"; import { backgroundBlur as backgroundBlurSettings, @@ -45,11 +48,12 @@ export const useTrackProcessorSync = ( ): void => { const { processor } = useTrackProcessor() || {}; useEffect(() => { - if (processor && !videoTrack?.getProcessor()) { - void videoTrack?.setProcessor(processor); + if (!videoTrack) return; + if (processor && !videoTrack.getProcessor()) { + void videoTrack.setProcessor(processor); } - if (!processor && videoTrack?.getProcessor()) { - void videoTrack?.stopProcessor(); + if (!processor && videoTrack.getProcessor()) { + void videoTrack.stopProcessor(); } }, [processor, videoTrack]); }; diff --git a/yarn.lock b/yarn.lock index 830228c1..880d8e52 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1941,9 +1941,9 @@ rxjs "7.8.1" "@livekit/components-react@^2.0.0": - version "2.6.9" - resolved "https://registry.yarnpkg.com/@livekit/components-react/-/components-react-2.6.9.tgz#2ff4691dc2cae6ed4c4b2e586a255d00e494bf9c" - integrity sha512-j43i/Dm8dlI2jxv5wv0s+69QPVqVEjg0y2tyznfs/7RDcaIZsIIzNijPu1kLditerzvzQdRsOgFQ3UWONcTkGA== + version "2.6.10" + resolved "https://registry.yarnpkg.com/@livekit/components-react/-/components-react-2.6.10.tgz#949d6e65e8507e2d8a4c75bf190adf56f6358175" + integrity sha512-aR8rqCIEvT3QYHuVEm67THRmNd9x25FTmU3Phi928FhzQJXDBO0N1/5d6qEE/wuDOgXMOoBgA98qsdYDIi2f+g== dependencies: "@livekit/components-core" "0.11.10" clsx "2.1.1" From 7983adb98e3b40ce10016c7f025a6297ea08bf4f Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Wed, 18 Dec 2024 09:42:52 +0000 Subject: [PATCH 025/225] Lint --- src/livekit/BlurBackgroundTransformer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/livekit/BlurBackgroundTransformer.ts b/src/livekit/BlurBackgroundTransformer.ts index 7273e487..51b6a536 100644 --- a/src/livekit/BlurBackgroundTransformer.ts +++ b/src/livekit/BlurBackgroundTransformer.ts @@ -8,7 +8,7 @@ Please see LICENSE in the repository root for full details. import { BackgroundTransformer, VideoTransformer, - VideoTransformerInitOptions, + type VideoTransformerInitOptions, } from "@livekit/track-processors"; import { ImageSegmenter } from "@mediapipe/tasks-vision"; From 7c985b0d9c823b9e99e4fdd49c1da3fd85e6313f Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 19 Dec 2024 17:26:14 +0100 Subject: [PATCH 026/225] Revert "Bump matrix-js-sdk for bundle improvements (#2911)" This reverts commit 6b8dddfaaad68fd0bd1f4f5c0c2fb7b351775ffe. --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 64d418fc..0460f4bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1969,10 +1969,10 @@ "@mediapipe/holistic" "0.5.1675471629" "@mediapipe/tasks-vision" "0.10.9" -"@matrix-org/matrix-sdk-crypto-wasm@^12.0.0": - version "12.0.0" - resolved "https://registry.yarnpkg.com/@matrix-org/matrix-sdk-crypto-wasm/-/matrix-sdk-crypto-wasm-12.0.0.tgz#e3a5150ccbb21d5e98ee3882e7057b9f17fb962a" - integrity sha512-nkkXAxUIk9UTso4TbU6Bgqsv/rJShXQXRx0ti/W+AWXHJ2HoH4sL5LsXkc7a8yYGn8tyXqxGPsYA1UeHqLwm0Q== +"@matrix-org/matrix-sdk-crypto-wasm@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@matrix-org/matrix-sdk-crypto-wasm/-/matrix-sdk-crypto-wasm-11.0.0.tgz#c49a1a0d1e367d3c00a2144a4ab23caee0b1eec2" + integrity sha512-a7NUH8Kjc8hwzNCPpkOGXoceFqWJiWvA8OskXeDrKyODJuDz4yKrZ/nvgaVRfQe45Ab5UC1ZXYqaME+ChlJuqg== "@matrix-org/olm@3.2.15": version "3.2.15" @@ -6603,10 +6603,10 @@ matrix-events-sdk@0.0.1: matrix-js-sdk@matrix-org/matrix-js-sdk#develop: version "34.13.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/e4182eb75227c283a18704727021e99ced72868d" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/d1de32ea2773df4c6f8a956678bbd19b6d022475" dependencies: "@babel/runtime" "^7.12.5" - "@matrix-org/matrix-sdk-crypto-wasm" "^12.0.0" + "@matrix-org/matrix-sdk-crypto-wasm" "^11.0.0" "@matrix-org/olm" "3.2.15" another-json "^0.2.0" bs58 "^6.0.0" From e0f4bf8eab514a96177d4b970c8ece05d238a87b Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 19 Dec 2024 17:39:34 +0100 Subject: [PATCH 027/225] working version --- src/livekit/TrackProcessorContext.tsx | 17 +++++++++++------ src/livekit/useLiveKit.ts | 8 +++++++- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/livekit/TrackProcessorContext.tsx b/src/livekit/TrackProcessorContext.tsx index e131dcb1..1fc0005a 100644 --- a/src/livekit/TrackProcessorContext.tsx +++ b/src/livekit/TrackProcessorContext.tsx @@ -6,8 +6,9 @@ Please see LICENSE in the repository root for full details. */ import { + BackgroundBlur as backgroundBlur, + type ProcessorWrapper, type BackgroundOptions, - ProcessorWrapper, } from "@livekit/track-processors"; import { createContext, @@ -25,7 +26,6 @@ import { backgroundBlur as backgroundBlurSettings, useSetting, } from "../settings/settings"; -import { BlurBackgroundTransformer } from "./BlurBackgroundTransformer"; type ProcessorState = { supported: boolean | undefined; @@ -89,10 +89,15 @@ export const ProcessorProvider: FC = ({ children }) => { if (!shouldCheckSupport) return; try { if (!blur.current) { - blur.current = new ProcessorWrapper( - new BlurBackgroundTransformer({ blurRadius: 15 }), - "background-blur", - ); + // TODO: move to our own local version of the transformer. + // Currently this is broken: error when trying to pipe IndexSizeError: Failed to construct 'ImageData': The source width is zero or not a number. + // blur.current = new ProcessorWrapper( + // new BlurBackgroundTransformer({}), + // "background-blur", + // ); + + // eslint-disable-next-line new-cap + blur.current = backgroundBlur(); } setProcessorState({ checkSupported, diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLiveKit.ts index 72a972a7..aca6ed92 100644 --- a/src/livekit/useLiveKit.ts +++ b/src/livekit/useLiveKit.ts @@ -134,8 +134,14 @@ export function useLiveKit( Array.from(room.localParticipant.videoTrackPublications.values()).find( (v) => v.source === Track.Source.Camera, )?.track as LocalVideoTrack | null, - [room.localParticipant.videoTrackPublications], + [ + room.localParticipant.videoTrackPublications, + // We need to update on map changes + // eslint-disable-next-line react-hooks/exhaustive-deps + room.localParticipant.videoTrackPublications.keys(), + ], ); + useTrackProcessorSync(videoTrack); const connectionState = useECConnectionState( From bb0e1f38dc08ffea8c79c9a6678c5e8b09354bb3 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Mon, 6 Jan 2025 15:48:43 +0000 Subject: [PATCH 028/225] Exclude tasks-vision from knip --- knip.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/knip.ts b/knip.ts index 5ffe03c4..a0250354 100644 --- a/knip.ts +++ b/knip.ts @@ -29,6 +29,8 @@ export default { // element call side. "@types/dom-mediacapture-transform", "matrix-widget-api", + // we bundle files from this and lazy load them: + "@mediapipe/tasks-vision", ], ignoreExportsUsedInFile: true, } satisfies KnipConfig; From 96ea920e9892a0de713a51e7775c949e5ccb0a8c Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Mon, 6 Jan 2025 15:53:31 +0000 Subject: [PATCH 029/225] Try reenabling local implementation of BlurBackgroundTransformer --- src/livekit/TrackProcessorContext.tsx | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/livekit/TrackProcessorContext.tsx b/src/livekit/TrackProcessorContext.tsx index 1fc0005a..8edec4f5 100644 --- a/src/livekit/TrackProcessorContext.tsx +++ b/src/livekit/TrackProcessorContext.tsx @@ -6,8 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { - BackgroundBlur as backgroundBlur, - type ProcessorWrapper, + ProcessorWrapper, type BackgroundOptions, } from "@livekit/track-processors"; import { @@ -26,6 +25,7 @@ import { backgroundBlur as backgroundBlurSettings, useSetting, } from "../settings/settings"; +import { BlurBackgroundTransformer } from "./BlurBackgroundTransformer"; type ProcessorState = { supported: boolean | undefined; @@ -89,15 +89,10 @@ export const ProcessorProvider: FC = ({ children }) => { if (!shouldCheckSupport) return; try { if (!blur.current) { - // TODO: move to our own local version of the transformer. - // Currently this is broken: error when trying to pipe IndexSizeError: Failed to construct 'ImageData': The source width is zero or not a number. - // blur.current = new ProcessorWrapper( - // new BlurBackgroundTransformer({}), - // "background-blur", - // ); - - // eslint-disable-next-line new-cap - blur.current = backgroundBlur(); + blur.current = new ProcessorWrapper( + new BlurBackgroundTransformer({}), + "background-blur", + ); } setProcessorState({ checkSupported, From 4c4d01211c55a9ac6d33b0a1e7b28b2cfa358a1c Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Wed, 8 Jan 2025 14:20:12 +0000 Subject: [PATCH 030/225] Fix @matrix-org/matrix-sdk-crypto-wasm version --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index e7bcb72e..6bafd620 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1847,10 +1847,10 @@ "@mediapipe/holistic" "0.5.1675471629" "@mediapipe/tasks-vision" "0.10.9" -"@matrix-org/matrix-sdk-crypto-wasm@^11.0.0": - version "11.0.0" - resolved "https://registry.yarnpkg.com/@matrix-org/matrix-sdk-crypto-wasm/-/matrix-sdk-crypto-wasm-11.0.0.tgz#c49a1a0d1e367d3c00a2144a4ab23caee0b1eec2" - integrity sha512-a7NUH8Kjc8hwzNCPpkOGXoceFqWJiWvA8OskXeDrKyODJuDz4yKrZ/nvgaVRfQe45Ab5UC1ZXYqaME+ChlJuqg== +"@matrix-org/matrix-sdk-crypto-wasm@^12.0.0": + version "12.0.0" + resolved "https://registry.yarnpkg.com/@matrix-org/matrix-sdk-crypto-wasm/-/matrix-sdk-crypto-wasm-12.0.0.tgz#e3a5150ccbb21d5e98ee3882e7057b9f17fb962a" + integrity sha512-nkkXAxUIk9UTso4TbU6Bgqsv/rJShXQXRx0ti/W+AWXHJ2HoH4sL5LsXkc7a8yYGn8tyXqxGPsYA1UeHqLwm0Q== "@matrix-org/olm@3.2.15": version "3.2.15" @@ -6443,10 +6443,10 @@ matrix-events-sdk@0.0.1: matrix-js-sdk@matrix-org/matrix-js-sdk#develop: version "34.13.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/d1de32ea2773df4c6f8a956678bbd19b6d022475" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/e4182eb75227c283a18704727021e99ced72868d" dependencies: "@babel/runtime" "^7.12.5" - "@matrix-org/matrix-sdk-crypto-wasm" "^11.0.0" + "@matrix-org/matrix-sdk-crypto-wasm" "^12.0.0" "@matrix-org/olm" "3.2.15" another-json "^0.2.0" bs58 "^6.0.0" From 00d724a3a96df21faf643d3b8a6d5d762eccbfa0 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Wed, 8 Jan 2025 14:27:19 +0000 Subject: [PATCH 031/225] Bump @livekit/track-processors to ignore empty frames --- package.json | 4 ++-- yarn.lock | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index bbe84e90..8a66a034 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "@formatjs/intl-segmenter": "^11.7.3", "@livekit/components-core": "^0.11.0", "@livekit/components-react": "^2.0.0", - "@livekit/track-processors": "^0.3.2", + "@livekit/track-processors": "^0.3.3", "@mediapipe/tasks-vision": "^0.10.18", "@opentelemetry/api": "^1.4.0", "@opentelemetry/core": "^1.25.1", @@ -124,4 +124,4 @@ "resolutions": { "strip-ansi": "6.0.1" } -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 6bafd620..7ebda63d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1839,10 +1839,10 @@ dependencies: "@bufbuild/protobuf" "^1.10.0" -"@livekit/track-processors@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@livekit/track-processors/-/track-processors-0.3.2.tgz#eaff6a48b556c25e85f5dd2c4daf6dcf1bc3b143" - integrity sha512-4JUCzb7yIKoVsTo8J6FTzLZJHcI6DihfX/pGRDg0SOGaxprcDPrt8jaDBBTsnGBSXHeMxl2ugN+xQjdCWzLKEA== +"@livekit/track-processors@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@livekit/track-processors/-/track-processors-0.3.3.tgz#c44ec54229bf21ccb404b96c43702bc263c4f05d" + integrity sha512-C5mBWe34ie0pfhCf9zAD65D26ZytzW/xGrj8Zc1BGh5kLISFDVQlefO78LZWw9K5saTamk60O4fzSCKqWMPMLA== dependencies: "@mediapipe/holistic" "0.5.1675471629" "@mediapipe/tasks-vision" "0.10.9" From adb5934f0bd7817814ab5bc0216ffd3d6673b935 Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 13 Mar 2025 13:58:43 +0100 Subject: [PATCH 032/225] temp --- src/@types/global.d.ts | 2 +- src/App.tsx | 2 +- src/Avatar.test.tsx | 2 +- src/Avatar.tsx | 2 +- src/ClientContext.tsx | 6 +++--- src/ErrorView.tsx | 2 +- src/FullScreenView.tsx | 2 +- src/IndexedDBWorker.ts | 2 +- src/UrlParams.ts | 2 +- src/UserMenuContainer.tsx | 2 +- src/analytics/PosthogAnalytics.ts | 4 ++-- src/analytics/PosthogEvents.ts | 4 ++-- src/analytics/PosthogSpanProcessor.ts | 2 +- src/auth/RegisterPage.tsx | 2 +- src/auth/useInteractiveLogin.ts | 2 +- src/auth/useInteractiveRegistration.ts | 4 ++-- src/auth/useRecaptcha.ts | 2 +- src/button/ReactionToggleButton.test.tsx | 2 +- src/button/ReactionToggleButton.tsx | 2 +- src/e2ee/matrixKeyProvider.test.ts | 5 +---- src/e2ee/matrixKeyProvider.ts | 4 ++-- src/grid/Grid.tsx | 2 +- src/home/CallList.test.tsx | 2 +- src/home/CallList.tsx | 2 +- src/home/RegisteredView.tsx | 4 ++-- src/home/UnauthenticatedView.tsx | 2 +- src/home/useGroupCallRooms.ts | 8 ++++---- src/initializer.tsx | 2 +- src/livekit/MediaDevicesContext.tsx | 2 +- src/livekit/openIDSFU.ts | 8 ++++---- src/livekit/useECConnectionState.ts | 2 +- src/livekit/useLiveKit.ts | 4 ++-- src/main.tsx | 4 ++-- src/otel/OTelCall.ts | 2 +- src/otel/OTelGroupCallMembership.ts | 4 ++-- src/otel/otel.ts | 2 +- src/profile/useProfile.ts | 4 ++-- src/reactions/ReactionsReader.test.tsx | 4 ++-- src/reactions/ReactionsReader.ts | 8 ++++---- src/reactions/useReactionsSender.tsx | 6 +++--- src/room/AppSelectionModal.tsx | 2 +- src/room/CallEndedView.tsx | 4 ++-- src/room/CallEventAudioRenderer.test.tsx | 2 +- src/room/GroupCallView.test.tsx | 8 ++++---- src/room/GroupCallView.tsx | 8 ++++---- src/room/InCallView.tsx | 6 +++--- src/room/InviteModal.test.tsx | 2 +- src/room/InviteModal.tsx | 2 +- src/room/LobbyView.tsx | 4 ++-- src/room/MuteStates.ts | 2 +- src/room/RoomAuthView.tsx | 2 +- src/room/RoomPage.tsx | 2 +- src/room/useActiveFocus.ts | 6 +++--- src/room/useJoinRule.ts | 4 ++-- src/room/useLoadGroupCall.ts | 8 ++++---- src/room/useRoomAvatar.ts | 2 +- src/room/useRoomName.ts | 2 +- src/room/useRoomState.ts | 6 +----- src/room/useSwitchCamera.ts | 2 +- src/rtcSessionHelpers.test.ts | 4 ++-- src/rtcSessionHelpers.ts | 8 ++++---- src/settings/DeveloperSettingsTab.tsx | 2 +- src/settings/FeedbackSettingsTab.tsx | 2 +- src/settings/ProfileSettingsTab.tsx | 4 ++-- src/settings/RageshakeButton.tsx | 2 +- src/settings/SettingsModal.tsx | 2 +- src/settings/rageshake.ts | 2 +- src/settings/settings.ts | 2 +- src/settings/submit-rageshake.ts | 4 ++-- src/soundUtils.ts | 2 +- src/state/CallViewModel.test.ts | 7 ++----- src/state/CallViewModel.ts | 10 +++------- src/state/MediaViewModel.ts | 2 +- src/state/TileStore.ts | 2 +- src/tile/GridTile.test.tsx | 2 +- src/tile/MediaView.tsx | 2 +- src/tile/SpotlightTile.tsx | 2 +- src/useAudioContext.tsx | 2 +- src/useEvents.ts | 2 +- src/useMatrixRTCSessionJoinState.ts | 4 ++-- src/useMatrixRTCSessionMemberships.ts | 6 +++--- src/useWakeLock.ts | 2 +- src/utils/displayname.ts | 4 ++-- src/utils/matrix.ts | 8 ++++---- src/utils/spa.ts | 4 ++-- src/utils/test-viewmodel.ts | 9 +++------ src/utils/test.ts | 4 ++-- src/vitest.setup.ts | 2 +- src/widget.ts | 8 ++++---- tsconfig.json | 6 +----- 90 files changed, 152 insertions(+), 173 deletions(-) diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index fb259637..2922ca06 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import "matrix-js-sdk/src/@types/global"; +import "matrix-js-sdk/lib/types"; import { type setLogLevel as setLKLogLevel } from "livekit-client"; import type { DurationFormat as PolyfillDurationFormat } from "@formatjs/intl-durationformat"; diff --git a/src/App.tsx b/src/App.tsx index 5b74b4dd..549a98f2 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -9,7 +9,7 @@ import { type FC, type JSX, Suspense, useEffect, useState } from "react"; import { BrowserRouter, Route, useLocation, Routes } from "react-router-dom"; import * as Sentry from "@sentry/react"; import { TooltipProvider } from "@vector-im/compound-web"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { HomePage } from "./home/HomePage"; import { LoginPage } from "./auth/LoginPage"; diff --git a/src/Avatar.test.tsx b/src/Avatar.test.tsx index 0f2d3464..a02963e0 100644 --- a/src/Avatar.test.tsx +++ b/src/Avatar.test.tsx @@ -7,7 +7,7 @@ Please see LICENSE in the repository root for full details. import { afterEach, expect, test, vi } from "vitest"; import { render, screen } from "@testing-library/react"; -import { type MatrixClient } from "matrix-js-sdk/src/client"; +import { type MatrixClient } from "matrix-js-sdk"; import { type FC, type PropsWithChildren } from "react"; import { ClientContextProvider } from "./ClientContext"; diff --git a/src/Avatar.tsx b/src/Avatar.tsx index 1a9bac89..d862dbb1 100644 --- a/src/Avatar.tsx +++ b/src/Avatar.tsx @@ -13,7 +13,7 @@ import { useEffect, } from "react"; import { Avatar as CompoundAvatar } from "@vector-im/compound-web"; -import { type MatrixClient } from "matrix-js-sdk/src/client"; +import { type MatrixClient } from "matrix-js-sdk"; import { useClientState } from "./ClientContext"; diff --git a/src/ClientContext.tsx b/src/ClientContext.tsx index 0fbff564..25db3ca0 100644 --- a/src/ClientContext.tsx +++ b/src/ClientContext.tsx @@ -17,9 +17,9 @@ import { type JSX, } from "react"; import { useNavigate } from "react-router-dom"; -import { logger } from "matrix-js-sdk/src/logger"; -import { type ISyncStateData, type SyncState } from "matrix-js-sdk/src/sync"; -import { ClientEvent, type MatrixClient } from "matrix-js-sdk/src/client"; +import { logger } from "matrix-js-sdk/lib/logger"; +import { type ISyncStateData, type SyncState } from "matrix-js-sdk/lib/sync"; +import { ClientEvent, type MatrixClient } from "matrix-js-sdk"; import type { WidgetApi } from "matrix-widget-api"; import { ErrorPage } from "./FullScreenView"; diff --git a/src/ErrorView.tsx b/src/ErrorView.tsx index 8da84ba9..ed4103c5 100644 --- a/src/ErrorView.tsx +++ b/src/ErrorView.tsx @@ -15,7 +15,7 @@ import { type ReactElement, } from "react"; import { useTranslation } from "react-i18next"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { RageshakeButton } from "./settings/RageshakeButton"; import styles from "./ErrorView.module.css"; diff --git a/src/FullScreenView.tsx b/src/FullScreenView.tsx index c8655229..e3c33480 100644 --- a/src/FullScreenView.tsx +++ b/src/FullScreenView.tsx @@ -9,7 +9,7 @@ import { type FC, type ReactElement, type ReactNode, useEffect } from "react"; import classNames from "classnames"; import { useTranslation } from "react-i18next"; import * as Sentry from "@sentry/react"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { ErrorIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; import { Header, HeaderLogo, LeftNav, RightNav } from "./Header"; diff --git a/src/IndexedDBWorker.ts b/src/IndexedDBWorker.ts index c40e83c7..478c2b02 100644 --- a/src/IndexedDBWorker.ts +++ b/src/IndexedDBWorker.ts @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { IndexedDBStoreWorker } from "matrix-js-sdk/src/indexeddb-worker"; +import { IndexedDBStoreWorker } from "matrix-js-sdk/lib/indexeddb-worker"; // eslint-disable-next-line @typescript-eslint/no-explicit-any const remoteWorker = new IndexedDBStoreWorker((self as any).postMessage); diff --git a/src/UrlParams.ts b/src/UrlParams.ts index fda4a95f..4cf24704 100644 --- a/src/UrlParams.ts +++ b/src/UrlParams.ts @@ -7,7 +7,7 @@ Please see LICENSE in the repository root for full details. import { useMemo } from "react"; import { useLocation } from "react-router-dom"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { Config } from "./config/Config"; import { type EncryptionSystem } from "./e2ee/sharedKeyManagement"; diff --git a/src/UserMenuContainer.tsx b/src/UserMenuContainer.tsx index e50154a6..edc2f118 100644 --- a/src/UserMenuContainer.tsx +++ b/src/UserMenuContainer.tsx @@ -7,7 +7,7 @@ Please see LICENSE in the repository root for full details. import { type FC, useCallback, useState } from "react"; import { useNavigate, useLocation } from "react-router-dom"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { useClientLegacy } from "./ClientContext"; import { useProfile } from "./profile/useProfile"; diff --git a/src/analytics/PosthogAnalytics.ts b/src/analytics/PosthogAnalytics.ts index e0e7d9e9..23a1fbb0 100644 --- a/src/analytics/PosthogAnalytics.ts +++ b/src/analytics/PosthogAnalytics.ts @@ -10,8 +10,8 @@ import posthog, { type PostHog, type Properties, } from "posthog-js"; -import { logger } from "matrix-js-sdk/src/logger"; -import { type MatrixClient } from "matrix-js-sdk/src/matrix"; +import { logger } from "matrix-js-sdk/lib/logger"; +import { type MatrixClient } from "matrix-js-sdk"; import { Buffer } from "buffer"; import { widget } from "../widget"; diff --git a/src/analytics/PosthogEvents.ts b/src/analytics/PosthogEvents.ts index 39d560b3..f0f059f5 100644 --- a/src/analytics/PosthogEvents.ts +++ b/src/analytics/PosthogEvents.ts @@ -6,8 +6,8 @@ Please see LICENSE in the repository root for full details. */ import { type DisconnectReason } from "livekit-client"; -import { logger } from "matrix-js-sdk/src/logger"; -import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc"; +import { logger } from "matrix-js-sdk/lib/logger"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; import { type IPosthogEvent, diff --git a/src/analytics/PosthogSpanProcessor.ts b/src/analytics/PosthogSpanProcessor.ts index 176a2104..a0046200 100644 --- a/src/analytics/PosthogSpanProcessor.ts +++ b/src/analytics/PosthogSpanProcessor.ts @@ -11,7 +11,7 @@ import { type Span, } from "@opentelemetry/sdk-trace-base"; import { hrTimeToMilliseconds } from "@opentelemetry/core"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { PosthogAnalytics } from "./PosthogAnalytics"; diff --git a/src/auth/RegisterPage.tsx b/src/auth/RegisterPage.tsx index bb2c09a4..bad7b7e6 100644 --- a/src/auth/RegisterPage.tsx +++ b/src/auth/RegisterPage.tsx @@ -18,7 +18,7 @@ import { useNavigate, useLocation } from "react-router-dom"; import { captureException } from "@sentry/react"; import { sleep } from "matrix-js-sdk/src/utils"; import { Trans, useTranslation } from "react-i18next"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { Button, Text } from "@vector-im/compound-web"; import { FieldRow, InputField, ErrorMessage } from "../input/Input"; diff --git a/src/auth/useInteractiveLogin.ts b/src/auth/useInteractiveLogin.ts index 2a6d35fa..b255c1bf 100644 --- a/src/auth/useInteractiveLogin.ts +++ b/src/auth/useInteractiveLogin.ts @@ -11,7 +11,7 @@ import { createClient, type LoginResponse, type MatrixClient, -} from "matrix-js-sdk/src/matrix"; +} from "matrix-js-sdk"; import { initClient } from "../utils/matrix"; import { type Session } from "../ClientContext"; diff --git a/src/auth/useInteractiveRegistration.ts b/src/auth/useInteractiveRegistration.ts index d486cd3d..983d0a71 100644 --- a/src/auth/useInteractiveRegistration.ts +++ b/src/auth/useInteractiveRegistration.ts @@ -11,8 +11,8 @@ import { createClient, type MatrixClient, type RegisterResponse, -} from "matrix-js-sdk/src/matrix"; -import { logger } from "matrix-js-sdk/src/logger"; +} from "matrix-js-sdk"; +import { logger } from "matrix-js-sdk/lib/logger"; import { initClient } from "../utils/matrix"; import { type Session } from "../ClientContext"; diff --git a/src/auth/useRecaptcha.ts b/src/auth/useRecaptcha.ts index 1abf7f27..9d24eb83 100644 --- a/src/auth/useRecaptcha.ts +++ b/src/auth/useRecaptcha.ts @@ -8,7 +8,7 @@ Please see LICENSE in the repository root for full details. import { useEffect, useCallback, useRef, useState } from "react"; import { secureRandomString } from "matrix-js-sdk/src/randomstring"; import { useTranslation } from "react-i18next"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { translatedError } from "../TranslatedError"; declare global { diff --git a/src/button/ReactionToggleButton.test.tsx b/src/button/ReactionToggleButton.test.tsx index 90865d25..269eabed 100644 --- a/src/button/ReactionToggleButton.test.tsx +++ b/src/button/ReactionToggleButton.test.tsx @@ -10,7 +10,7 @@ import { expect, test } from "vitest"; import { TooltipProvider } from "@vector-im/compound-web"; import { userEvent } from "@testing-library/user-event"; import { type ReactNode } from "react"; -import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; import { ReactionToggleButton } from "./ReactionToggleButton"; import { ElementCallReactionEventType } from "../reactions"; diff --git a/src/button/ReactionToggleButton.tsx b/src/button/ReactionToggleButton.tsx index 68988581..f1a6f0aa 100644 --- a/src/button/ReactionToggleButton.tsx +++ b/src/button/ReactionToggleButton.tsx @@ -22,7 +22,7 @@ import { useState, } from "react"; import { useTranslation } from "react-i18next"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import classNames from "classnames"; import { useObservableState } from "observable-hooks"; import { map } from "rxjs"; diff --git a/src/e2ee/matrixKeyProvider.test.ts b/src/e2ee/matrixKeyProvider.test.ts index 48781759..aa224792 100644 --- a/src/e2ee/matrixKeyProvider.test.ts +++ b/src/e2ee/matrixKeyProvider.test.ts @@ -6,10 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { describe, expect, test, vi } from "vitest"; -import { - type MatrixRTCSession, - MatrixRTCSessionEvent, -} from "matrix-js-sdk/src/matrixrtc"; +import { type MatrixRTCSession, MatrixRTCSessionEvent } from "matrix-js-sdk/lib/matrixrtc"; import { KeyProviderEvent } from "livekit-client"; import { MatrixKeyProvider } from "./matrixKeyProvider"; diff --git a/src/e2ee/matrixKeyProvider.ts b/src/e2ee/matrixKeyProvider.ts index 3b066d95..c5f6c879 100644 --- a/src/e2ee/matrixKeyProvider.ts +++ b/src/e2ee/matrixKeyProvider.ts @@ -6,11 +6,11 @@ Please see LICENSE in the repository root for full details. */ import { BaseKeyProvider, createKeyMaterialFromBuffer } from "livekit-client"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { type MatrixRTCSession, MatrixRTCSessionEvent, -} from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; +} from "matrix-js-sdk/lib/matrixrtc"; export class MatrixKeyProvider extends BaseKeyProvider { private rtcSession?: MatrixRTCSession; diff --git a/src/grid/Grid.tsx b/src/grid/Grid.tsx index d1df51f9..65525446 100644 --- a/src/grid/Grid.tsx +++ b/src/grid/Grid.tsx @@ -32,7 +32,7 @@ import { } from "react"; import useMeasure from "react-use-measure"; import classNames from "classnames"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { useObservableEagerState } from "observable-hooks"; import { fromEvent, map, startWith } from "rxjs"; diff --git a/src/home/CallList.test.tsx b/src/home/CallList.test.tsx index b898bd70..ad0d06e0 100644 --- a/src/home/CallList.test.tsx +++ b/src/home/CallList.test.tsx @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { render, type RenderResult } from "@testing-library/react"; -import { type MatrixClient } from "matrix-js-sdk/src/matrix"; +import { type MatrixClient } from "matrix-js-sdk"; import { MemoryRouter } from "react-router-dom"; import { describe, expect, it } from "vitest"; diff --git a/src/home/CallList.tsx b/src/home/CallList.tsx index efc3a08d..a176b14d 100644 --- a/src/home/CallList.tsx +++ b/src/home/CallList.tsx @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { Link } from "react-router-dom"; -import { type MatrixClient } from "matrix-js-sdk/src/client"; +import { type MatrixClient } from "matrix-js-sdk"; import { type RoomMember } from "matrix-js-sdk/src/models/room-member"; import { type Room } from "matrix-js-sdk/src/models/room"; import { type FC, useCallback, type MouseEvent, useState } from "react"; diff --git a/src/home/RegisteredView.tsx b/src/home/RegisteredView.tsx index 9d44dfc5..af2d5f26 100644 --- a/src/home/RegisteredView.tsx +++ b/src/home/RegisteredView.tsx @@ -12,10 +12,10 @@ import { type FormEventHandler, type FC, } from "react"; -import { type MatrixClient } from "matrix-js-sdk/src/client"; +import { type MatrixClient } from "matrix-js-sdk"; import { useTranslation } from "react-i18next"; import { Heading, Text } from "@vector-im/compound-web"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { Button } from "@vector-im/compound-web"; import { useNavigate } from "react-router-dom"; diff --git a/src/home/UnauthenticatedView.tsx b/src/home/UnauthenticatedView.tsx index ced13985..f3d56668 100644 --- a/src/home/UnauthenticatedView.tsx +++ b/src/home/UnauthenticatedView.tsx @@ -9,7 +9,7 @@ import { type FC, useCallback, useState, type FormEventHandler } from "react"; import { secureRandomString } from "matrix-js-sdk/src/randomstring"; import { Trans, useTranslation } from "react-i18next"; import { Button, Heading, Text } from "@vector-im/compound-web"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { useNavigate } from "react-router-dom"; import { useClient } from "../ClientContext"; diff --git a/src/home/useGroupCallRooms.ts b/src/home/useGroupCallRooms.ts index 349275f3..799b287c 100644 --- a/src/home/useGroupCallRooms.ts +++ b/src/home/useGroupCallRooms.ts @@ -5,13 +5,13 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type MatrixClient } from "matrix-js-sdk/src/client"; +import { type MatrixClient } from "matrix-js-sdk"; import { type Room, RoomEvent } from "matrix-js-sdk/src/models/room"; import { type RoomMember } from "matrix-js-sdk/src/models/room-member"; import { useState, useEffect } from "react"; -import { EventTimeline, EventType, JoinRule } from "matrix-js-sdk/src/matrix"; -import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; -import { MatrixRTCSessionManagerEvents } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSessionManager"; +import { EventTimeline, EventType, JoinRule } from "matrix-js-sdk"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; +import { MatrixRTCSessionManagerEvents } from "matrix-js-sdk/lib/matrixrtcManager"; import { KnownMembership } from "matrix-js-sdk/src/types"; import { getKeyForRoom } from "../e2ee/sharedKeyManagement"; diff --git a/src/initializer.tsx b/src/initializer.tsx index 0879490b..24e298cd 100644 --- a/src/initializer.tsx +++ b/src/initializer.tsx @@ -14,7 +14,7 @@ import i18n, { import { initReactI18next } from "react-i18next"; import LanguageDetector from "i18next-browser-languagedetector"; import * as Sentry from "@sentry/react"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { shouldPolyfill as shouldPolyfillSegmenter } from "@formatjs/intl-segmenter/should-polyfill"; import { shouldPolyfill as shouldPolyfillDurationFormat } from "@formatjs/intl-durationformat/should-polyfill"; import { diff --git a/src/livekit/MediaDevicesContext.tsx b/src/livekit/MediaDevicesContext.tsx index 2c2a62bb..c2fc63e5 100644 --- a/src/livekit/MediaDevicesContext.tsx +++ b/src/livekit/MediaDevicesContext.tsx @@ -19,7 +19,7 @@ import { import { createMediaDeviceObserver } from "@livekit/components-core"; import { map, startWith } from "rxjs"; import { useObservableEagerState } from "observable-hooks"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { useSetting, diff --git a/src/livekit/openIDSFU.ts b/src/livekit/openIDSFU.ts index 0f455a38..0c7f36db 100644 --- a/src/livekit/openIDSFU.ts +++ b/src/livekit/openIDSFU.ts @@ -5,11 +5,11 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type IOpenIDToken, type MatrixClient } from "matrix-js-sdk/src/matrix"; -import { logger } from "matrix-js-sdk/src/logger"; -import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; +import { type IOpenIDToken, type MatrixClient } from "matrix-js-sdk"; +import { logger } from "matrix-js-sdk/lib/logger"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; import { useEffect, useState } from "react"; -import { type LivekitFocus } from "matrix-js-sdk/src/matrixrtc/LivekitFocus"; +import { type LivekitFocus } from "matrix-js-sdk/lib/matrixrtc"; import { useActiveLivekitFocus } from "../room/useActiveFocus"; diff --git a/src/livekit/useECConnectionState.ts b/src/livekit/useECConnectionState.ts index e575abef..5ae2537b 100644 --- a/src/livekit/useECConnectionState.ts +++ b/src/livekit/useECConnectionState.ts @@ -15,7 +15,7 @@ import { Track, } from "livekit-client"; import { useCallback, useEffect, useRef, useState } from "react"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import * as Sentry from "@sentry/react"; import { type SFUConfig, sfuConfigEquals } from "./openIDSFU"; diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLiveKit.ts index ef4c0ef7..0500a04d 100644 --- a/src/livekit/useLiveKit.ts +++ b/src/livekit/useLiveKit.ts @@ -15,8 +15,8 @@ import { } from "livekit-client"; import { useEffect, useMemo, useRef } from "react"; import E2EEWorker from "livekit-client/e2ee-worker?worker"; -import { logger } from "matrix-js-sdk/src/logger"; -import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; +import { logger } from "matrix-js-sdk/lib/logger"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; import { defaultLiveKitOptions } from "./options"; import { type SFUConfig } from "./openIDSFU"; diff --git a/src/main.tsx b/src/main.tsx index f6200e0e..bfa20443 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -9,12 +9,12 @@ Please see LICENSE in the repository root for full details. // function gets set. It needs to be not in the same file as we use // createClient, or the typescript transpiler gets confused about // dependency references. -import "matrix-js-sdk/src/browser-index"; +import "matrix-js-sdk/lib/browser-index"; import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import "./index.css"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { setLogExtension as setLKLogExtension, setLogLevel as setLKLogLevel, diff --git a/src/otel/OTelCall.ts b/src/otel/OTelCall.ts index c1b525d9..f212ef67 100644 --- a/src/otel/OTelCall.ts +++ b/src/otel/OTelCall.ts @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { type Span } from "@opentelemetry/api"; -import { type MatrixCall } from "matrix-js-sdk/src/matrix"; +import { type MatrixCall } from "matrix-js-sdk"; import { CallEvent } from "matrix-js-sdk/src/webrtc/call"; import { type TransceiverStats, diff --git a/src/otel/OTelGroupCallMembership.ts b/src/otel/OTelGroupCallMembership.ts index b4ca5e2d..7445a2cb 100644 --- a/src/otel/OTelGroupCallMembership.ts +++ b/src/otel/OTelGroupCallMembership.ts @@ -15,8 +15,8 @@ import { type MatrixClient, type MatrixEvent, type RoomMember, -} from "matrix-js-sdk/src/matrix"; -import { logger } from "matrix-js-sdk/src/logger"; +} from "matrix-js-sdk"; +import { logger } from "matrix-js-sdk/lib/logger"; import { type CallError, type CallState, diff --git a/src/otel/otel.ts b/src/otel/otel.ts index 6bd1ee4c..4cfd0018 100644 --- a/src/otel/otel.ts +++ b/src/otel/otel.ts @@ -11,7 +11,7 @@ import { WebTracerProvider } from "@opentelemetry/sdk-trace-web"; import opentelemetry, { type Tracer } from "@opentelemetry/api"; import { Resource } from "@opentelemetry/resources"; import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { PosthogSpanProcessor } from "../analytics/PosthogSpanProcessor"; import { Config } from "../config/Config"; diff --git a/src/profile/useProfile.ts b/src/profile/useProfile.ts index 1fb545fe..bc68d30b 100644 --- a/src/profile/useProfile.ts +++ b/src/profile/useProfile.ts @@ -5,12 +5,12 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type MatrixClient } from "matrix-js-sdk/src/client"; +import { type MatrixClient } from "matrix-js-sdk"; import { type MatrixEvent } from "matrix-js-sdk/src/models/event"; import { type User, UserEvent } from "matrix-js-sdk/src/models/user"; import { type FileType } from "matrix-js-sdk/src/http-api"; import { useState, useCallback, useEffect } from "react"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; interface ProfileLoadState { success: boolean; diff --git a/src/reactions/ReactionsReader.test.tsx b/src/reactions/ReactionsReader.test.tsx index 43928fa4..b8acf5c7 100644 --- a/src/reactions/ReactionsReader.test.tsx +++ b/src/reactions/ReactionsReader.test.tsx @@ -7,14 +7,14 @@ Please see LICENSE in the repository root for full details. import { renderHook } from "@testing-library/react"; import { afterEach, test, vitest } from "vitest"; -import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; import { RoomEvent as MatrixRoomEvent, MatrixEvent, type IRoomTimelineData, EventType, MatrixEventEvent, -} from "matrix-js-sdk/src/matrix"; +} from "matrix-js-sdk"; import { ReactionsReader, REACTION_ACTIVE_TIME_MS } from "./ReactionsReader"; import { diff --git a/src/reactions/ReactionsReader.ts b/src/reactions/ReactionsReader.ts index bcddd03d..ae9fa4e3 100644 --- a/src/reactions/ReactionsReader.ts +++ b/src/reactions/ReactionsReader.ts @@ -9,15 +9,15 @@ import { type CallMembership, MatrixRTCSessionEvent, type MatrixRTCSession, -} from "matrix-js-sdk/src/matrixrtc"; -import { logger } from "matrix-js-sdk/src/logger"; -import { type MatrixEvent, MatrixEventEvent } from "matrix-js-sdk/src/matrix"; +} from "matrix-js-sdk/lib/matrixrtc"; +import { logger } from "matrix-js-sdk/lib/logger"; +import { type MatrixEvent, MatrixEventEvent } from "matrix-js-sdk"; import { type ReactionEventContent } from "matrix-js-sdk/src/types"; import { RelationType, EventType, RoomEvent as MatrixRoomEvent, -} from "matrix-js-sdk/src/matrix"; +} from "matrix-js-sdk"; import { BehaviorSubject, delay, type Subscription } from "rxjs"; import { diff --git a/src/reactions/useReactionsSender.tsx b/src/reactions/useReactionsSender.tsx index ec692f52..85f1505c 100644 --- a/src/reactions/useReactionsSender.tsx +++ b/src/reactions/useReactionsSender.tsx @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { EventType, RelationType } from "matrix-js-sdk/src/matrix"; +import { EventType, RelationType } from "matrix-js-sdk"; import { createContext, useContext, @@ -14,8 +14,8 @@ import { useMemo, type JSX, } from "react"; -import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; -import { logger } from "matrix-js-sdk/src/logger"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; +import { logger } from "matrix-js-sdk/lib/logger"; import { useObservableEagerState } from "observable-hooks"; import { useMatrixRTCSessionMemberships } from "../useMatrixRTCSessionMemberships"; diff --git a/src/room/AppSelectionModal.tsx b/src/room/AppSelectionModal.tsx index 84827add..c57abfca 100644 --- a/src/room/AppSelectionModal.tsx +++ b/src/room/AppSelectionModal.tsx @@ -15,7 +15,7 @@ import { import { useTranslation } from "react-i18next"; import { Button, Text } from "@vector-im/compound-web"; import { PopOutIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { Modal } from "../Modal"; import { useRoomEncryptionSystem } from "../e2ee/sharedKeyManagement"; diff --git a/src/room/CallEndedView.tsx b/src/room/CallEndedView.tsx index 88f84a24..43aa96e2 100644 --- a/src/room/CallEndedView.tsx +++ b/src/room/CallEndedView.tsx @@ -6,11 +6,11 @@ Please see LICENSE in the repository root for full details. */ import { type FC, type FormEventHandler, useCallback, useState } from "react"; -import { type MatrixClient } from "matrix-js-sdk/src/client"; +import { type MatrixClient } from "matrix-js-sdk"; import { Trans, useTranslation } from "react-i18next"; import { Button, Heading, Text } from "@vector-im/compound-web"; import { useNavigate } from "react-router-dom"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import styles from "./CallEndedView.module.css"; import feedbackStyle from "../input/FeedbackInput.module.css"; diff --git a/src/room/CallEventAudioRenderer.test.tsx b/src/room/CallEventAudioRenderer.test.tsx index a4eae058..281bbafd 100644 --- a/src/room/CallEventAudioRenderer.test.tsx +++ b/src/room/CallEventAudioRenderer.test.tsx @@ -16,7 +16,7 @@ import { afterEach, } from "vitest"; import { act } from "react"; -import { type CallMembership } from "matrix-js-sdk/src/matrixrtc"; +import { type CallMembership } from "matrix-js-sdk/lib/matrixrtc"; import { mockRtcMembership } from "../utils/test"; import { diff --git a/src/room/GroupCallView.test.tsx b/src/room/GroupCallView.test.tsx index 0a57d081..aad1827b 100644 --- a/src/room/GroupCallView.test.tsx +++ b/src/room/GroupCallView.test.tsx @@ -7,13 +7,13 @@ Please see LICENSE in the repository root for full details. import { beforeEach, expect, type MockedFunction, test, vitest } from "vitest"; import { render, waitFor, screen } from "@testing-library/react"; -import { type MatrixClient } from "matrix-js-sdk/src/client"; -import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc"; +import { type MatrixClient } from "matrix-js-sdk"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; import { of } from "rxjs"; -import { JoinRule, type RoomState } from "matrix-js-sdk/src/matrix"; +import { JoinRule, type RoomState } from "matrix-js-sdk"; import { BrowserRouter } from "react-router-dom"; import userEvent from "@testing-library/user-event"; -import { type RelationsContainer } from "matrix-js-sdk/src/models/relations-container"; +import { type RelationsContainer } from "matrix-js-sdk"; import { useState } from "react"; import { type MuteStates } from "./MuteStates"; diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index 9ebd7e3b..06fcfa4e 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -13,17 +13,17 @@ import { useMemo, useState, } from "react"; -import { type MatrixClient } from "matrix-js-sdk/src/client"; +import { type MatrixClient } from "matrix-js-sdk"; import { Room as LivekitRoom, isE2EESupported as isE2EESupportedBrowser, } from "livekit-client"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { MatrixRTCSessionEvent, type MatrixRTCSession, -} from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; -import { JoinRule, type Room } from "matrix-js-sdk/src/matrix"; +} from "matrix-js-sdk/lib/matrixrtc"; +import { JoinRule, type Room } from "matrix-js-sdk"; import { useNavigate } from "react-router-dom"; import type { IWidgetApiRequest } from "matrix-widget-api"; diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 17ca63bb..53742fc2 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -11,7 +11,7 @@ import { useLocalParticipant, } from "@livekit/components-react"; import { ConnectionState, type Room } from "livekit-client"; -import { type MatrixClient } from "matrix-js-sdk/src/client"; +import { type MatrixClient } from "matrix-js-sdk"; import { type FC, type PointerEvent, @@ -26,11 +26,11 @@ import { type JSX, } from "react"; import useMeasure from "react-use-measure"; -import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; import classNames from "classnames"; import { BehaviorSubject, map } from "rxjs"; import { useObservable, useObservableEagerState } from "observable-hooks"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import LogoMark from "../icons/LogoMark.svg?react"; import LogoType from "../icons/LogoType.svg?react"; diff --git a/src/room/InviteModal.test.tsx b/src/room/InviteModal.test.tsx index bb1a4c2b..79f3f928 100644 --- a/src/room/InviteModal.test.tsx +++ b/src/room/InviteModal.test.tsx @@ -7,7 +7,7 @@ Please see LICENSE in the repository root for full details. import { render, screen } from "@testing-library/react"; import { expect, test, vi } from "vitest"; -import { type Room } from "matrix-js-sdk/src/matrix"; +import { type Room } from "matrix-js-sdk"; import { axe } from "vitest-axe"; import { BrowserRouter } from "react-router-dom"; import userEvent from "@testing-library/user-event"; diff --git a/src/room/InviteModal.tsx b/src/room/InviteModal.tsx index a5a86233..8ee68cb8 100644 --- a/src/room/InviteModal.tsx +++ b/src/room/InviteModal.tsx @@ -13,7 +13,7 @@ import { useState, } from "react"; import { useTranslation } from "react-i18next"; -import { type Room } from "matrix-js-sdk/src/matrix"; +import { type Room } from "matrix-js-sdk"; import { Button, Text } from "@vector-im/compound-web"; import { LinkIcon, diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index 66458fb6..0a93675e 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -7,10 +7,10 @@ Please see LICENSE in the repository root for full details. import { type FC, useCallback, useMemo, useState, type JSX } from "react"; import { useTranslation } from "react-i18next"; -import { type MatrixClient } from "matrix-js-sdk/src/matrix"; +import { type MatrixClient } from "matrix-js-sdk"; import { Button } from "@vector-im/compound-web"; import classNames from "classnames"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { usePreviewTracks } from "@livekit/components-react"; import { type LocalVideoTrack, Track } from "livekit-client"; import { useObservable } from "observable-hooks"; diff --git a/src/room/MuteStates.ts b/src/room/MuteStates.ts index ecf7cf44..e57ba7d5 100644 --- a/src/room/MuteStates.ts +++ b/src/room/MuteStates.ts @@ -13,7 +13,7 @@ import { useMemo, } from "react"; import { type IWidgetApiRequest } from "matrix-widget-api"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { type MediaDevice, diff --git a/src/room/RoomAuthView.tsx b/src/room/RoomAuthView.tsx index 645bd18b..d01089cc 100644 --- a/src/room/RoomAuthView.tsx +++ b/src/room/RoomAuthView.tsx @@ -8,7 +8,7 @@ Please see LICENSE in the repository root for full details. import { type FC, useCallback, useState } from "react"; import { useLocation } from "react-router-dom"; import { Trans, useTranslation } from "react-i18next"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { Button, Heading, Text } from "@vector-im/compound-web"; import styles from "./RoomAuthView.module.css"; diff --git a/src/room/RoomPage.tsx b/src/room/RoomPage.tsx index e96790c5..58039aaa 100644 --- a/src/room/RoomPage.tsx +++ b/src/room/RoomPage.tsx @@ -13,7 +13,7 @@ import { useRef, type JSX, } from "react"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { Trans, useTranslation } from "react-i18next"; import { CheckIcon, diff --git a/src/room/useActiveFocus.ts b/src/room/useActiveFocus.ts index f478eb63..28012643 100644 --- a/src/room/useActiveFocus.ts +++ b/src/room/useActiveFocus.ts @@ -8,14 +8,14 @@ Please see LICENSE in the repository root for full details. import { type MatrixRTCSession, MatrixRTCSessionEvent, -} from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; +} from "matrix-js-sdk/lib/matrixrtc"; import { useCallback, useEffect, useState } from "react"; import { deepCompare } from "matrix-js-sdk/src/utils"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { type LivekitFocus, isLivekitFocus, -} from "matrix-js-sdk/src/matrixrtc/LivekitFocus"; +} from "matrix-js-sdk/lib/matrixrtc"; /** * Gets the currently active (livekit) focus for a MatrixRTC session diff --git a/src/room/useJoinRule.ts b/src/room/useJoinRule.ts index 1e1cb059..d2a7143f 100644 --- a/src/room/useJoinRule.ts +++ b/src/room/useJoinRule.ts @@ -6,9 +6,9 @@ Please see LICENSE in the repository root for full details. */ import { useCallback } from "react"; -import { type JoinRule } from "matrix-js-sdk/src/matrix"; +import { type JoinRule } from "matrix-js-sdk"; -import type { Room } from "matrix-js-sdk/src/models/room"; +import type { Room } from "matrix-js-sdk"; import { useRoomState } from "./useRoomState"; export function useJoinRule(room: Room): JoinRule { diff --git a/src/room/useLoadGroupCall.ts b/src/room/useLoadGroupCall.ts index 9000ffd5..e53dc3b5 100644 --- a/src/room/useLoadGroupCall.ts +++ b/src/room/useLoadGroupCall.ts @@ -13,18 +13,18 @@ import { type ComponentType, type SVGAttributes, } from "react"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { EventType } from "matrix-js-sdk/src/@types/event"; import { ClientEvent, type MatrixClient, type RoomSummary, -} from "matrix-js-sdk/src/client"; +} from "matrix-js-sdk"; import { SyncState } from "matrix-js-sdk/src/sync"; -import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; import { RoomEvent, type Room } from "matrix-js-sdk/src/models/room"; import { KnownMembership } from "matrix-js-sdk/src/types"; -import { JoinRule, MatrixError } from "matrix-js-sdk/src/matrix"; +import { JoinRule, MatrixError } from "matrix-js-sdk"; import { useTranslation } from "react-i18next"; import { AdminIcon, diff --git a/src/room/useRoomAvatar.ts b/src/room/useRoomAvatar.ts index 2e84338e..7287c652 100644 --- a/src/room/useRoomAvatar.ts +++ b/src/room/useRoomAvatar.ts @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { useCallback } from "react"; -import { type Room } from "matrix-js-sdk/src/models/room"; +import { type Room } from "matrix-js-sdk"; import { useRoomState } from "./useRoomState"; diff --git a/src/room/useRoomName.ts b/src/room/useRoomName.ts index 2994a602..2b7459a3 100644 --- a/src/room/useRoomName.ts +++ b/src/room/useRoomName.ts @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { type Room, RoomEvent } from "matrix-js-sdk"; import { useState } from "react"; import { useTypedEventEmitter } from "../useEvents"; diff --git a/src/room/useRoomState.ts b/src/room/useRoomState.ts index f7ddfc17..51a209ab 100644 --- a/src/room/useRoomState.ts +++ b/src/room/useRoomState.ts @@ -5,13 +5,9 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { - type RoomState, - RoomStateEvent, -} from "matrix-js-sdk/src/models/room-state"; import { useCallback, useMemo, useState } from "react"; +import { type RoomState, RoomStateEvent, type Room } from "matrix-js-sdk"; -import type { Room } from "matrix-js-sdk/src/models/room"; import { useTypedEventEmitter } from "../useEvents"; /** diff --git a/src/room/useSwitchCamera.ts b/src/room/useSwitchCamera.ts index 67880fb9..121ffb10 100644 --- a/src/room/useSwitchCamera.ts +++ b/src/room/useSwitchCamera.ts @@ -20,7 +20,7 @@ import { TrackEvent, } from "livekit-client"; import { useObservable, useObservableEagerState } from "observable-hooks"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { useMediaDevices } from "../livekit/MediaDevicesContext"; import { platform } from "../Platform"; diff --git a/src/rtcSessionHelpers.test.ts b/src/rtcSessionHelpers.test.ts index 8d0b95d3..fe7465b3 100644 --- a/src/rtcSessionHelpers.test.ts +++ b/src/rtcSessionHelpers.test.ts @@ -5,9 +5,9 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; import { expect, onTestFinished, test, vi } from "vitest"; -import { AutoDiscovery } from "matrix-js-sdk/src/autodiscovery"; +import { AutoDiscovery } from "matrix-js-sdk/lib/autodiscovery"; import EventEmitter from "events"; import { enterRTCSession, leaveRTCSession } from "../src/rtcSessionHelpers"; diff --git a/src/rtcSessionHelpers.ts b/src/rtcSessionHelpers.ts index 0f43fd90..eab376a8 100644 --- a/src/rtcSessionHelpers.ts +++ b/src/rtcSessionHelpers.ts @@ -5,15 +5,15 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; -import { logger } from "matrix-js-sdk/src/logger"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; +import { logger } from "matrix-js-sdk/lib/logger"; import { isLivekitFocus, isLivekitFocusConfig, type LivekitFocus, type LivekitFocusActive, -} from "matrix-js-sdk/src/matrixrtc/LivekitFocus"; -import { AutoDiscovery } from "matrix-js-sdk/src/autodiscovery"; +} from "matrix-js-sdk/lib/matrixrtc"; +import { AutoDiscovery } from "matrix-js-sdk/lib/autodiscovery"; import { PosthogAnalytics } from "./analytics/PosthogAnalytics"; import { Config } from "./config/Config"; diff --git a/src/settings/DeveloperSettingsTab.tsx b/src/settings/DeveloperSettingsTab.tsx index 7f5e236b..fa42292c 100644 --- a/src/settings/DeveloperSettingsTab.tsx +++ b/src/settings/DeveloperSettingsTab.tsx @@ -17,7 +17,7 @@ import { showConnectionStats as showConnectionStatsSetting, useNewMembershipManagerSetting, } from "./settings"; -import type { MatrixClient } from "matrix-js-sdk/src/client"; +import type { MatrixClient } from "matrix-js-sdk"; import type { Room as LivekitRoom } from "livekit-client"; import styles from "./DeveloperSettingsTab.module.css"; interface Props { diff --git a/src/settings/FeedbackSettingsTab.tsx b/src/settings/FeedbackSettingsTab.tsx index 5dcaedc3..ee9911b8 100644 --- a/src/settings/FeedbackSettingsTab.tsx +++ b/src/settings/FeedbackSettingsTab.tsx @@ -9,7 +9,7 @@ import { type ChangeEvent, type FC, useCallback } from "react"; import { secureRandomString } from "matrix-js-sdk/src/randomstring"; import { Trans, useTranslation } from "react-i18next"; import { Button, Text } from "@vector-im/compound-web"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { FieldRow, InputField, ErrorMessage } from "../input/Input"; import { useSubmitRageshake, useRageshakeRequest } from "./submit-rageshake"; diff --git a/src/settings/ProfileSettingsTab.tsx b/src/settings/ProfileSettingsTab.tsx index cfb6d727..7a4ac077 100644 --- a/src/settings/ProfileSettingsTab.tsx +++ b/src/settings/ProfileSettingsTab.tsx @@ -6,9 +6,9 @@ Please see LICENSE in the repository root for full details. */ import { type FC, useCallback, useEffect, useMemo, useRef } from "react"; -import { type MatrixClient } from "matrix-js-sdk/src/client"; +import { type MatrixClient } from "matrix-js-sdk"; import { useTranslation } from "react-i18next"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { useProfile } from "../profile/useProfile"; import { FieldRow, InputField, ErrorMessage } from "../input/Input"; diff --git a/src/settings/RageshakeButton.tsx b/src/settings/RageshakeButton.tsx index 43ffd7d5..f4e7bea3 100644 --- a/src/settings/RageshakeButton.tsx +++ b/src/settings/RageshakeButton.tsx @@ -8,7 +8,7 @@ Please see LICENSE in the repository root for full details. import { useTranslation } from "react-i18next"; import { type FC, useCallback, type JSX } from "react"; import { Button } from "@vector-im/compound-web"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { Config } from "../config/Config"; import styles from "./RageshakeButton.module.css"; diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 04c2a924..0d246415 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -7,7 +7,7 @@ Please see LICENSE in the repository root for full details. import { type FC, useState } from "react"; import { useTranslation } from "react-i18next"; -import { type MatrixClient } from "matrix-js-sdk/src/matrix"; +import { type MatrixClient } from "matrix-js-sdk"; import { Root as Form } from "@vector-im/compound-web"; import { type Room as LivekitRoom } from "livekit-client"; diff --git a/src/settings/rageshake.ts b/src/settings/rageshake.ts index d96f660b..1d5e581d 100644 --- a/src/settings/rageshake.ts +++ b/src/settings/rageshake.ts @@ -29,7 +29,7 @@ Please see LICENSE in the repository root for full details. import EventEmitter from "events"; import { throttle } from "lodash-es"; -import { type Logger, logger } from "matrix-js-sdk/src/logger"; +import { type Logger, logger } from "matrix-js-sdk/lib/logger"; import { secureRandomString } from "matrix-js-sdk/src/randomstring"; import { type LoggingMethod } from "loglevel"; diff --git a/src/settings/settings.ts b/src/settings/settings.ts index ee43acc6..7babcfde 100644 --- a/src/settings/settings.ts +++ b/src/settings/settings.ts @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { BehaviorSubject, type Observable } from "rxjs"; import { useObservableEagerState } from "observable-hooks"; diff --git a/src/settings/submit-rageshake.ts b/src/settings/submit-rageshake.ts index 9f38deb7..b7b91a58 100644 --- a/src/settings/submit-rageshake.ts +++ b/src/settings/submit-rageshake.ts @@ -6,12 +6,12 @@ Please see LICENSE in the repository root for full details. */ import { type ComponentProps, useCallback, useEffect, useState } from "react"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { ClientEvent, type MatrixClient, type MatrixEvent, -} from "matrix-js-sdk/src/matrix"; +} from "matrix-js-sdk"; import { type CryptoApi } from "matrix-js-sdk/src/crypto-api"; import { getLogsForReport } from "./rageshake"; diff --git a/src/soundUtils.ts b/src/soundUtils.ts index 2c259c73..3e774802 100644 --- a/src/soundUtils.ts +++ b/src/soundUtils.ts @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { isFailure } from "./utils/fetch"; diff --git a/src/state/CallViewModel.test.ts b/src/state/CallViewModel.test.ts index d489ad20..dfdf7d90 100644 --- a/src/state/CallViewModel.test.ts +++ b/src/state/CallViewModel.test.ts @@ -17,7 +17,7 @@ import { skip, switchMap, } from "rxjs"; -import { type MatrixClient } from "matrix-js-sdk/src/matrix"; +import { type MatrixClient } from "matrix-js-sdk"; import { ConnectionState, type LocalParticipant, @@ -27,10 +27,7 @@ import { } from "livekit-client"; import * as ComponentsCore from "@livekit/components-core"; import { isEqual } from "lodash-es"; -import { - type CallMembership, - type MatrixRTCSession, -} from "matrix-js-sdk/src/matrixrtc"; +import { type CallMembership, type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; import { CallViewModel, type Layout } from "./CallViewModel"; import { diff --git a/src/state/CallViewModel.ts b/src/state/CallViewModel.ts index ce104396..8fd6f819 100644 --- a/src/state/CallViewModel.ts +++ b/src/state/CallViewModel.ts @@ -18,11 +18,7 @@ import { type RemoteParticipant, Track, } from "livekit-client"; -import { - RoomStateEvent, - type Room, - type RoomMember, -} from "matrix-js-sdk/src/matrix"; +import { RoomStateEvent, type Room, type RoomMember } from "matrix-js-sdk"; import { BehaviorSubject, EMPTY, @@ -49,12 +45,12 @@ import { timer, withLatestFrom, } from "rxjs"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { type CallMembership, type MatrixRTCSession, MatrixRTCSessionEvent, -} from "matrix-js-sdk/src/matrixrtc"; +} from "matrix-js-sdk/lib/matrixrtc"; import { ViewModel } from "./ViewModel"; import { diff --git a/src/state/MediaViewModel.ts b/src/state/MediaViewModel.ts index dba86f62..2e03e894 100644 --- a/src/state/MediaViewModel.ts +++ b/src/state/MediaViewModel.ts @@ -26,7 +26,7 @@ import { RoomEvent as LivekitRoomEvent, RemoteTrack, } from "livekit-client"; -import { type RoomMember } from "matrix-js-sdk/src/matrix"; +import { type RoomMember } from "matrix-js-sdk"; import { BehaviorSubject, type Observable, diff --git a/src/state/TileStore.ts b/src/state/TileStore.ts index 9ecf099e..85bf8bc7 100644 --- a/src/state/TileStore.ts +++ b/src/state/TileStore.ts @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { BehaviorSubject } from "rxjs"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { type MediaViewModel, type UserMediaViewModel } from "./MediaViewModel"; import { GridTileViewModel, SpotlightTileViewModel } from "./TileViewModel"; diff --git a/src/tile/GridTile.test.tsx b/src/tile/GridTile.test.tsx index dd1f4b43..b6f111e4 100644 --- a/src/tile/GridTile.test.tsx +++ b/src/tile/GridTile.test.tsx @@ -10,7 +10,7 @@ import { test, expect } from "vitest"; import { render, screen } from "@testing-library/react"; import { axe } from "vitest-axe"; import { of } from "rxjs"; -import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; import { GridTile } from "./GridTile"; import { mockRtcMembership, withRemoteMedia } from "../utils/test"; diff --git a/src/tile/MediaView.tsx b/src/tile/MediaView.tsx index 419a9c81..faf12a82 100644 --- a/src/tile/MediaView.tsx +++ b/src/tile/MediaView.tsx @@ -7,7 +7,7 @@ Please see LICENSE in the repository root for full details. import { type TrackReferenceOrPlaceholder } from "@livekit/components-core"; import { animated } from "@react-spring/web"; -import { type RoomMember } from "matrix-js-sdk/src/matrix"; +import { type RoomMember } from "matrix-js-sdk"; import { type ComponentProps, type ReactNode, forwardRef } from "react"; import { useTranslation } from "react-i18next"; import classNames from "classnames"; diff --git a/src/tile/SpotlightTile.tsx b/src/tile/SpotlightTile.tsx index 338e84d4..33c24299 100644 --- a/src/tile/SpotlightTile.tsx +++ b/src/tile/SpotlightTile.tsx @@ -26,7 +26,7 @@ import { useObservableEagerState, useObservableRef } from "observable-hooks"; import { useTranslation } from "react-i18next"; import classNames from "classnames"; import { type TrackReferenceOrPlaceholder } from "@livekit/components-core"; -import { type RoomMember } from "matrix-js-sdk/src/matrix"; +import { type RoomMember } from "matrix-js-sdk"; import { MediaView } from "./MediaView"; import styles from "./SpotlightTile.module.css"; diff --git a/src/useAudioContext.tsx b/src/useAudioContext.tsx index 71e22700..d96b9fdc 100644 --- a/src/useAudioContext.tsx +++ b/src/useAudioContext.tsx @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { useState, useEffect } from "react"; import { diff --git a/src/useEvents.ts b/src/useEvents.ts index edce695c..c19145eb 100644 --- a/src/useEvents.ts +++ b/src/useEvents.ts @@ -11,7 +11,7 @@ import type { Listener, ListenerMap, TypedEventEmitter, -} from "matrix-js-sdk/src/models/typed-event-emitter"; +} from "matrix-js-sdk/lib/models/typed-event-emitter"; // Shortcut for registering a listener on an EventTarget export function useEventTarget( diff --git a/src/useMatrixRTCSessionJoinState.ts b/src/useMatrixRTCSessionJoinState.ts index b4f608ab..5e7ea110 100644 --- a/src/useMatrixRTCSessionJoinState.ts +++ b/src/useMatrixRTCSessionJoinState.ts @@ -5,11 +5,11 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { type MatrixRTCSession, MatrixRTCSessionEvent, -} from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; +} from "matrix-js-sdk/lib/matrixrtc"; import { useEffect, useState } from "react"; export function useMatrixRTCSessionJoinState( diff --git a/src/useMatrixRTCSessionMemberships.ts b/src/useMatrixRTCSessionMemberships.ts index b3ec2993..69b2a12d 100644 --- a/src/useMatrixRTCSessionMemberships.ts +++ b/src/useMatrixRTCSessionMemberships.ts @@ -5,12 +5,12 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { logger } from "matrix-js-sdk/src/logger"; -import { type CallMembership } from "matrix-js-sdk/src/matrixrtc/CallMembership"; +import { logger } from "matrix-js-sdk/lib/logger"; +import { type CallMembership } from "matrix-js-sdk/lib/matrixrtc"; import { type MatrixRTCSession, MatrixRTCSessionEvent, -} from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; +} from "matrix-js-sdk/lib/matrixrtc"; import { useCallback, useEffect, useState } from "react"; export function useMatrixRTCSessionMemberships( diff --git a/src/useWakeLock.ts b/src/useWakeLock.ts index b962adc3..76db91cd 100644 --- a/src/useWakeLock.ts +++ b/src/useWakeLock.ts @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { useEffect } from "react"; /** diff --git a/src/utils/displayname.ts b/src/utils/displayname.ts index 0eac045d..1e175368 100644 --- a/src/utils/displayname.ts +++ b/src/utils/displayname.ts @@ -10,8 +10,8 @@ import { removeHiddenChars as removeHiddenCharsUncached, } from "matrix-js-sdk/src/utils"; -import type { Room } from "matrix-js-sdk/src/matrix"; -import type { CallMembership } from "matrix-js-sdk/src/matrixrtc"; +import type { Room } from "matrix-js-sdk"; +import type { CallMembership } from "matrix-js-sdk/lib/matrixrtc"; // Calling removeHiddenChars() can be slow on Safari, so we cache the results. // To illustrate a simple benchmark: diff --git a/src/utils/matrix.ts b/src/utils/matrix.ts index f1801b97..b5f35f94 100644 --- a/src/utils/matrix.ts +++ b/src/utils/matrix.ts @@ -12,13 +12,13 @@ import { type ICreateClientOpts, Preset, Visibility, -} from "matrix-js-sdk/src/matrix"; -import { ClientEvent } from "matrix-js-sdk/src/client"; +} from "matrix-js-sdk"; +import { ClientEvent } from "matrix-js-sdk"; import { type ISyncStateData, type SyncState } from "matrix-js-sdk/src/sync"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { secureRandomBase64Url } from "matrix-js-sdk/src/randomstring"; -import type { MatrixClient } from "matrix-js-sdk/src/client"; +import type { MatrixClient } from "matrix-js-sdk"; import type { Room } from "matrix-js-sdk/src/models/room"; import IndexedDBWorker from "../IndexedDBWorker?worker"; import { generateUrlSearchParams, getUrlParams } from "../UrlParams"; diff --git a/src/utils/spa.ts b/src/utils/spa.ts index fd597f49..a826c542 100644 --- a/src/utils/spa.ts +++ b/src/utils/spa.ts @@ -5,9 +5,9 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type ICreateClientOpts } from "matrix-js-sdk/src/client"; +import { type ICreateClientOpts } from "matrix-js-sdk"; import { MatrixError } from "matrix-js-sdk/src/http-api"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import { Config } from "../config/Config"; import { fallbackICEServerAllowed, initClient } from "./matrix"; diff --git a/src/utils/test-viewmodel.ts b/src/utils/test-viewmodel.ts index 7fe37c20..e9982d3d 100644 --- a/src/utils/test-viewmodel.ts +++ b/src/utils/test-viewmodel.ts @@ -6,12 +6,9 @@ Please see LICENSE in the repository root for full details. */ import { ConnectionState } from "livekit-client"; -import { type MatrixClient } from "matrix-js-sdk/src/client"; -import { type RoomMember } from "matrix-js-sdk/src/matrix"; -import { - type CallMembership, - type MatrixRTCSession, -} from "matrix-js-sdk/src/matrixrtc"; +import { type MatrixClient } from "matrix-js-sdk"; +import { type RoomMember } from "matrix-js-sdk"; +import { type CallMembership, type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; import { BehaviorSubject, of } from "rxjs"; import { vitest } from "vitest"; import { type RelationsContainer } from "matrix-js-sdk/src/models/relations-container"; diff --git a/src/utils/test.ts b/src/utils/test.ts index b6f0ecc3..dd3cafaa 100644 --- a/src/utils/test.ts +++ b/src/utils/test.ts @@ -13,14 +13,14 @@ import { MatrixEvent, type Room, TypedEventEmitter, -} from "matrix-js-sdk/src/matrix"; +} from "matrix-js-sdk"; import { CallMembership, type Focus, MatrixRTCSessionEvent, type MatrixRTCSessionEventHandlerMap, type SessionMembershipData, -} from "matrix-js-sdk/src/matrixrtc"; +} from "matrix-js-sdk/lib/matrixrtc"; import { type LocalParticipant, type LocalTrackPublication, diff --git a/src/vitest.setup.ts b/src/vitest.setup.ts index b97b78ff..b31d9f0c 100644 --- a/src/vitest.setup.ts +++ b/src/vitest.setup.ts @@ -14,7 +14,7 @@ import { initReactI18next } from "react-i18next"; import { afterEach } from "vitest"; import { cleanup } from "@testing-library/react"; import "vitest-axe/extend-expect"; -import { logger } from "matrix-js-sdk/src/logger"; +import { logger } from "matrix-js-sdk/lib/logger"; import "@testing-library/jest-dom/vitest"; import EN from "../locales/en/app.json"; diff --git a/src/widget.ts b/src/widget.ts index e9b931fa..8bb920ad 100644 --- a/src/widget.ts +++ b/src/widget.ts @@ -5,16 +5,16 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { logger } from "matrix-js-sdk/src/logger"; -import { EventType } from "matrix-js-sdk/src/@types/event"; -import { createRoomWidgetClient } from "matrix-js-sdk/src/matrix"; +import { logger } from "matrix-js-sdk/lib/logger"; +import { EventType } from "matrix-js-sdk/lib/types"; +import { createRoomWidgetClient } from "matrix-js-sdk"; import { WidgetApi, MatrixCapabilities, WidgetApiToWidgetAction, } from "matrix-widget-api"; -import type { MatrixClient } from "matrix-js-sdk/src/client"; +import type { MatrixClient } from "matrix-js-sdk"; import type { IWidgetApiRequest } from "matrix-widget-api"; import { LazyEventEmitter } from "./LazyEventEmitter"; import { getUrlParams } from "./UrlParams"; diff --git a/tsconfig.json b/tsconfig.json index a7c1714b..33a11e51 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -47,9 +47,5 @@ "plugins": [{ "name": "typescript-eslint-language-service" }] }, - "include": [ - "./node_modules/matrix-js-sdk/src/@types/*.d.ts", - "./src/**/*.ts", - "./src/**/*.tsx" - ] + "include": ["./src/**/*.ts", "./src/**/*.tsx"] } From 46f5c44db06f48672b856d8621278cbd69985db2 Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 13 Mar 2025 16:58:14 +0100 Subject: [PATCH 033/225] temp2 --- package.json | 3 +-- renovate.json | 5 ----- src/@types/matrix-js-sdk.d.ts | 2 +- src/ClientContext.tsx | 2 +- src/auth/RegisterPage.tsx | 2 +- src/auth/useInteractiveLogin.ts | 2 +- src/auth/useInteractiveRegistration.ts | 2 +- src/auth/useRecaptcha.ts | 2 +- src/auth/useRegisterPasswordlessUser.ts | 2 +- src/home/CallList.tsx | 4 ++-- src/home/UnauthenticatedView.tsx | 2 +- src/home/useGroupCallRooms.ts | 21 ++++++++++++------- src/otel/OTelCall.ts | 4 ++-- src/otel/OTelCallAbstractMediaStreamSpan.ts | 2 +- src/otel/OTelCallFeedMediaStreamSpan.ts | 2 +- src/otel/OTelCallMediaStreamTrackSpan.ts | 2 +- .../OTelCallTransceiverMediaStreamSpan.ts | 2 +- src/otel/OTelGroupCallMembership.ts | 6 +++--- src/otel/ObjectFlattener.test.ts | 4 ++-- src/otel/ObjectFlattener.ts | 6 +++--- src/profile/useProfile.ts | 9 +++++--- src/reactions/ReactionsReader.ts | 2 +- src/reactions/index.ts | 2 +- src/room/GroupCallView.tsx | 2 +- src/room/InCallView.tsx | 2 +- src/room/MuteStates.ts | 2 +- src/room/RoomPage.tsx | 2 +- src/room/checkForParallelCalls.test.ts | 2 +- src/room/checkForParallelCalls.ts | 3 +-- src/room/useActiveFocus.ts | 7 ++----- src/room/useLoadGroupCall.ts | 14 +++++++------ src/settings/FeedbackSettingsTab.tsx | 2 +- src/settings/rageshake.ts | 2 +- src/settings/submit-rageshake.ts | 2 +- src/useTheme.test.ts | 2 +- src/useTheme.ts | 4 ++-- src/utils/displayname-integration.test.ts | 6 +++--- src/utils/displayname.ts | 2 +- src/utils/matrix.ts | 11 +++++----- src/utils/spa.ts | 3 +-- src/utils/test-viewmodel.ts | 7 +++++-- src/widget.ts | 4 ++-- yarn.lock | 2 +- 43 files changed, 87 insertions(+), 84 deletions(-) diff --git a/package.json b/package.json index cacd969b..2cf05609 100644 --- a/package.json +++ b/package.json @@ -125,7 +125,6 @@ "vitest-axe": "^1.0.0-pre.3" }, "resolutions": { - "@livekit/components-core/rxjs": "^7.8.1", - "matrix-widget-api": "1.11.0" + "@livekit/components-core/rxjs": "^7.8.1" } } diff --git a/renovate.json b/renovate.json index 31709cf0..23ed1be2 100644 --- a/renovate.json +++ b/renovate.json @@ -24,11 +24,6 @@ "matchDepNames": ["matrix-js-sdk"], "enabled": false }, - { - "groupName": "matrix-widget-api", - "matchDepNames": ["matrix-widget-api"], - "extends": ["schedule:weekly"] - }, { "groupName": "Compound", "matchPackageNames": ["@vector-im/compound-{/,}**"], diff --git a/src/@types/matrix-js-sdk.d.ts b/src/@types/matrix-js-sdk.d.ts index faebc4fa..a9f2e066 100644 --- a/src/@types/matrix-js-sdk.d.ts +++ b/src/@types/matrix-js-sdk.d.ts @@ -11,7 +11,7 @@ import { } from "../reactions"; // Extend Matrix JS SDK types via Typescript declaration merging to support unspecced event fields and types -declare module "matrix-js-sdk/src/types" { +declare module "matrix-js-sdk/lib/types" { export interface TimelineEvents { [ElementCallReactionEventType]: ECallReactionEventContent; } diff --git a/src/ClientContext.tsx b/src/ClientContext.tsx index 25db3ca0..01f5e848 100644 --- a/src/ClientContext.tsx +++ b/src/ClientContext.tsx @@ -21,7 +21,7 @@ import { logger } from "matrix-js-sdk/lib/logger"; import { type ISyncStateData, type SyncState } from "matrix-js-sdk/lib/sync"; import { ClientEvent, type MatrixClient } from "matrix-js-sdk"; -import type { WidgetApi } from "matrix-widget-api"; +import type { WidgetApi } from "matrix-js-sdk/lib/matrix-widget-api"; import { ErrorPage } from "./FullScreenView"; import { widget } from "./widget"; import { diff --git a/src/auth/RegisterPage.tsx b/src/auth/RegisterPage.tsx index bad7b7e6..bd056d08 100644 --- a/src/auth/RegisterPage.tsx +++ b/src/auth/RegisterPage.tsx @@ -16,7 +16,7 @@ import { } from "react"; import { useNavigate, useLocation } from "react-router-dom"; import { captureException } from "@sentry/react"; -import { sleep } from "matrix-js-sdk/src/utils"; +import { sleep } from "matrix-js-sdk/lib/utils"; import { Trans, useTranslation } from "react-i18next"; import { logger } from "matrix-js-sdk/lib/logger"; import { Button, Text } from "@vector-im/compound-web"; diff --git a/src/auth/useInteractiveLogin.ts b/src/auth/useInteractiveLogin.ts index b255c1bf..85a43752 100644 --- a/src/auth/useInteractiveLogin.ts +++ b/src/auth/useInteractiveLogin.ts @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { useCallback } from "react"; -import { InteractiveAuth } from "matrix-js-sdk/src/interactive-auth"; +import { InteractiveAuth } from "matrix-js-sdk"; import { createClient, type LoginResponse, diff --git a/src/auth/useInteractiveRegistration.ts b/src/auth/useInteractiveRegistration.ts index 983d0a71..4972c031 100644 --- a/src/auth/useInteractiveRegistration.ts +++ b/src/auth/useInteractiveRegistration.ts @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { useState, useEffect, useCallback, useRef } from "react"; -import { InteractiveAuth } from "matrix-js-sdk/src/interactive-auth"; +import { InteractiveAuth } from "matrix-js-sdk"; import { createClient, type MatrixClient, diff --git a/src/auth/useRecaptcha.ts b/src/auth/useRecaptcha.ts index 9d24eb83..738d5569 100644 --- a/src/auth/useRecaptcha.ts +++ b/src/auth/useRecaptcha.ts @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { useEffect, useCallback, useRef, useState } from "react"; -import { secureRandomString } from "matrix-js-sdk/src/randomstring"; +import { secureRandomString } from "matrix-js-sdk"; import { useTranslation } from "react-i18next"; import { logger } from "matrix-js-sdk/lib/logger"; diff --git a/src/auth/useRegisterPasswordlessUser.ts b/src/auth/useRegisterPasswordlessUser.ts index 6dad6ebd..e1160a89 100644 --- a/src/auth/useRegisterPasswordlessUser.ts +++ b/src/auth/useRegisterPasswordlessUser.ts @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { useCallback } from "react"; -import { secureRandomString } from "matrix-js-sdk/src/randomstring"; +import { secureRandomString } from "matrix-js-sdk"; import { useClient } from "../ClientContext"; import { useInteractiveRegistration } from "../auth/useInteractiveRegistration"; diff --git a/src/home/CallList.tsx b/src/home/CallList.tsx index a176b14d..b80ff8da 100644 --- a/src/home/CallList.tsx +++ b/src/home/CallList.tsx @@ -7,8 +7,8 @@ Please see LICENSE in the repository root for full details. import { Link } from "react-router-dom"; import { type MatrixClient } from "matrix-js-sdk"; -import { type RoomMember } from "matrix-js-sdk/src/models/room-member"; -import { type Room } from "matrix-js-sdk/src/models/room"; +import { type RoomMember } from "matrix-js-sdk"; +import { type Room } from "matrix-js-sdk"; import { type FC, useCallback, type MouseEvent, useState } from "react"; import { useTranslation } from "react-i18next"; import { IconButton, Text } from "@vector-im/compound-web"; diff --git a/src/home/UnauthenticatedView.tsx b/src/home/UnauthenticatedView.tsx index f3d56668..be34f8f6 100644 --- a/src/home/UnauthenticatedView.tsx +++ b/src/home/UnauthenticatedView.tsx @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { type FC, useCallback, useState, type FormEventHandler } from "react"; -import { secureRandomString } from "matrix-js-sdk/src/randomstring"; +import { secureRandomString } from "matrix-js-sdk"; import { Trans, useTranslation } from "react-i18next"; import { Button, Heading, Text } from "@vector-im/compound-web"; import { logger } from "matrix-js-sdk/lib/logger"; diff --git a/src/home/useGroupCallRooms.ts b/src/home/useGroupCallRooms.ts index 799b287c..45b893e3 100644 --- a/src/home/useGroupCallRooms.ts +++ b/src/home/useGroupCallRooms.ts @@ -5,14 +5,21 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type MatrixClient } from "matrix-js-sdk"; -import { type Room, RoomEvent } from "matrix-js-sdk/src/models/room"; -import { type RoomMember } from "matrix-js-sdk/src/models/room-member"; +import { + type MatrixClient, + type RoomMember, + type Room, + RoomEvent, + EventTimeline, + EventType, + JoinRule, + KnownMembership, +} from "matrix-js-sdk"; import { useState, useEffect } from "react"; -import { EventTimeline, EventType, JoinRule } from "matrix-js-sdk"; -import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; -import { MatrixRTCSessionManagerEvents } from "matrix-js-sdk/lib/matrixrtcManager"; -import { KnownMembership } from "matrix-js-sdk/src/types"; +import { + MatrixRTCSessionManagerEvents, + type MatrixRTCSession, +} from "matrix-js-sdk/lib/matrixrtc"; import { getKeyForRoom } from "../e2ee/sharedKeyManagement"; diff --git a/src/otel/OTelCall.ts b/src/otel/OTelCall.ts index f212ef67..e70cedf2 100644 --- a/src/otel/OTelCall.ts +++ b/src/otel/OTelCall.ts @@ -7,11 +7,11 @@ Please see LICENSE in the repository root for full details. import { type Span } from "@opentelemetry/api"; import { type MatrixCall } from "matrix-js-sdk"; -import { CallEvent } from "matrix-js-sdk/src/webrtc/call"; +import { CallEvent } from "matrix-js-sdk/lib/webrtc/call"; import { type TransceiverStats, type CallFeedStats, -} from "matrix-js-sdk/src/webrtc/stats/statsReport"; +} from "matrix-js-sdk/lib/webrtc/stats/statsReport"; import { ObjectFlattener } from "./ObjectFlattener"; import { ElementCallOpenTelemetry } from "./otel"; diff --git a/src/otel/OTelCallAbstractMediaStreamSpan.ts b/src/otel/OTelCallAbstractMediaStreamSpan.ts index b6718d72..69e41547 100644 --- a/src/otel/OTelCallAbstractMediaStreamSpan.ts +++ b/src/otel/OTelCallAbstractMediaStreamSpan.ts @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import opentelemetry, { type Span } from "@opentelemetry/api"; -import { type TrackStats } from "matrix-js-sdk/src/webrtc/stats/statsReport"; +import { type TrackStats } from "matrix-js-sdk/lib/webrtc/stats/statsReport"; import { type ElementCallOpenTelemetry } from "./otel"; import { OTelCallMediaStreamTrackSpan } from "./OTelCallMediaStreamTrackSpan"; diff --git a/src/otel/OTelCallFeedMediaStreamSpan.ts b/src/otel/OTelCallFeedMediaStreamSpan.ts index 0ea3a37a..59c780a5 100644 --- a/src/otel/OTelCallFeedMediaStreamSpan.ts +++ b/src/otel/OTelCallFeedMediaStreamSpan.ts @@ -9,7 +9,7 @@ import { type Span } from "@opentelemetry/api"; import { type CallFeedStats, type TrackStats, -} from "matrix-js-sdk/src/webrtc/stats/statsReport"; +} from "matrix-js-sdk/lib/webrtc/stats/statsReport"; import { type ElementCallOpenTelemetry } from "./otel"; import { OTelCallAbstractMediaStreamSpan } from "./OTelCallAbstractMediaStreamSpan"; diff --git a/src/otel/OTelCallMediaStreamTrackSpan.ts b/src/otel/OTelCallMediaStreamTrackSpan.ts index 830a64b2..c81acd4f 100644 --- a/src/otel/OTelCallMediaStreamTrackSpan.ts +++ b/src/otel/OTelCallMediaStreamTrackSpan.ts @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type TrackStats } from "matrix-js-sdk/src/webrtc/stats/statsReport"; +import { type TrackStats } from "matrix-js-sdk/lib/webrtc/stats/statsReport"; import opentelemetry, { type Span } from "@opentelemetry/api"; import { type ElementCallOpenTelemetry } from "./otel"; diff --git a/src/otel/OTelCallTransceiverMediaStreamSpan.ts b/src/otel/OTelCallTransceiverMediaStreamSpan.ts index 6eb7ed91..675d793e 100644 --- a/src/otel/OTelCallTransceiverMediaStreamSpan.ts +++ b/src/otel/OTelCallTransceiverMediaStreamSpan.ts @@ -9,7 +9,7 @@ import { type Span } from "@opentelemetry/api"; import { type TrackStats, type TransceiverStats, -} from "matrix-js-sdk/src/webrtc/stats/statsReport"; +} from "matrix-js-sdk/lib/webrtc/stats/statsReport"; import { type ElementCallOpenTelemetry } from "./otel"; import { OTelCallAbstractMediaStreamSpan } from "./OTelCallAbstractMediaStreamSpan"; diff --git a/src/otel/OTelGroupCallMembership.ts b/src/otel/OTelGroupCallMembership.ts index 7445a2cb..668b989c 100644 --- a/src/otel/OTelGroupCallMembership.ts +++ b/src/otel/OTelGroupCallMembership.ts @@ -22,19 +22,19 @@ import { type CallState, type MatrixCall, type VoipEvent, -} from "matrix-js-sdk/src/webrtc/call"; +} from "matrix-js-sdk/lib/webrtc/call"; import { type CallsByUserAndDevice, type GroupCallError, GroupCallEvent, type GroupCallStatsReport, -} from "matrix-js-sdk/src/webrtc/groupCall"; +} from "matrix-js-sdk/lib/webrtc/groupCall"; import { type ConnectionStatsReport, type ByteSentStatsReport, type SummaryStatsReport, type CallFeedReport, -} from "matrix-js-sdk/src/webrtc/stats/statsReport"; +} from "matrix-js-sdk/lib/webrtc/stats/statsReport"; import { ElementCallOpenTelemetry } from "./otel"; import { ObjectFlattener } from "./ObjectFlattener"; diff --git a/src/otel/ObjectFlattener.test.ts b/src/otel/ObjectFlattener.test.ts index 4c2cb07a..5685617c 100644 --- a/src/otel/ObjectFlattener.test.ts +++ b/src/otel/ObjectFlattener.test.ts @@ -5,12 +5,12 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type GroupCallStatsReport } from "matrix-js-sdk/src/webrtc/groupCall"; +import { type GroupCallStatsReport } from "matrix-js-sdk/lib/webrtc/groupCall"; import { type AudioConcealment, type ByteSentStatsReport, type ConnectionStatsReport, -} from "matrix-js-sdk/src/webrtc/stats/statsReport"; +} from "matrix-js-sdk/lib/webrtc/stats/statsReport"; import { describe, expect, it } from "vitest"; import { ObjectFlattener } from "../../src/otel/ObjectFlattener"; diff --git a/src/otel/ObjectFlattener.ts b/src/otel/ObjectFlattener.ts index e36c269e..a963c743 100644 --- a/src/otel/ObjectFlattener.ts +++ b/src/otel/ObjectFlattener.ts @@ -5,13 +5,13 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ import { type Attributes } from "@opentelemetry/api"; -import { type VoipEvent } from "matrix-js-sdk/src/webrtc/call"; -import { type GroupCallStatsReport } from "matrix-js-sdk/src/webrtc/groupCall"; +import { type VoipEvent } from "matrix-js-sdk/lib/webrtc/call"; +import { type GroupCallStatsReport } from "matrix-js-sdk/lib/webrtc/groupCall"; import { type ByteSentStatsReport, type ConnectionStatsReport, type SummaryStatsReport, -} from "matrix-js-sdk/src/webrtc/stats/statsReport"; +} from "matrix-js-sdk/lib/webrtc/stats/statsReport"; export class ObjectFlattener { public static flattenReportObject( diff --git a/src/profile/useProfile.ts b/src/profile/useProfile.ts index bc68d30b..8f68747f 100644 --- a/src/profile/useProfile.ts +++ b/src/profile/useProfile.ts @@ -6,9 +6,12 @@ Please see LICENSE in the repository root for full details. */ import { type MatrixClient } from "matrix-js-sdk"; -import { type MatrixEvent } from "matrix-js-sdk/src/models/event"; -import { type User, UserEvent } from "matrix-js-sdk/src/models/user"; -import { type FileType } from "matrix-js-sdk/src/http-api"; +import { + type MatrixEvent, + type User, + UserEvent, + type FileType, +} from "matrix-js-sdk"; import { useState, useCallback, useEffect } from "react"; import { logger } from "matrix-js-sdk/lib/logger"; diff --git a/src/reactions/ReactionsReader.ts b/src/reactions/ReactionsReader.ts index ae9fa4e3..b630f4b9 100644 --- a/src/reactions/ReactionsReader.ts +++ b/src/reactions/ReactionsReader.ts @@ -12,7 +12,7 @@ import { } from "matrix-js-sdk/lib/matrixrtc"; import { logger } from "matrix-js-sdk/lib/logger"; import { type MatrixEvent, MatrixEventEvent } from "matrix-js-sdk"; -import { type ReactionEventContent } from "matrix-js-sdk/src/types"; +import { type ReactionEventContent } from "matrix-js-sdk/lib/types"; import { RelationType, EventType, diff --git a/src/reactions/index.ts b/src/reactions/index.ts index 31b28fe5..d3c2d9c9 100644 --- a/src/reactions/index.ts +++ b/src/reactions/index.ts @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type RelationType } from "matrix-js-sdk/src/types"; +import { type RelationType } from "matrix-js-sdk"; import catSoundOgg from "../sound/reactions/cat.ogg?url"; import catSoundMp3 from "../sound/reactions/cat.mp3?url"; diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index 06fcfa4e..c6e7e3a8 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -26,7 +26,7 @@ import { import { JoinRule, type Room } from "matrix-js-sdk"; import { useNavigate } from "react-router-dom"; -import type { IWidgetApiRequest } from "matrix-widget-api"; +import type { IWidgetApiRequest } from "matrix-js-sdk/lib/matrix-widget-api"; import { ElementWidgetActions, type JoinCallData, diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 53742fc2..99f8a282 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -34,7 +34,7 @@ import { logger } from "matrix-js-sdk/lib/logger"; import LogoMark from "../icons/LogoMark.svg?react"; import LogoType from "../icons/LogoType.svg?react"; -import type { IWidgetApiRequest } from "matrix-widget-api"; +import type { IWidgetApiRequest } from "matrix-js-sdk/lib/matrix-widget-api"; import { EndCallButton, MicButton, diff --git a/src/room/MuteStates.ts b/src/room/MuteStates.ts index e57ba7d5..af78d2eb 100644 --- a/src/room/MuteStates.ts +++ b/src/room/MuteStates.ts @@ -12,7 +12,7 @@ import { useEffect, useMemo, } from "react"; -import { type IWidgetApiRequest } from "matrix-widget-api"; +import { type IWidgetApiRequest } from "matrix-js-sdk/lib/matrix-widget-api"; import { logger } from "matrix-js-sdk/lib/logger"; import { diff --git a/src/room/RoomPage.tsx b/src/room/RoomPage.tsx index 58039aaa..f502407c 100644 --- a/src/room/RoomPage.tsx +++ b/src/room/RoomPage.tsx @@ -13,13 +13,13 @@ import { useRef, type JSX, } from "react"; +import { type MatrixError } from "matrix-js-sdk"; import { logger } from "matrix-js-sdk/lib/logger"; import { Trans, useTranslation } from "react-i18next"; import { CheckIcon, UnknownSolidIcon, } from "@vector-im/compound-design-tokens/assets/web/icons"; -import { type MatrixError } from "matrix-js-sdk/src/http-api"; import { useClientLegacy } from "../ClientContext"; import { ErrorPage, FullScreenView, LoadingPage } from "../FullScreenView"; diff --git a/src/room/checkForParallelCalls.test.ts b/src/room/checkForParallelCalls.test.ts index 932cba98..2d14c79a 100644 --- a/src/room/checkForParallelCalls.test.ts +++ b/src/room/checkForParallelCalls.test.ts @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { vi, type Mocked, test, expect } from "vitest"; -import { type RoomState } from "matrix-js-sdk/src/models/room-state"; +import { type RoomState } from "matrix-js-sdk"; import { PosthogAnalytics } from "../../src/analytics/PosthogAnalytics"; import { checkForParallelCalls } from "../../src/room/checkForParallelCalls"; diff --git a/src/room/checkForParallelCalls.ts b/src/room/checkForParallelCalls.ts index d8c91ea0..ab947176 100644 --- a/src/room/checkForParallelCalls.ts +++ b/src/room/checkForParallelCalls.ts @@ -5,8 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { EventType } from "matrix-js-sdk/src/@types/event"; -import { type RoomState } from "matrix-js-sdk/src/models/room-state"; +import { EventType, type RoomState } from "matrix-js-sdk"; import { PosthogAnalytics } from "../analytics/PosthogAnalytics"; diff --git a/src/room/useActiveFocus.ts b/src/room/useActiveFocus.ts index 28012643..a8dfa836 100644 --- a/src/room/useActiveFocus.ts +++ b/src/room/useActiveFocus.ts @@ -10,12 +10,9 @@ import { MatrixRTCSessionEvent, } from "matrix-js-sdk/lib/matrixrtc"; import { useCallback, useEffect, useState } from "react"; -import { deepCompare } from "matrix-js-sdk/src/utils"; +import { deepCompare } from "matrix-js-sdk/lib/utils"; import { logger } from "matrix-js-sdk/lib/logger"; -import { - type LivekitFocus, - isLivekitFocus, -} from "matrix-js-sdk/lib/matrixrtc"; +import { type LivekitFocus, isLivekitFocus } from "matrix-js-sdk/lib/matrixrtc"; /** * Gets the currently active (livekit) focus for a MatrixRTC session diff --git a/src/room/useLoadGroupCall.ts b/src/room/useLoadGroupCall.ts index e53dc3b5..ab6ccf64 100644 --- a/src/room/useLoadGroupCall.ts +++ b/src/room/useLoadGroupCall.ts @@ -13,18 +13,20 @@ import { type ComponentType, type SVGAttributes, } from "react"; -import { logger } from "matrix-js-sdk/lib/logger"; -import { EventType } from "matrix-js-sdk/src/@types/event"; import { + JoinRule, + EventType, + SyncState, + MatrixError, + KnownMembership, ClientEvent, type MatrixClient, type RoomSummary, + RoomEvent, + type Room, } from "matrix-js-sdk"; -import { SyncState } from "matrix-js-sdk/src/sync"; +import { logger } from "matrix-js-sdk/lib/logger"; import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; -import { RoomEvent, type Room } from "matrix-js-sdk/src/models/room"; -import { KnownMembership } from "matrix-js-sdk/src/types"; -import { JoinRule, MatrixError } from "matrix-js-sdk"; import { useTranslation } from "react-i18next"; import { AdminIcon, diff --git a/src/settings/FeedbackSettingsTab.tsx b/src/settings/FeedbackSettingsTab.tsx index ee9911b8..2e330a28 100644 --- a/src/settings/FeedbackSettingsTab.tsx +++ b/src/settings/FeedbackSettingsTab.tsx @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { type ChangeEvent, type FC, useCallback } from "react"; -import { secureRandomString } from "matrix-js-sdk/src/randomstring"; +import { secureRandomString } from "matrix-js-sdk"; import { Trans, useTranslation } from "react-i18next"; import { Button, Text } from "@vector-im/compound-web"; import { logger } from "matrix-js-sdk/lib/logger"; diff --git a/src/settings/rageshake.ts b/src/settings/rageshake.ts index 1d5e581d..5e37d5b7 100644 --- a/src/settings/rageshake.ts +++ b/src/settings/rageshake.ts @@ -30,7 +30,7 @@ Please see LICENSE in the repository root for full details. import EventEmitter from "events"; import { throttle } from "lodash-es"; import { type Logger, logger } from "matrix-js-sdk/lib/logger"; -import { secureRandomString } from "matrix-js-sdk/src/randomstring"; +import { secureRandomString } from "matrix-js-sdk"; import { type LoggingMethod } from "loglevel"; import type loglevel from "loglevel"; diff --git a/src/settings/submit-rageshake.ts b/src/settings/submit-rageshake.ts index b7b91a58..c1b7d659 100644 --- a/src/settings/submit-rageshake.ts +++ b/src/settings/submit-rageshake.ts @@ -12,7 +12,7 @@ import { type MatrixClient, type MatrixEvent, } from "matrix-js-sdk"; -import { type CryptoApi } from "matrix-js-sdk/src/crypto-api"; +import { type CryptoApi } from "matrix-js-sdk/lib/crypto-api"; import { getLogsForReport } from "./rageshake"; import { useClient } from "../ClientContext"; diff --git a/src/useTheme.test.ts b/src/useTheme.test.ts index 6e471462..7e8868fa 100644 --- a/src/useTheme.test.ts +++ b/src/useTheme.test.ts @@ -16,7 +16,7 @@ import { vi, } from "vitest"; import EventEmitter from "events"; -import { WidgetApiToWidgetAction } from "matrix-widget-api"; +import { WidgetApiToWidgetAction } from "matrix-js-sdk/lib/matrix-widget-api"; import { useTheme } from "./useTheme"; import { getUrlParams } from "./UrlParams"; diff --git a/src/useTheme.ts b/src/useTheme.ts index c1cad176..93ee55d4 100644 --- a/src/useTheme.ts +++ b/src/useTheme.ts @@ -6,8 +6,8 @@ Please see LICENSE in the repository root for full details. */ import { useEffect, useLayoutEffect, useRef, useState } from "react"; -import { WidgetApiToWidgetAction } from "matrix-widget-api"; -import { type IThemeChangeActionRequest } from "matrix-widget-api/lib/interfaces/ThemeChangeAction"; +import { WidgetApiToWidgetAction } from "matrix-js-sdk/lib/matrix-widget-api"; +import { type IThemeChangeActionRequest } from "matrix-js-sdk/lib/matrix-widget-api"; import { getUrlParams } from "./UrlParams"; import { widget } from "./widget"; diff --git a/src/utils/displayname-integration.test.ts b/src/utils/displayname-integration.test.ts index 8dd72d8c..5ba42e70 100644 --- a/src/utils/displayname-integration.test.ts +++ b/src/utils/displayname-integration.test.ts @@ -14,14 +14,14 @@ import { mockMatrixRoom } from "./test"; // Ideally these tests would be in ./displayname.test.ts but I can't figure out how to // just spy on the removeHiddenChars() function without impacting the other tests. // So, these tests are in this separate test file. -vi.mock("matrix-js-sdk/src/utils"); +vi.mock("matrix-js-sdk/lib/utils"); describe("shouldDisambiguate", () => { // eslint-disable-next-line @typescript-eslint/consistent-type-imports - let jsUtils: typeof import("matrix-js-sdk/src/utils"); + let jsUtils: typeof import("matrix-js-sdk/lib/utils"); beforeAll(async () => { - jsUtils = await import("matrix-js-sdk/src/utils"); + jsUtils = await import("matrix-js-sdk/lib/utils"); vi.spyOn(jsUtils, "removeHiddenChars").mockImplementation((str) => str); }); afterEach(() => { diff --git a/src/utils/displayname.ts b/src/utils/displayname.ts index 1e175368..d2375897 100644 --- a/src/utils/displayname.ts +++ b/src/utils/displayname.ts @@ -8,7 +8,7 @@ Please see LICENSE in the repository root for full details. import { removeDirectionOverrideChars, removeHiddenChars as removeHiddenCharsUncached, -} from "matrix-js-sdk/src/utils"; +} from "matrix-js-sdk/lib/utils"; import type { Room } from "matrix-js-sdk"; import type { CallMembership } from "matrix-js-sdk/lib/matrixrtc"; diff --git a/src/utils/matrix.ts b/src/utils/matrix.ts index b5f35f94..27bc3bc8 100644 --- a/src/utils/matrix.ts +++ b/src/utils/matrix.ts @@ -5,8 +5,8 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { IndexedDBStore } from "matrix-js-sdk/src/store/indexeddb"; -import { MemoryStore } from "matrix-js-sdk/src/store/memory"; +import { IndexedDBStore } from "matrix-js-sdk"; +import { MemoryStore } from "matrix-js-sdk"; import { createClient, type ICreateClientOpts, @@ -14,12 +14,11 @@ import { Visibility, } from "matrix-js-sdk"; import { ClientEvent } from "matrix-js-sdk"; -import { type ISyncStateData, type SyncState } from "matrix-js-sdk/src/sync"; +import { type ISyncStateData, type SyncState } from "matrix-js-sdk/lib/sync"; import { logger } from "matrix-js-sdk/lib/logger"; -import { secureRandomBase64Url } from "matrix-js-sdk/src/randomstring"; +import { secureRandomBase64Url } from "matrix-js-sdk"; -import type { MatrixClient } from "matrix-js-sdk"; -import type { Room } from "matrix-js-sdk/src/models/room"; +import type { MatrixClient, Room } from "matrix-js-sdk"; import IndexedDBWorker from "../IndexedDBWorker?worker"; import { generateUrlSearchParams, getUrlParams } from "../UrlParams"; import { Config } from "../config/Config"; diff --git a/src/utils/spa.ts b/src/utils/spa.ts index a826c542..e97d7810 100644 --- a/src/utils/spa.ts +++ b/src/utils/spa.ts @@ -5,8 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type ICreateClientOpts } from "matrix-js-sdk"; -import { MatrixError } from "matrix-js-sdk/src/http-api"; +import { type ICreateClientOpts, MatrixError } from "matrix-js-sdk"; import { logger } from "matrix-js-sdk/lib/logger"; import { Config } from "../config/Config"; diff --git a/src/utils/test-viewmodel.ts b/src/utils/test-viewmodel.ts index e9982d3d..9723d8ed 100644 --- a/src/utils/test-viewmodel.ts +++ b/src/utils/test-viewmodel.ts @@ -8,10 +8,13 @@ Please see LICENSE in the repository root for full details. import { ConnectionState } from "livekit-client"; import { type MatrixClient } from "matrix-js-sdk"; import { type RoomMember } from "matrix-js-sdk"; -import { type CallMembership, type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; +import { + type CallMembership, + type MatrixRTCSession, +} from "matrix-js-sdk/lib/matrixrtc"; import { BehaviorSubject, of } from "rxjs"; import { vitest } from "vitest"; -import { type RelationsContainer } from "matrix-js-sdk/src/models/relations-container"; +import { type RelationsContainer } from "matrix-js-sdk"; import EventEmitter from "events"; import { E2eeType } from "../e2ee/e2eeType"; diff --git a/src/widget.ts b/src/widget.ts index 8bb920ad..f7fe053d 100644 --- a/src/widget.ts +++ b/src/widget.ts @@ -12,10 +12,10 @@ import { WidgetApi, MatrixCapabilities, WidgetApiToWidgetAction, -} from "matrix-widget-api"; +} from "matrix-js-sdk/lib/matrix-widget-api"; import type { MatrixClient } from "matrix-js-sdk"; -import type { IWidgetApiRequest } from "matrix-widget-api"; +import type { IWidgetApiRequest } from "matrix-js-sdk/lib/matrix-widget-api"; import { LazyEventEmitter } from "./LazyEventEmitter"; import { getUrlParams } from "./UrlParams"; import { Config } from "./config/Config"; diff --git a/yarn.lock b/yarn.lock index c6b9c56b..9b560160 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6512,7 +6512,7 @@ matrix-events-sdk@0.0.1: unhomoglyph "^1.0.6" uuid "11" -matrix-widget-api@1.11.0, matrix-widget-api@^1.10.0: +matrix-widget-api@^1.10.0: version "1.11.0" resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.11.0.tgz#2f548b11a7c0df789d5d4fdb5cc9ef7af8aef3da" integrity sha512-ED/9hrJqDWVLeED0g1uJnYRhINh3ZTquwurdM+Hc8wLVJIQ8G/r7A7z74NC+8bBIHQ1Jo7i1Uq5CoJp/TzFYrA== From f0545ced65e7408e561623697e2b50a8c632a052 Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 13 Mar 2025 18:15:58 +0100 Subject: [PATCH 034/225] make it work withotu js-sdk changes --- src/ClientContext.tsx | 2 +- src/auth/useRecaptcha.ts | 2 +- src/auth/useRegisterPasswordlessUser.ts | 2 +- src/home/UnauthenticatedView.tsx | 2 +- src/room/GroupCallView.test.tsx | 2 +- src/room/GroupCallView.tsx | 2 +- src/room/InCallView.tsx | 2 +- src/room/MuteStates.ts | 2 +- src/settings/FeedbackSettingsTab.tsx | 2 +- src/settings/rageshake.ts | 2 +- src/useTheme.test.ts | 2 +- src/useTheme.ts | 4 ++-- src/utils/matrix.ts | 2 +- src/utils/test-viewmodel.ts | 2 +- src/widget.ts | 6 +++--- yarn.lock | 2 +- 16 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/ClientContext.tsx b/src/ClientContext.tsx index 01f5e848..25db3ca0 100644 --- a/src/ClientContext.tsx +++ b/src/ClientContext.tsx @@ -21,7 +21,7 @@ import { logger } from "matrix-js-sdk/lib/logger"; import { type ISyncStateData, type SyncState } from "matrix-js-sdk/lib/sync"; import { ClientEvent, type MatrixClient } from "matrix-js-sdk"; -import type { WidgetApi } from "matrix-js-sdk/lib/matrix-widget-api"; +import type { WidgetApi } from "matrix-widget-api"; import { ErrorPage } from "./FullScreenView"; import { widget } from "./widget"; import { diff --git a/src/auth/useRecaptcha.ts b/src/auth/useRecaptcha.ts index 738d5569..890c55fe 100644 --- a/src/auth/useRecaptcha.ts +++ b/src/auth/useRecaptcha.ts @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { useEffect, useCallback, useRef, useState } from "react"; -import { secureRandomString } from "matrix-js-sdk"; +import { secureRandomString } from "matrix-js-sdk/lib/randomstring"; import { useTranslation } from "react-i18next"; import { logger } from "matrix-js-sdk/lib/logger"; diff --git a/src/auth/useRegisterPasswordlessUser.ts b/src/auth/useRegisterPasswordlessUser.ts index e1160a89..e7c0626d 100644 --- a/src/auth/useRegisterPasswordlessUser.ts +++ b/src/auth/useRegisterPasswordlessUser.ts @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { useCallback } from "react"; -import { secureRandomString } from "matrix-js-sdk"; +import { secureRandomString } from "matrix-js-sdk/lib/randomstring"; import { useClient } from "../ClientContext"; import { useInteractiveRegistration } from "../auth/useInteractiveRegistration"; diff --git a/src/home/UnauthenticatedView.tsx b/src/home/UnauthenticatedView.tsx index be34f8f6..a0ef7c96 100644 --- a/src/home/UnauthenticatedView.tsx +++ b/src/home/UnauthenticatedView.tsx @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { type FC, useCallback, useState, type FormEventHandler } from "react"; -import { secureRandomString } from "matrix-js-sdk"; +import { secureRandomString } from "matrix-js-sdk/lib/randomstring"; import { Trans, useTranslation } from "react-i18next"; import { Button, Heading, Text } from "@vector-im/compound-web"; import { logger } from "matrix-js-sdk/lib/logger"; diff --git a/src/room/GroupCallView.test.tsx b/src/room/GroupCallView.test.tsx index aad1827b..0283bef1 100644 --- a/src/room/GroupCallView.test.tsx +++ b/src/room/GroupCallView.test.tsx @@ -13,7 +13,7 @@ import { of } from "rxjs"; import { JoinRule, type RoomState } from "matrix-js-sdk"; import { BrowserRouter } from "react-router-dom"; import userEvent from "@testing-library/user-event"; -import { type RelationsContainer } from "matrix-js-sdk"; +import { type RelationsContainer } from "matrix-js-sdk/lib/models/relations-container"; import { useState } from "react"; import { type MuteStates } from "./MuteStates"; diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index c6e7e3a8..06fcfa4e 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -26,7 +26,7 @@ import { import { JoinRule, type Room } from "matrix-js-sdk"; import { useNavigate } from "react-router-dom"; -import type { IWidgetApiRequest } from "matrix-js-sdk/lib/matrix-widget-api"; +import type { IWidgetApiRequest } from "matrix-widget-api"; import { ElementWidgetActions, type JoinCallData, diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 99f8a282..53742fc2 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -34,7 +34,7 @@ import { logger } from "matrix-js-sdk/lib/logger"; import LogoMark from "../icons/LogoMark.svg?react"; import LogoType from "../icons/LogoType.svg?react"; -import type { IWidgetApiRequest } from "matrix-js-sdk/lib/matrix-widget-api"; +import type { IWidgetApiRequest } from "matrix-widget-api"; import { EndCallButton, MicButton, diff --git a/src/room/MuteStates.ts b/src/room/MuteStates.ts index af78d2eb..e57ba7d5 100644 --- a/src/room/MuteStates.ts +++ b/src/room/MuteStates.ts @@ -12,7 +12,7 @@ import { useEffect, useMemo, } from "react"; -import { type IWidgetApiRequest } from "matrix-js-sdk/lib/matrix-widget-api"; +import { type IWidgetApiRequest } from "matrix-widget-api"; import { logger } from "matrix-js-sdk/lib/logger"; import { diff --git a/src/settings/FeedbackSettingsTab.tsx b/src/settings/FeedbackSettingsTab.tsx index 2e330a28..07a0202e 100644 --- a/src/settings/FeedbackSettingsTab.tsx +++ b/src/settings/FeedbackSettingsTab.tsx @@ -6,7 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { type ChangeEvent, type FC, useCallback } from "react"; -import { secureRandomString } from "matrix-js-sdk"; +import { secureRandomString } from "matrix-js-sdk/lib/randomstring"; import { Trans, useTranslation } from "react-i18next"; import { Button, Text } from "@vector-im/compound-web"; import { logger } from "matrix-js-sdk/lib/logger"; diff --git a/src/settings/rageshake.ts b/src/settings/rageshake.ts index 5e37d5b7..21ed5956 100644 --- a/src/settings/rageshake.ts +++ b/src/settings/rageshake.ts @@ -30,7 +30,7 @@ Please see LICENSE in the repository root for full details. import EventEmitter from "events"; import { throttle } from "lodash-es"; import { type Logger, logger } from "matrix-js-sdk/lib/logger"; -import { secureRandomString } from "matrix-js-sdk"; +import { secureRandomString } from "matrix-js-sdk/lib/randomstring"; import { type LoggingMethod } from "loglevel"; import type loglevel from "loglevel"; diff --git a/src/useTheme.test.ts b/src/useTheme.test.ts index 7e8868fa..6e471462 100644 --- a/src/useTheme.test.ts +++ b/src/useTheme.test.ts @@ -16,7 +16,7 @@ import { vi, } from "vitest"; import EventEmitter from "events"; -import { WidgetApiToWidgetAction } from "matrix-js-sdk/lib/matrix-widget-api"; +import { WidgetApiToWidgetAction } from "matrix-widget-api"; import { useTheme } from "./useTheme"; import { getUrlParams } from "./UrlParams"; diff --git a/src/useTheme.ts b/src/useTheme.ts index 93ee55d4..e992aee7 100644 --- a/src/useTheme.ts +++ b/src/useTheme.ts @@ -6,8 +6,8 @@ Please see LICENSE in the repository root for full details. */ import { useEffect, useLayoutEffect, useRef, useState } from "react"; -import { WidgetApiToWidgetAction } from "matrix-js-sdk/lib/matrix-widget-api"; -import { type IThemeChangeActionRequest } from "matrix-js-sdk/lib/matrix-widget-api"; +import { WidgetApiToWidgetAction } from "matrix-widget-api"; +import { type IThemeChangeActionRequest } from "matrix-widget-api"; import { getUrlParams } from "./UrlParams"; import { widget } from "./widget"; diff --git a/src/utils/matrix.ts b/src/utils/matrix.ts index 27bc3bc8..acc7fa11 100644 --- a/src/utils/matrix.ts +++ b/src/utils/matrix.ts @@ -16,7 +16,7 @@ import { import { ClientEvent } from "matrix-js-sdk"; import { type ISyncStateData, type SyncState } from "matrix-js-sdk/lib/sync"; import { logger } from "matrix-js-sdk/lib/logger"; -import { secureRandomBase64Url } from "matrix-js-sdk"; +import { secureRandomBase64Url } from "matrix-js-sdk/lib/randomstring"; import type { MatrixClient, Room } from "matrix-js-sdk"; import IndexedDBWorker from "../IndexedDBWorker?worker"; diff --git a/src/utils/test-viewmodel.ts b/src/utils/test-viewmodel.ts index 9723d8ed..ca358c2c 100644 --- a/src/utils/test-viewmodel.ts +++ b/src/utils/test-viewmodel.ts @@ -14,7 +14,7 @@ import { } from "matrix-js-sdk/lib/matrixrtc"; import { BehaviorSubject, of } from "rxjs"; import { vitest } from "vitest"; -import { type RelationsContainer } from "matrix-js-sdk"; +import { type RelationsContainer } from "matrix-js-sdk/lib/models/relations-container"; import EventEmitter from "events"; import { E2eeType } from "../e2ee/e2eeType"; diff --git a/src/widget.ts b/src/widget.ts index f7fe053d..d3124dc9 100644 --- a/src/widget.ts +++ b/src/widget.ts @@ -6,16 +6,16 @@ Please see LICENSE in the repository root for full details. */ import { logger } from "matrix-js-sdk/lib/logger"; -import { EventType } from "matrix-js-sdk/lib/types"; +import { EventType } from "matrix-js-sdk"; import { createRoomWidgetClient } from "matrix-js-sdk"; import { WidgetApi, MatrixCapabilities, WidgetApiToWidgetAction, -} from "matrix-js-sdk/lib/matrix-widget-api"; +} from "matrix-widget-api"; import type { MatrixClient } from "matrix-js-sdk"; -import type { IWidgetApiRequest } from "matrix-js-sdk/lib/matrix-widget-api"; +import type { IWidgetApiRequest } from "matrix-widget-api"; import { LazyEventEmitter } from "./LazyEventEmitter"; import { getUrlParams } from "./UrlParams"; import { Config } from "./config/Config"; diff --git a/yarn.lock b/yarn.lock index 9b560160..c6b9c56b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6512,7 +6512,7 @@ matrix-events-sdk@0.0.1: unhomoglyph "^1.0.6" uuid "11" -matrix-widget-api@^1.10.0: +matrix-widget-api@1.11.0, matrix-widget-api@^1.10.0: version "1.11.0" resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.11.0.tgz#2f548b11a7c0df789d5d4fdb5cc9ef7af8aef3da" integrity sha512-ED/9hrJqDWVLeED0g1uJnYRhINh3ZTquwurdM+Hc8wLVJIQ8G/r7A7z74NC+8bBIHQ1Jo7i1Uq5CoJp/TzFYrA== From 6f93a037cf6c593da13d2d6d62e7d47771756e7c Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 13 Mar 2025 18:36:01 +0100 Subject: [PATCH 035/225] import cleanups --- package.json | 3 ++- renovate.json | 5 +++++ src/@types/global.d.ts | 1 - src/home/CallList.tsx | 4 +--- src/profile/useProfile.ts | 2 +- src/room/GroupCallView.test.tsx | 3 +-- src/room/GroupCallView.tsx | 3 +-- src/room/useJoinRule.ts | 3 +-- src/utils/matrix.ts | 9 ++++----- src/utils/test-viewmodel.ts | 3 +-- src/widget.ts | 3 +-- 11 files changed, 18 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 2cf05609..cacd969b 100644 --- a/package.json +++ b/package.json @@ -125,6 +125,7 @@ "vitest-axe": "^1.0.0-pre.3" }, "resolutions": { - "@livekit/components-core/rxjs": "^7.8.1" + "@livekit/components-core/rxjs": "^7.8.1", + "matrix-widget-api": "1.11.0" } } diff --git a/renovate.json b/renovate.json index 23ed1be2..31709cf0 100644 --- a/renovate.json +++ b/renovate.json @@ -24,6 +24,11 @@ "matchDepNames": ["matrix-js-sdk"], "enabled": false }, + { + "groupName": "matrix-widget-api", + "matchDepNames": ["matrix-widget-api"], + "extends": ["schedule:weekly"] + }, { "groupName": "Compound", "matchPackageNames": ["@vector-im/compound-{/,}**"], diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index 2922ca06..ac5ed913 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -5,7 +5,6 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import "matrix-js-sdk/lib/types"; import { type setLogLevel as setLKLogLevel } from "livekit-client"; import type { DurationFormat as PolyfillDurationFormat } from "@formatjs/intl-durationformat"; diff --git a/src/home/CallList.tsx b/src/home/CallList.tsx index b80ff8da..2e3d1db3 100644 --- a/src/home/CallList.tsx +++ b/src/home/CallList.tsx @@ -6,15 +6,13 @@ Please see LICENSE in the repository root for full details. */ import { Link } from "react-router-dom"; -import { type MatrixClient } from "matrix-js-sdk"; -import { type RoomMember } from "matrix-js-sdk"; -import { type Room } from "matrix-js-sdk"; import { type FC, useCallback, type MouseEvent, useState } from "react"; import { useTranslation } from "react-i18next"; import { IconButton, Text } from "@vector-im/compound-web"; import { CloseIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; import classNames from "classnames"; +import type { RoomMember, Room, MatrixClient } from "matrix-js-sdk"; import { Avatar, Size } from "../Avatar"; import styles from "./CallList.module.css"; import { getRelativeRoomUrl } from "../utils/matrix"; diff --git a/src/profile/useProfile.ts b/src/profile/useProfile.ts index 8f68747f..b588f053 100644 --- a/src/profile/useProfile.ts +++ b/src/profile/useProfile.ts @@ -5,10 +5,10 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type MatrixClient } from "matrix-js-sdk"; import { type MatrixEvent, type User, + type MatrixClient, UserEvent, type FileType, } from "matrix-js-sdk"; diff --git a/src/room/GroupCallView.test.tsx b/src/room/GroupCallView.test.tsx index 0283bef1..655096f1 100644 --- a/src/room/GroupCallView.test.tsx +++ b/src/room/GroupCallView.test.tsx @@ -7,10 +7,9 @@ Please see LICENSE in the repository root for full details. import { beforeEach, expect, type MockedFunction, test, vitest } from "vitest"; import { render, waitFor, screen } from "@testing-library/react"; -import { type MatrixClient } from "matrix-js-sdk"; +import { type MatrixClient, JoinRule, type RoomState } from "matrix-js-sdk"; import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; import { of } from "rxjs"; -import { JoinRule, type RoomState } from "matrix-js-sdk"; import { BrowserRouter } from "react-router-dom"; import userEvent from "@testing-library/user-event"; import { type RelationsContainer } from "matrix-js-sdk/lib/models/relations-container"; diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index 06fcfa4e..d5cd27e8 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -13,7 +13,7 @@ import { useMemo, useState, } from "react"; -import { type MatrixClient } from "matrix-js-sdk"; +import { type MatrixClient, JoinRule, type Room } from "matrix-js-sdk"; import { Room as LivekitRoom, isE2EESupported as isE2EESupportedBrowser, @@ -23,7 +23,6 @@ import { MatrixRTCSessionEvent, type MatrixRTCSession, } from "matrix-js-sdk/lib/matrixrtc"; -import { JoinRule, type Room } from "matrix-js-sdk"; import { useNavigate } from "react-router-dom"; import type { IWidgetApiRequest } from "matrix-widget-api"; diff --git a/src/room/useJoinRule.ts b/src/room/useJoinRule.ts index d2a7143f..ae17e162 100644 --- a/src/room/useJoinRule.ts +++ b/src/room/useJoinRule.ts @@ -6,9 +6,8 @@ Please see LICENSE in the repository root for full details. */ import { useCallback } from "react"; -import { type JoinRule } from "matrix-js-sdk"; -import type { Room } from "matrix-js-sdk"; +import type { JoinRule, Room } from "matrix-js-sdk"; import { useRoomState } from "./useRoomState"; export function useJoinRule(room: Room): JoinRule { diff --git a/src/utils/matrix.ts b/src/utils/matrix.ts index acc7fa11..963ca962 100644 --- a/src/utils/matrix.ts +++ b/src/utils/matrix.ts @@ -5,20 +5,19 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { IndexedDBStore } from "matrix-js-sdk"; -import { MemoryStore } from "matrix-js-sdk"; import { + ClientEvent, createClient, - type ICreateClientOpts, + IndexedDBStore, + MemoryStore, Preset, Visibility, } from "matrix-js-sdk"; -import { ClientEvent } from "matrix-js-sdk"; import { type ISyncStateData, type SyncState } from "matrix-js-sdk/lib/sync"; import { logger } from "matrix-js-sdk/lib/logger"; import { secureRandomBase64Url } from "matrix-js-sdk/lib/randomstring"; -import type { MatrixClient, Room } from "matrix-js-sdk"; +import type { ICreateClientOpts, MatrixClient, Room } from "matrix-js-sdk"; import IndexedDBWorker from "../IndexedDBWorker?worker"; import { generateUrlSearchParams, getUrlParams } from "../UrlParams"; import { Config } from "../config/Config"; diff --git a/src/utils/test-viewmodel.ts b/src/utils/test-viewmodel.ts index ca358c2c..c8a93c73 100644 --- a/src/utils/test-viewmodel.ts +++ b/src/utils/test-viewmodel.ts @@ -6,8 +6,6 @@ Please see LICENSE in the repository root for full details. */ import { ConnectionState } from "livekit-client"; -import { type MatrixClient } from "matrix-js-sdk"; -import { type RoomMember } from "matrix-js-sdk"; import { type CallMembership, type MatrixRTCSession, @@ -17,6 +15,7 @@ import { vitest } from "vitest"; import { type RelationsContainer } from "matrix-js-sdk/lib/models/relations-container"; import EventEmitter from "events"; +import type { RoomMember, MatrixClient } from "matrix-js-sdk"; import { E2eeType } from "../e2ee/e2eeType"; import { CallViewModel } from "../state/CallViewModel"; import { mockLivekitRoom, mockMatrixRoom, MockRTCSession } from "./test"; diff --git a/src/widget.ts b/src/widget.ts index d3124dc9..e04ed657 100644 --- a/src/widget.ts +++ b/src/widget.ts @@ -6,8 +6,7 @@ Please see LICENSE in the repository root for full details. */ import { logger } from "matrix-js-sdk/lib/logger"; -import { EventType } from "matrix-js-sdk"; -import { createRoomWidgetClient } from "matrix-js-sdk"; +import { EventType, createRoomWidgetClient } from "matrix-js-sdk"; import { WidgetApi, MatrixCapabilities, From 0fbde40359b3a37e2dcd64fae888130096e1c65d Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 25 Mar 2025 08:18:34 +0100 Subject: [PATCH 036/225] test: End to end integrated test for call widget --- .gitignore | 2 +- WIDGET_TEST.md | 28 ++++ backend/ew.test.config.json | 54 ++++++++ dev-backend-docker-compose.yml | 11 ++ playwright-backend-docker-compose.yml | 11 ++ playwright/fixtures/widget-user.ts | 169 ++++++++++++++++++++++++ playwright/global.d.ts | 16 +++ playwright/widget/simple-create.spec.ts | 97 ++++++++++++++ 8 files changed, 387 insertions(+), 1 deletion(-) create mode 100644 WIDGET_TEST.md create mode 100644 backend/ew.test.config.json create mode 100644 playwright/fixtures/widget-user.ts create mode 100644 playwright/global.d.ts create mode 100644 playwright/widget/simple-create.spec.ts diff --git a/.gitignore b/.gitignore index 938fe508..6481b5e8 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,4 @@ yarn-error.log /test-results/ /playwright-report/ /blob-report/ -/playwright/.cache/ +/playwright/.cache/ \ No newline at end of file diff --git a/WIDGET_TEST.md b/WIDGET_TEST.md new file mode 100644 index 00000000..53e26a29 --- /dev/null +++ b/WIDGET_TEST.md @@ -0,0 +1,28 @@ +# Testing Element-Call in widget mode + +When running `yarn backend` the latest element-web develop will be deployed and served on `http://localhost:8081`. +In a development environment, you might prefer to just use the `element-web` repo directly, but this setup is useful for CI/CD testing. + +## Setup + +The element-web configuration is modified to: + +- Enable to use the local widget instance (`element_call.url` https://localhost:3000). +- Enable the labs features (`feature_group_calls`, `feature_element_call_video_rooms`). + +The default configuration used by docker-compose is in `test-container/config.json`. There is a fixture for playwright +that uses + +## Running the element-web instance + +It is part of the existing backend setup. To start the backend, run: + +```sh +yarn backend +``` + +Then open `http://localhost:8081` in your browser. + +## Basic fixture + +A base fixture is provided in `/playwright/fixtures/widget-user.ts` that will register two users that shares a room. diff --git a/backend/ew.test.config.json b/backend/ew.test.config.json new file mode 100644 index 00000000..7fe0c63f --- /dev/null +++ b/backend/ew.test.config.json @@ -0,0 +1,54 @@ +{ + "default_server_config": { + "m.homeserver": { + "base_url": "http://synapse.localhost:8008", + "server_name": "synapse.localhost" + } + }, + "disable_custom_urls": false, + "disable_guests": false, + "disable_login_language_selector": false, + "disable_3pid_login": false, + "force_verification": false, + "brand": "Element", + "integrations_ui_url": "https://scalar.vector.im/", + "integrations_rest_url": "https://scalar.vector.im/api", + "integrations_widgets_urls": [ + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" + ], + "default_widget_container_height": 280, + "default_country_code": "GB", + "show_labs_settings": false, + "features": { + "feature_element_call_video_rooms": true, + "feature_video_rooms": true, + "feature_group_calls": true, + "feature_release_announcement": false + }, + "default_federate": true, + "default_theme": "light", + "room_directory": { + "servers": ["matrix.org"] + }, + "enable_presence_by_hs_url": { + "https://matrix.org": false, + "https://matrix-client.matrix.org": false + }, + "setting_defaults": { + "breadcrumbs": true, + "feature_group_calls": true + }, + "jitsi": { + "preferred_domain": "meet.element.io" + }, + "element_call": { + "url": "https://localhost:3000", + "participant_limit": 8, + "brand": "Element Call" + }, + "map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx" +} diff --git a/dev-backend-docker-compose.yml b/dev-backend-docker-compose.yml index dcfb8d66..fa07afde 100644 --- a/dev-backend-docker-compose.yml +++ b/dev-backend-docker-compose.yml @@ -68,6 +68,17 @@ services: networks: - ecbackend + element-web: + image: ghcr.io/element-hq/element-web:develop + volumes: + - ./backend/ew.test.config.json:/app/config.json + environment: + ELEMENT_WEB_PORT: 81 + ports: + - "8081:81" + networks: + - ecbackend + nginx: # openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout tls_localhost_key.pem -out tls_localhost_cert.pem -subj "/C=GB/ST=London/L=London/O=Alros/OU=IT Department/CN=localhost" hostname: synapse.localhost diff --git a/playwright-backend-docker-compose.yml b/playwright-backend-docker-compose.yml index fed10fe8..e5cf12b5 100644 --- a/playwright-backend-docker-compose.yml +++ b/playwright-backend-docker-compose.yml @@ -51,6 +51,17 @@ services: networks: - ecbackend + element-web: + image: ghcr.io/element-hq/element-web:develop + volumes: + - ./backend/ew.test.config.json:/app/config.json + environment: + ELEMENT_WEB_PORT: 81 + ports: + - "8081:81" + networks: + - ecbackend + synapse: hostname: homeserver image: docker.io/matrixdotorg/synapse:latest diff --git a/playwright/fixtures/widget-user.ts b/playwright/fixtures/widget-user.ts new file mode 100644 index 00000000..391a2dd6 --- /dev/null +++ b/playwright/fixtures/widget-user.ts @@ -0,0 +1,169 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE in the repository root for full details. +*/ + +import { type Page, test, expect, type JSHandle } from "@playwright/test"; + +import type { MatrixClient } from "matrix-js-sdk/src"; + +export type UserBaseFixture = { + mxId: string; + page: Page; + clientHandle: JSHandle; +}; + +export type BaseWidgetSetup = { + brooks: UserBaseFixture; + whistler: UserBaseFixture; +}; + +export interface MyFixtures { + asWidget: BaseWidgetSetup; +} + +const PASSWORD = "foobarbaz1!"; + +// Minimal config.json for the local element-web instance +const CONFIG_JSON = { + default_server_config: { + "m.homeserver": { + base_url: "http://synapse.localhost:8008", + server_name: "synapse.localhost", + }, + }, + + element_call: { + url: "https://localhost:3000", + participant_limit: 8, + brand: "Element Call", + }, + + // The default language is set here for test consistency + setting_defaults: { + language: "en-GB", + feature_group_calls: true, + }, + + // the location tests want a map style url. + map_style_url: + "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx", + + features: { + // We don't want to go through the feature announcement during the e2e test + feature_release_announcement: false, + feature_element_call_video_rooms: true, + feature_video_rooms: true, + feature_group_calls: true, + }, +}; + +export const widgetTest = test.extend({ + asWidget: async ({ browser, context }, pUse) => { + await context.route(`http://localhost:8081/config.json*`, async (route) => { + await route.fulfill({ json: CONFIG_JSON }); + }); + + const userA = `brooks_${Date.now()}`; + const userB = `whistler_${Date.now()}`; + + const user1Context = await browser.newContext({ + reducedMotion: "reduce", + }); + const ewPage1 = await user1Context.newPage(); + // Register the first user + await ewPage1.goto("http://localhost:8081/#/welcome"); + await ewPage1.getByRole("link", { name: "Create Account" }).click(); + await ewPage1.getByRole("textbox", { name: "Username" }).fill(userA); + await ewPage1 + .getByRole("textbox", { name: "Password", exact: true }) + .fill(PASSWORD); + await ewPage1.getByRole("textbox", { name: "Confirm password" }).click(); + await ewPage1 + .getByRole("textbox", { name: "Confirm password" }) + .fill(PASSWORD); + await ewPage1.getByRole("button", { name: "Register" }).click(); + await expect( + ewPage1.getByRole("heading", { name: `Welcome ${userA}` }), + ).toBeVisible(); + + const brooksClientHandle = await ewPage1.evaluateHandle(() => + window.mxMatrixClientPeg.get(), + ); + const brooksMxId = (await brooksClientHandle.evaluate((cli) => { + return cli.getUserId(); + }, brooksClientHandle))!; + + const user2Context = await browser.newContext({ + reducedMotion: "reduce", + }); + const ewPage2 = await user2Context.newPage(); + // Register the second user + await ewPage2.goto("http://localhost:8081/#/welcome"); + await ewPage2.getByRole("link", { name: "Create Account" }).click(); + await ewPage2.getByRole("textbox", { name: "Username" }).fill(userB); + await ewPage2 + .getByRole("textbox", { name: "Password", exact: true }) + .fill(PASSWORD); + await ewPage2.getByRole("textbox", { name: "Confirm password" }).click(); + await ewPage2 + .getByRole("textbox", { name: "Confirm password" }) + .fill(PASSWORD); + await ewPage2.getByRole("button", { name: "Register" }).click(); + await expect( + ewPage2.getByRole("heading", { name: `Welcome ${userB}` }), + ).toBeVisible(); + + const whistlerClientHandle = await ewPage2.evaluateHandle(() => + window.mxMatrixClientPeg.get(), + ); + const whistlerMxId = (await whistlerClientHandle.evaluate((cli) => { + return cli.getUserId(); + }, whistlerClientHandle))!; + + // Invite the second user + await ewPage1.getByRole("button", { name: "Add room" }).click(); + await ewPage1.getByText("New room").click(); + await ewPage1.getByRole("textbox", { name: "Name" }).fill("Welcome Room"); + await ewPage1.getByRole("button", { name: "Create room" }).click(); + await expect(ewPage1.getByText("You created this room.")).toBeVisible(); + await expect(ewPage1.getByText("Encryption enabled")).toBeVisible(); + + await ewPage1 + .getByRole("button", { name: "Invite to this room", exact: true }) + .click(); + await expect( + ewPage1.getByRole("heading", { name: "Invite to Welcome Room" }), + ).toBeVisible(); + + await ewPage1.getByRole("textbox").fill(whistlerMxId); + await ewPage1.getByRole("textbox").click(); + await ewPage1.getByRole("button", { name: "Invite" }).click(); + + // Accept the invite + await expect( + ewPage2.getByRole("treeitem", { name: "Welcome Room" }), + ).toBeVisible(); + await ewPage2.getByRole("treeitem", { name: "Welcome Room" }).click(); + await ewPage2.getByRole("button", { name: "Accept" }).click(); + await expect( + ewPage2.getByRole("main").getByRole("heading", { name: "Welcome Room" }), + ).toBeVisible(); + + // Renamed use to pUse, as a workaround for eslint error that was thinking this use was a react use. + await pUse({ + brooks: { + mxId: brooksMxId, + page: ewPage1, + clientHandle: brooksClientHandle, + }, + whistler: { + mxId: whistlerMxId, + page: ewPage2, + clientHandle: whistlerClientHandle, + }, + }); + }, +}); diff --git a/playwright/global.d.ts b/playwright/global.d.ts new file mode 100644 index 00000000..2108240e --- /dev/null +++ b/playwright/global.d.ts @@ -0,0 +1,16 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE in the repository root for full details. +*/ + +import type * as Matrix from "matrix-js-sdk/src"; + +declare global { + interface Window { + mxMatrixClientPeg: { + get(): Matrix.MatrixClient; + }; + } +} diff --git a/playwright/widget/simple-create.spec.ts b/playwright/widget/simple-create.spec.ts new file mode 100644 index 00000000..3712f5c4 --- /dev/null +++ b/playwright/widget/simple-create.spec.ts @@ -0,0 +1,97 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE in the repository root for full details. +*/ + +import { expect, test } from "@playwright/test"; + +import { widgetTest } from "../fixtures/widget-user.ts"; + +widgetTest("Start a new call as widget", async ({ asWidget, browserName }) => { + test.skip( + browserName === "firefox", + "This test is not working on firefox, after hangup brooks is locked in a strange state with a blank widget", + ); + + const { brooks, whistler } = asWidget; + + await expect( + brooks.page.getByRole("button", { name: "Video call" }), + ).toBeVisible(); + await brooks.page.getByRole("button", { name: "Video call" }).click(); + + await expect( + brooks.page.getByRole("menuitem", { name: "Legacy Call" }), + ).toBeVisible(); + await expect( + brooks.page.getByRole("menuitem", { name: "Element Call" }), + ).toBeVisible(); + + await brooks.page.getByRole("menuitem", { name: "Element Call" }).click(); + + await expect( + brooks.page + .locator('iframe[title="Element Call"]') + .contentFrame() + .getByTestId("lobby_joinCall"), + ).toBeVisible(); + + await brooks.page + .locator('iframe[title="Element Call"]') + .contentFrame() + .getByTestId("lobby_joinCall") + .click(); + + // Check the join indicator on the room list + await expect( + brooks.page.locator("div").filter({ hasText: /^Joined • 1$/ }), + ).toBeVisible(); + + // Join from the other side + await expect(whistler.page.getByText("Video call started")).toBeVisible(); + await expect( + whistler.page.getByRole("button", { name: "Join" }), + ).toBeVisible(); + await whistler.page.getByRole("button", { name: "Join" }).click(); + + await expect( + whistler.page + .locator('iframe[title="Element Call"]') + .contentFrame() + .getByTestId("lobby_joinCall"), + ).toBeVisible(); + + await whistler.page + .locator('iframe[title="Element Call"]') + .contentFrame() + .getByTestId("lobby_joinCall") + .click(); + + await expect( + whistler.page.locator("div").filter({ hasText: /^Joined • 2$/ }), + ).toBeVisible(); + + await expect( + brooks.page.locator("div").filter({ hasText: /^Joined • 2$/ }), + ).toBeVisible(); + + // Whistler leaves + await whistler.page.waitForTimeout(1000); + await whistler.page + .locator('iframe[title="Element Call"]') + .contentFrame() + .getByTestId("incall_leave") + .click(); + + // Brooks leaves + await brooks.page + .locator('iframe[title="Element Call"]') + .contentFrame() + .getByTestId("incall_leave") + .click(); + + await expect(whistler.page.locator(".mx_BasicMessageComposer")).toBeVisible(); + await expect(brooks.page.locator(".mx_BasicMessageComposer")).toBeVisible(); +}); From 53fa21b97ab02f27ed844068ffe4c723f45c645e Mon Sep 17 00:00:00 2001 From: fkwp Date: Wed, 26 Mar 2025 22:36:47 +0100 Subject: [PATCH 037/225] update .well-known example using the proposed endpoint routing --- docs/self-hosting.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/self-hosting.md b/docs/self-hosting.md index 7aa0dbaa..62839773 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -130,11 +130,11 @@ server { "org.matrix.msc4143.rtc_foci": [ { "type": "livekit", - "livekit_service_url": "https://matrix-rtc.example.com" + "livekit_service_url": "https://matrix-rtc.example.com/livekit/jwt" }, { "type": "livekit", - "livekit_service_url": "https://matrix-rtc-2.example.com" + "livekit_service_url": "https://matrix-rtc-2.example.com/livekit/jwt" }, { "type": "nextgen_new_foci_type", From ae339ea5ccaebb7b62df92f000cb54d9902a60ec Mon Sep 17 00:00:00 2001 From: Robin Date: Thu, 27 Mar 2025 14:47:01 -0400 Subject: [PATCH 038/225] Fix formatting issues --- src/e2ee/matrixKeyProvider.test.ts | 5 ++++- src/state/CallViewModel.test.ts | 5 ++++- tsconfig.json | 6 +----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/e2ee/matrixKeyProvider.test.ts b/src/e2ee/matrixKeyProvider.test.ts index aa224792..f46218e7 100644 --- a/src/e2ee/matrixKeyProvider.test.ts +++ b/src/e2ee/matrixKeyProvider.test.ts @@ -6,7 +6,10 @@ Please see LICENSE in the repository root for full details. */ import { describe, expect, test, vi } from "vitest"; -import { type MatrixRTCSession, MatrixRTCSessionEvent } from "matrix-js-sdk/lib/matrixrtc"; +import { + type MatrixRTCSession, + MatrixRTCSessionEvent, +} from "matrix-js-sdk/lib/matrixrtc"; import { KeyProviderEvent } from "livekit-client"; import { MatrixKeyProvider } from "./matrixKeyProvider"; diff --git a/src/state/CallViewModel.test.ts b/src/state/CallViewModel.test.ts index dfdf7d90..f0066476 100644 --- a/src/state/CallViewModel.test.ts +++ b/src/state/CallViewModel.test.ts @@ -27,7 +27,10 @@ import { } from "livekit-client"; import * as ComponentsCore from "@livekit/components-core"; import { isEqual } from "lodash-es"; -import { type CallMembership, type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; +import { + type CallMembership, + type MatrixRTCSession, +} from "matrix-js-sdk/lib/matrixrtc"; import { CallViewModel, type Layout } from "./CallViewModel"; import { diff --git a/tsconfig.json b/tsconfig.json index 0f035c10..be12658e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -47,9 +47,5 @@ "plugins": [{ "name": "typescript-eslint-language-service" }] }, - "include": [ - "./src/**/*.ts", - "./src/**/*.tsx", - "./playwright/**/*.ts" - ] + "include": ["./src/**/*.ts", "./src/**/*.tsx", "./playwright/**/*.ts"] } From eb18cbef78ce2e9335fbc2548fcc9738d441b395 Mon Sep 17 00:00:00 2001 From: Robin Date: Thu, 27 Mar 2025 16:04:03 -0400 Subject: [PATCH 039/225] Consolidate imports --- src/useMatrixRTCSessionMemberships.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/useMatrixRTCSessionMemberships.ts b/src/useMatrixRTCSessionMemberships.ts index 69b2a12d..25b790d2 100644 --- a/src/useMatrixRTCSessionMemberships.ts +++ b/src/useMatrixRTCSessionMemberships.ts @@ -6,8 +6,8 @@ Please see LICENSE in the repository root for full details. */ import { logger } from "matrix-js-sdk/lib/logger"; -import { type CallMembership } from "matrix-js-sdk/lib/matrixrtc"; import { + type CallMembership, type MatrixRTCSession, MatrixRTCSessionEvent, } from "matrix-js-sdk/lib/matrixrtc"; From aab4efe03a4bb7146d24d04920420bc4bad8cc83 Mon Sep 17 00:00:00 2001 From: Robin Date: Thu, 27 Mar 2025 16:09:59 -0400 Subject: [PATCH 040/225] Use type imports consistently --- src/home/CallList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/home/CallList.tsx b/src/home/CallList.tsx index 2e3d1db3..44422587 100644 --- a/src/home/CallList.tsx +++ b/src/home/CallList.tsx @@ -6,13 +6,13 @@ Please see LICENSE in the repository root for full details. */ import { Link } from "react-router-dom"; +import { type RoomMember, type Room, type MatrixClient } from "matrix-js-sdk"; import { type FC, useCallback, type MouseEvent, useState } from "react"; import { useTranslation } from "react-i18next"; import { IconButton, Text } from "@vector-im/compound-web"; import { CloseIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; import classNames from "classnames"; -import type { RoomMember, Room, MatrixClient } from "matrix-js-sdk"; import { Avatar, Size } from "../Avatar"; import styles from "./CallList.module.css"; import { getRelativeRoomUrl } from "../utils/matrix"; From bfd4bb2ec1eda2239dc2c4ee5cd5923270287ced Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Thu, 27 Mar 2025 20:35:31 +0000 Subject: [PATCH 041/225] Show URL params and environment variables in developer tab (#3134) --- locales/en/app.json | 2 ++ src/settings/DeveloperSettingsTab.tsx | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/locales/en/app.json b/locales/en/app.json index d80a8502..12f11a98 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -65,12 +65,14 @@ "debug_tile_layout_label": "Debug tile layout", "device_id": "Device ID: {{id}}", "duplicate_tiles_label": "Number of additional tile copies per participant", + "environment_variables": "Environment variables", "hostname": "Hostname: {{hostname}}", "livekit_server_info": "LiveKit Server Info", "livekit_sfu": "LiveKit SFU: {{url}}", "matrix_id": "Matrix ID: {{id}}", "show_connection_stats": "Show connection statistics", "show_non_member_tiles": "Show tiles for non-member media", + "url_params": "URL parameters", "use_new_membership_manager": "Use the new implementation of the call MembershipManager" }, "disconnected_banner": "Connectivity to the server has been lost.", diff --git a/src/settings/DeveloperSettingsTab.tsx b/src/settings/DeveloperSettingsTab.tsx index fa42292c..0981a843 100644 --- a/src/settings/DeveloperSettingsTab.tsx +++ b/src/settings/DeveloperSettingsTab.tsx @@ -20,6 +20,7 @@ import { import type { MatrixClient } from "matrix-js-sdk"; import type { Room as LivekitRoom } from "livekit-client"; import styles from "./DeveloperSettingsTab.module.css"; +import { useUrlParams } from "../UrlParams"; interface Props { client: MatrixClient; livekitRoom?: LivekitRoom; @@ -43,6 +44,8 @@ export const DeveloperSettingsTab: FC = ({ client, livekitRoom }) => { useNewMembershipManagerSetting, ); + const urlParams = useUrlParams(); + const sfuUrl = useMemo((): URL | null => { if (livekitRoom?.engine.client.ws?.url) { // strip the URL params @@ -169,6 +172,10 @@ export const DeveloperSettingsTab: FC = ({ client, livekitRoom }) => { ) : null} +

{t("developer_mode.environment_variables")}

+
{JSON.stringify(import.meta.env, null, 2)}
+

{t("developer_mode.url_params")}

+
{JSON.stringify(urlParams, null, 2)}
); }; From 1be073301183ac9571adae943a075f64bee7e8be Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Fri, 28 Mar 2025 14:06:00 +0000 Subject: [PATCH 042/225] Always run build CI workflow (#3139) As identified in https://github.com/element-hq/element-call/pull/3116#issuecomment-2759148857 depending on the contents of a PR it may not be possible to merge due to required workflows not actually being run. This change will mean that the build CI workflow is run irrespective of the contents. --- .github/workflows/build.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 06f1e853..47f956c7 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -5,16 +5,8 @@ on: - synchronize - opened - labeled - paths-ignore: - - ".github/ISSUE_TEMPLATE/**" - - ".github/CODEOWNERS" - - "docs/**" push: branches: [livekit, full-mesh] - paths-ignore: - - ".github/ISSUE_TEMPLATE/**" - - ".github/CODEOWNERS" - - "docs/**" jobs: build_full_element_call: # Use the full package vite build From fd2c1f641051a1e03901d36ddd120e0195d5c8ea Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Fri, 28 Mar 2025 14:18:53 +0000 Subject: [PATCH 043/225] Clarify who is responsible for compliance and consent in relation to analytics (#3116) It varies depending on if you are using the full or embedded package. --- docs/embedded-standalone.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/embedded-standalone.md b/docs/embedded-standalone.md index 0f9dff96..f96f4fc0 100644 --- a/docs/embedded-standalone.md +++ b/docs/embedded-standalone.md @@ -2,13 +2,16 @@ Element Call is available as two different packages: Full Package and Embedded Package. The Full Package is designed for standalone use, while the Embedded Package is designed for widget mode only. The table below provides a comparison of the two packages: -| | Full Package | Embedded Package | -| ------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------- | -| **Supports use as standalone** | ✅ | ❌ | -| **Supports use as widget** | ✅ | ✅ | -| **Deployment mode** | Hosted as a static web page and accessed via a URL when used as a widget | Bundled within a messenger app for seamless integration | -| **Release artifacts** | Docker Image, Tarball | Tarball, NPM for Web, Android AAR, SwiftPM for iOS | -| **Recommended for** | Standalone/guest access usage | Embedding within messenger apps | +| | Full Package | Embedded Package | +| -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Supports use as standalone** | ✅ | ❌ | +| **Supports use as widget** | ✅ | ✅ | +| **Deployment mode** | Hosted as a static web page and accessed via a URL when used as a widget | Bundled within a messenger app for seamless integration | +| **Release artifacts** | Docker Image, Tarball | Tarball, NPM for Web, Android AAR, SwiftPM for iOS | +| **Recommended for** | Standalone/guest access usage | Embedding within messenger apps | +| **Responsibility for regulatory compliance** | The administrator that is deploying the app is responsible for compliance with any applicable regulations (e.g. privacy) | The developer of the messenger app is responsible for compliance | +| **Analytics consent** | Element Call will show a consent UI. | Element Call will not show a consent UI. The messenger app should only provide the embedded Element Call with the [analytics URL parameters](./url-params.md#embedded-only-parameters) if consent has been granted. | +| **Analytics data** | Element Call will send data to the Posthog, Sentry and Open Telemetry targets specified by the administrator in the `config.json` | Element Call will send data to the Posthog and Sentry targets specified in the URL parameters by the messenger app | For examples of how to use the platform specific release artifacts (e.g. Android AAR) see the Element Messenger apps for: [Web](https://github.com/element-hq/element-web), [iOS](https://github.com/element-hq/element-x-ios) and [Android](https://github.com/element-hq/element-x-android). From 9f2f1d86414d5033b403235d79049ae54074a390 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Fri, 28 Mar 2025 18:26:22 +0000 Subject: [PATCH 044/225] Improve documentation for how to use the embedded package (#3146) --- docs/embedded-standalone.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/embedded-standalone.md b/docs/embedded-standalone.md index f96f4fc0..440dfac0 100644 --- a/docs/embedded-standalone.md +++ b/docs/embedded-standalone.md @@ -1,6 +1,10 @@ ## Element Call packages -Element Call is available as two different packages: Full Package and Embedded Package. The Full Package is designed for standalone use, while the Embedded Package is designed for widget mode only. The table below provides a comparison of the two packages: +Element Call is available as two different packages: Full Package and Embedded Package. + +The Full Package is designed for standalone use, while the Embedded Package is designed for widget mode only. + +The table below provides a comparison of the two packages: | | Full Package | Embedded Package | | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -13,8 +17,16 @@ Element Call is available as two different packages: Full Package and Embedded P | **Analytics consent** | Element Call will show a consent UI. | Element Call will not show a consent UI. The messenger app should only provide the embedded Element Call with the [analytics URL parameters](./url-params.md#embedded-only-parameters) if consent has been granted. | | **Analytics data** | Element Call will send data to the Posthog, Sentry and Open Telemetry targets specified by the administrator in the `config.json` | Element Call will send data to the Posthog and Sentry targets specified in the URL parameters by the messenger app | -For examples of how to use the platform specific release artifacts (e.g. Android AAR) see -the Element Messenger apps for: [Web](https://github.com/element-hq/element-web), [iOS](https://github.com/element-hq/element-x-ios) and [Android](https://github.com/element-hq/element-x-android). +### Using the embedded package within a messenger app + +Currently the best way to understand the necessary steps is to look at the implementations in the Element Messenger apps: [Web](https://github.com/element-hq/element-web/pull/29309), [iOS](https://github.com/element-hq/element-x-ios/pull/3939) and [Android](https://github.com/element-hq/element-x-android/pull/4470). + +The basics are: + +1. Add the appropriate platform dependency as given for a [release](https://github.com/element-hq/element-call/releases), or use the embedded tarball. e.g. `npm install @element-hq/element-call-embedded@0.9.0` +2. Include the assets from the platform dependency in the build process. e.g. copy the assets during a [Webpack](https://github.com/element-hq/element-web/blob/247cd8d56d832d006d7dfb919d1042529d712b59/webpack.config.js#L677-L682) build. +3. Use the `index.html` entrypointof the imported assets when you are constructing the WebView or iframe. e.g. using a [relative path in a webapp](https://github.com/element-hq/element-web/blob/247cd8d56d832d006d7dfb919d1042529d712b59/src/models/Call.ts#L680), or on the the Android [WebViewAssetLoader](https://github.com/element-hq/element-x-android/blob/fe5aab6588ecdcf9354a3bfbd9e97c1b31175a8f/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallWidgetProvider.kt#L20) +4. Set any of the [embedded-only URL parameters](./url-params.md#embedded-only-parameters) that you need. ## Widget vs standalone mode From 2073cd3ac1e8bb995316413b6be8cad3e3d2f7a8 Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Mon, 31 Mar 2025 14:18:45 +0200 Subject: [PATCH 045/225] Rename EULA to SSLA (#3135) * Change EULA to SSLA - rename i18n fields - update the config property to `ssla` and deprecate `eula` - use `eula` instead of ssla in case it is provided in the config. * fix default config * completely remove eula fallback --- config/config.devenv.json | 2 +- config/config.sample.json | 2 +- locales/en/app.json | 6 +++--- src/auth/RegisterPage.tsx | 6 +++--- src/config/ConfigOptions.ts | 8 ++++---- src/home/UnauthenticatedView.tsx | 6 +++--- src/room/RoomAuthView.tsx | 6 +++--- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/config/config.devenv.json b/config/config.devenv.json index b39cc628..cebca705 100644 --- a/config/config.devenv.json +++ b/config/config.devenv.json @@ -11,5 +11,5 @@ "features": { "feature_use_device_session_member_events": true }, - "eula": "https://static.element.io/legal/online-EULA.pdf" + "ssla": "https://static.element.io/legal/element-software-and-services-license-agreement-uk-1.pdf" } diff --git a/config/config.sample.json b/config/config.sample.json index bd4e112b..18c5d07a 100644 --- a/config/config.sample.json +++ b/config/config.sample.json @@ -11,5 +11,5 @@ "features": { "feature_use_device_session_member_events": true }, - "eula": "https://static.element.io/legal/online-EULA.pdf" + "ssla": "https://static.element.io/legal/element-software-and-services-license-agreement-uk-1.pdf" } diff --git a/locales/en/app.json b/locales/en/app.json index 12f11a98..51beef1b 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -144,9 +144,9 @@ "rageshake_sending": "Sending…", "rageshake_sending_logs": "Sending debug logs…", "rageshake_sent": "Thanks!", - "recaptcha_caption": "This site is protected by ReCAPTCHA and the Google <2>Privacy Policy and <6>Terms of Service apply.<9>By clicking \"Register\", you agree to our <12>End User Licensing Agreement (EULA)", "recaptcha_dismissed": "Recaptcha dismissed", "recaptcha_not_loaded": "Recaptcha not loaded", + "recaptcha_ssla_caption": "This site is protected by ReCAPTCHA and the Google <2>Privacy Policy and <6>Terms of Service apply.<9>By clicking \"Register\", you agree to our <12>Software and Services License Agreement (SSLA)", "register": { "passwords_must_match": "Passwords must match", "registering": "Registering…" @@ -156,7 +156,7 @@ "register_heading": "Create your account", "return_home_button": "Return to home screen", "room_auth_view_continue_button": "Continue", - "room_auth_view_eula_caption": "By clicking \"Continue\", you agree to our <2>End User Licensing Agreement (EULA)", + "room_auth_view_ssla_caption": "By clicking \"Join call now\", you agree to our <2>Software and Services License Agreement (SSLA)", "screenshare_button_label": "Share screen", "settings": { "audio_tab": { @@ -202,8 +202,8 @@ "submitting": "Submitting…", "switch_camera": "Switch camera", "unauthenticated_view_body": "Not registered yet? <2>Create an account", - "unauthenticated_view_eula_caption": "By clicking \"Go\", you agree to our <2>End User Licensing Agreement (EULA)", "unauthenticated_view_login_button": "Login to your account", + "unauthenticated_view_ssla_caption": "By clicking \"Go\", you agree to our <2>Software and Services License Agreement (SSLA)", "unmute_microphone_button_label": "Unmute microphone", "version": "{{productName}} version: {{version}}", "video_tile": { diff --git a/src/auth/RegisterPage.tsx b/src/auth/RegisterPage.tsx index 6535bcb5..c89bf06e 100644 --- a/src/auth/RegisterPage.tsx +++ b/src/auth/RegisterPage.tsx @@ -204,7 +204,7 @@ export const RegisterPage: FC = () => { /> - + This site is protected by ReCAPTCHA and the Google{" "} Privacy Policy @@ -216,8 +216,8 @@ export const RegisterPage: FC = () => { apply.
By clicking "Register", you agree to our{" "} - - End User Licensing Agreement (EULA) + + Software and Services License Agreement (SSLA)
diff --git a/src/config/ConfigOptions.ts b/src/config/ConfigOptions.ts index 87551986..925bdc81 100644 --- a/src/config/ConfigOptions.ts +++ b/src/config/ConfigOptions.ts @@ -77,9 +77,9 @@ export interface ConfigOptions { }; /** - * A link to the end-user license agreement (EULA) + * A link to the software and services license agreement (SSLA) */ - eula?: string; + ssla?: string; media_devices?: { /** @@ -134,7 +134,7 @@ export interface ResolvedConfigOptions extends ConfigOptions { server_name: string; }; }; - eula: string; + ssla: string; media_devices: { enable_audio: boolean; enable_video: boolean; @@ -152,7 +152,7 @@ export const DEFAULT_CONFIG: ResolvedConfigOptions = { features: { feature_use_device_session_member_events: true, }, - eula: "https://static.element.io/legal/online-EULA.pdf", + ssla: "https://static.element.io/legal/element-software-and-services-license-agreement-uk-1.pdf", media_devices: { enable_audio: true, enable_video: true, diff --git a/src/home/UnauthenticatedView.tsx b/src/home/UnauthenticatedView.tsx index 79437ba8..e23c637b 100644 --- a/src/home/UnauthenticatedView.tsx +++ b/src/home/UnauthenticatedView.tsx @@ -185,10 +185,10 @@ export const UnauthenticatedView: FC = () => {
)} - + By clicking "Go", you agree to our{" "} - - End User Licensing Agreement (EULA) + + Software and Services License Agreement (SSLA) diff --git a/src/room/RoomAuthView.tsx b/src/room/RoomAuthView.tsx index d01089cc..509460e9 100644 --- a/src/room/RoomAuthView.tsx +++ b/src/room/RoomAuthView.tsx @@ -80,10 +80,10 @@ export const RoomAuthView: FC = () => { /> - + By clicking "Join call now", you agree to our{" "} - - End User Licensing Agreement (EULA) + + Software and Services License Agreement (SSLA) From e4c222a4e845b378ebdc289aad8437d59c42c744 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Mon, 31 Mar 2025 14:55:20 +0100 Subject: [PATCH 046/225] Expose version string in embedded SwiftPM and AAR (#3144) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Expose version string in embedded SwiftPM and AAR Implements https://github.com/element-hq/element-call/issues/3143 * Fix filename * Fix location of `Version.kt` * Use the right path for the sed replacement in the publishing workflow for Android --------- Co-authored-by: Jorge Martín --- .github/workflows/publish-embedded-packages.yaml | 12 +++++++++--- .../io/element/android/call/embedded/Version.kt | 8 ++++++++ .../EmbeddedElementCall/EmbeddedElementCall.swift | 9 +++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 embedded/android/lib/src/main/kotlin/io/element/android/call/embedded/Version.kt diff --git a/.github/workflows/publish-embedded-packages.yaml b/.github/workflows/publish-embedded-packages.yaml index 4182d488..45896a59 100644 --- a/.github/workflows/publish-embedded-packages.yaml +++ b/.github/workflows/publish-embedded-packages.yaml @@ -124,6 +124,9 @@ jobs: - name: Get artifact version run: echo "ARTIFACT_VERSION=${VERSION:1}" >> "$GITHUB_ENV" + - name: Set version string + run: sed -i "s/0.0.0/${{ env.ARTIFACT_VERSION }}/g" embedded/android/lib/src/main/kotlin/io/element/android/call/embedded/Version.kt + - name: Publish AAR working-directory: embedded/android env: @@ -165,13 +168,16 @@ jobs: - name: Copy files run: rsync -a --delete --exclude .git element-call/embedded/ios/ element-call-swift + - name: Get artifact version + run: echo "ARTIFACT_VERSION=${VERSION:1}" >> "$GITHUB_ENV" + + - name: Set version string + run: sed -i "s/0.0.0/${{ env.ARTIFACT_VERSION }}/g" element-call-swift/Sources/EmbeddedElementCall/EmbeddedElementCall.swift + - name: Test build working-directory: element-call-swift run: swift build - - name: Get artifact version - run: echo "ARTIFACT_VERSION=${VERSION:1}" >> "$GITHUB_ENV" - - name: Commit and tag working-directory: element-call-swift run: | diff --git a/embedded/android/lib/src/main/kotlin/io/element/android/call/embedded/Version.kt b/embedded/android/lib/src/main/kotlin/io/element/android/call/embedded/Version.kt new file mode 100644 index 00000000..ab8bf8de --- /dev/null +++ b/embedded/android/lib/src/main/kotlin/io/element/android/call/embedded/Version.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +const val VERSION = "0.0.0" diff --git a/embedded/ios/Sources/EmbeddedElementCall/EmbeddedElementCall.swift b/embedded/ios/Sources/EmbeddedElementCall/EmbeddedElementCall.swift index 9cbd3f67..80e1022d 100644 --- a/embedded/ios/Sources/EmbeddedElementCall/EmbeddedElementCall.swift +++ b/embedded/ios/Sources/EmbeddedElementCall/EmbeddedElementCall.swift @@ -1,5 +1,14 @@ +// +// Copyright 2025 New Vector Ltd. +// +// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +// Please see LICENSE files in the repository root for full details. +// + import Foundation public let appURL = Bundle.module.url(forResource: "index", withExtension: "html", subdirectory: "dist") public let bundle = Bundle.module + +public let version = "0.0.0" From d1753c33f54ebb24f6bd51f41cf68141c3f41a3f Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Mon, 31 Mar 2025 16:38:25 +0100 Subject: [PATCH 047/225] Use correct rageshake URL when running in embedded package + tests (#3132) * Use correct rageshake URL when running in embedded package It was incorrectly trying to use the one from config.json * Refactor to add tests * Empty mock config --- src/settings/SettingsModal.tsx | 6 +- src/settings/submit-rageshake.test.ts | 68 +------ src/settings/submit-rageshake.ts | 17 +- src/settings/useSubmitRageshake.test.tsx | 222 +++++++++++++++++++++++ 4 files changed, 235 insertions(+), 78 deletions(-) create mode 100644 src/settings/useSubmitRageshake.test.tsx diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 7522983e..de717b02 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -30,7 +30,7 @@ import { PreferencesSettingsTab } from "./PreferencesSettingsTab"; import { Slider } from "../Slider"; import { DeviceSelection } from "./DeviceSelection"; import { DeveloperSettingsTab } from "./DeveloperSettingsTab"; -import { isRageshakeAvailable } from "./submit-rageshake"; +import { useSubmitRageshake } from "./submit-rageshake"; type SettingsTab = | "audio" @@ -71,6 +71,8 @@ export const SettingsModal: FC = ({ const [showDeveloperSettingsTab] = useSetting(developerMode); + const { available: isRageshakeAvailable } = useSubmitRageshake(); + const audioTab: Tab = { key: "audio", name: t("common.audio"), @@ -148,7 +150,7 @@ export const SettingsModal: FC = ({ const tabs = [audioTab, videoTab]; if (widget === null) tabs.push(profileTab); tabs.push(preferencesTab); - if (isRageshakeAvailable() || import.meta.env.VITE_PACKAGE === "full") { + if (isRageshakeAvailable || import.meta.env.VITE_PACKAGE === "full") { // for full package we want to show the analytics consent checkbox // even if rageshake is not available tabs.push(feedbackTab); diff --git a/src/settings/submit-rageshake.test.ts b/src/settings/submit-rageshake.test.ts index 3433856a..1f143a6d 100644 --- a/src/settings/submit-rageshake.test.ts +++ b/src/settings/submit-rageshake.test.ts @@ -15,78 +15,12 @@ import { beforeEach, } from "vitest"; -import { - getRageshakeSubmitUrl, - isRageshakeAvailable, -} from "./submit-rageshake"; +import { getRageshakeSubmitUrl } from "./submit-rageshake"; import { getUrlParams } from "../UrlParams"; import { mockConfig } from "../utils/test"; vi.mock("../UrlParams", () => ({ getUrlParams: vi.fn() })); -describe("isRageshakeAvailable", () => { - beforeEach(() => { - (getUrlParams as Mock).mockReturnValue({}); - mockConfig({}); - }); - - afterEach(() => { - vi.unstubAllEnvs(); - vi.clearAllMocks(); - }); - - describe("embedded package", () => { - beforeEach(() => { - vi.stubEnv("VITE_PACKAGE", "embedded"); - }); - - it("returns false with no rageshakeSubmitUrl URL param", () => { - expect(isRageshakeAvailable()).toBe(false); - }); - - it("ignores config value and returns false with no rageshakeSubmitUrl URL param", () => { - mockConfig({ - rageshake: { - submit_url: "https://config.example.com.localhost", - }, - }); - expect(isRageshakeAvailable()).toBe(false); - }); - - it("returns true with rageshakeSubmitUrl URL param", () => { - (getUrlParams as Mock).mockReturnValue({ - rageshakeSubmitUrl: "https://url.example.com.localhost", - }); - expect(isRageshakeAvailable()).toBe(true); - }); - }); - - describe("full package", () => { - beforeEach(() => { - vi.stubEnv("VITE_PACKAGE", "full"); - }); - it("returns false with no config value", () => { - expect(isRageshakeAvailable()).toBe(false); - }); - - it("ignores rageshakeSubmitUrl URL param and returns false with no config value", () => { - (getUrlParams as Mock).mockReturnValue({ - rageshakeSubmitUrl: "https://url.example.com.localhost", - }); - expect(isRageshakeAvailable()).toBe(false); - }); - - it("returns true with config value", () => { - mockConfig({ - rageshake: { - submit_url: "https://config.example.com.localhost", - }, - }); - expect(isRageshakeAvailable()).toBe(true); - }); - }); -}); - describe("getRageshakeSubmitUrl", () => { beforeEach(() => { (getUrlParams as Mock).mockReturnValue({}); diff --git a/src/settings/submit-rageshake.ts b/src/settings/submit-rageshake.ts index b3138348..bfd55126 100644 --- a/src/settings/submit-rageshake.ts +++ b/src/settings/submit-rageshake.ts @@ -131,11 +131,9 @@ export function getRageshakeSubmitUrl(): string | undefined { return undefined; } -export function isRageshakeAvailable(): boolean { - return !!getRageshakeSubmitUrl(); -} - -export function useSubmitRageshake(): { +export function useSubmitRageshake( + injectedGetRageshakeSubmitUrl = getRageshakeSubmitUrl, +): { submitRageshake: (opts: RageShakeSubmitOptions) => Promise; sending: boolean; sent: boolean; @@ -158,7 +156,8 @@ export function useSubmitRageshake(): { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore async (opts) => { - if (!getRageshakeSubmitUrl()) { + const submitUrl = injectedGetRageshakeSubmitUrl(); + if (!submitUrl) { throw new Error("No rageshake URL is configured"); } @@ -292,7 +291,7 @@ export function useSubmitRageshake(): { ); } - const res = await fetch(Config.get().rageshake!.submit_url, { + const res = await fetch(submitUrl, { method: "POST", body, }); @@ -309,7 +308,7 @@ export function useSubmitRageshake(): { logger.error(error); } }, - [client, sending], + [client, sending, injectedGetRageshakeSubmitUrl], ); return { @@ -317,7 +316,7 @@ export function useSubmitRageshake(): { sending, sent, error, - available: isRageshakeAvailable(), + available: !!injectedGetRageshakeSubmitUrl(), }; } diff --git a/src/settings/useSubmitRageshake.test.tsx b/src/settings/useSubmitRageshake.test.tsx new file mode 100644 index 00000000..b278d4b1 --- /dev/null +++ b/src/settings/useSubmitRageshake.test.tsx @@ -0,0 +1,222 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE in the repository root for full details. +*/ + +import { + expect, + describe, + it, + vi, + beforeEach, + afterEach, + type Mock, +} from "vitest"; +import { useState, type ReactElement } from "react"; +import { render, screen, waitFor } from "@testing-library/react"; +import { type MatrixClient } from "matrix-js-sdk/lib/client"; + +import { useSubmitRageshake, getRageshakeSubmitUrl } from "./submit-rageshake"; +import { ClientContextProvider } from "../ClientContext"; +import { getUrlParams } from "../UrlParams"; +import { mockConfig } from "../utils/test"; + +vi.mock("../UrlParams", () => ({ getUrlParams: vi.fn() })); + +const TestComponent = ({ + sendLogs, + getRageshakeSubmitUrl, +}: { + sendLogs: boolean; + getRageshakeSubmitUrl: () => string | undefined; +}): ReactElement => { + const [clickError, setClickError] = useState(null); + const { available, sending, sent, submitRageshake, error } = + useSubmitRageshake(getRageshakeSubmitUrl); + + const onClick = (): void => { + submitRageshake({ + sendLogs, + }).catch((e) => { + setClickError(e); + }); + }; + + return ( +
+

{available ? "true" : "false"}

+

{sending ? "true" : "false"}

+

{sent ? "true" : "false"}

+

{error?.message}

+

{clickError?.message}

+ +
+ ); +}; + +function renderWithMockClient( + getRageshakeSubmitUrl: () => string | undefined, + sendLogs: boolean, +): void { + const client = vi.mocked({ + getUserId: vi.fn().mockReturnValue("@user:localhost"), + getUser: vi.fn().mockReturnValue(null), + credentials: { + userId: "@user:localhost", + }, + getCrypto: vi.fn().mockReturnValue(undefined), + } as unknown as MatrixClient); + + render( + + + , + ); +} + +describe("useSubmitRageshake", () => { + describe("available", () => { + beforeEach(() => { + (getUrlParams as Mock).mockReturnValue({}); + mockConfig({}); + }); + + afterEach(() => { + vi.unstubAllEnvs(); + vi.clearAllMocks(); + }); + + describe("embedded package", () => { + beforeEach(() => { + vi.stubEnv("VITE_PACKAGE", "embedded"); + }); + + it("returns false with no rageshakeSubmitUrl URL param", () => { + renderWithMockClient(getRageshakeSubmitUrl, false); + expect(screen.getByTestId("available").textContent).toBe("false"); + }); + + it("ignores config value and returns false with no rageshakeSubmitUrl URL param", () => { + mockConfig({ + rageshake: { + submit_url: "https://config.example.com.localhost", + }, + }); + renderWithMockClient(getRageshakeSubmitUrl, false); + expect(screen.getByTestId("available").textContent).toBe("false"); + }); + + it("returns true with rageshakeSubmitUrl URL param", () => { + (getUrlParams as Mock).mockReturnValue({ + rageshakeSubmitUrl: "https://url.example.com.localhost", + }); + renderWithMockClient(getRageshakeSubmitUrl, false); + expect(screen.getByTestId("available").textContent).toBe("true"); + }); + }); + + describe("full package", () => { + beforeEach(() => { + mockConfig({}); + vi.stubEnv("VITE_PACKAGE", "full"); + }); + it("returns false with no config value", () => { + renderWithMockClient(getRageshakeSubmitUrl, false); + expect(screen.getByTestId("available").textContent).toBe("false"); + }); + + it("ignores rageshakeSubmitUrl URL param and returns false with no config value", () => { + (getUrlParams as Mock).mockReturnValue({ + rageshakeSubmitUrl: "https://url.example.com.localhost", + }); + renderWithMockClient(getRageshakeSubmitUrl, false); + expect(screen.getByTestId("available").textContent).toBe("false"); + }); + + it("returns true with config value", () => { + mockConfig({ + rageshake: { + submit_url: "https://config.example.com.localhost", + }, + }); + renderWithMockClient(getRageshakeSubmitUrl, false); + expect(screen.getByTestId("available").textContent).toBe("true"); + }); + }); + }); + + describe("when rageshake is available", () => { + beforeEach(() => { + mockConfig({}); + vi.unstubAllGlobals(); + }); + + it("starts unsent", () => { + renderWithMockClient(() => "https://rageshake.localhost/foo", false); + expect(screen.getByTestId("sending").textContent).toBe("false"); + expect(screen.getByTestId("sent").textContent).toBe("false"); + }); + + it("submitRageshake fetches expected URL", async () => { + const fetchFn = vi.fn().mockResolvedValue({ + status: 200, + }); + vi.stubGlobal("fetch", fetchFn); + + renderWithMockClient(() => "https://rageshake.localhost/foo", false); + screen.getByTestId("submit").click(); + await waitFor(() => { + expect(screen.getByTestId("sent").textContent).toBe("true"); + }); + expect(fetchFn).toHaveBeenCalledExactlyOnceWith( + "https://rageshake.localhost/foo", + expect.objectContaining({ + method: "POST", + }), + ); + expect(screen.getByTestId("clickError").textContent).toBe(""); + expect(screen.getByTestId("error").textContent).toBe(""); + }); + }); + + describe("when rageshake is not available", () => { + it("starts unsent", () => { + renderWithMockClient(() => undefined, false); + expect(screen.getByTestId("sending").textContent).toBe("false"); + expect(screen.getByTestId("sent").textContent).toBe("false"); + }); + + it("submitRageshake throws error", async () => { + renderWithMockClient(() => undefined, false); + screen.getByTestId("submit").click(); + await waitFor(() => { + expect(screen.getByTestId("clickError").textContent).toBe( + "No rageshake URL is configured", + ); + }); + }); + }); +}); From 18972c2fb9b5ecfd490f52af86a4b22d8d6c0b11 Mon Sep 17 00:00:00 2001 From: fkwp <5071496+fkwp@users.noreply.github.com> Date: Mon, 31 Mar 2025 20:33:53 +0000 Subject: [PATCH 048/225] Translations updates --- locales/de/app.json | 8 +++++--- locales/es/app.json | 3 --- locales/et/app.json | 3 --- locales/fr/app.json | 3 --- locales/id/app.json | 3 --- locales/it/app.json | 3 --- locales/lv/app.json | 3 --- locales/pl/app.json | 3 --- locales/ro/app.json | 3 --- locales/sk/app.json | 3 --- locales/uk/app.json | 3 --- locales/zh-Hans/app.json | 3 --- locales/zh-Hant/app.json | 3 --- 13 files changed, 5 insertions(+), 39 deletions(-) diff --git a/locales/de/app.json b/locales/de/app.json index bfad5bb5..6dccde05 100644 --- a/locales/de/app.json +++ b/locales/de/app.json @@ -65,12 +65,14 @@ "debug_tile_layout_label": "Kachel-Layout debuggen", "device_id": "Geräte-ID: {{id}}", "duplicate_tiles_label": "Anzahl zusätzlicher Kachelkopien pro Teilnehmer", + "environment_variables": "Umgebungsvariablen", "hostname": "Hostname: {{hostname}}", "livekit_server_info": "LiveKit-Server Informationen", "livekit_sfu": "LiveKit SFU: {{url}}", "matrix_id": "Matrix-ID: {{id}}", "show_connection_stats": "Verbindungsstatistiken anzeigen", "show_non_member_tiles": "Kacheln für Nicht-Mitgliedermedien anzeigen", + "url_params": "URL-Parameter", "use_new_membership_manager": "Neuen MembershipManager verwenden" }, "disconnected_banner": "Die Verbindung zum Server wurde getrennt.", @@ -142,9 +144,9 @@ "rageshake_sending": "Senden …", "rageshake_sending_logs": "Sende Debug-Protokolle …", "rageshake_sent": "Danke!", - "recaptcha_caption": "Diese Seite wird durch reCAPTCHA geschützt und es gelten Googles <2>Datenschutzerklärung und <6>Nutzungsbedingungen. <9>Mit einem Klick auf „Registrieren“ akzeptierst du unseren <2>Endbenutzer-Lizenzvertrag (EULA)", "recaptcha_dismissed": "Recaptcha abgelehnt", "recaptcha_not_loaded": "Recaptcha nicht geladen", + "recaptcha_ssla_caption": "Diese Website wird durch ReCAPTCHA geschützt, und es gelten die Google <2>Datenschutzbestimmungen sowie die <6>Nutzungsbedingungen.<9> Durch das Klicken auf \"Registrieren\" wird der <12>Software- und Dienstleistungslizenzvereinbarung (SSLA) zugestimmt.", "register": { "passwords_must_match": "Passwörter müssen übereinstimmen", "registering": "Registrierung …" @@ -154,7 +156,7 @@ "register_heading": "Erstelle Dein Konto", "return_home_button": "Zurück zur Startseite", "room_auth_view_continue_button": "Weiter", - "room_auth_view_eula_caption": "Mit einem Klick auf „Weiter“ akzeptierst du unseren <2>Endbenutzer-Lizenzvertrag (EULA)", + "room_auth_view_ssla_caption": "Durch das Klicken auf \"Anruf jetzt beitreten\" wird dem <2>Software and Services License Agreement (SSLA) zugestimmt.", "screenshare_button_label": "Bildschirm teilen", "settings": { "audio_tab": { @@ -200,8 +202,8 @@ "submitting": "Sende …", "switch_camera": "Kamera wechseln", "unauthenticated_view_body": "Noch nicht registriert? <2>Konto erstellen", - "unauthenticated_view_eula_caption": "Mit einem Klick auf „Los geht’s“ akzeptierst du unseren <2>Endbenutzer-Lizenzvertrag (EULA)", "unauthenticated_view_login_button": "Melde dich mit deinem Konto an", + "unauthenticated_view_ssla_caption": "Durch das Klicken auf \"Weiter\" wird dem <2>Software and Services License Agreement (SSLA) zugestimmt.", "unmute_microphone_button_label": "Mikrofon einschalten", "version": "{{productName}} Version: {{version}}", "video_tile": { diff --git a/locales/es/app.json b/locales/es/app.json index 33177c54..246e8921 100644 --- a/locales/es/app.json +++ b/locales/es/app.json @@ -50,7 +50,6 @@ "rageshake_send_logs": "Enviar registros de depuración", "rageshake_sending": "Enviando…", "rageshake_sending_logs": "Enviando registros de depuración…", - "recaptcha_caption": "Este sitio está protegido por ReCAPTCHA y se aplican la <2>Política de Privacidad y los <6>Términos de Servicio de Google.<9>Al hacer clic en \"Registrar\", aceptas nuestro <12>Contrato de Licencia de Usuario Final (CLUF)", "recaptcha_dismissed": "Recaptcha cancelado", "recaptcha_not_loaded": "No se ha cargado el Recaptcha", "register": { @@ -60,7 +59,6 @@ "register_auth_links": "<0>¿Ya tienes una cuenta?<1><0>Iniciar sesión o <2>Acceder como invitado", "register_confirm_password_label": "Confirmar contraseña", "return_home_button": "Volver a la pantalla de inicio", - "room_auth_view_eula_caption": "Al hacer clic en \"Unirse a la llamada ahora\", aceptas nuestro <2>Contrato de Licencia de Usuario Final (CLUF)", "screenshare_button_label": "Compartir pantalla", "settings": { "developer_tab_title": "Desarrollador", @@ -76,7 +74,6 @@ "star_rating_input_label_other": "{{count}} estrellas", "submitting": "Enviando…", "unauthenticated_view_body": "¿No estás registrado todavía? <2>Crear una cuenta", - "unauthenticated_view_eula_caption": "Al hacer clic en \"Comenzar\", aceptas nuestro <2>Contrato de Licencia de Usuario Final (CLUF)", "unauthenticated_view_login_button": "Iniciar sesión en tu cuenta", "version": "Versión: {{version}}" } diff --git a/locales/et/app.json b/locales/et/app.json index 7bcdeca7..169d1195 100644 --- a/locales/et/app.json +++ b/locales/et/app.json @@ -78,7 +78,6 @@ "rageshake_sending": "Saatmine…", "rageshake_sending_logs": "Veaotsingulogide saatmine…", "rageshake_sent": "Tänud!", - "recaptcha_caption": "Selles saidis on kasutusel ReCAPTCHA ja kehtivad Google'i <2>Privaatsuspoliitika ning <6>Teenusetingimused.<9>Klõpsides „Registreeru“, sa nõustud meie <12>Lõppkasutaja litsentsilepingu (EULA) tingimustega", "recaptcha_dismissed": "Robotilõks on vahele jäetud", "recaptcha_not_loaded": "Robotilõks pole laetud", "register": { @@ -88,7 +87,6 @@ "register_auth_links": "<0>On sul juba konto?<1><0>Logi sisse Või <2>Logi sisse külalisena", "register_confirm_password_label": "Kinnita salasõna", "return_home_button": "Tagasi avalehele", - "room_auth_view_eula_caption": "Klõpsides „Liitu kõnega kohe“, nõustud sa meie <2>Lõppkasutaja litsentsilepinguga (EULA)", "screenshare_button_label": "Jaga ekraani", "settings": { "developer_tab_title": "Arendaja", @@ -108,7 +106,6 @@ "stop_video_button_label": "Peata videovoog", "submitting": "Saadan…", "unauthenticated_view_body": "Sa pole veel registreerunud? <2>Loo kasutajakonto", - "unauthenticated_view_eula_caption": "Klõpsides „Jätka“, nõustud sa meie <2>Lõppkasutaja litsentsilepinguga (EULA)", "unauthenticated_view_login_button": "Logi oma kontosse sisse", "unmute_microphone_button_label": "Lülita mikrofon sisse", "version": "Versioon: {{version}}" diff --git a/locales/fr/app.json b/locales/fr/app.json index 4cd9760e..279542b1 100644 --- a/locales/fr/app.json +++ b/locales/fr/app.json @@ -77,7 +77,6 @@ "rageshake_sending": "Envoi…", "rageshake_sending_logs": "Envoi des journaux de débogage…", "rageshake_sent": "Merci !", - "recaptcha_caption": "Ce site est protégé par ReCAPTCHA, la <2>politique de confidentialité et les <6>conditions d’utilisation de Google s’appliquent.<9>En cliquant sur « S’enregistrer » vous acceptez également notre <12>Contrat de Licence Utilisateur Final (CLUF)", "recaptcha_dismissed": "Recaptcha refusé", "recaptcha_not_loaded": "Recaptcha non chargé", "register": { @@ -87,7 +86,6 @@ "register_auth_links": "<0>Vous avez déjà un compte ?<1><0>Se connecter Ou <2>Accès invité", "register_confirm_password_label": "Confirmer le mot de passe", "return_home_button": "Retour à l’accueil", - "room_auth_view_eula_caption": "En cliquant sur « Rejoindre l’appel maintenant », vous acceptez notre <2>Contrat de Licence Utilisateur Final (CLUF)", "screenshare_button_label": "Partage d’écran", "settings": { "developer_tab_title": "Développeur", @@ -107,7 +105,6 @@ "stop_video_button_label": "Arrêter la vidéo", "submitting": "Envoi…", "unauthenticated_view_body": "Pas encore de compte ? <2>En créer un", - "unauthenticated_view_eula_caption": "En cliquant sur « Commencer », vous acceptez notre <2>Contrat de Licence Utilisateur Final (CLUF)", "unauthenticated_view_login_button": "Connectez vous à votre compte", "unmute_microphone_button_label": "Allumer le microphone", "version": "Version : {{version}}" diff --git a/locales/id/app.json b/locales/id/app.json index 1bbfcbd9..377d23d5 100644 --- a/locales/id/app.json +++ b/locales/id/app.json @@ -77,7 +77,6 @@ "rageshake_sending": "Mengirimkan…", "rageshake_sending_logs": "Mengirimkan catatan pengawakutuan…", "rageshake_sent": "Terima kasih!", - "recaptcha_caption": "Situs ini dilindungi oleh reCAPTCHA dan <2>Kebijakan Privasi dan <6>Ketentuan Layanan Google berlaku.<9>Dengan mengeklik \"Daftar\", Anda menyetujui <12>Perjanjian Lisensi Pengguna Akhir (EULA) kami", "recaptcha_dismissed": "Recaptcha ditutup", "recaptcha_not_loaded": "Recaptcha tidak dimuat", "register": { @@ -87,7 +86,6 @@ "register_auth_links": "<0>Sudah punya akun?<1><0>Masuk Atau <2>Akses sebagai tamu", "register_confirm_password_label": "Konfirmasi kata sandi", "return_home_button": "Kembali ke layar beranda", - "room_auth_view_eula_caption": "Dengan mengeklik \"Bergabung ke panggilan sekarang\", Anda menyetujui <2>Perjanjian Lisensi Pengguna Akhir (EULA) kami", "screenshare_button_label": "Bagikan layar", "settings": { "developer_tab_title": "Pengembang", @@ -107,7 +105,6 @@ "stop_video_button_label": "Matikan video", "submitting": "Mengirim…", "unauthenticated_view_body": "Belum terdaftar? <2>Buat sebuah akun", - "unauthenticated_view_eula_caption": "Dengan mengeklik \"Bergabung\", Anda menyetujui <2>Perjanjian Lisensi Pengguna Akhir (EULA)", "unauthenticated_view_login_button": "Masuk ke akun Anda", "unmute_microphone_button_label": "Nyalakan mikrofon", "version": "Versi: {{version}}" diff --git a/locales/it/app.json b/locales/it/app.json index abc1005a..39f6521d 100644 --- a/locales/it/app.json +++ b/locales/it/app.json @@ -75,7 +75,6 @@ "rageshake_sending": "Invio…", "rageshake_sending_logs": "Invio dei registri di debug…", "rageshake_sent": "Grazie!", - "recaptcha_caption": "Questo sito è protetto da ReCAPTCHA e si applicano l'<2>informativa sulla privacy e i <6>termini di servizio di Google.<9>Cliccando \"Registra\", accetti il nostro <12>accordo di licenza con l'utente finale (EULA)", "recaptcha_dismissed": "Recaptcha annullato", "recaptcha_not_loaded": "Recaptcha non caricato", "register": { @@ -85,7 +84,6 @@ "register_auth_links": "<0>Hai già un profilo?<1><0>Accedi o <2>Accedi come ospite", "register_confirm_password_label": "Conferma password", "return_home_button": "Torna alla schermata di iniziale", - "room_auth_view_eula_caption": "Cliccando \"Entra in chiamata ora\", accetti il nostro <2>accordo di licenza con l'utente finale (EULA)", "screenshare_button_label": "Condividi schermo", "settings": { "developer_tab_title": "Sviluppatore", @@ -104,7 +102,6 @@ "stop_video_button_label": "Ferma video", "submitting": "Invio…", "unauthenticated_view_body": "Non hai ancora un profilo? <2>Creane uno", - "unauthenticated_view_eula_caption": "Cliccando \"Vai\", accetti il nostro <2>accordo di licenza con l'utente finale (EULA)", "unauthenticated_view_login_button": "Accedi al tuo profilo", "unmute_microphone_button_label": "Riaccendi il microfono", "version": "Versione: {{version}}" diff --git a/locales/lv/app.json b/locales/lv/app.json index 836e1382..bc281463 100644 --- a/locales/lv/app.json +++ b/locales/lv/app.json @@ -57,7 +57,6 @@ "rageshake_sending": "Nosūta…", "rageshake_sending_logs": "Nosūta atkļūdošanas žurnāla ierakstus…", "rageshake_sent": "Paldies!", - "recaptcha_caption": "Šo vietni aizsargā ReCAPTCHA, un ir attiecināmi Google <2>privātuma nosacījumi un <6>pakalpojuma noteikumi.<9>Klikšķināšana uz \"Reģistrēties\" sniedz piekrišanu mūsu <12>galalietotāja licencēšanas nolīgumam (GLLN)", "recaptcha_dismissed": "ReCaptcha atmesta", "recaptcha_not_loaded": "ReCaptcha nav ielādēta", "register": { @@ -67,7 +66,6 @@ "register_auth_links": "<0>Jau ir konts?<1><0>Pieteikties vai <2>Piekļūt kā viesim", "register_confirm_password_label": "Apstiprināt paroli", "return_home_button": "Atgriezties sākuma ekrānā", - "room_auth_view_eula_caption": "Klikšķināšana uz \"Pievienoties zvanam tagad\" apliecina piekrišanu mūsu <2>galalietotāja licencēšanas nolīgumam (GLLN)", "screenshare_button_label": "Kopīgot ekrānu", "settings": { "developer_tab_title": "Izstrādātājs", @@ -83,7 +81,6 @@ "star_rating_input_label_other": "{{count}} zvaigznes", "submitting": "Iesniedz…", "unauthenticated_view_body": "Vēl neesi reģistrējies? <2>Izveidot kontu", - "unauthenticated_view_eula_caption": "Klikšķināšana uz \"Aiziet\" apliecina piekrišanu mūsu <2>galalietotāja licencēšanas nolīgumam (GLLN)", "unauthenticated_view_login_button": "Pieteikties kontā", "version": "Versija: {{version}}" } diff --git a/locales/pl/app.json b/locales/pl/app.json index 9a7aa8aa..7ea88fd5 100644 --- a/locales/pl/app.json +++ b/locales/pl/app.json @@ -80,7 +80,6 @@ "rageshake_sending": "Wysyłanie…", "rageshake_sending_logs": "Wysyłanie dzienników debugowania…", "rageshake_sent": "Dziękujemy!", - "recaptcha_caption": "Ta witryna jest chroniona przez ReCAPTCHA, więc obowiązują <2>Polityka prywatności i <6>Warunki usług Google. Klikając \"Zarejestruj\", zgadzasz się na naszą <12>Umowę licencyjną (EULA)", "recaptcha_dismissed": "Recaptcha odrzucona", "recaptcha_not_loaded": "Recaptcha nie została załadowana", "register": { @@ -90,7 +89,6 @@ "register_auth_links": "<0>Masz już konto?<1><0>Zaloguj się lub <2>Dołącz jako gość", "register_confirm_password_label": "Potwierdź hasło", "return_home_button": "Powróć do strony głównej", - "room_auth_view_eula_caption": "Klikając \"Dołącz teraz do rozmowy\", zgadzasz się na naszą <2>Umowę licencyjną (EULA)", "screenshare_button_label": "Udostępnij ekran", "settings": { "developer_tab_title": "Programista", @@ -110,7 +108,6 @@ "stop_video_button_label": "Zakończ wideo", "submitting": "Wysyłanie…", "unauthenticated_view_body": "Nie masz konta? <2>Utwórz je", - "unauthenticated_view_eula_caption": "Klikając \"Przejdź\", zgadzasz się na naszą <2>Umowę licencyjną (EULA)", "unauthenticated_view_login_button": "Zaloguj się do swojego konta", "unmute_microphone_button_label": "Odcisz mikrofon", "version": "Wersja: {{version}}" diff --git a/locales/ro/app.json b/locales/ro/app.json index 3e2ac052..1330bff5 100644 --- a/locales/ro/app.json +++ b/locales/ro/app.json @@ -117,7 +117,6 @@ "rageshake_sending": "Trimiterea...", "rageshake_sending_logs": "Trimiterea jurnalelor de depanare...", "rageshake_sent": "Multumesc!", - "recaptcha_caption": "Acest site este protejat de reCAPTCHA și se aplică Politica de <2> confidențialitate Google și <6> Termenii și condițiile. <9>Făcând clic pe „Înregistrare”, sunteți de acord cu Acordul nostru de licențiere pentru utilizatorul <12> final (EULA) ", "recaptcha_dismissed": "Recaptcha a fost respins", "recaptcha_not_loaded": "Recaptcha nu a fost încărcat", "register": { @@ -129,7 +128,6 @@ "register_heading": "Creează-ți contul", "return_home_button": "Reveniți la ecranul de pornire", "room_auth_view_continue_button": "Continuă", - "room_auth_view_eula_caption": "Făcând clic pe „Continuați”, sunteți de acord cu Acordul nostru de licențiere pentru utilizatorul <2> final (EULA) ", "screenshare_button_label": "Partajare ecran", "settings": { "audio_tab": { @@ -158,7 +156,6 @@ "submitting": "Trimiterea...", "switch_camera": "Comutați camera", "unauthenticated_view_body": "Nu sunteți încă înregistrat? <2>Creați un cont ", - "unauthenticated_view_eula_caption": "Făcând clic pe „Go”, sunteți de acord cu Acordul nostru de licențiere pentru utilizatorul <2> final (EULA) ", "unauthenticated_view_login_button": "Conectați-vă la contul dvs.", "unmute_microphone_button_label": "Anulează microfonul", "version": "{{productName}}Versiune: {{version}}", diff --git a/locales/sk/app.json b/locales/sk/app.json index 17d57c23..726b9e5c 100644 --- a/locales/sk/app.json +++ b/locales/sk/app.json @@ -78,7 +78,6 @@ "rageshake_sending": "Odosielanie…", "rageshake_sending_logs": "Odosielanie záznamov o ladení…", "rageshake_sent": "Ďakujeme!", - "recaptcha_caption": "Táto stránka je chránená systémom ReCAPTCHA a platia na ňu <2>Pravidlá ochrany osobných údajov spoločnosti Google a <6>Podmienky poskytovania služieb.<9>Kliknutím na tlačidlo \"Registrovať sa\" súhlasíte s našou <12>Licenčnou zmluvou s koncovým používateľom (EULA)", "recaptcha_dismissed": "Recaptcha zamietnutá", "recaptcha_not_loaded": "Recaptcha sa nenačítala", "register": { @@ -88,7 +87,6 @@ "register_auth_links": "<0>Už máte konto?<1><0>Prihláste sa Alebo <2>Prihlásiť sa ako hosť", "register_confirm_password_label": "Potvrdiť heslo", "return_home_button": "Návrat na domovskú obrazovku", - "room_auth_view_eula_caption": "Kliknutím na \"Pripojiť sa k hovoru teraz\" súhlasíte s našou <2>Licenčnou zmluvou s koncovým používateľom (EULA)", "screenshare_button_label": "Zdieľať obrazovku", "settings": { "developer_tab_title": "Vývojár", @@ -108,7 +106,6 @@ "stop_video_button_label": "Zastaviť video", "submitting": "Odosielanie…", "unauthenticated_view_body": "Ešte nie ste zaregistrovaný? <2>Vytvorte si účet", - "unauthenticated_view_eula_caption": "Kliknutím na tlačidlo \"Prejsť\" vyjadrujete súhlas s našou <2>Licenčnou zmluvou s koncovým používateľom (EULA)", "unauthenticated_view_login_button": "Prihláste sa do svojho konta", "unmute_microphone_button_label": "Zrušiť stlmenie mikrofónu", "version": "Verzia: {{version}}" diff --git a/locales/uk/app.json b/locales/uk/app.json index c98b93a7..ad0e2bd5 100644 --- a/locales/uk/app.json +++ b/locales/uk/app.json @@ -80,7 +80,6 @@ "rageshake_sending": "Надсилання…", "rageshake_sending_logs": "Надсилання журналу налагодження…", "rageshake_sent": "Дякуємо!", - "recaptcha_caption": "Цей сайт захищений ReCAPTCHA і до нього застосовується <2>Політика приватності і <6>Умови надання послуг Google.<9>Натискаючи \"Зареєструватися\", ви погоджуєтеся з нашою <12>Ліцензійною угодою з кінцевим користувачем (EULA)", "recaptcha_dismissed": "Recaptcha не пройдено", "recaptcha_not_loaded": "Recaptcha не завантажено", "register": { @@ -90,7 +89,6 @@ "register_auth_links": "<0>Уже маєте обліковий запис?<1><0>Увійти Or <2>Отримати доступ як гість", "register_confirm_password_label": "Підтвердити пароль", "return_home_button": "Повернутися на екран домівки", - "room_auth_view_eula_caption": "Натискаючи \"Приєднатися до виклику зараз\", ви погоджуєтеся з нашою <2>Ліцензійною угодою з кінцевим користувачем (EULA)", "screenshare_button_label": "Поділитися екраном", "settings": { "developer_tab_title": "Розробнику", @@ -110,7 +108,6 @@ "stop_video_button_label": "Зупинити відео", "submitting": "Надсилання…", "unauthenticated_view_body": "Ще не зареєстровані? <2>Створіть обліковий запис", - "unauthenticated_view_eula_caption": "Натискаючи \"Далі\", ви погоджуєтеся з нашою <2>Ліцензійною угодою з кінцевим користувачем (EULA)", "unauthenticated_view_login_button": "Увійдіть до свого облікового запису", "unmute_microphone_button_label": "Увімкнути мікрофон", "version": "Версія: {{version}}" diff --git a/locales/zh-Hans/app.json b/locales/zh-Hans/app.json index ae9bd03d..f2433e16 100644 --- a/locales/zh-Hans/app.json +++ b/locales/zh-Hans/app.json @@ -73,7 +73,6 @@ "rageshake_sending": "正在发送……", "rageshake_sending_logs": "正在发送调试日志……", "rageshake_sent": "谢谢!", - "recaptcha_caption": "该站点受 ReCAPTCHA 保护,适用于Google的 <2>隐私政策和 <6>服务条款。 <9>点击 \"注册\",即表示您同意我们的 <12>最终用户许可协议 (EULA)", "recaptcha_dismissed": "人机验证失败", "recaptcha_not_loaded": "recaptcha未加载", "register": { @@ -83,7 +82,6 @@ "register_auth_links": "<0>已有账户?<1><0>登录 Or <2>以访客身份继续", "register_confirm_password_label": "确认密码", "return_home_button": "返回主页", - "room_auth_view_eula_caption": "点击 \"加入通话\",即表示您同意我们的<2>最终用户许可协议 (EULA)", "screenshare_button_label": "屏幕共享", "settings": { "developer_tab_title": "开发者", @@ -103,7 +101,6 @@ "stop_video_button_label": "停止视频", "submitting": "提交中…", "unauthenticated_view_body": "还没有注册? <2>创建账户<2>", - "unauthenticated_view_eula_caption": "点击 \"开始\",即表示您同意我们的<2>最终用户许可协议 (EULA)", "unauthenticated_view_login_button": "登录你的账户", "unmute_microphone_button_label": "取消麦克风静音", "version": "版本:{{version}}" diff --git a/locales/zh-Hant/app.json b/locales/zh-Hant/app.json index 34f5dd19..8d474be5 100644 --- a/locales/zh-Hant/app.json +++ b/locales/zh-Hant/app.json @@ -80,7 +80,6 @@ "rageshake_sending": "傳送中…", "rageshake_sending_logs": "傳送除錯記錄檔中…", "rageshake_sent": "感謝!", - "recaptcha_caption": "此網站被 ReCAPTCHA 保護,並適用 Google 的<2>隱私權政策與<6>服務條款。<9>點擊「註冊」即表示您同意我們的<12>終端使用者授權協議 (EULA)", "recaptcha_dismissed": "略過驗證碼", "recaptcha_not_loaded": "驗證碼未載入", "register": { @@ -90,7 +89,6 @@ "register_auth_links": "<0>已經有帳號?<1><0>登入 或<2>以訪客身份登入", "register_confirm_password_label": "確認密碼", "return_home_button": "回到首頁", - "room_auth_view_eula_caption": "點擊「立刻加入通話」即表示您同意我們的<2>終端使用者授權協議 (EULA)", "screenshare_button_label": "分享畫面", "settings": { "developer_tab_title": "開發者", @@ -110,7 +108,6 @@ "stop_video_button_label": "停止影片", "submitting": "正在遞交……", "unauthenticated_view_body": "還沒註冊嗎?<2>建立帳號", - "unauthenticated_view_eula_caption": "點擊「前往」即表示您同意我們的<2>終端使用者授權協議 (EULA)", "unauthenticated_view_login_button": "登入您的帳號", "unmute_microphone_button_label": "將麥克風取消靜音", "version": "版本: {{version}}" From e7086ff8fc9612d180c38a19ec4a014637db9eca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 02:20:37 +0000 Subject: [PATCH 049/225] Pin dependencies --- .github/workflows/blocked.yaml | 2 +- .github/workflows/build-and-publish-docker.yaml | 4 ++-- .github/workflows/build-element-call.yaml | 4 ++-- .github/workflows/deploy-to-netlify.yaml | 2 +- .github/workflows/lint.yaml | 2 +- .github/workflows/publish-embedded-packages.yaml | 10 +++++----- .github/workflows/publish.yaml | 2 +- .github/workflows/test.yaml | 8 ++++---- .github/workflows/translations-download.yaml | 4 ++-- 9 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/workflows/blocked.yaml b/.github/workflows/blocked.yaml index 2213b0c3..e016e707 100644 --- a/.github/workflows/blocked.yaml +++ b/.github/workflows/blocked.yaml @@ -10,7 +10,7 @@ jobs: pull-requests: read steps: - name: Add notice - uses: actions/github-script@v7 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7 if: contains(github.event.pull_request.labels.*.name, 'X-Blocked') with: script: | diff --git a/.github/workflows/build-and-publish-docker.yaml b/.github/workflows/build-and-publish-docker.yaml index 2fb361ad..ec34a046 100644 --- a/.github/workflows/build-and-publish-docker.yaml +++ b/.github/workflows/build-and-publish-docker.yaml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: 📥 Download artifact - uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4 with: github-token: ${{ secrets.GITHUB_TOKEN }} run-id: ${{ inputs.artifact_run_id }} @@ -34,7 +34,7 @@ jobs: path: dist - name: Log in to container registry - uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} diff --git a/.github/workflows/build-element-call.yaml b/.github/workflows/build-element-call.yaml index 747c9d4c..5a193eb5 100644 --- a/.github/workflows/build-element-call.yaml +++ b/.github/workflows/build-element-call.yaml @@ -31,7 +31,7 @@ jobs: - name: Enable Corepack run: corepack enable - name: Yarn cache - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4 + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4 with: cache: "yarn" node-version-file: ".node-version" @@ -60,7 +60,7 @@ jobs: VITE_APP_VERSION: ${{ inputs.vite_app_version }} NODE_OPTIONS: "--max-old-space-size=4096" - name: Upload Artifact - uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: build-output-${{ inputs.package }} path: dist diff --git a/.github/workflows/deploy-to-netlify.yaml b/.github/workflows/deploy-to-netlify.yaml index e865432c..53a6931b 100644 --- a/.github/workflows/deploy-to-netlify.yaml +++ b/.github/workflows/deploy-to-netlify.yaml @@ -46,7 +46,7 @@ jobs: Exercise caution. Use test accounts. - name: 📥 Download artifact - uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4 with: github-token: ${{ secrets.ELEMENT_BOT_TOKEN }} run-id: ${{ inputs.artifact_run_id }} diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 9d3e1db8..1049930e 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -11,7 +11,7 @@ jobs: - name: Enable Corepack run: corepack enable - name: Yarn cache - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4 + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4 with: cache: "yarn" node-version-file: ".node-version" diff --git a/.github/workflows/publish-embedded-packages.yaml b/.github/workflows/publish-embedded-packages.yaml index 45896a59..a84e302a 100644 --- a/.github/workflows/publish-embedded-packages.yaml +++ b/.github/workflows/publish-embedded-packages.yaml @@ -42,7 +42,7 @@ jobs: - name: Determine filename run: echo "FILENAME_PREFIX=element-call-embedded-${VERSION:1}" >> "$GITHUB_ENV" - name: 📥 Download built element-call artifact - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4 with: github-token: ${{ secrets.GITHUB_TOKEN }} run-id: ${{ github.event.workflow_run.id || github.run_id }} @@ -73,7 +73,7 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: 📥 Download built element-call artifact - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4 with: github-token: ${{ secrets.GITHUB_TOKEN }} run-id: ${{ github.event.workflow_run.id || github.run_id }} @@ -82,7 +82,7 @@ jobs: # n.b. We don't enable corepack here because we are using plain npm - name: Setup node - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4 + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4 with: node-version-file: .node-version registry-url: "https://registry.npmjs.org" @@ -108,7 +108,7 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: 📥 Download built element-call artifact - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4 with: github-token: ${{ secrets.GITHUB_TOKEN }} run-id: ${{ github.event.workflow_run.id || github.run_id }} @@ -151,7 +151,7 @@ jobs: path: element-call - name: 📥 Download built element-call artifact - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4 with: github-token: ${{ secrets.GITHUB_TOKEN }} run-id: ${{ github.event.workflow_run.id || github.run_id }} diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 7ea82f37..8037ab2e 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -31,7 +31,7 @@ jobs: - name: Determine filename run: echo "FILENAME_PREFIX=element-call-${VERSION:1}" >> "$GITHUB_ENV" - name: 📥 Download built element-call artifact - uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4 with: github-token: ${{ secrets.GITHUB_TOKEN }} run-id: ${{ github.event.workflow_run.id || github.run_id }} diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index aa4c63bd..85215e68 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -13,7 +13,7 @@ jobs: - name: Enable Corepack run: corepack enable - name: Yarn cache - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4 + uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4 with: cache: "yarn" node-version-file: ".node-version" @@ -33,10 +33,10 @@ jobs: timeout-minutes: 10 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: Enable Corepack run: corepack enable - - uses: actions/setup-node@v4 + - uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4 with: cache: "yarn" node-version-file: ".node-version" @@ -52,7 +52,7 @@ jobs: run: cp config/config.devenv.json public/config.json - name: Run Playwright tests run: yarn playwright test - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 if: ${{ !cancelled() }} with: name: playwright-report diff --git a/.github/workflows/translations-download.yaml b/.github/workflows/translations-download.yaml index e5bb2b0c..ae1e92d0 100644 --- a/.github/workflows/translations-download.yaml +++ b/.github/workflows/translations-download.yaml @@ -18,7 +18,7 @@ jobs: - name: Enable Corepack run: corepack enable - - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4 + - uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4 with: cache: "yarn" node-version-file: ".node-version" @@ -42,7 +42,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@dd2324fc52d5d43c699a5636bcf19fceaa70c284 # v7.0.7 + uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 with: token: ${{ secrets.ELEMENT_BOT_TOKEN }} branch: actions/localazy-download From 622d91d7cc73318cde68001902e517b2d2c75acf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Apr 2025 11:12:25 +0200 Subject: [PATCH 050/225] Update dependency vite to v6.2.4 [SECURITY] (#3151) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ffc3ceca..28e0326e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13101,8 +13101,8 @@ __metadata: linkType: hard "vite@npm:^5.0.0 || ^6.0.0, vite@npm:^6.0.0": - version: 6.2.3 - resolution: "vite@npm:6.2.3" + version: 6.2.4 + resolution: "vite@npm:6.2.4" dependencies: esbuild: "npm:^0.25.0" fsevents: "npm:~2.3.3" @@ -13148,7 +13148,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/ba6ad7e83e5a63fb0b6f62d3a3963624b8784bdc1bfa2a83e16cf268fb58c76bd9f8e69f39ed34bf8711cdb8fd7702916f878781da53c232c34ef7a85e0600cf + checksum: 10c0/5a011ee5cce91de023a22564a314f04bf64d0d02b420d92c3d539d10257448d60e98e52b491404656426fba4a50dc25f107282540d7388fc5303dc441280155e languageName: node linkType: hard From 70c97fa8be8cb193f651380b7807110d1c70df84 Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 3 Apr 2025 15:51:47 +0200 Subject: [PATCH 051/225] Fix lint errors caused by matrix-js-sdl/src import --- playwright/fixtures/widget-user.ts | 2 +- playwright/global.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/playwright/fixtures/widget-user.ts b/playwright/fixtures/widget-user.ts index 391a2dd6..2ac8d3b8 100644 --- a/playwright/fixtures/widget-user.ts +++ b/playwright/fixtures/widget-user.ts @@ -7,7 +7,7 @@ Please see LICENSE in the repository root for full details. import { type Page, test, expect, type JSHandle } from "@playwright/test"; -import type { MatrixClient } from "matrix-js-sdk/src"; +import type { MatrixClient } from "matrix-js-sdk"; export type UserBaseFixture = { mxId: string; diff --git a/playwright/global.d.ts b/playwright/global.d.ts index 2108240e..8620546f 100644 --- a/playwright/global.d.ts +++ b/playwright/global.d.ts @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import type * as Matrix from "matrix-js-sdk/src"; +import type * as Matrix from "matrix-js-sdk"; declare global { interface Window { From afced3eb73279f79c09b24ec9e5ef016d9379121 Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 3 Apr 2025 17:02:48 +0200 Subject: [PATCH 052/225] test fix experiment --- backend/ew.test.config.json | 2 +- playwright/fixtures/widget-user.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/ew.test.config.json b/backend/ew.test.config.json index 7fe0c63f..dbbaccec 100644 --- a/backend/ew.test.config.json +++ b/backend/ew.test.config.json @@ -46,7 +46,7 @@ "preferred_domain": "meet.element.io" }, "element_call": { - "url": "https://localhost:3000", + "url": "https://localhost:3000/room/", "participant_limit": 8, "brand": "Element Call" }, diff --git a/playwright/fixtures/widget-user.ts b/playwright/fixtures/widget-user.ts index 2ac8d3b8..891b18ff 100644 --- a/playwright/fixtures/widget-user.ts +++ b/playwright/fixtures/widget-user.ts @@ -36,7 +36,7 @@ const CONFIG_JSON = { }, element_call: { - url: "https://localhost:3000", + url: "https://localhost:3000/room/", participant_limit: 8, brand: "Element Call", }, From 7561e33e381e08d7934cbdc8b519ba7ca889531d Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 3 Apr 2025 18:01:43 +0200 Subject: [PATCH 053/225] use localhost ew --- playwright/fixtures/widget-user.ts | 16 ++++++++++++++++ playwright/global.d.ts | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/playwright/fixtures/widget-user.ts b/playwright/fixtures/widget-user.ts index 891b18ff..ee5b1779 100644 --- a/playwright/fixtures/widget-user.ts +++ b/playwright/fixtures/widget-user.ts @@ -73,6 +73,14 @@ export const widgetTest = test.extend({ reducedMotion: "reduce", }); const ewPage1 = await user1Context.newPage(); + await ewPage1.evaluate(() => { + window.mxSettingsStore.setValue( + "Developer.elementCallUrl", + null, + "device", + "https://localhost:3000/room", + ); + }); // Register the first user await ewPage1.goto("http://localhost:8081/#/welcome"); await ewPage1.getByRole("link", { name: "Create Account" }).click(); @@ -100,6 +108,14 @@ export const widgetTest = test.extend({ reducedMotion: "reduce", }); const ewPage2 = await user2Context.newPage(); + await ewPage2.evaluate(() => { + window.mxSettingsStore.setValue( + "Developer.elementCallUrl", + null, + "device", + "https://localhost:3000/room", + ); + }); // Register the second user await ewPage2.goto("http://localhost:8081/#/welcome"); await ewPage2.getByRole("link", { name: "Create Account" }).click(); diff --git a/playwright/global.d.ts b/playwright/global.d.ts index 8620546f..93f38729 100644 --- a/playwright/global.d.ts +++ b/playwright/global.d.ts @@ -12,5 +12,13 @@ declare global { mxMatrixClientPeg: { get(): Matrix.MatrixClient; }; + mxSettingsStore: { + setValue: ( + settingKey: string, + room: string | null, + level: string, + setting: string, + ) => void; + }; } } From c91d9e5790d402c21ee5ba9b510b1906fd4de3e1 Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 3 Apr 2025 18:06:38 +0200 Subject: [PATCH 054/225] do the setting set later --- playwright/fixtures/widget-user.ts | 32 +++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/playwright/fixtures/widget-user.ts b/playwright/fixtures/widget-user.ts index ee5b1779..7b4c206e 100644 --- a/playwright/fixtures/widget-user.ts +++ b/playwright/fixtures/widget-user.ts @@ -73,14 +73,6 @@ export const widgetTest = test.extend({ reducedMotion: "reduce", }); const ewPage1 = await user1Context.newPage(); - await ewPage1.evaluate(() => { - window.mxSettingsStore.setValue( - "Developer.elementCallUrl", - null, - "device", - "https://localhost:3000/room", - ); - }); // Register the first user await ewPage1.goto("http://localhost:8081/#/welcome"); await ewPage1.getByRole("link", { name: "Create Account" }).click(); @@ -96,6 +88,14 @@ export const widgetTest = test.extend({ await expect( ewPage1.getByRole("heading", { name: `Welcome ${userA}` }), ).toBeVisible(); + await ewPage1.evaluate(() => { + window.mxSettingsStore.setValue( + "Developer.elementCallUrl", + null, + "device", + "https://localhost:3000/room", + ); + }); const brooksClientHandle = await ewPage1.evaluateHandle(() => window.mxMatrixClientPeg.get(), @@ -108,14 +108,6 @@ export const widgetTest = test.extend({ reducedMotion: "reduce", }); const ewPage2 = await user2Context.newPage(); - await ewPage2.evaluate(() => { - window.mxSettingsStore.setValue( - "Developer.elementCallUrl", - null, - "device", - "https://localhost:3000/room", - ); - }); // Register the second user await ewPage2.goto("http://localhost:8081/#/welcome"); await ewPage2.getByRole("link", { name: "Create Account" }).click(); @@ -131,6 +123,14 @@ export const widgetTest = test.extend({ await expect( ewPage2.getByRole("heading", { name: `Welcome ${userB}` }), ).toBeVisible(); + await ewPage2.evaluate(() => { + window.mxSettingsStore.setValue( + "Developer.elementCallUrl", + null, + "device", + "https://localhost:3000/room", + ); + }); const whistlerClientHandle = await ewPage2.evaluateHandle(() => window.mxMatrixClientPeg.get(), From e9e82ca3e1a9629ed90acd3e98fff7be6867872c Mon Sep 17 00:00:00 2001 From: Valere Date: Fri, 4 Apr 2025 09:12:27 +0200 Subject: [PATCH 055/225] Cleaning + update docker compose pull policy for eweb --- dev-backend-docker-compose.yml | 1 + playwright/fixtures/widget-user.ts | 33 +++++++++++++++--------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/dev-backend-docker-compose.yml b/dev-backend-docker-compose.yml index fa07afde..8d70bfc2 100644 --- a/dev-backend-docker-compose.yml +++ b/dev-backend-docker-compose.yml @@ -70,6 +70,7 @@ services: element-web: image: ghcr.io/element-hq/element-web:develop + pull_policy: always volumes: - ./backend/ew.test.config.json:/app/config.json environment: diff --git a/playwright/fixtures/widget-user.ts b/playwright/fixtures/widget-user.ts index 7b4c206e..09e5be34 100644 --- a/playwright/fixtures/widget-user.ts +++ b/playwright/fixtures/widget-user.ts @@ -60,6 +60,21 @@ const CONFIG_JSON = { }, }; +/** + * Set the Element Call URL in the dev tool settings using `window.mxSettingsStore` via `page.evaluate`. + * @param page + */ +async function setDevToolElementCallDevUrl(page: Page): Promise { + await page.evaluate(() => { + window.mxSettingsStore.setValue( + "Developer.elementCallUrl", + null, + "device", + "https://localhost:3000/room", + ); + }); +} + export const widgetTest = test.extend({ asWidget: async ({ browser, context }, pUse) => { await context.route(`http://localhost:8081/config.json*`, async (route) => { @@ -88,14 +103,7 @@ export const widgetTest = test.extend({ await expect( ewPage1.getByRole("heading", { name: `Welcome ${userA}` }), ).toBeVisible(); - await ewPage1.evaluate(() => { - window.mxSettingsStore.setValue( - "Developer.elementCallUrl", - null, - "device", - "https://localhost:3000/room", - ); - }); + await setDevToolElementCallDevUrl(ewPage1); const brooksClientHandle = await ewPage1.evaluateHandle(() => window.mxMatrixClientPeg.get(), @@ -123,14 +131,7 @@ export const widgetTest = test.extend({ await expect( ewPage2.getByRole("heading", { name: `Welcome ${userB}` }), ).toBeVisible(); - await ewPage2.evaluate(() => { - window.mxSettingsStore.setValue( - "Developer.elementCallUrl", - null, - "device", - "https://localhost:3000/room", - ); - }); + await setDevToolElementCallDevUrl(ewPage2); const whistlerClientHandle = await ewPage2.evaluateHandle(() => window.mxMatrixClientPeg.get(), From 9b945d00f7d4cfe86ebd1d0c833c6b3ed934394c Mon Sep 17 00:00:00 2001 From: Valere Date: Fri, 4 Apr 2025 09:18:58 +0200 Subject: [PATCH 056/225] cleaning: Remove deprecated config option for EC url --- backend/ew.test.config.json | 1 - playwright/fixtures/widget-user.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/backend/ew.test.config.json b/backend/ew.test.config.json index dbbaccec..fac478dd 100644 --- a/backend/ew.test.config.json +++ b/backend/ew.test.config.json @@ -46,7 +46,6 @@ "preferred_domain": "meet.element.io" }, "element_call": { - "url": "https://localhost:3000/room/", "participant_limit": 8, "brand": "Element Call" }, diff --git a/playwright/fixtures/widget-user.ts b/playwright/fixtures/widget-user.ts index 09e5be34..0a422d20 100644 --- a/playwright/fixtures/widget-user.ts +++ b/playwright/fixtures/widget-user.ts @@ -36,7 +36,6 @@ const CONFIG_JSON = { }, element_call: { - url: "https://localhost:3000/room/", participant_limit: 8, brand: "Element Call", }, From f0126f41fb0e017cd7f5e507c59881a3b153cf83 Mon Sep 17 00:00:00 2001 From: Valere Date: Thu, 3 Apr 2025 15:29:55 +0200 Subject: [PATCH 057/225] Widget: Add missing to device permission for encryption keys --- src/widget.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/widget.ts b/src/widget.ts index e04ed657..6551ff96 100644 --- a/src/widget.ts +++ b/src/widget.ts @@ -139,6 +139,7 @@ export const widget = ((): WidgetHelpers | null => { EventType.CallSDPStreamMetadataChanged, EventType.CallSDPStreamMetadataChangedPrefix, EventType.CallReplaces, + EventType.CallEncryptionKeysPrefix, ]; const client = createRoomWidgetClient( From 6ceaa073a924a567fafe112e75a13c88de85739d Mon Sep 17 00:00:00 2001 From: Timo Date: Fri, 28 Mar 2025 13:50:59 +0100 Subject: [PATCH 058/225] Add simple release note automation --- .github/realease.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/realease.yml diff --git a/.github/realease.yml b/.github/realease.yml new file mode 100644 index 00000000..2b261651 --- /dev/null +++ b/.github/realease.yml @@ -0,0 +1,17 @@ +changelog: + categories: + - title: 🛠 Breaking Changes + labels: + - T-Breaking-Change + - title: ✨ Features + labels: + - T-Enhancement + - title: Others + labels: + - "*" + exclude: + labels: + - dependencies + - title: 👒 Dependencies + labels: + - dependencies From 14b3e49de6259e0d641a8213867f922a8cd08002 Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 3 Apr 2025 16:10:38 +0200 Subject: [PATCH 059/225] Use `PR-` labels --- .github/realease.yml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/realease.yml b/.github/realease.yml index 2b261651..6cfbe249 100644 --- a/.github/realease.yml +++ b/.github/realease.yml @@ -2,15 +2,28 @@ changelog: categories: - title: 🛠 Breaking Changes labels: - - T-Breaking-Change + - PR-Breaking-Change - title: ✨ Features labels: - - T-Enhancement + - PR-Feature + - title: 🙌 Improvements + labels: + - PR-Improvement + - title: 📄 Documentation + labels: + - PR-Documentation + - title: 🐛 Bugfixes + labels: + - PR-Bug-Fix + - title: 💾 Developer Experience + labels: + - PR-Developer-Experience - title: Others labels: - "*" exclude: labels: + - PR-Task - dependencies - title: 👒 Dependencies labels: From a3f01a35c88eca13a189946c9da1c6defb232e27 Mon Sep 17 00:00:00 2001 From: Timo Date: Fri, 4 Apr 2025 12:35:21 +0200 Subject: [PATCH 060/225] Add yarn scripts for disabling/enabling `.links.yaml` --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index d3b898b2..b3b57a47 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,9 @@ "test:coverage": "vitest --coverage", "backend": "docker-compose -f dev-backend-docker-compose.yml up", "test:playwright": "playwright test", - "test:playwright:open": "yarn test:playwright --ui" + "test:playwright:open": "yarn test:playwright --ui", + "links:enable": "mv .links.disabled.yaml .links.yaml & touch .links.yaml", + "links:disable": "mv .links.yaml .links.disabled.yaml" }, "devDependencies": { "@babel/core": "^7.16.5", From ce1c5437fcaab3c7b2683ea2827eee694153bb92 Mon Sep 17 00:00:00 2001 From: fkwp Date: Thu, 3 Apr 2025 22:22:58 +0200 Subject: [PATCH 061/225] add note about in-app calling requirements --- docs/self-hosting.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/self-hosting.md b/docs/self-hosting.md index 4b2486dd..9a96332c 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -1,5 +1,9 @@ # Self-Hosting Element Call +> [!NOTE] +> For In-App calling (Element X, Element Web, Element Desktop) use-case only +> section [Prerequisites](#Prerequisites) is required. + ## Prerequisites > [!IMPORTANT] From bef57b677c6944f1cfe738a72ab88c7562211fee Mon Sep 17 00:00:00 2001 From: fkwp Date: Thu, 3 Apr 2025 22:26:10 +0200 Subject: [PATCH 062/225] center images --- README.md | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 31684a21..0c4ef4b3 100644 --- a/README.md +++ b/README.md @@ -52,9 +52,9 @@ Element Call can be packaged in two ways: **Full Package** – Supports both **Standalone** and **Widget** mode. Hosted as a static web page and accessed via a URL when used as a widget. -**Embedded Package** – Designed for **Widget mode** only. Bundled with a -messenger app for seamless integration. This is the recommended method for -embedding Element Call into a messenger app. +

+ Element Call in Standalone Mode +

See the [here](./docs/embedded-standalone.md) for more information on the packages. @@ -68,7 +68,9 @@ requiring a separate Matrix client. ### Widget mode embedded in Messenger Apps -![Element Call in Widget Mode](./docs/element_call_widget.drawio.png) +

+ Element Call in Widget Mode +

Element Call can be embedded as a widget inside apps like [**Element Web**](https://github.com/element-hq/element-web) or **Element X @@ -91,7 +93,10 @@ For proper Element Call operation each site deployment needs a MatrixRTC backend setup as outlined in the [Self-Hosting](#self-hosting). A typical federated site deployment for three different sites A, B and C is depicted below. -![Element Call federated setup](./docs/Federated_Setup.drawio.png) +

+ Element Call federated setup +

+ ### Backend Discovery @@ -130,8 +135,9 @@ points them to a Matrix LiveKit JWT Auth Service via `livekit_service_url`. The example below illustrates how backend selection works across **Matrix federation**, using the setup from sites A, B, and C. It demonstrates backend selection for **Matrix rooms 123 and 456**, which include users from different -homeservers. -![Element Call SFU selection over Matrix federation](./docs/SFU_selection.drawio.png) +

+ Element Call SFU selection over Matrix federation +

## 🌍 Translation From d5481d8c203f0e44e37cc9d7e36fd0d8cc3bd691 Mon Sep 17 00:00:00 2001 From: fkwp Date: Thu, 3 Apr 2025 22:27:12 +0200 Subject: [PATCH 063/225] indentation --- README.md | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 0c4ef4b3..af41140d 100644 --- a/README.md +++ b/README.md @@ -101,8 +101,8 @@ deployment for three different sites A, B and C is depicted below. ### Backend Discovery MatrixRTC backend (according to -[MSC4143](https://github.com/matrix-org/matrix-spec-proposals/pull/4143)) -is announced by the Matrix site's `.well-known/matrix/client` file and discovered +[MSC4143](https://github.com/matrix-org/matrix-spec-proposals/pull/4143)) is +announced by the Matrix site's `.well-known/matrix/client` file and discovered via the `org.matrix.msc4143.rtc_foci` key, e.g.: ```json @@ -135,6 +135,8 @@ points them to a Matrix LiveKit JWT Auth Service via `livekit_service_url`. The example below illustrates how backend selection works across **Matrix federation**, using the setup from sites A, B, and C. It demonstrates backend selection for **Matrix rooms 123 and 456**, which include users from different +homeservers. +

Element Call SFU selection over Matrix federation

@@ -204,21 +206,23 @@ yarn backend ### Playwright tests -Our Playwright tests run automatically as part of our CI along with our other tests, -on every pull request. +Our Playwright tests run automatically as part of our CI along with our other +tests, on every pull request. -You may need to follow instructions to set up your development environment for running -Playwright by following and +You may need to follow instructions to set up your development environment for +running Playwright by following + and . -However the Playwright tests are run, an element-call instance must be running on -https://localhost:3000 (this is configured in `playwright.config.ts`) - this is what will -be tested. +However the Playwright tests are run, an element-call instance must be running +on https://localhost:3000 (this is configured in `playwright.config.ts`) - this +is what will be tested. The local backend environment should be running for the test to work: `yarn backend` -There are a few different ways to run the tests yourself. The simplest is to run: +There are a few different ways to run the tests yourself. The simplest is to +run: ```shell yarn run test:playwright @@ -243,8 +247,8 @@ to test visibility, text content and clicking. ##### Investigate a failed test from the CI -In the failed action page, click on the failed job, then scroll down to the `upload-artifact` step. -You will find a link to download the zip report, as per: +In the failed action page, click on the failed job, then scroll down to the +`upload-artifact` step. You will find a link to download the zip report, as per: ``` Artifact playwright-report has been successfully uploaded! Final size is 1360358 bytes. Artifact ID is 2746265841 @@ -258,7 +262,8 @@ npx playwright show-report ~/Downloads/playwright-report/ ``` Under the failed test there is a small icon looking like "3 columns" (next to -the test name file name), click on it to see the live screenshots/console output. +the test name file name), click on it to see the live screenshots/console +output. ### Test Coverage From c20aa5c1c89bfec51bf3716842130d62d6f6c9ce Mon Sep 17 00:00:00 2001 From: fkwp Date: Thu, 3 Apr 2025 22:41:30 +0200 Subject: [PATCH 064/225] rephrase Packaging and adding Figures --- README.md | 24 ++++++++++++++++++++++++ docs/embedded_package.drawio.png | Bin 0 -> 309625 bytes docs/full_package.drawio.png | Bin 0 -> 1240418 bytes 3 files changed, 24 insertions(+) create mode 100644 docs/embedded_package.drawio.png create mode 100644 docs/full_package.drawio.png diff --git a/README.md b/README.md index af41140d..32a6f80a 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,30 @@ and voice calls within Matrix rooms. > [!IMPORTANT] > Embedded packaging is recommended for Element Call in widget mode! +### 📦 Element Call Packaging + +Element Call offers two packaging options: one for standalone or widget +deployment, and another for widget-based seamless integration into messenger +apps. Below is an overview of each option. + +**Full Package** – Supports both **Standalone** and **Widget** mode. It is +hosted as a static web page and can be accessed via a URL when used as a widget. + +

+ Element Call Full Package +

+ +**Embedded Package** – Designed specifically for **Widget mode** only. It is +bundled with a messenger app for seamless integration and this is the +recommended method for embedding Element Call. + +

+ Element Call Embedded Package +

+ +For more details on the packages, see the +[Embedded vs. Standalone Guide](./docs/embedded-standalone.md). + ## 🛠️ Self-Hosting For operating and deploying Element Call on your own server, refer to the diff --git a/docs/embedded_package.drawio.png b/docs/embedded_package.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..3f48515195993d1ca2ecb098a7935a5ce0ee420e GIT binary patch literal 309625 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 literal 0 HcmV?d00001 diff --git a/docs/full_package.drawio.png b/docs/full_package.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..663300d26d906d8d19e1e8683080a18226298b01 GIT binary patch literal 1240418 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 z z!+4~D}2=@=Nd-&VqA4 zrO=(#%0+=SPoJg5%I@P6e@ZbTV?|uy?-t-iiE(h4YGzAlEy}CU?Uy23M{d8T^ZJ9A z=lK9$)Jw1wmL60IZJ2NqW7*&1M(3h$ZR3Y-UOni`zef!7qMj+)C-HqKR#KEDHF1W$ zI3Rq{7V?|w^KEQsq&?57C!6gGBc-REeUz*rD+3sT<94z=d`8jmDfM|P4{+L;v-evw zpHu%KeacvV_iqKA$hN)-RiEuaYDpN`@vIh(jig{<(jgyi&z_&GZtKM6031R~>#Ql9 zbGYaAZ-MuvoB3=Nw zO|i>*SlX^7o&sH9V|2u)BUb$cUBp(U*Y5zLQWfV(ZinYyM&OBO zpH*HXJcs>@;IDeDymsVTlYvvEPXV^y?=m0}xj~D#^iRR>RLTo&`uHfNc3A0s zz6Hfc@UuH#0<=n8RxRMwix)kf6+t0su^*t=HIpyQPSNCk(E1qb44fH0x5azUju*R! zLgd$v0L?jeC)~&MAj`(ws(G&NndWB;_7YXG4FyOlqH$N+a42JKD{Dc4M6dVk#Tp6i$3`S5_AYqjbN<8>^E~ z(|TJtl4jem*>f)8Y;gUj%sPA;ITxazqi>qd@sOf27By3GiSliSF1%6L^CDYZ?n_hu zl%@4Yboqz{uYaMpTzxRhixziO4&OdX@p5yt|Bj~5NDt5G)V;)Xf2M%$)v@4;{j1$? zVv2@tv;4fl1$od6qgK!1gnJG(f)^gNaee1{cc1@+BdWMQgPVE#0;429;2BL`RCaCN zHpsPNQ@;1jpQ6xNhqd}lJ1{Xp7|khXJBd?ss?zN4wj`+}2Nk`FpU`RcfKM`CNp-!Y z=T8JEZ6cTv+yuXqZ1>TH{?C#&eQ`fK;J=v;ge0-w2Jd@(0F8lfMDZo+UuZx)B-+KP zKFvtSS`k9JFNi zJFXwN*6!XNG~SFpk!DIt6h^4Xeu@)qFr&-y_rtO8_jz+EgW|o%UAO#$4F~@72z2(^ znz=B5XvDeYcjI;XY~?hHhpv$*=?Y6F@7zIoG=5q5c+?YD?3c4vm1Vf_IRty9@!sM;>jI>+=+04`et{sS(`CgYDHIxa(xNb-40 zXCp*;9<|r3t6^&vl!-T7QWLy@cH%g)4A)vZ2uLnTvUY}Rk!95o5Fn$gnvH+dtGnwm-j#~^?^DtJ)c8AmBCAU z+(JL;SlTn$`z*Jx(V6x9Y*w!BUDEb(_`6pD^?qrv%aJe@ovGK?HR$H z3|pIzaf$dJu)D8pWwzKm`K6XgKseuMO2yju3oe|&%?}JGd4S1{-;kdlb-3r>)C2fM z>CZrhqSrgl!+zLb(`>^$S#+fO@%EqD&ELRi;lHg+zfEouVD`Y2-BD_TO7PL_n`Fn^ ziV_Df_4u+Iu2b2Zt36#J*LOL%t)O9PHtMYI&-<7qcq`p0fAT^dX@8Hw z7wlP&*~(yTc?} zGo)W)xg2)4pM%?NuSXAA>;%v7Uf+%&u?neQ47VUYve@4{llPH|^V9k~Y|FK_A}M5B z9oi>&Px}0f_C0X^`CRRYJgT-Cap1_0J(n0TX~PyIaUE}dLyFm5E@?@*!|l|gX3W)r zvIdL1=+bjI#KqkR*Gu|gFP!|`o*&&pSEMcM?npBCT9eD^;S>4*1SlFEFhdF4rQr;>^^cFw+ zQZPP4$vC18RTgcJ?l3qp&%mbnE)m~-`WRn2aeGq7j4o>OII0+v}Di6C*oj&{On0*f7@m|2jH9igddOCf}#rr^Hc@cg(X4jb>2@SA`7R2NgkTEJBCWtGC?d*wu9e8CIzaoP3rc)Rl$ z>bf7h;*GN}@DCVO7>LqumXiaNw9b&g3GR5dN&nZn680c`d{fW< zX!;7PX4EsTPo?yk))^p6=ps#v`-TSWaBSS0*PmTw_z)#gWTd6?15V;vuK;(u_X*9A{z(aP zvFG~{+9sp;YTG?-VU>hOl-uJiKE53LG>I(aI^AbqidBA>7umCnP{YU-KH412O7vke zUg?hb0+nyg?xfM?KPOu-2{}MUf~JOhZd$lcCGEa86b}bmXMViwRwl@$=vOpnQu6~G zpnYY;A9g`h{`&n6*TyU-A8RLW1ST6So?yS9p*$fM6R8>SauYmFkT&Q!_qFh=c?-gG z1~9>cD=C>CEBAtUfG*|vlczn>J+rrjkA`YA`WZdw(5tjisPQJ zLp%<b@v08=5PJ6C3hQ1 zJau?=+2=R5TLVp9vcyT6dV9LXkB~Y}t%*F7Msdhz^OvHU)T68IRx|&+FbU^IhT%qm z_2YT~4{Ey|G>tuP`_Tn9I*FcAoJ6BTo{ch(HKwUs!izUJ+2@1OkFHMX%lrBMlr9?{1!(-eM=1zP zmV_)zpBjtXejJFR4i)`GJLeXi<#ZxlUx;cM?68!bF)D8j`mxjg*7?eCWY()F&$hp1 zd@nTgba9|Xycx=V9`Fa6UX|Fv(U;!09l~% zSr;C^*QXoG9Qmal;oH9n&;4EctF$zq_tQ1ipS!`Y!|6rt7u|pFt}t%v1=8IUjNqLY z5_d{zGq06R&!{G03q#g4$k~?bv)w{`L$A^J<>HwG;c)?}3tJ zIuP1`>QT&4`w3jv&ng6NU>i?%9P|$R_@vJaKi`w zFkf~6NE?=`o#|imGO5Yt2NjsQUCktgnFsgD6S{Bh{(B3|-?Y4ta5tA#TUUL6weiNS z&-t*$TJ?GrB5@^0>cXoI0Uz}3;w$5WY#?BDiKW;RMs?QA!Fz%#RuL*6HD9$pzOQ8! z-@Z)qs!HhrBJM%WPfTwcugS9|=%DbPZA>fpgDbNuI}^du>I z?Dw?Wq(UqDf>YZ&8RRx1(<2ewcIYPB9x_K}YDj+eUSQd^dwA^Ka&+c!u!0((p|{6E ze}|#X0=s?W81(G5qpP_9Md{f%(Ac%k6vVv&{ARpZIjwN18_*5CIK$UA zhlQ(gqy+~?@xQt`7AAr!`9b!>HD0E#YLQ4|^wg8tU*g@Nzoc_b)4DOg4k7p@ejPZ! zwHsdJu1Vl1(Gw55v(W4JU}bOW03yT!Ff~Wr#$^9c`3I>gJ=udS1LnD6XreuDbDvNb z$cqrWXF;UzHc%T$xOeXIxBm=X<;0bTRSt^Z}Vc$}wZ@59oOUWBGs2Ekb45S~f zb~%JS!gyM&Uw$==J9k!YM1=e^`xx^NEllvyE~N1lajC#%1T(%rCR}eu^gwW=fA(N@ z>spnAcRE%AgR0}r*2(k0(xN5gM~%bW%|9Na4o16GzwK)%onh@*!A|XS+H-zN#!#>q z+b(ZH%ZBqsz5(lN{``{4)9X*D-Ybl?M%s^X2v3Sd`2Mv}`tVGhn(09HTzmBkn_}4n zA;zReTgs`@4|IiUYncXn#N2`drExhA`ST?KTJD&GcK#4@yW`EykSfudM;*PdRss8p32t+skCImh`l0a~MjE@e)(81(F5mBPzkc>Z zW}FWu=mg~0l+W0Di(?9t!74WO&w0Fv)~6UkciwTB_Y=CC_HQmTJUIf>pu%Sf0^w59-BE8&}%7-)z2J5JUXr4aGQFS zWrc8nr~IUq)NPY!&nbB)R_&qG~cnfhn ztjPTd+1t~9k7|-nHzwMi+?Bpjc*jmD2_E;AgeE)vXe!7F zpbVaHhO=DnHf>3AShGkm)i~(z6CCZ&lTzP6d$bSs$@xyL5ba0vQ7Vf{b`yqVDlUzu z#mmyc-0^gHwvD?s-2Pqz8vzg8s;Ju5D(bJ}+pci)7Qs>yKMw~?*}$Uph#~n5Z7>76 z1xv(39MfM2d}$nUxxS%=I{x?jK$S-7t=H8@rhGP%?M`VvimhfYxGO3 zUImZee|cBDsLSDY&Ck$ZgS@5+iJsZ-t;mmA?>wK9$w1<^iQF9pk!aB1Ta8csyM9*G z!h-4mpe+azO}B&uKgl(HiqQqPUG&WWA&2zH9g#-IA(u**Jq!gtKNcY6S5x9nYs^!? zaoodBNo>+UJuc_O@zx>Mw(I{@Q+6lx%xD3V_9qRwFF-Cn2vK&Xhny-Yxu1nQaw$!F zJ=x5oG^R_F3h&b%rkM4NM}=^YL1rQr*!ib;fp7(~cGAiLy6TJ$k zTd@sXG-6cBXMIAk<6uUl(P?yEAoI+*3DjI!0PWF-`2AI*cCR^8hdNL?OMfJt*S4ZS z5Ji893_c2i1d%M^4N)X18N{!j!=1He&CK;00O{`Ps#E*q-Q!W#y_Q7F{yp787W?&W;lwL%a`k)9!r-FmJ(Ed#d$q{DY_~^KjVIq|XGhwz zV0*P9-~l~Oo`=Pckf!O4_igtoQQTpjWY+NHOvX5sawF~z{vo?91-29-^*VkzIvnRw zPQRLU8OcMNad6jVTr}P5!H}Q~5O?Xtz0Osf_3yT1mJn?z-NpW5I-B}Fcyh!T49G(* zSMoB09H=<&BCd{Ywa;X*LV3HVHX*Sz!T$s*u8Rt*OIxb?Y1&iK!Nl(&9CqerS+*(%!*%0dCuoC)bS1T$d7U~xL_qZ(;a^PCYJ?WKqGj!;h z1%qm{gA|>aNA2gXp*3>$S@*LFsndZEFK6z0tb14iTJquHF3GdV!tueQHQkg{j=!h+A|sUgfOaI#(9sEP$WL>D0yg zanq*O_4UksMAY|Paf`(bFExK8AUF|2b&go`$uuJxOTX3~30VWtie%SYld#^?SiXWb1EuBPjo^huJv9%I5CAsmk$lo&kqo?X8yI z$F5K=e|?A^#S5z$lWgO=Xi$L7*f@806joK%x$9>3&S>wI`C->}8qHG14?&q?i@#Yp z0+oUPk6Z1F;ou+lgul3mrHli@fBj}mP?}Ht{9Xbbd(fdT6iZT*X>19xmCv^++>?6G69uDRT$Yv+e{P|oAf&J~)14bnbp&-I1ynTCMUY68SR!-}1LJ+;Z<@%=N0IR@Bwgs%8a0PhG91>eQ<#4d+;2?jANbJnTFMBy$ zftt=!RndjpcbV(}vhh2|PO4Q{u<{H^=I85Ns4=@d;bU=m&xqj)%N?4xqBZ+cOSFc- z?%uW|d@V^(?eM%Q9f-j)&J5-T@g_eCi^PA{H2*6313UYWFDDsM@9t)fU#Oc7aqdQC zByd;UUIfA)@PI6Hc~8>TUXhEq=wO`R+oh1S6o_ZMcA~!@ruZn0UAi{Ky=vQO(W0)2 z^Rg1ptJC)9zxE9Jb&i%mA-(1{3DqIJ_MZGBWjXn5o{j#DgC8*u`T&*3C%qYvkv&Y! zk73DqT*#nZYEEks*9;+>!J^T|0@u|$+)ByJ%c<4@$rKulR@S!HIEoON7ndfedsNi6 ze$R=0ES(vGw|x0T`vzgH6>amR+v)QJEwIo|`z*=Z!G#k(=rz#Wskqy)S6IjP{MhB@H^( z``1zhbA$FsrS>-SbmR-N5TZHfm=px94-=@;CK?gH8%7>~XGx(Fqjda7diFY)==gCnwO;b<*a+fQ~2oV3`qLCa9Qt4$F!s zc`(n>c42okw|bLtlr4wuZjNk}%e3Fl=B0575EzZHbPoFrRrY&Q6t)C{^II3A7S5_Olv2H51V?NbV8ww z!>becL3q4Q6ERmPhWuFdDSPh$uv`-W=;3&YwZJ_yQ%~^C0o$Y?Z0TgBf<3tqwC4TL zZ1s#!6}j%fJ4USV<7*pzd+fXLKz%>(V*vl5*PaNlMb6LL2lDdE>Y`>meB-+S9hvQu z6i{R5OuHZ8&e1YpwQ7b#`7;ItUe$NA3-|N9On5N5;=;lt<#KZmS3|i-+OU0gPvaE^ z+(Y{;(L&F(z8{eUfsm&UhexRRfaYq60n6Z*p3RP%ly9SY=R4?4QQ_s)+aGz&(AnNp zw3yJsQazt~c=-Cl{)~p44y&~N752!xP@R{S|-6 ziXjIR)?ItJeofy(9Nxbg%(!CEUfkq5uW48FoTmkmVM_1C8I0UqP96BSxHP zY$2;>h;k?{mo4v3ovSk!OBL;(9|wW#xxp#?HMQ=LBrv7JJRA3Au{U!n7tgb%ZPaCH z>H40U9>o@_bqUqvs-KvYCpfnRjGvS4R(($--j3^2Z4HCQ0YAydhzJ$CtU)79+-t>? zK}XHWd2L7*SK7ORH4e*p24Tiw;a;Ei7YIklQ$G^Pmha1}_1&Lzp7vFCdpf>GzXL3a z;^SOeSH`)b?q+CVeoN;o(tOPfPE@ez8v&EhN(`g%%xhAv5>PgAexaUASGqmAo4-s< zKBJ3eAE%V>gqu7XPm;MLk(z8}N);9}H-|AQkttXWLlt_6B{#(!=F^o961<9q-BP~! z6r)SP635%fFGkR48LDm&zUyb&eL6{Lx$Nny7lZs;86oe(x0p^Wh^clcjo5#->%giqm1o`-FQC>IJt>p{r+o!~ zf3JQO5?yXf6rHME?Wsv85-ur$JZNRSQgn{oo;P_N~S*z?FKQ3d6+wB*ZNT8M4*G5R&}_GaPJ2v?vN|){4LZe3BsImz%^Zo&k1 zP#M{?Lo&KNUvThC-oItwBPe4z{lsOcir&wU$jq?_Dedi&vXM$>GT%-N*i*B7xvlSe zUpBZTB7e(E@XZpeav?U_#Z$D7$Up)l?jJw<{ph_8r*8jlx*wmOF!#zlC|(3XnH_hc zX>{qh{PCCA;+PZg7d{mJ^}bJfCt+b?=6e36Gm`r4oMNzxqF#7_MRulMoW?Qy{VEuf0b;k)q9S1n?u zK@Dl=bg%5sLy+{E@1#TmdE}73xZm_)`}E;LJMjy)M!T+~!#BCtsgLVJ6!3Pp!*{6w z;yJ`Ga}E#3in;Z5ir0Luiuv}us|;6W>-=poHsQk*y_^Byq~{YaeN^k=g!(#?!EYJq z=g3AnR}=%7%23_Lm>*S(JM_!Ks#M#=Pfe4HV}%5@ho<>Wmd(H<4onC+&$G3AQ^Q`t z^TTsrXpp|pV~JHvk+4 zCwQF_*h7)&@_eBCW1pI~>rc8QcaH~(_7~!A4};H3loiPJQfsO*JpfAYpt9v*tAD4w zb5$M-`LW>lw6cbt1+<8g`r**wN2^!ZR$;-m3FP7^OGwxX)-R_{NNNQ5J!}tEu`=|r zw)kO7xP^E+m%PRVQ_JiOPsD??A=zdWf9~tz9Qx)64m9d(&XykPx_S)8g_Etbc$G{j zja65=H|rHeD2NRLP95D(RjJ@4@6(-%<`$eEj!lGC>Ah8(BVlI?;T2NAzkD0jm#UtPep2@Ed!`f%o$iPa=-VWo;Pe)&$Kp)fDNT zgUR^NejhGSifmC)|su$2a z!#$Z$Ht&|qHQ2MjE;cX@oF1kE3Lkf<74Q-3F#sxifPc%|C&20beHUV%SX+P&zDx>_ zofbbm)Ft)zOekK_R>aCL3;k3L?4dt4K$f=YKb$yMND(Q~T+&P4gG~ZnH^25N!Cs3E znHhZUbTRn>H5&6&)f^w)>2=!(ns1KN{z=Y0?FP{o4CGDbB^2%OsCXYj@ImFn zb9&axZLtmL(XLo8_Y3l%b50+MB>U9wSMDomd@w)!Unj}Az>In*9`q%>_{BQEC}|g* z`IlV1{=_J;Vm%&H;Eb+SKR#vbxOl(JMwqgKi@0D@P+btxsX0IyMEOZ zL|*#oE`gziw2fQX#yj6{{?*<|ROqmU{5XvC$xvpN4-tB-4TrXTZD!b7S_8{S+4>1r z(L2$Z;y}WqrGG!?&H~||``O#&z&NhTUHvaj{GeWc)5hfsn=8M}qdXSs$=Dd_YO@h3S1LDh> z$@5u2Lq5)@Y`<^TqsPzGq(OCeBm4%dnj(`0_R-3ID!O=L2=RGbo?t_ZS8QaxN>v!J zFVV9Z5}9bR>MGM(mBNT@z6f&09ERri^Y3sS)Y}b$;S@EDddXqJvQH035EWkW=pd;E zDy{46>!b3Jx7!tXW5VwJVh~!hh7ANlTWW7?kJfW@m2sxR@7T~HRYvRrWJ1K|K?xGS^SMgTD|LcbdnAe4^+^fG zk0V%)C!r~Y+g{KafEP}V&b9|<9ze+V{!(kk>3)Pc`wXPng&Tif==&Wq?X@eZW3Y5> zd$R8%opu0*<7K=_T!}JAOJSTI&9F+P9~l8Ge;F3tcE`t^C_c8U08AFi=5-n+v}~9a z`zpC-cX(dnn}2Ma&vah`ec9un^^J_P|Ej8D0T(T}oh;Nb*+v>3#Z8?5a=cu7BAH$L z3*|s?!9SevHYwls4f<>^7&|iB?hb)gMDBL`6Z}0vPDop{BgOmObiwt=Mnp+Uiz!yT z_IAJ;T&o#wjK}t1XGCT|S%L}Lkl&nqwbY(A-~afMt$tgYl9K3L^4B!9{%mQNOFZ-< zT}q*lc!#9g6T5IHHLb$i#ePhIB#|Rg90&?W0u5^PqJtY8?^o~k)YzPfPRLQXq3aNa zK)-Uqf)YcoEUQC_tU*13%)To_=D2r8v}e6-c(+`U(J`*=Vx0F=01M8TZ)W%v)XN); zd@pNK#XSA=*c}983Y`ImRM&lMCV%5e%6^3X^PbFB4l;Ck(cujVvvb?$;}-)1q^qS_ z?Qg8`vmyDEwrC+r&uI98g(Y!nrrR6W9bUCpOd#Urgn~46|7ah6Nt*M)eqcSW_uIO7 ze+T}q`o@`CW=#F?gnw|SZJz)nrZKHeK}OSAhIK;9@NS5A>HM976qoYgoMbJ8QTq)> z8Hhzc^OOJ5VfTTp-9FEJRoDXIQ`F!3vD@m4ein%whr z*3pEXHSi?mC(1eIpo>QDuxYy3c@8h(8g(3CGJ|_lSK2a(kDYsh#wI*8nmrM;v)c^^ zcuSb)GrZT~A^8509o6r#(&|c(2E1W}>(5qVUxdDODO zBXE4bcDbGZl(;%LNy$s#`8j8PdN(%&yvCk{rqXXG2`hgnx_m#!qIjaA4SfdtW*3gb zyVh6qn#aTH#^wa%GPDn8cnacC8qd(nq{TH}?TsY`s7TdW**EQQ3A@GT-)Jvyj5i>Z zzUQ%K_E6>R#mi->?Y?k=F{4gFxJ~N!%C-5vKvFmSb!xG6*@j>C&tgH@;c;Il6{j!0 z_nj4v2ma1;$Yw7psE+LC>qodzl+;7lhApU_1z-$;T-x~EXK3<-dAWQ&y-V{&x-<~K zPpU(IeR@bV>sw}+7M1t>r)NivQ5?@zW@b8{yFFTX)e^rY1h~y(WR=db#P-cp!ypgI zK?Dc80qy8Jf<5G4j+u16z`HWUo9xpT%Od*%t-{tE)a5wu!{IDmZ0Je0>y=Gh?VAyn zaqRC!@I%cU&)ugKPX2#};?MLpG_D>u@ZH7@)~672Eo7YDP~FIGci6K-UlvZSgeUk)i6kcVCxwG#l~F=XTNI}wpVCb ziuTFX{4DKY?9^{XWeCof_$7{ykcDo~P8F~>xpX_M#2(2}vo>Pu*R0X4uSbJ|epv!&F2z7eIi`CoXVSB4Ll)2lEGbp#1;XKcEqntOcY zy=3j=kEd&~-YQWm2dXzvUNPziI~{(Pdgc6N7Bp9F94N_q0+OI}>LV{rzbx0&4%r!k zq8FsWhgEYn)wz<-KAiq&BySt%s|UH2m_QWtpx*3}h4wa&)EP~>#t~MzD>T`4r~&&O z1Rk>9*ZtO-)0@Jm0~nq*>YecE-q)#v`%sE6N^VtF$iX~6@)reH9s;N%SX?ZJ;_MB1 zF3j7QXJ}rUl%T-=T?twIwV3R07WLFYt1N%p03y@<)V)H5zHDshooVEyC$gDxSS-2x zhrT~|9O;tZgf%~?nb2wGvBsTGjbcu z*-j9(zL7EqbG%f!R|??xOhp`lKtO!A$+}OMYZ8OBt{gf zE=8_;C}G1SaG}1bdVRl1*OSIaJO!}ngNi;y8a$e`#$xOl$Ta1WMlhV7nRl0b&cA)5 zlaLWL-JNN>MV9{9VycesriDV3-|@BP=`X|I( zyjV}7M)6E6wyF;Ltmx<)64&B6a_Rg_qu4g>3sDOyS=ywj>A5>{N(fwc@{jQC6!y{g zp{r4)u`~FUdXQy59pK6Hda+i(M`899nl@?EhqK{u2Dg%FnTzIfOrUE@E1rnROt>yc zy?$;h@E13bMuR=99&WHYk?-bHzp-cyZT4`7*QGkqwj2(t#|GmPx2ha>RvPy@F>gc! zMcy8PRqXF!+;GX!j&s8{P*BA1WJ7XtSW-d77Sie~0tT`zFD!5K}lX zB@bRG4^fqq^y7i}0FRw49Bd8Qu08Vh6C3YK4SN90ZT#V6j)M9V*YhT+w2^h5sTfY? z@7WONcED??&BvD*Hk2Q|3;xf7Hz5-C^|;%_edzS^P-Ea4?y1pk>}O-|m-NUmLWJc( zBqAhFrFQa(F2b{~dC+dc11Kdn*&`M5K6VbW zDZ$uK*M9K7kS%^k{6hBcDDRvTP^TZ0b6{Mu3v`c0GTK%HFD<)PElf}?kC4;A_=!w( zKvo~>O#x&M)b#$Fuk48(NctdS{RXC;yLj{f@XvOVfU2o31`ukFiCxAcU~dPq8^C}K zjIK-C^l_e<+Y~A%-B8cbB|gr32+;0RhatX$Lv`ElDA~rq@DAv3S06Ho4UrDhWB<)* zKSE-SlB>eI))VT+ppRQ%LV(jA-{|AT9h-^mT-icV5=L^d8DRUUI3vw|2;-Ce`?#;b z_>J%w#bg58XXZAek%T7VjSCz0czt`yE1YA$fTb^<04%xqrUnrtDDqj1G|L!kGsK^{ z=k^nitS{r;>-WjfpY;~H){|RW@lK*3xSvCKHDlkuP(%PqlvYz{;B@qu0~&qbigZf_ z6vtPK%bcde+}gd~Mvs2}0ix)#C+j!+@f0eOoafELr|qK@Yp+6)m6iN8?FRG~jawn} zhOQ97cPaz%&iml}_}oF$#i**eF5nU;$fi2{*|`ZIqn9JuV`68l8tzc3ug@*fb-oJB zev;3c0&#^px#9a)3-_<>)YI4P^3zm;>7OP-JkhZIlkWvyN;dLyZJ><#9 za1RFzR3DooB+=xxxl#8zso03_Jo_hU$4l9j$9?7++k(()p-sb+0;PA_{oKVP}2PSN!4V(u|)*8!O;nAPQl z1K3A;T=p4YgWoNQLgR~)?H0rwd5MRvx`au6eWB2r+Jl*KIb)mGQxW(xMN${-a>*bi zIh{W5K%68`{aDWitq_cxuUuZ}F?p*(1ftqx`TK2PW+Aiw8EGR-Z+{@}`!BsN6A|B< z^7UtP-#6^xwP)|366IoMq!p4rZ250tn*T?(sVVX_*+c!cI#Ea+^mpLdC z7I&hz5-Tu2KU0_IUSfC*Kg9{|FBia%@P%~?-gsZHl$bzc3^4(JZ_8rfbjqD=*)RHO zaQ`SAr@jZI$$k{DP>Z-#_p`e1`k=YKiqP}nzicGaFYgVj3RH{^hw*;Vvf*?)(ys+SsZ)R7i(mgDF4Ys`-p1w4S4tU%lte<3#To7)WdMQ0hM;2 z;5siqqk!wC0y_>bxknEBXM30)D=fa!O>}pe5NMcmN}8_~br={J=tA$R5G2=%oE4CN zOf2_-ANB5L{CUs$vge-_Z$|Xrp{eprZOr4^-_%^RDz!1t_5u$N5(-u$2j4zrancIm z5@0i+Iq?L2YU)6a=NIS)k-^7MRYy?4X<{$>?Vh!3{43hw-2c)iPribOatoas@LTn& z*5tb=b7kA>c0W4$a`@NfB3joLu@N7yRXnA_MP7$T$9w_+$aVK(M+=8wP?X&)K7YPR ze53g)-)|DTw|lM=qJ3MStf!A1#Oi*BD^;sei8 zya0PoTI{AZh6B4^aJNpCt8Iwb)f3Q(pi`6{PvnvZ(f@byYjv^B#diDzoZ41CqGir2Li9a z<#QQ~ATmBLhXr)j8!|;`x^)hBNG8^lbqbK>zXJL29@1ZKC|UOTr%E+b_dg9G%+Xji zZ>a8@=W0RrTvzX_hQi>F{|Wnfo`jA1^$%AH+HBmu*Ae@xdUaqzd#IY-gFtcjsY1KH zdYG_F=jTJB3atq^rl2gip$I@An9KRp+NaAv$WG1%TF+kTulW*==oGfk>iDwP{XNj+ zdJl+e`T!IX7V4`s+)*gG&Rh&sMW zL^c#nu&-WdLg;+TE9r?$Kwk_Ej(1&rE{1B8`R3f+;4fVw_dCkLn>k|OF<16v$aMsG91!8r- z2xyQy*Gy$y+~sUVGTB1EYCogd-@K_;iPQ+rA2=Y%8I5TQF?w@3ZPs~ke)GaH6d!*@ z8i1jYl_fQml8PKpeC-2}f}47t|B{kx(B^*@ z(#wxI3R8DbRq`O2j`w1ThDaq@&vB4X?3%A!Q#M3TPVF(jX*SS7?sqJdf^=VI0k`On z4hRFa(GT_pTk%dr3}b~uhC%%3!7!s$dH_dct0TU*8-(_FTME!RTyAkubF2QkA$n1S z!woGKMvY6v#>e~6^gyC=4~|+$M|;n@bfUvHAovqO8bUZoG<990Yda4>=c+~)SLY^q zpg(?MVgoMZHuoVui>*zo1SkbTR&nXBnjDQ1VMXW(!`B(sQuOVGV(vh)1_57 zT*0`n9N0-P@0Xq`-f+gbg8(us6!@7x?1tf_d+cDb;LQ7U>2X=?Qt~*yuXh3h;7f@X zZXBAVp=nbqjWmol{wpaG+VG&U%AfmgtYBF}>Oq-)Y^dbB=Xx>rtC-|0xGTF5Sxg>f zdV1a~WgZ`)3ILHcl?T3`v2PRqB*Y#ccz2K8_MOj_q#)&K9rm202W~_Y*>52PIU@TY65to;f?Y1pD z9>T3U82ToKdqNm|UF?&)2km>N3_&U9>UU%YWQx8Km<1n470SKyi$}B4<2nrxkk3Q- z-Ji=-BOK$N_C+CuAQ%-g_R60kOs~b>uZvSW)Do(r*Ygv`-;2%b`??1S6z;3qH})9& zK+rNENly6ITkl5FzheNORk14)ZyyYLhCnnv(NCUmq@=&$6(+CA=W0)5wAj)1G`%;G zi6m0)dcb|91AcLvcu>h@!!OLsm@AkWKEx`WNvA?1OLdl^PgW17@1(u$NBSm)Bjht7 zXutIPGM{k=iMKIouKV1Yff(zsjp4gWm%{q_>7GHl*>Ana7*;JziYIoFP1vHeZ22;(tq6`NWf^z!Shz=4)HE zVM$CaclbsOvESF6tZ~pQ@Y7Iuq_Evi)9Ao(s&XmhEqZpoGA)ylP=Ru@Bj-!&ldpo* z)dAQC|4K->PnGP{AP^CC7otKraR|Bs$K;k7`&#wAucULa#iL@aWM!~e6qa`r%o%Wy zrS!h6f1ZDUpuDW3TdMOh=%G7p`&T^FFZWDW?*1hP+x3f17U0K$JNyjM!GW0zN=f*D zq%1y1t{={GTdX?&iCSiQx6%2w-1BIe^bcHWND;>87BX|naLral_Dxjp?I~^W$oT4f zDx5RPE0ovkB2w!~yFQTNZ-}LeSgkN9iKhr?#w#D@E>c7-IG}3%Mzr>{4=6QTpVRzn z%4cS#u7JBtWUFeqGe;sUgKKI$E0t;7Qw}S)N7T3E8M+eZo}pX8&K=B;;?f>DCupVY z=`ZZ;!UhSXT=B>r@|#fb`|11GwKP|W9yU&J68?NMj@RxI_N;Pw*RTn8`2(LNEW zTta1mC?MAj=ei3Zlq`sSCOC>;hxw`VF4)R;NP{4ad@f8c>>#ij^Q!a z=K1L9v}=cyVVQVl1X9Nc7PnjwMn6^!`%I^_#>2-dzBtFOSNB+- z0q2gf;1V9d6XD@Snzq#BRR4a#gu2;8Nid)4(sCJL|FC&l9!v@hUdrcOX<O?Mv}lZiOT=l7Z7R5=q$wcV+YfVdp+XWKNnFqf6-957eDY(4x!LQ${*%)ef_Xn z#XI37jMX1gFHn!(hbWjO*w>ZxAxU@#kstN}(qz~WK$2YBUrpy#Di2Y(lOPV_%_CXD z=o7DaQSO8r9$Xp53*$E@UA_V_z_9P2?U&@g^e?;PP9bx2?1ls;hp}2PODhm%Cx;3< zDshwGnZ#094)>rC58y1t{V89Plb4V@B*bA$O*d1@07g{D=bK{o8CfS@k$;0agF6{5 z=re_D{?Q>{ag;%58JNeDc_=LOt+i3SrI?QX&@x7w(DR1u;HJXSI=&n#>}-3qLBtfF zn+G9ux;3}b+BS||ja5N8f79d#W@mMK7?uU4v1YAjxSO}4zMcH%Z_oBGTwza8IUWBR zvdQ^R`+SBz@**CLm+RZWrW~fa9%a+9Lr3w4lO)!=OA#f3A<$Q|D=m|l^nMsW>?td1Kg2_N|TmwGqJ*wnaNVs>we zdc>4v!(DFgL88$Gq-Jwgy=1>%SdqqLp!koBRp<~lHXQ74otw<9>F^u52J*{q0ZReO zc=0#Ir2Dolp4byUVwshNko!HiWy$yZ_vZzAF-AR zXNybw+c=za?_~GK^LKmKpJOF|nJDb|bIt`Tv###*Xijgw9;JKg?>C!v#vLiT7#~WA zRK6IHowdLU$a~)4IE3uq+n3g(Y$=e3-KeliJcfE%QtVU$YfL|xIebo4&`ZJ0@>icN zWmI32uX+`ZSWM9jSeWc&)O_;k8@-i+VmhO<5A-eSTOt3yy}odORV3Ka6k#8AlXo_v zOC{{tqI?eS&P z&~CT;()pBw3LY3C{gdtd_NzAAJ;U%|nIxEP_@@s8yN`xnHFBNT7u5Pn*3B4o+Hy#x zIH-PA{L;qQEL$d&9`dae#EF?`bZZ=b`%1BVne|${Oh?_~fa+>+xhw%Q zAtbd+1sy}(A^JRRjTxZA;6LUYvNIU)Tul&z1PX^h-j$YDhp>ckE}Hu2ls8`O21f%U z4pl5G;~$nEI{3U!lUIArqr0wv6jy$~6W{MyGzQ1>%_7!fw!i>&hriN~E9sdj$!8ib z9OP58kEW9nfEL1U5qH}x|64^jcW?kHsBU$#zr_J^j2Te|w&VC~WC)PEB9DZUQaZP# zaPE#nc|v2wmY#m4>T_XU*bSy7(Ie_2yC++=%v_OwA9tOT@NIeN4KwX>vu2P@9A5o^Ld^0%N=$lM1kt|JDl!3@d7~uFF4rC?L+iqj}s8ZqXSC) zk(S@J|9Kt8C-)#SonmE9w2(d{pK)QsY-NHic`txG|GiRk?Z(RR_9y?6u`>Y`v#zMw zrScvhVSbY+T-*cO7*T{?vuLRcw8wg2YU6TbNoI(hf{)thv*Au;rHgL^7feC znNVy-@GC{ZaxV8$;2WdMz8|!MY1Lkl9eqT ze7J!MhruX1NTWOUjQs^R(~8G?Cri8%i$g7e8$2tHO~ix+=MXaf`ki_+S|>l~H(}&! zdOy_bnZ^!Tar(l(MM&!2gP853BQivxjZYO>Zz`Mvv3Ym3`wmlTzQYSK6Z1Vb-%*IJ z0vofH&bYz%+ni`55pA2SK=p}e_9uQT8tw$SIylk|jXM5|N|G5sooC^H`A>Y@cXDp^ zy$d7q(7I5eNy#z5<>k=NdOW$ne1&rDfnHx~ZAWJHu_NL9au6+``zbK_&9gaYQBJ}$ zMYab5`%}eL_NYMFPW|(zC;JCHgZ`{acct|UYo?)pY6~RFB|3U}`e;v_ zR-w!6_nr2mSg21v*))qIxm?}*9WIH*{Ucp~BZHQDFBKq?onq<(7H&>rTW zGaQug;HhJ6qPAxNR}^c8*ib|@TbDrFaJZrc*m#H~Kab*p+*g&v7P==U_&NPBPk^!A z(`R~a5C8Fc^tTndAwNPM%vmGB5e^rLi{MrB(0R_>hX;gmhZ`XFU0_Qj-t6cmRXuwi zzn%%x_zD0?w$$Tpc}>9IuJ|GqSI)ich4iO$NXMsYYy52=GS3Jsy{3O%%P{dj>B5~Q z@DsP#+o&*~A3XWoPC|C9BBqM6|hdtc(;j+o}?L42KKWy~*)tPu{*?=3uFRxe6 z^U@a^Ou$BR^3#AFy@*p6!4TL-9e*X110nzxTt9`ZXMO2TIvg}&Z1|AI9xcmZG+p+X zXe7V;{o)jEt9svKom@g7+PoNJ_AJ%M1~LSOz_vs5W$JKd+@Avj>-{^lhr8hU*gJq6 zpu$${dUWQA)NT$Sd)LCnJyi>{qgbh#xdNeJpvE4aYw zcaM-$yO_hw|D2lmk&5d1=k~y%ZHBtY5+#g4M%_R0tp5!DwiZ|^EECZKmTQ14U6`QL zsF&G$*hRO06SFYGY;}(H@2$4z%jsJwMECL=Z$Y;&x5i?oAh#fL=Sx2{C_&Dc@f8A( z9MRj4j)e2uw9DV6rF1Cv@hhk1_3Y(vAhqz~;UHg&I7U)+|NJ!es+YgL4eJamISD-+ zz9&9K?Wl*mTxr;n5vYYVN*+Z^eof$d8#V(kP1hG5@_ z5v{Ue?OWA-{8Au9ANlgVI|nW@t%Nr>IjkA7*30&USbw~1rKOKoz)%B$otS+(3y~mF z(or*Nn|hys3P{oz{wQnNsD*KepSzw4YT|b=pa<5$|B1xf-24UY$$m7K1vrg5hw_00 zf&-7tL%+^_^<2qwzrN>wzW-()!7r0i-AtgP%YZTbjns2)nC_)p1k3F2uk(YS3i|Y3 z!R+Sjugkz&UNVuwaqyERKl`>WXua&aA%H2zbOTo-moy(VsTP6R9DIq6*VQ#3(T24?TziuiLkV4E3{0LA57^?^OOh z6l+!=t{-t8Z5Cy}*JEA60s~mleh=o{>~W*q9wXs)xrd-AnAm76Z zr9P4HS$yB|G z0{Y?K2+u^oETzo%(zeLVJ@L2im}|PXnxku`hc5y#8XctmJcuv>`~d8deS{`YQK5yr z&8(9S;+Otho7Z6v_P+M5f}<$)y^n@W=MMPKQCfP-_}1@N<6#7EP?!w0ksD|{q}Z&5 zb-hB~#{gwBMjZ*8a%sMSbpACllPft~MLeLp)2$CiyRZ6(N!JHgI||ki8?5zE)i_}f zUHe0BZtxUfT8Uv-GKgBY+4gnN9zXI~4Zm#E{WaK}1uBJi)?+rsPWwVQViAZp2vqj< z%pd+5YkAv%Yp6EyB(?2R9-B_67JrZ19sAjfkzB15j%fHrw0vO3R0CWayo+CO+BD(( z*6<4(Rn~*IZ>^pWY`uF#=TFZ^L?bSb&t9VdIP0X@Ss;)Kc{2v@5}Tyaf$jQCi(GZ{QET*M^GdX>)kS7PnegTH-7jxQdyqf1}!i_9s$^nWwP$xzWL zO}B_(?_)cYduy1;3dEIqqUVI|^YOymWe#R`JHH1AY=6J1vO(+-7g9reLPr^Xa(h3P zY%jUbz$gY&XpD-uA2)Z}X8~t(;(21M{I`8Utp%>tx zs5vQ>X6JYf6iTp)@X)XiSy*9+%;BUlkv(b|e`evzI=t^t(I98b4Dy@N zelyDfpvxVNEAuP>DbEmL7cz~#`S7w4JSt*)3x26rK7M(|KiZ?+fzZ|l!MaA+vwW+g zwyyWB8yQjNAB;c&$~^^V%@y(n%>&>31|O?oY|K~Tu`59PsYdz95#BrAXSMd5^A~g` zi5z4moOsF;U&;7g9Mk-4VWs=D*b*=ZIPKI*WwfnM@TSLN!Bf^(KZYN;@bCLZwpn+G zFe^~Xj6G1wuHR1>z5VS6QlZBd$oy3FelsU-chk_;Ya?DdO6;5M_-)DhnN=pV?V<}b zzJZ;kqvq7xU%QR(xFGFun}#E@qFZ))L9EIX&ywIfJ)`b#k!$fvLr)ex}RWS4zX2VpBvVsZl|Be?Gtvz6+%xveVK-CxqE~&wcrP+UM*K|Z687} z`4>anw7-%YvaPG7mRXKL%f|w8!jm33i2PYVB#Kd|2(#ogPHa%wd zdEiL%xEuDkQ=e6=8-Qq3T|Sca zj$Y;WnP1zFp3JD1`qs;KZ*|n`r}GcJHLpA>ggBGe);qm(_rVuuzX(>~lSm6_rcPoy`6#h3qc3sn_mncT1BLYDen0v}%#(&>cECtjy zd*OX~OIICq@0{(j;wBju@+m#^M;!^1ZaXMDb07a^84mmY{q|94vHliA%xswm@_yaR zzP1mrhy0YInLG5tq_x7qyN8mZcCNu(;R4>rC{_H>2jzvxb5;3#SzzSWTY8l6c~&1n|`@etJ9#0sQH;}IG$ymtLr(H`j) zB?Ax%{)6d*8K?m0jtjb3vH}Rat8a(nzG4WcY6W@nB_BDZom!C400a)zQ#c%h zhLkCJpNm7-M6S-Z=-Cy%W6K^^w|gnYCHZAt7bo;7GbWpT35rCb&|0%J-pwWM>C{X8 zbh-NNt9eWscCxwuOY>CN+@MoG!=8vHECTHcmth0AuAAZc> ze2+Gk4>A1T33t5dB<~YROvB@Kj?W=*50N(%!8jQQU5j#ShjzZ-wl^C2C&hc9X1<(}R4$w&d0DQpajdg_akJ9glG5)fhXsdD zRdh~_S@Ky+{3;b#-9se!EtKryR)r9<`<@+<;i-Qd1#3hI>$+)bH<9~HK5Xob*pNYO|?vEMOZ0>=4&zDzutiA}_ zA7>}=-YhOm9$$W-f0<20g=#DmF^SC&%k3)7pbGYJRl1oteV>!%O(J(rd?SCqy4%J} z*UR*H|4GJZ;{n+9-gIqdiMCQY))EW1~ZQx*wVR3hBMBK1<(X) zYvzu2Zzx8H`osCQk+**M-oc#lr}fz!7Y>>wd-6-lt^R9zXl@7#=6%vHfH(-<}ch|0hftBJG5Ep(oH-_afNpaAA?s z>%rCEIl%7LhiGrK7{>2C8w9mmYJ`CQ0BXTi_pLoIt&{AIV7J**lV1o&S zx#i#)r4uOEeMNHmrgxj?BSWjFz~$3@aX0L5^e`bmw~se~W7d9LN3gWI1ze*Ce>D>F zgQL|4HPYP-VC)N9*2RhPf+asg@|rvm8RF+{AJa}NqzOLVqiwABJRfNFB|Ws%OPYA% zKfm5PxBfncoX9~Kt&0j4;}$mcv);Sq@m{{M8TSbL3a02j_oXAhziw;x7>?UG3%>*P zEn_gZKps7Rkg2a#?iaC&zok&Wpu&ic=Fq+BSS?fF@2o`|f9B8idMfrN<63+VIm#4; zt@OOj>4Uw84Xn6Z`Nt2p80B*@eJ%Z*vDvqqXogIM3YH>IZ6(eHJRaWX@oc{Y0$vRF z8oqLfFz}l*WFdZYcJKGEP&EZW(1uhnIS|vlg}2#0SWGww3QAf{t2KzzZ5uhcw!3fo znh+m^PGfvpxxEPF8NnZ{MU~{3o7O2tubkereKGy(yDCNG^D!o)T&whcS7LgWtVy0X z>pK0}flDHjo0Gj?M0vU44htAfU+Z?QM(mb*v;mjuWHjR)P!Qh15 z>G4TVQd;g2>?0@wd`nM;UGhHPiX!!meQZoK3iwt4Y=(1q3D$$BS12m#mD;io^Aok| zms0E8W`wT`3J1w&oBI}#0&U^~U+oy9obd}Cd5Y><3vq|a^8T5#aC#}P&s1&02K%@O zB%7C_S?ti8Kc4alloga?;XbV&f+1x2@t?ZI?$mzU!t;JXB^?N1mn)*Ph ztnKe}zHHJyjzZ9av7)2yCu=|znbkHxRfYEcpi145q;xou<9y^3-Pir=x{JSL0xm3P z7x5DgLb@t;uz1JIua0EAa9IoeSAWE(6pWrXFeUSY3&1N7P8oQF;_jd%s3>}Vfdfew z@E=3D&GzJ7V%L6OOAW1Ge&xZ)C@b%l?&7GoYaaKZGw39mgZDGw~(K9`1X?2(P9m zr;gM1Au~z^6JN&dgIXf2$6d&vQ&=eK6Hs3zmh0k>ht%&_88!98+BW71WcnkLS*1gO zB4J$BN}=Ea@zz=o}DImKXlV`=?cM5C;p2{Hbi| zc1ywR`yS$P&k1hWm~;62*<-jly|qJ_XJW%8$H?JFNFwuz6W;uufjgap3{d%*6@Hd8 zuR85@kMr#Xm1_B71tCQY2fEDGZ+WsDzUA+sofGD5>Ol^WbGr0)_--x^t^QeNg?GFrKb#1Ge1msyLi2SO^0;1F%wB-+J%iL5L8@WBS%y z@y%|<%&T@x5qIYI(%hN(b_3skR;5j}b)SXfUgP&sQYTmzrT+eVQJ!vlx)1iHHOQe} z%=xvCL(BUZEjg(0IQEx{m#@JI&5xMG25)}$xoY?cHkZSg_xihenFw%W+8E*?J48v` z=()>I`?irRsz7IcB7Uu3{$DoE+e3K(2LZ4f%_QZEPrnDJhXu4zmy|JgqYL->zAxhe=Vi9gmnBd@vBOL7KA_0R z+V2CL_tGYmtbu)eaOs^qU)L}Tg{uyt?@zhhHyt{nd+PC_Hd^*2Ix05L8ts0SXHoFj zpo82;rfK%!>OcsI&Z!6~P15 z?y?*vql(|kOOJnidANX{CtsiscWELbQX>x!(%vbQdOB@AY}^W)m`GYY88n?$`JfQze7oxRERoDGN9O5({N=b`k`vnC8g<_At2b#bYtzpDN7kug2vJM!oh zz*f(oIBF3L9NR_R_OHxQn(iK|n2X%%hKdrR+z9#p+m2`I8Ph=c$%n!>O#PB5fL+KW zwmO8MfeCVaTHe87l=hjIHS0ri)?4Awe#O}$A&d&@^Sd9TpTcGE5iaXVzX2ZeRZrbn zi6O*Ze841xfUxLltb&uz0$}}%wA^aCuuvB30_82U#(TuK!H@ak?r1Pv;gCDb# z4LArh!Bskk_}39g5BqDkGGAg8y57+ef7Ez!OQ_1{}-WO?g{%A%a=Xw zu|M)*C|hq)9DR<)EMD=HWuQ2%!}T0^T=mVH#zdv;r+R2gsDAo@{lznqbOhLe`&|$| zZC^d3m#Uej8miAM3cG`bli*D_#{JGmBe+9QN}MXA&m(sCSn;z*40{J$&ka0gO;Sm(1{l%g81cN{5%{C6@j=Dk4B3nXNW@ zJ+qVPFV8JkKd`_uj_*(UV*hkiZ{GJwyHQ=G_r;&imIWa9SVWQOyDeTLm7-HbBgUo~}fQI#cv7pjg=F?ltY zcj?KMbzuHPqoy`p57TcS!V#}G^O@Xd_*0QZ*oB4L1I~^=;hgjNIpxkqImUwCo7KQ> z-xcp@ww_2&B}iD~_w$b{ox-Ew9(pEyH(O#OQM|3YrTk~ND6L)FZKryrJHa@l5&Jov zrq4VMC{WFt+at8sr@Wzj%X{6W_aI4ePcz0L!FR?W2O|i97oz0cuxdNIo zKOXDwbFi;VkNYg&CVQ$FV*R?Qg8UIPsTYc(7Gp%eYY zKQh8Bll>>x>h&3+I6C+0J^II_%vSLDnD!98Ui};MdkaZ7>`N2)6F41U+v{z=9eEj# z#c~-;xc0(c4KdHFi$m-xjjdfl^3_bdyT}-y6<&z(Wuc%(7@{cmhwF5~uqSj!Cpwl?O6p_I-4#Ql%DABnP5+x|zHDJ# zjo>vr_v!sDDMV~yGw=JRHuXq;06bXz+Is9ytflULQX?O5y!+;zIM??i;; zgYXj)d3&qCqfDhKJlcek{b|Y$e;UA-YjZr+8Au5&58k-W&1)PtaOLu7 z80d7shhyabqtG6*i@C3w4#Nebi^R#0b*ZDiM#75SUbRh+mze3Z2JpV^&bQ|qsS)Po zV18{DgQL8U09}5|s->Yeqa4sUz)Y%_O6Qa3C969xI`jVft51S4R_A9;OMoR0!VIdL zd*_N{96?rnJ+y%k{BBuP=ZG~ppyYCOJ@F@d}ZRcAIGOb7bvsA?t_J_eml^*NfKZrKwvrl|uf8crCq;>CA#(jK@2KhxNVhRn8AhP z5gc&Kh{o`Zjk7vji5wQ)Fqo|{{+{{SK#gHOj0UK4wq~}Q4SNwmLVzxKrv4_+_cVd8 z$$q)_ii&F9{`3fCZ%0b&AJYe9xJMFrzEg(67WvV4vu?qLPB4X^uky?dOoM`f`2{PI zJ6+p`?`~?%ufyNOzwQf1x4xHBt1!VA-y-N!xQwm3Y5rQRs(d4P{z&TC%A4>4TimZh zE_Z$bjh;28HhyzNHBmDKC)Ta9SbSb`Hee{Lmp5tTO1qQ!Vhwtg7&^Jyy$IT}$$dbHt2ZdMQyWAER`@Dq8>&^PFtjyMV zyMv<4RS7H(*92w}r>RQgLmx?$k?gncBT&x?xxMdc@ZOVh!OnHOxABl4E{ihI^QqJW zqhgTw#{Ft~tH|-(WY)YB=6=yJN~Z*iae0L5PLFr?r@3TL{_#-a1De7<$t>#g?=5jLmdVOt z<@Sf=4;aBc7si|;pxpMwr_ZQi%n4efF515BClEMVewEZQVc<3-dIk0YEE&+%Ly|u!MRbThXBDO*!@9Ry|8(w; z6~dNtm{j#XP#?Y+Unt`7G=Iubc~j3foJO2)upcgWAUQyc-)1@dh$jlKO!(;Pj<58w z(meX6fcqrFSh+&f#htbD-(UKZB;p*jmbaPFGpcyP(a^d%Ta5;VSxYrfOY8md;y z?EEb}o`3o{tsPbR6uyqNFnQT}+_ZfFIa4O84vx;3D7eOxG6n?H*qDGp+$8NhS6%4M1vcbm>!Wa}NWb*SZ6e8`aH zui#zDyt$_`G<@&NDVM|F-n!=QVVBqCs6UdiO=eA~8;19T;csc8vU}fBP9H1GnAb7J z@m~dYrD2xw6?sN$li75QzsWh^S!%|*l&w1{fpMGhyYhvyeXu+_JuC!)kHV!4!t1pn zr9A4a(McWsA#Ki@EBWzS+xD}06L-^goY(KEp3X$t{rdT1KR&&#X(#qwg!(L)BKKlr z({}s!mp=t`3jjTn;VM%yJ{G(c0p5nox~)ozq^)okjsR&U0Ovmg8auA+BNqr4Z%E)) znyO!GWf~LAF?zN)2&+O==A32kE)sb8_l?5CH^+#voBtwX)+BCwyp-#pTvp<7+ua+3 z!{esK7kfT{zRe?BNu5<7-Q(q}y&}G-HXR@7C@M4LY3dA+m4MUpQbD6#o*f!XdRhvUsm^8k@~QA8A*?~{1e%#6}# z+)&RqSmbyD_V6xpp0L%}2sgAV7}A|a1!IeRBsq#Ot>Sc&W3SY|qXuf+tGuFX3wsw= zp{6eKuafr?Q}FwWS-=K+HDO$nIpc^;uj2jTWyNpywtMiT=WA^vAOu(>5ds1Bd~>>j;Oe>tHXwfo+$6JdF3(S0yy zyu0i%o9aBkvIg9`|3*r7MROKFgFO=HnA0cjvEOz4YFi|IY5%3e+6&I@*;B!YAT%fJ z9k@~L*N8lSt1KSA!_Ls+B}CW&S8*IvFUm9g^TXZFmk4-hzXvApe8X*OJKxHvmx2?` z<5OScuW>MDAOO=I70)=51m)XFM$91=Q9rc15>L!)1B zUHOnvT6EfD-=OjnSZL?Pb%DyvFyqGqk~n4z`4?^C>G;Coev(>@QBuzeX5yF>B)7A8 zUw6ujun3iwa_KA{&iBF@zt_~@xEX9-EaWi0yg^ekEs9?=c!_)zg}9h35)XI_Z9WV4 zc^SV8)$;p;y^qw7TNzS9l6D`(HoSK9*^5>LM|at*X4R#A;{`j4c(;?@ri2xmT!i31>En>UiTVsvk5hTr-g^#9`b z(6K3aR0($i(=wLNXHe5HqsfG#cZwllpXwUWMmqSQ`_Rw%N#O1ZZAE9E*@+=)y3O9q z8K2792Pa^t7;XEqDe@T>3?>RMV2+Y5j2FjyCv4D-S zL5*%O)vETzwq7S(&OB$-uCRk@4=80mgaVS}yD|IUy6iq@GK#8$8kJO0Oj7Nzeru#< z+Ms$?_7h(xJSC-lL7xu@^aDfls3N8mfLP4x(nZ1DZgGQ9k3to)nczFoDbo56oSSan zE5Sh4-n^2_-Iq9HrgYHvvXM^hay}Y$k)uucMSGGYa19^k2AWj zTpYIJ8%-Us^q2A-2-1Fo=0~sPNM!dK#$Th1&WY^r-Yf`jrj27P!hX{a6rMh@kZ&I2 zg^5SyavUU^IEc1U2FuIm?WR!p_v>^0vKOdQrLX7w;`z8-2}jPB{bKX`D~q zeuY6QS4NBoJc7$z5r1mmYQOr;W?O0ROMCk@_39&0Jrfgh_xLSu*C%u4c2>`f*gR1$ zfJ1D$R>&NMCS*61&1AY(b#jLr1PYsE$se!`x0RZ~EkY-hIyTcWsWol(4Ect?DXMecSz zJV5Z-k7EVr%Q=M&Oo>_qaoFb;=N(}C`UG8kOX4f+_cgmt?=fQ}Zq$EWoe&lqPpJ~F zJnGhQgvytUP)Zjr`JCQ!uIKRLaY4`Lk8Fra=#KL*Aid*2%3H?2yNiE!jUOAyt8cSJ z>6rLxrTdV$585AqHY_h{2{4vrlwO+fxn4IVH4e%i2n!}T3r2x8>z;yx)3R%!AWQ|e z>tTX3C7n)`_ynU7sAm-ail|4Kb<(nNVw01mp|08PAnx;o;OKsizbfJ^i!0V$=-{%` zkaW?1#btaM<_GgA>?5mqxh2%qNaqna!e!pq)%}5lNs^`(5*wb{asBNoNtry9=e8Ce z7x{h!Vh|@kLaAaWBeoUw!x1xQ?;PPR#c~hR9NK$h)lfHEe|yuWUfiTMWx5nvh^UZX zFR9~L<@Zb4^%$O%@@HM$&MW-O42Kjwi1$^GSf}!RgE>PIA0G=)5LupB)H?~WlCh4y zT!T_xWn)5I`Vx>p4FwA0QA-}k!hPTGg~2JH=9|Q-9RR&k;eWzr!%@?l%g7^w2ulnFK;n!-{+n)hLih zbR?mbXtDe@dtzlVez9{p!jq4h)K^iK{t#y0=wyjHR_d+Ki%LP$YM1Nm7%gu&r&xL! zM;BQZsEF|PHNYNxm5%xgn+VduHK@^KKPy>Dwh+2EW~ETRz>qKg=a_adsEO8L4WZGI zRoxe71Q&#}zJ#!$s{gYZeMcA(5`KEjO#J<1t60T8Qxxx0Be~XS8{B{5u zhP+CamYbnD4* zXme6}_q8bT>FLaF@<1^rN^F@Pt=blFS{=K0!)%neH)IBp`W<(IvT#5+I_-mOqFrxN_W`hXK6Y`y!kIlL@-w)z9iM-c zLCp58XMuC1=^owHVvlGz9>7SaD%t%ig7fe9sy^!OD|L}LG(*7zpy*LEF1ZFvb)=@x zlV!ku@b58Ea|wAr8Qu4LnP%=9UB#nudvZ2*Ok=@h$nNO}`SDY#W&>A_Dc`#Z*^>M6 zyin9Ph!)Ww@4e|o;j|flRW9_f2RZNMAPlQyCjfE$Qu{Ix4R*BoOP@=1a4BJlQ(gCH z167LEvMa&lOGX|uTNKr2qj_7bHPaAwZS1Jg9VWX=e%Jg&t!Pa=(6LLEQ4vhkpO2h& zyNQ@#c$d0AFN_iG!*bRk;eWFx6wl<67zmPgbUmHuj#>yeW*`pZ8n9?qH#9cEpt(5P@FjpW(iSviP4pJI)&?(mX& z_0t}QA53QVEhyn(u%<%A(83?7?D--CHMd?%dm2^);vjJGaXmwTs!-wTxP_!8kjU8& zk_^}ynjYtF^6$Xjrr*x{l`E4wWbO6Re(AQoIg+nW$jdl4mp|<`?(x@`HbJkrWddvh zYZa_f5k1I|L-oP$kYrNp!d&!s#`=)io(Qmnq5oX-RaHGriho`~lzj~CI~;gW(1f>x z(p{+SRVeq(y9YrKRU7|}H9fk4Dp)@VuO^S+z7uX z)xrU{nX!q|D#b5NnD7qfbmZd95~VzP+!c1mu_lVR%|q+vyW($A_ax($l+! zd2f7&tkdsiNpF+rF7K-7N&SJ6_ToBH3X6IW*n;znqDXr?iMDl!#O$+NmA!XnSE4}j zh-`+Ed&kuEi~0$zyQT1prbaBmrZp$wqx#k+ELHQIuW!NEh&gM4P5ytLN6&e0S zxC3FOJl6*(c#GK`WF4ELqvY~%_XAGYx!3TD8A0#K*99}Apfni=h%&);vB?aubvV=q zCK{Uk5ncuxWwyz=Gp<0=f$Ht!J1$XNu7{oDC8WChm*)=F>Vq*)2tCBB)C+3<&{bvI z`GIuQR$B2>PHTUf0sW<`=C|GuUq=SQDSX6+=i$88cQ?dLe+Q1umLF#U^YyBTXkdbV z>Ar`6OUivEpRVfjHu2JZW+Mfv>!NVDy;C20WoHivZFufZE3`{QDZTCTN3lH6;+2j9 zQq^Ov{1|loFoEpiwcrabWEx1LI@8DLh*SVQ47B=b!c>GtpWv!5kaiJ+!U+Mi~TN4k_31aqACuY&dC(AIM(oeGMB5J zR1DS-v^n>_V2~B?Tc5WNEO=l*KuUkLmZ`Aq6B+4EXC4X`F*Lb-16Y_>s7vlalRe;2 z{iavbHcN^uCrGJccIHnve#G!5W0Sba$l(D+xvna@f^hlBJB~F^fkA06k=ir4g8-G51OgHd z$Y~mBtn;s;ZEvjmmY*_BB04}+GxrSWL-EvyHw-b__rA1|kJSADgy^>ZYDkN>ZZY2a zINFBRKcz?if_rPDX8p5n_oNQ~h*Wq(PEgF2?Sp0xbdk@*^b5scYW7G6Y+Se5aa2JH zqpOEU+q4h6W%+R9Ts;CHlzs1WEC3YpDM*78X>Qkj=f*jReu}u#j7DY2y&*$wf%3f- z!uY&#hk?{aFfv<@K(*>Azt%!+q|(dYnu%|Rr)Paloh;I^g}B@|xncY%st=&+{=<$Y8qu zRvnjJW28I3a|U} zCc2xEJmtob<``Ig>)w$G!n*&tY``#=>&G;>$NUN1v=!#h7Nc$b;r}V?(5*KMO3%X4 zM=wWVPnGX$OZ$6BmzN4mj0e8&K~?5>Z+HHJ`B1cP3Mu_G!wC}Kwr(R3uSOWz zyl&&CcwveU071UNSvLmdg?mq;hrSRJlrvi2@IrruFFdjg>bpD z+E;FvYM;-KWM~+~=S-;cV~ws~FRZxqYr?^<>TleQ>PNq}FNDkAa4;oN-`ruQ&CQh0 ztBO;#XVI3i8W4#&Z%%?1&^#~%-nAg`t&bA%J2{&2C&$pw z&#$)5*?x2-Nb&1)VX3!bUr6=Ptrj$wWnoijkBk zba1E?ywaBy8P!+04lOBAlJ3^!SDX5h+`slT-VDRCwXA+#x9ZNu_)--sM*-es!N)f| zTn;h!u@B{&Z?l=Py*)!(lkKba-?B&qzWYlz zAbuWRqvw!FvHI!Zq+uKymgmrymYrQBb;im_w2 z^ObywGD$rpYBd9r;P6(oO1%tX#f)~0f|!%B`0Qs;NhB2a*yv8?THn^ECJ53}Bvq9u z(f32Vb31=iNl%?g415$Wn}cn=hy5evTivsk`y~Tl{pvB~M6c%Y8S8*!8X;E+uk8KK zb7Po%9}d5x12=j9NS=Yj8M3B7|MK*R50fxszo2G?1(3smRj&5UuTp-xXMtYbh8L6& z<^aoAqaHFG4Tt8`^`5KJVBIYanWP;1#}DEil~&ys>si{O?_IV0u;%k)s8ZvZsBt|> zQEOt} zeO(Pvlm&E*rXH2DdG;e&t{e$4P>jp~8Z5HMiVW`*re2~kKWd-m?8Gn~(lXgPC(VyM zJOp}aoDe32$1hxFrkk7Xi)JmJjaJR#)4uAAxhJ3XBz3dSUp@?e?YSlQAH^6y4(r6A zt)ij@CU+!(JFi|oF`N{qyXPb9na#_Gg4&fBVf7pI{(M!Bw12y4mY~3zw?P`2lg%P8; zKj~)0K?M?T3p_Rq9`k{;ewy`hG~h&4r?P*%wY#63DNTusA&1hlTUF2RpBham_-$<02|WrcRLcSvq69qy7>%AQt9zI7OXf*? z=6TngSMSdS5ZJ6wNH1SQJtY2k%@>E2)J@>T3HCeKwu?KV4$@=5TsEO7JZS5@r(jW1LS_}*KuGO6 z-VfjVSN|B^@xHzro-APkgF{4WpYlVALCH2&LP1qNh+%r1?w|Pc%B8Zs>9234EODlL zGvdWPK=q-+r(GGoR)}D3S3Ax%B7A$OFRE}8?nf^<#OHAN-t?)@!a%%bsMahU-ZzsI z0ekRH3;y8Q=e=(7{VNGE_sf^YKP^&H`j>g@_ze;l-_>2sd+Er0QPpSJBZ~Fbztik= z&XGr>mbMlt?7OdwPR7oIwNB79YZipy`-rBIaN1O?eRQmp0ZOx07JoeugD>?u!0ZFB zw>}yDrs6W;resz5r9C}Xzy#`&{hk=>A1dx)YzxAmaw|_kq-E~rwKW2I)8xU~T|Ov3 z*HjNn9#FvD=S?pol(El$Xx@6?#&nb9Nn*ySz5$z(TDzt$p9gw(priaY(b92lP%PG+ zUR$aM*dFSMkU(i4Eh2YrfIu9bO8}pcQcUa;G=AfEvn*tNz2r2fLNhuWnEUXH4o7=&%2Gqt!WbvU<cD5JBI^D*)L)L?$oSG6uSp7yp$OUB(BMc$RNE1UM02fImXkf3kF6e46~LvW$I7yS^3>A!qXUdZwFrc_SRg ztK!-XuU%6JYk=Pox#}|M$oq5G3hCBN>ncQP&?gc}#O+Pn%!O&AV#LaUq1|?<@=a}C zLVVtTs`xFB9GenPw#z#9!Lau|cLT7))t0Kil;K8wxam7JWyW7W6njy~d%e%Fl)BJ; zxUonl5Xy1$~Pk-Z!p*fULd3>J_ zE}5!xRUY)7uKjyHU*}A{3`dH8w&>$)`QXV;IiD6FA>b8f*nYn+Mgm9q_|7gQ`u;G$ zmd$eIz7|k4aCQ6ZqzDKTE4(kw*oSr~Eq3=aO_*Ol#pgaco$}q{5k~N3v|c-;Q)k1M z(u&B=T$O2W)Ed9_2{fYY94O{V8--;fAKuSi;pM76g8>M6AiQ1n3FEurr;nQA00uTN zs(;z0PpU>BIs{*poBI|lWEkLi?vu%;M+(T192iT$A83h~rof`S)1j#BPlC-9L(m}q zrk$zajq(dM@KTk{_S5e@l|R|y8WjF@#+uLM({1Je8lO)&>-jFGcrzip%+Y-!$4+!53< zx13*9Mx0dMkF7ZTG=`@xhnw*p-uoo@tcZ_W0ss!lk^9-Y$NaP&u|XUj8kj^59N7Vv z?d^Os?(#k7go1lx9fuFfkPa2DxHLDauBQ@fP~UYiz{%kp68Bp-xOCyT83`*~dw^M| zomJ*aSob#{ZA`?n)l_sE6VIUpqB+n%IHz1sh*763)Sp^m7|-@_D+YbB*yQ-S_4CZ| z-Pmt-rygqbEdgd1OkA{Z7P8=MxqqC9B=~h5KBFQxd@aKZz`TDhuOjYlhz}8Li{_R= z%yxg#4V85EGJXYvxtxFUReBm?X5c8{f+YtK__`l!t`qK`Lm@5I`o_icw{C4R=7JT~ ztAMj5RyX9)^TZArZ-ca6uo)Y-u;4khCU*vxk| zz;9cl-B3gwU6zpAy>`h9tQ{NoKzZ%Y70B0>K=dL7%$I=1d+T1>EM>~KBubf~TVT?- z^bA$*`cYFQ`XD|3gxX`ayGgsCWdG;T}n7**`m8Y+KzHm~Y! zVE3QFz;9R{hdFWwP^YI=Jl7Q29-?_4fTH5YZZsQ;+9KxS$!RRjJ9`Qog|&eNhQtynZ+YYYG+P+ZTpJ|@e++0NTxdvH&d4C>&CPac-8-k77h+aKmK^Vl!8P6W@| zR~C26gFJqJDK4sU_jXs`lT03ezG<8feXvs9;2Ha{n#vPkzZS}S4+`!^CWC@>c!4X( zUKsxOiLRM;G+H~Fo6H=&HSs@~w8mo2d{0}3)1=$27y7+hKEH462+wYuGhFs(cs)KW z1n)vUMl|_6ymEhEO!$mj2@6;pz;z1)^EBP-g&mkW!x#is?9B;L_mYeIY2e+{WF9D+ z6rp%U0N|YY)csPxWeeFnI5?z3De>L_&v75^*{tUK-TU_Yl_Mv0E|bUYw%L75E+hkk zF@rl4SA2MR@=#PXuo@CkX5KId7yRqo1mh4tmz+$`zBj-}($Bl_$0)iLl$4f6*?kd!Q&t4@!jKkCr=f$gSYA7K{*_O z6>zF03qM)tQlfpQ@fhDsUv0iIfxId%Y4J`J3fXKN!P1#M&dJ-VpYzDVvTWGgds`DQ zL}6+xBpRiosd9!EWWR%8jcYXg-Sp;aS+~apw^xYf14$rSB;K!4%7&TFK~RVxA;o*i zz_0`(?DKHpP}fP%W-W$YtH^!H7n3#=uMGvuf2Tc0Lz?g0$cUo)XbrR^n4tuY4R$X z9rhy>+x^T)&b~Ub?@MyogU(OkNkQR>!jK2E7pb@QiLpf}Zl`_F{4#WBXy@WWr>!&u}zTDNs; zwtVu7_*FhyjyT49p2l!IC*?OmssH{9q=VJ{+ywa-z%o&rOGY!99905V7jDh>6J)*YxrQhE(_}rciHg?4iLPmTR_P-pEsyNij z-tPH#x^DjCqw^g8l(7!qK69j=haib@lNt{}V<07(NgOPbGB;=zEmD;q{`&F%%*sh z(pv(Q)Q^Q_hJHQ!mlMR1*aL-K!6AZa-ax>%qqlB90UdNElJ*R-m;U)72VvN2wr1z_ zwvT3!_KdP!-7GuNg=B;}upM;SbTBgCuzOcp2`%7wO}OyHYsIWZ zr|xQmyBRdgO+}(za{aoG?)k$gfA+7ui?Pdd!AIbMGZs)!;_se|Y`4ApC zUEkP!q(6LPXCKD*n>Rn13I5d_{YAiA?XQqz`7_`iA6zR=V&IfEhsBn4jaN8{A2I!T& zq^w(Hu%K`97-h8Y^UpI>=9&bGtuT@+0goht_gn50K}0xR%boVvkeM3_3sa5Dx<{ZA z&0e7{lo%1)5Bz)+oigi0`EXfrI36$H@KFFTG2M3_+vCAMl!&y0bNH+;))Bg1I5VM= zrOyUsdFvaocm&oz3(hE~2N&`GRrMMmx6VdDa_=gsKEKvrzV@`w!wP&{uQ@D*9TsR< zg{UrI-zC4kX~hF-2;uST2B`TXdmZ#Dt2U|g^}1et733B_MgOisGkYNeO1?k%1=d^p zfUmqq3}2p*=Fjc1XVCCR7xkt1?ZX=MUwGTqYvdf0g4_=49t__cR}@dauindVY6Y*0 zAl;nDuGyF6Zu~>EoK%rkM1-i1D^PrINnqaY=Lr^&a+wa9c7+fDC%Pt-h57?xI2`C= z{#6zO$<0U9*;nBeu-yK3pty$R@8qDvV2iT334zjqQ&p1KhjGsu*Fmzi%h(kd49mU7BY2U(8_m&GD7K)YTuFk zB`M~}C}}>RAq?MhE-)M_G~S0;2*B_?eChl&AIuYRm7`0hOh3PNg)EI|?&c9kfhNDOgsfDh)ztIP0d5=o< zd=B#Vpp%z4-C@bvt)+d(B2ETbiYnymjS3|t8mpA#oaF=44U8NK|cA=c}kySL9%_DcZ0Na(-0{4$UZaUU80J$)#ww<8zviH<36_D_P*CI zS8cXL9^$*m}(_>9QFu z+(B0yukcgh`TS~U+US$M15%$)btklud~h!uP6YU6Vyr94Edv4jQt8edHJ@om9&78VsM*|3t{~{C-vrF6k8mBh2azi?zb3?^Av}iR z4DQrq^4EcX-89!^pg=nD3Rlb0i2g+INSRmO`GJa$^(nWq*1nEwdtLzaIP?Nd3BeaD zQAjN0&Xeci>S+Av(*tmFZc}390;Sba%AR?47AS!-1L1X}inkjdorwbs1^UgrsoPnx z^?e>M)JkFgk#t>KifUW*mn2Adlq3j}qi-T02oeR9ukT6q79RMXJTed@3f>cic*jwXy|cyeLi&SULRWx$*KqEW@+&yYnujIg}Ld-wXWpulu? zAi`_ZT-_#n1Qk_l*XJu|D&k!I@b|3lev{*~ylswr9ycR3K*6AYy@*RH^B#~{s@eMw z%9{|m01Qbi4e_tD@)7BoO>f0zIo8aRdI~jhCCQW>Q9-v_nA_h5NDa$$DEF4>I@}Do zBqEr$A-X-c>ew8MGb~&mO?3Bou7M=PpFE{+?DGgeNhmLYc_nk-zGbuh`Lx35eZ&G{ zAA(z-9kof@TOac8*7k;u(shhQ#Y7f>7^r=hVsqx6P$RHVX}*_ma&c>~ew;n5$-?Oo z=y!^GLXQ+hW_|v|lc}V!^J&;cK3^s~P-3W!l)2na&w{Mx_vgGBHjVPux&soK@*g>+ZRoghv3{P|e$Um=w!idqH%Vx_ z*mQO2eru;&2YrPV#+mjv+4$TC5xGFCgmziR5aXhjmM zfne~@gN`Fb{K9*2TAZ5rItB-ayP>3s9P<%`^qIM&*KIg_D$d(E(E?PSgv5w8qcR48 zbWlQsVjcUtbd(vM9xTGes_uW$caE97JwDNF8U4?n17sT9r@QCzNUo6VsY&@_#DE?g z@?^K5$-!IL6xh}%T21Bd38mk1xt8i0QE8^V zSQ{_EruM1)(VQzpIW+QkyzNz;mlLtq@d|AE>G`ecBX2-|o?zTl9c;a4*lq>tUQwqi z>7P(sCoe08$v+Or1=(ibq=kfCeLd4MXzDcf~*xprJ$+IcZHI(0i@2LdfmXQ4%xC*;VRM(p{@ zH`GDEFp537d4BI=r<7P1@nTB7=j1d%c?2hWgKXLhR^jH4Z8$yn#(GfS%I6zI;?sI| z-oJ}|TM!8=-{I^ylBo?T>b)ye#vjTHHHpPM>8K2nt0NAD(n5 zVdJxA6Dl*Apf5Qyu@Rr8^0U6xpps~k7Vj&x1JIxYwg*IxOZ`UdxwT|;>)>L6dw`$a zG7{darT97WQPh06N)n^S{k>ZgNS9N#{4#e@_1iK~25LtK)Omt{9)UTIat|j98%OH$ zZ1g=)Rh*VQuvC`{Y;C1t6xx84c6cEgkh>z?Bu(%8Zm*tSXqw#*U@&i| zU+wH;r4ogKs6ZkQPezK_{w@rH|LER3tJ354v1o-F=+u{7;@NnpNE7>afD)~5ie}DU zK$RQp^!X4Yu@Ug7lpG5G5A@gdymr6G^)#2i@g$J#SN|Yut->xI*Xi)E%Zq_L;pr;s zEwN9_MPjj2c(G%7H}#6gCVX|`#jQ^U#E$StEoa5w?F|(xN^;F-0A$i|J zF5Nnf>odJv>GH=Mr}GJ)Ql4X*d{6sGf(G;+ata-KcWO5ZX`dwjJK1EPmNe{ios6X2empVo#n<(&I?~_C;6h_O#>s+=ra& zJqS&{WiNdIZ<89LWQCfmU;L^Z6zO&hPXeq|Ws$Xn-G1p4Yld3ul=cLWd-+@{P8Hyt8 zkLq9ceshZ; zxj<$fx={GAJ?q&6R~VhZ_Lq45oLy2OaNXDV>iOV7r!;$%?r297^i^HueQv=A;MTCO ziaPGkoY)gHu1lKujyZ$^>^(KWYrn#6>r^r3gbGhUzZWJs43$}ZYpUF3)09SI{Obnh z`%yY3SNLV^QOEtS-*mi64{thuVBu3NpzyCfe!(_m%?YGyO?KPb?|Lyt&H6B$FMsQ}Qgj^!`o+EeYld;oN zcXwJBubI8Inr|pcy0EPoV1@vGHpL$eUYoC7`tladri=&&-|vq4&VerFR`lnO1}m0V z2mstes6vUh+M-@35bk>|h@1GzIomIVmj9C1(qjBf9g@QJz>j0*B62UEXY?2$?uwRj zm)?8eJN}>oK6&R0OP{WaT3h>wwpI)2eIL#lRevMrFkYJ$;;CmS0PQzzI@7=#vYTqv z;1dNt3rBDr4xXYDIGY*Ats9Hy<)((+^3{c4lL=NQ2q-(N4%5wDhKLR#4>a_J)AjKb z`kT0thnO5)aW?`;8-_d zMSkz0lb*g;cv%0)>t)L?l(y%+Uly)i(J_P9OZW@u=e5aF2yDOjBY0M#&|J>9z-WDP z-Wz0!ubY<~&Nn5M3q$snf$=;29cBC8vBoIQo^*Soy6&_x<+g9-`|8F#+= zS>G@@P;@3Krm<4nsMYqH{$#<#yx6V^;Sz<>JB$`JFGw5!hTN)LS@c5GR3_;NqW%90~s{j;g95(9T~GliRVk%Q{7sZBw+V+n|R3g z3(=}$VC^vx0cK>K`p*|g{$?Sqs?9$=)`hYCC1QTlwZHIf`(we?b#l_qZ?oB7GeXU! zGYp%T_e?N2h^CH9^Nn6)p)ij?B@{L``StrHG4#*+En|sK@qC<_qPSJ>pg+$!gClz>tTViN?86oQq&9FyuMp z&%b+oyNh{tcZhF6*59l=K)-396*$g~hnR6ieLH44ZnIbZ1zo&latz%ypQ$2p{bo?@ z;YC}}X;JqqPsu9ybmzdCfnil8r>fPkK?(`H;(FzrW8BNaQgK%>-rh%$FhB&vKTFT* z_i>|Va%`c>6>5U<(MtGMeqwTjNx|`WpXs+wXV%l@0qwpj&*ZG@P^WjCzQX~O&jy;0 zG)gf~ScqZUDnEQmy#ETEail2})41z=W94SwKZfpx_6f5G4AcEk1wq#Cy6l2p^R>o6 zWcN#Q_Xnt9{LtY;!Z$+TE*Z>EE`Flh!mSZ})z*u_C+y2uWh%}`#vfClG zHEW;O=Q~IdnX8%LV7SCJf4Dzd?z&HuId3cpipD7CbUb8_%qmvs4M4@g+0NboZt^z| zK1K5?gm0y(-fPLyv+fubRqxyEFhYFwE`Gj`2dX-+!>%#kuXaK2zm_wwtE;KsqY+2KFV<8u*GkXoL5PmFes3nF9X zoO}R(2OwZZ9G#2%87$C*>-%B9#)-@qRK?W2qI`Y*?(4=qCtH+~6`zAWG1sDB=fYox z0xeed;gRaa^G4=!S(`_x;UtM#2P>sm=%;v=kA)YgMl%DeqjwYBAne%r$% z%FhpS(Zp!$pe>%=YKNeqzi}OxJ${qU63|rL$Ne$w4>rJZ4>_}=Fn>QuDqduR%*^f2 z-mlz5@meT|GzC2o`NIwMZZ7b}fKk-QDTK$$(h7bOFr11M^mbU4%ZkyTqQN?H<(7mXRawc^A^+ zGzx35Z!)KA=ZO3kJr#?#q>CJ(;CXsm=@&g=_vI7g1m(FAq?HTJpqR_{dv~-`nLUXM1=c{`-Eb#Sb9|)m=v}xtjr8y_C=D6aFIKY42o{j`gOPVdSD!3q*6EDHNHc zLw?*O9MZrq}R09|)Ky08JehupeZyjDP})lp?#!D$V8iTCmMa-kTvTXaA^K1prrO!OLaCWZ-=+3Aa>SrzDRh>9 zVZotD4kZrq^u1(J7fnXyHejqAcz(|dPWYaB8lxxG4qY5?mxuF{bG{`C@(pgDOeK8Q zw`>M~VF!CG^?c|4nx0lTAH;|r1m^R!Q;P91g|dB2N-@dkmmp@}{0grPP)n9KCyX$= zFwHFiK6ohPyR(l}M2J&Z2c-3e@?Y|i8z>xUzOE4Bz7(qPRmdTT1q*OUoIs_g`6ag} zz}BaC2&tMOs`%fbm{UHyG%LrQTjlx^uJ7J`ZJ+mrQK5Ic573Jvv}8iJL9Kfp=bO4_ zU3Pk((0`d0`i?ML>|GzP<*H`HA{uD6BC{)B#$Y(cbV*nsr5$hdd-B==RIF{cz7Rt3 zv+Q3wDCs$hlaTDMxQW0j9#=p!s66NvFMispc33)^3X0b)iCKFQZKZh&(iV*qzHAJW zXTgLBFquy@bBnm{8bHFzHxK?ac%`V`=fW0WrIFADd%ThjTojO2;4{apkzrmB6sB_m zn^9v#Q|k%mQ6KNu5r&1om#q)aKO=QJWdPM6+6V&tP-B_fb4*hEx=702nKkcuU^llP zMu8$BZ7gaCGo50d*50Uk!9fy{qCmjTB-ER-@Bx@A=V})7kotY|X7T~H$x=mg=_S0K zESnfZ%Tsa`OJ(m4hTY>`7SAhPq#{rohD6bBGbleR-Yb|(?0)w6<3d;a7!>6lttE`} zeEQ&I<{X1biTBmY?FMdvR&UEUM<=N{H!u^&6S}*p;a{E0)j2irl-Is$N$Gcv{gd%v z)x|aS$8dFW8m8~QA;3p@3D5Gr+6bSST`L1YHH&W3qadxNKb=VzIMfPGh&rvh>{V|X zJ5-9#=^#9Q5Oa_p6}##@DJN9NUm5!);9Ky~_1_7q z2QN_#UYZ}{orEHD6{~|gj&>XGd zR&n++>65-Uff5XXWhi83NLqjK9`8U0r`8A+B)I*y8P9w=qb}G6VXh5ga|%22&!XpP z9rEw=Od}(y#Olaqke{g{*Hn@aQbO}togmg-4d?qA^7xbO20m1E;;6J>6pRyu9o1TL zYu(Ykp36PMh{noL9{|s*LVf*?q<&|a%0QcckV)$jMyfsTS%7*x@6du((_O23>2PRj zv)8(|{Mvf4zMub0UoY2F$WtH4AKd_peV+STcry>80x{8XP^Y1zy%d6pYx5tG&k(y3Yg{;kv?745bqKHQ^yBs6Yg0I{qL_aPQGL60n-l*J5@e`-kM6 zI>7I0`o!D{XBqC6PWlEU@#RD4QV2+_?10{1 z-6K_@K73BXjEBCg(ZDOx@#Y>q$AOGSuO3(S#rzc>Ae#0puYK&QtO(a#%Iuok8Km*{ zN3!$}UXtx$e$iUk-g*5~yL-(=&**4O#5ZB&nSI!S$xHqppu&*_@$ ze;}}1`(nP)upmXdeCmgH*s9kRXuQYcPW<3Q08eY4xKEDudb#jCu4Al{i!aR48XBjvG}ZSjntbfGiFT1r!AmyKL?UpEyLd?SAE@54LUQ#Aanew zxy*g2N5;ucCZp9wg1ivmH`~`42Y-5x=kqP8cU=oCfAWsl^)j*LU!!zSIDe1}=E%Pv z@rN~`6JQSL&;~bV7kd>9zE75zo8axYBl4LB79~d+E4y;hvPD()wc5N#^&1}1$5YI( z#9UX9M%q^`?Q+;>91HfvIk}T{%6$jnaP)i8H^e9+*i!7kNpHRlyU8!q(PF4+R>77& zMz5C;Ln+&zo>OExr=vM4>`I7Wc{-{je)K%84-4<*mt;Y;fCU}^O32W+kG@IK?ia0w z1PWm&FOANSr>kPHhvv-BmA!t*J%c+3mR+)42rmR~z?Je^yp*6`xA@htC zp(XpyCEzSm#nlSyyXMh0uUGkEX>GNyqtOkXb=314qC_O#n$)uk9Y|WYwiN*2f94nT zWDrUKkk8z=X!lTMY)pbvO-_CSWA9UXbcb=?x?StHd4XUGCn@slNUD|*!(BB6JjI31 ztyDsJzAWi|^FCCDgxjaL?AehBe_F~%Y;H#}ov@rJ+TpsZ{~sPNh{4M3ECwv5iSm$A zEv}8*^OJlY)hFeUke^~-CR*f=2F+zB?GZ>}O20qfF*z7?ARL4wmvgU+MkMu=#V406 zdC6cbpZ~P9Z0qEExO=b>aXG$kKi3P+#})7Ir_7UUL7lhmcak8HhJXh!JhiXB4SIAC zIU%((9Odew#lsM0skQVYbGD(5Lcfs}!Ti1W*wG`7r4tq$kzmil1iGYymRd1k^YCV@L@QxRym^p+=`3L`ysF?j+NwlAB(rkJq{h1 zjfm~o)R1Ei?}wKSUqzvdLB`(q4^Ti~m+GPeFkquCHpO!r?Y$=aF#UA%Z^r{69l&kv4O7`)&s+ud^*)L~i(;o(U9mF(~4rlAqO!mte zRht!#(7ZIIw`;rdi+%Xvxsnxl1J-*6pZZM<@H=_d+Gn=l4b%$#f;vE%2-;}S*GLXi zCGmnw+iYxWa#$`>kqq4}ILJ%*EK)?scw@pNN&`hBvZb z6{O4_!Q}&euJo+jMdbu3qGeVbhTMzgLtG3iQw-sOJZMI3z#4_DYmDgI&Ezb`tFNby zKV9$LQVj%Av{2GiUGVJpgtaZNB8oQ3?R<;@9--w?lF;K%BD|-z56^t{OeezF)7xuw z^}yN@M=bgCwO1f|jMAY!n#b+SlMX;%6Fhj3i5pPJ>y~? zo^9pDB%!J8NfZk{>7|G}T=wlJbzyA4{iIV|)1y}1^!W|f$GNve+mwpZejg!Z?h|Y$ z8G6=yXZ6c$oJdrlCzjRfm-inbN50e@^mc0@vWa6V3%IJNtZCJbT)93-2^i+<(ezKx zVK4nOr|puUlD7nZ?8B?p8t-#W!Q)kXo#^(yts^=w@CfcKI(m~JWn6aZhpU3HV59aw z4f6PTY67_aZFw48_qwlCy{>`zfWJOOdlBU%{glnTe4%eCZNaf@-i+LSxK)}vV787= z7%cow=es=!P;)tOuwGTJM;0}p4;fDAY!^Hy_M;h9O8hIimeU~az9PkC?e4tE`X4S@MjE_hv`Jv;dle9Amxu#~7t-gjS7VHQsOswXL%yy^Bvz%b zf46XD2uRDFMII;i8*Red6y{?*yeTjSE4-UAv|;GDIpe#wDjVQU0$l17$ts>c1G^gD zMt(pb*u&u8!L}1GhenG4=ev(*ivT<_?{oZ;!NmV2eykG`$Yjqb9^9`l3gWHo2Y1lK z+did?pLYB<9Y{dWV5#+Qa^I0z3fzh5i~#m)>ZXc4d@$*qO?}l9S!}0LgIG}5YJgBw z{+I1bA#q4c1)C1%!#CtP=*{wtis}8TPeU=82+Wk?E86d%Z4gC@6?J`NXULo<;MzkR ztZqiDJu$pLUtvl$t{Na9=EBL}8;YF}C%7Gl;}|}!@WOl;*ue#K4Soi;HYA_W?|d;+ zp*_|q;8NwRkDd&2>)BAQCw zP(9j{kyVJnO?;7E#6ie|==_U|%~82uUq-&yi&*L=V>AKoBxC!0nx+Yd%?Qs^0p7{* zNf>|?LvHK^nC+rSq12$mXdKHmO)(UN7n~HVaV9x<-6o@ zRcqMNPa^mv_}w-hrCV?-T^w?%CKm1O0iB~`QtaJ4L8qU08bX3jXAwrTvLD%6gA7pH z3^kbiDVTR^Ig+qI`jDd)eo&F;?@GnIvyTpmM&BhYxFX%(nv{{KeD9mX-J?R)D_AP$ z( zF%AC6j?wGkwd8hhgh91uMo<9ng1(`suf)Q+?RW&=E0j}*Z z;!szf-FV+jDhQnRf4=T7#Ur3O29fE55b5-7fdT{dFyMi3J=?_4QXNQM$-Ml;64~_e z7+*a2ez?KD9Um^9;0pIA$L-m@&_Zx1IdXy;52xFj7>2jQD*=7^QU~J(Oh;p2z2`yr zz`GwLNy@A{*PEcq{>V%+MC+%b8W!tr&a=e8?Ie_L-rS7dCV94TvqV;t!8|T04wbex zHRESBy6`IioM@aN4EKPpS^Z{bKE89tLYWTFBv?ezzc-E*N{ihNCTNs~XTN9zuC>Rb z)__7lBa!OHO%QQ%LG*+g9Z!!rExQ0?^L~BBtt+)x82?CY$$|;K)pb$SN!VBSk!jim zy7HPS!GAUHQ(4}A+&WMbBYJ~IPTJ+hntR@v9lhAZs8lH3N%-(c9C={0)ME|xZF2Pw zR$msky`}hATJKwtug6P%AGhi;^PCx%=_aM-mr!zac5ETUaZ0WAetSZ7{W^mA*;e0_ zFu@edf;Yqw*Ajy^9Ea#RpC)GH^hXJJk9z8~Sh}OxzAR~)<++}j zUWbFKBI)<0(tgG_Aekh&&M@{=&@XbPF`mUH%FUxb#JPUp<65PJ&)>lYXwjV3HG>B= z?k=&c=F|QN@@4**vf>lB{gTfOYWa3jng+nq@WT`PMerx+^~z-0$h-wHL4HFC4~&VO z5+R`5cI;mulC4QE?}Q?Atu(q`GH^tVs~D|KoY;{u@C3FLI=U9nxU z&F7R=I@V9B<0H{wAt{F--Umt<8o^%hQEEL2W0q4PvxHvm{_u}oybA8gBbUH6Z)C?W z%#SyW_Vsxk%=-qusfIhL{HoNE^}R%kRMX!hWQ>sA6HDM;Qu_TWWT*Y+-6{}8-EScB z<>*H?VH|?v=MMWf>jVZIA9=&UsTA&VQB(h~vI}O(`Lc`cT8)VM*OhTI>uOLe{GltG zuSIbmjj%JA^}%wsW#*TziadFD5HXU+EJ6CI3|}y_*Z;`9@^`<=?7+xnmA$kjV@TQm zk)IO7E*83tNw%ytAQ?&BXU=8YnMy9L6}xaq7C+uKUR@5$NBjoF@-wA*>yQ1j_kd;V zw=HZ$&bgw7O4*eCqBsY#(!sv*sL3E+FYHgt#L8;p=VkCRrT%@dM-sNqu;9D~D1|-t ztb6DwQs>P<1d)geW$KQ*gCnqAdN~PWC{N7aUBN1*KL4Oc7s`6)V@!qcy7;8ycwi2K z``h=O%R#l`{Q<=N8)(deRz6CAvRgm+Y7-F_3b(S&`H$-B-5_R&6r2j~pr@LBq4#2u z`Ja7QGJgLl&wV1faWg~bc6#iw*napBz1f+bs3I4PnUbmN)$+wD01p0*$`XN3@yzzB z8%-QOAn97IW599oGVnjs$zuXjt{I~2WLu=% zJj|~*irjR|iY7~&f7>cq|J288DmwT>cBpeHMHZ#d+#$dI38;PTauEfTBd^WZ}NAY(QVVZDFzAN0n?=>-w-e+B#_Ox_4{(=E73gN}39k4Xi}g+NDKtZDkF&9;BeWFedp_o5%r?&OQ~Wc% z#}@7DubzKZ%ky+pht5w!wKbE-GYfhAYD@L2bH1a`&jnGdP^9-&dm=Q4X2ep{pT202 zO}|ioc~J0)o1f?n06NRmD3viUV8T+z-UE3b<&sSyn%%}*0PBr;LXZ>%<-^f{xUM>B z`x9Dko1${zpP|_}6$8&VE8d)&!BhTAo4As@ClM_x zAV7utgJX_9r=IQS^ZRozUSuf_>m=^f0;H4M(m3aAR_sD$ycxy_Ba0?!uTfK0h z-?+?+eNo3t?>`W=YQv{ z31kDvL2J-=gHf>t_? zWmAw7%@0)m;EjRfwEIVFxmW!LiWzyC@G)_7mGft@&qWn*zy9tUU1plvQHN8Hu~jQi z=Ww66j$(4A#Vu2dFwV!thx9;E2pK$;f9A(@*UMwry>q#1XW#q9b61ZgkRD$2`?o!6 z;X#02hdUltD8m9O`2%q|JZxFi2P6FG&&;*Bp@wAT^65v?qgg?-32cVXXVC0kN++ii zi%0M)DDg0n%obJIGjqSjK6YS3>6~s~3vjb$iGLPK-FKD*L?VbuE^Kq+{IRyib&srb zKg0O?GE-8WLXG+YiAvl-CW`N&0%!p4!-z62|NWy;xog~xXLw{^iaxfI73@ZbFnNe_ zSJKDr9VK_Jed^-`z~Yl`7s8pPd*7FKQ2dMp#cxIEu&CdEB3w4`DQR#je>p^KNC%f< z03$T=ndr0u^B^Ua`Xd!jos=kKV7qthR4GmG^n+>JL)YKEG*W_A9`qC`dVd-~)d~2m*W9!(B0gORSRFqG{1*Ovx}IKl>(0g8CcUsnrkSYqXLV~1?}a6t zg}y7TdR-yTBOJBMa;BP{hOU4yxM@;-ID4zVmq$%6I?QJVzx^`d#zg1$4^RIyKjUwp zjPv0Dx5tAS{w{;c+)dnHa^w(0q29jT~I zqd0xtn6&GAD{ZO_IpK8%T~Xf zmt*$gWD!X{ng<`R#)>V>UF~1I(q7i&ougYR0>PTg6jqZNY)s(pNmd#R#5=Rh zI}`Q!0o~ivMjhU#vOkkIpE8J)JF;ow^1yR2K2hGAPp)Q%cPhgJ(w)A6%m4z882a7l$L+Eo{tfG71XE8)y0FBipZ|#G5I$@<09E7{^bB-!x+d-V zy*t)k7g@;HUhvwOa9@YN{6TC(pa@Ly7l-g2@zwWtgn8D}$ZEM=eOQ;BE~z>kU3^-5 zCueJBc-;&26EK|w0Q>v<<QuAq4t${v^QM-cqd}%HI}Sfo(;M~-htcRE-Ac6xHTZ(ib1*k{cah@!j(6hS~nw=+{uBX`4Ub&1~ zhW*zB?2g25&Jg7Y&~2DH1g1Dn>0)t7$~V9-?c*o`YH}`VX8uk(_lTl)zf}!^n&lf- zilIst58E<=o%&C)L~;lSBl=l&JbU%uOh1 zJHO0sE&kLI4+eC?-O)(dM$Ys?HTk~QCvqJteSX}Q^OeVlZj1;I%h@K~lE{8>um7m` z;@r;KVT%L`--X)N@__V{1QIGj9Tsx} z{VDr6P_zMljnorqf&q;g(JLjKtrDGDw~wn@CEwYMCiSDkt@LWE9%txn_{AGVWSUEl zu9!XNc-<%BO@85gS(_}~%zrz#GCZ#W8Uw*)3_8N=KBzL)#F`siUBbo4yx*T*y2O1S z@M_>+FCvF1SE9m;loHyW-dH?Xg)?iNW(XPJ^&wnOd*Zkc?ai<3r5zLf{JPzi@?bS3 z^beIWh01;(klh^zzi$^8GM@tVYM>Mp)aDh zz-{?;%K1U}b@rF@AT#3o${wT$Xm*dcBV^0>T!tUo>tpksZ!Eg|F629!cu3v&d#Lx} zFgNeahNFA?i$+00i*}Doiu|ZS9{+4i#NT4&LCZ6nV)Ag#vdSbf3@+gmst?M6To-{L z4YyrDYXq_~t4@rYcf2{g^rk=#ynZ*N$f|skua{Me_6@CxjfO($FM-Xe`4)bIO#$t$ z?_=GJC}zr-+-NQj<5xJz#=?3fW`}HLdTrS6TqaYIlXV|k`y8pqBi$PZ!WB)FjNX3x zv==Voczr1S(9t?xZq0K&E5n&dwSBHHq&6MC5`V|6Z{2Jx(MpP;Oh zo}DEKEEeUX2N4SU@Hu?8&5fNszgJWG8xmus{z`?|2VOf>@8$F5#OQ(zmkQ+R8}BJD zmi!?!S}i?ccqk97^vvFN!0&f1c2GLR3;$5B6@o(3a5fs5&kFK;`#Ly^ol1?2%34BlMt ztR{?{)>7d7r{RnG+$KKo-(2z);Pp4P?93KW2S_!SSR|g0ukb{I*8-h0Wvb4(e=pa4 ziN%kh_W^fJ$PAt<8EPm>b{@0zQ&8#|7^d}!{20P=+j{y^>>SHjX5P3RJ)P1nQr zx(A(S;x`948Z_Rf5k`|#3tDbzYU;CmfFzW?Nb+fp$%SJ`#yqIO!`kPUlG(rFJ$+Bt z1FtZb&uJ6i_R(yl!9#19@I+E?h3sH9P)d1=kQTl45&X84a2Wk_j=kH%ra}n$_+@6H?y-zbtkX8w5U~wJOLTjcQf@{J*2ZxT<$HOEobf5y^ zotK&d^ur57N_oH-3Gz%QRXJWcn~N?Mzs|WC5Dfh~g4067Au}I3aTLVua0^kL{Ix}? z*4c8>s2^irDg+G1o>sgAQW|f=r&TjI(bJGHp#SWP?J#8)FBwy++L#0)!T6yuH&%@WzX66rx9-jf=_u0?x=NnH7ebl^3Y#< zMeEbA69qtlOZ-atm~36cyHrbzD7SDf4U9jNsuP~Ma9Bjc|5O;Ccl2zJ@%GzOT%o$m zOg(8GBlY#IwgSfp=CauH?&%8Acz#|=Ef3-;q#kTrG2QFS#QWv)R7_7}^^{}P z0StXCj~rBWHe23owVx~$%o_5ZAtJ%l7y8YZ%^T2quJNZzDs(TnIrj-HOTI~#SaF+D zQFQ_Age{JYbw>lv+$9B+S5qRx#}VvDV{9DL-uCD;B1rWS?>myvtzz@7E^N%fzvyek zLyEYvkA?W*&z5o+ttEI;bTDfB3dCwbPOwVl-=<$l+B;V1ERU@gU6u|661vRS?}(7y z?BLwF87%D;2BLN0Hs8Oz+7h`Dw>9B8V*U+{ZsD?hZ{2Pu21Cj{JoDjr#TZi>90Ydf zwIC-Dj$6YO zh|Z*8&k&SzaXN%IkQ1)uTiG|XcQV__zB5mSFT(l$LrZE|Ec^0ZZuxT-)W~MuHRM`u zO01iLIJ3;GpuqL{exr++tBoq0@;N($^2#2E_+3TQc$^k)=BSK1-dhke<_x*lpdJej z(QkD?-8=6w`^kN==Q3dTKXXh!lAoF>vvoovvLH1p%YyIIKu)0;rYLhxR zmMkty{p|)XoEWaG2Lg#Y7U#Na6f=MicE4ttc6p5UStpLly;AqXBn|7tRCRur?d)9P z-Z{lKKV_%nZM`!x>kMdB_2b((7Z3E^hA2g4v6YKAam3I*t3cgQH9fOAj zajld8%$e%$Vl5s-xQ_AABCtpM0o6|C6ZJ~|dDrBrKT>@JCJYYg)|bQeXXTK`R$ExH z7f&S!F5&r*LXoC9fShlHdct$SUx#c6F|kj7fR0(AYwa3^`K?tD9t%h7=XV4RNm?n@ z?`oHg6_l4mTl+epRNw>PpuA>?ww{JJ_k5@tN+S{|D7dmpJHyASIyxH(8%(&!){pA+ zrQ7ewmbGFwTw?;sS(}9qF+a8Yrk+N@kyn-!O!jq6^>{tU_JlAUA_igW-_r1tR$eBT ze|A~s?-f4=;%X6&R=wZZ^L4x^f9(tK29m3tayYv)6r>IFl|D7MeKXd)EW|@wLqWfM z83f0|ru0G;j4)6Q!aHnni9h2n4Q@VV#3r2b4>AMjRypuP=eQX!T-wC3S4l7OZ2|Cxt%aqRYGL?@AoV_8sy zY>(f!&P)dF5UFK-&kh$r4UYjL1F-B@84$ryv*&T?xJbw+d?%l4C@SxR`vi?j`uUJX zYA8p%-gDZ)Tw%sQUI1S#&5EnArU-TYCo?gR&Y9ad7Ro`zB1T0nZdts`% z+5Bz$>6MU}j!*R219fFTTLRmMFbu(xnIBj*L-c~^p64(_pAPFeaZnWg*S)r;R=Ufj zyxe|AZ=}gC$ll4Z5xwe$(te^x=O5|rx!q}B_<8yzw@CqkwP$&#HYhF352m?1$3s0P zW*I;U?yy6q6@yzY<$d44^t<)#svM1B0O5|neJWJ&NWB!ZMN;acG>~oBNR#^Tfzp${ z0bky&d)e<_RpvB3fe%dmWV<*nwp$$XSn%`B>p!pXc`9WW9a^^DW|*&6h@B9M)vTr8 zy+A2=Mi>@|w5QM@l{ixVb;LoIJ|lCnm4znUVeQU^DDxZ5=8>GAVbJXu6Yd79_f z%V{Lgd<9w~TK?}@&hUY?ZgglfRPJuj7rkB1bpc^u|LT(Sy{ped?dN`a|Kp0%44C_I z0*gcwpiflyH8f0ZQE-pN9$HwOfB`O$r?7&zDAXF&eJ)#V`hh>0wnbmQ`Ei_llM+gO zOM&(fa)N%VR5p1$bP~!}v}vRlHhZFil_M}9{!Z|$^#mnbVt`4w5%?FLqbQC#rkyQf za%GR3)Lu(CcWWK62PC1QiO6)WIL_az{*zig=Hz;2Fnfq|2mbl`s(hZ zUD*7&fB@$nChQX?h6gY5B}KVQ_az{pdlWxO)CczS;=dToXf1zg%zVY+`Or#vYxZ}< z+FrqRY?RSi>-vC*N3po@cb^#&dT8k^7r{wVgje2mwYokbV|5*xfie~6NY>e7Jsmmz zOFTaO;c0ka4Qj-Bwcx)wftRwM4V{wBov&8pjT)83^LL!p#$Qq(Jl5C~w(Y=$Jm5o; zm{IZ%kuNN`UdhpA&JbFnaR8iP9^LYjmL>Z-|ICeissi~T&vllme>xnHuO{(Nq%0~u zB~_OFr+84Dyv(T|sk9YDMjv`*`T>J(bzbj~%cT=Jt&` zLUGMsHGnP_hNVd*o%9|T3O+NJny}U1^K!AM2dwVSHfUsAzHh@2h8nakzL=l^?8dgj zVO3d6Gbd`n3oYQSynU`jrdroOJ+@}8O!B;l-BniSeQ$o#6Crl?udYN>bbb*klErJx z_=#!yl)kz*h+THOo!wq>ReHsXcAGZX6QMoksh&m>oFh>m+3M8L*RWEg0J`8(ExE060-ZC zm)gr^yQ#zIqcTx~HT`Igdw6@`BWq8)LK|e_?mL=Kx^_bSDE$cocRo$`^f#5p@G5r4 zn+Q*zJ%flL)Ey=bYk5kmmjcjtzVJXTHYK zMLeIot2ue6u&G z&miGe-|Vkz{+vcI0p0C-yF2)F{qiOT{dS${05`mdIU`|L&x`B^9~0T#RdBMJ32u*D zX8!i`RmcbHSGUJa)ie3Fv5+11#-5TzNQBc6_nb$Oz)cFtW!D|xU|V?oau6Sp_Hp6_ zqTL`p=~}yK2e^!Fvcch|5GypjzKZ`~Ht}5dcaoD!LtG_60O~aNNCmV7^0uXblbOa? zvBY&XktD^W8U4+B-Q;mG&nW&>Gta0er8?I%&6vw1pzM9#*Ao}D%&Sn(MG8e(uZg9% zvM8wuv?<3^m1)@@qJQhP`}?Hu1+NQaPsZJSK{({`erOOx)b^?XW{lss-!B=!ard(s zQbDE359+XJrj3^E9t|o!lwU;EJiU{3TE;hodYUu!J`ln%$2#%2OnxYEDX_l#B@fEo zqqr;WBD@ZHW8RL5t$g9{^suq3S|Bwd+K&G0kV7W=yl(5vP7#Jax)#bt~r%ZaovKx00S8EcsY1`E?^P* zD7L@w{Dfrgvc0aPYu3&^TJ`LrJGLX>u24pSqWd9-pvOIjR2oUr^MV5MyM62}sC>XX zyT`ZRc>T+0(3K2c>HyJM1I|{bl;+^7V_07@oH`!E;ZS)RyL6v7~d;)D2JWSE2 zYRET;BaE6)mVX!3;^N<#^Wa`E}|JobM8%%gLS;FV)3= zKoxU5!2wZQ2&7e96MSfZYX}2N<*9GFqOEmIi?{g;cZQk``_e4rB+wWaSScLu4 zdX3?c!9Ck$F6pxj8>0f*32du+NPLp65*|PHd&D#6%80Z*5Nawc*<3lTMO>*Pkf2YD zmgGH>qiLxeHM-pvLdO}OT##Wd(@!=rv0xzq<;2~=b*@+M06pRTVDZ@@O2Mtz%+D{U zq6hbd-1qvol6DPikK&08NuSx`{ak9XyMpgx?$tVe{hX`YBy;bRVCgb&`8g00?S@=J z)X5IYb5wqOWFG>u+~&UE81Rt|_C$e{Fvi~UzJ{5sLp@xXGTdCC?fGx093LPA3uSz( zQajib_rGX_qcLJ%LoRGlOtEnbd#)B`$woUW(O3rB=#(Ll}T-iIX;>NQkVT7DpT&nuVJ{ayBB zf`1%;c&jkS>dFRu^R0nJ z8%sERXr>@K0@9nV*SWq(e}>u5?ta%MA+63z$*APy&`I3;D4>qXlE>5O@vSdW$j1+# zELaPRq;j2xOrZ9oz9%VYGU8_z>k4o@Z&t+%wx{Iwm5BM`lPTDQK=Oo5^z`A8*8BlB&W~))jOgB3?!oJm`kema0=DJb_w32Qrd0X@GpG3lS7u_BYZjo6>od6{ zD>?P)c7!JESMclxQry}P{sxdKLL^L^r=0;MByZ5G1L!56-^6V{cb|UVmz<9gCeZ%+ z8~Y89gCa8AS4z(DX>C4xBPE_31J08$@P+V7XE9;*wE?0K#4kpzh`-PxKtuNNO;8EN z2khaqe%`c)yyUHWRSZ66_ZqZp7)$$RXUDD~^_1?m)L&TFJ+|Pt{5Xx*g|AN#smPmE z@%HrSJ7cL-w#Rs|&sn2|$%Z;leQ?L3xVI>#3uZ`oC`4_V%>s10jG*V)dm6>O^8!8= zpWouocb1x%9@-^}j@$g1dD)XbN>KZEA(fhBB)lk~d~|><2C4H08Q0}Wo<20Sysgg} z=E9dpe;^OqcMqGYBL7i@xO^_^M_?33of%zd%n0~;;&j2G0!YhZq4x@hTqy)O2WhEZ ze^v)a8Cwvy{j}qsRC0igTq(~ii_;ma zt=ML_XL%LxT|yS5E?xFJP;0-_9;J!=5(eA73ouKdKUOllpZp%f6!`V z(!)+18|b&0H_poI^no$X#0zj3w~@R4hTzcx8@mCs6jkf*;MVcRIt>KTnmf0L2a_n! zO-c7g#pGw-hG(ygarhj$q#?W{+?H=I+}&$O!ws$D&#p6dV9iyt`wbx{+`>fjjJGn+ zlOEo#5-s;N|52SR5>BlluZJ8|49Nv(IzMxD12@yyJnS0e;`Q``7)NtL0S7#eZauN2 zDf}mcVO(W($6-%4RMUG&X10kxe~CI;d?cG`WEYCM{gTFc7w==g9svW;b-=%b-)x2%&d9&g#bO$sG{=gc1=^=_wo)PKps@CbP!dlypRe0c$~ZRni{Ru^R- zR1$;9Ca{%TWY}Ip>w!6_@#+tf-U?#uARhv$Ok_tGG1Z&Lvw;Bto&DKWOJSaIT;4fm zV@Jo(^56npZYa#3{bwdw#3F}2GuIrwB;k0-=sEfN!&Yp2|8S{>_f|$gcJcWj{*-$B@1r-F ziCme+uk-E}IrP5z&CH%Z{DG*+<9RA9#T-0{s~{gAPwp?S?$OOy%Q2^5r`G;ngrj}; z)-z1d%4UsGe6Txe7K`>wU40I#C08N%h)=n$_e zwCfRe;y(8HcX<_#|K;kVc#uCL{pwDqY_?cU%Pnnrv(JLy`VkV2*z6hggCg-OenPzg zEHpF&CBzNToz>`RLm?IS;v(uLX~pvbu+f@rc}b)j8U~&GVNIxF{C2Iu+HPiu>e2Z3i$iLe5mOi}7yc)fA{(jrxk|?MF-qXXx zd>!cd@6#yk{*c%9`+NGFyNOS62`MUc;P)X`=mR~mUnYUQo=qt6a_?EbnRg&_t`hYC zNE|PY@356W&oWe{lu(Hh1{a;;WXF4w*a!M6mw^_;0~Xq4-Q@`-GAZ2~<=~=Jcfqrs-ppwA)QG4->i>;vR@WVr+V7 zxl!T$00c$DAi;<_BU<1RU`8ysM}e6A{Hi&Qk43v%7W5Oy$4{koLD*O{=|j_yYOYn0 z`HzdpMRx+1g>Vgjk6$6mD=dnz7esJj+`*H&vg#9t-Y#!WxYCxEn)ctb39&#EmXJf2MwB=I&Wj?8%aJ)diD6# z&}NKYdXQ^8qg`LZ=X6#7%xI{$)Kc-!tPg9Vl`zq=iJ*}#wM{RdW>1?4gUGgnv{CpQiRWN!|MP4BW&ma&g3!@C%xtfLcqu zYr<6#+>!~*5<-pF&Z^>{Prmd7-RQ@!Rs1qn0VlTWYK)v05Bh4270DBkx8bJGL!wjO-&h~_SWU-joBNf)9f%U>=kQvZ;hIZb?Ly1<2%#!fI? z0(!*;vg7%Bld+a6XkTA--$^D)HYcz_(QdlJjv>fa^57(AbtdhKSh+^amgwye0NaeQk=JWmZ zM)@Fq|9mFIfeq5K;;t)05LEB<8*|qIGynB)3R{;)Jz7Zqq}$TGTBs@2(D?nwHJt_6|2!tL4HL7x(b8|j?ASngC`9;YaMJ_jKZ;R+N9x06^@ z&glrPBrNmVb2Ar+>b4~dHCrd6UGEWa!}2wX`@M$|$g7py)8GuY?7?2Q-B{uA>2hVe z+F4r(JViTuYsoC3p%Otc;IJ0f}^T&>8&fe?$q%rT% zUqcE++g2RREe`6)(5xZ2@U#(?=~s@!*TVW-tk*BBpQYaw|Gf`-k(P?*OR(k z0cn7d(is0)9BSrI8pKJ<`R;@)45`GP?+lv)=zLuH$H}GP`&|>J-|oGdQ;;0-j*}`+`i#*1aCmy2Yje0(a&!r15i{Ws)s|VUuVz~f*@bKGjQt5ZHNLCjM zJMXTX|GWv(rz33-A}#nFErzs^*Xq;Z0?TRlf@&wtn`NPzQnx*7FRjkQb@ml?;tvKZ zm>-uo)GtWYj4yi*Z?MNLB=uAO&TbE{aHTXI0N8d4>Kx>CIxRy6qloC`LlAz!hK zRq(t-gJ=AHGOGA39htv|WUa---g7K^sD@w)Fk{hCDk1Z(8mVgZZ;+dteLh{%lnI85 z50M5V&%xPI0ZnMO(7#?&}j(g@#MTBYoabT3f`B_yC;-BCxq@B@&@Wxa36X_z8~&U%IYR{n%pz1;ueD+?N$TF2ei!Izo#*Q%_RZl&nkEH*Fo? zVNidF6ZPt59`YSOH&XgY(LKkkY$|F*p{ahT4uJ@JWG#n5W2Fd}3qqw|JL)P8wn$yOR#csmKRvFpz z_xSanr_X-Jb|B>^Tl6=%VAire5_poOPsW8NLR3V-rJT1rl!{PLTCO2PIG6G|+i~NM z)r)Il2IF&=d+E$4DzJ*~#UKC4#bXqIUy5_NrmCgRiT%8vUY8I+`S>#PX~R)$r9t@> z)?Kn2Y6Y~`(jKJMI-)h>AWy}gBt7$$Z~B7JVUJEy{F&oo@AgXZ$V`fu>6+SX5nHNN z(bRM#gQS)ls=nrdG0yjM_2lu=Z2ST}SOX3KXuGv{1JvJct6;ofJ333}usXcsz0YCDyK6Y34L zOu&?a0NMz{dj#yB-4kt*BjK4g|ckU9e%CaxBmMCQ!EF+jouOPih0T+bS*^U7vfgG0gmZ5 z;!(^t&y;yD&hKK`ayQ@QuHzZ~!=MHSKX}eVrgM<$J2q1Iftamngx_-r=sJH40n|~B zzF(8Ct7$0$9JTIllpj1Yk#w zZ+|z}1oT;#dA@D03^Qom9$ylV)$07M^SjZ{la~QNj*Y!YK-_-GL4xqp*ZdgVk@wHP z&+}xQr1ovU&8UOdwFHARB2Gw?liok}Th4qoLZGx;Kl0=`2VJvzleCiZ5dKQ)cu!@= z&qEWi2jPe8Dn9Kc&I%e|ll{iTkZUoH`3FLcFNjBe`IHYMU6(tr8wBxW$79{qIwhF|v8l=e~F1@MPc1?S6&&Z%4sQ%9&2bdYdHi zb+MHAYL)4q?M&o5!RG8mvi#Yj&}Bl6s#20Q5$`2Woj=>Z>nS+1`ZuowY5~VgCQ2ua z#8=X?oKc(a-?93BvSsQR^4UHFbc}`CV&)flq3-5sA$lc%EM6Z%Wi>k*CR3yNi!?C;_8+O;u3v+8f?$d*vho&7wf6a{|D^CXv)l#qw$Nkil&<{^; zpo;aec*e4+e1dDOR}IXjCI8ElRY=0WC!k0E^h$Yug=FoyD$gJ4gV{4INd4v48(GV% z@l#xD{Sc<@Xv~iDd-s;Z0=ammG1O}B(c`!N6s@ire&FL6wpmvbpH>=ATiiaYxi50^ zcg}M7*FW8i@nh=;HRa!U>*6!6u3oxN%tpV6fqNEgMbFjbH2vNke+NcPcM?!b`zEe5 z6~)zo0u9}MWN-P@k;0=xANF{f?qLzYuk=a=u4uspO?`Zy~`h?XvYs83tFuK3m3B{E~m3$((hae2d`9N!?>Q zUQ;!9^}Ziw;raaCe${kjK9^&=9eHItz9r!@7WECUGfpbaPxpKBw*UkEHRa0f*Smat z`)g~sCts}x&p*;oqa7!YrJ!Wh{+@De6Z_ZZB_#OM^cy5U_P-hzp;o~Zd3gDjX*y&F z<)Q0&$dk9Q`6KEkGufBP)}FgDUDm5ibqVl=-h1!A8sXj)+GD(iDa192pys;kjp@

w$Un1VB8+-ka!1g}6yoHFMcEruHRVws)^!!u6o92aYizD^{{u z1EZVzWCK90@##}_+Owlw2)$nZ?w?f~5&;?>Z`%f*HA!)mDC~p|rchk=r1P+js@M$g zg)xWI^R<0R(v$Du@yZLA8K*-GzSvRG-@{s7NweW>biJ}*PN?5Di*KD>I^uMw|g2k-2CC#|Qoi(ELWH<*{O5Rp`3&EE|n z72~W9dK$T)GYHj2w;lC}CUL425p^u%3P`VyKbtY@mXLBG-=-Ix>}S=BxAb`?X}amng~U7nkP_fO?UIL+{rZ!@ zMmx~vWiVs@gtV{`1Vx3IeD|`%y7W4rqK1_Chkm%n_W2TzRmecjY_E-_%d;WR{Np+a zUqyb)y`&}*a}iaD_x#Aq@Ol^dg_WaP$b{j}h!L1gcJkTgsqP)EE4DD((w2$$4~#zO zo<&zqGC$rAgk;^6DKmSLa%*;P1TY*|SQEjBI1hQEjgMfJL9DigTG=y8Pg+?Uod1B$ zD>mg;CtfMH-AQh)qwEWQCZ1)p^6+*J<@LT@pc%HfJwMW1g3AS)e#W5o5ZW!}`P)f( z*q-!h+h+-}O%3NU$;>Z>8T9S+A)oup{lJ8()xlqq&ssJVH1=i!s#tYkJU&nj{M=*6 zF5-3i_s8aO4*@rz_kzI=TufZEcQ0wulO>*A=PSpRj|F;Jaj}sBw?s8NgyNk01)8D0wTa*bD(eptP{n232Ym#9sAl!yExPT|PQ%dU}9%4+Raj zq$$W~JUlA?pud}7)ZIPI#K!z9KuS#+>X$g{G1%xp+ZS!90*dROVzzRDa&K_XN^mN3 zb~E}&^BKASj33unmkP8Z#@ZH`vw}jQfDJ$+{p)!}c)@C+V<%RWS2HbJ?>b zT3ChdM^VBhE`HBgEZF?}zPi_WGvk+F-)zl!JSISoj23ZD)TonauS1|keE#GYI_LyO z`pxWZS_7PCG|YWfTi?X-$u;I;fDO}iEBIaD{&-$H-iE`^9KIM}eudy+^unJLmkzPR z*KZF#zOX^)VnR!kOfxz!od^q_IDEj(tLVfgFiK#uYkl`#iUj51-emV>!E(t9*8cZ84kf>PW$m=|#?yr0;7m``Gw;J!ynzF-PV#UR~+g_WjMO zF?)lwYyM33O2#yeUo+wgk*AZK+E=op*+=(t1W)+B4fxx+4DZMHa08!OxkP!jMZPed zl;f7WpFD2F+}~c~V|4ZGS1$6gwei{7lMynw0#cs1gxBWcj~r@mal^vUN=$Uhy9cjj zFN*T}`gp83>__Sj`Fb1D5IP9ocb=B3m)?)TI6&q^c8=6I2hcATAC}ABIrqEXU3J(x z^?VBINBBOy=GWN3a0$)tA+Hi#;HMy@eH8-^s3&QnA_t^?=u75idNn-N)M$*o^Mf@} z8j3HSDidJ%dx8^Jp7YyezpFe} zeGm#0^;_;07cXQyQNTvru3GYkFstKXIYV(BJ+hT)c`~op_40kcD5He{o5Lx~>R~HB zz2IjUo?EZq*_lyW!75c@^P>-UdBEcHy`)g-BG6g*-~pi)V=RBVOD|R>=e!aTm9c@B z?nOlq8`-qdUxsmtVQ5V)gJoKZCKmxqOqyyGetdq>f*XvE6|bgP6wptb(AY7C`lPb` zcU!Tk!Aa3Dl=oiJZIO4I1-9V12L%9vNHnwG|USM1oBDzOK`mA;fCfl7coqB=OB6=k&h-4mRW&7UsJ z>$;aq?N5|Iiq9E$Pio3vG(mBAHAO9JDa@-LUoSWK(v zSzjwaTN6fE_9m|YEZL25DAR0IQrK$PBKw97c^VpZaF$o%eB`q!1~4gu?;;c)mCG&5-h-vMb9j8XD}55!%ESF4qJqXTmgsW7qsGtq;(u~7oIev8#>#m-b6>qe z>YXhhT3=3n84uogvT>n?1oNx??08ILI|2jJ#rst`N5$e4`t{I3!UCPQ6s(N`4{b5yS(mS3_;la zqBFKVhdN0)($0J%*ks8F$yd(I$Sk;fSSYO&yKwRtzy9C{w?Wyj;cNlPR6X{1$T3ym zdp2g1gC9!VyQYD=jcuMD<>@d&DWw`e5JYg(Ha)@toQ!~SgbLzmIG(uUwzr|QbI?Pua5da`tqwwSqo7Ld8kOJ=G%sjk9PiAa2kJR z7ZW~U_(NOX_RQ$164tr&+gqi(U0T6H3{5kRpqii_{9$`+q62Z^7khqB#$W2m#`$O@ zj5RTeao=0`D6quh_8ooSjO{_2i0kX)&g$&*58xB=N8Lx)i+U{~Wf~WRnXX~^9Qd6+8q(iMy#yBYTdR;Ciaj_|S5$T^!+v{C-$30>I zw(mgw5mZ@~)uZz%H-D(HpOYoD2pUPYpSVS#KTImT_Mq2)p~-2l$-5NChdtoFQX0rJ z;XnSyU*+}mIlb@sV?9xYMIc82>A!c6pFmZARs#R(HcYz@u_y7gtbN^Us@sC@BjNV8 z$1ai}R_qmBE0dIX^n2A7TNbH=w6RF;@fEanj>&QJQ^at&|5C}mcF8&M#PJoJ`|!ZM zU|aX(bS9#Mj%t=)$+mk%M}=E&(_<(NJvi zEWni2^f!QHs(aNmzej#LGi32K9gvwd>)09I_p8*d{}Sps6}?;H*2K)a&+B3GY*VsN z-g)$6ct%6OC`HnEs{_r(1gSU$qd0#=|9NoWP6cP6`G_v;I6~)evhEc9d0noGzX`YO z+@J5ACtb?ia1x+`u(e|oX_zB>JR|7zqQNu?gKp+fu8(C6?NC}?%lgq3$PFY%`d*uB z9^Zj^>%ah-{qlI`)s8shK)A?2;MQ0f)^Cp(Z;J0K{>6HA93EtXzEA>p7<|Zf(Ry%v z>eRz?sPq={O2sI*%SkNR972cL;-P1;-7lJOr;gL%e9T9NyI7%pe2flPU~xP4*%QhK z&usuNJ<6=8f3g1rM z7GWN8`dlqTE69B7V*M{m|9x*oDH@!l{xKx0=m%2AHWSXRJD{yMo8Md}Z3l|AV7^CV z0B0Wi@Z`4cbOFT4Tl@0OYaivfU>(7HdKAZU2z%f&BrObb4)dPHq%lmQ8 z`o)ImLkc6|yHYR~RGqZhziePpSL*rm$}Dl-j4LjP-_Q4v`auZk)9FswwZg?tt;dB< z4&~#-a`_qZCir{8d-dfTKJVda553VaaY9_Hb|;Vie(momonFs`QREBKLj>gt=#iqG zLdkB0&)!j^i9*gk`owCJS+#V}A{Ndv$Fv>nT^B@Di@}c%b#V^)9NvGP&{Y=)p zJ}As@m;zVXKWGFuL+xQ1NlZ6MJ-mNQCBV9owK|8>8@P=_2O?o>jQ^dty$Ry=u)@(^ zsV3}(c$aE5y$OpqhF&-(zGk>rg*_=?s4mUr8y- z!OEeWa_P9;xrAGp*uN3wl-aaFLJQ;fx^cLhNK}%0W@kZ{*XVUX$+SOnR_JjNiCN|6 zguKgp%&eGZ6OJdbjo3iS=C4=GK^8i&S&NS@k;Cfe?;r)|P<%k;loZNudR>GS%V>7! z=}}rD^EMus7rfD?QJ(W{&omgG<%t&!8u6>Lpa;*=K{}Mq0jOFkX z`1e^3U-B!33v7s@Xb+~F9r#DnlDo&xbplT4*XG#`H=cIp9xJ&5B13Wu!fBycDG8%z z?fGw^BTyoU(4e{`O|0&zOH<3uJi*!?gV8Z61h^qXc-75J?*^&B-lZYjP{!H)VqsFT z^uY=Ixro2G-ojqLtE&`mNJ#ZP?lDujf@RG_Ws@#RF;utZxLU*abl6PlHMO6Go%E~O z%BML@|1QOm3rgW}4nGgN0sp>LgP}T0s%Cb3hOR)oz91C_%JY4FY5D=_4h=pVHJjG8 zVzFxG0=~;J#1Eptij@&)ltawPZ@~_S#4QOlI5tx?T>P#c&JC|SU&s$SXGv`&69Mat z39`n~51y=}oII7bo-3DrE!PsVqZLAxXv7BW z0dDY=FZRL}ZL^I_T^AbMK-}U9nAY1xj9xC|?-Z(csV#sN90awA9|yz@a|lozvSPv6NVSGO#@_suSXOS-3>;JaS4 zh!Z_4@I~n`JPg?Wv#QV|hu@uDB{WgLdLV>y@y8kY>eWwRj z`^d|gq4`*;6E$`Z&hrkoL}Odl{-tln(<#}>bDIeFXBZhoubSr8T|v1GF%hLEk0yZH zMSihCI*8o%%i-g5_s_F{(-7Vqd_2qqxVP|Rtsw$j`E+vNjO5*Fasg%> zywnTacrP-2$%W|2?R!7^ClS)*1iI_=@f5%XSlqf@YzkOf z5qn&>kJY&S@Iv@)O*o#N_3C8ikYoB+M3_QiIGSZ;X4rP2>!79G?k^3OWX49K9q=xV(0J!LTux`fdMz3d9iyttv z#%I=@`czu6^7eS11f&zXGd0lACad*`h%CBp>?VQF_r9DN8&1P;fp4g?Zc-)Q&?vk;ZzUE~4D) zP1^K7T?LNImnr(fdM1o=C-7k1q>lCrLuqcBYMT3ZuCx!Z=S6&}vg2;$DlX%)hampq zzw$oW7vB9VxJ)&iW=Qv-!|~#gcQxkNWPq$RdF#;DaOYVJJsmB5k4>BlzatV}_{0id zUJ~0u$_ePIYCBOEO^ndOEZzFiZAKjA z5JVt6!JzyCE#}Da(%51|!5B|i%f-jQL1XHSM{shVxp}|x?fCtb;!=EBV~1Qp3H-@P z597W7+bolDd!GaLeEuZwr#Hhg=PXi(34m-F)@7+hDjzWqPi=MB59<%gzxw@?RVTUQ zJ?$AqsrR*R_1Op^vgh|M7o0M|%s&~J+t>>vzR~5+Sq<&1q;$veB%Wn0Ae_0?Fb^ zpU1Lz|MbHD>s}Ob@rgd{qWZ@&>!N#fRRJ)$sx?pS7metdH!Asj4frB!aI!4IUXLHo zdyNPzo`6{i-EjYq(G#~i{{5_TJ%gB8*ym_26X)ZN@8j|E3z|NcPorp~LJ@uWxa4?G z0?jP*E&vC@jnqC2zEF&o=GlDIyd|W+pL=9|d|E(+wRmPfpeB_=j{7-;{rXP)csr#@5|1|P6H;;CR?107)roGH#l{{bFCc>1v3 zx$EHnf=>(IW+S{8k#ZL=s_BFe+-IWrj+W^ShvYXL zt^-IlQv1COBH+jKpg(YE!l&+QmyO1XE=E@OWFuOn$vIpiz@nfi1d|5V`RzSm^NnuE zWBuhN>9Oqu`?BS*+SF;8_z#tR-ri$3;1K=qHFg?@sL0lTHon6$cjCv%)Q0;_olftm zfJNX13c4SEXkg*-^@ir+UihGg`xUcw-swvC=!;6DyZSM4`I9q(#H>rNQSdp9*iofQ zkC^ux9+6E!{JpIYqnI9Hn>8UF>1g8C$tz|v*`?2>MOrWFQ*=!}!}v^?AtEMXn*1{7 zF`ekwagROvdUhNSm#he;pnADE6aZkeo`gy7)wKqVWua)s4*fslq=Rg{*G2jK8NoF= zQjQ6p-g;~Iz6S?q&yPxO|CtDT9J`q&2*)OvT8Wg{*Fy?3NRG`9J>7Vy ziV-7y->y!uf`8*F9J;@-*bu68UOw#Y!672TO!DO+l0M|zo1aQVIS|tfY_I)w(r`I? zkG8ovdHg+jK)jB#n9S|I9RHS?r(8;hsNi|Kg!vf*Fy07tNty>k^qMx9UnT|>N46e) zdGDZXKG18yyfy5hgH+;;h6OAzh$-n13jGF+q^y?XYyYa<={BZ@N7~cf{ahgN=0)U{ zc~Y2fid2 zK0qU>wO}InIh+K3cnh=;?TJlv_=9Tl)P~fT@LoudGECkQ$2?Se@|euoO0|e?6I+Ipr_@s zkWOmQx!k)663yfDA7o0v1NMAipJH--h3i>n6F^EH6m}q5BU#lC^rxGnV0ewz8a;FY zc=p5SL&+H4tkfwn`$M@L-aLfv&3o#@{ikp9;iN*!`t5pN!{AfqEP*FqoJjtu03tuo>j1e1 z%G@&>wAYLcx}F?Nb4kMCK>w&Uj#+N5D8mb0WYFRi!WpYDZ86aZSUI*ObTK#P^c5!XV*Uq%HD=N|Iip8T z95+Dt90oV2^uI;h+sBwaqZ{TpbKn^kdBXKxXpR@L$KH4Ni;Si@jHYROuFg7B*$;>-#k@p(O$ z`EeBt-!#tsb>Ets-Qko*Hc+qxgfEMl+SXR;I<$evIQ~<*-HSk^byt={_tJZCFQpi` z>h{bv*?zAny-&|uzYVIOCpVmRC;F3!dC}L!tnTx^vZ2hO`aYkWjz|ph&(ghUQ4T5A zi2^)?X$c8$ z@cBJtu#QssH?ThEizlHuvnNqm4NY6*1BlMzE2^r;B;~DScelBx;&kdOLV#Ij3@m&> zI<>2$2{_BcsuO!h!pbDf#B$oZ8a{njpjHU^iQJXmAXA5}jVoHb8>>d80k(+M>O#AL^wX%CUFu?ZM?r z$VVQ;^s~BvlTh%Xv-V>MU6U^FF7V_sPH<*}jb#(gZc2R8mu$_E84|h2D6@I`_965m zy?w9{{prFzYX<;0P)zOE96s%@scZ`IJqaCvA0hFujbNzU_e@(<`+)z*e?@n(Jr*4} z04(wO?Q{&YA-l7d{YV^Zl*3s>q!nZT;gwgfyKHHJPN0MP8fG3hCcAmr`&npvocfsT z)sLzH?2xtJOAivB6`(LM%JqN(wchU>vG)r6oU#&n=(m8R$I4zQba-O9|9WsY>V6jr z8g9`Qtb>^O_E5rombcHI6|>9T%jo6Ew{qxF?Pj{TW|UOuVR-TQJx9ba;Lq;{CfNZb zL-wWa_v~MX)c*A>27OMia_92!@Z9k=$S%*L2#kvX&azOioX{Zh>^HezfJvqrgF36d zl*Qcp>;b6F&0XG|3Z0z;Ee)QGB5M_VM8LXG>d7Am#Ox_H5W;vhv{$&K8wT$h0 zvA`bL_QGep7);p&v@HWKQgwHA4N|_8;05S4kEKN~-!w34I%Z5PRp`u2%M;sENGJ+U zU|3kg-zAGQCwpZ!Pl3QRK*G9w5?yvZkS9I^NssQC z{3i=;+|{5Dv7g{^pH%MC2vTR>_$Qpvj$aF!nHC%%ruqfPC_l<=5-PHOWhTr_ysOj3 zUF%+c_PE`}7%cz=@cqy;DhDgifb1W?L?ZD zkS7kBfRkKy^ko2R;L9Jvr*+ty3ug&G7F70;_a}j1Fpr=AiXJfM>-FI?L8eIL=VUk* zbVOYQhJW;p-ZmT1MWm|o#&Gl2r$qxJ&H)zG9{ zyKDr+{Dhn!mM>un>_}IM%^Se-*gk$PCX=P-fvi+V*t*?-qhH}1!7p<$gegBy-x%Ff za;X7-*7b^)4$6Mjs>u~>dj_;ylUPeYZV9_}n}#VATVuk7Tv8w=HXisS{-i;OkzRaD zkZGoMkO7Mc-+y)QEjSoy58tC*s8)QSRGdgrX?71F37{CKBG9x1oao&~yJv|ad~)+G zGfHz9?M6D@PIijLRdlb2O#w8uRCj~$861f$$MXSGl1{S~MznjG^4Z&kKt!&}EWbZv z5m)x4qB`B~ke1&1eHo&Ca`{Knd2Oqz1X1*tBnpp!Bn6a=yrF;+BuSF5KZ||FIOE<+&t{g=^M7gDTq%KU7AJX9Jvp`6u^%lXnm|wV4_RR z1HMi=-}BN?ze~rOjgVel^PFdFN!R%M#d#UB6(%as|D|9(o<_ve%2l{lPZ(7mo5Sfm z@=8RGXhx;WeF-^XV}Y9Yslx7fAH9uS7~XVOtKos)zE1$QtVzU4C=Bk;Ac>hr#pbFa zFFtB4qIB!_42Yr;;tk&tvM1D8#BrYh2-nShE9eu`kzBS{2swrH`z2Hbb{hvRw-HM2 z^S&xU1e=GF{l@EW-wzKPJl`i1N0J9u0VK~JU-yGk9FX|*lBBub)f@d=y#(E$(JjwY z@&QUG58Ne?@Hqph(3+d^1CV2ViP6A+n-4E^ajQsej#2T;E-PY9)T?fL7JIH=d8=p& zfxd-vx{v0F+T*gQNs-}=<>N)0ZY5HM6M^Joc9nTlgx~T70*}T`3+hrqBpmPaP7EbI ztf=S|Wo8)y3|2=x_(UtM)UmFBBFykIUh*Xtzt#`f8vToNQ98<#oco%B{gPyOCS88F zBqs6Rr**u9Fn_Lb4G94~TFdt-bD^Cy8~4+R$2o95_wkca4}fF$i6HWZRXKZX(LS*A z(9&3KaZ8oD`qK4nfSZN)xpbmSg991%fxpj~$Lw`!#t255!(HqA6<3h}Ol^TKGRAOJ zpMDPz;=BV<=_>cF0d`1xNq2%_HJZL~=Y1KWMU4@y7P&Z>h93pFzI_j?^#f@PO`>3F z8U?^5(&Mp=S7CH%Ve@$&p%yq+FoC)r_3j3c^r8NKq6Alz$=cXmBQhI~4+ut+KR*_> zx!NrWihBQE)@9bSIBh`N|6>>t7QnwmmyIb*4Ihc+yL;Rgzs%xYE+ifr z)6Zn<3}YtiFHm@r^B%1s!JTG0j@0k-yhizNV_;%ej58|i2InJ3!yY!sSXmPu_w@bR ziG#Nu983$7S?5nYZUza?hNxUL2RNuS&F_a}KeD^?0UTe=troWFyk0(Elp4_*k3#3b z3SE0Wlq6!~R;fCG`8+gP?Rz5p+aprV&gjRy?G|Xp@y#^PL?pg$7-e?k|3X0Rn*Kt( z+?RXUXY<7xBalztKP0p8Vne%OEGy`LBE7rM2R<4>;Ae}()JC{BRJVn&3p3BeF| z7^X-?p=WL`mkd3S2bn^1-yW-`V)(RTN6rMLO@h%B8LTFsUmS*}`7 zL6PmxhfxvdeZO>~s12kyh_q~mkTOzVTsT5@Pj^UP-1q743kv3p{>7I2n4FR~<7ZRM z{e2KTy4t!3qAc=D&k<#z@+0cM0*DMo6H>1S0 z750Y@p=iFoe10y_&G+!TEdo6R)EIb`2yYd#-&Qa&+fA42BS7w@pSgVvW>HDv)#Hsj ztUqvx?8Hj9d>o#%^a^yL0~IVGwzkwy_w%sdUlA1;;pEbUHV6QG3u!1eBzw^PnC8F`L3S!9zbZfq`fX#)Su4CR?ORep%%SY z7L?2D5ZjN^_>>BBeBx?K*$p>hN^E-93@BKZ#orAbLQREl z#oOZ~kC$qnjqC#;<)d6!qf64v(}<|+8I8i0BJc5yJbO{BCQ9Jo%Ee1knsU?%3d3*4 zc^Tj?GLQZwCUh|Ou`lkE09I#FmFe32UZW{`K<9FJHPo)4fi+`uP(N&G#T)gESJk}R zx($5Fo;8KZO3;M+ik&E8uXd@Y;*i^$)L zn}WFN$&jp`CooLt^hm`++d9>0bo0>-A;KXMxPiTPGT)$fJM0 zMJrkd2I6age4;im7ynS4w?S{1pPiY{B@d^+Adj-I{Gxt$je=s}EwHdA(A1ozw6N@n zA45vIOw$@QM}MW?`Z>VkCoKF^QXPO$bKcL$*~kS!hV(d8`Gno7PwsPZHR3onj@6Iggvu=0{Xk#+{XgRpb)Ho41hu~c&j&eB3TA}s`149X zdBJ%@#vS;&Pru|ed<3g?ai5Cga?yA%y*Yiry$H~(x?E1Lb3_XC3t@hk@8F+6Jv7kTH++yNzG`N|Xe6t67(R!L)GrtXzB^F+_u zOsL3BtbADC_38!pSbKi2IC7W1DIe96CVXR>ud6>zl~id!Dxk+ul|!p;B*MDdcNPc6 zbiZzCg3h#-gA3Q4-{V?6XWl0YoeMAd^?dK^?&)wD+H?Jut7&UBrM!su`^VJd%4x5m z*kn9FLaOvlzEAF!+gWI?zqUz^1qOn62c9q{)A737lY#b`7UFBtEckvuXFh^Y0Rt)5 z+TBTjyWGL=yE&BK``!B1$G1bTRQB6k>`&oFL`D0Ev5wgFK}gBl)M$eYxu#<-hVA%4 z!YKd?4u?>he@O4;`@*4~@jV|+F+<({hGK^-H?P1-3CBAA-Yoqb*W-G(Uitktsr}G7 zk0)b10D*!L+8$(e`kf65lx@@SlAv#RO)oF8<26|Jl}84fY2{L4%LQeHZjE4t&rMsK z`^97KiOPcN69a_#6_1a|pl|WU5A6|>I*+Vk;?1nZzUu9FmY-gY~JjmL8w>SjMh}Jab>ZDF;;}i3GI`)t%oHDDbe$JgkD7_rA`?1IhzLvrmHG zGG-Qz^zzg=wVY$OA}tlgKq5{bvXj0(mwk>!-A+lg*oTU6K#zE6Rd)^6A7FprmlKPX zK&kFWXH7J0E>4GUj@E4LH1EMF;IxM1OgB2vIvgzR)2!ISSi0U*!+XjGt{@#su~EfZ z!ejbX)9w4%qBj;iz%TwMZ-(&2z|jM5_x2y6@(YjF4N!O-;jPZsJ=hhk*EGGA6TxJf zGCXdRep&yTF!!yz(VuS@cB2Y3HYn^3tDkuEFV{XiQs^(PbuFw9l{H7(nV<4Q;CQoI zRC0=anF84s;EhK(KiEDF6#6Ima^BxPksx$IuOhyLmrzIpE{2ho%ZzUL z_a}gR7UYKNcJ!LRw(bgNfAi`J&#MD0N%lARm@R{b-M=Y@+qMZo+uMk;aCz-j9u`c_ zCPb2(?3retyowS8AE?q^aRq-~gxzkFpqU9>t?W@inJoVW;cdJ7 zS;K~R%AyvGMQ?l=kIw+eDLpmmj?PuCa6f57hbny9W22u&cbk{J!tpc9hF)?*MzF3Em{ntMKTGn{DqGRza z_)4%uofGM67R(PP2bXmfEBRP6X5II#YEz}a@ch&P{UlM&xnaC>+qj&poVRqnEOBY1 zemgnZ>1RCDIf;#dKNil?nlW<6{&SzWivtB&`Bhtcc&;fnki6{vU(pb~4>yIx=Q z%NO#54jr6cV}ES_d9l=euIZ-b+l6pV*b<+18(m6_3QN|ZnJ>zST{eGpITL;o&WjnC zJ|?G^x1q6NYA}E8gD^bQCZNVJSjE`X+u?IYl`DzfMeSD}bv(!G+P+bp%vY_@lT{ij zh8pMkG`(_YC%<}a^)WMWTBR8D_lRuh2qssy)ShHunSo^Zs%zFon{Bhb<8%!-Xqh&D zt?o=oHO$fP#W&aAm9+}KPQHSXPvBrS#vRpJU*>hx(Qa15uXvtqht0)5^{<|6>U z@GiuRkIldlpBh8HB+b8|?m`-n6#o(x7>yYU#PslH=k+g=euvq|B*#KEe3srrH=%#N z%XbBndUG-_JRumityjJ4Q>;r*((S0wWL(@laQQeau*zqRA{W5KR1(M27S@pN*!7ky$kzuNBAa?-Qx^YoN;q& z@x$(O+4nqI-6n34C!h!Q%Rf5oI29YZ&YOnmB090^rjkx~t?Yx*9?t?grhKqLuJ?WH zOxPh|DrEyqqFC4F`5r&P!P>;dxp=$xfFiO>%0+EX&}s4@_~mso^6GmaMugg;4pD25 zj?C1%qhrem0)zSlFWI)V6Dy;8^KUy{#J`?7PZ}G4_NjFay_WRg+XotFOI-Ke&c-|O z>qw?2T#VX4Z(nF_)Mp0|yqo5kUms`vF?~Lq^R#|0orI6`>nj9$L?75iF73vYP5$@l zv2(5_k^V+M%r?ifovt6A0*{D0MYhB++OtBN#w*QHlQqyge8%U7DyDX^G;}cNO;fr& zQGYW?DCYpUXbw&vLL4`gTpJ)C8g{AI+XQ5;C*IO^VQAM2=kMwbwYoerL+kJ%@48#;FDx@O^Rli*EL~({TL-9eQ$RnC{=dCNB5@4lMJdcYd)g8_vzM1n-Ec?;~U3uKF z$p8_8w(=*CUNP-@@1yTLjPsp^UBa}lc+=}ab7Nb0y?j<)rd9sXh3*&rk8eJKlbhbz zN3_Eoo_}c{FFGJ#7EDQ9uM~n_1^cY0jYYj31a4LI@%=qGva_;*RF5x3-Y33r3DF=$ zm-{9)v&$!0K@YDSbQO zwIY(&ePTa+E~(B=*eP(YAN?&UvlJ-m_r6U((k!~8{1dRRZmnx|5q)?k>{|x`<}$W> z-M6`-y5GoByGGB`{W^>0_AM6w1FMKZXrkrdNkpX?CzJbDFe4+bq@|-6du^YHqr`&) zFM598({lvu@6c}pFN&EOTbqe%QaYiLdde=W@VLF-H^2C9v)q}1i9Dho(b9wQ7(^xSVVZ*?TE>+q=;{J|(a2FbGLlhAqLQ)ztb@(V4%S&98a`h52do}_LBR1VT&ef@4OvP)!0%9*uI zI*bkpNY_lgN2l^Nuk4SjbgvQG5M(|biY6Dn*G>{x(fOB}?gEOl4yt|1bE=+e zBd5*ND^iGlv9f>iqh83Y}neORfpTAf=%}(81-s)vl!%^ySAMrR-LO1 zMzP)CsTFDas{7)>-S&RAV%FN(&E%!XpTG-OPp@IUi))hai}7eWaDRS$rVg`u(rmKa zqXYLYV6UMuM^)fpKL6lZScKS}oyF9Ioa{4(BJh*@1q-w{+2gNx`nq^{QiCX3>8w`AbhlILt+~GTBFC~Qj?HL2Y-MKCLRlQeF++vgTkB=}a zPUp0ZPx*9HoqbP(+aP{}=U`ZK{!}6w=3~lTZpi2!9AIyLWbf5NLluXoMHy*5?fAvM z7HXc=uk@~iKu|rmrz?-G^plAjvM(*_Ehp)zyplzQcwS#iST9hUBd@--y z@8ca_gZIo+abFoe^Xm9d#2WBjpiby$&CEC2&Cd$@lWXaUKNO2`7~n``umkK(730@d z@?bMp;e7gB96_>gO@03nx|KcmU=m(iAw3FU%5&ZReOPO?)1>5`cR?D7RAT=`1s=PT zeMkbr)kL;3Jt*mrOj zvXBOnh1)IH3Vo1VE}aV!KDuvR8KN6Oz5`6yt9Yb%s!NOPXul;e;ok#;TXt88{FDsw zVb9}=KEPJlSqtBX{dxGFlXi3-iUCu3y2EY&kBV4?-EgZ6+ah^zhbinR6fgNn`$r!P z*C$96hX3mrZ&aE_rNsVx9xY(N2S_8+C~iUBpcg#N8*Nmg@Y_F`BA6+;B4A+on9*1C zwCXd*8Sok3=QFEH?$N=NULh5+?@_ey1d14Wk5An+lzXw__a};~?E#CEjryI@eAh8O zS_!+A9G@+8xdPX`7w}Q9XuTHm=??VBchn}?_`!cNesXbi9kIz)-0_NrrG2d0+$(v# zw)6>rfDJ1n;3Iw5F(~9Z=~<@3b`R09qX#4yhAeHsUr!l*+bBWO4N1)>zhM@(M;k%0 zf}Kj{(%4+ah?`0{b))Id`*_QCec5}Pnh4IrA~pMP${p!TmF`oZKGX5{{XX7uXrBTv z=yLTmzCOW2hy!$_+K|BN8c=0Du_<^5z~}MbgDQNSpMRlinNX>qEgacAd0q}y)-{Jb z?IBm-DJu_Xl2bI{hn?&X@WWcCYxOO%c|GzWlm=jhCUT!+-wuYj``%Y1{ENxeQYsU2 zCx>fevKy!X$pgtu=$B?uz?!*=~quMcCiM%7dNd`+*|XNY<=`!?BAm)=cIMSnCq zg~3cOY5^cz%kE_ah9T_5xGz5}>7EVr-_Q=vw_E^&9|zvdXYcqC469+wkgU867qBz< zJ8qep*IgW`EDL`q^tI4O%63x9ec(msM^B%B;TMSjAkSf8`@Fv9{jU=Y?FWVD3WsN6 zt%?ULYfBInPLS=>#cNIJhj+;r?>TJp8l%o)5i+sBn)SwH$60QlQ6%iMBmRlAkvCPU z5(-+bkeFAL*VzWQtitZ0JE{BF`qY}8q z(uSwbbBj?5%lqUAn^Wf{(+#r7$9C{uIvCpNOK)UZ3K?XuvLr(4m7!ap8rbBxb^F}> zqS*1YY~Ut8ZJ9UW?<|w!N~q%Vqb`Tn8HIoA6xbZ|9uz=Syz{=3%mr~F7tKn3>cjKo zHG>DYsY2v`L=PML71|>_w7{xU_xT={bahXLB)$|*9;aSKCb=!wp-r3#DnR92Pvi39 zsXD#yxj*b(H$SAqw7JvJ_>NbZZUu1G9(C z6d7Ai2c_*fxfpBqS$l4Y*t=?L&65Iv6sf4*w?aqV24{3^iOd-{V9q&ReQp8BP_BiY zg8s%Z0!}?;&CuGgh!M773*%y!)ko`Q2dCo(r9k46fsncRrB87P_=#LnnkR`I}TpGxyfdy zVaCTXqgPN?2h*fmV{lej9x}bu)$ss5-8jdUjUNw04qk*&CvUb*AZ4i}_F6CxoZe zLDF>W*nKiK@_^MXb$T;d2OjOK;`VI~>RT^Zg_EF%@M#$5e{h<}EvNM1&2{0VMzieEhdi~sjG6`1fkK>qE8erf2*sCHVkx5U7i|9AEgR4hBeJwcgjHv z_B<}PQEW&y0vP8M*}88(i&1Q&Y03re^@GQXMwZR3#l@5_9y+|E}E7lY({ zD-oP6+H*kkCRS^As6TRlnwJfQD8N1ztSfkR4Fi-*bhv+HA!J*(hbmi?E}is6Ba(5m z+)~5K3prnR7nY)PtTWcb$@t$w1+!&h%}-??pG6nHS5d0%XTxMmwyZv!S0q--b z(w>eG-%W772{0JcW-oqpzmv>QOaJ@AH&y5?k6L|r(={BI4&Y})^^K2g0BvcV$M*t| zq@40eRA_&C@`WnVCQs)B>^4_5)amS%X2V2(mG|)h4IZ^NuFM%_LC3|_)9xAO!m@Dj znTh07qX5HeOX*z^_`;XzYJ~~Gs>!BECswIX{a6-%{R`+)y4~R@EYjI=nDPMgU+27l zob_8b;mQNO$seAeKDXLW2Dkw1n?G8I-Il}#?461Xv1!adqqT6jtKuNQr8qPk-i&w| z{KlT_g0+_7P6rwB_&i$UlNsJsp=*tv?f^1=$uMN_+=!DcUCH0UZYUr5nv?I$Y;i|^ z&mQg>i^Mz*aRqc|zz7A6!#wjePfuYEx{yU>O3kby+-J6jj1Dwa67#(nEw=JKfJSu( zD#9Mg?z`9s9(~6iKD1!t#w`1vV|fo@K7Gv-^SCtom`h;R8y7K>vgaykocA{~{|1#^ zN-$RIV0JMj7nE}MCl`lDt7MOR5O-<5=cbqN79ux<Yn57cKR3IiL*0=|YWc{I|#^u$XK-i>-9Y}>LHfxg+(w`yUNVf{VG3lkx9x9xJedQ%q(R@*Lh zCs_Un>FkiazCnJ0(oTSFYxokl7b8p|?89&gA)MIp{?BNu&j%0cyG>{4+pd{aye>O0 zC{xhgv+dbqmcmK}%)D!;g<1S#jzTPZnAwzL;a2m_L^&e1&f}F8aa6Cejj7@QQ%!@vHng(^FiEu@Y_wAl-u6Wg|?X~$#g1Dd-=A*hE zqck64;-}vCzt%Zrul+t^*=qu;*XMn%KWo^$i}wd>y)#~we>QcAC;WVMnj9WcR1x*$ zzO|1popaeWkrKmBx8e6{F4GK%}c)2LLGep!Hs0}bcl6!%2B2jyc# zWKyP1d=L+(LT66AUYs3~Z{#&mp+0lf^e#-1LSKRvau~0Wfxx_YC%|GhHssbMs4rFI z*F!9ukWuO8{1Y?>*QumP^-}pA8;(TV0mXZKF=4aRCJ(ejwdAD!IYEV!vECpz0F?9d z-fxBi9~m@!1toG_0N27uD~svJaXe$b8~H8TW1<7VHQu}`<()LCKvVJ*%8G!w?Dx&Z zc}grjLQ6a0A*0-*tIvvj#sY`QiR8GNYcM~F_LHLDQ-{t3+|0H zp?-xg@Q+ z+Q)mNR8^AYGADeVHga}hm?165j+cB70P4QOLZd$bIac@wC?(>-+6LQ{)9mQ!d@Yqw z$l;A4UU>2BK3KToNN}jlKeUFj6XepT&*!k%#<`F?`eqO>qV{yoaKR^lV`(YYZw>ZDXMNS zB>X7K8`d9X_-+F{qR#_L$r$#Ow(jMEm%4VA{i`LT%NrrQ)<%G(K+VK&rRya)hvuuR`v=FdR_q z=d&CaWdhCijVZ;aqT*2AxW+j5+F7S~@4BtHGcAG+c{|k?fT0(v6Y~x7gu4t`)FW5l zy-u1R72R`=OFTF;7Xx+D4*ka*i0Acl{D7DzUx7fmC+)QOM>Ogy7NLDFs~?e2`dq*D z=R1?Q;xFofHWLQnHG<(cu8Ruc^$dGmYR0;EhXf9W?-0D&snG)i?`UOMh|yYcP1})I z2$SK67P#yAcRt6HqIlmzhYP*(UdpaEI4*FkmguU4~k}QMB z^9PEkQ2p-G>dvh45wea`#f0yHDX3mA6`doG`qle$V1n055-@#Sb6c;PwmZWf3TWWeJbEWv<&o|?R_8I zs}+o~9d9Ijy#MhY_#*wD(W#r0tb_ z^)7V9Gk)f_u&#;DFvLz{{WKoo8%ZA^vLsKWlSX{l2cB zSs?QfK{pneXk~7EgAdD2`>CW0`_h3F4ZTlWmPh(lz<=vGA<^hM& zuRC=K&iU!ALQpOl=x(@IuO64N#7-w8N9CvUS!;c|6Q41Tt_8A^BG z?3@0DOEoBGO5^JEc4u(wm4$~7l%5K4z8rt)g_LN}oj!9!!o0i3?~SEjk<}W+!x)Bu z!tWIl+opyMVJw7|I>w1w@dDcm16GP346In%PP?t^%0zMWSP4M(*tUJc`@MxvZAYqz z#91KMG0{vrzM)%e4x{MIk``Z8#PM_ohA#~EUZR#R#d+&bBMMSZ%W@iBS}h7MB09)G9v;aH;0 zAH9y$DcZx{jG2O6D+6zHv-Z(NHm-1`a3B7mQf@!4#}qC~_2K@e8s3GepA@|w66*~r z_x}1{3o!8W-{-xr&72$P@WD>6SNgquq`|XKe2hKR{Fc5>tHxoWtA)Sa z?k|`N`q81Hz!IDnu0GBQ`xMYjF!@rzoV3GTy`ZfG?=Et9TP1o&1xm(z^WZZI?rH+X zi{VG4hqAD@7d;sIirK8%$CjAX^6#`hG3t${w3br_GcJ>i4}z^5?v=kw(E}S%HwfrUBuj;6z-^myouh-y;C;j(<_MZUR7xlcm-?Nm}iPHvF@6KeiC%_`Dw1Aa9>Y6U-Q-(@$e9e>g;M&-(F!_2_v?YrV(4DC-2zM`E+c#9){(0T>yjeNUAH$a>_*T z;dFDM*ow?1BT8kX+(Xbn^(_@LjFk62XQ^MWur8QB@!JhAB&-NQw4bvJ&bNmlr2h0} z3g67jN82)lf9{_Wash@?j)hmA9A(j%9F=4>j-b!SU<>c6Jo)<+5T^P4JJV zRi3anKfejFNWsHPvG0df{i>VFjhov9pE4RA{el03ytO6hWd02%5@h1W{r1Lw{kk0^ z%chjhD>=S2=VZL0;`Ke%UBOq@gL5Fly6AS?K8h>cVR}h6l*0$xI$Gu;m9IOnam3eUf$kEU_IGs;IpS{j14sq9HxBhZidKZ8`b8JjAFbR7d3dq@k#eB7@sNSyK;rFq+D5J8nREUgZQ6~$;=HtF=IBk0k5D#46+AA^>6 z)+eQ=2+)p!4b`=plER~Yc+-5o-&>ZwvY+Z(YNn_I6m^ynQ$71+6hvqgA`W{tNcicaAV1LtKBUSW zavI{);HGxWQRf|C?Lv?7U|SkSEWI(74EbYd6IBmgp1HPrbTiKB#_BceOCj#I7@%~6 z_Thu~>9vwd>-*im*XL1__s=q&)+BHutoEj=x?&Z-XG*|c|P59 z*E~P2ic}}Ti>t)S%=uJKrYL!d;8S3Pm9dBaUqdMIDIF!Wv z>BmtOP`|3wwYC62@p=Bx=&fIf8)nAACr83aX@GFh`A0wT2Xz@sP`JOMUz{lAXi0p% zFNK-|=JBYC>euVfDGM#D#V-%?7NT)Y80!{-VEX-daBM zcKh81jX^iewWUU%&pygmU{LIno^ruHh|}2;*zN0l^NiNIDPIFDd;7$6FUWd}yEC-& zDJK=|A-$gD3;hW|v^!|c*LHh>Ocv&Srm@SzE0~X{pVa^n60@Jz@nAfteDZPnj9%G1nCd~G9~Jhz)Eqr?L&`rfbf4q6KCcuV zZHGS^-3XCGE7)R;q!@S?PURXiBi!_l`|eOcP=_CEvG&af!)J3DthRl(FZoN`gFIO` zU~$9m3?*fLJ|po^u~)j@JX_?)`&lwaz?5bAkLR{OM^()B z@f0xtd{E|*mbAAI4Q^LdOwHFAr4Cjvod_v#C{X*dI!`&>DV z&r%GTbck5oHc>|U<~ZD9;&v`jlew%pO!lI5XyizVCU60V?7oQ*+G=_8JIvDb$mD(h zbY47)pk$_+ki_I(^~COuy5i|n!s9jre#~L?c3|AQQfBuCcS0uCE2+7witLW z{ghod@i!ebwLpE_n@gt=`;2*2-a4fI)GpYJ?hm!fKIp8;{<6oP^kqAT8`#Uuz7G7P zLyz;ODq5&J$9t$}+OzIP_Jjd;ZF+Jlr5eS5E`{%|95VB^_+AAR zBRoH3i=?RZA#M;V0=W=yXWlig)3>Fydfq2OSlIr7((z^dC87M=BZV=X5A$*8Cchgf ze1F%ivXtN^x-J@nGL6T>C$;zh(K*EF=i`w!bfkW;lnt-Bc9+QK{qy#+Zu@KaY4#^J zI595sS9*40m`+OTIVJI9X8f%Bi6FF2K<)H3{n#&^fep+fo=^~0jgw*@LF*%bK);|9 zK|6eAHtzQEKN$O}^;{nuYEGOeqO6`2W*Xj*w+m6i&-2`*$FT9xLw=IOJ%A`s2#+p6 zLA{_&xaed`DR#+Sj(1$4GG2#Kh;rBLWPW}DU~uP0Z8dvTa`9yP`>4m_2+lAAfvo}az`u&t&y!u>s zD+>7X>l0PxT_PW4FKWtqhLwO{1D9|Q`msB}V-cNsFnRt)4jScNfAV0O4!Fp=4Jmpb zPJ-y4Y>A?TM&pf_LIPUn*eWY}RDvGP)ZAT3 zWj;s|o)*hKHj1>7Uf$_(d5iNA3+)!}Yed4>)%-~p@KW&|Ory^*L)JhVP#;ji{Lba> zKPxVwd4?cs$oa}&sw2%I$Mf}M*GDT>b~jdeB)fVJhQ&o!My=_6c?^%i_%>v+J1)LS zRl!f_-iP<|FemkAIvnYncG#3PRh`TuE?i4K$K#e4*EuJECC`x-ichjiGjKGEm1po! z$g`hCuvgd`qNPE+qQ=BTk`Hc6+`^Kl?;o=higA;-y;I|0%b8P7A9id}sB>(&ul`&6 zFT^E3N;*Ex&05C_fRy?>4gB-N9G)Tp_3Zt6IQ#%5=&_)QSJ)MZ?qs#*0j`P#?$3Qh zD&|> z-<2mml(f0iU9F+qojI>UesLFNfi21(gWBKgy_LmfQ^z#@`J#WU=EzL&QZZ#rduX`i zZcXH-rA8CNN@lZKe;z+3nm#aDYxd{o#(L@gP#e8ovMRo~5vaS&VI$qrP*@O4a<^TP zA>I}Xr#0yb)jZG1`p8&Hq^&fJP8w1^``XUG=cp84-8m%Q=LnP{-itqz&- z>%DF~ zllA-3desZPVg*I2HP-cP)=hxNLD-_AyO~j6l4?Ja^z$A|M!e~){p5)S1@r@iOBwSq z+Okl7m*GP3q=Or9ufB8SQ6&g2<`n62Czj@dQk$9YMLFwRFvZoMTjy9@8%i3eHwmUN zTv5l|u9gBN4 zPP}n8I`4L(Pp3zKqfVtMMA0qH-3kmSSwo+nTvW8yXonZnHXmHCFnG@OyQ6!>(a(Q- zM)>Lui{9rwb!Ldk60HCV<9%$ceD+7b%82@Yf=O4+-wX3f?C1@V5vyaWUN+Es{AoTY zkaFyA<%O^T0aOIuvW9+t;J{0kWn7O-JGE5g$>K#5xUkHEjnp(ivS@sUk9vc^!a3t( z70I5CFXJBa7akb2TJ>?+hw%v_ka%Rvhy-*xStofnrV**^gfW~QGT*=Q>&SWW3L5i{ zMc%V!V&o={_I|nrO^h6`eeG3%-EX5BSsubEMk}2qC9mimQF?2?c7i=={_R#6-}@XM zjO1{A2hSBfk&v2G#Kn!A@G*taS@Ng`U4?@raRBa+1=-GI)8-U`eQ>Kv^dAh=3qxuj z#nK?a{BVmlw(0q(sA+EBlcF6z{;BpF-ESYsS-yn0moXk)jX8)Le!+D+>{p~1@y9sD zrH4ZGFRU^5_9|c2NDvK~{84E35oC+2>AUht78^Y1aAC?Bz4e^tNu!X77 zDa|tEywIK=|MF1l9{PiUF({jCH}Nb(IW*V5)1Jzn)Eu^|hWKm*$EZK>1Vp_#z;mu- zudZoR{wK<)%^ykpWIg+Zi$nvugQb0+XIZ~H{?}lGgngO=!ShI(3p6U2Ox~LlwBiNk zbz|&`aI8ol(HAiTUTx;}0UX-loG!@xyuPo`R(|QS;!ZXdHT8JDAF83fqoMSN4x}l)R7eEAi5%rDzt&cY1Ipore?GHCA4}+g}id{0emUyCxs_A)S|;pQQOP! z0DK)T)roI+?&pK~Sj-3h8<7}7tp9yDwFu3j-FyH`p3Uiy(hP6n;%o`Zdrvg=}?QUB-DeuN5=jq`Cj|zcEF$$XRai z^+}1G=?QE-^=T_79d&1%!8&US)oZXxf8xRw7Y5?9;!DXI+8vQ!8YH zz8n#a@LVpY*EhBl%(WfIoBT*P?!1p!4=jzp`1U+1owP4&YZ*hIvFAVFmh)3*de3p8 zZ;eUDlOp+yF~j!k1drkr?$I2~1^pD6M}R(|4XjAUu)YD={erIo41(B@SM@nO-Ub>@ z+*|3KkJa=8VvdKz9Ngd7~-tWAh zXDF=GzP{w9urz&=Ng6EsR`g#MoVE-ebD4aPs$4d%IUY)X!p@(?7d*L$V;fYRG2W-42^cb9!7P;P5N_w@ELzyy_9R8>oe!otqs-u29C zJeKqpbI#^`sGvV^iZR2TGR&@#Wt^la43D95?y*@_e%bQ-j;kPb=|?-r4ia@r0t2(1 zdpT7s><`q0TTX}B>H3N)a+-gmfvp)*iN(z#ya^EQXV7+K*)(^8&&3KpEa4Up1*!r!b-O7#;>&NYW_~Gc6 zfx9V+&{i4>9F(6GRFrc+uGjC1j;-i@zwEyXC7@)PHdw?I<&UG?PbHq(>vde%nB0hvD_(@);8%}|PhOT^e;9tIP3<~L(p_A9<8?7bj9?eI>54%P}VZ{B16{35mB} z$Gh{w(+cuJ)t_!eTr&LheSc;6u$+|SMY^!FA zs%z%E49C&$#X*ZZeYPe6uF!!glk{8!XhGU!L?k+aw6ds#lZx~s?w011$FTLbYHLDTC)-jO&}^}YawFBSbGNoh>e_dSEV@iRuU+;$> zlb?tsm-_5v(;a8tO)I*?MuK@e0|5Xz%zg;>b<$4^xjR8~Xxld)GVUL}n)iqICHu`i zpOByKHn*|%H9<}`x__P=E~Ap$9o=-|9S({wIKe%Chog4da}7w*-gc~^#)}c#I7163 zM!U4W{&}We`!SQcfCfH(b=gqOj_JX`z+`_@@O@-^-z%^*ufS54Z^>p%SL_p&q!V}; z)=lDGV)DFuUl~RuGFu|eTO!4zK5k5Wuj4(y$ntE?EnZFMo4{P0gAyD-n!QF(ZLDr! zD)e<+TQY=a%n5cLy`jB?d2g%2s$A-gX1SBGDrIJEl2cPSWI!jMicE1>rH1sPOiV}`krBIDUzgQvAHpFhzo6zN1kSuP*m`Sb)ohm|K|^AEKPx6#yH?9wy>)`n1S zg~9cVsos;v6Z~W6LRsE9D{1Hr`XuEAs^t0Vyvut3%>3|%jI(#vfXiwVyqoC|Z8`5~5*OhWqrd*NA)J`>E5FwKQ_pZq zOUOyFP&wMi=-Ipg113tv5OE_)%|4RLiUn(qXNVd=m^0HId>FO_=8`aMHz!JO{`z_f zO|TVD+0|<-lbb!2e#QcDc<&>;kzt#=}XMo{CyU&dnaFnDfw&W8F zKG}6sQk|g5wVQlCDVVa3AzC zHBHi=zCA5)*?jk?k0~Bs;(v>WpD6ZZQR~vZ_;8Y;z4YkU+e!WSpvoFB# zP>4dJK7@6g_qfs-iVM0Ki$-}S6oFQklPJI5 zA1DUSIf|$Iawnn{Cf>h&_$t9u*HIAxkvD%xGX2)yvN4#^Q6j^o$lb}S3v1wZhLlp|2&oH6f91UNJ;wfQkuQU5XGZvHglC2 zONp4~1w>KoKW&eii_lgrXJrn>7}J%M#zc?GzQzQc^Ir_ac87dULpxE3ZsPU-@vy*L3lQ=f{gZf3#ln^_KH&=}6!(=~PXId$#EK zZN=|#mh04dlLBn2vIOm9&0~gpRQ=+8cKuSx`mz8xJoI^?vfsKTtKh{KkHf58erf@1 zI%MFnbsV4c*}9Sfef1dU^|YSj_T*0sn|9IH>(+ zf#X?d|E5IL&s6v!xe(wE4&1KVDs>**(u18!q?CrFQXQuwys*Z1blKLDBwFTEXIjwD?7ukf8(t?Gx6JooX&a-!)KI_x*n~a0tZWi*hK(eE{OE2+wi$9JL-LTD*Aru9F8-X!rS(yFvZcq=lx+Pz$N4;fYZ+@ z(luusj_ZLyrSXZN+E=;H#h1hQeKNh{O!=1syU3%uUsC$@%98J>A|Uri94{-=5VH|Z z^hXVj1G*`x`@bIiUHPIPOZSd{I=@Rhhk3NeSK1!16Zy2}$1@mr*OPPYRqmwh7xVdg zVcU<0J`SXz2wARQwjW61__B-VuNTe&_<+H_EK(h>LY596N6P!&$0Mdv*hzlBE#hxK zCeK=IAt}UfgMIUz^C9u<2;?f+hiz0eXkCSccTNnMdggXMSgoivChqjLj9!ts+lis*q4~R zv4;2|cPgY$VH)ov-qle)qgqh4QBuVv9>>-!_m#)zfBkU-PebjookmAXVBE{bmfkU1 z)+YUB2rv8iX)E~LZc<^kNV!>@0nH8@m^kKm%{5fjbQ$JRdo<<8{0IL_SYK;DE+eSq z(JC`wHaOZfQjmM>M3DH4@)e=CB47Iy;gfXAe_aapy;yvHH( ziIV(MeZkqZY7wZQ;tHBbZ=sh;z5#C4&-F1dk~2NKAeG9Qb13!`LL2tXhNY+Wzmgt8 z5TLqPq_P*ws1n*Y^=-|h|=v#ij|%F6sLG_%BOleCi$$GzIM%S8gZ#l#$7FC z4!+j=nNPlFZ6m;gI*G>n{XO;XbU@+YdS-|Nby)pAlAVd)K;w)ZO=y&k!HdiTvy{TY z)*Y|-g#!}@m;_Fx_nq`_b-y_GTP#lB44=t)zW?1w=z+pVC1TQu&`-Q)VLtou`Yg~? z`Tpf|Hr>{>%O^Sj_6grdnEHivgB;_J8voIya&$5$Tu9tU+AZV4<=G+{l~Vdpt8i$) z1pr`gzb@j4I|QOj(=Cxu<%E0ff7RZF^cIFmJfeH;xbnidl&=qg>qJ|_OroyKXs$1` zhj+Qba{Oz#L8&1=1oUqgsuZ9PCA5tto8f)E&rsK&NTYWtRUb@b$R}@BOP2xr_v#$( z008*CDlB?xE4$sx?_}z1@v;rnvfWE}M=DVQceT$bTbP?YXTQfIpm~uHo#Kz_0p|`~ zy>E}yK8dg3rUU;ve=YC(;~>oL*2?mkJEj6hIYNkxSNI2kJsPs4bSg5oTEba z34Gi!gkK^?xg0Nt3-gV>PV2s8vEhw;#YcZAx63zRvYDjxUpv&xPj@aqD_)ovv1-im zqMnoQdek0N)4@p%E9DP5Bf{$j6;$096F1(kec#on#wp`|bP*q-9r$XupYew;@d!?+ z9mVa}F79iIJ2ig!rBGK-T?}Cq=owM{;dP3p3;l2;Vy6msOG!p36#T`w!VEd>+a)608NL-dPChW`=#gi z!4v=9MpkYMa{yl~vNmj@?VEiNh)4T-M#F^4c1GNvV`lr!8P7|n<2|2>yMms@QemV_ zhu_NVwQA3qvcMROj_#A^V?O|1~6Z>uolzEIIYXLe4y>n`W`^WUg=Rw4MAao z8QV+TBqSVq$IhKbe}#??UK>4s-<1A2Du;DnvN@;s{zfWvW(9RfVaQ!~pLL-swgU-j zkJ6zV!>Em4?&rNTNxRWvA`Vyidt~-+roxJ&KO9Ko7P7ZIS0&l%mwb}iH`=rWY(SIj zbkf4Sz!F@BGS$S5tG%f>RaZ8S(wiBD(GR&1iR^A?m`CoI1t|*$IMQxRv?kE+*0yHK zDo^r;pW~BK^LxL#@iwsrECMp7#pcfpI)-BTKtT{`TzEl&N!t@ubDg{(%nOOLODsR% z%uc52-a@?m2fKzBNa>x|!s8v_$2alN>GC9YygK+(w0}&a^5NGTgpiPWTYc`V-)%{) z^Br1flONmc&B`V4HTTP9UsEGX+Dx*t*7L#qYDe-Ov(5}->Z2$a!s3+#6+`}H@xRmX zFDjoTelMYE`^*N(%>K1Y9;$nT{r%pCtCw$7jRd>gziGB1&8nlPX^&q*7ZzcI6yO!a z0ArBfMLzgwJm+q=25eEN1@3kA7Wes1ga#%%-z24EYa>aayI2M9W=znx27@c_L*`zX zd9RG@t1sB+sm1wA#i*pct5a(Xq}y~=gH#2h99=$- zD&+5rm_y`g2yVY~@hrRFeP}`(bOoy0a|7@UpFW$k9-@S}X9$A)7d;+x|98m(wdqm&Sdt-%7q}SVi*T|pEZ`J!h zh~jV=>m6Jr!GZHr&`^zPMR*^S=OX0FE66TCKfIH$Npm0T!-)?IEMb>c+vi|U7@WBQ z%$~V@jhHGy9Krh>@E-{B-8h8JJs9Asa=Es!>wJv@@p+JB`7+>;ZpyEo5YJ13M(wF%%x_z}gsMsyC_nfz~$5C*rPun}^ z9%TURS#cjSI5cnFP?P-nW>ZqbVsoe?oG&LX-0%9#x<&bZff_klDu8&s1$)wp;9-}r zydkOEr|usNqKIigd86a+j?;Cg9BT@|DAxW}boQ_mi9 zCa@cn>Z?}0PIMPH&ijHA73abNtbHCiG&t8P2)OR+Ab|13$g3Y7#_1HvpkeKo%X%|( z#>6*4net}p>-)fxlWXk3c!;iLwEk7s@HF91JA9av3WTVze>42k3i)*)UGM~FC=I`k zNl)X6O5UGijmER5b%#g8QtgA~{88yNf$+>-t(e>6mnzRh&#MVkBk_DLntc|CkIsO; z?iHKFSij0d&CK*2N>dz!_6QKeAcicb=)H*7JBDb|Fnx>4!Th2$Q6)Ynl}=bN{#i=-CdTE+ zug!KFXW^Qq-~Qg7Qp@-3pK5SH`0O$IDDY!rl_os$^iAOr{~3*a+S4@J`Lxhr+p_Ol ziM^RIglFe6>4ecO>+bU5;WmV1?;^N*T}0U41R+vc?<6;Jz^|pmaGz$Hx%!3C1?TO} zGgkW2iS_WESUzW$(nby#lnpu#Q`zkxo`h|M{JeajVZ7kr{`-NsOGh_FLAT-bxR0+J z{05@+^%f*7xwId&+i=L*N8Kw?^q?AVIYOXKe_XX59*K`;WT_or{2a`Ft zRZhhH@ER2D$1GE0cojGM=;{y52dsX+*)qF46jFFWkL%}CW5kY3yyZzp9zIfM&pdAW(>UBSvTPrfe^HrB^f8k5 zz)>W0%P_ZOd-c=dzSrI*L(BiZ4*SOkQZ8BN@7f2jY>u`QzMOh%r@nPFz+e{iY;5thiDKr3AMQ27WFyNus$zxEy~Ow~?PB5O$9gE&Ivz zerL}dd(demI+oRIt9QOc_Q9$M^&$Ru8Lsd(DdgBAP?xS|8df1jn4V8i?&6uuA-7M;Y3Z^^0bkiOij`>1J%K&k)Vn>x zzwSw4c_{3heUxz6CDYnYkiPhX#2iE}=kKS8K@NJXA5ea(j4$c1WNzkv5vq)I^s(QL zzx=INd#rO%5o1V9ZIdMk&CNcCc(Wz&xJ$KDo>YhhW0`Ei08hLQ59N*Zc*N-gSzj`i zm^*EI?29zfu+e4KW|sJWA0D2t&f3tpgX$uj{GdP(F(!ytLhj(RT|^ML@cM@6f4aqq zn(w17-bk2O*2h3c#xP6{QO(ojh;w}@f=Zv@#fyqA?Wp>i!@((FkJ_Lh7^MvzM6zG_ zZ`6)nGj4840~z)4%le~UiO#V+%hCa!!>hvF%E+&aKwVpinq%YKoQ?bQEdlza#}CAf z)(3VLc!LrZwL|o@kHfoN=UzT>shP7G{Gp!Guf)Ko?NOhA=8SkeUX(Wi^F8hbhqj5S zJ|udZe^n#}$AC#q-VbrQ0;h#ns3z$Ftc%}71esFCO!7(6?q}sUUkaaWol9C*OuU@= zxbV*zNRoG<4<&6>iDOpX<2Z*=Sbflg)qxhC#;mR}cfV~9o>)&`cMqzy@{1J2dUxk> z8ZX-Co4mJiAYf&omT=Wfen2e3YURS-KJ74^xcX3j*^jZ`lIEQf4UndnOmgI1eAho%yy>OD>AE`!p0r9DD8-(3X1a6cZg6+A_`^~Wdf@%LT$ z{WSC0mlKiEQ(|ap%R6ZNci+-k>wm^7k|^et z#%-gadJ{e4yY&fgquT7*qElhuRtjd{G0sIw9MI}OAq zT(Nk6oLcY08r=%QENn#{Z|?8n)iXZtHYl< z_F@p!+g|i`f&-fH$CtPt*>k|5dpzHYXU7%fi<3UXz!fkQOku#-vhek>VMV|(`J$Jb z-jW9d_L^AsmoEIA5_kAk>RmS-78e1&5qfO$wI9l!VZc?$p}R$Iwgl>$lLo_JD97;+Qrf^1`oH(@$G#`1j-uR0LVR? zjbGW%?@hK)Ym&Vp9vt4q5F!k{<`%!wgKiI-G@h|(=NY*}WhK-nnruwq^k~93SPx)W zt4QamzR-jDnPO{XMJWb-7}w`_1Vi$@FEIjXUr&3dyt$Cn@nIhpbVCLb);BI-!0)b% zW{{LXXJ7R1<5%4-{KYn2`2kIS$}RRB^yp)Kt5woVCeHD1TbJi+Ki)5RC|s->Mzy{F z_Aaf)0MhO}C{&mHpw*0{MXnRAp^8f0U=j?gkr_i9Y0bFMNm@TKLy2m7E)L%}^UCP4 zOkd0|dCw1YT29dN*$qJX5E4T=_4zzbVX+<8v(Fy3r>5|$V>y(Q2#T;H$o*M4SMmH3 z4-q_{wg&(dZ}ABGJpJ-Bn~arp-06_EyT?2P8j4tE(FDN;RppA$_aLS^>U{cTCmXBh zf;s2!0wrGDO4>HPdFd0z+mzqzgqK3!i7%FPcAgQYbu;iEadb7Y+DSoBr?PvWe)Jzr zrd#hljdcKnRsg3EJ8$eyev<}@sQ4hP=7_l=Rb1Qg3D3P{R;tghvnzg^YyNy3%F{Oo z#x0{1irixg`O>X*c8Qx>qALnE$xPE*%iGu|y@8qzI#+#PH#kvIb-W!Z3(j)DhDeuv zLcBu__4VH$DXk53GpS>GM@)rfhxS1%a%5YEKx zdua#UuvlW#P5+28<5F4zd%njJXh?lbaUtsW8^e}t!|#JQ2?8li8EtK?y@gK|xy$D5 z^cm&@WNqmrIk%7En45HPJk_ccU*Y*){JZ!;r=_NQSQvykahJ9)9bN4(w&*xv zviHr&3y#}BPiymi?BDOq5=M@pp+Y^CN$D||FF*80ZUPhh;FI}VUe;_`WblAI^5Or+ zaEywx;L^XBcrs_ZS;2m$ExZkNf2o^%i|zg@82qK*ZeGp76J$hRiYBI&5Rvvi4P9YU zWGk1KdVUX~^p)2WsHE)dcxz2r9zGNXJ{YD3qwV6plrGPZh!{ZUepm>S2!}K@N}U1| z+V)@8p;w5S(DcK$s4jf0VNb7iB?fw3JwjIgEJoGJYI^WqzS-#>?4r;7N3{Rv%TH!K zGeP}KD7|ucUpw!+pTC0p?T0{pP{D8E@Ar|9g8}tJDSo9^|6=#h4kt*h*-`FQ`m#T}JZghu8xiRG?Oa44hMC)&owBTCi~RCVr}Fna>&QhwDe>jy{@Vi? zUu&TOBrd6zBSv@X4DH0RvaMLp-K0-86YHr9}4nEeM|OccHR)OMlm& zPvw%IJGtB3ifb$iFSr`QN=H8a=2)r^-c`%cM#u;s0~2hy zotqo^a>&Q=d}-Yx6o~Qz(e;zZ4hdJC)jp_%vn~P@*U(z~A=uaN)GLQ$^P+uW*vH5! zra>6r6BbMkM4byRKjB=<;3;4w3p{B~K^Uc*sq2hIg>EkwjCLgD5$(aNK zhPMZ*ZTas5__ssw4$*Ufm>(A8QJkf^G2~a|jiJg)R5&qVX9lt%2S6>Cc9VU4Ty4h1 zlRm@`k7}9wKreMr-zV-qE-AHpMKYEtpcQ|{ zj(}YKvnO@|)(kax^b2S zAqi1dnU_6+b1Z#(V!hG(rT)P~+yD`Ev1`` zm55Kh4+C>u)Xy+pT`<8(VE(xOFT84|8!>mT4yv1G4*u>Fmwppj>SOpB5=(r#5B?yo zdVcCajduza^^Zu1l3iw6lRcmI64`$`O(z=3#Bp{?VQR6yg$URfYLH}@Eb zN;V?Ja)w(D-*!A-`oe?Yxx8AFm*)-G|LPn(OgKxaq>s%3zJ#Gf5}VVoPv?v`)zvW#;Y8T3 z6K+H;Jf6P6a6oFY$PyP29M(6=qG0-RZYA#W5(8LZ9`|DiQnQsMyql2*6vNJu6Oznk z-e(Zj1~BmcaoE^`z8|BX^3k%J z`#PuTqxzEXMY0-@UKDsh>tAx#Zw-8snp|@M(-C%}~hMgX2kV!(ht2 zf|6O0Q=t*sDf<329NoSNJ!tXTZ4=pAj=q5BHW44*<~BXr@xzrYwYf`ng_A{)WX!QiZw@l?G2-JuR72d@*Z zbX3pXdLsJrN46wk2Q@~w$Nf-v_A%rj=AqL&_)Q=91iFuXj4qphm>~ydU5>I!r36k< z9bb1v$5FBrx_40g+~XQ$4}a*@^7g2!>8|#*hW^FA-s7$9zOmYWtMi(vpg?_h>gkw= zJhHl8axB;7di|2iv0)BgAu(kh;T^6+TT<=aC5~KnedOG8e1kuB+;W2u>JM@t>At`G zQ{uYOm@%3FaU1OvqQ5H@6L`!_`Fa0DXSzW?uh$1J0h+^5S$-4O(7GbcA-UD_S=GHR zz$~Y(&3mXQ5_&5FM#Z<&-u+c}epG#PpR0Kp=f;~swtMe`*f_V#9tqV%i7AZHC2B<# z3*PH^(>hC|ZuqVUkEM|Czvq-%Pp#ip)@11W^46%<4q;tlR_&2+%jOrtdknc@7){{W z>H()%c76A*=)t^eKg`N=zX8mY5#6qFy;D%X(^!_019zQN?TkQOqC8{Te(HA$?i*&7 z3y7tsMUnx-8*qv)2DI9DhoavdH$A!zZ4>3fA;zB3!_c`wQOYwLffBc2IYHkF?v#z| zT`{YJ{k3oUuh>IM?Y-@(p$Ln?pRlR6Ti;6cJF@M?{p~j+&>kc>9?l~v&4_OmeckWf zA`z@Pg<%Wz$;yUr8<*0;D?6)-LnisFZ)Kc8bmBma2?C%;47t>WM>GmsC{c_7(}r zBd~}%QXW%0U6t=;yiG`=u8_+qcXW0nhqfVwfEXvUDyXsv`|y;P@Sj14(Y7tZcKctP zfzoXZ^9v;I@4tF6O{$0M7ntFs+rw$DM@ksit}}1nL?p1DoFMBF_Yh4QQe4+XYKx}(>)wrZhcmiSch;iY{1^Yd#{X3?|ixh~F=&rexWN)pg7$736l zEIhEUH1EAqNSkjjxzi@f=mXzohXOv~S&pWdJF~37m!bDRWO?pEzc26%@$fMTgo)bg zxw)5pm6ZXVQkyvt+6s&gb^iRpbqCt6-#4bk7NWMXgS+1g;jo{jj~ctt5$1!^fSjyh zkKo|Yt^fMoZoh=rYRTfJ?f}G`ke^+ZHH#1n}l#(s7Ny=l0>a)bxp9OW6ILS z<&GBPm;G~wS7*6=si_Utj^2|I-;|F^y&qt|2pn)ZN)AOz-{xtalW9<|pX&)6PkTD2 zcX%&Am%QKV{Y=g1l*7iHXRk;yZah+#VBje|8I5-;i65OuHEtUOCc0bih;%qvMicf+ zYSZZqF<3|*JMz{&66Omm%~PV|i;%vYp^Hp%pa%CqPe&W5<&9dEqt+?$#J$El#_vQ3 zD(*W>*QN);FJ)PWnGg6NH9C2Y?>XC?Nry-wh(?PaECzYz9q4^PQD=C-#5HVP7RDdN z1AaE%TK(Aa`ow5gGuQ7_4;0Bo>SYPk4@HFfNKtoD4mE1zijsv zfN(B;wvF0e!51)h!6x!PZAHxGt(+u_^6&Zgu)l|g4gp%71+-0Fk3S2> zLEXa=!}qPP_7`YS1OXGi$1aEJK{$t7*^|oC0KB{4zWLqk`Qu5$;-V3U$LWeXMpeZ` zluOnE&q`NRlBKwx!cJ{`x%IHTYKib*A$HOBj~%x5+CIKbne_9EnMM|t1AI4$R+O(D zpNR5%3j(cso<6klhQ|B%!HWvx2;j-5T#NIeO0QX=TIMb23`mgs{Uamg6IuT{R{MD$ zzs0%#rzFu*LM;{5ZTv;>^5^s=H7~{W0*-A)X7iL;jx-x_mtrB zA+}We8keYCROMaJZffc}pmwtHSkB(fFZ)k)KDRN;*7M4$F4_j9^dyYGR&~%UWgLZ5 zgMFaQZti;?aXUCjWc6F3Mx^vi%tPl1h}Vw?Vgk^`eI~fg^LomXxO#BU>w9m~)Rq{! znC3NIDXbZ_@2od6T6`mQpRUsqAaotsN{RlyU>`R7xc&SM4I_ND;f|J~pD}-Gk~G$J zQz-`A%-I4y23@014+zPRnQ5G)&ALvT=9fC}!RfX8b>H8db=&1J-MU^?5`v>LtT1?l zs2-2@al5Y-;kIaOb-zxJYwxnxLmfC>$vefV=^f|WB=V%Z2)v(^d4MS9sYSmZ z9y&Nq`+Uj=PNC^{nSUoy5O*OvtdjA;VLXp64TdKCJ@I@&+A})rp)1Lr+7YDb{QQ1j ze2Gr3aA_ZOK$D&F>K+hkDc%Uk1msAged8|s+;9c>b06pO zH!*_)U>_cSh=f4E8%4EKg#shTD96SH`ndY<@ z#}g8g%GdCY!~Zna%_Xcjc&*8mbW(TnnUh@r7--C z^*F+arG(%RI=^;xzL%c$@Z5@Y)fths2lV1)Q`>~IqQnp{^LKK00T;Xz%HY*@!x7(_B$@9(A2bsEb%eb%8N;2KiC*E?_>6b-jVbS_qE1+`czb)x*Z-5 zht+PW)UPVG1+x#vb>8<0!^96A?a60JfLum}p1^=Us_QjNPIIyt;Sst~%PkSOkh6Q0 z`Qlv*GjC3IYXb^vE;g=uNfBOaqE({i{T?uBK8qL8A04n_KS5-LPuJ!gbm^EU7%rXD z?S(5uJ7tmnA==ydJW8Y}%KdBPz?;hBke$83;i0Z>U^BjtPQVe*%Kaxlr|1_=n#}zy zN1wFwa#>yalO%(W5aPbp+I|G1*G{(eSX2rYqJ9S7&VMe36OUOEL9>Jj4z1b8Vfs8(<*I}y zRcBMbznhco+?m&peO~X!YaQI`!v)bh9St*U_{#IhzurjkrDflC&wy-BjvmP}cUC@& z4xK|P$ILPxbr$U|_r_LIrtsUV5wr7~`y_+S<_|S&u=@GIgfGqHx1JyD+3B8seDpa8&4sey zeg`u$-!M`iVDdE--t&dlKy)8|-}QkO2(9YqSq@O~tM!9v@@CUQf^NQvYTuo?KC5Lz zveYGJx*?v!h64DTJbs3zx-}Q%k>NqnOXb%9tjy% zUlPs-QH%HCV8C|vZ9iPnIFwzjg}K!or}E8VEdGg(z~U+PDsT;>U6>T4&uN|uRQdEj4Wbl?&y z_(}1)Wh6OyS{!lU;zr8#k?hk4{z03mJoW2#!dN3UZ2k|iFoi<-tn>5_9Da$G>K$yYeJ;k|L8GW%dx>y|CuS$p3d zEuw)}NWL}!%LmCipAW$m9zVwcR-s%P@+d)r4z3rKCN&VhG_LADFp`%^WxFyAH`wQN zwaHh!Jzg4|l||wg31bdMYI(!Gp#e7Nr{u9F&RIJm{k0E%`$^n`R>X7X#U`^eWq_r1 zYshPVWA-Sf!<~p97iN4RcTKn5!`sssZ=!G6{dl7BztWC}L-X(rd?NI2^}eH@ouP!% zEBm75kGc`HZ?weFrMToJF@)(AH&2rp)y$)I8G`$f={~OE0l@9g<3A2naW-gxp zi41AEG0mGpE6d{+u-;o+`}fz~&q~bN^@Twp4w$5K9v=2FK>j5Ieq>yb)ouX>W`mY6 z++Lt^3^zRSq4^}~h4l>lhEKkIE0CiygkB80HGTm5{XoA1e$xtu$q zXWu#bX}3y5w}-*Vo?16{9`QT|=j6buoY?~l9nibvc#4l0^Va~uRg#XBVa$f}4faRRc^F}xyPWsD;KSz3 zb2l3I>s+1p%c8m|VNl7%4Um+Eu1YM{Px&B8cG^oFgyIw!DH7DXhLk&eqdu4MvQgP- zJy%lPDObnD6}U%7uZM@8w-vG6TEF?}=$7kkb&Zlk3D+25b*TunEkOqkj#Um{rDeNt z-kM&*`)&z`foo!4QgQL`J<{8^l$p0pR;p`B7sct|qOzO6l1CCh3y*d_rRt-b`uBPU zS313AEdT)BU8olgRbH57qOs(dNLdYz^4L7wrEqr$sZH1G|wl2pj9u1E1N_W4|d61#?ZO^dl%)qM4{vlQVxdFLb!Uit==-$dbI!*-1uwA$HYB zVla5vskEt5Ej@{S{}SDJ_<;wp0wn-mc=A=_ec^F1KQ3~4;WYMukp>jgM4#@T(jnn~ z&M)>Sq0|N{dg?YpOKE;gho?S`;Rq^mW(kTf5!YDmZS~Jbu)XamyRZP{TuKq8QB;78 z$Mff__smwJe4D0(9DY@!+t!_U49&qcl+czlc+lGE!r-$V;TUND`XcC%sDSIvVvocj z3`j0HRQ_krfAU(v+j0H2jE&f+J9|QN)9-nzg-#$VIzV77q}_$UmdFCxdOs2@Jfv=k ziilj|t@zLlmZg@D$$t#{5cs<~K6)MNgwEoW{9?}6s$k=I_N%|2weLw@PWh-owX$wa z`+@>s&6lFWcl+3*fVXaud+p$#by%F*Oy$=JFeyRJPkuRJK5O(f#aSqof!mjB7#XAm zi~4(;BO5l_vx*1z%XWCGLiO9CX>=ci3*<-9D=?&|t>aOIJ9TbLuV9)ZY;7NDLWNPW z--E0fd?ATZRXwd9FnB&Z{~P_T*_U|jZ<;-+>iJ?*CT8fczI$t6J3;m_1-^!y=9=6# zZGQEz(tJ*r@*zs0u<7RyXVJ)sZ(L9I_kXJ^X*=97cf8ND_v@jug{nr9tD1S7qv6bc zh6{|i&SlXi4CCJ@7m+d}h_3;r>nq0033rMViRsN(3-9Em5*H|gxv9QPI^9Q7l6*{x z^4s&8F(l=>Z(Nkc!`kNUT5WSl*~Yd%S`_!N$ca{fUmAzH)ti|B4)B7OLv9 zWTKfyiWEAe{=c-YS^kOSpu9r8T>m3IdKO!mc}OGGQ0ZKC7fe5PB{%VlDEpUk!^w1SHK!IZz- z-Aoty&SbhO#S-_auqE-PTt)R*dnd&h*7{ev6d?p}v1)^cLv zEc<;XtA$cM8(a7M$U2Pd38`EJnx)6Sd(7w4p^JIg5mKD&!h9q=99rpLSAf;*Fwdy? z%)#>feZIfngS4*E|J@X)*2{ZN=n1nfYv%`ay!+c|w}lj;zMxBHzG4vtaF=`XJD4^D zgL4$r;1SC}+;@8pMXne~kI>|_o?ZH#+GOGq#^-mX8Q}=0Zd}S2VnxTC3$7D3k74u@ zBETQ6y>_9p*f4A_ z3C`+E*;WGmL7y}3LO)ai(Sk03qLVC3=vH`@y+GCMg}nu{d%PU|o_QuxV5Y5cm& zxHT=IP588RHPPzZ*Wuh9hD%)DJm0cMUgAO0XsxtU7!&D zXoeXbL`U*250XE6hwkDF{?e%lZ>!y9{K}{}%=~ga972`IZvU$v4>hV-_(t1xAJ5kT za_53&&y<5j+3^a%-m?g^mGC22rieGXKSDSp&g6$@DSD#BXywW>MuXxnzTR^uw)6y_ z(8|N@bZqh`(5SiD&*$`1L9S#oM_HJclU|s`FD=PJV4QWs_Z5@X(#4crm#9jo%jCx!JvU9_9jw|>779Ioq@Km+Ry|K;a#j0-KY(w()J=Fmlwl< zbw2LlxJy33rNxVmxx1bI+h$N3$|!*&?|2jkg@V7(ez~2u{SE!`c-vR{8M-GrOMXu)GIyeVSl zEiDaFLrr{$98E=R&GCUN`FLMF2t2_-veqz5@;S0X%mamYKaNEHxI;aH<)~yQ+;cIF zvbGYmF$AdqpS7x+mtNRMe;~fBR&=H4_yGcm4g^R%xO-2#oO zeYAoQiRy&Nt5bj(C@q-E`y}?N)Y8uv-v-!23!3%hjR?_AtP5}H=1euP8{_>%z4IUz zJzV-4CT;(xt#Q<9-==E}i}ujlW-0!^&6MoLf#IL)3u!wI2!^=+B-C8pF$)7OY9CxB zY~6Y;yVLJ=<7__Vvx|ym+Kj9R>tQ-RCA%K!X;#eTO$NI*&HcURwPX_;i&P$3OR#GX6&fb)UC4 zHOunXQ4sZVIcogBWKsKM9E~RGt~y&T$-a$<@_h7EOc5TcD3ZjvsQKJ1lsp z2U~y!&Bz3=@If{D)Gew;4cO5^rrsYEU+CcJwjfww(t_dCJ_eorV{&Z1O)&V@eh9`< z#ULo5<$HkaAedlPaTxMT<1UHC1CaFP;e&8cP&6DWsD81j>t*V=xrB1p-f*;kujF+> zgskP)DMa28GzgXLH#596Pt<&j+>{wTpYg=Ge@6a;JNIm+gu*LC4p3^rs&H{ZNoSMM z^627P;%gnLkyzB{iTQZJN{A~A1f0Bb67#jj5+r*%@M{1XdJoVl?#se2*{+Dx{zy8r zEk%_eivAL#z@wnZJR`^(qR6OBBJlNns9vjX-Rde-#>~iwIQ!7+C3#;C-lesu{5zEA z?^LzE>Yg9&rN-YOPoD#eecu4cnt(RWK^KlsUB0JP*k+lN4=dc>GyO-nY7T^Fv)K`8 zsz>BLP#1Gy4HD`e8v!l^@;9tm2k0j7Hf6u%Mja-J$Mn3Pkz3(CBpA%_M^=-zGG%XfZ{OxFLjXnn zRHP}mO6L6ivv4Dc2RJl*`y=NkHUcXdN~44Lel-fxtR%|1X`ONs59i;L`5{r0V_oJ& zxv%+x_93GE(IE$f4cG`#LKe+bhfw!M_X3N_`mNcXQR8Njds>Q%9Qp+O96fF>dA?YG zSAKihw?hs-{mlWh9X-fE)$t`vlUWXw_3wUA2&PK>n$Gi^syFo}HU$$I4;ZkY5|TbX z(r#O+ecs44G7J=%w6^eBa22rc4iX`r_ayS42>ae=rCxZRnoX$?fUd5aHcsPYby5*^F7+bGj z_Y-&v+p5sFl8{XKtsYt;>_dzxj4m{4Ocwe?15pshUC~?iB$3Ny3m^I4;6M`AK8(VB zN#Kv?J#IVpU_TY=@dd++`z;yCGrFYF{`II2e5W_|DQPVI4(AP18danJQK4?rq@+{L zYN`o@xb|HVXljHh2@i#jD2B?%hVS}Sa8$y*?xVIGGx-s1KKeTE3*qknfq$!UD}Hm} zF7}Y1+o}twUiV)^@@3&hG~KgAQUlS~mlf(XazDVJyf#;lKkd=(6;04N?-Jem!p%7e z)nOkWesM-UjO9333_bbqLx4vpmLME^ttRsGofNtL;l*yZx%cPz6t2#vM`8mW3)`dG z@Y9|<4GiXaHKwPQbzWO~f7bFDvzV8ln)2pj=h19?!z5^i=fAITL(RcGl`#teW<`^J z1zS;rawP;~$y?W?_G@~nAkZg^*_OdQAPrBEkHP?OA$@&-&79RZ^58QC&9Sq|QrgGs zr`lp=rVZivUdvx3WD}?s)i+JgV?GcVK^n7qJNSIdneHm0mtuP`)=y zSCFS_@RI!i84`o4ctT@)#t}_w74o$P|EoVRPFA|UOg(=eLmEg$v!&U0EGhE32L@>9 zw@wj6_Vb5efKWVtDA1~l?%ivmIJx5hwci!utJ6J@?ZPFp-}M?%SWjl&=T;)^*>z#6 z2$AiBviv7YA zlbzfR<}CYR7|=6)r8=ti(+JmFU1Ohr(nx@gbR|*9-(4*1TemoSg_It~Es1}pFUR~T zmAH3YE_Ws`zyCoyaK)ZGe)HpCrCi(%Vm*k?9BXEl?e_+XYRCv)M*DTU3Wo6-UU;Hq z{{>kwEb0&^p!x5G{F@99t8)FG%zcP8DgVO0hck5-l0BI1^bn5SYh%(%I{16i`-2JP zLQL%|I)0Nzl7AL|$3u5iqytbX1VK#}*ip+mOb8$!P;h8m=v?1!o6thC>pyYT25aVcOE;={w&|BC9(au4rE7L!sgsPwUgG;Ja=MHRxaXN+#Mms*$90 zMnim>Pr~L=ikd(zdv*vUP4}yM_^RWDk#ibB8s{8~-{Y)VTx?q_W0pAedx(iA>1$s+9KpQNWYW7XJL za)^Sh6>4X+iNjT6W(0kGVeCOe-hOuWBii>hE*30-WtYEErXLY0F#PT`ZMA4O)Lk4d zjsQu35g&$npV>}%uwxm{FPs6f*h&N^V*UX`h>!E@4T6(3N>JqYr*Ue(yWi#eYpLRR3dnT8d;9?GZ z;a#a;ZimDTpsimeha@t5jSPFdtlB_)UV!IQ->r}RUsBohbAC^DusY1rV|KB=19nJ; zL$6buh=?|8-y(9$9`z3jL`GuMFd_R4*aTl+=AkFtFU`-}t;|^Wn_TXi(4!xpxWRsA z4=_l13XpW%*=V`RGPcz5>)VjHYxm$1uVZ$HmepVmF_?}rmcIQdHzo`;vM zpE(l%z0J1-vQH0m;z6#Tf@4?bP&-1++U&WslSY-r;$Tw#~xUWzN`{X7F>pR`! zB!W0i^8?5VvNSr`LMC7z)@7fe`%ADsFpN-KaV0<|!D7f;9Ii2**KF~zFh1~B%zKig zCIYKlcY9m2kHfYFu|)om-uZBN^{H;CoPjb{s-MrNv4I*PXro%C+UgAo!!#?Q6;6DD znMWMD&UqdFbmz{#4|+^~;dmVoaWd>D3;oJOz8pfjG@*7mXgBBrF0a)5v*t+O@fJ57 z;fuOoDf2X3x$Fv4lF#pxZmS-=k0@)X2@|zJNJGlLs)MomM zcBEttm^hDneHvPpb*?`+Vkol=H(H9%)1EuCcbk=xTtZDTQTjZ1r*K6e&#`l0bHv|o zb*68yS-oxvfQlo#-54vIw|nf|MG2qwFr38xo7UWch-Hm}A|q(w=l9Fn8qE`7JV;8@ zvtdDaz0MIKD(Fb29>j&}lsiL{69m+WA>Kr!F6u}2-fzyme(ui?5+O?742}z@%;f1x z<6Qr8EVe|LdEL>>=woRkKd8BqFRUD^2iTg)hn@x(<1R4R4Bg&WTKaE!dU?W&F;^z+ zD$<@tdvC;VhuD1@?Ta^W$jq1WX+Dnu+8W+D9kc9Z*TMd^Y+<1)o}Lh}zwg>5_$+_0>^(p60VBPTfo5D*Jiq1SB6FDQKNFbH=WJyKNJgLu`wLSj}A7zywIGiK9uwWwkOJckva}s zrMqsiu=+TZpvk9zbvwTxef!k<{N||q2kwP@zCtzVS;<&f@Pl9`IX_8+Yhr8)A7qHc z{wwXH5$ZR2L`2P-DJ9cgb>eZuZ}&*MVYV(<_5}z`e&C4#f=!MEu9#!0r%6w?+81Vq zeS-A&ahgBJ?9l_6>&f`?9TIYxO;iP7wXhgOrMI&K76NdeV4JV5tcJ>=OmZhQx}V-Bq`kd9h*01WvgVb3X0~7deAuPep%wFj;^$2P zzT?hN!=eYgy!K!$nK#Se&9d3&2BHKUlWNcT?;dN(eP02jFW&rOB_z}Sa2U@Udn)c_ znao!sq2@g0>bKEV6=F)+(7Rh#H>dqon>6I()ftdE*C9^EOeT7-LkOYIm9zQNTdtA! z!le;4`gqEp$$Pd`bj3?hBVVEKFShu@+}2_>fzuXxCmi4$gJ)BuzjRo|-+eVgi{cGU z#0J3<0aSgP&@7U$-$3;EifN4tuGjWsKVPxBXJYpdAP}DvW*d+JiV%(34c(e80Sf9E zpY?5eEeo9LhW(y%=2f+jBG;G8C-F$w>2_WP1?f04x+exo_bgo_7(iE)RxjnQxyHP} zT8OasDPI2LK;~swc1ZX(&x6mXzNA+Hi}31rdAphC*UwA+?%p%hSeHvnWD}b5@w%Do z_>=Rv9M)RN_O;9pQ}`YPsL$i|lBo26)_u&vfBhL}SAKFu{es9P4kV7<4zP=C@_Ppq z%Bz&2FL|l=s9Hwi!_I@dCou};qf`T*R_>KNou4h3Boe~!kmy`}zxvS^{Q;2daQg|n zY2*~$Hs)x;6f0Gv2LlswC{U#67S3}YK;h<2%}9K;eGVfAQ;|%dwFD(+%3OWh zVFvw5q+H>pU(Y(^kQNZ_x_$Ryau=R zH7wjFynAEDZEthhf@c7vq|aO$PbOe=o^#w(-DT(2Qg=ULh*ytX!+X`lsp_xn99lsO zCtl>VNddi|hCMh>IxR;)tFTKqveYk{>5WPBBDW7LkC3v*?~!zxVZPxdmF`txgaqjG zPeBcH5O2WWFS-5fqI!ila^+n*m8}Sy7NvMnnU~!jiKL=+j=A&$hy{~b_IQoB#>Tqg zJc&M>clt|TDbqx!xEgm-__&<4_a$92~+h)Xqq2d;5Dc+OMN^n z$v*yaAzQLd z>7zr>0(IwLeCRuGmFmd5DV}CPIN>i4;#?v@Z2%BDh~JaNqtWx@B^M`Mt>pO7a0|(< zmc!F9kl)P+6M5-!buL|>$uA!1#S_qWnj#g@d;aO;z)gmk^-KFaUeK6AOSrG(m6pV~ zB0fUTddwjvu#?{22S=&Y{h7OL+!ho45!gN)jHpoWzw*bZCyldTj9=82{;aM0`KWx@ zm;0-B9QM--hX@~Qx&OsbhSd>+PQl#05OD^sDQBU-2lsTzI=yua%6&#`*Jhf)(OaGg56 z3c+cvtYJJa`d@C2DMtNjG-whH#)3ks!TBAli^4G)j3*8^IYQ)Q?1mP{Tll)o0u~_X zo94XoU6BOL-@lWz?pzjmUykAnsfn97_4^5I&oM7D=1H1ekWT;lty4kGljp^( z*+)#XNaSxn89-GSKkL+I;e5GZ!Y9Dr@W$&hIuVHCEX8}gB!r7`4dI4FC#a_27r$RV zP4H=5@iXy6BqN87vtPGcJ~zJ$ZYBKOc5fV>NMCJ!+n;dC0EX!6*I`eGujj3c;%ep_ z5JGb(a#mMWU@?mAPplT^+1So(SM0%vSKo}&b#P-Twu$&kr8jRMFUQ%uRmQ!4yi5jy z*a`uPi2pIEzwZ>j>`NFt&+pd|@u{CN#}X6w39i|vC)qZQF~EmmcD7pc(SG_T)w9n_ z8%JXlw-5nWNK*0xT@hA$X)8==&?HEbT>M~IwmDDrcqj{g_J_{7`oeR~{0ng+h|MJI zk?}Do%k_zanCJ9{F5dY*5cl zxPF4W?e++sXM_?0vIny8(6QT$ZTPw!ZF}^_?@fbfgQyqK&D{X?nwNHW9*Z4vZhZ6v z60Xn(IddaZ`!SVj*&lUZ0_{Tr0B5QLo#``u-jmC>+8TIPImhkULJan2KHFWKx1!NM zOmWy=FQjaLU9kI?q1%%sVCz8IpZQThr5_L$*NgB`zsIw~n61RqhZXv#`{s+Laf- z3k1~+u$*F_>E+`jeN!0EmuA&1k03TI^c`ZG>-f&-8el(cL-it5K|1(1RJ}s!0Z|Nh zI_)(Zg)8;LzR7_h;1+<_1^4i$<{toznrveDb)Q6@I`+m)}0iNlyECJHMqa z_Sot45>{eoT)>ZQKk;Kkh9yc14u=Haa@(gOJ#!i1g2=`EnTjZ8l=0K!T`DEs05hyr z89|3=)3<&00~h&db5TCs)Qflh488a|JP(OsGUM_J-WOZDZ4X3DF!vKJ9c7>gC|Eu! z4pbwA`ntqAG@n@8{8^DK!1Oh#W@2h~7^`~a7w&Urvg@QBOd=oJfPr-GtJs(MJFqpG z$GLiWcxY>5$T5XnN{NcC&zAGPzLY7%^eLYf0_dT z3Qdga8oTVm2H+bnxEyn#9}E8eQ%FK<6uq4a(X-wbaX%@&!%5`g_~jLzSkIh{>vJR` z^CLFz?BechPkA&znhz``I!;%(-J_3oWg@CpmMfDr$H#kal;wWC1{!1r$84vE3{=kh zbLQ$J@xvR)oOhZNH+@#I&2!@l2d!$_bS!x6}@_eKUo z{Y=3w z)WHKn6^Ji{B>AHC9!;G@?$~t6n@Xsm5m;HSl>YAg!E^jL0I#^?#Ox{ROGD=Pw9NCoBg2Dpv*_|H$T+qB$1&7YZJOg zgE#AYv>}^B2Lb$eVr&oFe(wD7i_h4fI*wQ_y?C&SV!w$TDD$IdTthmAeduKa<6LBdFr()Gp7T}Lt>eBD z@mGlL>?J-;ew4>Z=p4pjblKF9e5#EPj-1Sc5eclsBH_ zT=u_AE{Y*v>YB4gBctqkfDdUCa|c!X)1oWDY@l5PSZAf#)=BXGA|e1Se$OMpJJK{>@976G_x#3NcFaBMK!c|F=H zG4)JX_F<*{saL+t@DtV1$T3>dKE9g@XjE)++Xs60?<^Zb?D~%{xaFQ&mHV8h9%qz2 zP|0U?y?kSmtI~Z9B9ac1oC3%Q_Q?+>f@Jpn4+yrF2#dQItAqoj0WJKYOMuK z1Wf63aaJ)prT)bhtjFV6y=6px`|)U-o3#8M?bx>y57^G(3@9SZrbITbYSyPEZ~cl; zq+#1*U>~}yX3a;R7)eXvyCU?e42q`$(7%nVvrKgAHO_J4eUPD8(sH*hC(SXUCHslt3sH0 zE*^Sgrd;*NKBR$#0PE?TjHgV&!EJSDPVrCO^LN}YEJoy0OEg(ldf&;=*2_A|^!y@Y=0}?$6Jrf{N{&o*j!G}Vni9-{b<6gqAZk<(oOgT z&nWMmo7`NHRH7mQhEX%{ZkPezK~9rS*Ir)-8y|v$DGD^DgqP<@qCC0I)vRd>V%Q2n z=7=a$6C)#=?>Q6wm~ZKj-1vN5n<;W*mjCkhpPhyL+%IC#7o>8N$G$r_`?QcNO$%GD z8&KZE#`OBu{UqN*8_fA82#*iE+COTvxNBUbYHF@uh&j{LozcU=xCP zN$6^Q{pqdXG+)(I^Zn_{w2r-Z->2Nh*_P+a<)vOf2XALzf3#iRS%>|}malds)%(#v z%SdMno85}`d?xGMdUug})?E(+RS%*0jlVy!ggMk9E?5O3#=gLs;!8gK4zUHDt%SB( zs-Nni*@wjf*l^>9JkD5|cJcWYR4#yc8(#d73>99P<|1@p?~SIOwl$-9(;w?H*$f*^ zz;%)7x-4?EWuJ#+MecMlP7(DqjJpQjB2Z8ayArm&!&I9Wwy(hb1S* z9cd^c+)yw#g~+acGd~=(qgz0^KCZ@a_VIX(<;*xH!Sg|J{2`DGT2SC-0>tT%G=&Ul2!IvC-bTc?k7$7)n|K!l4r3{S9<_u-QZS5p&FV zjeypm^D8IME`Kqo1?JaJq*+NehgUj%ZkodaH)Sv*W#!6#gaE|RcK3aYXb#F8e`8dP zG6pkV4w>qMj~-3}#B0LL4B@b5j7=~{_dCX(TbIb@;tb)--P{#CsB%L`H7EUG%r;Ch zTQ#!bSNUZ|9$or1QEipieJm5l&3EV%2Og>RRa4_=Y@r}Cd0jqW&4+ILBrX!^Q5~)8 zE!OG9Z@#W^;YIc-U2mB>0~qA4iT3JlLys5TU}Sa-JtON3R~}09A3jO49}1jsdG>0+E{e z{MO~|2(t=Odh9u{@YdHd(fJrTWRpMN&*Cr>d}`MB-*(ua`JeX+g2+3>?fD4PHvPeB z%6+MRU*0en)}dH$b-}vbs0etBR?%;6h6+%BOkSHxc}>9I1m3yflO(Ld^`_PB_Fjp4 zhnNpUFmQka!Ft=WKx|&blt|2UF}yx*aQogPwb(H#mHXthWi{kSqQU0B^jcBuc`YI( zQ}tXB5NL+ft=l?dc|D2hRx(GqUDd-c;F+@obop}Un=7&{c>yEb!>!QQ-j+#$ykV7f z?@iTATHr<1egqCOgWW22*4EAV>wo(5KFj>XPsUu{@l9_I<9+*digbkjQKutAn^}v! zc_YtM=N1jq*>c_U!x?GbYqHtiE$wE{88I=&ZTmR0wdlIZFSdqz)Fu32Wf$LbU;^u3XJjhV>!NL$GEcJ^>)<5 z$KeyY{BgEl76w;T{;Jo*5i>d9TtlV7nCojs7WtP-C=UMq zfnsRoKA0(cn~+3}Kzj*Rf@Y(b8!F(a}*Ld1ru6TbH zZaK|D>ToMfRBVu$WYFCj{iTzJFGi*>CL65qw(Kjy2dF-~8al3TT495og^c8+wV%66 zMwjFGW6@9lf_72>mSx^zUdGyMuhw6l8>freB`|X_j#t*cS{@!n>Aa~g);tr-A|z-c zV;_&*vsu34!I4!Wzc|T{M8BWX9XOjl;eHiM+sbR5Z5)zQX#|QQbNA69a=jjYDtg5< zVjskXmfz=0vnQVBmJ-jk;PKCyAyu?yGH+4{9>~yp=K1UvDibGPf&PG^L;X{(MaKd&#V8 zF%=)T>F?Rx&Q}G0KkEEzqA8kr`A00*MJ)03KDW?Qzxu8}yRXB*(2qzuJsGof5rgP> z(VBi-eory(vpDf2Y6zrOR$B-1oN^Bm4Im=@KB>|9^=pv1j)DZ~>%+^7B|r;;KMDkz zJ@NYcVRzmXe+|CN=G`h^#<2F@JKxuRpa@g@>ec?qv8le3%55BFql0B?2j&P37eevn{%SI`Sh!e+=F z{qGfxgvZ+vS_GRM0DipO9KWIS6skzXPLD@vle#mX^U3G#4-|Ru!C+M5xUTV)QKO;LXIoYv<{Q zR{qP{yzBFk>Jw$pxR3=diG80k>RmO=%GLw`Sg<)<}8m>%P`cxQaVp4^XuWtRj%gAI`E z@2YuWX(Fe3C9XJ9fTytwP6Ca_U305Xx?j86^a>C{LCjhJ5QqbYuwlD00;5^DDtV_e zh8a_zpbGxc+=G4X`ar)LCSWF!wC(c&)Tw2{I~XA2i_^D!`5aG#5r+`X!?sCpO9oj| z@!N!Q@Bn_qfQrfI27@e%z!aWcR|do9drr}cc7WSKkGIA?_7-1gZg=M*=b2^uNMDR1 zntWwrpR#hVsmO;1Iy>B59%KG?hi36GvxKvgEr$WsOZVIv(Cfu{YT&Ix*7L7E$#5g2CII zKKX0_h?0Y-@?yek!o)V~2w*tRCVgZQ>%hVd9Feyya7Guefwi<^^6aEyvwC_TIX&HS z47lB+Edzr5=O_Li7-(3M_VRwMPJ)Z;;S9us@on_-D4`x5T*#lQAr%*gKnwMoTAWcL ziPuApx2u!qt48myWbpnuuM<*>GTUKY>5QsRxsP)3!2dv_gh80<`gd{nY206EF^=}> zlH|9&$+c<6{sRqTeUg-H+VN&`a=A&F9V3(Zp%mN(kYto-Yk2nIk1I|2@`g7;A5P+H zgv!++oqKnqT`UtqUe&!D`drPQvY+=x`x=uPu7GcLa0lz*%ivYur1jI~=N|~WR`)Be zF8DUSFUw)aROvo-$IR_~N#$b#^gJoy3d}_q3mq_>0+zt%H$I_+AMR7S9=zWdYW{uM zEmzS#2J4Xx-M{E{S#e=;TdU{EZQZx9>3@j~?3Ju1zD`1Yk-N{=IQL!zPjb%re76d4 zezG`8%^?nli&bx!>%bJS4~1}oAYQzXEaym6{Rz_s*o#u-xzJUgX&@t zMv;FWnsZ9xzvuAouKSc`{hBA{SFuK;RT;$!y7PW1@b<>f2w@k1>N0GiQGj2x?H)+C zhjv9bFJ6aoGQKlKK!^FAh zM%OMSonHOr1~z8cdxjdfEM4UOcCyKaaB(oo|V& zbLF;2=I2$1$Ri(5eTn$I>9G9FLRF%JS7|eUZD3M22N&PRZJ;y85s$0-3%e5B9p0M< zL#xD(&t~>hI{|VR)IGd&pU43APZT^U8__3r$317&N^qcE(Sbw28O|lM^XefZ3T#7K zJ;@WYnq2IDF4HOz4C$nNE9!X=M6i7aJO30QJjlpz3#khPNg&zR zLvVt08*lO2@tC3@;=Am8W5TEB9@C+G)P|$Y@aG(Tz#mA2}`dm<-v`aUbrq+sg*kXKoFr&W1>`5`czuvOdd?uv-{L7{;K_~=Nn z!djj<9o-8vbDtL~dTAd$LcclQPxaBNH6w6NM5=XhPwcmOiY5Erge{5zz7^Bml?&=- zw4n(LXI6X1g{yT?Ck4FzrM#QStMg%pcCR@acP|z?P4<(<)kJL^(swp~eM@K#t+eFJ zJJaOnFgeacjC_rNgsclO)p@BG#95jYygl_L48S+AVDXMGt zlsjaEvHog6?MYfC;8mV4qls#VpW)JcJc^$^%!@7leNKkq3Z=i9APS2!XnXh!5E`fEYzu$J=y$oyAInr3iO?N^;XWB>9z!qjz1j0iP3 zd_Gu{o|?XU^Hz|@phZqsgFPZIoJ90dqc8OOE!X;y^sH%j!=w6+$Qz$WB2;2nb#_*F zPkCxA2}ZKX*!UX#VH)E21W&MdzpwH`0zwU*?zx6BG&3LopEwKt+gLrNvr0}b1WN~` zi0$*f?8?zC@e;6GvZWfFkt=`9?Ca^&s%BPw`_3*6ndr?g$)rYhb4@S|@6q)5Yf~Uj zuOG-vks#mtH(H1xKgC`)_UOxIg6D&q`4n}d<7*pJ?J=jWl28Pd3{_+J$|THYpB1) z-$JTm#&JNtT_Yn6oZ{?oygt4SWSY71q0cqxrEJ{8-Y%vOesgP}H$4_fIURv(CHQgm zj@+N9)o>`m-w4e0U|7WJl@p9djC9Qj9A@BqoDZgFO zBKsvSCN6NcIP!ft>18Pq=P-JIxsk83`4!LtGAS)7KR`?!qd*1FdV6{eoVLhC5nLA? zYx&;CB+issPjp%bU#rZ`B<*Q1tOp4g|o1zLWBN>;#?UOh*^uKGC1un=uI$xQ=XKTh9#vHvHbwBiBLk^BKvY_2I1pP zc#8qH&8Xmx60OQM^zw|0I$)2^l0D`Vl5dQjsjc zGzbGaPUf}WOnv}Gw9@ut)-_uE55hgI@8Y&K`#C#tU=Td2a+9Bl zfBm=l7RXF3)IM~JAD}PZ@H?c*0v20%tCSZjqq=l#Vi70S)+%K?Y$~~b3M38g z8N-~ol4A8)j>ezV&K$obn#;Bx-Prq9m%WVn=9dZ<)>^*OaZOYE;6vXhjvhSU3ioba z8D)!lQVlJOyv1mz<9wuOQ0jLGo6Nw5a(Ab9bz#`>Qn$Za(9ER~oY|c2eW*eXpeAg1 zqfmpb1kqUe@7}Z_bB2;KLIc9q(G`;{Jo!T?1#lW4SdNn)cHN(UtHC-v2}H-^8>BB? z`?|{QcPEARDTL_($OeY5X`OMD-$^;!HJiWI`7m+RJp~C7pMkG^yo{&%I)uM-+*1M@ zY{!h;sC^GKLUvml+1sB_sZ3ceEp^lHt@b8yBn=>wmj`}Fm87hzO)2vggV{_@-JI!FpBmpUm`tC0>kQ`>f{O)^YyWh zH$r$A@&0~#Td4~11fJ}Ed?4p^72B3`U)yzYbt%QBwHKZF$UEhR_&|U!zHbm}q}0tc zY7SLEg^J2cS3H6Wi2D7mEPPKszzOnTGLbXHJ{o`7{G_=z)&yIWULn9YRK?!M0=894 zCHw8Ga#kTyrCNUNTmX`l9f~ucdm(V(WA zc%?cIi1lmo9KZ;?#ZW2;jHcw5VL*Vj>jZ$9zOh(by z!Y(J|!gPbsQWKaX^Y_VCm}*A>ka^DX*u#`=Gk7UG){rKdZxnyiUZ$TH(YDSK9M{6S zZ9w;73wS;e{D%SHsJ(EVFCDamx|A;5BHvv4LHTCvzri~Z{QY8F_8fsrO(U#qsU%2* zk7zH?$2)jyBG{_PgUgR3xzpp#6TMiJENMO6+t-LU70?!Hw)PT}1A#yLMxg zE+~Z5!*tSx{!M8vXvbbP-lMj^3FexhQ7+0gQUKIJ{)9SP`&5&`sFNwU*#D-t72V3E zzn|jMlau#boiQdI+z0zg3O}-kw((glW(_116L12{8A|E_e1ALIv+4jic!wO)T=TPDv7fw>!1@y90Ol;_l%?$r zp$whTCm#I>?*nhh`H8ohhFx?TwF)axeaQo!{404k|*u#!F-^G&208* zE;lbYlGk&Dk4N+)kEwGhkBUjm$r%^{HzdU5je_0eLDrNcM+$UO6$!v=^r~hSlrEby zJz>=3a-J@$Lj+9p^uj1YVIBCLae?!zJ$BmV`MRU{z9n_t!qP+Tvm+BcZoYra#F@rt z^V5mlJnoseJ^h=ja6841$5$IPk-4STyC}!&kigXhn?kF8nGXts`$cBw_GJMMI_B4X z5~-u-NqIkYGR&Ue`j4$A8a2Z=1bQoqimOli0#8t4{%3lSaH_B8{o>PosY$o_FmhQ` zmx2b{jM;d%S!`4emY*S-$C%_8@yxfQ7W*utEmrzk)V5Y=8kT2+Wd9gR4`s=w1};zg zd7LKhI}t%~I3X#Ef8R|X09Pc3L|Yw5joh?>*{cOedD!Q$2P+R7UB1!ruN=4>-^nq1 zlXiv{r|$BCq=9Bwim_K<%=tY@XB=K;QAdgCE}x$UVUg38y&Y=j&JXrEo^k5J6;Uj^ zAZsCO=~=zSqqHZo#f{m2g=z5Z4uRORnSj*5O=ekDPF5&L5fSP&U0nXLIdMAg|@;9A25jT%E<%>z%d!?daO(McQFQPggyl>`?^#slw&UIl^^6Bc9v}Bmr$z9XpC666 zqU8JW^<9B2!;j_G+NDpCfHGauf^&f|=Fr&v#IytQ+9E&C^l#8L?cVnCyMjN%_$m=WnSy@S&~*+^e<``B0+(6d*918ma!^rV&Sxb2lzXgW7% zAgTCa(a#Omp!%lO_i?|$1G!>3774oAK`;0*#h^)AL-8Je+zaGI)!u~ZUaOMkE(mE9xB z*^XYob(-A%xD2eP7-f!A4eV3fHm50tj$Vl;8vW;&?8la-Fbzj7IWrnUX;JwwOFW~^ zbIqnX254HobKgEZ?PEdN^o{+_*MojJhvZZiAjnsjXBYq(9eL(uYp;1xAAic)JYWE| zKLgouB;EFNIejb}Zr`gUxG=PA;{1R+Ws;@?&~$Hc?V%G)eR%@)5wR6kRuWSFU+m64 zR$3A3hA$0T;rDAGAKZ^#elPTuNeP z)bB5cS%Xd=i{Aj#+N5a5Lsy?Mfj56MQ1IMSjt`X$+@0Yq9|n3Of7;)VFAdL)0_JTC zUIVt`lt(1zqPQ(cRcnVP)(&-ErcVvVqL?|QE6l}{->fh8g&>hn$y}9LRGL#5B*=l1YrTcnw@TXXvM?6wTap48i9#a$TSf=SJ>{gHJ(x6i_IGOO^=Kfk; zV0nF$Z)%80v<<8a8&t#`&De2Hd=dl^WNZ71<3^d9PyN^zbGCo=-yc{asGL#`+^zgT z2*M|{k0@pyS3Zq-!WPcQJsvt7c(EM)ybNu~`(49pt}T(GJ5pX}Z#m8De$yTT+EqI@ z{~eNgJRSZtx6q^rWnS|+Ltf6G4hmD}S|6E@P?}bHzjUV=Pd87W0W-WA`>MOU#5nKr z(kNPUmT2$Z@Si1nyjck%3Lq-sd1|0S!hou&Jr*zj-V06B5@TtF_Go)7yejYNudH(Fr2R~N<9Z{G@Phmg7;VfF6od3eRi8yYZH!A^j` z4sG!7AdMXp!`|Ufe<|P5!d;pnuYYsEP5F2J|G<)_%Wd~nJ|3XLOlZmiI$-aG&H zE$_=d44i6s^b8NkTazj{Gopc}z4(S!WA4+I>wJAxHO*TW!WavyBF*{p`PCnoY~ZD0 zlrrq&KE0ui+_PP>4`0~{>lOU0IO@j0g8}Xw&LELyqWG|dQu|77KkABnBwjct=YaOuk*-&C0 zqOfB2rE}7~&pJukToyd6WGNfm1ae8AkpVtbz2maqpcSQl)X#fV&-I$NXYi(O^(Et> z_DfeA0A-`JGEYxI26aD-AfH0iBA%h7(gu5<{4MlTCPE^j2mxur6lfP}dkClT0I;rl zeT)M|pHDIS88PF_HhrH@hp*vF7vM+t#nztv66f3Xd4yL87J%fpy5)UHA#paf>NgSn ze0!2x4H*WxhrSgY3G9R4R`vnY97+Q6H@wr)Eq(Y-@^;rCkRhDsjBqS~LCRnS8KJ9V zTJ`?jVQ}ZfOEu@u{v)LWme8|E4b1sXKPDFH+barMgO=nr zU#8P~JAYyRb;W*!0qEzoW1uN7jmPhBcgF?srNZVg7ad?2CO_WFvfrc>@aA)sPtRrj z+z>v?*J0VaQ4ihB9hmNZ5b#TJgtLVcddK}Vjv6Lfr8`= zB2Pa*eP*pbGu?`aQnhQ>4&QGh?tvIuebKD;0@xW(#J+GDCZI5{vGa3&yZ4FFk6a&v zE`k8f*d}$;yPW?nnQ0I#wHfUI#LKHQ!n!+t_q`q8n>XG6s^2u+hXEAB#Y_beKPZ8F zFu#ve+6udoh+p?!_^9N2-+onS0emq-{7RJkxYg#9LdiyOd0q=BBZNeRv^AivL@UW- z{TODS)Xn6mOuF{CnexjvMQCB%Ufsi@W#T32S@OsAIy? zlH5E+Io8>fjJZQx2pxvzItI!S9Vd@i56k|K6!3fQ%j)xWpbofL{LtYK?Pr(!v2rE} zo$lC>NiSDFOubDTyAx*MA53R^;}Gg$_sL5y@1T4+-3ct}8)H@J@tJ}T&6uhweZzsn$0 zmh;;UEvV6uRpK;l9~U}NTy{5z&iJW;e9-Rnn+_^en@4w|^1NBVLgMP|uN3vmXB|g_ zO_WMdTU+DzSVf}r)uDt8kamR13h8+e{PZ$0Co#G2PGCRif4b1c29mh{E0~jg{fb}^ zjKHzR3(6ps=o(Jx&$!&42FUFGW{MoZdC*JCzdFLW*jK7ODB`#<{DubTC-;zP?)XIl z#0xIK?$ZJ5oI4al+_l~nOQc56;NF%CBfdsqy_gq-x!+c5)57vgbQF2QCw#~2h1&aY~YhbhM5yLhzrZtXMDPP z+?1&`_n4!7l*Gl8;+(=whDLg1yV*7l?D00DyIDF1=Ds+4Xh1{BxHYHCAFbQzMD6_G z!K%m6y8cDk!j>to70oFmFArBCI7-p!;4io0s?SDYYVOw?V4|eY?QN!hc9*E^?SI}w zCy@+hi1bmr&!Tx-k8k}F%!kJ~Lb$QI>dS!+=7hgF!CgsV+SN4@4RbPqoO*afXQ`je zG>JSpSZAZCYl13@Eap#KLRc*j@w*dWz7|pBAC%(!_VvDr1W36$6@nDY_}*imwf@9 zs+VRrln@s&t6bg)pcWNU>*7hD^l0>Ly5;&C_uefaeiHgCbk*+J_;lzkM%APJ3t~F& z-GJ05_iWkwc;ww~bJvG;)cZ?B+1GWvJAS*5_x(JBuUOaEJZ;5b{ea(sD+VIt%FHi4 zWsTFw^G`0ATjJ^nLD|5BNmbF1%Fg&I07u8Z42_jTL;UXjIlv@^BZmJRUMxpiujP0~ zX@n1ZF$=HiKeUDRV>W2}IaXYLm9o^k{Kf*r?0iY>rq zdfsa$V26+m-Ju`SFH$6Bzdu+6q^qxd!VZM*{t_&%5gaeW@vAO#I5jEyx^aY^ORa9_ zny{hlxK+@af8${_AiMqcNo`n;g!}7?^Qi~le3H*#o@fsf;pzid*TIpRPCVPGvZ?Yc zA_=XJaW45zfn4$)ddyz*9`fi4XGlMI$5-d=YvX>IzCk3^=y3?E?lw2rgam^ zhgSz?+}H46%c6rz0(d48rD5k7$r;cPLdeircta}4Wf|!?4*E3PxsQkq3k-CLqghYqHwYhcQ2lA# z-~gp1QYI4m3Q9s1ywI^6yg;yS7}r3ZyR#7OUs=J?g&h6MI*2{xlh#~CMv&yh=ZMzc zHyjme@!2eL9DDyFZ_@!h7|WqtU@muiqsiotxG!y8mu@}T7WQrB*L8eDHXtKl6x45y zL%t0!w|;_{7sE8kTKX=dirMxdR2p9#gg(cZjmqX_V&&W?^lf()0Y`r!Gw|jtq&J$_ z@W;|a#QG}1a!9WLNI)D}I^iI?sN>EQMEear zumTIQcsm8b+Hmz^xKQ>9pW%8J8>FcCgWZbG7(TjYL!SY8WQ}fMjPMzG``lP|kF|fv z?c*E;$nD}UXUOnb z(A&yxLv!m%zkf9ZzFJT#@k#}(%LDqb-q_>)8!Uf?i0iR zSe-Xk)%;q-PkFA>#2ggO`l}26yidC~_4}EFdE`0>!M~of@P?LLd7*Bf_7ro} zen&>?>h&UbFi^{~%%}$sn&$<}1Okm+T}@oOLPR^d(EAva_y160T7K%?eyeAFV3XA4 z2NQ%*phI7m^i*!AG%McpdF^k4PD3VB0PAuIi<94g&bdX;WkrJ@=W^B#Fjsva9Wuw+ z2z};N-t^`Z)kfgw-CJL**gMtE-%z6NI(r7^g?FRVMYxtPKD(iyna(Dw6l`@L{ofod zkSxlYE$B0B9|5}y+7Y%4?E-H~-h3PF`O1+tJ2dM?Q@PUnO}>WS=T`>wF|;_>H}mi9 zA`5N_y3znG=R-hf#CeFL%4Q12LAztUZsPj49r<~%o$}G4!r#}3ZUq-PcWDcjH#e)& zgX+1Jtp8@v4+?RQ=Njf{U%oQj<%znfrOy2IfHvn>SLOBXTSJdL>FKnjPTz7>rT_@Y z;$wQQi~^SNXvn*B56$Iz8wUr#fq0{SrtTpz;e{)t5Fby7&>hoPF;RE&w8DU?mu)lZ zmG932_u@)dk;d|Ntacw@#m*)5>)t zpRqfAuFO}}f-Bb}2n!ta_tv?OKC(Un$NW$L__^Se+K7VHJL=0H*;&40tVl7aE(0%B ze}Rg9I6gVZ#2?Nrg09w1gg7oxD@G;^VCa)Ue+e*n3gXOH2Ih(-CscXWS9~Pi(|vNZLV; zL#r-2>y=q@Nl-C6%3}R2nsxV&-HmJ^6%ulrIaNfZa!s4)WT9b`HMk@~EDYPlnsH@82|%q>O#Z z3x2+N!b{rLKMs!@g+8Qvko1Ae>`qO!FC5s&3=I#m!4^Nj87KMB^c4ST>=xJfL%NHy zigN1_dLox9ir$=dAoeA0j8FG807grr&(mbQ+7Z$Rwqr5$K6N#z6@fa-yM2)qDtT+q zL-LHmHfR!Rc~=PXL&x}8##_i5&>=g<&4#xlnHKGmg(afOE(m!`rHh`vt=5{hFf)%}2jizOgyyT?PeIuvCRQ{6R$n zk&OPG_zI0BJy|~7L=8`~CpC}{zZb=ZSm8@6A(Zh7mm5E;S&>9q-0pjZ37PMwcz^Cg z^oyFLi?QD;tX&-U3_c|FLk+*HONe!Pmi)3l;`;oe@1Ww02ppk2jgRVAC3vX#GC90?A%EI#8~Wh3zISnl-9vd55x`-OLE_+Uswell zL{gg0>uLi>9cX^R-&HOKjZU~0+eK1Q$aC)BcZTZ?qs9G%o+<#0>wy8LtReFjplz4F zq%dwTgIbn9X!2QqI*Jo~Fa05hE}ey<)#S0KM3IkXE@v!g*ZnIk7dpSJ$|ozi3xwFO z8IpZ%3x58eKi(BL?t_l|Dm}CrnG3QuF;b8?A;44aAcET0YP8;7A~*G}m@()${c(KR zrw0pF=_F8t+;lR02lrt#^H+5$0&^ls;qyvwpA$f$lC9sVq~Wgnok&hX{!R{C;Np*0 zabCj?m=UPnn@|z&o41Kvq6APNwaBJBY0}AAcEVHfRx2YT#@~27G(a}-U_^C%Fm%sH zf0W$t?SwTEKxiyUPh=Tgf7eU4&pwt6`2qglH_u4Gy8*cK`R9nwqdv4L#IZc)Ge{UP^U~`k9uQCs2I#|7m&?FGR;8{ad2v8kX_*p8j^XQ_{TEm zU_4IdocaviZ!S`lj(y*q6K*L_!m?Wm^*GEO*LTJMVeWlcNc}(`em82a=}UtK|1>BQ zNsqgHr7dz!N^XLm&hEnrueQWzH^2>3KPByZoqY|WXq^waT~zjf!u4O8Y$p5x#5$ym z<;h1ChcSq(=R!;6Ptj6v2mSiMb^VbM3zxbHB8oPVsV}@+imAobsNEwlmd<#Od_qP* z^fQ{Eaz?EXXjdFP)%zR)W^MRM^l@n*RqznfuXF-8=&^)mnhKPO5Yx9eKW4H*XX$PJ zz&)#q^|!|&rNi}+Eo|_17#V-z=ggEVbr!k{10DzdM&Qy>YYj!3Gy}pBd87{LPHkQX zr_2;Pd+B?=wY+-wv3iu8B6Z=-7?wcWjUk%@hl$+lpXCu0NpO9J)$Bhgcp!| zS>-_`$ID^asF*B!(T;9;;=yzf1Wk_?NvVo#U;#jnG`XzdL@)3vk8f>$7rJ+f2LH z&HuBH+i~k}F7kHu8Yz#vzP}^&T*t#TYEPf4()Tpn^|(!h!IYe1e+f^44|XbUTb(QG z*Lzg@mAYQ8)wOp4QU4)$a>eT%+G1rFzL9@oZ5xcsm|kE zR7!gydSkq`Z<`eBc0d>W(#5psK;_OQnji6{w6Kut!CmeM9I2Q5ikCisFol@I_tG$q z@l{tatk}kJ>+9b#Kb;eF5n%k!54)4CI`;C*0*BRd%#?nVmv1+u`2b=QD1t{ zDzY_lWeS#hZ`7w$_>)W_K&Vo~=d!Z0{Tr@&6Sk=3h1pvL^Qs+_@$`su4#nLbV{$WU z1k!AeVz`!s`h59tz1pd#K1VWAyyj%dyLFX8b>COD%V-^@XFGum_025f_!Sz0_(81) z3eh?ZuvyF$X3gA(lOPtJO;aS?M%D5J!a;jp2C z@`w5vSNl4Fm`31dJbr1#1Y7a=7%~CDbkv)!g)RE0Pka29{)E?|gz+-YnXC!YP)-r+ zak`(j#r_n@?yinn#lJ{Jw}!3NA3&bVXGGxEHFY|C z*xfK6fBRB9s`n+nWE;bxi*X|ClMUEnU{lRNcU;DW8UNv`LX)L#&%l&#?$!A&k`U$4 zr|dBAmy)0=2h>L4B5lunKj(1oZ6eX^xW6KD7^hr^GU@A2c=C`Dqp4?P@cQmCp|*Md zFH{WOV~^i{Xp2XghTE|FN0X_0@_c?IkM8E~Xgc|0%iq84t#y4Z!7>3y2!Bv5N#?9T zFgl;4^ZMHr3fO%2}%g&-|2x=!_q;&gq0_QYWmuV~;t zvsvFCC_ecX)WdFuUrIdD06J>}I#-!;tnx^j>7=iaw>l%nSqFRFeJ_`T1;7H=mJ zEYoA0-mrNcFAymw?AC)k;g)XnuB#Ea*vELtkiF$`qnS%x%nADSiK`%ZS8^go2??+* zjHjGR_BE4TPik*#26r!u%N+pgtHc|)fW7jNon-zBfSb2`?I+$7w0DEs1mB&b(T zHf4>R8z?t;q^*5_Bz!@nWk)7{?dx&!sRMBm4&WE(m!~&E8GfbbZE%y?^FObEgnYsc zzMb^D@7}?0R303*Pw$8-4<%akcltH){+$(HeD|;*YO@h^-pcKT4EXHJ>;r_$G@Fj- z{;&cx_{x4);e=7E+E7%}(477d%_C&?ZU)HM=dAHBFBND=>d;*!(v>=+;f?Ky-f_I7 zLm;O4RVvTeTvOABiT07Mncmq2x>#3SpgNJXPI*!6J9n%RS_kYPE?Z6^$nAA_9{QB~ zat4j~zcMYXXlt-Bxy#_5G=v_2MaXLmvXM18VCvs_wrX zJDGvjMy!F$vo^Hng?c&z`C32Xx7R)*w{N^M5CA~(Y|gv;=Qyb)GAX}b20m}<-Lix; zaI>TZg5QyZnlh9#2vp#<;-&hL;lOPd#;50rseTJrqOlQ~LhPohTavl5Otc}2+?jAc z-ungFLZ3r(t(qU+1zS^UWtzb%{|`n)xZJY2`APrgdHN|I$A6Fsd>DV zR)CZ8K8&s;r*{&_-Z~ZZ@J)E;!!qOIDsT66k7sues`z&Gu>iPYsJG3=Un`&65rN#w zAE!$G789hPu0SRh?r2y5V%@AMz#&i1D-b8l9_xUus;RfZK#9Y>L|TuE zwGxp}uA8lfBe0#6GIP8X{gOhg!uMLu_7Syl-{Xj`Y{1&jAbS@oDl+(TscC18mTQ2O}0v@3O|Bnp${2O=3O5iAhkMtQKUR5?QVM2 z`a{o%ckJ=-GC&6C@tvhKg{<@q_dp^9E9}yb+=;0$ItEB)|*kT%cKs-7{a(vl?D+ z7VCeBk{)inqmavq%6hSD{zvO!1m(g%!)Cfs(P*jHzHi(4C<<|t!dgl)3Y&hpQaZ#7|SXM@!V%6!w{LHz2`5h!^ym`f=5Vha)jvGqG6X8ExkJL1I}uL zi@izjI(??7;V6lAP^GOQvXH4#O8)${up1yEZhPcVVy`#05S2RBgvWPG4Ln3c0bW}Z zulHv0^)$-;Fu}nNcbnL!B|Jvy;<{_QO~jb039eOH3V2^exX$*87}6^nLOhcU)iD_s#9Ita@`G zy-F9;$N-#?m!=f`kN^Kx1@bE&-C;d|1#ax+E{vobb-s*F;Ag!W+7Ty^sJ~H4;Wu=@ zgq%#Ucky?J-*}&*Xgqer@F5*nPnh3SAx*v#oPU@7`^mM-BX5=C1+dvCE`)+utlc+9 zyVZZ2N^k9_bE*08xi-LQN(hQDwVGf;N(Vgx{&~N9>TPLGh6Az82@ajq^vvLrx04wU z7%ysU69S>3JHG#xpSE4Au|Gg`TDYa#vOD_t(aaj4JA|kt6D<+Ep{U5)Qv7Pf(S1 z89Zh$_@;cl`0lPzvd=QN0l>!<(9~C~ru|_%`wQc)!doOh8K3EA;Qzm89sGEOi+`TxC+la9*?I({Fq6(eyVF?IdoKYXI#|6J%fsM5BJgYs@4^xy|dL+AX50$`} zCbA`|Y~*`$QF_PoqEzi0-5Wi*JwT&DWK_M+HLta(MzN3y#VU(fhkfE;^`wZM1k|su z@lCTjV}%geYx0ZTpV@K~!%V$?7Ex`MjU*K%^W0VXO|(-Z%?xSb*ZT8OuGAdF?!_wN z@+`RHnST*kVW<_iXT(-Y*0iy?FJ}|X=lu&An)1(M$M35{{=D={kgh(R6kXj%HG~U7 zP^8X7gu&-25`@BVmCw=5bnA27Xf0BUi0Syy8@a4NvMd-tnr`%OG<6JKU>KF+mA zK6DQ@914s)@jH)1DYw`xb-0S5mm7PZfj=}n)}D+CbV^hq+eBHv(|+H5ia}i!e-e;_ zRY=~2KvS`t*6GZT*i{9;g)-Ha39nAs)>+N|Gfd-3FTm?6v+pBCq)w!`EbbW z2BOKV72XC$Y>q&*#^}#@+E>%F+VM5yX$IwGx=!!x_EM;Un0`xkA`IEyMu`XN*nOmt zNJR{`BJW?EKonPif5lHl&QtsHYojA&MI=l-7_RYoaK;D5TK$TkbwBOVycN(xEgU@b zj-l6!+>b!>r5nj%^t}WO8o1h(&5701lRG+=f>;u}B%zP5(<4W*-0~f7Bvm%*4=zS& zFiNrAX-IP6jTbW(A!2uUL zr3aipe3a1ro44wnymcaKE7ty=L}K?kuIr34R1dtH8HqE`mmJdQpNb5HGte17QQrME zaCGDA%7&NI@qJ5_uktnLueFa2W1xp$^b^^#l#<^Uk96NTm~5f64)MADyok9A4X$xc zF`irb@j~ddQQtx#|9SYYH^+W7n&7>6nfX!;~ zvW!*^^3W5^3T_z3SqQ01#vSb=4l!NUW*~^ewRbi zx;klY)t7Z&?yeTGwVN*gE(g2Vb7V`>_|KQ++RFSqr;9klBbWN0Y$<0w`q(3vVt_kP zC#>U-R$k`QlCsBP6*}#V1UI9OB#>@#V0u%_8q_&({$kT>W(EtVklcHsNLPIBaa?s% z1d1wCR5R_QJ5{g&$P^I>hH9jHRKg0ke>ZU#_m^B8ak}~|@mMDMX!>aiJ)wj7+3&#d z7k{YB?SV*-w7uRH0a7{x+^_Q{<1pFwfndJ*JKH8Q7ocW9R`%_wh7z;xVtsSQT3fsQ z#LRfJPTqA8)lzBL5fO!g^6zMy<6^XkZq2}2-ra;+h;Cit)7uOC`Fs3c$zqSTyg~-! zQA#k2-V}t7b>~N;Lhw#MbsIor01BQ)gvMVU=~a^aYWcn0WxAC24?6;N__%Jh`=HR) z*4nfwpE8sMQPgx5i^E~}M7_%R)YpB~aQmNlPRY=f^2c06?Jge57Wl+cy#-xJHVVS7 z&@81s>oU$AWWbK-nXc_e)W+td|H^{ROQ3Dg3CZ<>om1C_GidfD&WmVVcobv#)ypk& z_ws$r)gp8Q{MozV4c&d|klmU>JpwQ|qJW@u7|lBdg9G@5^ZRkT$@r6?f~q@yWuH{d zUQy5jLVWaKi#(0u;RV@UT=A8@1t;Y63AYwK>2CPh&t>i|M|5|% zPBufPK=(ZU#;OXiiM)>uu5LrH*4^Dk_YkH*XZ;Ncoo$*LUA( zMZSosXRwbO!SxLR<`v5H*JFMFp!8b9UyC^9xIWs-0c6<-BI2x{mIYF>r8@WChpf2t z@}ZjsS$c#xM%}p!mJb=@vul%G0KHD5AmQ<;m+JjY4%HN)i~c!7+FIZd=|PqGR8pd>;D%`+2oi!E+1Y zdmtI1>lzxGfD%!mqXG?B+SB& zwAPc{$WgIJLAL7+SsM-v!R=eF;*0Md}e0MM2OY0*ILM35h zBg()tfK@z-wnvjRP^l2dBuA05GIp3Wud8M-iFadYyp^Zj?cYzf{U%g5TzK;Re3$2X zI_TBcdWI-aW33IkqY$$DIdsGeg;#9-=Y07cFHR0Am@b!$v0?2r#V4pluKC3TY8-73 zl|ma)v~F@eTX|)jeg7%<)Aa3cdT^Qr1*0Ll50>`DB!pb7i1IgF2v*kS3=_D22jdhG zX%X)D2XRc^>Ecbzhk-+x*ZiXsUcT-(hO^J%*s?yTtv%Kj_P+YNY4q{KO7r#zWXPLJ zuk=#fo3r=eobH3Urgq$5nJZG%Q^IM#cOd2U?@=#@um+pltc`d5+9&`0>ICIJq5gi< zuE{~T(oi*dJx-f|2k!#v43{COQe-AJk3+qXg8iCWe$XPt;d3~e@2C# zm*H_5-(wzIIdsq#8p`W5I>1*9CpL~{*32vS@F7`w0h06;8#Goc=BDSPTe%$ttY(Fo zt}?iy^p?CDKG7ut{b!^?Eaer<*~h#&{0q}a)kc|Tufdr_&(r19fcW@ZztFrO_Zxxd ztIkHix)x0(Al1h?Z#|?hS&m<3cK8y?)qio1@AG>Um9q>%c#ZeZwxREiEf9QkQ0;f< z{Xldh`kpfDE$r4q_ijGKm39v{KOc7orBL2_e_ZHCGT+c@zRf9$2)tJ!We+?0I@ljR zF=(bFPp1xZ*Nm?VLygAaY+Qb4nR=q($RQk@XsDn}ZSz%mzKCq%S2QXAPWhlK1}DY7 z7#$Q+{XD6h3T7PL@)>UF8q$D{4PK-)-*2#?)9f$h+nMWMw{3tAuuy9xXE5fG*!D9BVnpHYd^%Nj2fmzXwj_4`7A1rF0zJNCjWDS zp+IpFXuNFI`rR{T25$Aa_;!?^Zoyu_aX5LC)1{Qi|4V{K1N;Kymu zJPUaRDU%mOSIT5jTMja0qmU00fdAxirW z_OoSAlsw9|^Q107AB!!2f}uZ^pQEbw`!Eq@UmoKMR2W2L_`km~9g2ul9 zo>9p9!7QRP@*vf%6c|7M6uayMb1K0x*%vj+Ly>9R+<0H9FT0&WWd-vK(5I=MEm;V_ zksdS7{U-a#yX26(dWGk+^P{Q+{XV=US4FZ`YoHZKV8fy=3pO*pbZT9j}JT|-(44N-@jommLyP&+`qrmKHJVIq)zsG`i>w_>-aM|m@kgP z{A~IyvKzEAr-K|IYTlc20954p!ykJixs-n%^u9vC?R~zc?|ss*uVbru#X*k`1v?MW z3W=W#wp8ln9A)*TBoz)Ap7cmMRG)&llsu#@<38kdiqAiJ^Y+0Jo*!s4eS9`;PAN^w ztke6Zgflfn=gNGOA#}rDtNd<r?yDr_G$37;BAW5~G{A*h&>~Exn*a43ou71jCI= z3rr(-f8Ik86|cgHCRGQtVa);*F7dyW6fp@-i|3#}E20x4== zxff#2!Db$eOgNNS!?539sw)RgN`&{lcasiI5yM#6Bl}xSyoynp=|@6c2*8*T%9^0K z+$c`e>hOW3M14RNmQ35)97c#=ZHC!$D1Sljpc9Jfi>9ZdM5j@adwCbK5D-kCEW}ek zLmxaSfD*GtbPQ^J+mK$N2EuuK0c_?mloqn zTyOoNVotz#*PczGkyG8_@Sei58^dppt%k}xLj~j>l3D`R{aY}oDxJ{} zgGt<@+{eI#Pvq(v#qz7dNk@%*gPwQPusu_$JIBt#x>OzWHyKRs2%$T4c^-!OSO{@_ z4^iPB_nEoeYtI$P*?-8zF}7{xc*NojM?n3xgO(dw>yPG<;-PZ&b&k?^K4{1xo05m} z&`*`Tr8}fr3m6LNl(g5)2fL`vZzca|wl?AJ59Z|yKBXK_2X4$5b7<0iUIjA5JrgBE zMg8+LXb2G$%A>h;27Nm!;>yj#m-?XRJJLV;kxk#};r;5ug6n~S(IGDyL9DZ_zKe3% z%5QoL)nE1weUX(R=5DWwvx8@(pg&2p*)#D-_%ooGSvQV z$sHxJ>fS}K_7|AT$-yG1>Ze!A(xNoqT-?pW*G?0Z!EMjO?n0^p1vK*wietB*$bDq0 z;zBf-qF%LaqtDdyKO#Z90r!5A<&j#Bbj82l?zKO7zDDi)9z}crs$E3{Op|14<3=Pk z&sp>DlqTz@iD>|oY$+&O&=Q=4WU+jz^Q45Pi;x@MJ@B0VVViSIZvMA-A`r14Ldh9F zLdX`*+xPi1OcqAMVL;w$S@SK~ysxx>cRjPtB>B30Zi+S3XS7F*SZFZLp~tl(fDOO& zN3Q?r`Jwa%DwcSSu?fS`;T2{R)9lc!I zg?bSTeHDjuCm|0t{?Pe&U{=5vuIpWubLKD|>rpm}Gjl)ip@Hgd4+xz+(oar}E-*UH zv{DD4=H1k0Hnh#Qo7lxqqHFtC(sqO$1=uNSZt_6p+<`l>5lobNK(26hR0@!C^~7$~ zH_Dm&P5hi@CA6#7&4)2UWvklm_xasArYk-gubQFt`0%fxA?r`y+?T*u|Bzaz(9|#g zUXm-!khCh7lz4%9-=x8Y9V)b96+~7U*Sm0IuC2tLty4wEv-jJ4+ze{C?MW5#0y?jo z3meJ050^5+uGQz@v-^_sDxndl!$HL--28n84@(O&q441O$O52s(f;}r@B~G%bRUz> zzD|xy2fW)90@B{L^)I!zJ#s1a7kBpxeDk%h0nX8l%X5bg6W7kK3dl+ZuU-i`XuGVN zeRE$QlWc$Uil7gEYhFBuc_B|6*jH@PU*Ejm_awx{U*Avf8}7f$kl{lnDZc7*`Mu1$ zr`pnQc9ZWtWom?P>))HKp6RCxd zcMJ?_|J0FAK(VX78%cQRZ+Fl&E;^8FLY^bZo8Cl$bo9fbJ(~&u%HpgWPhG6-!BEhS z-s?|tZCA#aUgy@!nNob2FTL46;x`uWnfIqEEq{-)rykwkaVi)ge4<@C3pD0}TmgR> zvr<gF&T%yCTaHN(J_Zw-Te2!XU8*f`KyFgP#`ilBMQVQmJ5b`@jZHY z{?vW;kQ)wz65ue)+@XdNxB)4O`}Yso7VVZa8s~duvd!)MARcS4ilGD8G+tMJKT6yP znKo84o!>806PSd~hoyB6U3kL>C`^|p%xL&C-I=7aG7)u;5VmE^ZnaLfVH^26c z$-20&o~cWVb#CzQ3(=l4Q|eMwgdr-m%_ zMFLA5UCN5D{wD2|UC>k;XT{32cV z;Qd0lQ_OBQIQ=1DHx%ZIi>hH%ofo=#^i!1trLH%Yt7)Plo{OMGiu{MiHT&ZIe)HC- z!>3oRDugxw^%4$|HAk9tyVUHre2Djtq0{du$8ZG5CO2R2BNBY63KauO`TXQC)ir8C zk3>bjD@?B3x^8iH*wUGgU)nhZyM$dqX|bIQms*>VC#}!iUkK?Ws-QROh6Ov zlYzt|@5fEDZw(%gpPM^g?7^xM5XD5E{RtoBC-P-qhjzjO;)BJF+;&AdQ22GKn)7Cx zo-v@2^TYeGb|>Lbl}z%tUvf|e<6R@kRQUycvp<4Cr6Vq;D|@Ws<^?dlHzP3<>QOi~ z{d-6vdozseplU9}C5SS#zt^V7!)1XQ^lwJ2(Gk%hzCDZVt@zl}i7xbu7uwtlo_1c= zo5sS43#fZ9Ti!iN?ZMfPE-?XIQwEk{`UU;aRZcmRWLfGeP)ouKDdO3umS@0WM*}Sb z)2rGfjI9dxd=%eG;r;`0No82T{)fcFF`WSp{^Bl%N7Xw3NVatVM z#%Q}7?hcEouxsMMH6YepghBThzA@%`|VqTG?VFMf|z{Q~4b-$6!CI;fgL zFAlWxzDEaU_GH~E{RBoLf3JXK9l7_ZS7bA_)A1Cf?|op<jmjHKxOc_8=y{?Y`mB8{ZnbGyL55j)I2Cj~sLK3?>+bHuT9oD z1-nD*Coo1%gH78{(FHAaM;E1~%ok>|+q*(0?e=84ON7|?K78r1dC$C*a)JZKs`RSd&j?SH|7278S4UpoV?pmg zILVW4_4)1*c%mDVI1=}nbmB^9a?9XW{E(PV(!=ypl<&GMZBIG(upqT#mHV(h!h zekRvHIoV}5%spXbFOC7*L^&M`=zPT`_sdfjK+o6;xN5s1A#YKXk7D2AX<4#A6k>~b4Yb3I9F1P#J zKCK{EJr*_cbyGZ@wr<{+1jJCRq=t1N>&^kAnu@)v3;fLE@qF=Z4?mHmwE?3A85 z#Y0$q*mI8~%*WSmfC0`361cz0>q=;y#)7l^a_XT+tqU7+n;pxaKHirYHae!!lV%^+ zAL=nR`SYVAZSakBt9EvH`$Lg?uG_vcgbjK#@ZE^_HP`MFW04vbl zmnBE>DJf0~Qu^Jzo9pEbvfquO(xM9r$*7)}6>TqmbQ@OBB=4$6R)=0Vpg^z@B37`@ z>|?3lr~Db*aw#9Y{73x~!_-*`dam(Bc&)pkFCQqmY0B=k#l3rXw&MPSP8L`!+DO28 zjUMNCbFeXxh#2FG5*q#}OMWt~r+8nC@nd`5zWm=!nJIZHE_Cv6K^M`@lN68pdGNL0 zEH$bje^S8L>H`rSygH914AcvpSbgxlv5UQv`B9P9!^ry_V~OrO#whLL5At1wyA(fb z?!_L36VDh`Qc#E|$m0asO$@OQkRyA&2M?YR=dsim;_&CGT8REWND!tdSN)f9oAraWM zNXu<))#GLJ2!skj!s0J%^XEoxr_4ECqotpOWZk2)`uTomEh9zRxeRnBxPI^A?Nck? zSEeEx@Wcp~h<#NH@9)mlkmB~y$6KD(xw>cH|42HoEk(5`ivAKgJOYYDK}6DM`ox>Z&p#oU_B)bLpr1-Hv-R@~+u>pv!bJJQ#`4Hy#AQoBLv)ABWfUt~dEv zWL(hKhi4_yBLmIEC%eg?_#Hda_5Q!&eLW z-f0iENFZ2{^KnfEQ{2}j_r>5$HuhR;01H3K3fmrI6f`DvCPwldJrb~b?n8s|%%X9i zpa6D1bH;wIzTVRbG-$eglMnWD{V)|Aj*Z_qasqmP${e4Rz~DvTVBDBk?348_gPEPDuHR01K3nz>7WDP5|x?Y_7(*ALjOhw=!e zZ4tt-@8{QwJzr=$qF(hdCMCw|^{Cl1yVKmx>x%T`N9Vs00^(yVA64Yvc>8`5zc7cV zzP0QWITd;7Y;(nZCZB?!AjtG+-~QjQxV?N#fE7h>!aH(qAXJs+2dL{3E3*W(p8t)~c+ zSDgSRbNfLLQbZ2E3Q5_YNagw~zo3NZx9}St9bNJ&mebP*nM6ezA2{}p)nm@W0}f}x zJcmzA@+MWN^Kuy_0977?`5_If$`Y2;3oW4JVI>G{$OP z1G0R^n@xwuMY;@nS*lbVFg&FZO`mS>P+GZ#F*^C9Y9Z63qt`xr+qR5Yci8!YOILC83|RG6cpR`u$%R~^sUbF;1GeAL36#NO2yYU`dg`@X#4F!F8k>wExg z`&&5Acm;_92IMRJw~N8iG0C;BRYn})6M?cNz$PlYw#+=|vjif92k&qFO9rU!nZ{Xm zXVp%IzW#je)$N%A@#~|b$4fA(rs|8r4RS9$K$9i5x1AC8`b~Ko?o(Bd@R3m)|8WGH zV2^rmD+iBocZU|`Z&>0ykC;r@Uj(_EWy$vI`|4u9`@zAsylv-me7CNGIZQ_e0NFFG zVBp47wG*;n+~*v`@K6jK{a}3fFsNvC_`;ABXrG~oHs`>+n#X|6fPv~k)3b8L2rzdU zriXb9@-rF=?CAqa`?xQu+0{{<58<8x#J5k{MVpmteG*n#2&ShLI7?K&k9%?`GudOpY8)Q6_}$IJXS2946!wpd=ZQ=Z(g0~th%7*3WQav9$QEGQ=C#)-lPVoC4GBR5{)!Y5pRPud0 zWjaSXXan5>9+jN?(x!hf*=f~{WD`llA^DrOCOv9Q7-XJ{pm{R|yv}m?8r~Ej|HPLb z%{i54p8a@B8!*lXs(=rQQqwsWKmGdln{-!M0UBE)?vA7*i-BABEa+yan_zH2EUVh3>D}@Z+Vs&Lcrmd_}mUN-|rJN z7?DVZR@{$Kohh+lzx_^&Jh6B!{semfUG;+zj(~3iXT#gk;MpvSujM-yN)8~*%!sne zzzFskUbK2Y@#kz!i2X^@_L6_<{J1P^VDgGm3HasVqR|_$v5wL&?ut?2efbtr6IKR1 z{bW@{f8 zy$wpS7WT&sCtqu)kKec#D}n{vFCZ)I!c}9d!@JO5$$ojh9WtTv+S$IuLrKG7-_lSv zg%{MhssEt041w}WDJvwi$s~|n(_yWJcO)j8V=DEjj*e3+)_W3nV|9x2{;ccOp#|qP z#e9{~n!NP=eR)nQDB(0g%zYouVN5&zmzOGe^^f1SCuUOQ&lskkrJy4_%z5QE4_0~^ zPHvK(i3yP48;PL^Ml#MNIKmJR4$?tfJOwU9ue|X(FT#wmyTTOhyh5V{SEjFt$;7Fb zW?N@W!ahpovxQfOXn2s&^2l*>!@R;(y4}j*6|=vK0H`6}2le_h&k7vk zmHLp91UDFRBI`{K7I8Z&AzWz1V^t=bDY6HCW({zvH9#L~pfIbl%y4(PL5Kj1#(*is z`~vfo(-U+r>aCQ2Q{;yZOYwsbL{DfB=!D%j1pAmfvx*jL9!6>cOZ=Ul*J|DKPARDA z>4BmePWS_aRM~#+k=pf3aB_MST;;fXRmit;KRZV|k&4N$?yB(Tp}eK^^?`8h$SZqa zP~P^l-gFdI?P!sN5PxElixlk-IWU%ZGe4w|Z_q}6B}!^d#yr($JweIwh2MaoMVqo> zo}U*U1>9)<_@{;Z*#m(7u=~TK*@IcNclHF5Iy9%-cetD3_4nNj^7|rUilgs^ipGjw>b&u>9oZ&4|z+nalcRigF)D5hnT#}o{f?)&w>6)H(LSdD5=Dr+VCA%b!` zUg(37Iy^IYV%hv7J^qa8)~ey2oIyh_1*vslxI8QT^xQ88fNT6H2#Vqy zL?AXQ`A+4O1&Mo!VkvoN2U_FAQuq8Jg(ojOYUTGQr*rk&6gv28^iTbr{jyN=gXQ!6 zLnva8m%%NgF;WH;Vp31O4MfZXy~p1k57^&xWz=+9^VjPa*L$wrY%Yc0B@GLtt?uqU zZgdPk?8E&m$C|QvGoZfxZ0+d6Jse)Y-r|fQ0$*5nMaCEgzv06@ooDUEbE>W7FVYVz zZrE32`DwvyKG0%py6+dA_!AeY7$P#!d|waiB~GrVZCZPlp6+NH;!YboU2pgEYJ2XM z-okUQk##G7V^P;y=?g7Ht}?!efMJfpairBJ3#%X2wBFg+2>Ayy9nyj~kc9F!vO1aX zVT=?umey4#lJkcb=iz+-F%FwwS}HN3k^L5E=`=Teiq&^ z+wCr!JU~AC9`jBVE!Fru=ggSXN%wLM!nYYdj)cGbAw{j;Ul)(G{!lvH?qt# z*aCRyN$pS0i{ghWGb3oy$1oO>AydYa5(}52lhH358gyX&>C{srILUdBE#&(ICe-WH za3^aj!^_57u6gK!1*kv_Oxuo1Jmja2Y~p%~`V^iM@PfG|*ObGhEMLfH0LP}=kCgT% zw0%4Q4%{N?WFK#173R}z-xxJbuAq9xzj*W?U{l*=<-=NtxU}=Q@E$R@c+FvFiNOEj zI*@Gcs}e6k=%OKpnlIxEZ6P`T9`;Xx1MvWJm$K_J`GO@!71kq7(v$Klw_pG4GU3oc za0MHoWFRbp63kLNO)yT1h-x?{p@3RBCg#Sqk(Ol-Pr+JqKs2R4iIL64PiR^08qA_K zn*h0BuzwKU{0V`zwMkB1oX(dq3cs68H=Q{xoY9?=9Tg!{vsG7taNf%+DJru9#7edC-uWexLg%hmt@Hp261!Lb1Ge2M1g6?o zGHOrH2z@QfKpek09=(r^3um|(M8D4ZecrH!6#>?+!Y z<~iqLlAk(OY+AdP2Q7!iBn#EpCjaxj~6wV zgbR_r>ugWrM|p3a*@Y&qR+URLeHYSv=7S_*5S(v%BcqlSo3OF(O@nuPCK-h6`zM6| zm_t4Ldql~2`-%0}P+7U1$$K!Z?n^^O89T|HrW z(k+|qH`Klo7#rOBLO+x}z6|`;)oNH50|H)gDb+N^?I_&!G`3vL3ffaah5X50F=(9C z=zUefJM7)xeps7xpLnxm2TP~NlLWiy1l7I{fB7W-QWdxaN#kJB+L`ZQ7ab$^LY-R=SUYMFNNzz3fJpgMx-^tR#m%(5`@nf!wYx#93B z>`s;*dCVgjvxS@|$hUX`a>6qJl~3iHc4-cP&Aw=f z{0RcELk2M)e(I4}eZ$8}T6d@jF@gJq;YH5y_BEQl=ghjj_xEnpdCa5Ff-n-NihLlX zlUi(bq4AC&SufEkl;-!?!Fy`Li(AjN<#oT~_4%59I!&kt_4=OoK!|Kr+YAa3Ti)DE z`DI{9^;^s06aZO5-&%C9hlo~MV+qlEkI~@)E zly42^X31@1(2sdiu7Fp_Ce7SncvJ4NHL8GZjlTI4GV=3o+u=RBmaIx+YJGnXm&KI9 zwRF|a2gvx#hNfOL*5&pmb~mDC4yE@ii-i5fhsEbm7im?0XRd2q0%$8BQSb*!nITXf z59m9u?MI_$#^Hvm{mJqGJr&il22AoNOq9C>8R^*WL~9_|r+L>Yjmm*Q^pR>=Vuqzk z-54Q-;j)uc)e!S*t8~kS*bgRBq$bAVwm$(WB@1&=oAZk6JVjqYLR ztEhiteEKVv?~-8b&jrrThh<3HCwfFkLePvRc=HG+1@EJ?PNx&PRv(%prPHeO))F|? zCvjn4_G=Gh{|4VdN7>7Kop}xwHPPKquV}kQUsg;r^&e~ad`LC7Ls!1(%g4;104x6Vgm?nS6@$nJI^N+PHT9i((R>}PH z(qUz|o3?lODo?m?O}|?s(+f`!?^m@ieAg~GKAUryJ|V2V0b^#pxJ|p~()0KMBo4H7 ztUJb(UB0^<<8u}uI#Hjk%(H(v^MU*_+}ZGc-D%jO(h7(`@Am80W9r39zE9ZVm3CWN zuj2^30>rc$@d6~OY)p2+@Oc?7O)#E2BYII3i4a?b6eumnfhoj>r(pi$1&T9bYf|Y; z@i%-cEh_|h@uw#?`bj$vHH^zF`xJ-Q{2=!rELD#|Y+5{a?3vqyo~V*z%7zcEl^ zo=%S$W?V^W7|$n47Dv4V(6o3Zjh|iZeZy1L2mScm#M}g3ooZ-X%61eVLt?PBW#-e?&!k?*bT1&U7<1bk~s=3$2mLOEc;tc?U#6fqFaJH;54J6V*{T~nA|kJU)`IJB5BLRCWMz^sl*7IX9`%7b~P zM$t#;W-&VXd0l=rZF!BQ*F}Np)?0s7(h21*!oGFa#8lF6*!07b3d&S8qA9Si#+W&- zkuYr#qdW2U}?KQpD zea@R?1$EI}YxgJVBm)Vf?P9!C5`1=Xw=pxUkd2IeTn_SFrl1&ah8*sCu!c+V5X!4_ zo@HAuyI;b>b1m1S+hgeZAPryde57ap5PkPJPPnuPb$TTG>aDafVtA=`u$y}MWAc~; zl|siNhkq-yv84n#4R5g)4j{5``=w!=2WKr9bG<*3>pg`9SmE>TKFPAn z6P+Kv2XtD=JU;LB_tU_hk@O5Rfht0Bm?gmb>2^q|Zm_>}#Fe*$HkTsjaYrAzLu~zO z5OG#;fM+EdLjL12McZ>^2mC=o*z=9_WipI-6UFcnwfQ#R4%ZjtM?K4Q0lC0A$*@ea zPC}A=a6%=YhNCo;S95bCd)&do*r{Zw1s_l_=p%3a(i0lKRG_J?dUOY_JFBX4?R2&}r{HT#+JI=TB1HTC?d z&g4mn=`WdH_O*$8W%p!{CC>*0wB_?PV~Le(p-Jvj3t`{5bZYV+{EyexD2 z5J8+0BaJsQqiOH^%(H53Vg*6?Zps#{Z$TK?I(Y5IQWzH{;Wt58n|f#Az0)+6UcWge z8b+cGpS1`Y=VRa7zK?WtfvB6`ti}0>KL0h^_^l<;##@8mCpH44uj=uJ&eDhKSFcqq<^6Vpni?+5t> zS%Ry)1e*9i1&3S&FQ$0NWe;cU_5>yQomJU8+$hCITQf5nI=GZ!yX8E9m1;|c9H+q1 z5VOGF2Shh`bv>3#5+R>H(e;hv;C*E$zrz__OBZfA2RbZ|*N3CY40m_#vS=esfCa^1 zT%U$??+Phplalf$c-KU8y6o;yatl-ijqf~w75xe+Tz#3vQv6)j7fb&r)++-{)2Y4_ z@zYRUdb49U(o>*zF&Cl(ZMS|W^QFJJCbI{X%0w`y=|wM`ijh$LlBALV@)HHn=AU;8 z+uu8CL7QUV3?sEFu=&fDs*LYh2A*lNz<|VWfGPnNZqGN)3-A!d(UfvKiQpViN%l%# z8ukD)`pc{E|G1_aN0rdKWt4;CP6uE3lg=eZQHGp;pzpS4p!qAuknr0RA>FcWge#dh zHv_xpH65f0`7RdU{)cWpYIbiYEu-OMGWhM2&4rIaJs=a;@=p`>Q&sLu-8JnG@P*hL zuY5>@3Lm}c@E1#PLIBjWs4tHF4CkJwn#ggdv!Dfb1iZ7_iRx|Flyz$2~!D)@dZ ziI;0SD3BShQuVz(M2<|0D!WJha__wxf2$NtW{RCC$O83YU} zszUg`eEEI9OkTQMKt>{g4nO^A`nB&MZM#p77nDHMU|$OJ?iGeEiW(9{qvU`G|8~d1 z!Af$8^o|;7=4)J5(Td=G5XG3hh8Yq3;VH9S3$R%Z!ir5m*6ClyXFn6}bP;>h8uDGN z7Pz58^jmFtzB~N>qVC6m*#IvJQ>g7M+UaNN!VLxcbXjG-z&9TONT2JLKvSJLo?eXsA5ks!9#=7qjBL*Jlmx&=MEIhxw8kYmy-U5ARrl@C- zPD{ES${}hmO@5>M>VEbT}1fT&lyT(VOwt)aU(3qmx*RlvrWb zw={0obbd+E_UDY7jF||6~*di0}QQ2(l(tnfjc+{s^nrV}Esp((PU> z22PxK93QwZZukHH?e}iglBY>gq`v{2#^gKGp~|5f? zD~mrcYC@R~tnLeiN*Ji>{rcf*eB{Z-=$|(rzlQi zYz0kQJ`!(Nv^Kt=esZuKT+dKd!ic8Trxn^#F$cy?9JUQi!lQfJqTC;|7uc(JS&!bz zVxLLxEC+4x#iC>8kK`<@dz5$)`mg>u-p1<_Ba*>N8;7n#E%OL6e;FFnA#`DufIR~P zzhj4)>{I$>AD^|VqKHeut;1iOy9>J6OXiIpsB?lnEjgeSaZ+G-n92Yw%w(H=PesE_-MZmN+&zv6U(G%hk5~}mUrIKU2#fJP?5pbkPA@r z=xccs_B>$U{Qb_ojolxt3_tb#$-q*R2YLRk<{qVaMejZN5=f>=OJ~>cVYohq;nhe1 zyBzieqKYGDA|J5R0mCq)AlsY>Mf^%v{eJv-T*}g(ej41**}lb>ZeQ9o&8af4iXRR{ zpzY1Z0;CS08x0_QYy@b6whh5+N2n697WAnFUCVL#{wf;h6=9FMevg_$benHVTNN`>@HiF>5=SSQdHc=c5^rx}l2QRA4~qK#7XLzB-PXmLgS zjVoXuy0&&N%4|RQbPBoH%rvGfOSH9gh#M+Wu*lzTKql9%vJ6Xsart_P*nRHAL3-sJ zmHW>IiI1+O2y{tXz_T?-7@+|>-x-fOra<5`mo9)58X=v0CsFu>{qAJC1d~_p)!*VB-qgFk zejg-JJ=*`X*6xd1&d6irjwu6S9O?ncfiGyZpXNRZxOi1KWSz_4bT&St>cfkLFEMMA zz|LA~q&TA9G9~(?dXg^ZUvcLfJP#g?lo;9xfK}Yz*cn6^m`;B86ioSW8f?szpgnGDeyKh#an~Hf?wQGTEb5l6RdZ`y_dpl5V!sq(sr3 zliPP%(^rU2)at;qQAeLf7j(T)0S0M*x%bgl876MQrhCUHM0xBjd)}pZxw}|8)&4k}TyOEKc?T09pT{OiZqcFC?a0D`nr}CaY1OJmP%(Fw{6e^ zB}LcfnO9rcZEM!CkkRA$mY4o}zQ4kW!7R|X9z*x|*@LUoh>?22`FfAF?oR#bcqn-q zgeQah+rWH?X)}+jTP|zSAKSh+nPxZ(^3qC=Zc_a{ z=d~F#rry6Xf#Zh(88-332yN{mbI;Y&+vZL_fq-1A-oU8N(Mnu5-z6T~r+SPWxrSeO zWx?vs!jrDq?8(+^gsHKW<%4)+nU5sG6(In7ZE7$;-3BKlj>AnADJCxD(X zHc>(B&cr48wi`uLU;fSC8izO&)zz5k``?y?inHd8lkAo5jREcx+z`_*B>3~~D?$Y) z0B=5C*Y0*9R4s>74bx<$aMg)ud4GhUoy< zQ)f!Q1N8wp!8v`%66k{EUk!5)x8$r32M*4N3*!eRCuE(g$LsyRkFe)DS%j!S>~XLT z6Uf712Z+g+k4%uKwpI@tgyiFMd^n8uI;rQY{gTq4|Ax=tstdpVs(->cRc_3Ip-t_X zpXagubVBOA**jJF&nGHouB=?W{&0`Z5Jub4=4#0|1!`o!VEnl{yp-vxUdlcWx7X>M zS=q!d(0u8Bbe>LCZit|@{Pwz{noHKPfS43J9De#(AdL^XIvtWT$rr0bCyQI`QLk~K zw5rLr#JOLYFQ>d}Vy{1)Zy)J)B(bZ=AG3l-aTFU`IFj0^IrGEmU9=>KS?HbK3=osQYy^xTaW5hTNUOP zh@r+8?9c}@gBj6zLZx3UWMSU7V`E72IlV0>5PD{KK7+x#?_!hkNVyeMK-YUIw#3qvp2?>FZm<%qtk%KY1JQR6*}2d6 zeYJ)S+94PKvht9a8CG+z-Uj)1iRhRs_~pbAv$S3?ACA`3dIcYh$WXYSqf>jKkh4tF zQiwNTO1B&HtC*oMj2pTt!dJq~Pr#+C`SAB$6zY*Z1^dRs@w+X@>HAG=awTc*w3|RW z*F67TFYVQPJapl33uOltiqi0m=e*s%jh(;=tB=>ukrRo&;cGceAZ>%KUcu-?eKF;3 zkDSEj;63&N*xs5IjN0LwhxQ?i2NjUv$9=hAw-|wUW~LnQ!qC7@CDRhq+@Z81|8f<| z)ZA8{H+{T4Oa%gIi?!O*Oc4Wwm2V5`Sv3-Z^!bO^Hq{n+zcBKJUwUWFu;TQ1k?|$Zh zN6hihLM-o5dOxb*nTDR+ULt>N**(uhp=Tm!bZ4k@JOyV4LL7C-;fFz;tT;T@S$(vh zYc)`TLl;TpeL;#zj^gcP==9@~pHJhyeB(*;sO$YQ49cqjQzrZ(cyKRmd#Xn;3(R?kmt?KWmX@3Xg)~W+(wJryKcplSi z3q?XHZ$f;G&8%k^@8}^sBXC}-g_U`p{B;iSPM=Cwu6REf zcPx-7sV}&!9%|>%Bw4#9+T|X)#I1i;pZ(3pg3a*8N%C$Pf@76_m5ql97^^ITi-gfV z3=ded!0%QXJM#Z9M`h!X=utld!f7|QII83{PhIt`A!n}}IY0Y_9FyUE)9J*yG_aM} zUxe1G1N`}y((aJEk*H^yCUKIaX-+^((7e^sssaVn8hYc>ehxLcYZLU3lm13H;Bq7M0My=BK&geube4{sXN{mWq}v* z1_J~pz}`rQFTL&L!+6&i#V@k^w}5{oOZ(xmZ|7=%;m2`ntaC(F%(HNY4vgxa=4~4o zRvs^j>loYg`CC0`^e^iGKA+@8fJq))hViF(WSJlixTUliNUz0r+ z6%jR5aYp)fUT#;q*Xv{`_o(acrH9*}q;NfCcP@n4T^Z9X3C)kU?3VML_Z04PZv$h7oWM9I?v=|L zX}X zwP?)Wc1t&uNYnFyqusk;S^0~5(TCF&xUTod<&x(e*y&8w0hzy8?~n22;c{|yMUq>& z8Pb6vI2V5x(vkOulX2eLAt zgIn@e2;j&P%Iei8d8V)0``5+zB*ug;_cbGK7N$MiaP<;Uj5bf#9to|%YOlJ+!M^W# zTriW@jL>1!$3UhmK`IzgdJ1_6O}bZ5He?ziS?)=+5BTsMF`0Wg|0T=17+)*^e@2h` zu_T+(_e)+~BWI7n=xXr{x_=wIlRbh5Olv)9Va_SNm7{&}QV9J8DAU4yLz%OoZBbgu z$Zc&C%C*Bp=z=Jh>TonE`RLkJt+(QZWn3&?CNI^XW)7&3;yJ?I1scoF6Pg-uK^|bqZnpHqPPaUASHu zR+Mi(dGtu4X1(}%ATt-H+i-TvdwqnuVZ{lY(jwaL=W$OpS~#mrh4f7h&g4=IY`{|% znLfTRR$~liF(>u~+l1~DPk>9$ykH<5S7B1o{02lPukM=jJbY!pEt80N6#kMWRIw$C zV~Ci&BB1wwUSncAeNetUsR?|*u+b6QQAXWjSg4_}^{)Dx``B$c6@M<3+jyrQ#> zn&chHo0t&ful9IyYuYMLug~nh8y=1R{yoy)TbnXclU1hjM^vb-T zz-_^1-FJL^-HprQ#78kKbqs2LH|xQIk1kwv-QAq#aTD*T9`D77w?H1urwQ;2ym0$4 z#ZUoPy;0}U$jtt2-@n;z4mXr;{>Q}TM-fvdu$LZ2U=Lf*o|}7DcmQfQxTc(r6;4HU zdnVTDQe$JrjxxO7n*yst?{sj|W;tZDq-!V>823~P7KbY@TlokFI=vA4G6A&v9M9!` z9rHiLf_W<11o#y_(V?9F`aA@c)g*-OA)S5$?+vY4fwmRxv-0X?8TjoFH{rOnue(oM zdW1m`UkFE0H0KYg?D-*59t50MB249*KK` zpBgiv@0qtnEAEH(%SBjPqajCi=1kr&TMo!%`)XiF2$|NEXdHA3)tSahI@(7a=<5Ti z+-6Iok)$|ca*>s@rJpZLH!jqxpSZ_%e9=*clCi{DM`@Cb8|D!xvU(FgmPV&fh7;q3 z`W~|qMyppJO|+|)dU%qva-K;QpN_ico?XJn7x#XbFRfj~KV?rj^mKWWMwafU^uFzA zN6Za>s%!Iw@D@K`?E7o+xcWFf_oFibBy({LOMrzeX%dDq0aLQykAHeuRr)}P`_K&1 zOc?C(+)s0i;IKB@pU~1*u#&0n6dR*EIR3W0n-}IB^?aY?Q$-rJ{BRz`KcjR*PRzo9 z_=x{}%BCAVzf>QP=$u`;Ff3#F{ahlA*HHT{;VVD>=&ApBzit0mu<6N{!^p%rSPwJ! zci&$4!W#q^zHA^Dw8hnV9g5!#WU=%nGk-*IJ4;-UntCU2nZtf9S2I&BcE8f;ojPTO zdFsXR{-S(5K^oQv^__07wzGdycsuQZ$k7xshJ%$4P2F6hIKEKQH6}&Nt3;^aD~MkA zW#!;M-xjfp_q(6Ve!5_)6kvZdTXfzeRyU;j^oW{XNJRPFy*v9ygxl(nA(ou@x#rgE z%937$G}rw8?txU=y@LyxV_O8X(Wgmf3{dhp+&FYZzqhT2r}=<6cy)<~*|?j^!ompV zmbP$H{p3}Mi>Jm?OCnBC6U>hO1{b^w!S(7v=LmrZRk|T;*j!A9N3k8Mo|4?pH+bK! z(iT)%uSI-w91td*1(d|Sc(=&GLGxbr6ox;eqn zQ750Dyu0V6uw5~m7a?F!xL;CngTAPpIy_KMl2ORhYtmX6WQ|fLTUi)ty~OgyzQd;F zg6L6P#xF%6Tg2@T1u3aHSsv8F0%FBsJnTsZ6AW0&2O&i#a4OH&Mc%rzNh83=bI70K z%kD3Fb3qQVj&qmm!~@e)TfI@AdOvfrwwUc@81?swm*tM<=kvo_8@qXpa(XG84-0p& zkKPPFEZ(uBRZmU{4}3zseFeh4IM0VU-`}TwgUihXP?uM#Iv-KQc~rT*sH^%Jw&`IoJ0DUflIsvHm=M1*ik z^(GWYO$lYq%oWYU4^JC0EsD&CZs{l^jXU>yxZ7ok-9TQ>Gp8>m;xFW?1SFg~Slu+`rpsOXAPI zbMj?*xmH%P1nQ@Kzl|#Z@LY{Ijr{1u z-VX~Vt{1sTbYL`I-}*Ej;0u0sozq^nHg79bZpbLj0*jt}i^g`#gJWT=7oj>8uiMbQ zCSYqBy6X8?lX>vzaev5=%IZ}}4EQ*;Mf~XHBNv=1&b?zyZ)kADn%b{Zc?V3OV)#vU zufw#&Um{dy&UgO=Fa0-%RU(XLeP1r|iv&hU29`OfulMt6MKo25NplfGs@gtq*Lqw$ z^Z5J~Z_wgLD?39*+q_?+Nw^$ve`avA`b;vK!8gS+NH)e!$sg=)O>kbnQ z<)Obx)90Z3&TbzxMf1%%@;5Notygyb)gn?Vxh`etcYJ=w{W_{>sxf5*&qrEv%wO$6 zEomI*ld~(X)!Uf@WFG$rZCtuwBHf&(S@84ve6$AipT}oq)`GubmhtP^pKtqMM8OW zmJH$GK-~Nd-0N3rg!^fq`9}m#GQD?n#1nCJ%pt3Pzv)+(%2WD6$U$k3$6lO-!yq;? z*f^Knk~m0&wButVivxjQV#ul(`)_kFAKfqCU?dFk7)`g=lj{+G2O7P_TV*izdvs_{`l#fd^Dfh@nGLO^Q{hl9>r;G zzTdw1pp*Tao@Wz}k)Y)hy1%5Mrpx;=vMo(@KgqwlOz3X`u>9npi;f-DoCeB4o);Sc8~bIRzC3_rjKNk1Uaa`qh)6Nh%J z-jyHMOoyk(T=gkHIgh);)+D#c+I=p+#2WA+$xe37w)eNz<2_Jk8=WYP9M4Hjx`@E(^q?7G`f3%jYmbD zzVYn-5#X!M+T5uG^Q142Tyew$NBJ+z`R7>3LvjxSo}J%!ABwq_p7GL=;eyZdNGKS_ zNN9WZ4api&<^O6<*qu3LuLX+i6tR`cUreO?B`J7p5F8yJ6V&*n;TrU?kads zh-u?(hP9!7YW&4M-c{7v0;V3`C4c{we({Q_7NWgR+ry?#jrm4IK(n7l>V zHD^kgB)Q)=5p#u*)H@W6K-mTQQ|7r}g`E>rg^f)?_5QM2@Z#Q)FiM8y7$+G@e7>zJ z@1xaTQT6+#OFid!IF&IbEY5BkdyABJ8uyigmwm@Vmx#IiquZ-l^|@Wr$_7H*K zF>;=TQ|j}!VvrU}F6lHzYY6k~=)T3wt^v(j4FGHPKa zXA@^UU&65`pw0#HSHz$zXvjkvzJxiYOK*-_6~gWa0SsS z1X14S7^;a#a_vru<0PZo(f#KVzE)3byti;pOPuNQmx|$ff!UrhSFGuHAkqH)POrks zp&F#NTG>~|Q8Ch$&u!&+cBWD)jeN*xLDcu`K)1!}*)Oa=zF*S^5)RJ8pA! zl`t3$j0rwQL(h&SHS?;j$Cs*+`{j5I;=L?3sV{#&T(-xo_UAzwuBeBq{&`lli0wq4 zL}?j-K(M0cc1Mp7^ljC{#jl!sO~RCZkoyydhklb|#Ya_1TZImis(mpyPHGW+9QL$g z_fTz&hf&$V{}Z9CIet-LwmNv4;(RIJoLug#8eze64<72+Cfv;QfWG(r+auKal z&7SDYI8{bJ$aP9sd!++kkCE|;P4g8Ch@i?gJF1>C^7=q9>=5FFTZF*Sxq`#~nLKmWW|icgD0O`=AavzO9c0}=h1lA%o0afHtdP;=tP4JD z&soUJpr&`5Y9d8>l+ z;&k}sS-HHVKUQ$^qlVDMz9Ro@@?oBh6;h;Pq#uv?H!W)i9e92-4b?DSJS_by)$^#hrU;GwZG!+ zeFOg^($=a4;|0r(inMlptBosgnt9nQ)o$tE)hVijUHgi!vCNG*GNZ1z_la9hwqcW+ zk^Uj_=X2%xpHueLQ*L1gO#^JZnrKunrR!~9dw(we_cy!qygCQfu3etB8SYB-wdYWA zB$A%6Fy=i_d<-ec>?lFs^3Dc>Ng8M|r#Y5lUm#h)j<$+ZBC*UU(j>3k$T&`dU zeW`0X73;~zDu|_%mhyWKSZ0LUh6BLO9g_b9CzWi%?4vui zimc}_rSRq7#G@r-!u!TRn4p3*m;;9k7!9| zA$8Aq@R$M+rw`nH(y$+H=qG9CmR%2Gw}>vB?IL(rrf@Vq+=sHzmxKJ(4G8iBq2S)y?ou(*;Np z-$~G$KfV(lB7z$og38E!vad~T%B6wrII-^`k+(EoN^5r6EBqVrY_M3Lno~c&4`SJQ zrl$n_=gHhUfgY2l|E(7wamb5Re*I;y>y5>&EB%Bh9;m2$gw|aSXy0vtey|<`#iA;* z+0l4nq3?e4vIYN`hbT2TbyM;M=AoTKCYdF*qQ*NLQQr2?ygGokoW3#1*xp=;|K%@5 z9u)K)pP$xiluwCn*oX)`DF{2Him?s1^Rt8b)GdIqr+k%5#}HoO(z(~`%lpfmr0LF7 z>^+x{+=tf?>vQn@IHn(STNQV50eHCV$J~GM{Ps*MmOtMiOoEL?Gb70s`#h=-Bv(2! zfr9djI;zU{1haDTekRn_JC`6y2Boag7FXQ@CGBj_~i-WG=HLpi1%Tn;8`?<**}9t zT83d5P$~@OmJ7xGdqQx86GjcSNP@Wxt+<6ZA0YY`HCPMVS>kBNGlj@^!)fXlh7OR%IgMTqhA^<5$O5OVd9nD=wVwNTDzU+@0B?-KX- z@Ui@*wHZw@MQ4wJvRidH&JUKl*?+!GF1Gz}2u}dh?&EC`MVhXqYM5cDqAc5E#{7^q z6yZUBhpT} z3I#}{jpFqJ$FsTx>3Y)1-4$tHILaaiaPVHk-5%0h`}J&ML(eFXa_RTwl}=u9VU`pG zwaKw4_qXsC7GjjB>@|MQrDq!|d)a{q@Vug);MT{#xRi944}h>Q#)zpxXQUl>erxb{ z?|@r6yZd-KKzTKJF&sEo_w(0-lB`0jYSh-*trB0fL!)@3!>_gdkwG(dkU_eR>!zN6 zx5*DOLKle$>bnqqhxj2))R&|3lnXyf+|P7}_5g1f3V8|izV;m@@WCRklNmA*xIWDW z@{LDmC!fsgZzB^whLVL67=Fkzf=G>avaj8z2xwMX5q|Ptk29fDO@jM5Q0u>Mr^9+q zTf!RAl~2+^f%l`p`2^gv3?B{sXIN{wd#Ya83L9n{O@`w8c$b8^>r8FR%cl^cS^SbX z5m0FIckPeR`%?FvFY`!kkNeNGDOlukyAJs$Id>4VpHEQBqi@eo#*&8l+RS-g>nR*y z1490wO1#yt?bY~jVbcbPn%r0a1Vm}<5yq?s9@Fj7_Defb4@FM0ISwe|kqk{<1uhz1 z-A8oEO!;o#5GN5D=U8ZX&8cavknfHv{$|kIqrLKu!}Ww$lo z8x%3f5`v4r)2>S{Lpph7yX%%6UA4HBZnR#;=yvV^!2SvH?IqN8(bX0aZB9B}bM|=P z!Oq0K@R^^rNp-Apf`E0AbuKJ(#Oto8?A+h125D{M6;a%}$4?{`YKIGbTr>3%f3pj` zHqbuVGM7wv`}T}$_vLcvxE}(=EZ{7P8(EzK3f^|A^PE7(q{&G+O24D(?@Os{H#z_0 zy3hQ+2L640XY+uM#E0I)>IUKO3GC{nD9 zV8YOT0SpXO)3^<}T889hxLjC*|Z zZXM@y>L}K)fQ9a%dv1eL=$&Z2qxXqsa36PX$W?vnuR5m~Sjvp2dD9$3Rr9QmSEeN? zPKBryP^kV(Sszd#{LE`s4_I!cAy8o*{0v?{VAx(x{Dnh(V!tMJv^vF1yHFqJx-4{O zyGgUKxU8U%;K`?Fg!vMGS^N2mG#nJpLxbF-<#^ciGGFVMFvMNcDhwYe&@Z8QIp6jD z@fFYPY^)dgHDrge+J0RBVFe-Bla-`T&~j0Ebk2SgSkDkqDN3rpN%F2>hxHmQ)4E(6 zux`tN5gvX702t09rArVKxk%*nqRP&2$n4hqg2{T%`qR2>Pm8)e?)35d32V{K^dNvr zZTs8u0%A5Fi^<6P_ly~gpq6b}m~>(9_?8&OvKJmEW_#*2Z1FfZHpY|UU*p>FK5C(A zo+PHFIYo>ftTul(nAtljpYLs?5@R_I{ml*ARt%mLsk7^Wh1&WpJQNyoqywbX_x&ee zH`Se9y_*Ivh|NS{tC0`q)Xuk8tPm+As#k{MNX4nJNzmv3&R-R%?jGWjAvRap@t_B1 zon`rP%r+De!Mynt5Z#=R!4UhvfK5R1IHr&Mm#GKCd8(f~X+Pd-o9-W1r7f63!kgb4 zCXAFbr25rLLi~j=l%~VT%eD99YjYo%baESaFAzDJ6GlqWri20!X}^Nc4SX(RwWY>% z66kk}@~uyew&aX@{?25(?u#PU(x)D9%G3MqQ>#`puyXqIdEYhK>-xkV90k}2WDo}N z|8(5}+ZSU<5s)pkW0AIK8E|Sh)`pD>Ub5B?ai@GpIOkDPvWIIP-<$ZVm2LbpEC_L| z>vH>DPf{w~CDNl9_o1yOy4om7fv|eJ&!33lsB{Rn+jA0l_f^BF;xr4<$%&Z2zPuSV zDb7FNI8*$B9)0qTWGIOWjt2knA&q`?@`6#5>pn?1k#1igm*vx5kC+Xkks`1RnkPyB zR&2ded&qvxa!Hmw9+XFrFsUO4AWeF|@392Y%q_DX$$izVOM6n|9O(kn@r0BXS-V3` zQ4YlaZlu57OSu0@%nz>Dx1dW36NUYD=(LT2fxExH3(Nu2J%fk>_S7AIo zwU@O=0QJ-CzBOwb_P4~23RU!OPl6?ui_c`&-5KK0iNL%<8+W?NVgtn#9RBQo{=VnW zm@x?>b^pw}cs!GCAyanRH|>ozVaxZ2Jn--7O8S2m2-{2Uw$Azr(gzK$pQ6D=^=pweu0dE&6!7ZoZQ$Db6ElXN-Mf zf0-sJ1FILn{Oqx{e!a6=*v;B8g!4hxx2Mzag+;-nOsXFN6SIqs$jiZ}Z+7-)Tm0uR zapJ!O1)rgdvYIu*LbHQHAzu#)D{9JQ;q0ZSJy)rC?oLa7f~nQPd$pOXtw~-??h_Rr z@&J*Q`1PE71V0jC6q|dqpwtDM||AOm9UqB%n+)GLiaNa&lo4R*~3zWa!<2TJAlyR z9lkh4`=5`$*}`ghI#@$@5_B|pWGSI}fiHNoxa^m&|5#ft{ibDQr%AABK&Y}V!8U8l z(xQ8!F2nW_xE+D5bAa>B0%S26hJL&SwEj3p7ACK3ADP?o@$tm_Gk{+EeKb#3Ln^#C z2t)UX%p6uq%BE@jC+LYsZ2;4$`E|8-SI-Nnp6-ql!9JH7!2mpJ{*^XA4)5KSh_0|M zE{iBJ4TpNtK`m&UEQ_A!EPz>$OSc}A5tGml{JfteR0M+hI?kV>ndEZsAJy%plCT{U z`vUi>*@p(pH8b^YMHX5)m*q$4pdbIh8*}j7<1$|+0NE{`2VQGbuS@pzVEfzyr@to; z$_V-EbBb@2UP271{1u{35r#kdtwTK>Yi&nhajFxQgS` z1&HxDU9d3c;rXKAMR`)V2KLbS^%nHT6@Rkjat}ckWbIE&y`e5NheN?`k8mPte+9HA zYe*u@@y;7SU^;P&)&c&>7XyVZt$|32^cPawRH;l8mH|gRSj@eNn$u-*F?9 ziggn2muhzCD^1>~$HzR5)I1)%0luCLe<7rE=3UU+Z9~<@q>!8rTuo+}j4|vOYlJsg zkYrI0u9`KTn6nN-E{4)EN7uugje=sSsS?Fg!f9GJbv_eOTXLQE#S7t#9#BFGz(>jX`5Zp2pD?4mfuJs z_juDce+F=2^))_z_|~==n|(te^+k{UGg`Q(&zLylCIbPRJ~+d(iOQxeF_-*AlUQLZ{Fj_R-Y`fHEyDRGu6F z6B1zvgztEJP36dZpFk(RFj(cW;nso`*2Ub{C^AoZgUEi7SS&wXDfb9IW*vR=wl2RM z6!)OTl%hS~2M1lGh_wjPfv-!}LP@djsc?v&1R6YL(VYJ3h<^2km`t@^v-ckQoI_hJ zlK={MZt*4jc;#-Hr)`ibwQBV>{|QvfXS(X`nY9_2K9XnEU*bHqFUxS$PD4}PB>sqp zi*rr8qV^MN_VG^~da$f6uV-YfZhjZ8^?`m7(Vkwqk+d(j_?M<~%RGsDaH0q2uO6e- zKYjbWC)>mONZx-}-eD|esqIjK>~ntqoDSw?k9*{F5y;#9^At|w_VHZ8Jw|2Qg5q*p z&b+?uJMoWO`_&I|a9FbYjqk&gWrSR*TQ$ASjcANRWFWS`-UV;=`B{7PVsjkN^&7G@ zw#!=Y4|fe8)mt%LN_;D8ZJ!UB0a^?19~% z_?iW=1%UwV)4iV;c7$Zm!`yGewsHMli<89n2Km%yuOj3EmSzR{Kai$LARdbd-}<7%;!F>B*NbbU{2g zI@fNQ-INbUs-3NuUSWO5tf=j+Z3L*FB$e_`AyMo{D@~fkocixYCTJ&| z4aAuY+ZK)Ozgsbv_uEyR(U>|oj_vK?3uk2uLwudIKHOHANf=E*x|Apg{wvCa77`aJ z3L_GCzC+tlOU^LYh+%vN6}9`C`J4$!qOL^_ixf|S~lGha0bxH9#7 zg5{cgUr-v4DJ-J5Z_5sBJ?8uOwSWo1V9J|8}+Sqpp^#WppOjx?6_+MgOzCENa*vU&4 z%4gL?eBJlQq6Fofro`@fXe@Tf&4k$TDjIQQR^<=`!dq09Tj(c;Wl1tu(kV1jSehZb z2bWs^W><9KRVQ5ez31Dw&Az5ejVG#t9Ko6OYNso6TYo9Un|XDZxQ4^;=ji2$wA-ZQ z)jgu3U@{{1Upbae&hxf>7u7Pa_wS_uqEEcZfK`=K)2`3>+w3yp(!!e!<+N7|gDC;g z6m;Z@vHSa325Beo5M9qd47J^ znvBYl`>MjjAnWEHE9;o(4uh>&Zb)U=H|C4}Ft4?8Eq_<0-hTH%-PiKcO_FAN8t>O0 zK&X|ky?@?)yvn)v@uU3?8?L8~hsV5nK(ZY#tfA`SLfmrS8VtZ|$)9uQzy6U#3z2zf zT)ieMb}uPyOaEFu^XICp`!(}7pdLB0`V;`QK924(I|m}U!D2EL{s84IYo4U(ZPSPN zqa@jz-^cb7U9ukAxTOE+gL8eKOL(@kgp2c1-q*)7KVHQp8M-wLo{l6utAeiPEz1vZ z%R&q37~x@C9u1m3O3n$ShRKbns;4`5o|G;{Oi z(z~&sArlb_q%~#*c3CNrwdct>J+!iN6NTdh{e|n3yX+vrH<)zWi&D{_#~WIlQ+rn0 zdkFh-1|<~`@qVv(p$~HwN6=5Hk4AIwV@K9Z;ebm-DZh)AUN12? ziDYe(-1MU&^Hdb5O&y-m6NY4jie?4?*7guQ+qOB=oF9NZ<}_bd?t|c-h|HsJ#7WzO ztz}G(-WxvS=Om0ziX~hEArs-Qenz|4Y53!mBe=2cr?Uoco^!cM{wVchb6cxr9&`SF zbayx+;GAz2Z2a_TZY$IU%b)E&qTfSOFm>QIHqz4yku6jr96CD56<~S$v&<~&F4FfqD6R7@=WPPTQTKhh0VaJkI&hmeGW)9O^NHG*V-T-`%X1&pRl9Cc z^7Wtl3bW4=6om3I9;YZK8jS>Tf6o8~Ml({k-YvMLkwye7dFz$0a|UW(*r(fzXO|bt zJ4o-cG!LH#&I?xvV5c!o44$H)sn@W z(G{x%*UOjUNf+65R-KEhd5KkFY;I7<^58A_p#G~h#_WX0Tp1uT8~8byib_p{xcVc z?CZN341xbfHU_AD+Q_YYoK8BpgudvEQ9AiQ##*v`B@xh81egnG*J8NDofmv8HGCj1 zmfg|4J=Y~)zt8-#g@m}z{cwXWVbBThM+t9G z7~;in4-)r?sv5`?)Vfe58dgJ1EiP}u&%XAcCkfnTGf6acp7yalZ%;;@#3paw&iHBI z_Ikaxug^WC&)|5S0wFk={;%z#ms`&t)N&s#REJ$E;Z&#cA7akCZ#`M`<3pPv1ab3F zLY3L(L!nr>y&dweiHJIAZ{b#7gEi!Zj1?dL9(+>Cag>Rt7u~_151#MRu{x^t9+Wz& zC@h^evN|}A?k{yIX<;;2crXiK4^}E+qeO8m40skBU3}j|T*`A|@015`4Ji?d-13}o znuqRZ^mzTrkFL$-bc;6wrd+9dOSYG-z65Id;IsS5T=eC44t~#4%CoT&i_ED`rJT2= zP?aU?-d^%5b@b^-KDV?L0=R%W`+_pYH(%2haQGey{S?3AEZ%-c5v3q$S|CX)CMQBm z1;$yj28_P0F~v(7L1^V?Y6eq6D!YY@c9sJB^}F*Kd;1-}qm{umqY&-H$~(S)K>Ei004aKA*M7_$yaPuSO~8 z2~S5tOac+uptn>e_0oCzj5_@j7rr<^sRK(pu1W$_qn0XuYx_u#XoGQ8)m@|1Jkk4u zQx(<+{NCeVZo_+QG)UQ-@}nny6=`Ij^raZd%J#*AhnJx7XHcgkV{3@!O%P){&-=v~ z-?8p*{LFO;LX`JYtUzhnj$&~vv37YkIKWu7=|s`va`g$TinH@;p9UGJ{M@_RTB~Fl z`WQ2+u@~`Wec$Gw6M#bm{e}AVKiIf`s6IVw;JtyTBix(QK2Qo7I4T@S;mW0Ubc=O| zaMD4tCSlSTzbGBriha_QJx!c1dg+UYJ-;#v9nD32Y_~>%qL_RC%Oq!QW3-Lc)Rg`( zTVFUt?>Hadxx792n)ccivf%k1aGYPq5UwPGGslMtg!bV+!KQ^SNHBBx+^nincxOFR z(a~2Luf)bd5E>ujyFW~lyAQQ1?JY@Ue@eqzSGMoel(~vd>^Hw?`B6l76?OIpvoq35 zTJi=%o|gb=>_cEDll~iKNRJ3B_!u}6pPnayi1)C#rg(HZNWIdE5VMa@B)RG0YmU2# z`q+^);17~st5S0Y;bJG;$~NJrWWuC*CxI!Jkjq9F8(5I#g#Hgo)vQ0lCSG7dZy&P) zadv7+~lM7pTBp;ZIXa&`o}P1y+ZPNe_o)h2EaUd*(=?J!!gqU3w_AbndNT z!sZxXoMmFMKg%t(q_68B|9CCcqJi-f{XI#?3;Bh%iT3%q#a20+{7}LW0X6If4^<8I zyCo{sA7v4>y@<*UhZWb!;ixYmNw5>8zr_*S9gwSd$5AS~xA229mMN0Um)yBy)SkwaDilRiO3xf}s5 z9U4fkE)Q3AptjRJgiFS$6vHzrghJJ2Jtt^xm2`jw_fvl_{VZHAi!dwtso;^DfYVH) z8b)Rdx$T?c0t(_mg!SmE`6e-_G2lZ!Z0S#vMUp(XM;r`^`r``aOxy%^z1#kR!2=PX z7)sTop5&JPKw`?#_XXObV)JZ}hRX2AMdAbF--Y3Py*H93O7y28W=?Vz54j+XM<_KI zdh(L>O@q`cWy1-r}kNfp|zi-P7>7f=% zY-dglik|7=s0wWQ0RR~2DAt#$uDDmI44(L>hlj(rx0p5|AAldX&DIar@75oe>C$rR zy;(>y{en6>Cl!V61UWp$^-xYeSEt)u|D@a``N3}rD(4!$g~`)`@Jb1I=!F9dEMEZx zG&fSB8T2id;*GX?%0}jI#b;= zi%fx<;O)~78B8L7`^dWyBvAOnff>1h;owx;80X|z2dDFMvu>C#uE8h~uRc6IP0|ls z9HL9o?|seF`vOvSH5g$_1XLgH0cVW1NzAv=aD2z6vm_3Chq7+-)GsQObs<&hpnlmr zp(5^=<3%X+bP_t`OfU}=n)Bs!JzW&~P6{}b`9npj|2p_e;R`CyJJ_l>9C#Zj8j*1U zTi^Y<`H4A0bj%QUfg#BQp^onEx&jf6Hwr{t(3$~TO|L4C&tLa(=8}4_y``pb^%1w-VfxHK7 ztyrt+X4?XW4q7eh+2}i9lK04wE%a!}@2~pUXG0E6hVd5rivq$Sc=gx3&QR7vm;ph5 zP31m>_0T8g>DiWbWpmya%F=i@vKnU!$DX!6@xY>GRxgz$fv=uaT=X_WKAt5tGbGZ% zlQDY2!!0jq>*&6s?Q2x$&c897I!qf05thdu5hzXam%Vi5R1kaq0u<%+9ADVu5l=sc zV=zD`B3ZXNkpuR4PN(n5j8U=nlN?HuW}AYB%Wnk*F;X1#EKTU5%lLra9Csxd~}JaFy$l$)c4z zS0F|Jmx>7TdQtb2`8u~QaZb4rfitT&i;!{OD>3`#^Y=teV3AQyxSCg0nA->*Ue;TS zq3FJaX>o-^(muzwQ6ioP>%jVxc>7%9{9Zqw;#O?EKw*PGo_D!Kb{xFM@AV^SpJIc^ z9k7alzJ?t=9yw%NZb3J(fEkTke}0)4+5z?W)m6pmb}}UG&?~?pPAycm+3a)wxrcel z`Y?QcJUBJzZpApqJ2kLL09j~gWZ_!@yjQ65q?3brb=m|Ld*8h@CB3^f%|lyp_O0$E zdG3K{T>RMhhnoq8I(!?r7cw^)9>{62NH^_KvgQnwlEXutw~SJc3{41AfT?Ef`C(^m zpM@u{!*Q0!s=JS5ue=fLGxE5lH5$&Nch2J%B&;NRKQD!_(zJ&2$ny)It*>B&mtS%= zP~%44@?u_pllu>Qcc`01(|(%Mp}ZbPM%|C^F--fetAe^6sHDoK$36Yzz)o{7Hi5e@ zzTn~9DxLIV;Y!0{QhFaJIIC=4{bzJ=>&JdyzN9-~_X~`se*<-xZ&dLME9qq1In}_j z61i?!z7bi@IFK7VPPrn_yPOkGhLF!#mdkSK+^Fr<7dD-tx@m`692%}db} zBbu)UdcQ8~a9J*^eHOE8wLi&uS=LdRsjfQ}KkcCJ$WT!w;_CphQsk$Y1(I`X)Ys}5 zrz$AEVerfUZ%qV`_4g>&@;(pn8M=LTVX}^gy{qEEy zI}V43|I~}WAxFSZI0Es!ew9|hFYr{2e`m>yE=<6qKIhtKS|f3g4gWTNehsM&8S%b2 z!nZOe)6Qz;A^V3CZsdH!ywm5V{*L>aA@O%o4gZQ~dj`Kh?)n2*(XE>g3zHh>_MuHB zKL&wSMGkMYMgqWNG6BXo(w7f2E5}7Edyw5K?l^b8e&&IjI<2r>xShy#+k>SzDFj-x z`}2|AfV?$<5Xxrnx9PrAB@Xl;QezqBCpFBs{jpbd%Fb4xy!yxOqWpYI8}DIf`4CXo zASUh$R%<=I@KW~|-i4*pU!!Y}G=+<}YJWQL0{W;g;U|KG0(M22Kj+kN!HYIEa;3$l zf1VBOY*1dylTR8nXepm#`o)ip+ex%zJIq5_+z^iMXUkX9NAw+;oF`2PIyzK%{>J6i zilOz%03Dq?k=066tvj%F#f7n&EX;_(g%GL&=$&gyKaWUiOExlkKGY zWN8(=sBL$RxqwjzKB);;@!)=Np-3r(kQ-_rsne@KE#m!Ob4Gy>!b|TxGZsO1&Wz94 zjPakh#W8fZLR3#k{L0guxLxKf&&%v&6oxreYoycu#go%HOt5TA=~YejDS2eJ8x-x^ zR#+9ygUoeDeKOi3M%Ff6J=E9Cf%aC$9<1DWqH9%o;!IpaC80K$qwx^$b&w&7*JZAy z3wZ;IrZufEO-&D$1?KOw>|hdDw)q*nAIO(!13kbpe?219fSTI;yykeJ<|@Ay1z52V zmI)+utIaDWiliUk0r$TBrLozknojda58CTyN8LT6(V3rp2wE#wp-bN*R#(7&S<`gQ-Sl)gxj8el8nrnD;uK^mS+7D7T_S_vfbdha z#e$L{Z)sf#MUO}O8W_XJht?_l9^SO&T~p_Hs3AeF+X)$~+q^}9AZSyk?b|+L_^i2j zte#8c_wl#DBbT)Kc$jH0tkON(IJI2$1%9)!rEeQ^ZwXz+SV~4AlluBrx#EOo)KYS7 zt69=|JAPE^_++Dd(4MU_vWLB3M)i;udM4^1Bmro5??g#X;DC&zj{AhE+w-c~v= z46nQ3e5oK2Vv6J0xHU=9H^Dt-IpDZj2H?+J-xiK}Q38K^rQG}+S^!x0j3&Qyb`0%J zsZcojK#_=kr)7OZS)4cnUTTrN;;Uc39u!_{ zST7{Nk!3}elPA}FB?L;RWV5A_t6y^NdG;Fx7O#V-AA3%WMaVXy1QeOF;w6W+q~-S+ zh!#sa?HfX;6dC)b>%~hC)FPqc+P2ED*YIvTa*{((2x^QzF6o8)`1KEj2wjhD_j(tI zF@T)e+bh^r&5w|$Wg}leLmHb&xo?rDi6Q~5`7r2OB!o@#%SZ5lY=c4a_1j+euqJv= z=SPJyXE2|%XZP4t@&u^=^QY95*;lsl`8`h`!h_pNY+7g2I;z@76pe(jM}1^Oovxe- zjQY`Y4F6)#?eNMs2lm5#Ki>qj_MPYyNQAa;{S#Oa@FIV4U&Kwt4Gvb#<>kE+H9BZF z4Z?4*1)l+;41yFY^bPod_Esy>b;?Pc=_4x(>QmbjUsKeK)-{=K3XWRc#UI+O^%?7c zy}co}^y4JXtjX)1D&#?Wcl!hNPA(eY)a%sGuWf8!9rVGHo_#oicSNeKm!A>e(Pcs> zYVd>CEMdwB^HZuzYSO2^kRJPV+KW`D`%KenQbq_RL zE~GELF{a^FHu3l1o%gUH-ZMcdtT`T#htbT3%<4aPPqMIo z0rvD_eT#jhLQS*D7iNm2)Mok_!~K-}T-K->7aeOxd^_rgS8eVOedc_D<`j?ZtHPfKgYjV0?;pio^Hmk?(%r_V95R62ljS{%<}{g zZ7KZ`+N6}SlWO0t_M(!+>F432DZu#jRYu) zEOiMvt@TdaotU7*!nx923A)Sc^#Ro%G~ntQ9?qu<9W(d-0F0QE{mBHn&YZC!NaXZh2`3i>{E zm8U|Hc#wq9E6y8gpx4r?uZKN-*cL}Rz2MD#F8Oo)XCV1UEz47Lwr;_2gEhS*wA}+I zd0kS_LHM?dA4jL=xV7nFjD=HGZn*0CCci{fF7icW1I$HL_s7RUL15)`J0?DrvRv8t-3i=M=rQb~WOp$4ZRAWnj{#AR`@A->_DSF58&q$N z{DXB;#JG$>s=Y~;#P2BeZMY)ORj^UNu@OC9$?v;(zh68BZJoh)8y(6)a*E@~@~F*w zzMaBo6NOM228>N zcEzBu-QdYh4G$XpO#<7oT!&17;BJ{o1G?r}+P3YvlY`(JB$G4`wZQ{m>g{p73a zO2S`o#2eu={LN)F8n$OF?31oJ?czayy0I$#av%ou@Hq;vM1lcR1ihY4G)QAg%$$oY zJ_}pIeawo1C)5DyU~2`zH%3z>b%^iWznebo7ouK&M}`7MH{AsPOI0<(mlCoTJvxowU#|LU|)-mifCg%0N@DL+bqnT}oQz=2T7Jyns zY>^5860vx^lL748%f}-|9TBonXnvd|Mm!UjSMfasP)}=}!Kb*Xn*H_07b9i6?#buq z%Fx;Wn49OYM*5{+)!R$?jzgp<1Yy$O()X@2{VTuc+sg(}a4%_VSKKlwSk#fG;_Dmi z+7f#8w_W5~vdqWH6d0OHvHU`ie-_VIFWF$wo!{4xGgrwH4D@Y*4onCiGD#d{$8EUd z;N66Bf)%7h*edl5nzA@PqO5gcT%$SPwF8^UR5B{RPpL&W4x-02fnA3&?6yO4y2m?J zp2g~SJ^4R5Fgj2&rfl)>??-(hqZBi+9-nZ1*lPPQuY%rEe#Rq?)# z`~y$cgKboMMu+H=5(zwKLcnO)#~zx~gAT7&ZwA^9fHXY9=xv*iuwTl`x_E2hJ6(Nt z8}D%^yyw>j&<@3*yn)7V`O@xIW~*?UuurxKxu>BTF z%ANZpr@x#klabw1Q@Ky7-t#keOQq2xb0|$<9g}Oc2$;85N$C5DER{!MtA9X0y-yyF zfalfYVaVBryQUoAGPE|)KHZg5*oQd_)L1^{aEtg{#qZ=zneSvhP8mA&4xoMz zaJ*7h5aL(<5IhXm22*}=iV|FJl>Dg9Nt?4P?~RK2R;Ch3eJ-{Wl$Fmm&YkEH-}AL{wVmEFFd!#hfCTS5)qbb$AO z0~5p4qj3*@3=;yI+%e12R+yl0`Zq^wKCsFxYs%P{Kum_xR^Q&w`)thNR6v*rS@57C z0#5{f(N`CrHICPTkx2TjNhs1tzCo|yCPhJc;V&=>RHr6SPaeIW%J<7=gLm`NVys`U z_z;>aeUyY_^q#k`yLl&SE++mVUY@{=6YBU1`Fn=$PQy)%d^t>P;9g$kJM0Yla$SPl z0h8eQIYRRj=P^Eqb7Q^F_wv?i?7q1YOIDUwKfbebE_LU}X~LF;%az~r$jCRxW6p1A z=Z0L##vsQUIfqUe2_fKL(9cwozlui61j8dBNYhwy=*spFDvH(Qy;y6h%BsiVj>*9y zo%RQS!`1oF&eH*9qWj$-5fA`_n$`K?+^&nl0AcjC3Gf=f!Dx%?u)(x#JpV{CcOT>C z@)VU^r$0%Rv-6E!)k9VFM@#&E*W|MJv7P{B|Nb3WIlqIMAc7AG@wtytmhZrOrDn=8 zahrNuFq7_hzMUcM(t(PS*W7sj?W1tYQeE%nNQ}b2I`A<<9XN&`cmu9fN>wpUo;E0N zr}4-B8OQNZz_O_x4VeqeUU?12OJ|};ZWvNUE7970VN+XupAsH5d?q022}9ZN65kH$ z_~za__heW9mEP75T=_{|ULO8N54UpEwwvLgW2K_e2thwo`CvY^q6|;GU&n(4P8sUC zQm;HZV96DfvapMsK6l1=(#a#p_J`<#CqbQ+!;oDVfKeeB=G#E^Jibf;DXwru&?>px z!zTZhB%HX%wP6Ie7UNNtBcm3HcW8b{^UHa8utBAhsVSq+(JYfpNVdN$w zapAWW>x@aqpoNa7rYp!b?;_leXw`>7Yoyw&1|PoPABFge=LLR)Ff}f+GbC%Q<8L!< zLY-j=aDwY(U_8d&^aGPfU!B%U>+@JL-mjm>dv(2Ja<{W7%vWp-^mn{mCJ~BZ&U+#S z;Y5YE>-{w`cNd3m!{n6DN%?tli3&a+)O%sOdxeI*QvPIGa?7K4D7h#JL&(k0lvkbk zFNfRWhsi=#`W{Kz(9s?RjE{%?l_fX`=d1nR^TuSl2tbVwacCSPe(-3jK}{?bwhn3p zbE|c4cvdpJqHo|T@Q5J{6?SKQcx+eTlGOy?BgsFgfnWEM8j&nH0QDMnqc_T})pqAW z5Z7zDL=f2NPXXbLZC}` z`yB5HlOnuzk;2HqxMm8|j7uxJbs&l@x7SWNOa>Y+o}`Z7bC70&3v+os%Zt@YvpS#e zfM&wBX`>AH5=Cpg+H$}_@W29@99)e-eMD29vwswej=exts99 z83K0tDWE*^#0Zy_A2tvu;(Di7?U3wfXm;xVo>2SzgevNE6)2*a+*<0j7D5Az1%Ch3 zKKhl@A}|J^q$9%SeZPSggzLP8U}N?teBIkOeTlFV;=kkjqc2r_;Hwk0RuCC?%JJS0 z&nK$6RInaCc&|fW+D`YQu~i#UXV6jku$-jsviwr1Pnk+>1)D6x?I-udXaIc%+y}IN zaCP$jUtYD0YPpxGTTDMTi%vOyv|k zjrHNquo5|I$S=2)LhjHRLeU(jq}+?PpVMsv@7`PfEM@L8@zpP{5{^KMB-AksdVvDKmloW8Ox}qT zNs=8{ZEu1_G4rjv=q4R$l_<66eC8cEW!p9M68!n`xrp8679Q%}YDXO1pDe34YO))E z%;A;qUC^1Q{F4>Ah;#V$St_TcC;@!Pw{!HP^CGc_oV)PgM^JW(1FRF;@#V+rx#cc@ zQjq`_L`=M!o~?p;Ja^CeXHU~Io@ppMeovqXzx+v3QfM(A~^CE@s!9qb{fS8XX>| zOS8V(P1O9HZ`SeAj(mHuv`;IUnny4Upj^Ko{D||Hl{pDQuY`F5nOy;l2}DAO#IX4uSXTeM{IRTr#0xoRP-)ftgOC@F9QOBXnA*S% z(@AxHrrP8=BbPiEm1e&Jq;K+Z0r_<>jy2cV$2^ARm&vV9bF?L4BVJ#j3Q@mOMZsTb z3OC9)QW{!LW3RVoJAex%F83Ib27z-a=0Ej{$#I$G^w;}i$5(J*pIK%U^tfq-@PLQn zq(l#1ds6y!&AJY}8-XDYqR>G%jQs?xrfbw5rKIYUhf{F@v&5%N-1IZ^S?lNyYo~Mj z|h)f;U9!V6=RC1Uh}z&0~BNmDiKS zVfPP~`^sh+gR%l6gV#zWi^+!Hv-{xf|Acd~9`k&|da>r)e6$3{8&YAqgk!Bvu1(0l z?jACP7&=_zXXDQ{Gz>s5nEQ=dEce>Hhm^F3E8i6Gx@PLVJ{#KHKHB@qC7G;6i4U*c z-zY>JTITaL!G;lt0o`iQos35-4lAjp_p8WV(2jw6WsE3~kzc`=x?NW^X>$7g6`>=(E9x2!-}mjgN19XikufyJUZL zJ7OiE(}aaV`icrP;2dr!-EP~H(A!?EIKYg6{$nbt+nWuT#$>c{IzS9`C7EJExZW<` z=s2{MsFT&1fyTJEQl`irXBO}QGNnf`7`dm6jU2jz5vUKa$~KBbg#>ukTP|k-j)f`< zehqb&i^IrroIj6rO484W3-EHBsf1VeltrZNfL8wPU=0IgINw)KOpJ z59N?ka<#J1iPqVih9AmRhIvXJF)7-gRj^eeaocmRjf3c!ME`nhe6-EK6Drw)W$08w zwH*A}bN!1p>Y7;g%kAe7ggRXNFQiYw3Ms}3mVA};e&mJ@c7JSruLo4y8n)+K-M_rn zYjw^7D;D=SDtC@tB)`3zZVy8vOW64XTmj&Nxda2(As6x`!yMiV|#W?ZAL0L^p z?(~Tleh2iBqVu)upUa!1X81+0V}5Hx(^B^6XL?&cDD5(I*D_;kOdI4@@`XYSsz<-+ z`6Kr7LSim?WyqsspNct1ykfW>8Uf))q8@$$rxhHH+(3ql_L;R*Lsbq-IMK!>S)U+u zuHkw=Hr?j{8_%(*giFc}S${im!uBY8-vdQ98zrC0Zed6S$DHrQoN_?)h*}ZlHv0uiMX|B~OSS_9sftKcw56$y?PGcjjoE2z=!{rlwE-KDn zE?r0ow%o24e{Hy~Hs~WVCJ3KeA!eZ*WG^Z^UOR61Th6~wA)Vh3(KpIRn-q6Lj1x5s zsw+5rssA}2J*KJj-k#$9NupvO+#e2$+YWakyg>hL|5^ib@Nyf!cx7nZ<$T`*>;?FU z&xfJ=eeja3eEqfd>nIQH`#m*wbfS)NrH_GQ=SkRGopjqy?YA=#V8{V~ae98FjPtNeoe9`4gWetN#R=J#2dI%wK_-yS7paeRnKb5H(t z@R!EuJ~mX;Jj2Q+#MlJm+kXNXr}V?Ly|xA{1@cT?Rhk=}^xH_cx+*T6CTAx;+lNcV zEBD9t()(onPp$Pb_N*K&k~LE150sYq_PdAn`f(@(jrOD->96%Tyz>h~-nnpk z&rBp;d5td>+3s}x@`On2L%Lx`Nr%Pd$_yK+#NZG&YF?dd`HB(z%uomVLA3FU($D2_ z7s`9fHjQp%zOPl-&Y?SfqI-@4B1n|M&fAlP(q=@*Y4~~}4-d=x|?hsdF zAf!AN1onfn<sb{dIko=SFnT;9bm zk$Z}1ROnk>Bg=z^Rhqc4+P(LJx3)BDMR*^+&%6XmzH$}Gzwv_FRcv!EL~$T@k+S-TA=JOx{N<$M6e`m!Df%yhp z07x)F)kIlDfBWZ$^aGj!gkkyK&p@CR7+TWc)Gaqg58xE*_C15smj%^7nyza}Q7wx8 zl4N+4BuWy=z9~UKf<%R{zl)x_RTH{xMOrxf?687nkh%2!p5P%2o2}QbToAq@CyLac z-cK>HG!tIBari_Sj(su=|XQ)RH_$h&|j;g&5 z%c~bXW&hCKLzZtpXzP_7MDKx)$mm#mG}G(LkhBhu#G`}Udizm&URJ+ky86shX-~CK z?PKIU^#W@<(zPyCM$L)tZ!l(qRE5k59lg_;hPmWJ8^vrmMdP}4Cl1Vvw{SlTFc+}d z{e!=<=Lfr(S_&Ss5IN^nJ{_M?wKtU6=~?;;i?66W^P_aXE}9mm1#@XXY)%}hi_Bt_ z3EividC~aS?{bUlstV1^clh&t%r(N@7HV&HB}ETq!IPYX_r(Uo>>FI3OIyla(Kx_( zKy;FG`TOhpB7?$AH(6Z|cojrs_TE6Aq51A$jG5mb7OY1&UVl8HD|dtTT^w7KYS#QKr1l#(L$=np!cTI{Em$wdKyQxS6!8oQzs#K(g-z z2$pePqRC@PZ#v5)g+V%MS5529K7XI{ExEON{AV~;?@N-jp5$OfhYkHs52=xh$7XIK zY^J#PdMm&+mdT^+j1!?cyZe*DDrS7Qb!NI}58<)g`YFQ7_mTY{%^$~&hE|BD?NAgY z_w-b_f$_`C?DGJ%%ukSD-2$ zj0wF${N^eMS8en&c)u~liSqn!TTjt zy!y@hTG3h_mNyC-LQBa2GvaoTgjQufuT<3v9nOG7uv*Lb3gwflmTGuHrs;VsKjmBIfuVZafc|}Td_G@K9qq?m_S%6RGvp%dTBYuo2Aj&^8+^cB$G2JLvEf*s1SNs4CTVgnD zKR7YNETU3#W$4%$8x5T8c@iV*Kd^AB0NNW-v&@t3O$FI3q3K#P-(b-zp2%Fn&ln-KLh{`?}GXK^Uu5jU=Y=@NNLjwhmL~SE3?f=LPq_7DJ2yf2Tk7KTkQ*@Z9ePtEn=St zAo>7K@h28h{_0n;P-zhH6=~NIro6oc%)D;%t*?yFoBQIv6ZaT4AN4)++_%>Kmhvw$ z;|DCWJ3>HkS4_+GJ>rHIdoPo4l=_RSlma~Vyz!K9AHQd~$e;H6=M;En=1mH;6&xDq zb>X25o4rxn=wz#6CCtVBHe?E&sm^t_WjcG zk6Cr>!4_X}qM|#adS|4?iUO7P2b*P-Ak_!IdGhZX?U8sP{rq`_kdYUkks`0 zj=B=+#+hc#$LkL#Rnm_0>BKMD_Y`FIx0)5-s_T7I<41+gX*sATs0*{=6OFm(6?hMT z9p?lkEYyJ@{*2(9mOwYbzAJ?Xlu#2-4Omf48L_ZG7@1g!7GvmVDlM47-B@wf5D#JB zk7+HGYaptD>>g- zs8zquujeN-7yJ1h`*G1a7)oz`Cl>J@pHWx0Ta2+8`yAe#SRoLr9Z|Xq2E*jlO;QNZ z6ft`~oXk6LO?paku6$uNXe|j6R15a2hFaLZm3yZJMYQX)uxTpY72>lcp?ia24DpGO09^WPh z@AUez$hjqD!rer_DN?ahsH%fa>`bw`Nk!0UDnwWLoNuNKCqKyRfkN=iP8ke4Y5m?} zLb#vhw3csFglKdY|GNzS&&K8|pGd`{tA zUz*SM##^Wlc285E(0w6<&z7L7QhR4UEC#pU_}qBkAw_nAN_IYjVTB+1PDWCWqK$73;otaZam z+wX59@u9VnDSaiqyF2S^qa>gEJ<>n;;Kg36C{9gS2v7sO3e!+4FX^VpT%fthW6aWh znbZOaj#a9DE+-w-O}+0CU%p4#lhWI z$MP%h^59s$*v^Z6F0DGW7-iq?MxQ%;zI3)+_5L$a;~|IHMq0kTJsI%&z_t49BVAc} zyrC~+>2@*THVaJ&}WyGwAbSY!DUmXWd1p;3u{V&e3;vXWc2BzGvDTa_t<3#===-%O%> zwOv}z!lCrl+50H%zIFED4TuIwJyum5cA)6_8*@3johT>j3sGJ)9=7da(%AIwm0~R@ z0Q)U+jeQ4vzTdL$jSA1#@_nU^TwJc4ld&vpCcN zozHnx7MYcLn;&OBcNdOhe!l`if>tYU2jnel+SUb(9`E&~&??Oib;EzBw4!ELs2MQo zt_<-tROM}P*|vJuY5x#Bh)!iPANny+HsHYiHLJgrZFKJIngoTzy!M`jgQ?OsQPZ0! z25L!4K%E=1#SkTCI&@r$%%}Toi|?wpgH__p(f5u}#hUpI=3?!O9~<%dSsrkhumbu- zd6m%j*{P;UYDR0`>1kae+KLQQjYd}zuYJw#QA=`N7C6#7D`auI;>d*f;7*!yfEW1r zr1}2iM7$?2lrxz&D|j8r)CMN(K@c8x^UHJV7IN(KMo*ez@72diQFZm`Md|N4ldsC9 z3SjW^vUN4`wnv_2PQ|c^=S;Z#Byarq;1;-4j7@Q0lSvIu-sO2%$Dh)CIiW^dSA9c7 zgxt^fBF^e(fQ)Cp3UhPCraHB^%B(Dt9=tv6A6^c8I6pS921hjMOjio?_s3f-+5=&a zCz;K@NoI^Gr}qsHz-q0baf`3A%UkDr*oPnH9K{mM8EkFjdk?x$P$729@{nDrDoEHphyV zj!)^~Z!GkM4;tIl#AhQ(2a6-qH$Mm zo8Pb^^+u>SoLI=1Z>=2QE%!geQ-t^@!E!%$qv4}R@MQqwXsev7ZqL~!{5^BT(T&K6 zqb?D7Id2n;wjnhgs}6e!6SEw=gh}P9b383~eq`pbupugkxjk3{G^O@y0^1cV7c=w- zx)t`{)PIGf+m+^r`Lf-`vNyfH#`~M$*#lJ1Udo=+zizlF%Dwk_K>A8{FXW!*7!x85 zdERn&Aac0^8Y#`VHAQ5#Y&0mv-G@=e?^7!C(ORX`tK4^CDAzdY7W9QEwWy&km_ByS zc9T`ze_@%5uRVc&^?E`!*sR>cti4B@?&C%{w;j`0cxQqOJ>)&XoZSEO=}c!5~V zt176y8okBgx|=rPK>KDlUKUoG!e2VHUf^-~BU};K)JTw5WR>{p$G_X_M;Y6*@eF^K zMEm(3KV7R@g1n+>&f?&xT3p%{zLENNd1ppt$`@73&i&)0eXn18>q4~=SBPu%v-@k$ zwtZsvtA;Fodc|HRk3_$&LIsD|91lYr4O;l&Ud5=?R#R^V(gFS{aHh@(j@zt#Syoz@ z`zg5j@V6DJJ&>_hJ%2G75m9wp&lBV(`0_KuCoVY^^W^=?W|;x<(s?(2aQFUC>wi8g zD>3hv6UeP^C_%U&o?(jdEI(~49@syD%eo2~2JQi0u&E^CXtU4kW$LRp3&#l>Y^VK$ zl&drwKm&mh&71#jYvAe7V00V?Wp(go*t&y+>6J@GTVPk)$1Aj#lUcL`)P73`sjH*d zg3dGfyS+fRlkXb+2l{+qzc|k=QF}2o@?XQ__Bm1MK;1CqmM;u^FVj^1SW9iXY=KVB zwA5-vFNRL-1z3cM{&r3w?$S(Q2D1t)SOSJW=rvyIOZjH@r_&s%KxDtUgvrf!nu*Ws3Zi4ge-mEt39%L@Dt=sw(N!Sgp-U8XBGGX&%ePj8u3CX_Y}(KR(0= zv{8Aqw9dLKnw?$5?pEBKu98@n3nsnCDdwzORm)Q+mrmmXJn#+ny?sR^1;2+VkB*fb zltv@wCZI15hkED&@e-tD_5V`IDkVWT`+AYa6`>Mdg-84OiNm6Dr*(ygx4p;Vn*nZn z0I;6ttEttx3%$0aamYS-p#x?r9HH^FU789?mF~VU-=Eus2f`0MpVRKWrV<}^tsU=k zerrn-JkE0dj9%{P4&na@jt23cM(?S~f0;}ep2=c@I?xeE7_-las>Klwcl#iH6K@~M zk=f=AWwCiQAQH;)UDTZ{+cuJTf|U#2Y$GCu-;+vpddC-Axe^8QIO-*z5Ck6l{>TDD zlt!J8*#>^<#m~@FtwLxw+^gX-wouEz4WS!Oq@}u?E0ASYrToH48ZR-*v^e>HT*EFXh?VT0a%9T}d^!6=KPSfPjZM9OK3>H3(Pql5wCk z{Z)j0PTtHhN!;j(u`a~i(NoL+%D)dnyJ|NMBs?Xx|)9~$Hn4fT1;F5AgcgB(IjJNCJ@95c-@Y@-^l;>cS zdGbTWAu12yaeQ^U$~7ij2)zdvCp2tSF8EpHw(&b6pfKzieXuU&F4$83%s~nV^4kLx zRO)i~pjM&v+mYk}OT!@b{2Bcci{`vh#vUL(pL2dvlF#L;`tg3NUo>@(%f0072U=aL*(=CBs!>DhPDsbF=uQ%e^)?jWLWg*yUBiB4l zvKrOrXdLG*!_^bCwaDY20)iePlmM#AV6(xJ{*}SFy$%EIs2skouy1)lmfCqffgtpA z_nbSdueXzEsdRGVLIIuEAUY&4ig@gSxe|x(6*`jGr+nzpjM3|mhL4YOvU~Uq!#Kn^ zU{!~H;JBPjRA6Dbq!RLb=&Kj5a+pVaeK4>4D4*^1_&7(9Kge#>O<-Uzssk+&@&nl< z)Px+39s7H$>WS1%+mJko&idUwimcAMNE%SXYQbj)JkcSVytGbZX6w*j4Qqxu%a@9s z{XMS0n&Wn$eh$OTKb_YuWYn?y{q}V5j~5ht+>9v+W-~Iq3w;-|`R>70v8i7DTI>rv zy*5r?kg2_WR%7>`6~`ZIbFWU3StUv_$qFx_8gK<8+Rgq6)loe;mvnx3umS-JISyYB z=t|)}5drHt`DBkuouE4YNyi3+n>gnIC1-YW&g%7JQpw~9KU{y20(bPop~^D2uR1-% zTor3YDqc`@!D-F?H&cOd#}iLlGRXQF47svUU=&+o3i?iunGrYo=iKs#D^qF8nJF+V za~(AuAPVYi>(xsL^)3?KWiU=;(#ar8 zvHi!-@Qrt!SdnpHJC-=62;<^ihXe8*T<##WtOky@&Z)cZvoFWgy$=c9`u4hw3QSpX z4t2%S(8dGU@5W$X79AjDBsB$$dQDI;r2s0;~ zS73aOg@~ZO?B$5(4Tl!#wQy!M|?|xmwzx)tSVguRl8ScfFrwzcI1L#!N zafu$eYu(o6`McCa7F}mQ_>ydCWIW4&3Y7fSe2R9xJvHABVW5R0B|p8ZX7aqRLVRnE zV)1y-oLXP;oRR(X61FicJm(Npo?}k;!tEWO{5P$mT}83u^U2*#^$wFVJy9* zkeavUolY_bAClK~!(N;N_PkSY%!Om2%1}-pnO0heD|=yvlDazAqLc~f~z z6_=9-aQapIorqxC<35DxJTs?dzl&5qNW-EBRu_+}9c{Y4^lSt-f8L-4nzih*0Ny75 zYAU+do>m{-1w;PtgPo3R~Q}NqFm{*MOWZZ0m|4T4=hiW)E%TSwnFDN$Q&K5S-xtu3Ap1hw>GV91i(-DzJ3NMkH41qsaYicOg(m{xm~P0s^X=bo=ga9cB=1@u4gM^ySdm z`v+#AGj`P>UESaA=c+38 z&!#kUaQ}M8NI~{Q1)zM}vg2EI>ftM7K%V^deB6xncmCSHov0}m;jtBs2$Bkm<8Nf! z$d~Ep1MlXHY<(KEG`x*h4Qwn-fgEhda7V+5?}HM^_>UY^ux?KmQLB+>tehCf81XS4=Y&UJmf?IE_{Ap$0T@3;YKRL z3UQvNn5-zN+PaiZfcOH0MY=YO!{2vT;mBX1P9Os3duOuCb=cV@=_iIYQA%G)&K}eI zOZryp<21GV(hhx6gZ?^%8q#PH-lqdZ;o&EIM-{f}I=d_wWanz7VK0?7t?^i;1gqWKPHalaafsnkwuD zxk=QJ7=@WoI3r;a(;uM0PV3MFz6>M?Ow{d5!LEI#>_;1*8GJ4Lk`2#I2Qg~MqewQ| z%5WZ1VDV~8dF@ivFazbHnQofo5~sw9y&usLp|s0c7Kti z=g0$?e*<_Uf`~d?y+VXLOsrpwb61bV&vSl^NjHlpA(gVq{hn%gi|?Bvbc|riY9Mel z%2mr0CqIVkeiM*cZca8o?hMa?{;kx5jdHc#qZtWTLX*_3{utVq>|}i~oGVzWrQc}W zgYoX2D?9C~R1{WSqxttMxb(yUFN9?&(P!R5HR8#57mflE#L0?Is+vR2Agr2~t=dX3 zoqtzPZ=Rp$lZHeogp6i7XRWe|gmzq??g64wknqgu8dD42f6UPKOFO^_A4NI|Z^0FNuNksl~N61eF&=E=zN+Fml z2Z{8s&P5|;Oa&CdQRHr%22Rrr^`Z&;k+0Jeh`p*T0k?IbnAQF?aX^v8&)n}hyp%W} zqcEu|L)xM_o|rxEFjK(O@JcIU;V2JSOR97H?y+{7BTpJ}!?`R!4S3x5P7NX5DawqV zQhTA?93ljT0U#VOvBB%rhM4Z1o>#8O?+zhSOvB$rDr(hLhZ=at=vFh$X6JA3E5=FR zqm=zk80BK@uIs&KwM+H8?7sl)aNf|cXp<*Kh|lR<&9#2WrkoGuyq185z4xC+os133 z3;E(aozM(x?bISq zkz-_uuC;PYogJs_H_ZN?HUL2?H^k$?N_IBcYGE(E9h&ms0(*b4XCK)kU#`uvj zb`O%pI6hq_H5bm~z!vAv@^YTUWlBQ&A|%p9$*G)rb%vFY(L9{;S@YwRCQn7m_WKimy3oOS^HAkd>b}~f&55CaEPf5 z_q?LYV8cz<@Z*H!gQ)ttyi_l9@kDvBxUH(&5e)yQf;e=K9jSgxXt$Li%}_ok0oD z!Cb4b96-1f8KSe*IU>~bvYd{u+JEdH%dAv)!h!>K%?F1aa0I;%)2dz?^qTu?$GR^v zEr699_T!(z+oyx(^5vC$UVI~5m*VlzZ))_0}`mpzc6WhQ(xh`%kYamTXB%2fIetMD7|=R z9^h=AE}W|D-7f2TY;?O;-%-8aodYkt`(EYI_=UvuGOUl2pF?2V|=L=wL%F)lFMPCwBewuCX7FJII|SU#rLE zLsQ1LxyPtg9WPXdN2oQ0xhJ0e!T!eXN_H0y-32qCz68)|4C6*(Cu77cRe-2 zFB4}hj6o-`Z8?iWA{a1?9k5%-5xVZ;`}@!ia7`voF1vyQah;-0rsDDkxtKjzPiEzm zym*gJ-xeqw#k?k?`hcGK_9l|VBExpr1DvGOCvKXzN9Q&)^^0hxPPI>cnP1ige#IGy zetbA(^A93OSKA8ePene6-pQnn0_DpW!iKZTi*p8}JO}gv8{<6Zm-x2lv%eD!)jB6{ z4`Ucf)UJ-8o)(3N*Yy759W135VkWQx7{eb<&yT3e#hhWU@58=iPC5sPI*++-s;X$4 z9T%}9?r8jlLoIgA2FOQiTFN?mbr5z)Yx7(nxJhE(S%DeAGm%VZ#XE^lx*CzwRlogO zyBmN0Jy%t0t1)VSQgr9d!eFm^;8XdZ$$LDX{l-7uC-&guBqeF8W$a=lMS_Kis10SN7E z?%Vh@TbzbRY2i*{}*{#q2!U`?W7B*uE3$*l!djNYv{v8KlVQ1!;F)NBxIdA zzhrafea*XyHC|rPs57r){vqz#vd{;VWs$^k!)FE3UMxvB54elI+9MJ0#PiUx^P0DXYFsYyb%t{g1;ooZUYk-9e><8}1_!-SyA#vu9x#u0cV0 zp+mFD#grqZbnE@dX&AqgeGFwxZT;r9>Dg!-XSNZM%x4aR)_F?OJK2A0HMaY!Z-G=5 z*U8=4_$`M(E?$YZ`5wZ*Az!JwwDF@0hK0dBL>LAlA^|$R4^K8Wz>)dc3v74sAFo``tg79P$?FL1 z);j!AT|H)o1y>)vgzH;Tt;_h11-+^8d_beHYO$5565Xd#kZTqvd74QKaf*xa=dP?D z-3PJBI!p~ZX4f^}r1CmQzHr|!SBqfFzMxNwuer}}-1dAzWfXU{d~ees*o_}(-($B( zhdC4@^v}D{p4gu=9WpS=&wds4VhH)+1wOFTTkh-Te0$qY*}%0*D@Ow=uFPC}9d$U9 zQUs(>kRFp2PNOyZWO49Gd;q=yZUT!~-VU?H!(|x#no_%sgwF=-*isv~if1pD=q!gGryP`SV)5hjZ&*w7171 z$N=+Ihs{of09FS-?L#l=l@Xqt*plsoRiMjsu;~ScGXopYk7ZllM4(H#C_*t_ZB{T+ zydbran^Kv!G@whVwFR3-BrR&$X!v-<9DX%59r>Gq6ZPn;cQN+{tWa{nVs8f|1Y#*$ z#MxS%lE~(K9c|NC{a@$3EQ6uvj~FDD_k3~9nY;w^;VSdjFFqc1Pn3^58bCq=fiXM) z7Yci}^}J)*2UR$i+-a_l^?tDqjsPZR_Vn)h>*7z;y==QyfKT!*MuWk4C(PkSivuVP zIVMR?E+H&yU1;o1p-^sEWZ-1CPE zjI_Ji@x;Y^AMy00eP$zPe&6O<_pkp%!L<9!JY>?KDUnT(F?ntw4ZpJXGbog-%P5}d z-%%qC#egHIi>F=j_ORCc3_7WdLhi?p>6a7Xb#H$0_MvpO4LV9|oAJi+wZL)xI-l&g za=P)<56%c{ZZ*oKyu6fqm1e$vu);O%A#8!cHDDn|#?1Sve~zZE@Z06wL)VOjVXAS4 z65Yu^&7=O<<4SnE#!WB$nWz!<%>(ZRTKVC@P_X-SA|~f6=h=|E$8*y%El<))9`|bu zt%OcIOq9>xE63Lv*g=h_J)FTlX)~Y7awBehR4c>VYM3lGPJ=%yPnc8W^%ut)E0>fo z)54bo>>Skb-Ezk1>p0F*i1CrA8Qnj*NE}3bWSkZ`WN?T}@g<$-(y7|5bP;u&be8O4$dbHXz9k6LdTRJqET3IGO?b%|9w7rvVY=uS zmp7Yl+wl>7p3XyX4kS!Nw#+;@$WYz#3U~}Snt#&5MR7VrzwP$|3Qt=4=r!J@eRl!# z!L*e`BZboE!q*T-6>Pz(g?Kp%7l@Gfod?fWVSYs24dwvVuNApWtJfDvoIVC$pDvOc z+1aP&#Sn3AX70}pvZm?263ksLQne>So00q9zzXay0TM^Ic)oy6FhBjO<2OPtTb%Yt z(>kkld>LOkYhsADKGOTerj<=-KGlh^zCA&5cSTkP8}64)68OEzzC*_BhO^*0+q&m# z-62tyn4`<6e2M0lzt;1liI0H(j_KJV05@vP^vY63qJ@MQkv0V(s(DrRD|&P8A-`;F z4!VF4=p`|kBuhzfdXb&YKa&n`irF9cx&4ww;OazPmScil6OGv<&-AIE(j++cNDTjq zZ|MNeVI-V7HG^mP=~g1AroT@RoJ5nq7Fs8x^CGU#9NOCzn!NP(AWt4flaI1uGUYm~ z;UKq>ytjLsxB;vS%*Yauvc>HIOkODa5}UmU*ZBs5h8jdxe#{I>+kiGL$XM?;|Id(R z>f%i3*m9s&&j1qmYaI;gD~lb2h320SE$NZIbdN`C0O-qM7B6>~>JE%0nG7E18Np{) zTUDWtd*0Jr;vy@ncr`YtrK?u3BC70#Obs|j3;YHF8w=NZan8)Ii*($CwJic|Mn)Mj z-|~LJPHDWuy{3a-(T}@1!tmbXC^t|04LM#?M-#oDWklZt-c~Gw_i|;ruo6D1V4o=R zxT-#ZA5{B#&OerYBD>A)j}yIulw&CWRI9RUilnDj}#0j76| zo*}tHl^Zv^xQWiVzi-o#U;oem)-vyVY=%%QI{KFpt30_;PJA%*-Un$&?3T?q?K%9z zP@2pSCoaz$YuXG(y2is{u>_ZtJ&B&pI%qyWsh`MOg?r@X`Hr`*2X+po34#P53tNofk zesD?s13imLt9_&=eHg0&iV51ErNf1>i*V>_-w_mpBtB|sa=4*X3^s<8Jy1h%;DlEKchOMdqGtNQu$+#?nD3PYT0&pV|I0r|GwAcl=wk1 zP1OA1`}12=ufTK#-BnZz=0?%KqGVv?5WG^`zC--8Av8<*PP6AyQWu4q#DNZQz* zI99CqDUkxq9{{UN>Sj(6>J;<<03(z>Hg!)mP)vyL0r;8(MmJgbQn=R_r_Hf)elj$( z;%HT=X;G2y(F-UP1Ayq3#pbi77PTF*7GItIftm`|>4DGsq6SVJPF6S{ow z6~yD)I~|~M;%r~zDVK5IYXL1>Zj1gn1+A}}*H0f>z6*`p_Wiinnvou~_EPem3}gC| zfz5&IH_yXsVW5vT`^hEvKCvwdhq)EG2Lrgp2m;j}BRGg8r1$yHWc!-ir>=showtB2 zu%B{bxWXmmYoG{?ht__8x{9u`DSWd8<}ut#+vT1=q@=;YHCg!6s4^&(+dsH!HQU28 zIS34IbBfj88T*Qd_lhl;ZqfI=Kk3F>w;5DHKK>?;{lXx`t2FeC-5xVqCG=GE>?P2; z?q+fHoJX59R#BN3LeHM zEN6TtthS{e&?|wXjAO%InloHlj=GQUX^MbnShjDRw&~8)D>gCrdOqwohWLs`PXutf# z&BQ7PC&>=q*Cwd|)ZC@ZMHi;3_%CDp3ipWkqIiHmvJ35BZi;`ef_Ei$;k(+}JqH3o zt6)ba&s%G6YthnI{uwS@npdZ)Ae^H=%;B?oY6nhfdK^J)#Z(lN+R^WS zeYv!D1ArHHX|_86=QB;yulLB%zw$jmiwSR8-}lW7NXZ}M94St!&T?E{t5Za#&7C{j zH%2SoFW~}?=F>LN{;i%>czZsOtkm7La0@{_s@M3es@&D2Tam5!SNpk>(BC~175yVG zRefY2t8=9>)^DCP`)eHw?+H+i3k!_G+S_4GbGdzabzBO9cIldWdTj6OucKE{VGnFl z_mj2S{JInLU@;l$4%vfv!Dk7u)%O);i^!ZCw8S8xqTelP@;RjVpl28Fr*}NQ~E0`bSf@m48xp7N3@4a*q!iPLgkYDu8eoTwM4o3>3c1>0*z+C$St+ z{-*t;UEGdvq4t6E-ox>4=#qj{O~1D}PMvB8$EXPY>f;qw zuG-g6qIbLP_e{@WNd8JY^LP(=dT82AYlF+K-^P7yX!}y==5p+xi?Gwe)Nk=!FolZo z<+-^u^UZRFBLqc!8$*rTC+q4WZ1)Zlrk6SXI|nPD?=2&SSV6=Zf1W0Pt}cF3hjjdw zNgD1cQ`fL#@9z{rTeKk`1_D=SAA3w zUJ=+IDQ#df&bqhgzzx#RIaELLbNr1rI@?=mr7fe4Ow$p-<7@q3>&XgANz0%2*JMp*`?@>en2s|Q1DGYzA__RuY;@9Wq1&R4Jzj}5FOr_*3D z2VwZWuR{pcz+!9L=%|AvlYla?-lUxJj~i0I{WiJ=(|$puhrT?K+uz?xyWc^7R-zVJ zf4Tge-JUvk2QCs-h-j_UWSrgE$^uxULS0EM=Wlu#E*o8SMs&M7l(Qo&)a_Y!p!fh9 zoN(E`=k?=}y9MXh99;N=bM8|Apot~PHpg-16Y7jCRlXPp^@z?dvE1+N1@_tWJr|Ad zMJ}T~Vwj}Fj8(-o42cg?UH5-do4uzle_`KWoSyJqk{XW=58*=US{gUTtf{O)EjY+~P~1*yPv#4pQ$EHF;={ zNjsl$!s0K1DDz=fx*v`3gZDM+`)f##*6rwq+aBLv-gd*?tj*c$2xYP0Ynm#zIka_E zP&C{$WNd0O^S|jJW!!d3+m1LD-?3V+!0QnD(d(W_?cpso!`B`=sOLf)f9pOH*cLgc z$ypt>ceU-aFw{)AyO$HrX!^z*y7~Up=JPu#jHY^FpPPq)7zldRtZs80I zjlSDFSIA=Q*VQM#d_pUyf!?pOkD@fW+owBNGnb33!a^E49H%F@cF^GFpb!*`1NX(E z5wFCmc9P<2S;B4mueCjqL5W|@FrDyrK#yausO}NiJa36!Zz2`a`g_qX@b}%H zyi^r5WyHU0z>+Mz1mNEN?(-}#*9put)rV*JfXT=yeUYaU;G@tt*fV9^y#(VEorOv) zg*_L?3MFfRl7x9EMQ?SV+XW`ZDSQ4l+)9ky{9BE*|LeS-H=FD}6XZK>GXJKI8lDgO zFh!!VFR9^Oz5 zJ2cO;!YWN+JJ8R0%Hnr;nf#!8-TQ^YLQ2L0BU|>~TX8FeC&WLIOzh~|c6@Q2(H21@ zRga8-UFMe0q?G^3CqCR~$kyht4QrtuOwc7xN44zl`<-8YE;oQqW62n*@_XrHsy>cN zp=Z3P#!-9;n-&cq(|}AuG%fRCtbbi|47po*Gylf2Z)AP)jUKdn=cZ!hRfm8w-E$`$ z5lg#_aiolRO=K*Bw{`pZ*#Pn0AoOP*6(y5!$~oAhTl8FR1^VDzFl$LqkD|<-+WLY5 z();Gqktqg2Ev~PK%a|Kv5M)y@agH}`Vv>N19`|EkM#k|nT4!X-;s+vGw}bh>k;R8e z+=%OYa@KS$??LN4%QHluhbX4Bv7Oi3bvb;@qi{A#@tofIOFcI`ZG(m`NB1nX%bsQG zruBO{$h!PFKRW5*P*B&W+gYF67p{zaK)rLJxgg`*cLDs#qnehr6NXlLcwlqH@d-97 zhoRTx<+%=_FiP}`AmZeBvK^Wd<1%6ug*z}ggf;N`8NO)8y3;a-b(VpTCd!(wonuS( zr+ywSF-8bgEtvb}#B#|`q0(anVebLv3KI7z{NjeqY5p?YTwrNK>OlC@iLV}x|2(3B zR-0$krDl2Fus{q7kVE=d{K=0H8p;+6vKpK)ev#J`-ZL*9=VV1Rlwzszb*who%L2X_0s8v`v%Li;*5rOZckm-Q+okZN^pct$ zj(pqewPFks-C@kfP3G^QH4NwA4%zDHGgDM_Jc*w%**pbne~r(X_SQR%zkgEo3z9DE zP|XLl#ReXUhMKYTy`nZG{P^a6Nw1@&a-xnUMJX#r-Et*dGpJp*8FMxuN9Mfp;jAnl z?Zx-&(m9Vwa+;xpW0-U-*|E>|;sV|q2mY&n>O}agC%Fyw$J_yyr=H#Q5{a!Bu3~8! zwzJ><^ga0{{pPC8R~o%@kr2k^EoS=$ah~#N6-uH-iUS7^D3lQ$_t`ed(w1tbWcBg} zk}S-|3kkT>)FC!K)I&zGZ2X3|!43uKY#;pGS&pRjh|bt(s<3;nmKQ4q+ha8zB#9_ z$K0j$x4GwQVIStQE;s)-|CFsTLhUVwRO#S12m$iY1jYdh6u%t)42yNib=MO9RO|p_ zd+is60=4ysF-!c|^GrdxbZV^Z-PQ*eHS5zPU=7*#LH>9vWpD?K`Eew%9#p2MSsw6y zaD?KMqP>GX{8EE-fOW^lxS0D2+bRC4jQP~d!)LY@E!r*FKjBx(Hib9dv%_xKB*N(gnn z=X(2+xAwbm{Gjv@Ul4EJ^6pfg-KuZ1C4mmGYD4r}6kJv{pOX_h)ee(i53T+NeJyZ9 z(tmdj!@}Hk&pp}U;J0{Z=uznCPErufy2sR2T5_Do>sg6TXK;>@llE%`M7MrhME3j0 zT0)`ji(mx+kz%~M)$#8hzFu?Ts7L6vgWI}0Yfs)leWp3M(|@p$LNgU4KSobIKUX=u zuN<@YGGM0mjM94_pzQzS8RHHX39@-TDA*%D?OP0wI~UkT_p1>1nT+?SPu>Afuf8(} zIi|<9Fn=(e=@vZ4bY~j9SmBmRy(hI#`dW4B17Mh2h`Z60ruH!KN`Bf~F7F}wTf>cLFVNMUjKvW$l=E(42a{^OmOmHx4Nx9|GL6(8zI1D*Py;}zx@Bw2uV${<KbOI$y(4%H>VBBaQG-#!gL14 z1RG5`fR)^Hhf_+`^96nGSCB)sGOl2r2LGlr^v@v3CU+wMw#7!mF2EeGZ%=~)<&wWi zG)mNZ=H)fZ4Sbn=s5(M(mRKElH}$>t~OlbJWi}Pu>!^h~jLASVSgF(PT(8VEXmhHQs`_yP&tmV#UQ^9XQPht>JVPj&3qe{aTSi3A2q9yNg;amkK^e%Vz@L* zFr&IqvjX>NPB{6WyCf8dq$A``3j0ISr|Th`i(mkgf__r>E5;mtZ{(lA3+xv74(=i! z9`YF9vFYPu7>rvOIEicL`ruOYP z5_!Fs2=}D>pg>}dJT@B9J{kwnQP?6R(f#67W>6A#beY7a-;tlG94(ASm|N62-?L=c z{P=0Vkx&!KUqkd@>eSl6v6QIGKHBMo7dml@f8~sPp zd2J~Q1yS^uhysrSlFTH5H$igF=-1DoXRTh-GY%pW?yXx@XP=k&0b)k!4rI5l8#&oJ zybiGXT=Fwvk{h~mDS!jK{#oy9r?4=JrK8JVE2jq^uXtuiAO|$%f_< zc@%|i`rVl4LTuwXGKv?@;VB;mtA;!71x4e1a5yar+Wkkcc$8&^y-oB`p0E!+)lW%d zs2dA}PPF8!RJ_n{pKN^l`W@J%$%RcpA=$W@q};)wx=(Bze*YF9`Zh0P3XO&?CoPrF2aeQ}C|0c!Fy`2iW%2!X-qImhuG~Jg)m0A;L#7;5jlU2J zEEf+*J)m)D`dIAoO1Rp?t5GM9zy>NPLUnH_c(Ix_MgD2JHth*MQQG1M2c(;n*qLq! zvc=){3tL;$1lpwkmT0DM8!~`uzEk-N#Gea#&oe1YZ_QyjgL(rnCJ&qH`NPntKise) z9q<7SyUgm9mbcP^$7dB@25r3DFvVj9k%2GZxlz9uux%`jaqklFb$xT*`T-oVG&=~! zMQ-QZ~d$i;yfJ7`AOc73^ zpRLa$d={b*ob>UVk5;jgenIed-Ihh(|MqxT*|Nv;xyRc%9}Ex2ehf1oyA{#0pBOek zmVBAg=Q~rB3L1YJ%%J?4RqTlJeD-b|tX;1n%00`Lgm+g!6u;aTc+6x#A)$HTs%fOX&~~*BbW7he)p9RW2`Y2R%M$wVI+sdD_1# zR?JL~z>j}$?dc@9^&WA1Ob8qCCvo#i_ppe23KE%lq#aN{T-Dz_6x-X3K8;%nxQ>mW zfge_A-sm8rvs-QK+2DD$k92cXV4;l(esB}Ex;DbKaSr*Sp@SuTxzq6qsEFSX9H~-8 zA#6SUYS-_M`kC%#VKp>ZyypY1CQ_S!XanznTT8ldv-Q=4Z4{;j?O4(;E3tMe51Bi}tf z1V<;{smF|L=5hyLar~t&%8|j8R|(?e{CM((9}3lnuCI*SVgKsfeST1H8{kq?*dM*F z<|UK(fpejhbQ_?~_@RF8BO5N|k((mId}X$l9W*}oqT-AmWQsCtI)|r|vwubG;X6d6 z3ib@-$+z#r5X$q%$j&)+ZPM0$=?L7VnVKg>WAw!+s}tZP8Puj%7{ZeOo1 z+HZU10$}~u{dg(N$B)lZ7vtWffb&h1ON)|uh4OSb_Frk%aO_yD$5jQcEsk2EEBgkmePaFxP;Ar!Ja*7 z@2t@vu~B=uv7nZ!<}(MUd!8R)o=xH-6=}OV(HXhrC4P#!Q9hm%-Ic%Y{@zLW;5^i_Z_wSQVrV)@x{!OMI{EMBX3Ad!4KZ{>ahYnmmH};;%OoJi*#*ru-b$d$b zb+uh+ZD3Z%8Vh4q>edOU|L7`EY`wH*F&M7Y`M$#)6rZPoLOpG1&9*(8@Izp5x0e9J za5;Qd>RHb3)`+jwM{#2SU-%aLO3w^nPlub6hu8zEbm(2|(S2gx*>fqm&MN&L!+y^_ zR=qQQ1!`Vw7yd0WpMSpgOosT7*Do*gNb~O7uwq_1Ye6}NQT|t@P|n91fce4MpPgKE zPlr4_(`Ma$hRIlNkK+6=wriO~+j;NUBYnOEq3J^BVO_O75#f6vvYhK}C?&4pPG9}3 zJWVQUR24(wGuOX=PrmYloLCGx;>kD{`?!5aYB0>_%@270%@+5=MsQP$Oh>q*v&C0H z+`u08(w?${Dc*;d^1iQWMOS>a61fK-AYt#Z$1^s0cfFw;G|k0+3&CL9I>5$*V~&<1 zn75nTFNEs2sa8YC^E(ypRH*SmFVJ4PFJMKYZ*bO-LYwkYDX1965ZfM~PRx)45|AYG zCB)(*N?hlG?b_?(naN(@(nokBPQ7**Kw&*pj029<$uhRI#6-GypX(GJ`;?EZcf`O< z3p{G;?I})>k)UPM z2Xsr@d|G-mB4k4mJfFPXm8WrIiCbq;s-zwq{_)FC`RSJ?reQSD`cDP&fZTcJ?|-Mh zYw=ULP#3n(_QnzlEmqAc*~p zOMM&~8Z8mKMN#*;Chr6DRv*toI;GsIz9Z0(BO=oJ8(EdI-IEwgk<6?Q**-=&AI%{l zhq<`!rDCB%FD6WUPq=XkkGU%z(!L0paSP(i`&#h*-X`k6Fi0wI6Qt(O zW_|`OLlVysaBCLd-D6DN6DG?J%D9M~DQ1G1;TF%+<)QB5V0(^ZD~5|tKZ8}YAL{$n z;D+VYfiI)0K0qegSgMaGkOx$wf#%DR&vA5MFa6YY(~&1R*<6^2`4Ew%^_9DvzVM!= zZS@Oc_4^{w7kb1r=Nz9{-YW2@K;dT(bD3|P_cmGhaIwsW3=EZ5bQ~qqIa!oWkJY95 zvlw_!FowbA>V!GC$-}SZ-r)YBnBK=yiC6lql=ta*rnx*G(dHqN-8d<=og7Y1cya|G z&xW?gcXl5ki=xU2XjmR*`G;iyS%%Dc`L6dj`4UPAniE$ z{YzpoF5dxw;}>eE&?)p#tB;{RnluDLhwjY{scLL4pB>}PsyXLO@3P_L-wO!RHgG%o z8C}ntYHkNip;~^=YvK6}&`Jya#28lVyXe;^2n;4yB`$7EbwYq}pWgI75qaU9oM6?c z!mr)^&?4qKy(ztvLjHC~j3p?do5t-{+U!d2*y{iL8U)^TVWK zVKds0(TDkqV%*;W9*6CELe0=%Dm(*MSkDh{A!EaPGuUq}C6jVG7iSfX70J+rHOYe~ z>JN{ll05LJiSHfHU`qOB%lM&{wBe&dXNw^NDzM)yM&@(zirf=CnxK07=^}k2W#|sh zf`xhMdqlquc&KQcJ^m3rY$qwG7pFAqvN6h;KcW2|)Eca$Y*ruG}e?pcQ zNvTtbKN~DHKI67{!};@3`FVZ5@)E_SO9kxcBf82+%A)2S25-Fe23`==$h{BC7rR<& z^Zmz34qNrholO=A2eJH+j~ikxc9#b#DA!7Ao}N9D1$@i>y=K(Qu~rbDKOr_t7Sg(O(=suJ6U?yK1^4#${YF-Wdh>nd48o|wHRsBAyt zQ#4#vSSJQv?!KST&uG#d3jimq{%hO<%Fn;UN@0xG!Mwuty;7#l~Em61G9v#xl(dA+((3 z1q23$ZU(G^K^TqcFvFM3)QDXBKg zi+Oz-sgH3$-Cd_B;BUR{?3{exKZP_!C4@$S0fa9PmF=SN>{+(7#_x}tV8v(iK+{QX zc3tTmyDviD>G1fh9s{cFjk|rIWAR4s#&lz&*1cRZfUX`d+M`Jr)k;`jJiNZ|*Btj$ zYSi3$?R92El!HW&)h#$urAwBF-Q}NW@_1c?`@E6z?+gE1mOWTUL5rp@2kqNZ!>Ne+ z2r8Dm8pvFa6&Rp9bS0y~JkD3^#HUpWPj{`GweWR$OBSu>S3G}I6wm@b zdE__zQm$X{8n5uShwLUS+C?jbhU!&kWI z_ON=DBC*!Q3mmY}IuSC76~%;q*z`1Vpr>RHo@gPNB}Q;3IX#$+MVZ%=k^Xoy)c4UKyNJHFdSwvkg1A$S zmo$%`H!3@~H@%H?vz;8YQm)TfE~tpP-xuHb;ITpjAF)Tk&x(lGq+O6ga*khm_0X*SkVk7Itz_lHBuy$3-A>zAf$;)MA@^qr)&@w))mWaY%; z_au1`N8^=G-;e><7kA!4lJbwXo1@j&Cqn04onJ6(o}bxPeM;m^=Ed?}za+T}#Cgr? zbgN{m{3>i{ z+bYHxMWPwHSp(^IHH0IU?|ma@!Rb_@-eGbi>z|CrkQ$OX^!_nWoZ?UV*q=e=Uo@qq zz!EBdXFt)6N3YP$p|uX5H^(Y^$djxp0Shr);b^;FFK7GVn2*S_AH+nJk$y;7SWV#+ z-L=Z;7IXNd^Nf@Ue`&A6qB&mNzG?`azogv4LQXis=15osdOfZwM+;G7@ZTI-@4%m* z2n3U{gi7SsYE-8T4|*-YQGU{%JRWfOI5w&MK!Z?k+79nMOHz?3&KnN;=fYm;6g3d*T{UHAK;;Ho0Svi-~z_yClt89bGyu zSRo%ykWpd}jiyICxK3$oq}IAZY+#s4&L*8*MuuO`V)v%CkK$81ICx1el85Pn9*u&A8!kD+5N5+ zm^jgqBmb$lx?VIZ<8jK~_YduM505#w)yb2J$oVO#!AAL=J_zkT&h5*H7+~c_tbWH} z1w+qv7qAtJS$Uj{E%40Q`!yf<#zmhS`^foUr%90_0XI9jlAL;_x#$Yw1`DgL9(IP< zACngM=NApq?;nze4q-zzoq&Imf!1@?i-{x}FC&)cao_g+6#bSa51^lAfL{^pNzUPX z!SOgc<(xRj7hT-=?!fJ{HLXiJ1^+0I^-#;D3?exk=C^N>S6LW3Hf&IH6n`}_d7qZx zQHNTePK8H0w*pTvclndD>ZvFlmDA^*#8vC*@Df5U6Ex+{t1dtPtdRTQoSH|-!uBID zb3bvma`w(qB%&`9pv_Gl@2+oZrnyIjA&H?EZPuzjNYDLBtT*{`{Dc;~BFtdVu>RW5 ziq6zTAGXmr=2TVO83>g_Lq{`^+T|LoyvT*(U>3(!^lzy2d%(>aC&BF8YR!zS9r_{@ z0Y^-wQcfy4PAtaoLt>b(^}Dk~#Ru%;5u(_i(1vd({n>^{#gnNWp$^e)@woJ{QHN4}2TN(qo& zCyz&cW^Ub=(dYhrL#-s>F*1;j0@a&EW^ggV8!0>`>XGgbhoEq!xs-J*O^5ZG} zviv4h$DdxqG9zu4u?}vs7zo~qXq{^pG~xX+B*1Nr<`8* zhPBz1Z;_zaYDw;|NqpEYI=gOmr+rMJS(Rsg+zNtl@{w0gZS+>7NBErc#qlSwhJM{R zzni3A1THG{D|5WL=U{mWXAp{5Q)z=XV8FWo%VSc0H@Hs3Urx1Tp_8rx`bPIVRT?Uo zO~%LZM;atL%M4?kzP_;KY5^RqYCM8Z4E*~ui8@A^zh%?q^cFV1ptP`l3ej2&(+i;e zpR+Dmp;sHSR4BGYAv3Owb9SO4Bh}b2eo6Q1qLEvkz*aHDQ%=3dslTB0t9+YZTe#~U zDH3VoJHK^L32B#_Iw+aKmrM9s8b73PQ<&FH-3JM;07<0l9~*9l3#~z2{N(X+l4<>J z#XQ(AP6v^;ves>DG?#vo$Aj12dk>2ueCMzHGhUn`Vm*omP-?$v_bQ5rwH+@@-aeoe zJQM3`H%jj8_-JCSSia$~2}Jzn(PY6yUAH~{LK+lJ%uIV4gMGDI35#==-#K#P-umR| zN7c}OUA|}?3i3U3uf*`bF{cYTD6SqpnA2-OeLfr}vY?Q~mc$l?$m$;4tY=MurjLEJ zsf!%Ede}dXHBiwB(Bq3^l*<$0ng}Q^xADWFOC$|jL{uv>VX}UnM{zR+#}4wFpt{kW#J)9-Wa%;wc1 zg1Y}vc~QQdTWh}-5sV@H`E%B;pEHGSnQa<>zkK@0?APpqFso zd2rU&WA0AuD+~Q`hbHkA4C+&ZC(+y&L4udtCnJ-j$1sZV9<2AGJcBtQPxWP=z61=9 z$xop4ir3uNw9n@X)bK1V0p#b`?;Bi0h9L=r+v~HL#&**VZ&;E*$I)WbR7PYbOPZY7 z(_*#WVt38u_%;mmoY@~Tgs!9akr-tZWLlbejGEi6Apzz&-S{uwFNyE$afBu)43T$6 zTP5g|uYl@`6#b>71zWpb+PbUa7aS)&6J%F@e@+{)oeH+E1XI&;u}H~MTz=`7jDo5q zb6Q4_y@RpBi1Y3VrC>+`vIfZm7Qi<(0yWKZo(os10to6!4Ol5LM?wy;HFe6|8Ia?Z z+chg+&r*?K5jImDx~r+OqLmz@*U2Ef9(1zZU`PRU-X?t?Wi)FtD1QpZ=VZL3L(+V} zAf*a!rDm0__PII(z`V4d=)4P+d@nX6ebFZmJMQ5e-^hW2WwHc!F`y?{6V+ zy}>Fj63*?FFhX!}MBA6KPvY@y{3iLcdKwi?JYGY+vbQ{N&SGergWgNO+ST7*clmBi zpXDrAtaf-cR+>{ z^z!ppbyDwDuC0qnrGEBpq159UtCkDzujV_pldfy;fMba_duhCul7a+fQ?ab`ulnd)fwfQeP}3?~KhFf88Q5B9ru(v5(XB&Qzf?z+!}g8Tx+}T46#9nv@hOX+ z?6#mSh96gx<-&cjs&)O{qaSGR+OxJweg?%ip7P`UHj7=q!pK=`zMzy5lN@zqcX3`~ z<$(F3HNs#3D068MgOr9@O)|Lr?J+v;nWCE08*-0pAnrPTIP)uh-XWN=D8rZBxC;FS zDD7QW&;D34{%H<15cog|I0Zbr0ep3>^G65@8vVr1aE}GJtcvCp^<6RpHD#aP19?RL z9@kw$Wnto%FqseOwjNREWm6LRIMI2P+yHJ;_y)0KFAT1yy?}CYOi|H_hJR-LhnS1& zdeZJKm)+72(y%9J-rMHWeqOc_R#v8q&SM|>X;Uje{staa;j6;+8JtP&)|*l}kLc8S zC{f@X(K~+dthm8|DZV_91f*$J6;~XIW%XWrQ3Nd!aNcX?vl4o;^p@KJDo_d|`xkxB zv8zcse?6YD8~9mU73;y(*x#dBih1s*b%9>h`#=v25tx-b2AY&`l9k{s57NcnE-yC} z&+X4np8Oj0b=lw}NsJIkp_hZXd(QE8Tx8{Qwe2i6_OT;a_9f4gx+nH}zrP=&bZowo zG`%L!Jf_z^1Al^jH@|49qWQ6+&u+yYUz`{jPyceO#fbl+iqhS&nX=MX{bD}%exzqiBk0WD~3(hPT6F!qU9;7 zue@W6Od*;4xj*9QcA;x`c8S5is{OY`Rx}Tp?inSkV%Bb~2Yw3!d4T+;J**0U^gZN$ zddj?`Fs@xYo3J*7s4*aX@Oy{R{t-fD3^8QC2 zL)IUgy&Ie*5x~^#bilH#BBU`PTs6pyDBGuLXmCr&32#0r@F&6gI?s$4pWEX#;ceTq zbOaInuX-sZhvAFvc)ljnvTowK4`c6QUoh!#w#Prj^hd1%pFH=ja3%B)pzyhH1j0DR z1(jktEvhdH1{%^459-y)VWx4}OU8;lihgj4&V+`%;GJ^*P!;g4zj%32F>k?qsYLcs zSb2V2u1J)|(F-x)SI`Ct`G4%drB$9i60Z|(hG9Bb_Yi`L{b2+ILi|vY)u3EU8?+;# zyK@0D9$7_nh@JSUtarldvj<_Ub=w=``Gb z0@G;@1Cna*KNQ@iJHab1n%3c2DA=2Ft45AB#^m{UdEx$_XiNP_wK zB^w#9hQ7Ej4;jZ^us!rjCa>?X!Z&h1{>DhFtdACOy+%?hyrK6BVC5B9BvEX}A;|?C z6I$tt+>!R1@UHWt*E3~M;091kFf-+`0$W{_VvSL}6T&dgEQ4iE-<|gpKg4plN;IZp z#e#taS2wq zvZ48<=!+jFJr_Xg7&zETeV)>riLPCAE?PGODxxz+TORZzvD zT}f*5M}IM&dA3lxQSaeP`THhz!4dLtB>EbStxx^9K=}nJ8}mZ_;G2!uD)2af)X$8m zsX;tV=ZkZIwq77o3>8_L5P9B>2ab38u@5C6HJ>rPv%JNGK*matM}?eWloGl9z_!f=#v_WWLF{A_Zj z(Br(>r^gp^ny8YoK|4Wpf#2#=hUv$TYTa^3PSm8XCw{I`xV^?;XGv^vK7}&YD^yNc zxpKhbP;9a{01BVeqTY2$4wGjn02w^6ggA!m=GFT92hVNmOK_XLaXl?N2spvgl7UW0 z9>4ul@uOV1FGpTAmakH6gvG`1=r}}MVfPg+9H9c$5&q0yr?L*V);XTj*N;X!uKZ-r ztGEO&-B+sGqz}4eL%?>g@YqBr^_j)W<6N%&>r(YEkI3$~OQ|fpkDlL^MSfoWCNE%l zT>tT?^qh1`P?fYMxT)n%y%rxcQ1@oPZ1wQShwMsV&{ir8|NM5d$_w0}fhZ@cFsxy? z$zW+EaSXw3&yh2ARh~A^mfcp~uR*dMY0=J{&Iw=E^haMMP9@PXe)0R{MSlwSG1JtH z{Zbm{4EtvatLGPEH^+6qsUJgkj1`-wjpo5Aki&@mZQs^5lBv3rfEqG+c6pBVKGF42 zuIj|D^H+XIpMHP$Ge_RMe4Eqw0JY7DhnhV|4dqpxzEnINkM8ji{;F)bJR7!#3zzbe zE&G~#onHx8jx95wIuZOyAq|4c7jnZL_Z@AH< z6vj)9Q1>FGb;3%g6%tiAj5DzU`DZUgFsv%6{iw~zhC*%;PyeBBHt(i;j$QxcH3a&3Fb8Od+BIDk+PW94)RNOp1%e#9HZww6 zJ0$e(Gs8W$u52Vj{XG7Hh9^TRRkU_|ANXce*!x)>)O3H=wIlM1L-%mU+T*L|@!cM7 zhbT_L{*pck?sCX=PNTQGHsI8YO5pF$He3VGw7x&Yt5_+VCr$dkY3shOlC1qY*pCpa zI?I>)F$itNCibt7^^N`nQR(pAPfh`o>Ex96H)Z7>0Z}j!`Dy+8Pf<&sxmmyYp}-sh z!Yz(*<6~r1mW-;@YfZ1i&FU>yko)}-#I+Y zLoV2#disW7sRGejDKSdF8X|4oqRxE99aV;pzZYTAy*U~S&Ft0N;a=10lj<(}wEsch zt>LJREKcfN0UHDWGue{+Rk6wya|yPA9*lzvqpi+PN=iFIvgDBz7pRHa{L@&y^($NPevH_k?(H;4j=Un`_B<=`Eb|m6lax=($Qy* zL(Ce=@!<&NaBce75bmsQU-xC$Wh~mUd+gu62m&^pFUE()n*Kw550Ft<;l*`|>k{uU zAkkl3CN?k2`pUPmgNZ_MGd+FLfHI*T^`6l@Au|ngAii=#pohb&U|+wG9Kwf#sETZc z+@j>i*b`m&&aK$~LPaQ%_zC{nz0OQ{O;Mw19u+NRbO(Kgs0~APK)0rSJ`}IzoQYWN zNso`Sf7YGdTgH`#R8r9s=r6D7@bb+9ukeii(Cl|3mdH;K6474Acn`h0A$T^V{bY>A z!-DE6FRFLF51AL*{Pb2ej73~g_R&78S1`80r-!vGl(bwG{fTrQ@U_i=I=6f*g-{C4 z__G5vVZ;CrG%l5B&uBaCSl_sM@_GOSJD&$P6C^H_C-Eo1(Q*%Opp_%c$Ew}flodnm z;S!|_UDrLG?}vGD5l+{ipK3VeOrs11W_b2ys>gnQe;D9-EpUHVe23g+AbOE`i8oW& z_klEp7yIZC+Ek%fNyLBR+um4<D0pV^TmVB&h20vN)B#P{r$JboMK|dZdZKRcW{Q zj$dP)x6WY{SjckjCjWd4Nhybw#zu10xfg5KLn))SYC_1Pu~KVJ$r~C&mE1%5DUC*O zo(?ivTBFxj`Q{sGUU)cnRx+t%pqiqSPA1`t5o?r9T*NqEt&cu+6>)v z(0J`rJAU^20xmows=1PTWHES%kANO#!6*U7;MuXKNAl!mZz6oa7~FnTmBtN?`xY_p zBb3rTC-tcsMs^qz6^ls^7JefVRu+%n$>;VHIT!M!OmQ2d+{!YqJ3n=Z?!}65!dqD@cP`b#M{UeIq`ia#1A^h>hbXB z%^PJ5yFbD)@Z+&}JY54ap&2L(iEMbPt|xwpBGA|Te%jv{@LB8Z_c<>h=b=~nb)_+| z!|Kyuo@h>BB9M7bKt1W$B^$l&iFnwDR(ZtxRPG2cksv>Ewm2q6RMT0`naHu4jq$23 z+wraJH;7~nH^jB}FOnP(Q+%`+T;F1e#;f|G4{jp;yq_b+=^5?q87U+Svks= zg)lKXQ`*v8$W|gPPBnY)&S$jP!)b-1V|~k_UcNVrSX@CAzcJI{++XuFbKE0e7fvB8 zv2DimlW%WK+zexf#K5q*Um~#gdowvVzb{MXp8XNEvnD*Yr=`uz-T#h?oVukJbVcKh z=Iwo1OPGAf{3Mw;+?gj{1nr3Y`-?G5A@<4m1gGM9i^f!bS9hqM@X{|VyP2W+OS%l* zFB&imJnS@zDTbC%NlqWR)IB z({+APbdtYek4%4Q`Hn;*KI!2WXwz%;TY$?cdP)r=C>h2z_^+kuDh-6N#Gq@~#~Br8 z(6PM*E(bJ@x76BlWC4l!{nZi=Tx7+J#^CB!N~${Dmvd2^5LxrcXTg$?jC&IDY0Y=*fDFZFV3yYGGoL-e~viV@CH z123AE_Bc#?=tB@B%2j*;)lYquP6v5LwX;yF^qz!vi8lH%Nj}|D`_$KP2w71cg7P5x z?!uy73rz4tBHo2wotsm5Z|6OUfPr;LkQ6bpU^_9jzFtVC?dx}P@rC@%UaQvw`tIW8 zg|~MRwiHv{u5Zp|;pGNsivLn+jGt{+`n8SODW6~L(Ire;HApiUf!`IB|UoNfo+19#CQ6mw3K75N{ z7zOy05$RCOazhe_1NO<|R6;*t(rR{pEYm=}y#U5kvaoxtFJ?oB{wN>+TA4BWGTHi3 z8g51ge}CKL@zW(q*Rx)hOfp?Pouj(PyH?v7@WA6zlj zcm*j={PSa`(92xKUzSNKIcCY{*B-x{=i&0lE*AM{*gU#$ObVlY@cNclR)9pyv5)e0 z2n7(byb&Z9>=jt0@ZCb_J9D?*M#ICynr4tbvu{SeE-9U_i3PU6gD{Md7M`yEUhIAN zq29`ky!2EEb#09V>tDWn=fvaV5?WI(U-kGYsQiD2C@;k)RRDTpRKG1#r*`E^Pw@-WR7u~Gfc^}$#e@c*cAkm3Z6{>Fh zD<#WMc4l&RPBMbQ!VW^7;8S4jCw6hN1o>9%-{qV+%yg55DpLpcE|O?V$G?jw*0M!pxJf1g3qboc}(5L#(4pQ4kfxA&v-W!y-6 z7=6MWAiNCrI75HY2rosO;JQ$M%n)k1@9RU}nj&N_1J2nlSktpvEG)?>L{6R-c(jyMqgyRsGIj-tS8tX3H;H?!F9abr9) z6Y0kLppq5NkXp$r**CsnUE`zGT8x_Ns0H{&20b! zdP|}Q&s35Wzt`;Hg!gS8xW)XLx8{A!r3?#~?>SM&`uQDZvZyXfuC_E4jHi`-WU5hr z_lIA1Y%g2LV&8X1k@!=Vo%EtJZQZ_ZUn2!{u6kePrhykmw$F+;{cYCsj5^rKw?4Hl zv>)rO$cMBsgV^hS1v0k6tTPJpig}M+iVX1~4B7~b{sV>;4&0Hir(?QO9wYMJebSDc z6Y4==WHm z?|cJ^HYCq|w%?{hA@lKRLuSlx1x@{;?IiRQUYo4>q^JppO^Qz%u{>XrIV?Db^!O|K zfSJFdec>>#>{ps0kU@`}{IR9pAbs~)bp7Kr>6e&T=%bfUXNe4okL$lY<0FW3jVnm% zol5a1tm%_&PY`&f{+Ai(9(7ap0%0b=R!jR*>ykC@9!A1Rs7#jp5F6?_S|FWK6;PJo zWdu6J)i~`B+%bF)5|o2qO}>B4c~1#UzeF9LVSXP5tn0z1FFRbOgPKjTf#&Cof`F48URTc50YiI;6^>JM{&5r z{SFJk{eGS6t+@wDr#sp6dN``&;Ex@Q;De=I4-Zu6Pp|0&quAF40Vn{DNQZ$2fH!V5 zfPGM4oU0KL%b`p1*8=3Th*cYt21VZ7$~2wn47guEIq<*B6(08Y;0nOPnzFD8OP1jc zpOUowozw(o23{MQERsm5>DqTE{%h{}Tt3McR<2feaUYeUoi2Bs{^?``2|!tVL17*) z)n(xucw#G}^%3N1KN*Nu+XL+DwButx5z}FMoLj{l* zR_aA~l^XwUgZ*~&wwGkc>n&bNK@mNgO)uW3I}` ztGN2Uys3%aUT+>w^YT4IM=A-5@F)f6I)%sPp)zArNuTR)R2`Oka4&TK^)^675%CpY zLpH6@L_gLb>J5{7_38{aIb0`^XX7$*KNC>1=KS;V$}@tA5Fp}41VtbIO(Ag<7?e9v zT0;RyB12ME9ZitoV1-c>Y;&vUBR$*^%A1(rx{ z+$6YLN*yyv7v-~?vnY=ZrC3*E}s_XN%Xdl3&xO%&8 z51{-5jOtRb;NVDm`y&^EW!bF3HKP;y#kMO(5tFi3D`9 zW zC4f|`OinK!d6V~{;mS#u(9!+mgiiv1cRg@myWQzUM#w;C`XU?$1?wwm=pevj_5_SV zU7+ba;BSNSrE5ix57Bx1ejmGunt#5rp1ZLWdKSYJlac5J_M%o4tS~GnAj17but&jQ zj)82Qbl&N(9Q5xaBuvNCpEo%+=;1I}M=5|Xd#*#N|55~i*q~*<3S!+QPonW1@aP<7 z8WZA)>oNX;OSYY0yxr`lYTpSaM-e@j8)|FUpP=qpd7XxO<&7R6kC^?xZe0gVVXd;S zKux5r-BECb!Q0;G<7&3GJf@rwkx5{As@cA=26e=R(PK z$tex%dV}8|Vl>Ns3WaJf-E(wO00N?vG~WH|X(B0DbaZ&feh zG6!4Y{Gipc^v~)3pwX$)@{>)Dzs8|f#x;`YV{;dVRPGXL?Q|y#^Y~0T235GmV(?2zhuv#sd2p@j?XO(70n=Q67KSyiPU!0nA?@D%T79`B#X4LG_(iV6Ic>U!vKA#y=y-neg@-J*biU8Q3Q=fdxH zcbk6Z>^ZycxEba83nl;PB+EUA2+sKY)p&9pN3UF`o}-dG@I(od#nd%!y*r-|dL`|7 zk`k*u4GL8FsMMNz-EXXO1Bf~@joehtx1RQxJY3GCa=7mm4kbf+=)#_knacQ50aLv_ zN<)J>q?Bffwh5XGeiv|9mKDonlU>1UVXb!F?_wA28O^C|z~=3zvWGPzx#w%FLV_bZf1XkfBlEw+y|#f>Y`|?ECTVj-Tx6WYYa)oi$g;E?C8nSIdWBg8Rll z;{Gz`TDU~@8s1O&!aSpa$&bhHumo~8@Ao@ngtuOfkV8WEs45T*Ro|KkUUqP*5=bwE z7;rJ3zk@Nb{+pPk4wUjo(@;CZMNGUIjNj+;svb}4rfKnuVBjMI;fwplI&6h~YYX=V z*dQE0;4;jp(%!9P_@9WQMTovbILqJ|`iOWR#e%S?XXO}Q3Wh4fcfD)Uo=8zBo|W5< zpNYz{wr<-$_qm!piNzKCVtVakkOJoz%b7h%{kL1fE-SpaG8rB28%_HmKf5sml z6LtPP{g5qGUiO(@FG;N*K&)q}A$+^Ufef!*xnGz3j_-agDFIO3HocJOW4`ZKRk3Yk zIu+L2!Z53p(RG~bo_qXme6G*!B@7(y>q&2RXbH)dHdnk|G$&*4`=~YkC@OpgOOA6>Idxt{GUFvWZF0~Q5pI#mcgd9hR^-p7n3)+;z`_g0K4_-Z9w&%@UFU$1Thz~8$DfZ`{6T=dP7M1y zFB^+W{pEtEUo6oQ_+~|^K!#cDx$Z8flZnXu+KzSWnUy{-k1f%Rv@l>VOh>n-_gf+< zAbu(@#Sty!5#7&HCVf-!bw#lTUPvVSecJ$u-b95ML`BR6`PlRpvwZJHTL&kJFdnfP z$sjHr_|rur7*AB(3Hz7xS-)I9v*3nX|jz=F+K803s@ zmUAX6tS;~C$1KzIw!b#LIe1Ir8 zi#}%&Zl>=U{%lpP?{R#cy7UB|a&F_6SNMGx9owVu5>7|zd`2r7Pu{sg8K43|w$fx= zP#nPR1gYWkgg`C z$THR?Se2jmX~mCkM<(8q!Mmm>5Qd6vb792^E9{^xf?2OFiF^wBR8z-A9wq#Au zMqj)b0+bRRUK00SVI_Z`r$jh;y`cw##ee!2TXiU~;8PyL>85iJeu;01TYgc1DA1F0 zy=icS<|8=pO~3A0(25v zp#SuzeL2`Nn6a@hZ62JZ|_8DW}b9XQxG~HcQtLFNli|rn7 zXu6|xi);w*x!Vni7;n-@BAkGJa@+KSaZ66F?sL>k)Fcfm`KrbQ0LimEw9)Jy>g{46 ziAfmRZ@YtgT%ieK-XeG34}{>>duPyD-B}n4*o99$tZa~;u*MhoEp)zJulsxYuNt;@ zdWc^CJ&8ON%U$?=-NT$Jx#|Kn$e)V6CCJhmlw+A`7WRIRP$^5lc`aI71Y+jQ~qK`p{ zW{NS_laP#FgE;{h7%`n0qzoW11-5r$z1-k1mri~$KhKy#T5+I%>UZ%X?n>y_@lpLW zA+A9*+=SaU-S)+w53S#zEy{DWhasb2(WaskkZz_rdE7yud%tu#3PZQ(lNnuB&vk|A zla8FZ_;JQd&bDWVzvxuQZD;B(`1|fm{N9r2x%Xj%S^kDbbk1JPAqUpu%E9v!85-Gq z?6(0n!GrC++KXHzB9ay952~ICM2!2&eYh8iT}*Z39@-K`zbX`jeB6?^wSQ8^PUsu4 z99uHDI(dw)aJceCtqryk%{hVi;|hPu&zy11&eg=!$jH3x7M3P-Npq1yzR=)qp8fpR z9bhb*TXFI-D7dm)IiGIqgS&l6 zdp$7O{FkviG>@0R@8yLy-^e*d|A@EW)`oXX>&j8#(!8%q--5^s5K|mtis0i}$>1@l zkhng8BzjiCrf<6Rn0n@^JlaBEh|lp;#mQBDUTR-Za}d6#d3#gL7>d9QvExV1o=`Eh z@s&R?M#oX#qr7%0ou$7r=}({T{#}t7P4uC@W+6U{3;e=UdIH#J5-2qIezd$gE;$?y z>z6`bP|HQNLpZ;5jn-n0zw-$=#0|EkkHp%A0CICdM;EfwY9^rW?7F>zTl~uUCfMks zdK|oaEOlkZ6Od)R{dO2`HvD4m-fKCU+Pz9$BVyi>jRXr^3Qqp}c#87_ww`w|=m%9= zCq?JLJaJui3IVm>q}QWZ+~fF&;%_j+BOIuRS~1U81avT6ux;9)%i8ie5z(BuCw&UF zFp(nqw3%vPU-|{Ogh&tlaWrBNW^I5XOb*m9T$`7WH>ZZbIO+q`3p{mgsO$asN)$yk zz9HKlz85D!8@?kTihFJxIISzJ@0J@u!z?&SX?rMLMirFM!n3O)b%}IVgJyy8l}GD< z&m)XZ#~~T^An6-kZ&$?ZnF3T}PJ$wM`?2?g^i&^bqj$b0Llo6)D|DGrd$2+I^K?6H z8SU*e&Km0RJ`LirJ_nAu&BGwIf27pz;H(vI-PgiO3X=WBg7*z{?;kJTxMeVopgimu zL}}f30gIHoA)CT(I(CZfehQO^@xGZam^4nkcPPI5gJOAK49|8ZP!0LjV{bZI#9N+{ z=T!{(D^8wTclKDYXip&%SNtJ{5(W4Qs7*4(Dx6?_6M9)5ZWA5^c*aWsvPe|BZ7Kf3 zsEZf0BMO1VKB@Ln-({Tf*7xn(1DrMhL(oF|DNpshLL{;5A4yP+GvdAh-zH3+fae(| z^EoI<3YSEGl0a1K9#$f|#;9@cCyHtGi+dnBHTk)FhPl4A`yC2|5u!VKM@ClELp$zU zG?%sEqzuT$(o%K-u5}6FnnL?O;-g&;vwb)@%RaVh;j$zVJcAvm)%R+v0fuNA`8x_YZ-|p!44EO3C$P~4CX>wc!-zdATFTaL}SM`wZTyARsp_IM;fm3WYfH%Ys+*1bGm zkJ*E`C5!s)kr(*IcZeAMC^zbc?KDF<^APTZ0>Z`EBCXl{fGSp&wE{3pzN_f2wt zh&tlPU;3>EYx;6|f++DGTNZXTX!YGiG4Im9JNxDK!ACPEl4451TYe2K$`Ca&_pivm z-h0;Tb2Vm#hs!ZSW0fE@%y!Mp2rq9p9~4jRzC8n`?s|iQjnpQUt6yTOec$oZ!0t@h z_M1>1EJBixm2lQWt%Wt@z~A`KtLuZO&wly(7NwWZ>w{eg9GGS{C;^I%;Er@pE1$+M zFE~&+jL}^8>Xei5!-#5dqpMq3~Uf&^lXB@XZH=iLkob%oBWH~4JAaE^y?)(_{T{SH_!X5nX-Lo{>$k7AwQ)P zuUZjYH>m^gig01LIk)73e4R%6aFO|*0qRCKS^S)(qtxdnKR@9_9<50}zvNFcBp8{15B+&_$TwOU(O?;COGOBp4I zkUV&3OhmaYIUE#|N`V0u-3p}S@<{uoTMEdx^R*bqCv)r8U z;Qf`GEnT7%-wBz*W%!k-Msw1GopCvz)sy|~P8c;_mxo%C|IC0m<<8G*n-b9{t!?7- zE@`(fo?j!Ue$vX8(^ac2u=D%v$5ZZ0nfR@*=NYTrq|5HNI_%T5m6XLd5NV&gfA!ogiRX?gM zbF2BJPfixT*8nEi-M#JXd;Q7yeM4|Q;}{ov;2+;NoM(hv)`?}cPJe2CWJtuT1hxep zxEAp(z`_v9r-?PdA?9@uYKhnflEq3%D*h!YiZ)>Kgw|Jjsjo`%BDb5w=SF^ClGj*G zjx;@ywrcfiXp~x@+%F_TS&?_+93S4BL3)WRUpW2tG6vrAY6kuq_U$h+^2hHI2N`#8 zPmk07Nq^?TvfLKJ_bpd_JK1MdQK$Q7q%y;EK#(YNd|d_nG!EWdKCAnaKEB*m`ay>+ zLTjpqhFuYHf~`XO=HLbhW_)-Cg&23eOMSvAJ>r)VJaIm_*4j~}v)lNf_LNf=$2fw?aQMBPwU>4_C2PfqylSwy&|ji=R@E|QliNWo<&8J{S#zr>JEV)Bfy91 z!EWGhljr$teNPd;tQB1c^0HdFkGpkm{gl`ENc?z|3_aLoAQsr5QxA3%NC=z`=UV^_ z9GSFJBCF{tm*|*8KM%M{4ocoOvi!TyRw3uh}(ZucL4SfhJ;U) z7JS$dI-hL@=7iFJ*Ob1WPuiJ8+9(m=9FpQ@nitDuG7OXVpIY<4iH-f`6Tnw%KgR@u zcVu6A{+EEWqQr=G+q~>C{(YZ@*2AQ%Ne@L`U12$H8-7i}${imt(ZFLEZjKoHZp}CR zkhpg~(D!JUmNHIS#POFZoQ^HR=yvn-)Hx}Gu4{P4d`>eigsNZOstC0MdKo!yFUXAr zIv1|z)}ZJm4D4UdlcTnMlQ?yxK8!na^HU8VF6j}hV)j7q#%rA5p}+$W2}<^3W8~Lt zwtLEy`VfYf zi^X$86ir+xVuZBoE3WIeAZLmpT%32tee%LUEZA6^)==FF?bu5D;^e_t_WM&k(VMbx9IHe6`(sB zOmEQ7@&dFM?N+TH#iu6E7pstD0wqs6(6ag=uL`RSo=+{XlJ#09&sgB!`o3Klx=zY} zsetavZxnI?U!vFQZgL!P9iko2Ci^#mcg*vPJ&U|^vg8?LX+X|FFR-EsHlv_3J%|QQ zBx<%_MQ=4#CS2L)sm?nzCTlQv#;e%0eGzN@B8Pu>#x+6`@pS0(KlBADJgGCBoR>mE z90`iEG%jpSk#^muv%eb*hy~$KY*7Xe0coMRL48>wQ~% z4xMMUcCQE^g#h@L2S*%_FIms*^Z066O7@xLOeivA!@g0=6K`Cc(eHls=#sVVl5b!Q zg1olsxQ1GbbsKNyGJkfJ4 zXp!7zfaauj9f#Zz?=<@f`We#_?U2v*3jsfVuN++zOf3EIIE5-J(c^NxhiO(@p2B_M zh1THy6%UDmnFQ3p#1=gLRy?2l7VgF!U^}6aizF?@$h#v2vsA#AeedTvtFJ|-zE?N) zX%vVUHXuo-{S;D9OOL-E(Qrg@;IG5{eva3>mu8LoHSRGu3Zn+bT-t79g^Q(*vD`0T z^8yX9FlDFkKB+IF>lDX3);c#B!g9ywhMb7d?5ze)!AS1WmgP|#yA_;=oSJ2icapBA zrdS_u;V+lo_=hyR4vZUfdw`6urXQh%3s1%ezaSI^`c>&|0P^Dwzva&EICsf}ZSf;~CgC+$!?;{Zx-2+c&&|?`-mjxtpln zb+s}H`I~)9Gk@-H$b9h~h3)+whuGQSgG_)TK=+ikKjQ5iLaRGeVPn6YxJc()t!4As>?(I2xqj`7OFIche2+{+^%qbd9`vzc)2| zyzn}`Z1|g?b_z>OOL29cy+QlQL65Oa7EwQ?l-a+z3Ld-Y zS}xYN`nNO&8y0Api>=T8nekN+NQs!2LO!|ABC?uW@;PmCHOL1edALbcBU$&=K0N^U zR_|0kFka|Z%|E-`TYfU@lRvVhaXkL6K}ug5dBvs@ulJ{lf5V$4zI-UA2l$H_S^jRO zX=8C4NN9NWghK#f6Z$^<;FCx^2IRgW4sq@An?3b~5V2Syrhx4}9hjxUqeo5oa9o~SX^n(%sXf_S6V(Eht~ zW`LMWya;8f3H6iB12f>F%V95Afb5%OV4j`O zW3@+5C6N>p67|#B3kQh0O(`LehIY2>Q>yaGB37>u%-My|%ITC=xZ+4q=?1aKym$>x zz48-(%pS|(#o+M)BG;GoJ+i%J1a(oL*OElCj*t+^X#71a_6cJtKPaNJ_v=CNXYN}9 z!pO}>NW4W;mjiJwgF!?b<$$;E#FnOSPy`lSDXnySiLgT%f5C|{s>Y3I*b?ts7nfbn zK3%!|Q5DDhqykNRIw>8&cwlzE=RX=sryuGRR_cJF1hb!?2*<*)T%XH6Az{@J**qpU zv}p)>#2hakIhH=w9JDptpP_Z4^gWgp;S;kED6_jh-w0h{QGL&Qox5qC8@)+Q3xcBC zy^fIH@rA3c%mCm!KOcIXuh z9XU~haR|EgG~^jMH5a}i7<2|#?HDvwAVZ01?^F3DM5C4-pAKebc5SHnGOP zh4HN*Jb((4kaTN^HUcaXb|c4`6VhH5E9z-=n+D5x;k%TD0b6js2G{U)Fn!Tp!K!vH z5qsL-WL9q(Z|5m)$Z#b22qSno9jQdA+t+(u{pF{{0rUP|fD1n@TJ+;*+J5qPMTUAG zF90D|@POI5>ERZYe*{>IxPbEbW(`m(&DH^lt#0n&`w)G>-IeA)*6u#7d?Zi>M>sy2(DN(d_j{}rYt=A!7zU|E z!Yi`ZIlAjNJ8ub3`=;|q@ewK_)J>kMecpx{mDedA)V^&$&P)!i_~k%C`%`yFw_jX% zzHy>&Jzs`!2_H*v+#1CqNO!hJTS@4(eVL5C=Ej*XYwoBBZ|PR+n0JAE+>5escK2O- zRG^mEo}~6t{Rx2V42S$$Ai8LKJi3u=b5x4PK@YVCriWxv&Ub344D4z`b9rn2Fx8EVL z<|CQ+qD>-au}7HONa6S4V%9qj5lbk9pNDN>);8_3O+8;DA%^4Sea%kJaSgBUyBb64 zEqC^9o<8~MxMeK6J-=036cXecr`z5&rcXpa5yn~(q zNxa`S&js$l)W;>6JE2XZW{EYLP+rgAN_JHFU66O<%$% zgMME;=B7WWI$I> zGjoP<8XoYnz56`2x9X9@jUB((yf)`q*aGAG$&@P6nI1ruQ_~gso(q`MV}zYt1v`3z zhpOP*K}`m*4sgxZ;g`)P{xDSLZ67B``@!-?z}9Ry4Pa9VtN(Bv96?ADCgH#cc;CAk z_ahgpwqV9-1>N}KCIW$AZy&xk{>%X_7|+pf{&Cor$%)7QsboLgGd1?VCz)(>H(^S! zX~>NE{cZuZjjqFez-|NOl=oOD&WAN;H1j#f>mh_Io4s{!?efjocZgCx?C$k5wWS>20L6u%4 zNWp@f6B&#O>`5hx&iXq=oa;0wVem8^TH-H+{anqRDFokY^W&_PA zxaWiTGP-OA0o26_kguOIYb-L$RYEt9tocHzpE{ReeK2fTKHwhRXx0`Dz2=CQnxFY$%WP44FR z`Q^gFVLrVJt8z(Opuw`I(l)eiROfcN(fb-%5Gi?}dcHk1hoicu=U_%s(lp|_?SKL@ zRO7#QX*j-E!nWiFkIgUFrDvt?eUPa+%e`PfMM4rIdH!%DeNJhoSa&2sO&_o6cSbo$ zoH7r%2}djTla@{Q_xp8nk`Uc1C_BQgsvr#ogI!M5couR z&;|h-82D72*z1qzryE8W+7m-{c7pP1MCWkDs9W3p~zdXsi z15jY^_&J$ksUrfM$L}V+{;cS#+I5heG*yJeVD)ShZPJO^sZ-g8^l>~Lk5m;s4n_NI z878v!JCcWO5b+X~yo~Aa&cP~DYL5Gdt?E$m_i4es3)np&?pQ{c260>oT%| zd2?o3W;vQA?sd9W7yy*^Biihm6;R&-al;pWVc3m4vNDF{eVFjx` zFFJy4p4hWK4=*03)zY^&b2WSHK;`GY4YfT)oAL?p_EknH+=mG0#&WX#L;G8!-(JinCu za~8@7I|cc73f}zDN0Y!+?~B~s{^nEsfp>)~pYQ$Ga*G`S6Nv2!)Ya*-zroSdCmPc| z89jjBo$}Wj7N#9YO3$7Xdbt0-opg3b+c0{h&P)DK=Cn>v8j0``Kb8fdO z*Ds|&!Jr<`+UDV<(x>n&v~l@7?sHqGl_Ue?khPwkc5S>Iq6NliKaK7qCcCE^t&zr| zB;q|A{+8sVxLd=53Ad-i{xC3yynBlKF@Y4_KG@Hvep5&8wYI)`KMp@(h2aCtvS8l8 zn@XU7a|)~mEH+ z1^v^390UmhWxe^ZQEBsdq8}e4XV%SX62|!XugNQ2<3lj3&^>k)+bSj4<;bV*2?9tv zSz1$HqwH`m9NQ=w+h%)rMsdu_T{R9FVV@1)M!ISH@Es)XB3zli zgx0N|vA>EqUK`J)^n0wF`cIhe`}@&6k_HrF*U$SEhI6e6RYHcTzf>G#+yM7-()U^#kDyo?=70#5}!@kG+s`9bSr`3B>I;=DC z%DQ4vCUUxM7f`pV)dtQ`J+_94x(bG9ascscJ6%)EvlNEB*c-!lKS^jVyt2&nc=9l@ zcuM?78Bt{kj7&XpQc3V4B++>Ib}#WSeB4W^?QZA8W4}L@{6gr|l_{Ed#C;+c75>SN zR1L$NckxXJ?9|nFU?#8EzA%QgWt=m2pL-4$mA&O%s`%i6#AP4DfhLmk;^ydbO23-p z?UB7sX4Idk@LRAehNt{{HkYRubC3Eth=&3VvytxY>yA(v>#5gId0XMAWLha2Wgo3? zo!pxfvh-|?(OWHf`{%6Yw2*X&iwYjqS_U_vnqIfQ-|jHkHOA#Y$@7!ndUamj}&C-DlSsl`a-E<+@m4(~xHkypc#>X}cUS zV}S~B0IB($?1TRug=>%km5XUwegscyoH?j5-Kt0BOGLx-$MQyJxNMY@e9yrD(AM^V zX7s+Vy6V%D2>&!(9*;}gghD6x)7fs=;SaC^6f>H0LBj6LgC?0h+BJIHBq%?)DT~Ed z%lot*Uw!?1Uih1kH-v7~89yA~Jzob;n!aNAi&{l*55R!GVdm_g|EHb_CMT>7o@g?M zxl?qJ9EW?PzuW>(OKi2-Cq}AO?By+e(OdEK`1|5O#|0Y|4GaCx!vjP-rv3U>9enn0 ztK418=Ai3L3P?vd`sHJssCMcDH0OO?$d!+Mf8!zEI|g=_FOI-H?2tZhAf29Iwe3DV z-Qu)Mlv&PgGd@~7THAj3mizm1*#aQq!IHeLe?XLt-qP_~246u~`IyeVIc-t+nF z)aPA*c5`e>zsnglr??kcbvCJDz4zZDqwqpEPW~9uJdDc%4s2Slt{tbpv*Pais9l>f{gJ6MKN!R-&mHLPlJH>}{K`Wy@7d zv0GQ4Es_%=CpBJ18_`6YF(H~HNhSE6jH^Xt=TcdVnugO7XCVJ`E=ng)U#t2&y_%Hx z1CDLlt3Qv0Bwrc_Cb2BKm%EhY`sr&t>-{`e7SkJLEEd21kZfC%=;8%fx>nd3~ zWkK=rRA_p)0|^b=58hCC8jgFv34RR=UH4xP=$rtdb&wV|Dg0ME?31F_4WeG0MTr*P z2F(Tu=h%&1V-jC`;76n3sLet5&W&jg+>6jU!CTfxC7f`zA-F?JW{dG9m!0{mUCzUF zNq(-rC$eQCqc=-GaxvB-)pQpU&l zU|URSYUSx%Iu3&)xpNh$aE$XIFEzF7+4Ow})2MfIKbGf}vfrVr>TpC_bB=;-wH^W8 zj&vmc+S2*W3DMO-TKlfl_xCj~hw{3!lVI6x(Pc+&+9+%pA|4xbO2GBJmY6%Nb-6Dq z4FjhRlmneMRb~A&APj}o(+2_BYRKdnMsw9+Jl-UL&)%P4>vR~ux{1FpLsO(bje!1M z_}V*Yc5l#0Nqi~X?)mfVV9NP)yaPd%Et2|3?5Z#*_myq;4*SOkSKfgcvE-nzwbvwsUbNGjY;Ppqnx`CY{ z4CsaRH1v8stPe6v%%`q2hLOG|Y!J=HfoTPI^EiYLB9IA&_Cm8}{Jh7(v1T~5zAcy? zM5wno0&hCeV_JaI<^JPTcb+HJu04bs17&9ONZZP zKrB_$>VI5~ZIlzw>*u_XEl6(tqb;7;9>|ifdWTAEfT${5=!dxc>KbIMvaqewHhMSP zELzy;@&0~xlB=btm1_#W_wDtzN`aJMToe2Kbikx9ALSEGoD&wE-%oTGLb5R|&70_Z zi^uJ-A05oFt~Z-z=kgfVuLFV=5Bl@A1h)?P0AS*XPw#g`Cmi-@TMSzl_CTW!rHe|s zo!2+Wf9dE&fBtR09_{@J;xj$CLb5wf$^G~B8P3NL3Y%RySX4&h*X}ar$K-dH*&?BO zDY+L2h+Xc-JhIaxblUh0R{Mc4MeA_DPD&L0Kj_XqKCU0Q&?SV2J)zu$w6Gw&6v?*d z&HO<8gdd2YY)H1RK1wtGf>IsGv-N#3I&ic`DDKFkb+XEz92YI4>yj87Qoa zvS65#^L|&&>Kgey+*nS~_ijZpjA$mLVE#by5>+%Z@%=dlI*DE`d1Rn4BV>@H+RZoe+}CLjjnd~lzV}I^zXK^0 zn@kfN#-s66v%Gd%Q zjVUB`%hISM4Gb%hlqWh65teKy=`|+k&fvfVTY}0s9MX=*^M`%-Uvs;SU?u%0)WziN zC!K2?Bl*D{kM1zs19+OJ`k`#zerg)F=Jt@%VAgZ#p!iJWVX>q*~s2@SE8Fm@vSxLRd$ zX&(FMnT@aUz|Cij^A$wcJ)9PP4knw&{;f#ERyko{vF2W$SHBOGzm~rRH}^(I-O5>M7XLdw4>V;2jo;7jr~Oxh;Pl>><0#uUKwMId`x83y=x@5T}=$ z3`{0<{+PmLjZTD~1FRxHUS59sU^^8`TV|gw`sY;Wv>*c1+!gmX67hc-a%Yl-4bTOf zE(i{bs0?ZuzmH3?uH|2`z=PrpfJO65Wh7zum0e#*F%t)>`&^|eC|(hgjcL`Wo{^Q% z@k!O^0&&wAS011>QPT%^^S)0LYgu}sagIooI={8%M!<-OP`OtWi z>T<27{h~c3k==*24=W;C>{BA*+_f9pe-hpA_efXnwE7$g%Yle{d%JsC(#sK?7O-uFl{6eP!5T zw;S_Vo_T!zSf6&QtFJE*-#Te3wq4?`>Mo_Zjs__o+enotKvz0tHY#hnCJ9X)s!MJ? z71SR5e7g&kW^P~EKTC>o~y_&dI?4~)m>BG@+k z^WujU9^RJ@0|rLezbg0p?7^U;Xs z=K2#H9KGD|(rhAqAn#X@>n&`-P(CkjhI_q3vV~VSug!a@gYxxmo2`>o<*?6=zh}%C zhmW<|z?+x_P#xH*%YT*fTXxi18Uq7Qrtb96!^>d`&hKyIl^9(6Dt0*+Y@7!~#xO!^ zR5@QNTz4`eyXwMF6pKrMy6NOzGffA^*oIRFc{uNGvp48m=shOL#M9OPn^G!B+-^|+ zgmZT-Ok&ma=hl#^bHN=fN`+){FxY;-9?^?CSm5fll z@q{7ise=c**2~Xz>dYCccrN6lkU?1S!{3jZd$hId8Ir#v!j5m?J&73?21tTj>C2GNUy6_*v39?J#%cS%tGLd3G z7>|!(e^GUYPCu>l%j;p?_K9FWTR6w^;fa6PT)NtU)$B9OXzm9#aYLY;?#GfFM?;*j zvAlK=ElPyjQk+;u!fu@@%Qle`O-~8 zTA!*BIqX2KlS<8?;>Tz%$No?Y+4)2s@4}Hm#JZ~I!M2Eog`XRzWUBgLiw{wM-(zO< zu0{3EV78bu!J3WTU#)6-xNf)VcHh2&mwsR01K{5zKgo{Wiu$V!n>c_~tPt$%54jTn zZwxo}#bl`J?cfaANUE*rkraD6>5XqSk$c>-c)oZm^JnCRxB8gn54%OVYB&e3u?Xe1 zb@(!BZZ>Gb^et*pai5B@#uR6{*o=8PRYh4U3dQn41EN_4s9_w4c4CBbfC{wa-S$yO z9d7GyvXIe)@_vi1Gziuo@K7#yLOCBbYmBM5rvZkQG*&5Qjc>!pZ8}o-(=$%|bNYIY zJp9UOFaYTWpxWd~E)MJme_mRtND&wmtewJ9YgcS;_PeR%@UBJ5vmQUQF})vy{iFH{ zz6A50%-1KP@L-ti(r@#x`}5X4<-dxd`eRzU*u%)~d0T_IoTds-vV+aP+<8 zM^ECzK&M49&CNWzt)BxR<7f+f^-Y1)D5-7NzAb0ehW0rh zdkMa~sBi`;C}DW>6ra@LCEr)bJ&!L(q&(NuBs@v@(Lm3PU$xSP_J^ygrX5mn=TTtj zKIgp8uJ@B2_O(v|62ydEuwMB^!}D6KuyQ0DOv~?MvI(!Ee%>@-UQU@l9u4br<^%7A zrTzL^)XNj~vM+)nQM^_Hw!aiKHduGnO^)-fynTlLc0F1LA1$cE7%pw6kt`a>@XDYP z3^#sG9_5w-(v1p7&8~!weVyf@8YZ+LH5XW-7V0adSDa3)#_FYrbk%q z?|ci%(iE6D(QmK8-cw_8jRxm2v}N0}qY7xY26kFq(dren;!5M7{e8ZW_rH$WwZ`M| zD#_xjgPaiCQt|in)eN}KNUhm$V!Fu2i#f_0o~NPl&^f`jM{WB9Ww`9^qumrdGRIQ+ zJ3qr5-)q-twqXrHOZ_R!#4X#4h&Y*|EQnTBP5LYd1+uhLkGFQp?Avn~%_1dmkr~;( z#QSX?sPJZNI)&D6Li5*0j7R)G(yr>8OZM9dX}_ZA&)Hrf_S*G+pu`F_&mqe|)Bbkb zh54K!ak8Jv@MDNiWv@aIG${?!5CE23llKE#&S0R`75ZH;s=}tfFPDn$(3*8Vcm#M$ zd)B9R0ZUT1*Kj#OdPwLW5>mq3+@`1dr*Yd?2%O&j5xL}*mD8e|C0Hf*{0ZvBkrWzX z@E;NW%wk?2LemtakIF8eHudf<)cEYK)fhcjU#;6MWyz zzD9`HA4!spx-snaqTi;Vt;1=CCrk6ZIH`Wa&*GDsGtNqR`UPZN!pNsl9pul*jfc|Wu#%J=|ZQps1Q}!z6(2CwZ`>~>77Zo9cREh0*&98i< zQ2L=&U^8qSDS&*EB@XWUp{Pbi5{EO9y=+tM0;OR=I{&EMkj?FBT!{G<$45SDi^xd8 z=VKoo`b_t?5`-Uut?`w;o9XiOg1@zN+V-J)tc&S!u_XuKS-#nObi~QAOMcnUK{5p< zx?!hmGf!?kBx)Td?a#8dtLCfkw@$4NcQiy4l*O{x6Ou)9<{tN8leL+;_wnnkmp{xq z5Q$+vjE`LhZd&k6@zURt(m>rN-^en#myi`luCX3F8DaC3zRX*zwO>29NHM*Cs- zO?k^Hv7ZL1;?Jq?#{2wO>-rtM=qhBKqt6K2{pWvxi-8%>Q2l_JQ%>C-Kq>vS<3>&x zi2J>kMH!YAP;e-`9NbRL(J9a{6*cWQuTqhvncpN?(sNY4>%JjcZhetK_~YFjr7uIT zms;bQZr(9u!|}fTT1hzvQEHw98qOx!`|x3nr<6fqS_;tsr{aLuv%^VYf3I(iNQiz` z%iJn4Ow&&y1z6RUvH~fZyc>>j~_SMfPqYokKn) zuOz>-2Btiy3@p972Z zYNW7NXN{?A-);A|_vJ<|_S^8pn^>8}YvDMdSrMV44*@ZJ4`_=edJ3CzpIpBI@-xTq zL20gd{W@Vb=C5Pwdsa`~%J^9Nx7WGh79=mo|)yh~cH^RHv+ zHq;uF^OSmUWpcP%H>}|#o#y`43LxR(p(T2|oA$t*(R$BFN8^@iQhZqjj4Sa-GLcM@ zqsc7xceh;-QxuCf=AD~71#Xgomb-VRSGhn0^fmY1X;+BUJh>NfJeYq^vf!KE!^V5 z&bh9cU&@5+h?wU1NC3TJ50A$}UBN!em>WWOCqtEfGAT)&?(&e2Z*NxXt=;aQ71u#l z7{ZdKqwnJRfRS$IKzeQy}PMeEO`9q(CZXA4}oMy9i8hVfMe{XX&yu znGP?lzHpX}gML}?>qAQHkNtj6)xJR!l;4;s{j)T$Fy#p}@=R>|#6D*ySDF1;+FY9+ zQ|puO^CFjB>pDO1>+f359?|=OyE7eRf-5@(#wzyBR17U={Y%e0uJg?qoSnUUc>5K_ zz_umaZ(MnjNKbIjUu}{$E_x&?x|b;newJzBt37ro!9WMJMjDsb1WqBO*57AemcldPU8ySMA2U&NqCebq9Bq)-atu`L4th!S@apB z?>!w9iF?uI1t*1Q4XCS{=Hsb z$5K0`T0k&ZdZhiD@#iP2Ke~h~4s581J7*1+a)1e;V79L`eqQ3DD$MV-c%Cj@9R)t znwp}fp9e(l0;X8$jr^UyuaORq_}722bO|r*uagf7vv}HRxGcEgRJ6-9h(`ulaiv~3 zReJuT;*SWHFh_=mJ7Ru3A|fn#7GGQ5{up~5IcO+2Yg`(8rY3sGnnV?$+!XDTh6I)> zs)5diuN@69XMI>l?$;l|H<3^_{wUYs3@fzUD0aE0sQqH_SU#{fGxgxXF5YtNySYv5 z`}4s>NAmak>T~fJ$Sg-&=A^MkJDskDpX|Yx`0$+QBzHXz2<imnouQBl1d!`nlUTme93Fp>qSE zq{>^duj&~^)^U+wc;#{?Hvwvo3yo zr^J?ZhKS|A$XQjq!q8bC#%Oinl65|#N*_zdeE>j{{fAymvU)2?^4#hb9YJf#-F|IL zH6>+2H4zS+4wDw!r0-Xudq0n5TYl-QYFsM&J6UyPoIiKz(D1(82Fzw_PML#5uG?>#6m zwa!UOh>SuS086mRu>ajpQ|s`(@eUXbY4`6{Gy~xQc=)%kpt4$!)C`B&P|kjtU5}_K z7XxtC;$feV?DSO%Xt1##iE&(laGj10buuRkZ8&27`aVdwInh}a?6!RB?WFe)X2Vf| z?v}$$bi5^;P3w}SCATH`9!o{d9}U#A^E#imv8{f0yP*ghJzr8>-HV{|5uNeK6o=Q- z3mEhTY4P`~*l_~t$L+RDPjNQT-RafQf6$dQWj^0g{{a!%hLhGyuM@P?=^I{7*V9$| zP_7Bpdi-$hI^4(2UtfS#782B3XViVn7_IcXzRDBLJg&9Hl+F+oS9&>2A`_B_qieUQ zQC%|a(g_a}Y^(aYOv&+!)+Oup@DY~c$k6g}IH3!pxWUKod~8Dc4gupqryVnn9-H?~ zpL8qu`1lza5cPXyU=qlkll&D7RoZV43>h*>RcNwNDD$G0iS%J1){`&G(O(&%&8zU< zFwgqe0H|NZ!+fp0+!}&U>611k`v7HI2>DfEBQm{Xoz$QE?Js8D3 zUc#Z2n1e-&il^Q(>&km#k%_5h!3{8Ej&NH&b??&CGwnP4q^9{ic?FT15YYt20`=J# z{sE7Hn4p7st|k>bKQ|iz>pkI99gp?{FG5d|Sf)@H$=pReINBYrciIoCQ&{2Yv8{BJ z2EEQXxkxVV5OGL>zuKGT-b_z#V|_&^pxqwh@su_f5^TRX~tIiSHf z!MXQWeR$G6R=P4zCdH^(;YXYWqeU%CSM>-0UkN4m>0+zIgAyB=iYyp}_w7lMYC zpy%P-rDadh(wo}P(~TjIwwd1pV!E_xu+~TDE{otf9~iFG z;yF`)rmR$58lz)8ONUa&90zT7DH0` z)_xoFuMVzn=RJ|d=4kPKDAUH1y^$=(^H3%PKleA;)UmFG?bQQU3;hxLU2eAZd96gO zUKEG z^QqNiLWawmI;;$!OR60|l?2V*#M^@duDn7h83p#&9$8b6&bf!YA4fw$Sgc{^m_CeN zsF!*dR41$qUbf%|heg1z^WNUVry7TYvYvIT{Jwn@imJK~gpUfX+94lf%DFM|?SxjS zGt>jGr>sICK$^axS#0I+i50m8%qa? z=?)x(C$N+8uUR_M3`da&LCxuo-2l`axbZJKVDosN4!?2r{h-tAPFLCd0ImEy?#~i| zr2{G*9C5HT6MBd9A(&p1tDNd;yxAT%7T+tmdYZY8vO%ALmBhBT%{gAz%Q}^Oje1wtiq}HFW?&j>c{oe48xVyM3{=NEv15h7SKW69tQ3NL(vtId zNMgdjN1^YM3Vkna)`;S;dfauNgbnMS9cEi(==;|d>xW|I2sdtU+af{XGF7-1`fYUq zhwMU=!tXO9g}#&@Qvzg7yphry%3N))*NQ$C?Sy>d8o$Mlo&y)9X+DNyN}EmJ(5!W^%sv0;DW^@#MJ?yd!qP_sve?z14)S zM9rHFIYmq_XeuFT5DVG+*0?4x*HFdPtb}IitvCt&BM@LGt80&3Cih6ptwhN5oFFA1 z0mogI2iT}+mxfx>EB3z1sVpFd#}bOyUfP z7S*(-AW+q~>%lExw<9XWK31IEjuU)FOXe!!%0YjQ$xGTFr2clVWXV@r+-nH-9#fokQ6wWIf}B+-x5vmA1XBhqYGE z#~wpw656IY$ds^w5mh5Wr7odQ>$a&jGf)=+>R@8+a_Jy#r%Ax8=p%C*u5I&O4(4z4 z_KcE>`(|#c+=zffy}wHozV^dYrB5j3t-0(&fpqVSrcH}eZZWm8#)~v9{HeKg3xWcMHOdg%)+%9rp_4~D%X!BPiPYs#KakOJt z#i^SsZ^z)$fN8QHkp(o@d4jqjnt&uS-Y$7-^YUtIgU~0}r4LvcGCO~MwV2nAz)g(A zEnyCkDFkU7kvwxSVYGAGvSu)Nj$a>L_r9y0tB}coa#7{@K62bZ$g^D z6P*X_-2%Pv<_gb@*eVZ)kErv0>vc)%nHRum-t1}qauK8~d0jEUA@;z~tF_fj<0{5x z7VcG?I{v#?|Y*iwZBw}RU}v(sci+3{!P_b;#3*t8xGJk z=-f?`p8PL-l#zRpY-S!jph=F-*}S-Se~Tw88$EoZ9uxrzK&xur@Wr!vv<1}t^{4iip0NP8`c(N@`jh^M<7$jt zUL35x0%;q~;`Rz09%sW^mD$~w*xtjczdXE>&!e4w|WoR z%@e|Zi307;`q8w17l!`mB!fx$4hxYW%qSWgG6e#WR!lb15e5U$@BCCojV~m&u~0nm9qjWf(TSi=9@OC+RzEdK;K@7* zuPgcXe~_l6S=BiniN;`pw_Bl#zS+LvXVD_Pe;Ag9Hs|mC`+L1Uc|s|v%CpkpNIJW9 z>%Q>Q(<3WRui?^+)*x|F<1 zGTNxId!T@?Iv|9h^vJ;c?7u0P$IOgXoCyVAw_&&RHlK{_f=@Pyt$Pw>Sr`IWl*kl* z(WjqQ7a}^}-0c{L;z>zko1$u8+!*N_Uu<~dJ}*oTNS%=CYxx=ihr?8bz~mR|MZHJ7 zC3{xpRck$SO;f4^6S0XkRkurVJMlPkDsSX!K)Oaprmm+#eG=73#WVIjmg$mCqUtcZSJ%DP2N=iIm zIWYhF@dIl*1P@{rfdhz7z!#bbsxTbjcA&*z-IzRoOVsPSPoC5sS_awkJwM_M>(=iP zNU^C2S6lJt=4H)#J2{Ic7$+&)uYg6YVhxvzdP>dThnU|21#&j515gCTSr(D!HK+t( z;d76T?kx5{n{FX?;)b3E_(wCC3P@NU2}zPF`xqRfJ)M^i_YPiCGCK8g=dg_3@B`#~ zGs6ZpTHLI@!#sJME|T)zT=!$0n^o7t>qWPmMoE>!A@71j_Ohc-x*W`#D}Z2Jc`|@s z`yG*D#K-8Tr*j$TX$#UvGVo;j8+g$b*VjINp1zKLql&}#do;o5^q|=gx9|Y57~N>Q zpqH9E1YaB$1T#&Z9{BTff1l+I;V~9Tsq=rLH{7jFQl%|{d*Z%k!K?89&G_(uFr!x? zay0{G+?-82b?sdytgF`>&(Cf9eSUD(IYYk6kJbX9t2$m%H$o2!YyOp3g@ZN;$Ddhs z#_%*KMkL_^PM%EfO1xUD$>Sl<7Xp2u%j*kgNGv(B&&aoxAVEPEduR=-V21Kp_hBDM zJh#_?zKEIGVfjl*jr5BlpTKMKx>gOfB4rQao}7Lmf9lj$5FUm@AGdV$sX5RIOlOCny271kD zpXjXM1j}Ea9Aq?>r+cD7q$oycy4Y@A($gx; z>Y#?e%TY7H?ArNPPT_ zz*8YcFyBEL(`ieq!MM|gwg~ne`sO;y1Dbm z>a1eEc0tvzmTbLgm4ya!w3u!3?GcCx`p8+a&^G$;>|wTm4WiqY;+$5O z66&J-95_&}pZ(c9=e!RG2(Z#A#Ia1EH#3OmzmYn=!ALq@YaSx0yCYf^9fl9DcoTH; zV$G9$6ur!Cqsvv*)eTLD_SXF{c>(sz&`8fsYkQj4DIBT|<~17n8!P4~9R26@ni4^! z4Ess4^4iJEr+hyq3Bo+*ke%L^LNl|bx*F!I4}sJlGPBup!5Twe;1P1`D&jQzB?Eb! z1WgKzvU5|;gT08Wrm0cDo548Ziiv<1<5yVbI%pWGZ$1|(y?xTC8~eQsz@F5rw>lR+%MY!LxT=XKy zTbvyHjluK)t>yEJQo@;|%xa6XYidJPi~~)b2OJ6C&Gog}vc4haT7IAXsm?A-RupmF z58c&bNHr^FUK?YM`$OmpKCS9Jwc#O@x4EmZqazxPX8@)iD3CwFG96FOn= zt0DiiG(Jn^3;;2w?|EO9=4IO7!C4z}-T$jzy&M!fJC=N8Z*SySmF@ehs)-lhCC~eH z7}WduE?mm@b)U}Rip4JE+*>C(s!=OFq6}LdFO?%*KnWxtQO+EgvgvW%P;m8#PR$_d z;-J#VJxQo!)LI&q3~qtjXs?sJea|7)Q3Loh5C4AtIGQ#7JrU#OJz8}&*_JBQ(q2J1H0~Ad@KtW#nA;V+31YQz97hTk?RwUgFpkw`5m_r zVXyS+5W%?k?sHnMlZu3h8Ko?~Bl@Q#8zEI)rQ%>-A6 ztS?W4l5lhQ0dal)O&0feLyTzg4!qMVn}1ePd`kFP*MEpSf9%QIwH*0;_0petxaq-# zDS!w3d`6R3*Ne`NwwEv+{Grs%G}v zV<;EtC`o0FbNTIgdk(gMDMR>-cyn3A=w?+8$5-{a04)K5b)ZIDN4uZP-fg0`6RA(2 zXQdoN%)=|7(KaB$wl_4-r|D~&8@pap?!1u6goV%g_<7sF%|0I&#|P3rte>`G^q#(# zQv9?-joczWRlg4VrSc%I9L^B)^)Hx#_67{MlWh6z(dXUKM(zwZr<=~{H=u#{r)D#> z(+BX#`}hiuQtZc}UpsR?ZdPMYLvsH8nM8!ph+^aazq&2W{C#`-nWAOEaf)?!?E+Bv z^m9Emx|X2MotQz*vM@Ie1p4|D<%8^$Rd>Z3SeENesQRX@fFU{Calb74d`3|quYcGx z@{#x{yR?tdQiPghb%Ycc&I>Net4#T=ibhkW!^p?XT?+Z+`XZr~v`KJ;;pBHPyZ~9q zFQfu=FFkfyd}iLBC%ri|B=Bfma1O?FI}hnM>1f~;mvac2%oWt(lMfm{4kL{91UADg zeaXb9^)?!b6vFtHAQj~s`6X?;s;jL;IDF~{^_5RDwO#H?NB$1yZ9mVF`?B8lUm_$$ zLSj83zu&yTx$JwcM0B#gHj;s5m$G$uR?)3Ue&Myr%h$2f_UB`&Ro!dv z*QrFe{{b?BB&9RnMrN?ayR&zstu<4KrtwmY23XG=7?Wny`F+<{NM> zH((=4a1%N+<3e_Tj;;Q5?eV2$#JbWdT(k1*d+eMcEM^~^B;4xi#9~HL5t^Y4fy$iNE^8LoyOe?2udC*X=(yb9#Kk!nyS_5nd1b zMt^^uZV9j~X2l>XM{eqIQ=&D{Me2K(a<2QBv&s;jydIUk%&NXTyv;-*SAh?U$~;#g zCDiAW@mwflng;xv-+L30tb^;Wj|##Y?+NB#)B-9LVM>7?Vt%_Dt$2)kbsUD5;G8fy zO9FZPeh1A*iS%==b;~;gpm-7ipO1O#32JHo9jZnQ&NV&p&veFK?4uONU+zCv(U{Zo zk>h7-Q9rM5(z`beELjse6NkBeg*}O38`ORU08dL-SCdT7%UKw3q$kFuAFVH?XUuh~ zf9Vtm(yWS0s<#=*S2Uk9sj`RtcykCz0n`ASElB$SP@KhRziOrwv-*&=ER)*wQR}wv z)bVc-4R+@aES3~g!ZOCq)^2wJ{;ybklx%X?6T0^l4$EI}8LlDd@~|Mm?^gc7swOFz z1G?0lVSH+p>%qpnbYT%&wM8-z$H5r)r$DKdQ}uA8JLH2I29kXaJ2I^EZeUmo*KYz# z{X>TGcb#8~Oqkv#GIz(uB1RYmjrNV3u*gSq5P$Zz=BcWwg0gpKdFz=6=HztWst9Af zGNAy$KFZ9epa?jgh;tK{6Lff+5fB_Cgf=N?CY>+c#-1Fm$1ZG`+%v<=k#= z%GDnkh*tN4-lw(Af!Ss94!f&9(&ixT#}X|rN_lhNk1MlI1_fQG<2{s z*W1r*7yH&C{bwuO{o(`4Ie8+a1ql-d(_`=OjMVKfaTXTKWnY=0_;30` z{`PSQhLbSGk#82N&X@h6czksdPA(F_-JyR7@>qiz#Dy5muu7YqEoT{1L@wZWdzCkF|(Dj$^?FzSi^2KIFJpr%;QV=d|yS)J_-8 zfjrPHM>(bF@UVxonsMLSV%MUGc17=NhCh!Qm7t0jk$m=3pe5!xHa!!6^Xv@V<+@JN z)+cgGo8$4e?_2s#{VL)oZ_++%P|j~9TQD;*L4Mt>&_viduJQFp-|--;u-m?%QNupl zfuT7k%iXD`BD?DDYOn_`!4LX3`57AZdq3+{LA#-iB6)csdV3&@3pZ1+VhiTtc4m$j zeVtrDOc@#enzR2g^sC`%l&x+^HTa6mdyR9Cy}MT7jlh17RJ5yJvCmD$3cbzh*DjYq8+NxVk_)LxWz7Vyf6rRd1!2GAYq+HBo%+*8$WL z4UvG@5c|K&%8@yB`@mjuSrRj!mBW5&*|S&fgVtLtEBsUB-JIHyjWIxNX_NgPh0j|w zWyyta+^=z9um1TkX@9C&Mp!~#j&aIzWqXGJZ$+80{!Y+d-O!Lno@8jw!g_KOYqIM1FYVsFPp;tv-N z{~m(+zHw*TIv%dYoAZE;jXrNAv{;O}M_Fr-X+w=o8K)>1kC0io)^uM6f<5(VVuh5I6l`- z+=Y6(squSF1-jE=BK=CQ-Q&HU;WID^S@o+u7hJ#b4G~_Cgcsq;Goc-~LN8=rdk>boX&ngK@Q}bSnkf};oB`h{#r!zG z`cVZZB1Q+po={c{(td`f&e+%G>>YkKe1G&S^C&d3O(+4cnE78OFQ##k<(xmc4^6wc z`1mfrAAJhzg_>J_-+TJ?#Ad1j^}f8hi{f7+fa8luF7m%@WaDxXoO**>@3)V8)V+Pi zh3x3{Nn%bP${SoD$jC|#jb;0f%9h#7NP#_{lHedoetB7-ktCM3-|>Fx={Ecn&xA+e zZ@Gsjayi4&TnL*W(V^rJ21PE;ELB8aa(!8su4JC??&-F~=czpQhvuTJIU2oTIP=#M z{O#oNcw4&L!QlSrpNbK^J&ZQLH#Bz;#erNyFZaK!AB+2_ zrz+ng_1(Msfw0_$$C?aaipVNkJ%bNXx**0bFr}r7of)ns9z-KcvrksY$mL;KOoy9j z!WSCGWmW2F0G}7~5Ut2jUC1he;w24KeT84o)4g6mGx1|jg!UeSn-=|4*bdda%^nwB zv<{hQ5-LktMN|4*)1sB~k$w7lYnz$+xtSN2tnw!88NEh$qfK2`c1_u+ImPeSo8E3P zVIPCj=_rZ&-?7QZXF3_D7jUCdfvTi0H7$&(6Qq_tNFsKhyDY?j9W^vcY<02BnKYO0 zh9?E9dpK*+)X9}6k6=E&f+sdNlxHjKXzzKytU7X|lN^4eZ)53TI(YTL{@!4^g4ewc zcYm;=LZ+8zy8C*gsnjMn`(sTsiX-^>XCvQpl?H?rYShp9bfiTaa-iaGq>Tb&_XbtV z+IT@KNz5deYwLWl?`8v6_U#%86~z}&BnSEsQd)DoUnYaG1_K=ddth?Fb4s+fFnzZl zdNBAa_)xs2ILyuCiv2-;nt(j+aS(f87`$N*MfN-ARbp_IXvB$)cy=^oxK{qqoeDWlyF zV|@bqXt)mWHH|OyWV8`$PZx^kVYw-H?{S|}v_O#er(INtn~yFi(9C751%M+reWwct8H(~rW5X;+4w1K?NU_;ps23Q+FCzchNd4w_E(N>8dDRV( za8PPkH>X0(dJX39UmrArMX!54ioaT>D$Y5rB-_CHlM2c#4-)I4dw`~A**{j@w1=4! z$fV#?Utxb1>tDl>9UTppIs04rxdp*pI;Kz~+56&|drXwjh<5jzLWdO2TCd12%a_qi zY?%COGY;jnU)Fbu9-0XZmrZWNwB{o*dOlcwy!^`6{i^gsvM_JnR(cq3#O>z5i!2{a zn<`V{`)-X;U4%(o8as5$#aGaspQ={`#Ie_te zx3lg1)<%I4&Ls!85g<>0$rrfQwJ+vF>-{8-h6=Y@{ddukbUGXl3Z+5HQg4$?eR{L~ zMz{LqqlggJXZCY>exBDqw8X><6@teO?OQm+-nQ_6p+%7kB6L*m9>@5yV7G+}M=k9= zX5hOT3?FKppJbqYm$Te?M{a_?C$8y6h%yoG;<#3 zu3mz|B#!(WbtkE1pVBp|GvWhpv%)oioKU4Joxw^RS?*W#ow)jiAwwm5#au9w9+-Vq zqn%bX>*Je|GT!I|B|&=kA_#}UY`LY|D>!~qAH-Muo=3+TPLqI)xKKTeC=m9A%AQJuVeP!#8mZ+G|KJF0^a~~Qm zvtcb}E!#;1z4ZgbO5_hzkmR(NM*913H1~cioYH9@4%o&Leztr#InJ>KmPS^hS6Cwc z%)i+J?cuHG21NqMZ!jkN0QH$ucVGbHn)STOtr=7$;!(zZfDdBlWgUO=?t0p0tw_%zi~CAvO_x`f2{$BY7E4 z@z_R37QYjx`shbSfv`b^*dn*|P%T}mCG8~%RkDS$j}S64KiVr6%i@D1Ry$vE0MlF? z!{{HuBvT&9!{$DEdoTQqM(Ze5h^1Jww?9~Aw z&lBv&r|>U6GYs#0OI_>Wc;#?@>N4uVggy2a_acaVlHIF` zB2{G1@W}ypLfGd{wTI;NJ`oRHj{KixFTaa9I)_}kf5@Kl-K@ATr?J+5G)R-T@q7OS zCjF@+0od)g$m6rw^u6{qKzUOc!EZBu)bT+Og#8Y2Y5gm-mq1j$ZAl}Q1~6T+EWi4- zUX_!vy@aofg6FD9nTRUri$fNlygRW0k%YTU-~Ht8r=j;(UEtKAda*wH2{-rct&RAy zQPT~rAz;%S^PH+XGcQxh{`7ssS3`GsX1&Qq#LcKm(F=A>&g9%w*-?pJ_KruGD{?~O= z;V(XXG>Ga99@4&K`sIq9L-{4YvU}HXpA}Z_Z-C@J%k6p5ZVA{4YyUVL7!d+w>#^l1 zWIQtc8#>Md`hH=-VIoR{8p%SVyUO?w^?MFNzUpwin$*}F!Z>wiR^fx)uu1(Le8W6p zBwc|U(^UxRBF)vvDX4=2UNR?JjzfI{g!YxT_u=(~DZ@1_*!RmF`X<}Y^c7E!+Wm(4 zm;YtKpLA#(O)|^xNJb!^w#fZ$1x}B$Qb5>{ftKFu9-x^%{w@eVvo!GKSkjqc_Dc`~s5s@pO zgi|{*k`UFKs(oio!EOF1Y5vuh&kbQ;N&(og&rnbJU$`kOb~An z;&-LEC~!7=#z&dcmRF7rwd6)X&eZqqXm<#qw)1rcu@_0O34}`Ml=IHSSRoctD9)_T zXt5EXe_6;*x&4vWgTG%GI+G3@rbCszAyKoRRA!n*@fEF~Ps#jH1obqCv(2awnpRBq zxlNqEuTK!GY4e71=?v*f-V-HW&e>>5)~G?;mnz=XTMHTfRY;1Ui1_&4WH_fXIcGTtkelx> zA|8i*#KCQz67L7*b@c^*F;C5NczTyOIuXqygSuoRd*uvH;S=Na*UIrSUoUD!utCBP z^3^42bsUbO`Ij?0I*uJ+*|yxKJI=bQ%hj#+qvCyRllt^cz2S3P3QNp>U7-ZJq+I$agczq*MyZ;qt5rO_PJk$qyV;fo|FeMSMb(3IYrx!1js#WH+&)?vKrqS{PFhs!^}=^-D!c60iZd1P7BRu5DD!I zb0Ri!V7dXfWya~PkY*7-qzh;nx61gS@x}mmTc=?c?f(FN`fi?Sf;FD-rlTqBm`Wws z^|xV0d(^A_J)IlFtYeBa@PMg$A9uuW$i2|YSl>_JP-`D!@sAIvhO-+Q8u0lKQm4mo zKZQd;P4|;x;E@n%*_+y;t5b7K?$VnzURXsgJ=i4xzs`Ac(@X376-()6tR1se{BRUd$e5ATY&;G7o-o6?| z7kVUGQ^Nh}N9wc5TR#rW9X_n01@+21)$w^x=Bc^U%rBDNE>0Akc}J@bi;YHwjkHHY zbCAP>?(Ut~TC`_Dew4!Q&n-MZwf5s}lDgy-$u2s)v?c2%KS5-CtUWLkdOc6BRv+Mr z`hs&3I@jY{m>*=HTY6AdAe3~t@<%P{)w(XvJ!8zhys=9@u@DAuypYI9FH~ZF${eI` z2f#t6)dur)A5Gff;!mC?M;sgVYR_&2epyw-UdOTkJ-w`Fs(E^U0^cI3p4RPfjaDj3 z>KcAbAeP{Dz?&iwhszZO&m!CGnFpmwyz|E@9!ZcI!l}fW5)Iv>b7iTkFHP~C!tggi zA?q__jUCoHY68Us{wYNOrZvKj*%u>wB@Nu7bY4EZnY;UN*Ni?CK#8X#5Gbh|`nE>A z>6B3b-^T4?ET4_%s>XwvUIa1UqWH?Yvb)IP&ZUcMuLp>%g9&8_aasDY*Fj-YZe|#kCq)g?@r0QlP@fwx7$3Pp9%zChIXzOE7LvWw-MIiMthO}rapCV zKK4Um`tK91G3uTK-kueU8d}vH&GWmH=^^?7Kn{zzZw?+$e%+#Gfm0!aWYrGwwBl9s2AxL<6&syzZ-`^9(FtrnJ*YH_=vMELd5dxiDf~jV9fo)LNvhmHq}5!@eXM;EFq5UBWX7zlGD-Gdg0%5Ycjt?z1ZJ zuUi|G>Pi}VViZxVG$)`B;7*|#1pfh$txv1{vMbb6m3>kSoGP6!b@*z2TkuQwXaCV{ z%J=*jydQ=W)r!ksmS%!ED-eH(;ECY>rnRf8k@p~4k_`55hxve>4rFU+>3V*v*DF9b z@1c`+%)x$@pdq^Vt9Onx?sUp#Y&Z!0`{W!pMj#SJs;iG{Q2cYn-6ejUE5;~WDrr=o z>mPhirPjEfVz6BCMts5Q%dE^wZTg#;@eM{YkxTZo(*ffW$5NBfcvV}pU=$rXjF%$7 zZ*_v=un_+xErHR^NGI&vE*aZ&p&(vixdnu>*H%jLcksyz24Qh(r8y><4|gbE;ebto zQn2UFw0F!?&XqZHXLix{85&}OVC1}&_p(*3Bc>L4EuYht zWY3%(xIhVk^vW91zKlGK>S`Xrv8P;m#Q6EA(eqV464LtZ?lZ@bjLh4-^~Z(v?)+CX ztGBzZAP#=gKF|0Sc5x4AM|j&1i-%erE%3)9GKC(%|9#Kz^HN#renSZ_um1Y36^B*) zq4gOZQbFooi^7tPNLwFpS2I7;DA+_)J-vrr;^|yY6W%sYgZVQpG?7Yti;KhRFF4Iu-_V`}cY3@6|BJv#gu{xx zJ@q@bAl~*#^CbY+BBg{yKbAZRUPm%3_Zu6+5m;&_X4gFm+Rzn*PLld5E_41Pwmx-eIB+uJ@cC-5e)bgkdci6a1@P}aA)-LGl;FbGa~%^v+}yIe3A zDZ45ZUtD3P4tD!l+-g6=0Ta!qz+d*8T-1fBl_6XKRQ_b}IZSNY9p$_1bZ{2-K_ zc{#UcAAZlwmMLT(p~+R)PbY*J^zV}&St)o<%%*yC>g%UgYc7}WUbSV9wkwYVcaCmP zlXbDi2^b|?yAj#@cU&)eESSlyINwtPA~Jj`>+~ZzLz8~Kz_D^@lr!cZMqD3DQkrJ} z!_v>I)j;Wtk2a2QumeOjR5LLEm@3-h87>Ii%3(uQcvaawg2MN;RVfXBX0v;|e?|-0 z+2iF2kAsh{LIy4 zQie1sI7hw~hhOxNq?qvgJ2A=n{jkm=Lvebt>XVtDqUO`Vp;*+8QWW6fM#EOh-U7-4n<;ug}# zq<+~iQz7R1i})4S0Rn|ejqd9A^LzeK14?d#)xVV-BK(0=FRt(ky!E|3l>V%v(e5hp zB@m#-m(&#rl!Zc`-CH*M^C!9&SUHM;^^V1oW6Yfh&}D~)&eEJWY; za^?1Xrz$I_eMmaizei~Q6ihYx-LOHV$X0qT(Hh1L8U_w*R{yP_qLq9`^Kj$QFLu19 z@~kMz6fw1#`vt_oh!n2B8GUYjx!;_sa5C6|KBhv<70k;5EAjb2g zMAv%ck>}x;KcywNIkbu=CB||w==KGVxN%N|M^YSYfWy#2DzDqR%?XiUC}U(fX@+}< z$@yJH=yn1y8G{hWT&nk@sq+#}7ro*46;6Kj!^0;DVKZDu+2MgFN=;A%zvEw~Js=u} z!_!cKlD&Yt_lYl`&g1w*%bJU>Bsaqntq21(Dlnt9-i1;Z=B!Si=dG$da9Ezq0jXtt z&I{bvVJxBi6tZO;6;eJ-kyd)jJU=1qRyBo_(^#yWiNZuO4g#6qAeUb{?Q`U>`q z7;7lMFh=fsmC_IGah|gh_O2EB&!mbAf3lQC!y(|5pUtpUfB2YJv}YU?v|^j{KGg&V z-x19Hz@^U?%pZd%6$cPM`F3g~Gd{N9Vx{+mqzsF-G|H;MgB~ty)QUY}=miC{)b09s zoz2om6DWd;^Y!Bg7gYJsQ{DdBfjHyTSoowvC{BooROZ;xRO#Q0aY3@Vdf)d9vVB?1 zON&QL)yT8+O(Zxc$)0^u@dSxJ$Fl6>)6XgG)b*49&|Y?z1Nb^+@Ydd!2Wj*kpPb4A z7EQSLImghU?%Tahhzp=qlR%Ug(W@jXuq>7oUysV^fuKs}`2)%CMrUGT7ZXu0C7)by z-X8U9f8a}#LKF2q($}&HRAzaB1XGVmK=iF?iRpLH3o|}Z_1UlVXitP#TrX7h4GRI& z(9lJ7|JaI+*;fQ}6RNIm)wf}&fz!(p^P;PtD;xbVGAJ_!zhxhU>kD8EuAe&NSh}QD zzFRHYZ$5mXZ-0OzQ*g0|OL=}Pv@qpJPfdw+RgPt4EJ^WOU7R2z`X5yzhA z*>~Q3F`O&hN1VQlEuPzp6I$M>y^J2RyFaBx8Oj|qy|U`~cU}xl(k2LnQ1NZI-b?cqsVK-6Az z8h7_A(s**D_99L%^gN|b^9-6xPElyroVwU3R;1~8M%*i2Lve&E zF-2o#Wv7H7U0A9Hr8(_@eQF*DFxKe&PJcc7ULy&ex;rnG|6B>kb;73mX&A^k=y3CQI<3EvGlw%|M_B)lSrR^d}$ z!XS9A#nx4!UHpwLE+rBld6j|b@P={e$QZ`JSMV^NnM^kKwvn8=G#qg-n8R}qNVMkl zvcOCvh^J57-{)@?n7UcjMhIaNv)$6vXTCrb{D?vBt&ZG7!f@E5%g27@5;=@@fOx^< z>Zo4gb*7Q;;`Aq+x>KY~9)uvkv*eSPhfV+v3*dhK4DUSR8-{?)bB?zUY5132c`<1G!6>WJI}(dpl$1cp8N1le zRzvP*8@2=5n#n&}8BABtdATg#8#>{(7XUInt=Y(X{+T!>{s+Vuykp-TEBiV--xBI{ z$O6t$x2);?_ssDge!tp9A4_I~vw(hC6CfageZ2h*urGj`1dBgc9j&^7$5`8tH12}M zqAtM}DVe2q|3OHU8_@~V+0{K?UgKUs3Se*3b$E$5?s4*skKL;HO9J7SsFHp?9GVV3 z256H}YWw72ER`M`g=CGmT>X6vX1M#0f)@Aa3qjhjo%m&)M7w|CHTmc15;^SOXER8g zOZBzO7X0%1_g2H&LrPKGDw~H(Xhc*^j(qQ}GFTIxlH^5L)ytx#+9)&H9~n;yra?*k zQu*V83Q6AZ#Qj$24>e6s#e(**BOuD%06x;V%BOKaxP(^n!nCUGcfcxCB)qReR-X1c zMnBjdNCK|nl6i^!NAza9$lf3?wg5VKs3@ab6 z*!IwOKV5A0Y_ReS3Grfiu3 ztm{HZj0{f?JS%hxImyrxK@13iAa{wUV2Ubcxbo%8WX6>`kZi`De?Sa@E1rG$8Q)Rb zWPP9bumhl!y#x$QJYxRbP*b?GAH^WmFHnooWNRz(bzc+)NOAg))EVC;V)auzZ-)n( zRO?6h$h2Gw(;Xv}oYWyTs03Hm!faX_$kok13gezKdDBk3+>t<2u(#tkB=-B1D9Xe# zjXk_@Be0aU%NL5Li42z(#_hAJcEZALIfaf?n}e$Fe8vOimcd7qevJiYj0?|i)7*?{zxnwVvwr*iv@fRRD}5^6*b+Sz z&ve`Kc_tDt`+0ufWX&~GZ{`HCog3C8KQd&RJ6BO^Xj+n4;OME_r3YBC-)~e2VQ}_+ zb$w!Au1>_i-5W=n#lB1!ik5h3#knnu?53qZOmR3*NlWR@q&z)um!wEJSsSO5>K^Yht-RpJyT_ma zM7ZG9T`}cINTx84@b@|wLMz-(*KQa)p2yXsZf5-^xW{!L@|w`~_N`kZ8*dRY;!jxG z;stcg?rCVrC%lvI{BDKBR1>nGEU4;0LbkR}d^W6KqUSu^e#*>j$+{|)4r=(GO5ak_Mq8MdKU5;hPvZ1>Gu6Y1wrDe8<+!*(V;ktWPsc zTkuUDAe}GFUui5dL_{<2vRP%V0eAE~rpHzBGIG5p!#p9HQw8L6 z-&mreWgq|HU$K4;WG^^eKLmFsGVT= z64d}ODV!8)?rMm3h&;y8Jb54c{IjjQzb4ZY3vG07#z!?TZcFI?YRU-hver>|L^FLC z9Z1A$pif}mSMRJh$H$3Zub2H|!9N$0z+clC@2k?%K~twVr&0tA!URgw2YrCw@1L@f z`k`dyPIqAgkYM6u;0P;d#f#gwd*NaqG&(v%(fDO*>HTPA_ftZ5b9dl)Na7GTE9D4?=m|p@;P`;v{@gqflnQh{;<>QrDn?S^M@*lyH&E6GC9M5f_u5pa=4VgPp8`jTBK|r(|%ELN86U6 z9c;L<0TtdVzUNj|YD{!H%h9On)INP&8-YF`?aUJ253ToO&{m#254d zf90>p-s+d$?U@o zTrHL2@)7o4rq`bng2K|N;(ekMq^D_#>qe@$#Vbqg@keS0zqepv0E*O+5BS~4jY*iG z^ek@o{u?fDu{P^Qgy+Q=GqpGjwW}*VTGcM`z7XGQU~2v(wlj5;_utZX68*f4`GP_Z zJ^nD(t7Zm-Z-Brslv3(8^_s){S+_hK7U4_(`+26{`N|c#d>aSAklZKkL{+2&4-QVp z;jJ;#>&&L^@7Af_ajvP~pXz}<2rapkT~;e`z~m8tVSCi|8JB&4%ayxZ)E6lrmi;1% zJbix_Hr!a*>`#Ox4X@pA%S7uH*b3to+?**!-ha+Yy>2&MgiSqglFsWoM^CD_RUC#b&Ci!5O61^PwPHXiWTXE*}+YjITIn+;6g|yDp7Ty~SVUmefJ` zN!i&3P%`k<&)+S=GTzZ1EAI0PQ0VZN*zQg%xqoX>n9G0_>6TBLO--8|o^CgNkKS`* zpLqI>hH(?@p~fIs_7I44D}_pgs)!0U5)R22Pt|cP*?|>48Xtl9t!);4y1r18k#yRA zH{N@pA&%GgIns4|GJIB_cn!A~(6nW@pOxqR?50%dq2W?hihaI_6Tm0RgZJ!ofeA*x zBBXu87tc{10(&PF4N_U~b@pw~{_+(Hc?x6Wt6$LGjU@bCy(l3VanXH{Vr-{MZ2Zv6 z#oOjK zE)sZp!*|<-4U3n#*KyEw+bqWTI9JDe&Rb9Yve0Q&kK?U3qGS(}dj=e9z=hpj%T2YbQdS>#@PZ?8q1 z5d~Gt`@D*Ot#Govd|#A|#XgKNUiiXGYTD|DJ6{*&F-T^t-Q+?@aaN0)Y7C_EK1a6rSSi?K0wTZy3gw+a{>C6dn&3IDT#t47{EX z#eD5YCm?jzvqO0NxDK|o(Py*8@c`B^z{3Nze=#(lY23qas8~|dhcspUp#t*taQ(t& zC;zR#eZWW;&OE^-p^v)#Cy{7lKTW`;|AckJx_1@cq7`n#=UO?!c1-T=sx;1%dXuV0 zW)x5y(LV5r2^rx&kra!s#gyQK{MWiE2WJ>3rsH!P?iW&L4tjehUz*<%&*IdX_g>x$ zRySH+!!Y)3*n-^S94JhQlFOv2o#jCU`EB1OYWF?7t*xnU*VuEs=V<)yd12MMk>AM= z#nn6unxnM}-#t{=!o1iT`RR}L)-?E`YFzWm>(!NMJMhcIWQVWtD147TE26OE+3K-i|;BPlm2c2W-?laW^*3b1^%m>$_sK<5(cAsFoW9DQR8q}p z{K>rFujN0sR>@gwh_;5OE7{PQa?ywPo(?4ds8`V2eY^Qr&w*V?ZwunD`2i-}JxF)Y zLMT<^p?-F_C}dg}m1zkauR?dt8UB5So(58DVubx|aQ=o)t0}keRKh4~JRPYT#>hud zEpTYiNVy*Yn6#*HkbT}j@!t>0_NIUxJH|%O0YyzxPV|jjKw0ouy`lDN7Z?z=nFZPES?Qs;ryUV0F`65+He zFUP!0u2pQ5oQ|Wp(YDyrbPtPxrW0T_RdmPl!gA&!PDd{2;5VL<+Pw+ME#R`-u*$2I?J@w+tLj#P`Kj@$-tQY)+E}S^^^WK zFiA@-CRV6hdl-@YELIkKhkVutn(Qi)`pP$<9iA!}G*|v*A04}QV897stMP1DtR+=| zf0JGgwD%JK*=bGVP)}zK{oi$vsbVessB5#j;(2kDTX5h7T5vw3h?O33$&Vy4a9^6>}m6 zH&1zyMa5y>cN*YA#$Uj6uSx_2*z_pBeNoZ%)k5JxR{DSs<(DMQ&Ubf4Gjfv>tv3{( zD$y>`+t=H^UKqIHv3N^b#V=kG z88|EbzRWCtf%cI4{TY*+1Yx#2!?7?s2Imwdirba?|GNc<%42YlOT{I9d&ueWF*(hrM!VDHqYj zi$(n27pOvB>FwW92DcTlZuQ9%G$D4vKKfdQ*?l02aQqxd$bAJ|B5?;%cQo+;Fo5jkLTF_KC!xp{xd#|ZPo z$@+N|-MF8Z`2{E0&9-9|28C;Ti+c->PKI$6`G$UghNY7X?R0>{A*{Wa_lYXMM!nZj zSO)8Lnub)99cmV>TGCre|7a6-`MC337z)X6KcDWSJ_(n|pc%gid#}FlgBrU4>pJKh zf4aB453b8~PA)B(?2Eo*Ib_43L>0j?=iHHX<+6uGu3=ZVCS;gayzi%D!ogSlJ}A*( z_(A!&*9a~VruzZ|+691>(Ic8P`wsUDEmj+xT*iJ7!-x0KcN>R4qciOF63mLV;c;f7 z?W7iE4hXSKyp9jucETA*Wr==s*VBV8aK8sL?jFy{A#iaFUkLYWL8ZD^QP0(!RL!20 zde9mtB%dej-deCTV=Ws%jsJdFcTt>Y^*Xtrg}UGypZykDSUP4X#%tYk?CjMsHECXzf72#E_j4Yl zjR3*X>1-dk*YNx+tF|xHwJ|isvw9V^iznu;j+qUEqB?Yj2z1jPe22kl67?ldK%l)qqgrB4&%zS?>=+~eDHY%h zn)@vFv0s16#`5sRz(e!(%(tEn7SIK~+0!a04QZO-RIe`#BKvxi?VoL#486BM9^e&) z^<8jAgVE!$EZ-{bGLS8uZ{GG6b1?Rv==dPApC|*~3W5uG+=N1S&Nr5L&h!Qum8o&< za89Sh`)=)kSRNmOb-zq9bX0a?PXUZ6e<>vk7ETX z3&~3_Mx`84u>=-=U}iirObvfuNZ?f8`s0%{571h0YUpw?^qHgBTcCd1FS}@|yuhP=LM2K0f=SLeTT}O~ONp zp(J>PTx^T`o4lhxo+MbBjSnc~F6SRXeD`Z5@N0pAyzSizfcS`n1B=eMX~{81rp3vI zVhmw(qKoN1$>U$TP-6v2OXYIvJ_U0`+{_TO!`cjwoc&g!7UFYs#J(3uc<9pWi&y*CZt2%S8R7SPRng`3 z0u|{HM0S@}Uov>AseVna-#n`mYQAKok|0?F%VD#F{Ri_yR_8}klg9i_38j?(f`xzB zr^mDFF8z!D$%6G@hW8>2KQIrTcNhF>xBzE!H<@>8xe;0`gT_D}qSy1+j z0FC77?fWZM8(kjcK8uFzev{cRbUR*A9tHyf^#JuHo!iM`Kko?*XA}#O?+^W2NJi0F zdG*+IfWC~OpWivSwdypEq3`sp_?h>-#;YtrjYszxW1IU4Sh*lLhA+q>VI7|K@ClRkAwD88BE`lHkA@QL-C9DO&;dGLG z^P`;ksYV$b^Y~YwsWlbw>r$3Jq2cvvxR67DX&Iw&AA7Os`nFoG&vxN-&iw<{pzkv1 zh3`;pCmv|z&m_0rEx}hNK<=@-SP-QZ?bbD|~`wT})FhIq8d?79t^*ot^!ii{R zdba$2|IDo6i*)@=jnzEEU;|IVcaQ=_433R>5L^MTkWwK|e*7NyWLHZ$D&(T*auh|1 zGB}^(8PD^dYO3ns&|Q_w+u4W=!&{;VR;#zk9@F<9 zf?=(c9RZ>mpIBhPmhHG0syzmY<(w0VBzUk(>LVB&Kl{{-f0ih;OVC22;1BwJIIJRk zc6}vBXR=$!=%dkffU=D6Fe4IitWVV*eFE0RNok6(f}5FeF(2{8^!Mwd1y6dg!eBZ3 z%FFXWz}-554ZfrTEXXazCa{pP2yGGI3do!#8uyPRzv$ZGqfhD}NJ1Y=gtlxVMd5j$ z=57X)s{}+h-3h!goeBN+{K!nnDQ`Fq}V?!I1h9}XpZ0_H(}_bD$!I)9I- zmQ<$R2T*{5{R>12_1kZ&c`c)3vuI?R013PwtwV3p>N*fb#;t=p#x(Z@!_#v zsb^B72G~L7(^cYCUyH2v*}jOMpZL7km*b+(xI_18Jk20fA|FN{xn^`f*XAA1PlDfH z5}$9*RhgR8Ei_60jpoc(Fa?Aud)%Z`=!dp|bm63)cK!V(kV=KO`cqd!xJ);?^Y*z2 zc-&Innwp%kTWNNSIKO;GY#dfqT}{C&63CoK!VzH)x0=r@bnprD3=TCkyKDYS-uM~n zz<+*W54hGBN}2mQumHZ_HIMt9kL0{9gxF=`q(gkJNsRW}hO4@{sd{>cKiNL<-#=%Y zXu*z-_4$4H>@gJxFZe|rPv6rvwkNrDV$w*8RcWr3$nSizW_5T-pA@_0&o!xj4$ zm%HE-jQ~g7u@d1JSls)Hy5=e4SCs~1)rrau+NU)snAk^1d3{a*-tNEt)pK5f^~CFP zs?iS}z2v{yGH!Za>6N@VQ75~=vY65C7aqjCgAD?7jJw4M_12lQ(>{X7)^Sk7LNB3^ zTA=d4e)s97cYWY1?T=oa1e-mH2WtI(vTxjzUCz#mPd8B`@{^;-;QyAh^4et#`W)$GBzx_Aoh%CFtks-Zo-=kq0LYe(z zYyW!pRg9#jJcCBNr+FLaKsy;M@P3@5?U%qAHonDty_j$JT+}|xtgkxUlBZ#LU$nvf zyb&T~km44}@ccq}MxM6ns&TqIcS;=CG(#oVtfN_z_a$8XS}(ynpQM_2V&O>ZdU1jj z>lLC5fySi$d;O*^rA}*KgxKB)#6HFTW#_7#$bFpbvIK( zU53olM|Qn6?VAyv{Ke=OSUu+oFuEVOihh`0D7QgC=?>)^J|9GUnu>c(Iy~;Vd3iWF z_mDnqXDV( zN=EpMYbn~qp}$M<$J%t(nWqPBxNp{4`4hzeKY>r8E5>}xXW{dS_M!fU_o)p(Oc&0* zR8FBCpG3{V)Z;FoEgBjZSPXG5OIP0hMg9E#7TRy`eE3sgo=7=x;rV+1=+u`!W;-R5IGu_j^F9k9iHg_)9X*S^`h%RLMF zQ#J}`4}sfZmF74+QWqX97zi6~zKO?&Xb&8t z>G5VG7zV!B>f>dnVl~HoE;uV|eAOrp#40FyU_M$~Y_Y_fl&iUWG}MOHwTV{sWWR?j z74?_9>S7o&8honjr$Eg!|Yg(L8?{V-#}L0dGjWfbKNg z<2lC_bflFkwH&4)uYIZS8Ai?1j`?p8xltjGT6-u2=41ky zv>1C4#!r>+5gxKvx#K)*dW_CAja)j-UArNKS8$Njm=ruT_C1K|z9M-Z&dWa39X}_! zJg@lZx+nn5vsRHO(nC6t0o$|5oA{ie2Pm0+zW0t9`{1dBHQ&QhC^s8!PsD(E7_W)! zVE1(LXus=5?h&=}Rzh+=CgI8hWcP&WdwXX(!TYW5)o6)}-@+l8`+2#uPq|=c<4teE zB2Upq5h@>_rj6|buiEQVhcA28e3I<+55B6J&tLKucZX16Zr(^n-6%^73(leQW!($U z@YvyoWL!GQ`xH!pL+Y)&Sr#rLiJ~3TD_IA9qJ2mCp^#SW^|zAkuRc>KtD>x}w+I!9$uYjWy! zThW1Mu>?WSk=~T)?w85+SsG;OY!`G|$71OA${|hEN)@6~$jXt^PGOBt46ewHl#nmG z7Qf7Uv@%3g+wGiE^|bBh&a0LL!1LE2xqCqWs9(ULerw@_Y!ef1Ygvh8oJ$vgPR@S$ z_6e)p&~;pKMeIP;sUe{E69P>QaZOFU5Yz!f2WQ8KxYZk9CWuSetI}6DMhV#U%fu7M z3WScYA{|d?wnrPvWl^N}FY(@ggXIhg(4A|68@E>KNaf%()#ujJ^pJj4mv({h_Y^o9 zXdC$UXZqpmiQ0KqAl;sP%fPx7DoV@qVHNoBtAI)AF=#?7UGc> zzn|X%XNI_cVUCU&cWjZg(gX7izY!B?e1LS&REEIhzy%X)h^mkMK=CD8>=A{%YaAW$ z6(r8yNESC9dFSJi46g99?z{#jyBE)JTG`t?;e*5)rv#N!p{wYTtE4ujlpAv0o)oFz zj5YWHO5&}-%|7F=(_QPzTpdi&gy;fW|D)j{7d5kViPRs^`sYBJz>W%#zV9&ZclVL}4^q7Gfyy}k^nfkrm z-ao)O6WvK8&fJ3M4<>Agssi#GtwLP>ZZ!ldb1AYmRvzPCh94>ePEx8 z9ixA_+`Hspg>n-Ft1fEd!Z%B$n!*YazVYYOQlPJrt`-RqkLruzmu#v|R zVvW6hbdH2=H-(jqirWZ#E6A6H9Eh~FzPC|9DN}uFb8xP$s2g#(xL8VJ{93nks~T;% z_x$UaUzOyvUVDB~3P-D^uGWnEehI~GkVh;!z4- zcWzYQFUPBnk}-*C-|xd^q4E|Qo3*FwTjLYNu=?qCx-uvPElo1`WJ&)k=`b4 zr!K0Y76vQ(yDz6fIb$|{&t`CwwOPg@UQq_9{uO2e~YUiliG- zc8k`Vv|InF%k#7MqDu5W%U|x>dsf(!t7&6GYS!>Z(gz&dgL4{O?FH-H;d(vbXo-9$ zMYp+D559vsn<}1G>ZWf%MA6*ve)|R50`{q>kpl!?oc-N^fw5oi<(wVGcX7Xd0ciISA7^|%bq=?Ne`93vc!kfQzu-3c9TcVR(T(*-*hil-dh+uteNX9{3daAKqqU z24FxwSP~cAV>Ul+_;S+2l>L30-UrND$%H@U5P#U5t^I+AV07#WekB*?)PJetNog_C zs*QNygsSaMgfbL8mRUE{C)uE^EM0Ya25kB=+?Re9^<$mS`QZ~bA63uoK9^6l@yQch z$u9BX&O~%S%r82&x>qiqOG40t^?8W)xbBxs^0#@o3+*<}y=J#x{#HFs`!4o@>ZIxi zspLKwuuLh;G5s0$;W77(6`h>s>2kNBl>O{qf}&gbZ`C!ojN&bUbhec&@aXYzj$k~4 z)?|2XiUjNiVvD`Mc+KxV$$ntYx5oZ@FBY98#lX&zni-Gy`JRS-(Nnyep6$?3Ol@e1 zV^$-MS1v8Z%6<$1muE=@J%iu(Z)AdBpaZ1num6pbkk&bsRH@|F6!wBM{k_gDD7@K^ zIUrWdK94IIavxEP2N5aDJ}BPZzxC;L?xEqM=4pu;h{q-jtHRHJw7A{Zrin z;YdAhK))L=M!c1l56)YHe1~pr_Lnw#GP~hsQuW_FHKk?~g{y!@BP7>jWtcxCD)(UG z3!C53Logw&kQ3pW)L}WO{=hneF|-T0hv!k_<^C+tipHDyA9jU1xq$&ui`|41HU1vI zRA6F9gp&--DE-Zv^h>y0=5CL_LinHVp~|Y=@+saw@wv|RI_kP0y+iiuML&t-Bj!np z#ZRyx_d3JX^uZIgQJoPe{>eeilHwf+*$b9^1ZF3mEel+AaCx))b%VLdmt0{b!0;@1 z#kDQX&fqp(+r1B8{t@rZ5qrf;8j_cL{h}4@^n>sn(ilxjwbzA{5&Fla@jmUhFZ;DU z@a;mKJSe3>LAqA!Ck4YlCIaVUu{Ktl((j`3Xd=+}kzq|m^b<|$ z9K#t${J7i5UQRr9a7V0bPv}0yR;pk_Vl?+HyPwJ&>;R1F>(pkj>giVmDX^`Xi#n93OPb)~{p_v01IJ!%WvTs;B76S5G<4ocBk+g{7oD65%M2x6=$_@YK_hfK7m1kG})3PK`Gw7*zSc4?=VR@^6^4KL;(#+5c z5AKRS6;YWZmWx=E&}^g4Nn}TiEE}Tt3C|P9jj=2Ql8E_WSvC@dO^I z{_rPu@=G0?McT5u)%3yH!x(H~Mufjqk)N;!8io88#TELQN2 zc+~h#Ht{Dy-2SRPQttfW>pa%K(p7$h6rGdy790Dea6%i34O`R+?ZeAsBYbKeqSH< z8T5uPii>G83%eZvD+|rj(g)-##cSV9{8~Zh@h<@i#WL)%u$9bvlyMRdnjs;4L$n`k z3}Z9!MuO~yIULHA=D3NVM)Gd@w;%9zf@1aS`8YDJzy*LIcQikkeg6YR?L?*KT;X&} z+;*o^wK8f7s}$-oNF?KFrb90B@_|FJbtFsBvH(`$k4)W$N9BUH=3X9`{Y*T&_&D6| zi2|;D`iRicAHsCXA}ue(tHn{~je7E0p|jD$rNP+7paS<2oxn5+%g-ThFEo7ve-RzDGBTg%J`VMxvhmaB z0KFs{4mvi99SP)r4D{r9hq=)kD-o#~{h4t-%z&KCFtIP!d|-Tz&7Jv!8#Hv+|P9WruzwAh1Ps-D5sqBh}1mQLaY z^(Xj*{OkR!>}@7Bzya5OVd|>ft$O75H*%8UKnig@E2|06glicV%6+wA}uz25y+K4Mk#wp~R$yqei-z_ODtVrI$d|n@qPM3T8 zkZKqNrH`@p_xb5mSGTONAj4Dr8-~)iUv*0&ea|nn*Px{B4ry{F(V4s8Jx{?m?w`|* z*e3$`fYnc=5kf4I()Iiii?yftJx0(B4~<@SSAfq!M_;GXdG#IMpF`6pgNwF8Y(wmE zGC}(Fwp&~4^Bza(*Ht^c2)E!B<9MKu>?g9Yb#_d%q<3iWq9aT)}10jzyn?I_fKI@AcG=xCj2 zuN!|3DD=X7%PiTyhxsAsvxUZT9HgVR z7(x8yjdnF~x$x@iF#{x@?LUmCie>v+sm`#$o7$weIqM9b7x|!;=3;?vsz0|j{K|>b zqI1jcRHQoJWWT){nex?TvwD})4@}PO!`^`$<|e`)`I)~o)r@)eFWiOKwLicsvw)dH zW%*_wIf?;L7-oLr{0UKK?;40e7&IDGCy2^FRhrh+_mpEjsWzXFd)nA1y??Qx@R8aE z#lNJt57YUe#=)P*+>~&nxi{g9)Cy<|3FE;7Kh!jMoZGLXnN-;Ji=6j(v|4d{K!Ekv zBjy&qZ09%=%-fvldP~|V7|Un2(sR@8*BjD@U<4ru*N3vaSR}E|Ej5oLv7Jc9QH1z- zEj+l#tsbGccIjK+$HOke_m=7~v@u?^8W*@shxg?=7mWKPVJ>ej_p9UX(a`Lt6Y<_p z?8sKuu%&j4|4Mg(vx|(3$0*NAo#^qw&nahZd)ZI!*6=yI)p4O&<>;b4!Qxt7C zi!IC_BuFOC@TbK_ZM4WRBG_0oeXQc)2ZBPAKNZ!f?09a~M; z(Yv|`Hm!XM(9R3-j_m!s)(=ZK1b|(}L<)}b*m{s=4eWp%hGc4X(V(kH@$5eHtvsY> zJS$o!6Z{c6yncPi70FzsPOWy0x(9*w>(2wJCMdFu1KXVyP%iLs`#rG~Ha}@O*g0WeS*nv4>-AWQ+bD%YX%*+Od6(?`IoFZ0OvZ-Yow*aM zOGgS_`)_vt8Sx&un@D^HwN(RvoQ~?UrFf!wt~^}u@N=!dIe9kl=b3tkAxzQ-?rDU|U8wE-G#qZ%hjFK0;w03k z%0$;Xuhlaac9J7ev8O;hNd47P6@{TfzJHhzhFGea^LO{_LF9S$9;LsZ2Z*Q)@q8tw z_gL4s#0$#+^E7hdOE-oKC2(VAN<6xXOMew*>g-YODX(44imo(S|Be1lo-gzJ5)3VT7d%|u!8%?tL{ne?+ zsGrUF9+B=P`Bg_*aX>t6{7^g6wSoav;(k$XV-2B-T}Xl@{hbO%w)}EmkhH%Qp!fY; z5(ZAQ3a0PzeL@RX$j3s~PFEX3GR=Iza?ot=Y<^|+i-f*R>j%K^;mv#Bul+(UNER7~ zwfi9bTs2EtDylO`AgUXUUq-R4qMv6C=in1)gc@QfKroKJC-xhw;7kf_o!d>GFdJD(Nt}fZU5ufjHqx;;6?R~Vz zl1~|b-z3YhsK#SO?cE{l7P?(o^}^8e>0bK-O+=3W)d4?E))!-{++D%8(KaF*x|#ya zv_HP%SG|sCN2(gL;Y=>`{4MLpJj6pJLROYyam(6$)GvM9cwD= zNM;V9l1mL(Uv2x2>|6VuN?YcsnlUj1Ii!!uR94^apNqzpKbJr`meB$g`!z%m^Y&Sh2Pa- zM?%$~_RtM24Qt{dBH1tC*jVcD_eoi1EOMd7AS8Xws3TmYy(l`J4^D^VE8`~(b^A4d z2nYr2bjV0I=a)S%d=59JeY{%^FmGymF_hx^9Gys;B<4G)D;Kzsx)b0>7q;m8XUCZ0 zFsm0i_|4z+if&H4_rB9oFyHCJ+7u6QNRxQZ_Az|*YhtBY%btMz{fVcOJ|2z~Ccr#c zp<5DfFz6#U6$B$U>pmblU}+DepOcBJlvXrM!z;m&6N_?o|wojZ4GMxLuNuo%CbCLDJpVJb5FQpx1d>EG} z%wJ!l?G{<4vS)lzydZ+G8VOnVb@~|!Tmt%=e6>4SIv$=wg%+b5md71c)Ad-WeS9|} z#lv3Ldrf{q@3q^|tWW1nac!Q;k~2M@Y^gN>iSpP=e#-~zM-=(}GUw`j-czyMJ7+}k zcC*eD9?{J3#BZ(1lEcf|&!TcTFv0GXC|$Vwqm4>XN-fsVMN?ra zlnCM#663;k#6FblljHnseQl5mfaOyD{5++;`fLv<-vPC^;YzRHU4?hre31#x81 zmu{7GacS=JpezXiFr?7~b{=^nDdeZKH9GzE}s!9-r z{}NewBnJ`6Aa5d35s|FFem1k#J?GAN3ka)!v*mjxr^QFnD@E}bvrCp&!_3x!xraB6rZ zE~5ZzDCSMb=NI;^7c`%Mci|qYc_nV1vbMpueMWs>nFV)d$3wHC?_fDKhf6|JQho4H zQM=Q_k=yT8D=i(a6LS8J%;dGkEDHzq+(VUi1#KlWaS{- z;negQl{)M$=%d?~0w&wN23IZcyKdw|F;8v9+LRrnzCO_}Iu)X{KdsSt_X1y*4DV zIJjRS+?S9t3J8T~mh`YMtN`q1UP9*%eg0L%3iqTe1~USkDtGJ^U9KNA=E-G-&BpdY zn}Z*Gq>yQ(X|8kk8)9FX#9z_1DFjHwzGoZHN1v8#JMS%*p7kCdGT`A@Zw8LJ1Kj8I z1YaCGLEhC*IMc;7Jf-r;7VKx^jpTc`HDNcR5q9K|7=NUi zjD&yx=1~#6H%nZf)Ua(>{(?GoyW4MZt71M~U#I0-;>5n_Q(&0;;N!2IZ>5Xwk0|gC zw0M(ntEup^JR0(ruiYSa0De-z$T#`tXP5W0oh|M2OfPV&Zzsklvb>bteYlG0ocU6D zvrREe&&umb`EiDh)rCHo$W0J)_Bv!xD9ERqoga|W^h^PM(5FFg8@qvsIgVCLX zfdA+*8?>s)uE}=aziGzTrDCa0Tr!p@OuG=gmnU&KO0Z_{X9 z&YNTr4}x_Metw(qoO6}=N6YxpXPx}O3NXJNSpI=HQ?(>-{*<}rE%FTw0tEx3+bGQ-_{`z+1f^l$=iWAa@veGa zuIu-Ap9-GkZ?M}%URBNwt<wPb4@mT9${-BUi2c;}b$ z-K(F+9zGtPb@foozFf#?$Fiw*Lc7VUY|1TXiBG{M4s`CGaHTp2KVC zz%83?++7tDg1+)2n+{!n>iDqM_8Y45UYftfvwr(L8sttQYcm!f9YB$Q#FFhNh28$CZ`7p)@T8qT0)Uwf*9;QjFA*SYPGvT*21 z5+5;C2qw<^KVR~L|L0&F{$GbP+C9C+wj|RtjZa^qlf$pzAah5<%oOzd%64n_EF>v1 zeiB2*=qUbU`L$!u@89(CMAtKQzftIeut=sl8bPF}?IKX>D3-I_?E6QN~GEe`d)$_dRcrGpG>T zf%^ihJ7%2&V;^lpb=C0qN(I@%*0nSwsue!~$B+Q$Lh1&1v?3sh+m>_Um z&JTZT;m5U|qUFS2qQ$aZvggiCDOw6g;ZyiedqiGGzn}e$ewu@oWCZ&b+|7p&G$kQs zb{?3hjXI~r3)Px3)QRc^Mk4dcm#F5T9WR&m4avx@j~`2u@TT?;(M)n(LucD1)$|8B}OYxv0?l+cyR`tNN>*A-}-_g}ATnu|5ZJz#Bi~^(B zfX%R&6y_9rB1J523Q%-!lCep$aK03GZmWOs9TSU)+Um?nKI>gWP^P9V<0jvU4u#um zZ@k{C4gooI`_?Pm<4sPo>&xAAPw~-4P;}z@E)9e_bMZ`E4D+{MhH1GCW_wS7BCHt9#+fsMG z(?$U|gL8br^de$9Rij@y!q`Jn?^h){in%%}oI4Rd1shr}MQaF=a3oFd&En_hVO)V7 z_9$(Axm4e3C`gYjpGN)hB#>vSk>SskZ2P!SvGk)_77wRhvAt4PFaB5d2hxCo+~ z#VooE`eguW8Jz8{@yuIrrsiVadt_0jTouD;IyJO-tLPNgc{4&BJ?0jhj(ySkor62& z&}=b33BwaL_P57jC6#;n+LB#}csOmH5(AI~hDl{YDQk-5nG7isA4 z*V_lLoDc}GL^SX0GqEmM<-r&uki3&Eo6n0Sio8{TjIa(5-auYaeXRRP-p(6YRP~LH ze5oGq<~G2i2*m#TWLn&-Il~i~CJ!%Q|C`A9=>5TDfrj;=K6b*>xYq^wiEXtF*ixRk z!GI0E9hR*h?WcChsz{xm;r;UNd4c#%rn!j;oQAIMF}~p3JaQvbpG1i_G17-7>J#;Q zu1f+IC6260a|Y&Z_(wQx<D+Rxql;m@K&Ss{#~Epyf2qgsUfu#}9UB|N{a;<4IbU0% ze<}5lf_4v(k6qtg+KxoC#S|&zJuWHtn#a@AIH`SHs#j4+E89u51;;CDPs;qo4u0IP zGhzi_YmQTYxxC*fJnPDyRYVPZR%nFy>>l@JcQ@WAt#_`GZ9x%gCUmCR@yW@yN2U4k z2C>gD{BrT-`4cpBu{DvXmr;}*!rNIl_Z|Ut;x-xcujm9R_)-J)LJYVUAIk9nAR$D1 zl;)lRUhvTuvW!B9CEJqry~@np*qpzH=J2R$>$FDz@t{A0CI#LGI)L@NXV-QFzPRWd zSV9G|*?8mS=>PuxS5YA236c8^Z8Y5Fb9p}upWD@&n!r3=Zz*ICfCfC#yO7+esw{IA zaD@bIerz}|HwGCJ%Z0C6C0-`=N}V??LKu!l5gS7kObP3e&vRLSgAM|-AJqQBS%4az z{S|}Z(9?dnt4%a3C$sI3#=3}1gmxm1PAsGoE`ur@#7A_VXa4$$^O7`@u7pocmp%>E z0h99*4ViUf>Ml?1WuI%MU!MXPuHg78fq zCw0H`VZJjR$|+V~miHsf`sS?LewL`P|6POS(_)iBC-vP%MEeVZ>DC@zFCbP4JjZd| z!}}9_&%R@FDWup)KI{kbiLtt>Yat20ya=ECyxy`vXO#XxQo2Nl-;3E5FEp>wwn_Q+ zFYm~z({np`KzdH}&;9aSa$OcAL-y>?KX~Ej!Su;~q+jcCRJ%wBO^JLHImz2UMqF?& z0`DzoKlNYgBDR+&ZUC{cYmTW@C+xuSMz`EQ1CQ)dLogp%xUaQ|Fn>PTkR5eGVIvI= zP6tNG7vY?Jxm!Jab{oGGjbrf+Q&TsbFqOPy)BzZQSW#Rm*16#KT6t|hWIjqYI9Qt2 zTS3=pLxD_Ub(F0_Wf@YaT@7^ySkfNj|8PK^%{)mx_Fw+*MjBf1bzXNVO2CTK=jXl6 zbF+A^F%Jk!dH0~uTu&O!hdg=y5c}fudSWJCyIS(H;^P^7!}&N5X;T39tI_}aoIBe{2xro! zd?($zP2f9stiQh-Bt^GVQ1d26nz)`H>O}JX(4!p;O*I@VviyGe;7&3QPNk8L_xXG8 z!8dGj5`1F<>3g;m3kmGebHNT3D%Q0dlkD4dpTG)Xhae{I?M-i(u74Bh^Ut+zfpb`? z@mX9IM=Fh zRPbhBNJIPQ4=#loRgjvmp~}M+>Dv?Rj&D-S{x`n)2owq*Qruszpq?m-TX%Ah2;1j9 z(XS^o=jqTe0jYxr9BwXvk_m|qNQ16RX;FK+a%R=NpKiln-mTUiF#N4J34~`K^51XQ z8S|_XA3+n4IgZXl`zC!aQXF2rhwYmXd#vFig+KcQ`y%%vI8os*WLNl^pSp0951*-& z?q&Dw(D1c?<$WfBU_X7oUXq<2Mu}fOx>D)-IQ3qKB!P}Dmc#o2T};hYZG_eiPcB{1 z2d`*bPfYr*%{M2@c`n_jd~6;r>fkZ9_l3-s&ilRm7)n{5@A``YovJbZ(}sAM&RMc+ znSWE7H|;!^$+_>rm{5NuxQz`|_<@hz`4G_Gy57q-0#cxZZpVIem-QeD5vO0Zm8VJg z`{Ml~Mv<1@ziTgVzAjNFr_nrwVr66RqfIcW9?&e|^^bS8e#dF8L!`uuw)&*UcHH#Q z;GB7JH()8eqcS0ILb>LOig?4tN8g{`{2>Plxs759Y7oI*%vJu#r%3rarm<0^{p=`W zQ6r8lX9=Y(9{_|{jYb)D=nDfE$z*sC8ozvBe#^kxLQ+1ceg{!759@v&g(h%S^fk$M z<8g3{@=I{5kRKn1f{DM7ILY&=+ON%p?QwNguD{~^T;l6ZTwfPyldT)~MDKBtuO3(! zV099!$V*U~-O|uAeD;yUM}p4dDh>5vSv&nnmuGqIbG>}kN+WJa$=eE=h- zal?t0CQH}bcX-d_eMu3NEqL%4NLHM?TAr0nwJ*}nmys)4yAu>HMHv#L;004?91_c7 z?#sDYq}*U1oC19a3mc?o=^gr&cMf}qz3IWDyHWjf%lDMqn=biOZAK|1v|b-&??PgD zfJC@wpOTTKQ?v!3iRG(bZDzk0s=ob%+WeEjN-W@385G;09Da1c$Rmt`>WGf{%kpix zm22PT^VqTQe2u^9v3jeWgjog-Y2gPzvi?Cm*Zhf_Tcn2EJjw;L8Fx@bpO+(sXRdOn zN%6sn>qbX<4>NNU?4PO<4~J3X|C_dX7W-64jPt4-Ynr~@)@q+C@Q%lrAP$_Jzmk1Z zO>a%sxtlWl1Zlt9+t?hu(;g>Q33`sQC#`N8L;D2Oo5+vMB-DGCebP`b;^j+5D@xJ& z4^sc!+BG`r)FFZcd@+xS)LQ*Lu%*R~vt#Y{vyM(>)c2>IJRJ5_wnVcen1JzF;imrx zAuQ%wvORX*uX-g$xQ0s;1#wF!9)D5);KOR)ccEuw)KmUnfr9?OLwFL$iGJ&ALi&z! zOOdN9y*r=11+~Dpy8p`N2T?LwQixW8Lkbck;)EpB(IfCVOnpDG>`BJ0S;(MlrrE(Z z)_RGbHVs>mqzd!c^Y5YU5?PJ-t6~Fx#u*z>bH*!e*{#~A1lg=qY^>*u#_?hjthLKFJ&+_ zQo>2Y$NKV8`zhZdO}Vald1W7_PR^fFYaA+jRo{KPsbHs@IWGU=uJ1Eu8&OPH}MIjCX{OLMp^ZFAA#m^=$q#A9-3mL*FDmC)Bg2v+d`Wh_I1b4 z4hd}zKE)H%*eXL?oCd9TAr#Od?EgLBz(&XPWlLA7VfQ>Ac}8B>iHc2x>*mbPq^m0a zx>;i>qHW|RCvwT5Q&m*zJ%f5put>$oW=>-E@9qC_vJ`T(DTQ70<8kv=b2S6vs(l&#cb+%w` zvW|8?Zu3?!=HgyIHo8#A2k+RQ_|m}6Gy^`HchP1upI?&mbyvDf3GsF|(rr_pa?fdn zt|);|l|SMq87SiFS(l<+8}@Qy&YvYkO|f4QOUX}t_hb<@C+hc@q8Hec0mxPzl2Jy; zHr1-VKM!eJ{C!3C_jGa}P^)Y8k*tP-E8m|N8atd$uwIHpR0tpN4GCLTj@2#wJj3#c zF|sT9>!dF0{&IH{s4=1?5m5$_C6FSN%oqpyw{PlIc650uhL7{9FS0W+vwa(FVua-? zKAo&0@}RwV%U-NwEmtpOukhmx&%*ttg+gYOzd;#zi#A@h$MXYcUWVV5c`WWrs!w;ND$nV8*4~W$lT*eZrcrs#t|C#) z)zT5uspTGd@P?zW=lyoQ1wnPWws8huPY!l5MsdIEE1|=k3AQAQ2qJA|=&qs-@J(sp zMe+Gw4qPA`Ll%dpYrZ@Jx2?7V*(XQ5J6DWHZa=GEJFih@mc!Ow8vqVLQDmF{MCEzD zp;c(Q)pUOo5>oE!`g;Cw`}7M5sBl?6up-wi+SjV5A}qnvvdm13oYa;>gT-_H{F{ae% zN+p{!jos>WZsZ(7sq&=$hn)`TJ$|JSpi64*1;EZxMDmS)_}Xwru{X8Ry&F93J-mCb z`9?wIeZ#i}8ct}#R2$8Tx+fM93t5%uoQQy0b-&gndJzbfPfm<4=9zQ6o%0%KN)`Ss_H`P+=H0*(WU^-!zHMUI&ZfTQ84{gaC2>bk~86keOXc&Og4 z|EMjqJ~leJT`e?L5OA%G0)e4oS(BHOjCKhq^X@({oqc~BQ}6R|2-@}ZOrrVUDgDt8 zKo{bd1IY!@@9S9pCpai2eqPNCHhDEmw|x@ze0*Is>t?~8XNEcUK~pGjb_)db#lIk} z$^q-p$lnrHv5z92`QVRdgn+DP2@As7CuHk5WDFOPB={cr9#`)H;p}f{m=qM>PBN(L z<-6HONH%fF`@f|M;7G1(d^GKhhhzI|KO!+Z{cY0i`fXG5u|Lqnn>lsq^PPe0d&S2?nz`3n9 zh9!(H(k1=vlRk3;fjd%~N&%WM1O>tnu;yMqa1*$Ktv+{4A`~o9dc#P<{8j#)Ynx-w z4{l$;GCKg3iTxH~JDwPhvj>YP4dU@D<_r4@oolq*wEFc50M=p>2T7e}_LN_7DvZP9 zx$BM;RJvbiZ{Fx5Lz=_Uete$81ANgWalY&+f6FmVBH5N;NjUYmc(huM6= zQpV#j9Tb9ql;1M6W6=$5MXx8a7eP*O#UMz1_KFPyDc#7SqkEm&cR54H_^Y^~Ca?!$ z)A6NGf+QK}U)qlRo4x<$E02XMVGDXbg?E#&9KpPpchKrd+V-k3%QcylWa3o%O|wi_ zKNaam6Bm@hg-h;JkZORzu>7R=t!%@fgW@61p`ZkTIpLnwr;cW>*q7&&877q>^REU6 zllBDs2&|R*>tR7lUHyx(=_D(fq6@SBlt5HHn1dkNLDDUs>wC{L>WjLegxA3=`fl>l z#_lPUq?rCAfcFi8G!~H|U&^gL`Xf|F*tgPY%A!c{-Bi5?%PC<~du!)#ZJzJ*##& z^PVJ=E&-_R{7&y^%u=|c1Q*vDuzAyE(|`tcvF`~wfLW6}@25kok!L9bZmQG?g=yyt zm1Wz`54QwqJS#`IJGr%{zC-Q!`reo|c!e5BWb;{HwsSqai2AWI@q?9PznBy_Y$~wX z^j=3Ki`DYrk{^iTo;2o7X+yaQ*ds-*o}Z1dM((Xzx(@ILjsgwEz-}>pXFLyR9AP<7 zq?2ioGXk24gl?tpGXnE`j*@^PQ;Fd4qWtW^qr0Ama_4(36XB*)<{mXp@VgZr zKwfD-A5j0x@dJ5Tk5AecZ>9S*-V3$CnW8~^_G;XOW=Gi9%QL^dtM0Bi^gn{R$__t? z9JkRjH{r#+>*Cp;+wW~i4^`?l`>gpYE=dBHjK{@%%8MBZRtrP+m051Yu9|$PeASHb zsuf=91L$5JQs0ZOk>S1S_QN@wca3Aj(6r*4vL84#o;-X}b>0{K`;G75^Y$ceETv;_ zBij3e2v$VM3d5Lc@8&%flK@-9O!814f0e3tjGc-66^AHaRNP!A^UW8(NqW!}LJDCb%HPS|{@4u$I^0#MYnjfBm5Ql*h8|mu<-5YQI7l%N z&|sI^q%fD}Or-nrJ^IuhA3YlyG0=Y9DzBvwPhr99F z_C~k<9H7o3+{E6oDBFVta;PK)#Tt+Y`YYUN{UZ^fT8Bg+t7eIJfJJ=Mu6X+gS^t{) z09@Eq&YSS>Lwub`eHXBc_gJtGKoxv=AJccm<~6N~H@xMV!1-kE!Z(i_5xvRhT`>i? z#tMf$E1ApFe>XL{=?vV8CX7pKXt`tf7;Q&N*6UfA;4vTW17BsvZhreuM|{UNw7UWf zrm%guI;ygN#bnZA(mGlMnPu+09z(h$*Y~3(Ai6&by72I}Q)kn}^n>o9;76u7w4`}J z$r~?DBlq(~gDCF@l=Ioh{zSl8MtbvJ-)=r|=lOY*KIRyF_XEL!OJ{g>>J=lQ(m&BB zDE5evqsnzYhaCeBodV)St_ou?RuU}0S9zYRCsk!=i z%5>ZUpP*HH)da^=x__$Kmp+z~5C>-v@W3<;UmEUel{F5ntedIQXUQ~vLpG@@W+6`k zue=qoMQ+54AO{dJ3O2c(PsKh(E7ghGH9E>}sCr;7DJf3hv1hsw07f9k&v#WI>soXl zZHC&f!@RC=pB+iYN=UbT83v$^t#w60SQ(FsE_-tu*{274+eZSJ=&KYq2f^7uWn9MR zCo4j%5jG4qjSz-FI4qQvpHAB4VfXtzB39BFZG2n*L?S*zx`w^4t}a^;9#M zM-ZkNIZTw-$tTw!drE0MWsJ#LWUNwU}(vj~wsB-X-}RNo5|K zgo%`z+`6^k+Mp;u%eCM8tIw2knbB38 zt29oV_-q%+KYxj|%f$C-t&pPzc)zcBCC1K9wN6gpym1f%6U@o;;pkKtyJ$M6eMVQA z&@BVyfai^gGrgqqa}?6i5ykkLY`gYSq%T-f#bLcY=t)jJ7Ps*CU%OpCGxHNz50hiI zJ=@vutCDVhyrO5+_IGswWG>JsfKn}tgA<$r4)x=H%gnmO)mKmN!xE$-qE-a;$aihSD-ZhQs?IpywfIS3^q(|uzVL%*&;Iq%=#0ipq%ZPSyw z%)iXiUA*RadmG5ipil6u+>cakT;kZZ+*#Ro9W96L5&5-fR3M?1#9y*{^o=5SXY@g1 z!4f+wsBQ=Nf=d~i#Qki?he79W#-rPUzvWdIbP$9;WMI*z)Ov;)!BMmXTLDrvhv3p$ zhYw$$9>@aSxq!amhJzk>DARd2FH-NF!o#R+Hm-XhHg@I%h})GuAHQHK5qlffVjY$L zylwhVamog4#L-Cb01$oU-nC8XiuG=yttd^^BUq*PMah2)$iFjJ%&hnE8H=8b4FVK^ znjts!b}F{9;2$0X#4#jjZXElBZ3tak(lsm}`G!JS0MAFf-w;e-rFkG7aBfuFIq%s+ z_2c;8q$X3&P+l&weZ6*V4qP08Bl+J)pfbtm+!N2fJz8c?%GidNn>qxp z6?$l|?I0dl&rJNRu7oI|JXt;8o*V2Z^LzaXy0)ui)ag1O_5pGS4o!{PEg&z7dMKJ1 z%^c9=AKT{e**C6?1{pTiHjY#v#6_FQ{-WrbH7%kzRgVK z054>@N9@>WyvOge1}?kA--f^l_DCP~ANy)yca(i(-;ZNdnc}dMfC}4BsVqgHO_NmU z9Tax=W`fhIMzs>k9qBL$*F4&XAmr#N`ZszljI;+U$-pm-gKvtHNv@@^Kf^ApI~f9? z#H`;Byb43h@?ZCtDLvYwdQbNW@|;h{idMon3apQ<}xEE8&Lf$ZMlJbhjJn&kJKu&PYo*=iMO zPd(+++dj7JSi~n*h(hw`UFRn{x#{PyA=G=sYtwR7gVxiVD1FKLKW`RX`nz>Bo7`9g zg#4npU?vex2njw7c+Kv1OK{#qxMkuK>aVVt;S1Y@`D>mJlS7R?;&TOqIKm^e^C3Jmh76<;DKMuO482uaeqdy#|~+ ztLS~?pI1Nk_!0QL!1D#ta$0O*_VpYgz{=X->Z$vFnTJp;!FOe> zZ@Ay*Kl{QvODt7WD8G9J&F{}Z&e6ACUR%9<@7YED{P^E?XfO`BQSLM+2)tg^WzV+r zog()l3YX3^io;ip%^n_In+nn3v@vu-t$v*}W*fhm&^+y97yn)hhXWhz-z#R2N-D_2 zHum`ze2k;Mg6F+2TKMnjAX0i$Z&iE{yG&$Z!wKMd&ScY8mk(X_?=%@~!?yq=aou7G zgI;V$@;F-6^r85J*&Qvn`qlb_?nTBzZ7~f*Ta=}08vBrMmn$|Z=*o}waY>>1e^MmC!_B!02<>yg85LVb0j3q? z>2SOo0S%FkbvTiN^W48t?;2@cPL1+O`rj!UKY2l|NJ=1JrmD~7@lw~}G3l*RH)p{S zy?R^bO{&muEGpFDGrX1d*Ceh-VGRAM-xi+cPiqVle|-=Y$^Sa^W-CHeiqnFY*I=Xb zFo3xvp8yg~Z-evYIH`B|N3`K4><2CHx z^inXhr2}gvj>-Dlhx_rp0tQPVRfE17{PlIkODpJ!mf@G;Vcw<;P9Q0}U8wTYggB!y zj6%@x$F1-S`Ki(4A|GYXp(@kUuTEqG8EJj!vc4a-EjSX34u?F>y$O%_PDF?}L_zKB z&FpXQ7aI&Y+z6q0`j)r04|SxRE-rDM**8muBRtu}Jii?^^Zj_}CeuPc;D0dm)XmYq z6pQzwV6l*%+Bz**J`hmAvCf>YDEm71x{^vX!ssP_O#295uKNW1LW{P_-@>I`$Ou&tWavfmk$`(=C^j-f`R)F=lx4KIE^tyi$4|-e5nm&2- z@j3iX-0xDr-Ot-8R2@uIt9Zj3zl{|@28&Bh0WKn}E#|U_-pU*$V;d@aI?{jTivg^z zc=BRu6fVPS^ZMKs-(7w8ldnYhW_h^O-}IU6x8&|T4O+ul6;$h1!%fXoET;FU&)EkN z4;(lEUkkM)FDx<;om?ydpL9RnE}$ zalu=OvSV-u9dgNvL@Dr8efLmt=hEf(+KFHbuQ!--9}0g#;_OC(hM! z2ByRO1jmoVAfNKV`s$&t6+&>lPe1}J%hj5g>1H?XbxtxmM2CVR{wABb8UU1(*u;y8 zM;`Jme)XmRd-mhbrAHs*{w-O#yhGi31THmhdi3~4q84p$WRzgvc9Je2Xq?>$WOwxY zSBZ192MoOTXW4HpIN3+x`}XT#7~ySCBN47)B?_8dFCR8X&m^0wDwO5>=fE3HT8HP& zAmIS~CGS*}^IE@V92_&K9So#i&$mLtuvP2EW!75^H^f--JozRD}9Fsh0X4i%b=?ul!}4YHkGc z8x*g!Iw?~q94}V}4W9Qfi?i=z57u5*#>Jvb*d3eh9aN$$*)M2Z@Kd=oyf^#0_th5v zTK%303NNxYyY%=3QvwuhXRLq5p;j`dEW&rkySFsk-?T1I;QmPEWw>(*_nuP)NfEYr zX|wE-=NT;>h4(xc^*3^IZE;PSFn-aILB}2ZR0>~PR7#Hl@((}zmFu~Kren5K#XVwb zfb&$=_X(4m*dIih&-~ADW+Sua+pkmVKJm%t3b|Bd1*{7q@@vAV{C*Lc>imo-I$_0+ zKX>~qBd_!X<4F7z+zK!6Z<=qFFRfHJPGbj^yWeVt6y?m^yv+gsB)pMKx+GJsZoP zk~A#$<^B%j5K7yYP9m+fFUsXVDl0w}a9RL6n1wmu9*8%2#=Eg^!e2oL+syixK(e$i ze0j8q&L3{U*#MRz)!63q06*-y-3+ZRB?$LSaGUUtF}sO9p>*oI8JYo9k){63cVi(X z(K*A%qI6~70Rkc?50^sF_7t9OuIWlc_59B+F}bje0eWP~A^)f$lmblP*>I$N(n&5f zM*n~^ZTL9O_q#!L-KUhU!su!lQ{ww<{CV=D%g<jZ}^;dvjWYB2hkY3~wa7GPgg;^QO0=1ee`OXiU5 zI2}*+8&Z-oyb<_Da!kA??AsJ`gs=6%Ffq_MnBBS4H-i^d7I*f6vz*8mevEi zQ1ukj1l&}Y6Dsk!>60ZkcRvq?!(QMn*N5lsKnuh0{fC&|BES$6;RDx?2u1inw3TZxa1LVP}?1dRyUpy0+K~46h zIQk{|mXvE|q#?Fc$8-JYxE zqcbJtV3FJbvGE*(X0JqH!R=e1K{S}qZwG#z4qqlYM3Nf=6d=+43_R66U@gPH(2?ep43u`v%O^Gdxc#ZT_rX!E=z$)>A*6HRXra2amZt+zD4#RQ4bbQ8LUZ zQP4Ydkw~v9e6h67#peG=_!CFroo`n|Ko_O^4PY*PYZtg}F~Z?x^|EKH{!Qltq|ZgW zcp$wn<+_DRsY)NAgBGBk1P8{}=*QhD142)D?Pm%`*lF5*IVe95S5`FM);ZR=ZhH16 zwW05Pk-n#V|BAOW6-Pcv+4%yulj=0nu<*-l`z--|csfV(2_ok)3^L$~4%|E{mUvEe z%Vi#&NIVzjN!z~v=1Jhv;$vgGdp-3Yi+XuF@eg=$CK%8+3{Rh z>Hr$>$qT|_AA91;jk|-4p9qUW7e1$uQD!Fy#F0yA()Bjm@j*Vz;!GqIfo!KPc8&P+ z77X=3K0Zt1-J@lBdIA}OVFF6Z)t4mLcUSO{noiR(8l0~Ksv;Hct0TI3PjC=!9U;Ef zvVY4t%rcz!pZzj<-UqA=`=qK&Urfw?wQXuex6`FWBd^bTk!8o2(hm;-*=5_0{vd&% zhX0?vAUPA=XTMn6@53AB=@xf%8Cgsh-aW?szOEmDKVC)PN9lKLhlSlQKW@X|6yyym z?o>gb$#A&6RkYr>VYx?Y1?RAB_d8N~m?2a-ZTx;sRZ*;Cq(0+~%@lh&1i2f0%X?Q{ zL2ZI8fnfNHqdoZX>vPS;HQNOKhkF4_ojm=XSA}W8VzsVD^6_EA;!Vp}9IgK?iZ-TQ z_^V(z#P}d}u@RTS{z0IxHc2Vuc;>1_3&6)}xkm}Vty)~KA@o&#v4?J5`g==TjSWQ% za0h$)uUDP-E&lb4elTvfUlG)JR4pFcqom5nkq+jVg9rlI@zdE?WPN$lP)D874UXS9 zo7#6*@J#EG6;(6^gFk93P9tDe(DL@Fge?dx3R~Jw?rns|ffqNnQ7PY^C#9!fO*@>7 z6=FZ`;ObQxdHL|a<8a=unl%?i_Ql|>PQ&qQc!P7a_?LQpLwQ0epZ9GEMu2s@Am)8a z+O0crGezI>kcsHNI1p?=%fK;V#PDhQt3}1XK=icYr~_Y$16Dbu-JTVJ^3HBxR$f}f z`!TG+f9u)h(?2WD9pAFMuLL8Wh*G=uq9ih-4AX?M8pcE5MjjeO(}qx{=4@zse$Mgv z(>=6U49vyuxd*2z4fYzAsrcFXZaUWDZ`GPC#tNA3$1u=5W^Mv-W zE;$EN(Zi^R9FAGcVhKA+k;|ovLVZYL)aX;>sbciKy)prAA%=GD@-aTR=|W!j8|k%2 z#MAeMj}jm6G-!3{ViJe#TYts%!9BBH;2`hN#hrz!%FmQ9)x())ZgQ|kd39C3c+I%x zH!D+`;3(|VY%2zyo+c8_o+#o-x3&6U4C&hj`*L2C@xu)yug!ooyySvL2;h%Shq&`x zweP6sHzW5^SW=<-1Ge~_T~qxWk5@KKLXfJbe{-;oK6GmG>)Nw=N009J>c-lv93GdF z6oECM?MR>0^h=jerW4*Hp=V~CSU&d!eSps#Y|mBe zs?oA($t;kD8`Xba%FBDH6r53|YhX3lCh*C=Jqyz1zIt~k+xR2#hMT-I?oOX#@M3Z( zA%22m#=_!GrAg0Y64VI(xTBaHdnCt*LQn%tX2i1j`(RnSDbtFZY3-Am%CyJN(kOvP zM-%<;4TtoMD5>2S;@Dj|&_HL~VwLRQ@#6tfYgC-Fdfgb-UPAPuwqg1jf+5#RvqpEG}1l$XjQS;ao5{68J0F(Tk*@ zZ#UuC3=cVZ!Zy``4%)FA<1oZa`7+itz5i}!?gYPyqxL~hKiqE-?u*iU2+2S zzQt@VUPz<`KoaBZeFwGg55(e3!nFe3O)!3C7yFBw0Ahpp^4o^fp89D_sEXawuB+W} znMvIb1778Bzzb*pSjPRGj%f3J6qjA6ubzA4{nTaMgHHU=?vu2`D%SED(Ad=u9Q%)p z(f|i;DJBK5J3mV6a@_*FU|wR1(v0BL;WzbHN$!yJ`&ZciFtm&iNj*Crleh)R+25n0 zbzk9dO(*C?qWvG2*gS%`Da!t|yjeee0q$~;98aX<>oUc{!_0F zyGJvT5Fae+^-YzA@W1l<*~dU*1O`LzckLxP#kNG+uU9s8!z;W3nzY^w>&jjROUa)c zR$^%YE=3Tved5P|>wNf}(tYBKDjSMtMiAp4p;3(EoYqqAv72$M+lf=Q@@rmb0@fahsl@v*!W}EJ?Bn3=+fy!JcnCI^ZLctruU~5HWeSiF zvXuhNXN5~95JvVT32C=rRPNP>w)QgD%aO=O>H@h~I(4h1oX@kc!JX)mwI(w>LR0xc z0HK*WrV4x>TsYxHd1WXG7E~b_?#FQOKK09cknhZMEbmDWzm-RMJSX84^n5QZ`q3q{ zB6f5f$2QdmQ&g1?@tUwjad*W#&*42pei|BGIs%Jl$8>L|y0IuzR z6%}qNR=C=@FczZ-|A2(gxQ~vot-dd$ldknsuExv4rC3MgqewlBn`T>Y@z_42&z z$zJWShD!Be_wRyV&GHq5P|vkQH#xXz)b(zv2l}X;Po(F{U1z)R;Q6^dNxLeU9u`T; zHJYyyd}?6ivRY>KZ|4Smd|v^9>X)mrT}vY3uRdAJGj1HwA@QA5)GVxQzJO<~kFT?A z_^@)$HSO{*UwhwdDTfUqWeveM`xeiPNcSbfS1g_V4XpSkzf?fJ1Nhj0$Bc6KuDuu9|X{#K(hqLKb*@ zrjRNUcnzs2uEMc<9{6YHi82@Niv_st&_L#7TQ2R50b2aZ$Y@TI;--qEL5yi)1 zYlwaO&o3~y_lu<5`5pQ3mVCa|7rq7j8I8;5uN4X3eKcq3k4Sc63Fc6~f5%+)(km%Q zU~KYfMnJ91yTpFEeKxF=Aj9|(fA8XDzDW432Ui(Hil9yd>N_&YlbOie-4I}FTqp@%`2-W%ck7&Q(Gg(F&E-`k87jnS1i zJ%TqpL0O^;>WQi#;8XNd0ogTOA!nnnh*`w{&Wz2_@uLP?v|BXlXopZxoe~N~4i2Rd z(;&0O|2pj9a$g14IXWyiU!RkoVmeITgTND0N7(6dXHFBzpUCL27(toQbX;MY)d z#7*eKzjAiM_$UkthCDt>_wscKbj45T^&WpE#Z(2cr61+_qMnwnwBpOy9=93vNlR{J z?0D5qAHX@fFp7#vOg$3z?J0c1={L}8F}NoI){WsULei}Th;f}Sw_7~|nRK7G8Jv3X z@1)q=4;CgFix8GGPR%f_ejs)}Yjgv3)pB&wc)u(XF1|+2)I~vmSNw+J7T0>Z z&;sgX-&jM^^m6U;8D28U9#nkP&qMm>mp%bwCK6_AX+5fzY}`Sr6ov)0@>cRVTzba!=C z?Qff1hlhsis|2kk%`bxEoZZQI91h^r{Q1=Cv@igb9E!kYm}mz<9#H3b9RmzlJXg!_ z0IaXpoD@G4n{B9qFe=XJ7EaCh*{~LHMszwpi-FtdT5s|j)7B@~k^>vRG7VHVUFCM3 zwlJPwdd9F7MUn^d0!$%{-ea^L4h+gbqg~kT_s-?!iH_n^0_VWdoqWi{RhkPn7N zGaNmA$x?UsZDX>L?+9xWCtmLxxk8@6JYlNIR4FG z&7`yU+p7bCeFLF)x{;x6UbGs9(`(S~g92Y=8)Y3urtjtF2Ae_g_S;17`9gA-k`$Uu z-(hVJQrVuFw*=4OLoxVKpIS#fu%h4cR@raININ=GPhW zqOAsUa_HJRcgt4@?r27mmiQhNz(egJ!}EGvIH<4zhQ+I7MHkOQuR( znhqDRjHNnTqV;iXJZ1H%$6fu5Z_@MT8}4Q9p~Wzn5sDXcWbUh2-hVIqFn_@}y(nP| zj~fn-H*xo@+3am~=;od(733BF%(*(_pT(*hS#A6bBvK@k2)V5{A8mvH-x&6rELxZU zs&02F8x)=QJm^nB_v=&_RTpzy%W(%yi$~AIQZB~&U&C=g5R}AK)S?C98tpqV4!;GI zGAU4?o|>C@W!}$uJI>`kDPs;2Tc&$FlJHcthn3BSvtCDOhFETE1brO;P8ctw>EXKi z!woj*72n&yLzL3?F@bE_OVMteE;P{sHA9)fDqN1rvLAWsbNy}iUiJGiC!w6zhZFxN zDovlW9J1W0IyK_(xia#vP7nM-9f`ki8*j8cql3DgF!JwVZFpFwbb03KhGes59d%0;KE z#y|$}VdmiRsz3v<{F8@Zmm#l<-xIYJ?dOU4o7DC(aQyVt<>NI{1Qj9n^7jXT6^E}v zoj05`KK9-Qs@ z2Qr=s)}qtbUH;UY9W`{bPw4ZZ%3p*j^y01U+D@M_zx)B^iL3<=??bjFY2eCm-az>u zl&Qt(ZMKv7eyF<;}c08ffUAAq0v(*A(zEHvB^Ni7Naw zugRB#q>exf+&uT>jR*oopPxsgjLRI+CN2NI9&a$G`XbvzPs_I^gsD?Yy68;`W86aa zcuPMQW)|!KmJSX2;eQ9PkUjeK9oJ=EkA|d>!_rF%juY)E>E{gb#8du#5K-DogI7MF zp?rNNvq%2qsljayk7Z*`!B63JX?J`9ck#jHlx-BI;-4(f{6vXY)y}yIjM%`NY!R&` zsQf+5zdX{$v3U#Qu9gIhG|RwqvSrxjXpCgMztyCx`*O?jr##4|cFjJO0{fEuY2-o{ zljY-l!0b6~+;U$$BnSALB2=$C`?I)(ASz0EY@tMjcfW^HH$lgR{)aXg1{F;@x6=OX z; zp+>@(!1ICnLb1~zin-LD^W`^-kpVyC2Uni%+jvPwM>V+ig0Rc>yf!-3gvSFb-zNRz z6n+LUFP8G*)8G{3Yh}J5j`K=5% za|o|X6g0K-{q=T=XzMlr$;;OK8A!$~wc@KBeI$qF@{z?P6~ZIy4|*2nN46oBz0h<% zo>kUQf2@(3M9%)EK@(G4gDWq%$51wkwIB#)k8SIA_{*w(UCZ|1@8@{bvvVG2S2L$P za_)-ujP^z0(++6$)6dZ0V8_3s5XF0TBf!2F4?linFISd&>`x2}XD0}1g>Ek|qw=2u z8}p?W<^(}F3Hh-;UwD>%jk8A`4(HzhGQ9+J9Jc|GOoSlXe04<~mDBr(L(Fb4E|m2W zXr-Y`=y_O6?|xk2J6@g4+`Bm&MyJ;4&(5+HHK8oc`SYrkHZ0t_>Z)tYM6-KQ;oLHN zE`z(vmx5Bn*5g#)+rR%Tkc--W-w`^Au9&Yx=YstJjB+kts}-1bmciTlyq2t7o~IL_ zlARx+_bXa<5gt6qkR^A2SMa+KnQ>E-cz^lO^q>IMiVzZeR93yId%hHZAftF)_62n+ zEE@@EqhR0yl|>PN*%$xz>@u^!Z%@A~bcg$Li>VhK417F^#xA@sC)2}zNv1mp#VNlz1o1~}CdzM`8+?(ZF7Y{t zsT~-ds2w&u^-1zdX?(tEE8m@u;9XCiWwz24wt+QsJke#wcW<q(kr+13Jw?BBNN5&wti!QTtZWPb0UhhvT{<`meW8nim*rkxIeS5?zr{yRad~k?>`(m#b zc#yZqBZEjg!NhqF(vLOyc~^TBfjrCR2K;dQ(hcD8?ZjXIY^#iK*Z?cDZ%N$2yq~lL zCVDQtJ*wcfY1*N6e@*wd1Hfncve9J>(T$EeHnZ6z)bVWk-l}%n zj*?xn)xn5g&n8VhTqEDWB4pr4=V&W z9N;-{&EFI>1w}{#-Skx~;0dM-eGKwd_!>2P@hZ3uS_-=SJ1Dc=k4-)Iqr1S-rdeLz zSb{rb;hnl(u6=-^FM{@j#@qzP_w#UnJ(_A5k<+B!)LpvSPEIx|e}Mq?sh=XA!Oo4N zz**Sy^5%EVa1%o0@2pLtetf1kuZLK<)4XuwjzN2L4dwD_9wYX=R7c(S=?Mv}rT4Z3 zef^%NeuwvgsG|(Ngx}`6!aFxcwwhCZ?|KxOotVUQ%>teP{9iXNWb9AnT$gi)4n-X7&|3?EW%t%Xox zriyeOE|v*QrC%iul=AnqghgNb_6qUz1+gR@YG_I9VicAtD=RpfH-UBRl6E4DJO(>z ze%SF$kx#i`>Jr-?^wcN z=*Ss@>7g#Y{bV|#dC)_5lPfW{?x(f(u1~%Wa*T@J0K2Ln;=?f@| ztMo8Wj|(kWl?TTc{bCJaYkFH+|6ma?hTlZ!P0L~Bgxo#kxWm_!wl~e}Q*M73a#)#G zCnl#Z@pW8>Wxt7w@O8Y!?@)6C7hLpS%~I&TlBls@TJ#D#C0@s8@Li->m`h+Zvp$caykxovE!;)isdA zt$Em>sqmS=kUlYH#KMmZJJG&T4GEPt0|2wDcQVq42_>`)BLdzlE);3`2|xq|FD7*}@3XH{lw`<`(EFex}mM|izwLvOTcmGgv zBSMwOWw0y$1V}2fkd+CXMR>m}XTRrH?^<45Q+CH>lcLUi$%TKS$iUhcrHCTZ_ecC| z#V7jEeZ2^)m9RmBeV=01&k?S&hk8l>QWpCSk%oovkVrp7)hF@c#a=7t18@1C%~ie< zZ_}+)ZRlQunIxMBQBnq9)kY;4hJ^{3cBv;US9bcLiRT8Ql2Zyp#SXqh+VX5b=?kvH z9JcgwAI|XTE@hqBcO#=8e@6Kg`YAl%bkj2TNT~X0G1DOjhVjFRG96vfhf7M9AMfF7 zzkk*bByNCccj64Erm$3m)}fZ$_1xX;L6tAfuX`o&8-zu>LfFA!vkQssDJt)IE3QHi z6{)8`&cYt#kq>mhccs6aKbMTZ?PIpl4V{n2=&UBc%}Ey#8>l&+hS4g4-z>Z%64rt| zSlxA#4i?dlZSu9Dz5{e^FLX(sdadot1CZ`JyAhk*cg8fk^oS`9LXK&rfwAvkMMB5b z$^+1nBFQyNLS9cm(I9f@=z|lgAByq!NimdDm^+x$T}H6yl=SO~d%stjCu}fgI0D(! zX+$c3>tEMTdL(d;L>iOHbge(OX$(#H&Z5vV?3w+s6IyWsr#`jh6-xyif|HKLt;uD@ z59^NTscZWBj4AN;6aA46_D4gQw+h~G5sd0AkS3hX@VwG*qr-8myzAiL)r{!h0XIRK z7VVGzd7xeo_A;Ui=?w2HnES~4uGan3zPF^KXEXd3O-oVVr+3|RZ(c^1TB<^5v0vKn zX^U&@D!IZjeB))S7Jndk#u~*I0*Cc|4zdbFx?ijRTnZjt79aPED<8Z2V?(uTeK3~| zJWAF5zR(D`V9MpfMM{^9kJJmW|~OY zEX7__EG~~ArS{Xk&rnP?A~{w)u!qDWi1P6m0=6PV|Gfr}f{(?e*LPA`>g)Vg)v(O= z)G~~)oQRH=(#jt1?&HJ0R~1}~d680nVH|2-0d9TU&!lq>-*7+`$@k-+QD^y;lSLO? zQjhZ_n^Hd9FjsBvuI1;>l}j3eu?LGRy!`v4jT?yRr1_O4`g!Hk-pmvb-+S^rOzWb4-z)9af1QtaRvQNG%DsV^;h93vl2OQ;s}u`iftUqNLZ^vo2>$WA5oz{tpGs#nBCx7ot6i|mdC1XrI^W^O{@XTuEEuD=0%9D~z5-;q| z#Kf{Lu>nVxCgtct)KW4mi6hp4S3xsYXG6i}igpRr1}?w?PmnU&F7Gj7^BR+(Rm^9= zM3n=YjPYi8XSOJhXR-kq8rC1yWCQK0NKRG2R<`Pc2JsX3t_B)Ey1JWTgO|ZP`lsBS zeIgK z-m+TnDCwf4XXYTSe1xp&jiRD5<|FiT51D4x;cfAQ8a(WCLm(!v@|Bscymdxq9dFT` z$#@t-zsl*tdYqL#_S#Ra#%X^R!24V&cLlAwr(t;6M~)+v09-dm8kVD>3QOJiY7ZWZ zF$2YYEV@rPYl)~=hvp_d_%b8hD};yc0q=7-7Pr5$w;lY=)Q5H zyhj9v&gE^nUlM=R`CnDDF|hp-P+4Tqs`t-i!YxOziZC1mg`Jw?%rY0vD5e6er}efd=B!@iFH#NNzVdmL5Pc~gI{WDI2D*Q@X+vu=iGLzmc;!T)ORgl zJ8bO1X5JkLEAYiyxi;>7y?`Uw5uejhpI&`85y%|J*rteIkzYsRl$LNDi-pK-wDoNF z^a2^yuirz zzP`o}+0h`JklcGvN$Nzd1o*mj@nN*F_NCis-nZ6=`*)W>iw^gPS7HY0ZRZj+OF+u+ zDQrNZ2JkAodqYrADlKo8^iE})J6yDfulneFQp@tSJRedz%w`D4X3lmRoiVS*K84RO$5HsFfvI{a!}SMJ`KvRBp0 z0iu=#76K*k)|3v#y`i*+;GOIjD`nARg`X19O}^2JPw!T#CwBtRaJy_Gy5OXCqARd% zr63r|!Fx*T+yYo2oF;z(UttL4T0rgF;LCv|Q){YPzAOLty@mMd?bb-uc!0&5T-iw+L1 ze}Y8+a2=g4mKdNTSGl55`uSpiHwKQyn5>*?nP9TW`SkNxvVkYW>my^O6})~y@4>xq zWEjiv5q(k-A~z*HbK|}m#)9MN5jr{tT7HYh2tw#XiRYpG9usky3C6e-1q}2+0Wr5M zft*&$wB{0-UE_EyTjpmpdi-v8=M+7iaXNfuhb(4-$3z-x?dvX5`t0VHsx^o8o8pLE z*ZJ=9ywKMpC`1g*0Zw2R z_?r6(09Mw?AZ9-FGP9dLiyk)}(Q2^NxJLkX#a|PX4wo3Ff&#?$z)_qF$98+?jb7zd zQXFgmv5Ug<`f|U$xW7%_UM}?4OZ@(L8T{~fKlBL)w zq4M0Ps0MWE;YutC@bCdHF8Rr!_Hn*CARi21@;P1`p1uXu?Da;htS@X+4jKq+D8fhP9*?x+4*ER1Z#y{BBT&gd@@ z193R`{4sUzs>vt}d{gK+(BJFlmiEHkl_!a*+g2e5bu^lZ(}W!4|B=jS@j>V=_|%SE1HV)EscPxvERVp%b> zbAr1+%N6&eMM}jncX6X6#Q&jf)J!;l|wo)Wv$x~ zr{dS}Z->c_+tp-!ZI6LL*VnG~dp>R9{(-cU@vNTMF#}B7uChGTY8~wh zT+@a{+&>u@2CNqG({~W-2Wv5wp#|jKSlN91ZV{g-1}sKw)<2jZwaL&E{W~)}5FY(9 zKMHf!CdarE9oc<{gL-=;x1uHBx};RA%SR<63vg<9B{@z#y64kYxb>ED8*2z*Q*+;w z(;tBsuqEpAhOqmyY@#ztoC!6xLcNoyQ?_qoTOQ?Yg&&vK(-~gm2?aJF+4y(R4Zd~f z#pR{|b8s|&kh?JZrOwYTv?CzLfXY)yVn|FnDqoM|oD`US4>(B`FE_(l=fse=7$FaQ&<)VOX+F5oi){`Lcd}da?voud|8!}W%7f|% z9U|Qm36Nje^t~iNz;jOP`S`IKGWzuHt8lma^f=t!IR7VfhHsTd>2Kq(XZVf|`FdhD z<@WP#k4SSR?rEQhli#$?{bo8`y{KdRc&WwXiTGJS15cK3PbBVDg-^ZxAOMx*Ns zt-kIRw54(u3il5N=Bl>hfH+Cs!R?P?jk;r<6YV|k;<$Gk7q~S>Yq?wWcjjzd7bci zJl4jsk{Z;YI|1(T??4YX^#tYnRf9^pKb2`9aOf7qi$Ox69tl=y4pXr>*S_$1%F_ZP zK>SmA4eeUi_)EZ)_~ zm7+i|9OZt8L=7gt3~G(mT0XB8Enj%JYRKm2t)8ywAa}-(uV5)5N!Bye_-E#oiIPZy z77$3E>(x6lRI6b=-)Dfk5CKMU?n(@4cIE?{kvHbjAGdu3q8IlVWo@}BQfa-O z;hS|x_k@jDj*gIh2HyBEU6*(z2yiO{J#9KJvE=4-XR&a|AG>g`IHpqfZJonBP%Pp{ ze|#F^45OLxZNK)_YMx`P|8Kq0i>k6X&62CIL#LUZIdBfUYjbk$#AeF#E*4&qU>qjt z{*b)SsH&n-Cfi+MWS{U~{=K&j*p~x^fHA#31o!vboD2W<_-5((xGAb9 z%MP|K^vB_&*8|4E#6-&;UI7XObpB7z8H(TOy6?t?0)#`b5Ry144rqovhCseuE)|6P z-t*MX^T3Dq;8v=$E4T9Ub)ST?T@vfL@1&V6%1QhzVL0Oy$;5;o&0)KF4vP~W{&8ml zvzquQANozW=(2yjgFP1ldH<&}!&B_~)q(v3tTf&EiNrfJN<{r=S9ji>%J=aiE)OG@ z4&#ISWPuPoa(C}0kZvC#5P{ZzkM8nCr4O!I-L7S^+p)sb;{)Dx^B_eVn0)P3#WM>`F=2dKq3(*}XEOPKQmA;QvjTv2`t-g(I!I%o?Y&yQ zd_hMs`y2ajRjCo80rmj!>MwnF>2qr@loa(U(jbm!NgnG1M6tjxfhAQs_N3kTP@Ik9 z;G162@Fm8frIj?P$=#+sABShvT{L~)>iGVnC!TY-Or0p;%fZyjV%gJuVXi66=N^|k zRDsTBqp*Xr+`B(Lrc!7sMrM#qu#b$>bQSO!{)s;bUhKUUxY~QChi7%lLH%6!BGfY2&4r&iD@67ntVK-hSkEk6rify*wcy0KCcW3l8VO{ z8S|dnI6Afm%|2g3k2ntF44=0A<$tsDowe2@Ky5Mf&=mFO^daOF^~rNM0TczB^RxaI zDqt%D^`&HA7!Z`EbJD`Xw7n}u5h(zfhC^yNDvj2Z`vU(sook2*fsga4|7VMY-K4hN!70sHGd0H zMR)!q7^363Xi%--8Z9|1qWKPlzq_z$-ntKG+t1uJ*7&Ked^k|K|2sW_qDT*wM0o5v z@|gX(a(?aZJ=csc`$=j9VsC_MU(|fF=E_PpD9glSa?(Zavyk(f4bF997xV0`LyqSN zG28FUU@L^AyPTsvqo(2Ccf#^?37IA{;WsAgtBNt*0+Bg-yd-lSH<)~4qQHeai+{V4 zA=L8&@v1vFZ3J^@K-b%&Jn)(Kv-sS()V`#4gxRkPvZ78nI?E~So1CiSG~Yy%ense_ zg&`iA`iLOKVBnl;y{+g?Iad2P_T}$!yq7cxQTNQxaxOWC=Y6O7g3EY&ySBED!uyXJ zkrzbDAi+w&aX-oPu4CQmxIAJqe$ilZj7oj>!p^ql?)ROOBkFb^{kIuT14m_$J>5Bc z$wXTz$LH^7VnM|YL0<3X@3^@t!{^MsKPmgp)3o71DHbga;ImF$serF^pU`& z{`2@n-O#70eC97MqYR(wz-C6W9(xzU;{`gM`@Y2-SevKT)78yY0JaRY3X53vMX#^# zwjq*MSI58e8`LLg*%`zu(XzfIc{| zLIvm=jsld@fV0KT1tpv!pt`}~LN6u?0%be) z;E?x$1M)mIK!ojn8MAja*hwZlTLZ`ZHra>IXeA;N2|?!Lts*_XEdE+FFjkr-Qb<6` zc=AVT5IP2C)F%im_nRxP4tOK=d!Vd4fYx*Tkxa?AUwI%85N+`@7c*b;l^BV1+Ru0U z{IP3^w)=5UZ4_R2`Eb_js~oGvpFs@Nt|cVz`$)(xV1AjnkHvk(&?p%da3UtT6_&$; z%X3hnE~S1`FMDV5cCuOe*iVe`CvQHXlq0f1v9Hc0V?+hGF4E`ZpI+`?Ia5umWlz6V zINDop#(Be-24&e= zMq?=|9)C>x#{kH_1tRtGECIdn*|f!D&Q-j3L{b;u@Neqk_E8!12mM|@!{~CRzrPd| zcf@nRBgtCQnjWO`@qa(m~K_l5Xtbl=Q#uCbqq zX<3rvz0T~3I`5-7^5FKp?!WoW3I6tVyIdJ%VaI)84(;~0R^&`fkm2|#(fg&6q7WMBz8Pnx^#!bOt|hl z`JF|5C{zZooHhHG%N9KvKlQI5!#U5-)}`sseP_Y$Yc4v>aeg4_Vk*C4Gc4SOQ*psMZQk9U8#{HdgnO@4;J^B+S=KgN+xn#~_-*{zz$~CpMi) zpr2O$R$o8L>G??fBbt_&mCo-vv0>*W+~SVa9;c`Cg)2xmZu?kq<5#D@y2EH@&FR%R z&<<#oZ~^ zj;P5hx;o9*Z23wxEq*4Fw--Ff;-IY4TWS`{&;SG^{Al5wT#09P5Jy|PkGPM;w+5); zodzqpBB57>?}1l^KU!6`v+TVNwM70Q#GPYBbDs}K9)F0!#OJ#_OYwQnM=6fwZhBU7 z9U0Xj^kcfLqV!wdz=bJYhVLBemQ?K?$n3%z&Yr(6YZoOIa9Tl<;8E`}LjG4|T3t-q`))UQAWLJ@|E=>oOutaqvCk(mgn*ta{FL@iD~*im1oB zmk%m{#78@|p2FCjIdK+G&!UySptVK|J*WVGR6mwz2jFDxe;~$A$ktQa*5#>$+HHMl zjEnB9+Zw)->L$1CzNTCiAn)Gg-ll<$NA+f%eJIFfKtd^9G^THia9EBfF`Ev7YPBypYg?pgx52*&ge= zQm;RWxKlm#*>fs4=;+O=J4BcU#CO%+3DQ$kgqBe3t*+UxzPFFfEO=KKA?BF!Vj1|1#*iXZ4Mtjj)dO7_s=rBq%i)tDuuA4idq|BQR?og7FfIDzL;HF3Jfu&WftaC|yx#KE^`obsYx!44ZY7u{+2IBDJ zaI_`xn!@O3S)+X9&jRoP%lohx(<;GSuy+bAR$w$^ZfJw-;1KNn=@14JF)HOmN*jv5 zJ&q9Gyti09d-Mp~yVpmiQ*1imP9V5=#`JkG_x+R=-zSRia5^oj*GV_+DtHTPe#o5n zz{7r0M5Q#S_uJd~AU&ou#1HJ>L2ke5)R5z8B>H;04kn`4??Md`U1nd5?? zV%>YD@i#<{DNMqA$@qKc=PkzCgE`EHZa4%FX`3;V}uTZyFO;Lkvg}1Q`%_4&0$aO35&sTVYIeK3d^FL;p_i&lqw zoJeWSr`OZM)Lhlt?WA4XLu0nw*ZIL^Juggwj@`WeBDstLHh-#xiMWKy*MCbb(ryEQ z_#|`EY22GQ2B1aL_f1jz>Oz0a;N4xh0+;0AdWTRqp0}dAVV)4dF?w8=Ku8Rq$D26a zkQp9r!o9#5F+FM6C~bENvNsY>o;y_@wfS(nSp)+~5h{N3m=hLpjz;r&P0V9fqRgZt zi_$D3pN9&xmB3!<$QM*>eP9*!$Zf@_X^)+dhLGs>pT(0$nL;VJy% zRW{LnZ=D(Dc6W{4DuLr=3{ z!&E1o=MaTaxUs}ZNpVeGoDuvvo#;VS)EZxztDcDnxa9Vn`fm~(A1?XmR7SBAv=+X8 zl-o0zlIJ4eKqs znFT&>Hm^MT?X5-kkf6M&F;f1#c6e9=)F2mgQSHWB9?pD}b$i;54}ZLTk1GzgmguV6 zCw~}omKeqOzdra@TXuLTW_V?pTYb1IE9I+=SazJC#e0yt$Pxa2`ls}9%^I3|>YZ$l z3rHT)AIyW7-5+b${ysH@dURxJT0l{R7aLwZPS*QkTi&C$NT>j1b+o7WZh?X@UN(CnTY20y;n zLpBXAJ_SK-SEu{w)<6lV-skMFhu*>sz)3QQIcy1=#VCW%dzCej?2fnZn4cANkT=(I zsBUh`=08b?-v*IAS&!d(UV1^u{E6x$M-L|6>%In4g6i!#@DpBy$;!lyp?s54sV%9>7AWZOw|yN-(-x2Ff) z&rqSG!g3-uZ#l;G@_mI0i@SKDVXO17FQxx`I?*~6nvw$U_?&W-qk&d9jVC${m$crL z{d#40TwX4`a1Pztzwm7#+L#Wb-<`$=S%G`iB zb(k6ym&9)lH)T#srG@XoS;3)%iI$Qa!7G;!&)7YzmqgCQSK{1`NhW=zM<*{>ClNIE zJ_$Xrzxn9#A@N^Md~+z!?l&iTto=uWug#V+dh&pP4Qd)?I+gStg2Rutuw006N5ws;@m zip3mPUPe!Wm@u4qd{39u?9UXJhoAj&RS66CAep_Z8hw8NB|!YVsI~d;p}Xz(*rrjh zCkL()3%zUH6n~IAPerWFeg5dcvy?oHshnQ6x5}`B7li9`^PsRs>fZ#qmO&9q8_Yjv zPEB)F8pSgqJCfnBFZvyS3*5OT;*?#t(;mSy9`X^v44M`Gaj?MX!cPY#*quT}FR$;} zmipo$bD`PJkJD+d5QL?C z3_A4dZ6ud4v7HqA27G8u8xyUlWzXk4PVwd4_=LkJrWWG%Xs}DITG{4UU8$>y z*FFphDY_6cst#$}@hKC{mj>(ZAso0t@S$t8%URk-^P&2ll*qRVa-5inDvicR~uvm=-!$%|TTZ)Nb z{wK;7q451=qtKUsrRl(Q!8s3Z}X zm$wc@3=?!*+Du@wDQK*l{1TQ=-G{988-0#~cB_J(Bs9GD2e#K8I(rWq^a}^US>M^!?iS_MfbD8tSH~3&#m$$Z zCY7^V;WL43ve$7&o5Ot{-TN*cGOyU<(P!~dUvLL`^#>BB8wp?#-pjO~SQ%e^1c$g+ zjam`D)R&?k+or`20i5gXsa|p;4+GxeMpV*LbGL@&+)2;ImF%6Un445Pu$TAEN;aPh z_ua#v49S#)>%MKu>)|*1al3>T)>_eLY`B8=#m14I|H(^xNio?9Q)C?Ocl-?Yf(MsfK&=d9!Gi{yBTviA*wg z&@o?nr#8?Yzhg#|4?>;yxsuE!1@*8_7SN(B64+G3FcVoDtVGr(t{X*0$iEaY*}`wY zeqTF{vygR0x*2T+5eft?cbzpx_^8phXTVJjll4T|`7K`}QE;vf)aM0bJe2&hJ8)zO zMnI`JV|y*YQTH1uHQImn1eGVg*kuGFY2b6;4!<3;%jEY`>l7hOiEwVtSW3iO2V1n) zM7*(Fo0^YZj~J=w$_G1EzzVb{X8Gh=@@vs7@2Hc8&`IBoobiZA zIsCzb;S})MEbLoxuh|apgMPbOXgj0@v~h6F^(QCO;fU_STzOlc1GEQ#t7Gc4hV**3 zSkIlABcdK&stzzbYfi#^*C}N+#eH{88q1V`{y;M&xg_)Rt-cwlA*5S38DgA6xx<3o zwLg={k-1GA^^2>6Mm+zPE>3xD^uiH5~LAJTEqTv>tVwN6LVtK=kI=skv zmiBt$|1hoKbBk!N!W)9xmLZX;ko2C{8fk z9>721PvzFv1Q8gw-YiZ`Df}NAI3HKdtmrqi;VDpD;nTw2=cCD;&{G4?lIMvY~QvM?(8ZYq=KXE_TOI_lPA*JMPG;#d=?fLbC?p`OF zO_}i(9e>jr?oT-^rSkr1hlCA`ySIz-xcQs-LAG0*aitAIKJY@Dne)(#roY3^T3}no z2WW^+{V+e9>{T|zZk5S%U-c9NQ8*RI&y8|3>Z8QlO&`nV2RgdCykso2T+izo3i(`+ z4K1pCy9MhkIP>%MwyTcrf4;kOQH0gW$E={TFuDy{n)>cA+MGrp$JDqIKKQ;qK1+9V zdPPm|BlfC}63f0Re}n?|zlUIOn*ahG%%ylH-MZa(j{*m54%Zw;)BFt<3wU5Di<|jz zR~C6+akaI|;5GgG8A)TU-AECLl=P(-pP0%)-htR|insYy2w#FZ z=9?tJju%F*M-fUi&%&p=o%-$wp;P`NFV_?EEP5KZu82Ga`e*g7rC=)(yMI7DcYMA3 zPn~@_d#bjWuuviL<6{BwG_^q%vgz|P$FKsaNJ?aKc=d1194ZRdlxI5JIMuji-ZB8u zyJT7QvQGJL5Cc{()>tlzwARihleUG@+BakT zg3USg6V1DHfcqYFZ-=A+Y1m6;fy z(>Zv2-i0kqtft&hYxp}z3k*K7fkcz)4DJ|BGS1=qcs&hZG;ez}K|LnVncY~w@dT{e z_p57vmS%&=`v35K!P^BsDiGgAYbRYcTFRtJ>DnvGtLdqAN3 zhy9!MD(9W@4z^_CM#A2*)gO*5M9~!#Gu?sXpL+LC3HwZz;)tg^=?wKic3g@alHdC5 zhOp8z9fst0*?&5Kf${nxL)OXKa@=2*3Ju-a)qelCGRt|3UePF zR>pdeaZR5)$FR0(x_qu>`BmI0?WhKw>`~yI)L1Av{&$1wHsQTtjbQ~lj&1PX(xYBd zkwIpZ@}%_s&>U*@{F1(+tx5Mr%38T`#=ja>BV90hvCxUedI7<4#k#1z7x4IAa0Q#c z2kg5G4!UX1I>dHI#F%@BjP~RP{>`QmJe~?S#At7;+rGWCqWa10>=fJ4sTj_-BMNOV zO3^c`JrAuPH!VB|Ats`e8d!%<;mVX^1QfNWhAxl8$VGPv>El+SS+V=Xu<-E@JXNF7 z_q6;0bC+;{x!p|x;K9_5J7!LFi?LT4qSU4^4(@Ni)gK?*O~1_s4#g3nQzSBb#PZ&) z+G@6ne_NDs%gM?YCz@iBkb5BVQ|0#QlSl5HrF~I+Y#+!vC`m||`}{&Z^%U;|3?-aB zqp~;hiN&_EhOFz$MJ%WbNMk^P{vrPvy({d~SKFS)mJZ+5tQ5NFSIezsekhmApL2>a zD_RMQ-kRt{wacEi=5A~DwLjRcami7qA10Zfv0cY+V6uL5o_q%&!R?$L?smT~zehFG zfwmG%-^5ZJa{DqYpgmjdf34#k)oKc_DT#Kqh!%PH8U{mDo8=j{O8a1|@g>EN@l*19 zQsqty*SODlAH++QszfAoP;-{hzBz9nGHUj1hu7~JRhpFQV$?tpOIOGD`iSvKxWqA< zuAu1sq}*^nFkjnoov(Ie_en-jFMo5k9epvs6`EgeH=vn7g*Y&V4r>?v(r`&p`}q3=6%akuXell$S5wBlCDkf09!sp#Go zTbI-=XM8>Q1xT%A-`i-TRLEwxtYzd|1h=J;{5^j6{ak*>8{do`*WNq%gL89vOH7!+ z!aI_WWZ=AAeQ-Iqd!)C+jT6Nvo$l#=nc0#GdwM?Cs~Qz<#z+o4Q0oApllE5mKVhs9 zhwmfkpcLrBgMFJ=3w_fa+r5ErLl?~u*V*e%D+y6OotGePF&xA`EPAaT@z%m!14sEs z(sgYssszzr0?CgAL4pX9ls849AVEOj>t}Ojt$XJrM1=0H>Z%=ntwWRo2CwwT;D91M zz9m)eFrV^A=mei%2CLCqnb|c!jK9}MXPos$4`D)gU*isiuV#Xq6*uSZaZeT4IKd7@ z+C1+?D1>=+5&e_rd$*FmJ}xVbnsc?3e-0b%tGb%LZcVev@SO1SU+}8KDX0K?$G`SS zRqADPMbm-DjD8tDz-T#-x5wNsd(p`|43+}fQ&c?n0ptsfZ0lfr-r?P)l$jxduJjU& z!$dVx_kstD;83UOzSj{rrL|$37Glf!kv{JDsi>0D<4dT&I20XksEy;Oy1Sgd=+I5> z`c@U5K7HKdPcY6^+ta^r$_Oi=`*u_|h_1PG`7NdLy%UCZ)c z2g6EKLkv7d6Z$W|GiSdBf_LZ|m=}(mj=N)mYI3Q+F7WywNaL%0x6@s4YW#locwZjE z@A*$1E#9xMNRIonLMum4i))>V`JX4#fGz}VI7$CO)jTXjl@cWl(xS)M_4x=KKol<2 z?C|nB6*@Y79Fu@{{QL|9-Z~u9-56D+*-AXC z=lvQonXJcR`P&A)9Ba#N`z49Mjp0k+?pJ<`U{?edIxR9#j9GIWpsuNEi!u{DP3KMj z{PSnkZP#f&k}9j;H~T>8Ma@q-p8`?BsR79{VLdkt=$zZh}+x!FTB03oXOha@lih$H%8c0A3!>Y#o?Y~`IF3gZ%H zx>=bg6hd!s6>HwdC*7A`I}8`NB8y3rlq=8q+qzU)Hy&iLN9R=9fIA zzsxm#(;PIdmXmbnH%@9#N0uHr=T~J;m5;IYO6K0#b7lylJ&RZnzK00y`hwWou<%dO z8~?Fn=sb`<0pJxf!hM00Ueo^PS^J%P%Yl36wxYgkSt|4lCzk5kjDm9Ugcf{Fq5i$H zED}k}0S=_PQ~?rCe{Tr)6coRR`3SC44gHbpU&`xLPNF-;(%^b>EYmLav2d#D4MZm=dnYtHg}jIZq3n zBYZ!r8SPxTI5n~Ep|*^3sfS8sQe`eMwxviwkcXU(7FZ_gGU?thW*;>z5U3ESN=V$R zS@*qNrcHtpInnuR^m9N7?ey?jW73(lOW|+IiH7$6`F!Ilyv`$@!FEy9r~8Jh0t7o3 z`Wu{p&fZt7;xyhIe6>@U8o-H*e2?{}LH}J9@LNA?tYBrlKsHfH0iJRZQ5g)3Au0|z zQNC`I$({EUYbLRi`-lTXzKAxKrx6N-_e`}PcS5GeGfnLe5FQ7Fj8=Rd+s2rD57fE_ zjfdNlO;b57;9Z)bM7}a!QF3U~DC>T&pW9RHZteLkoP^)gkMOJZP*%n3I_-snSF`^c z9oR=XPy+3veLS+yXkRNGI7d2q;P>%`jL#5dX8LN1*??;dW5;nwx751qaWZjMO5;z2 zehCcq^!XX5?(_3!6i9sUF?@HZma z6Ebz;FF&Rh0s=tXwmV1eK*?_h>T7heJR3PJ$zo6tb;C!ESx!gB{p$kX0`)_@OV#fq z>P-J`LJ0Qd?>t+eOlCW*r|l$Zv4k%-l7{Ne!ROB3rv>WwA6dX?-ZOBRE>JmDm8`&s zPwN%DPD=fOQ3Tg(rGFXQ@B1;Og-Hg@2^h<9Xh3P{{XRWtZqszdjh_^Z2njl)l>iKiUloPTs7b3gzyG=h3o#yZ zF{J1I{s0GwX_IP~rjck)!nl-#nSCF&Y}EF_@3%bUoI{i}ggE10#(HjVA`=;=2*51t ztEt=KWrIX2jF4JzG&C#(kAfub{ooLv@6D`tNjy7S$>tLnG&G}e(%?w_lFjf_^n6=b zbEK;;wx@E-wSAi0RtO{VeH5!s?rz`gTYxrwBwp-Bi}C##KeStkNBf6=+xBlZX!AU_ zODE@_iGXL^J{rZ_>x>R??B1*WL4rMfb$-Y0(djuv{fTG2J9t8Yu>UNV@KPS+`wf++ zKhtQbFJl(sjLNb1e7y{;Whvg?=s4V2Fi#YE32+B)$@Y4SU@6$z_W}vAv{v)akKhLj zH^D=i%8=%{yXfpKzXkp4SDLZN7N_56|`ZBMGR=W_z?O>)RK2I?9ch zIy+jQrgN=>;BsHw6tDra@V~SfV{0*mIo%vqg5QD34%wHV!2MvU@y=*N=0>NrqdN24XX8!A zt^%@N?a)TaDA!kTQhVBPN$$2>+c4&O@v)45y< ze+5j%ADfPgmeyOeJTjH-c+v{2tK5Uhk>06lK!2>Ve^( zg>_SHrqnO$#VVmsTK7NBq~I?c;w%6=|W59yR+1NfxyoC(55PBQf56~V5sb84j^{$WVxP-<)*#@PIOOd5i?GLRZViD zL)qFjWQL#jr#anL>UI{j+r6emu+SVDFwSYEFZn?4KG^ut>SeW5JpO2Uk0Jg zeR-M{P%F9?>HK=lMt0J?CEPZ+I`1dRK=)@z`_`WZLRMTsOtfBG9_JjMf4pv;bBl9n z*DUPMH_r6YoqN~-6dd$7!_X@7wE115@h)U~L+*oNpk~Qottk^fQK#PNi7JMJTcpUqjx`e9Z9kT1Bj2rr$%oo*Tpl;_WXqal?Q%{YTZJ$n8;7 zUwY6N{RjbFnxFKycNYWgUoZyGAV5S#7kvkG2B33>gTw7xU&Iic<9v_pOz9c`XSn!Y zO-IXVnEokrQ*}_L&Gn;3;@@_lxlfX%FyPcXUIKR-)DlR8=PvKET##`Y)gML&&7?es zP>fl4l;xqy1+r5Io-j{czE{V7a^phWjF-Ih4`mQ0|F@oVStuMST7n9QhP1M!;kYN$ zeS4Gzoz#AtzLy33+xNig7g5;&moqE->rj6260h72NHe8rRb(?e}~somy$61QH~4BRqil^nl7qK zOY1&&iI7y{o4sAa-wT#7q(CxzxCO@p4rXsN(Wr82Hr{)BI*x`X*^lnJV%(Rky4|JQ zRQjOVAA&uLsWEgT~pcUrjN3ffi5IB}?8NPPWdf?6LYn2p6*Y zYdjV8AwE4UA6*^q`cOMJHt44tn)eyBQtwW0M%I5kG&8(-&zc~gQzWYaiAxLaaiYgJ zk9CjWf4irsI}dD`<|*zZ>Q85)4w3Wilx(9>&%?cZ=U zWUAD2@u&p_MW00x5+A0E7AE`|U0AhLhaxT5Y36^lxr-rQ$3n+P=a0c9Qu^myfA5L7 zuRV7n<2i{%)2Rps*XCr(YN*?Tt*^PF|Apv0W7P7~nGlN0vOms)_6Gbg!QQOrP($(0 zGrG-nhP=?NLNJ@nxg!(*a^0)O0CQzZ;=NFa20edpJ=>qkan_z$r@!om-G}To`SZ}WzK_jr=R~w;&JizwE^Q_eQP6XRrCI-S)+~0 z_uKOXWO!;LK;^)4pc$L(Ler3PscRI{NOX5c_%g9e*Sz`%Oy%nE^L)djvKd8dHm|Jq zv-h~aghr_a61M-ZQ&IE}?tBTSLp~l)$S`$(y?{*x{2LcBTQwPXAN7nOP0Wq%HVegSc6z5MLO$9YGBhtOpX z+Z^t>-}fv|&sxb-1I$bE-~l^g?{GXe@!MPr#21f))qLSZ9C17b50nkKt1g*=@z*;v z)#iN-X;$o@72(8PSF?`?FoMyiI_27IyB9I`U!i|;M^Uej>Jx1A*6I?$oi69%e$6)* z;x*i&zl=SgT+uxP%bg8Uh;O%1Rw5>xZ$@%~@8UDR8snKdQiYR7eQtI~4_>hDi!AkP zvVIbaGk)jcYW1)TFh!ut)Nf4b43X?vJ)d^5(wY+qGCyy1^Zs6^*|Dr2FGO8#VXR7? zap;cRk8Io<@m7}`=E?5|F}Qv;pVzr)kX8B*kG()`VY4sLE-!BT*P0Lu0DD0ZO? zRo7Pas+L=KfKKN`=FcW0iAz3%o4TlP2k)dL@o91ouLSN=@& zIR4qgCG!uQ^9FdW6F>P9>qTNVYE$N^|AC1uynUKfc9|m|m%#h8xP5}v@i&sXr5*`e z^W=!EQ{%^LR&X-ZY6MV+ud5ixXh;}Da)@a||2Q|delNNBOZyTwR9yKd+helL1x$w6 z5YSFGwY%#*8xVeL-`p2EKs_F>qF(Gjq4elIsc*qkdRe;!5D#JC2wVvnZkJ>M`~92W zgmkLMZQEYqH(CyRB6cl%t}v?avMB1E8|qOq4}Y-aBSNdRFW^vnsVr|J7~7;xKWMe3 zYXu6Nq3cK)P(E2CUB`$~!9zI@Cnt%Ydqz&)qRgOII8Rr?o>M&PTJ8lO1w0^4_9R(w zsqi5^2>xctZMS5REpI-Rul%%~g^XY;g&1OP>CM&g+JkX~;hLn0|5(l`$ z-7G*xAnP{FhlM%avL_;l0uj8j&{wEkKaXd(hHYq*NC#|zSMq!}X1YfWghq)4d%{A8 zSUv78EKN{F3MrGgc(7i>23FjF1O4RX@4FAHAe>?KK4ZkI{GV9EeGT3Lv7u8W_hT7a<#c2-#Ox4-5 zz`|Af)O_0Dy06{w*EhBO`6UtAa@j^11KMR7-?}-}j=ALLFrNc45 z<-v*J`dapi01&RvwO6Q&4~xAQy%6_rMa0JI?9Yvt_c$m1%d$vR*o5Mi=V2@%)q~&h zEU|dgZ&J)V@CjtfGpNds*>xYF1WH*46FNrtzKjpoK^a+S&I@7#hWgDdl0v((=Ke|B zG`@POlR^tntRNP!R&BM;g&~K~-DtJ^{OX*7B%AB#BkSMyHtAJ}tArb)Bh}YolP>ll zh|kgaim__~ZgF+oIHw4)D2{FLYuV>DYmLjFKUEG>`gUJcpiFPL5Q#`>Q7D4I+M-X2 zk!I%k9ScqaRx6x)u@&CVeso&*`36Ug;CsEdfSVfqC@7jL)b{||s?1L!_k~TO$zuDe zqi(s(2x&6poLT=~_o1*NaNrC6TX^^7ehA`yPe7ViFL}8(Wtg3;mcQRxU7Bi$zbPO3 zt=P1yf-qG>_LKp!G=d%83El|#njO;~?t(N}D*)l=Pu#;(+a^tIwz=^_^N`xd^aVLh z{;B4hTE8E6(u&2~5j28O(oCs;j=@CBD0TP1T)}Yp8f^Tmee;{p{wh%n?sVgrk1276 zLlycZRJl}`JIDD^AajH|l{h-3Pkd?yqM6w~f5k0R-(lh^FS$^TmGzl?#$!%Q9SuKL z6PC6GLht%;RLh1Dz>Njk@q_A&MYCP#J(Zg1&EFCB@0Yn3{S*8c zfrrW$Qf}>dJ+G``vH|JEfD#IJ$B({oUg+qt_i*A!aqzSKZMkjCO-M=t- zI8Y>^H`a$W&l_2^8*wy))GxHJcX?(G&BRr1eYl=)UN$(#GV|whYrN` zzq#YU6JS``M@ai6L!ZF^g&58XoYVnEapxNAT-jautbg8rE@FwbSF;QqZYA{<@-h*0LQ0mtL!-0!9xx1)O?5_kaKu? zsde(CNrxVo4L(Oj=O_!0oV*ri5MA^9cVa4>KuzlIkt84Dai^B+FVln2c27#kzbw1p zVR{xaH{0o-#_{qx4N&H}4KCEVy06Gio;U#uTHS}_cnKfc41hgO=sPhb0|SMNqXd7% zR6;GO$V-C(!bCb(cg|hlg??d!Bf?Wjkj-9E(rR{Z1gz-~Z_^jFMvY3IJq73HJ?o3lDZz+YZNs_lpkJj(e5 zUpAWgp|60ZCZ8bdzZqz);LHG|8^X{bSyr$AHN7L$Kkz`K<+aa?#O@B^Xa3^GnWn-5 z4$oZh&d~5(v6MZHF?gNR>jHp@VEY-!foxs&N(yY%MZYN(C{c(0C}4qAG53#*qX9vK zm%kL^H}+IMeiy1i6C{IL4<8;rllvexzGaAf$P=`g*HM*FY zls$e=WC6u|%PF0us+kz+J^h+q09oVhF0ZoRO8}}0Oi>D;++(TzGeo}mJvl9FG^AS% zWg1`EQ*GmxQggp*U2I+6j*|qp)6H1D@8M*^If8wF_Ib--A5=s*|yJ0!S`*8T09 z*gr_(<2T$tApR*7!U#a1?k|LM8T9v7kQbB)n{kbUmfCQcJxZ?+zU+_A=)nx}mL^E! zi~iZ3I9sy9nX%XDy5#q}>-0>-*d9(F&Br~2(--en_i$53*PAjF;w)V9*jZ=J(C#w% zzQ*x-cpICLzYTd4I(?t+@?Q^)J2AW-<@{F}yL^NVg@4%CC}jH*jbIIjDOV|><=!8S z7BM-NKxccc%bs>zjn2lHhsCPGqm#~)Oeu5wnqD7E)rErG*VB-jNFxf`kg35Rpm$9l zaM`NpMs&>|jZb5PKJj3)r@CMzr@rxbbKrMh5>=Ivvbe=??5P)5Op|;tmxZiL_z@^Q zH=R&bIUwxyHO3dbdS!worEDwK-x|MSB!ywmU)glz%xn~E}PEiQDAcR_{^B|dX zT% zOT+bc2Gbg&^Q(HZ zYf-XrukG~vu2151#oV=^eepUP0c>9{{^k2EfNO2c@Z%NWe$2|Tq%XB9f~aI)_2lPe zCi;VFjZrO`wpsgo`$$T;7O+TpV`u^};rZyreD3A~gRDeq;+(l$P_2%lA_Sn*O%~sI zMqtTcO|~lcI^C2Wn=om*s{Gj$-_nT=*j48qyp;jN92(<--QRb&CXwQ{+KM|(P}{wS z8P6B)cM;XzO3ubWmKStXakqr{=s{p0l}*r^@$=ivVwlp2^nTH&=b;w;>6|HVPloEX zGp`xj6Ohn)8H4~Wg4cWc8D)5CDdu4ncwO~L%<>_fQ`uhkvtg@y;N-UQIHAwEg55s5 zITkdkJ*yKY+S^y5M=}H+b&t{E*bWfLSnxaki&l{SRsZ-q_!$cITP)-eqzjk|XO=)i zEDs|(@8`9K8cDB^WZ4bwUeOFK{*QL4PUxtGM#iCKd2ZiW0YNbRtk<9PUM`snkLqe| zR_6_E;e#J5Zap#*t6q6@9y4Wz=ECvl3NHtqT+H+gVOEJgLG~w{^a!tS6rxJzXo2Dz zf0gf)+>#5W95FN0y)7u+DK-)7k3PGQg6HI+V@i(t!O}kCA~?*S6ep-s(mH2n|KTih zn%ct25s%+;OP&=NBjuZbW8VGw~T+lO0sPAej$db4Uw)^EsVmhj~X@e2(d5PH`GyT*M*()pxMrjD| z_3&X7)G(?e(Fk5l4HHb{?R~D17x8;51`Pny_cwh5STekWG!pzW>tte7UKK|^7uX&Z zhxQOisee1w@-z9|TQNT$aNm{-ss6d;K?oFPZl@h*Czu#h!JsB^RLmZ$`FagLbvP6X zPd=Jw^p%VbQ5gs3WRg6%uX?(yE<`-0qb};#yLQd*d)Vv}J9Yr z{2+hvd#P?-51mO=;^QWT?3X_;dN-$seJ@GU27gS5H^Da3Dm?n=vgr9$tE6N(w&9-v z4-`pJ2NIYWE&hAjy#jy_Nl29T$2=s26LkXke!8VkL}-+T>vYO4Kcx2>XKd?dfjULQ zG;Hep4FBku%IQS4&^+?U#D2coO1Fni%m?+8R8`ppr*bg3;JAO{N|I-udmN!>8Js6J z6>CPaTb1$;a6PLxeInf-Fv@iv)Py|T%U{mFdQ%i1Vr@44WcPirnV0HC|4uB&0e9s@ z4BUqo&S770JPEVdwyn#+0 zD>|v4!PFdtudEoKTMOrEd?DCSASlyN~p(;o%H)7w2!W77*rD~BlDTp zmQ7{GzeESfB*PZsLUw1*ZFAj50pLjK<@>ML#h{0!8|Gce$K2)LTDWgWVPHlI(af{a z>lmHVo9wi~M|j<#271gcpY(a0l2poHnc`eK*)1H8_V=lcm-YvZU9F`dy^B0Y3E@08 z_g*yK%b-6CXd!-9H{8o0J0+>CtKr1A%iT;~hF>KQ^UrMA&`;P!srzzyyDj@37EDxs z?m7Gt9*V1Yjh|ob*$Sag?{PdxG;mKm*^sa4ei4b^tuYDL_$gqw;*S5>P^uI~n@F0^0 z`br1O&OP(^e$h=*p0ciiFA1E+x7VmwyWYxCp8(;opThY-GCx(9Q+OvUqy_p$KPy?yN>ezwF3Xgfu@W3PDCedfoKSvf&(9n!4qwKPz)s5G z09ok!71++Mv*k;;un>D{T}_y zW241koewl0r3{{?c|}7?Z8$LwmW#)-4mTZ}`;i$OEN|5` z{hm99iN*N5kEPQ<27^PMikwxJ1_rzK$)~&0Ja-4{)mI=6HJ11+F9ogl{GRTsrNtQC zXQ6MSLwm~*Dnz}n7;L$3Wkl*!x=;8r-zL~$ogVL_u7(cO04VgiIQ9;y*q^`BKP_4N z>-OZK64d}})Ts7g^Ye$XhreXtkz|i*w#6y+P=tNHZ`tp8E)!sTL&%Gfi)GMIO7YiD z*`jt^#?+%#3JJ?ocb@x-!OASzd>8J?-3oNt;=94f*ZBqCa@J5bdz?=VH{io$cX;6e z?y-^m&)7rtDQx0yYRo-lJ8v%r1qw!nnGbZn3HGgluZ=&XJyhI}H*{($rm(epM;8zJ zoDZUvro5NubvX;m(ef%$^QoT)Po(MB);t2~0j6haSvphX;o(137H^4NjQY8)Pe`KY zr_PiJd8YY{Wv)>q2|;%IYjr}nBWLGie|O*fnC+Ds@7#r>AsG<4Fwnl_wZQfn=uEVp zZ7-L+oh3UBGUsdD{%CJ%-JfI<-WycgAKa)yhvzzdZuTVF_V??_En9zzt=r_o&n_-2 zl^)Ujcb#LIvM{`ezLg#DKSeSdMbE@Uf#l`E2HH$|yHs<2<|_L64T%b$ONQ?zJ<`LS zFM2|Tg9kBOZmUzihxGQLo$u@ZykB0xJCUFOjqs!QAq_!(w?CCr5*jeV;d}Y|Maw(4 zfp|de^{S`)JqnaCJi^2e->$FgKD+Us{>w}I+4b^yW91`$LBM&TySYyG2`Kd{^%B(_ z;h!72K)AzL%|@A#V~ExWZt?(mZQQV!EdmANnBrOf1>TvC2!4l#|d1AK1*;YxYWM~WQ|r-MUIdhj5>D~+yj%Dcj|mGd)=Gq^Ew73oNa?~See-|~PPC#}q3-iNmH-exq|lD)(pHm(v)!DE zw>iq|v7Y^0_`ss4nz0J0cG5WbLR5hTbxrI0IOuyA(-hzk*-#iqXK=V7VL$}Q?t;nt z?)mCNU+&qx;g8U{9#;w(=gzAhgC&4m&Yi3$QU5GKezC@}Q^i<0 z*{cn~hz+%ry)@XP2!1nNUR;; zEJ>^^8q(C+IBw3sQ-Mf|)WiL?_mHZuE?HktJe|NQQtIDZGqy(thm_#}#DoUZQaMp$ z=H;BuD!e?ung??m^7lSEBw~Y_h*(Qwokc%a&`$+lGRo7CVg?hjI)&6;mT@+IY7KhS zezbp@53QE^!lw=gmo#kib3A^RFW@px#=+?ktAq5I@@ah$^Y;B%@f%P9+is_$2O%!u z*J@_QroIVVgw@c9U;Vlo5JP33-75)=8(+&s58Ji!F_Q4+{2c`LRVGG1N9ETK{1iQL zyuoz83E0E&ne%oRfo1NGKRpe~=SJ6NhW4|V)CqF9aTTC?*Oj-Zr|7y9PWN@7DdO79 zx(I(lB=}OYg2!iXK8iGy4YGF#HN|%S&~LLNm1|AxBTQ^pcX2x9qtx89@6V{@`j|0t zG*q+`o#TzFgL@2a5?`fN-!O^(WwqhY4D;;n3$5d$B)z<;n%u#bjOe2Eapw=e;nS7NI~SW z|C@*#Dbmkd%$wD>-Ot?){=1^%cX!jF3#UC6nAz5*p^smv&{p>eEn~D80n&nTXu80c z;sQgHG1Y#GVja5u4D&tLKi~WCv$OY}vA~9;P2kCqA36mk|d!HcqY&$0K-Y>C(qvOJ}YtXyBC|s=&jUJ{V}VlDy1h z=n@$R?3DH!qd#78+5`!$g2Hrz@Kl!3Xg9$Gci*1q~9>ScO{eFTFi_BS1eFv+gI{hi0 zjMGCn2U7PwFG=y&xu16Et;+sA;0x8@EYUa)19P)ZE})VwZEoPt*ZRwT{d_eR=YBxi z`WO`LD?=B;Zj#k3Uap4%+0+u}cknX{Vbx}nKdxCAb~yRZp_=Z+hbc3j71Eb+=zc{| zAdOa9)+=bPPsZVq9+y46J>J=s8pMp>bM_@UR5C#5VLjCP`)Gs-Ome#wf8hdH35LL{ zC#NofV#s%Z7EbpQiaZ$1RhRhT%N9>0g+#}6Ncyg^L{_tp?w>Fy1IXI+(AEo*J~QJ z$9~J#>U?Nx3SmVAQtNR7|HH43UtkblOT#0Fhju4A3cR^5pdDv>1N_TTCwQ3rKxKPk ztsj4R-`D->-?sd&7}6^jTqPsW&OY3YTGYA&UMiq*3NUjt6;A^xGqUPC7p(j@`+ci$ z5#wlynyZ>1dxLEykB=z5B=A9IRH-od0Z2= zeyOCb@0e}Su+cgtItL}=A5%QI!SN@JNBJ1EiU?N>8i(}p={YLFSo>&2O7Rdt0bckQ$oRPyx1@LT{6EU7x%lkyS}OQEqGm$efmt7zpRdUT={Q7rwFUKlTCiU zC~Mp|Z??)~Z%FmPUEZJ$p;>Z~Dy|~`)=yI9tqjnD^j$rBG2Jf}SZ8I!C#eL$3x<3C;p0zMn$bo$8bLlkbBuNw0A zq6v6{sw2f3#4&AbCAu7#%04(|5cq0!`mdaKXa*D^xpeY5zV|+qYt`?8`xn#TpL)8r)UpP@2+q3e<$M+okgyTIl_%~nfd1KR^ z`DiZ}(9UXqIf8!NjcqxBNz>WaBpm!K6$vzQaYBsJL z9Ig+<78JsOl<>2}qYhOf2lDI(3XXlP4nIZuJ!5S3)&MZhI@HTIgg)!>o6OT}ts`og zrs6(widvOqyJEMs1Q&{(@rk{tJf_XfeW~XspfFy>4B}BloqriVE&ZkSN8u%3$WU(P zR7uy%G0*cRXzG0pGy&UZaM3!ejD+P#;;B@OG{av!nG(qJVZNpPAnNW;*_Ifj{E*d& z_cXlJ=1opBv1rs*ez}`0!qN1ki2O$qzXY@%e*VK_kJA%-Xoz~x13%l6@L8Q2<#~@L zFpN;Zz~4X}-lP6gi`~b~AvnKoTjCNCQdCYVbB1;ynH_S+ouRV}OH{yJoke^<^>_Ic zP3pE$yM`V=YIkX5=UZg~(zC(oXQK|;)$R}SmT@8r%TJeZV<^4gt+eTdn$h4=18GsQ zkw)-xf3(Wnwot{(3iBJ}@JM-luFXgOjC?FNJnKu{y|J|nmkLUX%rk+q+N^(k^41M{ zU>5yd=6Cey$j_rOqhwnBDH_@X-2=$M{hlk#I_&x7?Ta8%j~_hEkF0(^bJyfmOM3xT?HFex!x(qB?6-$qeTESU4CH*;dZZXP`XF=! zLt($NRtucxvBe4f$3^E+h!Fi6x=p`&Kr@c^CdXM~!xH8xwOE^4$fskI= z#kf?I6!9-8`*&yrz1)cgR!yQsO)_0~H1?v9$E>_RlkYFUg!}sR$sT(IkDh9Cnu6>A ztvVK%s_ghY&m+rV70I8$H;w4!5ScQ;uU7U|PKP6iQrBzCT9K3=8Ib}t|v*t6QHD?zLRrp#68Y1*FxZ!0cC{vH(mVEWadj;*?kTU@OWfD3j z`O9ihy~q~j7VJl!50suakK5g5A$)=z%kA2PN9>_I0JMlo7=6rMeqgyU*7 zN?>pHl1Se@5Novw+h(4>3%0ormf;4QI(A1`BCwL^6HuydNPQgs`iO4#(gzT1_J68 z2Fr(sa^#4&*r!l|3XEj9H1X@|a=XtYr_7gCWF5P0_58A24vQ+0cj%)nI*W558BoAl zIF+-smxLtdnt;x3D+44P_aCvN$y8W&%aXRK!!yUL082?vlVG1J8PinV%ui@PKU1Ai zH{OWABE64E5PGiQd|lS5e)Sd?c|LGQx?rd-_tWs5Kd#zF!HxU_?8m5p$X7>kiFP*f zl!-}D?y}PM>5vc>xh_=+uqQ^yUkzP2JlyZ|M}JP2{&GOx+5iARW+V*VySnNaAJk0?6JKzGG8<7MgHBzl867k(QS~Wg`}j2}iHK zD;jG6+I4(jbq*Qkra6g6umBRQSp|5_a$XFy`I`E}!1s(#P2rOT4Tg-7^)&fO&c=4Zk@&VyJ*rucE6VPCoL`YqbDxW{bi=H_u-cK;)wfiW)Hbx9DcE6@Awa+h6`9=!2-}vCg$2Q(ju`SvPo`f5S* zP}{fUik3ArTn7r6PiJm=)F86tWibWEpDcZS zVYJt7TeZOq$VFT4f-QyG^`k1@9$YQj3>c%@ub4WmSh>fOzg!MUb%8~nU)SW5CF<^a zYrEnMKZam}l}^H^Y|7sE@f8B2tNj?%w(wpry8s7cTUNN`@h(#rmkv*4603d50$m;6 zEY?FitcPeA)ZzYvx#@e=+jDtc(s!9(dH(At78}5rdVK-*(t8`6ScQFMUG__+A}BHL zmri^K&cZheNiY%T`HlADUPPwt_x1=4=j8+0e$mQT*j)k^@J?U*%fC}){c<+@4c4Fa z?r=JVBBx)u2jX$ER(Z_j}y^aengJ z=C3~RUJZU_mhF+(iI+WPN6=F;K{Pz!Mo9xC^_~FKya=gyi_N8FZ*naI_2p^4Mun{8 zQeT;WanRXkr}{Wf{kzSf80mO&`17u`b7|ubY|>RqA8zWbML@)>jaX6{`NXdM1D%Hf z3c|no8_1ezpI7}_ug+D1+szf;77#7!aj&G~F8k8%RaMvvrpq%)QVq#*D*ysGo>|T& z(;_?N$!=)?y)pCB9))I8ID}mI66`8cQghLIl7&5Git^tvicaIu?PR90hdJ8XM(% z5~X$yZXX$}&6U|cU-yUJz%g%h*nNSbtBY{?bgV5*d=y+Q6UEg)6$9b~Rx&l&P_3lTfK8Gr=Iu3=`{f#2(%_>$%k|%!# zJL>GvNwY6hzlta*Cn;)POmD%YN5f}de}d=M@-&I0oW8`_?=eHV@$iP$^YyTQw2o~% zx;ndHqO9QU?pN>lgVfx*_g#xd`F*d(t302k8+IX5T<)!qB7!`?>6~5l*E9Jm1bt-R zI|N$sj&Xyf`xxyN2=19B))BKq4GgZ;ADpH&{$4*)Je`9j{ zI}2QbTphiC(z_c0Cs02k+qG{zgZal_?N@0suuD6X{9hAP0-VpAwCC%oj#!wmeZTD+ zEcxWA+rH;<7!6t+*ajbl7xhyvqj_k1;1BvCPRI}Zqrc&!5GVSy=e&Qgk=@x%DyV`z z^(ifJF>I#N-y3M|kM*u90)~gRPf5XQPD-gS+W8`5!bv7&fE9Z(bN;>dR6bd$ zdlCP*f|p;{`tKcmKIK+ENn9arW;ni^l;)dj96{Pvp-yC$%Oi&lwDq zAtPNvjkJpPnL;@Dha}sQZ<@f5m`|XerlLDuI2dpoL=?uZAH5H_YdR!3gd++m+*Pzx zgouLYzOu`blTOSRNeOX;{0*+Q z_I<)e{PZ$<>~!kN+C1}cDN-`vr1N2%Kx#WUPod<-3|^X`UJ<7%-o6O%aMyxA(&LN` zppjit(;I?&aQSw7aQ(E|9K!o4i-XA2sLyp~lo*ZO6UExrIyJ#pE`mK{l=pjNy&rHL znJ*RshxAM6PcyS5vidiP%G>(+5ze5~*C=~+pA=il=0cqOxbj>QhO%6r-7et`^F>k| zY!i)i82o+hI0M@nI``>;7Q-MY&zGeei=RQESwW}zR&`-GQwG~RHxzwg2wB$|A9&O4 z(%2ncmeO#zzxHPqXV+)z`VI%5ki~hmG6QUX_BU;{jhPA9@my(-2i^@INQO3d+SwkntX_8tCRKk8dv7%OTg~z2ZXF4<&mXvTNWc`k5$8Ej(W) zv_;^F9Ip&aBq;JE>R2m4s)007PooJd#0v!D^@+RC-zkMmt4lGqbMskxUUhGGaFAeJ z3|(XZ>*DhL5WnZ%Eg1a8mFAD$>cpZRW%>?6U2_>8#Ql)J~*3Z zUg{{rzC=AKDuaRXr@w!>KjQJH)U$nvxbVgizeS5jMiykmn^V@HVsD9ne0i&3;-zX> zCku<^M1cUCb#=&Gb=(rkeZX-0ip%PU-z!wpFLS+4`#9{}2WB2&0w6i?@V0ByUbiUG;ZLCf38ufV#0L}nk-@7o%CjJi7;#7ye@6d*z4o zOIoZTA0I8I?fq$jfdbJV1lp&Mgtw=ChJ6I2eg+XEn_3V~zz1B1YWek-eMA4Annpcy zn)x|Sz~Dnhl>oa3WTx9MgIX?>n0^m;X_fLcK90Yeb4}yy1dX$N!9 zrl0=Z0|}*!_a97*>gT?l1`2Bu9|%1W@_cl>03EZ`9Zv_B{zerfO!(bT0z#(;l$p04 zXzek`$8?&~hF-=YGA~=dyMm$wr;lD?#lPYuTHjN%@g_ z9^!GY;n7s(8O;=nOXB|gspD`W0e(eM0g`*RmR)|mzT!)*nD%<#&-I$I?awv$E4iFn ziPzpA8od9+>V(UdlmtdSJ-_H!s*iot1`bnjOcFqg)d2 zbARYNG(|k8L5W(rT!VK+>Q49t2k$$Y4FwXy-L~Ifdm7*oHtM&0QBH96*>l`03m*p` zPSKzJU4w@SCA5XD$1cC!YW3Rx^x}Cu5EK`>S>*sj?$-S~jT*EGRy+a4OZ;WU#Ooi@ zk1fDt9JT~*M)>@M0XeWQ>G2<+bKU-Be{R!<_+3h3;O!!CeGKhlH}})8r{^9LU0GJ2#Vym_7-lFFb{+h&uKoSA;75G5&if2fyEjQT z0ofwxBsF{CcRUhz)pQ9wTHU09H01**wJv}eP|P~RUgRPN=QnqIWz(GamkGXNKY$3k zgcLsy5Rj=VCEWvifVk>#dMmitko(@?+;)lNPfK}jv-kCn4YBW))=Z9J=hGkq3JpYz z@TWK+wa@G~@0(zf+*db;OAS5P)5j4+F(S{tK02&g@M@MelFzx5-|w!gB77=){6pB- zHSsTg$`MXljzu^VCtac6nZ3KtMTs5*>2dhs>`J#-Bc|}Wa@YA%Q%ZQ-z=XI)qH8w* z4{(RKUr+DTuRL~{QA0~2_OQuh^Pp9QRrL;DBYXSYcML&@L|^&|4LC*y?i7(g#J!N9 z;E#LO7CLZNf)|e_)bDphH0^EmHzdPr#OztTs6xYFz)4OZOgv4^X&~s=7s@XIxURLp zjO$Iix9%&tACy~C@S_o}9g}PKPj{N|GMjNfJUO3KV?cQMR-ET+I|%a`GQZ_qXuFg~ z0l&ZfZOIvQktSZgp8JoX4Ts5n4TZ7T70iAbQncuXgaIxpFyd$45qk9D$P_EMIjsD( zPKu0pM1a!#He>V-FVP+r7_{sU!eE~GfqAYbk?Kftb_95lar#*c<@~f@>M8hDB-ma(19Mg5jXi}~B(D1)a0;)y~?aA)UUa?C|pmPt`>&T4I*? zeerkK-kYD_I3jO=M*`4*9xGu)d#F0*ZUiylUp99-^l4hd_@3DtVA2ro0ga3_{BYk^Xm=)=Zi!?52!Z;(&KAtRl@|q_97t^t@3!R_uHE8>KZc+lfwHvF@7{J- z`-TZzbS(Z9JcE^a_8D=SHko>LHYI6eFV!};?;k9ab0J{JCLMYpF2lI>gHh-&&6&sh zef=YQe45bJddJE86**>dR&~4O_Y2Bbor1#{jhJU83nFrl?UbWEbK$)D@Ps~|Ugy!B zQ{e0;l{bgY?;ggh3@=dOb!p}gYe33A)Vs>H5#+13+)hs1A~1@a))}9@!GNETF2`LL zRdgsdxNQ=nb{R|GjgozcCvw03r~P4jZTQrsw?`<~Q)>GOxMZjM6Sl^R z60qZa81ZS?trwwCP4dTnnmE}qXp~9I0ajwZ8>#D!hxbnjd)U!xw>$C~L=`;W?gw|M z?!@}z^y4!G9Q-!{7+0!rVgoDyExIZ_N46MfvKw*E$gF>GLC^dYdB1R z4Lw>5V3jB3`18;o&CfwWU%YZy5wIzAo9Ud;fl{!2Tt;HC9}NEz0ik4B82hhG0WF{- z=f7#G^s*rUxkd-~hsTX!D4NmbHZ}eP6UgoZSUiVLV=b8Ou$?aRR)n_$VzRzP=$4-wo z)j~LCmWJ65U>mDe)_2k9U;KFNiqNvHmGf@>WpH5$HKzMHXXnA1bh8|?c&cSAC%JrE z^|isWlTrR)CZsHu_I}}ij|7UXl7|+eaPhdKBC&(qe<%A;41{f2bR~0=>)tb4?RDJ z+Os&iP^C2Yo!wyV;J_j|u{4TLj!-JfQ%o`;hLg9mZf*|R_=%;QDbTCU_9QjNn z{)QRSb-zXtIz;(+&pQd)XYl%q*P3<@mzQf?8L;f$(*gsFPs8t5z3*OUl3^(BV>EGd z`Fw_7cTScNimanf)p7S~WabH;`P_(fQueENPsyz+Zq`|JJatn}ZQ6bN^IJrPU0r7=|{&QD|S$@#%FH6mW>0vHtHmTk-08b7R2E!t{1ZuM55@vqg4;fi zo!q&N<6_N*V_Wo#xHa<*su*4pt@Th&{BuVjNh^mK9RA)iQ{%?=CPL!#@;vZYq8z6Q z(sBf9^7 zF-ZBHP(I_HNT+C%CO}@m|2P7%IXCu9JV&-m_65)-g2Bs0{hVDDc5l!3AIK17%1Ld& zx&JuLnK^D9Gr}@)NEV<}Dxf=yV?1WjenhIa@0XkO7L-bV!9Gc7ns5QgDqr+tz?zm9 z66$ZW5vq0z5mBsIOlTfzhMG$J8WE)q2djcN-1~bLN!5!W7R8yI`jS}x)5Dsh7K#dw z-Pa#&961%5a^ly&u*yRPNNE26IFQ8M$LdCm&HW>(L9pH+{hbky;cqb6_v}e#M&Z1`X;5o}>L^rTL#CPRw(1OLWOmfA!AIk#`(PRiVc z^pkx*=a0;MWLY|ol-x6I?V{Xkp_5{KBjO^0;^;N(pG@EdqH(EA80XKed$HeB&eE)~ z?NbFj(kW(_w#Jb%g09k-pVL!Dqfyiq7C&bNC8w98d=z&W=K0$Im%UF_;{h}4^@cx;z^5Me8Z`63)3Zj{X7<=_irmLAPSLnqPH)TWMS#xJ3ek^#j)GW@_Vm+C>2Uc5JoM9QpzMiJ~L!jUXa`8tLT5in_DkqWe&O7(k0#EkX0Ft9qTeJllo3gKTTq_?{ClSmzIY4=*gP4q z?p|Sxl&tJGaj&K$wd;D4z7jF&XvDR!&5j_Isr4-}Y(+f_!IsCMlN&qY=C$ zB)3}eubY_ebU?8K0(h^Lt;)df=Wo4T**DtFmfI-upi&U8tM$3$a~?j~$L_oVl5KG_ z`wBKHe9;ukp^Ge2O-nR~U9l#;T?o;-aBB8}k^7+*&l!VpGAn^H0!;W(_k@ zUd|pHs?YTnLx(H&`P(6({r0Ouw7Y3$AY(^-=s%W)p<+gc*Drw)0TI#uOj4BAq!MA$ z_BcLqu@zm*Xo1B}ZGL}D*q~peJr&pDxC^O>)sv@SbT=F?N}Db&lYh~q3p#ExMm`@P z*_x*7@kzx%msK!8xD3R@S7F~4L#OiR<~YKe23y(k_+v_6{D2?(Pi1ArHHNK4WFL~| z9HfqUG*Y5Q-eC#HgYDv3@L)=0*>`j(I^5W5cc_tBp`0eT#vFRezS|%BjTCk_%OR?ulh;`PQ4@gR*<&MMQ)mkW>SnoE>$u9_-|eD0 zBx9Gvp{x}Hu76P2JK!_?4bK7l^j;CYDEaRqji+coL)n+|!oD4?`CuSKtAS0#LtsNs zds5w@{79L&fwVdZzxr~E2>muTD(%)@?W+6v~jW!X4l}LMjzCkdU?}y*q`H4{)Xv2b;?OpCV?^m{$ z6Wm-~xpJMq_5C7N%xK(`QuzbncBfH98|D=@AXK@)7l^Gs>z3qy@6m-n7DaxSi3nzf z#{w!pmdZagZX_P7V0 zeJLCi`vrU6>mD~DadO}XxCG(00$F(D<*oH6%c15^!;3aE+Z77(2-hSxyf8?0A=t{x%oZSaws0*S$wPYmwW&C z6B9(`=~E2H*htc({FJ^G2TA!i?k9|%wl1N|bD`z)g+WJIvgk}|`tq-P2)7P;eGyHk zKp@^p;%FZC*v~!ocU3Z|E$A$v2PC*o+{+NOYxhNR?OO19l1sPkS%|>l`q8&E)b8$%e@ZJrl3#XA4LxDEIvXNcV=%^-p{zk@oA)o_=D%mp`XwP z21ONrY_Dm3^l?gkB&hNk65~*MIP@4A-P&wZ$IaHnhD`7t4vD+xcesV$=vHX=LvWr2 zGZe`^MZKJQ`U6K5tcC6>a0A`$-6)$ix@rFNYO)2fuLXY? zSLjGryvE#{O-;7Q&SaJh7S})GT0&8Ll)O!7LKVF=Z^?`gnw!vy3FDxDji}(OL4fXe z=0N~9J>G{qXN{yhP9JA%2*EeYTaO{;frH4OolLTmgbw#ixp(<-6mu=|wbgH|rB z#fX(N8xkK93o&T=l4b6Y4@F3q9|^J=2y>DN_W-hh4qfvWcobt?%*`O!xLaJ13;z&v zSzPkP6E2Aqe@|Y=9CVHSb6N{~S&(Cj;EwEZ62dc}Zx-=(sI*3iAVUwuQiCJ=yIr>$W6cTZNH*Vl2vXO2Rwa||C%c}{KsIT zuzJj_9Uq>14z{O&6L(Ox!=$t;T!I>keRhw%*@2Q}FKd!KZwhV4ngA&E^SnS;Z!w0k zVpz0nq`EKpY9czy`;kUHJU?o1=ffP63K)w?*8qx`U&>w|zgcK05URcM@aBlE`Fulx z=~B+(%!jBxmv8(G{RjH3j^AW!U2Fb+J>bBQgAN32SLwqc`HZ=ps;h~Lc z<}w=Hl*IHwJ07XikxK6ew>=FPyrB(dc zKX4|;>x>(sxX!8%5f#tqioG;wV*}m3tban@W-KmuVa`bCKPpv+z1(fc0*G4YL1{_# zVW;j(=Yc_&w`}n$8*wIfPyAeJn*3fM-EyJN-Cbuc$6<~pr~@XZEZi%6x_!;X#T~ll z=TWWl=brjc`IouJEGFtQ{~Aa|o`j(qgL+v{2cVJm*>>MP^!KT@9<84j%#?s=)>3!Yhb-#Lp%t@ z>COy%)wERe?ueJX69rL-s(Bx|G z`-|~{jwm95;tH>TqBqKAn|pY^TZ?xIZUcWV_x0kSb(LpT8yFUq#wihLghtU zvPAcP>i$*>NXO6VxJGnm)t9e0`@CTg>9 z%+nyy-#~$k;HKU+Ta3ntN;Bf2Hz!67g%~d<>JseVPP>d!NV}R70!LwIEhKZH zB^sSK@2d(gTYyE|l&!|Gr1@D><=2o{?`D~XK%BwH=kzdd>K|=`aD8;2&%qnjUn2j4 z$=tjOIsqk=!#D6w;3N4Zpm+k|X0VK2P1pFjOu~ZUNE)yxF8q6MJxaS`VE4%%lY9kO z`{mG|7aZ*5COrNuvx3>RBhVitJE$rD)M~~oW&P)=&tSc^6$(gAzS+ozr*?Nw2=|YN z+I8PhjF8ReWzP%gO_lYJ#kHAIzq@C$*c<^@DTQc!>Tm;yPKjqL;^VZ`miLw5iE)WkZ@bE{ zJV{R4RqTK$zOf~o0Fe8HU>*owyXcxuU#Juesu!f2(0sxRDY4-9IR2a8m+KwG9z6t; zzMc=|mq0LNhar*i%z`L#eCFdy>hDhggSm8+}^+{UgGk%*j_}YQm&(DgLGlw{= zS)3EZ)HnbgW`=sy)%ke3fpOX__4G(1{Qs8M`Gx-um(Nw)x8H<8 ze|v6U7Dy-PN`@d-J5`is0r7fr%>Y4>BPnb2^nJjEwV4*{J#=gP*Nz0}sCC|pJbn*56LA)1FX@GBj&wKD*Xn^^|+QF^ta){14 z#@;z_gwtd1{M552>7_ShKqcBM5^r&N2^kJw^Z>x->zUbL^~agUsjff~z4xzN0xtFq zk_M2WHB|PN8Ql%U%S#no8IEzHFQ9$M_xP+O@D#XL@;yndd1r}!kb9KY*;PG18aMO=|zLv ziR0&9Telpgn1c(|C&j7hhN5C|Y`V*Mi);-0cUk((BN!|Gf+W{nh$p)^^#q58K$I{V z#L+MDOfv*iW+yB9F6o8qGqBj(2TX%&E4;=M9;0g1T@;UN-`p;O48M}`=H3Y5xL(jI zK05gki%H}}Yp_Lm;G}9u7wE_7ajp)yqcI+~IG1{x4X=RPAjizC)*4sz$0bPr@+kEu zdoGvHbyQAwBNc*gSzhNe+--%0seA&h2fBEwu*H(P>~1C+|H~{zKQub!a&vjC#ccQT z-FrV1f)jOU32=_Ash}oQLx~LJ7evJy`m_<&QnqukCfUIoe`0;s)9~_hzi|u>iV4Qyt`~y=xt1Z0$?b;G%VKmSNgMM3SJ>NI_ z@cHUA0hri}4o|QLg{pR0`la#yOG(Ip8GJlRKc&OOi9gy=Em3)_WVDSmvV_%|eV{q< z2=`iftN}zXS7mw91yC_Wmtz`}EZ0KqH ztQ*u7^pWO~HUYQc-{i}VyeOz5pYU%IQUZ-2XQ*#p7!hxw^H`aqL#kN? z68I8q`oF9cPvY;>1A`#kqBoCmZS`+Ni>Y(6ZAj|Hz*#nvu(LI-VfaGUJXqHt8)qur zpDuS_Q&si6tb6%+{!5C8_5mlg6RnAG8+?tav?Nz3m7_iI)g~A)YkP$x1Xf3^9^@^o zax+U>FX;B-RC&UMng-XV<^Xe;x|zRlhd0U!fIHKCkS zxnl`4%^joj*CDX*;br!mwd)O>6n}`kru5_>H}=M(e;m>5*#dlTI4v)0J$8MqvrZ#T z@E0nsUzc}s1P*ZrXo~L&Il$tc_5|J1ctJe>bvim&`R0>-JvJv#huF_@#rx#Dld}t> z)L{373{nZ9yx1(VH~MH?zqfmIhDv7lo2#f?l!LTsdK}+vD8neiJIg@1h>uB|j_3Y+ zxIpPT2(mU)Ter1S+9 z;OhDi!iVen@Y$?b-lqna^21XM;=r&MRP=G*D`grt<=f|bE^s4vFUc_y3V8ks#AV1- zGPsB_4?LT;9rr3i{u5(`0C8jVwR>|!C3R1s^lj28W+5oc8@5cr#yFi~TmSBphu36$ zHmG1hmm;{%!RczZU7cXc>OstKAV7~g-wNnh({Qby45johC+vQ`Awb^k0hOL1o?1mk zpcQp%{hdsKE}!A?Al@7|=^k%$dY4tP{`i17YXViA&KU-wv%3|Tn&0DPXZpy}Tdau# z<%td%8!nTX;tCMD82xvn($%;aeTZ`fx5dv$C%vK8wY)M#S(TQUuT1 z51esmv(=?K(R}218v7~>LWQu9{k!Y&{=V>o;ACu_bpBpEaU$<*?@5v|uI}NbVhk9x z7q8y5)riQs1mmsSvp1i>FZw+C#QxU5J7reH1`NK?4cLwiCZXQPeu-b_VeMbmiH<{9 z`Cy>@rTbkvStGx2?|OV~_Nj8eyJ}1GFA&2Upm09ilZoV#P1#_ ziTe5e9R=8SeK3yHyX1BYj&Va_ASnvfxgX1m1JkFfX;CLpUrF;}S2}t3D>Rf83a^fI zl7s?(b0Z$|LfzCi*mK6dJ#6#=no>fYwil?A!c(l%Z(8v&tf~R><2>%YPKYoSR%w{R z27#$no#or{w*)@An$x{=kLIg7!DRbL!PnuUCgh92*~D3d`sLX*PfSeA9ZrroFM=AG zZU0st?+xD?x09WoMe(M`#Lg(?^8-^b?UKE@lF8Hzvu8WjKvup>LWs@;^LT15Nn@G8 z72Co?R%P{ZiyDx6}RpJUy~rlEl`EjUSCoi>#Ayt1(UV02PxA z@+>l+yMqPt1n9a`>`_DhyhkZSbW z;J^ie-@Qy9b?v_1R@{QGr-GzMJdMxj&ZeKDfm@!%*A4$Y`>6sikY67{Ztw@imS1HO zF?_ss95ROAt?^@}1G(;5QXHGAiNmaq8*D2Sb#oozPXD3E@YiqqlT}Ql9;b*MMv8nL z{T|lSFJ)4n6b;)^JN#}hK68K^O8Lr=!CyxjETc+?d-;<|3s{+>i8CkdaKu7J5C5;r zfSd*&<>e!3xsF5lGi2Q_3?cJ*?Mzh!J$6H?bbg`Asx8>!J{0NpV9XAK~C2>1f(LP7Bp{;avIas zy6smquS*vpQb{oo^v@Ia&Px+=)Gc(Noa}b&bT_Zz8kq`lxE1o7Pipg@ak6WsLs%yR1QqSwhF5hwheqWWZoENDlmo%Z2B3OuXP=do_UdO7(%dTC^{ zJE-qJRG{HIP@em~SuE;-K^ab|w`-p5PbIY1es-D`AlC*)#|*)vl>rgBJ-E^^oR1G< ztnPZ+$Hc)%hjP9{hR-IVux{E_fF>1q)Rr{C2fdLRc0IY=6?Me z7C{i@9N4iumrn3^0I?Ic7Pq2$&!=X3zgEXDyDF;p7T?`OJSKIVJ34!Rlb-dh1Ne;w zYV`*O27BHFkNY9Nr6-*cVK$cGTS|*xMoZh!t% z`D_SSVNX3v}}y78_De}|ROf!_D)+NmueStxE~6&UmPo+v~=U#x*i-k=^T>CGCE z%f2-JE>^lIG+Aq>%f6;t8oQ6R&Dioc!-kPd!!wSZiRr`MD93&Exu+|aeb!q;n(lu>8 zN01ECY>IA%8kfegiJsb&c|Li541elq=jnMe8Q&jv9F{-g37cHG(Q*rX=JA#ghNy&eOywuXDTLOZ%&j(AWLHS zz&v&6GLuf2K0Ux71M%vNBrM^s3R~`Y{ZpA>z;$=SZ)rKc`Wo%EGM*UAk*c`>M=J@s zK;7H+!3*T+Z8T*E-Gsx!GMp`Rjr=@)KjuvZz)AcKXu?D9@XFc-G~1M-hl{yw?iEvY z-zep9S1&oxwwU{i{N952Y@hLxew?5M$|PBi==|RD8F-2#o)VBS-O2@sIf6VcdUD#E z%jHd>>e_XGWR`z#<8=uj^(2$#+tW`UzpCb_crU{qIG)^&`=CCS`x|h>F(`2QE-z=g_nt+;AxJ@ty%tlxf-e z=S+FsK!o>*$I?s2HTgpMPR0Hq=C*YgF_y0}S^F}ib4^rk_8-llXyl#{U(U43_{umO_=vF4Cq{ zx7vK_XX!a`g2T9Ih`!K~BlhcOjNBVyJD*$C<;4A-1GA?92bGO<2)^Lv{{3JGb`G9d zo}$viEYbaK99`RkgS+qukZg;|mm&hi>YXjyp3W;5t%65uhP4|XNCqOHdY7FB&r#n# z%vK=7f~QWG)A4fxm-A#cE8(*^>XBbmF|5jwXJfXB9+FvTN!Ihv>|!Ao{~|SnNsRb= zxh1BgnUct;=C)V>95t3hr?Hir`e{BLsts59>~9}Gx_2i$OG`bn*#*O{4=F#)AJ14H zVt-?JW^6HFbLagn*#!_EzLz!o|Mat}!Q)!V-)~LeS~5Mdw>{exQj=on`E)<+`3imf z)!nKs+lMY~5NbB1U7o#*bOnmXT$S3~L5M%@B?l8t``sXwXm(0TKqw?9WiU=-e_z45 zGV|BqT(Y-4VC_MSxl9*M7H)4|+mj#x(%r(7yPKain;GCB@HaP!-Y1SOb}23ShG=fz zfG#^z@My6{KF8K-c4gBjxQ9 zSLcwnCEmyAoJt_Ee1&!QyJy4lMV8L>`!ceTysF~mevYY{>3Hn{D{c%~ZZ=Q0(~hPS zlM8aZaH8Q%$b7iZQ<0{phY45-r62+K!~X&Bu^j`nyk{W$2;;zm+Pc0Xl0^uI!u0_x zhKI*Fd;y2zf+db(YJPPC>QG6(2o0R3Ja%uvh!;o#j(UlCFcI4Pgag8Ma4Y z0Dn2tkz#!9O*w#g0Y@dVxsJP;nf!j#*`Y|?S4eL6C-wwd=$^ALQBK)BXUy%DXWSQ< zZN6nxTn^*{<<#AaRQnXNNrr?^w%`!sSGwl>_QWG{KtOBU{kznt>v4QU@84Fl2P0r6 z`!afySX03z9S_s)bGc{tcdl*F{_q}D2Af=?J^rQ})MuU|U!b>tA`-I2yusf-<@fOh zdUp?Hmqq%<=Px1J=(6(y6m8q)uvaL78hBpBX~F4!Q);Lr>F%K(*vG~wM5_w)WNi15 zgrEiv0&v0aeacmkHYUq-qg$h1e+&gc1O3Z0PKFhG@jhqQ(DR31iEng6-HvxG_l0D7 z!rs;*&aYhz6_hEJcilR{&O+`O5$$e%pWL5!?3BmAz{mAO_>IcT_PKqPFouwRsqx=H zJuo6ImP&cQo{pR+SWn9yH^?fUdLdv=4_cQ8-75}5-k3Nv*H;|AGC6ImH)sT~2EN=s zr|RJg&iW%RfJF^=$${o2hQWzpOYnzt$9(TFFn>|J8bT(#-dKOjyqGj#jrHN?V`lxG zRG6nc-8+19j`RsHCf3lwprUu}Yvt{in?Qtflk{=fCj*dMHGIpJ_Z1LL_pR(}>#gOW z?6LN}>Y;Jcj-isnWd1$u%d7A?MTo$#cTO+e3|e`ipB{Y_&XVg;epk(;bsflY=8QwFw!}q_}`!WWb8E)JUBu7!CRYK2X@?o!8VZgz4wFJ!4X= zfoZac`a0Dkwdh>8$MRp6Oc~Qi!e|J9>sc=cGR)qf3lM3NUnT`j-ijJ+ZaIc{ANUsG zN_7e?Rkkj-*!iv6?HD`S<)@!BgVs8=vuJY;R`7B>5_0yU`QD8b5Pq%(V;Z4&ANCc< zR>%+FYcXU$g1PPa-%0jMOt7F-CaauaSZ4}$YR=4muyQRM+q-MIg&vdALEt zW}YD_qe)cFx4!wf^7~hHc*6#iyTMEEGR!YF5ma<*l=|ZsKcpB#v0q$bptT$ezcBcR z^Zh6&I4!cda=fu$d8hq^cO|fHerxdvo?`xM?g&TnO}f|8y$I$_zl>Wk(ozJs3Rz>Y zR1f|KUX3=BQgf{e0>o2zIRdWkTklIaPdPAF{~TJ@ZR0Q1Go9Y^5t%#qTbi_=?$Z{l za5`PLWrNQGb(g%Kk7p(ii#}giE-%*6{k9(94_!$(1tXmo4}ubU8KCiAFE2LsS6Vn3 z?BmT-CK&(j_i15}VQsIfHs0XWP0G*O7j22DG)cVVRauzC9#UV3=STPpM(z7>g5%!# zb=2rqUKi=FQim&geBBJl9i%cut#Y{&NGhMC+sL7i13>#am`Sz{jn&=TU&;8obAsrP zkzGl8nGWooyB@$WKHd>`WgRwbG|3MqC*|OL5`q!zC=shLri=}(h5sum>aL~)r9LO+ z*I}q4g%Y3P|Dp0okx%A?BZOz-w{tC@dmqa|cHZOip|Rb+_jAXMMF*9)kL-+S&6AWK z(~JJcRA_q^T7QPb_x3L{?*T?~h~7F}c&-3el;FtHkU+Uw#TWTQtv`#$k$~5(G8{7V zXE3}WJ@0k!i~*lIiSzyLvf2q$+NrblP`)_L^qcfX&crlrSAnnu6CO7$p?%{TtAl3+qAgLI>;Jr$|c(bJv`%EZlN#an}%RA zIE%HfxE5@*3kmeua&NGWm!!rd1IA6pVYu{r$;WDbLn>-{9X*LVqP&vVlWm!p!K>40 zF}Aa~I~?I%;a8ro={rTT8$$PL&&DgWq&8`aakV9om@Td^DEbo&al(12c@iGkc+lRa zIo}|?Iv9Ap!_hNN#5%mEC*7N<9%t0$zCuCq(@dVX0A)gnI{^MsbA zmv6gyxOhQ~yq;k4!9(l@13xGwB{`H1D2m{(-<123+s7~|3JBi05~=Rb9#c({fN0yi z+o*E8vdl5L^jZJ-P+``Cr~W+snz;TZ=a=l)8~P1DBB$RqfuYimtd3|vjxmtuz|%zs z4xgqdn_K()eo5XYN84WgOAVzLkkTO`Ji$%wXk_&qipEOy}lFTGxh zvXX2JJ{;Ew71~H=>`?Z1Tm9l%58mndZTsV~2_d7}+AR(Gq9c^3Y{WOnHU%_2a8sdX z<-`)!RoBDaDpl5^->PqKtIhv#>CIZm0xOj#EV~;7p@%+ZOdE!mB8NBwVfyaeXQwgw z-CygbAjOat(&8J_SO#s3x$U#bAL^J$h%a&_&eQb>mGX=8=7ZjaxD!;|mVHrV+n z7v=o@UHI)TrQPqO0t1rPVDBcMmzIgs2H|gg4|WYvd5Rs}ic4}}KGLI^tG7&EiTtJB zESJ#3-f#D+vep;XD6BY8LK+`)3t8bAFWK$S@lG)-HEnV437q773j{M;6|51Q4lxrP{w;wI zj25!Yf2V9$G?uCS;R%JiZRsW)FvF1DF9>1o46EWd(%{TGm(yuI)t{kyH6+ShC>-Em z{3Bqrg7y>Zg%6prX?ktXj?RVp8BSE!L~e&Xy4&iQ&Sh(0c1%^HQhkiQZA2#y)C8_` zeKDBSzH?N{_qki0OeV?~^fjR{L38W)ffa#Qoh6!9lt23D>!a(*RA5-FhBir`?*OjC;C@r07mGK z_tfqo=0q;}!N0+5Jmq}YraYm$+R%J@Q{^-78}M{q499SQ*;^bPFmoaXln4GMX5Qr<*tavJ}GQ*K$x9N&z+}~oA zFaEIo2k$uANmmU_l#G^mVX8qUNBeOvo?6B}F6STFXIvk6(jqV4!^j@oGJhDKOHx6M zVJ!ZqrMe1zk)o;fM9v+%Qyy*`Pr5)FVh6ge#gdP{hFQa2dA_tSSd<%lYCSt$x15x8 zX`fPvt_NA{`5L@MOWCh0=~7UP^F#`n!|#QX9_#)|^ie>yh#NfqORLKY*TV6*hqS|= zagTMs2JySD5auRzhDi+`_RdWexbFuxaNwr#7kR)2A#X9btD=;=#9JNTIHgz%Q%f}E zhfFb_2`AHOFR*lv^0j9-NkXuke@rF)&`Ev~^Q|eIY7aXWI6)_hjiA);PH){R@1r^L z6CgEDb9Bx?C6c*!fBYaWxHLTPeBP0F?i9lxUO#@(!6qh;Lys)+^CZg^w%m;me2{~I zh^cYZ%KVrgr)c%(f%6|o;uCVLKlyW-&2R?7Upif-)AqL`TzkT*Ys7UAR{i!CvYL2A)_=UiQ%if?Kra%GSDjS);<_y`}#N zm+3m`{fzoI;e)o{ZinCd!k>n((JP$>fDbl^;RQ}9#1Rxm(qALgEXi{vNu30U7`8^j(x;`bA}bou z7y6q1Z>;wV?SB4c$SQEF$4E&@Ey&$jNP{2E)~M~i0{7Mk_37PW0w95i)ac`i(r@M| z`%8FP6+IPA`$y81cB{sQ;lCuakBCGnlIfdSgp9?nKbL*hde?jQZmT5E{oKPf^oRSk z7gO{YQfNWur74{J^D-U|48*waqJ1y+1oHH}iOQ=xy1Bg%W~|fGxW7XgA{mp7-{B9R z)~}q;Y$6?G`OSlCw|=?HC^PWt`dye+d&rOK0L>m67PqV|7P|_#nkNqZ%Rkoh6lqY> zWgqe8#ggW~ItHCpaQK5G6t5NC68C-d`a24R`=?brvv~Gu)G+brr2%)(M(m0BQgeyx z&9a%(D@Bo`O#I0$R?)-ad1MyqX}R^0∾|wXbsqa`h5<7jYZ!S4Q(XAG1@kahCw8 zCWf%IcDtf{Mv8MZB=ZNopL96GB0S8mXsNW6Uc)DCFVA>YYc=fCDwF{spNj4lfVFTa zJnJ>tcSH(rD(fwf{p!Iz+8}^7)!}^7Yio+N9`tK?<=nBoIkxMYJh$_d;kyDw(%zV# zZ~7B}pyQQC5XbK!XYBa^%q;F_{5ulOH_zN^dHEbQC-FNn(n0wsm-$$80>(!&H+Z9U zhO3V;4bSXsa<#bM7b@MY3?Gww7efrA{U7(NYw6+m{cwEcJ=62vYdPKu&wYYx^L4Z{ z)n@IN5tU4;(hfS*Mz9}l!YmVyLb{)kFw36uiW z%*!J!Unf79oOJD8?^$^48zytVrt2CXS{+ zmCY%1evl#fTVT&4{MdO@cOi*Df5>s)KBWgPohVtoWKoQvxLp$M3UhaVhfxVow(orG-Yuc;7ys9~0C_-G9k!qQ za#ZEv;Oymlqh>4cV)oUbIXcjiU{aASDORJeC(fS>*@)&r+}j5A;dloz@~5ye#a)H| zEPb~7Wt-vrV#fU9*b?`4bC>)&-IP@8AOJxG+b{UDi+_&g&FOyHG|YAG&_&@vq4UQ( z7yKcM?{9e3?Ygj1?btR&d4bwGe57AASPUk-KOQMsh{%KgQiaH}R!0tM?#^eKNE-+v z-Wb4|A-2kRJ47uvW^xLdTfEwP(Dx*XW-N zpH%%?sm`85NP1syPX%rD$FaY^eF&tM$RNzP>6CP9_|G}x;1dD)EE!pi0=e;D^px1f zC4B-c3nhBzK|fwH+s%d1J+eppI4{RgB`1eE&0Hi>^n+>0s-A^uPsSm_eSZ!8x^GTi zeiCkZTrm{O{37#keDzCi^d*&0Nq+PCZ1?z@rD}@X}ZpfTvdq-$r74wFB==h~@FEVRr3GiHOr(9ZnTffdHDMx96*4j7gR^7&%mS#?;G;8pa`GA!bs8e|xb7Pe{sRE@a0mkCEFYa{kKQ=Q z4EFC#Rh`qpvhY(B|8444KK4KX#K|`ZXcW0vA>l8p`D_W*lBGuf1xW6?*c``WAh|Tjw9a7G}1xLe# zmd16Fq{r>rGjkIr+X{vHRSIs2fUSMk_K+~A`K#oNc6qJ)wxmx$qJh)`V^VX=COmTO zUVBvKsRL9Po^Y6;^)aSw(FpBxaTQJv9VSvg_9Q0(XUxHhtsa)7b#EShJJ>Jp4IBfE z8r>nQAH)3GIt03GP7B8~y-;`MxV}FQ5Zsh5>r)&hum=x&x`4j3ryql_B7J4q%D3WmBlS=w_?vBWmI-K7)6C_%av#S9*j_4$~iq*9+~ zV?nm-dJH~a*eF_0KY-ou54+4h?^Nl5J^`(&7f*1C7)@T7pSxd6{Ao{EFh4kzk3o~p8e0~%6^qasR2hM z+eG69yym&~mcg_j|^Dus;qVLLuiY=^o z^)Rt7?M+KHmkFMHfs_xK2F{mK78Yi^@VF}|JYR9i!T&ycq7~!pHZggz=f_}3cJ#L~ zMJI1TiXf@5h#&0vxFYjEJ@#}N2ive9n8zdeyx zvNNno2+#u+;8pWi&3bcl=iy?L{IM zDhwHm2(R~Jlp$q*69sxv9s61ia8@YGu>L8Vn*I(o&;^!NH$IS)c>2cO{l`b(0b%2K z=%M^{FMdXsQ>(on0VBI$zv46I#}}LDX0-*JPhH+;A6~PG*A&Z z(K$|!8ps=f?{t&|V|>iB28?rf%lsf!!@s7q+VcjnaPEdOH?uduB6w?$0%9!SXe456CIa+09YX-`8Z8L7qsbN3?lSvl#u{ zBp+_w{o~#R9@@BD0;(F?X1_^Oqwo^Zu8PF!ibmqu2|w8%0kCjit9AW|5RA@G+ce_* zq&gz6{&qTg+c5zgT;(&@0|C4dqvEmGRNJ$s_6O$JevjO+f4K_e&8e z)!2%Or0@ycfkj3YB|=)~Qc~2XvPM z_48Kl&9H)8ScVuI#mY}XP5LdQ+}}e*%yXdZyb)Ygb^n^_u&o%W;RHX}cbCt*+=A)e z{&BpoZDKg+A=aOqfZY7aaddCFdl4Lcy&?YIg<+tb?F(iIQ3Y*&6v$L48h1o@LE6Iu z$)JK*xKnduccEDuSR(bt$mpUVSV-A64QI23q!MscWO5?m5C5T?EeK#eh41El7b58t zeG~K%Xxj+VP#Dusv`tY;!b0br_RFmZk z^YQ%?s%c%z?BarpL!R98S%W|xV`^L)8P`NQjFIgIp2duxP@{`AR2+A_=m~X#%c=nH zh1ok>Gt2X`B3>r22+N$T$`5~2=uMlhRA38Qnq(aiZrl4Xk{Nlikcdq6J_f39`=ST5 zcF-q`yYTZDZGplk8lm@J3wJ&oZgck_z9LvF!ztbRIT$LTJZ5f7@B8KZ(6;8T6f5y* z{cb8uT*s)FeG}Z%vgWV_C{?>92-V0#aFpatruntjQjfg%!<#xKax#F3@lvaBRNx`{ zQpV|cF7`%1O&pu6#4+kwqp)s-^3nHrQz*8XjBsme+`MYF%G2GW4?r0NNUO)MlC6Tm zMFKo%7I>VJ1wUVl^1fG|gL3==&C_hsq*u&kfOpS9lqO+=r(3oR+rED+&c^W%(r*0% zzwwXm9sp;^nTdEu5sveeim#!9|65KXJhNXI8(+usCEvaZ<1KXiJYetMlbj1@9hrfp zKV>PunjMv0Twl}?>8XT8)?e)_Ju+8d@t4P9yyo+)baZ?~mHDA_`<&nd~0v=CsVf!{$l> z8P66vS3{B>pZq1)8*l?igp0wM!sB@z ztZn-Cu&3uNU{rXAO>RyYq>N(!YD$0&?FzQJ)k=WDy^E`HsL(Y`U_X#-rq}=U?4nRT z*AuSkM8n(p4xO^s?0c2Z#sa6eh=kTtNY^DjnV^fjzm_1i`|Zeq&k*LH7xq(WA{!^- zehDWkpg6?*Q{_Ig_$C(~?jvpE#LA zqDurjW9jPQ5w%Gx0otrrv%MI>UcE?%fPlM72z${nRP;xOHu7Ut3K>ecHC>wx%ArkC zc*T_7o254 z1VOJ5N|Y?|z8Yy5Bx?G&J}2?_>tCZ2i4$abCYirl&aT=ng>xRLd)e(!J)l(YF_@mW4iVzKmc(6UPr=#Xg>`chGtFi4KtZ z)H9d9L%P0F`}e=I`P8NF_rSSw)nZI!*jOASFNTGo&Z+o}+Qy9?GL|ngu@sDEd6Tm0 zLE=n|-RafaP9whA+qnk0*QA<3&y)Ux%n1$I#tY~>hZia_^uILoF!)7(pxQM!eU}9a ze9GVg9DQ#tP7{qZr;FFR$da~&ZwS!^RXwn0o4>6dUOl{Mr>(?S1YfcH%L4pOxjr8$ z<){KQhAn|;<)0G$JB~unqGj0NOWR0;nKh8qw zZMl@RBzIcQE&N~{|C=r(J_mpqe#o;2EC~0Z)0IDikCw0R+Ovpd~@i1ZbB7^ zF-iR#D8ohs9;XOFY*U_eUtNx*hG1{cuVBN!OdD)!Km*m!Z@e(OFV@J;zNZ6*P|IZ{XCz~u!`57a1r^0l)h*52k6V>?IAf} zS5W!zoz2XV=|6~G4oFTKIR(f4tn!bS1=?MM->m6EX!}XVc(hW=UXLk8eUdjc^Y#PJ zLT*jcMbfM*|5cr1@5K$WB6U5=!Mtid(6vOluw1;nrA2(Iz0kcxYlp5}S1F20bq(8kFzw%_lZ zK#~4nA=;@BKZYdtUI6j$4QjmI>3MjK?H)qaX|3Le3v2eLv(?$Tt7k^CM<8Dj@`!^t z#pNl&kFV*X|bcAl*EeIx;NnX#Q)-umniHHtZ^StlE zkGxgn1_c`nbKtTC`U)on{KbTSCHDZCx7YJX?CwkZr<{vB==fwK*k<7UyxFE6Rl0@l zZ{euiIB3iLX%$xsk_&it^Er@-x4#}L*wfQF709yQ_Gxk-pRZ=y5c3@`6gtVqs}{G1 z1st89=h9IWrz`)vRP1$JXIw(aDd=$LWsAA3js6_ri@#t~w6(o%V?MEpwF~ox`voj- z%;TBi@IGuXdC4i;8oG-ryz(8Yu1_-@UK#>yQ|!GzBC33nwlYTky1m z(DT#-RPtr4`f*GBR?7EQZg54oUy1-Tifuf`ocRad-oI{T&#rvpfKJzdFrX6h+3k=Z z&Ad}cfjTG#sfhQ|p}Ft*s5vc&4bY$JeG~+!dL=B#F4;XH_IT8Y!>W`^KVKi;iagDa zFoU59MbV%|YvW1b`iq+D#=ft-;_EATr2NLezGyrVc!7|MmMrf_#tj%pr=;*VpxRFB zEd%KM_EjPsj!p7w@JnUizPKAc=aZc3w;&#W3tdH#{XN?!y8bBO2K#@bdDH)d8EG{Y zLE1T262!4}94R+g@^j0xjanv*Ab!u46d~%4hR?-(@#g!!mj~+G%{=zhpX&L10)Z5Z zMKu#5b-MZUJ#UO6*$^fco^GfDKn~e8=t$?pbUgLS2}R*t2@DbrsB1gf`}5v-bw-+a z-Pt(szL_x0;?*_xKF3`$SGAUfg6}!4Dq*2%pMq>de;l<0@sC9>C4w{C>sBrVH>AIk zE3uWQ{hdnP`5<)=r)@i=3SXQ3+i%C;eb2_>rCk+}DkEmv6;y3HBOZcrH*QWBP7*S100du+jOIvV-?HGkMd6!+MVUimjqc z7#|>(O~*M4O75Uztj6=7EB*r^%q(U{7Vv6U2q#*K_3{tV>s6YOBh~}912uM%>6|xm zOvJDTK>1CA<{kLm&mWnZ*lYFfQ9S3jk>$*A2bXJaAX;NIgn?6z^`x>m#4BG4`k%mu z40XHSEk4Sx$s<%P8>41oc`Se4ETn})prW(~^hZ|%3c3BMw!a4mC_~>jWae|XKthZs zx98LJ6`-|hmxXfs0dTX@AnEvZZw~#wjnmcVk|_-q#Ha$6i?1;iQdl$>C2h;6i_yx?)hNTQvqJ1JK&6NtNfKF)UNnNy0kASBkF|w zE|ZWLFpRrL9RZ`}S8@w8$Rdep^E>Q|S~cLTk((nI^L8XLuQ^EY=msN@f;(=w2UK$_ zN>;w)=p-tP@G~a@tV_r^Nq4ra-Kc1bPdMSV>xlS(EJC}*sN(l( zEOtV;ot|g-t&0p{+rVcKVY1=X-5#!;I?M#xj?hVTI;>nU%Kb> z#2)5NYs(ReW%k84J|X=Q;bsK2+j`D9c)0JEuiqZ3Z9#<5NuTisFW+kNL zdMqZME$X)%(m2{TOAnx#Iq@jp?k?g3@)U0r`oyB4ub{ISfp>CKemiQvk74yVLzZQp zE_`Jlxr59aBG_PFe6hfVgTU)DCc0*Q@{+9xOdA*^c&ht{t^0nVfJFTSOftPRoKp;# ztSWikW@Vcc|GgkvS>Eyx9h-%;FHN2vI`ISJD_zLb|ZD>(GZhDrHYjr^OhU1$i@ zY0S@WUCyMYTXYX7MM?nJ*Pp(RHViQNc5kz`n#<>CX&TaJ@5B-fJcl(hg@QkXB_ZG6 z_D=||=)gm(1hkx(fNxJiGvnjpzt_*hN>uhTy7`EcL9;pu9bW@|`WA_G^zyOtKM3=i#d201%p}!gYnxjv1 z_-G>O`g`zM+xqth7Qw{hk!sb)H;4Q>%NZOI_I>_Cit6{yH-v?OhCE^fb8Id0I66f0o9u_nuw$8b z0RQU}GZe44aC`qz`pMHDYQ1fGk%xO-?mUm^7Cpi`k*$S#?wbqVV7y$vllAW4<6<3{ z?-S_GSa_V>(MXp=)?N5}xl!_GcF7U}?{n4Vf(4DIvAo}rdLXZy0*~`fCZxD*RU-qR zCvp`q>DcMpDyfbIDU|o`uFbCgdMI86T($BLBpcyfN(1e7>iK;Q3#W>@f}IjKQ^bBI z@Xe#-un?Cjdc))vcX4;U=BpiBLP=YF{mU%4Qij>P*Ud_7KVM`95)H}Z*_Gfi7Fo=X z+K3PtoOI?gvb`(?pdqmj{<(IJoL6((YvFr0OWe(*pt7Iab-yA@QOf-uEw=I%XCue9 zU(`7C@7$iBYZB~mH;Jp{^Z`wgEnfp@Kvwa0p)zQkyZbA`wYVBV>bKutR-gkv-Ob@4 z_?p~D#{)*^O?}$Xow_LcotL_zDZxo8$ZA{jRuMcH&<&+`2D5)RhE1uS7w(awNk6v& z`P6MImaN$O##w%$1^(e%S){zoE4E`C<^rFvE*D`?>q7z&(pDCX01m(^hR`63JmIWf z-mbU463z1P^PZ=)?M(stw5iE;&2P~sc&W1wAGi*(EX3sx3;+XF>KS^$xg?=V|B$3s z_b4LwyIf;uTq}t?f0e>ZsU?AsH1PQcYMt-b5d)u7%zm%~fPZt^VsqAf>h#f)GsG~D zUbBo1raGKK4X{oUl!)1Nbd6ynn@(zaP_xuKMisQa2AIUGW|lXfOl8>GLl| zyZtQ_ldxHzeUQ;ZqQ}$avzEm#gBKg#>ee41?Izmcb~!`VQ{KPQS3=C+ilPX@NSe<7 z5iTSv;%Ab}%K-Uk98rao-HXAHej<1pY0?iFz1m}Le>m~H2UdAd^GGSH=x`8@7Bzz}2==`srMy0GoRW9Nk>#K>b7tT_ zk-nMrJgF-UiQ!ZK`c$*36rU}fkW8rRA`UdhpDM^7w{Lchs=)rhy~>=Q?g`?{(roUQ zd#WbFKXEM^DRT(+VU7D5$A3S9*LtY`nd4U9!ESPW`hddm5f4O&C8)xB^QNq75CqAq ziD)=J1O7jo{kaw|dr|}R&TK-+*IXyH8OKa0O<>tlQ(A}sm%DX;dsr%eXRg!l%%?ec z@Acy+3yCQ~4;Kb@21jKHLx3wlmt1m3wGvnOnq+wt>xI!%7xFJ^g$Ff zWW37pu9Uw^B0f3}24{M+7qZ<`5M_+$U?zp%N@%QoG2%PS54fgJ3Y6mO`cPz9dH-2! zV?&i8$~Cw@zK(ArqVgx4Ictp!-#UcBRF*XBH5~}@uATu>VTanq?JT_yhc{KB@uGhp zBlXsvc#N-UoBZv`p^3&G!-^03f?%p@Y+B4=9(Ua-C{#J6Q$hbMNYPd;=z2!sq$qX) zHKV-Jc<3KPXf@#+>|b2#M!f+v+KO`jN<{=ra;MM4G)P0Ap3mLYhdD7uEml=0pmw1a zj24bIJlhm^)QQRuflC+44f+!f$K1--y-Q+9Pl*QlROX-gz-f^M@@1)XCeWGTb*G`%tQ@+bgd5{ejEIBAsdZXqxIx? z_|9(M<30KkwzC3YTTNHKtf?FRwC!%QK@{^dIm*S`sHQ30M){r}xCFpYmdVgf@!uoD{=j zdxErY5lm3nEsXofk@v)#;4*Cb;hn6WyjGB2Mr-GyLtj0oij!Dua(saNtA4B&dGf^f z@hVoM zm4cZ&6I2Zr`27_Uhi7D0^1;1C`BXtlzGr9eZQY1DBaW>3rsqTO`lS24BDH8x5kQm- zki*>bToGDscTx8T&yK(E-)3-|^1AzHDtfVPap7MTp|B{>qz|H`>udzp3KahuNjt>H zC9sU*G+g-XyQc>5I^6D46=!?h9b3Kwd?d+7X)#P_QO`W=={3c%n*@rZ6#2{GinY~l zdp#cv8_$rR=|#o;D9v9gTh54&)}Gp(t?e4)+*Qixb`g}R|EhCoL{I%RwbFc_a~5U@ zAN@|V=|-K^dSj<2HC4rAgG7YqeGfOkV|$ppT6xD^H}f*zf~v=Tpvo6DHZ>){!rso_ zRd-s94?(B0=#kpK;@2|OTMFsKeicRdOEF;dAyhh$b+^vMIUk+r7J}CZBl8(t1~}R} zkCzIHJLKp9WZQe)+mDzS>G>t($HAag^6+^WG|O9cerJP&x!(k}b_(}TZ9JG;P@nb< zp|Wiub!{cj{6xi`AWbh-N-~dGXIfetLw_78ajHlMpxudnT+z6DtMNkxcRA~w+%emi z$@^hJwJ(dhl;_ch{U{cuL?w<<9SsX0ZB4vC)$&=S-}99zzj*>=-j|@;jAWONXs%Z2 zbv-|fJk6Qp-M!6osssAImeui>$53En_oj$ymoi_J&ZTaJ?6*L+mqqRt z^Dd(Wxdf3lF~`6}8O4m$uVW6IOd1h469k-t9*!;)YUnsg*Z%ky` z?((5Z{q{5Wl-6DVO#TY}iPtsoECh9}>I)=S1~c0}ENl#(QodQ#tgw%*g6aB2Uy9kd zT+1~SE7gNt;Z&UmHjY{DR;c+R677QEZ_pn@ zMh?xuF8CIwC3X{93V3nEYf2+#k*1ci(X`r=`36kMcow{c8(d;9Wm6ztrx* z^EP<@zSG3+Z0a75AQ{H*v14&>18c+~0^H1dY zn2o3BR}fy$j67(k1t^mi*nx<+q!;&eB{oR30c?7D(Y@ z?VOJGYN5=m)>A+BWS`&8jbqYsXwb|Wo!2f#CgLt6aBM@qwJ&I@|NchFjq5D)=6y$r z2wi$b5xj29(UN0IkAuIccM`sm*JpP#7q_YqWx9GE++BgJCyYL_sg<)|+E>-fmUH27 zs#*`2JwuZq4p$_=tahG@aSvS4$UFhwY;ej(Cglbfar$(5Pn52E*#*oq*kIBj z&s>uCcefIeK#_bFs|rMo|Bqi|h^<1T6+g(4gZRxU5M4r*vK zTGaL%>}z?i?yn@*pSyx2zl#PBS!-`Hz)v3kKc>z7Z9Bl&unmzH%?sQr`Q>b{KwOj2 z_g~V@Jz2`AAD*AfA#kHmPYfnb)ZPqC0}G zc7STWtEs1ZSEQYBE-v=%=z9PO%(n16dYAQcI4`fIw)TZ5|BfgqQC~xv^px*gC70jd zC1-i(Pj+|Q2+F9sM^9flzJkQ~L5uK}H{<(PgII(VILG+krpDMEm&YU#0v0_I=jaBVj}T`aNS&^Hgx+ z);y)^TDk%*IdcEz6n>lND=AcMb!%DHFF}Ps)Ap@2v$Hea9tnB#WU3&(Ci_&-N|5~W zJ?;%KfI0;2T0rL!BGn>Wmb$0wurf^uCmWOVlU#CY4W3oIgu~pE*KtX}sk;lpPU@0i zIMH^4-dm!hISo(_{nP)^YtP*(rrTE^c#E<8sVDnd^)3%SaDNgH7;=Y-^nm)B^*$fD z`r7T;WutvqkmAW`R?p9Td$!~XXF~v3bBNbhiz`>Rx3ZU5;C+SjaW1VD**|~hA`_+r zF1Y?B>+%7RtM!TcNf5)-*LBgj0RAO(idIpDHkkUW_S70bq>9cgUj@bwAFYk|Jgal4 z`jsf2OL!2pRSWfGO)TlkleL-gDG~U5|bNUOc z2p`lCi}fq61UNqfPA>iJB`{U}@x6you*U!oK4SutWqS$urF*(#4^tVpMEhGX#)Rd| z3~h?nAcB9DJgdi!rBZWEkH7w-Gk%xT`i3*|2Uy&P@0U85r z`@7aZz`x!6S61S(DLQ=AT(3001Fd^#K>>^uK0L_k)rxs-4etu@et(UAISh<}HGvj3 z;05+WtQy7v&TM+)b#L$NRX58AmfAmy%}z;CKz-Ew1uL-8B{YSR1a(tf9 z17LOgYe4(>XapQccosW4mu?DR;~3%PbtHfI2SSC_(Ss2av=L_ggis|-l|txWd65$7 z>tS3}4hR@(`o6+B<-2;|VpPFxwf<^)IqHP20-*OLpX)JvERWAY$j(5EAw5JN3eu+K zn!^B5RKmQcxl+6S&ERx>AG%5x>$n|?F7PKXQ1B+u_tAi4oeqCqOSbx+lAdtD0bH;Z<3paVl`79A<-}wx6X>y=(oUQZ4zKz8P~) zReQovbkJXKuhqz9u{RIA^p^?aGxKyjzOpU);`JaKQU@?p!jC?I-qm|?}Imb0jWl8 z?;)NpK(i0#j(PxG01-dlk8{MP@>T!kwE&KRwWoI{i4#xa+om|Y=xL_sJ$GEc`yJo| zMo5(J!u?sH4nv=?X2zwqAq5lv{3m$=L!dgV(_T%V^^AF|5N`+rGk{Ir+A8rhvUlJC z6`UyCr^k>eZaqoJnY@TD9?EQ(U!|Dmo~_rOyG*yqhl0wK@1Y@AAb{LUFl!hcge)~5 z1e1^)n3*=vQjT@s(uyqfK>WB#LVqUM&xZ9^zmMu-k`{tzha9M+3Dy(E9HfG&UxNP{u%Qlkfat~9mB(?~g)My{UM};zS zv^MO?38?MVYvUmRm|3}=rVbebU72~AJ6o~Q)EEqHp^9f{ zMJCVt@yrQRq{Nsp@R2in3w8q4`;htE33vCKV7;j|>imkkK_pzDpYeChs=DM7ubOTQ zkK1pQinGCfGO~Ctl-7JKDE{E=D05r|_P7HsFi26DduJGNW5s*V28utKe62R>Tq;4#bO5Isauo>yO z*uf7~`pWPRzlWb&9hhUFWvWHv@zy|8jp= zYj4KdePLKSybr_2!J?Cn(la^S2oy-peSv_iB@avdAIAM>N&0if@p3ub6LK=B6_X^e z9eQQ3DKq)4mgvz1Ab)#8<1{V#K2p56_$&-yLiWM?;sV{2Kl}~vyh!)rQd znSsWjaC_!(B+0$ID{fDVzeC|HTfW3}J0Dr48@&2@$H&Y{-y$7?oQWu|faFc!?=tM4 zUwg6;H9r_+U;Jch*#i6)F&JrM!XS;jyM)54b$fth6Yk+!!5x0W6E z9@gXdeR0UXxo()hcwyM*se=jB8<&U0{UuO_W6|;DWmTWVqfxKDr8P(--ZX{sTiS z^Fs6PfbRsTCnKq8Z{PQ5S>rCptH5c?iav{b zXC~!+a`)BgAQ9SQNvfP7lNM}kJ2{;`X!lLd%2?ckQ~PrETVH~2Q!)HmK312s2Ivzu z)OS7IGX;BLOA?2E>El6EMl^Ypn6Y-wwj@E83Ix|nVP<)b+o4~dq@wOIuy@JMx1%q` z0)lLUSBA&1V8aYG>-+>ZXSVG+YTMxw_4MMuQ9ViB^`M|0mWraQ=+k%H4S_!v2uYzN zoQ3Fau=iOdjAMgSb-L9 z<7R?sDSr1{0)|_)-|w-8^!$|sQ0-s<#Uyg}uJ{YBmRKFD54`4zN&XDPBjS#P?K~@( zObow|_yA01T|RA&K_s|ORuJy(4~oE5QR@q$ZS7Aqb{R;le%V{Sr_$bNmZBd@7dngY zW;|iJQNQA$4ut*r#XzQ~23P5H4F3Wpe}p9MP+V_9W#4K$h4j$U_JC1y(&3o zH$cnyOvn|i{IXEJi0StX4tYFt^H`Sp-h0&4ERL=YQ+nG&Q5gSD)cm`y6)TG5_hWnz zv>=;*=<3{U#K3OU;9&3Q(f#f#OZa+tZtKq{Uz;HJ!`vp=IB-sWb5-B)DOW1E5Z8N zz86ocXf~$HfF}w}ofy8_9u&F=+$DiT0df0DuJ^NXc6`D)oKDXBwZN~p3cj7E-x#i4 z@}jI6!&_GI_jUWp4Bb4Zj9L{~ViJOtdL&E<(=9wx7Rn@mm0q5(3Qs{DBc@?>IBS|? zE8O;|6b-g<1M!2(!w66T=@h~ajaPBWKV)~oPuoH2pHPk_3UL%YykskGC3K7zKrLrI zAsCJfh`M$hVB)6q>O!-}%Op=sdtPw6O#mGuy2p`tPF)Np=K2>7 z?u(qh4lp`S!2>GXW%)sbGWHMbgME>Q=6*Ew`eFBbd>Ip!1UL%fkf{<>(OKU=ap!&N zS7<_%&OE>$VULXWN#V6|zhAob&ZF{HXmmSQR;ATXGl4pH~G63Hlsy zd7l}$2i#R6y*$=#a_gtyThW23E6?9M(pOc>(;>izQw^#DR-&r5x4C~~AAZjZe%mc6 zIp%la;=|GSiu0+&_q#rDKxN8M*h@T~7Zs~JBYM_QUig$>u{+*4NLDBo+PPt=EXTWf zE~6S#WSa5PhP{P90~%FE`w3pBwwhu4fVV0WBLW;5?VR`gq}}9oIb4%wL@(~Z37cdv z=oUl9F)qHJ1=hgUz4PpX8($X4}7 z-xTrjb>8OXTf@VU4)1&1qw^tuQLCyglK6TEUf{&k)jVPNB`T&I&_m9t^iQjr+eIp; zF!VV22yfm&yP2Jy5kEew->KAIV2J|j*{s$7sFeK+1JSKJ-mO&Y#I2R!!aVewMvc4$Zc*QZ zK$)3NWcHm0Td^w6dy7sw5)+#s4N@cX2m0OI1Lky~Uj>xMZ#V|j#E31z#nQv-d$tTf zij=WMuifV(Udb8mnrql@VHt|JYm*=6BV)1zTz8-~&^lkEoH;wZd^`=|BL#;I0Z@e? z6EmD4(MNIF9Q`!t0fEfpWNj~$MfI~zw9CChFkssg+{s{G(vmqKM(2C;YmNP?!LN)6 zH6dIE-_!-Na>?7coH9l(t2JlazT=elb@U_dynOC(V(yK!^^WGWI+sYLAEr(cS9Z^z z-T+uteFBD37a#X&;(UT7_!h;i97RQ0d0Z{c@`A7*FT?20; zqIo#if=F#W_Y~(0WM)$hyWB5Y_*eT~Al!u+>Ei+Q$9#@3I_w zYUIH<5K`nVn_UEOMNSWUTfNTa@`X%7Qq(>Dfiw1rE}uxWu~}mJUKt|96@I-08Cj_3 zJ~ew$tULLEdwR|8rGb^Y*%br8;(`@Hfv$ioGYd7EllA0OKG$wDVK`5EqS#s`>JP%H@U2_MwF2DdFY)!2~3#J3{f@3plI2 z);*Iynz&2gJg48=AMNLi$}5>Ee7t>q73E6<9=24;+8bSn!RD%75zE-=z7CUA`3wpU zDjJvIikDdftXrEZCp{iuo~u67BoEnNsYQ}UkSvsk?$eiZe6%Y0*FR!ndlD?vI;^X5 zN@VUQtTy;hF&s+S4^9VJ}3d&Pd>D-n@+hykWS(H5$x#&zj@+xP`bM>Tk_Ou8>6-=aFBJJ0^I8s^oFanPZBa!a~Oepm}I^GKgBu;bZc z^7f~#qJLo=kQT>MKXWR{!^qVQZ7gjR6E_91wZxCLjSI*#rdM~%0>aR{gLW+3JFHM z9f^GfYON$>o-3OC8%3G4eL!D%q@F}4w;{bxZR;CuvN-$!&&ZA})>;yn-6JxBPKE*D& zn+dz8GN;QgG@pkvU(Hz*`g7Z3aJ46F-jTCzW$qeeoKpv&pVB)MI#=rB-z%GWX*$$w zf{JU|Qh2;B(dDN1Cy06!`I;yYyrAGXe!zAlCED#YhmY+uJRknu!DsrO^5bW-7hC`TM<`1E_>b^!MXDOj5M057a+Qn>#%FnEOC+ZOWhu@>p6Y zY`KpQ@nk&nG!|3$gLP!-*Kz9Qe=J?smZDe`{UvgEl&l~~kn|=|1(gi?^|Ps-SvB2lsR(kz2|H9ms)F+~ zN{FDXmR(Czg!JM4&cIFkF^?+HXqWxET)OTn*oiy$7jDe|Zk}*oKdJiUQ8N{mPgN*Z zpd)qmpk5VSB!ahunl1c!aSp!7AMWUQAFRtBKT7jd6px1zd^YBMzNg&&yI)4$z9R8~ z6HMjKbolYiWQnItrjzpnOjG$Awwt@wXYB>m6#Hb_uyH;zKytwtM*C*Q>yv#z_WVh| zyP}!s$%daM4~yS{pl}MO)QlcU{Sq#Q)u9$w>7HvKNjbA}X3E083~Ma#maFkfTG*5z zjk=3dZUhPSllXkz`s-`WVPWI4Pp)_mw*(wP5~2L?bj9Hb4afDouYx!Z7ENiUK4F38 zd+!EX)+|Y`)~ecgs7QFx3A?jc6g^+xv|Ba*v3&5(SWld`84gdv>X(cBQw$i#LYuC( zGpl|JVueq@%QWsW@CX18v;axbQ3)xWyLP27NB(Zh%Q`RUfd|)p`D`E#1gbvtJ!CtT z8LeYdN^viDZ{nYu7R&Sb4+i$^_4=VqdP=`vZwQ{Q41_oN_xkFr08NKDec#sb4a?jy zfN5VK%1TX+qikN^J`r+P?&*oP*DwSYQMBdzljNK$CRImdA%MAZT6-P8Q3SnbIs|X{)EL0LzAOW-k0~^6(kW|B!u#G`FX7S5RlncmKeT?!VFiH~2c>0% zW7IGD5046^jV6uZq{+{utyY02+a=`NnO;gPy-7&Bk@QyTSy`s>^P zoJpDyUpwi8x{(oHlqL6s9>fdQp%a9;r}lo;0|88v``p~6@dvlpv^u}vPEH;WS_j9^ z(5LC21Ehj5*s%6hV&jw7?}ZHSVX6mieAkb^-1{+{d)h1C=Pav3v8-)z@W?Q*Bx zk|8U2$kON?dUkla5nRVix)G2@qN_Sm0)CXLt4MUrx%?IyYzVK1TtO4xsL7WAO&YI4 zA>R2g#5F;3t_Rg|XKQ5wPI3QyVR<`63D&oZ*w7bi?~Wt|^o_(Rs_w0R-HP=05yA8i zn)p-afP|smq5wV6SeskQxD)Vd3fm5dsjNnd&~0 z;_W~sU=5cyxKk&VOOG{{;%9NuOYd-_UA)zgD>HqidpTxfpOzoU^l_4IV@npFujyHD z#iT88Kkm%rYE;%Wu2RmgSc%NZ2cYJPR{!`VyxaMwre(Q1Z)n`5KcvQ|z|QR~oB==8 zuWXLp+}(vkPKmnr_`ZvzWX|t1%ZrQ0)1tlD{)5{mbMRQc>mKd{zp=#q@#0<1#z|TX zaeiH4nfynyc?AxjSc50wSx*rEKp*LPie&GPs}cQw#UyKs*!6moG?vJ#rpnkIM8 z!LF(0*0rF(go-P--GdPL=D5iWR?%{x^~z*>l+N8pJ0d zds2JU(vCz@$_;G?nyZB`Xx^L$_8mM=j|?l9#!Ug*BmNY__`$^e89{~e#NjoWM z5=USoAYmElddsTgM?MK~+5lL%yQ$#7n_6-lvCL}U(XAlHsFZTn8FBO7$65g2mN*N1 z68h|}lMH5xhyv{hjy!EB7u;CjX#Y$@e(jJP#ACMNGST&-U1++Cg;a#ky=@tIgYn*2 zav$P*!&-WD?%n)+?Jh=KT((qsYQAMgIPLKzPv7lTgo}2{?%Q~N7~h$EZPxiG9whpi zoZwk{kscg;1CqsOP8S9D;ww$^*9*`3a294|9X37grpy`23rQQvU%SbOl@lMrto^M~ zPS!babor6dy};=KU_g|?*RO-`8(WGb8q2G!ZmeLzfbt;MO@0{iMY)Eamnx_Gz9XOf z=OXk1mPP3_22Ygo8VU+QDl}i)>!}rQawcz)d=VKfl@$9WPTZGJCFkKx7rrkU|Aki1 z5oOY2nLl`Kj_)Y|>FQN@jK7425^Gd^R!iQVCXC}RKd&*b4)g2HcDvp;KNJ||u%geb zhrjr?FXuO3-q(7zBn>|9d{Auc9^r%OrSsoT;C0x$UzaGn@^nSBZ*?+D9 zwVtIjv*eC>y_6QPYF!I^Y7z`}f%g9z^z1F*<5hLuLGGh!*g#-*Z`?_ih*F<1yH2Yd ziiOdV*Ey7$OZQwL_vAdlYl^mD5OHRvfRrB;4ZLX{-^W6-8JZ@4$9erF`f9AWE{jxvqBf+YU`)Iem#=SWF@M-YM?ZG0Qz9C@ZQYDfnRFb*= z{ilik$7=_!-GQob#2L{LM)sg&H~_Teey|Ae(1g&qj_AJR3EaU{48Y|)Ti$I>I4S`X zeiERB2d3-oSzWAN@v-PrtFDN+$0)7SYv$wq^zDCkDg z3&xeMDa%i8VTTSilXh$B+kN&==u;oIeW#c6C_rQWD#&yCXy6Fry+ySdO$QAQwvof_ zslkAN$o8V$!_2WNXzlEQQ{jOG+jHhEzVO~sd|<$-v+4JI`I}1pi z$amX;7yTc1&fVD#7*H^9vHBLw(?%=K`R?Lk~j< zep?SbafXZt@p&alIV*ZxQ$Eo7>34hf*20-@pNqeSlbv7#*F`qP zh-VN(l7MJ16FV4qUH%PBU6Y{Y@RP)z(8!N6- zy^Eyq(>xCWHE-_A%brfOmEo^G_U9`^+&d5yL0Kvu<91)ky%Hm3Df)VOUA7BoqtoRo zzHpF(#Su5PR6bX4c+LW@?FMi5Dv9wNJHC|m{;+Gx7u=h(H-n_=DA}6N?K$v%Oecku z?Jo$b%ER&k$iOVjNPV7`fJ=e)b@zi+(9Qn-GGa1Ni<>x-PmU97i;6jJ?F`$EQzXEL zX}WIq6U{kkam@6l*J70qo>z8PJ&B_?AolK;P^$VS>#Z(N(w4`Yi*>C{b=ol7RO27* z;mz)`$9TLhXstozTH`fW#vOq{JcPyke4W(kD*VbHWOaN*rU3JwPNgSb5~Rl(9arda zfR-YDq)wL3$1q%X$4BiiQ^?1Lg87s4>F31+=}$4tulcGRnCm2~cv$>D`_S^P7f)~F zU{HiFS8}+|<3;VWtnusB1HA8BxRn=J!)`B7dMIK@uVuW#x=)`($cmxo#9Wfm&XxU) z{zw}s3+0}8GrD`~K_6$Eq8Wb8%%$XSCnlIp19bb2lhgJq=E8RG2m@9!qD05ZF2JLG zp3jprNVPU|V#f%t#lE+JOtD1VXKweKzFou7xgYu&lz_q8$6NGJ6w7^kV8*uk>2UB1 zr{;k(*auy5et$Q^gEFvr0c}pcm2W3o_3u8Ga5Xm+a`#dtH^nN&5!_Z{S5$}MH<9<) zfx7`TC#dZ6cz5+PiKR)|19m|{D|um<708sYf6gG2zYQR4=gtMtGP5K0AYu;#u22}F zFDKu67|E)KgrRcroiKbrXr~%*yjJZ{OHCO%hfCFmL!T+sQC_z|>zg}R!ru20+(kV~ z*b;e|i^>}lyT~^{;0UmJub~gz{FCK=VBu}P_O|YJ^8TVHfU^WV+OWH4f$c$iS5%g! z&??lKACST7^Ap$%AwkB|7Cc(_$|>@7cuUu&@?>s4a!%(?c&RqaKKJ^3r}a0%SwLMT z4~)1bxKU?HOn_+dzf}CAUgux05=)x4dvxJ03@a)9t>+F)FbcEGn-I!#t#Vx%cVeGL#^(^ zK1p8KR>FLPS{J7M75$AjLc{^3pnY=HBY7eO+bHf+Q*)t`56F7sGNt3ACE8buw7yS0 zv6qsI%!8h39rd%Hm$!7$@w6USkj%W3IZXH%BF&YXy)VBPHT6{ZuHh7!x9u&8mKyig z;%$vCbqMKP{N+(@Jy`%J!=4!WQXhX7w@Z>OaLI+q7rVSuf}m+HL9sJ zp{A{1ViHS!%S!cOLa7ag!1L=*Rque=qY38T#nE2HzaUa&w^p}0V=<?k2sdq#zFQ|G2N<4g{n{?0=@AyP4@Wu&dC#QQs zmKU}=s)X6o)V~||g2+Su1kkWz&)R{!`Zo*E>4)a~`*a(JU?Uf9x;B9*q%n|Kj$bBSCqlJ3IER1aXt5hqIlE;d+!_UvlQ_UnsBHHLeN! zE2DjA;k2RQ7mN=i6a+@QAd5j|L80iY(^r$oYd6L4PstL5ai6q^(QKSr9$dUA) zD1s&^5@LgSuADgu%8M?_pO-m$KX9)})2!GZ{d;y4IRYtoCB zc8tqukHwa%F?;*vE&D`lVSX+e>z`Lr>&7pyoE~SgKRGTxmQh-CY=_L%7f-3mjbGqK z-}{E@2Z*30*+7};5=Epb18V%we3cvL;_Rlu%ze)9-X-T}PVk#?DeDf|4$@caCdY4d%{Z^DdXJIwA_ z*j2!3)PfJ^q%D%8N`&afQQy4Zd$h6ZaT&54Ex)@A4m3RzV8h;aUtl{_5lU!rF^O56 zhx?q-t4onwqE=DE{XI23J3#LsGX#oegpQZ<3m#401}WXTdUXU)TUm(%kFK+#pTr{o z0r-d{Yx1+B)ra9uTps+#`xYBD6vx-)-E8?8S}J^4@Mj$V`s95cT-^rtI@$8IRStG# z7H2KIY|EJNnwTQZs*1l_(e#YxSjBBTJHg7 z9>!W`vj?xn#88EcsE_GA`*@?+^`2SJYeZtoYU=G)E@M@yNt{MG%6J;Nh$KXR9Y+=d zXdhgDeG!uf?uGG1=sHx=;63}eKK8XofVoBSzWSqjg*>M&bf`Ne=PH5_TRnZ(*Aw&Y z`aYY(1T;QK<`5AfKfa{}Q(0{AUO#ihX*UN$F zzXo-Ru5Y+QFA%-44;-%+bRN&mEm2HaHxRyQue!PjvURiJm}M|`7i!rT(L-rw_6SL= zYJlmqg$&`O#8ge4c{go2o;d63-hBmn&L`)3)V8r-4J0t+k*j}cd9?4q@*dwKSLa6w zp`R8ZX@}1}1O@Jw0$ho3!9Jp$+?pdFZi#LiqzJ9!c}&=wysu%>ue=Gqx}Go1qK%cP zc=R;o6-R136iaBa)}P(=ejwUpuSt!cU=bdT-&K_lMjnAN!7NXxH)#JkG)!=^pEzQuJWnYVDDK^1|>NsHkKxuHjY9RI{EA z&4S(P1TEiFhHoytB!`E{u#ZIf(>v*`^>TUShvajXlxS73ZaLyXGGdNN*ggF#?X*<c4X`v8cbV8*nvO%Ju-os zmZD%cb3-<{NaXo$+lXAH8GfeD%<-ad9D zNWrzw<)1@0>d&vJ(6h@WbS=o;FnUAYI(!l`Asn-~mo9IYhrj$%OL{>n zda)Kd8S={`CLVJ1_QfMLt|wHHX_%tK^o?cSyj?`|$$eO!@s!4iz`&AbJ8Mdnr!RZV z9@ys<27hOfI_B=xtRB{crtrXowhaT8gA}SNVHmP1WK-t%wSBbr8Ls^?BIovV?0_w5 zLGpjlVd1F44D!&3c0%)Uw(VJ3cO9>0Ldbp2k_@XY>tKn@jmc`wg8lg{mfu4)$&h28 zhp!R<@@iji#o@p}Q({c1X3(OO`sQD)?#3<*%gx3Ys$EW58~)bH6#E7pQ0Cq8O$N}d;fF+ z@H|1j@8=b8Ljr>Uzl17dTxhwoAsd~qi}wli)4P{$9xjHpS0bqJBCp{UYYUW?Rr`Uq zPG2e{Y%Ir`Us{rKeABD}_)S4#mlF~_{MzKcZNm?}WE8ypo&+b}7Xor$2HAoZqa{2k zH*X^ghk=w&-zqyaRU?_Y5ZP$Yc8`O6<+zLJ!i&r?UB+ANV=QIQ^jz|<(}gb%%+V#D z@3~7Th~5`ZED733`CWalInh-gU1e@%x=SW>&iqD!|SPm;ecbmQ?Z z!Mm=?^=`hP2@g>N!TnL9D3>hQhx^*{W}*$Xe{F!bMGez;5162sf-oTGL5rIh&CmGQ zn}?csAW+59;?)FR&|RD#zHwZX}K$bG-$D}WAS(-5eRk5|B zkhZ^b%~Sdm2&U7=lSXuL4$p?wbwpadw8V0JCBX$PyoeZYYysfe9~ z{L72zXr7ej_^n4nNS#ZoIC*^sTRwNxY2Ysxi)%@ZnbL8wvM4WaF#;vHW*W@G6G_G; zukFgww#-w(X`h+4>m6FL8=(0{o}gxZulf=-Ts#AU9&evV&!O}pICTW{5un$r=+7oY zXF1;2{s*Ne*0Ft`bWcTn2CKCtUX9<#m_U-dXN#06Uvt`N8O{V|lLlbl^`(S_nSfje znX8Uq+1H6I6aM$Be2*(%84$zb@3G~+f7*3v zagnRD__NnOw9$QTL*sISIl#}5_X)c}4QyW~LSE;b>dvG7nadCI&!jJ!a;Xqbii*<5 z)7Ngh$s$@Fm@d4E3gzLP9*j?p6YO{zP=O|C<{SbR#rpe*4{8_P)+(xcfk#%z!hq!k zuBqB@U1i%55;eW+@_YP*?!+JIReV8s;yD(niEvtbUSYZcha!Vez=RFR?8EH4JiyVY zWL}J8%qemXGm!TLH!~xeiMnOV7JPW;HeSe{0hG?<6TPH2-!>o1^&n8J%&(IDFd3Cw z`1^8T9%MTf;mt%9KAZOyb)$KvL2RDD52*5LFJSuoULQvW0A0!DLD44Tl@KAYci*!3 za$mEH;I>c&yJwYWocQ1gJIcui46qy(<&GV<7m`!>{_Q)lIEM(Vw0wXA)ak7iKPGBx zg~qSgFU0-b>}Hnrc-li$Q6jZEk`({wn~z)3jsBWEAL)%h0X15-bwT)-6+ThvyUfaa zCEj5#inmo$%Dg_-(g(_@xbKZgz^}WdqpQNGgZq+B-X}2VxZmUmmeu2HSkW~GEi_Hf znW8`l>60nJwX&>}u;{!+e+-nvCoq!_@N*Ij>Q?tm(-x2N{j{y7tot|Qd9e%tIZ0}A9$3q{}5S8QiakB(vJ<^6N(zPJ^l{mN? zgtNZYwJXSHz`o&M(@dwC1(*-4aCLbBg87riCvrru$&17%8sFLcz0_b_337ah5mH_H zI^~uP`c@D1_S-B(rMXvH=ClE9VkkFQOXKT>mg>}bT4I~+a?m3Bp1Dukv&a7XRTCM1-5f*WA z>fTTU1`coaLC*SWiu(;?vJPuHoVq>u4;o9BKP`JJK2edC;N~w3=*yd>U{GHYzdQ!F zw?%Q8x0J_yoL$^KGSJTr{v?uSyBAxd-0;PkM;jbcJzuj||JsYq`7j}C&eTLA;Fb*g z;}=C)maGoti#rmf7nR=lKyR|h6cQ>c3G{U$Ch2}{|Klu{|NXQxlV?ZvGu?aW938hC zL|QujmX!0A+9UK?c>fNtNNF`DyGEkX-w``NwEIJ)(3+VAnhK+pfQZNn_v-w6?R%Sc zo3-j#WR#DAU{s2B9vi)MYvQc@X@D=@PphSVBDQb&Iv1Rp;40^EkS@)ntSEJVmiH+Z z?}s8tFMP>33>m$ZX77tWbFnPJnTliHdNR<5QxsVqUOkGCmUSh-F$5lP6u#fvA_b|% zQltQmEz4--XD>DcM?zp?8?4tH{=NQX^zsKdo|A2sr{jwVsEha5Q%x>hQN7W!4|Qm5 z(H)Qee0todpZNN|nn)KBh#M-kmL2S8-?6qXyfT{YSf?cPD`;$?r>gq?SqLF?(#>1$ z9bqnIvBK>xk4rMt16O6tNB&iZreG};FE{S`QEO9Uqz^=RW88ObQkUezw$W|hJFQ4$ z?xxp&*phHA_qfiYXx#%vA3B_^W&e2)r@&u9Fa^I|-IglcmNfbgv>0D$ik;_N%G*`h ztcPcPR?|!Fd8tr?aXt;r9o&N3xray6KKNupJnxs^PUqB!_2T`r;4O4LCQ=Rc?Pep` z4(j(qikF7a2R>&hPDDG1cF3!*KKrQg`if5_Kl6qhud~rvc-qfr_K&;YL4$n{!Oo9U z05Nvg#cCcUa1M}*)+lzhzNhDN`s;i>$Uk18uJb2T1^aUzmY1ItLy2{J7}#hms4}Mu zfgE#E6kka3AR(-X5;iz#LlxCoj z(KPgRc`kbvji39w#H#2(a6%?LEiye7TFFTboo2m!?5jlfZYX7j>*?G2>J^aoL{S;U zy=br6a*2y#gzwdW?)B(1iHItTO()9&Gm}5zpvM&-gPcXvzd}oP0w-SB_LM38c0GMt z#YN}y5?OaQ`)k(Ru3iNb!*;Ty6*%k(gJ3ivS?j{&ElC76dqjkI`f@e`dK}Xy)a4eG=`zO2kVPO^5+&|2czXY$C7j+qp{;q6PI6hT^G^&!yevE^95r;q1qPYsqeuK3|2Q1~#tuNF*svNA*+Kl#<8}bBae(X8;P zn3NV~nSk{%#QKCi=uLl8+tXS^1`ZCIRS7<2_TRAft=6EbkJt2tdEd{FzmE=uzxRzCc$OvKoX^mVB6I4f zL+JVS8$3*EDhw4Jeg-qB-hQG$Ib@XXg;R3L9$u}O{Qd<@*Y?!*AV001ccA0#RX;oC zxeX+>Um*g9nOIsT|A-Qo=H`YQa+S@QfF<;PBTo8PYXZn(w55u>quuuDR}fOK1CO+o z2Zvd;&j$UnBk({1uUXp1)}+~MbhW{xJ8 zg1gc|VI|S^PVU`M+!kp8W$XDyo%_I1;Q_--dS2fHT`Ueb%7p;IqT@^Yc3#9D!Y;J@ z7*dDp=QA8bmE70>(e(9`2m6OjcrQGw_fO}8<5{x>tQm0PAQM$@J*+gL&TqfC1KYQ6 zx~HpLvK|fuvAL>3ZM^h5QLpNU(q9eNnV;OBh{&pb27%`=OHCuWE)+O6<{tqG zCiY$f)aqQ5iYnt=aW5sm9Q~SU+tk8j2_b>{Ue(_(;Z8)tvu8P-ywJIRNNV>r)GV|B z%jNA&zYCm`%ZO&KnizTj1G}Rv3(N2MN6A$85q^0ND#X zvf%=@U$lQBzj!eMi+LHDk8Y6e@De=t_v^)czMsN!xfv&6Uba-X?$=3l01G+qg%*Qd zRipr6dV*o4t(>FLp? z6URiYNbj9}7c9h*AE6f{y!ub>gzrAqed|zsiOljqWxl5);Gdz)`T{92imo)<|A_f_9v*OQR%d;Tq_ zFZ8#e7VrG-U!JA2<*R+sZ_fBU$LqnAACQ$VO&?$k<8?HS+o#5~(r)C1sobiCQ@cAs zjnq`5U}Kyw128cJUD;k}vhXoOr*0$EWcP!fA`8r`iM0pGFi&*IY>Rz#5PDqWT+jL=ib^hzdu0Nwx^%^LnT zrO++X>I#azKx{{u+U&X_Q1&L>+kveE?<8@ye;&^bd&g!JB-2SO_4tNI`~gv=mPt@t zf9r^mZ*dnfo^ih~KOIyxc>MwM?3RON*t-8p8t4=e@ZocHZCqele?6Y41y(fSj1%vF zG9x~Qscsv^;!U>@8n-VG3|nhS z+joTrag1lQN;-{lMObrqkH8kBBUDV@ttG;`ZeGDp5mS!lzQ#(^)oY8zHkVF|>3|AG zTg;$YPYA2Fn4TyG1BLQ__%LfZpHAlH_2OnElET3PJVE4>2du(fVUJL`fRcS33&i)P zjnKZ7tcJD}eYfH`3(au+{n+59Go9WO=QO%PF|sV?eZ6^iuKc39YOWop_TxH9tL7Z# z$PCOe<(H;ac$N_&>He!7;KgIdz}_i+PuYiei4OxM`O~D`ry6BQEmfN~5qzSH6g(P} z+i1#0D?_+_JY)}&?x5PE%4PKp zebzOyRSKZ(2vs=c>HS5rS~-bKu4e}y`kSd-A&|c~lAD$1%>;glZ~-PWe8|AQH)p6P zv~~oVFNkgyvr#AOqbtEJKu%ZL^dHtBdKPyc0ZLY%%$`M|*Kr};}Sy6j6 z=jwa(cnyN@=Y21t8;9#um#suwE{wbTL&2v)(afkVUE*%tMY?3w8f3R*sn+}1aCK3{9~R6D1PmY#GY$la1UbsakJI$mEuA4Q#lDiIO( z?NqF<)0J={L_GThbNS7K{KZh=z8vluPpBV8ZM$nd1RmaS0iJVALHApz%%4wc#;0)jO>jEq&#{Dfk@7ckz`_3E#^3 zvb))19Pp|Ay7WmK_J2#UVg=GAI^h^^3V2JHnDjNsId!?w6%!>IeG%6UvZkLeK?%d{ zxdXPS`pG$t<(fC2jG@x;TaiHXY(ml&w#r%el*?0*K9BRBn$45badEXJQq=vzec8|h zv={+C{T!Yil))cUSJB3&+Xw!w1de)-01m;o;6D4X@c7}fB>D9F-r-hkRGlcQ*Y71@ z;JB><_dSN)`q%HcOu4?29tBC;g6zorc;PF@vw)yn12_rpVJGTmcLQ~B@=Tug_KQvmU>zdl0UxFsWFCyT z42!GeJoj5MU!N(`7U@15M=bSP5;)Gwr`>DfZVc>~2|`8Xtd3%kxQv zkvKvIU@4qu*YS7n{YWkY|}qK>FGsh;}G(0qo&AAApkm5x0oWgRE^zNd5?|!op8J|DBMC zJoW|>2rbwv1@qMPY5N>&m`ilKnJwIOJz(AG<0_iwC10gD?n{(oB>PXf*1Sp{7yf`C zsqd{`UR=-#(Ww=L+M8q0nx8hN6@gX=HQJryYO|Yyeh*khe(n)tS>zy!&B6XA-Em*Q zrjJKKBvew<4K0@y`o|P=E5!?Q+iy3!a4ub?vUi%s>R8{><>n9~F_a zXYmri#g=ZOX-(Cywa*7-s*YnS+7S3`N|CHQpQ34qL53%J7RhCjFGn zo9@i_@M`(Q*p?B$8v>E12Aw=bmQKVkh$(MRhy+5>@lvmo)!r++-4_@BBYP@erl=f`S(LvZ7yJ*rD^i}%odjL%93drp$>SF9@9t~A;kaa$n0Betw{E`pjH|@c>#sS14 zE;*-hc6-!*@K4m|10$x_sArG)DY32s&$a*nKA!|39!|DM(c2m@}dDm_L( zqFpKu1Y#DMKjIe&m41J*hM!dk6P61$I4kJVydGx{Ca7%43>yo~!}8bPGd}mna?*YV zRNHZ?uT2--?G*nKVKC?C1?a2goZyM~rG8{N_(7ae!$U=xVy)oy; zqJ$s9Cb(fdBD_cHYknAIW&q4&G!GRK3i?)!vr>4~Ap_|guX#9ymA1u{k2jjeDO6&rl0uGOg{$7Sk79 zUAEVz0UaBkb$B7OA%~m>-@T?Az89VTrBe$kB)SWd3@`j=WDIaFlF*Kt)U(y>JJ=($l zX?9k|Aaw|PsxnDsE3*Sm_?Sq$xvHp zJeyT8gbIN8Bx-}}JOC%yLKx7P9_ zb2*S(;X#=$+{320y~$MGlrRs&IKI&%%fO`vT_z10>^JJIPVK|Vw|>!t?DWwfwGLf2 zSUoEi`9)}cZU-n+>x$_wBAuvG+&hm`)Wa9d>W^_sOtjygFS+UT=l#68OMHZ^@#VQE zz9pKdJc|lv7q-s<{Y1@98}GtD&X59fb(Ys1ug>6DHz?xc6k^&8ai)*nJ){@o(=7Xb z!L;o7+d8PN`msx&QrsBiKF`bb2i~e)0g>C+fyM>J^ZR*!4{pSp@J&-p=SR%0a)%~g z?r6Y*U8uBpxS;=Lp}a&8i}Ozq6lA=Ofn^#PY*#gp>X3TANrknEPjt8vjJPMZnrd4L zNCx8yqo`4_fU*9JED)U8_jwmj{bjRzylmf*dJ}btDm^0y`G}^-qjMBUhauyh024(X z83D}t4#Wja(BN?i3~Y9iBD?6J4HCs?=e>@*hO{WmujfQl{R_@FQ~Y8+=F>*!hb%Ri z#ampIA>sYL_L!}{nEl^o@=^5mqXU}I85A|V&EqXX)NnnAVeWqxC%>U@HarTMwl*Om z7kr7g2|-0TT@Du!j7%~+_s(Dv-`B=gFv?O8h85kRcRui7r}V=ekyXW%1t{9s&d;ts zNqM4Yi0e>8Azw74`S%3<6Q)Ey@NK1sc6qdLB()KvDdHdLrfBl_IsiFJL zrAn1PB*?gdwNnnlexZ|>Z$X8M%Zi=%fU2S9^9Ex}w-Y}`!3%U!*O0|hQR?tjFit@5 zlk3pG+gV>jm&!!gMk%foK_*4fC|F&_doi}y81hz|D)DjBeJx3?huB1*Fw(epnhQ=d zvt1)pvTn#MK1)=7_#ezD4GIq6km6Gg`eihIi?^KM@fIW_2Z{!VQGMlpIfgIxg0_7a zY>#SBt#k=&*%|A9$0>dDp- z+Ia7uSVZ6NSF1pjRwqhZ)tU6K}_A`G1}VE~u8A4?Z}RSh$Oc%_m1vuM{BrM~sp zyDV!*p*xXN^yut=pn7a z?O{yp>1B58aV|x+hNLd5yD8%GIjcKXMj*5!HL zU{{r_U;DDsrRm%!TWl8ho+VJyZfe}eb^X4L6?j+2*8ls8O8-kYo5p;d#J5v=9lW*`~dl=~t@I#*^Nh=D$W`F6Pab1(l~!OC1+kS=Sm->Z+)O>I!HL`mKVWth)a z(zsbQdu1l1d3}-B7wtLsV&8(F*b_8g-*4tnsBk0#WwUtP{7>o%&s+Qv7f$%v??)lT z;RwG6b52gDV+M`qkMb72zfidGRylpOeqh_*n32sri1sZ}-})JpK0oDOR>;j{`#s5= zB(r;I@WpvGHqG4lQl7Cdi8ifIGgv9l)h3RIrzxkq5=uPF0~`eq$)c_-EKDmc#DB^jZ`I)${xb}HeI`(fR{5s+75HkQUzq=N z2X&V-yyVjd-`?h{NKtN65Hz=9QN2<@`M)Yalb21lhWhs1OD(MDHnDk0<%`Lq*iUl}2s= zVTxmif1*inE%i-=#zycfI*xfiOlnmw3+$WsSGG2JysPiyj4)0*_P@?D)&8-EfES4q z;cE{%V6&a`eGwMH@L%AFZg6b#zV!>Yt?t*dM_>%hRokchFMZVI$@FE5Tby-$0sz=& z>HF}|UZVW1P&uVP;?))>{cdoK^f;w^Fn`o&67t&f~+DvXGhvE1v&5p{hg8j?#LbXT6 zUarKo+Tb@gFM&B#M6b`A(>=%Wn4$B1_@W`e;iNfcsX|6mV2A`Sz^b=ci8}T&%1QRz z#1bkR8eAu25YO*$XNhcYElc|LHv7w5nr}%X?xAE}{q2#zmHQAKw-7aYylL_AhxMqM zV?>n?{YgeAw@di7{-C*EC!)&MQ#3@&crh5oi6kmq%FB0>VQ7B)?y)+A9$!f|$;nBV zLygehpAoyP78IPAK|rBakyJgsUXpUqem=MBWjjsKl_G(b4asVuS9e*8HQ}8q(Wvfm z5XwQkJwoR*wt$x(0r!u$Ln_CC?9=k~*P_3wsUX0}zYCy@V9J!efI8pN4K6wZtvSyU zUJQNAS2vCIQ@v}HO3vxD-}t^h9}WgZPtR)qN@EO8mu)+?+5u(~ai;2xB08>@X}3DD zeWu-s-c@CFS$hEVr@L@9xZhfo(9uWYBhhcKI(Z>{B@8H&UN^Mj7J&_U7SBm{ih@{C zTfBPWNN=IFLm#CTvf^ih5j+SqboMyF`k)HJ*vXhD>n7QYB8JbIzP^Z?c0GF;b@XC* z3+w%#7XE#ow(ot#YLy^77#8+Yf=ta0B5ZWGMZ8HK>Cib zo4#KrE`W3Ip*L7XE*7lnM(kUKVFTqwk;D@W6vQtQ=f1TkamSTrbSFPU-teEE z()@Be2XY_PEbYzFnWsyv)<~3axIm|4T~T@7;}hkepgjG$un>Mn$(_#5>%-xsw^FcQ zDe_Tr(xn>v2tLO+bsGnZQYBlqb&h!OIB$nNw$PL*0>Ap=V~(?NC*Ds%9PJj<6f-^toJ*dIK5Y<35YZ zuf$$BL~ej4I|u%nC=GWLmFMwgFXMLh;aMZr!h}$Jhi!K4`+cfAk%s z(D3-I+S%nMm>y^M73|NiHxKsfkk>m?>PmqScrIigizu-A=Ai$)3FmbkmHS7}b%czhPIa#iXXS0_cv(HFD+nVz==4i^R*Ie4o&R{oUZvcHU?j zhO5hXD>WK~i^3H~*ZwRY1FlnqL|Oz(f^|XYs)T(X$kzbfkm?qk_t-*&ZNXl_sl@+S zIu%q;O$-Ix}(JNHVIMthgphdJiV*eU(kJ6Cn z-d><@8R`CI$Rd+{#i$meFKrKsV`9R8Fy60ZgjrMeiGqfb^eH{p&IS9AIy&&js+QxR z4L3u#UralDr;B{%&HjEkh0i}^gH6A)w0j0a8ys`?dw@gzKqIXD8=EEmujqNnip3Lv zfq%&W0Dcicjf=IdxHg==uXMt$)A(jmzdRcuAF`=8=L5~cfuC_YL_&A+MLr%)f0!8e z_efOi`B#}Jf`7-Fc|JVUJ2K*XWskX}e=fBQ$-6&VB8NZLk-3M=vnO?2@`GviX<*Al zyjZQHjF?_ONHJj_?C37{57skLxA0yk8Z2Px==ERcM!hWX+Xwc(fzXgexx>A4TZyXk zL5#B#`y@GA#9SxRbF!%_M7jgA^e;4(2Zu;MTi*v7;`EA4`Aw)^T^&?lL2OCsZK6?K zsGFym6F+_QfMO4qc}+1vRX5wwi%2fpw7%1o3?HZp7HZ)MoBr zI8=J8E&Y*i@AsNy3N|W!Ls?zcH(bgiHvK7$GSAl2u#g^g9MjQfd~ZSN_mHN2isa-Y zU^v(5c(l(5y>A5_dHdHVt8}#8@0H=nWxqw+$KL$Q`6gjt(7m5T>@6v3K?`y#+Sffh zE?#axT$d@jwcRVo#Z*?3{YmCH!k}6*g@ytGJ^rzouB$QoG47{gwaQnc9d6-O&%(#X zvc7P9q}_Gw6L%R8TK~BXJf!>5i2TD>g2ytZ2PGrxY8|HHL zZg@I4G}JG+MZ^~vqM5<+WZeZT(9z168U1`BTK@Asj>{L~@us6EuejR#?%$N`HX zKOb;)!zUH&^KaE67v_ok(_cf5an+-X*Bn0M{!QRT@uy?@o$mQi=8lNQAqllsU+~rf zmuVk_M`~*!eTY-h3}Bj02RcKaFY(}V+Q}^D+yvfY-k*h^Pr~{h{t9pEz$=GqFbkEo zR7I86HLr*GVt04+;5<{yZgII+2H}7o3$5T~B*H!&(bno+AX|{eqaN$K8KB5}n6w8k z8Ts*(+EM`;u1IOkmANpE9!|popc1xOKn(Tsgt|gunR-SuDuRno}r!~d8c z?^voFpTsls;PtkeNCwcu=MnNPkkI%2s_MO?TCaUVSn|u+fx5vijKb1j0wF_m>PZnJ ze@;TB(&%WyyKZ|md<|ZCVf)Y4J8H&~(_hx$W~X)c8z{@p`Ptbwn2EI9%l)-v6eQ_F zBvm^^wO{}P%SLh8TYuHm5i$S(7v!Pz;~>)PcSfJ@^tR|?0rG9>aAxmfxbQA6e88~}?aOY$E!89rk%mocx`wne&26k_Z zHh^t$^Z@ijV?P5pg`4bihOe;RMTWh_{un>6#*ZS>Ai}1^OLVMYC>>mX3%X}C?R}2- z;W`PtIQ+PJlWQZ|#_+}z%6wObb6o;{{6)X-n`fTrzAdAPG``f+vH==>q&Zc&gryT% zK;#2+g=tL*-7*r=_$(8pL$X*&}bNDCAncJ~vjvuXtpJ!UYL?tNyt{qXszH*XU z!vJ|=A+Kd`Fj#+f`sY>c`#p?Vg>hsLND`Q#ExJ6vF5cstVyzo2RrKZnUaIiMd0##u zVSi^1VpCr!rA>?{+@#q0ic0pu2Kp-gMdp^%wjDRkv6RC3_8a#^DVM@j2JM9()Z@E7 z&;%A;G0ZLLXS{giPnuNXFRHOo7lKU0y1h8(5Il-g0ealt94&IeOc*xRF!=iw@KpJ{ zq2E1gT3;!?xYA-`qgmG&BZ@#G_=2T2?rvdlcmcSI}Qg z*A{iGFJ`Znlc%-=7JXTc>N4Y*!Q{%%WWUQP~ly}(~ zJPgGdHVeTZkJ!c(m`lJxWo4i8m3yA40B-Ju25pb!o{mI@ArLE#7j<;qnW;8m^pQ3U z?hhyC+gK0+R%T!-mPcS`F*JkD~HwCt&#^W#)$1s>O3SrQXropaE~?v)hvBbS9rf;~Ae*8(63d>9SoD5$B4bhh zWGf%e-5o@98~`w1zwj_pyc^qU`eSzwzo5Fj2Fv`EQP*9#d=ZXpLy986(pqQ4`Q4a_ zSit=T?6<~FpEE!SHHkK(0ZZ@cT?y4{*Sf>dFwk?+&ALA*hw;FKN2}+VV*RC_agm;n zh&P!F+Wt`AsUUA~ndh;Vp#63~lWxD^8A>(!?|b*1+j&1{u!4RnK>EX5qM(l(?_H|wQif_kK5kIlJ-gMYO(BLzu z`a@4iIY>XA8yE*v{>1budB1pF?4I~R<55vOj6eF3xv0$rzUB~vcklj4l(!zG$O z9;1k^f1L?;jeglpIW#dj3=#&^{fU3pj%dqu_cz8s{K$14B(82%9r2>F)kXU#<$^-; zR47ujrKaDXL8|w2wUL`%jmLDVcc{DeU|6N2{5i_Nh;ALV1pA{( z=6LP`QTW2j?BbS9J2taM0`Tp}T&6k*64!Pe8}~;tX8`Gngt^~`kK@n$>4hF@v}l)p zOQPAv_o$2X`SnFpMK%#O`L}_s^pe>^axf#adInhn2@)O+fq1mA2$Q=|N%aAGiexBW z*VrqXDfIlq1iK)BkLN@|!C~%4`>e<=wH9ZKyTX~15e72yW2+|BX*}(8xffSQ26(Xr6!VVC616h@QM5KO1DhZJLWvjV^VjQguPK%T^H(`+LP z*thWUPoBpDR2XIcN0K2RFfZp^`S!ksRwOZ!qrV7!6&epSteui(Ex&?}RMqUgPxk3= z-+BCi7GS$JpJR)LRI@OmFj$7sjvecN@0--A^nG?-pKr7GyzJY2J9D=^rhSR0#qygq zPnB7#mA7vX7P0!z&a269m9mYJp!KCt(iq;gD#iWo<72q|o)3%<+&iMK`3cP#_&YNm zKL)y+@)r}=_b?%(--YR%Ez?#YQ3@=mG} zyw-z|mt*N-x72CHmPx9)y-t))>o^Zwco<8d!j;h5e} zNVf~*d88^7uMha~ynV~VEBY3v zyQh(>AH2~)Bfyt4R;}xNXTv5@&)-!!s|u{&z(yMmg>=xlZ`fM!Ywf-`!_OwpQTnd1Ub& zd>F)vq7!<;eYkLrq-)zG=vHiH>zmQ4$ZKe8cKI!3_Gk`O6W{^H$rv1p!_`7|>fxL& z$*no&DuF)mJ&PeykT;Y2-2m0Y&8r;UKqm)2J&95nxjb6=2cZ2*0hRteNEO_VYI%o! z*#|=9eet?aBCE8#E{t8hJ|?A@2WmD?uzT6(C89gt*L~-|Fr@|c(5T+_KJ7ZSoPF5a z?IQsDFwyOY_s_)U{eI})=$5Owsg+MAex z^*8X!M7!TN6fPUrd$1|~-kC9F1%|CpQyQslO%-^_g;L&&RJQIDtOBTcs^c6WZ9^TR zM|GiXGu$-#PB!HcS!;X%V2#a{QkT#P>Q|G1yFL!f=|g}$Oq9u2ErXSEUW)xFotxsE z$RGTA`I8q!Fi5;6Ps~W@40%tU5s^XRch<%Fu5f%kzkTej=%~&flFz`b7hpt^wRJ{~ z4Zc43CD<)b{=NO`@I9mV_t5B>e&6?~y82#a;aEQR#~C>EY@S{>eh*Ry2n3ojC;$~G zbBb>rFFVHXAKVa75?#zxo}KG}Hs9f~Pr7k)y$g?+?=BDpy`JnoM2lI@O94T$Y;k_U zyi@flW?s7HJsb`Cz1%g*?X4(LPt7|}O7eIhEvR2UV+H^arO|y)y{{BSTkme46L5C+ zHQ^n#!7iL}q@4Dq0fPhnw;v8-+4I@Rt0uY*OgS#{n3C|nUH>8-3)tjt$l)IL5nwl!1g>ziUCj*h@hsL z4+aG8Cw{(?a{r((8dAyFTP%NS>w zO+N%@;{pTd@?n$#iS-&8e-6lmy5-?c>Fw}*8C97jYfo=58agM8{MQWjIV=5%aTM=1 zqV_fN$GRm?I5Ux8q$s9g4oxOK6|q(55I`pr2s=97Fnx2a=lZ@gbW z1gx?(f!rX$!j~Kfm(AqEede8c`5OqceI@_dpTRzOB?nJq7}eIw-Z=~C&Q#F3Sqb5u z2jU`)9)UvL1LzQdBlbZu48gpL-yS&$N1Lh$H8B9{t;VrYfgB7`2aHOSp5VkG=*MM3 z*9>TT#B)`m;aIvpNJPY!TXH1dI_f8mdT08r{4+Sd;z?Vy5M zU7+hj6+XZ-nI`Ac>?$=$V~D^@`8Jw6cOxOr2YDP^@U_3jpW`WyKg<@H zm-(7(BrJe<6Oj%C*SuiAI~@a;m@9j)zc>qbDu0h%X+rMK!Avr~AAsouQ9Zx{9&fmw zNb17%rE%BqPX-92_@_Ad{eCLFtS}OF3K0P6_5z;&6M{+7eAJ%ChF!9 zD^|P=Szg4?g4#ETZtt)fHv;>C{u%V37e9TPC_hMB=|ZvUhlix}$3yhj6-uNg#9@X2 z#&Xr}esj*T;TO4M0PoycVi3DcYbL!5J>8qJdj&)vG`l@tJY))<{hgpe zNhD*BdbiVBt`|eA)qQ2ZsLyzWqn?e9zE#^Fs^h~->pl_(eM7^)DqY2()uG5?>m^r^ z0o^NJwH9I~OWM?2kI%IcgP{T(s(C)HkB10`nKB1sYHgy)&gc3nu2S8L%4Zv>vSDT9 zvnv)&YZE|w=KV|nXcoiFOU%bGfIkvOOCv42oQEE_BM?6r))boB{8@xIqE#_S z?hk*p<#ml~`h{EuT{;ya=^z%1so~sGW^m1x8p}fXIFZvT700up@(9}AI~Yh`RC9t)yDV_S;zuju@DS@kL<~2{ti;?iT{4pP^qXUqHeSUB`pX-1Xc0iLJmD^(kKGw)N9} zB!(j_g|u!Jj3H$5L;mcnUOEvnxF$Ta27weuZ`>u|LG6h#_i{O>`<>hXhLlGm-%n^~OS9`G~+-{O#{A5H%N*Fac z7LeZ8OMSl%^2Nb@FLrwj9`i;hNoVR4Je5B1Zf|2f{-P@ykY#&6uQD$*omjo z(ww+L&DokOZ(8qEl7Yp?clDZQG@s{Rm*95nYrrr*T+4#V@hZ#gY#wh8n5J4zPUp?F z$|!=~-Z}Q1Rm`tX7HGC}r5^Y?6oLqv##m34%BT;M{(YdqzRvSiIq|GUz*&>($j`gE zb=F~~v0KCQ1ZYVN@B8Z596{RzAJN-Lx^7Fl9ffSU!aqo+tm}7t-S5{a)#B8~Voteu7KlNLkP!Ot6u0O)vg4vX7&`} zzKq23Sy9C5&9kB(3(s8?mU2RJkGg(oxX#u-W3%F|aK7Jq^n)>rhudI=I@+q4sie%H zkV<$3tpiEw=tg2$;)cOil*yBh3Q0WH!RpHzy3rRZ-&i>FGY|o=f_jdI;U)Tj*!>l{ z*>#K};M34l|LX0t8{b*9lk1Of{8IXhfdduU+BKJ^uB4p!!Q9G*e?uYl*8PrjOHWz0 zcW}6b-bec6jmJgy{8PUT!3Z;Se43}aC%WR@Y1X&*k1TZmbE>}1N3S`D4dQtb;BG3Q zfDH#Vg!_@V6fno34kVTY$P<}YXudDweC&I5`!U_B(aHL{@EmD^8}VJR#1U`S&rJ;p zsR;5OoToCLdhxGQ0I$JDb!jbbduZ)P*DUc=NEI@n&Rf?~i)Sw1Z|?vV{y39_hxP#y z2x0U1s}Htrw^2@m8~wh|`M9r7d^~m7qSF(CY~6$qIp)!aw@j)h?RTL+Arz;IX2Q`) z_O0}#yQdq?KiGHRLO=^UFKQKP4Sbj3W!3_Sg;?eCjxxDaweJ1Ub#i zmfjR`qf4oq_R$m@I1g$IJnuv70wgxt&yqtBVLm?B=JC>{@<3cdi?LYG`Bkko?x7i9 zw>B(S51vs91CzKHRKxe+2NDl}#`1-wH1e zn{OUo>gkZ?;%dYfL4lV>yicnm%{3>50!$OYp7$x?Z^6aLFGdt?XA=1vZZQ9d15d{b zK#&Qx^2qqrZ}|0_a=(U#-3`|iK;gJd)M`G!A@5ehUXjZWZE{KKsk0V>cORi@eoip8 znpftOX@a|V@f@!%sjMEOYCm)ui|_6@o}+jeN#pRkk2iCQwtEU1DqJF5PgzV*Nif`q z`)a-!i1O#bec^F3+wWyv;VmYiaUyL2w4__(Ew{L=$4`(e@|gVEfu7I|@MGhF4CkfV z=l*NG6baW{}WBpsa zFFR7*&V=}_z zL&^2%4`2E{Vs$Et>YoS2<1t3YJ81l(lb#1aKjY{U)zBMqRttNG^S<OV-o+c45!N2m;C&yTQFHA8myV#qGJm;5KXjhCxZgec(a@ti z#tAIA#v_6EGel*850Ie_k|yRA0^X1=1OpTE)S4s54Q=OaUTxZ ziy2P#AxzY?#QPZ3`(y>PGcLi^!YQX#L3{V{9wV(BP=i0>GrpW` z*9C25TEYIT86`n8ddKzq1>5*Qeb~E`88^@ZAQDi@66qnag5>+%Y;pX(LCDslHQ1VU zJ5}^@MT?buIBD0VrdaMQv{w%&#E`0sIU`YwUiF~B&M@XxO^dqMERJ@-Rxe1^tqL6g?oer6Tp6p>PqU7ovJ zJXQ(#!=1mA^7u_YiU1cA6ipt)^|ei_)g0;^NK7 z3jaa|&N+Vd7pr*?8pZm1+_byDQi$O=@*5sgTg~R|70OP@3*EE0Rh0m{ZeBe1)!7GB ztM`5(_^0Ii|h#rk^D zt0Kf<``mqNUz5QRF_1XdG_g}0TrJVn_o6lkIbG1JD}V>x^TQfkGM~4*BW$Mn{GR3Y zd!28QLZsI9UEIA3noN)OH{2xp4Mu>|B~)^nj@rQpZ0e`v4%Vo{rKFg1~*^;qxb& z#Eq0#(oX`O-Q}dffgQ;nQ0$FnYVwL=Dj0>c>pmMxU!;1q_I8**_i}liXL0#Wt+p-2 zuYD4CxISObXXL-ci7e<>?i&2KP2NcC*Afqo2p<`Eq}oPh++b9sIqirBc$w@?EW2lV z<23_CUjgO=AF*yeNUA+%bmx!D@qF~cNZ}p(xWHk{eE>%NOucb(a0~$9T*i!l7#8Q^ zUv*zxZ1=!l#L=Ggzl0UvqlsOnHtSLQEU~<3bQ=`xg>URN=Muvm_s3{rhoYTVUx(rA zai0~8&vbE%&rFbnd;VH?Z?wbG)2XbccE1lo{O;Dc;?i{cp?&T_J-%SLb#vu+SAcx- z@d4y*&l&*9(d`KDk;D6CM)ZrqmyMtTGq=b+a25(R<4OMwMj_{T5bXB_m>k7Q4wtD7 zhK9e~oFhd|ZTdi82EIs^pg59GmwtHPKcdec>|b>PHb%;LygFVI&K-T0uFzc9eLD3? zVd6EV>Kw3{1*_MG2k9}0eC5kQt=M?V*VYOrO-~Z=#DADFKK12_RWsu>#IhJ4q(#Ed zVw58EmT>&M!;OFK&atpA&+7oApe8G+*g7~@ir zD0SqY4#CS1_N7?SICPn##qYQTuP-DX=JK`Lw;q2mm{w?2Bqb4LJFC#_DbJ3|x&P)- z{;AK-Hoh8IxNb~d50-v$z9-5Ors}6kj={Aymz}`TIPoN=5n8=Z`v{-S$J@^#E)S+P z&kRU2=H~vn^&5)~g9DQEH~(nS2A*ClZa$os2Qn{3HXL=e@QVcQ8Q1{|ZrQ{sl+A;y z9laC|kIs9q7Cg)3%wg&lxw}Q){uGRm$$nK|3HMkZ_s>Y{%j5kU zq}T-Ad$V<`9D1J^=$AN1njj;vZkgvOgk z->@5E>UGj{5=drVhi!sNdOY59p`;DL|9PRt%kotBee=QO$`Q{id{Wa4W-gS~3H8N4 zD+4<{@DfB6)C&c;KU%iX$t*IbuSNBpI9}kE>s~;u%&)czL5Tb_+C9ijbIaq|g<1$C zwR9iD&8tUNCmHXb_LHE=y*{O-v_Cc!NWx8 z__W|^)P#C6s3eWPwWpmNarU{(dqqj`M@E1LH*mjyA|P_J#uMbXM|#8a2Tvs}1@95o zp$qB7@B$d`5ylwq*6-ur*hBRZ%ssIlmxv`!SO0s35kRG!gvlxBZJ z_uFraN;8!2uSkx^&siV#L7^$K_JJN}i3yg|*W`Ze1;n&B6uBR^@ZGX4D%BYSSb<){ zAN?%FQv-d?o^D(J75d^|q6n{}f4|)jT|14UNw3qDB7J@n^L|TV;Z%dZrDKB0Z2tIpn+wA>e>kPX~N<45~#F;Fl6r6}DYbi(OmU$K;=J4lu~WHW>d zytX6$SVWp}wkx;0PeU5=Zs6{5d{kSh7&~X??ABhQk#N$zd{WN83Rl=R52r^v`$BzR zF(q>O)-|}J#E}otm9$4DbhOc+w1DOnz8l9a=zV!74Ip8b{#ea&;fBD zsDx8_L}kG1$o?KwkNoS}ABp-dWJ_1%taklFeLCX8<$NSIe4BRSl`n}K|3RE3SfQ>7 zznD84NA&jDJDcfmWy@VI4Z+rDPFgG(z!1xA%~o)pNGn@c^Ms0dNJ)e;f_Ih#Z?kN6T}yI$FX4Rht);0!ecp>!o=mKtT=}p z1TFZJsFIi3MCP{z3V7KUnbkpBtHHS?_rlN)TdpU&ak-e}=5*_r8-tM0M%Q7*R$S@} z;;x-UH&YFVd9OGJ=tDdt>A}n-SXu=kF4Kg&+4Sc^M9j)!CN4x1B)tx(CT3 zj~mh$#kF{JLRP-lhxyK;1z$frS^xkxZm8*6=l4|0FhQe0P0%O%)mxg~@>hjX%>(7=z^qZ;xhpN9mL8PSS%{hc%?W{DfgoMt|C9UPR2I*2`RE)q|Rpnl0vS`x|d$@k(-yYuUiaHwf zaiOH`%>9Jldp!A{N?cUqXQgzz?$4xsa;Z;>-mhCiLu2sGO|!o)<4wF&D;e9dopbFY2GLK7Dm)8{Wt6KvGjn4y1kj0|=n5w9M4 zR@GiA(lvS6YFK}rECae^9P-<_dWfu8@#;51HbaCDsrlj$Klo>MaK(8TG|a!9pT6g` zlxYswQX9ZCLHA1N{|u4b_UCK=&)|KrPw|Ys$wEMHw-6|YbQMs3~G*L!)Gu8n$n(W&%)9y-E0-b*gao}m)4KiEW#?~<@eE<$OJi}{&d*ved! z4fUB#On9oW*k1^9gm_SI$xBBcYzah80%wHC=|B7IbLy^wt^w6{x#OCOhv!7OPa5Y7 zU?AdE2zA7ip3U{2{)_y=6TFB$4D%_F;G=u(QA>Z29;#xzgjWz@9Y(#EQ5Mim80M=Z zv}%G>1($q~szHoZT}}iNGn<8(T>O6aP=lzO*SNm<2#)*v{JuH+NOn*5hijRiHxu1f z%NV3JhbI*y*zlShBF`VuTeIMY(jDJuBnf>O?fz+Sb7kAJEKnp9jR*L~Pg(VKl3%wn z7NXa;|Deb>@a%EqEQ{#D37}<@BrjeV$XBpwV*1Et=dGEJP?hnDtI9B(*L-(s1e6Z_ z;2@t*HsAWU>n;%B4&|aN`2~>*$Ar%Ic=<>EApNNIT$J6nnbxcnvw?gJ+T-dAtxINy zXdj^=FK0-YhpS8R;aeat`Om?=pV7gk;hee|G{1~Q?qD&l5GB$S?zbcOieEb*Nqo;K zb;x1j(QuOAiwB6B)?ZKnH{S>?yGH!3UK^U`RGbI%rQ|P^is%*iJD%CobjRPd$A;-! zO@!6wH0zoD>SOr>uewLWRkfBz*WZ2v(9du1m_%{NHX{CTFRwd+1o3ll1Y+?lY2tjq z#Xc?j6~4^mZx6BnQnIi}cBkv6u`j5;e{quCGYb7e^?AXXz*hp;c2_p>*XkBcH!}B_ z+ogW|p$1L|7!7#jGsi4&1Ucb7c;iD?4anor)Hh|&p4ix5Stvu~z|MIIUQ#^Asd}jjeM?*rXQZcf zn(Y0uCXLf7`goZooB5pfyHb6mn(|!u;x)c$Lf5eFIi7xf^4n7~0Dl0R_cpYTr`)73 zXiy6Y;-+x@I_GU?{oX0!(u?mhHoi5Z=wjeZI_%L-8x%CrGpQQ>cq(4SnaTgsc8rC- zqvr$IIyQ@(XaW|(2j5)$b7=`<`4J0*&PJ*zhl;THEdyw#T|^v)!vtjkj)3FwYSbU> znh}3dbGktY(~{J48W*~1DgZqXbcWn``GYfB5YvE37|50(&VxNg7y-FGsxu`Y={?kh zop%od&Q;GNkGeKm_^S1FhGRjoO&N?A(VKp{AE>A@tc!5ec&JoSXO^BQYxP7Ob0~q$ z*sx8GpW@LHbbV^3=%9U~>t(r{YR$^v@OtfGy}`Z}W>7rL#_CZ%48sI0a6}+G+qp0q zjv!?}&g}h!j;&zizqZuIaCT493JtbR{&uq(_I>y!8a?V3d1wlnnhgaq$Hm+8Ij5E{xO4hM>;XL-9dJnT)*4bY6lrCxd%YFIU^R|p&$&RIGXZ?&WjM=d zK@<2IOaG%BHwl_2I`|s30A{GzQ3608Mz~S9F4%)}&je$6 zvIV(<*%jhaQDjm%&6AE>Cgs)XD~VtoauewXzD9@fX=%aPljALx332A~7$0{QM39XQ!CMb2IJjwZOZ=H#{v zWyIFjUmB!p?tatxKMX)K40Od!zG{O?ix*gHMK;FoJx+Ovn`&L&7szL#4t)*VO4!!~ zi_|8O7pjjfC2N#Mzm@4a6j*6EvzD3^P3;R89+qt;WaRX{E&FqFVV-1b#3z^_5|J+)!?wQ5cAf=$p2 zDt$Wb0SEAe0EmM?LQXIKz|7~zAQe$UsH|t5u0&*Cv&Z0djzr(cHoVS{j7dj2pX%J! z>qCC_pR*kASKe>C zbL#I9-7L2(o8mX$WaPdWkE37_%H{=Wx~9H*h60xjd0>b^w$N=#DS5lhiV7Z8P!~`# z@rehjIB<4^|ARFp_TAx{??8G<6lg)O{4%rwy@RhR5rH0xJ2~ru#7o>(e9C%Dhb;!Dp@o$W{dd z4vQ`t9-G#QJGNCCjjRA>fB6A&J1=0+zo-pjTMpx{X=qa-Dn&{DOl~3vKTmy?&9}a# zQu{ega85$*x@XFy?PtUurkd+l6ubcY_1Eq5L-+J3!6HW?rG+awnMquxd@)FHq;S?@jOk`3Fe z8(a7Hvo{>44`_xI0+gS3zx^}_Qv0MLW*U^;pqQSB#b@(%?XRGP%;y25q%-^A4(Kx_ zSFb)m*tnu^DbSKxv40mGJsJGd{#--5C_<#qF`GXCP$>{&j*!&}#E+czlqZ)LM0i1A zXR#fiyt|Z|VQefZR(gfYMffHX!xkrXY39mZKA)0W%UaoJ@?*~XKux*yQBwx;=ud|W zSdZFVY@9*f>BB%Y2Lbn(WihKbu|UaO%e1L3a!bEPgPoS!|ZZ4 z@7HIjUGeLydZad5d1n&EIvI4F?hjl01#9h(?#(7K>2tkraCKYRcwHg)mD*pau=}g% z=n87Hs}+!6(Qh3wKDwfow?s5m$@_86#ROiD)#rOQc`OdlZBYlD;`=W?kZ~J`4=s6? zTyBnUhTZ4Tt)udVLDrw>zMcJmadey-&-vX66Q?xeceVNRU6d?J5MiOC7j3JkeNuyO zQWI*fChU7oZ@1Tvr2*^y-G9|o-Kj!t4Cg#+5`o#4j|iUI1IrW6SFshTPB+=v$XcU- zN$tLX>6S$8>15c;!QAC$`VUb}zn!dosgEM}7aYcc$PDc6o*dw93hN8e)E=e`{N0h2 z?)O8uqJA1X6|Sp){hBKx$+CMAWf1S*Y@qyDjn@obO~?w1rg4VE`DK6OWj1qZmf(DY zU+;+~9d-zBGeHXi2}RAg81u-=lXx^v;cT3!{3Ib04NLioKFB$0X)<_OSG&7sMkSfQ zVISo2gJ?-S1DtNFryS*};|=TH+jS4cwi#?lZV^4)s$xNBdC>tZIKYhI9Zog?ikPiA zmSqzo0s9YsA8(NObk6(|wM@h_3eUl`S?FO1_;fkP-<|t(I!~9P4ih@biJW_U&VKme zq$Y@nx2k+I_{Nm8*KiGESFj@z! ziTHZC_Gi|V)F1>wn-p$Xy@+i8sGd4G$zqcpbCW%I2_&@=g{h}*$6gZGcJIUebe3@h0G*7_-&7~(xSd@Q@Us&Db)7)u3 zS;fokem@Gs{TCGQ2526RIHdr5Q0xNcd|>mJ$}*!SIJ>tnckfqvRv)5#lcW=UUgkl3 zaP{VY&;&0k(ATCh`Q7J!jf@o#L`|k_mlMCdGw__}r`7~G#FL>CG&8O#tl8sbAhjQP zC2ki8tSH=Y+%X>|V?Yde>(1#6z>CR_>GOlm9n)2>vcdR}c38u~n}_Nta3Q27^!RjP z{REsZ)(4WEaE0nJ15sO1KWq#cUnPy?V1sohuhk6KZf7xezS7eUf>h2 zi}^ep>7N212w9uKrp@wPcl!#$KwiZsU75J{m+A#?$(D%mYi#JF?-NV+f6fsV#4OFW zGAsA$2<=VNg1H4j{abAs_q05AgRp2b}j4wggmn5EtRxQh@Dz5=|Js`k(~$^+w{clXHI` z2U2LCTd58pN7Wd#+fCFyvUBk4YoJa1v85XtjKRWl+L=pz9y!(RxLmX*DER|s;G`)KM;gRig;*zUA(+nLRK+!^cLA_hP!P=-Y;J-I6atgbDH$) zgT;;1#dE#Df`GpXpI44yjuWGQwki@*QXP4`3>G&uArJFYbnNw~{Mm%832VVKaEfcb z%d^CgHw`{GvSM_X=IvB2j;c+q0;A@53-8}HD=hwg`Q6SJCnka)zc=4leR691?^MD! zB<_fP^G*$*hnOZd{?udUbH2PCqlQVE$r(?G_;U(#i1X* zYaB|3u>tY@8uqDwH0Mte-5|h+PCGtX-h;aDajSObb;hhSES^qKKTcSwX2Skl<1;lK z_H+xk3UI6vjDFE#8b>uxO&7Tjbwp)BXXE3MMFlt=*RLpGq(qAjJ~^+E1-gMv?3XL45&xQ4v&5SSjq!|MCS1ftW?#+Qo6akTvLINif#KYuQq{)zU1zQrLnv{gh} zo2Tx_PQt2kYx7sS=q894x#s4Tp``hIc!Y1(LpS&sc4-@}%i{pf=KT_4tUrafr3&VT zj^MDYMwQ)xFeX*+{Y=eIiRV-Xa~F2oWNhd6G%&l|9}LD$k@Autf{XiHtrkwINDUvU zUj>*^{oH;S6vg7D->^5!bMR2~oF}=@tR#vyfmWN`{A86!c(0#e_Vs5_dn=#LF$i+m z^?R`QC6)*P&59meIX{f0#Pve0+Y%o!kL=JOkHt|nIo}E@)vfcEZSgxIwAlYC!J|zf zjTDynI1su;m%vC0uZO8tH7J;|wZkWiZb>sdZ4 zA~}>rK39zG5|Z|%(bqIO82kmYtEOlD^>{^n1AOt9z>I#V0hPIW1Wr9P2yE>~%_D-g zY&li|dJ@nLfcMIXebtd}vPaEZZCSa4aZv2??yPV2Gp*WtDs5>49Q<}#~ ztRH=CFXMV;_YJE8x~SQxs>NU|9t=t*E!ua7?J+#d z=s{mWqoANW6*Eo0!Sm%NV!bOpUf~FHWJ5u|g~wy<5Uz6i$KKbBlhr?BN?Cs=NFCJj4!E9g_R_+n(i=}&9z9W`j`jI?5zf^E`uwBUEXiN0I$YVH{!<|@B9lQC+_3__#rqdQ> z-@4Od697sUn+x-KE!*wa3pAa%FF-k86y||D8xQ}2&z{1$;ppXsoUeG>h*|1r59{*eo zxhQyNx0B3Wx>+mYWIlD#Q1Q*vZN|2pzc`j-DlA(vzMs)x#p`yR+2Rm%#P9JROXu3I zoEC-QzvLJ`q8uWp5WcApIh34#{eG->U)S3EZIva3ImaC18Ta$F#Tq`JL729ISv@Ta z97Z;;-=&>zx0>FTs5RWThow@&rmuygX4!6c(NW?M-+2u8-y?xnkW%1Jkbh%ow z00W4F`uO>KAb=i0WT5b-#uMOUSZA=lHbuZ~3D4&k*c-&t)cf|JxD~l=3wEuyr`>}K zbJ2t|{E0sO;qo!OhdZnJ%|7O9=$R|R2JA3OT4rs-pof)l4MW*${|Y=oz)RBbkn1;P zWVcXw-`BC-=J_B9dX0$5u;QDeXq^B2?2#f!>pWe+Z2mL}YYGvSvR4%$>9(OiJe;W} zM=JhmRFD#7uNMm5@!h)a?{40V_nl`A=3xkngFefBsdA?GJWTrKKR%4FC_LW3f!EqX z1rbb##cpqer5{mXQrO#e;Yz(NXb*!DHUmiGl9a99D0kQpAW@+-Nglm2WkI;2;zpNL zkyc?p+FbmkdsX%E*Rlm%Jds|N9vlsY?2S((^dJF4I$3Csn=^5CgUeI;ZPiL>9R7NQ0?(e1st?g25JU# z$ua1{7{+}+TDEZCDt^#%`iU;6Ye@yv?M=f`FB0-F_$V~l;5E5jLGT8b&<6(4uX=S! zUjl6kHqbK8rMtb}QER*FoiUQ$8p#X9y`$&Og^^;=Ikuj!0L-U(;xiHY58m*4GN3Yj zDlqg>p*n8I$G5v%-9CIF63JiMsq=4lhW0kDAZ`)dB==cLiGMGans*20J*?;}Xx0qT z@Xsva>RI#U04=@lanPIS?NQpt+%UV(-Y0TUGH&)Xn3=L%ubpk18UG*)D0INdx2$yC4$}-D97dN(CAIx^wn(^K)1$%SW zLSoG4D?mXYI`K^c)lPSKsqy(H-^t0xGCSY`dG;LK5T#~EjFk32W6bTXz07DXw>~pW zB5NuWd9z!@ZP}hfS-DYVJ<)@e=lT$(@0O*SG-ulb65fbRPdLV80MqG_&?HD;oN&Ei ziND_kQiZ4!FK-SJe&m}XJq9d8~P?|cML~3T6Wl^==7yKkZ%suR}1D}D6 zGh6tIwL{mh6Z|}>t@7;K2*hae^Lup9V!_Mv0IR#765jIr#ZFp#pf2FjmG}yeo&oly zkRH4&K)l!=XBx%7o^-et72o^c8CzcVN+8-soVu%mr*YTE)EGdKKAKs>j-khT)qcjY zI+djF;>{Ehd#(1msQl?2?$7pF1Y=pN=dEX?_M0tP6~-wY46v?j9wLq!BWzV zjcNu+O~$KOXz?Bwjp)C^O@u8G=e~)9GATJ3C(+hdF77WM!dVW zry^$l2we+;ihn+;LKJ1RG0Pwx%BL9&qsFa~{Q+|iJ9)TAU|ID@wTO2C{}7Qpx`2F( z6?96KW`11dNZkugIOz3oMqIm>5xD3!kyu~vl6M@m@}&ApovNApK-ZNTBtJd zwaJMF>;_Za7*Am;Qjd;`h4FZOIaYes@)}M|25g}28u6QrxYre<^X4?8who4AgBsdb z`v(UvR2|;HxgMX#1A0*Qi{*4T;FY95qpMeGPutL8D5b^rF>PO;bDG{}!T*_c;AYju zltP*_?__tW8sC-sw?OVh=l$c)?d?F5lfq+n33hqQz0O ze&{bFTeLmC1yd2{*a+#O7)9{_kRX5dZxf-C0mM+ck3mTiqnpeYIE%Gs{KS3<%Tz*p z=ks@#u5to*=~)$7eY?~%OZFuHk#Z%suGPYfrv-LP*bV(L=^o5VJ$a8`WqH0X zLLLJ>n8*;@z$T>bexY`8nzUOMe0mCY&C_Gu+kU&7W{Dl}3|s(JT6RutU6lI~*sn`> zgy}D=Ioy}nRpR^i3&H(92>fN%y*=Ah)$YJQxV29JMt*!gnwEWGcH!R1Dij15FL}sQ z$%nZ6ey>c`Tl|+C_R-gaZnZ4C6`TqW!{v~h#=BTWAIipk%& zVPdq(407nlL3?dRU6XYEw(_CdueIf&s8o{n?J*oo`^f3h$Dgp69uvVhyoT7K+devv zsF%aVbrb^qq}^Y}L5HjWG1fkGD{igD_~*jtq~-jc>HePNs`4~rj*QB+&jom;i?r_P z6Yit&-7gxsL}*M(7@9q108&FmUT}=E#f&5OzCg<0FTSKU=PF9PG(eFyuV*h}jhj>K^d}xKue&~E+WC8L$c^{dOM`dV+Cr{#xQkBiwlUqg~1EwkJbeg&RTM$d> zS$gpWH=X^QLC?xUnYHXx)%PH;Y!26%$&atU&c*a_xpEMJZ%M=TchLS`4$xG-+csH? zxJUDHnmDH|a|B?`%X#~)ovEWT+~u@+JJ(HC9@O|q$@9gI*xkEc(wHB6?^2h3muNb-Ie(fsU2LAQX?eIvt5%tnW2CGVFfe)c03ANyGs0bRQc z1FTSfCJO1p@K+GJK7sAnM~yM6`sV8n*CcuB`+Yz_0Zq--{-?9>_}*_Q)xMyD5*b;Y8kv{vK&rwv!Wr<|er zQ3{IF6UOy`0Q#LZP22QlJ9-4};-ECuEmeE3GPA8@Jy|+=28Qmm@NY9ir2FxlXLVq_ zg0UZ?<`Erxxp`3=T(xhS)j_^13t$*^tbVu*zqm!Jqi?BoE|XDVSj#g@2B%D`QFW zq6&q5K>|RNXP!T`84ACnSKrO=t}Mn@!sX;5*v6Q~lDY4*UjIywf|09moH&(d*TNZ1 znd5?u|9&LBZkmwa|%LYSe)|}k?qW4V1&8E!Bp~+trYt91+8y_=b z6?PA7@l!mvQGzucdp;CDXTyh5upXD6nhM`SHoDUMgQ z3xR2VquCIRqmKKrDevU2KaKYIHy^=N6F0MiJY`cXW?vFVBYHed)Pl27{L0HI{L}$I z3PaoQ#NwYKyVQ>w%INSLAu1xeRJU_?Aa1)ih;(}I0DNUbIT!zQ>Pr@`q5muw?M6o( zL~x1-k_astS_p1Wq`XC9AHVS9okt1@&sxq`+JCa*tAf7i!-|GvBY4; z1X=+zof$z2lIt8Wk~k(Me|sKiefhdH`nd)N3zDRSMC@%ir6Y#c>)`NbeT3ue2}v3p z8s3q89;MT~-%k8nrZ_f_U&Sr^9al?oKrd{f`<1$3Xdf>utv)Uv0Q2;#cA|1k@t`|xFjb@~luOBe!eSI5bhr~Q)? z(?g-fyUp~4;9QX)IuubpF4ZHCedBK@py6k%&u33z7s&~X?fi0`VWeZ@rWaRG@Vmp=Ee>n(xuH=to|Yt-17U~cOPI(g5X!_h_f89@%0%v zwMQNr<0#oD`hkTgw2jz1e(-H9+)Y$>>?7!D`eCIybSL@NO34x7hua&=m}PCXpr5o0 zJGl?<`jOtZ4@MWjsO8i-!n$(Jeo%8dvrY4Fg{K0zbU!U7rhE%fwOJZTItsnHXC%jp9yO?q0Q=3%knyA-vjwxaX+F(Ya?$?r?e@0Y`z`>~k+uvks? zXbQXo$2RAHy6%8VFu33eo*vT*34rE?tv3n=6nNqGbI@X`&E(VvoH~j!)ywELEzU9A z-YyZg02GgEoZYfhI;I3|{PJ5fE319S3D)fsN4Fb=-|>S>(ep_;Nkuhm%=x+xLMI~f z1^=3+=rNuY5cR1=X@G4ooBJO@njfUyTu~}MNY7WWdE|J$G+aCbu3Q!FL4pP+P@lki zDj+?89LKE1kiw0m4Y^fqO+eo{OZr6nWR-q>@X5nBihU74?|abvWYG6<^Y%z>B4mn6 zxkS?#pRsF{(J^@UehZ&hJDSZ&zx=K%F_30te2gTfsOjYIH(jT2$5pdKV-&{Ak9%!! z-fD#(wY+m*IeqoxblR+NU}CP^EnKFCia~t0`^VEKyxE6y2L#h-D2KTe@K!f4a=Vik3)O$AB z1Tg0LwN<_M8`2-jd=L9n=f~Z{OO7))LIcIbAOA zi==%(GO)_Tb?>c{l5Zx&uP-NmZ^7TtaQR!ZM$H1Q%Na(% zsk!CP-)48No*wK;yp*n~F|Xln-U^wQ+~;t=ALhw3zD#C4$VZT}E&mYYQ?|yP-W==G z7l}>VgrHVgLYOvnk0-t-<@*j`=ddRd73%Q3!xXS3fAyzEEmF&_Pf_{G`uAPB`nh=? zHCj0ycA-%s)jjOMrt^qd{?hBR%zIBaDUno0yE{nw) zuHLPcy}Ju2s&li%<6vY(h522!pzeV`Q+xw0<#|+xEXB%TKdvv0M(FLnuW4SrGSyyi zEZtJYtfE-MZR7-3kM4KdM8`gl2Dfbr*RS^YN}fYi3H-intVh6V-02+)eLW5_IYnNV zCPg~~lj)(67Jym(Ly%!FeA#A3!*EI#0|qh4`eGiJRPt!_*Zn-DrTyOjHMN<&3aX}~ zdu2cIle_t@HkgmVsi8$d9 z*@@MZ$Yfq?ti1gW*CR@6kyDXG$C0=Fc2}-Ok<1-@XyW+Dp&9YTp=$C&TV$p=$4odr z?T+m?A0f9ywK`kGwTVVS$b_UXMu(EUZHux5e1$!NzmIO(rC-QvfdS+gPeaQW) z;$AbGMI|u}5aNoa<8F*W+Ljt z#2x%%?$?uExaF5KiSwGy7+I;?^Zi*LYN)IBbKB?#gYQ6*n3Lap(_5|b#r!>Tz;Mpf zG0s^Yre%i};6dc3KXU=oH*B3F%OY5$%nyI-P4dK_yw&bIkH*+3o>53&9p=%*_FcFj0+N7nOGk@< zF0P|KA^1~}URZ1gG?GzVqZP9CdLAeKibL|sym>+I^!hMcCQkU{`s*x#^5X1b^0|9I zw~beEEB9 z^WAX1McQBL=eKf8-+&*R=p1(0G^Ik&@R3KD8>56lbh{;p*^2pnbMXO-{fm!GCOIo% zfBJw+uIT|NZ5PGE@hX5E_{A#RrVV(a{*0mkRj&ruqkOTRk8OLWiF7 zj64%?M10-iE_PQBW+j5?_4oGnR=39xP6f~9f!D9bWK@=dT77f>S6S;x?IyxwHdvM6 z!YOECdUo!1g3odzZp^QFyo7)Wi`d2ur^xLCk&*&$PV0^9R}v1*rr><$ilU*Br27A6H{oD z%pCSB`jFg*FBaK9w@rB=Ec8qDfJX)+?T0By{WRohlwg?O-8NFHM-DbB{BRr?hbZh;P^{D#m?POw{*iQhHN-!3_CnPq48L{K-7sCuX1E7b7@b zu9U6yNqV(kS(#Klj4|IynnbgQlQfJGl3A|M?@fLRv63d&`S4<^@S8_f8%!~-TnTU8 zW0Y|wMPAkqU{W3bNX~EcIJ4FMIk=D9ImL=c%S&smGjQ1FeNZ`>I0m%VNY5}A^EXjq zJ@sndT!;GrmyvwKEGXqaI6;CSq4N{mp2Yx$bu9G}Y~~1N(Dv*f)!UD;8#dX;P6GDf ze-mMQj-Ffu%YGG~Y?M(8(7RiTRkmXBzdNo|8-S-j46$N+;(VAv#&%Nfgmj&R=A`6= z{L23Q;HUGvG$o+53hzf`{@dunv5)QZ^$;4`q>!yV`s=Y>k*;Jn9ApBAaq;j!nhrLA zY2FvqE|Dmfoyr#T6)!9LC1lMK?Ox>h?0bKf+3JN|pLTZS0T1TBmshzk()_E_e2q|2 zM7Q&9tHEtbyhh@ndB&>%6_7tOm1?zRssgrya5E{T-CGd`?&|#(DmQUdGaJczb@#ez9g4 zqWo0?w|W}S9`S)u#gHoQ;qaM}d$>aJAv^Z^?gO{zdJnOl;z#Y}c-C|yz_7G`*jw#P ziaG1WM?A`jcYD|5r=j@pqb|SsJsr}o@KsNLKC?aqE-@nbFKm9;Q^1!jj_>NlWOF?+ zFCN3DcWK20A#xB7Z}$R^G2k&3MszcO@;-6-MK9wu(UB8;=*J_2kDn=guHg2rUv(}_ z(U%_7tiC)j+pXeju{Ak?fW1^WykQ zldpwqb+byHeqjgoO?AMJRqI8L8@K7rO(ahH$dWv$8L#i2iIOh)pEAm|BiI87)O2%g z2K~8KU%a*0*FGZl^VwXXj4mq`V}DkS%(n-(Ec>CR0J$disRl;xG}i0w z!HHxOtlMR5B;7n+`yaYlh^o({poj!iFn;O=f=#zy!RJXC3 zcniKMm**qItr%wd`3lOIwmL%a>-T{F{*|^IGULJ^{)*gZJ05mmoYbFSHMEvqLc^2f zYP-bnJH!bso*cG5q^0&5Wduyd<$c*_2>6IYaj11AOeG)BEiZ2c396=sl57bemW7s|v z|Mfvd0R+(Rn>#|U>x5X8DCVGA>|^Mf7CY9i;pPo@?{!A!64383k`HD9T8uBkLNwGYh6Mv?By)s*8x_E?a*qC;gHgH^CWb3K;iQk`9S#bS-a$mgbV>3)de1HUr{p`RkFm>b z_~Lcpl7<6kN{A1%Rp(!cUTcT>)DEcbm9;t6+#$uFLa zQ>6T%NUi((Jmns1qkgYd?JMe|%I|S4Ux#outGphnU05VtNa7~@14+YzMQH=%dqO4? z5F7B|AK`W4P#^x53e9S;!Pg1Jr-&R(R^e^Y0#kPAMA}ngyNFM^>~}mz8lT5c$QV(| z>+;~b&wI2Zkd$aA` zGP=Vj@U!wAVNvel&9y_R5#Hadc_)O1(BbH(mx){IDkaphNSZWLK2+81v0)0>&L*El z^;)4AIElf>oB+k~{iKZ_d{+`7nnc0wye+;zxhz;?eCffr3GEgW(vTA_w}w1oQk3!o zf-KKC$|5>sjVBu zQtM5tj|uWCIGfZ+eP@f)II`FxCWOsK&A(CS+rQk_WAxoQ^asNE!^`IQm6RF`=WK8Uvo(o4iTHKC%`R~W`w9?22Q1iyf=AM;d9{8_n$7m3FdBxZ%otuXHp}b*~C7-a&2GAY8 z*y!n3UrTULk>@jUdLLGX_$8b0D9=~{CMO=8$lriCY@e}}wZAYi zE$bHy&eHwysuvQ-5seRy(0;kuexv3oa%JnQd0Be@@T<#y^j^+tLygnXLK~tq90m%qBYK_B=OjEn;WN!AC~1cS(2dzDvZ!-tnVX)M9-F4bv3#OAv9zd-T)9pGhzm+PVY;oW$4 zXwXMeL%^3~-k-Fn4pCXA8oNHS@Af6zpXQK{+;72mD50Y>bkADUmosI6HNi|PJea@d zFX_rba3;=k+wD2H{@kPT?tR^GsQklk(Wg7t!V7%s!;TkPDxBs!h%Uc%N*wDqieQA| zde+Zq&wtVCj|B(t^K$}NG)b_`>&Y|r>6oIz0a?sE`X z&+=ePLd@#p?IWW^6D&)EHh$q{6PJYD?n_&qL{FLWf~wkGx6c94 z7MOyvKO(oxdBszG{1a=^SoE)d23_ncBi5!l#-1KSGqnHl?XY_`!vF$AV5alm!nypA zE#vU+@vf%K^92RXq9^76BogZiLYoDbTb@l$LGcz}5ZvdamP@$WE}e1d`5AW(*F<}H zU~cI>+Hi`$bxTf1C9sJNL}zhgmBgEdGfQCGxvy+>q%>}DR^4H3wpjCtqkxg%*h&<#U;fO_{b7EY5QR|zx48H_nyiCU zIWb=Y3-0q{({e_7^Vb*ubN%}Bgrs^siMd&ggwhv}&IEK~mLcUUry4{u6JwQRiX}#o z;l8brEh|1uc>DMDuwT~{RyIypthb*bI?hqxed<=HgUHVJR;XS**6I?&W=K(Lr%HHna3L^42qCGXDkijS_88aNdk-Wreb1G`>E-Oo#T zb{rk%p@RHIlu?hhpg!#7Q^GNZKQfTjHsPz=GeXilI**r3N-tF*j@c(VNgw8bf}dLk ziuT45$q!x7Be<{>YPGP(UGToYmD#**#qs8aiar@}3^#gI653ZZV95QFfH%M1VhBxy=2w;1l?>GLP zKhL``?E_Ha^0B?8)Wg%Y^G}DFNio)5o=@ycJ`k(d+uNS!dP+-algC-}vj8!sA{^E1 zPb$4%Th8&jnTznyLJeddM*2cb$pek{Id}4EGfB3Vx}kdY=;V!trDpZpC*asSaw$)J z2I}Kq12cNWAX3X-n%gH?cmOa1pT{l6?(MI(U+aY#CIClHj3Nmp*>nCuFO`%wVSv>$ z+ER|K98teLfsCIX;D|9Hax|#vIJ_@)!HvkxO&WS@@G4)TuKC_n5awXNI-2hKyJ9IX zDSUvldH=~=ocvZb=bp+{&PiJzqJfr@!WW#t(|}HlVHn)y;}x8y`r_Dl*J1aQ5^0mc&80e%?K<=1+IDJmeQ8)gxKFi4{WhR7-<} z6j$vf@L9@^8Yj~$HgQhZLG-(2j~#7k0}jET%KZ#>&3bESBx<^?4UL36Stp;5x-IUH z!go8U+F+zVfi;>9!^+`E`w+zUWn=F5J0D#Z*bri~<@0Bifnqy$2}-l3y0m0_;SXC?5DK74Z znErU~+8!V08xkFgw9o-RC1bG{gm$ktd^O6-z^5JUyctR#Jg>{&<<<~BO&?~BaaT6x z(U=M8A}11NBouA-t^N5oK^OTnzul&d+(KFG)aolzufJ7281OP@rPRBEnPlfP+ESR} zX6@hid^_=CNJatGBe{-=L`j?);&!$T`R(^utPjQX3!uU7z9@rM7F!tCJ|E9nhJmOh z>AO9+mSm>wxH<8ov;eU>q`yc71CK*KJLlWZMDfmaMwmvf8jpGzrffzPu1beCgK}*i zL+)X><@MXsP}1z-+ig2eSQOZXV*O$X?(srU$nJi_b$MvAXuKMOPsI7URfTg9b+!(V z=@9m0N&F@Pd<>~PbfbQGEPWWsjnQ2z4VtQa+?4PnWrXNO`{L_kxc(8{-Th&0?(;df zK#LtHkNWc)Rh3@ew%Lbby&HnK3zzmoAJXT= zCuetrJXz-V)d4uGYNhuDMWnCqrUrMXmezN~A9*xxjo;6S*Yw|KzqSNtYwx*?Cv5o-7|zu_V2cg(TM8LFwcgo^3qU>gbV2pEP&ees6z24Y;{-hJeR9Z1N7e z@VkhyoeY&aqD$^F9Pdo`7fnRv)$Qi}4~jc6p(zDB^Gmaaops;g#+BCEo9eVTU~tFw zcWe9nZa<4m!Nq)zUvgd0A!%D$#K>%Yb>&ZWynY?9La@V%FfR;4Ao@?sN zR%T^0@7@oIAFkIRG`Qm-9!{P_$Itzef(T;T2kl%2RS6Fya%xaz!ZfSw%Sk^h;liiS zEr*pJJtFUVDqi~ws?~W%qC7rispG>Ff3t=yD~%THVEQ7edF66)pIgbx1jiL$vrW1+L>&tEbhg5dPE0_yKhS&oat}(X8a~)fB8;CCp&kCK0uU*FIbHP;|@tHQ|cm$-BmW;WOPQt_|lfCHq*Yt}!?v)@K;3 zi^M;e0-*00Ly)xFrz^t`ys+N_1&WTkaTmPc7>B20!7IDJLdBVejjXh1dExkoR~q_t z+9xZsjq`4%I;4#7TTs^-Y)Rt{xSzsYJ#eSPQdtHEZVs&=>H7>VjDP$t13LL?a`41K zrJLj0S--#D!7Isulq*-CyB37|@YlSTAs93x&L+YJee<|YZSeD=pGUr_iKtND>(TSO zUkfx3kD~A?=Abb+ZNg+q`cuJNz}qUP-oJC#DdnH1=lQDHRrQSRYmP_@aFSeK(qm0` zZ3yo>yeAB*tB@QKj~7~}+}lfxQBtbayX=>;xRW_`7)$Pi{Q2p8Af)O3H3SLLK&No+SKZr759<#pK)cwRK2(Dl!G z#6ap|IKv#jP@6a!z9#wtDy+?OzXB7F$ee!3%vK812~P-m=K9pZ8DZU6DD8>oyBmaD zlW`@EvQHio!n>uPG#Ed6jx|m1)wMb7H&Rj7rj4sp(BKfbJD=B)6*m6CIywP=Q~MJtmYpk~kGo|3Gdet+`|hLlk&n+4MohmcOCS zr*s`5CnXb;M0wY;cc@Jid)ZG;H%&3QlI;SEoSI~&x8;e~=l#`@xkz*;ex-#DR-V41 z0>%?1wSsFehk$jgpiNU)RPaYr|)yQ80y)}QQ3HbFYx>* z_49c-%mGh{?8;n#B_ZK-l2iFU?d(aHPkA~Eix;R=Cx2lYwvSTeIpvN~3u@oezK(Md z9;sIlkm!lCoW&o9Hwj zOWu!j{i|cL`<_H*pXWK{#dwPLbJaBvfDpt}1jJO`iU<3d+Cnb>L-hB{@}NMdx;!A! z_8IF=tO804A^k#uf`}q1SsS_X_DIpdQ)NTT`Eekey7U|pG$#933EeXPq|7|T6(Em8LW|- zDi=#qtlvJZFL*sHViqJR!x7s(&GiiP5-gM&3ZR^{HO1=!*Iz4p(2HHxCr6 zVUvPg2hXs(TKitWtY?>ldF)J|J7g#7(CrsX@R&k?nv==N~#K`cPUnxXsAxx+gn)!R3iZcw?aID5M6qq{KimGz~18+Y|8wL@e+O8 zcok`~J0h)*YvUNf$Uxg1{`K!M+)L{x?--493LY&^3x$j2_p5nk&C8E38ZvI@(;0oG z4l`%@5o9VSqQ^jyw(Wf-M?m?H4+;%hVBEj7`x8yLNRXU65{_grJHq|*{U)M`KF;WMzk)xZC&yIwwJ|2nzKZ3Q-;d65S( zN}lKCdpLyWo{plsqu$*`+2=TWFsvk)%b9#{v(b9xfbd)rYjFB54`LjSEkA08ZCx83 z{)%ujnrRMxnNxR&-Q&!h2tH-B!<}aJllai@3X^R2{`d*JeQMBTMs?BDPd4o7=B}5^ zdhVWqaAr=1f)+I=5=i+6y*A$FG*!vx@}ZhO-mekL6)>mq9|*SH(q2H@`AgDy5?o4D zVl!e_ZgPYk%^OL|iVaDS5}h1&0+v$iFiu8W{o`=V1+-4}C8>Xl_{0_n?e24R-U6B! zo?dvz>MY%^PkI)X$0;{+LYB6Kf<%Vkt$nGHu>sDX-Tj>J{E$mlbfOOyW6J8;-}@K9 z_Gac;aV|kq?Ky;LWQ@&Z53vm3_tZHF`%eeNx?w~=xD9N_2k>wpD7A0xz$3iPDr>~i~B`!k8j z8z}SZK2G5GHL)JDLCbI}hfm;kfG!p4^NDxb!D+ijPi%fRghY6#TiP1h zQ^=znhQ&mIp~QNf3djwxOJ@9L$%3@~F^S3S%qVy8<$2uVdt}FcVt_T73qx;Pg7%_7 zD356A(w{GC|A52Y;IZ=CJ?N;-eEmG5x)=Ub-CtC*knldUZGAdKrYbicv-p8P=x`v( z(5{k-v?0Y==7sCMs+`Ppqy(e1u*1%kTGcRBY#CJ__)G8?D^s6!=8^f?d z53-!i2NK|o7ZvRzof#kgmIYC7t-k|lS}HSI5wf9MPT1NT;i2-I7Q6ZjH ze%UZkDI_QRKA&Rxm0pr{C_p-%@`pIzQ7lfFyI`FjpZZjOFK?PZ3iSOI$GMHh$S=#5 zond{zZBFhk8Uz~SFvE;Jrw*?3BEPtD4~wRgS+%~RxBev{BF3M>vbL*Z)`nAR~{7H;2vVQX`_^tY1aji%@hGdA|U zM6*DyiJ!(~-8XN7#4-eG_e-hgOaPv~o`UU^3*cKkPksl7SmiPKXWXz^vM&^`7of48 zoXVN>`7xpAeqR<0i&|eFys=%>3LTm^kS*};NXmUGAa(nUf-FU>xh>0Ehx}aDxJ+sO z(LMouQZL>6ifyY8+{}WIB-?g-N${rO)6=U+1Ku8uhnusym_D0*K~wcmPnISCm2X~u z^xW1tZLE|E9OOds(DozAi#iGBZ}UqbE>xuQl}wQpG{lWs^t^vE*|&f4XB|~hgWR()K)Cs@@!JcoTIxSEsk%r7viaJG8vD3ysq{L1V0CT z^b_*cJAO$Xux?4q->@mn<4vp0b-+f-2#`7MD~SofS%x32&vN-eu|C2z?te?lZ!txj z%v^B;F}ldhr5@M^*lSCuD))WDG=lEp9+qFHa1VazhYm?f$ozsu`gWQ)u%5*sH@f8gO1 z051PZgM|=W5^V#u70d9eqo28%I2UKw=VS{?9QPI)=XbgNvO|0jh2S31is5#axZl`7 zFEN^%YL~ZhrXD+hL=iZ4Iy}v5hG9@z&f9x1-2MBX=_0u{M62!d1p|_wL^ck4IlKe(@AYJxM9xu+c;Y3o7il-Uw9H0*7x75R>WjH zZ_LP6!dRkQBwe!$z#>cUu!H-Oj>GYZr8`DAMgJgAa3rpud7n+UEAcIYfz7T;sVrGa|UCiv*RFCLBSHXZ&h;GCUe< z_v2|98p-?J;oewso$gr`nMePMM%;(3Wl-I(t-)a@T#EniBS`Q2o^pyU-#t;{Qt=$q zE+mY}665|zO=AzO2FYiy1V_~m$9NF?G%PV+J6s(GYexOb%Jy^^WgDiWzu*{Usv&#d z*T-RxH@QK#(*rWmcn=44tmGb=H_qigG-RLT1)*kGPe^+>Ch`(^@-NSPt8DWaC3}Q! zn*dK1g#X^F)e1XTw|i2#23Bq%l}9t*PyFu?G&Gw=rNXd>@vs+p6qoQ|W+1(ZBEx8qD(^k7$NT$5 zymS~v>TAL~`*S(5CN#aMa=n)M`*>2I2!@sd+Xc?|d1i7)MIrrrO3^nMTtQ^QNp271agkJ=neO;awHFyqx zddUjuVs}r!NV?yLa=65d;oOCdJTia!-!;Hvct^0Cd0>@hqF@t!Kr)EXhr{#Q!6d!B ze40PK)Iprbiq=>yy?qr=NYn}_?qjo(dxPwok(K6iDWC3AWbALj@^?**STr8FpABdE zmo04jeLvrSxi4p14+xx;AZki9->PBdI8VBRCP;(7$xxqT<$6G|`+cSc3m}!^BY<9L}5{DclqEH2J17OB$pj=nS{h?1G1^)q-M;J!xbiXzD%X@cC zqA#7}ocd{B58k^2NkmO$+NUa5Cc!Toihy0FmHmioU=Iw3=ALd2#w%l>+dtE<8q7gq z6Ul&GYrcB*#Gw~AzzPjbQ@a99g08JfMIt49w5whh+^AoxLfgYiy!t-!8E%s4tVs~v)#mlK$_>cwR~F*zH%K;biMz!=K_vaR>2xK zsb}A>+`pq#>f4zh=7%5@ji?=M^d!e~F(0%Z^ap&Jsb(NM?EYiv%(hfTf++e+AoC-$ zAd`ZCyeTp%ATs0E_n~gDRo!)~N|7-$BjUt93sEShQMv_)$AK#6=qK*4@}JycpJ@rN zJGiia&QNxQ4#OO=xY7r5j^+Y`vgA!}4*zw3cps4hi8I&?Erlw`r^8)OTefAML~R0w zymkcyZF`@dprr}TD9%CO$;te2=Oc)U2n?xN zk}N|Xf&bCk4)3GdCHo{E3~;=n^)OEoPX3!w$w$LlUGryrHc1iWf+zjvkv2P@&%toW zr?*HpXx3}>7h>((>)A39MLXGkyKC>m_*?y`OYUy8GW!g$%{S2Nu>&vi7vbA|a59?x zpHweVhwt$e(&ZkreSG3*|3#%S2l6}`*a-Y~EHKBYrkK06TYa;+*f$#Pf8oo3S0Sta zm3SJV=r)KaO*W~zLR*gjQKHbO=C9@Q)ytx<>{Ierg8Nx(UpU+55^(;+4nrBj5e)2QPIb zq=0_Ps=4dL36}Mkyx8J$QI!q0!sNR&8b(C*3}$5eaY|Y&@0V=;B8WbUeOIK>U7L_? zkS#W|&+XzM*R}Tbetf@2rajf~^E{_i7C#Sa2}SNX#`|Gg8hu53`GKQ>wSrb3Rr2+F zESlz`G|StseIaC!24G(e&}#&16XS(`z@wecxC;yvM3k%~r`gFid#H5=fT!oc0DUCk zZ64D*kb1}?eWZ$bO}9L#uU5qipM^Oc&eT>WDt&2_Xqb=ML%53u6hGBAyxv>Pjcw1v z_zP@f-X$nDbcP?gVDJ%R&duUl?CT@@l+{a?ox(~!&&%^RliBGLf&c*r)}DmqJ?rv* zU+FRX8?$1&8QNAd_(joO1-Ip&l)WA8Ek`H01brCywhO?l(r7&gfiD`NknkOJ&}x%xIOwiNR&46oVvQ;3?Ke3{TSJwEo4`%tf@nycxsVY#UYzGwP zBk164E28Yt4te-);unKN$T8Yh-f9u5x!BLVF(&*_xY_c0o^J30^OOtcqxTf;@I&jc z-1hujYnlBXGPxg`Z)pkA;CW@hSmWi53S8k{xqThO$jA2_-7G>MpV%nkO}GotRvn%p zM>=7M(DJ}KfAg<>r}{{&a{a0vu3^|Q))%bE#BeU%biRn7w849g<7S4m4#*eikt$j2 z+w$@{>BIwv)Unf`5F01c)P2Jrfe~AKW9-qmHB8mb9jy&yADg#Cid_#UqY6r5Hu-{t zOM^;Izz^HDLp{sW1stOkXEtT*vO_o1Uztp3k*WQTo%*B3SNky4JSm%6arSlWMx9QYML_g(OaEvo15h^_ zDQg;BKa4@t_r>~r5uKGP8RzjJqw(r7GznTIOLzWONl^1hUYQu)J6>AYVSC&e=ANg$ z%6r{&>R;3?O26A$??6%05`U|JMpnL1>@THc~+&8vu%iRccQVQc7(K%;dQSD_X}xIw90k(Z5{y-s4$UyB*GJO+JY zsMH3`hloA&ETV^Ki%i(I#5s4~Pk>QVa1LqRP=EuNo|Hs@@y)wQlsP>GUB4QW{J8LU z^NLm)WWL||cV9y0!2eIi=^H;*-+6*~ar&WIGWPM%D6j3zTd{)D_M1iG()ntj$Z{XM zU6Ot1ZTDj_+b1)S@Ha=@BSnW{Z3zAC%# zVPo$WIKk3-(=wnH2d_%nL9QBl6Q!Ar-Z@M(%Qwdvop;Q6L;05P{T=~=-In*5e8Eo= z6b4?Zd;u1W2rwv_UqiQ`ZuQJUC0{-#jdqN8P}g{;3Jqls`wQc&m;L>)owAjh zgLcbp6$=9!2R7~<~c-H zd950TOd7rzcH0mUzX+fkl9{;fVP&l2y^_R$kQEz%iRSl*F)8wfiv8h}ZVg)4EAF=+ zGDYiEsvi?~miDs-M|;*a+qiqZdX*yVntTuZQQmK&?Be7C`T_0xySJf!rgHbm#4TmL zhJ}R3LWgI`>Y&Yrz=#$5AcDUYpFx!R+OTD5Bav0DdnuJB+BPh@>1Nqf1A!fL6pfApDILBOV8ay1LgqWRJ2vU$fUq+Ggt_ z^sqNtT<3Z$`nzWA!_%twB-Y*5AZCZS=B@oQH4- z=1{FSqTf77GZ0N8P!gUuE`)3j0>yDk4yzpt_csdhYoBe+-RT&eCH8>huBf*?uF%Pd zH*ORmt*pK>GP#fFux+q1nh~>ep+N;G#r2z0saW--#(oA&W}TB~3S|$Ol}9n_@D8@E z(>g6!{R<1l&Arq6l&F-Rmi~#Rst36TZZT)}R}^iQ*5uajkdUkJLIIgGS0`who z9-+Lb-YvS;i-7nw7m?d9#|n%b;&;%wGMC%e`?t+OHn?%L%@6RS{&U+`feLGf6y!z{ z0Ta(rcDukxRsD*(T3}LxclBpKwXgOUk60~!%l%?=+9|rTnwWM4n4I>`#xc@^|+Qir!zUJ3fmwq*4zo+}=sHA8s!= zud)E>=8rZ3fP>;ih>ayUCn>i8ya_V_iAfqBa!sM6t|Lhtk-F}$e_55n{{p45j#)3JSaN+K%i+0Keqdm(di=XzUezofOKxB`26|| zTywqfOMGI(ER|NdSC<)+y?nr#jjgSWJKoHc!xWT$d z!HDhMAfg3&3!%G z@26KzA2Qr8%BBJqONz5w!Nv0Xy7%QtFfQ+@=kp1NQmyXd>!YpsAi8Oyj@hSTmhuW`oO5)LG*r zSc{4Lw!{7Pc{kH2&-Za5;XD0dx>I?}MVZi72cPwnGizT%$zSS(7KMFuJPw~Eh2gEu z29KBc*`3+dnpnhx~`Grg-FZFDu9zslE4%n zsO4CnyXmqBgQBPL*w_e0B^q+rD z^Hr3l-1yyBQqlRow|r>9=`C(olN;tCR5IqAG*pU$1M3`tCdTVd@2b2bNY0{VKq{OU z`TYPs&Nj~c&w05Xn-TPQpC;&sW1yqHXXLQ)3Ip%~_gwL2xRA%wwQk@Eqs{ul8#YN1 z**>{DL;SqF;<|*Vl-~Jtmb+AvKShB-JI@~A8ADK>}BYSLqo06CJ*p6=R^)ju0`9C~1r zm4K1ixLfGu4V0Y?amkn&k9SpM`}6_OmB)M@+x#tL>jLK_;b4+sa6hY**X%bxW-Vx> z4-|Sf;-|OogZ5gJrFsn96CxK)WW1ayd*(NG{&m{wHL%@#Kz(4SE8lNdm?|WfDd^IO zZZ_eSVu3>Sb$(G2&f&8PPmLD6KK0>Q{bcvfkhbZZ4{g6Tuof+(3;&0l!;2o8T%IY< zBm2X?+PL;H4j;d#PhQ)8KfQ@`rFY-No}ykozYm~{BwtJ=f5wloZ5`)0V?~3MDQ_Vf ztA#+`Vq*`3yCxKtQGF~8d;1;L>58Q@Tm{-VRqRUf2bvNRSgF;q-^)G=_x1&|5MUS- z;%l_rus*H2B`f*qx%^SqH~Eaj$+Hgm_K3!^?Fku+$}X-)yc(C5ngtlMlEQDelb0d% z4b%>g<>_xWxf#JtMg9YuAIber%AhR20Y#(a+2_r;k3YbCi_4Iir!HAa5| zGXCfvDrCRZd}@UKzR}so%ld2@otyD#Sesb>YU;bWOsr*|7Eh>pyyz|SJ_)Rlp28_i z7OUU)%;&@VQ1)Fpfn5{CuNuSh>kL~=$700%x5q%IeWdHYTuUM0apIYYy*(3>J)R0K z7+e2i-l-4>Tz~hIT=g_x;H*-&FtE%HyS){0_KzNz{u2B zQ)Cv#q7{d$W++2x()#fsRML@qe7X1-lknMXR~8e}ZTmY(`!0EMq_6yyJH9UGj<`P5 zSh0Q|Yh_`qIP;=?7EeMC&IxrygA5n%S+^qmdD0O*8t`ZiKv3bg`_rjjJzUP#k9AWm zf-#m3U9a#9F!1`jnX0K6J#{fWma#e3#Cg%5{2xS808i4gF2}EH)92N={MPxi;62#2 zfcP>|DJ>75Wp8_ETTM-p`tR<5fQNjCB25O;)}}rbGXV{!w^GmP_Ydft?g)9LtM51#vx)8eeH>O4`5@_P9Q^>zWlbQIWmg&Z1!~?%JoVw!)Z-guiS@J?C?PLsa`mG#a`=E^*$l2=L*GXZovid ze*7$#ZJHfvpL&0p(w8IV2ve?p!nBVR*hVzwdQ8?%Y<}Gv^DX<@CWifX!`~%gKP{AP z!Wc3^nqlVn@63ApKosbw5^V3Up%LnnJPG%wE1fTi6cUUU26`{e11tm&>)f1aATC#$ zAVElZ7W*XkT2Hh@UskYmLty*N^092F1P;`h3^a+`ckFHrf9am_DuO9a$_FDu3h{ko zsZ+yqufr>ZBj+(;%O(Vo!&>}@!R33P-AF&(kMwe=xC_Rf86^wfkT(`+4<8tnR8gL0)<7@MZ+5Vgw|mwPlX$v(Uq7= zEE1@X$j%Rw9SP*@o)#g^466kRI%ILS@ueTo-CkK$xLvOGS$}=eB-t(dQ8NITIA02p z6`8lh_p-0wkkJNrQj1upH_mBq`UaHh`~pUIzOLoBr>JxzRq9L&);0QzC=x8sgS`I{>SZff)1zjuQEy655H9K#1k=!et~w4@e4 z$Jcz}_H*= zld8HJLJ1+nFOY>l?^opa3>^FR@Ro=J+pHzR9^?6k$c3g=Ebq#4V_>mp2G;rH3?P{z zUO77bJ-aBvC6hcnH2d@fNl<)F97|Ty{HR|KYE4Q0Ho_m{*tR)StQYm$M&~PxE8l2O zEQUvTl0}G{KTgk~Na5YT^#<#-*DePR!dcIW&`pHl;>VFt1Bs}ko!J!dNx*J{qKf$? z&z-vjUy15wY4!ZBQBwaQbq<_7nu74W0s^_fMc(G~BeM_oUmiq|yLTP4i0{>hUPZvy zeezs^>uax!VhM!*>tl;TdEKt{g)WvDwv-2ePL3+#l&*$t`%Kvvd2rLSXMJ=JV%ih3 ziD^*@l>(ZbG-wJlbRB^Vi?I_2Ym{Ivgmeu2m&)}~$IvGV>jv!@zTPKPQtkKWtm5=Z zu?cavYL=HY*>F$6ZMVJc7Utl5Jf?@RTE!qY!yoM6R$esNWwiXMppC-c%KP!04$n6k zUSCjbLChgTqqq4(M%m5p`n9HCuWfCXBeZkNFFhXOEd_w%)C_wLui_tk&0I(&Jb$+4 zlT!D016wIU1Hs}1uJ%tqMMeO=S;g-9D|YCL~4uZe$;9lD*ML12|i^0-=Z7TgKxgp*?T^ zd`kP>i~I%-+i^>yd6P0$Le9+O=?hK8*S`}$Xy$vL>TlOBAlR$Ak1p&Cv5;{=n$zZr zzJLGPHFP2H(bJc;R@TkzN5m}J(sS&ed4cm<#`}0cX%76deSN9qaO(i`97?b#A0gGd zlym?OM!d-etC8E+BDd1rL~%o`W#8Y}=N0~R)*Q^SU%iJ0K zesY;13cN!nKD^N1&m_J+vKhX=MiZpyc+%gSNJ1?wRb<=k4^PhM+Aw6jwH{Zo!VNvW zABW~)U7j@z=dS4U-$wzM&5TLuZ3}OEANGZ5r!tP=1pj!#1OFV|Gu4pf;U^%6J@Pa4 zOL@PSg#B~8lv7eqM`(->6S?G9;qUMQ8{_B08f~QAncs^te(x?Lo!c+fBmLFPU4MM3 z{kj?1^)=OFP>qfE^M@lLE4Pn(*%w(ap$=d-&Kqdj?q>R4o-_u19Hu~{c^;bUCe5<( zPvj*NgCHC_lOsLs!^uq-vTrb=?`P5?ujrQY6p;mzd#YZ^-h>PzwHuYq*`8|!xXQGH z=Rv#dA0=+Xu&C>Ya1C#gUvHB=UorFK)5YGG&`sxq^|Xdidrj?A2f|dohITYva8mZk z&4-8^-}nzg4Ry)&P&Jf&-n*uM1Vjf?H^)xakH$xa+)c?xx}PDUi2V4ASIM3=;<#cx zE&#b!Fx1s6eV@Ve=5RHEYidN`nS31V;4H){CvKA8U|4odt7f`pJC#+ z;Y(!!TfN)SzX2LE;^*--Jz-2HB+t2}omUmQ=K{VL3S8}dol^;+>43Gk+|zolo@=|d zmxmyPv@;(L?d*Rm4e%~c3x2FT6PkNl4vlEU{UR*Ru*%}wVty^eg@@C1ROHxi zu|kGYNXF@V{6rL84?JHKH$pqV<5T=cL0^wURh%l_rTrqXZ<6zCCP!PMepFs$XBF(?161UoiHu zk+6s_7i+56dr%&(LOl@?Hm)7*htx6`9^g@7f zK5?RaritlpF>&_P??FIwZM%QR?BFl9&CslKX4Imdj40P40Wo z`4=>;VG1{xo-Le-m!H(rpY|t^peXBH4I7Ex>EL$C=cP`s#r|QOd?s?EWPfnG#E%31 z!-%NO6Guq4@4C&9T~zl_&ceZFiz2lT`k%wI;5)n#k}9*80+^ZRR{#4DKr>=96M z^rMQsM`jIYlU}QRGK2-$!)d-mehP)yC4M{%oy5DC_3RnIwly)y98l*4H7=#;w)j@l zs#uQED=?m_HNsc(@`Q{X`qA~fW{KDQNGIdl zA}W}6)Vq|_w-Q(D^*eL#0Ugg{^V~wbV3m*GmsayzJ8Y5({pU@In>VCOT=K}jb1jT| z`(ctXO@nwiwk%gzMi^gSiJ2HZ+EQg7@PFI*S%zu8l`eV7+50N(gH0xrH|@6{yOrM$ z*;vC#+`Yqf3t-?$mt0(Wn7JO~_kMm4HC6h`Y2_%#AUAG*(m`y-AIeAG3hBrpRXNk+ zkKFEC)LPJl?U9_-Pv84*U_Rj${e{TMoRPy~sdq8(o@Ac%JvA7kPWiMtOa2=GPl5h1 zVlyg;r;~_Qbvcv}u>dDf3~!!r_vqr*2!x`-%T3nH^FrRXpeAvhV9)oaExF--XIY;= zhN#SYK0~@3*Pm6C)8?$G=TXO(Oe1FP2wRclrhf5Kw>F>ii#wU{H=^9R*+b#PkJEhT ziA%z3zf2|+JIPTh)9Oo@pWqSUcgrA@w<9unvha6*J`?TtJRIEKgGv$>=>Du56OBSU zVwu<{oV(6vJ^g78?^b2u2`4vvpb#($-Jg3@er9DshKtIgHyZ@O^>_Xxw6#i6 z1-Z43@Pb92n|FPh0_bdHhZA?q_grD0t?Yc@dZIJ^co$^O#81dHrc z{yqrgwPVC*c>E>eLL4S@GDxMEJnN=^JyeYr?zgOe{aE(TK3+K%mdyK1R}WEm&7Wy; ze4h2w7rmJG{ux8b)Y<7JdjH(MB$vR>X>M!?*@`Dd(g=`cgIAE80Dr(=CgstcoNT#$ z!vw6uHn`E>szEBkXoQ^6+9(XeBN3WK`^#eZ?#3IlkCz<&!v|cF3IqlsZt@D9j>CLGa!yTCE=66MMhd5Qv`l;n!hvwDV$X z_;-PL8R>?LbH)r(>NH#9=SM15EDFZH{1Nl;LM)zm+s6MJbG6ZdlnGqG}4xLI|rjhUJYsR^Hw!8}qMvw_t&Ypsy*RjKA z{6=4p730G9#|`Y@soEbbYz=V0{jvt^>G=}ghy0M1bUK95*jnhCP@AGHzH1!zG!bM5 z+vsvezuj+;{D`Pf2crxpW^a?=?vLd!lj3_{=Ig$cZ{H;BbKl(;;;G^tlq~&iX?l1V zj7kC@eVd#xTciCr@zs)^6uMtMIB?H1BkGJVpKa`2^*v7)(pE3re7}O3ww`A)a`OF% zYAb~EdGUD44m-we=w+f@RkT{%@W&HSDErZYM}Ys&0la)kxVP_F5xXepr=VumgL=x< z;G}i|Z3F)B`|&gsPZV+28kKQGR1xprFvB_sn5W}m!fvVqu%Y=K1NdKAxgvrWL^gQu z&SGxEE6LapQqrr!@sAC1#`ZmXv8Rk>7GA1FyT zAiN-%Ps1LS%(v~c=~YnczDys z`Jr+PM@^YN_hdw%6pv?Y@J*6G4cb$~5^NJi0kAj~gY3tpo@aebT!7(&IkW{`;^a8A+gCjCYZ3SLHaN#Q2Q){!rL2D-> zcy2sigyHV7T^ZLqPb-o^Z>TeC|Fjkv1C9Icu{f1&|CAMK5gW1l?U#YrNT z1S#qQ!?IsKXJkWw31e$r5Mt<#=;%hAI96w?%e(1d^5>0@D>pEI6R$XbJ!ChKWT)Q# z(#`e+b93pE56EtyBeHTvX?GQp{8s7rSO;_>@PjIpv`6mN=&fGWE;l|iT*H~91M8Hz zi*3CxkPIT5J{MySc}bjmKfD)T_t*ROSWh$jRWpA!LUaavnXSsKWV`svhSl+6V5R?L zQMOrQA*!xN&`s|;w9=oUhFsVv$0!w zcJ@2y%G5N@zso-OThoWnTh>??^(>tq5YoTKYs{##na>9!7WeCW*}lyAxj#8HnSo~k zroEMDonxFlKJ&&pPQQ7xwH1~e(lDg!0r8hcaIi9rhWGtpvm%}ANJa(3WClUCy_pQE zN%7-9yjeg-Lil`mGGO!$!*_i#_+Etj?-4_|Wab($)vvWKTp(I|FqRc`)vT9o)=$re zw$E+Q{xRLB!!kxV@s1yjZ!hf*Is1x>?)Ll9{x>^8^@FUf<{u9(Nm#H={;455SFG1< z=ZjGv6um!m@8x7$T;b{lqICZpH+&L`{`m#Td!~Gf3w`4+Z7!lM*7EsIq%KqQ*vw$+ zrmKq`k*1sbE#rWs;|TYz2KNx>+C?ugm1=X{em9-cvtMh^uXFDJ3TTpn$m&}?ykEBt-RNxKKP&sm(aPtTtVC`~Av z##Qhvu3%4Snn?gM$_J(cl;BbiX1#}HZ}TO^(v5b_0J3ZcHXCKlo_7iJ;2rjln6no6<-or{E-LlD~k>Te6rO4JXrTaX$+I$ z>#~Q+_@(N54n-Ag(_-?CAF{Sc4e5GTJSnsAU<~Sb-|32Ard|Ri3wzLdue1JmMMv{> zVAr6Nb~3DR{dR}!SzOtgpPR$){@#?jiEK`}CV)ProKS(~ijS1Y zuY0 zVG7kQi2;=$hm>r2iYE8P_YGRg`a`RJ-cI>*$IftwW(*BKk@ zc%ApjaIvOyi)EbfF_1b^89MQ@p;_k_X@9KGG=2(g2sjg;StugB2mm9oIN)g4Y1Crl1^d6ykJuE~3@ z0`G4Goo{l!kk0BY6B$F9a_Gg3V1r>=l>}Kg(Zi;x$RpY z0ze%2?b`E)^Y=jr(SAkIMJ4}2t3Gnk;{!Pzew8b|ORPt8UxY%zZC;ai1HSfI+9Xi8L~GB4gwO@@nd6$hfDeHW zAh@at_~28rHW00ZL7Xxlv%S-w!;pw(v`*^nZoNO9bn!Lyct3fjT6ndR zdWjv4gUNrE<7Qn@Vts0*tGbv@gEOyaGsU}jiEAK={I``&9oP1nbUo=uDC>DCE%> zVGfX&hJ@>Grx=#6vZIf_p+}ZSW?vHLu9&Q?~$nU+X8_QTrN=Z-Ee8MPy zIiRWMt-@MtKR&djaJW4J@dp1igK@c&h?<874N>;M)}e6{^UsLhr<#fHEF@F)o=x7L z^%`wuR~Q3GBTR3J7*|g6LotaWKf7F?zvJ+9dnRIXLmCN5=^^Rkz3;xJJkcQnZ?F$> zrX>F1gfQqL-d=bzpM3iGaL)6^qN(jq4^R63T^3_=8u8k*<|>TcP&7LA@#D43kLQ5i zqz8S;|K!2^vqfGzXxFa`VHHx;&I(0reZAlxsUxIG5z=FS80JajFsXs2ps8td~Y zp=EC;KmL7J27U#2sbplSbtFt0)JfMXGps-Evj_{1xtuVxyq%<^5zHijj3}Z@7?W^FFB< zu9LmY^V*HaJ6P1U0oZHZDv1BdiD@XVOcVBLsTdfPoS z$muu?1<2D^b^?Yii1x~amsHA-olt*eq@cUlZ`zM&nw;WNw>y1y(qkZ&+x0E&>px4# zmAZUF!%>IkW#iuZ26g}PrFi|zq!V=~_7fdOFD3}F9zA3Bf!yeOR}Bj++C2@mkC5p+ z9Zqr+#0rOmd6aqUxsUeM+dW{JcyZXz5f$G7#4^X(r$l3&@&7&WId1CImqtH6>QL{I zXAfWg{qcvNt0?G{jrJf*0>JY| zOm7N}zR~zdvbhTtHLm$u5ABrsE_)Qc57^w0>Ww|;IGfUJoIUECpA@W^z>#eCZykV& zHt|;TQe&SqN@z1K%6=Ohx%VOX^$!l6<}--Md496^usk2W46hWMDVAxhAJmvE10# zdSUGhRff~`es|ZBe$q%?$G1hNANLn3@NOT6zwhCC#lE1qAtCH>mEm-;rWX6_x_z%H zWp>M7f;hLQ$#=d_iNsf9w)Zd&;cpG{GhpRmVH(M=hi$Pg<^V#UN@ zi6mZ3yWw@T^Ua342n6RsjQ%c4uZ#9;iH;o|YcyDLm6sStRw&nZuzg<#L4%E1DIryc zLN#U+=T==%bf^lf(6xvvP|TK6cVPFO@nFX0hQ(fa+h> zHL8qESr~DQl3vSt^!2b72nDO<`ctJcXlKG3v&Hg8_%y#@7la?-Uu+`+*A_;%wo`=O zru=JOX&3Esigo4*9bJ~e`C)dOJ-HhZ577rE0}NW7+ZO>grba{EVtUDl!9v;}?HHK# znNnWSEl$_Gn3oGK!e741(}3GLq3u9MjO|qSF)_8oTFp8+z8&uIpz|DUuW9R}{T6R= zgH8-OK7&4BgQCMmX%x=0W@J^zu-+;@DZ;h&r|+BWYVOR zQH#$KVBcQU#b4og)W6v8txM7Acg*)G47<%eEAadY#(GeCFYWi%LEG30f7t!=soTN?fdcgTa;i_li4jcT`MCxi&EHhQXN1qBBRu2E`}*3|rLPRT)R?EX2($Pq1jST9XuDL7U{)7Qg= zeCb?j&zUZK=dr2E_ljgQbZhM8NbtR{<23IV_rA=}D7z@+G?n(O^3e|Qk#Ffh|V{PngzaMH}7nrA8E zjHXA0BmpTSu?ho^t+-R_q$nW0-XBhiXhL(1=m*2x9xcz;Dt7c&PZ32 z(JHz)4fPbxRHpqjt)IGrt}O9v>J}wS>K`!Zgp9pE-hW}AYWlWsMO%gE6ja`p?ze7? ziW{WzJWcTXC{T*5_;Jz0)-r94E|c?WokEPYc%?f;x3D3Agk1l+*LfZ^TJ&oA+yJjy+HE5#Jq ztMl7;sPSOlZQk>UkC3ni>j4d;_4;ah@oygqva+iNe>?~~jz%&xpHtq~_sh=#2a7JZ z@P!UnG7!$4=$u32o+H)#q+*tcj^p_)sES7euA)cfk8!vz+n0S^U8N|*kOI~?3=Et@ zfm(8yx9a?@P|`b46IwzjkH!r!86xHVMvce~{20BC=^Q`um=uVEISb#8VB3{BW*o0M zSLW8*ml{6c_5CPH%l%XmL>~QE(Go&?u+Odl(eMo&B;ThSn{`~NJS=D)0p?F6{r!PB zaO&av#WGCljXg>F6F)22mH4?4pql;ZJaZ_@=zb%9;$d|l((v1(U`<5pdZDsNVghB> z4ZeD&FuCIIMckVko`_wMNW?6TT=V{Q%F4w!dEHI72Ve5?Ua@+M_N6m-;QtODBSlBBVjc^B2?E-F3 z>w*>LzevXF&6POqETbnqo`hGWiM2ajREo6#}) z&&!p9p-r``m*H0hKKGZ{?aHJkn=#9xC3R;NYIQXYO}u{srSQkFMGYTHdB{^FXeU?q zZmls)%+x~-u7KUGY+}~XC8Kxo`B?6E@@H5R5>y|(m}KCVJ=G=p=JWz?i)C4n(LD)ubk=_ET$F;ki#L|tyJ|dmzC0Otlk%Sj zFzrOLO!3}T2rF|XwBeN=;Ls3f+WRPw1zr4^EA3qG{gPQt#%TXm()H>&tDtvOyo}NN zd{3Nyx@q@r!~V}+dGFXqd;DpxqBE+CYAALDyPe?)b(9j2JIo!T) zOZu7VhF*`=cg_&4%8q9VOCV)&l4$)~}hf z+|T=fi)zhN3-^=H_&y#;w8D5)nvZ8Y+mDG(U3Dg_4ffN>OaA)nobnNV51~}*r`3NX zUDtM^P!#{nZ0^*jEwvE zw*wU)_5t^vg;(eXX=cFKTpR|e)qdiGBK~SNvSx>b2Mh#gjFz>zbk9$#4Z9uh!~3-N zYQT^`I)8BiT%?;^#afADoR*`mQS2WE)w;$X7Hjv`o?gdNhicC2Fh`GkZ?LUoldqFb z2w6Vg?qNd0BOFDav!%7Q!8vIy{34Q`W zBoGuJ9pIlMzcx&rl!h~0p-Pe#&m;;AAy|uh*r(qQnYjFdGFU?glE+tCIel!QYxVK1 zk%xYd8S$kiMRt!{31%-p$0nN=&&*7U=AMtO5vGcKmY(+_1H`ZODkXVXCEa^ z7h!P4`qTy>XM@HF^#f4^+mf=9l@4+G-Zk5 z9I(65(xh0prt9k*yI!Wo>@yU ze04{T2_0|1((u{}If454$FV&K>32T=8IRmQ6luO-6Kcldgl#cry!b_Ho?Opu$@$Q?(EW6Qxb_GrfzJvtn0V#x= zs+sgRr!p@$X86p`eSpafA-fMsr-ya_?RkZg3(osEzEjU41kK%Jzh685 z>4~44SCS|5EHl_dgM0AWoCYGKy5{jXIdr%{8^rzITyGh?{DHUxVozix&r@-t7?|RL zE_eOoBs9=t-(%;%nu;8%Ntxtycn0`ns=wbO^+yoJIdo0u70G>7T@cfzjX@IpiqZ2S zx-Vw=^LM*U2hiQvNj;4mls`%-664lu6#?R08zpPn$=K_$$A?(n-tO@)yt%+}Hq3u; z&p8p&c4SbP_!SSO;zs{hA`g5wkar-j0$G1J^LSgg>yHeXrtMpZTc2;OWL~n+5>BPU ziCQ*dB=%)y*~Mu*1kt<0y8^IFrr$;qVhLvLfd-}pNrxs1zVOwK>ZdQ`|A(Qs{ptrZ7J`973H&q~GL@R2u?lb23Vr+wTn$ElLm82ly_dcJTzP_=q zPc_(}bLp4)I#uxcF_hVZui?G~{~0RlOsA8yebvwL{4MmxyWHF5L9~1h<5my6>9MSh zg^akd8&2xixe%HX0DuJ4DthT?Z#Yc!xD+87?K9G+sOQ&hdA|#>EQs`Kaz&GC7$ZRI zd$Lw{r{VP+)o*){>{U&*Q11IA>VpM=lk}m->Ft0Qf&@%D_tZ*Wj?eDjl}v_LJU+B=KDN`^cs9 z+hZzvs6Qy=jJGE5-C9T2vC+eatnqpjCCk5a`;K)_3!1I_v`U)NW`1hA*S@> z?-;N4m7jmwT-m;PtYYAmBUzX&ZR%Mb4P3Rk)_WE6sy;s@o( z7bmVZ{gZefn#}-C&`%gACeq+VFWkeG?;xCiXjtT7kVFEM5%)0`<)&3HC8OR;SgLYc zfZz^Akv=-|Xr=Fv361_er6wYPx>?F!BV-K6USnQ}=$#$ zz}JYx`^gf@`Im`sx8AEsY8~dqT%S&VNt7mU3`2Z;Eat-#f>W6OARco_x}-e~-!i(L z83k7)E#XGO#NIK3uh_)z^P@?B(34>W`B!egwq}fD?+wEmfs(7;jD0poD!iY98S9L{ zL2kdTXmW?^ht+RSfMDyO49+h*yH7 zZ#XY=SQ&h~#bNA%hH|L%P?;V61bsWgGx`iE_CmEVW1wK@jJbY=L1neKzg-G z;%En)ew7pF$euJWRKn)wXJrb=EaWEZ-e=~$`HzS7drJBHj}&f-ch8YGpv(?ay{hw} z4YfuY)78N!IXNUA`)qt3j}NGUqq&iv!=F5W_or5-Y{~_8U>SX=)ucTTeYwDtCm-GR zb7`S6fYL_3_nRP~Y}ULpHH)nD+X~&;x3TCq9ra3GF4Z0#iib}2UfEsj$Il;q>8y_t z*pwwmG~M$hb|17Op*~F>t7^Uqsbwh zMQB-D_`xP!y!_f27OyZHN_!F@M)OS!Tr1oe_`%P zTYRNwxE{l^Kh8$LQx9p6Q!}`#r(~1IC1zxav)bxkCvm)!yUU-+~nW2BaYR{Wa8<)q#MfS{bW#w=dZPKE*dEl$s@}W744R zQ@Mn;zfV}=w|Mf*{r8=U{b>haP>%PTD?-F_-G{{bPut%ao&w$iV7R6ya0{Ov9Cg5Nnt*;_|wt+`Y?=aJI%AV1V+o!APhOICl? z5+1^Yl!akj^7v-~sflS1SAK@`XVFJ>d%RjN*La|W*ws39_9{J|&b!vF#Oj&xe!g1N zR`5R#|LkMCABv`_#=B8-`hCA>s5(yxM~23JN#zP0*7*aj7qb}>;7Jc2&Y$t2`&2@R z@^&cCsj%0Ar7qCy=8};szrUyb;J2E))~R>7Br421GT6_OIgc`W0=;r zI<067QqsK-2O%+L>PLcOh^iIg@8T`qfrJz7K3cj%*}>I$dp$|u`+~53WJ-BIeC6A< z^k+tg5jeKG58}y6`V9G%8%4Bb5Wq2HAC!iJ`?{Xz*smYPT|P{oVuT?pme=ZUPE7If zl+#jGqdh}-D)fTkIXnM)46U#oq>Eax&=l4UP$O$ikO<2 zWy?v$oWA~1cpQ|6J6_eI?Cy$9krtM&Dhc@R@9Al>$W3{OphpW-?-k zz9n9hMZ7LG)7Bti;n)GmX*lkq=G8vy;ELRGaqSAf@sY(+^E**NGuR3M|-1eQ~5vNtDg`^ zz?R43UD3tm6kR29p6Tl;n7=vm`&qWvK;gjuK<^Nl##NhcF*}io9yXEPJ{Y9V57qc2 znctm4(Ixz4Fl2gat?&Wr%TL`Yd&wsh^@q=T-N?L|ce7$ifzd-F>e*k&^4_Ottf-2U z%D=y;g&+@tPt3*^OW(QM%y6fPVuwPjfQ=3PY_dS2e&6tS{{$!P(A}@zDDwz;k4aw< zzcVeMA1Oy8Gtw6&+!fJ$mRfa4y_PqYyRT#20KCUU{gjIyk1aHfb}uAJDl+xNow8pR zUzVt+qW8ngZq(~0akXo|3{JpGSbf=KN+E1i?_{K>iQc5o>lstYqffcp8koJ;*$?=b zeLk&`Klc{r5}nWR0{Cov=Q%|qCKDzRwWC%U6al(f*oWpr^-h5j6lJvvf0X@e8E!$8 z|0&ccSDq(XX?&&_Xg;%U@Uq?sB~Nu{NFqLdMDlRx2>42U@*1{8{G!5iUUT1AU@N=v z$v&yz0M<5nZs)m`?UXzi=}y#J7z&}&e$o7l_&D9@aXGb}@mfxaBWBvph| zhj6M!-j1Xi{Hop-r>>apMX#kQtN}n~9GBPk;h#!-VXrAn2kxxD#x72wM#a3Iv-OYB z@#Z~RUXP#AcD7b;YHs}%5Migi1lf+d!-}B9C zY$x!lt5WZWJ`Uy&s)GA?yJ!SA!kn&#@9Zj!SKl|@KS1MBvE3(*%L97H__@B|F@&^^ z5kpe5W6l2DVNmTZ6Tf_%eZZYX5ET^80wkDk%c6kY z$f1Vpp0ngo2vpu~`>p@frwy+Dpsw3>6@k8MgPiJ{o zyeGtGdxj4RpwJq_o2vh;Qa^at!&Ifpse-+I3B@B^CW^P3wn2J*dBu*h=lkZyPADU9 zSC2&vzEO*FAYx$Ho9b<&kG6cca)2^C?3ixrDH~7W&Lfqgc{tAWhkXpbiGfRkUNP)k z9eW?VULpie3aW9cQPv-g40lb+>G#%N0A}>(L)g)A;hKp22wz z+j1amZr1i)g(+@@M6}+mTj2BKs?rEyRNHczY+5Ex;U?hv@JV-K!;Bq_#|JRk@)K{D zZ`5?$^LRZ{`15Sv_~jW!7ldh$mOG@0@Y~ge)x)gGFS+t+?(n#a^}c+0DqMFuF~w0| zZl6zJwryg{1uIKy#pj+Y`1m+oyyN8o%yQ2#jT5 zH4iRrENkRN(!xeko%P+uy7N8VBCSa<2h_2=X@#9bj2j{{Z)h^L*wtpO3~wzanEFpj zgSi{8?E2{l;`%)p<# zJmzk|*K4M30bwei5kypDt}lQ=)u$Mx160|Ll3`8iR#6(-^=VqW=n|!DTV@1@|YW2%4Z@ z53qMMd7ePr^EFqH&4XG|vr1<`y>YGjT4>`(aPqX=BsqUh?Y>eFhOR=k`Ol;g;{oIB z&t0o>P|?MEFQGPfoby5zu1<3UJ2mih%T4Z)b%;^zvvRD<*_i>v%SOEdc<8U&!HOQ{i)#yN*Mg(^_485GF6sPD z1wJX~U+{rtXa%+fpfNuy%co~60u%9XX_O}m!s*%#RKDk z2sD^r53(63t_aCfGaab*x;YONN2zC64f{)NFj_AduJJ3bBc*J*M2>TCp}I<0MhdwY zOFEzs-!yS%S@(X}r5>cb=+po(h10?z6T_?^&DPQmmF2x+K`9=P~F*5b}<9a>N?Q>y-`r)swCxLUkTN@>1kSve?V1A0Wv?Uys6FxG|vyn{wU< zjjw3F?L&qRE@Mv+Q^#dZS~z%`@Xo1GU2+cdp>F1ju9(j+uZ#5aqON3ld>yqCR0pFS zUlC*+|9Da)JG6cL>xRM%2=DHEd=`$?hs*%&ai7aJIM;q&`Y#p_BxgcM+=LF_^L>1# zT}7V+^Jqim2KvgxcmO~Mc|^DX|ET;FA32}943NA)-6{SS2gyI<#Z71%1lHVg-9TZ_t^GJ!ysKSZam$;V^{Y zXzGn6IDi@WmQ3XaF>51J+5M%KX$rghCjMSycV(^CFp3u`0Ig8)P4bNY!i-l#voADx z)nt5@ISh(m{|y_Q#VjMFTMF)dBeHJK)2OWfaboh5ynk_ng|!42#+Te~3Rmk{QWSFi zVk^j$snk=sW<_F61HB4aZT4ioMs?QKgY;Z6M@Y^0Cc~y1+*ZHNQ{`-3%q5n8%k8ZM zfh$mq&m$04zuz@iyR!Da+2YF27}y*-%Sv{CCwV1U3$`#aRnc7(f418L2bLgE_v zagjeAFWMz&H+J6c_Wh^s5N9>lHw}<>Xf{5*9C6T6g^vZrk_E?AdfFf$EB*-?7M9ed z=QZ~DbYkz@AAFiPQkS^omQ8PWsXw!Wk>7xxx|P_qKLdobFXLZe4XI8H+s^X+%#Hl| z+85&V0pEPg6(OC?h*8!3Qm!ZQ&5WroTorQOx5|E!*~5FbINR_+p2iE!8lY~8jD{mi z_CCOGwTZ;wTko6s`U&yMRel-w2v+!5#zet4Y12_^qvX0n#ePimXlbl=o_n{{&mYrx z^>o$LdU~FozY0-cf?aQ40K-5;lMYc?!nBF)Ajxp);h?-P75=2kw&dr*p{T0DDCdd0 zbSoiQ>518_wjdAv1Vxc8;OW)4Y?}zBwQ|&d8Ln4_v<&EC_vuK-T=%Z8;X-b&J+Ov@ z>HDza`1vz95ASo3lWkUyJPG>wzHIQE^e7E62dzOD7$^UPm5-Ff_uw?l$bc3ndwt7s zPI&>qu<3{x12D$Q{alwlIBtcvE?aNv&eWp)EM9HFJ>+<@OwP8eIu6QNzV zQG7&gZlf&ECZH?#r#;Tw-*Mn+PhS;z5L4|m9=F%ajjq~OU&ImbTq=_jc_|z?oflWV z`<*W&Q^Iw1j zW0}-*q14%`|!ulJ!XCnX1tLHfRnd%8ra6p(uk zMs%LjQNu4wLcCi@;5{y$sm;+{DAUs^v=N}GqW)P+6G_s9BND@Oio^E|vuE4TppAjQ zbLBwB`jLu*`S<)_4~hFVF06kqvl}%KioQP$4mM(4Fb=Obu)U{I)9lEzxl z!N$L?#}bw;>kUa!*qG9gxJ{mB&)kl89**97R0HXb<=uI}Ec?qRpSC_IyZ-(OHDi%N za-O~!Oi^k{o2di5++UzUJ*uAYwXv5Wq;|a(;DY+q7a0ulD4nGAG{y4X{f}LlpUL9} ztvK)SI71H@5Hp?WW{J8f`lbF7ca@R>?AW*Mxf^$S{7RUku%WpRZUy+98ATsM=&~bO zR!n5SKUl=ZGt{1T--@aAZwj1%fjp09;_A09QghgIvNu|;f=RSxmf{_NAUP~@1DWy5 z!_LPyBq)?WEwh&{3*KUL;W^p7J7Ob`taHst&*J+;k>9IOK5_^Ty3X{fghIpItDK}C zR)YJb&NpfA%cjj_EENuk)I!1U@py@0TwHq^28*E2f#(_V$;~_x>+J&PAI!6A4P!fJ zp)NfHn?XGfYMT00)hodh{q|(lSf?M(jRcg*gyZgk$)7+n2eD|1)!#zQ7Qc;Q9-bF+z=SK`u#AzNb_2Wl+ zd$B1aPrU&U8;V5u-<3XMOB3K5(;D>o_TX%igE0PS&r*hD0ZI2Sa@6 zK#sfm>kljw%*!;-1Q(c9XF?ATxCXG3orI~LxyPP1BmF~HsmIzqQOD;{{45R^4i7cK zeuCDQKGWzi2TjI}Kb?CR-u`grfCUkYpT6tq5vgJNf~^1Tb+AaDc!_NPr`?Io^0-)Z zdhfmhYB@ShUcOG0I71t76aV@hrG?}JT!E;khpQcswtsHS1;S;dg*4&b@bH~Kdu(DD z7w0)rXnM0emXOISR?w`VV!HP!6neVJ{RB!4np}H2#>eL)8$RYP9IEnJs8@l%h74?x z6QbBaDmIc{R|Mkls|Dk(c;a>{y4UUXJfNDDnmtPd{O~+NbRwfocqmQ^36qLL;Ah?AF`D{P)^s zNK?=wPyrQvVA#=cJXA~9?0d1o=g^W*P6LO_n{#E;S{(T~97Lc+t3H4wvLAUq5c!7# z;+)d}L)xyA$|72rLcZOdgHnVpG~S?ub;F(t(%U*c!^y)sCdq3q&HY2?Ek3Z=-8=g( zG}j3_4QV7CDG8+z7GI>jk=Nd zNtD@N-1x2sNQjT@rOsx)ZO{;;VsOqWfwO|?L-6reoV`}cR_O?{v1kJHBO9daZ!Ne- zN@oxsJ+wrXMa|C=jg^Hryy;wq_w(z0x!d~$JBuflE`)B}tWywrupX&24Sbc~L)72z zmyX**);qi!{+p3HFub>`rRitjYxmAuZ9%r!VEy1`fDwKNDeA1#!-Rp;nrf_Z4v;Rh|LQ zK=BouV3KzjHhpsGe4K7VG)miH2%gje7v3j}>Fv!k&SpdwvqM=W(NQb%Hi;KD$T%mw zb;jh_ zkzJXqE;}RNb{KJw5c9H*N1o$_wOJzWF1hBP14VmQI;5eI!NJ)_`iCX{{o@$R@#6aN zak&d;?`K%oM6hqY0V{1kg_|Sp`#Arll2nH=fAFC|)V6K8J=In&Cs+SV1=Zp86sEKL z;r8INK>%~sI^r8^p;0`Dl4~8xjyf#Oh1aR<+yF*c-o=WF%FM|NZQNamf+ zi2}4|6E$MQ@V8sLV#Jg3g{lY27hQ{0XA^D?tHb?Ba>m9)}_ zQ-1ws23ti@nTLvR5W_dOi4FM18g3@}5buZ>^Ii9_K-_{>a}&&t6i|bSt)JK4RTpyx zNrZhl?CF{8W5qm|6-2BbP!_7_>NxI$@h3jZDRaGQRmV;(=K3kRU8pOkCPDiAC}dpm z`>ybGwCQ-Em61vmh3OUHD%i{(K{X#JUJ#2AUWFlSl!rM=t#}j;p~D?1X8WG^=^k^M znl}?2oFEOqX2%!-p!6{5(--=?msehY8MC^omoTkDWe5Zq^Vu^ zNpin?@O#5I>mOJvQdHwHH&1J+Ls~50kP@(VMDl4B7i_Vy=QCG0(Uw;N$qOMk>xc=M z*%CgDwdmZ5+b2xOY~nk<+WRIq_owh2!ZAkK-u^sm|Ye0>X?2%vYFs6AjAQI1KZjtSd7NefOyz&_~5-r46lXu zE0X>m(L?*;Mo>ThdUIocam37Yu}gcb2iA zJ>2l+MnAB)1C4&yA{jo8j{26sNUQ-FwQQ-}kaLoj$vrHkmK{IZWGjt?F#tRFu7n zS4O>o+Z;^-ITaV>PHZ9!G^;^l{qm_9X4&ZNF=mR_9}{>aR8(m|SCO&f-uaRW8AmZFpVTUy6Ps$!3QL?cLD%-%40xlKr)u+!~uKsRzz zh%Y@N*ws!@>vEm!`^jO_cF2ZveCbgp50~M#$X(TL1hN`J7@bw`bK*v69Qz4g8RnHg z?%Cf|gbxCa-?bE%X+H_1Z(QKna`gDgy>lZ%?sk78A=FCL!&5XtS3p}jp9ils_8qlj zem}+D{ZInN`0%E~_v-U{Z-r?tzJikuo^NQ^0QTPM^i05Elb`8VaXLOyQyi+(H_#uq z55=U=TZ21e#=Tkie)@(@XQ;<=(4h42E|5nNuu~^A044Tqs=-p&ml|%|TL4R=PGeV)4t$I-}9- z7-&flva!zhUpr~rj5n;klG? z0lx_(<*%BmmRQsmeVxdUEP)I8KAN;EXK+-arVRPGgCAX4;0EYlx*0QJP#g2B_4E4S zYmmX`$tL&J&~xv;Qo&U7_Gtzs1@~EKf6U$+_s>ILhrsB_@!t`)y7Q#B-XBXp} zdO@u1eu;kMmd|+v>nNMIDR=e}#ZkeI3ViMBvo(T92^!|}mcC}&e?tsp-*@V|fIW#t zA+F5vOg}VFhn0^*pllOSj-L*zYGk1NC-&6kAA-_Bau83LBKDZHy;Ny?!7qgHWI9r@ zk!KuhYS%(hpPL0i$eZW6ybl-S+xDw#ZL0AX+PT6yy_YlCWd#S&O{nzz!NrX*ixI;| zU|4_tW-Wv<@=lyXL#wYB&YF^`fNdwXb7&YpO7U~H+pMPdyT%CE{_bsUE4IlN?=ukAV^ z67%!+exp7<0yO+CG5yZ>73sx45OHlblyh^C-o(%UAj|I*-DY;$M5w7w;|bj$TcT*{8O}}WHb4XS=n0X z6?e~M<0OYx7;}){cS9Jo_c`mhUF%(ac2M1!h0F2XK)k+~o;-pK6+Ed#Zhs^NeHquH z_Gz|E%P;aWXUiLw^5KJJ@k86OPI=a&y;q`4k`VtrC#oV{336{CvfqUezyv#c76}w)X zbu@;z=Ej9(8EN?yGv#6UMm7PKt~<**GQC_$Jj2^8Q%{YFvgbtURt;avhyA*KhYtjP zv=DYbjSs*y*^;OF1vi{UN^U6cb;Br7FZbZ>{m*b;a4b}{j)#^M{;x4>Z)XLg*ZUQ- z!KLE2>WY}^x+`0&_bL8;-l$!!QL{t-Rc4#vfRxK`Cf$zbR^G-Bls>e)Sk!0M47@yT#gIzySHZW@?J&^E8tJqaAgQVWT89DY!F@<_ds~% zBV$#ax^v!#o()b;?}uJ#LwCCKM0NsLn4y0^=kQ?N^y{o#nYL?)kW?ay&?J!?%HZ+T zTY~1zCRIEWgeelzM>>9VsL}_+tVeMX{lPVkUVgIgQES>1(T!9^@iL#@srMkiPb2O_ zA}?oDKyS|@%BZo|JPAG9pCs;UBRdv~$y-b6r|YbPSh=ehNzLzQQx4FvU~q-lPGX+Z z-YglPsIUBqn);VEfAQM;btm5J2Q#T{8HK!Z21vT2?l)!Ab1lvi`=+W24jr!)V%YG6 z!PcocL0{;!=hC>=OwahKur{+Mn;~25G#zH51tRnPxX9OSZ^;tj#J-@Pm_a^~NhrMW zD#Y7+F_3M>&i7PB$iflYcg7-AW>fzo#o~_vJ*3?GNL?4Z1)yFCsJR5yn|Z~tw^Er7 zHo0&e*?lrLG*qdxftwN84(T(@g__QZ8Y=$7tkwRyzeO8#ZGfZvV`=|c zeQNfUH-}xVK5R#(y(dByy8+{m{pooC4xP;DRfv3DE|>E9v)0gCvY@&i z!%Hm65u3+6DzXWRvY0ER!F|Y;EYB!{SqV-%g*Vb3#+hchm&g-Ws&-mYL-Vu*SN)yN z{k#2Tx9TjafrCLxs@?VnuSHqn4fs$N&xe88Kp6F57v7e_?|2`=we(alnD_Y-3zsVU z8tMHbCn{K@MLqENSkJs=6(8rRdx-!Wb)jK-ZL*#90SAex%h^lO)Xk%AL9=pcZLpN& z-2LsZ#taJtNr_Y%*U*YEoffy(>12U1Dqir+-OMoT1n*Lpd}_cM`5g;?*FaD1z< z9^q}ZWnZ7q^BBddlO?(MF)~!Gm7;%@)y4EW#(45{z)w+cw3Ez~Fv9f%E0 z-@&-f$-B*W&0*YmQN2jkzmix#cyzd!aCLEzb5~zkWnck1{#YtY$k9|5qw&8C# z^0%t7q|eSfSF9{Q+R=1^D#7oT&e=JE-VF5vm~I}(UioP2Y3SSQpyAC(#@T-ypbePb_jmJf`PW6zFK252I=ba#k#b{a?I=Iip@w{Z(*eEe;oAA|T4kMDV0PEu zeK3UhmZI^fAM%08s+& zh$gO9gaO`%vgUaUA23Ydk&V<}Vi^aYOZ7QR)mJ_QE^{Bsyw9GGi|{rf+)$wX`HglZ zwQ;98t1*myh7Yd-A~pJ@I*lJr3%W^d2zv9_2|F znSp;vln?XW($VvC$iDfWo`khDfEc9%O`v`~clK#gbOo#e)wsZJl4KnF#{TZb7s^$< zafG+yiAhs?MU#dD?!%16Jsw4Ar}Iw3Fl2^MNT1U~_;$^UUSsG-u|WynoXK|@_x?NS z7n^=ppqtWw5{STmJ?{bWppE#gxb1xYO$AmZcGBI^dZfwM!qIW~Lg=*KQSQLtBt*>) z^*I(p^%^~>h$Z&-)-v=4Esw%y@0Z~@oKk&d!y5QHW2$~vRFZm}i#_D8w9_tNlY})gYTQ z32t>qa29;9mFRIh6qRI{!ndrWv~8^JFF!52ykg!XVC%g>zCTRzdf$f(P9;JD%6NDS z+5RdnsBPiLSb1?icj=&o;R%`*ugA!D-3f4>Ot4-81f3yt$D~VP__tyF%AXIiGE!J} zaOL4ZT5AAkWy+BkU&cXO@1MnJF1GMiV47M3U(=L5Sf zwT2=1Z6)wf5mfQbkopaP%E45)&m@+@Wd16CZ$kuX$fcVI3`e^6Ti5*t0QSJO zyJp2>`+1r&K)yUwFs^wtzwVz>F4!#lVAGYNjj+<6sAu{=fWwITW^&ZhwVM@{N5utVTH@CeHMaaQjN#wKcOUR5=S;}M zk@NP5a2b(zz;5J9@ENdIwn7g@1Cb2od2yZ6$Zo{a9lsKU*;N$FK#@IMXRi!9A%L)| zEi+e1Sm{FoxbS{sF1JOeSR5Ubrv^9{J15Iq1NF2rnfj%JPKy~9NL4p+9-aDqqBp%6 zriR#JEPbK>dyaTEjt}OjQ}*en$Yn%5EcSAcnkor4^Cj@?)Od`UbjQ|bJo0xmA;P@X zzq%($i2Km{;20%Wd0K^Ja^L7eXJ!m@k%~Swdm`;f3Ctt`L8X2kYvLxPN9f`9`E)&; zRxTs}>D{ny9@0M5dtZ3oIM2%O_kAW}@GpPSH4Icp`{FS~aa7{#z9={rVCu1L@~#zn zmW0D9fo}YLM20rO?eWvRFQrh_R|uXEDK#oSc@y9_&E$f#(n6;CL|p9fF-cQSp2%>) z)X;E(C;f8(W%2E}qfMfF8Qi2o%WsgMu~ZS9sRVx1h0Nd$r*dB=?|W zIPc5A_@dSJOiyRkqupO<#K^ZrH|nmbnpF}-`NjN^2LWmCm*v}iR(*kx@kG9nC&2}6 z!(B&yXmtc=xG-N&v>H)X^pN-dTzme+Tep^O8w9v3oB=Kw`jBM(u1G^N-4-;GPhGIG zghuwhL>cU)4>5}_`bUXR@4UU~RlWi&O-sCd#bz@u+dkwJuesv#*b3s9xAas(XU@w9l9da}0V=kTH&_RI*sjXAOduk#0*Z?*^V3|3w@u;H>} ziM$oD+G&2G4k7~~n_^Zq+YY7o`$*2tO-K~r?3ffPnH=0SaNj8WUoMc<4|{OCaq!5x zOtq?BiNzWgP)x!PGJGa96#E& z@Z8dBYjwh!O+67%!-N0`3T7Af09>&L`0<0#t|$8Le$+eNUY(L>neq3# zdX~)2`&!ov7Oyd&qV16BIQ*W*N-LE>*>3t)a+h~++zJ+ZG5HIUUjl|!ye{FgJ~ZMj z6b_&9lR+z8j3d4J)SK0s(Us?Td;UJJR(nJ8U<=u~sQ+i$YfK`;ntXw*f|&5-J@h2; z*m6j5o^8ei>B~dbo8ly(uINgm{);v-8eQe5uxB8S{C@8Ja7=uTU`#gS)D|b+tu)p4mJ9Ess8zLk#JR z7ebupeKbvADcq3}_r||+R{+dr^iqfcWX+pm`f~0X2ii~Uw0#PpIDZdt*U)<{w3Ody zz~Jl{V@Zb{yykYzazF9FY;OG$428Y%s5cDP>g@zy`^WuGZGmX=-06Nkuhd`hUH{4e z?li|J0RUn@jBUT~*X6#UZ%X!L5Oc|0u6@lXl;;~vc|b+8tUxQJwfSmwkiXm{Vjzzu z!C=smX6l&hZLoQLZo|YwJ@0vns}ZtwvmMZO)P(>Xwqe~cHRSabr6Ar?b(Cf80d=d>^xv!s8qu*+Tcu!`k2ITe?G_(@0slT)y=#Wx^U+sDari8 zd!SpIkYm$9WH-Y)i|^7rJM96i5v*g8CF75O>Tvs1_4SMdO z5z}Vw=_GqIVT_o)y86a~DVVtfs6XcmpImbW$YD$c-&W%^ThD=Yn#5uAe5Z?d!iPO@C4o(qmOv){DWT9JU|Bt(4okn_-gm50ctnL zcm5DwOmjMnPAuesb)nv}DZ(+~H&Z$6S5r6Y_D(xPKX+ImaE4ue z2-5E83Rvjn>9d)vH76$-6%hXNm0g6dO;X+S#I*Sp_ln%tH48kium%#Z1?#D{M)8`oaK&q>C_JDIv}TAG;{@#qtV1Q}Fm4dgV>bYqVdj zxW2dd2w6;_Ox_byfQvyps3u6VXMX!sgmz{Kaqbsu?U#+;o80An8>LHjSGY=VGwJi| z0{I#E>^t}=nYeP)cKQM^Yv>4;eL0EHsOLvP*r)jotwXPGnCh<)84Nh zLR?0bJez9@W)BoY=3RwF5o0n??m?a>dR84yg?D+aL>h$c^W{zNbkryM;(SWDCYP7d2iYTkG?ON{WUKR0u3Qtp>;eWx4hQQ}1Fca<^Sb)KrwtuX z)h>vTH?;6)MQ`(SB;N7_c{}Rpf2r7}oa0ke99IsO%W)i!LH|9kd*v#8{#a*e)i5FS zKoRO;-)x@0sC!8=g*`y}MX7l07_D?M?=P^#-nNe+oy!>BmQrRi*ZihJt}wfhBPNj~ zOyF6$(4XFSISb0{PySic%eA{4O(S^^eJC91qrKde&;sG8c)ozy)#02LDDSqvT&66h z(xhE^RkONoe?0cSLKU4jNeUUI#7Se4OC_ps=cQKrbmqWda_-IN-j(5^b8sX&Kv6Nh68n+vJvX1S(+lo3RfrJ_*NFZ{)cq zmS`GsdL>CSC=@z9QYK;BlbW`Nz^`DJGF zlhU6sCnRmhgA4{2+xoa~7&hnkM*r04bphSi*~bjli=yK;8AV>%HIdhyIT{5blZjKh zpgEuvOL|p?`}?;>Dm>yx$NRp`>8<0)pxK6R zC%=J5OJ3{6tRU^xZ{o3^O%J-8rK`aI56bzVKp z!zI7OHB^@qH$Q$4Pljexd|#gGgpvgz<$D=Xh2rK5yeY&3iiACC z&8j*D)+K!DAN7=e#RGffyIjvNtZAC94|8f$qr)F59Qo6qa-UW~5tQs+uie@hC z>|(p3Y8;&@-z%5=W);?)LV`xdkO8~H?Q8cvm8;McYx@Pdb_MdJ5V9g9aa*Q6f%@Lk zM?3}uPh5kwMzw&0!!oFVGu8Xih=5Nr6Or)amHP0-$Q?horvLO^{n*1bB6&UXkF$?a z!~6~5?;BG?D-h*hrt^YTs3d>vL1xha z$LpCq7rriCbXYrIfZ{?e(LM zNjk`xQu}?nSv@YBs!%sQu_JxwSo`@^~JwC540-m9uR2`+|d?Dy-})=B5JR{D-@@?!YGOXZbqCb&_>^0dp33 z*Ei$SFi*`qtz-UdP>Clm-O$G#TZR-)5a#uwO`&*5gc+n@D~%=F*V7bh5dYW^`&JMd zi--Ly^1MrCb77u=4cu%-PJ}|dr7-5=iG43@|FmIs{`8XCKi!b_g^;f(h zc705D$&Zz1WxErU^>P)KY>b1iz=(TnhabLN1$U4O#DQp>ny(<;to-2w-M=ci@JbMa<^M;&;@)S0YRIO`-Y+NzvK~^(5Z1w zo$f4Hp{31Sq(ctE5}7Ww{kgU-TE(9|@&qo2SILfFu{QBXf;{^7QGWFEPJ>aPi!2~q zk=XM-XEgn`N)PBpTh|G-&y#$FXB9huHt__nWUTa(gBE#jCM#6xAk#7~hGV}ze@bkv z`XTo%*d4^QUWxko1nzEMpVOcNllPPYq=quBJ06BLZ{V{*uiJV*afNr*9(4h|GgK%rqS=Y(5^S z({V4Eg3lFp$EsA8d_0H!@mO8i)qT_Z(rP~Wjw=wnTy%T}0ocu>Z+T?2wbiQ->)ieP zW+2+EA0R=`R|92)zkafi4A1ADhsZ$+Q(rVaAdvqZa~r3V^zeZeV8;lJsHyWh>uO#AS9-2F^2P|4r% zJpLB`B?M7^XrTzOJsT8?rjBVBAY9YA1am@xXT~w{3s(BBXY;^ypM5JRp~qPyuf%L$ zaT^2zrO?7gIy2ej&`@-}{&XLX*_o_=L3AT3_o*x}sAWy{{oQTPk{Fy)>T6cfnfIC*Pl6 zoAs}5g20+SHxyZ!OMeFvv3#!MN1WqB_I;DKNfvy9Wb6y&p(Smc`SCrZa6f<)t1QN9 zaCsbz54-eIOnrv&Pya_z?KkH4c*4N~D-|3{=@N@HylWXL>B%8= zTE}Tw@u2vk*LOHW=1*xREyoag0K@!Y<;*>zPrGCX<=UXRXeRvWnZ2pQdYZaPcdT%k4J5kSjFn=!umE?UydGlIy%nQhVSiu0-23zQBenox{n!FaibPhurCxV$aEaNU2EcO=YZ>veEWHVkyFafB zybv?@>v`E$xYWKrJel0-svGA&S14BGz{-qA?4wx3l>{=n-)MZ2%`3~wmc0lD#Ekw( zz3sXE9N`P=6+D_U zztw*B1_3DuFA4xF0 z{g9@g?^g8)uM!7-YR{PwO4ah*w8wNa$yl=e{v7668^?e<62Jl6mB9foI$Dt%#phHo*ToH_H6(G(#pAC-V)T@?kp=$Agetr=5nFN zxA&pbdn}??wIA@PD1mRGrv|H8mM$)Nb>-Cn(#owSa&&vv^6!}SywIBTH=?58u7vpQ^&S>IPmB&(v>a4ll!s_IHj@(9NT>V6yD-j-F zVxQj3H4XfShiVQPk2mc>$q&X$RZ(XSu0+p+jOA3hQXs?F=vd(IcszTU^b{N;e^I8a zpvm6KNg~gNTd%?bo>CJM_zv?hRO4TbIpJG3a)+%5m;S>nMvO8!E3qmcTO4D zXCL*vit=regb6KKo_8;|8J^6}XP^k^EgW@jFsx(F4a`&=(AVh1JE>nD5X$b%`(+2~ z?IY34YgOx^S-?4Ec|la7c$e=Xk!b$NYGn0CEl&|?Cq?AiaZ@Pw(Y*%|EV`r@$Zei6INwr~3&Sa&JetoZWbXUj#d^r)$ERQ7(djbrQ$EWZ$=d zp^|-UzZ>$%mSbPNvnl8_gi`P-1N zSHe3JT!k1=v4VN&Zq)wFjR&iKF{zZkCg6j1?I7i}&x#Kk_4z%2fuM?g+53}?KAft;)6j|wt;}17vYuChc+O$_ zN_cTB&@&^Sc^g(&?=ius+Vrj=d0e!^J-C1lyqIb`;JHcFZ3tr7h1wE9sF)+5y(6}s zuHpmKnr;8eHFqSwY>ojyv3_{LZ}cHNfGJn-hw7-go(U@^*mO8E@d6(Cyib>sz@E~e zD3^Gg0l2BqwjGpSlZj`>^XsiD%mt(vS^=E(1M#>{B)!fg8E|aJDd;S=T($nVYQh0(^KXU{-)Q*&o2_$C+@n$lPJ^4K&splmuSC>-c2c6kX{Mh z!>R;pP4s>6A3ms9rRN7QEqZ=m<488AL%vNg7%Hv@iFousH{e*hztjkYlv+eU1=+cD zj{<1ruR-AUgVOl>0!+g)5dx8e9i=u@hF-6-aqE@o=yoBN9bK-B`{xeYT{7!yytlL- zv3ucYUE_Zv%(LIu5soRMf8s_uV2R)kFEqb*-oY!+TKbw_f0EH!`Fh@zXBS2C7{Dbj zoAiUe$knqPd@JbMOd#I0T3+gb-}Bi(Nq&y>s~h{o3B*wGQ&+^s@iyif%93ndz~jTa zX6;+;oA|9(6Vd$+zrr3b;V9H4u)k-`o=5h2{U(Rj2^bB%KV9ef2FtlbbkuWl+URs3 zzdvz-{D#LoyNn^$?aPYvG349uaw8ENDZvk5{27Y2I}LuH9I;zDGV-{W>9hs@eYt-a zr#6l1zF12gr0VCKUT1k9gdbWgh-v>Dd>HLIE|au8ANT4Ol#QbvzsFA_X7KmXbGbY} z<{_36j&kt^w(j|CK80+>h(fo|>+!~DZN+{*{Kd`>AE??06_m-BPd0!1iW*N-ZXN`l z)GgvF_GQH>SwM9^>7;*r7nLjKr&L1EJ)Hmrm^sd)Mncr2p&SHa7O3BTf z!`-*~XQoJXT99QTd2Y6EkqUv4EuCMABwd*6O?T$EBS*3Kl;U9%FZ=$cF^dZ|fxG$v zeG7J((_`-g8RbHJmPxp(MA(Rc4`D*_#dAD8&DS3<6OJCVIee0iZJleaU7PJjum?!n zdKO70`ttw?&k~u|)dS56SHhH)Z{+j2YoPLq{!hi263M+zOL^Y&bW#^Z4Ld>n5Qs16$^720FqA9EPvAPEcZP6&jJ8%8K+STHxb(?d) zRZf!cd6`$pt)omf4X;0Y>dr#LRJsel-(tcaEi~lyB26Ip+qVQ0cnvG7D$^}a@vnG> zOqt$hb%UIM0ngWcJjgS!kklAjUt9DFsN&cck0>;JVaYP8J&bsuzMO{fxHjEh`EE#s znFz9fp)mZh#SdZ+WuF>^cKMFfv3_q}=1aoC;`m-{FW2`Xzx{7u%YrJ`YU=nVT(EJNe)x!bxu&+kY4T*4^u zktib9S`x_ktlhD=&Ci){;2Q|FHjh0|{8O6>>Cyal+E0px8|`BefB{$#2WM8g6OO+-Gm=lCc{ip6?^$u*+9k!RrH3z*zD)!V6~mvgL$4O!5$Zga3RL=FWHHL5WqWzQsQzw2KDO$7aEov-~QcU z>DQmuy9xYNpdgL&o2pQbfU|rol~g~SzBt@swD)-N_5rXb18hZX_I!{4#R^7cyaO%< z2z*G<^_@9VJzdc5-@xUgAN{FIN%4Hh(CgKY+XWf=5z6brJ}krKMZo^nV1O^=OlY_=D~ zxjfLb85 z?4f2wcV2OgMFBtO*1CQ}@0hfNiTSL&Ps_6nzTQumCP&b={`qTC18{mh0>RD&Eod0V z;&peRN6Mf$!+dz7BuDMos5_2n4>0lb8@cWJ?8p!0CVE#hu@=Dq{NZUiW2RCozz;H1 zr1%GaL|K8PrrFF-saTSbpDu!kDqnJ<%HK1i?bo65Cfcl+2#*~{zCDwnCu!<#El3v0 zg%f_^_3&H{0X7uLItZzI1u=?*bG>Bn)4o@6Zh78KNPz*`kMQ;1g=Uq`Jt`>vNFFM{ z<$?i5$Z${u)V{jQ#2wgC-G=!PL_i~qPL>qYbo28wZ#xM}w}>$m#5)p!ud571BjfKm z=z7+5A3bQ@{w*v;vgkfpF+ zh8APHogQZ{sY9Azl-WoHxs^W-I`?Z69kSLVz)z@D?}Ggy1a}1|iBG>adFk4X{>6@d z25^=n{j(367u!A7C~0x7&pw;3)la-yGHht1J8?p;v5u>R-JMDJ&--*P&1pFXe%{OS zOP{NrRCq3lUf_9NCPi;QV*;RUDj%U0g$CCC^>ECK^>E~=k1`Iv&{p%w_th~9|B2!Y1iK! zJj&ue|Jcd=J-7&PD3z?6Uj!A0`?mmbkSlHW_mXfZ&!`Y1!RryK1l^zo~Y z+Sw&LeccNM1aNVn_ga*cEp^-)bnUDt&tq2%EYjc?!BvJ0Cfz&?b2SYq0zU7(i}DSp z@qE5Rm?XB9i*em|#QW^Cx3R`MpuUU<^X;$Gdo6m(GwGdXrqIB7%1e3@_qeGQwwC2l z=)(&pU)|#8V_r#egf#FcJ$&*y9Mn_Qz+i9|?E2Te$6(=ZmOxSyP5Nohbw^(+vm$L9@y>50(CdA|NRG^vM?5Sx1lX>FYSciQs{ z>Arq%r+RpR(#k+0h8a)YxWHEg=qwx(xwydd((v5t!#RTpzuIFM&dil7Lg~}-k*Q$p z9Q|zO%!|4`a%Im^^4skrw+_DzN741pKfU6+pHoHynMn~U{mOCQnC|?o`ejD@S~Zo+ zUb<_%ru{YLAsL@hrI8XkJeY;et~GlCuUxZk`vn>A8Md6+-|n&Y7ze9x zsGQ5`wppxk`FPLHiI372smEhaiP`ZcMv|8_-uCXqD_@VJ(T;nsU#h4H0D^P(?M@@q ztZkRSs^A*fQNI!Bdkgy&hmyuUmguW2r#FlXZZE(>a_Q{4i#R)Clzq%aBYLK_A0K!x zl|*ezpCde|qM@+w>UL-`WY$08y(d{H{#mfC1znF_^DepTm?|AFFGc+^TM3& z`!m11_eD72Warhq$A?++P%zIlGivU%CK!SBjJ)qnIcXeKKNmW$#b7Na=TXyndoIKa z)F|0O2+i5^rE{vOLr;*2AYqz-!(6}=*?!~ZX;m9 zTlIRL_k6sfjt*ia;{+Z&z5Dej_EKY-Bei(>(66%L(>DpT`usw|XKO&S2<2A$x^B&K`JYsj>}f2q?7 z%`hK|aNfo4?T1v1zLy}&yf((_p`V^T9|e1>hREu_yxW}jLDo|M&-NKN)r$mM=cYM#b#l`yDC2+wY!D zY2u0(ml@b;*DL@XNtJgN(P|5JwO2klPx|X3f zq0nFY=KMaU)~o70?A{$)QhR(uJ%0sUPZn#t4KEVE7+VOcto~RiS9l=Y#P_&09Iik@ z{W<@n;WHo2MiUpk;ip=DCbgvbflSbNhYE){(-Qe4vV!l?+mxfXs<24v8lP^)j`-BK zx2{ik=erJH!K=x=Pqp2Zi9SOREL5oTl-`q{4H<;(3#qnL&q!!lr34SQCdrT%Axl4X z;>e%%xZsXSYvf}Kw$fa`W6hHw7G`0rpbCiZ@hcXfFS@)*^4iunBYq;RmDrCAFP?;P z)|&?7#*QkDJQTZ9PcQL8Zuh6QRr$L)od0}jByb~-;+to2JlM!~x2IL&9!W>FRf;QR zkkeS17clrLg7a<^{K)q)D*g^=g!%3ZE0<&xyTc*0cV_YeY5$@OUx!y;{q;y5NBSkh zrW5>O`y1Qw>v+?}Tl?APW1PVF5clMru*)iF-`iE4*2;{Y=jRPZTDBJ|VTa)(eYL0h zJQ;bC^+KznG=yut56Vc{BX$5Onm-@XjZXEI4$5q@6~W8*;+V(Y)b=!A?{FaX+uE+i zY}Xet_;})r4Wia0VTC?q{ep(TB76Sz(BoD(hPhmrRNZm}j}dWnZq?C|YW>j>2E|2?tDR-pU#MUN5AT9-1p*Y>dY4S1=tZm!8D-Qs~#<8z2 z4#C99oTabBH*H1qT3Gf8g*&#()ZuzP#oLNue%9#Ao*EDipNw#hsNv6j5UW+p+wJ%0 z28pmAQ%=6En>M$)xw-WZ7nAqSjzWSOy+1iA+}Y&Skis~r=aR~E-P3SjSJUAd&CoDE5Bg@Gv8-$@6T4Qa=#Zd z9L^CqU3pW|%MbgkL_PiALY_eJi{HJ)gSJyNjeV`V6v(lX4x0N0&x+!}d)>H|dyF1~ zP^l*S-N1qYL*mUP?rC0XWWo84@B7xnE{ZRzhwd%+M9LY)dq_M+O`S;8X-{k8yFK+( zFtEeWPwERUB0i~~UoQxfE%8(X0pP^kfTL4t7c@2*I?Y&7JDVB`9rIS2+B-x&)}Ulu zAl#U%o)#&}YF|3~oYWfLiSRz*MEy?#zDeamZwkLe_a6B<^bz+RY)G$n-dZ6`Hu0&m z!Ynr{i}s_;8BK;b0~$EzYMztScVuOVQGC^#6q>;B4xVM_nt(OJ#5y@d-FyNtUz3P^ zis1Eockk@DxAN|_r`3`GS@7<1VqT%snyZ%1MQv8xb!;^ElZ*@`7tMOOVDpy_(|kOy z$=E^uGU3VtZi^B;pS8G87RoWM8td8Jt-C%@YwTdfi#huG%3yV(&#-hW*g7i)>wX=_ zkzY#&(IV{ZN+uOP(6alUt{gAUdhgDhy%((Zts-m%?IX6by@j68``XaLZ)v*pWleFa z$t_7|e_sZsL|lguW5NMn+P;6vhKk5P1|7OtKi<&o$CB4hm`TK@!U<6fegRXESF{Js zw2gn&UJw{P1?{(w9|R12pLFIqUz<9J48eg(P)X~a4=1&e)}ougk4*Xj-2-fP{WE;0 zR{)!7R@_)0+J)ymY;SPXMdR#O3a7oE2_(*!VK$Ncp~7yF{%8{rA8>Cgd1Ha3uQvvNh5vtu+g0=>d&u5?qyX zUyZ~8<>0MruZ4a|Mg;%F<>&|3HPqM%MoH+=iKH>RF3^i0$qC-@I46%2K8v5}^+OO0 zUDzFM0Fz-*9#ERPxdW;1)hw=@L^{77?Wg&}y;B(G$d6INYST#Wk5z`C7V zBKy?>z2n^w6774=BPAy1s9E@+`{h5FtWs;uwBc_r@=TIia7YaEEmSoKajk?re&11K%|y1~#gW4^rg zCbEl>7N=&Tlb&t&`a^iJ_#yN5$sIT!@;V;LM?A!6N(Ufj;sCV6I=7l#=2mcoS#$3D z;{tY=I;*Z&QJ5A=du6X6)kKAv_b=0O$g{3J)Z98Fw>TUgLJQUg-sY4OB$>t&bXsnX zu&)^{TXDl13Wx9OPrYFyETRWhX&|SZ`9GT#c6y$r_4ezvXH$Q57iv&(nu8Vi5pz#) zXJ|XzX6jGfZY3e8(+DDPr!=!&ktO0fn@#c}GNB-s2;EbWekL|xKL(+Z%In#$8iIJP zmWiJej%6L=1KkpToK;lcmK9#VoD!f-?^F!t$$;YQ{fnwH%t%*w(Z1!md>;AMfar$$ z67g;37nPL<6trDjp7&_FQ@F1w+tHr$-p4uz5ZSjc4o>iH*^k6oPnhCJpKtT3@{h6z~Tp41cI#lLk4_?a~VV z*ZgD;ew_~>451^lNe>H|eLygR5l^1rcrd)Dj+$p{9%#$+wmnrucA>#e>|h8$%4(PM zO9e^F=Hkn{KO&Vq1b@|bO4yq$(p8lAz(cDfK>7Y49IHjXVhOs7c$E`xFd;JT{wG}m z{5yP2Pkn$_f|zebYH%`lH_q7pNa4Ik>zdpGrVPsf!Xw<}{_{>`h_yyyuv0;o7@FqL z^`_L_vUS{;-*m7W`j6fNg# z`)b;5`)Wq@3-)<2p3WDxOv!5Z?1o+0n%gv~=(bt*{kZsMs(t$x+!HKto^CdsGbsyf zHW~gLn}Xihx<_gQOK57lsw~sA%_iaPq z$Vs91c-s8_G(okacuNsJmNmC>_bDMyMNkh%gqPk0CkG#@rOnw4`igqHI1illKY*dsyj`jX|ek62!51UopI9e<6L?s!8t zGCzyAWjM%jO~x$|yUt1q^tB{5?*>WIy%1??7ZeFU&7@u7Bw;K(Q}jtG8!Q3*+5mY0VbuthncKQG%{jEJM6llEAx}H+{e%MG98Ds8fBp1B>J$q> z4DhLT;Jt#D=Z_aT!#wu`A4QRC^4v6OUp=@TzTP8Y-B%2o;OCi6#wV=Ah2OF)a3e&X z^v==2UEzdh#W_i3f^ol`gMHcum-ji@E}!>mN=1F3{qqJo`fGjspd>s%6Jn9s@(}L1 z0G?UG}WD8EPT_GlQ*2hejq%n$XG)^M-yw!k)h z;gU5osGHCN1QD3wurd3Na%rY2=S?{>!K*8l?w*YOFH~o(5e*8iCZMYaCI$)Y6s`a= zlxsb_k0wSB}X2T7wiry&)n92A5j?^@L*rQ$|&!eY~qX$!zuouH>q!` zMptBiz?U@mqDrPc3SITWhh)4$e=eiFNsr(ou-RYJggJYMi1UZOb-5pARkn=VBLSxr zF2s7lUr2I5 z;uM$_kdXGR3#?^gT%#Z)>@hL1mP? zzkSsFIKV))Hw)9Pw3}`RyK9rFKh#PZNLZKlrAsOFllT_87Jr4Q`;mLSNBCn!2SGTf zEJ);gy^1~Cu|6uEcu#*=W5Y!)-NOKdOJ7Dc^!U3oa~1E)=eP27u@;8b2D=`1Nzwb= zfIy5_(tdF+E*rr;oY!qj#H!1^Xv8k>#|VWlykmb;bKyqb7$O>)rR*QA&Z0q-JX=;q z(Xb*4p=R7VtPwNz#IhhG0?q%8-im{Zyv>T>{~bs1Pai#oYoz4=lw&duKgd^X);lE+ zH@k+P8Q$H9!qU8~NjQ-f=!n^SgKXmFQXB>y4q{OR{uG-~De)M91FLv=0U&XbNc`7b zRQP=s#zR}#RDd~FErD+RU{;R+pQ;H64%72yVU9}TV;>IK z#-(C~n>(E%gUHY!dFA;Y;#?nl`1Oa{xBn_+%{*7)^;wbi5+QiP@~bMm8}1=Fp!K=HIbc57n2b zo?eyhncLh~1f8xij3$%QZNWCQ9JWIW@XPa|y&fD;zj)X811XidKbO z&8I^Sd=l`;Apf+F@DDeGCYoy4lO#&ZCuUxS8|gA;pI&To@2;M|OL^4y`Sd0^cJ^1` zjkX8v&IjT8!S?pIshIZT_2=GOir-Z-SQLnu>TVmU+^q8c;4*w(J~A{yJOs20Vtonn zsFegUUHbivqmy17DCqO-Uji-hhoW85WW;rSW{7}^R8G{A*m>a!MxCa5>#~pA#Jbfz z%|nHM(x08N!=c~-FV?PflAXKjK7V-A8kZ$E9h1H<%UOc|BHcEu(DrV25w#B5XP*PO zKvI~Omt2-1aoMfCLlwL-hUaO|xD??V3@5!JPWx8f7_aupEBblg$%C|+Fh`Z~Q{1d` z{J8||R2TAgI$pG5ayOHF-jjILDnA{(yAy+*VqC|irD?>Izsp4e08d}Vq@JgT$F^0z2y~&Or*qHyLT6uZ!+VV^Dsni@*V&bG_(n@4TeOtHX93hrD8_ zUx2;|r=LI0xg4uvWd!t9$(xETwJH|KUbMe@e$lMGkObsX*~jVj`$;5*HlSWESZrz7y2o+N&3W*=IR$Zz1rEFd*FXbSt=f0y{z zp7)N>+f(6SIS-;0td~D)MX5IAj1;f4Abh|jwr_RY-~Gz#^-!+9U#H^3>}0p!C#ICS zr%P$WCoh)i|$_UWyI?pO3qJ;Lt$%wcs8eZN8iY zn3de}jf~-ce#OG41kSkM=`qAA260fIWs~QP8vEh@f%zk?DmF_`Q1kRI#x4sZF>!WQ z6{)y*)Sz{fU3G%5CY(?~As@{)!ff4D8h^g<5kLS6)sVa1y~Rqu-!n9S@XFLI*=>2$ z8uj7i-lFgV1GnX|8s5E?juElrw$Rq;C&xlZ?IZyB0VBhXB?B>Lu9}}pbvu#IDXYTuh+Fl5wnH1~tq63zTaC8VRXZsxw_p%=@H z`T;2nK*n*Tyns&SX;;0UH54wCGxd&Gip4DibX8Xuw%FX-$C9T&fN<5-<{U`vaGzy6 zj1G9yUHND$Ak*F$ToNJQ)GQ*LR}uf}ZmQkmrxXNuSnCz|zkI5$tbgVygL3KR#H_LN6o?H=|7okjt^)T^!Dgu}t zuWpO z;dF(llWq$WL{#3M^&D*&b|`d5`}(X;r0xEzm*HyGg>s zhBz801jGFdTg3Avvk4>1oGDiiGzw36sk}q{{(e1hMJXD`D>+{fccoAEC9Lzf ziRo^tE#rB8OW!DoaF2c)2>ojIt@uJtZav?uoo;6>KdlvF=beDXv?oeNk&PThq+AMINz?|>f!E4h@>AcX4 zC$jrOSnJ&FGQ8d9u6K4`w;p13=I+JCULb_~U&8)iQMRq}H=Ewy#%f`FhnQeQqsE$L zMk6NFa6K!?;vsb3>l`25uTdX;;yor($G%$lEezcrI(>|h@Y|-}1H4CirdrJ*evk6h zUCgjP+_pd#jn+-xU#`2B_E6~#Oqd8wP9^y!LB+(9Oz~+CegegajVc|cfkAJUYKnPr zU=&P-0(T%J(KIys2myxQ03-SOP-r3e$1G#BSAPIZSlpw%Dv%41C2%2Cvq&#{-RA+Q zK-;*`?ynr-VB5=zeBw&><+kXaS=kCP4951kXvQ9NNQ97pcoFQFJ>pN%DBTt zJ@R$wr6K>a7}aFF+lgu7A#HE%0k!Z2@?TuUzrAw&+`!hS-RhHn_c|I+E9&tb&g6p& zj{Bx(sNY9z{i#k!5Qgg*mV*mnwZ2?|%LWcoOiybZl8N3V`%B|}lY<^t zq1P*?Khos1Z3jjDfSP&><;*-D2me}=Wqcnvq2T48AQ`t~N4fh@O_t5OSog(__k=9J zXt2X=j^9ZruJ2l|=bQb39$a|1^nn`7L~%B*Pu~0{0^V&W+UUQSiNmCqWd0S_w_nf+ z-KHLrMw1y!^HHsiz65bIVCe{Btfg`9APZ&4C|-Zn7J=`>+fS~5p)Njdh?qlqQ(gO; z#aK7K7ES_PP;U#x<1=~B0iWas{ZPxM|2?Zk6-Uo-XK&wIK!D~LhkyIpbGC2H%s%5i z?U<{StE5RSsT&xW_C6W;i_Vt5R;8OL*2mL3zwIbC}(u6u5dLWA^6bdKhVSkTf0SK&?r|BoAEB3jbXj( zLiaRb=jo#tlg+<|+=HC z*OR~;W>i0weX)iqbYpha{_RK;zm(z>PeI`+TQ5HGe61*hZ`jQczcm|(8i#k}{v2o0 z$=%PJCV8g+s@l~*;r9EYZqIwLsM3GqNF2)|Cc_}W`n9jW$?Zq?j|%TGPr}9O11i7v>&=~5dXbu2)F%t5x9*Rqxf5)l$?cnLuuh0NM@0k@cJR$0s&lx+ z9zw*{*xh7+H>Ffd+KtqtS9(OzD)JE}fII}3L02eg^?VBK^rIcNZh!pvgzfL>Fia_) zx1+OSY1j$w;}G@fcO1yV`Tim(ccFT964%hE1a(qr)x7C&g63h>dyF`i(hYB4mJZkU zbUU7}A9-ePm)s&AzoP^OT>!tqAH+bw9dQbZ@>~@h1Hy9jwUuAWUyR^zXy(&-7KXSH$(82bke9jJ#mD@TzISeQ z?lCpS+*)$fb4CClp!rRMJ3A!lvv1&Q9eX!aa0{eSZ%9^4XOXyDUoUxHhZ4~^h^F)z z*CpN3F@&~B1S*& zTciMCmRyxx8L?XiC36(vRtR!R*c~jujvqa_ zo|=c3+Yu)mjw{zVQoK274uP5Nkf|_WNb_R}>ICgC=slYs!MKsqK>+JYVIVKy7xs;# z&JSqU2flJED$S+R15IJU-WgzNZemB5WpLmkegLU2C zXFu6TTy-wQ!_Bnv(*hh7{E9qr-`vAGRT>+AS1^xcA<5IP^PuhyL{&GpN*?+slrBQp z@kI*zyu}fy#^lKD(S(l)M)T?kOim7PUE`zd*VAL#E5e{VW}lIa4htSz`-7oGO{P7U z==DsoWfHcwjoLo$&Z6W0h6&5qzDEX-dsf0lV^OqjyRejQUtvmhai0F4o59+BB*WXa zp>)V}ZTmE!<15?jXKgam(~44JMJUjhXv@x@+9A>XkjdNh2HaQOm8Y& zJ;P~GEw*Dc1)lpMRO%)1oCG*F{sH+XMnI&$E>_1+Q9z^jmVN1g=(Uo%hHv>~ovrAB zE-xD;WTl!`6~c;3Dm-cVelVt5!eQ*?bmQnx;%pXS5PKLIUyfG>McvC(ABE-=2^!Ia zYG#-M@e{bW`_NyHfO7<>E9*ggoje=}e&{7#;6uXAbP#O#-c>>($QHEq5CF;a@QFv{0a*Z({&U+z7fU%X+YFSwA= z&uhDozu2Vzs)|805(P`D>J_S&(xrf1LaaH~g$F3rX8NOY;ws^kB-M+|>6dY*Fh&#* ztU(zk)P{2mAxVW7#AE*??6p?_lSe$sme_7`!tkiLF;TV1Fd3;J=0X|lqe*Vk@CRXK zXYLyrISO<3Vb!*uPx9oqs9``fl+z(XPyo$Ll4f6*LdfjPOA6=;>J$+qiGjqzs~nVC z?|!`eDS)oOWwK2^VIKTLeB@8bHj#fxE41xwkZ`Zc84`KC)5h?9{Q<@+{Q51+FJ2WZ zadKYgl^=-?ks_@O<-UT(%_L8i3P7s-D=fiz2>d=d()0$UzYbjMx5mI8xAOC7jut4{80v`L?uEG!^0&Dr81`!lnL4?D5WWhzv(m zbw)W5I`a)m_N{lf3;El|iT7iqAJAj--ky$op@5F}`23hacFEO+3w!x(@NJb?5UQcb)C+bdENjXXG~|O5h&%JP6|fBwNV|J~zt2YXUZ>j>4%ijh|A9)98Hoq*hnX8AAV| zBd<+(+W4MixYUw+j%Va4W8?A{x`Q4|`49qJa72&LadW!4=gou~7U9n)37REX3dBl| z^k$LWw^bkY#IU`qL2}0JUzR(qZSnLjiNCDuk)mifa5PQV+NavmN@ABc_Z*XzItEN8 zpZ6uLCXOBD_UA~osgAj(Z|Kk^I>Vrn?6xA+z?6NfoLOmFX51(cVtyGGlgEY{ha#G(D6l6l8@o9 zlp(o3QhDyLVEnQ{zi)SX9*pTsc#XT;*IjJv1h1c~_d~w?LD7dzbNtc7y|%YJnc>A= zX&N7}j&(r9G&4A!-dAz6@z9ms?9$LSdpoiov6%|AwgXw@cmN*XCcB6^QCICC{ zbKE@j)7N+zRShB^rxjnkFzuBBn2?n}d#wX=CE; z>oXzeJOWr~qw^~z)g*d1^Xx_)xaA>&H1jPHTRDj6B@XprOOCeM*Dto@i?8_gOvl3< zzP^VjJ@CeZGQ8L5+`}Jeca8}o6e)d{LHylAp8SiQF(aL`{PGyJ+RM1to^WwZ7LwNSw0q>alC2$kEfE?%EfYN5a)RyMoy=cvzqL6qPJe{ z;ix^7JyWjrC1-#ZU=_RS;(eqjzqWf^96b;aZ{u7XWr~`FpDM(XO!oq>)IQE+c8Te+ zO!7{oH+jiS=6k-wLasBVbFxwAkWkw1$dT_Irzm0TeXHL1OE*2YkjeuwPr3T{NsOy= zTEtK%4T|y3Lc@mt7JcEw@p<^n;I^IKg7ikBOY(6btc$e8;l|p5|4Yv`;qTj?#4LZ0 z0i(G8vM;00qPon@qf70(STb+8GA*jVo?iMqmE5)ZPU-HhwVm5LahPGUA=9RyDvNBw zod!`Y2u;t+K}*+$J;!J292(6z z!)@cf-z~mP>%De*9%Tb^8eP!AHE3C_Z!eejVT{y14=e=jpLcCQSA&DtL)Mq-`Z-&* zd7|#+PTQ5_D5|9izOiQ=nYmTEe-3JVIxmUP(bw+H33Pr(YX($d8Ks@;+iOK@?l@2) z5&rH^?wi**$a(+IZChoXp5*#mM|{3iPMG!i0qPzekgz3@bDuAjqoJjUZMh|dZftr1Hq{Fxj8K8V{~&>B~0`}LbWb4-+6U*^K!tX zFLkzN+@2DwEzj@$D_+{1!^o20bn8~>FFi*3-1WJ@Zn*@%tAb^+kE6<(*xaP>+D8(z zU!f?am?$!X_N8riP#Eydsh>fhjDWCabT#r3P#V84_kHH}S#B}BQ zC-9O7JZ7_979{Fk1(Lvp6>%=URXtzw>n4;}x_&&x_dN=~h!=(JydC=0d3*&z7w;zs z6+z|NT&B^dBUa5hZZF7q?-g|6j_6nr1fM6k+e7D<`_!f3IAC@@($lZ{rma=AiaNU2 z%S`+VQVEYqeKVPT3ajqSum(l&tgvMkBk#3QM>z4jOAe#u_-gop zF~Cr@;Z0ayZn5T?v}GV;tVm2*!#mtJSe*781=rN}Z->m~`vYV^%m%{!rueW( z@ZR*r)Q_zCzN}k7tS3?Rc8w67>L>D#v*#!>$!=K#*aCVO1N)558b(0s7XEoB4F>C( zXROMA1}hlA{IS6Ck+pc$* zm2(ezqIquz>}Q4fZ8yV{(w2M00r~zmv{`5d#Sp!+X-a#2!GyCy1~enYw%NCfFZf0} zR(RSkIx{WZhoIN+tISGwyyBtnO@F>VluK7d3n;v1ldNv&c+cXwyDlHQX;i1 z+i#>vItsF$`Ce$#FqXK0UC$q^M`CY}UqM{t#k! zCMkXD4{iK>))H~iZ#GJvYE`!V6RjH~{1B+(NtazPpEl z_kcdpD*L>}$f+ye)Mz5>X8TF4+}#u&Bhgr9CvUoa?l-^^%S?NT&*>1IgM>Fa;)E z$Vxdwr<{@+9aeD3iG)a3C$>N^w`|>a! z1(nf7h$jK@k=~EjC)B85Tf*@+@s3RU6+|}8la0sgYjbsFpC^^d-5AkC_pNz~T|7i@ z{KFE-K41LPxQ|lk=|tc%@i$V8&6DbGK0Lz*C>==oKn3TfKe~!I?<)a_W3*7m7gdZi z+I!9*?g{R-Q#V4vByc3V5FQeXM>PQ$K0j8ksP-M)$_z>rs?zXTUN2eW_p9PkfP{XAlBUVTWY_ zof?Mv+}Msfaqn`FmGTrFnRc;GFgpQ@{>BCoUguWl9*SiiJ&+U@NE1ZY;x)D_3IU4tP1_qOL8%pwav(P_oC0tQ3~pzRKnBdrUsNX$!@?R zrB;2q8Qd0}6i|8%@@A-$g_)W;-sl@Go&~580H4rul>O}UlxbyUm2)YvLSX3qq&1hxv3#v4 zi*(TQSDy1XZFcGxZ9bYtVC%Tid35L|b2Mo`a!cNbs4Sv)H0jg+jKe2@&K^0o5=v`6 z3)kzTbI&h?lyCOL?)Pf(w_|<~DJCM{J$2^+;cfyIf|6Xb!GDY6<@6X1S7eT_+ni_j ztBMbeISa$-^nOx3nLpn^d|tUM#5alNRcbuxu**}EDs=YLtDx|A8ME|wU5%vtT>ON_ z|ADl)U_}Z5JVdq5Pts{+_bksFfx1Mrl|gkrhR2?blJpnRg$4l<7dY+}N3e=1bSLw*14pqH0%}T)at%_%MHCzYsenU5;n1g|Q zQhxtbbwXJG2J}Fcp-@Rs2CQnEwnySPH1#3MTJsp4x@6(5j-B+^)(p$gDxL??eutJ~ z%-tbGnI7-|5{2`9pCu;|Ud%Y5U~Osbh+XfmfTwcZm=Fz9te3{)b&2TDg8h{b=8T!JZ2-f`-V+;UKqu0cJBl`!dQc zc$yuY%k2s7@i4)yxc|l6jia#-N&UB>tq;{*tN|Btd@2@A5p~_MOxLd$iYEqtd-^Sm?r2 z^TmuyJ@w};bUbwcg>zhj3+7KU9zVxt`Y`dTrEFDw-9Lv1BUZ1$7cY>~-7hQ?v@6h4 z{sMW`CgdGtBIpN(nBy{DM^T^Nh(vLSE|>!?AEAJgZTH(Cft?d=vd7T8bFNjuXzPwk z(a*1bDx#~5I%!eM%^_q|MptxtDBmH14epxPJB84p602EwD+pWuq#S=JwZ#Sm1V`j3 z^Ij3=c|uw10(w>-Kj5x%n3v}r&nDol{R3Whj8F1!pX+cKC;*WxNRMUMbXz|X$6K#< zXku$d+F{T@e|8Lb&6d}19X9$w)~&!I_dE9fy5axq;UuL_iyNs-hC z`rLRHg}C#twM4@)zbTFM$z4W$7S4if@o}E#Kq-*ka4I^l<^9S^Hyv@-lI3=rA)cPY zAqG66aLDU?gSb=Tq;M0+-Edm+t3?|n#H`&P1% zMGyPl(JpOwe9sfq#nJsGB*!0xNc6kvlN0#GvQ*%Cpthd;USR8dpk(_qAk98c$!>Dh z_MgD)|Cm(P`EsWSOU}weA?(lZYO|6z=VCdLepfO|kcN~_pW%y60s8@&R@6L>QI0OH z7RuJc*C=>gX6_)istF1@SV21a#`g|xh=Qmxb;wux>wm{0)Y_G9YZO0aDTIdLEFZ30 z5~Jj3*SQ&A$c^M#8xBYbmU(yyUc=RsbQ>N=&q}1c#{wl7k3OkVDe2F!K#%WEK&_4U zH;S_`fN_s#VdC+D;8d3dpkPTErnB3uyh4G8ufs2Kq1kz2`~F)boAA-|2x&NbL^sNw zPfKfoETerNdT6u5^LalI2IeIB=)FVx>r;AjFz)&1;u3TpQ!H{0MC`B^R}!vZrm`Jm zNO$rL%|d%&ghIa;`m@+gdZhl6$U3V8*MdD^S4YkOT}JN@XIR?-7*X-dq;>k>T(z)8 zCb|nL=RTx+S$gRnKHxG2V6)+m7ncy7Y4!;s)TLst8vS5i%#@jS0uw=TRN@wPyw<&^ ze@WAu=HbnlUj}TALGBU>mn(SY>ppZ93z@?k1u;%Ha5hKT~ z$#rekqr>?Gvm^&}~-kil%oRARQi%r5tkq9p6L_GTJksP_ILSwS{bkZEQ zpES(;OjtiGof)2VCf_5SbyKGBT17|a(x5fRRDZ2hGRxX|h@!XwTX&&KV3L~LXt>xO z0ocxOZV%(`1Dleb+^rh}BpY&nw`3_K#dYdf2+tcQb>)6FO5eA|1j@^Dj;|Nk_XWi& ziR@9K5@oe(PCJr1dIIm}J`;6c&l>_H#sKzCzDAzXN}LeU(G)C$JD!SSJcF^B#orf_&&qK>0z8?{<9_rL4e8FC*@wo*GSGh! z*7l!HC=#ufwGUT)___D*ck-PQzFkf#eT_Y^(sKY(H#Zss8%0%VC_UFgolYN@SDm9+ zc7Hrj=RcYc*yY%8W0~`CsAf%aPfh}Ei^96RL^mNi70u6)sFybMrZrR!cO2~6o|AxA zEc4Gw}&6$*27i# zlqCB6Mi`rg?9ph~sE!6^GALGm!=JOWh*2Ub#$|*Tu&sYRcc0;nFGV9^NFkHsM*-&I zC>}!EV-y@uzo_BHQBKz1pmSuc-2y=Bv9X0==`P0+tR9Yd{3^!HMu42?7Y2Xb&Qu6r z-P51jU%Lm^>#e#J>XTmokilz&je57wEr2`={5DcdZB&o5S=XV7==N5cQr;~5_WGJN zjY5Uso_PAFm-r3}2Qbn;;w)a6`Vt!zce-<>@OzNQvr0arL+3N4mC3kq{oD7l-&o!q zwWc-(b=Fpcr9=&#YQrACz|U+zsDF3sl7J+p-S21oRI#r_LESq{Z*N2qmC&Y#C&?(H zTy<|)2HaLVpjn5pMgDv;v?1QKFppTu|CAZaIo&UB3hqwla_9-}0m9TFM8jl!$u#WR zTt%CedvG{fE-7$qO$WxkobC;M5Lbv$y%4(|NntJtD1ljsvUGb9BSS?10KkVOQ{lvG zxrtu*k6WI@WU-c+b*{In`y$}-{NQ_oAp){|L2Q4R4#7PCv!ug^8+4*f;v1dt3}K~@ z9B0q@KVfuZ?!$b@oPAG$^x#?_^|!C%C8*QM?(;)Cvji#3S0eKVDXQmC#=faiD7JxE z)sckiRNZzncyO{%9LJwY5xX5D(1b{o*I_u+@B8}nCcfw&bTuF7#hmPI(*ySKqI&`z z*|SRfdn1`}Zujl3+HmhaN59u^hyqQxR3|*B-6mUJk*1kJPiTzba2FT~T`=puN67?Ff-3W8i8^= zzaF9gVaDbwUJ}AivqSPVr)RK_PE)n(I4cclGFaFEGtJTK>8bjH1C!d~qQJ65KJs7% zEGS0UXLz#Q`NS%ji{VyDp!y-e?i+?{jBL?k^x-$6&P?7QT@osT z(#uS(w;cLFDC)v(DVyaK&e-(GfD3BkJEOu}YZrOH|J+A)`07zrA5H!@I^^*MAo~%7 z%->(P;-I71K0OP+G+Jh5z2tJ^AI@JJ*>I9Bs{7M5FSmC&+jT0}=+bx+bskeI?i&Q& z)Ot>a@r3#?i|>(sJj6{a*pw=>yjPr#|viNj7z@VoCa zA$Asgv>>S9==!eZwaK>MR^LQs(j%NrLzQBjtzO`4Rg{b)^slQ8Ob~0rdcp{g;(9o!`kQgTw+E?`n2cN<3A5yEy zPIdBl?OoV{0ca(Qo{I<}=ApYu?#0NXPMgqU?l3o>G;WIyb0(KR+}po21btv0j zh3yzZ(_ud-6@WKvy((T4jWY~eyY$aXn6b8p=HDo4H-$df--UY|qL<_1 zv19W=C?u?&ez`wC-#rRZ$oc-+D3*vP{04)nsE`~&e`};K#N^@rmk9l}Udw*fyfV|AU8q@Ny+iwbpUhb^F=eC)T@8pLw z1(15hv$SNZGwd?G^BXpPnN?CP^?}t2PzuhLhkGD-XG~!_-Y4C-?NJhbqVb2A>-~#u zy>o~@i+^`C*K5ubvb0+i-Fn_AwOi5wl|uU7K6wjqLcb+{L5H(pEfOcQWqx?)2fb$1 zvLnc~Twj1KaN}$5ZdMi^&OJX@#!lgT9}AZb_IqR|oE^q45F)c0`MV#{k0+&KI=_lK z;B!Dyt_z+PmWdlpI_)(lATH>0#{X6GGkvEl308HQIVaxPl@CwQ88<;)55>b*y7JyLlBaXWdA-xv z6yht0mpysEzaxJ3N$XC=Go~**D&0UW{#~YpC}i}L-B0GNeIwRlI(1nS{70AdBgS=X`j&;YmI|{cEJaO8zN{bj$I`Zevh{z!rSBb+i$#z&Z>h!aDFM; z_0C!W9!{lr#AoPLrEQE+68{KOctTu!)BR=kMZ7%r%Rf7djeAHMW%%dFvh}d;q9wRW z^9gwYNz~K!gGaj3pPhkjwo!trE_#R^edk}Y%hNfkU!g0f&-(xi}Nh{ zN5CuD4Wu$WZ_`n@{)@a|H2wW--Iz(?JGCjul=m?`70Bp-ft|EUB;JDy-%hWqgIG*` zF?VN?0e?May1}^D{_vq5ziB@W)7L)MglrbIN9IF&%q6uxQN-ocz}61#6nM@uNhh1T zYv#419#0Yx0UrDUx2AI4X|DFI;<>n$X=a>iQX${Hhg?tD(lPz{LJV1)Napbd-|{37 zeD?&r1Kq8b0u^{M!HKMWeBn1$$9L~{brD|2C>r0gk`+0Sdz#lC10LnD5!3V}-?9&> zX_A)jONaI;v}m-0FI>R9Pq|F%>hL2X_R7BvIl+w77m2=mo;@LqaQjlbkf$>$Da(!i znMFls?mmL%qrcBCFm`B7(!nPB@)g@{G2l3uS;!?lhCrFtV){PF2iaWz@WFgv?ANZe zKt`0ieu3rh@`N;q@7>cepFdP~0s8J2`QWwhMp*{>ULF8AZ#y3rzCRXEGk+mO05T-3 zg6u+#(c0#JPUp#t^g%<dzj+AYIMl_i4SdC_%gOT5!-&_hi0rP=W)|hUVm>U^HHFxyl$Uy zm2QzG#?oB2on9OZ6H@_g6m3`at}Fq-J^Uy>?yn{j$3X>$8)BX4WH zU2gLW4$kzg6~a|7bW?n$k}ucUIyUaH`&O!ddG}>^#lUmEwemqHv#K@*8sz5V8vw%U z(y{%?|LX2u^gF+%U0L#AUz>OzE{$kujps7v?{z+ouozxI8TWaII+tHO?c%_*?D5rr z=oD1`2VaSbNzdo5YN0EtFB$@(sBS`fyV1v^SmR>wlzF6{y}d#Sx`q!H9OKU0Qgk%5 zHe|Ol3$UnhP>t!9|E};KxFY{xBav1uSz$;ros@5d54G3Wdc5y_H(|m z1qC*Z@^YUa$cvpylufd2DGMWTt|2!fFF9n|9vfUwuae~OaZbhyX?l5w)(S-Sy;z-q z5CbZ8Mbt<8Hzk1woCqw4yy{%?SWkn5e@m?mD|);l->=x~xmPw`ahx6QgEzuVJdJgk zI#f`tQw8Wya|Nif0nXLks(Ux-(SxZS&m&9TS^hGAy%J&8t5LP%QHnkhE%}!j30$ii zZ(5)N(ZA ze8-ajRQakZ?;E8v8)I=+@g+~RSQSh52*hirEnrARN1C6FExPP;v?c>|aoUzUng8nZ z;YmIf9=E|H^={;utbd!2NHn!iEIL>oO)4^uR$GeGi=nR$x=QBtbr&8A1>eAae3Zr@ zTsLwMKQ*k8*x@-yuOhq1p9gJCa8+Ty$VMO&o?{jBP5li5Ej>fjv*kHUKL8mG?-kr4 zTsWlChhbl__B-iU%hzhB_zAdxcLJ(nKg*2hTRJZ@{|>h~<`_Pu$43S>qP z@nz%Wt-v%6F=0jPp}y30D|9mPe4(%6ad>t#%O0ZHGkPTeQ|mmy)teVvYO*yq9f$HQ z>Vn9p0@E@bAZ8rBT7^|qh3^6VIW_6GBM%Ge5X~1sk@P-7p?gdbBqI>o_Zkve+}y5& z8Fyrutf={ddKi0BjoqJ5tl6PBDhZ8_yBECLE>CRK=S|5#4Q9lp}=_5n3}|DE`2tNTi94L~BFSDY-T!u}nb{d^b;k>6U`E1S$V zfPy-bLtK==M&pZ6jk)$R>zg>9dg##GA=t5RoPMp>{ov4b>@UiSP)aD^PKsmc$$Oww z`|>*CA84j1FZRoH8hw^E7`c%#34%Vb_>E5!BRM|2`p5Y+UcRW0ohOd{WQIn)7RtS- zzaKWpACa|8YTIhQ^aAS?bm(4x3@Xxao^3AsYWWQIEq^)&d~#+k=#e{b*My^U!fl0{ z`5qvL0B}S60ISlhI+W@uQXa9rT?N|`gylH~=dio&n>-}DRoIm^6g?^mY#4gh9m6@uRHvh;?9z!mI(|Uk%w&IG2;PP|&w($(0iMPVT6YNX) zAc`S^ih)g+aB|@&Z#RdC{`woAn3n4r`T+ zl_vuuL2&Gsn$Gv=dw5bNR+SG7#|oNbHi>1OJ;sMxO1adSbMHD+(^fdwhs(vIk~Vd6 zZhT66D5mE<Z9w(THc;O;aITrC@LordgV){v7J(pVnzyT^7qT?U8kEZ zZWa2A$5iJ7=7%;_|Av-s;bGR~GZ%#UEKZq-GnE zQ-v@t9L3!dyk*~?2D;ZbwB+JQ=OUYRdknMfW~1|(FTOeuiOMQt#hHm zCG~*%xS1%`2kB*I_-&9wl;b}_jFAI7y&F@TYdW`Z$vAX460VOwE)oE5j@?bJ`aFU# z*Z#Ulb6XI?Hu$n9jZ0iVjWZO!X2~bWa`|Q*ZaUKCQ?JD}(uMm#<>_u{KM*ccV-DR; z5a}VOXy>(vGWyd&0C4#6SZumU-8Tu&{t|LdXSH{?HPI9QspA?*2A~XX34!TT49h=6 zKw39G$y`b6oLd*eA*D9&Jx{u%0@ptwv-oP9KySXfi3Xe4~4|o*S$>~ui7;C zwFrUl=etBhglh;wBovi*8&CDhZr$VcSo6vDD6R*&B&dZK-=D7WZ?$hl*!xMjaAxo% zys~|lM(xAs%1D{&YqIo;rrAj~{3F$8?NtfjmWR^Int_<^H^bqJAn>>sy1{K1xvdnG+VmSzpM@6W6MQ&Qra>V4uFvlijx3~CW$3xm%T3H9pfexA zaYmzLh3Jw(BS7vn$)#*xlokA>?=uKisG2XXETdK0^0Gl0$IByohrKy6xrA=PGR~^D z0L1dheAl)bvd=Gu&lcYIA_di^gJ=N=aW#>oa?FxblRvbB1&d8Eb)DqGi!53t&f*tE zp4Z**(q|4u^XK(8fYl79^XD4c_50!X%L>a$rkak7O}zIFhUA$YHkFt3f*O7ZcKg}T zgPDE=YcIQ@7-3hpXKC`gM#E5^6N$)pv{%)jUTJEv+Nh)lT%RGY(4`%5o_8>BFX-+M zi_1mz5Ul#e+ZQ$nM7X+-!k_4m^l@&$a=I<^0m&v6-dibc$O^zbnLg)N%Slu?pWCn? z62u>?mz*5p2uI+Eslk)W()4oRsv6N~!~YCs#KL5A33JTn^VeT!30>@o9EfDoIaxb8n?Lpl?gt zl-%3|*E%(qbqSs2;<@{>1t17c&Y#L38kBF3>_GC2rc9kD{={^Cf7&Zu8U;r20RYGsS(C|H)PU8V*NYcn>;KX_Uz~JU; z%bLuIM*=~*K$JJza^>zvKPvY*G{@_0ab=pY5bv?9u>q5+R9HuXbRpV zh#v)8-{aBl%&(C0`89aByz_o}2v#MIgYfEk7)zy-_8mMz5;Nkniyg|5rkUeHZxlGA zB-0R+Q@Pa@&1hT~+0{+=wA=?=Mu5DX6Ox(R=NFUwzOKuG4$2m;XNfgnB`Vqmj;TaT z6x#j{2G&-|fA;T;G&?lby06m`kZ>CYoK?U_5>yPfJN8tN^k8Rb#KEsLiNhD6jBWHP0Gdl!bc1jSwzp9kb^&@|f03Xjp*ka&Kt-zMamc_NA$k&698&OPEXEfybV&@EY!jqxmu17f3wc z5Zuc8vQbE?tML3eTVmzy){B$l8fCJKFI1UjpX^^RwLIZC9x=_hUi-9@_=gt{mrqPo zLZj*XnMEW#WCrjAuQWVA2r5|puq6X(vYMwgoz5;iJ^N73cuo8A`{A-^PfyXpCt{PA zk9HG|BODiVfW*d;3f>xiON6jUVlX80P5BXZlgMP&dgsqgZ&Gal=4w(SxpFn|@vFNF zy}J;tPi-irXf^_5H~lq*5Vij7Ik4QUZZ}6pAonNbm4kTC5Qw26$1HRd<)S})2aiZi{$l4D~$y7Rv1eQsT2oghemN$B#vaYH;K-{a8B%@9Y%z5=-ky{flZ(&IHt zRsGjFI?YT+Wu?U~KnZazDvL|zLz^ai+`Cwe^M0FOsspoq)_Qtey!Je5nhUVb9o=`C zETW5GNt5YpSboBmEf)wgB9}r05AKuay~-TQQuBYKzc-Ia5bu_qq~EaX5DJMuvGvTu z=#_4xmVXD=xwyP|;>gjqeH;J2dYykv*yV(0#aE0Yv>c8nzi1a^E-2M@tqBxIjR1Ac z%ZNco0fGC31ytbTVf5J-&8OP(Fza}8xJ%p@kGyv}`7G7gOy1gq>0Qnf*9zC%2Kef9 zA-P=7ZI};epQqX5zlaJoa;M;?E>f!gvjIS6!{kjeNv-6r97e#$=g-v~0-hIf+MX&wR=lF+UNjva-b3?PSnnsDh2h(B1JaTL^#<+2 zBAt)bn1nUS@|n0n-_ZX*ynbDw6rywSb9U$$1lAHH#)N@t=?q}^t1aJD&$KGLe14-2 zDOudKhV$ec??_0I4};j7ct&?rx1ZfH5I!f^lfm@dPHzvx;SSGt=s2+W#qPe_{&Iy01p9e228RGs+JcuDe)ZOhkpMj#`}auR+t;(A zuYze&b@+@#Y;~#YU7BMcJHw0fsP|3Eq0b>ErRn_Rp*do|2$B$Y*}E`V^LL_=!Vq41 zMI=C{qWyHkMKR<*!vef%-361f$9l&qETiC)vG5rUi7GIsB>XgJTk@QD85RnA@8sc= z6(@a9COIEHVqM~8@aKBo^23*enO71#-hSuMNayZ>?%U&Fus4cV;2>v`H}jqTblk(y z*La>K!_-+-eNCNhh<_-H?Y;;S-%E#e!x$nqyI;G&+LmW(F18aCF z*2Z>>VUXS5&nsZpI4pZFw|6y8c<+X2foeI1keBUK!(M(j-u_-^BUg-U9+SYlU8iWg z=wKyj6g^{0dRd_;j(Y{oSctUU(}If*G1t3Dx<@)QWug?TRwA2!U1l&RQuFWw1RY`# zo24Mcgvn3^vB9YdyaV2^hEP#n7_dj>>hx$e@LFHi*bHbJubY|TZSQ$;p$ap1$3+QH zsr=CwGn^&`b1mQp!oIxMO|(B3A&y>w9`2XD>oq1k>=U`8fPv;WU+bG4x?V(QyxVW0 zmg|Ro-ED7Q`tla1YH-IXg;KHUCIKT+NPy1moKj=1V?ZxwZ+7~~eG~Qzq?2VWV3Sjx z6)XEftm7<-+|Ho_FciVb9k*qg9ew2e8oG)Op4$}#3y}E_R}ZVrpU;Dua73|+nR=}f zT2HEdZTQBi0$IX?&NQf@!%teVt7K>N2AWCf2=B7cOfo1FzD@#tzvs(qb;B0>!CxHy zz?SQE+c3?x;d^C9>?UOPxbKADYdhi(Gr1~nl@ii@!QTUSrqUdsOXW+!4K&h3Np!%* z^dpuh;e=aH0y`?^-s3sep5|5@DCgX}r#i~y)m1D` z7x_kFh7qWCRX;mZfkJE%9&S};R{Z#JU&_J5rLJ8&djFxy@K!Cf0Kwp@*c85n_ks_& zUOq{B?3RNDU}2tsm^gTxrhE#yIGYG7HR5z2kKyA@7~O9_BYwDA2cs?3us!uo8XRoU zODU8?F{ZD3L&l(P`3RbY>qxYg(F|nMJ5T<>1QG7A<-|7 z{O%%JL7y+k<>2Y~(Zu~@N$&ZLtfDhoZR7=DE+8#?g2jPw3hkfanohC?Yo1Te-RDm6 zrgP9Jofst;?__;Ap8&l}Wvvq~5?8TcqmGV%!wQg9-|@%3m|)@-T7Z_vTgcZA{fbnp zPZc7S<-xuMC?wKL`1xd;gm~gP-e-v=J>e=nz;-d+dou2?N4pOnvINK91jzBQx?5WK zJN-KicwB2U=6LC&f3`Y47cdU+4_EA78l8I}@Va}vby;Q8P5oHCWySEo$f1@g!c|^i z2>oldUj4T5?%JbiL5Wt7=B8)g8!JxRJ=dAvFEWR3%mw$(UU5o7zGRnYMDLMXaN;T$ z5j?AN1o%>y!xbAg=M!7TVtzIv`WQiPZatz8eIbkmE{~VDUW{;CKIRG05D zKz;>C%Q@*~FD|9#ZLepU%f$r_BmS+R=2>tqvd9wYGFVR_mrfAWj#3q9Bstn&!8nS4wk`yRqK&F^!N`Yy|D!C%4} zCW7C`z8WWAZ~hu+Y+KKH>tPGemcEY5Hq6#}zdJ0GYUcC@BfEZaR0v!W-sJ<~@o|s$ z=-!?K^$b5G)y=Y2IC`d3PI0OoS3Nv_1-hze)|o!Zb=Zf)Js}D5dm&_|M_xX)_cdEa z*UAjzDod~4-p_d)Df`abx3F)VrRmAz2B`xaa2AH7f!W%`La(@CwXkJCepCU%u+dSv zgxw}+aCfBiPQUvq3NtlJ0Xh9fvN_2P>jat%^s1NV9#cN=Us?7pA!)T*^*&+7mnd03*HPi^SLPdaR~@Lqerq0wAaB%@ z-1)IMkbW;kE(1^^9FhfV_O}~Pi_ra1bP<{tYC1Odb-y)lb+)e<*^n@X|O%vSH)9T4~0^J!$oumKeAJ+u8alr!5If|n!zOqcs1#0Rgn>eN3t zL>9>VxP?4Px%b|MdLV2HMnww?&C;qqADHe^-c4&nN4r*9I&3XBV7gvhgQqS9wa>cE zqJ^ldeQGav;Cik12U!##Ras%u7@^L7<32e@MH_4`LpIRHLAK74z`tY;L)3UUeMq0p zN~L)Q$se5P^N@5BD*skNrm$o~`T9qi)jdF)&X7U=FWy?Ndci)$>&%#a=Z}zDLWC_6 z*)t+H?o*$Sf4M=|`|A^EZ(1vdu{aC&pL>CPslYiL&k#>~gx=@-JNnzp76!^5;(lNB z9HJfKPpftNp{C}+-FoGh|Tu!*vS3oVN<__`N)UEgFgc3_M}^=LpMuA zc9G%cZ+b$q8m5D{BarJz{pr%{L{~OM_;E%I6YcC7h5GVFNSY%uGCGUZfRBXvUDR_J4X2rlVN0^5Cc1NzaRxj2 z&qbO;J`XaI2VZazOi?#kzH{h{wvFhS%flHq*`F#Yraja*(PFO**!N>MYy2Y5#{3D- zYx%l_4Rd?Hko|lrz+mi?ZSteI$*AYRVVt{hCmn8Z39Vs1DNx;od z9)(AW1aPof2ekT{9PKRM_FZ^WkyUOVw&4R6hXt~D45ONm;T@m3wSbGaU=+^6px)2y z0d(Cxxv#ahRr37xAs#dWpm84^?>N#huTBHksr=r$f_WJC5#zY1Ca1)k{<41imPx9W zE80twDuyN%zkfIHF(WU+#ZV&tLMOv8xR-afC>%AV`#mS1QRm^c5oLuN3KmR*z#=zx zmEi2qr%gbCWHpd-Av%g1Z(#iCoYkJF!|i!d%dPsxuWothDc_k$7`V~UH`pKdwx{wF#lOV5 zHza6zRBTZ%BP#ym!QPi>iD2)C9O&s>mSfc|uhJg;49;Im?|ci-*`xpF(7~^!_7cy2 zv^Em2E7@OE$38-&*>%b=Ed*I`k2ojc03n0DB5T?&^jTWhGnenG2xfiX67!Ljo0FLE zLNU?5N}%EUeeNP9oS5bFHWi5TpONK6i+Icem-83c66*_6uQ}>Kes%)UhDAVh}Sr;&JX6%=02BlIPwtCgphySRL(`$ zoI3Zz`n!l1l4ti!ALaxOd51U4U1N#(9xhi{3*eWZd6e^OU2`Ui^UcNFBsPl&;s-ddu2St zUHh}!$dX_Ild#7Lc#JqG{ZsS58XHjDoF>u+gyNvYFPM`#^0MDIpHD$J`<-j(HnRuj zk@b|ntZLlh^>xbb6zS8K%uCtk)>6*9qGtj=1i^M)_uyimW7f;(%=4794;7q=><)0? zX8hsMn@kaCkVCdpo`I-Z;Qm}@ANlQrFPeSoXvA6udkHmP3d|=Xf3D6QbF55lu~GbN z7H;Vq5Z`a>hlRMmpRA1B@2k1N<-jB0;(7c=W7&Y@+))hLKRNGt7!?6-h}@cR=wM4_ zq|?2MXAY4n4ys^XdO}YCi|^g!eS*2l+x-+AU5c&pXmfW@v_;R5MCk#0l5NVBz<0K) zxFta^wA1xow84)dQ47SaGReLx_pk5ziBSS0YXN^8_$JCX*{q9SDTI{NxtA0-rCb`n z?u0@ue$0Q?LLmKfZU^1h`{X{rKUIFTt=ysj^83WhU6i5S zbPtpDW65rE3w0J=m6%?=nP^YjFZ@T-r_ zx9ZgWFnec!3gNu0&+h=gmOtVV^Vxoj;MM!_)h@4I^z;66!7l*+x5;qRFZ+aWX_N5_ zGYCITV4SDR`{pctrkg)P7~N0EHEnnH-2Do8aR#ef3I65tY@82MgO`0;IrYA+_4-+D zO1TXWdXI&EfBdkwxv#l-i1sHMMDW7~c$Ryaj#wyuAj0*ifGl#m^}=zx5>GUk+3)e> ztnN+lTWu&167HKaFyM>NFjE?lnmnes%QShNarDHr4$}h^pf5|Sl(aqTKj&9H&02s( z&}qmIPxzWeraPo(rujdxt-}pw;>7{7jg;v|SRZ~pM}~KMg1$8V6L%D+74?8^AH5YV zWtQoyQ|wy(^25Ws-tCThbxba3xd*B+;Nlg>3xY?x0b$X2oz8XH6-7WY)Q zJkA$lNe?J&Ffj=OhkegoKr`PLplSvU{xsg5IIR+Uosw%B!UlEUCC45g-vpl8re=q9 z?{wDeG^Z&1+`+)Uf!AwOCyBaTQNE>Mhqce5(vx3ZXLovh{PuHrJN5%Hb0d30;@opw z?L?koJ1v>1)m4m(y zmi8lO{FW^-^2mrPMUFXdO=8?{XCyO<7hNPQhCqq?nAIgXI`0Z`S>iDpu3T5*6L}|Nt z;-${?nR-bJ)m(1-Ef#1o`zkd5&(gF0wJrHRjkB6CcC#OlLjnHXHXjDUf(~Tbs5Ps^ z=#jS$bpZ0jxjqGuE}P7Uj}yj)K7>ia0NtqY*WPu!DDR_yelBb&3ltc_?K6snwmZ+i z2%XI&*TX~`5>>XbIUv{F8s(iQv)j(xNyW3 zfq@)t+w%}?r~m-cFj#svQ3r{a!O$pAty>-Ti$<2~0{-(K)D(L&EiWr~e(%0OVg*=F zzI?~^>)ZR-f6em8(X}0-Z5aGYWn&-sw6q7M(UZTIAQL|P_@V1C*?M2Tq;*m2oTSxn z#u%VzAa8u%PVscj_tgER=*qgGLD~OdTUuJy`%a_Jx@}7UaAT_ATi0qZxcDV2gW?-wb)T`(aBdP} z*19%O>$?NYvdFIcZ8(m54luYMd8E6Niq=-IILLN4K9L2#fygM{omLQ}N4D5ePVtU1 z`K=RrZ#j$aA01E;c(+-Hn`f-t_nR;$*l=$)8UDP6HqeYkMG8!Hg&FW3AT+W9^#st5 zgI)*ihOWo~p3W{xz(gJK5W1UbmB_5yeF0~W582_?iZncp>W1O!sm=5Hdga(P?`kM# zgPHamZ)3%Ye}^>?vpPuSI07@&efoa?H+MUm>EWVv50i!i8vbUUL&Q6-F~xVmi_e!z?c+Rzc~bAW@F8s8*J~)HJ?EFF?~fuTtyf{-R&@NVDI`Rg7Ijlw zuKKQ$dF(q{6NJ!edgxH9ZdTSPZ5V0$RRIC;@voE zRZGOFGv?NS)BPm8el;gy2$LnJFR1gUB&gU*b{SJz0WOU{fG~%|!8gj%ELqva$)W=1K-y zP9LL$c1rSapK7afb51WF!jiwE3k(g1U(xOtU`hebnhWca@W&u*5u6>=4_u$d!{Mr; zXZ3}I#ik}*5yPdWKiC%gmi!n+1W={1TzxQ`ajt4w%+6`%uY5ZFXrpZQA(pj|LL^N! zgN{&Qx4gowNG88@3(b9KGlbllpPw^&W{>bz#Rjb>v0m;{>zh7${?mFlM3m*(x$mEQ z1kAMo6Yg-zMj&qQdqj_~qqLDn+|!`wJi=>PJV0~dY(Pc>>%svTqYM7%uw>IhsY^pl zif7IS2xAac+yNHy*R$*nkD902J~0_pT^#xFARqTkg%yao!y_Dm~nj{$@3 z&?gW3e1r{G_AuO_Jsu#c_7s9f(ovSr#(v!ddsMTA0Xm*p1sTRH7A7URa4p}WMeCDa zfiAu60Uy5lUp*N*nimvN`G}Y6Z@Xvv`F_RV$nT3qdq`=FdVm3DW!Xea(2nR;u=wfE z1>z?4FCt8)+?&?Bu^!?w{Uyr2KvjO^#yJ$cK3MC0dXDLP@DGxD-*1*P$;(fybobq~ z(3dFTy2f5RRxZS&ql1ob>@s6fc^BUe`g^J|k7x*VMOEM#CiUkFu00YF;8l=F5B`t) zd=A2af?DfjVM%VN?)6+Xxnj3|f9f%97!airAaCvGL8<==kk?lsy^iYetj0QrJyQsp zI%6GPMiwcaj@uK4fk_DWFooex^wP>*dhSlj3bb23ndB*p_GlQqK8zyT+7_MOafMG`W{YblYVJu6gsu?E&YD< z17oC($1ArD>xe5(j720B6-JCQvLEZH>D0qsI3e&q+NW5CeSuR70(IG^TKP{rdj{km zY$cQ#KQsQS2SF(shEI_kI^U`Q&r43PArDhP4`%oj9M*}2ugcmPFyQT9=O42VFAoXA zAP*X~MGFRF5YxasAFqyiNzPo&2g~z&y1$mk=d>l~>mVK>4+$hb3jCyVOs)qC!+-qr zLIn^2-0x;n(J=Blua~?vuYp9Im7ofy+u^WARu^1;!S(s$)?xxRTzja|JS z;-W;twFh_zd-Wvq0)0bCTr4G8@oY72Sv-sb_46UvdLmjb!)JT%am|KnaLq~2U$NvW zk@n~iTU0H`sC%^S=G8**591lO7Vpih2Q|ZG?K*p+0EWfLEkb)sCIvI{8MK8mEFw?U z`tiNRKa}SC;qGsH-J>1#n%H!05s2HP>Nl8Ts?5~miPW;_;9`$Bq~tEXb&}8K-p>YX z$7R3qBRHhs^TEt8%=dw~vnV9Kn_hc3by*T$Ow8|hF_=6uVp@ry7H{P}()loR)vwp*6$s&%aPoZUG9~~XN(W7hb$))qyM|`BnYoZp-O2V*cad0q zdnmdN{T{YUzgR~_+=XEuV|M@8)&}a7-LLai4g8!}y-P-=q0~n1J6O8OI@<+|S`LVYag%psTD#M=49bgNyf! zLV>?`Fc(@69o^%JoX1-^l$Wt*!l~`Za&lxQ4(bfHPsnK4=|jut5BXYi?u$n2aMty- z>*>{NG!AebMhf2=6ji3uEB#4!%NaSUzl`LmQ5A4J*njR@35`RSv1~eknciuG_83L` zYczWFB>QI!ATUDU+qdk7T-8$R_3TMs4ClEZ$>7Gt1j^YD5wa*Ad^GAT+SVOiSYOrN z=ke%P9pzFy>EMiiMdMyYOA;b)c*tPDg`Jsv^uHV$Z>hnhbnGm8IPQL@1Tss1!CClX z*ndoDmPDk3gg&A#nYrcws=Y}3_&(DB%Xm#ja+}~N1R8$f^ZxK`qQf@u1gbp46a~JR z>JYi6s3{X3H|{=xg|28+%NDgCSlF%{X9%43{L6$YSOwa@{%g(F`moNmUUjb5M__|p z5qW6)N%;)u9l$WNpT^GsCg($gHacX<>e={zUh)p%QIP0dH4Rk@s=j1b$$5I67~N5s zdEU-cLe)cmcD{ywFg@oA`5mnD-~hV5sib)+$zBFnt_7M(Sf%sex-E_zu5OAmHHmV2;ysam=i=wquMyM6%cC9Q1Vo$ z-47VU#Y(5N4=c)BBRLfH`&KyA`__T+-QE(p?YFlh+bI)kM#fby`!I9c4P%UK#rK;8 zgdY+Vrw5vEqH%cEtzj!@Y=2EJ7>4yow7L4{vhwrq-8!y%I@y;snmPJ*`N~~1wm>V8 ztiYS7fq1r8_?T`*`*@JikFp0q6Y<44JPpotRmsPN@l5yf1ykhX-g!(kqV@g>O;l45 zKZq@YGk!44(v_%pC}IKLsrx4M;jLQ@EdvdwoDQZtzSRp`PxUy+O%C@k5l)AA`Nx2m zVfbXz!)ed&`JS^+az79dn!g*KCN&CqAs5eL+TjJbo17!G>TfBeVMqb8Xxc>;b+^<*?e7kdY$(0;7fz1)bk#%5S(xk-{yd_&=7UxQ%r`LLqmPq=8 zMpQ_Ni}ARJjXzt{^*!dE{N)n&n>D{o0-DQkMU zKE5otxndJ^_a{tZbtxTEi`2CB2_~9LdKnupVbjbMn{;R@J}*?ak!k|dmhQ8T?-;7x zLyg$beCm*On?DpwvEeXd_279zX9=hg{P>z6FI;y4ocJte-Y?0E^!pxS*N!1itDf;2 zx$~K*zSkY#C9Z`?siZN4dOTNOalaBC(rNVhPFu_uH-rCaHq4DGxoa~Q$>~!JmF4q7 zm+40Q@agZ49+2bbjQLRPu7Rrk5yA0`k@L!kziHz&uoZzPN}v5*S=@NX_v6h)Jofe$ z$;Lia@nqDOU)P-Pgy44c>l<&H@^hnS^4UxW@Evaa6)|tjkeN&|5lK=&`zilM_BM3b z3jF-$RPg-uAnzg7lRxPQ!l5$Q=JUQB6GsPcGG_D(Gos8qm?q=H@pn62IL$8-%h9@O z)xl~2Vc`4aX=#0;^6}`Jl)xx1|D>10`T%*l^)M$YSPejTEP8VKi5(HWtNY!z%6&wr zO-~(ni8pzQ{0}_%_^N~(D4I)~NA>#rxyaPe9g|0hm>5>|-r*4lg%aegd<@~v)URff zKksc}A^vNfJWU0gc_4jB*(*VsG*ck)4Fb2R(*j||Z(uDB7;;2*c(j-E{^1tP8M4>R z-#vca&ET%j6D8(~)P&`aO53Mer)|CYMnd9Nl=*DneJ86T`plmm;R=Uvybkf~0f$Z2 zseP$6_2{SnAQVD-!Z7_PXg`+B45$>o=NJ;iA|kkhkL;@vd;dKFt17IIAjjHznke@#<^AUdu=QgEWs2GbXWkE9|r4Ah79vS!*;zzl7)45N*)5 zMP?uE{>=QVtpn0&30wCX_Tg;-&z88n8}ybh(;-&alX09ruf#gGBVU~vhng0VpQTpi zzoV%5UhXjA1wuCWcBA07$-`^4+YTJT%tr(wRaAVA2W%G&Gl!1_7&TYI^rc=e3iTIA zozvJEzI~F`T?bdPY#$7RpQAdGdJ~b)8ukOA+Q0P5r%4ZCb#01ch0Of+>TUydzH_iS z%l+}@Y@73ecjcAWg*koY1J(c{vP^JEWXU7NWW2Z|EX|ix;{8pQHeeO#FjZc=giyt znIlFQ`5;#oENa^Qd%Kh z$!zd?ewZOhv&LlEApnq_b9&wm?m`@Ur*a}tMXXV~8rItlC2V9qQPb-;`m8qnCTRoZ z^n%>#MzpSXGWAc_yNDLi(T^SRAv>7X89L^z2S7S?=hDbJH`Dxu$Df<0v}Yeo;dn7+ z0HjV=CZ21hyrD78^kP4i*ai#Sc4M6R8c-*n?(+S1{h1sFy?3HrKG#X6fG@gToe*W1 z(2T{mvUl{0@hcPM@Qxm1HPvRk3uYn_q$=~By@n(qi01}b!Wn4`{Eg3Mbm!dLeWzSJ zSsdQOr|Lg$W2b07+OFyA&rGte7tJe4_S8G$mY!EBu5Vvwq|K0;EaZ#jzls}ZW?7<- zfA)nCvg9zW6gLBHvqZ#sD-U$R*FLlcwL%39-&6kD*g@qy5!Qcv9vRAxHJ=*Sb;7-o z_$f2FM(~zkpUU@L{r?UB3zoK@)5jjPfXs+k^jRYq*eC72JvhkDd>h++!EtZNkACX^ znmmgdVIH+5_>2@*+z9eC60epzDac1uM)6X7vA1kF#Kc8K5qo{_uFay(;Q`OkFUO1b z@D_&^e&v1cHGNsfy*4ZI)hx2T;QplJRi5ej^0|L5@BQipxC$ars(cD7NmT&RaHst< zh!Sx5_g(%e<^VmAfB>EoM<;G}G^undGSOW*6tctZym#T%_}|+x0u>=gkDtrEgZ9ke zvJ5(o9h)Cnfpj#5G61(Npn@;r$z6ZVE9LEu`c1Xpe@Kf30)ad7T^fo7+MBHefV zQJ^lpY9G}4YuuT)r(=l370iy^c3SoTPMo&%A0p+ldZ*K6Q=rk?ke9hvZ-Pw$jM-uzPU^4K3CfqP3B$x!#;ia#=8KE;p06Bu{2xT|~==NYh>?1Mo4&V+U1S%>ZckZ_*bjmh$DcxO4V z4ebm&2UgprcYVwwXKLEB4SfXJ`po60<T`8y0_ zlO1|0t?RLNk9%CYU$pp=e>5@pFFNUUq^I6wk2*t4NecmE+tspImVhV16^!v>@PJCa zoV19Cw9b9>1m%0Sp- zePuyV*+T1xi^d1iFy`^8fCMv|*qC3ngUdy}AJs=^Ts!xrT9lvrse9ew1E5can#DfH)qD@2B`^d0ODKPaViSxwa>@9o5Il*!7w+EvQIq`qNHC|GI1=qV0Eic*)Co z-1Y;4f3xUSuugpm*1$JopRTBMxSN7M5@#709($Q{$2|V~o1dJ36{Vsdg}Lor8nf zKTp15UP*XVl!2W6m`F_9L_5A2u zNjMo6Pa_=gG+9HD>hvjhtPouPBCmygu=)P{+&R|b>~GR$budirX>j_l|*c7g!nKxiKEPsLi>Y?Su_W$MzpPQO1R2}%emqZOVy&$`7_dkHY zY+R1pc(Zc`xsy}A?P1r~9e7y`FLPLZ8#9s@)BSqXl{q`NDe0b-wg3D3?d6f(t5VZ@{-Gx|6Dp^iLH!6)VY{E6n&c#oGxr*6WB zR+fHi#*Q0&<>RPU=vM6Id~`~MnVHUhHTN>G|oz+gDcQ4++!N6#21+n?0dK-2DYH zdHUODFD%N?5vT8AlgEmuv^bc0XZH-DAAUW<@>aCZE2PhOTWON;^@dsDD6BLyOSab@0*7VY$nuuuKM!Qs}e(a#v|v28TF zjdg$pi~AP$ zgnu5nt46GL^MuWAb43^LbuV7vxm*7v_B;5)o-;tX7%vGFF6zhk@qxd}A7WobN=<@c zOUw?3mjL9Yr78(L>x22~uq*$#gP|eb?)l|$>j}Di!fwjye#5Y+`o`Biqm*7B|8zhI zj?{Zalq+*!vfVEY9HZMx(vO)`&$Dp&YG1Q!W6qww%AEG@omQxG;c$!d`8a&C8C^1B&?W92!7VsXdSgNuwVqBQ*ds_V-+ zo%e&5wCDT6?^opaeb9<^elF`WfOp^M{rUYf?G8_p&LFFi8`9|0;81OO#?xaz|K((r zUM7t7U~XQ1$Wy~XRE5jz4<1tzzfe}_#pZoFGmrs8OtG-iXWv7XK`DhiD0dTXhsVhQ zNVj*Ju~7{bc37XI$-(9Ma(_{cB?K^G)7tw!pTSL;oF=kmdr~sBYh3B{3DZb3KIfXH zie*;OVA~v|_{n?_5Qwk@{>?{gB;cIWJsY@m5%6R+)#PqXKfAte2`&s-A@}j@<{AXn zyz0^3gV)5B?(e6a;O4!AY^_7+@^M9NRPrYpf{pzyWTsoePd5v0sRmhHY`JFGhrJ>P zM7Z}MLGOvK+V@KMh5P2eOza+R#ibTT$G=qS4l)SzCjV%4&woK|wYm%WTb~C9w}Jc=v2=W18EKypAZAeD zQXB4}Mfl|mxI0-MwenAV$mc?#N;7;Oy|mvpI$*a10!)!2=^gl zi*j8jCt!Q>=j>Kb<#Q(}7mD$gMpfS^??>xZ-n?z>GYFQ=;WrOo{iXK}H4&3=Q+7jk zCa$$M?r!ekR3=F3uk~J;6l0krgClL(G|a%dVVsIJsN_jO2b%z!X^>hx?Q;Rl+){r&F)&_WQP!2n`TVFHC+nyh zu>klw-ew6ilO$*~A4;Tc8^fNpv*@gr<)gA(Hsbd=70=eBj-P|~jgaH#0m%%jrrS&>iJG z1e?dx-#-e)+_HG?D?%~UED7J07t3X^lHU*Ngrd^fwYK81w=1FOWu)J^z5+!i=;EM! zhTG8&nSsQUQFLXmq8buhZhnUnO_;_qMTCp_zuH zpcINQ0}Oh%77M zO1Ro(vB5BKUoSCw@`%!YKhfcRI3ip3wC9hCD)pjiM0l#Ox`IAu$-LFor*!sEN1gT$ zH%rT3&FdtT^z%HjDG878=ad2s`vIt$>`j<7i2G@{S*8-T^(ICi7(gzbBah<}2QLJfyFDJARV?Rt! z+4IRVnG-A$e@CA{=fodn?`Y93SHR_4{_E8Eu4!qIDa=6B%jXNb?b33?w0gjpcN?jC zx_9u)iK)Qn+RJ)+T=Ppt{kEnk?2K1VH>0>*zZditoS`sxYi~bz?_&eU(W`#blc0b2 zH&AaS=cVT3w~Wc~bnm|vT61;=x6Cy4t*ZAKz|#Jf+oUC0_x^Zqr+zn=md^qmN8H7Y zJfYp>4$CYw&(H`0U=XXTlxY6YFbB`SWPXtSegDL-ry>GAOe;~JK9bmGg5HeZrq-I{ zcQ8BtjV7IfL64_f1xBo7ReN|G&#KQqiG}a($qW$oJbm~3lDR+k5FmehoWfBxd_~>? zD$?I$H|YE%$n$aR(qH*CE^-Whn!Q~@-E6uGc@rPb(~BU9%^SK7#H~+wi;28UFrrA=J)}20HQUXpfx@NkDo!_g~FvqK*4^df)5cE&;$7 z@w{W-E*j0IGi1Y-NPL z=RfTHH?kuS&h`ETFNn=F>fu^35t?!EVLBWN{-P6KxByN;aHnqD1fZLa!ZFKy#s2pc z*Gf_ZET4xFJ~4gfY$WgPvM<>Y z?_Rm*d2wig7OddPiwQ$EPxrHLM0aGzq#KBf2s6c40Opv$O3kn18T+EtRe@e;(MmsE zI9qCTZArqI_~v6NJ)GL;2L9&Qo#SZ>-s#%Cx}$f>6mQ{J$w10q{fQ!t?a4=?1Q(Ns31eMIt)>-}hWF>=-YfpaPd z1}Y-bh{)1d}LynXvg9Z=08 zHnL9|-@g}4I9O81hIkbP-|Z(P^Qqs5o55k7ATGm==NopVYe6|tR$d{77S@>uW^mzT6-+MCq1 z-f@etF-FOXB#$L#lViWraM90PooZzsR~M1XD}T-#G0= zKA;(Nwz3wj5b~oBTn(G&2Uy7uOnnSZ*4zjDPf%%RZYO=p`_!*Y{R)n$j)4Fw&2^P& z@pgJ+C*_%}0RPToKtbKu$VyZN>~jB9oY| zIO(>Vv8D+2()>hZmxj|pw)jSN#49-=!^m11ZlxvDM;9+7t1OceXBzDdxd3bqUr(Om zq+}n}Mnz0&8c%~7zPgmJwkFc2SNZ`(m>fIpyMCDcQ+lU=It;LaS1umu`zxLc9~4R* zz6{gr+V96r+7ZPvtbL1v`Vh}GTsYYM3Ln_QPfQTqHFdFl!;~H#Qe6}#`mrNE@Xb4O zL496cjvdR0%Eg<1O(~yzW~a~dGtc`t410jtu?`^21PFnLvNkxu^(=2<*#rJ8&k@E4 z=&xPpeLfF4F=$WoHXBGjZr%4${DP_8&)?tsMXb46m^fo5v0gCjt%QQLb_m&Cy`3pkO zyc`HISXw`_BAP$m@L^hhKz(J!>06r<4vLtz&7*98cW}VOHD>3-2x7Bs+or zcVOHj7}@6hLpM;d;KFF*SI5TFpx+#{&kZh0BzNN2&D_}=&Zhb~>7sCX&c_>B%jrVZ z^{t^3&iJMy)$>++8S3`3pZ}l#Ilf!aq*(K1kdkdlo4Y|0{z;z$=?>)A==2}6K|p0~ zhYyGfzJc!C2ROm}9GzGRZ<@c)k9tO<7kpBLdquGYSI|g@UZ-_rvb(13gEAx8{PWVS z^$6C-FQqbnfkNiSw6{a_D)uX@WDjZl(`r&$6m-iNiNHd|k7G~=>qZ>~-+u1xpw5&~h5n+#`IF@X{OE(i=0iPYPD{__IkmUcPOnC$K*S%@sELp*Qda7014}(`p#u1*D6QkHUmn%Xd|>oiaNxSj1hCu1a$1>78@k;ijog&2W`S% zliqzrWN3IrQHx`zh|e=qef8MZ>-l!Sh7kF}@(6F-l{R~!9RRY0I3g=fPwk9C2g~@{ zXVBC7jih9{#q)US8`O^~rBThla5K8rbgPpXdPNd70xDw&hCe>@qjhnx+$j6=?`;9f zRKH!-3v78yKk;B%Jer9XgD?)KrpNT^;uBRz5Ez2b(dByBfOh8u>gI&X`xOSped@sV zW-qnNE5;gmz}sDrn3-cNVNT=$FuP+6V{7O*8R9Jc&HTq)q#Xy%kLjjjMLhDG%>bJ-ia*F{~KZ zqY0qymQdfx{d|0}3j~8R0EIN?O)+WVGhoRfZiL$l5n7D#Zf?YxGrl)YXTWa(KSjU& z%=)mM!2L!YN3ilJUrXt!K(s{Pl83>g&dmR%BgOmZ(T$o={g_SF(W%gSQuhNaOHR^A zFAgF{`N;`J{d1o=`v@J+dsD=%L;4i%j@@bVeGy7D{&$aFdK3QH&1Epg=)K~C9$_E# zr6|ja8vc4d7<;g@WrU|wq4*U%!J7o|vLX2dy9>FYRrXb^k&Nml$KHfJ zJReF1LkYqgug*Wyi@zZacBQ#rHpGhxkXdnpn~C|S*c;LvLhOtn z8Xv7}semtnLApsP{3CPELJ*vfeLuHSWjD}jp8IycBV(qDk1?^&Lx;u?s8iZiNCWGv z59MGsjK+SRF^`G}AH+Rgg)V)?Lw$&PUr`JkEblc3tuPk`>>K@c-KQ&t87_KAmP71+ z&UAFsSdcDurOVL6L5#;q6k!qaJD2p^Y~8hi-Nv2RFGpKHf0&!}aL%cl#a5s7W5+pr zAQtw3qz54F7?-`lQ3U^t9dhLrzKP${KI;z#76v9mGDTWh$;MvsnokNg7{{PR3YF{G zm`M%IBxSn~3p_-5@^k|d!L^p}5h-zOb5hVb5OVYDBWaT&_A8=M|S8q1}a< z-2D^l2LCeYO@bGNv79%h$oO@L2Eq}5-ZFdBQ3O`yzWH22Y=2P5X+cMS9$P}8$ggq6 z5-FP?mlv$|;8$FCY(YA-m0p3u1^C2)N!b37EOtf*>c`@SVmQ=HlA$JzG^`>&28g_Q zq1e=|{NR(Uyi}hrx+r=DbuaKM{KF5cWPP(~s59ex|Dbu4q96v51 ze;4eTHAK3&W?xwTN;xzmM*xc~TY+3vWg}JvfFN0kUG3^1xK z)jgL^6*jDn!~h)AQD839R_B#7V+s|4X1Fxp`F2hptvEi|Tvsdin<0fEYI5mtVYO}y zaNu?kD$k?sCA&|SJZSq2QT_Dj>e!&*TnJ1PAROz7omW#^bB{!u)&2;Asztfo9-p8C zXB_Ot|9O;8o#Cb_yYQ0=*ywvtKPD{;-}I)YUYP9$ zAyy92f_A@r0er%apmUJw^MK%h0x&2~*)iVoSN{pH5Bo?htd7I)pJj4_kw`ADpO(vL z_qmA-#Tu1zK5oaX?>qUubh1Dkp!<``uh+H#E)}zS>Ax+Q1RiS zYE>3)CpZBKazoJ;wBtnJYp;s>c~?$K_2n*Yx{V@+Zgtn-13??hb8M7 zdczZ{bB-$fkW;1ZGes4E`Mw>V%$fPC;qwjgKKORi*xG7rf~ ze6uG#J;9Uc^v?Hl3_^=~4vlhk4rWi?Pb0!194Uj_tuqGA9CLPxa4}e z7A)fZA*1+A!1O_xHcfImyp;CE`=UBuT2;^n7p&@!aW7rAesePLG0=fF;>Xs_#~mW? zQ=|^t*NeA#xTs`{TaMdFx-q8{GFzfCI#Q%H4^Y{<^7v!le8El8dD2<=3;zU_74$2E zc1pcyBDKE8#D7{Z~K6sBlCfF2DJJ$tJUt0{9z0^m}R@F|NU5F3~9fP z@@fso^bhkv?Ecz}Pr>Zv4$K$kAN%DeolB_--stvXE(;6L2M1$hJOSEv_L#(cyj+`A zKM`u|_r!QXy{cmU;T8SV!#>)8!+f~TXzXZHp0cxUd!DIvC3yPx7N)Q-O2>!89q{j` z=j9uZ$UfqD)by>DlSh8tIWlsRTeW|Q@sls})uWWl(@Ma5GJ%PO8{y$|-EweTe6IX2 zy5kk1Trums>FKaX2iiVpIY~Ft6x(%C(X?(O!*G=5I|&DF*k0&;q`Qse0OwS>*hF;MmiD@Fol$hG6XfT0uvc9c9}T zGQC;~znRBnEtk=)NRyC95t$YIC;7afYs>Ax?E^|A?wqV~!sAi9-xko{&c;IQv8e$L zul4q%6U}@36_(qlpW!nM2xb;xOR$R*mp0MOyOL4)ZoMt5o&Yp&2FDU-MZ+huvDcF^ zkkz>H9DoMu6YgZ~%1r#l#05|?Z%9us)D1QeY z2uG~{U8<3rHlyd*zh0O;gK%6UMpvbY?E$w=ZABK!W2WGK8{H}3?1wudy;+x0eZbA4 zo?%tj!Qr^AS9Ta`@(9ZbsIkz$*t}n#S@qW__)fy~bpp%T*-T>nv@!XvpZ0v-n87(( z>#z9rbqiHBAwFPwe(WUA;Fl*aO&5e0Yr|J^N|)Xbxr+}dDpKt_=m7Umie@I7C$eXI zDlR31&y_9<>D*P)?E`}mXLweeRbC;qXW_Hmy3Nlr9fJ1DnW>wG0C>at+tU>#nsm z=XW{#un&)yZl}-Z{ve;XFR%6W?R+?KR*k0M)dEaL`vG}q|Cn2bhzl3ExEO{6jY8R5 zjB4@08;ovjUFw(PurHmt_SW6%focU8#<_BPQu& zMQn`Z^_6y1y9WlM>Fhh32cma5e6ua?cFge`mJx4|@pUDo!%rQCgA~8gU_E5c7n!92 zw6`MM$b7%O2u~<2hQ>i=&&?H(7(ntRRUj$+tsG4bZFHqVQk>YME781$w>jdF%~?^Q zMiISI>@7k_{x|O+$v5@WAyF+2c!oH5EX!M66j!>WvP52>Aq1?i@g&WvqB9#F!pQPq zaD`VpT{T=iXOHO??s#ikG(O$!S9RR~_%UvM2iCV&9?LZ)f9dZd56x;y5`dwFAZxLq z?-vbX0`ZeJB>0+Opsz5C#{(J{zL#6{IQUN!nI(+40POzU1HHD=Sni972OhnJMe*XY z7lu%I2DE|uxlJz&F(B4>#^0B0n*95Izeq!}r>^&7&p=(Ve|CiFY*()&|M@ena2z!e=Q+j-AAc0nmzOd3P2Hiok0`vz0j}Z zckG}{?uPGUs__y;XE(fNo#?G0i5JM2VNyjYst)j8gy8Cqx0Kd=^*x7H_Jgs%0c9Rp zjFC>he1e^V2Ero#+m1tET2UPa`)7Hv_DwvaB&}&_NGn954xD1&z+2YyPv5hMoKx|Z z|D_tOA8C0crPk-PxA!$!WVj&edPmK1S<0e+1{@)hm=NvmNLwqYweb(@mJi^DpSTF> zVdEr95u!gE#*I({w~HUbcw$(xc26mz?)o95!^H;NNY*ZwsTT9x?p|MqFrV8aWPi)q zM}RxXQt~}3dBUuh{)_@*yzAk`FKRf&ao@2S#+E~X+A?W>7wh>OJ%TFGdwpWh{mUoz zqXRd;pu=}p{J)5n4A zcZdB7VfNKh*=d%o9uGM~7{q;|UkS`=L7jiilW4!^*;D(CTeOFIM&b9Qdf!L#*puzm z!YKxiAL{OSn5k4r4%MgA%ka$Ol*Or%7a?#q>#khrNY=qud=Q>ceTt}Chhpc+l1TTrf4rCC6%=3aE%!45&p83j z{m>Ql3e!1xoWSET`^!XTlUloW0_QI{B0nrfJL3q7^~c}S0r#~*+q(b<$C-VgZ;f!^ zzR0`yOQU=sb<7fX!%dDd0ha;^^^pc#1vh>)AV@kR@09 z0*p75_V2^lMo!``GH{=o7dnWp?t;-lzHdDG! zytaCrP&$w`j(~n#WicXVbL~Q#FE5?s6RE9&$ZO*XXFh_~jAv!^` zHHzQNkU%I$vvx=>I1(_u68D*Zm0XU=&z}(a7LjA;^F_JK9aB!%;hDP8Xip1mCJ*lh za_dx~Zuev78di?+&EGq+UexRy+>#5z=(jzx%esA7Emo9&B%Rl`s!9+=e@Rr*qlkzo zNKS8L36eqJ>(64JG49=G2Tag(S68i?%de*s${N)DuW0ZHSmU&EEGo z{ZmZUeoI8*`B!GmkzP)pt%n;-Xy}VV6foQV`ylD7oMF#urC?4ly?XTzMhTB zsBG0&1dnDSG0HvI@jD==lEFTfE@(cwpPxSv64p`BAMcHj`Q10kgD-8ZUn%&xOA|)RCJT5+Q@V4>0)Sjy2j1l7yn$hmi4MG z{G_ouxIRGAq8Ve`Z-1A5ox!ff^0Waw-@3_@kS|`LCNhpo4Z9J9LM-k4Cax*pf_) zD6@pMT+basv=JsG72}P@OkYxW8jobr1?Aeqow@j-Nl1m^=ixbiZ(no&oT&Krtu|N; z3(#6_*WwZ-*ls~$=8rcQC=+2Ka{b-`8MnGZ@2k$iSSjNz_xcegs^4-yGjwj)ma>mG z5C3zw)Aupyb=V7!(&JBy!OZi$%JdT5whPGVg{qJs%$I)XVFH$R6d z02!XeXG*Ey#+e>{aKrm|doHKbKCyqAqvQ8_Q1{@RxS~5VPe&9QGk;H)ey$S+a~(|H zkKYL~^B$mo9viI` z@N~la+`)NwKTS{Bgdr(-_ib&AMe}#XnZ%f)X!N) zK0RDh1OS2^k73DB)d}dXEyH|Jcsx{(x0=O$LSSw!BVI}HEk%UYf zrVih}$4oM%-$I6udYs}D8~Lg@UZq-L&-)AGRphEv3KIIvNK5BFP5RShTZbND zu>55A?a3#-%LfJ*W*f|~hNK<8n?C7n{=FV063KgD_8CidfJvDJ(wP0DB!b)=x#t-2d-g{7v*urpXer&HSa;F8>Wx-9^c(!cxRfIQ5 zP?zEG$lf4G6`smE$&eS!E}0Wd)vQKDN|g7vDId?(?^H6tJiTW>AH0}33u`J#su|y# zG_lgwvrfl{8wH|%V(?2&qnW9Vc=Xt1Nnz-Pe#^<@pue~sn%NMc7g=Y4d^&G1?l=V|Y$L>)Uj z{PCuCpLDuDdKIOUAG&Rh({PJ*>nYFg;`mNoLfgvF(%Ns+peoQj?jM!7gfC#EzT@fX z5wy+{a3AwO(u*}N;I2K7b1!k8cpkpp{gv(k4PFjkzXpGm&MxR&Nal3%gMkf_M7{u^7SOYLs3g_D-*0reWvM22XODpG2v%UJgQsa__(14g@>LB2Mo)@ z*8n5+ES$)gAK8>yFLto`$6uYZSQ`%MS2m5uU1ciS(fXrKr5E~nHbNOrBkN9a5TNdM zrh!bf))U~m9(ULDw9=P(-lxSq(wuYN3eNOH%H~j7_6hRm+rI*AkogeN*T3Y*S9tR~ zY*kp06Zm{p)UqB4(TPtXi>Pw1kb%N=#a9JQ$1;!txBaaA9)|q@NLtw;Y{dPAI3VZIoR0h`RKelxHKJ_Wb$MKjfc zS(#qB57-3p1o3-c5SfX+R^7lAT zw{NKnJ!`n2?Im>BJ32*Lo#I&=Mruhyt65@26?kl1<@VDr!x=wvj zIU$zbxe3k@+s6lTjrWhXUmYu75$_<+KfI(;fp$C&+~GmyLICkT!_T~bH&@^ zEF5m`x8Whx;5Ae+k@Q>dL_dOhxlbi8TG0m>aS;BU_iDH{*0-X0@#H3NdC9`K=p9xt zX0|x7e?xCFpd`DUG6Q`{;B1do_4|0Z8%Z~nMaXrjpi%OHhLmjl+sE;Giyl@qCV!RH zoB-K*+y>!2eK3}U8>}txPst$*v=qaAzkwMnmD3TxxbNF0#I3J{;BM84=6_*Rw2?`k z0m}4d5&a0igWpPV;p_qQ=`r&Mk=Lmo&;{-?HFzp7o7?`EKCbuGpn|s%pHI;!&2J&z zHC?mi-X7=6O$H0%>N#@wR!;}}pgF%Tw;k)!Oo2mY$$i`J9u(VhT2*Oc>nQTP*2D6u zy!$OWte?j%I}^sRy@%+9XoASj>Go%XnwqGcrB){Ojh8w_BChjBY{|rYvnwb;^N$&uxmD46uS~B_YoOo=8N>!LzRWGOE(4|%Bvk` zqP)6z>I>nMdkk?bi+BaoQ27x1O!Otqlh>x=K_%nt3UiKAD_sVbm3eFo#*CbbB~db) z_aSP#xJgUR1ZqfmZ=}Pbc+hS@>A1x|P5XgUq{t7pUvy`W;6*Mxz=bK&_TU~rC;f1! z$LiXh$$imp^dTxnlV1v6%}e6J1nErw(C!{NRN6;@t*FH%gPxLQoOz&LowzUT2kY_^ zzNwl0@D$$FT(5`z9KgX&tk0C51%_O%hqrgw!eA}M`L!s{<1xn5(YwIRRSU%s8R719 zf9GYH!>ET}&no|sJM<>V^=e1z5lnO>q4ygc1<^95kJ;IcN=D@m00BnFm+q8U`%z{T z^z>8dK!Z8#V0aEYv>7@MdJ>M9@ylCB_{O#9Mgj~ zMyyn5pdtu|d(YY{sqg2oi;MWJUTH{x{W#q&4}Qtaz<{yH;e*c0s;Kh#sytGl{l_j6 z-OErCHmMLjuOhVo-`VMU^Ukl_oISS55$wUAm^8UNoSXBNn{EVfrM;1jXIADn< za&+`C{(;cN$Uxr`4eZlC(=m?weKsau1KUhgrCw6zAfwWB#M?>!s7{3W{-Pn4Oc=F~ z86y2)`&^bDywaWv?O!nPxbgUCS}#zK#vXH_Lj+&*cY}RhvNP6GZo2E2SZv@7zrWWt zAXNaa8T*z}NZPLPG*=o8YaRE1ze>^ZyPnqaw@dFt|kL-h=!4cHzVcSH_v}!^7h%s~7)*JBd3+dsuwFmzuW{w8Ywx;KB1_ zfPnT!Ox=5ogMA1WH2>4Dxb;cahTyNgKS5Z3P!H9DRFR4JKEM5$wA6-6$NuZtD=Vvm zNAXBc)Ou8gaH^(jMI|sDe(?1PD;=CzBnhVU-}m7sIGGm0p*Dx8DV;;oE%rT^6Vm9O zk=K_(nUrC(u-u)?8BWCAjr#>^_q=l{6r8-(};^@HumQL`nOiJZ@8eIbWVM1Qx7Bo)h#3%uJf(Fp_CWvj`& zj=$pt8TQG6La+JY@!xsZb8^T>?Oq-n6mPMILdUCkYcEwTh_eY*MTr*3+dWS%WQZyp z4%20Srmu&~^QQ%0E_1r{_lW_XnH}v=hm=qS@XXGMXv|EV|7iDZ*}35=gLD-&Rw(N#Kt<4-p&trd zKL%Ykpl82)@-4pI6B-u@m#+7i>r{jC8PJFJ>Fg)!`JI4OTwO#z`96bD@ZEfh&zx1r zu~3jFm!7}eNDm$J318t46uR*n*{W03*P!)@rDL7=C0A^Rh47OWhbKrfzrizvDjL)e zNon^RjVoer;NvD#!T+Ym2yLG;ya@Z$swVp<3|%Vq+3k8R+en6rtx$M#6t8za z244hd8#%`PvKa$+HAQpj3LkQVDwfzwyj=R<0NLJF zHm@B9Be*K)(B~1#wa}l=#?RivFr!m=xK`(x$+c@kgmPO}1O-CzgwQXy#S%O^we_Q&gGjS4dMEr@NWQ`GF#2rtChqlL*7LiZbNLLm zX@4q=Zobbf`hY=O$I)0pkmQq{4!OPc2b*U%_`H4uerxPsz*d9wj*I3Kj6VRx#A~1( zU6d|Fx6jfJ4TYtB|2aBfp^rCJ!$=Z>xqx^d6uw8dGM7s(46vOEc@6=70!ASIwHR|( zi7CLWzM&rZcgZKc8y-#fbkXuO!(;jaBi<<>(4)*8dj1V)Q+AY}_4CsVh*yP&yM4O} zmd$t*FdgxK<`RIT_chxRcDa{)%^UJDpPDgPhBD}U&dFhGf9%cYyV^JZiUqy7ni3#P zZKBd&r2YPA=jMAm9{&Kxv!&LxH1tItL#5Z0|z$Z2q3bqY1>v&|_yS815`mT5x`TEzVE{H(6hiNerA72!?`C=-lqfGm2?U%hl%0|*7mAM%Gru@nR0RGb0Jx$f?PU-`Rx~Nd(?+}hg~DLa*FwpZVdPhs8B#POWOJvU)>E&Hts0$ z6=OVlFed3YcfW?Tklfc}yP*9Ut4#?ntEV^QTqgeJbJE+#SkmU3r3EScB*jB8zUPJh z7}?w)etEQRB#D-_(6PLRz$FwokJwQ}rIcEr z6Y3iCYq}H14m9%OaNtJKvf2*yP0WTuFwSrSE(^}Qso&|CmAmomxG185`Cs5qtQ+su zXHxpH6PG8{wLBUikw1o_s)yoyZ2ywS4oJ@#QGKsITSagx{KP?Mw)$m8D2WsOXio*d zM_b3geH{7%?)Ck{SaPr$F19Qr@4%A!f^mu#j@Q%TKHrM24*8*@{>-BqnZXRg+11ET zxPOKI$s!cw9`yoXEq<1^b&f24{YYVp#vM3I%jXu)lTS9VP&a=$Rc0B8Zg&Ip zkE%o9iww#i3N;_ME81jVR$1H6KW*H!sV0(}cn$A!$5%mzRv9eyk$YLPDdez6tMWbt z^Z(o)(6~Ha@2|Fb6n0Z8_ZRsK-dXlCV$FAqn|bu$Am@W-)#8@m&VBCH)d3mEW*>)e z9|c&MYAa5e&@uQ1`yEv;#u`?TlPy>~-WXGxa)W6dT(GEq?Hvx>g*M{XzIq|`0QxI! zdphhtBoovK>s_ulSjvrRWseeeJA!S^L*$wwj+4jidp$fXUE8v38H-|Ie_ws(q|5ig z+y44MWzAUjDH4qJnJ&5|*fMjlS%-GaTo~@ZziEth6|-=%^QJgK0;L;*R89-Wnt(cK zu+h--gri#vK9!lkj6+WHFQMDSmxG;d7DoEwa*pdiWE5`9^oqcCE={9mRXaDVP@=sdrlQcXolLTKzk=s(EbUjUq6l0v@* z+HGH}1?j0vC;L~{d!CevDjbbc{Jgv*@=rcnpdC+kC*6M5SA4neh zjVULN_0MW@ycT}ukZ5uFN%$kDw)!nD?n_?H&O0!f8S>;KT9GxwtJ@NFT8D-usj72c z)WI)i#mX0WEE3`d+DyI>J6mMCY5P)X-LB>}a$UwR_7RbEd$jxl3?#SCfQ;g{=ez?n zQaJQGh8N-O$|7k(O{GDu)u?N6`G`*)&JX)&zAnHmBZ^MtL8y}C_Cvd`0Pkb&08M#{ zw@&PL71}YE(_<1Wu zd#qykUz(o>dg-~A7F7}3A<}YxI#HK+rXy5*=r&#Vs0nT{!57o!wr2A_MdEaC-MLV5 z&LRO&-p`J%o=$HugWBYE5K<7xa|*b`(@Cbz&-t5irXT0Sx}Q(br@~#Ufd#lAr8fOj z$Q{*)%9x;ekHPa^UnKKn1SvY}(Dw~X?R09@XMYh`PpXV6W+=jn^zhN#Ci5pw67KyJ zi4HusVjl!0OJ4&WR}6A(sGL}vtJ_J>9zV8yvU=zGAi&oBJeVczkDn~j^owC>YbB0f z!0D`MgAm2{^c$p05kyeVict4D2Tr!g4m=KSEEl{7z{$%$#S03}>+4~n4K}AT3aY$g zqCXt)Dg1|~Bzqu{o#_b8#sP+x5M0mr3PmWB*Pxo#Xks@9&#e!9e;mPkhOGs)z|JNc zl;@eip{kdvH4yJvIc{f%9-Fkf;L~TnkQ*}>-F*5cmt3c}pXZMo`g3jQSuKrl2D48C z0^-X9IcE+|S}yhU;bHW&XYa*1okUX+I{1DijxD|uIn$Jq<&E%D2ylWpwp7>C3#^B^L zGqU*F%rk(8g6K{yramDDYz3yPbyNG_vstAKfj-IO9sr~+Yp^pAmHn2GNBa1->h~Rt z-MKE9vK}GsybrQor8rc0-~JYVltYp=tc>Uqhnvy_?ZpGWc8~Z3o;Lrs4z05;jyx83 z86L~u8!Aa-ErlTm*XrhgKF8?X#cZl2`Pi-#a7Wewi9Bq(^70U-h~Vy`e0!dy_eV1h zw&~S)^~t$1<8{7f(ly_cE)w}yo~lmoZto4fr(~?)h-r{yxlfE%0##ruz|}0Bcvc&cvUC zomY+F0_vZiwaFTlzL|kny00bYo;WwkRCQEpikPi?#Fij9%30wl@_&$j>DXr;{`0Pu8 zd#sQ53~oSdtO>+(KfZCE%x_Cx`CJS1~~ z+?Ks88vu-#pV1jrdInM)S8mI15?dS`vQn0|_xWPABuP7Zr^6*I@>Qy*3z_n~r{`Bj zW@mJX;}`|&2B+eitv#RLM19g~eUvi;3||Gb*8TqZIY*^}=cMMcT4g~KRScN&-Kl;T zZle-B5uywu`y5BT%i_5{LQf$n0+PI>DeJTDhdiKyoFbB&UYJknkqMetw=ccFa{1YFz*1`XXla>X_mQ%fhy$&MG>p(s$>H`%tVi6U z@OU4&>p&eESTw{%lGH!tho+_C_3^iwQ_xy-lMHnH-YgK6@XXj(L8f1K)mXMtsH}6! zhP3wNURw!IZV^y{Cy&IOT+KD|rSBA5@^X^Nuc#@EVq9%`fj?l^w{kIl}1J)1K2SUdYq! zu>BZ3BUL>5kUCmr6N0|^v_K#2*&O8EdaGd@;CG*vKGHH`O23-BKK1;tI>P8jx(u(lJL)bg~F%-2P# zZ{ehk#Q{o~w<=7AFuk>8pkXiC$lT$9=GWmPbH2d%!r9nYjivlvOzjeU&DqJDS^g^> zKd(LRpkr}k#bGoUhPZ0mK1Kv30eDcm!^LX5`T6zLFZ-}=p92v+@nl`Hp8>l+K8lvR zby-Wc_nNZ8?1!{I81C>-fW?w9a(9GfX&P zAyNirw;&Wzr_v=}M?Ko@T+;UcVBBUaSN&kL; z<%@L+F7U0XqkXbqMvl&YYc$7#g@7xymJvPhb*@-&Tf46+2fH1!h`Qi!iAx(I1U_2G zyweoZ1@U{Aof0wLJ*-ZJM}}x(KZKt6hwlVJ=-00oPhU%0Ws>bK5srR5L5bmk!i@fm zj#RhwZnYH1rj}G6>@FY~ZR3kmT&&n1>~9a1%OjOU)2a-2cdG826lFX-ePWPZ`kNbQ z?9r7khzW&W*P!VN_&2o&vG(Pfou@dn&z^Qv^_ibfDEgwh6@|a??(PdETCCB0Umum_ zbq*OBs4ZMdB7pXFdUsShkWWdj5&)l4QGaF4K0xp&TO_}5I!Z*^!cWusoS}iMM+P_u z&4nKF9VnE+z;KLPi_MDlzM>~9Iu~Sjyae&$b?9?h>CWgR*r(_cS_RF|unI1ktk5!% zZ@nrr;_0IxpKrq`P2dx?kXvW^ecVrf!dOcM4F=o?G>z@6|2o957r!|r^nkNZSM;5N zYkTa6|7HJSzFv4{k7Mz0py_%PED4`F5k{?3k<>dKz+M6a~*CukCpk;rb z)8?%T(pGw*@R?aeMbBJ0-|`Iw0rFIDAp-wSIGm~T;W`w?r=HriJgsRH#rozp2jsph zQ^17PoQbqI3 z(@XYPZV%eOSL_L5PnuahX^w4&G1Yxjq#WdO5fqGZVPb-UqM-QpFKPuqj_zdSslV zZ|-+Fr&Ev`r#->gQKGO@X1q`Nal|ti&(HhoPNpN=7h4dGGx1`zh7M)VNw%ITbu$ z;`Ulq;7-3$)VbBZ$VKNN<2UIKZgH>$PCH*HN+1#*$bXV^f4ud4NGnUe_7^0R_9(xD zCwdQae;*gPr4}!ppL>qrhc!=BPMnpoH$HPHG;NuimblM>Ja@nqDC7G3COW|I+v^+^ zGF->?H0z0DLzkcGc>F<4X%s?!>=bBJ|1QSi;?=!G?QyBV)gemRfC1Lw%$rjGjIs{X zIb?@+$gwmGVToCHC9E7!xT&B1NGVX&;(+xf;WVKaA|acnk^*li(-MpiQ7G744qoZ| zl{T+%%_5=L@6pd2uWbk2h0lS04zBY|5dy7ZkSiI5Vq56IRfBj4!1v%q!Xcr=hV zajNfG9fMc^?!TH6bR$y{Z~3naafkiSzT=n(H?8UY8i5x|X`&Tugm_To)((g=4;JgN zf9N~?MwOqt@AKgSj>Ez{20QR@zqcrOd*8#u{#>Wlb&6YgzXH*`XTSD_eXCXaqBu2| za}}Ar#$czJK38(#NLRbmlu^LoEUW}rr;{jZ7lUZ}1Z$lB$Qq+*?C&ul9hAR|lZ@z!EEX{}!sq=>^-MmR-6 zY(Pt`5M=&jOh27Z-Lcy@18bD}@mAM)eT4tf5$| zyuTR%aIPt>w$~ox!h}U-AIf6CVVqg)xdxnbLGCtu%Vi%Dn#~3V>5{t+`2Ei^+RL-` zxkLE=qUoovY!nRi*`(s6!Bj0s%W~GEGC%5A7HsKlH`ehXiOKU66qv?2dD~Tq>hB5+ zf9|f-@o7-}&1qJ3fAsH_qrFHo?VlRq0)xS1J9iRw8+m{UV1B+Q zQ8T84cDlC}`I3iyXAe3eDAG-apnAVS5j7?nFZB0DY}(Mea|Ubqr#E^qU*aoV&TsgV z25px83*DI?So^cyl+okPU^(FzaMH= z!A?Q#7@kB^mDoO2W*`maLN}|sZeb#f_ zahL`6`Aw%KDSm62y{}w9FO0x}G{?t5xeH-K@`rf1k=EZmIkCr{o&pzYB8!iqWg1na z&sjB2Tk*sHFl*4rYh$fh7fOlicUOYbr$ ziQFHTS9pqY8U5cZ7fH-9`kDr8yXvVd9M~lRH8)ofG;JvV;Y}lv9((ost>JqS`5yG7 zUF(t)o_ER3*w1h}s)*KLt%)+j$BROFGJXxL9aI_dfb~Ki<^3Y7ekj%Y!d7Gt^z*q| zwfSTpj2v!cFGS#_Y}l`AtDNRRT$k?!!eC_@FV>J#r<(At^8K3VUH4&&;@4_Zj5tg* zmJmiWwC-7sT8-Y8h3H!=wzSVre`9tgOW&@9=;!( zlOF5FT~i#7F1Wk)Jrg;d4QvTm4H(zP9=yQ0UA$gfbzW_sH!7xg4$GihnpBWjtnZSV zxjcf0eVIEYhr4w?@m$>>9uqlk-w}OPu1=j%f%OjaxZkwYr7##?>~QgFAB(i|_FLoD z3+B_Mv18xEWU#c%Z+p(0+licz9I2nOIBt8?0B;5fK*`49PdA1C(t&T>QVVjwB=99p^loWx_C(T4Wh4(G-&nmax9MD`+bn z{PzBGw0OV)muF<1oZn|*Im)1xB`QQ*OlUtArKuZr>(mmitPnqy_^=P*NTZVO?2Hj34Kj8ycI6?V7}+L2dFh?kWu1y)I(gP6{PA?i=4D>D4HF{j!1x8T>KlhiG-Uo8=NxzNI2qVYq zaFW`u4NaZ(P)U$P&>nJq`(z|s|5B$i!FlL!N02F)lFILBOe5oF9I_vJC@x@FD10Jz z)_oK=BncZ$D=jZ*scseRRYMK)#)$mPp$?p}tHCcu_4w}eq@eaB4 zQE@+a3++niboJiJ{dq2+nM(eoTGxITuTaCU>sInrfV4piHet-?_%eAS zILK@b>WbgQG-T%D->{PeWT6Mc9R*;4S)9i9Q1>qax!9c z;qjB~{YWklb)?l@^^FOA(-UG9;Bx1yy6S9@n8pZ`lf`!F^XtlAbOQZ*?~?=q(z`W8 zQV*x#gN7^SS#_30A&D>q5C^}J+!4h&~5{4@u(#gx%f z)o`!iiJ+5PTI1eJcY^kP*o0PY=MVH!1h0RRu9>QO`9z>I%@KK_Oh3ztb5n&qTeG+F zR(h*R{7!!P=sN`?7N2i&7of;rzKg#1X5jaS+?=+~@EWZ6T@t4QvQ0OgP?huqQBnmV-+t&L%qSJ@rHv5Fe z{7eJWpD-esh=2N2D8kHv(Z@cnF6&`fpU%KiUkaVR_nSL9nt#icX|PPSTe=JceAc{t zrQUeGb7;fZApQVEIZhv!`%uI+tkmk9UMg*BudPDAtxr}~v|ixJkMyHEMfeVk6xA+V z4#0cV2roggSlu?k9{8wOuGfNpOWb8Dc`5TA7xcH(-Qc^nLikJS`DBf6>UXR!=w3I7 z_9pW%B$%lq(*3jg{D1_)^h3-n=tENAH7jb%%G1wOqMGx?aC!(tV@90L+UZlo(S^|m zlBUwCyqDYdUZ2mLP~Bi3`&U+e1!v{v>?^4=i7j~w-`!nIqmD6;Putlpj^9utrY=w* zpC<8n7OhL~Q}79%sTGo!h3-A!nJ17;ebLge5Tzu@AN4-1W|wM07o)yB=Uv5tylQmq z@C^-D7X+}inpRN(fpd_iAv+ohw(T2XNXakO#{-cA15FVqEt2wb0;`oGOFn>kdW$gP z@p1pQNFmXZo!HFrW}5^w;mzK5!JSZbj1d+b_DRnQz*J!m8B??>EI|P;(3JF-pgHFD zsUt9#a)xfxI?rSR{~1Uq9oF1>epbnqwZPA1OC-b>qv-o7x|5@2ICE`8a6Isi^`0F6 z#WU!VmG&0bR)-)|^82^i58M8?HKV^Yip-R^yCMtzdtdEdip(a%l55xVGrC>whL}=9 z^pUT762|v<@0Qi4hq``<_a`B)U&A|#%_tKc36pg66`u!W1|XSQbtP$-JvnvV1Lloo zenv=9awr&(9y!^MH*}=EU@9kPmX?LBDoDq?+wMpUX~!W-kLSc7-t}1=JUen2Z*`g|YL6`!Sha1pyKbXHdH3Y+VW7J$jzp#L8)Xs}w4O6_ z6OHyY!>9Cp$bvnpx;*J$+9B|U_V^XJZ#e1Y)t!pbhAJMK#jdyf>Z;9Fbyr!Jtu`qR zv$W!1-&_kM>b6Vv$N+a`QxIA;BlRy{QXT6UwA7oEzRG4yoZGI~a;BxN61g~6H3!`oMg zvw{1Q3*#D-621XCKQ8PWb0I65B=+kNku0%8ZT4sbgu32Wn7bSf{`PTRHB2km4kBLR zMW(M78B)%D0E6#t%luGdF0QcMiaRukstXH)aqT0^@$?{l;+5Ll9(y2D?$erf>)KaG zU0F7Ht@iAEZ%OB^lgq3My27DD>K_!nHjtto%* z{-LXu?h{D||DvYQ)W;`dc;`AF0pEH{3hFxoPXr>GyeTjd{ChLMR7;po zK8#fedGj+G;$qn4wTJMO$_k#D$J)&m&@f17+Do6Kp98_8XuJ~=cWs33*Q9X(IT_bv zKQc*Xq1tDDN{?HR5HEJj&(()_(*$t?^Prk3efD-3LsgcQfl3g$@_SLh@vUso^xc)K z80;78AJ#0PTRAY&XJPL1Mt%{JTk6L8VqQ3@;NHbQUu5*qWnsee4gj*xA(_xI>4-91QL1M*u2j>{EmKBY zkq7*|^m}OY?EScyt1fz^%Mvx>b#(ihRrVQkT0crgJ?P`tTwLm28bzFie~EO1Xy}=@ zqS>NnR}amj&3KCIq7?O8?`WKKb;!sP#QN3f+L9xm z7o=!{PbB9kKx&H#bv9yZVXHposhI|8E#>?`JuP&xF5jH|z*jCg!Pp%T_0Ts)!YNPG z>}J3G19?@hMOufeu21xl5myftlP0r^vGB(#_MyiJAh5Xs$r`l;>% z=_T-xhodR8{T1x6--3q*;o=|0n9bjvnZ?_Hg~*~=DSL~xg$1!cykmJ7kN4b$ICTfUxf8ch0XSM=Y_ z{^T#;+g6$paGW!8+TC*ZXO)Tez^6sz$F0m`pJ@ceidFC%24#@U=Lk`TPmWxpInp@V zM%JRCA%bM`eCe}2%ClzAS+j@UuHso??JHer_R$$>62Yr*f$_&dw`*^UY3SfH7>CrZ?J8MfFOgf{*loKXf!n6-+o23wyfw}-xAXJ&!qgM zx%&e|EnDoH((O~UfWfi*Ucf@>hgKDrzZJ-42sLqx_mA}cf>A9y(g_*sPGkM~I;34~ zM%Hpb&GYe7x94;0Q<*ra{Mk5dm6S(#_$))PchWEJ-ela9+1Gd0?%48SI5j5&)eutF z-tu7`j$~~;7%II5g}nwbNQ7Pm=&!!84@c3Bj5ezWq%HZ!teu45##Da@Oi=0{dug4S z_`OWkCC&{BKK2t>-a z<9>bS`pGP$V=|eyax{QmO%K513&IPOxaw{qkaGXYuEvGl>*rs@%#VIcu_?ngVq$}i zO(MFZ;r&Mbx0@`Y{sk8I32GnKLO61o?Nd?pkKr46En6U+R|)HFe1{I?QJN0NJlOXE^wi;o}Qm5BIbYJ}+B( zYYu!gys`n?PO_ID&J-CZ>Y{i|ZM|H2P_IV)qs2pNde8t?!Noy;sAcEI6PEY!s_f8;SR*%b>Mu>h>8!f6uB3_bP#sW8cqz(8W(Y6aO9}H7s1$XYz5Y{dUsM z53#v}OYKP-_&Ycho^o+6;g-V+%XouI+(+v~59JF&r7x_*9vw6Z)4qq)U8s6D0e-E~ zX7um2qQ(2CuY3-T94A~zoiFKo6Es|z(^%0?=_*{ z=IWZF@lHlw{9c96YiUCi`Dh8qyB8Mi`gXKT$v&>LgirQRdAkBN!AdY)fBiaPDU;_T zFx*djB?gf)$75Z^HPsq-ILW}gEOazLuJ`w%E2EmB(mq1hLHR*_QYfO7LD>z zr)Wqz1Os+yz_``Z(KR2AwufISGqr*L$$C1UR1v3tY*`5)lO-km&#N`T*6;5?PehLr zMv~7>7qd zC8E`r4U9$d%nS)cOLo5G_RD%?FA$r20Yx0U?=$+|G)_NWAmrNF7D6S3s%aKH|9;hE ztWNq*v2>*(%hN#!V(lv*d4ul`-EF*k#_2nIlwnm8QCRg3|}>C=0=2h z@?nObC{Hu|Xgi?~^VW@zVcf)=2)Sm52V0*QdjG)qZ#z=tu59Fl6qwWJU)c^W^6X)J zG$XeK2ss4bdb)syQlsqbK^!Vy!oJ5$C(8R0>?7Yn=3HcD2S3_|h8}e0!y5RNbJd`( zdhPCn7&y^zJw5d(Uhb^nbH>Gk^^pDSui8~+^G~tM8hld`Mq*1L6HKE$m7u2WQ`??( z3c4l0%uo@yEHwazWuiu2x&_{Z`!|3m6!fB=^FwF|B~>o6tb3npP9n7JW- z0kI~=YY;sSVf7gc^p^Jh#HLUFXnB$yh=g)JC|?j3kAT11Y0|?khhs=wsG+Ko1 z)jyK1Ye`Wk3jPu~JPHbu5lQ+c2q;Mj1tQ%$I zQl{NexJ6u1lLmTAr>V;rotSgqY$0)AzThO2Hl9B9Rqzfh;6W)r0)YSm|G(!8O)!nJ zO79d%+5GK`%YsdRx+Z4&vm@tyI^Lm$1dVtRADBi-4z~|qT0&@HLI&|CKcCGdW(`-| zmt4OEjcF5ZGz^(9czyX}p7FfD^K(#Plj--e7Y}=S^*y9&yfQi}e8;1DiB;~g7aW#1 zp0j^98RhvI@IQT_Oxl8v;TF+R2@2I|PM$i<^x6ri%Y@{$ui0l1w?EXx6i+E~hg)gX zv)X>o_wlgp6FTLsbCs(6eDH)>|8!7s>Q^AW>A4==O=$gR&owoy>IdULQLgujWJ zJgz|=sBO01-{nIhY^T0%iJYeKcKZpM8UJ#ot@r6lAHd$ZAn{eCL$-+Q@18~6{X*?U zydc@amR_hNTX#DyX+FV=qgOungKk6o>)n$yFvHgU_KMgJ&v)6BNq6%5R%1vpx%|HD zSVI6Q$4}ul+wJHTFcU!S?(^}E zawwKNc#Z_fsP5Z#E7Yg)(27SDO*G@SMEMifC3zlLyn2z6!}cAoZ$#A3;`8XbPh79q zmL+rE^U=a;+K5EDlF!fc5nI2K*82r#`(rm-aG}ZwrBJ$~MP$b7e4@&OAksJQHZ=RY z!)b4-!Px=}EcWHSglnruDEYKrm;e4fY(2`VGTHNkX9e#~A zAwIp^y@9!WH9w|GugNQr%>nh2#m47(_4iwG(T)%K6X7fBNm0od@`! z`c^0M@7v+HSegmJ+g&U`o(uv}Va1^;?<-bSv)nU?sFghZ-( zec4Ml0;ytPMd8IE?4Je!3AI>ldoW3Px4XuGik(IN8nOEhc!fm*ZIVZ$ble3l)JaNs$V?)UcC}^4v*X(rHGe-S^RLN*2nj(0zvCR?HfvP zkvkCZu$cFoL%Wft`@+#nq5$lCd&3)+)Q9H`^KJZ;_G&Jg`0ESVx>WT8OmV?co1D*} z1J(*6RO-B|8yl?!Og=vj z^kZYz)rB*P38P9`W}kx-3gKc(~?xD@oMaFObPLT*nlI|(>sE6%p-0e zod_KZvQSN^B<^1g`hxj+giZ0$l$8q=|73W9$3JW15A>f#eG%id5FnJETMlgz#Pa-H z6688>>zqRW|9u;uF^~!!k?`#F8n z-JaH7oyZ9OmU?%^?mhwg`gB8@>{hlC&*$FwE=ROoWWzhbYwg#(g^{;YJ#2gD%Ri0* zRh#U1(f0L#{p^|uphL6l9zk1w$oQjqbEq@$!S_+tWw2Cwl!w>*>qsYf&2maOoT++o z>{HYDKk7m&D_kyn`G|)hxe65;hl9H*jF%qPED%z1rsHV9@fCwhc;q+ z+BQ0(L#4O~#}tY}Uqb1wevLR658`wF#N9iwl3rf(+4Lg5<8g9n;WjPylXa93#mVG! z2qqRLUC;z#w%}F$Il~JB^c{v1E5^hDRX*eHJ#tyk#@U(c$A<_g$C(w$bcQnk1jmZ* zfSSPp2Ko5r60To9X4DFPFD=qdHR@x7Lfm01Ss2Tp(1f!%rRsuvCV>-OFA4Q)zAkz(2DT{b-lRx>ER@41oRc&}HbHnp!SrGrZrcrDR+fuiP9IsGu$v#$PnfUWNI) zS}x$2A7RXgKKwb~@H@hI)m@q?WfD-{nR!u^Zwgpd;?vE1DERYhqnUMMe%Zdax*Yfhn{IS(^854UJAhEl^v`cji>)>em3uMi6`B= zeMY|>_YX-bB8HG|6dQpxaC-6}a0^lMxj;Qjps6Lb^&r7;;@?_aKEwpNBo@v5= zA1^A#x%7pM-gBvap5R#LUM;6gQn`SCNz5|buABfp-F>8rEE^sKm_F5)@6=-Zvj?7p zg1k|$->SrM3>2MT1gT7MW1IdNk95J=Gqm^DIPWn*MY%UIMmru;Pe~^&4mPOSeUHyi zx?Epw*+6cnWEd9=y55QAOEIBDAR)i8gQA5x;>bUgeoKIW`F$} z?Nb6jZCoBD76eo=5T6(8=@0IO&ujL6^*g7Nb4aRtHWt4hFem|mi6D{GIhLLNUL8v< z7pp|cfY`58FGA1gtle~sZ$C^lF4p%8K|hz@$%dY8%0kkuLJ8JpEO4#krm!Q1TCC;9 z+_}|s@hS2^-}ZZ+>fql))vhf%Wc$7dw(Ha-`tj3R!2twR+qxD`u^Qb=ZfLRb(iPaT zOL0ba*f3>oVO2G7m|zd^QA|lO+p3s|Pu)e^Tw0l5<29ney@yccg8>Ts69DPGUVHsh zJ}&{CqBhdR`@laJ;!hIld*_Dv!v}JIMCP^?&lh1W95E8UPX>6Ih?og>^5s}kF%k}C zkW*lOZx)$c4oGXoB+2O_5 z=^kf*`E=L#67taZLGs#aeY^t5Rj^;RY++}xq=V`}yCHv<#AQ5#9CFt{l58gk|@vuZJ%=qP~@v-gH}UJbVZ+%ScLC3qn&2j~6xTB#GO>Rba0-vIbh zJ-!YH`l53n%?;Yqta&0lQ|7d%Q@>Rnp5J@l`vB{m%ozP5Y^)=a;}DX;e%-zJrHXFR zVjSt0T0m*4Lg&3U##`s9#j&;w9g;XwQUp%;f{FrcdmbQlPs3a>AGa3v>s?O}CUefn@D8|52H5V(dIo~4LE|_axz5>vxJ&(Ll+m8>w9+pn#q~wXa z?6`p>h8*jNl1EUIG(;0LU{jK%i+D#H4LP`tizZZ?68L&B)7G&4e)gF!_3ls6?t2uo zL{#ezfx8qPY~SlI*}^FG=QAIk#DjRH##aM(O z2v-MQ@X!KIjuY3PhYRx)!h$@p(>9UYs`<~Oe}!PsDS~NB?!P3!9Iw!Oazw&V!^1;# zZ`R_s&wK~@C~W~gGX6IUZx1o*+n)LC!n38+*S8zQu-{nulv?iLScR_MH#ou3*>aS9 z3#)vzB*;CI=mlTz?_+t+LD}Xe-{ZY;AyzND9v*hw-WHeaznE$rCG17R(WouWHj77( zbz;;G4}tE9=S5nG->h>F(+b62Sd{}xDMt5vXB-Tx* z)GdRrPV%^Qj-&ODg35#DQ(Z-svmc%P2DZ??(BT2QhH4`hl57mfVt@|#aa5!yr?vBb zpOr`8B9gY|Bf8xAJ|3=vx1H!)%HFK#6q$Sg#Khj+p2kvC(2u*-$mb2Uo2q!--n{0M*1pMBZn?aK>#l^PaF@nzi_z?Keqr3h zWzqf5;VIgaX)RX5eh%o#?|bdaSNxW;p}-O$WQf|#9?g9F6PlF#UiC24a@|u3m4;L5 zUFW{9{mVur)a;Z8<5vZW9!)g1#@g2zI$WvaghC)doLfa-X#$jfUFQ!M~_u2|d^W4)hAS#<_e zU?8jn?-DWweVg`aPXaUh)%2cgB?ow>$-Vz(Jn&HpmKu~j!~nAe#q7a*!_ZoV`1HPu z?T5Uew1EH5{N33U(PG$^=hX~^bl_Nsfl;Q0yK+eNS zokrCw)_ddpTGX2eV%&y#pdV>aO6{@-_Z{_s2r;)^%Zo}!2M=RU(Sl;%JtbeMwTXr`-b3zvwtQ1z2acOO8(M!BnAgZq+&ZJBAJ5hkm9eY z?u!s2ao*y2i^rQCFf zjq&JCPgB_4l|juLCxREk4iBj)0wYoRUi>EKWE4foAAj+|{Yx3=aARQb-4gj9(>5dX9onQ(WWjM#*rtDX+CfWVbXB0+?=H|U(&{jzxLpHX$}s3$4VvwkX?g!%H9g@%T{4qpUX6yxk*JxuV^wIU6F0R#nJlS^p(hCb7f-ird!vv<$K^?#~ z(+*ED?tM$O)3o2i072(22P+v-Yb2}MPMm%R<44D-`@1hYWSEl&+TGLZ0sbjoIQs|n zqO?MpNyl^a&4wBDG_GUa+d}1%+QiPI57q&ddFA=0*ud3P@3OBy(`V|qY~Ig+{#&x& zybqa8!#m?W!|j*L>>P$33%~ZPMzJ%f&b2uaWOEVn`fd`1vbEpm7nD3SfeU`p00iP! z3@b^s9WU9(mo!N~XrQ#*1fiCGVhbbwG;W( z<-Ju?0tlL>SMtR0y8V$5y3hMGIU|0)($6y#S^bPR-+(XTQI5{}s$9Uy^*-ImDnsEu zgz`h!UnKszuX$yFfknXPg%~X1xN_n5@G_MItF`h3L0+Wq@Bm~)K%kTU_D9E_DgXL5 z{iLeb4BWGy1aW=$ch%@$?2Y`-p1bZiU9KJ=KHS{_xzs`GK0s!%YpA|7=3&1b)ExeL z@{+>O&6%R&%KlViJt_KS$mJ{T*c;nb-oDHa;{CSgd`fKm@TV8kP%C1UYuy zx;*z>$PY?QyYbDw6!AQ@cs`ZZ`2`+j#y7pU%UjMWZFob;&A zUHK`e&Hzvox}svwM-_(1xAxH^wcR(sL;EWurS{Z6<)JsbH%OTL4(N~b4LrPno|}gF zN}L-mvLN&|yDVT2R_FK)!*w>=?0c4vGig8d_6a2sxV?46;O`@S<<5U?jSydg)P1+T zcH(%y$kbs@-m4}UgNP41r5EOw#_jxexQlLi)NpT)=85_kkUa;Aw6xGQhWTLJXSZ=?#~NL|UD{8{ z44clnZAebnk2NhCG33XWvI-Z44h;QMooVuW$U79`X{(RB+rwDk<*AYieBuU&Zs^O$ zJDV#R+`avh_d3Oi?aJKWgZyD0^>zJS5(-A`5Xxaz@xYG!X>PDYmRaC0$NB8sApF5T zE+8nX2OPlOqXX$ZW#!Y}ubYsJa^7A|fjWyPe-YN2lieL=FPZQ&Je;V*2O|W8Smv}b zb2p(Xh9L@R4Z>$WEhJC*V0Fm5 zx91jb0tq!4t{c(kHGdIk0_z{}-br#(-Rtuv*|$ff_Fj_1daY~9T7U7bG{iI?-G=Yv zPq_q$HM@EX-ZtY?MtfzANAk)+G#%&f<}Jtg&M&8P$wOeBr{I$2ycQ+^kY%=4E1IAR zu${(ztoK~YvPmQ~<&m5o4KT%EA?0nE+mb?E8bh*bTl1TeIPd+gwJ7T8sBgCk-RBM^ zNxQeTg*TuE4N0R_{%H+Kk?N5&i1o@egB<2tt*zB}Jmy-U4^@VZzh zRKbl^3CO+tWTSHG3OmKbG>YbkGNYM-`QVzTI10HdeS-mlEp!q%q(2|(!+LFsr{-=! z!$}rlp3b8{_F`aCS%U(OZ}57GxP>nmt%%GceQOYWI(-L6e4gf261^Z-h+J|YpR#=9 zC#0pFvkQ%<{IbWON^*eWY%bR7pC$A2c!#&sV_8W+O76s`k7r{K*5Q)y*G^I6;Z1wp zcA{!~Eb~o#7RKk8P-%tl1+%2S$v4K3>N>-p=XE8J^7D5TpQQc(P|{mZ`O)I+#&UeI z<=r9B5*aKkIz@kxG78beAqSs3#^96Pvkzg^4*_W%GR-e zezdF3hloyn#mM>fNZYhJy`@y|QEn0r$rBoj* zR08Peep%k8Ie0CBic;-6U>qmOyj0tuab^(m5^U7wx2a;xLznl8Dk?F)A4WYGY4Popo` z93@yvh2{4VI)foK{65UnJyF?oFeRwCG@C`nW~$&JSh$SM_nri&@!0F~3gf^dTzo)k zevwE&%vK}GVf}g6B)yZ}84cvKmrdmPK$$P-?Vmo*n?DC!nwVj2e!fDzoXx!WgoNir zb;W0U4TLWWSiVjl=v3>%^UjP^6uOCphMDo}l6@xYZ(Cr#h23#{em!5>QsEizS^_Hj z;tEmp3Sw`j{c_Tmfi#3?Zj95HKtERVL*#saw|DbYgxE7J`eo^B<^uhwa;zF>cljwg za(3GHis@1sx+o`pFc>dPacu=1=EZ(A_kI2RiO0F!;Zu(sPvt#=*eK9`Wk>+^h&M-B zp$^`8C=n>0Zbvg@@=F!p0wT2bE8Z0QN~rreLnJ0ZTGsO8!o+yyW5fvd#nxwl^iY0p zohuJ*qEtOWC|~kl+22Ygb-yo4T2j{nfc?EOkNI7GP*@ za13c5+X8xHxCIb2!;n|^vI*C#;)t;Nk<J7C&nG>a1h(+I}0J^{CH=k&HJ`}vNI;P(EF zX>@cJvK(K-*&IOH=b!6^ZN%fKr#HTWQZjPv z%6;$uB87qqqkq3UK&N9_bAsgt5#S{+N!XMLjke6&1u`3xZ?rhS(8f4bM5KC!aou(S zB1MVLGW?ePNW%iHbP00T^Q>>Z!KnjJM^E0L50#|{&GsX7{XiRb+;1QS^2*rJ+FuGd zmQ#ZF)-QN5>=E}!;m3-RqliRU?jOSbrof9l#Uk*GLw^nOQh3uFa@b!xTwjHZh-n}RuS=#WL{M69<7r3JB?sml2H$A)k{@Gq!o7W>@t^#~@5{$+gwI3{bhm+%UtZN`Mgv#3L3tLc zQLOw-%S3|k^f_|i_04mK)^s}WTRjUmzQIT0Q!5VjzS$6@kaYrSqNMJZw#C_?Lj69& zC|I}?^r;{&9^jy)$Pt~XK-=tZlUUT6%g^iO3qG3mXv7_)r06m2v;7=$_t8R?&Uq6{ zRF@mQAGgppE1h$W5L1QfeSxV~=?rm$Py+sc<+1=6q5&)|_u1zt_&CJM-ofC?F~VRz zAHOfGb%T7!$$E6`KvnLFY=J7UQmcox#PJ~~bF-)Jbs<^4P=;;Ld#rzIEk=XH1F7gtYbczm=7eOVfcYK`Tg?d?ScCK^qfM&}VK!{aSzMe|ln{vKea(&Np>gF~!es^`H`>(vpY7j)AJ8E{DQ#Urng^>UrjR z5x^cYhZLGo5sylD#OIXojA5A#qgMcB&rizQxD*zAq$t);zh<+jnePQ@dNuSHNf@B* zncNSjEDe^d^ege`XwgQmtnWzgQapgrFH~yUmsQqBi#P&nkX5J2qe3B#P6kMOk5@kJ#} zJ~U7&dPLdO%r3O}i+v=5-x13AW>4jmg@Ew+h?*8>fHXr7N?kA*8J?Xb^CnF~d9~UI6 zeN{gJy!=yQZK)B;v>Pm&F1M?jnsfiotkDFVPMeQqp#M2;0Jo0!?_2dPKJwMu{X=P^ ziK=8}Z(pnH_wn2hNXvRGc+#V|8q8(fmn*_bt6zG}jHTeR>+N;(Klk7K{-_bzebk!t z)JDxbsK;J(8CGr>-EK_ZS}ocQHNJ4%|$$bh6=dr>9T$^`&0bD<_&%}!N0AW`=FW6NpBqNTgaaKQ}K6}1D zQ}9rMHkjkUVAp(Yhee=(?C2pic|!T}+e{-hJf&iVs{s8y@In`E6%6A)dx4~{PKW|+ zbxU6}IhguWY0s;~z&7GC2IOLx_b&;RoO~e_EF6jr%2%lF20Ka`s3j_2`MvhJ#K|yX zA+(vQTDr_F^*O-03Wtx+4QPZ0Y*Zt49b`u(DWgb2sCVM!&DR$UQuf%?5AOer7k_26E_DA@J^JsoocKM@^quzG>XWh|iMlMQ zqE7pArGT^-Ag;v=!fu%!tX7^7&7i!p=#y$#@fNgg_X})vvb{gI?z4@w1&Sl9K^ip(S>DleX5)j^a?~()Iymd zzGK6gH#nNUB-GWFALg2M-yC*|zweT?REZ_Ke+@N;LR%NKJ^R<6C!r4k~ z8^R`^UovqK43?fSv2#!T?{_%p@ZDH`G>Uu`1@Q>^TI@IwDFzH}c)hXkT4{I1J-}o1 zhdI(87U8Uw#k;0gLeqpNJNxE{)!W~SkkkL{vhO)JOo}^hxgBr%Q^%K39?iKHJYv5e zC@1A6YCC>rSWwD5SHy2&Cs*8q3Qi26H@&D%yRUZVc&IG7q$xB@N7z~5p*h}n;CG~- zzl?Y=Zo>LDxpVlqkQO&BI;#fp9)X-2=2Elm;wunh3-@W0IAm=iw`E5>G+2J6JuQvlB+w#w^|GK1PeJS-l=J1LLn_@0GX0scTKCzf)6dKU zMoNj795T-}XMwUxzAuQCosX*3vmVge>=$0?*&MVgwr8G`QSO#>^yB45t@MksSu;KE+^Tg!S_MsAsAr3ePS zdu{2mJM0(7iS`t(VcUJZxfoM^KFt7E*-&soM-iSHiqAJp9woHtlo z@8`7S{Z-WqtVF_HJ;$z!5<{`MS8y{%`^9iQGVjiu!R{LIO*6o z>n!G;$BU7-of*IzWmK8dOQf#?^i5a}P%iTQRv(aUGi&aYAp;nWBs(+Zci(Br5hGlY zC(H$f=`q%gGe}?ENVRrI9)zM5>+28o+x=Wusj(j0AJy?Tb|)4Lvkg$yj{#Em&7U~t zJQ&CEE&nPCm8kO|wBSpes$Pab!yzJI-^LLBFN6M7WoW%XuF=A==C65DUj)s*>%gmZ zQpYoh&f~#aOUU*dK!9vp1T)_4m2S9h4{@K?=r}<#IbK=+==t&K^ca8oVvvBTcXF$C z2nqHHDg#@ehj)e>t7dYuZw#FX7e+I>P#!mct8PS~A7XzaHSsp&;`QCLe(#_W4v?P% zhAQE`(txDT1RW4pr7EoI+=`CiNHA^OIDXH5l;InFZ`z%z75R4fV1rU@Q+XN1Pt)L? z9)h6ixbdvZ7E$cc1D+S)hr@w5aX$uhH`lGJQkE+MUD<@oK1#I~IG&!_U)_Uqg-60Y z=xO){mcO_CZ+OwBx|xgtW&l+_r^I86_vd!Z_bIhT-?jc)l3S+JkoSi;MRK?ZM;>df zb7{X5{r*x%wVUBa+V1-z7@haq^m;=l8buaE{e27T&?H&@rQJvWx;3r6uYWJ)l}9dk zgQ#i4Nolf@cB4g(QLU--udSUX8k$UTulit+mnuM_I#Yadr}sdB;W-oJV%OjvK`ja$Xl(*iyj z^Uq@sVcNL-)BW;an7*DwF$abJ@L7*c*~J<8&7Q>IEl{Z0@>O{@DJ}|no|^){5$dZE z($@T8Unkuy~v@s*B(G} zl_AR)$nALG!EDdl5EAbb4*tHMI_Ylb%~7$EQ^~S-hI#o)`YC97k;z9Sy-L9kQ?x&L z=}f`!BA%)omQ@XP!LeX9_>5X!%#QLfy&~$!&F3=+3E19K(Y;&J?~cmJGXEt!XZ}S$ zeIjS58+GTLp0EPndnKS{J%a6zHoMM)^o?lQZi4J(${xE9Ha^bPaPyn69kwF>bt6Y5 z6Z7Dd6YId`Am#udIDl*H)<$$T=MnBDRFy+`i%#rpv%lQbKAT3n4irOWJah4isSBLx zz`p$D_SWGAw=NCQH_5UY0B-K?On_Nrl=Bma6}>%#bPtE{P?&zcA=xTR60W&4InL9f zV5V5K>U*z?bFmy1upqoM_E`+hpPM=p`AR`ALU(d`ACBGONB-?3B;Ntma3BhZ6Jm{) zW=DT#H7WK1(AXxip2Yk0<1scXmifhMELv}C{h3;QpM&?tAGB2YVU3GB|L}~P?lMaL zp&~#}C~M^O%+03{&M$jBs9^IS3B_J0IAq6-L519ao0iJCKKi{Sz=+4onRXaGrx7mDs9G3%~6j*DO3KPL3Jta#Tul*W`=ZmoddqN|n{o@o9d z3Zj9ndv3BqH{X1&V*#oX&<+IMj@v--<|zV-Y3r+&B?))cDPDB_^5khP7p;YUpoYmih@ zA}(c&r8_)`Z?q&wtrT_-6JSx$9z6Dn2qap5Zhn!Vh>ZR|Xi&`Gqx3ENl7TY5}MD>@h^n5NEiAN>f*0ahp=>i zhW&6)~m<-+;{TJV@|yMaDME!CWGuoghb}79SHwc)omCi=s@g3SrUpJ>fR)! zY+Wv03&@|ux}eX?e#U8OL;sY9+Hx4?o}r7dvh4DVg!gT_$EK?pg$eaC*x4q^&LJYD8%L8eqwKQrs$!uj)>B?86Q zV00knkD$E_2y3Ly~nZ)70aW4VLI}TleOZv$6YJcJ+<=5V?C*c9~V?~ zD@c!Ljb-Py0&t2SpcW@(%pLhUTfdofB>u;+ZT?g2T2jeh}s0zvZF`C}d zS{I6S2-X$O;_nM{CNlr`O!dmSrXN|R!aIF?aZV&n?`P|D;z6COCh{L)%EXO&{zgaO zDc^?IOF)i;ZtL?V07ryrTAxipzOv7q-&;*7c3-dulN@rF9e%9QzbNf~pUC4SD8B>@ z02$K?AU%>@!ZXt6|Q8vU?*NE^vQHHx?0eR}u6>o$_-(EJR-aLhlS zFDFoY6+}>IV%O4P{21F3lKDY7?7>YRqaoh;U2TEoM$Flsr7)Ci~3?R+-R0ZxSeJ*T^TmWlS|ae_vo zKnf_`QzmnAai!4g;aeg{^AW9JB2J#ysoIl!{m!`%dWZ1cpTkciF8X<&Zs+PcT{!4T z%)cRKuc0kB$}E6Ig6kxCBf@{lT{#g;k}q<53L~(^7d|w_9!v<8EbVI&N_xEM?{gdf zEVYxrmPnGh$ZCNRBIQ>|qB<^P@yb4tp^>`N)XxM4r_n18R`L6}~JNCZeRUS4o z#dKi=N3@GRa@wtzvj!YwHxE9YOKZnI9n{J=vzz@F zGn7Mfa)k?5wO{V96d)^2^?g3mVLyK^$<84$PrX0?mOQliw#`^((jdBKit1)QZO~2I zY=DqBzDv*;M zip7fqmB2k>(^jCf$-gG*JKvb!>D4EB6L_C;J-nce4vfX+E!GgRD*=1Y`{pN$#k5eQ zPbG_f?LC4%^rbG0pE=1eyre!awdf_1GxeK4K^p9^Af-i22cLA5<;+s~ZIA#O4;^GR zL23FHPp?D^5zcmax7cuB_#xS+^EYm5 z0V)<5vlL%_M(FJmXbP_D!P{5pqw)L5Am$6)mfCgC2;0hc!rCWNh;lX_G)y^q~^2)xM2;t5@3|cyJHTsmt;wj3B#5OUs6NOFZ%?VN^zl z=k?DFCyou@K;j69Gwd)gnDm)%Srimlo%PR3L zyuaG2Z-X%$R&%EA!vvj?bVq(mXkHQK$KS)~tH)q-RQex@pXATMaFG@mj2K$7Jd5oI zsm+b3CGB$|*=Fg#zkQ^Bem(tt@)UJ@Kk8Zw*;VKHZrl8xvC9;#+?-UWWpka8fbOVxaT9# z`ry5byeo54btH(HVb8;v@V-wI3+sIwb1@4c6zX?kf3x7hjt^Dar&19zq6F&p`Sm@*-!NmL!GAIz+8uDXr7Ga< z41_1tK5+kos6<4<*) z=7nsuZvVhNhq!Y5IohAWKfQq;9GnhO1yZqF0sT7n-Mn1B-8*~pjIm?G6?is2Y&LMD zr5F?ARC?g{F3-82N}E?rL=yHT;>+|D6t4>9B6x4)?V9fUqZmS38XxPqAo5H#egDd3 z$@4jPUL$y|;1#|4)(rx`K+`i2oS0qgTNmZ~&UtGZnFJU*#)~Sd_#0?f|n?y(q#8T$mGd5nH4QnKBA5eAY>XvAqM8h z`6W!=JbSBUi#kESC~cbh7UnBDzXy||Vjj%MZ*aBemkx53H-<3`>LbmsYkbyUK)e#xWqcCWNRK;Hhf%%-@hr77uHvDU5Fs3c<GPIu8zw{@Wfyt`B{`vf-tNpyHuVBjOM>`xC0FH2T}WoFH=^hO=HfXSSm=ja@mz z6aD^M;BDOtYPIv-{7y28<0sy^ewHKel#nVDo}w!+5Zo@eN0+~~yMBCic4FQ;_1Hjc zik{~;S|U|Z@L4>GGfewv9FYN{?kjxiOFO3pRstYAm$O24MOo5YVqp)nSr zf?T%^jcdxeO(*K~*w7dy6e+x~w{H!zTG50I?t`nntiRu-hhBGH*hok-8s6VGEkh9Mw+1ZK&dQ^92d$aaw@N4&?3#?@*RI`1Je;S@4@_25^# zP*}7_J-sU9TauV7cMV3#}#nSxJ9v8LoJEXM=?F zW5kPBo;k%knSPZZ(i4C3Myjq9w3@;QJgtx&ng8U+)uQS}xSNW#A$F4vr|U|IkK+R& zD*n7<+Xr0vI|JaOXX?J-%)S-w##fRT42%*;*V^7SdzD~yf9zlbo6*#?3GKZQ8dpnq ze*d5rN6x?oUH9FIvo*sbpJ4?~_H&Xn==(p~nSNzf#0;_hyC1cC&E2#QoxOe>xUK}F zsnAkPUz=-_MMY6jT2T;jlm39KtOM=JT-0Gq6HTBS1=N-D_t+Z2$oa}HDUX&8yUJ?N zhet)I;9kc*&%!4<%I*$9?DOlM`CpVZkiKVgNi+(e2^0V2 zA>wSnr7#J4Xo{zy+^J{kmgsNRNRmWr4=Jo?F{`E4HV({Z@+pR7@uzTe|48a26k6`} z)OIY8-P~cv#7N$Bu+>{jGFO;gLczh@7k>yRYr~|%cI_c~pQ4lhwhnwziPLL8**QFcGZaJ#Dcx^L+%)GQ?Rvt?JE6k^dl_c3QSzWf?*KiJL z$>sfqi1#h+GkS@3kq5>m$d7aope|jSzSAD?|H6O1jTn9<+_eVysN9?4VwVhsOn5u`5)r^p5 zd8i7vhY7FdXa$$(f`V5~4V8Ai7#DGa{6(eF^Y8<9{(PT)GL9=5pafi()n$H~eT$%O zR}Cz4SABCr_1cad)g$x%k3<-mv8h6FF`~A)CZW8&5D&Oj+!Z9uF>Sim}*Gj(^h+g*vdFr8tUzML9Z zqA*XPyuZ2HCac>CP$?fHMj2{J2N_7DQ6<*0Ljxe#J){4-uOI5uaio~>BZnD8mYq@! z6-iu9}tI<@tDhQ1q|8o&ZY8`th`(Mh8O&PT`vqkRsrQqE+i528f-bpi^ddE z7e#dpnWs->Le!%9gG%s;_PISckmB)Xp;6$Ia`9}rmy>l>m=+I?&5@^Xmvk1D;2Io6 z)wRF2cH#hHv*GSle^fZ>;u}GL{1TrkjDP*iRu3`O=AZiOh-i4+o$f|vh4XSDX{nR! z3IicQ2c9ebczsDC6cdKDjpytLxDykc&rd;-{p!lz_i;Lhe+(Ol(j6}8(GiNraeZTj z;QNfKrv1DvgsN)ob=^-l&w`e~_-K zG4?peA+~p_(TxImWtiN&JadCQDxQ!1lG+|3&0W#eeSSJpug@VWul)BtTsmJ_u~h#j4~Ryq=V=!@L308eM%qTd#*mUQtpu_Ycu(c zH_FoO?5^FIO;JyM5W+^}r{PNfwYL-3ZXiPWDPBf@ezejpeXwBZv1sVSXxq3@w)?wZ zAG4XTuu;ZY2-+l%kN3d>7P?i2lHFHT^O?T=lspnAlHgLdTu{-2>a_;KEVU-eYf^Ho zTZ;N=$ZA8Iz=(1_L**9Vn^Atddzk|962Pr37kY^@IL4TTD1m_+%IX1p-B0;`*9*7{ zWI1)PNm7<{r7Qy?tIMmI?dQ-d_Z$U&jhl(RK-9GgnZVGFKdl!{_l$WdAfJW%rwl6& zWr(1&rp5bP*7nhW0AWYV0q*H^+29^gJsj!j_0$10s4&tD%DFff&4gnN6?m%gUDKw3 zQ4bEL-^ZVI_KM*lAKJ%qdHMGRop{!r>X;Nq@pE|-cj&{Yp>}EqZm5aN9#MhB_=^X@ zfUCnoeMH-J7Wd@OiSn@Lj_|fz`oO!ZJHRsTtBf)%bO`G-E5p9(`ug3%f9DQMotaMS z-d+61(wS|kiUd*gmt=-VQ6@z|QKmO$nUq=J>-$i**Q%~tt%!(_84-D6A5LC)M<=8& z6-U=yCWwGa?A+f>TUf`qobN6Ir|KBlAuNZz9ss5DsnTLp$5k7qEtGJVL#8!<@k5Dd z+g!`wVjuR4eZPyT+cm%b_}6@VE}cJMwgsO3v)99A-jC=?2p_O#Lr2w<*uul<&dGs% zavr0yY!CrWUJnm2?5gz8bq!MP-e2CK<4Ub<& zY=yTOE)|O34H6@9`BhJLzn-79b58dpqJq6|@1(G8dd|$(@_%HtP`~NRp0)@b4DauK zTW^oH?Zc>THAnPAgtfS9T?+LxQfP!if=cnQHhNl}Y*@=L++k?0R*icT36X<$=m&_qA zspxWSbp;36c4Mk3)5j`2=2xfuR64kaVhPQp6n~WHHpof57iz)Bct5Pg9P7Xt+xIWx z-;_vW-P%j6XS{V({hEdkdUk_L4cCXoJ7~s+vnR)0-r?u zA<2HU(Eqy&SxkGr9VUFsIx-UiKW!g%#wUjn~xY{oF&J<9H0} zN9-w%u6%w{^b+!YG%BYIx6>?fuhx!XBh`f4J~gZadp?D4%}m*K8Pvm=_L|7SV^gJ$ zqB!8Yd-l=|98Fe#@kXmbDwHi$BOId+z019yy*F7Ol)*q&BVroAXc~F%M_2PF-E=4x z6@({SW8Cxl0;)&C9KhgK`RjWCE$jmGcIC^FqV)PPa64w_t7^}w^zS~yPBl9%0C z420NZzD?-({6JYPUEgRC?(5eTLl3Se@EV_-%nu(%5q#BwD%?pP0eYO&J<63u{~H`| zhlmJjowkG2(Rfe#1`~VMG%^Nk3@pg7skm78eO%v<~rgw>-kV{Eorlazz2D&7)40q>8#d|_(8TssJ1 zkec9Ogm1^9!ynuVNSPC^qcGMnGhOd)b67)CAp{NR=uYxxY^l__bhrQjPE{tN$0zxL!CGoULzCuGl>nw*nuP41uAc)8F7oX2O+A`q zultZ=IYe+D$M@?h+&?%);5gl`55{E;E?rNlv(K&jxs7LqvenC3@Z;u&#sF;jT@D!3 zy!(D5uxywBT{qL4R&Zv?k}sXcDRD){ocX&BWj$@=hzKQ5WxHCknt2wZgd5`ONF)x1oIQ zkNbq|7Q*RNk;H+!h=JV```TXJ{P=-@FXVCksYHO9usi50JLv>_u_ety`6lcnXmpXz_6TqAf`;?;iD+jT^a)jd%JjT!MYV?eG8zqL)ZEHJKf~% z?!~BeT=yHi{qViw=Rb8YVx!HQ*2(&k+Z&H%{|nGI-t>x?5zULg$XoC3(JrUw`3HX~ z`7vi-@$xF^7yoe2#aU?Eb9Gb%3B1`_O>H0<$QvsF)Du>s+u@>+#=?)$JTB_h0{{$b z>|k}ef2XQMOXMPZ);&C>?>e-t;@}XlgFP!l?EnTI3fGf#+ZQDkt)2or3jToH8w%y?gIXDK0QW#lYx{ND@5}c+-`D;Y z3m!VZ?Jx5}N0I>JqbOkS>D9Y%F9&judJo3nSi&X#GN+#8Eckz@dRY<$X$GGgYnA>v z?xY5CT_d|7CE1LAe5)YgUg}|=jmG1G)?8aDTvKt#Qq{o-n%Q<}VES>m2ysXP#$nfA zlpIMxfrXl&9sS47l$5bttGKV8%%W4fY4P-wJJ(94W>4(>*KKdX`a{N@6Xq{*epUya z@P%{g;nEXu;b-b^3c5jLWrJ0@{`;X7N3k*d@#J(#RC>ML_mZsRyyh?Sq|&d}y82+A z1p%JH<{NAb6AHtLw0_sC9=hMbl%g_VvnN5&97!MFozRR&VDFnFc7q@7fh1#t`_Dsu zzTdLa0&FE_hj_r+kb1tX`%ov-mlHa)S_jI?ycmX3knByTC+duBW2)Cz`O98hmW~f< zgAjg-oRxygvT2Fz*QdgPyg;hy6h@c3FWU1!*4f-Pxx>|VXlabvlyy}T%$2t{Mr%0N zn)44U!W|ZEv;T`euLzq9uQyTAc)zXm(7;IK)t9^hm3=c6`f$jturLd48*sYO?cys2{ zjj>zuXV&m9bV{xIDpyR(1odZaE`_Pb{b)+hH9#Jxz0XQEG3(;)g=yG+bcetGRau6k z`Ax{JLkU8x5NgN;_oL7mH{ZiEVLC)p?75dTF!byyzFiK=RsF)uHlQol4x7tko=&nt z6y)W?YnR)`aC&~!j<@(w!ZqZe;#Nkv@VJj1*6laD*~6XZ?+uR*fr_QT3j}*(j%l#j zl2>c-(IYw2?c5wgVvnl4h!|oM9{|R>zHv;6*}mks%HTRNULlQ;+U78VzS;BlZ{~}D zuwc2Rg*t2;C3W0W@%^R1{@oQeB2f$_k^rE3!cVM>D}l@RJC^=GQ1BAFDc%o4X_do? zl2YR5OmN}u=a+80A2!EStAU>7!*3k2R|jC>>>JXfa)!<;DkLMW(sr~k_Ka@2k}Dw7$1c@Sc5SN95zp&|J?b3r0>R@ zBdh|0;k&Fn?|aDYumn@O)At!~7TXHt*j-d}KUG?Q0&76R= z3LqpZOI+)(4YHqHy7H`n`xiMlIGCy@`C;V~n7%?a%r6y(>wo_ax@ z*`%lPlqXbP@m{e@3k1;5I1yQYbGO8r)pB)9v@meoQqv@^lPT;Z*lN2TEL_Y-$@?X4~Z*8GOhwmZEaLotv12Mlc1K<{P^s;i#a(M;x(dUR^u36Ddn z+T|s`x-FmSk1Usfuq_FHTtCO@=E2M=J0iiDgAIyb#Ya9O7MDv#q|9wk4^j?!c6tSf zDq+*o`k62Ljefe%yaVw>?Z|-M%T<6>snBdPBiG!HSGqE zT>SSE?}S2IdiniG{Tgjz;_vtRdhWn?yZ5S@2ckM0PPA-D!#+~SeY5Piy-h{%Rync%lX0l$v*y&uw;^ zOMSHtVC`Hz6-$Yahw1BR_j=!F*Z30ev0;m#Wn7amrJ-W4;UD`h79m?$8uKXuNNLxY z-{fqgOnsDE6thJ7d+;^uDQEFl_!X~*o&Yd5K1?&ildr=*zMR|Fy_y7HW>kVdE%N~N zm%NYv3YlB7)ZCwAc&HhB?ppT!rl)i}Wayv^iiWF8XB3+*tcb~fOjCPcQn^qdeAec| zwZ#DB8|(+2_qV5%C${Og--uHP_)^$zzMH*>5FlS(Sharm05$P+y${{`Ofcx!-Qx#s z(>>25rSaQ926_9|kN1zx_c@?y=<|6@*+*TCCn5?-^XqSq-_kHFx5q)xxc@%sF`}9* z>GcUzQ_r~(%BSOrDEk_#m#2A+uiH6~5vjcvBw&D;u_UribAzkT@cq>8@%80(Hs>WT zk_oGwoy6X#G}kGT)$4!rwrHerXkUZ%o5Sgp*y!X%DsN{fkm*B~(3;OZBJaK#Vp1z) z@wY)dd$dP>1hug42drj{#X`JZ$&g=DIZ6G?$C$?3aNQ~ZBYdDiF8=ZJIW$>b*E9Xi zxk2hD|KzGDN94UI&dc{!!o4^nE~N5`a?t5~X?$F{!1B);<7+kA$|*6hE|jFk`vvHQ zl%-dDD-5b`hk3o78X6cgYF<(k0!NEHToNSdCFR{jG*P;ogPeGg{bDpAG$HP(D$y2VFT6FxY*Vg$b1~$Mt}b#C5@H)@2zak?;G5|K2%C1 zQU#f=Z}%*#@zri!YCB%Q^j3c-W)?#4PoI!*yYhSmSqcldLAOOej2do%D_tNuO;3vqh=W77rD2qu?d~fDiUpsMYH)Z3xMJ7hEp5xGoye?kp zrMSSqnl)|kIRQ!H_UotbW??v(4z60g{j5_b3cEqR^&ezGcPa;m!rMPz8AYCvJ3^UTqyL zr-KcYNeh9{CcE!J9Rwu^ z^e)#PZ5uU8Xs;Wiv~2|+tiP{yT-*p74`DyFDr94xkfb92ai0;J$6~`==ycvMh|0T6 zk;qm@qsP2KDAjQXMW!Gh!1F1$FGhb9!S2PDaXeO(8N=9-@MiF@4`cPb5=ZwXFj zhYub}Y^FS1uV#+z233rG^g_mGA`rU5hAQmS(KE`?`zf#n8ofBamfa-SzKB}%yTnt4 z%3r2m!;vLk+3+w!#?r5kT0HlM%Z$bR7XG+u7+}F4EmvQnhv)o$>-#OK5$fm6#4Loz zgLz0oyhA$c1$%O3`Axvs&11sA&d7b$0+4CdA!E&e6xpTchtH7h{ujoD}tN=Vw z!M+5B=)1HkBy4m%j>98tpXEr-FSyzl2k`{Elh5Py5svjRG@MA^mT4Lv3Zw+&nUar7 z|7Sh09p`mKb2CXecPeiBEymO=!%GE69r9T>lBp)8XKU)AMIk{8h=oBsQF+r9zk^+v zbD$@aV4X*EZpQtb?w`wD3%C;18+fl8-}g}7eC1bk!o0qJDT*yQN&uc*rhw^-xTwD< zB*AdA&R|#+&!T_S(1C~b{QkpR>mAjq)AargdOuzH(chv3sh@04``77rznBD0KpQ{P zdevDP@N6MGq~G9UBOo-e`YJ{jWp>)9O5s&Psh>ahcL==VRW5(~mH115@AUPBv+ngx zp`!hg(=1E4>AnL&J`9G=-fem`<9=e$-Cb5|>qmz?In01QJ11}nnxsBFh0=M#(lrmG zr?%rsuXiWhCPQEG9y*gAcA-|hA@7S>7(O@N+%pwhX3@(sF8uxs|-la==_rT z?mm2!sbAoT9^7Oy&b%ji0#$1{TzT&+84rBz;wgA=cGoa|gHdJx`OemxeFdyM81C^{Mp~Pd4QU%Uhp$CGq;z ze{>WH=$N7Cy^&wukubocRdX2dz#)DkSezyWe8xJocq7@yJ+SAyr>_mBE)~w%pV)l4 z1j-pc7pL|9Ug>d1TZ!s4Y?dWKc{6?@{k-$M&H{fhsX7P!(RmsMMY!5pZlor zswvA@Y>U%N9w2Wua+Sq+|wWWuizHYZVs^)PLXvkBY|1M?Df zY?%J>JRc@`!9ptqd!1uQhYbk?O|qAeR(~bxn?CkaI7WO3$V*;iUyh|o6C%9rTqcwB zzTap|-6$r@-Heo;Pjn`u)b1Mh&Fg}26@c+1FQZ~X(TYY(G(YMm;gtx_v*P;9Wu}N@ z$915F=)%GE4}TecoZ9-`U2w08A^X*Jl?e!7=AIQ_|o@P$%#>gNeqlVU&D^%t=miCQe>yHrkcOMmL5{?^A)BMe4_Uo zZQ&fsr1VLiXHDP3nec3Vq@yY974STM1(08&e{lvM4~gwMgUB3oiN8&F`kcdkK5KFs zP4cGzi}@_^miimO;>yi)w*Hjl`2h%M(dup=&CO9wCCh=u2N3m%^1*Z`J{m`$0b;+l zR(=oiCP-H5tX(E+&oP6sc~h(-%4`y+d&n+0@AVtL&?6n$)qrjrk3Q^Su*5}CU{-0X zT#*ia>&~f^O}_fDk@VWeY_JK9W%|m((!{MPAsE)g`D_;nI`ueAsRvPXSCMrT!@sBB z@bOWd+NVnJjnDQ)y@C9EdHOy%J+(CXJ4^z2G!=xP)Odc$mLk8+;iI;;Il6l$7Y%E4 z+P}{ucS#`m)tuzlXEkFTu|9;__SQuF?|t(36J9Lpfn*3Zd#DE{yR74A8KCJOG;aJ` zMn|3C+#4iS7LV?TgjCRjBnSD11?~#CuoO|(Z2A?a-}W0GQNODoloD@H>VDvf^9`EJ zwEWv8Tpz%iE;K-oa10!Ug@d2u3uX^w{4AiNN@hNYiR4MbM#x<*>sKW{DsNrg>lGfE z{NeL^{xZX z4)dBkAgvVPHSoQ*uK#S`hd0Eh_06`xS8VpdNAgC zMEH>DNABsTvr)@Bo}bW-32XS2#ASpXFd;xM()OXdI5(_tGBw6~BLdG%v@HD9dX^Bx-6OJ#zH0dVSK&@rpY3{tZ*`KQW!tIULF?M zJxz_<1+QKY{nj(rjX^W~*?Eq`GO9|1f?>fj$V?Sqq3`Jk(0j~`RAo%o$YR(E(pqhf zU*LVPpl`hLqwjireg_v7rooI#q6axK&cACPzu4|kwHiExYoOz&8^Pyv{lS{@T|o{) zW}xUG7<%L`;ETsHF)!#-V~e;C#5%e0R=nRPM1I|}13n}RLp=PG`XkAH5t4}~c>7F_ z0Qor#SZ9(G4LR-h@f9C*8kc*tM0)^&7r{#IgF@4Ce*`NPq~|*(^!K$~U_CgY_`b<= zm5dUV>v~LJ^t>N4;ZJ^LS%;*5M&!ziT2je>V3(7i`2}FmCyhy-!AeqBAN`$+uVn6-b}=gmAytL&!|U40QEXFegiF?zc`$bw*xvkuvDHEPNy zT_D0$A&<++zQ#FDD3DY*rS28P#& z@o&zCix-2IHIy(jZ8l#pMupMo9Yzc+N}f8KG5df3_PYEsp?wVSVwAH0NByOi$+(I- z^hkun7}E2{vS^zvv9sd$cKZ2dk>^f?tW>W(dvhfJ1j@+-6NlE{141prx^(|M55=Y) zlP~L?2kkjhMwUE%)H{g%!|8kJ>;{pK2By&Y1j*)6-QQjTi&Y~~h-GXo3Ce+jxEv2} z@?8&A7;@aqO*jNc%AN6gSA5oL27{*OiB^oDQ|y}J%8m=g0L#*E)N5=4RjAk>+M5Qb zBb;QO$nwzu3jOl#T`cIoLsnuE8D_p&6}{^HFvu)PEl=#eH}J-B#ooiT-Fv&l zqt)%V$v(CARicCyvtMX&nwl3$4aQSC9qydFZ5zaxUX4V&+pa?4{m< zhCgbxCVZ9NVSLJBYLv~pNP{&6vCpP+1>c8Ogc3Z)4LPj&OYrROq9UIF*=n@4*L($? zHfDL^jAxmf?wqPG^QMt6^1I&wryI=PJ*)v*ETB+W(e;Ee`MmeM{prz9Y0K=fs_0YG z+pW&=*7zJQ&)Ht-g8qt+cYTuB2i_Pz`)7tkaeAjK+H5Wi83vExr{vD>x7G~D+6uok zz*(GYfqe(2K!kc<&E%qcPR4}}XBq4ZGVs3bo`w33!E zV~}0DWN8Aj$;3R8_l?zJmyBBlXIN}bGYXXpN9~u?k{tkmimQg*WAx_b^7#*BYSR-n z?A9MDGFha1M}w2N(vr0(;NNw{_!R=_BYU<^IcHCg_w4VJLiROlbU@MVDf8J+U zZHA{dT0TU%$FDN35;5+su>-f-w88(77>~g_I(gFh;Rx4@{(Il|bKcdE!RH9BcojM0?}YmSA(-+YEsCPIy+Fw3S)<-`H9y?Z;vjs063(0FdU2!Q zHB`9q=4_<*>n$dZBZ^yjRqAu+umE7gSD%l0^Dg$8>-vthZs?FnMP*~VZtf}j8+djXC?sA4nF8(TaMuYg2G6t=)pZ?O8)jTOxOAiCw zl4A2)jjuEFh(%TkPA60?;3!o{GKI5T> z_lcg++`E!3lN-}lG=fDxN0;$hfsvAN7SqX##J~D2xCJ1i8Sq|vEHY*^Uz4NH&9hj4 z`EgBg=Vfmn>!>>wPANNS2IY0{L+I7ysbfD&?$$9)vqk?CvKptk`N;zpc3*oRdMX@} zs8w^h52SWkS4Y%L*5CWF#X`!jrz13JvT&oeWj2jqM2iJ~o%Q1j(jt2uO90t&WBJPK zb92`&aOW}DcetvFg?}Qz17s*W_Hgh@#{2t4jWgV2|JvM$zq{-q9veW4$CG>afmMpH zJeV-<)9m$??CBSq4gQt?(BH3Y4_%~^P=Lm+sX}n~K?}ecj&sqZ0qQAiUh#bKNAHwb zgdL+#>e@F?7(0CWULxY7i^{49+jD^Aw4&&s*QQJ0liNI?x`Q#Qjv4TR;9M=2IR}Et z95VjY3bpIes65mz1Bk2iS{;!%3vM`la^vE!juE$VtrgvX7kAxK9d*H1>;zeI8(? z`#xf=iPJwQ<+*IPC`kkfR(c8ZhPlsUAaGHu~-!?-9O9O>ix zFtaY{XZJKn#V29Qm%@6!WxcUKfIY~nEIrr3{4KRwq1L`-99976UhRnJRxVmACBL%W zwsA3vk=gX2&9E}sx*S@UVs+j;WTeW?4|$iv5uKXF*(RM<9+q?abcf_BZ0gM4?HUd0 zhEw?>R$|C`i%<6@jip%- zeS$3YZ9I*iV^>RmsbDMh+~H}FNN_P8_WimXLD&Ca9uRHgT|~j%>fx+@KFCy13Gz*H z9&+pvAM?do-)}R%Ed^wxV1q}qCpP;y0>4`P9{cx_&X@C$^6Gg9+>8D`w_Fxj7Ukkm zpl7!R%Z}~HJf## zr!px!`ihYKJCk%&%jFGXhEEWAQ#r0@i;X~Qs-z5(3|$i#ONwxnnr#q1Ul8%* zW;k)NPOaxuWj|6Wsthv#8u=5uUV(@5`fc!|5cfx#`tv8mskgnc{0$#I{J{-ct)7?qBf_^g4yVf0gO`?;wFd1%XD2@fyQ?CILhLDk<_5K=eFZ^=W4rwA z`;uwK)_z5JUb+G{1_ol5zn*KaBkI~hnJIy@o)wg7C;ATsuxTz`$)DSW?7H=*^=Jx@p)0HlF;i! zxvBf`#mg0P0nhk8cwCXlHsrJRIQhza)lV?nYSKM^9fCV-Zss;eH8ZxWY#)zHk@MN% zPYC^ZzrRg@0-n2{#8C!r_)0q!nvS@ibjw#V;+aSm#D?4Nhw+Jkbw{pGS^z+tz2dOO?Aefm|~ zEpUF>tz?mxAvCQc|45iI7V>Orj6STRMV;-r=5F0 zNankq?$_G@EGJH*Of@d@^;AiCoNeY*YLBbgIOP2b@PMhl)CY^5!ma|FhSHe}SvDE& z2%sEGT8r!wIPcP7pGN&t*!}civl|_nn@9ETR_b(yI+{f6`3Ih)Kc(Qz6S|S!+Idl; zW)?OUR_ky)szx57=89|CuzE4C=(TJ&B}$mMd@?&wYc;J)8v*wq7>#B1m78CNy-umj zl4yhLnAPsi7R3_pF@3=JP3KnscV5JDX7p@~AM-iM`5+-1h?uJD?{=%IXjWtHiC(?d zS@~RR^?LgrDgjJw1(%F?a8JpB5f8?1U3r8dJ!GG)cr|qWKE2KAW$tB zmi^}4KP5$%;sZ&j7Y_WvSlJ&jTaY@0S@|jhT+HGFh9P!9(YO87&iBWuE7|mqHkeYA zmyMY&ol;E9n!kbFaqC}HXIKo6y-(8WB3TU$IKjG#xYK}8qy6rSx(=|CdQ(}ie%VOX&h$sWuyAKV*Qb)~=d=~4^TW>3UVeEDhfDRj z0*0uemm&v;Kh%9@FU`tRncVq9a0~Yvb{kO;l;aw4hd8_H5_~0fnFU&AbEw~LG?(qS zk}2&99r4Hpdwi0%Bz|kk_mCIA{pscPJN8&@G`|3~^kHrZK>qFFjAr?3kU^^-O8cEu zd1d`$?1KbsmfiDiy^eufD+;Cz`S|IpRQS8?iUZ;P@<2!{mHo~z@+5|U%&-k8Mffe2 z)r;&bBeo?I?=GIM5w9iG$=8f1riINtSp3q;L1#Gw+ySt{FuWum8$LC!Se30fm$Ose z#WRX_DXi?Y^SkQp*EF1)cnXKBvT)H)+Q&r|ik=~JNvSantD>wXzC!{)Gcg~=ORyb; z{a)yCg~G-SzwikHzzc?Z`;LA`dA{7MQ{izv^oSaw^RQrhUJ~{=CUxc>?b~?uj76WZ zVvS_@I0p7XDoUsLx90^67}&VFwwG3_ep8pymB=lhel|GesyJJpLg0|XZ zHp8|$kYpOo@A_7oo>H$j?d9-X-j?6uXR+(`(=W6E%Z3h^va@MDDog)ZZ_j-9e1G6M zjv5uEGQ*gYG`eSQd1d`PvtEx;fB(jNNo_%Eo7#L+_K#+#&sTvEKGz&#;A#!HRLXNm zku_xIk#hbNU`J*zfh<27NG?F zH2fa+6InM#IUX+g<6ck!5S9RGuio%&>&!t5kmI^nwTg=Xjg;8h=?|`U{_+91@ zH?xlE9EL!R`9Aw97ypVogmER0t47?yW)D4Z~=b?UD%^}Ic1c7_SX z_4thXywnOhzc7rYHCE2O-CKMQ$=JJSpLuc%UN0`3)F)Tzpj{Q6*}A8npTqZaiq_K6 z$7fw&p+^$DpLBUBuk;ygccG5}HvHE68Hfz@#@GAe4Fm%q)RyvbG#kcXqIl>7`TPBNQOQ+-0k#WSy$bPur$FT6^YYU~Drd`Be6IJ|KRKV+q9eGI zI!MRDAKymE2ZS|6UXR)(BR61uUQw z;R_aAKinS*$Kk5fx6C{&+HhaEu`eJT4sQLljm0Wx_G^SQgpkl2oX%A-!QB_%9CbKg zQ(l9h0{`w)a|d!K30>{D zq#!N~?$1}~6r8;wk@UyFrhaH$<7xXH&K#<$z{q2F7a9>&p&k$1Paj0>BuSMF?~RE_ zxExC+yb))%=Eh9z?6Iz`mOAbb=;Y<#PQ&dBPJ4UAn@k~h-mlC>&$f|aWmQN45~!yG z%v0H{MB8(z$IBT;7K21RgW34LtL%9>_o0aPSBph6l^&BA?&a@j5esGYVamQI*6;hn z=e%~EuopDFA9Nr@?3Z__*BB=Kc)Pllv%930B9@?*qn&yzNj*X9tUUzoWL~#kM|+*I~XF zUOhtQ`JBZ3;q7JW_A9)eO!r7IkjvGiQ?}vQ=wF(*Y19WGw}D$qmB1ui6XfQ1zt0-! ztEJNCNufg3c0BV#_u`Mbc5uN#RpzF}UMf6`=~sMaGjBWi2PuM;#b@_{ zNk)F;aFm?u*Ks>MduPuws@H@3P)u(aT}y5}ud(0YCygR-1SwI|5dd!?Vc1OTg_0zl zhzI;ts>f(C#oCQYeRo?f>wp6Ps3mF7Tl1|fGm65UzXOIk9OQ1E=EdiHJo*@!&{P^< znD;?zw~UX1IjvbYY0k@}1Z6Z2%DlE27%c&UxC-w=DVs+7Bzy zukT6|-h!AOk9h)@*t5?^FqS9Of<;y6W#Z`&^CfJjd4w$h9{k*_jkqfNsn=OBEj&j4 z;eCx~y87ewW&-#vcr{^VdPuaR?A?FzrM_9W;PRX#A709@Ptrnx=uKKa>ITsS54MP& zDY&^MrN4kbcyMOq2cTPv0(B~{hjx4BXy(Q(DD%$yarda=Z0ToHtVL$l9}i}qq$xPa z$sKz=g$9g!$pKe$dgh0UynqX8)N2>vbRVJsewNXg?FVJ+Dv}d9v8RvjBU3zzU(2 ze)PwZ*l&D}6(#DC*+H}RzBQ6!@pZxz`hLt0qo8WJ2d-=>r91$mqaL&&`f#<)nmp0T8U1kS$qeK91pm6z!YR8;)w7`~grS5w z9}MVpdzV~}odem#UKe^Dtu;bXD*|rRvoUJ(*ClvH78MpY=j73?)Upc!}lVNm$8a2E_a*0?_Z{|jpp2Ki#mVj7tMRz#<;1j(Dzt86ueym1?K5m^?vXB=gYixfK0sZ@%+0iP-t*f^OsjhVQLB+2*cnmQhqzF150~ zwffo?LLd7G=(ei)7IJfBZ-w<}4MKi9aoPX&B??bYt^`)VQ)bfN`!xdI|Ij5cnYndG zgJa{T^do-=uP|xU)3;-+JUsd*uQ?ym>Yr9+@*#3`)Qo81O;nsjZ zoML96EG%*(KbFHi7SCMi$$e%6mP&>a_yeKo`>-@cMGzkwWI4)VT;L3c$6iw`knzin z?28p1x%uU^zpx2(?J=SSn;7L-$h0zZ|v1Ww3 zQd>1t;DaIqbfVL-35{!DY*zAtho8Q_Z*uYEUpD#=3(qN>y27W>JgP>&tF>C_Z8i-- zMMx;V>onpd`)z%|>?s5phM*-{P=*&LCQr%tN@*Wi$&ZL{PJErY$W6zU4+Y;pa;WnS zFtMfgEWl0~hu6AG3DDmBvG+C!xnqt;tZ%ukgoZ9Jh_g4iy%X|EtQUyjFrxGxmb4Fo z#%d2J;gGP%E7bdP?bip-j}84TxK%ubm*R~km??B!AGW--y$v*^J5k-zBXTwl1t2EpoN)4}<=6Xrd0pGk>!L1tx{em2B)Kv?Spk_SJVc|zrzo(MzKA2rrNY3vl0SV{q!iwc3 z%73Ps)e%1?cUq#fuOv(IlbQ2Dq~wZ{Je(ns`LG%lpR}C$-VOVUI9rTvIkH z)6cb2Ijei!BSI_1RbpuFw^-LAU}l5F-B38p;VP_MisJ~9JG)w}+zx+U4)CXqiTu+Z zy!R7t1zB~zc8YW@cK=zi*rFqv$Ef7o-_Xgs{?;_P(tF`l@ymp*js zb0lwY01=lUFWlc(F0eE@bk}R5;Nv^)t($t=p#va>`g?{P4PmD57yt;l@g6?`8?wzck`X zf>)FsSxI*9YUJIR1-na_bDdXE^M7}fN%^pcV-u&}*S#kz;+`ZUlPT75tpp0+B2%sD zxX)_Ia!K{nkF-6?fv%?INjlfQX|!Mc$y%40YeEs>RfoJE^ptOZTg37Rh`OJ7yy*IG z(?zFV#*E^R#i^1`A@lQ45S6FLepEl}U4+VI5=+!HTNIw;v-DWF%d|xF{^?zT*MZuo zPcd7KJ!D&S03(xRhGW~c?sFJf2#zj=tF$K=j{ZFJ&!;t-;cSG{SC_$JP z;G1Ya8^#IdttMP~{J6ley1`x1ymr3&Gkr?;J|U4F$*&l^IRqg9pHZMv9N~TvQn?ig zQ-^--%WI7%Fh^Us3vTR*qzku#pQd^Io!*lz+%u~bP6v-Py?*`3YUyJo6TEX21`+)1 zRV2P0#bNDv+*UH8J0VUyYM-=%eB+kagunhsKUZ!X(Kuv=znQ2SxJ05g=Jc{3y|;8M z8DPP|-G0Ku8qNj^U2L+Q&%OQS5)8BCBRc zfM)Svk|6LApP`i@fA`drcZD+!Nm@^eD9!OPcj3|U?#oj;2|(Fr!SlzT97aKVL4zH^ zuo8BMSEKp0Y{A2BJlOYHE^uK{zeRp!GH3_L*LtI%#7-{Cg@&6^1Q%p9cc3Z8=Vq8W zv_8%jn?OWdV7@+oh{@G9NyJ=PzDevZw}N|a3LHIy>c8ArACH~ggAl^!BiB$V;Omnz zeYL`Fq+Ge2mZqlNto%MxMrpppc?`bGH4gi@(P{p$#P1}1$AG8UXEZZBcf;>>Y_i*{ z^tV@x7yv0$L;5fOE(nl6LacCF66Y0Mq+b?NFwL6_(&q-zN|1h_T9Uy;g68eJ23r0A96l|cUz_Ac zifTXiVJg4P+2K!&I3RJ6h4B8=ICEN$^h~n53Pp{M*AjG(+N{3urDG=f!1Kw}0v#7# z_PlSun*D@uRJirvZ|vj&?GXFEqvL=9A(U3pbfdXnHoGXCNw#>&fh4k2`qd z&Em0O^1dgAl0S<{?X$Zh*f~7SS@O(xw(xtBa1#<{ek^ueW_e>-sCAAlpKpBtT19- z`71=haxG{C^KtK~N0gxhdq3jsr^96IlK;ojd2OkRMN#yZhysrUF%U#R32z`Gh~&)I z_o8l(QQf!7fCwk-v(H|0rL)W<3ASiOrog$831DOTM##Q*xtKJ+(ka|01{x8D+Wm%1 z1$$Y0^ou6S-}Tnd!SQr~JnR%s`BT$RzMNw^JJNc029*Hsaf(I?pg--u*W>%#EtOz= zMG1iZ@n_D2Jed~@7--)QO5oyPRps}C3zGH(` zjIJu2Hzl)!tWk0en-`9cjJd>z(K>?)=zJxKh~6Wl(gZ(3ZWHJMx3JGRxVX^FAU*h8 zQIp0c+Ic59mb!BaA>@Hikaub6)IC6djSqtf!?&ZJELfgFB5u^kan|~m2z&!dP?D^l z@MDu0@|xRw^e3Q7??W zq==^&Ud!u~_|mRRhkYMq3A9To_d1`UiqC3YYDg9FJj!*cPqBgg{Kd}rD2Ytr*)NT8 z?6y)au@b74d#&Sd`b8xSsYmuEc;RWpep|-Nl$RN!mBIw}5)8D(ka7NDoaYMWDfjVZ zl&}#K^?mvtJ>Gho3RvUO)@!rh5AnS61iV)%XS|W1vLI=hmCj)DJJco?=J>Gi~L}?BXJAoAtNLh4?o(7Q}3?Ft-jKdRKCd7KAzl8=xZ6PU;ng70$vu-{OH+MRFhn|3)nf_CeUSw`SM!^Wq**%`#g&>8RdB81okBN! z)NDE4+0#8-&GYLFSnKa{kaZiC*J5P9ziQN9apP`vGob}#jq#9TheiH+BBq89G-)TnofkqBKH~2b zg%mXK4Obc<%soA-_K{`5{*_SKx*%-oGI}KfBzQh z-*$1H`r7TpD7$Alj`rPyv*F?2BA-RN()?g+?eb2Qsm%ct1US=@AaRL{xg$zHq6OH>$N(6J43v1ddWZvAwTAsDt- zH8n+kxWRD4f?IMQ2ryi%ns%2FOQ^Hz@~x|iOA0J)<{>4+>+7azLPTof_KPcthCBl2 z#B%&~@wxgO4E2=S`0Ge#yvEeBC0=MRwm_6taEFC zIm3eoEtfyK)Nz6RVdkw0meYxgQGw~x-Z5tK4~zUKXnc~`5z|-eZUA&J$3>rI)?1<< z;{cWmdg~{2Gzkm>TRW))#a-GvF>BFY;l+X>U-Z6kzEnq4TI_?vd+~*Xo%f`U^OrvUGdSD< z+W)Tmc#&9W`g?B;p44|1XzbgNoEiQqhe&gYt1R1wX><1Wuwqs72V|&*g+vv^z-QuD zT$+{>Kg2P~$>)GNQ|G#GSe>J2;B-yktvML1dGBYk*@2QBKA*?-u6B4$VorYjXqxxf zdap3>k-Ch`)JWJp+^jC0efeE2?Z#rCRh9RYFv7=rktVVnejvwCOL@LrnEC!l4~-bx ze;GNc9rbiV#$F=olSnf zOzZTzWM*5E0W|!2d69+r~R}g2SqOh zI*P}fbAc3t-H zF`CpGjEEIJvEPenWpb>qrSrmAB5fYf&xbX%2d@VpqP;$#sKa&J7rK z@sz2^RT9gW%mt3e8$0ifp_g~PrZ}=Xa;DLVT&dap-olpxG0*YP!z zbA)vmg{SH$H0`=DB0>+3Z!EIZ;R!R9aL2Dms?-Aelir1;Ot2hoP`J#;48~A+TP1>i zvXvs+<9)mFlkAOz8N2BF=h?L?cDkK4SZ6L$x?e(AA4<2ge#vkGVYHC%?Hzwrb3lJn zgQuJ7y2!c?y$GuoHa~bcW9U$eZ>Z`E9be|p_1-FGEpqpofDZP)FR>%j) z3wrMaZA~t;x8Dc*`{M02qRK2fe2%r(eUU@Hc2(&5Aqs`}1IeE~(0WEXFcuRG z;LiQP8xB6f+he*WGq7&RAxgY#e2=#tC<8 z{bne44gx8Fxn^)6XYVWZ-W~p^HRYmmWM=Rtkx2v?dyfJrl#W6q`91)!Q?U<<&bN2a z^Rn~d3XyrBJN{+A|3_yZ36wXbcfT6?ww1uHsGmWdW}hXnj{#qYj9{sTBs}cYQ#DU5 zm%1V`Fh0)2euP{6wL%T0YyOC=k5_W-+@z2pbU@Fi^*(u5e0t2S8ZZl!^!pPs9_aTH zQc=X{S)}%6az}06tqva3c)(gq0TQz)m70Cte4c&#e@+sWncjnoHAf z&ylLb+!?GL3@BZ8o1#XllD9AWwXcRiv_<=|^rQ)&l%2$d3IaYN7ZtW(q+YE1Ef_+liUYRV%W-X-B&ahrJR@GuueBBD(}twsIk?4 z-Y@UwUzqddG}JvG9p@=PiiP?MVZW&ZacQHQ25Q@kFhip3=IGWBXlY2@=EvJ0$-8`ujQp!+J*D&@uoFCa`eR%+!!7f+1q!y4?Fnf>YC(Jom zQWZ+!)b5Ea@^l-hN^}z7S<0IP>kvnj15Jee3{KW3v->y4rIN&c?9L6x`|q4F(96_( z6kmgSQ{;Pv8u-8Fblll+QW|*fN!cLiP2sqO2k?U$36gyY+|YNyA2h6;K}$;k`FI|x z*I9qjpZmev`a1HpQ>8mfe`o7_$Zk)9gpi>9C^06M5BXa_ouz`qNmH-KVh@vDC(MR@ zj=fa3$Rm-2c}NnUme>P8)sX?)L6au*gJe9sF)y^t{qcp_LsQlztb2b0ZSb%d*hLA~ z{F#|Q(dzrtS?-=iQ?0;dqRQfP+`nAwAHgdeF&Ih1!MM1qE#5V!7FzGtzgvq_;~?d| z(`4Ss!!$jAac?7;eaoAEyh)7%@6dY|0MDI3q_HDX-vSxW!d~M*KY28{ifCVu`h2P zQiBq1KFlL;ntVBO=se{T;O9St5kygt6+$?|3nY2faC6?0}U z7}2Y)#)>7pj2a*5BYp}-k4jqS%ABE;%h@vzV2~DH3y5X$>2K%OlUa_+6w^BYM)%|0 zAU5DJ1sD57V!{XrHjn!x$6OU{z6J-WJDkO7O5GQuOLNS`3)oM4(ja(xoD67w<$L?OnN|3tPnp>cS{#p^ivpQoX+^X|5KjDq}twQGdejfwEWML4&hh};sz=w=SId8KEEB*ow z6k_=)N;vA?ZTG7l-)?YaH{=(@3~;dvA#)Mh7s1Dqv_t~3B(_=lK9*36J1=l>Df7x% z_cwyn#~`Ut+CZ-Q@KW;DP+A4-N6OnA?enwRGs^x#o|ltaoQLGHa=(=&C&uyh=+W+N z9~Idj1th4wtKM0AlQttAnCT#L+zV2Dk7Hl**)HAU5E?(!5LI7x@tytBBlLaP7{)U~ zgu-*b{r=5HhBX;h=_>8*fA2w0(psMYu}{o{l#~5YvM$tReEpgztiu$1hitzRGE^cs z#NO^miMlJt^HyofwlN%7>+ht^bb}0T(uOTPkBuHg9!cm{P<*0q`s2F z2A4f=Dc@pL7NU-Ws{hJ2I6M6K@1v3hblZJK2SeWZ9Jm?<_YodAt6;Ml_wl>;m!|YU z%Du}96~3P)^Ex=UTeDyCjf9^T{?%6Rq!6zqOA-}Lvb}`xxIAE|hkDb?rq*AvL0kLj zF8Yt^<>gY#d*iefEBX$~YGBVI+#L4kIn>#|C;)TB-5#IQz61HQ@ES4_@E!et%&oJC zN4o$!h5_utxttE!a>OPJeNM-UY0?8t@|Sz1u*ZC5Ge|8(H*z(eEcq=#RL06+|(CI?#-k*>n_f92(2U-;0{P_Onx?F<-*WvR z632S#`+llr#tnEj*<<8BTrl}cd|k++0+(RmfBT+L&qGp!K0O+E&UYNlS}CwJ`$}rE z<+oue5n;Zjsn{@-9#G}ix9{S4318Ij_F4Plo>~2Ql#Xjt05MU-BN9Yq!nq?u^`bHF zV;?b$`8gR`v$!8Wq+two#@u}~N3xS(@j1W$MWe<2QdxGLUX zlZA;{nYHprr_1gB#bOi&hCdqmi}0sE*H`21V^?s&)iv4isy!FfJCOYjZ&U^Lz6Ctl zok7QFLVGo+qNg&6)BDPHVQ!XY*eSncjAKTZMx4>()HLJo`vFmIrj7G0(YCt-n~RFc zynQuxYy|fu>N7Xn(LM-VzI-pRxm`;8f;aCNnM%pn-jC#&`D!P?HJ1-dygaPDAmz~f zTBZ5^8`W(?xTXy`Tm;z3!!Z4GBaVLbY?q`G?c0QuZMqK~AwFUqfKrc5=dZ_U5Kigv z#B5A}dEnLdYq$M`xd|CEfPb45V9G<|b}l)kRGx(wkIO-JV#*Z2^?fbR-3f?@oI{P@ zWlvPZ^Yy~;+F1f%_Ltt_>#ei_%qfl!oacDh>(5@tz1UvO z_d6a|^0}r0(>=f&RC2qm^6^ylan>UWsRR6u7YXfODzNtX`CD8#R9=$y0iW`QKili1 z(OIfgCuIzVudq9zs}_8AJu9#4ap>#9GC+YxCR58hR>c(aPE`R`IzH9{!Y+@FDzpA8Rr(ZP9%@Y zV!Y&_9I+02e>%^JoY(V7#$Q<9n&pi->ex%kl($$|NuYPcY@w(@a7VO7Npb%G{^$l$ zyUj{Q3Z>Si&b_CgS#&$ic3k7oFmZAv>a7gUiDG zQN}EY61~SlY@L06zKE&T!KcP|{r(OFiz~m+SQq?<_1O>tmldISn+X}bVp?u<;OOUp zGT7Ir3qLlB+~caUM;2Si0-ifS#c0&wa>z>z)hDD*x6jS&pCCdezEMN z4<_em1qr^(X}7U~@8FD8vy-3mj85T~IN&HHz`BR{v(64wYTJG4p4v4Zx^q^rZQUXH zz7N0OXrfnoTp!M7lAJAS@y0{G_ukEa?zeG`+f!9OlU0_v0V!T>4|CKR-9v)nZNGse zEl_=mU+9(32D1}&A8fHbFI^3o=FaV1p6F*rT8GqVCjFGbA)`w6DFV)t zqk8YkI0BZ1KrO^m{g}Hao&=37d3>**uV;?p(*wdY#*X~^N|v{(D5%4M6e6AJJml5g zQ3pc$o6)`ewzDAX>jUpXJ^F-6wnqQzPyGHN!R?aEVS({9xtq1BCpk%qJbuqenbk11 zOOKoOdHK^l=&pjnYx~{9kEzV>({}zYn6elrVD{en^H4|`%hEcKjED;!iau;nJTWuA zv7bK}ot>`SKFHwxKs+;wJbm{5eBA9WmxNDbFJ@b6#6v{C+CLJ%$WgQTy>qyBzHLRS z{g=P3KjoXXUP*&-ZXW^mt~)$q_JGtq6g{5v^XyF8%dMp!pkLphCd&~rz8kx-N8)qj z#ouLPlnCja9$u98L1gzP?ZcEq`ykmkykf>ScI~w!0ytPoECaH#E15rjs~=B@Dq}e5 zrCW(mLyZoq@R=t?Z39pE2Bck@hrPc6R)Ds5<*MO6um*#F zA$wS9Cd7x3MLJ97hcjJ#+(!T^6OGxqOloy(!r>Hu8E%r*?Aswz^PMA5mq9T(zKA*f z+oMO41Lx%&SO^dH`-nGs-roKv_42@O-dqf)-NN|8O2{)7&vooy3+fitOKY7IfDpfx z27{FgwXTm%%)QypbU=oF`*6T;)76_!X;7X4MfF9=@0Ac zdTk20`9i*(!OCkJPR)FOQXVXQ>H&v2WKG5&Tk{!Ny@)TlH#`_!mzwn2UVXXSsQM1A ze7{1xdmF1X&yU3jIFc4KK6_ujzVH@a>9fRT+DqP{ZM?1@?fV#h6Aj@UD8!s;oCRnb zzVuR(LURwtvy`Er5}txbIGt3#Ug|ze;PS6D71Tc}>}Q%Wm`mN4zhLB(I956BGkHS# z0hfKh^>2cKmls`mny^rA*-mrrfqw{0JHb1;^Max}gW7ebuRXin)$1*o8Pi7LrP}qd zd92UtC&DJQ#xE$&#cm(6T!eXz$LRpkhT7628%wb2+b5JKVtE)ccicVL5GzR_NtwP{ zIrX)5k2$G6#m0CFHO!lS&rU>z@n<<3xKHX&nz|Tu8}5;+-;S-G%$U;|G9kGqdwl4O zukA^uUdhkL9GzBeJqX3BJ;Es(?qm85%bgRdu8;o5^P|_e%uP)HC1UnBO1dwr23+Ry ztkY;P-CJdE;ivsiI`*db+Vv>>|3tl&qF3qHJHHHBe3Fn>^WeQopOl4w8i z?7lY`sWmH8E^|^~2b8o1`vtL>JU9X=;(Ja=-A(+t4~*1*&dxRGi_4=pCEbdRNED>^ zJ~L%x{IU)|qqbTl%pUT_!X%WvGtPLO5x|||kH0S1RE+j<$XP z<6(%8cY(i%hxF-^sLPMT59(_$W~mOd-y2!~76RB|T0;I3e+tF@vdJ9QyhL0<1~C#x zWFn$T$=dh`AF3e>w-c{G?Q+nTbzVmVq=cjFL)O%#2Um$1;<)Vb#_y+|QVD9r;CJn{ zQaIA#Jnxf4XbJZ|{hcP)KOvueQC?Zi#}}XH%G=(t!lbQDQ>J$>2~b=($7)Rt73ne! z%j%L7>rx@rXI`qab%BHR_hc?hTA&gU47Lr@mP1cLfRMiML_WVQfK;gqA`NNJ~=14 z>m(}GKxL8817vp5T>_A^{dB%W8v){LNWz0VSRb;poj<^A4fQ3SrlZ)n6?#EDCgcbQu5e=>~q&M{KPoAw)jrvbSN}QTacy@BJ$-0|{dxaGeod z;$o==r+xE|Dd0qldD^1zGE`%DmAcsN^}i;vw(qkLuL z>z&a{>AjD8!O;m8wKngsUf;(YxYoXF2XqEaXYPjpKvVi9S0Ewqt{hm42~!Zdp`cJ^ETcMD;29J_0{;c!`TMtY@dq?=C8YE+$Qb7o|Ppx!M z@;y@mncC{dyE?;EK>5ppYpP0XiJg*DHxGZs2kKN#k+6>^DSiBK(?0ju);iy*#^*HD zjY<`0>gwJ0-y+o|&?h`nCmL#lsc)y7u5QU9Y)1`7+K@oE10IF2PCiWmNMTCZQ{?v9)!`<$ygY$4z;!@hDEvKF=|mZ ztJ@6y4AuBh$d~mAj@tG96LSdu$i16wHb0~!7xj<8Fs_SNfIo?ME;kF}d24T5`-1kqDw|-7e#^<<8=^;xz|1j;Mc+BT z7(F6w{Vy&9pr8pR5I)iZsgNt(U#xF)+iauG zcVlbpCpDLHTzM?kHem8k`{WItebpZxBH)DS*v&P{#a?-XiA7?GeXx63%z07@4~0vo z{jyEh{=3EY_h(|6q%yq1BW{r%!17z)d;NZ)OaYHy?ylaWrb-`~WwPg(6sgyKZDVl$ zBDT)33_02jvaB83ub@8a$_MXKHl~!4ua;rWv%TNS1i@EEWx^qO+%+- z_$wn-1Sc0w~`vf9wOn zJc>Y&@^FSGXYQ-BqL--(Qd3;{HiM6ApcwN)Yi$o)ho>L4*Zi^kEo52J-6urg#b!7J6P9$>$AEf}&|;?60*5%; z=J<$chx;c1$%NqCxm z<(*4cP|^7=XK$aO@Dm9a^GQ5L;vNotc*!5+B1J$#tEW3<+pwG%)TAnZGReXct(qWt z8cH(*-u`{Nv4UGZwC0rw{+0AHn75BTi!HkM~{83G8E_Onf_j@bM0RgNf> zJU(w$gU?lIQ5k$5L_x&^wdE~bviWkm*+}0{k3*5T)6g9t?-Cj0YvDQj;OOr{Uv4l} ztU^6L??)twN1Yfxa15{G<6vLedEI*)@3DCDbR5UdE&MunChw}W5l@$i8cEj9yTz** z@4Vk_roM9LXS0?Yx}WrntK**m8CVuD$O=qaq8RD-g)SNDNfkAIcqd*rLye4os-h)U zhf@Kk--u1nVCJEWa*UfUy)NwgvYmlG@L(bgMzc7;=-@p+PxagI&#Y&`PFcqCU=Xl} zP+4wzl}5TsaF3;AALFf;zZksNTs{>?!^IFEEbKiJvhWfAOdN85_?L!}tm|F~!J~b6 zlBnxZpOJ}t+IO1`d0Zt()I&EQn(rRG9$K(3Pf0yBugPhUwzxq*vR;xzg2Al?KY*zL z7(3HhLO~>;%cAVPYgjbYei)ztUWt1e5CX`T` zUljKO*=9apdlS>Z3n_n}77%c@zSd_*R%e1<=JVAfARi7?&_K24WZ5Wzf9L!>ZJ>1i zg<^!YzdzsM8A#9y4%XkcpKt=!KYNco?pN#i7JleF5&|f^s$tt)mw#XXZv9bO7&A3- z?cthHT{E7h)6MtZ8Qp$Q<7|%n{r*dJJVkFPe`p?RlJ{vM0y>8h z#MsZ|=ox{Cxw%WwMPuBtdwypWLuEMzAcK_hrt#-a6`wtY%CQ@YS`3`omOfES)%uq* zyU*CFKL0qIvc$k#O;|$v{3`qvk8#O*zh72MxrUKSZ^!d$39<(3bfng8BD@)odSUD& zYX%%gnUWa<04{J@K8J3W?W zZBU-nN=M?0tzLV4a$?y^%oCA4;P*ehpj)kh2oQDAN;gywY@tIEYS0Q302lEpjJJ#Y zqi0M9Z6v$_1xzXKTei;4U{L^=s5Gw1c7N{ewD_qz%?C7kheUDx{5(=kYq2`39mwB=ROvwpY{sJ zCB-t|wPj6@kK)bKYhADiSo}n8;L*HCC=ZnqJmJJwA^bQ$EFRIXw>+b?s5rka`14D2 z1}PNjM|FvdU=D@)iIV(}kj@eN0lLrpl_F*mc1vC9@JZbT<$Wia=y@2>#mr76P=7wr zRS*61s2wF3%A$R?H(CZg5%M-X?cxflE?vAS!^1%?Z`w}A?NP1#q}@k^9!=lEAx;1- zdy&5<-GE-iQEt8rXJ?f15ihuzi1f`g(}3Ua(0RJH=0kgtVX;b>8=X9hJQpU4 zS{}hzb`o4g37OS0Vw!6{v4|(7^XayBU;XVrVnRK3hhE-CXoTDnibz2r=AvH_+yX$* za`Hx|G%3A$(|aKTTx&x`i}cNf(6s<(qw9kqW#`}b9ZYQQ)3@pDA^kX z@3@4ZiNExg%nar3_NCIP8Fan*{U=9fAFsE8v)VVE0k@3!5nF8a%vk&p~B!7}lNd zaS$JnxeE&48#NG6?%@m7_%DG++tre0b2I()NLu_0&dm1n^?*;sex0^D(OJslwMNE* zS`L%JEU-Hddo=0y5&-rNK5BlecG0{vYd{<1EUbd#dui0K?i$TswrOx07hsuu=9`Ll zQm!UzP%3uc0^?b3WMkcMFxDEzVn+W?W`n*qY5^^Y~ zpt#?=*7q4`6pCzmD1($o7u0aw3KHf-Bql>aF7{ayLy43DPCcRUMmvd(%wOnFeI@2g zPwm6NO;Jol!NqIe(1$IBpB0akhBzj;fC zHxcN+fXb9v_*^@LM-tl-AzFhaS?f&!zs zy2teVdi>Pczy^+ROnZnt#CA5|x=d-;>yv;H-QhCw*WYFEZ;w5n3sK2W$zHEN+%gO_ zJztC0;GWn;>!)Eq-^`h*ArH9w+L=StPDgtK<+uHsBf3xfK)< z0zsZFo>tM^*idg^>yojDu`|fZhh6IHUHDV8SwCOieR5PTgW>%VDDxUx{j&%|>hDlS zaOBw*f_*aL;D4}QhoKuQV(ZwRgbuYs!Y4LsOxg!5s@%R2sf!4;fh2zp;(dNg%*j{@=F;puK=sWYpN4m0It+SnxI0$WmQ+N-SI@rz<~TwR zm=Q7S2}gx7sRWO@XA?f?`;vJiR_aum}2Tk1uF> z{;%Q1-E~iTFtLjo7lnG>Hu?}EwL!c7-{LH|+4URljQx;uRB;tg`Ue{^t{6?^*HB*7 zc&48F;Jpu5C@W|a3XJ>4`^ZOOCg&jU2RK+aA$duRCf0|c(|=rWjil~$=3YEvd~l_ zM0CA_6cch|`OBUwgAec5BlROEJ%`{qa+euwZ1_Be4Rby}-1O(8$bMQ${-_<8^B%PE zaL0VGWLY4RQ6)1fE?G0X2=!=ib#I_ax_u59ftbYV4`@d}M1U{I&god{KLEWpndRr` zwGX3NfI{6vf?w760a5SC2`eE~Uwlt6QWBo_4?r6`k4_0^xn|2{wg1r4UllRl9``W? znRmq|?_NgY>dHM-BS4Mnf2s^5=vNhlHz>$(&~rjyCRrM8VsAI+(j2SNhAv(9#XQx%&q%g{(-O zHAh$C6TQWNzab~1z!|6$)bsM{Tr-{a0F1~LB-I*Z=Zq3o4BG`3jUou|qOED&-he+_ z`uJ(jTMWdfuGh-#>h8(C2N0Uyc!iRB=$p@mnG4vc;{CcB#4)~1GbH`MDqF^R*gGkS zauS`U%Bq`96!&h_Z@x)GxlU<6K5xY_FzlC?TGPo+CDZq1mUwm8uZp1&w-#)klZGo8s`271sGd;GmTp`K|JOSDBezHuHMTy-#dsO?b z=_`H{Uow_op!J=u1or{n0DdofT;c!*(q9CjJlm%Np}d-^-JkEm0aN>qAC@j7wl>6{ zsX!Gf|5)O*d`EO26;1V&WN9pYAAmzvmUFJ)J}VSk9rF~ZOF!8u7g%2Q5-;-)LLE);k{4l<5OV8OPg?h!F>64gjAn}DZns&$M_wvp_IHuM9#B0O|omJLvY{7o?RlV zNQlTVnEq!R6z5R>wvFJ7+YK47_o07HpW*uU>35M}6&E)p8Z`AX?%ywmwPzDh5WC=y?g!_^=W?ZI zB%yi6rV!rT7fuY^Z8JPhhjQ=P2N`w_VP*ni8N?i%^Dco?JQZuU_Blph56?Z!mOC{- z%^>LXHIFU`DQB4-sLG-c_R}b|C$woB7<@F3$x{{-D^vBEQpk`}_WSAj5}b}WU-_jM zmf-eFk{I!ObN?izu*THllKh)l8|+w3rITrwyc6i>{d#a>i*_qVLQKAQ4j8=6{$2k} zFgn3u%I~&K)RAcnaO@10mX+ffN&V|;qH^`r!03%>vBkH1w;Co{Sv4YKQUe-<5;#k= zWy&8$4{5aUKr)na?T^KomtxxGsPfStq*MJV%F}fExNG=r;A;!FtusHi*s|~T%L9{| z2aHpN^X;VOT&FAI(zR^|rIe|M8~JiUrFnd|Bih zm0@K7d+@Ni!^|^`b4W{?^$CUN+0##XqRP)@q~zGD%1;C!V1MhM%pL{bRZN!~Q%N(N zr3J$Z#*=%voPz5B5uiJzmz2_Axk&)b3xW&21HrQ0az(Q7T3RPql>M%wWt8YAxUuT? zgX=PzVmG;}(7#bw+jlI3dIPFzBVF==mb?I17c`!=hrSQ|hVoUTmDDTP zyz%R}+PYugaS48>GrYH4qHv@(&GU`4B00NS!I>S}^WOU+=NzBaz-yv0n^f=(p388I zDTR9x;|zj%qMQcuPt#5MhRevm`k6g#AWY0kgP0FqZ;6L8L~*#=CP=!}DZVuO;$PCW zeuTQF&|l|Mcb?}o@r~-}Q9}IeYDnN{rPa@otYi>)9v!mGwj4^YGdl_`81VKhS@whM^Q1n_jcra4hVv`uiE z^siGY0t>Xh-yNIHi%krVVT=Fje;e5o=1=F`>+!cyP*C`;;I>6df7tt(cvFe0dQ={@ zguiF9^peK^PkI({VvnT=CiPr1&KJ(Z@c1L==m0o$f#Ob#If+P6p>(`~sY@l<@iOX; z9kEAd^OC$YlR80iAPqs7Ot5|aI^=h&oqIMBrGC0HOr9;=;TvEFe7T(V$a4R9N=wbR znc~U}_xN*}-C85jZDM`iN5W}43|CMDIK#Ep!VZOxDt-rM5T>%e7iU^KOxt5zyrFoe zw|jkk=?}GQ5Z|Dt#l6hQY5vxqqZL{hP9Xl>=i$pZwtI{Pr|-#Zo@IPtu#+NNaAIcI zWHl^)Z>p~&r))8CYf;JM?yO057}73&S}H}~wx{erU$EwW{#k&?AE~zQ>$!~X(g@;8 z;Ruy+Ef4jVrWx>puyoV>1nyGT-z!+gq+@yGy=^#$FG?~#FR7Td*JK}2ShTOwyU5dv z0kLL4y4k*-=}8zzj!#&LQnbh3 zw8@y3DS>1Bh7Uz50K7Qg#tFU%Q^Q9*_p`u2%E= z=n&e1E@)S>ai##dpvaRBw@jL0Y$Y*%2bym17IXf8`#i1i`SBTU*lp( zQ5!E?kuD~`N<6pitKbI7kKS8wz{e?dkd!P9CCKTix%PbfEAAS{%N_}s;_~C4YVJ7u zmpyzpNRFe1*(_;l?|8l|s&I`%f&4gMeKokh+*LjrE=W7P&X?odTVY`y3Yyx8D~;b#+aPX*&4!e!C@Nk5M{SYTUL3 z@H0K@dlIHFgT00cr3+KRO?$|gfk{htE{lk3@3M@X=f~2viIw>wDab5`e!ZNuFQa00 zW<^!X(;wj3Fvw$CeYP_NT=4LmvlZ-sSDD4>yUE4v;>nlihp+uMRxE~Ed-lWW)@$c+ zsQO9k#-3_jN`xWv?|K19TVByFesgsBxNYzS#2zB}o%`S$d7wD(@$(lGRMiq{)Ql9nYQ zkx6gX8*c$obQi3#lpjb<%{+J4SBUf4bqo5#d_?s!q{`a29#LRhq~^E2hDv=4zgREs z_w?3?&W~h<>RL?~1c55D@%X>@$pA2JoP$rjO-uix?4do)pmO^d*rC zQ^~fr3v=LlYc9jK1Y`xmJR4bI)-poN>vf;flRxc%*K6cG#T^7Z{cwE2w*{Gr1DhH7 z=4dZJCj5q|$%$xx5BKg}?}_zhsTBxPoDxTbKa!e&8rLIh(HVjEX4*0S8cUKM_En%{nD63lbmDqMjoq}5v3&*4jF#1FMaO4{eeyOy00=CODuey+tt zL-i{8N=A597kHv|&J^9a*4!Q*=Joyc*xUBifA=AaJ-R*lepcH9RGZaAN9IA@;;9(dJ&#q)sg(l+Htz*)TJa_Hd7B;nSwoR&A@qb4aE4YuulcQK z=UXVMnqA;sIT%Y~L^ePSR8`D$yj)pWyI)J%I$}jOekW54(h?K%NZ^Q1^;Tuc^(-XG z?h)5iZ^kbb2&bjZ;mvX0WbJU+!&2-g93vN{Yj9U<81DVJ8&-4d$&LgpB~q~H0c@_D z-sRzzLWDo7mT?hKX|p{6^D7M6XO4gBwoB=7b=uw_zkx^w8E<&ythe+X2Dggm-7D{# z?z79Q2czA#Fv~DTL+5(a;b1`W;jOAv_I1B}bRe=65G}@M`b8VMaaZkvJ!+hVP38nz zrlc!h_OYBp^raBuR-5Z>?qZ=={R7ZRrAwA*1p7K&ZiNtmj-na zcX@u40~s@Sp*N1_8?`C7_jyHGoz$DggA%xj9UI7#@CoKHR>XqRsqz;^0So=IUflkm zw8oI~eV!umAw?LK-7U`wS9p+D=ze3>J=3-Vu>hB+9s;R7qB%&ig&r?Stn60CS9V|9 zirrc`6dms;B?){WPFPh6W7My3)-yk*a38<0-{PuD#~kT9fo0l0|FZP_?jpB+=)cP? z3)bm?S_}Kt92K@b2;*`?h|eWeJtr6cJ2Kbi>=U$;9i3a|IYvNpkPRzg%|=SkwnYn_ zef==|_qTep`_yk>rAp^*+R^)nl(fyW5UjQ-3An3k;Q@8*`stzlZV3t#Q_nvHQiaC5 zPfGpftOhTp`U8c#d!)KFivIlD-_97YI8FyE4FQ(jFUEfNMCp8dJiKdN1@yEixiY>E z_Xq+Pza3LzhidHFY>7SSk2ZUL+xKgVKZ*Wf=LKB#3cCxdXdj4GbnF7w^ z6Eyq}CE{asr%B|UFDRfkddIYVhJlw0Z%YA)Y906;P6n|GyL^ORvcOg~6a+Yx zQ<<5xeRJECAnS<>F2BzGfOj~S;POn|Z>T=ynYd3>->)bjcn95ScE?XOQl>Scmg8Dj zs;H5`As~TUoVu$5%MX&d+CL7$b_o_0w9w9WkU$uwp7;~l33Mmg43G8y^WN&?Ydj6#YW@;p5wt1{6K>qOfxwVO zoH^H{fYQ#Cx_}!!lh?0@V{!DEcSYj7xj$y@*Olv*w?o)g)&BCaK9qe;-QK8akjguK zB=&};ajR%B;~GTsO2DCrvS5kwG_ikd{2rH?Fs=87)p$d44CN~3(KWc^w&1hWQRCwE zf8@A29WUp0M2mli4aQ@?=Ha2z5c!L^@XljyF(dM_h`rAK907B6dS&tVux2AtfWPzj zcC}=Lh16fy-XrQf-)(x z((zK1A{|62cZf9UMMR$dY%*u9OeQgk2!Hv?E-!$Uzwr7Q-FvS;KJ!57*lIXW_V#QF zG-m_F5;s73Mw)7CxXz~WnhQwV9{Km3@u9~BVjmApdIr@MO1OLC@XpmD;)bvb_K*`_ zXZp&gw0h2s$Obf*lIxc+O8V!U|&?`=Vh-x37_@Kc}f%ISJgb=1{Ku%4jVto^TqBNe%jx%{-OO0WyowJ zkV47ILL&HqEPMpf-3>VwQS((qIb#`;;dS?Jq3nMTv6cXG@PdH&Pj+|^NcZ?qXcY(H ziuA1}#B;)DnN~A3)GJy?BX1c6RNJRD=STkF*fIQGUyI{ejeqHFmpEq&xQmyz;T@T} z#e=tJ#n0&o1_KJ#HcaMu{aoEfgkw_oX>+LIhgUbcwyEz+>hG%$&}B-&$j8gPlwRT+ z&o_9k^P^vn?~6V$kYRCPV(Vv0CpCEoG+=GF)t0)3J!NqhigDCL$UOH@l+TJ|`=XO7 zlP~O!Es`&;`uHQ7eCs@F7FSQp=XsEmae9qLYQ~~nQuaDO>;n2K#u7q~Ve~z(gb7&U zoZMo+9{kDKQuDP8fhP7sFDn&nVL??Iri4W?-{@+{U;a8wezXvH(zX|w~#1D1&5;< z5mE})raNlUZPGq?q(L4tgGVC2Ol2b5udn_nvx>08v!%<_1A&xK!)O>5e$zXd(``DI zmeGCs^rS?Woq!|VR4+IczcB_jAgm}}8x4~xu1CIKQz2X625#J@u<;EhWjK$JSU`D6 zEK1TxAHYe_rT1fKa;mjI??{dw)+>vB0J)bdr+>qrC~vmApT*K_vw0k<&vn3xARU&B zwqC}N-D*17TWW0}`|!~diM+d?4$Nu0J!q{ukWBm2_KRO0YkC&sujloe<8hJqrzTnWtwn+J0^0whLi$00nX#I1;vgXxK!f>u4xBP*B|)FRJT(Z>SoJ zbs|f|x!Ci$*WMl@1J0EEyLqYwl-S;T?hh&8Mgt)NAns)pGN6>4o0YvlHzUwv1@|PY z+M;Y?6aeazxRA+*td!JR@~3h`i_I)O+GgAU>+4+uW$dymwhJ$j(ik*L-s_(2yrl62 zUP1gK^v4QyO#8VF^&<)+ZJXA8M_Iop>ve=yy-F197FlbkI0OZtT-lp!*steXCyZ%c zpjnQ?F<>ii{srC}M-FHP`-Q$HWI**>G+~jGO5MWu3j!bMzEV!-_hU<$SM@-N5$Nb= z?%TKS9;@%+5kx<-obr}^mGr>F>w1sd2h1Rab;V->pt3LVG>p(&kxix|PB6R(C;jSTSgRFRiLMb7cpTwnQMD>B{4A}qp$?GEI8jGJ&h0Y*KET{YVwtt z=k^&MAoz?$M>2W3ZWp8_lC)O|eRCQp?&P|7H?4i{`#*R3J)tO3v&Bic=P1SVz`)?~ zo2hU;ZtmxKG->wEJJCKouDy$KEJ0}c1$l6?VJETGX4r`yCwXB2qKuEveN|q(5+9`t zCjf@NC*@i00iqU0Su^kB8(+2_x%@sSiY$x1pzcyXNN5S+8wj+ZxHNZBU{9|ZjQt{Q z?Ss=*PPi)221CW_efJ`}`TY66Li#uS!5%EmM0EMueM%;`r@7}qG$w+C*7YNHS5H?u z_t|cMgh5D+|C6>jk8*U!Q(9(?rhTK`i2b(@nm3;xvPsFcwp}V&kaACWI^-T+Xe(rs zz1e+@xBCcnHT)Hm86sSa!QF!iCM*=|NsVKEPgD>8&uzc#y>ZXgHz+e)kf2R`<3XXV z(-IxRW&GIVLv=pCl6U%hE4~mB=A5i07lqHx&Eb#{^Kb;6PQ(%*G>pEU@1u68w1AM= zQYXF5$^r;G1R^MWcc@0roDwZm!|RSy{na<5;ey@kkmeZ{!>Sfik@p})s#)*96u5cCIMd>15J6cfvQRup59zcJtOlP@ zZr=~dgX!(V7a18`O`m_pqBeVO# z31fl@a^^dz2@3TT2Y^la}2 zeHkB2zWJs{CMrTIaM&<4OX;|W;X%5=wYJnQck0t!`YOo_*!fLC4COV`$@2B(Fn4zA zWq6-iJ4R7@=J5^D+5M58b?cKX zKP%hMT)ORexDJPmY+_W^Xqch;8pA4w4Ngwi4{@{U=nycUVb5piTJ^!e$q#?JCODbl z%s#r1-`@CR@RJv~Dvet=Krd1(>v5QjUE)JJBOa2(&s0eSyISc!`AnFC{5UH97?02| zAQ8U;mF(yU1O%kGtaEC!jk+aRDDBH{iz@y7-WL(^6kN9}1XNf;!A@fE?Fb?a_6jNa zB-QI@fg)$2pCT@-BKQtdpAi~`P}0%PR^+_)Scj)AP7>iYY_Bm91@a#X!~=0Qn_Gtg z6X5%|TpcU_;F_bJi;s21E)HxmzgMgUm7}SVxDod8uAF{q-M;y+3R(6lys+z;0vU?N zYB^OLMl4FDgL`&x8w$PN12F&9g>khG3iI59cbgZQ2oBD^_ zbKvSELPMo>XJe0%-u7fCP==q~AogEKyz}bttT*rqH1qP>V1;Zc%&%(|UgcmR=N>PH zqS>(vH7t!#IVL%wq*&`T?`RFSUoKhv_L2z*vXY^B{&U<3cMEG7!#U zzPvfPX)hHX(2ZfP$0F30YeaILyU;5Bn=GB9F zTg^2{uXs%dB=uWu#>Zir9(Tqj_Wc@Lu;5`U5oG8aCIp>P&u5<(&u4cao_?iv=~dU^ z%C;N-3a_@Emj=3N54O8J95NFEUmP3AlNMruD6Rv-4Xe_HX&tv3arEQoRcD~(b1L~h zYVVT_zT>-JMCsKPNAX~zNZw3h7UiPWW#_a>bcv>) zJi-M>G!m{CW~K^g!ug8Za-8v_`6b*x$DYs{Z@pJ6h_r8lZd3OHrmA_css@8QB^<}c z9a8RNH09;1KOcw`Wd941EDlN9M_dpT5)_IPy)bR5Y9!PXQPjW#>LuH^?tRg?laXrN z`CSb|@<38TpJrc--S3_!|9%i?L|me;$JZX?;VTP1`NEec*g2n2#y`=?l)svX%XQ~2 zo1KkCL5Rczf;MlSch%*+ZzG{Zg93ZMsyFnb@q0~%Wx#jyb8a3^-N@2!+wu78E#1gEMn2$>fa> z#y{e?!lV=)-uaQxxu#BVh?)m*Ip=;|u2fiEbK8l~<4m1wo@!p-j6*$y^K6(h?H*5F zFf4%~Uu$puDfe4X#esY;KQr|BFO6*7&#L%14QYOf-es(FEKs1d{(-kn6n12J%?+A1 zI~Y;Q(*2jExyWzAJgk9vT%$+XA7ZFKQa!&N`FUEr#DXJP~i+@Ahpw zfi3MgtOV+cQ6ZG)xAQ?@ZeBns3>^n&{&;;K(F|`DQdv$>e+dC~Plq^5bFXOd=erUr<6ZTPmg*L1bFuyYSfKqa~|G55X4#tO>d%3t!d%OVQ z`&x%ERtHm~+q&E!vxgB?$&`{4UFNm5<2J`JkkQlmzz6_rzS@eT*>o57V>5jo+&C-1ei%`Qlf3ndD2j9_GWT7yN7PNEL=@z{xfP znJ%AuCwqb5@um0D*+q#lU4+NcQSDPTzx>I2qt93fbMFri@`Y0(pKthBV~*kJ_=>WX z>P$Z06X^}Z-edMSF-tVBry*imn4c&eFH}EDm0BK4SB6mv;0I&m=HM%*U-mGr&y;13l%vb?m$YFAOR`Khp2_$Ww;mhW4!LjX z5GMq$U_8~OIXz&_kl5Vb_>>wcLJ?WIzO`|d%m0>&D;-e zbg%>lUOdu;lx>*UEU!h=72h8=0!z?NU!{mhZ*)E$25T%5!qK;UzC{kSPL6~GufXk1 zy^`xqlG@{PNPmR24XpLoUsN0i+zMrc|Xg=>R?ZfaYLbtIaiEAfiSA;RO z#t3kQeOt`=^t_j&e{yOfsMt34>>kRM7b!)jsYc2$E}TWdX6icl-={L{!x#A*zC#+m zsIB85v>BPcPLjpgi%+c)`+Mp)p>5gr%wK@pT#uSktZSuxG3Dx|TxrQB?a1dWR3s+h zftE9l7M*YR*4HR>zf#!|F*2lMnUT?1r0bQ%Z-k|Z?h-WXx`DYCgM|>jib-*PEgX5! zq*{7rwfZ{%F8;1yCp3Z1?dg#$_zAdotvRuTf1rcQf`fUsK;FBVx(Tpli?2#{ZH$zL z>gpGQzds1edx4f5Vfzi_gj~JWvn_F-B|P@k`+=3Yc=vY^0giBc9#s}sTmT|LYNK{L zjLUjJY@yi#$J@aCN~g;)&O6hV)%!Dtj}s4q_gCik@aUcg1Ff3nHA!Ge{kATULyypR z)-oD4tw)=&L7|2N2vpD*U3h*@Jl@HUt_o*ld2m{B2&j$^*?o&|buzt}#khI)Tbr53 zhR&=4EnG>sJw}tj>&~%n{3%fB4-3Y-Z>EULeO*5)et(A=4MZQ@jJkE#nynp8&P1co zmHb&XR7arWfeIoF)<`E4MhEPy*d0fh5|)sb>Anz#IKYtY<`psc&CRcH-;LG7rNV}B z^ZNJ`GI5ao+D9ND>#Hdk%)I0=!EoFOagYS^Pu{w!RE9#0)LobiCmkam*+Ze7?Y_$4 zrYk)wV|l8d(-xFRQ(+b|giIxj=q7-sg|af6qcL-vN!j2fw9B?IwCy4$Nl)N89F&}YhX7y$RW+$%=-ah%vUi9)09iVW3C|+H!%K1-{pie z)hb?XAE(dVG?<%s)xx%a8s|47SrC`~^iqa3V3+$9Hnn9*C$Ys~*fWps5NogPoB>dW z--Oc3qo~$9ZP?b~~zYR0Kr>biQW4N)_cB4e)~A<8d*f zMZ`?pm$nSfUQ3-ugjKzij}LGxYTXwYt=>nyP(aRF{RsvOlrp7bS5Hkke#|9V$5c6> znSw;Vy_>&1J(oZ9Q#s>^=ZmJF=_cG){aOjM2QQ>#2E#khK;->hoo1pSOcdJ>5I#c) zdeoNxbnesTeN4pg>|sM9vO`P33eCTA;sGyVWVN*tv79mc1hb{|_$00Cj(UJ{o3s7N zc?5CKvMrNM#umM`eWCH#*S-VY@7(d|%Goo}R72RWXQs$V+}8@E3Rg}UIsjf=g$op(8!R*us{`e9@hxg=<&3C^ z4(bDWD4oj3NCz9PFz9P@ImJKLholOmRI_~F=w3Q(49pCs3$&liYX$|KwgWZ!cG}&y z6B50~nxT7!B-sX?Vgq_y`}TC`=JBik8YuD|A#2XoxfL$^AA$_PGTzBhfE)U7w+)t} z>H0N*Z9cSe^Dy1=Q+(@s+at1fz}}B;ha9SFa-fy-{#Mu8q(e~Dmf?QuyMj49<&f0T zCEP#x(bu^2e2hssPmid+YZ~!{8s@TVzJT@s!@kBk(KleHM|8MnXlZ-$V2*r7a0HEvlS6N4$A55tC8{_*o zZRW~CX4Ty}48oFz@Lo*n+<)9JKu?XIqGaao@Z&dvyKTNKpC$E8rFW>b0+NMSfNn#q z;Mk@o>nW)qxBiShtUqwUgJ9`Xl_}*V9nuu#jNqs7-7R&TjOx{cy#wA5nFw?hGk?Jg zW5Mq@_<^s0I6@d2@IiUXY@jIxoQ(V9j*qd);BUZ6X=#$<^Oe`olQ5NXtF`$3tuRx5 z3V}-C29^QZtT=r0ExSd4%uCm5pI=~os5pAFixMx+$h*-v^OwXv|I+qw_lGu2iL|m9 zypE25iTV+5m$#n~ZQwp1Hl3*Is&(bT9nUk=ZD~(byS1~*QIFpXt~eO8C-aan27+ju z|K||x+GT?5xGX>w<5UFb(!CE&w5-yYo?g`lHBN1B&`6|P?rH4GSCmK_K8jMF`8qK3 zG4(eM9Yx(NpB8Z0eI#S4xU^(XAHZ3QEj#>^DGwNK>BTQ>mJ2uxFK{Ha``cDRO!*9J z1&lQ*=i+g*26x}2fcsa!o3XJ4c`e?1H~^iqqTBTZg<|8sbR7n^Zy72l9PVieSRXIO zgfkxUug~fZce(!brfZ&e_bO*qb&{VrSLl|fbVJuN^i|%oS3&)4HaYol&uknvgrrDx z-=S0*b%{6BdJ7nyzaX3U<8S>q9jB1PAVri>97%Q4rn>^KQs(Z<(g{vN6KQ>|^+wi< zV-2$`s{)f!KaBwo$DX|C%S5miN)OKM+kcJEvSDCK`Ss92b1%Hz^ofE|l>|T#_6(Ex zhJ+K{DX^|-w>AK^b^u@-r?x7Jr(zvS&wpHd9w~H%nF#e zvNaxR6)1e2r|Ip>9k4`@Lldvw?pup&y+6|tdm@fQNzQWh`P93!Rk$pr0?|PS@fV&Z z!LOP4K|V)+sApDcQ(HJE!##Zut1q`ux5ZQDa?^%C$Str9dj98#b(m?TrPn!)57qGG zzQ`Vap>EAv363hnm&`YGH5XO)U^!*=Sp?@03y=r0dJOagTtD@F1ib&T*XL1$tDkYo z6?LyY7%9M7uP5m*u+)XHE!}b9Je^Sbj`acOa$%Gx-1d33$3S5joL;C=Rc2B0QN@q1 zXFJMW0;ahI?Xpc|0YithrjO_UR^DOFvl~;aCB4jho}>@j1s7JVzmo?Qz#DU5oajcD zpZ$$0Q1~}>JgXtSzgy&PSStj51ow&D%Q^UZZnDM4!mwVOgQ)rs$Lb&tr60n@(jEMr z>93=6Yk!LLUF|Xt-pPkKF70?gz4WpCa`tEBru{pPnOchIn{wdKKu3~g@~?AAZbu0T zNu0y0EWPZeTM`U7rtVo~jLr=rNB((i-S_yzH;RsXjB zwSX`No)@b+LvZTqJ*lJc;od$ChnhpKt7HSW&$;;6K*T(*FtGhD+932;s_yDb2m@~n zj#&yiav9aR;HqO%-%{Sn(a8M@8x%Iq;^hQ5-kW)YXNDf(s6bvz7gVc#UylmJ#8m2j zd%OF#%|=fT%$+GMvGEjo)gL=^Oy520W+d@x3OTQp0!6$;fP3rFKfxHg{UD2zhR=S> zIf%SU_c%RsbnBfAxQ<6Mx)|NYFbwL#J>1{F5hMlga9HNx(R0cD@%#AvuIhA&Su|xK zN`&o5(l+f;k}{w~dmwP$?-#cwnIwnv8Z`TfLOuUcxmKHNK)9kgrNToLXArX9_*(& zn%#$~*SO#(sy}BCU0~l$rds6vd6`AE7Wfx%a728?c6MOk5pek_47La1chL4Y)0CMj zJ^(n@37OFtHu8f2LA%iO`z7Ij;L?jexDKq2@+Hmy8R6q`zWIaGL4_~BP+04%aZz*` zB@JERXKn56i&Kn#c`)GfycVYbN1vQ~(8?fJ%=^$sEK3rqdeH$2P0#meD}FVfG5anO zHucLvV3aHZSa~MV#2e8EEsPFO(P0|Pmf_}Tab~mczQBf8jechLHK2G z!Fo77t9bgU_A7$#PfI0`qJ7DKj>C=8MtAqJ$JD=;gJp_X^pLKv0Ot|m#mmjy>25!K3I_|q2Kv>^i&?mu5!TK2rd~$?Z!ec~S*Jx!{`B5IHjGo-a_M?zOHAZu^mk5 zKKjr5=?4f?amkmU&G)XK+oudMt}BQ#{S)0!Ir}a&%RX+8qT1tT!k)`PYHz3JqS8iUZ}SL zfUZ{yeL_4>U&4N0_@(}SY7dWd4M8P>cBwUcPnW(CC1$KOZ?p>yItKP#%bM$kyqO-1 z*(_X-jXE8k;^|5h$w2 zpI0`_T@?|OrMvuHBHXq|iNHu|lP(98m9_SB;hNabVJbNStgVu(;BoQFTJNk z`Kh^7z@-vAoWXH25L%)4xO9d@RPn7o-{qSEuW>({kHCLl;E496kE#V}%po6a&v{z4 zu+q1$NBeE9h>QW-47C!8VzD1heHHbXKMI-;lpW*j^TT)^zeWshxcq6ru-8#6X(BM) zPI5aM``GB%v#p(o9BA<#2*WztgKtp&Hj1Pn7|~D0G4l7#@rt<=4M#efo295dwD6*o z$Y1hL>bSbF&=N^c3Z=iml^rq6e1JP^3*G;%=73HiV#Ct`FEP2r&d_6 z50|*9>`~5T1l{BQnxGng)rvtrb7E%D{^zkvs0!Ve!p1KEp;wQv95M_D=XtWF9xZIU zSL4N*=S3=}=WCsE_Hu>6H0ZLK!nuY=#hxsCCpyTF_9^mabwbJ_Tug=$>|ge&AHKbB z!dLnBh=#juR@DJ^)NFSy$WvPudge=e9yXF1FfOB3j{ON&LeSaI!$8S!xDgJ5w;lM_dmbl)DV!t^64 zg6d4YdM)vE+yPKaMQ%0rRgRv|Pi%eCpO-MaVr~solC|fckq5NyZ$S+2(Z?9O>9A-J zEShujago%Z8Bq$u%fj=-T0u=O7l>?-!%KM$(|5Sgs5b|ZR_g+Md4SpMrt{dHsf#za zH}R*^9zY@ZWSx3^A3A5z)#cZ*6cfo|dz<=V5CN!e+rw|R;S-CnN}`~eP21wI?`>-? z?X{Q^<&~9tU9?Hb(NTG}mG#oO1!4eD&k&D`jFliSWF9-Iv%+D8xyUPvIL4 zgoRLiqi(@L#De6qR84 zm8yOGeBXD+u@2W=-no>Iq3+f2Si&C;kZV#RyPBS+{X~*09rsYgXNj#i(K0lNk&X}R zuDBy{RRg_q7$m&+m0;PYYYya}Jd zfgz}${q^=85;VDOo3XIeQln!>20j_`3(+$or_Y@9^Y8bkIkZ)8Dr#%^psj&!Fxn^O zqT_FE581f)!yR4>KFxm0Ts1iC+zCf7eQT*_AoxOd;wx7r%&4u9bA>ibF}y5KRrJY6eCtzcIu>VSP&=a&zb)ji!l_#cLrB~qiHN^n<{gprbn}Lj#m?82eNMZ~MZhH>8Aird^TY@1tI)c8Keh5$ zA7TA^=e&JwC=UV4Gj~LV_yr1GY3^NouAooygPsl#)jEmJ482t}FNf}UKk9l-LzQBN zDMb|A)gRu4TU@9M{uK4N1b&cavso9NuRXVc^o5<7 zaQp?So+;t+xL@)l9AB&NzKGK;DRqIccQlK0xSu?3Uwp1U`K5Gbg4UINCp9J=e*H9l zpb>%79Mmj7=+4o4JZfOat(&0*V~@|fAGcvlzJlTlxVz8;?1P#Xx(&`JIOwgk?*rBTd?z(= zxcutb<5o>2xk^`UohFHs&VWs5rql2|O@=T)Cyuh#@QtdaKoB8wfOggga&wv{y~B5{ zL-R2_C%qD7hQ{w_yO@LHz5GHPpalEqYP4|q-|#y=M@}V%OO<@D>0WUcT!GTOd&M4$ z7gf+NQT!xpOJ|*rme^T6O&7EeZEyb3y|#if)FB0)*h2#t6a4 z^9>E2;=tPQL3ZN3%>j36>W{ndx|iqY-$Pw2G#$95KkG(RaE`0_w;wWGNxn7)#b@hU z?%6`~s{f=lBoaa)+7$G~v&doN1XT2N7c?OVoYMDJ>!cd{)`4B}Y{V#EX8eUsDG~Y& zR_LR#a0iy}k!J*p_mFSNy%D7 z;chOz6o#4L;-4NO>#73%TUDxgdP7CwiZnQX?}jUq_33rliD}5wN3D9UM?XHC(<;K? zsuscS(8Waau?fsQi2}urux!|$Y;X;a*v+xlu>vg5B1%X9IzIMJNn@WsG-g$mUi}MV zu0*gPCgobQ)*>vc->><7qAGGf=X$4eNWb>@eOytKy7^-G^*nEQFmrJdtLc3QFC=e* zD+rfY{}4`$&~O&yQ6ZnW#mC^LWKU(S8;n#X3!HVj(M3=Q>1BF)P^jwE}MB~Cp0GnD&h`+_RLHpdp&Fe=T5m?*r83r=N_+Q)Z=H~lOye-f&2 zKPdht3(*|1_fCnnyZhdEy+nv9>&liywg*HPF?7spVHjX0e8uu`a%kuD;D1U5A0Rh^ z`7zOMhM}~SS3%k4)qS6{bA`=Xd;=`3q{B*O%Ce4hiJf*{8EO0Kleo^&S;r>{f-6$lmJPG3xqh@ z7m8W9G6jV40rkA;??Y9(!$qd7cc(vQet)OxU*x9P~43_3c*}NZulzO;7+-VN6iqgf2_gc}ltOjLnwIq2>@W5cbDsLFJA8*hX zUM_pSB1!aVYReVNhO`uXhDTI@h+?qz)8iq{^op5o+;TlJu~8T#C1urRACOmcrD`n2 z0=6W{V58FsZZ-Sph_5@aV6K3T294yTK5xtmMWua#y-7@yzO1XIOo>AYbTdqWZLcbU z7o6c&%C0EsPxr^!Q)<_JrUcLR*KJ{+X!0!+{Ks&NdzsFDzn!np7%}tPVvi1=t{BS_ zH#30d8Q-m_|0>>nd0?S~eEBGFrz_)qxEqUvfr{ti)(DgMI#Cy1r}%5E4S?j(cmA=s zx6ggyO-A`VPK%1jhc*N4@S8NJ;{~{k8uw`6_s=Pyl67oOaiIYKcB68yK+%VHyiDSF zmRYYRC7&ed;z|BXA0eUelJ@PZwSdpV|NHq)pW&yG><9fHWd-}TOd>+?TKiJINHo7C z>vg$C@e!6H3@8$q>bv2_kAcwk*BjEFd-4I+XzAl^pX4b$dkAd)UM~+0iiCQC45;$W zVTwX`8n=(NO{-EdQ5^znfOLrCg?vCPhJ%(Ob|dNOiqiE}L4>Ao5wWqCz?y}2ONoaB6JIn^x{6+tm2GDmnjTrCyUoe(fr*HEk z&$JhF4eZlA21ZZjuLGx>8ZhLfGgdH(xPTWtPvOj}QL0w3GcI#&gz8~Oj+gF44ynUt zANz^g$4!N0FX`lcnxTMOcu0U?^%z3s1va}0|G?sm!sT=)PFED%3oC=mJ6E$^m>eN) zSwd6Fg@%SAJ=VNd9n5=Xq3$Thb>6!bIwuBP ztQDp@<~Qeaw9aNzR>D5s<|h=aCi`&vaLUDj6C<)AzP+7NY2{~t!x1I(dKAlA$t=^;;(@G^T8m>w>WermRC_oLqx!@zfH5EW^ zc+Tj?%*@Qy{ZPzr49z|5P+rNO)A73dj0?OlXxi^hX@?%2t$tqiPxV}PL&k&BAAj)g zoJ^S8{Q_oDdSTCGH$7OPfCA0OlCHspppHzomyG8bKc7!GkSB6Ip zOPx?-u>e35!Jq$#0H?e~B@aD5?RkfFj-ee1XW!@qHYQdqhOOo=iGs zdG~(Dv7eGCwlFkFeG+&)liOqInr;Ze)1o(lct@ds3e)7XJuw*t)cby(n1bxk2V}_J20+rYe^WZ^SY~zGNa%Ff(72P(Nz=B=zo2y%QFxnE_xpy z)sR0=D10ncd|<8|AA;^?wcmXPQV=3kJ_H=nWE@}@wTGe>JWy;>)08N_`S3EE%Uf2? zWMI4x%!UHT1;H#C3aAnu5=VAY=L+mwd!@8XJ-b>+lOIE_hhxk2XIPYsmmY+Nu6NGy z`*nXDv#Vzzbd(A)y{OQ1`3eoxvDj+@j^+M1S=QE1dup&B4YhzlyaMQv@iQvwD7~8Z zeVh&J;!i(7Vt$hCQTkI>HnKZQMBqKZMs2rwq8I;Al&LOY0t(8n&{_#Zp0C3rg}*nx zK2lj(4WLi_82-TFErcdNK3!H0ZpWWieY6M?WGl7`s;XdA#VZuJY7=seZ+wO<>KSpR z07p_YF5t6x%{kxHC)s&Cfp_XJY{Li1_`9SPqhsBdLX#%8-;=dUCnJ-qI~ZOxE=i9D zIK(}peT~53e#z)ETmeYnQRs3bgEb@!Fv9tJHwLB9^NpTbv-xnk2nmV|g(cS-g_xV0@)yCHWW0uFy@HJ4>3CV_6!^2sGI;WoQYwFYj(`$ZhWq2&t z-*xLlWWDkxLwT&JPlH-b58?Cbe?Gm>KPN_q56)Wg^g^EzFNaM3eE8gQsNvM-3&!r! z{;7KYV15CsW{Nol)A8u>*gnPz5;spJNxsVd%KmX~IJeJcr8vcx_?~rBj^cMN%jqlr za5%m$rC%sKosqf^D4_2jbfK@617y?_rh;urb^TTxw%<^I^dq&o>Qvf-5Cwp4LR+(A zKJC?u!xhF9mQ}<4V9mnAATJ$(7qAcKDe;~ToL)?veu#%yjBn3lNM6lJ)<)r{~ z=aS#qyq{aLQAg-T_AO-c=8NLNx`f}az6coc4Q@Squ%&LZ$8S#I!!vnmuMhWih|+xl zes!hw*q^D59H=`eEO)*{Og|(c#5tM;}r| z#*)5ZPf3L3+g>6MN=papb1!R1>J}P!G_jCK&YU^Zjo5Buawm-$Dc%DX0D7r6;IubJ z5BI~0+wHfdR(A4z#d$AGBh7r$zD|he{{U2iLa7mH@>C4W3s_GOZF9aQ_jSOHCTi@d zlLl>w*t?(gr%XNkcKP7;<_O0a49E27!vb4NMt1Qav=LNsxo-lx$%LICXNyO95Y4_#;9}MGT?jNeP%l($uIIi&x^<3$=dHo(5c?zh?c@M z{8IJ{Kr9}7LFDjLe=99|eU2BPEei;-31j`c;mrKmp5A-uVElAOpZGvZlC$F|x2YjOwwK{rm~+yXO0O~jt8bkqcQ>1oWxhu+l z7$5@D=!~r=mUIJH8HLb_Y;NWGN`Qulv~?+%hZt)LGww^DmFF(VI)65$qKb`Dcqi8J z$b4Fy{8heFZ3Zj5b0`5x2R0I0s-z#I224K5p3Ii#J}~C5e1i(?2MYvSOPQKLAI9Bh zC6(WO^RgJ?JuXf@f|e#eHiJsedqh7SSRsrS_C;5qpV(xuU+5duhC>2+&W0!e%@29RkE{n<<##4K$Ii@u_V&b z8ngOxf;on-PYHFn>pvJKF6B0UR}D^@kV58^Pt-2w&z~`$0^kC;rQKs2B$%vi#l?6O z$NQ!}<45Tf=jO<0i74)Cw7_`O`N?qf@k6n?I>wdsqx7)epj;BuI?hVS*rXY$Wrtx( zP-d>)-mwo1U6Z~Z$!7W%Yw1w3i5{?NFPRT}wMYBy*S~!$q{7>>ULnAQE;zdTGMc<3cpDV>W*$X&sM0`4{?E(ek@Lo!7>CC z7`i0QOvGQnBnYC6J}v~#Go0f-lPGduUcD!nCF2`zfXLUYwYtmGQM-&^uipy=T>kwG zBpl$yq>*6`DmPjwEZ*I7#eTkalUiJ?fUi= zzc`}<*MA9g%Ll4VM>udBTpUTKHRxJYu*Z^8uQhcj;RL@C!JEz&8J>OQ5S40ql#Fe! zmyQ0{8C3V+ihS0_X;b^kmVLrTg1IFOCXc#t5?bhy;k+@U3BlK0nOA7#MiCi=;q%+` zLI~`uMxF1suWfRXTi5TK@699AxBmB-#h+T;V@iqvzdrKTpBsy9g_L7=tR2alE__$X z_bRi$`LlmINR)5+58?GX5913?GAr{?wT!gp*7}M{&bL8gus0e4qARf$z$X=Leh;7^ z{nQ0|*=Up7btr|?43nBg%$YsbWe?@%$3C7R~nBiKhhlH79pSFbGv`E-Ns3R5OKr=(voNI z?U6A)OrdOE>dnUVJ?0u|Tsax$x7k+;6vo6wk zUi_d0Q7kRv^Lq9LM!&Sl7nUIA3bzMHB)3O7R08rdc2APuXV5N!B3Ul{@<5eD_%3hU z9rd$5K7Rs_vqLUa12$vuBxjlSNrg*f@^56SQ&DHtCKm&Lx;38s=eRXM+dcq8REk3G zX>bI1i1)C8fY@CNWCNr6R70675x z>h-S56`lcNBfNTj|Hx_j2|#&tj{WD36Bt+b3g?T5@*oiKLvZ4T!7O+=CtWn}k>Le! zFEFVE&Q|$)=Jr8@$Ew)iy}Olk{K#J2_LcupU~;*DcVSLlTQqiEWqz`HDh5YBaWo$? z%XsO_A^h#8kSFEApS}U`=@A^fG!Jsv(c}9or-!EsFQARR%VmI;WO>9M!~JpuxR`N& ziWD#(>W^oDJeNFb5!M=jr5@abyJ*Yp2t=JJWx{J`?m86@QwuR$fr8^5yWPh)^&d%R zwxy^NMA2UYL54>L0TGdT@C{H-$i>R^40G&Ip+q8F6AC8QiI_pI<#ad{@bt zv!z9cEaX0;{XM1f-eBLAv5S}L@OhywKouhs7%(_yF|lTFtsZ%93-5|!2?7u#sQsun z=BSg#XhqCywD1Z%JC1rhzN{C58v6aBzN>0x+ym&&ek81NvwaDsSoA!m8wvzJhDJX! z7pFRd8mRk@HJAoqmmbn+lnVXck0h>X*}oD>UY`!?Vj6GNrUM!(Rqn+2$vc6c-{I16 zt?~3^MSjhkPwwA$|CzEpGr3dyc*J=;2<42oUapsuU{?^o39@ZBH|oA$=1#bc)lzzn z)oJur6BJTlxH+18!IoMtAhm;JR@oG?O@FRm7a-)SxC!JCv49r-f9MVFw^Ri#=rRu*zymGClx^h zb7tK4O8kmR+{Z|NLpAr!aZvcs;K#u1>{!1-EEVE$I`lI9-;3X_=EVl$XnfJy)fta{ zc8?O$-zRuGC7Q>@9qw)OZ1wL^*A}H)n(JO=+y7Ov~R?H}DB`P=w zjHoL-K9zPS@LtzXI$VEwww&o(e&OZ7xiA};2JqF55`UZFJ_GkQIIWtni2HFJPZNR5 zxur0$0A}yY3f?VTrD}ZMPeB)&@uru#Qr&65or2rgwE63EN8MvMYv_BsR@IxtCM%&h zERMaUF1~H_8#7JslSJ4Pib9+#D@bV^7_SM0j{iB7z<8(C;0|Pf>|MV`nWSGmEnA>+ z%wFeMKHOeX5Fo-qEq=ZG$eG&E+pqQuEtu&(j|KJB#;^Py32`Gi(uW|ytZ!lwsQkxQ znlhsP8OF?Zm#@z0x-nmykJ5=gb7=ENMWRNv!Pf0-IfN`bJWyZ5yWIJBE z8QrQ*XYtIGGWV*P3ry3Hgi^*gyPqlid@X+Nb?kiByI_bi^&3aXWzT=I5Q#qSGsf$; z&#ece4ST1smWOqKO5%9*0}Hsw2Au`zb9o=M#%{&D9FnJ1gy@;;QyyK!FI8FrYc-8Q zMhiC0MNZs*SyrtIl6Nebjf_j(_I#>fN5wq0Nub3SeS1E+*LL;DQ}Om+`pTHw!PSN; z{PRc#1PiGua)M_=dSft5I5fRct+VwE-uqk(F`Cz8O(*3LF2FJkAPtuVDa$$B8igGHw)LDIHvQd8Q@lqqzrP3IG z2ibioKG`9$>fC$o%b=GD0RDdR^?R{OU^K{AJ+HlWY+C095tIcZE2l_Su>CW|AOV@c zYe$7&oZrwh-P2_o$@2j>DtCa0>y_uE@|vE^J9PODr1mT(3*~qG+eWR1$hF{ZlN_G6f25tZ=|@hBSZ{JD`HN`zT@qg=(^0n%y=k4Y?_tSmcslva=KWIQT5+%sx^RQf)Q z4ui1RYL$RDWtS`vxM}ZkPzf{9w>gja0c+i>GMEQ0<@Jb`;tcMel*) zVe#`KW;|M{N!bF*>%Z8QK9cw8zanL&U3@vvNSo661cD{-$M>JoIaCWvnJ$XGElcK( zuf0g64|rV^#N=;z(1`$1lJb68HwfI0r${N(F}Rvhmg_@=Du1&TkmN=3bF8T7eYjJG zPm1$?g$?-c@M+ZF6W#_&X|Nx8J^uDd!5rU`pnup6eFu%obmY11A7tPB;!AyU=suT$ zq%ye~+9F^CWbHaO{x6)>;cU@pS~i~~S-FNrnK9C(7x@T+!uu`koA!8!_~U||I)^r{~1H4{===VpKco%>s;mA)e46f{FOg9Xhvwhn;1%< z#!_mZL|Xcy-#K?k$&x>OggYf73>)&xY1+l#QSU%I&*~2WCr0saUeaGd7Gw>*Fh9?Q z+sCHtAe2#3YGN$4eQQM3+Bw>b(CIO=+d(3z*P$a)Y8i}+8u^$vMewGAQ7yu`Lc_Q5 z0kRq|jvp1ttpR>>4}m`X^qjK}XUFh0vcILHkRvrQ;k{b!0d7%vlS6c7oC7G3w4~dv;S@e_QbhWm zLmL+0)QMc^*TX%(34$=bh?Ci`IXQMywJ(0iafy2z`7`AL&N`J;48Nu5u0~!CPHwtJ zp%Zw-MJv*n{H|9nIm0NnWKTW=ic)(xZw>ClPl=gay!%>F%4iPux`o}p(ak^epK%Wx z;0pQxcVlo8>oHWekXKK#9oX~gX~AvaydmjBeOi%Hx9Ll6^;HW_-X4kUc_-!S4c(-| z)SfWND$(fuO^?qHDB;mfUK-pN~p=Ny8Fz(l~?%8__ z^sXD>wi6}jX3YEV*uQ>Nw*s2rb8&p*f)q&y;$x63O_Yr8m3P0``?ZVvvU^K%SZ?Q+ zwZ#1SB&^DEzDmBbPqU1hhAUv_EcaZa{+KMdtY8#-K#0Yt%duM3wsUqS|+Ymx11KQ~$mj z|D|}~Rl0cB6C}tepfOBGZ`n!ApSk24Tvz*-M~udC(>1I?g*QmFns6iA>z3?V-? z;>2WP_S|hJ?(L)`*!LqAZZW-3d`hBA?%Dwxx*tD>_qyw{^&L@j)Nqo~boOP5g_ob? zBn;BCzysXcWca+bsOqs_@-&>9uD_2{UInn~4OEzPh$x!<8^ce2^x=nQD4zcga;qlT zCjF&Y>mi0!1t!IHq0LYI0tB&>AL_*m=?cs~`U;U3SnF5eX|<}=hGvDbe!ewxw_g&E zJ=0&rBmp!kYdv5_`3^p6%FW|=JobP7C&Jg8qM6JOE~Wx;4rlKeNSF3FGuJ_?5AedN z>($Bdo6=-@*fB^E!4(*wOVPeY$5rl?(!}dLX`k`ZMjZhhghQ%$T$Y zxy715k{pgJq19`5hmBfrI%68iXT0neIlElB7b)Cz@yckM1rR>z;5$Q(l2ktGrI}Ut z_u?&J*?vAWeZI|jhC>pGY@{N+T47Mcb${Txo~rif@&sxbzGJ17z9dOA({&sPwmXMRaO`)vDI zNwj>0N+3Ov|6Kw+06+P6SBWU-r+=PSReF-MznVYw{bRpW6aeNo-lWOp0`Ih6Hg^#B zc>YU$%xJ&-`h%}{Dta^aem7-LlVtJ!y6gVG=(-DI6fx5Rua#=DPPDWM!xwBq>icen zv%fv}HVO4;bwQT{{*r`Hp~ArRwDH}To{7za0T0~cFWueXg(?^u$4aMZ576>lBd zl`ThHBeQ~7zfl_Gzr_xOj;n2lA#5~ItSLV6*>D;2&B?_5ymb4)qfP7Eo68G{ze%Cn zZU55rjAWkKO=0kNUV->oo#aPxlh62q#qT~KgIs1>xtT;|)pJYNrdZ|)COrOCvSA~~ zrIhhL9&_fRq;wq0+TO)1_T-yyVOJR*W4XEIT3BSczo)reOx?Nk9y_M24<5@VuaoVG z-uBrvpJm}`=wR(}9_Po(=J$PI@IiJ!-*Y5>TFF-Lr5LpW$^v*3<>NxD5X;`E<8h-f zjbCLG#>Z!rn|(Row|&R&@2Wqop(Y;ZN>TybRFn2qBN@(*Kh}1BwDox5luOs*3<*iG z6s?MM0o=(u6}{cc0>Kkw9@8`b24)PnqCBFu!?fg_8G!z-4K5Y`83=}ThtzU6 z@k@|07+Y-S>oX^iqnz;ZM6yBrti*a)9P(kzpa45j#tbvfQLBB#e%63C_~1BMTU5Bw zl7kSa5iVvF;230>N~_n)WQ;Dc#m*0O^(tdi8t(Cr>XY8D{rmZHZ~nKv?3Y0YMtRj= zdB44lcvG>hE>~IM`sT~ZpvB=9)HLeT%gZ~GIAAY;c@Gwyum!eDE!vzTkWw?ofLK^< zQp#xGD1%yCiKhz$LR2Z0$`L+3-cXoiZk&d{Obb8Vc|ITQx&ce}p8Kt~XCBwffUrVb zC24gRiYt@BdwQ?~qrkLsOB2fQlQNcDH{fIoY{?4WDnIZH-e=XtQAmIa_IV5cf~6Z72b7IJZ|mdAv@GCw z_3ez_A%EYEq0!2rWAz;55;O0Y4_osC<4Tu)>Dq0BJb^Emz?&R-VHe_Y86Q%Wcjpj_ z;}2>M)G;ev;2nz!=0n9E`8am@TnR=HAHA?C9$GF2dm;Jx5#Ja#WnD5rFFO>&>K--d?Ptdsr;5^0_811 z(}_EE0lzOlwNLVzCcSg3is%bfZhwUPoYl%A{XQK&=A;Ioee2A}c~kX%%;yP^(f(6h zcWj1}`ruF%Hh+bbRy$vv4IS_oBQ4+aPF)a?w zw$U%b{7L3JwAy3!Sx+=lSqC6tdOq`yIUIBK{sbpf0J4{zrYM?MxU=qm&`Tw|HgImW zU}6yYh(TQmM9nmFpDHaHO?G!S_an z$rxB#xs;S(c#DodnNvTc$Y1T~cL*KyYm#MjJEfaX=Q8qk z=p&@iN=HHb^7VuhqZ1+8U?8VXqr6;oa?TPaTGu*?%qa29mugztw&cv_PErUbz0e`c;N5x?-=j(H6JpEJ;!JBUDV6z_bVSBD%Jsr;6Jtt7c zDY;$FQ$S9uazX?wY*S+D$C~XCm}btOivvs8VVq zl|IkS-WM}T^+PVFk>@HV?h?qyALZp}`Ri?3cav8;uNFoV`i z?R_fh=DzR%UrEfSo2M3E$d5@M%>!i>yXkzx-Q+D+*ToA@|`2 z{m6h5r?#+bbc(L>muPCwyEhb_2o-QBNmo&vs~`OUL;QZAI=w$O*1j}o=v2rhz|xav z3yZ$?RdH`MEk=mXx|F#?Tzh;NSkV;<#4X^@U;*-@7Y(MC>=Nqf>9D2tEfC@Jwt?Q` zwPDpEb(uxyB6x?@(^& zZ%lXNCH9WTaJO{8R`@vlVzZzAZow!d6WOen*A)+_S1VG_74Kc|DVh-c^W{07PEx3F z3Go>?Di_ReX`I1t_tjr1fZ%*c5gUskpSxM+mgV5=QN#7F`z~oNejP8JA6(;KdzhbK zigQhv9VoS;0xmp%_IEt08`aNz@)oIN%@$0B3LO(N#gR%D(PgAeu@>ytU%J}0^&M*U z38MK+nHk=FO78iHCp0(Y(u&X3X`bYV-t!ta7GEyPTW%}{*SqKd&yJV)-X3Ql62kCl z)$m!~4hUx|&A(iaI%8At273|RNU^~PQ@itE;HAa)S~+-Y%)y=Z%E2E4fc0yRrO5Nx zUtM3T+~?bEc_a!$<gWQ6E2#vS=(kyC27#t=~_y6et9h@?GWVLiB(E zSx*FSins<%4!r_Re=#~m1>#rkfnwxw_dpWkFicNr2^lSc)2?(Sc*V0eP89JtS%QCu zlyF}qxF5IV$Lr05^Ig{wgdy~WPUsFQa zRp^(_PxtMK!ay}w+TvS0Bfq5}d-D_79)yHrraXsNUp;v5eV77h9Ut6RaG&S?UQ#E` zRfceX`eebT&a?)v>mQ3QUx1zIi&A{q&bzs8h59Bh-|j}~)_j@2BATD9dY}2Y7KJ>b z-`?xmtz@_)#7R4Vg9YjOb)P69Q83+(FN3__Pe|KR>&6R@FocaWP|pqQ#LhZemUXIr(TU?SAM%`c@jy%MMMS*?l0GvjqD&R6e3me3BK2w5-0UiYEfex6L8U&ul?SBBW=Cr&PPU<}%?Oqvy9PT%u5 zygwCR11{=I?vhV2+xi=?IJg6KY$50*zYHtc`KU&FoILCkSD83})XrAa9>v4k3n@?l zVfs^}_qA}`lX;SHR>XMn`P`|TBx>jI06z@vp4R&ubi40|cad$W*7G1k{citO_B|93 zYWrR1;k0d=O~b*4$fI&ixonv)(ZpP-^sR)nC)#Xj?N={;QZq-H>yv%q%6sNcV2x5Y zvh2;oIvPZ>f9YSJ8G5_lLujR19H_{(!ZHO@pJmM^#F~}>|9nh=at6rpE_u45yQXDW z5_~$tVCL6EvbYbsE@3;u{1EKvaw&6WBJJ-3y0D7 zO@*yvQ7I3{LV_pG%jx<;cQ!s1e)ehT8qzJ9&#(7#35Z9}d@=ZI8@u6JaC%QNh@T|V5B!~;V9$gUEMUUKPQY!pXhc9yg-CleNMTE{r z_GxYRl$ffyy*HG4I0GZQey_pQePm$pkGv6zf&r|fQzY~@l@H|2VAC~1;{ z_$9R$TyUmBmc<_tjm5I@zIBt!=CFK3(+HmS_^u4r$QrGB3Uj))x9ObX=AU+REA_2g zj!#})**L~~rH#%xPpDo9S^{f4D67aA8O> zUKRAGo2z?`h}@iDQ@*28aEXhm;=A>EzpxgG&OcW#q&VSWkhg?I$4;Ct)|VWXY&iY^ z_NK2_W=NmUzV?O1YuWm+)4qrOdfIusiprqip?}gI=n^bo#jo;Vm!>ma5{FtKU{nrL~lKS@RW0v@Q=-YkFj{BlG zL<2>$l|?73mw(gGxuV3AUbYlrk@A+uQA`c(eEMLY1Si#J@i}+_QGg5sDMd(Zuss9<+xH4Gzw^;+gwikm{w^O`R*8)Z=OV zu=g#;t;&O-l-Rva9Ex`HV@l%RUH(fJpiyk2?YdL2^%9jSVA&OlM!V9^O^j$l|QMZprb+LC!zH9KJd% zIP0%J|LlIfeRr1w1*&qXNrs@#zsz7C^l$PFFUM-`DZ>$oRWi-I;?*0T!j{+wE%Sri`Mkb_2;x8+xxtt`M!qk9cWs zS4sR{y7(rm&^T%u4NEqrHiB44f9HL+As;_Cdnu}ay*cO9Y7a%H8|>K; z_!oYX^(|i%hfDW~#Ox0J>^+~Jw3n=`=aWS&gb5Db1hBQF;4*x!-|u}-hn*$9$TLC? zX_)-{`KL4%(&za(frQuWJ^bR0@|RZv8fm=RXYmV;EdMhp!(NQeJX)6YwTnuM(S3a0 z2T~?v9b3bWfE$%F@(-7F`Q^%AkJsx47rgSb48;X)3wp_WjtmH_7B_^c6rp8Z_u$cX zT>5zS&LJIsl!N+i9+_UA-@kHc9l6NV4O zxKH>YQ0e(M#1Uv43`t%`Sa*ER>P_WtmSH>xE0aD8IC7eu`w(3H;27a01pzMF@!sJ} z-dB*@lDJ}=u_yCq7cIY3{RV*2{Q9W}sgka3{u9l3)lj%>9pPD6O=jHWZ}GXq_{w8b zCU`vkI564M;Y1_he{&%NPu1z^+S}W{aTE*@rBe9v0e4^JuHc!?jr4~Pq6gmpEStZo zUw{1lc}r`cBnS6Ky8g%}3=8hk&j<4#@y-4@?Yx`%uk#2GSh37v_29R9`E7OrHQ;yq zCJ5QbMe1FV-{+wV_LrHjItt=k-*aNx#j5~x=iT-seH#6-mSO6PwLyp#!k@>#-T zo5J7VM@vxZ4KuC8C9hgzl-^v#mh)G)b>GG|}fLZG9;0;IT_G54T zco)+0%*c#6$OSj%Kl!2UGr2WuPIC}0@UjcbQ#=pu0PckvKI0zX{!{d;ItUQu-pd*Bnv{ip{)><%yY@RKwX{Ye%%n&v=^(K#~UXy?Nh zo7w=jhA!fu{RJ_69x>SSw2#y6$oWkd$!$jnFLi<#4-5BYdELix$oWRS-b;Vpy^Y0v z!`m8+eOXR$L4qrRcHDN8S~2QWN|2*2bZ$bn&o(NulP@hI@ku%6n(mim#+Pg-Q(oXS z_tfs>N*31cL;co%J7Z@?*JuWS)-;{mGomdyazD>cKkvbX)n^}mW3Z8XS%R6-dX^rs z(Gva32Tlm|+pIa^3C9*wK**;wula1yKYn%ZW$&HiS(Fx}q1s=%f6@n7Dli!Hr)KW+ z355%lLqiVUpD=rXuc*OG7kF4J28@eft*uw! z#d=?bOz{NN#KfP+eHMo^uGg53M_4_83(N)VkpheSgU4VmvtP3%_W!pwd_`F-vMa(>VtCY|vsUd0|9}`Tn~kvT*+DQlHp4 z9}q$=aZ9-hCyh7foH%W&8NxvgWNm-5qNGPY7n;39$-AK1_AQhmzQms1KfW+K-K9RK ziE<1pc9so_)GC9W+kN(Cf#nlitm)zdlSs>im;61b&&iP3qy0Gc#JQhcH2>%Xo@5^PPq%ziCuP;-3ulN|IgC9=8{2wYSP4t7LhR0u%ASEhE`c*2 zlune#%iVthx&HaylgHzg+GtRG!BqS)9>0esR+BD#5cNZl6DODAf%t73t2*i7K>Il1 z-SMbkom9|iqgr>p^A(7X;AOWyL$pN<*Zvyi%7iA9=|i5QgR1Ax&4@3PFu(A{iVO!@ z<-R-QvsdHlB9O)2K!s>dkyg;Puq5Vtq}n+cgyqX|?s01+OKKlYtGJ0(^O}VtGQ3r$KUOv_P}rkNSM$len`D}J1^`P z_@TSwk=OxiA;yQ2f1n#l0te3_UYvhnkz3zaw(Vy0m-qLb_BUp{+=o+MUk!7g5rUA3 zmHUyrSMZJ89`t)SWz^w#f;$JjU#3j;#3dp^2p3!gwfHfz>{ovPeQw0a3e6YtE2zvK z4}0hk$7{u(;65zM?>#7*>U~w|pS`n3eBZ1~ zbuMS@sENAV7YP(Qn=s0PXHer>K2yE-_L>DPZ=Cdj zw4DsP{a^p|#><<5|Arolwr826r^% z+HKjd{l@dR1PBtYcvTKNz;-26eT8qu4NX2!;?69Z)U#9V%D;P4>p?&xFxuCjx!>06 zf{qo+Audm#lsnIHU#w}YxPFwt@Z|46cEX+F;L2;6iEWO=VCT(z%lBhP?XW3J;vRQdNE%zTF+^{CK1pWoaAU{@dTLkSM_f|Ax$6o8OtfnByx95KLsSN#}O|R@}7+(0)#vaS3r@J7#m*Q}Wo5vY` z9pB)5j~371lZK7kJ@sg2jbHLCT>2j1xRR+-pH@nRd$4IfLwVfb5T-6%7bU+VTHX(E z1Br!g|FW&OkqOt0PNE9>RLtP-J@4?|(pPzib5|w~^{oJHuCk2)mGv2LgtYh2c%d=3 z)U_l_(qalET8Z^jNuZc54IVjhj9Bww)PRq&U|LU#DVDZY3@QyQ_6mza_owM(dWq}T zQ*0T>82&^aAvu6Xs8*)nNZawbug2*(`pKoOCBZnipt=qI4*f| z#nWrHUvgwGILAttyo_Er-u>2<4;4@80h7qmejb`vu{GF0AG;H`G0Rna8Sri7@tpO3 zuYOl!Iv+kvMh_FguW$Y2v9fA256xGxM;Sf`VeG}zuOEXiclFsqvDk*VIyA_7Vq4e~a6jigLk$dd!TaS}Ux;%K zLKweF7}i=~(mea<0g%~)A|N&`tW*`KWb2T1Q4U?UUQgZCJ z>)Rn`?OU|7F345b*aTK%cz4j&0iP1vwf%y9_-6AnPki^3G|e{nZ}wa3eOa@o(!4&m zTfM~-!gHn9&ICf4qD{0;P98Migm(wVffVi> zaD}}Fr!80Zpi)X+S%2!*YQL*3d!Bw3Z za}S#h+JPioFL2juV!kC($y?7fnYaI`s{SV2o~*14Zi!v9D8R)=c3~mVzrQB}EPMA> z(g@LPJy-=j>}Q0PqBldnb34LARfw(*IIi6*iN5>LI&@@t?3~o%>1sZ_2ya2e2hw9m zz2B4^$qwWF*?V!^A4B)~m6p$gm!0hKsXy!7j6IY0>4tw5I(kRGq7@I;qy6S+t1T+n zb@c>so`x*wN>KD+eEKfrmtNn+hnD~-e!%XX4vX`TWrJ)UuNwRU{mOQOqoP&KFYoU| zvE1X5c(WJaMbp>ibcWv6GAX@8Dh*^8(2im7$O?t>81wlG*QlU9nK4}MQ5zKE0@~2$ z!5oe+!t$?Iv627>`yudO=y2>t8k7Cl#dxU@3JBY<`EyK%!rOT_8E*PS} zR6-oHUjQV{6*WiWuk6r8sz1Av?w`w3#CCrW%&FnZFX=cnQK}(i#0RIt6E$)BUgk7C zUpe!2clN3C_3|&>CA+)Ie&ygrWNxT`WW8z$>5$*F8@4kzJxxmf_JGtLCJhB6>h=!V zz7=N@9tCg;OjVJV+H`EdZ8*i7x&m;WTq^=X4h5-Ow^W@5?A)7OXiwMF&xleLBu3qK zSp|B&gFztn?OFU&NsanvY=2bl0aL50^m5#)S$_U3<9OiSr?r(brtx0L5|9}TswQn2 zYkMEr!&AJ0c7-mf2WL@Y`90xAaWxD!g%f-Ro5e?0pTXNbQ}9!$jiVMmwEdvzRCL_A zL$S3UZhY)^-LGRRpJR>e2ee`h(_?7voDYM>j*cqM4fEE%$V{4FI<#N-4tY|H=K|OE zNi~I^^LZ?qdu^3`s|5B2LL75kD(Ybq=YtLMjhjJ2*%g=Z|$Z**p;Rp50e zNiPD*LLc09dd+nd{Sc}uCwM(+K)Ol(^0u_?m7E@#d!FCl)*oqf7)$N(6y`8JwequxQ8 zwgP((9GmT(pyaIb55a!Bk~?3IukJ*Smzfbfk2>a8oo)|deKaP4vL10c(--M*OZ8J!FLyJXw2h3~j>DiEb_wb*imzoreMHwUc&dm! zs+pV1f*pc5HAr@;Z)frLDL_2>JL3v&u-C~Vq81*1^&ITmq3=&AK(Fin?3rJih80T$ z69lQ`I{X+Pp+i*gl3k7a$T*+}?mgZ1(BkXTSipA-z9nHbyo93zT*Yy(U%?vLJo_VR*x9!Vn|B7*Vj` z0!D+Nba9vljRM9ig*|cX(rKq940TT#2%6$Z`^j~stwV-! zHS>P@MS|>jD|9LT74k%}>;J8JKpo@ zXS)6^w-;7s_z{_rhO&_Q{&Jc@S$DJA}$L zSD(iP-Ob29(9sigvnM=f6(jGI_|(#sUZ{rm9d)Ea@e+TfNc^_8A6t4{TguZT_YB4- z{qwv4(*Z9QiRHOJi`(Q@p~XOjr(L0k`~#M4{=v4DD{|Y%Bg>e;e;G{h(%r5E&(z@K zIs!>AI^NVnVn35lQ|6r`z;)xmpH}5KHu)jM*u7xJy_egE&X=R8(-9S0nMLM2EUM6h z1*r@;a^be}(ilk-v!jN&WO5Xu;w-}LZ3pk%xT%NH95WrOQ%TGdI~w=nG_fF}mx^rh|D zyfKGof%%~>rix)8vLN#rVMG`W45T*%G{VUU$qF0l0QV+0^F#_KEZ)Y4naX{~H<4Jg z#OO2^724bl8dVSRSR;Lk-yl)!sT@d`3mgk>P=+0@BMvZMIG1PRe2#v435@+dbD1An z{k%9+HoQ5f2&ij40P;d^;C~P2KmVNGPr_U6jGJKXJ{bq zuLA=y51x%c_njZ`9&4doN6E@)$(>xkq{a_8^iyT{TPvltny=UZ_OK(ZyL0|5( zom>x}Ub{c8j#}QTREJ01HTK;*GVID{6xr_>p`u7TFYU-@QnHP8*@Jy{h~XYl#wT41 z9bQrC-*mYgObD~_(MRK|#s#o@t*m%cfBY=_en({9Z1#2>qfPU;sN0hia|!)^YfWnr zwtVLf2kvxd%B5+4EW?u*%UsGhU~Cj3PGkClp?EjeFXD+^;u|$MuD`ga1Bg`?TD`TN#z!={T0f~EUkxVYVReZnhR|xotT;!|59_snf!@>*dE*#W@O3Ykv zEl=e>Ly2a<4mlh%@#mU06hKK*_6z(+dvQ*-kzovZmoP&2_TzT33YDr8??=yb`FiS3 zQ=Y5zuWKTBe+~=TQaWiKqQpsO7k!=d*=KnReN)0D{dj|%)&0xP#UYbFdelXe_J|?4 z*L!*BH-%X~A?_CeAj)zT%0b~SQd=VLVb?ySul=6F<&G-#^;Q`7OnLW}2G(*-+N;ub z0ZERZSKW;`s=YhJ^{rz^-dv`@`|WG&BWNWUCaZ6VaU_;Z(cebr7b$hea>LzyYUMYp z@+DfHq@+IofVM?Np5J#4^L{_b8}Uqf#rMtGJUI-@trnWbe#4FTX|aCs;GzLDYJhE< zmr2VwF1ylCwEt9lv>bXUAw>R9_ltuH63b9bAdg?wGxVf&duM2u(wvx+$k%?n-k}}g zjj@VG3GwKi%(S(Xi2JbQzfG{u(tSPjXt+cZe6HSd_UzjxZ0Tc>J)wZ~{3hMoxnj*S zi_N(jR&%UQ=)xz*bUrZhbK?LE2{8+qqcU8WL#Cy{GE5hv$=efvAm4Ql`Mb~kKpgi4 z;9f>hk0HT%qE|JAgAZdEdSC39xvbA*Nn|3c0qr?@S`yNWR2VJ^FY`sI(OC%ZP)y9%n!As5{dlm2v4c29G)e3(7C2YjFuMn za!uU1E`Z@ZF6U3-Y9^#2K}vo({j-NydQZ~x38t0l7;#X6wAF`N$`J-Y)FsCj1VowV zI&dJI#oBeYs(?E5R~>$41m-6Z5ijBwDweosSXAbyKiARk!Ths-D?pjXX?o>%2hi!d zy;agQB-uf$(x<*`XohNfdaa;|f0o}S9)H|{xL*A05j&+S^4>E?c{Ge==xU2O6E6{SD%{&T^(*)z3F zblOXpGS!m2lW7Uo0^|w#TQ&s&s#o9uEdwg{eJ3HVE5=~7HZ?jrC8|*3Gh<)5*)hNI zopN^ZUD>n_Eoo_PF+XI`cYWI>JD?5hd8Mb1Zm2&Htnp?RM#H`)*%49xplF=q;1*uMuMimzRgCLyT?{+a>OH&B#j);g^}~ymP_xR*FHkxe+msRz>UAnQj@dweoFRe66MTF@J^0} z7K2B$K-B7qw|D7tBktd&=ze%k(Er;K{d~AceFuD$>iK+cy9!9e`c0ZeRCM9*)KNi0;6u>9J+n+DHg}-u_yc8qn*!N+)d0e07LgD`_)(~`?tN% zRv{s@D^>*@lc@FZrxNEZUYb9X@^jgkdU4z__{vT2oE3AOqCzsY?KL+6d>io0!go*nf-`SHio$(S4SJ=H=k zBB|tIX3Iv7pQUdy{DHUs49r#jn^FZ?dra}-Hw8+M=Y@BbOF%u>qcJuYAem!S+H}2? zwfA7<=l*s<1Oc9PCxWXD76{M1Jr3edt9UYJ8WH3K*rRr9zZx2L=-}j%Z4`J-^ir*G zfnHlr9rTc$WQ1G_bv}l!e{_W6!&B4<*_EDPBQP}v4XB3*MaY!qYU@E{&?v3YFH*JY zr_}8HhwhB`d0&g4Sr-pxi!-Ivrr~cWLn(TC;TXtN>R3WwM<<7HgzZu70W>I71{>&) z{XzKeE}UFtN=wg_UGtbL@Oa9dsoyeD7{X3Yt%nMDzMHnGGBVmYqry9tHA# zd4*3;O_k&(4abMv*A2SwhChF3QF8po3g6QEq$d4viqeOF2#I5BZ@0*LVkXVAm{9TN9Zow;f4iH zq5I-DPJ0?m8|tJAEj#)4SbJ^S*LsvLtGqEXSq53H-{q0C-*Gs*P2Di)6CET5 z9o%f%OG3uoE?vd84;np%H57SAQRkQ)c`7S>*J$5 zrN90ytE=C4pWSP$wnWz2E!)RlDg8vNyjNj`+-gd;UD7QZHoPPa{O?Qp`v#Zr$r#&c zxa^<*LUeqN;z|dPB-a&;|WR$d-nqDT!Mg6n1#BIGHzaHyfO3-Gl za&JDURgh=`Ie`7%KDkV!BDtfQ!`F;P#`~AKDT#$5M(-S>T7=XI{150WAF3YVZJg)3yq2liv;ayAjM!y@dikqM1Bx(#a%^0I2;61qQHZt zNFxPs(1!w}A$$p;AhU?XF&GRUGy+8;LM1SkqtFYKxQT;;QS>k`S64R%2cW0pT_gw_ z7YRk`5=0UU`B9(~4^TD+VIn~^k_@^5fx>2CWE&Py#Kk-NxY&q;K~;jxxsML=fk$&f zK~0iVsBC9;bs^IMt27OX@Ig>PSqv=@l%okf5YP~u8_*hna{(>{g;q`hEWp+P!dZ@R zyZ{ZLN5N3GmrF=6$3ql|f{T5km|mdk83}+l+2|0*V1XA70YT%z-2%AGU>QXF$QXig zz9L{%g6}{tk1fbrMlro%o*r0P1`r1W$_&Sj@NoeEIuNcK(}hOIQ$S~}Ex@9{hf4#6 zUNK;w!H6&{XqYU+f(ry?PjCudB=cQ)KmtOrF~mS%d*UKcLQvrh3Ll}iPQH;SZvY93 zWs!YAN?(j{_NGb$1a2Z2f*s*Of`KX_5E(>A{O!;331Fh4*}ia=n8(LU-6PzESdk|c z*iINJmg0y2&;xM5L-#t*mgp)xVC@9V*1>@XF zvJ^O5!f**@iGo0}wuHj>L{UkAk&#a)fxea~FIYshH<<*dMPOM7nQsNat5Kfr0oV{a zj^i!}4&#a#jBppS6fPzaJX~C5p>Q%D*xYV_$smHxbO9j-TQCV%ag-~D8vrN!I>TIS z8NvV;3N}behvP#8G>QPtlQ1cO2Fnxls}h+Wo>H=tHv%CmxgfBifThga#}h$uX2?`* z7>*bb&Ea`O@{n8_C=Zf3ZXR4=Ach+fC|fzMXaXRrq|0oRAP)}GCYld=px8k%ks-i> z0X~y+Odvo%K?DOxaxCEgp#US;i_Awtu@Mw+q!bTGYe8Cp7b(C7aRViwyqSdHc(G|T zwg?{EQ-|G$wmSNX)Vz0A!P*dJlH{KX<&$i9?hZ28l`0cRhvN1FbIm_ z9pQ>W+6Dml^Z;*XWQ6586Ik4Py7EN&cJ0MZa)EKe8NcFKtI!s8)?Tc zAbTR+$g)LEi~&&6XdZx* zD^9jX$+F;`2b)KAcBYZ|K%{dWTCAP zK*speg19`o4I1tt^$Np@*`N;u#YYJ6;f}yX#j$}?2Xm!_0vuM98y|-C=7Q4wz~~?z z63%e9jV6(!aLj0Oh!h!$hHye+K)<^qptJ{^AnsnmC_2Oqz%+;cZQy`FVYXxdpx^<8 zc>x4!49XW3BJrfk<_)-ag4|faL1ciy>56hDyWu_YGLy&IFY$4ESfOHl_C)lFl z(7-4c?B5`-H{F|xq6d>;5l&)0#6=QJ3KfA|hHnH9;BZrkgeXTWVBTe5A%X5Rz~mH6 zl4Z&1LI43S2%=Hh5~vT35*Z`gP+24aTLkqEiNbl?a4?`&F$z!)$R;2`M1rus4HON! z=Uu!oP!|YH=7L~gQtv2Fk3di;Lx~i_m^gN52ps_&9bbXB8!b!(Msg_BpkOywa0f9q zA~xBP8jNK462wF|9v6po5y2wZbOFGPiFA*)vE_h>11%it?di(^gj|uJJx&?{m=*x< zAwZ}Bc~~l&h>e5^TmjMq+r!3&PYrRy@|;6lqw&!qsQ@&zd0+?t%^Bq50db&@1O>c( zZ?P|q9!jPeAB z!3ywV7$Ey_abiMTT-?O~F+pbMLu?^o&MY@5plakq!v#J9qIVb||8b1Ogu+3rB*-IJ z=o2HWV8an5La$&)suSQ?VLG~cV1eN*o2ZLpkc3H&#EWgkft~>XW-lg6;tf1r9N1L= zbPX2_1$|Ruwwus~00;IaK|(_#Xfo4@78!x?3dDx;01gKKGR4;!B6~0cQcxG2AsYRNy4SL_*Q%Fa!?J zt#I+-kyL=h4Vq}_h)8!>xL07f4JfSUJ5rzwP}l_(iQ#{#1|prwA~-k?9zq4FM45>Y zf{G0Hi~@-5gcx^cUm`gmg25$Vg9yPMG(Y-XO6Ar!w3~bh-fW-+^1>>g*cA z5JU#iK#`uwj^2zdTprC!9fcEsnyEDTDqG$v) z#03ryLkMHguD&+5P&hyc3W{O@TD8CQY)~xBH#&qP3)BGP3Q85D$hVnv_ z@Bru^%rcM)69MvaRA8_RaFIP^%bLQ3I|oMxM)=}vqp>jzkR(6^F?>Z{0sQEo;4lIW z7vjSKmc6@d=~1E~RJLq#5TP40*cbS}FoslOD+Nu_0X6|5Mi4ce1kiyU@luHoj$=!r zVLU;x1lu)`9uw@#N1_<;$nYo@2uC6*2v3h7Bs@|a3V=SN1s;G$%aIV`7#aY2UL3L5 z$jBf_3|izv1RX3)7MW)2A_Z__=m;`cBp92Ja5C42=z?@cxR87q;2V?}MRh|syL;MT z06+s+uozjvB6x+lyLk$LK#D?aoV=nUA?^V88DOvhxe@Zjp%iBtK@8HSp?FTDhYK)> z0>xo0fPF3UB*ajqWFiI|1VYGBAQ3G?VZs4%$4EdKyfcUnP+i3#AlDNkGrnwjBpi@N z44ltF`*`Eg!7N)hU{FTz#w^4As5d^aYH#kokrOJ=m#g4 zU@`bh6dqKD`nZR>;)Q_ci9rHVi{r6*fgZkrKHx1!fa73UY^gIZ%tvI4cXKC4fI$c% z4iq*-hXYDZ4sb3g3^Yy31}QCk5I}g3atnt#+J>Nrp#XG|;6x0K1cck(HW<1G@ceLm z&=2B8hhum&&}8b4K_D64TpJfG9ftw29<(5w7LBJOIYJ!NIhZLS#UQbOogP#?@+EFS zX<}lCEI!Ky83v%~CBZx>1%ZG`yfB2nfS?qao<{<(+0aliRJLFNR{F7&H=q4LhRT*gOJ`=p$qSCi93;92qaA zyGmsu?<8dM0t18|M5+KF(ek-0F*^!mX=11-niJrIhr=THvU4D$;&1>+LdSFPZq%?q zCKKj}V&h2|Utc-`N{R9D5=d;}NOS~1Z4rYm69~_S69i%eIB#c&QzQ)%lwCD&3pa}=mJ7AG$!LY$>N3M4?SoyMzM&wDyMj}BSEix*Yhhvd3JZ7*L zAEaq9sBrLS@cN4`!KKI)fTyb?Xh-ElV4MRzF=QlgBx8i(vfqH0t(T+BtZ{TlI}=@L zSUL<+2nV54IS3>{ibM+}-~eDe1|!CRDsAu{4m!zrQg6C!@c;|pFKjaz=HZF+u|Xok zqg+E^F}}eOksgBZa3oQ-$H93~wz8`LQBq$HG$352B*FlKSP=d1t`cn<;|+*dAkJ(t zN)~7m*kUCS9AB`ZLrCN>ndV`kBsO>yHHZjsWx|;_NR$ZhA5sHc!~{^Nf@F!H|1(9K za56bMf(#xa&KCF~04)Rz_GSAbJzQ+aD26+L*8*Pdj^PsbU|$fuK){88K&o&de?dJ3fAbeEGRNiL7x0Wg*#&q{ z1wtiL_;7|7c!Lqh?oR-T!-Jz)=qSLx0=|p_{{WyJ1Mn64(!-FzKx81L92j zFE57dwnm6$i!wY0BfEjJbGk5OiwnHyOmYmzhJ?nEJvpF!Fa*g#F>N_EPMp8$?r&by zR>t#+kw3z-_?QV)!UJ(N&i7#(4bgh!K*JfWtf{#L-Cr zo;yy+goBgIWJh)sq1an?fs`nQElD;Qg{P4TQM`XAg#pnAS~xtA1};X{-HxM&hJ=Qr zxIzIE6C}Hds35@h4kP1;w11C?0LcM(5Jk-75Ism>f5LEq+X_N^zOKSZz|+c#@x(@; zWIG2aFO2v*1kf_@=~y_7Ba1NrWS5v2LTD5uN~XxrFqxJlqarzxSO^E{0o0!CMscG+ zE*)^nfhl5q0G~L~IS4Bxg@M0>0N@DOkAi$@0!LPK6bfq!mpu{|KY$w^AT)(L|NB`e z;qXDZEZn*KA=+Tc5`!f~tRq$8KhgM4;fAq%WNh^^{eaWqv{8)Xh+C6e=FKYJ1Uel7-bNxT}Zdx|}p`Sh&b>rk7PgwpL zlBMNyCA}?Cnu;YN#kHn^Ses%y6Q!LM?GG|T62IRF^^b|4$hxI2YL;7iVE>LC21~}@ zLgsR8|6EoSjqmOqAANaho;Gs1Ezhs5Gko;<3&_K#Ia~c=x2T~4)zi!?rtu1|m7>ZA zDN~)?O}YI9q$uZ@+ua&|X;wIM) z_JH<3TayScYIp2#HqiR|cE_)ScSkz69X2{O`MUtA>R@z9T~Se9UQX@+eAxk2Q~T}G z?>lpbHcP!X9T#7|^#sr;zR14ra^OzY{vGjW)=UlDwoyB{{At{u!@Kv*Q&6W+$$w9- zrWlKn$C=pwSs1!DP;l#<_olMgvu`y!tyis4j15tjTnvdj6LjMH%PIfgUtPCfv$YH% zfhmJg?rNxm(}!v)49E{($0!GL51$wJ&KT{etZIG!I}5~&wK>om|6bl*MHNH)(Lu}l zf`#8-(AREmpLxWTJ8%X42^nQ*0a;HtG46cW3BFAWP8uU5KtNv7r zzV@J{E&}J^D(Ws%mm3|I@@LEPaOW=ju|nf;s*WY}euT4v{IU9f?wZH4rDpb2>XR~e`3psVXt^=_4xjn; zj~v025~lsGbq}Ouw3|8GwLN~wkWoK#x<#zA)ME=@U-WZ&_kC$3=6&p>$HhG-x>6IEwij-W9oDpa*ZX3;>-OH& zGd?9AH-6sCx43AvfbfXNypIvSqBL!Ze>ku>R{PJN7|cIu$HBy8V)~lmv|p*q!++sj z8FygQ4XI08iO1)=+%M^i-?n=g=MoM|R?v?vw;kSRs)Ac)xAWG_&#&tbxo^Dw{nJ1T zOK*WUVyRhr|7qZfSE|vuE4*Lb{8=Akze~7HGFEi0Zh(rsDz|1=E;n7&%FOif}%W5A3WASi#-FawwrD~H;W03 zvww|O)otB-G4!!oDbXi(*nZ#3flqBevTqqagq?m|loe*tQC>r}YAZXo*^E@|uyjR1 z*I3)$sUL|SK273bMNA~`#a%(k-gb0DXsEZofBd5EJ~zYK?9kZ#dkp0Bi0{<;Uqo;? z*7c1y@-CWd9Q=ajY%c5^aCBP1&uyun|1A8#8-FKFgB;Sh@}-t-ao*xxT-kcZk@Wi- z&%Qmi5nqi=#6%$e%n^}3v5T>5RjOabz53zw?AC&sa^|ixMG%F(S9P(Q*1erC*mYg8 z|Lw-QftWo5>J!5;`<*Ca>weAZOTSM#>yO77{nq>SxOan{cyv%*IZ4{I{NejO_Xa7o z5mQ4As{hRPRaDlfC7Xt97>?Fz$12Zj;yw87fad7*Jxq1|31`&|nkf~S^h zE!XZJ%err_wAE|sy!kZ;wfWrz3r`nkUYT4@{g2KlRy?Cux@O9&sbOMk**j_1vxsCT zb^DnoD+WJRC6^Ie=h_23w?=NT9!2m(e_p@bze9&Dcw2Yr%}xgGd=hq@e^;7D9*&(w{thnn z`6c%t5!v$~Iexr5dwc6`zr|lU!j8T77MI*jUh%Ke)mjPyv?I-*pNmlEPJU3WTE1_5 z`3fk1NJ96E3LeV*xh%Wk;e5ds_Sk_3kFL%}8J@Se{_|)*-x-!TtIoriH?w zbXxU;DI^|&tXs1yPOrntb^84)hsXYAFfrx9#gKU8A5-@Bqw8=nT3z-(VHTPP3BBic z-(D5Nbb2Rf$x7L`Rk-#2Zz<_Z@yDI>U&py+Z6AwEr%5GttMX0{)N0`0pAe0IKQ|ZS z5vkY`QT-tO?O!!?=Yx@fVwdF`*L}x7ANz5#;>O1HS9?yMbZ)9X{o8n(y_S(6bP}_Z z@((y@p$d6!Y{+`I4R(Yfnql_2>)fYo|M|(Bp>y(5kF;RRfulEAbvs49$GvA9c71M? zjE!HLyW-%QNi{NZ(~{dtA81ivo0)hYUjbXHYHshb{fmZNlfgNo(Sq{aH1nA%aH$v5 zP1G4ZntG3`M!&1Pp5K1Eve%4Q?Y6xwbh+$iIGL}~`n&y9Wb8MvH&?ROIkM1X zps6aum*Mf>A6?)HgY|3Ga#+4*9vz>$gnO8<*etB%o8>d#sAt!S{WWX1#r)B1IP#?CE+$eL(BRV>!kg@xJVmmFD(CFSG+)MD15L))iD+nnb0pv>g_)k4_)D8Ts5c zbadexHd%3}RX#_1tThGqIwk&sIYrB^@8bqfLZ(9QQR~Il?-S-dnxz+GKb@YSt`iym z=~}tF(a2Tew_JMtookR}d&{B8f_rz*z8&-yS39YdQk>m4m;-A7sNFTP<)E?q%Okbs za>r`rvm1w=5E5=d^u6O}dJL6SrHlvPTonR0zo%z0$21UxM^GDL``FB$$ zbB`RxPkC!=dXWjlZh}(oLF-o)8hWtR+vlh4_PHgcQcqsnHn#Hw zah*f`uU}{I*n2!>!;ea;r}`-|+g4_u@XW5<7}_MkCZ|5wc$SL*8azen$~iuIjTsgV zu1m*GbmFh-TT7FdA3+l(?FDtw&mA2yRIZI`muH!DxcB_F<32vqc9^yTw2A0m4JP;Y zgkE1zel}raKf6}yl|VX@2FZQ%b#7VL<<$E{Q+K}azVSOrDF@d?*kyR7WwL&xpF8|+ zll3~RBrTS&vwQSnQP@+TrhPY6*Bxob7ExQZORxFIs&3Y4%OI>s&WQ>cF8IF4D=pMC zv>yv}nHlxXU!s25uosyuZ~18KLByWL9tJ7tTSeok%zVf??1OJ*nvR2ui+YQsbL%V3 z?Mr5^{@l=+Qt|7A<7oK2b7rbUa`b}louoX{%i@`sv0}DC#QfP+;JUTZqLP2Fd)MFV zjHS{&6TfaMhbyaPq{1$2xupiyDj|ZS_g$&PUhB zf(A+;BRZvzO^E^tZar3V`ccUPWmTc=x@=N)tbhM)r$o}zyebcwEt&ECjb zj;GkICYAY00pr`OkBryHy)6y?XqOzlE~kF_22xd(o&S08=62T}tLlfZ$3MQEEq-&- z(*9>(u#r~ig}pgJv%Ex%(;C0a8&*~M3R1K-dDW&Q)hCS9oUACiK+KnZIyIZ3rDmd0 zH_?)O;#0TkP{B|j`9oIi%?r0a*S;;fy!IKi191cJ6MJ zM_#EGRH*A2?ZYA}Ml3?BxcGgR=l#1ZV>i#K{XdU#UVg5pg(OfqE8k~-WKox|=4hn9 z!ct}E#GAd{VJh>>1&$3KFoLDdhxL1`Rr~wqFF6L7;G2whZv24lB98J;VHc zD&(%cxr*DAmtX3)a&x8g!0f3|zpge_<8t29hZV>1#`dT3+k7GxmY1aCIJ||rd6NMX z#V&J4j}06D)f%cmYv5FOLcdm}-3e>?8c?O@E(woIPnaHE=Ls$QD|!!B%7Kpxc<4iJ z7EqdHGt1Pf*8EkXRcP>+l6R^Ezu|Pl9hTp;T43u|-cP>#4Ni7uyNsD9hF@s$`8l85 z62a_poiP1-Mh77fKCU$JaVZ`q0Ki@nOS`JTIPxCQrj3M_TCBz&xnyc`+}j&+gT;0z9K z^=&u)-P+S-w=O-<^vCZKLxbie%g0NG^9}6L$rO^=-&u#J+&QDBS9NyDmLRA}=`NK6 zcg9n9*qz^FFq9hBbF4R0Gs(OvETjGJ!FF`2t<`RMTe})Mg6=N2Q2x*be6J6NRSWyZ z#ddqQpQS2)TNLXbHfiP|5*D}RDa1v;nL$0`e8v0k-LyJ!)5F*tgo2UYTwol!5rFE2 zD_0f%>!FUS9Pl)?cQMHty|v!pV#AX5N$-G7{s~U${wgMkKCg?H)iui-Eqi_~6z}Z3 zyu{sHSy@@q?P8)aEwOJnuCSS2Pwq~Lv{Uts{q*TmcTZ2kDc6D)!IdvpdKXG2(r^{A ziZ9_KT8i?A%F1%c7V@`VmL5OYN&MP-L$M;y^q|=OaZy3RKdG%EoVwo4A5BdT;^^qW ziD#DwKbgyoevk3=_3fB-N{W~oZY0%k9~ZZwR${kJAZ92iC71H>o3X4$ypoY zaPdEr7sc`=tNWJyvuawdfz^H((5a;%_#Y49<`7@Fb%Q?r2H}CQqFQp6{&t6RdrB-E z+F2UQmMsgr_40SLnWa6JrD$%{fgMUS=>6XNX?WOw(Vw66etM+!H(GtGQ7(|{54PBe zfA{{*Sb1Fjv_XD?My6x!;EBqFLn?Ia5iRQ-oOby{*6TlSPPe5iQp-u`}N6pPeK~?WZt$# z*3`y=U%glGM(Rne0rcBxzxk36t(D*G)~bA|GYH2PD!1f4G&g+rub@}i%2i+_HC}oj zrn20(f|n=&%eZdt;F{dH&$!R2wu)AkDm1v}!)9-r9RaVT@*V+?Eca3V9tcZt}jcux_-%z-Q0KP$ds$>95zD%@?rbH@q*ch6M2n# z3&>S}NPEj1{ci0N>NRP7o_iG3l6KLxnP7r{c|pJa_7DF+&DQqhAO64m;DU`-9~u}- zdx{2r8}xNa1jFXX=WXj$KOaNmPIk5betfJRePv!ebtPhEv1tCvK&-=eddQ7=WxsuG z9VPqRmj6E&^5Rcj>W+B*?S0F4=T49;RK_89B0UxUeDzy#k=1HDNIX@;ImtKI&`fj0 zf{KA2Hq1Q03x|l0V5do9Vnu#~C4XV0nht4J58oI*yk%aprm5`;!y!Z6fH} zzOGu6H21T|GH0t?*Y5L6ssAwBzw4S^74B#~8aaIGdFO!J^T=w-Q4@ZpWvg96OiI_Pq^>($ss*j;NpmZ{ zy^Xk7(&VBemv6Xj-F$hxQp?oKz2=j1A6M%CL2gUm1{9>yrMnmYCnkb@4L7ytCoUuQ zvMdy;T(%#v7?o^O;p<;~e&mXCk;~}g4^vZJEf@#QpI_&HGxRe(ZJ12q<~K9)cDHWM zMcm$g$HAcEfzH;D4F`3DFvY7|Rmu$$433c=MA!u!VSk%JgFBFvSP*8UU#m{wSLezn z_r6cf(_N-zX4FbhKDX_oy%W(LH`0AXZ=0y+NZBS&3@7Asp(;i4A>w#(h52?T{~(r! zvF*+Hx>0ZgQf?3A>E_RTNb7aQOiXIa)Z^O7##&A#4$_t%rl)mB(}m#y2IO-A;<`fW8i*YO>_a6_pjkAiAr z{kws26=OL`_}oVXpVLm^1&+18C+=!Mo^2*XMm1{@w#_e*T*Uw_{ zC)CEf6;<+#@?S%iuG5GyI$RO5{!7u--9L6G#FN#%Xr+%t>(o1{(XG@In>;&$x#2$o z0-(rPB=&6knE>Cu&yqH-NlOL%-X*(l0ZDj@G$plOL0cDTf2y(TObjFZr11{RcH`SZLG{(j7atDhq?>8{_ck{7NYP{HHKxaA**gZe`KrY3@bS1qEaL?0h85`g zH5{iUnQJz;WZMouh>YQ>%qhH{oriKegT>;g%i)1GMV@|sN%#N!l(#TF*3)e6QJN)s zd++46YpVB)j|D*10)idwKS<=YJq3m!AD*jYE0r7ZF5kopts%|J&KSRgJgnY;#^|C8*?%LI(C& zY^?aevPU>I+F8x(eEY!aTWe&_U;fT#L&v)X3-JwT+zv8{>axw&Zh}BvV|?B_k9VQ(#GBTn_xho&y1N@}xZBNS+xMyeY~NZ3diPJ0QiL-q z7U?EEO@~}033~&m4Gn3Y)nZstLNLOpl)$oDdTzu_nej{*Wwv9g>6+*HYnT9)bU|;S z6zzW6i(uM&sn@8GbUDH4(;ll+cPx$_BAFWM^fBWUD$;X2PWM2H9xLJl3Ge_YtHG+c zxWZf9*F`fmuiIs8{d;)H+DNNapC5kAx_Z%}KC(g8;@l9cg}FhnKK&6-Id8F!G@4zM z^W$f0+QH$fis+5pMu(y)-CX_tfErB+?>Xd4#i>W18n?FYj*y57d-7IpJ-cAqOG~+d2C>@5 z{<_`z2NR@BKiH`)%|9QVGjv!lJT(9~;L`r-s#0I$#^`Razj=suw2$>e7ZZkPfqxim zPr3bVQFrsi5t>+h7jI0673@NhzK&&S)pm5+CPZ^3&#YWiQY>v4Ohlp2y;qlV35Sj- zQO1cmM}Jg$$BH@cf^qqs^^bj z({y@dw>=WVft|0v)MrrMUX5n-v!6L&ho9Z9ICX}5@Nr6wxO{Wm16O05PD`HKF8%I{ z6~-t=PsPK#>-0K1QtpWNmF9TuMPMpESHzc@qKbPeDA6gJ<(t~OVK>E1x(5?HpXLug zs>#hKDUysWD;086T_|yLji;YgQpZwW1wFT{+xXQVAJcbaVN>St;0$bqU{0VQn$Cj?tC=3pEe!ly;b;SwZSsa7rwDZPy z{+l7?i^&xT{p{5@jl3$()wK#TPk&THuRAcxf?uY7Ir1`9yXcXP*~X7$c7GHXbsI78 zN`;&)@XYrEuv#2B8a6sANvQZbr54Mu_PCds*S0CK;pwG)D9;|ngQasUCHHqXvee#r zmGxb^omHD>>NseWQ2nOj^o37?FCY5Xe}*>-Dw40)hZW$0zp*UPXBIEDR9MU{t_i(! zeBeU+|GO6XAVlXr_~>KtOT^sZo`qKd{w2ZCZP|BtO&iYdKcSv+`Uxv@al8?=uH3V~ z*io}~i(i`wr;x}1a)mjnp!8&qkL!w1HmRfdaK*VR5gT;g?0jO0j=@yD4HYz=P*+yr z5Hp+B2E4oFq>+l-U(4bYt`onAIzDS2@Z=aK)H&dr&AqAj|c zvGLFNkPa)>?x)p*V#lI2KUBJP^lpOf_DV{-liBaPgI+p^^9(T=tBX65u29)HV>B)@ z-ptCb4PW(|mELnmDS|ZF zbQB-_9vNM0`KeVf$!bLFe5p`Bu1X0Zm>cH5d#iX*VT`~63ehDow(@hUQcjfrHqUjK z1hKq;aKcM}xMy~0cf?rno7FRv@FaU4s5 z_Dofo8x()35cX>6H-3SijK;%FHzr1K``6uUQU^|@b4E&D+1ufuj$C>xH;I|-cZ_=p zZLxPhLNns&?TXM1b_jT;lYeU~gSff!RPoXDxwSpYP4WF>*MqL`^oo1`B3CDl zmqEz+S(;9^X*gw!)*pMN(_@2KbFXL3+6`xSC9OW(QJH=2E~m2C&Uh~9AVv7iL2p-Y zmwNj_cWiH0g?CcQA^n>dNLiktev6lat%ao{{`$hs3HZSCzJF+?!4$7JZ?TnC5fbrf zZy>+Y-02|9jDtMl%)%Fx=Sw}3-Zwq8ZrioyctLO3X+{2+mOHfQ->8(1Tm@kB+*Wz= zT5E!L(MqTM4WBP41bzHKXKov5PpMH@**;O$?e%E>E6GY~)0^R7j;T0&+=Nwm;KTKo9KMnWO&DDFdjXO15}{96(sKMJ;c+2iLG$#t-5 zkJEd~eQ%jNiNAH^te)&izLFx5)F%CNeX1u@G*GP#B&{0@LTmqZO*qNEg}T%|P?y4; z!8;sFb!#`Z@(^La{_%g>Q?z=imgLRVReiU8A2xJ!Ec@7$aro?|8qTKmDln7M%$9(m zk8TH5(>HGUidNC6%$hHJ_ug*1&Xwej&hIJvUk=M*d(76lnO%P=JyTHQpMz+m^h3MY<7eJUGJh!ZK3OmAl{f_iv9m zf97j%&``CVkIA=}Um+67RivcM zh3V>5j|#6%AJ6rPeATw*&4sT=$0qKZD0;Y;Yvn2Z%^H>%K?F(fqqoN^zAxBV2#H_5 z>U&CV!TY;??N=bjNDYVXo%F=EI$ES4j%Zy;h3q)$cFFe{O2EcZ_AipZ>N9BU3x%7ZK`y)~BCs)u^H9MZw5?BQ3Qx$SM$9@ljJ3=`It zv?Vvqn7FMi4RI>Hq_VphGBU=pWM-(FTC}xZd)$_kAy>%CpFWl6dCzpi^xG@m!x-4n z7Uy%Fj{YLkERJ9>fVpuM?Tne1*2>iBr#HEfy@M{#9w`)VvRTWzGPQPK+2{|7@^0f@ znj)o8lZ>=(xpRX_clQ5d=&>ei+~mx8yopAF#!SWSFy(z?<2#QULbkgZ%4?9nO zkjHtMG~88uO(oUFK7F@PVRdI&_JH0`^*5GE*}Ig!eg9{V?WsLBr`2+jMfK%M&HGgq zOp{rgEhzPyMfTr zTgtCgpHQ|6GZmf53_F;vZrPeN?lH?W!^8`H24Td z&DSz0Rd~V9FLVf0V5ZB*?u$>6Uu&p2n9D9qJH8)di;dMXVT#OF+uT|?)0rsw7G`>M zi`{zbKa*wG&34W1PnaBD!g5lk=OsM-u?lf5(%|)M^T2?rsUEKBrTn=;#l%XWh5oVB zZR@@nBd)*lCM*tq&T`8w?RguxvR_n_cP1lcFgU4qmm)U+oo9C?Z?8r=HcPt9da2IOzR{3AUi4XS1dv`Wf-YBsULd*XYpCU;ncV3o@ zw)QW4IG&tpUd8*5Z#Jp6*0iN=HCEDe?McEi(}&$XLo07RPM8VYxCgQpRe#v!bU?J7 z0ar`$rkZbIUa%caTg`XR?C0TZZMYe8Xii!DZIyw#Is3u>Eum`9SJ}3d7UZ0IzXfli zg;O5S0@adRH{3hC@=!KbEp5(X`uq3ht*;%4e4VUj8+*Df-PHci*Ucu{O1VjLQ#-Qy zwJVOal>ZFmO?|{!ymm6$fRUWg_p(}=H@LqgA-06JGr95BYzx!obw5x(_N(vDLA49X zj0~o?!y}GPECpL!2%}eIimPVj6Ls;=8jEwq4^VpOr%PV#U$d+<#N@aC-M7%S=jjN< z)xdibgFcs7I{RK|;awa2P3@0Gy`S7!+*(vP{o)dklZQv&P9}eiK;43Dey>IPk9A@w zSAmyI#w*Tlu6@nxUmkk{Ye%)de834+`Rw|x3t5+s3M&OZnGeWjHNC?_3YH(*{zMOa zx3H+k)H2Yc`O5h2!FSDNuZB}>qja0=btr?G7(?BP;Dk-b=3{Z1XYH!r80N;~4?l^m zSAXpG{mgO5YUihG7pdFTUDrHrdw6?ZK~vAjFK(HV&j%mNA{9*o<&;Mg$#gY&4=UhfKRENp1ggKN(Nt~@{Fa!;Lzdonzb zv+b8^^U(rTt|KvJ`YtUzk5oOHnyy+@nKw~x*iz?T?RfD>&ZjEt=BX)$&6x=`D9hCR zl!l&}BX&P%GcbMZV{6kF_@`6%*;OI@>Swz<9|zHyYnYQS22p#TA_|337798U%}E5K z>BxGc7X!;o^RbRZC6;qbPeeh$Wc}H>*)7J! zE%-gJ;uWRGX5UQ*72i7BLx=wiwOezkSoG@fsq1?e8(z3=sjUys`2V6>8V9;f?K3w6 z){X-%D5}ywlL?r+C)Fj53l>&e==p0pmw0Kf_?Xej@&9scP65))ZvI@bCAGVdyt0GU zmwk6+Hf5&e=rT$8+bw;hwg1!&Dr@HIW-8S-s|;cTHg_xcxpFDP`6dyji{BY)?eOfzii~a**L{W> zqW&`*GQA4jR*vO%ILoI|A@u!A8ib{aIo;XoIo7R-ul&lb(3O+Zw}F3aZeKluR?m5z zqq?wa{lLZ41Mgi8Uj?K--sI?|G2Lcb`BMA({KnmmQoa(VTON}x?=Shu-{26o_8wK4 z@~#Wx%vO>MSZ36;H2C?A6_Y28NJZ#1Gd#7pxMhXtpmkOmU#8<@HuF~MCVbwZ`{nB7 z!?9TeHv&3xBl47sWOZ5MtuBYH+=yOmOY46{!LzoEFqn=`^DaM1o}^n~DRkeq()juXF8Lf!!^fVn618qJozBx+HuO6+U^`Xy{f|WSufy-cjg0K$cHdMx z{5b2^>Mi$PM!X*lj{yPTjMM)K0IxdGZESzrKl9hoLeJgd`%eEj*rM>V8XAc1Z#Xr+ z*2=0{GE?PeUY*;TxozJ2h{MeDxH6mtJNK$v@k~3ATTBXQbeIb5dir zF67w;!a5ZaB<&kyq-AOlM(C1>BLGk^VhG4Vn4jR4%*siqrCT{bPR zdYR!B?cg^r4Hlf|c8(+j)d|G#KWccErWk)@969+XPUW$C{ zj%|S!y1~9|SVb6@Z@Dc0TS4>iYV(pj!N}A^bHEqPwl`t3KglIi_ttvLrS}j&1cfHn z)vU|qshDNzu0FPMxpN!DBqld&{j)p2G2JGTx92bEqm|!xw%+)4^j(;lnf>k?X{{Br zk9VitdjF_%WI`6dEBsIV&Pg7ZI{iC#vtHAmfEU-OxVV}5!PDkFkRI~;a){m0M`h^+@iR2{H97aR zux~82#){MwlRe{W+|D;^9=x*^a>wxUrwe}Rx;uyQ25NVoU8X6jiUZ&Ov-ipK{`*(< zPna2>_Sle#@pdToE$;5?PM7o6v)cG@`q8JU7CxNWjb8CuHJ6Kb+ipI!YT$!mPhPv1 zadN7?{l&WvpKL^jz3s`o^rJL?!;iPq`sa33cQ~27x%PD1au589b*m=sk2F~*layCK zwp+36arT+;Lc{ecY486+$-?^)dyj#e*sGaMKJXHp}cBVs| z(UQ)0xm(}^HQuc?pG7!r_pDEODt|W?Gnv|WLA|pvvg|{U%az14%~jCztCdJPA3QKI zgv7zT?aNP{nvEM{-r+Q>zO!z5S;sy8+eBZK^uI$DSc%@f*4c|~aSz!WL}mB4Sz9XS zrKR}LPN)^M1!JARqukvJV53P}mxpoG`vK6t|K(-cW9+ahxgGXtJ{p9!Gl#=7>N0*@ z+xz5YZ_c(wNKdW0S%psRpxmHI>!x!^Ngp$@$m${a$%G1qV<}kdkP7PHLfZt~jZJ!|Qi%i(6;d!8RX&*Py|imNp$10BWn z;+Ede0dE``3~kfpg*KuMSEq(nI_HvU{zs)&)+}rpQZJPS8~L7nOs#QdRprXKOS-~@uRB^TDVUw*yfqb&x-0c@|Y-LUOrioQmLn#N2$e-`WoVL33kaeea$VJOiz4CV>>YY+W z*ZP)9sB_Ke2HmvRFDpJzx4k*Ed39$etga>SfMwoM_pb>%r+L&oF&!JXzs^ON7 z@Vu^tbyRaOp}Ds==iSv1`IFEebEImkwl`Av<^RLhTZY9IEn9$r;O_43?(Py?gS!(5 zp2n?l*WgZYhhQN<;{=xg0RoLXjT0a+o#fv6-g`5@`d6Q`&z7oHt5)r@ocAF+Jpk?G zpiE@xhAS5O>H=8D!%W(E@$$a!Jkk$Mh5Oo z27$=~!Nj)FW9lqp<4F}QuQ7k02M<5EAiAF(#Zlk2Z~q{5mHNtyNsjoTxVsMit5k@r zmEHKeZ{HMy*Daz2g`Wk)#u2(M ze?={J{u-^@j4E&`OztXDZvHw@GFHYt9e$h3$%WC2cPIhJXiWe(scW~n6ZHn5|Jo<+ z4ZscsnP7prcS7; zs&Av9aZD$F=R)q_<>uhAgl6PpnIFeIXZ~ zk|v^CN|9K(JXi-QM@Q=Ti&sBaAr!adm9l&|{rA;Y%Qk&%#J|3jp`ZhLxERv1M6FRO zr_&{IB35^Si#CG|l)hy8xLkK9#1I8$bO~#NDI3Qs=EHP5_2E-It17(jzO@JHM(*46 zZ?{w4oAG27!$)M0SO1o!pb(i_U5!(GzA|^~=tSq;W0OkI87_C`h{8!KX|IAIA2|YF zK(CP{WfK_nVU(%Ddwy)P$4<4GAUBQ-GDosw9vXIu8$yU%3FEurEH%?z*kHv{uuj5E z8%c*^SJ`IKMwb`M`}!}~V{W4FCQseIw-?Mcgr?`a|3p${mcOx3#@W(kntLbBhrREQ znH%rG(nviP*r)D_MlXiyem9ZLDA+%8!Y*Ua)J6cvgL~+4hYp53@>JSgOcxNV0-pW??Y=$pm6$@nPzfSRs-g=L^}m~!sIBgF_&Y2@X0XV zWgP|{VMpiQRH&@C+j4D|z9@y}RcS5&*nf<$%76uiYo)w?%0 zQR%uQF}m85Gh0FWj$#`wQXl5RYB;-KdwV@Qj|z)vLJ#?9`d>jMboL!uR9qx6R=;tR zwgi*J65~D=#+5_k@u5`Dtcf;3GU@#$1wi2IS_G|fCv!SD;pv#DrJjUjo8i``-BA@d ztkOnW-@eBQQUabyIyJoqzq+1H{*yqJ1YVH{{V`Ij=5fSx66{GEh zK76(24TrO!U#P=EcTR=*3RJ*uZ@{FmCsM ziY*BKVnJWH4ROJQ$uar7L=Ivm|M7`p#_)GrFCK!!uu$Dea-liWTTAW<29-}W9XaK4 zRg0#lr%VFF?kguvjar_Qd|0Xs7vG;5p1|epv){MDk)?6dhVhQ`_WgG41Mj#!)hJvk z#y{Ck#f*Gf`YETOg3C4rH<21v{c8x&b%(>2;(U4U6wf>rp3n^H@E&+&v?^-JGwzl}KZQW6fpN3I zvswp$R1tFfns9%b&I`-@iIhfiMn3#CA5Rcx@~e79ht8vC9kbW4TE|HVf5*!wL$YVu z_j7$xl151s(p0G-lSEPLU@4=ifrq<0Fc>i?PP>A9slh0c^Jf5RBKbKUfcm2qgNI0Ed z>-F1}=u&oeh)DoHj(9?&x7WbzkH9%e6enSxG2BT0?8sS*zUD(uw-NfcTM=sK7TX1U5AcHBvgwr1h6`-$-T0D5jYJN=*#-97I7%N*pJ!!8z`Fk<@ z>g*SPL_%!7752)k>?Fn?`aEF6J9ELJZqB}pm>QPYEC?TedvRwuda)+fvjbAT%W20g z$QI!8n^efBmRK=&Rnt%_=7m(1E-&wK0XJvD&Kya2FEl-u8l{gXOb z61nItH8Uyqr!JIpa@T%m(OYQnUd1Gzr8bGv{-EifVpyAg!|)mb7Z-!%TJ`lT9?c=2 zh#19nZ5LkCXWB+@-^~L^-u1`yC($&qVm7cLj|;&k-6UB(OJpb3YRKuv3v3|F1|y?b zyB0YGYf!5j_gNObj1lASqCuE{iaInoi*%&vQiDgyq)pL%dPsZUJAq{qRfRJr*F6#r z42*AduPHiQ2zGV}i%RTZZPFrI^8Eb$-S0PH$V3`3o0Q<@YhvA3F69r%kUSo`){jC` z)i;wkzecJz6w0!dAwjieMb*_LZT4#YJ5}>sGyC$t!Qoi~o(SXPtQH|KDHd4Ly-BDr z3bav>zWVGe$tyOotMjG4dCE-^X}t{kMq?W?2@gE-d{ZQO5SMX6bOb0%xER)0z*U+B zduY$ae|Gsts4{;>mY_Gzmp}^jw4@gIm3ZxTsE~>n!7y~zD$L&E)w2Uu+jjLP2lGIG zq&kLU3ZnAlgmz2Y0);UP3=QoC?+uKX9DQx)5yI0`4l&ZNFVXisNaOHa__|a?XwBx# zDXRSr$umC>`=?(XD})+v-e+lY1oFhFvy1PwFpm}`&pLk{tl?4&ni~kgp?T4kXTT zl>UG~|bdcOHC>VE!OGF)(T|N1^Lfc4?@ zQ!B2@i$gtl`y_OZvjT8^KYVEs6fi_gBbl zyaiosd;7VxtfC-}97d{RmTjq1WM)F+3R#wfGsYX%>Y0@vVeZ>C+`d29c6K|P^$Ih* zaO%|FZ+#?n<__ModD?yHf&D5K9S5(km+rw?*YkKgu&w2M49z7nad`E|3f;bYd?ipr zY%IAPVfuJ1RO7Um`YSmV`5pl_dIZNUXToh?So6fA&xW50FKJUMP#jtTr)9LIVCD{w zvCwAAN?&6-r`IfNXs~dS7AOz{S0J*Mlo$2=gaIl*_A`r8(fwJp#PNctvGLc%SzhvCn51LT|<) zmtXx(j&BEIkYXnXKa4(>`Pf!Kh;1FUdU+QmYrLM}vYWS~VGm52P>N;!Ep7nd zgRA_x>3(b#%M&R$2KdqT6-$2Ond2*~cZTpk#KqrPBodscg|5sqZi%mohy80$*b^0O}=|7FSJy}ro#Vzgqh*kT5Roj5o z2alA#XhoO#WOGfl(xJp9Gc(Nhy^4Ck=suzZGLlqVTveR*Su1$jlsD9%1c7;~K)MX= zj=xCT|+H2+!jOz8t1Oq9{#c z9r!@&lQk@Fn9|6*eahK4Ve7YMJS_8|O@R>D`2C9nKFGWL0>_zr}IeII+u^uuDXvDsR(jfE!i z1u++`8H=3WvEwppv#0CACMcQ>PCx61cg{0xVM-b#DAB=H%!iI&T1}f70~qaw+xa3TXiytoj@s-n`)QqrzLZW{vXe~dz!=6w{I#a7 zTtDYTCfPsWNvkI2weXRJD#4Oh&>+(&SfF{UTT)>y#3^8?e~qZ|P!UrQ&PYoM|o7XHGs-GmxssoXm)+ z0$dFc#_R?#KeCUIU+ooKdMA1n{YlLHPuYkfAn1;9%|GZ>L#yiEPz(#@H+|A~7>E;O zbE&f%Mwqm823N67E?3=3!==$fTj?;9av|{}a<3e)V2ZFcG_{+J8WhVVST2g)Fcv$h zIZ=BBNrZG*r%#84Ri@=9J1(;LTnGdSZ5L&fOM+fJ?+=YLvUuAFFkc`zKv)>OkDBiN zR#V@9blI|&q+nS!5skBsYZ>an)TB!d6x8i>fn{R-Z^;IoNk12Vpb8mV#IIyy1;#x1 zVIQVO57ITZ*TeX96W5E05^!XN9wBcx?OPz0G{KpQFSUb%jI!g|X~cBHqm{da+6-4GV}2XSoN*O zKzm1RDz@Gaup!@^);uo=CoL1z#lO6Bp>_Ye( zrqZosmdjM>Q;7y91i-fA^{>~JIYQVYd+c&A-NE6Dlwsm>()AhwXpZo=awzG%&+pz*vjH7**4ibfzdmtk^3VS#XAN#+VU5(#gV;LU0*3L&^T6`l>@7UW+UPOG`x1 zg*SC+un5v?GJ^PKcv`j%pvuI?-2aQvEWU-X5H)US!U;aRAnC-P3%cMciTl&deImbBU z-yb=(k*9y{ZzsxMc?$O&WESY~{kMMM15!K=_!sJT35d|wwrWbwMYSRV)x2VP^3UwI zVhj@L3_k+^lr>zY7n;^5^>T zbCUQzQ>CbvG%rWAOpzr0h~X#VEk?ljNQ!g!>`~NHhlqGbsbFv4@Pj)4NxAG@IX;8h z^gCy0+xr-L!L^WJLjjn{gb^&|Tx^tUPnXiO0yDCj21PwvV(6g^?{)c+h;EDlJ^%;0 z?R0`Y@V7+UYo*<_uvOFF;m1)e&xaQzx+>|jes2A2{o7x3d7x}*Dq2h=Up+mGDSqhV zfFIu5l=P4?t;p4ssN1hWY@G)(C)E^)(=`o!B(Wd@jlI9g=V%CkGke7GQ1Xi#zN@6Y zC5AoW`kW`q|C_tP3e}<(>wQ=>&xWjZkB5K6NZNN@ZC;tsORoDYmgS-=IQ*)Vrnsa8 zmQ(VP@Y?5tCsN!5s5(~GMgd*zLPiBY5Zy*Vy@nzc4NT36$%toLiAgU1OyyVexlvOz z2zSM(>r%$V>zB7lW%5Frtp7{=%asTAr|;h_PG7pBNrCEFLNVxL35v%v>xBxGOOzb;v`oV5+Q6#wrU=~)d zt&`4qu#c#wo+-=+Wtb1FjF*byb)(%2E8HOoq#tPT5}T{#+W?iegDu8Kx**RhLbtme zvFn@bKHPTd{OFQp+wFy4p;HWO<~)?ENnRG~HRr`G<;ca!h2m-qY3Tcf;`lWm*`-W) zXz(@q-V8k&ty*|3Lngk93u$g39ob2GDUrd}ju6b%xh~BksI||L&5&uNplWI1C45)B`PQMZCU$e+7vHnk8`5#jT2bJd_ zulY+07HpUgz#rShWoHn?O^)phSd=v;0Udemz?{7=!U$g$a8)KjGy_~!yk(nNsyr2r z^IIBvX;oF9jB+$(idQ3kN^s`p7y?GUE)~d~ z-I;pHEk;ggJ%|T?ko&o?rnZ8r4Ja+Cr`xChu(7zIhGN~cuJ(IJo^K_&AdKlGx)5L! z$w;(oc6qKJ9(H>Suf3c|M>~2vR(q;GR$(Bz90&6F+fBGOOQMayj<~YEN>19ByCP6W zjizQ1RK}DqP*U84nEP{Mz>=@JOO-#eU?TvFyclk8!wdJTCITES^D-NcpJ?~8=KAV< zM0woQurcL=^|wsSnU$6L+m|_P*>N*tet()hwfyL?=B9(=V|YD*vukLYap|W#pL$?* zA|tb|<%(t7KuWB;lL%P-22t&r&4xyt$1hMK08H7Nu#^JakMM3(*lx@(2tZT?=ud>$ z@NP$atRFtz=NS9{DH(#Ia?ckXgU3h4i#okifX_4$P-X##X3S7>jd@+kg)*Lrg9BQh zD*V%bTmE*U@h);ef9xHDre$bcJAOwV6N_6@)6(wv_R!O2iuJ+45mY=s;afRtLt>}x zQ@I#k>$AYH7&V$SW+ScVjjmt+6=mLTQs(z_?`H4!T}v4?>Y%3^Wx!Rri{{*d-g-=Z zB1V=CGI;Zq)ht)xM;TLsG-QeQl4wDsd@=`*KD+R@v++pU`GXFpXc0(E(8bXR1Sc9Z0z(h!QtuCSr#Dc2d zh>_UB$~LjZDG!h1qjr9tG{kiVSo$oV3b`FHkr<24u6-Y~GuOk0Wu?JuF6m^-lP#cR z_10$0V3q~G^W`w{IaSlt?!IUtywcLzlk*K=+?zCt-!Jf|cr8Kc|F&`xZc=6G4Yg4B zWF!;5?9Q7}?pg_Zl3Jb!z+5GHQ{n^J9Y|4y0J0u5s#4>OzD4J>r{)u@VnKTkUvF@s ztZ3zkM-Vw0#I%m%;8H0IP!q*%JHOoOh^_jg6;u?2(`SY#r*Qe7iJkoHOc+QN$jx`B z6FU@P&Yc1`(n3@1yeJVeZa)@L)=Guv7-$jpmSma@AmPsSeW!%AqlbrZ|A#_^CZZn< z#qKwG?}vSF?r-Ak*u?K(7sw@|>+97gvLw*;GBQj)RMgjF2*d%CCHtPSkKD|3b^FkT zI=^DvIMaBK)plT>esNFV{_@>v!w=&7BIMEG>!x{_>Z?|1GR=N zSV#z2z;{1eky-atrPQ)feQIDhKB7kqaX_^tR1JMYbY<-|h`)bJc(vZ}7-nheOv&S2 zU0qpx9%W+Tlqpz^u%QVJ*%)y=TikY%CSKQ&Y=Mc9L%9IpG`tg!K68T|s?qQ7aDRRF z`+GZNCrzWcv<265Zz6QkNuG%;Y|?2UrAuTYM;P}f3}@Ql-9|9wtlKMH!-s{aLHd4s^pTO3IGhPYXsgxS7SMWixmwXqQLH zPW`8Bju*RrTsZbvDJas_7-^I|%(<#-&!M^$mrFDIJ1`}+TuMCee28Bp{WoAJ^)f!c zsB$VZNoKL}K z+KxL#l`QT<#$Z#^iAQ1H%#LA+%WA5#K#U{6v3b)f0Og%279&PpsWt%`;zxR6_>B5RYMG-N9*za9C~3u*1;E)5o21 zwHC_b6m*?RL_dKr8jabvTHm7}WIkETMbcSq-qu{mI&#*EFTW;;B8e@cH1wm76+N77 zu@}@LRRVtiS=L}Xf?F*`>-4cjZFr40-MeK%7x5ThyOVUOmjb6M3HxW}3=PaIcd75l z@Hyx}b_>oC-7z_d^|Lw_{GICoZa>Jwm}1_{vapYj*J$av49&)pq@;4fO-}%egC(zX zgfg8u68~YNo^7QIa4q=dmZ3J!8(qW-+CIOs>OH%&n&Vh0cRwb}%*W zCi1z;x%@M2WUZ8DIdH^APE(#hl0N9eDSn6TI6U(2FWg{draUns+CC&MSY%l$Vc>q} zG}rzw`4DaNhY2|>b6t zQiX8EWWsF7XeL!Qo;+5mQe2XTid-&=Q8lDHw|;n%mx2CdU=YYyta)hxJ$rpfba

G^cI7{p*vUwgqhY;sOB={UbG`UqLv^A4=NfleU}da zyzCh`w$WP(BDM2$%j?0#qyxp*Kd1P>4`G>%tZ^_coOA z9{S&phfXag*W*w_Q6y>S6ge`kK+0>afMmUSe2NI{A0g-r=E^it8V3e8!WX{+sX^AN z2g@-eY|y!I2gzQ@?xD50If@6IPj>vusfr1ciXZsj5C1dvw-&c?ti>22DaUICT$Z@P z$y8!T>X5!yE`1m}MPexfjPKY`4vSd^l*+Tbm65Vq9{A?1q4x>f)=1OO(9<{=3wyjT>oW`t6; z2348RbgJXf+MA+jl(30aOJU_G3G1Q25QTKVZkBXv0 zl@HwD7!-!H!M_t;L;L4j#y@2JJ`#z67Iyt~=PfIXA3wGxJ+z&ULiTL| zRQ-0OM++6SJ)Mk{1bUq|z5**8KI-*2+k`Frt=X&bSeHGS*BuxYT{^Zan=<*@`?Z*g zs-F;4YO9clktv5mk;*#)mMs>iV~oL~NmgvRadR|cs94#@i7Jq|gqU_5X0n##TBP@6 zLFAC}KKwP0MH$#i7+_y-a=YFx3X)#@&b>u{ z@dw=)NoMy1`$#oqN+HxLr-|UBu6jEAf`RZveT{7o7JQ~}b0x!Ay?Gv)`YLQQdKe48qQk-Iviq5b939%b2P%JE);mnJqcUN9?yAoQEC;5#_BC2)Sayq zorr?#ezqol?~iEyk0FnN)Q+6^Zpfat&`f{f;jp|hll0RQEk=hmM4%Pf$KR|-r9D_| z;$?Aiw)Fl1)?;>~nnr3jl5l2yFh&M#&-W8*N~r-Ax8t6-q6-ijD8*$xa?psGCdT@o z=SmOeJ4qAu_4^Lp2THZKEDESyg>j_;@f4DN3rc`J8ygx%TGXh-j1u!D3ZZ~nG>!(u zv*f%207MlFJccw@g$(=4aE0sW8Y%{pGG^w z(tuI5g`pFff_c{H!I^@gj^HD`Wn(`$nBZ5aOLd^LRNAegH&F@^f$&WgPAWh}_y)=u zrq`o%^NR5aJ11txa-Y93?$FV=kCYuQyYEn`4x@c(4xk>dW{t?R%O{Dtvf>oq$#?F!yr=VZl&w2}z(kOC5Bzn*H zbUYx~bi6N{dLvs3dIlgTDZ(^JA|>!dtD2q|nxi96H<|@<`E7DB759z8$U+XBr%TF? z03aldFBzG~xD@zP2fVK;2=C-Gsb52X1{%zB!cjaEl3T_rrIp19T7XyuR1f+hGC)Oo zuk{*hMlV(-P~TaP+jPr|Ox+}l)e>{iu|Xbi#Hn4G1Dcp==LN_7dOc1Ebr!E^lOz8? z_;-m^V&;SJDxs6%>iX?&E?8jU^HyxY?{D&er{V64!U#%>r4(5RYnTv4dks=!Hw;ed(fS_ld1O%q-^PlKM$7VY7|)KL3(T{#{-tw*P>@*ZqxwC+q7M?9tstndti z`TDb2dDM5~>Lt!77d{AHYQ?B6@_wgvxi(eh81oKliJcd(@QdvB7^;pYotyYC=`X5Mr{g%E%&csu)p|GZM=Ff)?c$T=kW->!3Jwl z=`MQ?LWLt{VoY*Gc)oLUIki!Bb=qzk#G3#ko zr9&P9W}I8y{Kb*r!riJfgzy^jkQ*Ub0v=dG8PrtytoUyLzf<$@4A|GQsD%SBHkGBn z3DnqtEkU@)9y`zf2F?zvOe1E@{g_ZU17J-tCZ+^a3#vx0Mp4)iR=zSFP&gc;XCP-o zNN{r>{2_;y^o_6?f(4FQHjclQpBS=J7B8q3$EaVfBdzq;Uz3eq(El5UAgnT-*lN+OE=_}z z;~LWJUd7!nEt{J@rP-lk1$WVOWw~54DxcCAB6?LoK+qV-I$E4pIWx*>Z(Jo=CC-Lk7@e+S2)(CQT|HMnB33nDDYpV;_M-J60&yGFC~+`t z?m+q62Aq~FUqRqk;dPxk3I%!;=vVx%Ewp0))dKu?bkOB}|84-fywaz2a%Q`!1k`e{ zETcWxXkm%2MYLF>8PbZXgI7RKR9d8@dDb-%k~W;|$YtIj8b*d4G=$aX}w%s0R<&aaJ*v)9!D8!T#5S28tF0d6M$k zfU8XMQu~yEBjhw(?7#Y}FGh(85Zm>M&2imx7`gbOhK4RPyr_N||D_CWe8G*$0=)|27#1>=-R{ zlZF2J<O zT(KfvA?giL-*!Qf=o_echd*otQq!g?X)fgnL=yDl=G7%}AA^3N_ijYhn|7BdCQ($@ z*W+}F10Ym>*9ROZFgOLIUti3y+H9cJnWp-=2}zksdsdrG|CUu6E>#Zj+47cjwFn82 zZ1@X*;U|gZWHF!?u}b+Dq%i!)gx=JJePM!itqjnoIzVJPlY1)NkPRL{OmFq#K{~qlsTW4 ztp>?{r&Xba)(Hs=XO?7$Y#C)g(5KzYv3{>Q8v*X?I)|K3|1}QBG=E~1A9n6WA}J)c zeeiYNcqq~y(E(V{n&;%}ZaE;{miP*au047xnG4#-DVNl*pKEpk#BI} zSA|Try0+wlWaq*{&frKVT)^DeS@WW-k7UeAIfJRk9F4;`H(~ht4sel<=i4az$5C$r zq*&ZZ`nc?c(TI$bkTZh{=v4&rdqlF&xFB1ODmgPAlD8N*Jat+-7WUNbF~_P?r5wDJ5TYCdOCNXo_R8o*X3r7 z97%3Vg@~~c(>E2GMDR@1nsH`}CmL-=(1&>8QMB7d$;k$AF#!SS|4?iEAJob)QE(@| z@Y88$F(@q+GBbSQCL&|+s8zlj5B$cw5iaoTIR6RUk4TAREdEYFH0b4V!}42ZU6GU# zish^`KI9inL&KDIi9R!v0x<`sVdoAJ1=Y98u*EY>TkHRdQT zuyRrz)W{F zJ2SFO4Hg9)*iA^TE|1VW0NWIrJpJN(#bwd=D$jFDc)8UPH|TLS%CgNU#d&VC+5MN0 zw%yQ@!;$v;O& z`p40|U9!HdIWD?bq*`hgpvQK=2jMo;q{!P&<*g8j0k{f+gE$ltNMf`~6)b;U?%t0` zJ|lOpC)Shmbv(|YkuiC1?UuWSW=mHL4!pG+*!KpTQ;L9*u?un;v)%kSDbIqZFgPP* zU^=|K7&ydCLm4;Pi_2oQPec2~Z#s@~#LbM}4Sfzz&0y>VDzZ>iS%c%hfNr-P|Z7@j|HCT>klwSM{#vnH&u zhpCY&;2tuQ{?yU(@6}2xKY|}mZa2}bDc=y0$@$pzHY1RjvwOIZ;tIIZAUdIgWG_=y z;&{U4sNO3?3Mqt>kXK1%<~vN~pa7c-cZdoyH;WdJik1$Ic;rf#F2Th(Y*51IYb!wN zANvvZXA`$)LFtsr7|3!vo!pEZ=A02Qs+zi6yugonwP`A%S~3o07^PeYf%d1uio+jD zNo+O&856fau7Q~%=`STCN0W>PlC`nFRoRd_6{KBiVz<0xk&(a0(UN5_1S-CIV;f0R zB2?Duap({`v&v|JV;HO%q%*;bl%k;KxUrL1;@MP&B0h(I`JR#VEr~`~x9*IPSBUIu zVdIiY8|;E%NPL!3U`lS4Gab|?)@4>^H`xBgS1y0?l{>v%?>+wl4628zs4*P0n9r6A zDSrvGhx1jE5psn>M2L)5lJ1~inj9{Lp?bLBt5WR<3w?xS$B=KQVXLQ5A6!>+P1f&l zR9J~c!|eqdNuvu$M$$NdXrdrYO-*5QFgIV%6z6h$)JZP(ql+0$5Ta!ZJDABfLXoP_ zl#*}r5DS76hY{j?)3G=X+*D?4Wn^(M9G*Y8kln^a%J1fTZr2 z@uI3-=ddct@xbQ+$K0fWe*ZnU4y1n*A`vT`^&!LWBmp*UbTMd|Aq*_Vc_HFY#Ka&bv8Z&?pkBZ(tShb-ElGT)q~9Kep8>> zT}(FIsZ_ufCtC?Mi3Ljzv4*shgL0u5Rz^AkR?^m4i~KrrTDsKVsm;hFa8a-0tjiqa zz-O^NtOj_fTB)q7b6H3jg}z?{)qLQuw|V%>jDbF8U4aNS5#NnooH*l^OJ!0#XP2g| z*U_?FWy%J&z9Bo6k_&m_y9Sy&d?+0~suC^L$r3+O@2j4eDG^g4Tw=&)0?8t#q{c`1 zBt<72u2l$9nEw*Spb!qztI-En*VF?Sod(F;H$tIzT*nTu9+ut4adctXwZJ=nuf?vY zuhE-pBJfJRTjnn1_By~y|42R%ra_1j2j9lp@C8;w>{;XK=}OCT3~HjVg6=JO&wBPH zu;ET`JBk+%xmqSqP??emBRo9#G*tDBhep;qF>~04uEsO+#U$G?5mZ{0S zfvansoSW+(e&S}fMJ6C?JOn#lp#6n2(TIP@{aq-zPrLvl>hT4Ulu=B!%X-<|RX$V# zcjN07b8I`=KqIy6;GQb!mtjIFME_R^Js7s4KBZiYnC1L>Na=b-Uyg)o)e!^Uz+>!@ zY%Ww=75JARX=JWOo$+&EnU3+>Za3%F4@3m}AsM&345ZSlxJ~jeQAtW-20siGHa*30 z!WADb)(}ek-mw6nPcFCkW44mi@qOsU)OfmTU}9sEv$TYO;EQhPRtd+L%5cGf->NK0+pV`^sZ5r{y|YoAb@Q_`Bf?{xEUG zyl$HY$km>_P2a4Cg|+<|ZFLy}lL=hu52^Lm3&GM&#<+PzP`ul9Sd&tOaSX|JX4M08E# z=3sESKa4R}HXC4R!nw1_M#ZwZOw@>L5fp5_L5w%+?Yqh=w%^Q*;~bFXoKVnjI0HCu z=$i!X;xnAst)k}4Kl;ndAh$<`qg*m`x7u^N3ccVg zlVJ$0xdt@flAZ|r8SF3#^Rb+K6C77o(sE|T21c#9iaX_Vbq2^xfqNdo)mIz}``LuB z1F>LagiZG@$dJnW&ALubFk`sPAVkQKR$ppxeP#o}l-yE>3E!%efH4OVmPR3B?X8!B zUeek6#pO57KQU4m-QxEgd9>;8b;jjcRG@)FyiAOTT%-{FI_$H4YCFcW)2xK6SdU^Y z7U@J#LJkI(4`uWV#}n2FyY_^NH!6~i3cDB{>SDzlb=bV#8~iC^KapWfVe&-*RxgFu zXT}%U<6;=tkMdOye2OeP_nWVKK@-`$a*)gZaKwu!#h2*IOX~y#jusWxqa>scHh(;0 zk=oxR$(nuE)tZdMrh?DrvNBAZYE7o-9K!n8mW*^X1nq2=l(66z>ItWCtfTeRP#Wcz zP*cTGc3hxZ4G4xtjQcYXi{jO~Q{E^PM_KkfSeR=Q}oORhETjbRsoVJ|w*+h$ z5)D01w#-7OQ#WR%b0?uz7I1xON4dn%5Es!O8DNo6 zE*p<0yN4qeIOZZ8wEoY{(*8~QJ~9{hp5a!8Q`nU9a8zENn0bBHeisirl;34#^U`n7 z5rlu%d-CSX)eR4sh(1a$EYtKtF%Pc5KO2tVn4e3xG(`>uSTeQ;^#BTz11L5-x z!)x-C+Z~+pa9@pVkho1BetnJ%ZP9%$9oo#pLbe{mq0k zw|#$iWs_ksumY8a6R6m1^wynjgr4z&zImLMRykN0pYh z<0G1GAFVM3hYiITAKGw5g0ZSKPf3!NPge1xyr@Ru)g34wxC*7eep4LPgQj4Xb0_Y8gbg_^b17cT7zlAQ6 zjQJYP*vafQ&I>+|)iI8`Oap+@Y&HjFS9Wf)PSs$s$@om{`Erb$AwWqzZ9a;FfUuH6 zgD!)<$3NpuO7^~MXr3xy%P{6Yk=fq=!bU#;<8kn+w>9G`rlZxu&)>~gCSIWE(TOq0Z)OcSmg zUaxkl-9LHv7M12ui&@KAGp@+V9Cf$#M;(pCQL*Bg6{-fRzPS1LU$i7b4F%w7>aQAW zpu)m z(d3_&ERvGF-`s~PMbV7BRkk>Oi0O+-D{Ph_0RlJz8lU0!DLDcqZb6#y|H#C6DeXV~ zUdHI}&P9VE@mpcFiON01m{Ultws0(UyZ0U=Baf8X*Q$k|#WV^?|HjRS(a;V&FGhYZ zs}c)4EQF|WWQbb<@4pq*F1YymG{>%rIDPe=Qw(+&Q2ozE2bI#}9 zvQvwkO0V_5=!lofmG3+Iyt$pw;HUOR?fdVvmu=S;+})Ue1j{ERAnJ<5*ZZF@*X$$# zBcnfYtt6G0)flI(cwu8?ECxawdi;}40pQuOmmW?n>r0`(Cyxs@Mz$ys65y-xbz_&a z*XzFR=nM2-p!HBiE4Uv*u#30b_W|ElB{IwwFJ`X_>zuadcMt!)FB54&)cfjvoNG7t zw88atI=FX2`P)k4One`+)Mg9&`$c`xMDhE56*Iq6ytRV&WBryw|VC z(={o3`$5fh46LoSmh=Cx_fFBBMN9Z#(y`gG&5muSW4qI_-LY-kMt5x6wmaz9w&!%; zd*{FAZ64=gUe3x|=a;?D-nCIx-&a*_jGvBTx{q@(eoI>-`rKX){IHSySh@UAn4!1Cx)hWv}20`oF^(5zSTX72zP0 zj!{f;T1oB1+_RIBXIAYtEW!PRURP&wQL7d5yET@c=ct%3IR&rw^pUXF=Wy{V5C#DZYA4 zdD!hMaHT`OT%YNgADAh~wRILUkw}H-`cv05D=|Z7ehNLkqJd#bPh-8usnfEgqfgC5 zlXQ%ki@-m)qEWLmqW(|*b~Gqv$(O^uiuS#$zLu@J)~TrQ28mM_XQxQd2qj9cogAdG zGTGp!rEeqxuaAzwPEI>JF~| z+f@J$0dQmkN_V-Ro}|j6=JR1B`9G5sU_79JyWYs4h_RAFYC6569^Wi|yo{)2-%jI7 z|5tjkB+!goU;q9h*lInlt!86Z#Fmcy-{y!E3@7TwH4UfQCNmJ#a@n=9+WYF&Q4{!I zaZm>W6;aWZ#L@Cu>(8r`DDRvGQU9^&x}giPfPJncLyXXGKHl1=mOa0SEj{$#z2N`1 zKcOPg(D_8CkP6;k6&%UYe`g(_Kn)-R``-XI4Eexl5x?=euyR9#`QH(N<%cc`3=o!v zoJ{G*e_oycpH~2eARkUmMkdGl?^W@+2F?HTzxF=D;l(Z2^=aiTj$?`p{!JH(Bolb* zWnrrDyL_fbIS(*2zPB3D{|zk^7}~tDRQbOKvk^5({@38&zAUK82u={S-ISz5=>Fq= zixh+<=?M(q`kz9e z2d;z;oQBk;SQNZRd05Hu|80fu@5}(df|GYY3@iGlRRO|P{5yi52Ft*!aQ*)^F#ER* z@KGLR<7Ht;wuaRIK3weYB+&%Z|9`Gozf|Zc>!x*fylyc7WWjuSdj}45GuC}x z-a1CpSPY2ZZ(yFF-@S>3b2fi=@5ljywHrlIph?tiQ2JJ+^3$28Bf7}qbMo6({9#v4 z0ST|mn*ES0WWW|mgVws+;dI_AV22%ZI~@mRX5yJOtSTc4Yhx0Tk``>BpE-MI=Uh`~ zRo_*tXAo%&?@ur=zHEja!C_^Ku6 zbuMwgD@R_+^}O@tyslpB%mbgtc|3#D-e59UC_u~J!jl#o5P69+{pnf@8m(ISPkIK1 zs(V*nb-stSADcN^Vfk$@o5^cl$?QM988}Dwx7}ReDe5ss84sG`Be=i<;dABnal<&N{ErtTQo&CzQ*kvnhf7+a2uF^TT?rG2H%C zj;%}Edd%O>J`!-0*uD%1@OQm%;3PfQe7{XgovF+9p@|r+{ddJo8-OFKp7*qR(Vpsd zUDOEZu0B5eCUukC@9ph9;@EICbncsI98kIfVIl?gl*w?svtQp!hys%y+b`b7 zffom8f0)gnSA)1LbEfIm+Dd@pQL?$D>oMUBi2Ui7xO?cSBcoHc(|Nb_(@lo^ zSTH#-L4In2e=@%1{HCERy1|Xlb_Xms4L*RRPp3q|28Slo9Ir)B zpe>)maF2*J4Sbobch{Nev8S8gqn3WQf6u^QLEW`ygz2<&#vh@Mwm~pR5L73QtyP3x zw=?hsGpSnfO+UvG98gqE*~0l9XlU7HaTagh=)+pB zCz~DT(I2)~Z!Z!LS<4w=N(O*W4EdlIeEZV7xm$)5o>A0fA@ll#v}IVk0Wk}m|#1y`fySmsq3PD| zy{&_aZi!3hNTH{|ka(+KRxPW}rktF$G|?0{qW?}>R=$l&$-!CE<_3$${V8aPa3E#M zT9=1a*Vi}gy2(k)srDE>1@3LxvbpV59@D^*_p=n-YL_9u%gqCwTR3#2LpPdSbC!qK z$EX3uC5>FQGP`xYl#m0qkA^9Iw%`4mVDcv+-y;P?UUhXH@TB*vkh@~IAK*`)>;){! z#)s*Ld+IG2Y*14kbf3ZHLg2F6Ft_rL&`_hlFI?fAuDzlSe&eLsGHe;U;{t#NDfzwj>gX`u;T_&`&zKIFmf7Db{CebXdA>iI2t&Pl z0Vd{mPV%Xn(JTuXx}%P$v-5pv*ZWHe8&<%&=y1G@eSbG#%a}N*zh?q| z7O0lgavZMcQh$8lvXS|4yydu8p{zg77`nvo>O_31Ch_P+!D~=*}lv5 zY*f3rH`UyC^I{11tX7zdZd}!MA zeo09IZibP?#QQ2ZTMr|>gDoF?Ro)s^fi8fi#4wl>=2vnTG<7hPF|}yj8wi1xom>^# z_Y%EbCbk*wH>k@9>jib!8wWmEZm6rtzk39w;3U(HLh7T0v1-jx69Rm$L=@J;KjPP7mVRi4jBC1@`i zYmx9DTGv2e>|GjXr>RgER-v`qQZT?QdWdc|dv?WJePHR-tuNj{Ac2{Rp75wPenWI! zBQRsNa6DNTYvxFlDrz27vK$yCw^UTt3=kxOE>iOAm4m<%I6AF{I64R@(s;QO=d_aB zQX}P%kKtbjuZhZeJnP7_^bvCQ#T{ za$Jsf=x#J6;~Tm*K>>*D(c93}dBBnI3YMcKWoZrZBw@z0zq% z>TQ?u+%@DoJxRj3F~d6@W%Y+Vb=>zL{IO={ew0+=3oGk+-aUNjjws-j_%S|Ss@ViqO%biWctw9v3$GkeD!X;q!U;k3vqY=My}D|+2NYS zpTcS*@ z8bx;d>U#mJ2vPMt@a{#eTxHGY#O(9JfM#r%x@D;tkcraT;9&f zrwH7Pvt;ET<^1FaPW}$#gpluZOuu7Oei9epNKo(^8I(jNg!VFAWRq_rP@M~UXF(>w zAhoazSIkuJxeWIitAD4`O*T|LbXnEeMNm2y!R_H;@FW{n=;JSm!V6>(M?$MoJ_U(O z54L_B?(rX=rjWx32{s&lV@P%X(t3Xym_DlId3`@i!IbxyD%AJFX5LA8^UCHjiClQP zj)@7)jI#2KL=CAqr2BCJwY^t2h%gk(f`bH+P{pxlWU!Brvi+vc|G6+mQe-4g$!}zu z1q#~W;eIVg>@{QVY&ND#d}V6rcwMSdg{|FZ z7bnznDls7_jYEe-*W!>p=_T%qB<0MlIn5xMlIcm;6DUuUWFV;nUp#+Rt2GX*7DE2f z93DUGd*g+R!JNzQbREkm6aoi)G>rMspE0}#j#q6~TM34pILA4mWSTc-_^eh&zlzva zG$K+ir(4ej3Xwj63S=U3sC{{o^KAU7_)5qpNj6tx?5t*ZmFzP5*=576Gk zBLAHZ1@ErbO506t>UDWWvECKbcUWo3&7O`vzcEqQ;ZHaBH#Y;tGV;Ud<&SeQP?tMM zZ37KPi;G7MTb#ail-Up@VD&50CUFV2z5UWdVN4vAD>RjPM3a#+q@B;N+A0KP;zO1A z{d3gT<@G&ECo4@E(D`H};<$Kx1Mk#6N-~Tp@BPvV5drcvmu@^Kq88ozm(3U~vn_v`5#%olh_)FCwAwSANk*N!A&Yb?vgzb`402dG4~f zytRCJh7oJ*3j_}2r}=ad4@?{ga~e9EO|K4=A*tvHe)Tm6>|ysAotz>< zFZxeC^2IFSaU^4MO}bh3@5TqAvhG)}pNCnE4R)KiK9%f0#|G85G{}F!cf*S}?cJ># zFb!IyU;keIKw;pz>ubct9!@7`%g^z>yu>@eBjRpG;iF!+^Lq!jpC0mDRTg-WR+#*T z4oSH&C7e}E$|dVv)^d$BF~vkW)rK6!R-W?W=C_w}b^DjICa4_m=cC2f=zWiYP(fh9 z?2o5maXV5Gc%0UtoeSHfWY~6M1Aw8QZq-o7!$t(LNbsLYo{LCDlJgC$Prw;Lr0aP# zK!LO?3u*CxgZYEgl=#XNy!Ao}5#gPQBkm+nqjK$zbZVYo1~LKKIJ2?AOvv}}F7p7g zhp&uS&}~V>%=W9p#QIGLcLfY~4oNd9ji>yak8^R1)Oq~1w1(Z&{ET~2_P;l)Hc%;) zc3}(XkXIRfG-&zw&|ogz-T=nvkprnT9N%5M=MH5KJso-d6HcW2m8d-ZEFJ?Ifg5S= zguyQ75%o)kv85PDb-N#c#xg6gU<|~)7@RF-^pm5b)mZO*xq4x9k-_Yby%jvq>WW8!EK^qtm zwdPz1X2J1xOjEA&ijR2CNAjL*Oc^gLngVSup3GFrKXWKEsa4<+*HGB^(E>L@zEbu* zruwA3h5vI=(!{n%;bRsiMkrTYMB*Yno5NWgZKRfRU~(~LXUD#J+9^@sFDF_+#eZ4Q%JQ^e?ps}UiI zY<P?xe58h2!>u=4WjSH* z!11DWGYJ92|V`Xvd?YS%eZ{6Grz67M+upajUW3?-v7P(i1Kf$%1so@p)~Mu5Wc?ypU1w8q1JOWJ z;B*LLJ2C37Y2mj?p`^(|p(fkjP{8PosxBJu-+va>%1GCG379%0l-o*11Nmu7HewC9 z;-5WlT95`ztERejbLV}YJw;Jdf}cyE68GTL!ke>$&x`^kbdh$?$(yRyNR|jSg-0B) zkC@45@ig^D49HFG#9Il?0b8oZ6Ssb=vj&wQVFWy9Dr9dg1{WYL{l091)1*y`$NwT=arXEBD0hH4a( ziDmw9ES(NR0x2a7>vM}@dcD;ValDxMD!QW-E-M>}*3vp3+@@E9qK5uYMfeCQatP6} z3e(MV1D&)>1qB9(2PI2MSAO@m9~u_ccgzta-)I2p3|0dBCkxhxV4)%R09|n7QH*R! z7Vq*L!cpId$hNpJk|o;;y*taJ znS+QA*SpxCa1=RM+$!4Ebp9FiX&=Wj^;Ohnnes%$Z+oKRt-Tko{o}gCAUbYml*#_q z9oSeKr0R5<0wb{GRY)t(%c<|wdK&MMu>;{c)1s^+6}Z^63knj~2LZ>RanhPLamngZ z!bIDjzq;<`8rM=Oo~GgPh$4NywG#q>s`5=p>w2H^K+~hyqQ@P=k5K)-V3=7Y1qI)S z4G(!_jMYR;dM&chNx(3T1_&8Sr!e~y84^NG%`fL|LN+ykp8~9^>z(`lbOnr?uDjg0mBQ}uJXgA={>>Uo&V_eC8Kb%+e;cAp81dh%p#rtaT*gPiv&=D_2^ z;qS>@RPU~|m=M{XB9fWEu~+>jE+^P6WmeY)+*l`SHocV<9s?Rir6mYSIyCh?iU}N_ zSD1w}o|2k$C~C9$-K|j)X&|2APw8bI0Dic}d`vl%K>0f2C*L(}^pH7~0vU$d;*qFw z)d4W~PyyUdm-j^bExMne$yjNPK0@L{uFzOJ> zk}DCQcICTlm>sTVqEHENSZ2v(z|YcoOhR27?WiG&gn1d+tO_Ydbt0N-q-k|`wVqlv z0Ow3@7a(xqQNTxp5W{;79gWWuoX}DqO5}Cf1GU^>nF76iSeVuV2r(Y19R|Q!?7QI$0ies@vmMl&>M>`U_ityVB}N;ycW>XcV1L zp>o=(Ql{3!c4cU>JnN%qJiC^N14TaXLjnrHv51WtS86si1qyu&8yRn0rJ*}CkrJhL zFpipBjLxf(=9|M-DTM%1To65O-Q_T*c>IrA#;CSSO#R-u`9J8(vPi5~>=e9LBuk@9 z15&Psp|M>bZx_O&F#_*cOW$0ws%KdxT!E5h#O0h0xNH`Qp*O_LqH07Aeu}t!?yT>x z2LfYp_k4ykj>1svAE ztp|aO^u*z3iUsg!qs;MLYe#JEG!*$sn?kkG(;kUIq?jB9vT^<)M`4-lv%@l#?tzpl zT@E`{)qV%Q~zi27hQPx*~Y5*EAB7`4!e2xxLPcllomp;)n!v?{DOG2%_4 z*%)4zVpxPNqJn)b@jS=Feg*l2M-@oMpMs-l;^>{xS*{0qRrOOSHQz&xV$wL7b)q=a z`6rGd{fkEMRW)@#Q-G79L2Qhj_nJM61|Xq0)e;bF_^1d97n%;If%PRf??)%+MoKtH zD;A7X_KMgb+{q(>NMn}6Yg-<&EEY*f#6d_#F|SjB)z&zhT} zzjfE~RxTJ|K3G`vh3>sq%%n^T%^o*w<$K3HL^{1s93`{grAyTfS0-=_4(?07Nj7m! z97YX8YEp)lvn>E_!l=ogR22S#Ce9`amcLr~C$>a>%%5>V z2bFE-s7$=rY>=3{aJc>DVvYZx9jjIDK_H+_U~v=0A+guXXv% zF+onOchPrE1(uvyq^xPEyadtlptox+*W`ZX(9#yo>zL}IKd$eX2!oMNH{*>9Ecr#P ztjCO!{;-*H9A+1R54cEc3GgM#I->&vD}-EU!NU`QyixK}Wg$U8V3VJ7B;cK6Rpdv@zEwa69@A+5 zkkm6IpeOVEAAg}Ys(<*~KkROm5b#URiXH$D5yig``G44Iy};id!Y0!Ij4mJe>%Tyq zna^Kr6fKKo>noBNkSha;uO{)YBmMoa&z*wX^e@i$f6&6*H(~%Ek#(F5q~t>fg8u&t zE(*T<#VFGcGhyW2sltKBe*ip=ROc7MynziNJF7SYzq-@6({OHtYC=@*BUZ(;s=DyF#{%hE;Lc<-axfI zDUG@G;oO_G#flZ<3va2Um{;9HQYc$v6D z86+K|QZBMsQT#@LaFCuaw1FV9Bnc3Pk50KojQum{t0P+NV19@sD#6%uLRCb&IC8cg z@~!ePc5ldYG@mJ%uA7IPv}#K136QM;d~g@3H<0oPi*g$g;2-%J9LF%3ud!h$sEw+AYsW;e(zLDxVDQ^KF1J*zYxAcLEaOBMyvaH6Y*rM97Zy?uNSNmX{XbSj<#u@z!5e`*%B24#KH2RkN-WP z=9Q?!E;D~@F)&(>V!hToLU^yXfGv&-r?%b=V&+toO1Rd_P)rNN4AE!5*8TV~U_!;t z*(D(3NY}t-*QP`N`K)j$A!rDHbr*=(ZP4Cg;j$kSLE5>dwUIcor({3l^tU&?_iMRD z&UQT%f+u8!HmSoFFFfw6z@2)yl{tzc!8p zuC?oAIxTAcEG-o-iOvdql}@2YJCWF?hGi0e$nF5|oaH9T{}rfJ;5T43m>2MJ5|{Go zFO2SVN(K$b=3rXNO7kf8s);O@f@VxkZr75juj%0MW8isWWHR8BP)#xo&8VWPCiOG& z5pk`^^W^xr=-$`#LQ+nT?43XevxH9LDO3Q}@=DkDENTa4^15J<3}V0{$(P0MI6j{=1N z*HaTw$8G4Wd4Kh#`oh$G^+A8xw{p3`9^d5SO8#)Eti*M8YI0J%L@rA~TNx~54p{81 zFtytc?n1c4)*Fs7ww+IqJA+YZg~4=`qOo|0P!0|b5MR(AM1|UJzcm<-VI(FdH-;A@ zK!QCZVMTg_LFP3U;|SRN_Me?C*oxxjU?9XEgr85hB&YpKL_|kz8pW-x;dAQ_)~Q{G zs#Yed>yB=`vuIheT|Ea9RDpBSSS2PF^w~6P1-DG?LTI`~xR_cxR!rj1qlI{j*k5ma z7zks<)Ma+xG^q>x`iqD}iaZz|o9?o3xpZv}&+j0H$9b_X+MHD@_Mj{`7tGU}kkx`7 zou-ILps*|bxD+51Kog;$ZP}2!Bx;fGOGZ7Tr7?Sg?RF5hVa3rfJ4__-wBqcVc#OK3+|AdOx;+l7$5^{5VSuo{9#4bp|XvWiNCR zUZZXP(gex8PGzVfv{U;A3e^P3PfSA9WjVMGg z?(JkA!k$o+0~r7PYK_aa%@4mjT6K~?4`G%n77geH!Wo8Ch{1z#VYt=~089y_a|ww} z$q5NJ{Oo^-LU5ZS^LUu<@Bc}kiH4RTWKPpmNRonI6#Dx5IxZ=Roc*x0bhJ816j?C{ zRW$q+w2KJOARD%bh+enp0Ne#FE~!o&K18c%aFWksi&#CC23m{}I%8$#P-WF(x|Vmv zor!mMRD}jO*ncQC1=Z{{Tvt0C%v>&5Xj1hz zCRsuM-g`uV5&A)-po5}WIQ-4k0B+mtt9hBxBO7Ij5plv|q{_RXh0z$%IW7DNtWGB(4 zLX{=qxsB1LB|#qb4`)Ycce&U&oGa1j7Y5uP2jtSp!2!|Q_85wrQWU%l9Z!z)OJsGV zXxT>jzx`_rYk+Smfe@s81eh~0kgQ@MZH})DOoq=Y^XU^nJiNaO05``G*Lgm{E|;@Y zAF7rGQ8TC;ojiJZH)nm(0L)%15jk&y+FItoq+x@`+~QJL{wgF0x2MC{46v#t1Y1GB zc*8v?Hy!{8j4#(ogz8s>vlbdam!CTND3A#(=C<^?QLc#?v6D53(6Ekw0+PyLqXRT za2wjU2+``&*laSc@h!qQgc&gMCx!%W5{;LcTCei%4`%-sC_M!8)>nEjGU@a&%JpDs zWeUTI)+j9JK}|cZEGjMs=$2ym)8B1K647`;T4e*vUorKMZ>8~(so;m{7(7^+GSrQ-=V|8H`ncVsLO5yjz94~ zCI^u$1%f8$vGH3Gd#m2xUEt4uf9`5=qiD2R30hsnab!3T8z^Jf-wJmEgxJ7{3b@=Q z(=4_XCMa5j9llY6aEFr->6R#gI9&;1237B^K~*; zWk(_s?pLC)(L|Q0Adoi?g{rZDNzPBpiY;C;r0MG?gV zNm^$Z9vc|7?G&??t#GBg;4nirnMe^8yu?(szKnMf}2_1L` z*y&C2b559Ka#?}PP$0NFpM-DQ1YFMkuF{`+=X)GzX2Qx z$z;Sx(E4VwO#9FaNqSFE+C6656(EOyZ8sSzRGneD<z^}LbW^ijloXj{ zf6Y|TaH()sJWhv}NOPot#O?0yO<5~!uf?B3NYDi5-od1jo3=gR=noCysdQ&kOEODx z`_z636qCr(NZ3|bhVCUjrUkX*#`ABMz*WFUa0k#|p|F>EkzDG3OT{)1Fr)dh$V5oE zwG5`aL5GJK!@;=BDf1}JQs&5M{)}pBxpyFXz1$DP_J9F_=rz_aF`SNv)ypb}=BpPE zu-77fV=AlPxh^yiG%^Em8mKm{F=9fEM1P~L|dkLY#OI}e- zvxDVY#5LNbUaQ?`OKHjm5s9hEbA>?zn80YFFv5xY^J2b)oCR|8hIP8+4;uC+P>~f7 zQfk4;-;x$P%L9w0A}28^8VJ$XT$o1#=t}N~zlxMlx0p;Yb03b-a_4b!RjL0tt=QSU z;H1)y2HsJum>M=X0#=h&xZdd!kZ=jVPE_}A;bc*kFhemdx8>FZ(Ohj#RPczS5dJX-K}1nnVhX3DU6|Gs8q0kR9ABK`83UWy@5chJ~e;? zxcHRLk#00#CRaqvm>#HuEJk14IJ?|Cr^f0AyHBj`#_4>3?n}5w5BQ~FRMK4vu(G#V zDF2*}*$A(^6IQfvjW77{p9t=1H!yB!6yStiVg=|yvVk&S?dXHn$5X`G4}NOYCjL3 zEZGp|It*!C=u+iYHe6;a~tu*LG13N4t@6H1g zltsuALhB1!YnUJvJYd`3|HS73mep1`=?FNZqQAsb!wg*Rx|~N7lMeL(m1gSOKY_;J zF2=uAO-pHt^ssg121Pf*ai`2r(u}K8qeF*_Gi^t_uSW^@G77}dj zi~2I`Ts#**A7C^gV(0?VTv_3Ce?-QU1AGg~zN@{Kq%c!QrU(OxUrh^^3y0FH7XLJ_ zhmkfAyf(iudJ-_Sn(UD%OBZT@mi-R0$^!K$qy2MT5;F$mQACF`nX=LA@dQd$Q*r-D zagGtJGSGXb%l+_GMgoX@%2ff2vA)nqMFaAujwug$_mYc*1dEozRFyVUL)Plpqo7#Ti5I1!du4!aPSczKb7^>I0BygXKsveh71N#X8V zeY(sXRM_-}c)b;gT|{R`qeIs7i(r8G(v@#1O9CRlwAxh{Jvloo&-`t^MC}B-a&DLS$SEA z(w875;*b#o5!nJ1@iH*(q)$vJu){?LMt6sP{G@}#>|FS$VUcb_8e$~kV!9f1Ca>*x z(B7I&D3iT+zQ0GJzeXt!#o$K3P3C~laxzzL_l%aL<@b6$Jv}{|uP|e98(r==*Epfd zFzR!BzBfeBBgf)501t-84-X6!Rg;OY7*Hn+i~c&@?A<3$_q_#n5*cF9uUq8DAZ0%( zDHCLr6Wh;9TYn&x^4N~?kTMPW>GKSK{h}bfM)d>NnF!7o{|-Ay^~NDMTsQm?6Jj|M zkSS{T`y+|&^aWxqm1Ui3L0<@pEF>MTZ%b*SAla35UZw(;&sGw zl(%n0et6e>w&ZuiJ`YCS&%@?0fj@6~kt-}BXW{%amDYs`Z6g&PemNOWu2EwEk%>t8 z^PWVAFr|mWfJpKK>r%2mG%7|y&KYrE$A=FR5eJ-x0GpHHOj}bmstKbj;Gz@h?6;e? z`H>O@&4F*Csf1R9c!kM9zuT_pIOJ~4&Qh<4f_640g@!s+s!J5Bj(CBesucwe83U#e zTBHn0NwwN4g62s;SFse`N`;OedYPHaF1<&SYrpu6YT zoG(rbP%jlWNnjP@Qv3+W$k?5gm;3j)XnA={>b`OUp&;4eE|~QF&3SyULb=@`M4!LU zFR2=Q+{->%jr>-S>Tfo=-#c7yVpvn-%Txn9#Q?*xw5;|z;I~>)2MB>g<<|?4J+-bzO6~ zVp?PU+j)N^PlDZz*31UG0U~d-UzY(2w3D3}+@WdH9;$e%880p_j?x#M@4@ACEhq!? z^~ll0=E}X=$(4+RY2Jd3$FxN$EUsWk|6%fs5j)B%iu#v%b?U@;hA}IS<~=@~*HgZu ziWd(PSI|+v5i{2fW?Yq`)Qk^C?bRz`Yr^`UcH2IDipf-V% zHjf;Y%w0%R_f6F&n)5M*5=2l}?uE5)&Wr@EhrfLsEFe83RgzP>^$&6ntf0-aCONl2 zVrUN_%Uul#9O@D{!XNQ7k$HbfW z^NYx>u|KJRvtM9SXFi4N;T9bo127D`43*x8T zIuHqcaB2M!BbeDCUsJ{fO>_mQ7FJD!qNf(>PVAWW1vk{ zJHu3C*T&gX!Y(}2$)#M3Veb7n7$u4XpMLAkI=@thxP;Hw`zgB}x8^#j<~Z_UHa5&;8Lr7c#r-er}T+EIs7Zne^$C<4i(Q07#>%V0{<7Bg!-=zfYn!pW2_BQ%M$XSC1eR93Jn{0{);mxwWspKSK z&_eVCVe-xUfHE?_N>h@d+`1AZ*{QWj&)Fh@yht zn|VnRlU4Qm-jy^m34po~h2&;T#;ZkG-tR?{lcNDDd6y-|b6m`S+}xSUwV_>kz5kfw zk8Ym{IagHt>WSI(3>ys4W@?d#M9nXVjo*lJN^@af=rQ^!VeQ3caqE7{s~c72j9ySb z{h_@0Pg zINB@=w!@*0X+NHJ+T&5wjI==WF_^F|2E*{(C#Cxt7g#)9S2Q=5m%hkmECk|b!H{?> z&9EL#)rGIi&Mc*tWr|vw{=tLX=u50yzq1A|EetfpUiAAySQw;p zokIlFzM4~i=_udvEh(t-F&zgoQvqVP&w&{NAp(i9!*xuA@P{CH?p8lZ43!Tv-pH_k z-CXA8*ZDl|76QThX4@?vv7aYl@(Bt%bNjPR6%=~}M3PuYwc(Q~XR9q?>)mNcnQbOi zL?_~6G0w0mN^IB~;}S-%8DsaBU4CgTY)-{mScg~xazuOREEUSH^e!PgJ^V5glJ{y%OIeZdaI6^mO0_Z+1e%5HdUU2lP-t=xDtbVBw{V6Egs zdTY7fR8`j9=~*v|N}J#yT9eTlROde66Gc@d#{#KZ&+8Z^xek?Kmi(bB~s zYLB$&Nb-zJmsXqNAOxVUllLCCE_M8%uHGCe*X2BMdVZ8F9G~lKyTChwokIHdy9bSV zF3+};7>_6D3G%<$`|E>Fb)VF{cA?Ko8A;zixoTidS+M8pZ94B(J>i5npNZ*C@i)6~ z;oD*1=>Meh6|D@G$rDt5BIcwM7bRC%t%u9;YJwE7;`XIzLxcT=WzhnjKq23K%f&%V zUWbdufaW;emjF7IKTutH;2W}ZS^s&~KvP^7>6APqZ?p3gdkoZbFl3_oyhwo}2|YPV zTQvHXpeBAM0mC-Q?(|R9>Il{5!&dFMtfi2m!6r6Q5+*4rX~sKvK3b>h*X*FTbnaGI= z8}Pogb=JUq_j;zM$QD2xLc}DZp@1b7|AEcuS5V&!Kjxzm^wi|yN$0*7BM=bnvh&JC zuLZSx!RI@H+ti@3+LF zg+PFx4~dVN>IZf1OWP1w*+66f54!;nFlzWv8GyCi#9-5W=B$BRs#jU&EBQ;r%ZVB< zDruUkP~j;5&t3D?z_sk7{uqj6p@S>0O{{>iU5=Gb!yjj(I~?e5j&y~na-wZ*xzKRg z-#?vb<%AsEsWTe%hdofOgd4NC@iAf^6nMYTkdYM$mP7=v>je&(i>W$6T*u)1O>BvF zjC?}kjisIU)sBSWc!x0WfPC)Y$Tw6>_%bfM^scbz-aZC>JMyX|uA z-ktk(2{=x{JoE*B=h$k+zEN0nJ&Zh0>e{@sy**9{!98gDhV$E^L0|G5D^=FS^K!u; zGKY82r~P5$8TzC1LJ=N^+xKn4h;`?1%TQA8Ywv0nt%hR57(+9x*YjO3ki!0l_=%O} z0U+bNc*E^IQYMQ<5OnqAe3vF(Ru!Dfv7xT5KgpkVcXx?sxM9i3$?4h?($Yp&K`uMe ze|GDbn^V)!(EKh+GdsC~hI0-67L${m8A5QR5;BxBdMcgPs7=S&YRRJJ^~~-4Mo$Pp zyv-NyZA3RpUYIDE;-u-}F~VfdJ+yb-7KQM?C_G#4i5dwi496lCXi`H+`Q##QO1_2L zyoHdIOey?qP|OS|x#YxXZw6mvql6+Lko*bRs6pr7XC*i{vp$_po0nLsS5XGmuwH8Q zQ^d`jsg{K~FJeBguo3q6J-)wihHuyp8xdi-N_k#_)T#crNl^I}Y|yFUp1!N8-|yi@ zLD(lt^nJcFELTUP3$7PqF?oqpxoSU|N{1v1MafC!FhdL%AVL+6kSn4FwY%tqvT7zT z^erE7+p{RpeI-D$om-Ov&E-r%L0viFRMi*sT&u2JwhFomJV`lA$eUL6Ueun&h5c zMkgtX&9sfcPnXc$KZ+k>t9@cIkbO&56cU1EdzN7et`0xmqx=hkQh7aT&V3H6T%WhZ zIMq6kR0LyqNi@0AT;KmMn!YM5uBPc0cXu7!-Ge(JKycUK?(WXu5+t~5aEIXT?(S}b zTOeoN?>Yb7zM4I|y1Tk+)v8r-mIQx`&5KQ@H!F1x#O_|Ibei$LF?^e}y<29wc@Y*O z>$)ct(f-Q;mhQJO^d}53{A9}Y*~5fm96^r0UG2&3uOaoFtM=u^+xAAD?y#c76Mn@q z^g6~J93I(E+i)1P_hk99_j~(`EhHtS+o@naAD9}^Gs?DxRvqt)kOVB_0nLV%D-A18 zW_a>^zJj_8(1i4Z`7rm@Oy?}ESea>=o*V_CT$5==1=~z{57f2?pmOJ2K?_v(vs5f= zWb-b*TMCKxR^@%;&$$Ci6Pks;$EJ~19syq>OG@SUWDNEKPURCqgp5>6pi)zpUYrjg z|NiO0QsmPbN%YYfvMQEMP@zyQ8$MH4E2Rr}?9qps#S=%jkZupi9T z$n3~!m3=u;{b2bXx7y*s@bvKq#{o#-JQu~jk-h41ib2B41ZPH9=xf7l=Ryjn?}pm& zhGvgu-uwq9*d0jE@}a;jgwzfdg~&j_?}so=%!TKi6y;@oYy0xp>YgZ1UDcYVKmpXO zhJdZj%v9)Bg~;|8?@5bq|GsXn3F!s1YyFG(Tl(R{|CUxJK?H=e{MiXv$@eeldFKx0Q$Yqa$M~1O)4G7#X4cS?~=sf(|LU0-xEi#<0R>qhk;tB zldjf!^fgO>e|&fbeX+DahUktTI^g3bbXNM5U^E3M)nsZp42pLv(StHoa5nFx=;)ab-@pm3SESPf+k`?3(_o zok+2Jz8&4WWAa=Wu4q+%=(9-lOj>tBk}1%W0i^t$=uTTXRHi~;7CO$_dL}E+gX`xgvAA`no=b`x#E-HK#!#v81J>7~2Rg?iDmW9~Mh#Ptq>( zadU!*)6*kdB&nve{3#-+ttsSXd;jIWV`NaGKJX&z1JG?0Wax`k)%B(g9l;kW6sYN6 zSvtFE*8kRA_rAt3QaD`C>AC+sX^RE>U%)YTMqiEyq7J#bSl+G(JQ9$spj<*u@fbg77K-c#978zFfqxIvey zP<0+Oy5kU`TOHP10jUuVRCap7SiTX8|9eNPEgZCUWnMsMv&w)QMgA)~DY;nOCKiwL zI}B@^58x-~9|{o`VtA(C^`JO#FuNNBbY$5B&(u+=ueBlzC9^O^k4_-zRmx)xUM(LP z?cA1K94aVmKzNr!a;mCHTY}8=TC-DV^Ma$KH1%7GF#f3BQH$`a_$gxKC_;{QWNw%dMRB@6CMz(4CKg<4+v3@?XZbH$+S}sq zH>A)LgUGc=<~c(>%@fW()5FvMXW98Yl$GxF=>^AnSdzhO%DC-+FKIXZFZF8B*Q=(> znRghy8)K*DZITVcu-=XbZ?ZiUa%OjvqwS)5!)bse8IIq4Q@ZRdsUy8cnR9uDWBbe{$wRa~TEkOyjbWfvaRZJ;WF^KVv zx+>;vSEY!2hA|qpNR0f z(G95qhsJ}<35Wh3Kv$l3=K4ISsoVY!kyp9=W0>^<`|WRA6=mI+HY?IYRxZteI}SAa zjo{I8*;6-xWv-}x!-tL~8!$~Tc*#OqU7cHj7Q5Wr)WwB!8`EHYD9vs^}O2_uBBA5-$Y1@Nb* ze9a_Ss$_^I&=(`O7-jSJ8d&#n2%W2CWJUz=spDKV1r1tzmV-;6bjB4dBi%-Uy~A-m z;*3e+RKN18YS3UcP?hC63ATIaWDK1c8s6f9SZUM3Df!#1TS|N4;7Errq`&Df{I|Ya z^WM7^jhP>SwjhhsPwBaxaxC|Y;l|H%@$Qh=zw580ukE_(g!}Jqx42C@UZ6qYmvyPb zEmM1yO#b^YJ*EE=b;W0I>dtM&|NL?Zg?9lc?0$IvgKfuxZ64lyXVO?9`F_2F?Z>$} zetpkExz>H)xm$hk=g0?5Zbn|I66Z$ zIquCJC;;79!P?$MeY1!M9Ixva#!b)+h)Lyatb+~cB2sgGp|WyvQ1+5OL>*gbB@&SM zeaKR?Ry-(v;6mv6#d*@NUlZiAB`O1}W2;lJ z*7muXl3o1mbU15#tl{$IvQBU6OM|~~{N+|(rUG8tGNdZM&*OP;27a8(Os+6Fwzsm2 z6S{}vcG$WPbo{bzl95G_u1qg9!IeWAt71WwPh$=b{P$UgL@b)Gp-V9pTGJAnyUuOT z7bSHcZ6Wud&NoV*r^_f)SlBx4DwIw-Y((w>o8&(Zd~!<0@e`hXn`ZVEPgs}??4xa7MBeyRUTB?B@9GASr7o|1xR>rM5?b9bB1wsSDwZJ7$$}hC^G#g(? z(2jMe(J7$u@>&xorAKzVw3^7KC@@`f)^s{NG&S`GpDdS}34gfEO75+2JEK8VbqIT1fdLSCfiJiofVI(vQm@^;3lNEb6Aa&!?k+mh z_dIXJ0K-=%c|^K;5HTA|-~P(B>8w=YzN5%L0I^4{jE@Bowrp}@I@!wR7vcobcZ_$Z zBcmb(_HIoyVX^z4@D0qBdjDKpW3YD@7Aq8Im%nc)jn3Qnmn8zr9RF9x?$%fMOdDL_rSAI zmC-HscEJ626f#~E+W>+;y0SnX<4Z%37AH$kkL`u;#dLnnJZzGle;{~ zR`}Yk2chU_dC)eHOp;bBzpyh__@M#~`-6)pF5sV}hdvA|@iwWo3L{RcR#Epi^or3a zf*dGJ%%oY`qx_SXGuhEm^DAaqK^a&GXn1%SA&^@(kdBQOlE;DyheM_6v{0@nc;iUI z)RZbz?@mlZOADO8)jwlZr$Sr8#+R+|H7GOmp_&`{e6yrECfb^RO*SaE;SK(^aUrpnM0NRx3jv7$3gpHP zn*5hcQemxslbjp}{l4|`H+lALO<6ECQ1rK%T3V{|g1|NOg;HP|6-Sid_Q1bFC_Q^J z_i-B4Sdyvs$5-) z5^!XP@15IR{NT*exrkiP)Qu&b$40h@{W_Kuy4vMR#%S|Ezp|lh?;&1BodD_Wm3`PG z-l+*0rymx!D(iN$g?#w$o9s7ncW=b=BOAY)#J;XOEjXc>j~j+g(0-+?+=Q5o4{d%)2Gyy`0@ElBaozXNSdrs-h zcjg2Th0e%uov26mf+95OLpBa9?3t~U8?}(aT?nlKfs6reZp_HlSovx%(JLvpuCv|Q zvf0q&jA>^cDqZA!3)!&X8s~Z&*LtJg8Z; zfkkT)uv)`G|3+==P3t6@_8sAOLNpM@>3?bf`FUWCHi(OKlJS==sF^W4F^%k-o_q1X zCu4z}#*9nLV`ph`zwktfqt^udHzrSWFVj8$eZ<%Gp1Ac&7C`$b|Kz0;;U{Fs$hd@5 zRZ$O%$Xr(xHTn$lyJ33bx8My&5xPdU+#LXC{=%)B{hfj<`mQ{=fuFFK>s`bZ3=9O| z2H4EZ2mR40E0g`xEkREcsT~r1QFD4m`RIDz8%*`Zb7Rl8f>wb&iq`m*7`RGov{rZ( zIl@95tU)^3AFHbzvg4=I61lwoJj{&A%8ZdTqfFD+Z1NmwlV^A++@UC1qDQwRf$Bt@9O2n=OvjYr~t`&{nk}a(QFd zReD`H9Vc!j&;f6jRy$4W#9lAW&3Ebh9kn@N9jJJU|Kf(vcr+N&04DI$KSWvdN1EE6 z1os}hpf$5Tkcy=9$ww>4)XbU?_$F8(V0?jr7COBAJ~cg9%w$33c#0qk9sp&~Ow!|b zPntkK~1p1gjw`vR@Bmh_KyB*_lGg;ymrrHi>ISO4Q2gRw&Zgt&!GNkK8yQdDZ?!X1$xwoiwQrTkBnF zGTpzmWuqNaydO5Q-R_(iBAxw&K^8hpEqG4UEHdUznlM8F5EBt4{`}b=cJbgTawwCy zyl5t7XNNM8SoFBe$1PqMZDGiG$NDo1=~Kp>ipGp%a?lRiNGO4!wQ?am+5o?V@40=z`ogyb}A1i!Z?jy9oGR zg@w}jk&=>K&neq<^8FKPGv2h0!#{+C?1SUM__xWUtLe^iFZTad zPPLuHl&u>9yQUk_H(ov8QW2{OfZgqP&qA`pPuN3eTY~HtdlF* zA1r<7Pz?vSD?H`f*J7f9yl70UN~e1J*R&}Al^vDWRvgpxE3``DcJSXa<-`!XwBtB4 zqBo?-l=4;7EK&W_CS*L%%vWWgNS0N$WgoEfh5}?4@?bKrr zM4+0Bjcp+tE=N#Oh(HQ@UJZhULdEthvEm&!v>@Ea#o%}x%1A+f$kP%}o%P$kKKg?lF8*OennWJGAPmj z)DU2qaP9CK&&pU3(CFw)NTd$}-FzXo=MXCv9Q|Ij;FGg35b4ZO{(brM9o_j8mkJJc znIog)Eq2y;cu~D+Mv(`RrJpa+Sg(Y%<$=&bmt1mX;hvjP4;u9OD)fGj zL4yj<;u@jtv6R10FAIvjm#G(PYE398I|g7w*PzNaCLSoLgJ?+OCMHVwu)Q!IWN9d+ zPMacQns>cJT0U6Wj@kfzK=2r3QbD+Bp8R*A6pYz{_V|iP?G+e z@b!+!JL;dALX>awYmv}Ev_@N;a|ApuD?=OBN|nkCIAFsgf)f~Z)3Gq}^CP)`nG=m! ziXIGuArbV6g~Ymt`?Ez~y)22DI_8aT;Nhj8jUq{@)_361Z(SZTp;&kwPYlMrj5p$u zto=X2vEk919zX<{LD4SP#vgej;FZb2Ch2J#y~am1;?RqjsND^+T!6zj^sO)rw!CI> zQRoiB=Ei28?1}2&$P3g6UtMi^l>P3*cHNe`!73mVc4Dac3R&13W#qLSf2FrY2Qf3l zWZ?CJSVCqc%l+LWU)eU;uRCYkh#I}KK?NUJ%1oC211DRS$uVgD-X@<i5;?%02#b7#88k}M_a3CWtnCI%N+mIjtBYz}W%aIT6Ug_&OlJ?axdOqw zfz^(ppt5RtV)`%FjJp)t3~cvewD=UXGK>A8u9uPU=%Q8w#rMVOtwHyRi_2d1FW=!+ z7o^%gX|El*YkH#ZVPJECW2ZytI~}Vn2eeMT5`dI&K0Wq}-xhOsHKYy?S8R~}7IWk` z%gG5&b&>_8Cq@*lY`>(R&gDJe)cAIOL$FPGeVD^fFu&j2Gg8yI-pC0&X&HT)t89fy z!5sFD@Y*HhGK>yyeOIN;>E$z0i9?t!lG*r)@}p0G9L*|^&zu|-1|{%!jzQA)@5?O( ziv@VN*=oJ%$Ni*8)1Ekg^CrDOa1BuY-Ug! zE~VE(5kxyq;>2$AI(g{>NLQFzL-VlMvaqEEZ*6UDih_^r2VK38hOs8&o|8aEX_V>& zLuh<|2@am=z(sg0gdVlY`)nXnDv~C7O4!q3SD`W)@`-mR7#T5ZE|ehsZ(rAo5`nTW zODWpgP869I#%Gl)rB9c>#!}&kU_lm*$T>Z_yObsu)H?xA%)OsYn|C@~H~g3uhGyH| z4O!LQ59{EW0$f@ka(j82N{A_Y$1WI*jT?WLOZ=t#*<^qT5$iCbjpeuI%t5^q1 z+@DJFI#mD5TY6eukTbJz-ud*}eO(!lJA6F+Z1E{UzF|4m??)FYlyU$(Khrq!*IBr~ zhqWMh^+V<;?=1E|1(G0xcEP5}o=W4#-kq~PRIa2qUx$Zdfe7Zz+GHn~tXpf#HI{3~ z(M^StYe&HpAYEjnA<9CbudM)TQA?N=M^us>oS=xL4fer9MvU13`^=v4p{O_Jp?wcW z_Xvcn5^KF^w9GRq+a^(c^6~LVhPu0a$?+jGoRcEsW()hQB)ko%&a-0c__M1h=)xEG z_xCxR=gp{T=~_Ges{Y3Rf*k6T1m1#WOCvVtDYSQ;rK5tA+Ck$b7}o04tHIjUAsxk7 z^HU`Rf@Uzt#;7D;61`!^N?{n{;(YMtqa$ZI+N^DCLPDbQniZVB(@@fH#KLJjm7?&j z$Ez+<6&0py#=@my|9Hd|29#24)Vr3|ma15JHvM zy>gb%M1k|rT%XiZ|9r_i6uteI=k9!acsdE+q0Z=|x18VG82oCxGpUTb5*S%$ma<(cx3-cpmgb3O{H?N;51h04 z`pqBvFvMqI$ZxU%r?Z&Mx(`ADhK;<%@+8b4FC0p8CN#i4pUZ%} zf7hY{UL-PcA`UTpXdgn3<^-gY6qtbsU!}>k;IE=9to1kP{7_b#K4mx2#^N^4_6TWS z?^}j!u0$zPI0joPSM$c>`9Fg z@V=-aBLD#8Of*nQm=CCvK-v^TT#S~&%c^x<;q!~k#8iUN+zbW+fqc=1#s&;rQgE~V zlR;+FlROglDHmn!}j&r7A8=+mfVo5M6u z{)lVL-t!l4=Z8^a=70}eDFKwWv%g8Q(Qzh*Xjwx@F-s9Lp@@%fw5L;eBvs`@X$MQ` z&nLd@XCcTRupA#0%z3|nc&`_=7wpf+dXj%iz~Lg4EMm#P`*f(#mqpz$ZXtDrM0vH7 z-;8{g+1_hAviH&wmh*us%leX%rn0tnGjXu!O2o^TjJpNQ#rj5(;hgoFe@7u_jBd1k z%>G~vFRu(bxj|=~En{nqsLtB*di8cW3W1E!9O-Ju-!uzP*XAN*^eUY zI_bS5GhmU>{r3q(RX>P?iz&<4oOUE@epvqLz{JZh+vC73|Baa7jOiTP4ZB)pKEl<_k*`_j&cHWN=Sl?ao= zS=oj%z4g$l57V#l@+*!;iX=6zYib-n1!~rO?Tqmdiv1U_s^Ojf-2wFNzBZ1ckG2Kf z3CVmHP;Y?W1?sA$6^ z&x8ZQY-j@4gBu3WHwkrgA9hP;A#jIHHGG8uR&JY;xd0g$@K%^VU}mL$CobP_1IMZOTM5_DRo_GaSA|*QeT&;WJWNX^)yaK{UR&TsAQy0 z-okh^-C6mKn`QHae#I_1ujkZ@gI2Mdy;vTX88pjL?!sf#o4g*R+!lp|sd}twB0*U> zA%$CBVayz?sDOe?>h`v-BumJqisb*@ensO6FX)6B3h*2De&t`R;(!aFx z(@vcmH{Y#`ymP18dvdLM-vv(X)h^R+-w~fs*i@pSdmH0*4Vs(Hk+(&~uN*6u4OBMBQ0>E7W1hp&<4nuQ38y~(~UT?RvT#$-SQLeuQg!+QObyW)g zv^+Ipa2UQ`goZ9`cLtr;j|4;Vz+Nc8^Kg|TBw9sCWxl*xrLU;~U#h<#P(IFD0BzL8 zuaB-|sEKk|%yE09fPI%J61H-m_&iv}N6AGI;cZGt(~tbR(}@W z90HE$tj4Cn(7&=v9*R7~-ioM(Dn^_WtH$_s}> z5oR<}(C#ge{}*#fvsw#Yc*{#WgLQs>Z)h2yv7YmF z|Ka?UBivf(6kPUI1_wv3229gXnG)?|{LqcH7_{NG;!ek`SYi*FV?0b3@TN@RL|k@! zL;chC<>7h_xxKx8va!Ktz(;*~*(pQm0XAV>v_t5Osz*$ z_${Asuv?l(;l5^ER0#ACd?K5)ETCvtjfSU>?f#b2H@ADW(!0SUY;bdd$ z)TkkH}iS z&sk!5&#<>Qxq$huY!xXXGbG(t9Y>V$ll9xqsr0vcV0cD9DYap#GF~4lX-~EDM70Zj z3Z;eMJW*<@%Lc54_0{U}@clpAvv!Kr0>4XiJd1KC3hAx6bCFEp96Ht{y^4w%rJ1m+r+3);XEx#8j#mtjq?d3;NJu^D600(*zmP8XILPp5EiOgrg%c9c{6I19#bZPA`XgA$9H)d z(cHTLLP>9z3POo~S){e)D%Robu>X?Bikw!FA073*rQ!GB_upQZTb-!K!!lr|Z$p4? z3XuZremp+FkribH@fd~JYu+t!Y>-;V0$@K+t-_l`79g8w?@CUg3p`xa9+Z-)Z^3?i zd^}yF!aq^UoYW;&e%x6t<}RnCH0C{5ad|;VbNEDs<>8sq(G`i@pE7Rvq6;-cN5+nh z9w&B%_S}JQ=r5f8y79wV`Ge4A#MHw26s{<#xo%WWQNrCHdiiP-I&=u8T`qVL;P15E zw064e3qh?;9I4Ay2i??3k29aiUT-QS)D*C+#Pl7mY$B$C2;7KNqxas<4Fis!v??ow zg-+&C-CC;MC%-V@ZO?H|leP`_;t}L@Jvjx@VffL@$9#r!g2($fbiN*Eks9gp{!mF^ zHrVZQzBH25IVKC(ILQkj^xO*ky6S;Y3U2o<84NpHU_ZEvQEA_I^=eK6J&}Z`8U+GL zZC5xjIikLQTabJMG_Lt6dUlOQPb7&5MoxU{rw7)oq)*((kXpC%@!#8wrX zaT8_M-JEiOEx+4Ye~_Q{jRG?&aj8+1TScXukyT9EnnCk=Ev`S4sHTIDSbsJ4nU-)0 zMraDWsYG5eOl5NP2dHeS!Yy}bwe|5L%dcZ)q5O*g7NNmwhGj8gDmwfgq@%zgn_%_Q zA8~T;3E4rLdj}LNX9Q<;ZxYqlX$RE0*ZGNf=uQg0Lq4(2A!n}k2)$GgGwmKTxgK4M zLJz-f&1DtwLb(HQWQu5ufM`D29)!5Om(k9&z1Y`2u)ByWE+@+Y|ABkPaak^yHSHd> z(OQAXDt449-jcUN`=0fI7rau^BXz)ZDVrT1B8Knc$^95(d;wBpNgHF0wZ1*YU zDK?t)@%<*$W+hjX7T6Q}1-wu`{!~m7o_{dG7>4k-p-kUDI%Upia!_QmIJ_Z!A?fs_ z4L`9GiLm1Yx&UA0#xXG~hUy?cl9ICf=Wml2xRP?WP(5M@fyfD_k5AxAY_0uVXEHPZ zD=218cR;e2%i|#m0QlUL_CW3&c`B@DCqrw7b50WQy5dd$uQ%yJWx;GX?F0S??`cwM zE=s*VTB}r4cM%T%R_zvB2Na z6K{mxU7yiC9>BPgrsUo<&d73`8vU9d?z-i(B&fez) znOXoM5Ls-d)$ZR(GkbVIexGMw>AbvjFHbxmc}lD{pNSd2%TNzXN$$Jt&elU+^6Llv z{v(s3xhz(cSfHdRpf13YA2pah0j|b7h(-=#85xj^n2mV*$eJuBQB*G&bhsY5|3}>9 z*ScPE4afnzs{3D{D&gQCLBOTGBv}kX!oGC|Wh7^Rf9Ud3qzMTd4a<;E!P(H+H}_+C zYpSX_pPnC*WMF@6QiX!WvFqX*N5gO?Nr~CG=xc*Yff+-7=SAMapYcPdB2k{X_OD7#Ny~M7&g{+rCLWE2RQ@i&fWj)^p`kKSdl0$`uP9%p^XMgm}PK+uWy(lJAXbnVu zeW-$M=jXA z#lb~2$?~gQ0dqx|cN4Yh-BaYQOWO}S_TDo$@gj9{K^n}AF+^GU@8W(EP?f){_|o(F zvQ!N9kc)=;d&8Hwid&ArB~Hi?~O>$A`<%jvNcWtElTDrK-omWszQ&!%TkM`xCI6wbc$Q69WKwHWlS<1P63s zH+yG%ZuG~S0mLNI@CD0SMK_cDUKd?Tbq@zhyBJXv7kmgm!@zSEiM(<=Rs#&tY76eK z6Q0^I|8o^(!q-&B@#Oyz=rClkco8R{z#cRz?Q2dTKt_oq?w~TTx9%4EN4#R67MWkj zekgoWMk->CBK)s~q5S;1I*houoRw1!u$7j-k>CBMh z&{SVhJw=LKs=&Z6k@T}eDJ-Pa*($i+`a{7{#w50E}){W0^2w>zPx4SYCH~( zP@b~0F!1pMCFo;b-TeS~cXv(jpiQ@D1N!x5!tHe=eYbmiujd?e{@nuF{KcPPCP3=6 zpOJgKL~XH&u2%oMZ1~+eayR60gHATP11#^)Lm>f3ItsbYgu~f zRRtNZ`zBz8LU;wA5q$p!z|L$x!b1x+y*c>%P&NAE#s3AP@ms#V z6;bA?X|_y^+PKG&qx9wKMBF?)4eW`U_+vl%O7d?-22jG&6!cVUc4w&=ed*( zRbyWUsYPKh*>839mNZg7;R?zcezf&sSCr-!IFy=G>?VyCC(4x*3pN*0Y@y-@He}j? zw6A0%=lhRc`i^cTO4JJ+X8;7kegrO@jTjX%y-y#n+Re_;nF>CEO01=6dmHjF>VItw zyg-#~BGzYn*8ct7{AK|7%hVB-q#kHuUdLg4QOEx619KiPfL{ zD@tHa4V?vQKOzE7N=l~JuD;izxxv3Y0)0yjtt@m)ZEEDM0Ywz9)DXQARyy&k=-9z3 z;D26e{Xhik7@;2u3ItyJRHTen!ivn(Aer{GUd*w_uc@cE70n@Z4=Prs(z`$ zk$4bt#^pT5!$-kEv&DvT+);GTgn(i>XA_T)YrIKl<)!F;pwb?Kcre1@+&Xe)Y}n`y z4p2XmWs1Pfgi!xU>APPnn_i}KOfKMKV^44^9UUE^q^PQ?8GC*qxJ|i zkfIch4M>Ha)tv6n3DaSk&g6E{vocu!vg7#Q4R-;pxys-MCi-FjnF#&|KaKCC{7nlmdG4i9zZ5^I3HVdftyj-0GvPZW`5zBQt|V{W*h!=j?13T=j{sHg^e zG=**bvUM#hmN}KQ57QYYh#9i?H_yX0cw`~q}Kd}P%`WViDt=Zr(ZB@9`JC>-9RgCG=$ z^3_k367A^bt2bCp_3!oaMM2~!-Cu&`((1tO0Q3}_5^U(NyR zt>%zrr$)sjOu#&0fync57ch3&=GuaIPgrp8IJGJLNLX z`bcEqoGKNvE*YnO^zEW0qU=}7xKD>?$e3N>*y=7l^{$OQq%QA@|48{^4{(^gXggrv z7Un2uJfo&ZPOwW6d_5V%Helaa+q?bUXkcH3lHU_$`{P`#Y8!-n|3%r{BzlAX5NWyd zXAtnsO2tP2vUe;RYknYh1tHwGx*rx$GKmTtKrWF1#!ix?f0s!~OB18`#bJ-2AxHb8 zAP=t*5%8ZLF?PKQ=4nPMR0cwM)yja?b3cIt zxLk#pTN9o|Bdi9GPfsfa15FGm836vLs%nN|+3&(^#PTH@T;v<&7&It^5J)iP$%){X$zgt+d0d&(-ABaM?=a?Z!{^gUHo!#H>>qij7=qE^`NPwbW%lq~9P}S%f63nZ`l?s3{h6TV|0G*ZLBt#axD_E=&RrUdQ(;P zz^-f^F(0#P(rq(vpp_{J(7~Gj!9HsI)8a|M+(qSJ&gpAguViYBFzfm2QMmT`eFVs$ z%U`+g{6uUJX2bBfxziv zm`cRh93k9UAq_7o+lob)gHX8y1Kb*qYSY<3qm|o3!hW}tL9(i8L7#0^Qqm8c!X3TJ zh0U6Z{yC52_dXyeHA1_WSy?01da2N2m{}$5ifq(3G(Il38E|5xqN@w|`6>wu5O@X; z^`&HE`ybg(cu@w0EO<0h_LQ=zN&^uwB`Y%%gAf-sN{LA(7dJ#Hv~N@_(@ijf7P_#g zC}SEZFr2JOM?*t+dwZ))kE`Fq%f?g4bI=A1*4C4tapV6@~)2tT!o>Y$=oCfRp@Pa*UlV<2d~{-3U2N&LuyX-U1LMSv}?AIArtVSF{4nLr=AlA%MYgmqM|ad zsAZ1H6Z+~`2FQPQYScT|qd1+uxYf8NU^3tBTZ&9dvrAD(+h9u=%VZ{8w+~0at&&XH ztAuo&fV(LNR7F`~yWa)0v5__q@xFAyvSuMFg=^B3ua+o2*h3_m?^G(=BH*5yw+_o1M9rO^~~b}V;Yq5w&JWlWMosGlQYlqBOE#0 z`|DW_QZzvYII8U8J;dAc|IlCd^C*uKdkS4uumD#t12d?<5~9me&=-tzui@Qf9)u$a z88nWok!e8WPWLeOL7`X2%HKOu@%1GCni8^I?B$LJ&yEA?kD7C>@!kjRTW4 zIRGCIjyq=otCoL8rI5as+JGC^6$f|)(3v85!HlJXwaTv60LKB!NIYikUH|L$lXc(g zy5sjx+aGK5bso4LZ=rg-KdpNoG7N0NV8Wl}&m8v$6G2_)}> zDB_;pLW7R(4M~3yA=RbO#+26UAnN_wr~HH!La7{2@ct?k7Jy`iNxtCTsy%txoBb={ zf{5(&sOUXZzP;>x*)KZNv3k+saPk-F6G{k>4q<^*7|QP%S4=b<%r9}nJ555?_ka}> z?eGCF*pgPhYdjev$Zh(!gkbdlK0~+#4bMxqhs);SOJsTL()1OIAH8pM!(91r(uUS+ zxnto4h~@!bY#5@>U#O@z&|s+7lYqF54Q5#(-i(p(JXX0xi*yyI__>!h`-^}4(SJr zkQ3>mbXEjdPH8Wsb)mEXLP?OcLB0&U{p6?ENWijmBf8+W$oS@)HBMhJMntGZl#|Ai z#aUm@mohN~iMF#jXJr+#W`@*m7f9cd@2;G{D!{8TjT=OVbJ4uh0zPATECU(e5Uj&Z zd5p>Wpy=wsb_$Huqtf1`D5oHWv+dY*bM9A7vtQUOit^#l`K@B*tDO?hmO7@5BvdU4 zk^59|vp zX(uLiT4P0}^KjE_;gqJ4_%KSBH8dqSlfE@lT>ir4$C&7WH15` zM5s0B0({vb;=CWz8wqREt(f*-??G$wi*2Uqs=?Nnx`)4UoP4`hZR_`tKmIj)(mJVV z8IXzgvO_n3my+l@Q`e%s|^g#?T_lZ!kh ztz~-$i0;SPCmJ_u4D^st(TXQy-NqH<>B#<(&)YQNER_;g`|Swx^5X5b3w(-9&>Iv7 zK_tY4)f`wr2&ElRNYJx?Nk_E`Fl0S4Grx0aUHv=twX(>#6}@DvC^tWLp}p9?xP;kN zpsVqdblug8Oqx5M+|hC3H_PG5F14K(BQw+QPA@J4FaEkbB=C#Za2Q!xJyu5z5QV;H zaTol*vd%l6t?&QiNrYdsy$jW zgxaJ^ZN9gk-=DwykvtwZH}~H2ew_C?ulIT9eV#B5Rvm|)w@a&2B8i}OF0J^Hu9t5R zH*bd9L(lp|X6y-ll;9QYyGWzfIL-EiKS|=u(Og#`rRa?1#|m3f!Qfa5xgRymt;WHD zNqR*NxVmj04=|$6JIh3EoJ-Zs%ZnQ7Gy5sUO?;GhBjZ3*lPXI>h9QudnP9bRpJHs0 zZlrC)2;HoKK;#dR`|czDQ2Fn97W*_HkPOm^)_;J3TgR#xE>n^yAl!;Oa8mPpc@!?BC+mt znBGE*3_9A>@co6+27rlUmDa6Hia>GVJ^NhyI-k}17A;R@oSYr24`fbr zwe{m=ng_)gA@WqgAy15xkVto)k8|8)KTMQSYnw*TCdm2^Yl6e4)o zbgnM!gUB*XOYQ}w<6n_6DJ9QOa7AmKjf@Qnxnp9Arr%RR@7m3V(XglNu*izPzrv3Y z+|p5FNUcUWKJfeVqk>?oQ6mV}QOaapeM-ZXTGmLT#ZCM&^)b*HTW=7 z$`g3FtHVyBkV-t;M$p{h=fB0l!6EDW z>(1A&Uq{nC8^pf2wzZjaD7|>G-?^E64k2OY7Q_3ecIQtb-!%?>jEIboo`(f9c`y5x z@OYcA5-o&U`ARLB9r3qT@^H+36l00;EMey*j z6&`L)kH_zI6lG?zzL|cRp2U>^V~69w@k#tQ-}PH{c7OVPa7*8lvc@*bv^rH#w-Ey4 zmcX0Ak-Y}+N`6txv_gR!lY!LMRfmN%;g=J$RWwXGI_s?%$fRgu3Y z7*1hih9vI1MTYqfHg zX$4FZs%m?2alt3f9rY)DpPZ~|QG2Ko!)hz26;o4%vFez!Tn57!$T}6r)BY1JqoMmsMmpdzEnCB)vwh!t}Rryp@X z{5EzG;^%jjcq#7jMR`EhKU!Rt%_#^u`nsxd93GrtSTi$Kg6qB%u>IIT`=)0)+;b3T}={Fq&9VXCk_4aLUEFCmULLeP?ntS zYE%<5vRp0?w6ck`xMX!Q#^Og?xgIu3s?T2Kj1|;QNZ*R6vtV;ZhAGZ5vr)tS!0GCnpqCa=kK7; z-);Wv#xJRWFE8ol8;CY2zxpj%k*zwpq!Yorqyr9i^j>gCWy=5Yxrg7M=*)@5^78eycncC5{b$;f)_%Z6RO#@*)IXxBw-cAYj1v1S)Lj)-( zRFzh-De1k zbPJlt&6dt950D9ZbklLAm6>% zi$yaHv4ecIqhIdfjOoGXnNoqHSCB(xFc=*qa*t|#nebjq`rf!n4GDWw*aO9-N33Jv z^12!Y-xO7CG<$c_LU`0@aLu%b?g4v~4dY@y zp2@WLeD6n7y5iY3Ilt(Y|B{%Gz=W84q^-_?hg3A86c+gYU?uSJb!e8AKKfUeEMsYP zaq*qr-g!pF>E=gNTc9dN{7WZFTi@*fzwZ*$Bga}C1$y)OY=ujykGQeEJe&P(dCEM1 z@mG?lq3Ym=IDIH6z+LKh%ajJt#axtUJPm+JP`r2}r85?ir%YrB%nD%LLW)nj^whYL zGnqto;4lhdrvr>hfkNtF7(X!FDvN&Nf2d4H4P`9`dMDA>lv4G7Uy}gWSElpQ2ktiK zYg1r)_~@UxWWC2cfWxkYfA=}&O9QtU0wk6_+L(1H6gt^dxxM{#rq%`iGA3sHaN5=ufA++u`|{#! zWBX@qN_MvX&P;ti;Fy1MQB$98ibHYmjHAwDc53$-4>vcVzH!cn zeEMa@P^0JKP=^|aWy8~cB{eQrXk3o5F^{Ndl5NZ3l;zH@np%?qs_5om-dh!*!OVI8 zp0=q;S~3r=a6m2LF_Th%esQ$8@zJwA7ubs}XuGDjQrkAu^3Tay_Bg;bbpsHn5|vxW zzwveU-6Uk>Kg^%XEZW_@}xVZ9_VRr92lf7~y~X z?(7q>u=8X0aF+#4V8~v%dF}T9Zv`a@(u5@&OOr*(@n{iVuTEuJpFvy}KOd(6@1$s7o`r4t%>QXqb z)80bc9ErRb>J<%_rdQjsf~tZmtg4es%zXm!tha^pZT<5di*{!Mu5+Tqh<9Lc(6R3t z6;+|6$IOV_9!71`(ea!LT~#`>(B#b({Fp99nLK|~TkiRG&OdSX-~k1Y=&M=VTK@Vb zgstZqCC<23sN?cfAO_fEg;Ch%0col|1z}xz_&TrNNQ1|06BTk35Y%N8reJ-bpc)|~ zld-h{u(s!)&w9+=!A;E0e%yjQRlOc1VN5!BDudO_3J(u2=M(Ro3q9Q^+UDz?vku;= zr*IhoV!t%o-uJmuyK%9xxaR#oe|%48jpgO_(#@Fv^Y|PSvL;p}b!m8#D!2}(^Rmt^ z2j_-Litvu;G$z?f(qdmSfMXbeD&lk5w+a*+EB)`7Y=o?uu!nhyH?*)sn_BVIcGse* zH5u)4HoGoF_6asQKOpQkOrr8eJW*7q*AU^n#LZ#?Cgpbc`CK)al8e8yp5-(c4G``XAm`uyVJC!!16*-GSKBU1q7iqk(qQZBrjo3lE_MZ#}9NW|y+Jk*S5 z?bl>G;Rhisu|)Y)`qaA`**KMOnw^C!SZx&piF)&)VI-c_cn=yCx!l zWa0W8(Q(&%FgslF*sgi4m_L-BFc+{Gy4|eG7DL7M*u$#>f^OYyd81%Wn7f(5!k!Hj zLmIlf^9QektXrS&JZ=M3zW+Ahdo*ck`w+-dD#77O=OXs3h`uMP5%MTHv@r4;e{ciq zMcQ?ocU_)gHiDBZ783su75=Z5NCb1f|7{`FluV}ZnvURKZo#r@I#nUF=BPYX0ic3A z|F-T25i6`w9+^Cl61|iT_AK{BQj?rsp6z*1fqQJ3zPg|Tqg6ome5hDKoXR{wzNDHO z1gUlwSkwTsVYE|CgTXfpU~h$bAXUBkN*7<)=_X#aW7jR$2v(Iln<$tFX=3DPwwTj^ zQ_*#0QsE3{4tX;a4YzpN2t#{*_T(l7Q>i zEho#lNSK-I%~hdA5ia4pF6EhSiwEzd-$2wfMm85rtG zruq;>i4;mnSFT_-Vkfo4Mt*sG!+70ySm9_yxZ}L*Dkh-l#nt8ZMfe&?f3L_~pNC4T zQITE+XVJjB8WL*y`&}=A);S!5Zy@xw{XK|E=?K`5qfOp;va&j0F+*do<0=daA8zsA zGE(^kr2g(WT9K4XR*M?)Q10@uULv~h0bZLCzRt;5MVSe@0GqJqRi&2w+h(E zL>QKc2Uwy>%!fF@9H7Efs@MBeRH)!@89|V$Zp5ud%|H)o)$oAFK(Q}{`i}$>We8UV zMZ>@!gFqRP*MwU?AZTC|7z2XtCJs^sFqwfchT~WjBDe{*%NYiVTFP*VbdfU(tq{m^ zh}g-k5*7u9WA^txSz)Nnw0dHx5+KL|XV`U^b%2wj3IHUP5$dB+-bAd1?~%-RlQhV`5mS9SLQ% z=k@&*>idrtIG{zvEDjI*H~C|<0!yhOY6z+Yo(bqMjq-#!lo|s-Lp{8`y@lpO))zmb z^|mJ^ot6EN!7h}#oAmz#UXG1GVrE!Mm<+o5yTkIASHnPf>#6tjY59;jmmxNil^khq z@TmQ@1S`%+(Z}&o7&(YonaF|iM<;J+D(>|;4Jg*)Br=2^X=*^&V7CiTq-xIxiBvaI zzU8JsP~`7hA@ZM+BfWNl_u5RKnJs++u_CCu2Y7DCAq(uH?2$BSwX33$FxV2aRT&w@ z-Q;rn5wNqic+c@e#wd`el3PFOHT;T>W5RsOnh2RsHNh;7Ip0{NMj+jamof4i|qKY(0 zg%LypVo(PDIQiRZ=_I0v@`%fv1)3OH14_;^U&iAP0Vx$?53B=M$<}5K_z#~vUiQtp z)%ty7@^+8go~>!T)(q`G<6%e1&V6pFWc!6Jl7rCCR8&;t0P%7ix31}K$)QXfJzzo# z5kak(BQ^LLm1!{7r;a*_P*=01Iu&-Gc_+eyMv4ad+e_i=ckS+1sFpq3URP=dnTg=0 zpzIv=JO(`X_d>&|{2 zl7Jxi;OrPJ2^qco!X1+Ug{~SvkS`?xRjYn}j%|OZ4mS(kV$SM2YSkVU`?i_={i{`Z z{XctI(`on1Yse)$lii=oB9{{*Joq5)76J&GU;0_H5F;{9h&6{eLgo=bTfP!& ze+0%-Tm#wDOFVvCr+Llgaa)@}Wfsb<0m$=hBhbCot*HvRX1mS^ z$-nbUnPoOVrFYb`pNm%Hcgsl^flG{m)6~O*3YC3MX-+rHy85r!KPO%(rV|YV$|rc; zujLEy$MUmg{=HnZ8}B?llpleTFHg4#Dp9VQUTksfPqy~w8&;Ck-Oc6FU2c=oC5*de zHZoTT^&&jp{1?wuL4u4#J$_v1g`*!dUM^;(bqv#sIrHkH&!77F9sB`+7uP;F8aC_E zHCfP`VUXT>K0f<%0HPH0i;8*h!hOG%Cj2{^W5T}x^J3m!wEzw@-N1$H>CXz(w627YP5erx>&W@c9>fMMq-en^|I1;~e2;ve3V1&WKL= z#uLl2beZOt<}Cc(L$<0GQwqw+Ev4Xm%ncTnE#6mydKoMwb!a{m@#^t0a%CH{E@WR` z%B_z4HmmdJ@m_;ySaP4$FuV9h<-f_(49tzV3X#vnx=OaWvh{qf>?@4XvPP*pSD3Um zxB=-tQBl!O|K@|np8RwcAUNeig+8aHrTuJVWOSF3qf{!M*mP3CwF%S)Hyi{6t7QY7oFe~IotSNRvx|NEFm5U#4? WWV&_^GYUY!>z;<5dZnse#Qy+w0V^>8 literal 0 HcmV?d00001 From 45b0a5c2a69b82ed16aab3f71e4293cbdd3ac529 Mon Sep 17 00:00:00 2001 From: fkwp Date: Thu, 3 Apr 2025 22:47:01 +0200 Subject: [PATCH 065/225] reordering --- README.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 32a6f80a..6a72ebbb 100644 --- a/README.md +++ b/README.md @@ -45,28 +45,31 @@ organize the flow of the meeting. ✅ **Emoji Reactions** – Users can react with emojis 👍️ 🎉 👏 🤘, adding engagement and interactivity to the conversation. -## 🚀 Deployment Options +## 🚀 Deployment & Packaging Options -Element Call can be packaged in two ways: +Element Call is developed using the +[Matrix js-sdk](https://github.com/matrix-org/matrix-js-sdk) with Matroska mode. +This allows the app to run either as a Standalone App directly connected to a +homeserver with login interfaces or it can be used as a widget within a Matrix +client. -**Full Package** – Supports both **Standalone** and **Widget** mode. Hosted as -a static web page and accessed via a URL when used as a widget. +### 🖥️ Standalone Mode

Element Call in Standalone Mode

-See the [here](./docs/embedded-standalone.md) for more information on the packages. -### Standalone mode - -![Element Call in Standalone Mode](./docs/element_call_standalone.drawio.png) - -In Standalone mode Element Call operates as an independent, full-featured video -conferencing web application, allowing users to join or host calls without +In Standalone mode, Element Call operates as an independent, full-featured video +conferencing web application, enabling users to join or host calls without requiring a separate Matrix client. -### Widget mode embedded in Messenger Apps +### 📲 In-App Calling (Widget Mode in Messenger Apps) + +As a widget 🧩, Element Call utilizes only the core calling (MatrixRTC) +components, while authentication, event handling, and room state updates are +managed by the hosting client. Element Call and the hosting client communicate +via the widget API.

Element Call in Widget Mode From ab8a86e451f9b43c4502a378186e91d63a5d7f65 Mon Sep 17 00:00:00 2001 From: fkwp Date: Thu, 3 Apr 2025 23:10:53 +0200 Subject: [PATCH 066/225] prettier --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 6a72ebbb..02b1de33 100644 --- a/README.md +++ b/README.md @@ -53,13 +53,12 @@ This allows the app to run either as a Standalone App directly connected to a homeserver with login interfaces or it can be used as a widget within a Matrix client. -### 🖥️ Standalone Mode +### 🖥️ Standalone Mode

Element Call in Standalone Mode

- In Standalone mode, Element Call operates as an independent, full-featured video conferencing web application, enabling users to join or host calls without requiring a separate Matrix client. @@ -124,7 +123,6 @@ deployment for three different sites A, B and C is depicted below. Element Call federated setup

- ### Backend Discovery MatrixRTC backend (according to From bc0ea20343667ce0281cc3c609c13cb9cbf928a6 Mon Sep 17 00:00:00 2001 From: Valere Fedronic Date: Fri, 4 Apr 2025 23:24:42 +0200 Subject: [PATCH 067/225] Default vite config to support using local build of crypto wasm (#3038) * Devex: Default vite config to support using local build of crypto wasm * use realpathSync and make it work with linked and not-linked We need to use sync because an async defineConfig fails for the embedded exports. * also allow just linking matrix-sdk-crypto-wasm (without js-sdk linking) --------- Co-authored-by: Timo Co-authored-by: Timo <16718859+toger5@users.noreply.github.com> Co-authored-by: Robin --- src/utils/matrix.ts | 2 +- vite.config.js | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/utils/matrix.ts b/src/utils/matrix.ts index a2530ecf..0a2b5c1a 100644 --- a/src/utils/matrix.ts +++ b/src/utils/matrix.ts @@ -337,7 +337,7 @@ export function getRelativeRoomUrl( } /** - * Perfom a network operation with retries on ConnectionError. + * Perform a network operation with retries on ConnectionError. * If the error is not retryable, or the max number of retries is reached, the error is rethrown. * Supports handling of matrix quotas. */ diff --git a/vite.config.js b/vite.config.js index 5aaee3ab..590f3c16 100644 --- a/vite.config.js +++ b/vite.config.js @@ -5,13 +5,14 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { defineConfig, loadEnv } from "vite"; +import { defineConfig, loadEnv, searchForWorkspaceRoot } from "vite"; import svgrPlugin from "vite-plugin-svgr"; import { createHtmlPlugin } from "vite-plugin-html"; import { codecovVitePlugin } from "@codecov/vite-plugin"; import { sentryVitePlugin } from "@sentry/vite-plugin"; import react from "@vitejs/plugin-react"; import basicSsl from "@vitejs/plugin-basic-ssl"; +import { realpathSync } from "fs"; // https://vitejs.dev/config/ export default defineConfig(({ mode, packageType }) => { @@ -64,9 +65,25 @@ export default defineConfig(({ mode, packageType }) => { ); } + // The crypto WASM module is imported dynamically. Since it's common + // for developers to use a linked copy of matrix-js-sdk or Rust + // crypto (which could reside anywhere on their file system), Vite + // needs to be told to recognize it as a legitimate file access. + const allow = [searchForWorkspaceRoot(process.cwd())]; + for (const path of [ + "node_modules/matrix-js-sdk/node_modules/@matrix-org/matrix-sdk-crypto-wasm", + "node_modules/@matrix-org/matrix-sdk-crypto-wasm", + ]) { + try { + allow.push(realpathSync(path)); + } catch {} + } + console.log("Allowed vite paths:", allow); + return { server: { port: 3000, + fs: { allow }, }, build: { sourcemap: true, From e5358e86092701377e6aec424fbac1860e0fef95 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 23:26:09 +0200 Subject: [PATCH 068/225] Update dependency vite to v6.2.5 [SECURITY] (#3169) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 28e0326e..c2507f4b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13101,8 +13101,8 @@ __metadata: linkType: hard "vite@npm:^5.0.0 || ^6.0.0, vite@npm:^6.0.0": - version: 6.2.4 - resolution: "vite@npm:6.2.4" + version: 6.2.5 + resolution: "vite@npm:6.2.5" dependencies: esbuild: "npm:^0.25.0" fsevents: "npm:~2.3.3" @@ -13148,7 +13148,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/5a011ee5cce91de023a22564a314f04bf64d0d02b420d92c3d539d10257448d60e98e52b491404656426fba4a50dc25f107282540d7388fc5303dc441280155e + checksum: 10c0/226bb3c1875e1982559007007580e8d083b81f5289f18e28841d622ba030599e1bd9926adccc8264879e319e9f9e4f48a38a0dc52a5dfcdf2a9cb7313bfc1816 languageName: node linkType: hard From 6884b19a7336cf9aa7b8064fbb886bfee539b541 Mon Sep 17 00:00:00 2001 From: Timo Date: Sat, 5 Apr 2025 00:01:56 +0200 Subject: [PATCH 069/225] package and lock file --- package.json | 2 +- yarn.lock | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 03facac7..2041dbff 100644 --- a/package.json +++ b/package.json @@ -39,9 +39,9 @@ "@formatjs/intl-segmenter": "^11.7.3", "@livekit/components-core": "^0.12.0", "@livekit/components-react": "^2.0.0", + "@livekit/protocol": "^1.33.0", "@livekit/track-processors": "^0.3.3", "@mediapipe/tasks-vision": "^0.10.18", - "@livekit/protocol": "^1.33.0", "@opentelemetry/api": "^1.4.0", "@opentelemetry/core": "^1.25.1", "@opentelemetry/exporter-trace-otlp-http": "^0.57.0", diff --git a/yarn.lock b/yarn.lock index c2507f4b..2216ae77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2545,6 +2545,18 @@ __metadata: languageName: node linkType: hard +"@livekit/track-processors@npm:^0.3.3": + version: 0.3.3 + resolution: "@livekit/track-processors@npm:0.3.3" + dependencies: + "@mediapipe/holistic": "npm:0.5.1675471629" + "@mediapipe/tasks-vision": "npm:0.10.9" + peerDependencies: + livekit-client: ^1.12.0 || ^2.1.0 + checksum: 10c0/a33478a340f89ae489ac2e1dcfbc1c69744943301c5f3bd22f604b63b188ef0feebe065d4cf084fcb53d9766d10c7655f8045e19549772471d52d3a976c36778 + languageName: node + linkType: hard + "@matrix-org/matrix-sdk-crypto-wasm@npm:^14.0.1": version: 14.0.1 resolution: "@matrix-org/matrix-sdk-crypto-wasm@npm:14.0.1" @@ -2559,6 +2571,27 @@ __metadata: languageName: node linkType: hard +"@mediapipe/holistic@npm:0.5.1675471629": + version: 0.5.1675471629 + resolution: "@mediapipe/holistic@npm:0.5.1675471629" + checksum: 10c0/241cacfbff10b6418a815dfb24c36d77c626f5e10c60045a3d8cdb9f89c6e346e0d356dcfe1e8bbc4d00040983b4bc426e802a45af3f7142554afda3239ff8fc + languageName: node + linkType: hard + +"@mediapipe/tasks-vision@npm:0.10.9": + version: 0.10.9 + resolution: "@mediapipe/tasks-vision@npm:0.10.9" + checksum: 10c0/38a3112bf5f073e6b15f3a1556c4d628371f1068cbe16aabeae288f43be62f8c17f4ae66590bda11be6a9aeb098736c85d102751277db5bb4b881516a23e43a5 + languageName: node + linkType: hard + +"@mediapipe/tasks-vision@npm:^0.10.18": + version: 0.10.21 + resolution: "@mediapipe/tasks-vision@npm:0.10.21" + checksum: 10c0/11b2bdf98b8cb6e044f2a954e7c8393169e62c86ff49b3d0b61c3b327d18e1ccd47a187999b023bad48380c9da41bfa66eb165301c80da07746390482cb18a19 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -4612,6 +4645,22 @@ __metadata: languageName: node linkType: hard +"@types/dom-mediacapture-transform@npm:^0.1.10": + version: 0.1.11 + resolution: "@types/dom-mediacapture-transform@npm:0.1.11" + dependencies: + "@types/dom-webcodecs": "npm:*" + checksum: 10c0/19c76d54cf31aa2a925011fc5f973dff9a10bdecfdf2285e5e568e61850a0fa2b8c9f1807a1462cbefd57ec26d32eeaa9c359117aca9d9fe7f0d6f2fff33f51e + languageName: node + linkType: hard + +"@types/dom-webcodecs@npm:*": + version: 0.1.14 + resolution: "@types/dom-webcodecs@npm:0.1.14" + checksum: 10c0/20f2e9a52986f861eb5725365561c57d4d8c7494322e55f5df1b0639e97d399c3c427e05d2bc7772c9c975197dc12db3e047e3e0ad7b49ae13181514e3d54f56 + languageName: node + linkType: hard + "@types/estree@npm:1.0.6, @types/estree@npm:^1.0.0": version: 1.0.6 resolution: "@types/estree@npm:1.0.6" @@ -6862,6 +6911,8 @@ __metadata: "@livekit/components-core": "npm:^0.12.0" "@livekit/components-react": "npm:^2.0.0" "@livekit/protocol": "npm:^1.33.0" + "@livekit/track-processors": "npm:^0.3.3" + "@mediapipe/tasks-vision": "npm:^0.10.18" "@opentelemetry/api": "npm:^1.4.0" "@opentelemetry/core": "npm:^1.25.1" "@opentelemetry/exporter-trace-otlp-http": "npm:^0.57.0" @@ -6882,6 +6933,7 @@ __metadata: "@testing-library/react": "npm:^16.0.0" "@testing-library/user-event": "npm:^14.5.1" "@types/content-type": "npm:^1.1.5" + "@types/dom-mediacapture-transform": "npm:^0.1.10" "@types/grecaptcha": "npm:^3.0.9" "@types/jsdom": "npm:^21.1.7" "@types/lodash-es": "npm:^4.17.12" From c78360fce278fe0342c0c64a67ab29ca17d28bfa Mon Sep 17 00:00:00 2001 From: fkwp Date: Sat, 5 Apr 2025 19:29:08 +0200 Subject: [PATCH 070/225] Update README.md Co-authored-by: Timo <16718859+toger5@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 02b1de33..302ff12f 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ and voice calls within Matrix rooms. ### 📦 Element Call Packaging Element Call offers two packaging options: one for standalone or widget -deployment, and another for widget-based seamless integration into messenger +deployment, and another for seamless widget-based integration into messenger apps. Below is an overview of each option. **Full Package** – Supports both **Standalone** and **Widget** mode. It is From ca1410bc850679b8d3e12ae9b74ecdb612cf30f2 Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 7 Apr 2025 11:30:34 +0200 Subject: [PATCH 071/225] hint towards cs api --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 302ff12f..56ed1162 100644 --- a/README.md +++ b/README.md @@ -65,10 +65,11 @@ requiring a separate Matrix client. ### 📲 In-App Calling (Widget Mode in Messenger Apps) -As a widget 🧩, Element Call utilizes only the core calling (MatrixRTC) -components, while authentication, event handling, and room state updates are -managed by the hosting client. Element Call and the hosting client communicate -via the widget API. +When used as a widget 🧩, Element Call relies solely on the core calling +functionality (MatrixRTC). Authentication, event handling, and room state +updates (via the Client-Server API) are handled by the hosting client. +Communication between Element Call and the client is managed through the widget +API.

Element Call in Widget Mode From db10903ea0664ece3a106cb5646e874fce8be82b Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 7 Apr 2025 16:58:07 +0200 Subject: [PATCH 072/225] Update README.md Co-authored-by: Timo <16718859+toger5@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 56ed1162..8ac32d80 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ requiring a separate Matrix client. ### 📲 In-App Calling (Widget Mode in Messenger Apps) -When used as a widget 🧩, Element Call relies solely on the core calling +When used as a widget 🧩, Element Call is solely responsible on the core calling functionality (MatrixRTC). Authentication, event handling, and room state updates (via the Client-Server API) are handled by the hosting client. Communication between Element Call and the client is managed through the widget From a7dc289b2dd4939269b053ed0d5f24bca8794002 Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Mon, 7 Apr 2025 17:52:19 +0200 Subject: [PATCH 073/225] Add yarn and bundled element call renovate group. (#3173) --- renovate.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/renovate.json b/renovate.json index 31709cf0..392a6631 100644 --- a/renovate.json +++ b/renovate.json @@ -48,6 +48,20 @@ "groupName": "Vaul", "matchDepNames": ["vaul"], "prHeader": "Please review modals on mobile for visual regressions." + }, + { + "groupName": "bundled element-call dependencies", + "matchPackageNames": [ + "com.vanniktech.maven.publish", + "com.android.library", + "com.android.tools.build", + "gradle" + ] + }, + { + "groupName": "Yarn", + "matchPackageNames": ["yarn"], + "extends": ["schedule:weekly"] } ], "semanticCommits": "disabled", From 6398fd2783dd0f75caa4981f35fae523f425b11d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 07:15:13 +0000 Subject: [PATCH 074/225] Update dependency livekit-client to v2.9.9 --- package.json | 2 +- yarn.lock | 35 +++++++++++++---------------------- 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index b3b57a47..979298d0 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "i18next-parser": "^9.1.0", "jsdom": "^26.0.0", "knip": "^5.27.2", - "livekit-client": "2.9.1", + "livekit-client": "2.9.9", "lodash-es": "^4.17.21", "loglevel": "^1.9.1", "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#8395919f0fd1af7cab1e793d736f2cdf18ef7686", diff --git a/yarn.lock b/yarn.lock index c2507f4b..71c4a78b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2527,16 +2527,7 @@ __metadata: languageName: node linkType: hard -"@livekit/protocol@npm:1.33.0": - version: 1.33.0 - resolution: "@livekit/protocol@npm:1.33.0" - dependencies: - "@bufbuild/protobuf": "npm:^1.10.0" - checksum: 10c0/5eced9581c4af7fd67e65e93a40a389202b8a9031b4e76d7709d5c1e35ae5816c11a7b9265d6b9cf8b19c3b4077dbdd2a17275a29e98f9ec785232c4750d8ded - languageName: node - linkType: hard - -"@livekit/protocol@npm:^1.33.0": +"@livekit/protocol@npm:1.34.0, @livekit/protocol@npm:^1.33.0": version: 1.34.0 resolution: "@livekit/protocol@npm:1.34.0" dependencies: @@ -6919,7 +6910,7 @@ __metadata: i18next-parser: "npm:^9.1.0" jsdom: "npm:^26.0.0" knip: "npm:^5.27.2" - livekit-client: "npm:2.9.1" + livekit-client: "npm:2.9.9" lodash-es: "npm:^4.17.21" loglevel: "npm:^1.9.1" matrix-js-sdk: "github:matrix-org/matrix-js-sdk#8395919f0fd1af7cab1e793d736f2cdf18ef7686" @@ -9289,20 +9280,20 @@ __metadata: languageName: node linkType: hard -"livekit-client@npm:2.9.1": - version: 2.9.1 - resolution: "livekit-client@npm:2.9.1" +"livekit-client@npm:2.9.9": + version: 2.9.9 + resolution: "livekit-client@npm:2.9.9" dependencies: "@livekit/mutex": "npm:1.1.1" - "@livekit/protocol": "npm:1.33.0" + "@livekit/protocol": "npm:1.34.0" events: "npm:^3.3.0" - loglevel: "npm:^1.8.0" - sdp-transform: "npm:^2.14.1" + loglevel: "npm:^1.9.2" + sdp-transform: "npm:^2.15.0" ts-debounce: "npm:^4.0.0" tslib: "npm:2.8.1" typed-emitter: "npm:^2.1.0" - webrtc-adapter: "npm:^9.0.0" - checksum: 10c0/06c4bcfe22c2629bd3e2a7fdf5d104425ed9c781d77a39fd61940d30a85dff0b9e3364b0ad8e584a8dc2d885f625532dd6ec151f5c8a4ecfb16cdcf2718e817f + webrtc-adapter: "npm:^9.0.1" + checksum: 10c0/5e788aa4302dfb0b3666c840424b1fa2bd2fb6630bbb284837e6e5b775f735d911c12b7d3633de2de6d51a5dbd3bbf1c89f963f4c56a8480ab1439032e84333c languageName: node linkType: hard @@ -9359,7 +9350,7 @@ __metadata: languageName: node linkType: hard -"loglevel@npm:^1.7.1, loglevel@npm:^1.8.0, loglevel@npm:^1.9.1": +"loglevel@npm:^1.7.1, loglevel@npm:^1.9.1, loglevel@npm:^1.9.2": version: 1.9.2 resolution: "loglevel@npm:1.9.2" checksum: 10c0/1e317fa4648fe0b4a4cffef6de037340592cee8547b07d4ce97a487abe9153e704b98451100c799b032c72bb89c9366d71c9fb8192ada8703269263ae77acdc7 @@ -11710,7 +11701,7 @@ __metadata: languageName: node linkType: hard -"sdp-transform@npm:^2.14.1": +"sdp-transform@npm:^2.14.1, sdp-transform@npm:^2.15.0": version: 2.15.0 resolution: "sdp-transform@npm:2.15.0" bin: @@ -13298,7 +13289,7 @@ __metadata: languageName: node linkType: hard -"webrtc-adapter@npm:^9.0.0": +"webrtc-adapter@npm:^9.0.1": version: 9.0.1 resolution: "webrtc-adapter@npm:9.0.1" dependencies: From 95fed3fc2d523f9317b62147494ecf8cbd3f4714 Mon Sep 17 00:00:00 2001 From: fkwp Date: Tue, 8 Apr 2025 09:52:48 +0200 Subject: [PATCH 075/225] bump to 2.10.0 --- package.json | 2 +- yarn.lock | 23 ++++++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 979298d0..728f5e8e 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "i18next-parser": "^9.1.0", "jsdom": "^26.0.0", "knip": "^5.27.2", - "livekit-client": "2.9.9", + "livekit-client": "2.10.0", "lodash-es": "^4.17.21", "loglevel": "^1.9.1", "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#8395919f0fd1af7cab1e793d736f2cdf18ef7686", diff --git a/yarn.lock b/yarn.lock index 71c4a78b..79feeaa9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2527,7 +2527,16 @@ __metadata: languageName: node linkType: hard -"@livekit/protocol@npm:1.34.0, @livekit/protocol@npm:^1.33.0": +"@livekit/protocol@npm:1.36.1": + version: 1.36.1 + resolution: "@livekit/protocol@npm:1.36.1" + dependencies: + "@bufbuild/protobuf": "npm:^1.10.0" + checksum: 10c0/bb2e56785c542446bef3e2f2fd20b33d01db43b786be87ccb834feee8a664fd32c8231e249b4e1915d7a8eda13af0d59eea479fa710327079a1a370daf05c42e + languageName: node + linkType: hard + +"@livekit/protocol@npm:^1.33.0": version: 1.34.0 resolution: "@livekit/protocol@npm:1.34.0" dependencies: @@ -6910,7 +6919,7 @@ __metadata: i18next-parser: "npm:^9.1.0" jsdom: "npm:^26.0.0" knip: "npm:^5.27.2" - livekit-client: "npm:2.9.9" + livekit-client: "npm:2.10.0" lodash-es: "npm:^4.17.21" loglevel: "npm:^1.9.1" matrix-js-sdk: "github:matrix-org/matrix-js-sdk#8395919f0fd1af7cab1e793d736f2cdf18ef7686" @@ -9280,12 +9289,12 @@ __metadata: languageName: node linkType: hard -"livekit-client@npm:2.9.9": - version: 2.9.9 - resolution: "livekit-client@npm:2.9.9" +"livekit-client@npm:2.10.0": + version: 2.10.0 + resolution: "livekit-client@npm:2.10.0" dependencies: "@livekit/mutex": "npm:1.1.1" - "@livekit/protocol": "npm:1.34.0" + "@livekit/protocol": "npm:1.36.1" events: "npm:^3.3.0" loglevel: "npm:^1.9.2" sdp-transform: "npm:^2.15.0" @@ -9293,7 +9302,7 @@ __metadata: tslib: "npm:2.8.1" typed-emitter: "npm:^2.1.0" webrtc-adapter: "npm:^9.0.1" - checksum: 10c0/5e788aa4302dfb0b3666c840424b1fa2bd2fb6630bbb284837e6e5b775f735d911c12b7d3633de2de6d51a5dbd3bbf1c89f963f4c56a8480ab1439032e84333c + checksum: 10c0/bc5d1d1e08576da3356f567836090a58dfad9b2d9ca2280584acf31676949a88d9526940ab10a9b6cf79545a49f82678cb0665f65851628e6148a9d559cacc90 languageName: node linkType: hard From 23b1a5fff5c2e2a9822b53481754b171fab6d4ab Mon Sep 17 00:00:00 2001 From: fkwp Date: Tue, 8 Apr 2025 16:39:09 +0200 Subject: [PATCH 076/225] cleanup yarn.lock --- yarn.lock | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/yarn.lock b/yarn.lock index 79feeaa9..8d06a0ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2527,7 +2527,7 @@ __metadata: languageName: node linkType: hard -"@livekit/protocol@npm:1.36.1": +"@livekit/protocol@npm:1.36.1, @livekit/protocol@npm:^1.33.0": version: 1.36.1 resolution: "@livekit/protocol@npm:1.36.1" dependencies: @@ -2536,15 +2536,6 @@ __metadata: languageName: node linkType: hard -"@livekit/protocol@npm:^1.33.0": - version: 1.34.0 - resolution: "@livekit/protocol@npm:1.34.0" - dependencies: - "@bufbuild/protobuf": "npm:^1.10.0" - checksum: 10c0/f6c8ad1fe5da151e2fc103118e61c5110df32088e13a03a30dd2de9cce401e9c99eed3cc61324272a8a2fef1c001bb4d215b2a9479774f493b6a301f547f01e5 - languageName: node - linkType: hard - "@matrix-org/matrix-sdk-crypto-wasm@npm:^14.0.1": version: 14.0.1 resolution: "@matrix-org/matrix-sdk-crypto-wasm@npm:14.0.1" From 7297dbcc00666166bab3a573f46887ae6aa57b4e Mon Sep 17 00:00:00 2001 From: Kim Brose <2803622+HarHarLinks@users.noreply.github.com> Date: Wed, 9 Apr 2025 11:32:56 +0200 Subject: [PATCH 077/225] Update self-hosting.md docs formatting --- docs/self-hosting.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/self-hosting.md b/docs/self-hosting.md index 9a96332c..b5ba720c 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -55,9 +55,10 @@ rc_message: # Note key sharing events are bursty per_second: 0.5 burst_count: 30 + +rc_delayed_event_mgmt: # This needs to match at least the heart-beat frequency plus a bit of headroom # Currently the heart-beat is every 5 seconds which translates into a rate of 0.2s -rc_delayed_event_mgmt: per_second: 1 burst_count: 20 ``` From 078f36c14abe3c9d343c691ca08287278d289db1 Mon Sep 17 00:00:00 2001 From: fkwp Date: Wed, 9 Apr 2025 13:04:41 +0200 Subject: [PATCH 078/225] add Community Guides & How-Tos section --- docs/self-hosting.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/self-hosting.md b/docs/self-hosting.md index 9a96332c..424355b2 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -223,3 +223,29 @@ federation, so as to prevent spam registrations (if you keep registrations open) and to ensure Element Call continues to work in case any user decides to log in to their Element Call account using the standard Element app and joins normal rooms that Element Call cannot handle. + + +# 📚 Community Guides & How-Tos + +Looking for real-world tips, tutorials, and experiences from the community? +Below is a collection of blog posts, walkthroughs, and how-tos created by other +self-hosters and developers working with Element Call. + +> [!NOTE] +> These resources are community-created and may reflect different setups or +> versions. Use them alongside the official documentation for best results. + +## 🌐 Blog Posts & Articles +- [How to resolve stuck MatrixRTC calls](https://sspaeth.de/2025/02/how-to-resolve-stuck-matrixrtc-calls/) + +## 🛠️ How-Tos & Tutorials +- [MatrixRTC aka Element-call setup (Geek warning)](https://sspaeth.de/2024/11/sfu/) +- [MatrixRTC with Synology Container Manager (Docker)](https://ztfr.de/matrixrtc-with-synology-container-manager-docker/) +- [Encrypted & Scalable Video Calls: How to deploy an Element Call backend with Synapse Using Docker-Compose](https://willlewis.co.uk/blog/posts/deploy-element-call-backend-with-synapse-and-docker-compose/) +- [Element Call einrichten: Verschlüsselte Videoanrufe mit Element X und Matrix Synapse](https://www.cleveradmin.de/blog/2025/04/matrixrtc-element-call-backend-einrichten/) + + +## 🤝 Want to Contribute? +Have a guide or blog post you'd like to share? Open a +[PR](https://github.com/element-hq/element-call/pulls) to add it here, or drop a +link in the [#webrtc:matrix.org](https://matrix.to/#/#webrtc:matrix.org) room. \ No newline at end of file From eb9593a4e5403a91945fb25975369d9dfdbfae69 Mon Sep 17 00:00:00 2001 From: fkwp Date: Wed, 9 Apr 2025 13:16:25 +0200 Subject: [PATCH 079/225] add information about CORS headers --- docs/self-hosting.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/self-hosting.md b/docs/self-hosting.md index 424355b2..316bb473 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -147,6 +147,14 @@ server { ] ``` +Make sure this file is served with the correct MIME type (`application/json`). Additionally, ensure the appropriate CORS headers are set to allow web clients to access it across origins. For more details, refer to the [Matrix Client-Server API: 2. Web Browser Clients](https://spec.matrix.org/latest/client-server-api/#web-browser-clients). + +``` +Access-Control-Allow-Origin: * +Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS +Access-Control-Allow-Headers: X-Requested-With, Content-Type, Authorization +``` + > [!NOTE] > Most `org.matrix.msc4143.rtc_foci` configurations will only have one entry in > the array From 3c5594b7e107b103fd26d7b4769db539344f7468 Mon Sep 17 00:00:00 2001 From: fkwp Date: Wed, 9 Apr 2025 13:34:58 +0200 Subject: [PATCH 080/225] prettier --- docs/self-hosting.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/self-hosting.md b/docs/self-hosting.md index 316bb473..7f826d27 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -232,7 +232,6 @@ and to ensure Element Call continues to work in case any user decides to log in to their Element Call account using the standard Element app and joins normal rooms that Element Call cannot handle. - # 📚 Community Guides & How-Tos Looking for real-world tips, tutorials, and experiences from the community? @@ -244,16 +243,18 @@ self-hosters and developers working with Element Call. > versions. Use them alongside the official documentation for best results. ## 🌐 Blog Posts & Articles + - [How to resolve stuck MatrixRTC calls](https://sspaeth.de/2025/02/how-to-resolve-stuck-matrixrtc-calls/) ## 🛠️ How-Tos & Tutorials + - [MatrixRTC aka Element-call setup (Geek warning)](https://sspaeth.de/2024/11/sfu/) - [MatrixRTC with Synology Container Manager (Docker)](https://ztfr.de/matrixrtc-with-synology-container-manager-docker/) - [Encrypted & Scalable Video Calls: How to deploy an Element Call backend with Synapse Using Docker-Compose](https://willlewis.co.uk/blog/posts/deploy-element-call-backend-with-synapse-and-docker-compose/) - [Element Call einrichten: Verschlüsselte Videoanrufe mit Element X und Matrix Synapse](https://www.cleveradmin.de/blog/2025/04/matrixrtc-element-call-backend-einrichten/) - ## 🤝 Want to Contribute? + Have a guide or blog post you'd like to share? Open a [PR](https://github.com/element-hq/element-call/pulls) to add it here, or drop a -link in the [#webrtc:matrix.org](https://matrix.to/#/#webrtc:matrix.org) room. \ No newline at end of file +link in the [#webrtc:matrix.org](https://matrix.to/#/#webrtc:matrix.org) room. From cb174aeaa67ede7184a59e8528d677434c45a9ce Mon Sep 17 00:00:00 2001 From: fkwp <5071496+fkwp@users.noreply.github.com> Date: Wed, 9 Apr 2025 21:30:25 +0000 Subject: [PATCH 081/225] Translations updates --- locales/bg/app.json | 2 + locales/cs/app.json | 170 ++++++++++++++++++++++++++++++++-- locales/es/app.json | 9 ++ locales/et/app.json | 132 ++++++++++++++++++++++++--- locales/it/app.json | 117 +++++++++++++++++++++++- locales/ja/app.json | 69 +++++++++++++- locales/pl/app.json | 115 ++++++++++++++++++++++- locales/ro/app.json | 5 +- locales/ru/app.json | 141 +++++++++++++++++++++++++++- locales/sk/app.json | 114 ++++++++++++++++++++++- locales/sv/app.json | 217 +++++++++++++++++++++++++++++++++++++++++++- locales/tr/app.json | 164 +++++++++++++++++++++++++++++++-- locales/uk/app.json | 115 ++++++++++++++++++++++- 13 files changed, 1315 insertions(+), 55 deletions(-) diff --git a/locales/bg/app.json b/locales/bg/app.json index 98bc4e69..b8f8095f 100644 --- a/locales/bg/app.json +++ b/locales/bg/app.json @@ -4,7 +4,9 @@ }, "action": { "close": "Затвори", + "copy_link": "Копиране на връзката", "go": "Напред", + "invite": "Покана", "no": "Не", "register": "Регистрация", "remove": "Премахни", diff --git a/locales/cs/app.json b/locales/cs/app.json index d5ffd705..a63a6de8 100644 --- a/locales/cs/app.json +++ b/locales/cs/app.json @@ -4,40 +4,139 @@ }, "action": { "close": "Zavřít", - "go": "Pokračovat", + "copy_link": "Kopírovat odkaz", + "edit": "Upravit", + "go": "Přejít", + "invite": "Pozvat", + "lower_hand": "Snížení ruky", "no": "Ne", + "pick_reaction": "Vybrat reakci", + "raise_hand": "Zvednutí ruky", "register": "Registrace", "remove": "Odstranit", + "show_less": "Zobrazit méně", + "show_more": "Zobrazit více", "sign_in": "Přihlásit se", - "sign_out": "Odhlásit se" + "sign_out": "Odhlásit se", + "submit": "Odeslat", + "upload_file": "Nahrát soubor" + }, + "analytics_notice": "Účastí v této beta verzi souhlasíte se shromažďováním anonymních údajů, které používáme ke zlepšování produktu. Více informací o tom, které údaje sledujeme, najdete v našich <2>Zásadách ochrany osobních údajů a <6>Zásadách používání souborů cookie.", + "app_selection_modal": { + "continue_in_browser": "Pokračovat v prohlížeči", + "open_in_app": "Otevřít v aplikaci", + "text": "Jste připraveni se připojit?", + "title": "Vybrat aplikaci" }, "call_ended_view": { "create_account_button": "Vytvořit účet", "create_account_prompt": "<0>Proč neskončit nastavením hesla, abyste mohli účet použít znovu?<1>Budete si moci nechat své jméno a nastavit si avatar pro budoucí hovory ", - "not_now_button": "Teď ne, vrátit se na domovskou obrazovku" + "feedback_done": "<0>Děkujeme za vaši zpětnou vazbu! ", + "feedback_prompt": "<0>Rádi si vyslechneme vaši zpětnou vazbu, abychom mohli vaše prostředí vylepšit. ", + "headline": "{{displayName}}, váš hovor skončil.", + "not_now_button": "Teď ne, vrátit se na domovskou obrazovku", + "reconnect_button": "Znovu připojit", + "survey_prompt": "Jak to probíhalo?" }, + "call_name": "Název hovoru", "common": { + "analytics": "Analytika", + "audio": "Zvuk", + "avatar": "Avatar", + "back": "Zpět", "display_name": "Zobrazované jméno", + "encrypted": "Šifrováno", "home": "Domov", "loading": "Načítání…", + "next": "Další", + "options": "Možnosti", "password": "Heslo", + "preferences": "Předvolby", "profile": "Profil", + "reaction": "Reakce", + "reactions": "Reakce", "settings": "Nastavení", - "username": "Uživatelské jméno" + "unencrypted": "Nešifrováno", + "username": "Uživatelské jméno", + "video": "Video" }, + "developer_mode": { + "crypto_version": "Kryptografická verze: {{version}}", + "debug_tile_layout_label": "Ladění rozložení dlaždic", + "device_id": "ID zařízení: {{id}}", + "duplicate_tiles_label": "Počet dalších kopií dlaždic na účastníka", + "environment_variables": "Proměnné prostředí", + "hostname": "Název hostitele: {{hostname}}", + "livekit_server_info": "Informace o serveru LiveKit", + "livekit_sfu": "LiveKit SFU: {{url}}", + "matrix_id": "Matrix ID: {{id}}", + "show_connection_stats": "Zobrazit statistiky připojení", + "show_non_member_tiles": "Zobrazit dlaždice pro nečlenská média", + "url_params": "Parametry URL", + "use_new_membership_manager": "Použijte novou implementaci volání MembershipManager" + }, + "disconnected_banner": "Připojení k serveru bylo ztraceno.", + "error": { + "call_is_not_supported": "Volání není podporováno", + "call_not_found": "Volání nebylo nalezeno", + "call_not_found_description": "<0>Zdá se, že tento odkaz nepatří k žádnému existujícímu volání. Zkontrolujte, zda máte správný odkaz, nebo <1>vytvořte nový.", + "connection_lost": "Spojení ztraceno", + "connection_lost_description": "Hovor byl přerušen.", + "e2ee_unsupported": "Nekompatibilní prohlížeč", + "e2ee_unsupported_description": "Váš webový prohlížeč nepodporuje šifrované hovory. Mezi podporované prohlížeče patří Chrome, Safari a Firefox 117+.", + "generic": "Něco se pokazilo.", + "generic_description": "Odeslání protokolů ladění nám pomůže vystopovat problém.", + "insufficient_capacity": "Nedostatečná kapacita", + "insufficient_capacity_description": "Server dosáhl své maximální kapacity a v tuto chvíli se nemůžete připojit k hovoru. Zkuste to později nebo se obraťte na správce serveru, pokud problém přetrvává.", + "matrix_rtc_focus_missing": "Server není nakonfigurován pro práci s {{brand}}. Obraťte se na správce serveru (Doména: {{domain}}, Kód chyby: {{ errorCode }}).", + "open_elsewhere": "Otevřeno na jiné kartě", + "open_elsewhere_description": "{{brand}} byl otevřen v jiné záložce. Pokud to nezní správně, zkuste stránku znovu načíst.", + "unexpected_ec_error": "Došlo k neočekávané chybě (<0>Error Code: <1>{{ errorCode }}). Obraťte se prosím na správce serveru." + }, + "group_call_loader": { + "banned_body": "Byl jste vykázán z místnosti.", + "banned_heading": "Zabanován", + "call_ended_body": "Byl jste vyřazen z hovoru.", + "call_ended_heading": "Hovor ukončen", + "knock_reject_body": "Vaše žádost o připojení byla zamítnuta.", + "knock_reject_heading": "Přístup odepřen", + "reason": "Důvod" + }, + "hangup_button_label": "Ukončit hovor", "header_label": "Domov Element Call", + "header_participants_label": "Účastníci", + "invite_modal": { + "link_copied_toast": "Odkaz zkopírován do schránky", + "title": "Pozvat na tento hovor" + }, "join_existing_call_modal": { "join_button": "Ano, připojit se", "text": "Tento hovor již existuje, chcete se připojit?", "title": "Připojit se k existujícimu hovoru?" }, + "layout_grid_label": "Mřížka", "layout_spotlight_label": "Soustředěný mód", "lobby": { - "join_button": "Připojit se k hovoru" + "ask_to_join": "Žádost o připojení k hovoru", + "join_as_guest": "Připojte se jako host", + "join_button": "Připojit se k hovoru", + "leave_button": "Zpět na poslední", + "waiting_for_invite": "Žádost odeslána! Čekáme na povolení k připojení..." }, + "log_in": "Přihlášení", "logging_in": "Přihlašování se…", "login_auth_links": "<0>Vytvořit účet Or <2>Jako host", + "login_auth_links_prompt": "Ještě nejste zaregistrováni?", + "login_subheading": "Chcete-li pokračovat na Element", "login_title": "Přihlášení", + "microphone_off": "Mikrofon vypnutý", + "microphone_on": "Mikrofon zapnutý", + "mute_microphone_button_label": "Ztlumit mikrofon", + "participant_count_one": "{{count, number}}", + "participant_count_few": "{{count, number}}", + "participant_count_other": "{{count, number}}", + "qr_code": "QR kód", + "rageshake_button_error_caption": "Znovu zkusit odeslat protokoly", "rageshake_request_modal": { "body": "Jiný uživatel v tomto hovoru má problémy. Abychom mohli diagnostikovat problém, rádi bychom shromáždili protokoly ladění.", "title": "Žádost o protokoly ladění" @@ -45,22 +144,79 @@ "rageshake_send_logs": "Poslat ladící záznam", "rageshake_sending": "Posílání…", "rageshake_sending_logs": "Posílání ladícího záznamu…", + "rageshake_sent": "Díky!", "recaptcha_dismissed": "Recaptcha byla zamítnuta", "recaptcha_not_loaded": "Recaptcha se nenačetla", + "recaptcha_ssla_caption": "Tato stránka je chráněna ReCAPTCHA a platí zde <2>Ochrana osobních údajů a <6>Podmínky služby od Google.<9>Kliknutím na \"Registrovat\" souhlasíte s naší <12>Licenční smlouvou na software a služby (SSLA)", "register": { "passwords_must_match": "Hesla se musí shodovat", "registering": "Registrování…" }, "register_auth_links": "<0>Už máte účet?<1><0>Přihlásit se Or <2>Jako host", "register_confirm_password_label": "Potvrdit heslo", + "register_heading": "Vytvořte si účet", "return_home_button": "Vrátit se na domácí obrazovku", + "room_auth_view_continue_button": "Pokračovat", + "room_auth_view_ssla_caption": "Kliknutím na „Připojit se k hovoru nyní“ souhlasíte s naší <2>Licenční smlouvou o softwaru a službách (SSLA) ", "screenshare_button_label": "Sdílet obrazovku", "settings": { + "audio_tab": { + "effect_volume_description": "Upravit hlasitost přehrávání reakcí a efektů zvednutých rukou.", + "effect_volume_label": "Hlasitost zvukového efektu" + }, "developer_tab_title": "Vývojář", + "devices": { + "camera": "Fotoaparát", + "camera_numbered": "Fotoaparát {{n}}", + "default": "Výchozí", + "default_named": "Výchozí <2> ({{name}}) ", + "microphone": "Mikrofon", + "microphone_numbered": "Mikrofon {{n}}", + "speaker": "Reproduktor", + "speaker_numbered": "Reproduktor {{n}}" + }, + "feedback_tab_body": "Pokud se potýkáte s problémy nebo byste nám jen chtěli poskytnout zpětnou vazbu, pošlete nám prosím krátký popis níže.", + "feedback_tab_description_label": "Vaše zpětná vazba", "feedback_tab_h4": "Dát feedback", - "feedback_tab_send_logs_label": "Zahrnout ladící záznamy" + "feedback_tab_send_logs_label": "Zahrnout ladící záznamy", + "feedback_tab_thank_you": "Děkujeme, obdrželi jsme vaši zpětnou vazbu!", + "feedback_tab_title": "Zpětná vazba", + "opt_in_description": "<0><1>Souhlas můžete odvolat zrušením zaškrtnutí tohoto políčka. Pokud jste právě v hovoru, toto nastavení se projeví po jeho skončení.", + "preferences_tab": { + "developer_mode_label": "Vývojářský režim", + "developer_mode_label_description": "Povolte vývojářský režim a zobrazte kartu nastavení vývojáře.", + "introduction": "Zde můžete nakonfigurovat další možnosti pro lepší zážitek.", + "reactions_play_sound_description": "Přehrát zvukový efekt, když někdo odešle reakci do hovoru.", + "reactions_play_sound_label": "Přehrát reakční zvuky", + "reactions_show_description": "Zobrazit animaci, když někdo pošle reakci.", + "reactions_show_label": "Zobrazit reakce", + "show_hand_raised_timer_description": "Zobrazit časovač, když účastník zvedne ruku", + "show_hand_raised_timer_label": "Zobrazit dobu trvání zvednutí ruky" + } }, + "star_rating_input_label_one": "{{count}} hvězdička", + "star_rating_input_label_few": "{{count}} hvězdičky", + "star_rating_input_label_other": "{{count}} hvězdiček", + "start_new_call": "Zahájit nový hovor", + "start_video_button_label": "Spustit video", + "stop_screenshare_button_label": "Sdílení obrazovky", + "stop_video_button_label": "Zastavit video", + "submitting": "Odeslání...", + "switch_camera": "Přepnout kameru", "unauthenticated_view_body": "Nejste registrovaní? <2>Vytvořit účet", "unauthenticated_view_login_button": "Přihlásit se ke svému účtu", - "version": "Verze: {{version}}" + "unauthenticated_view_ssla_caption": "Kliknutím na tlačítko \"Přejít\" souhlasíte s naší <2>Licenční smlouvou na software a služby (SSLA)", + "unmute_microphone_button_label": "Zrušit ztlumení mikrofonu", + "version": "{{productName}}verze: {{version}}", + "video_tile": { + "always_show": "Vždy zobrazit", + "camera_starting": "Načítání videa...", + "change_fit_contain": "Přizpůsobit rámu", + "collapse": "Sbalit", + "expand": "Rozbalit", + "mute_for_me": "Pro mě ztlumit", + "muted_for_me": "Pro mě ztlumené", + "volume": "Hlasitost", + "waiting_for_media": "Čekání na média..." + } } diff --git a/locales/es/app.json b/locales/es/app.json index 246e8921..df9948b4 100644 --- a/locales/es/app.json +++ b/locales/es/app.json @@ -4,7 +4,10 @@ }, "action": { "close": "Cerrar", + "copy_link": "Copiar vínculo", "go": "Comenzar", + "invite": "Invitar", + "no": "No", "register": "Registrarse", "remove": "Eliminar", "sign_in": "Iniciar sesión", @@ -12,6 +15,12 @@ "submit": "Enviar" }, "analytics_notice": "Al participar en esta beta, consientes a la recogida de datos anónimos, los cuales usaremos para mejorar el producto. Puedes encontrar más información sobre que datos recogemos en nuestra <2>Política de privacidad y en nuestra <5>Política sobre Cookies.", + "app_selection_modal": { + "continue_in_browser": "Continuar en el navegador", + "open_in_app": "Abrir en la aplicación", + "text": "¿Listo para unirte?", + "title": "Selecciona aplicación" + }, "call_ended_view": { "create_account_button": "Crear cuenta", "create_account_prompt": "<0>¿Por qué no mantienes tu cuenta estableciendo una contraseña?<1>Podrás mantener tu nombre y establecer un avatar para usarlo en futuras llamadas", diff --git a/locales/et/app.json b/locales/et/app.json index 169d1195..d3db8c74 100644 --- a/locales/et/app.json +++ b/locales/et/app.json @@ -5,16 +5,23 @@ "action": { "close": "Sulge", "copy_link": "Kopeeri link", + "edit": "Muuda", "go": "Jätka", "invite": "Kutsu", + "lower_hand": "Lase käsi alla", "no": "Ei", + "pick_reaction": "Vali reaktsioon", + "raise_hand": "Anna käega märku", "register": "Registreeru", "remove": "Eemalda", + "show_less": "Näita vähem", + "show_more": "Näita rohkem", "sign_in": "Logi sisse", "sign_out": "Logi välja", - "submit": "Saada" + "submit": "Saada", + "upload_file": "Laadi fail üles" }, - "analytics_notice": "Nõustudes selle beetaversiooni kasutamisega sa nõustud ka toote arendamiseks kasutatavate anonüümsete andmete kogumisega. Täpsemat teavet kogutavate andmete kohta leiad meie <2>Privaatsuspoliitikast ja meie <5>Küpsiste kasutamise reeglitest.", + "analytics_notice": "Nõustudes selle beetaversiooni kasutamisega, sa nõustud ka toote arendamiseks kasutatavate anonüümsete andmete kogumisega. Täpsemat teavet kogutavate andmete kohta leiad meie <2>Privaatsuspoliitikast ja meie <6>Küpsiste kasutamise reeglitest.", "app_selection_modal": { "continue_in_browser": "Jätka veebibrauseris", "open_in_app": "Ava rakenduses", @@ -33,20 +40,70 @@ }, "call_name": "Kõne nimi", "common": { + "analytics": "Analüütika", "audio": "Heli", "avatar": "Tunnuspilt", + "back": "Tagasi", "display_name": "Kuvatav nimi", "encrypted": "Krüptitud", - "home": "Avavaatesse", + "home": "Kodu", "loading": "Laadimine …", + "next": "Edasi", + "options": "Valikud", "password": "Salasõna", + "preferences": "Eelistused", "profile": "Profiil", + "reaction": "Reaktsioon", + "reactions": "Reageerimised", "settings": "Seadistused", "unencrypted": "Krüptimata", - "username": "Kasutajanimi" + "username": "Kasutajanimi", + "video": "Video" + }, + "developer_mode": { + "crypto_version": "Krüptoteekide versioon: {{version}}", + "debug_tile_layout_label": "Meediapaanide paigutus", + "device_id": "Seadme tunnus: {{id}}", + "duplicate_tiles_label": "Täiendavaid vaadete koopiaid osaleja kohta", + "environment_variables": "Keskkonnamuutujad", + "hostname": "Hosti nimi: {{hostname}}", + "livekit_server_info": "LiveKiti serveri teave", + "livekit_sfu": "LiveKit SFU: {{url}}", + "matrix_id": "Matrixi kasutajatunnus: {{id}}", + "show_connection_stats": "Näita ühenduse statistikat", + "show_non_member_tiles": "Näita ka mitteseotud meedia paane", + "url_params": "Võrguaadressi parameetrid", + "use_new_membership_manager": "Kasuta kõne liikmelisuse halduri (MembershipManager) uut implementatsiooni" }, "disconnected_banner": "Võrguühendus serveriga on katkenud.", + "error": { + "call_is_not_supported": "Kõne pole toetatud", + "call_not_found": "Kõnet ei leidu", + "call_not_found_description": "<0>See link ei tundu olema seotud ühegi olemasoleva kõnega. Kontrolli, et sul on õige link või <1>loo uus.", + "connection_lost": "Ühendus on katkenud", + "connection_lost_description": "Sinu ühendus selle kõnega on katkenud.", + "e2ee_unsupported": "Mitteühilduv brauser", + "e2ee_unsupported_description": "Sinu veebibrauser ei toeta krüptitud kõnesid. Toimivad veebibrauserid on Chrome, Safari, ja Firefox 117+.", + "generic": "Midagi läks valesti", + "generic_description": "Silumis- ja vealogide saatmine võib aidata meid vea põhjuseni jõuda.", + "insufficient_capacity": "Mittepiisav jõudlus", + "insufficient_capacity_description": "Serveri jõudluse ülempiir on hetkel ületatud ja sa ei saa hetkel selle kõnega liituda. Proovi hiljem uuesti või kui probleem kestab kauem, siis võta ühendust serveri haldajaga.", + "matrix_rtc_focus_missing": "See server pole seadistatud töötama rakendusega {{brand}}. Palun võta ühendust serveri halduriga (domeen: {{domain}}, veakood: {{ errorCode }}).", + "open_elsewhere": "Avatud teisel vahekaardil", + "open_elsewhere_description": "{{brand}} on avatud teisel vahekaardil. Kui see ei tundu olema õige, proovi selle lehe uuesti laadimist.", + "unexpected_ec_error": "Tekkis ootamatu viga (<0>Veakood: <1>{{ errorCode }}). Palun võta ühendust serveri haldajaga." + }, + "group_call_loader": { + "banned_body": "Sa oled saanud selles jututoas suhtluskeelu", + "banned_heading": "Suhtluskeeld", + "call_ended_body": "Sa oled sellest kõnest eemaldatud.", + "call_ended_heading": "Kõne lõppes", + "knock_reject_body": "Jututoa liikmed ei nõustunud sinu liitumispalvega.", + "knock_reject_heading": "Liitumine pole lubatud", + "reason": "Põhjus" + }, "hangup_button_label": "Lõpeta kõne", + "header_label": "Avaleht: Element Call", "header_participants_label": "Osalejad", "invite_modal": { "link_copied_toast": "Link on kopeeritud lõikelauale", @@ -60,15 +117,24 @@ "layout_grid_label": "Ruudustik", "layout_spotlight_label": "Rambivalgus", "lobby": { - "join_button": "Kõnega liitumine", - "leave_button": "Tagasi hiljutiste kõnede juurde" + "ask_to_join": "Küsi võimalust liituda kõnega", + "join_as_guest": "Liitu külalisena", + "join_button": "Liitu kõnega", + "leave_button": "Tagasi hiljutiste kõnede juurde", + "waiting_for_invite": "Päring on saadetud" }, - "logging_in": "Sisselogimine …", - "login_auth_links": "<0>Loo konto Või <2>Sisene külalisena", + "log_in": "Logi sisse", + "logging_in": "Logime sisse…", + "login_auth_links": "<0>Loo konto või <2>Sisene külalisena", + "login_auth_links_prompt": "Sa pole veel registreerunud?", + "login_subheading": "Jätka rakenduses Element", "login_title": "Sisselogimine", "microphone_off": "Mikrofon ei tööta", "microphone_on": "Mikrofon töötab", "mute_microphone_button_label": "Summuta mikrofon", + "participant_count_one": "{{count, number}}", + "participant_count_other": "{{count, number}}", + "qr_code": "QR-kood", "rageshake_button_error_caption": "Proovi uuesti logisid saata", "rageshake_request_modal": { "body": "Ühel teisel selles kõnes osalejal on lahenduse kasutamisel tekkinud probleem ning selle põhjuse leidmiseks me sooviksime koguda silumislogisid.", @@ -80,33 +146,75 @@ "rageshake_sent": "Tänud!", "recaptcha_dismissed": "Robotilõks on vahele jäetud", "recaptcha_not_loaded": "Robotilõks pole laetud", + "recaptcha_ssla_caption": "Selle saidi kaitsmiseks on kasutusel ReCAPTCHA ning rakenduvad Google'i <2>Privaatusreeglid ja <6>Kasutustingimused.<9>Klõpsides „Registreeru“ nõustud sa meie <12>Tarkvara ja teenuste litsentseerimise lepinguga (Software and Services License Agreement - SSLA)", "register": { "passwords_must_match": "Salasõnad ei klapi", "registering": "Registreerimine…" }, - "register_auth_links": "<0>On sul juba konto?<1><0>Logi sisse Või <2>Logi sisse külalisena", + "register_auth_links": "<0>On sul juba konto?<1><0>Logi sisse või <2>Logi sisse külalisena", "register_confirm_password_label": "Kinnita salasõna", + "register_heading": "Loo omale konto", "return_home_button": "Tagasi avalehele", + "room_auth_view_continue_button": "Jätka", + "room_auth_view_ssla_caption": "Klõpsides „Liitu kõnega“ nõustud sa meie <2>Tarkvara ja teenuste litsentseerimise lepinguga (Software and Services License Agreement - SSLA)", "screenshare_button_label": "Jaga ekraani", "settings": { + "audio_tab": { + "effect_volume_description": "Häälesta helivaljust, mida kasutatakse käe tõstmisel ja regeerimisel", + "effect_volume_label": "Efektide helivajlus" + }, "developer_tab_title": "Arendaja", + "devices": { + "camera": "Kaamera", + "camera_numbered": "Kaamera {{n}}", + "default": "Vaikimisi", + "default_named": "Vaikimisi <2>({{name}})", + "microphone": "Mikrofon", + "microphone_numbered": "Mikrofon {{n}}", + "speaker": "Kõlar", + "speaker_numbered": "Kõlar {{n}}" + }, "feedback_tab_body": "Kui selle rakenduse kasutamisel tekib sul probleeme või lihtsalt soovid oma arvamust avaldada, siis palun täida alljärgnev lühike kirjeldus.", "feedback_tab_description_label": "Sinu tagasiside", "feedback_tab_h4": "Jaga tagasisidet", "feedback_tab_send_logs_label": "Lisa veatuvastuslogid", "feedback_tab_thank_you": "Tänud, me oleme sinu tagasiside kätte saanud!", "feedback_tab_title": "Tagasiside", - "opt_in_description": "<0><1>Sa võid selle valiku eelmaldamisega alati oma nõusoleku tagasi võtta. Kui sul parasjagu on kõne pooleli, siis seadistuste muudatus jõustub pärast kõne lõppu." + "opt_in_description": "<0><1>Sa võid selle valiku eelmaldamisega alati oma nõusoleku tagasi võtta. Kui sul parasjagu on kõne pooleli, siis seadistuste muudatus jõustub pärast kõne lõppu.", + "preferences_tab": { + "developer_mode_label": "Arendajate režiim", + "developer_mode_label_description": "Kasuta arendusrežiimi ja näita asjakohaseid seadistusi.", + "introduction": "Parema kasutuskogemuse nimel saad siin seadistada täiendavaid eelistusi.", + "reactions_play_sound_description": "Kui keegi lisab käimasolevale kõnele reaktsiooni, siis täienda seda heliefektiga.", + "reactions_play_sound_label": "Lisa reageerimistele heli", + "reactions_show_description": "Näita reageerimisi", + "reactions_show_label": "Kui keegi reageerib, siis näita seda animatsioonina", + "show_hand_raised_timer_description": "Kui osaleja annab käetõstmisega märku, siis kuva ka kestuse taimer", + "show_hand_raised_timer_label": "Näita käega märkuandmise kestust" + } }, - "star_rating_input_label_one": "{{count}} tärni", + "star_rating_input_label_one": "{{count}} tärn", "star_rating_input_label_other": "{{count}} tärni", "start_new_call": "Algata uus kõne", "start_video_button_label": "Lülita videovoog sisse", "stop_screenshare_button_label": "Ekraanivaade on jagamisel", "stop_video_button_label": "Peata videovoog", "submitting": "Saadan…", + "switch_camera": "Vaheta kaamerat", "unauthenticated_view_body": "Sa pole veel registreerunud? <2>Loo kasutajakonto", "unauthenticated_view_login_button": "Logi oma kontosse sisse", + "unauthenticated_view_ssla_caption": "Klõpsides „Jätka“ nõustud sa meie <2>Tarkvara ja teenuste litsentseerimise lepinguga (Software and Services License Agreement - SSLA)", "unmute_microphone_button_label": "Lülita mikrofon sisse", - "version": "Versioon: {{version}}" + "version": "{{productName}}, versioon: {{version}}", + "video_tile": { + "always_show": "Näita alati", + "camera_starting": "Video on laadimisel...", + "change_fit_contain": "Mahuta aknasse", + "collapse": "Näita vähem", + "expand": "Näita rohkem", + "mute_for_me": "Summuta minu jaoks", + "muted_for_me": "Minule summutatud", + "volume": "Helivaljus", + "waiting_for_media": "Ootame kuni meedia on olemas..." + } } diff --git a/locales/it/app.json b/locales/it/app.json index 39f6521d..d3708d11 100644 --- a/locales/it/app.json +++ b/locales/it/app.json @@ -5,13 +5,21 @@ "action": { "close": "Chiudi", "copy_link": "Copia collegamento", + "edit": "Modifica", "go": "Vai", "invite": "Invita", + "lower_hand": "Abbassa la mano", + "no": "No", + "pick_reaction": "Scegli una reazione", + "raise_hand": "Alza la mano", "register": "Registra", "remove": "Rimuovi", + "show_less": "Mostra meno", + "show_more": "Mostra altro", "sign_in": "Accedi", "sign_out": "Disconnetti", - "submit": "Invia" + "submit": "Invia", + "upload_file": "Carica file" }, "analytics_notice": "Partecipando a questa beta, acconsenti alla raccolta di dati anonimi che usiamo per migliorare il prodotto. Puoi trovare più informazioni su quali dati monitoriamo nella nostra <2>informativa sulla privacy e nell'<5>informativa sui cookie.", "app_selection_modal": { @@ -32,16 +40,66 @@ }, "call_name": "Nome della chiamata", "common": { + "analytics": "Statistiche", + "audio": "Audio", + "avatar": "Avatar", + "back": "Indietro", "display_name": "Il tuo nome", "encrypted": "Cifrata", "home": "Pagina iniziale", "loading": "Caricamento…", + "next": "Avanti", + "options": "Opzioni", + "password": "Password", + "preferences": "Preferenze", "profile": "Profilo", + "reaction": "Reazione", + "reactions": "Reazioni", "settings": "Impostazioni", "unencrypted": "Non cifrata", - "username": "Nome utente" + "username": "Nome utente", + "video": "Video" + }, + "developer_mode": { + "crypto_version": "Versione crittografica: {{version}}", + "debug_tile_layout_label": "Debug della disposizione dei riquadri", + "device_id": "ID dispositivo: {{id}}", + "duplicate_tiles_label": "Numero di copie di riquadri aggiuntivi per partecipante", + "hostname": "Nome host: {{hostname}}", + "livekit_server_info": "Informazioni sul server LiveKit", + "livekit_sfu": "SFU LiveKit: {{url}}", + "matrix_id": "ID Matrix: {{id}}", + "show_connection_stats": "Mostra le statistiche di connessione", + "show_non_member_tiles": "Mostra i riquadri per i file multimediali non-membri", + "use_new_membership_manager": "Usa la nuova implementazione della chiamata MembershipManager" }, "disconnected_banner": "La connessione al server è stata persa.", + "error": { + "call_is_not_supported": "La chiamata non è supportata", + "call_not_found": "Chiamata non trovata", + "call_not_found_description": "<0>Quel link non sembra appartenere a nessuna chiamata esistente. Controlla di avere il link giusto, oppure <1> creane uno nuovo .", + "connection_lost": "Connessione persa", + "connection_lost_description": "Sei stato disconnesso dalla chiamata.", + "e2ee_unsupported": "Browser incompatibile", + "e2ee_unsupported_description": "Il tuo browser non supporta le chiamate crittografate. I browser supportati sono Chrome, Safari e Firefox 117+.", + "generic": "Qualcosa è andato storto", + "generic_description": "L'invio dei registri di debug ci aiuterà a rintracciare il problema.", + "insufficient_capacity": "Capacità insufficiente", + "insufficient_capacity_description": "Il server ha raggiunto la capacità massima e non è possibile partecipare alla chiamata in questo momento. Riprova più tardi o contatta l'amministratore del server se il problema persiste.", + "matrix_rtc_focus_missing": "Il server non è configurato per funzionare con {{brand}}. Contatta l'amministratore del tuo server (Dominio: {{domain}}, codice di errore: {{ errorCode }}).", + "open_elsewhere": "Aperto in un'altra scheda", + "open_elsewhere_description": "{{brand}} è stato aperto in un'altra scheda. Se non ti sembra corretto, prova a ricaricare la pagina.", + "unexpected_ec_error": "Si è verificato un errore imprevisto (<0>Codice errore: <1>{{ errorCode }}). Contatta l'amministratore del tuo server." + }, + "group_call_loader": { + "banned_body": "Sei stato bandito dalla stanza.", + "banned_heading": "Bandito", + "call_ended_body": "Sei stato rimosso dalla chiamata.", + "call_ended_heading": "Chiamata terminata", + "knock_reject_body": "I membri della stanza hanno rifiutato la tua richiesta di partecipazione.", + "knock_reject_heading": "Partecipazione non consentita", + "reason": "Motivo" + }, "hangup_button_label": "Termina chiamata", "header_label": "Inizio di Element Call", "header_participants_label": "Partecipanti", @@ -57,15 +115,24 @@ "layout_grid_label": "Griglia", "layout_spotlight_label": "In primo piano", "lobby": { + "ask_to_join": "Chiedi di partecipare alla chiamata", + "join_as_guest": "Partecipa come ospite", "join_button": "Entra in chiamata", - "leave_button": "Torna ai recenti" + "leave_button": "Torna ai recenti", + "waiting_for_invite": "Richiesta inviata" }, + "log_in": "Accedi", "logging_in": "Accesso…", "login_auth_links": "<0>Crea un profilo o <2>Accedi come ospite", + "login_auth_links_prompt": "Non sei ancora registrato?", + "login_subheading": "Per continuare su Element", "login_title": "Accedi", "microphone_off": "Microfono spento", "microphone_on": "Microfono acceso", "mute_microphone_button_label": "Spegni il microfono", + "participant_count_one": "{{count, number}}", + "participant_count_other": "{{count, number}}", + "qr_code": "Codice QR", "rageshake_button_error_caption": "Riprova l'invio dei registri", "rageshake_request_modal": { "body": "Un altro utente in questa chiamata sta avendo problemi. Per diagnosticare meglio questi problemi, vorremmo raccogliere un registro di debug.", @@ -83,16 +150,44 @@ }, "register_auth_links": "<0>Hai già un profilo?<1><0>Accedi o <2>Accedi come ospite", "register_confirm_password_label": "Conferma password", + "register_heading": "Crea il tuo account", "return_home_button": "Torna alla schermata di iniziale", + "room_auth_view_continue_button": "Continua", "screenshare_button_label": "Condividi schermo", "settings": { + "audio_tab": { + "effect_volume_description": "Regola il volume delle reazioni e degli effetti di alzata di mani.", + "effect_volume_label": "Volume degli effetti sonori" + }, "developer_tab_title": "Sviluppatore", + "devices": { + "camera": "Fotocamera", + "camera_numbered": "Fotocamera {{n}}", + "default": "Predefinito", + "default_named": "Predefinito <2>({{name}})", + "microphone": "Microfono", + "microphone_numbered": "Microfono {{n}}", + "speaker": "Altoparlante", + "speaker_numbered": "Altoparlante {{n}}" + }, "feedback_tab_body": "Se stai riscontrando problemi o semplicemente vuoi dare un'opinione, inviaci una breve descrizione qua sotto.", "feedback_tab_description_label": "Il tuo commento", "feedback_tab_h4": "Invia commento", "feedback_tab_send_logs_label": "Includi registri di debug", "feedback_tab_thank_you": "Grazie, abbiamo ricevuto il tuo commento!", - "opt_in_description": "<0><1>Puoi revocare il consenso deselezionando questa casella. Se attualmente sei in una chiamata, avrà effetto al termine di essa." + "feedback_tab_title": "Commenti", + "opt_in_description": "<0><1>Puoi revocare il consenso deselezionando questa casella. Se attualmente sei in una chiamata, avrà effetto al termine di essa.", + "preferences_tab": { + "developer_mode_label": "Modalità sviluppatore", + "developer_mode_label_description": "Attiva la modalità sviluppatore e mostra la scheda di impostazioni sviluppatore.", + "introduction": "Qui puoi configurare opzioni extra per un'esperienza migliore.", + "reactions_play_sound_description": "Riprodurre un effetto sonoro quando qualcuno invia una reazione in una chiamata.", + "reactions_play_sound_label": "Riproduci suoni di reazione", + "reactions_show_description": "Mostra un'animazione quando qualcuno invia una reazione.", + "reactions_show_label": "Mostra reazioni", + "show_hand_raised_timer_description": "Mostra un contatore quando un partecipante alza la mano", + "show_hand_raised_timer_label": "Mostra la durata dell'alzata di mano" + } }, "star_rating_input_label_one": "{{count}} stelle", "star_rating_input_label_other": "{{count}} stelle", @@ -101,8 +196,20 @@ "stop_screenshare_button_label": "Condivisione schermo", "stop_video_button_label": "Ferma video", "submitting": "Invio…", + "switch_camera": "Cambia fotocamera", "unauthenticated_view_body": "Non hai ancora un profilo? <2>Creane uno", "unauthenticated_view_login_button": "Accedi al tuo profilo", "unmute_microphone_button_label": "Riaccendi il microfono", - "version": "Versione: {{version}}" + "version": "Versione: {{version}}", + "video_tile": { + "always_show": "Mostra sempre", + "camera_starting": "Caricamento del video...", + "change_fit_contain": "Adatta al frame", + "collapse": "Riduci", + "expand": "Espandi", + "mute_for_me": "Disattiva l'audio per me", + "muted_for_me": "Muto per me", + "volume": "Volume", + "waiting_for_media": "In attesa dei media..." + } } diff --git a/locales/ja/app.json b/locales/ja/app.json index 4f21b300..2b52cfe2 100644 --- a/locales/ja/app.json +++ b/locales/ja/app.json @@ -4,61 +4,120 @@ }, "action": { "close": "閉じる", + "copy_link": "リンクをコピー", "go": "続行", + "invite": "招待", "no": "いいえ", "register": "登録", "remove": "削除", "sign_in": "サインイン", - "sign_out": "サインアウト" + "sign_out": "サインアウト", + "submit": "送信" + }, + "analytics_notice": "ベータ版への参加と同時に、製品の改善のために匿名データを収集することに同意したことになります。追跡するデータの詳細については、<2>プライバシーポリシーと<6>クッキーポリシーをご確認下さい。", + "app_selection_modal": { + "continue_in_browser": "ブラウザで続行", + "open_in_app": "アプリで開く", + "text": "準備完了?", + "title": "アプリを選択" }, "call_ended_view": { - "create_account_button": "アカウントを作成" + "create_account_button": "アカウントを作成", + "create_account_prompt": "<0>パスワードを設定してアカウント設定を保持してみませんか?<1>名前とアバターの設定を次の通話に利用する事ができます。", + "feedback_done": "<0>フィードバックありがとうございます!", + "feedback_prompt": "<0>品質向上のため、皆様のフィードバックをお待ちしております。", + "headline": "{{displayName}} さんの通話は終了しました。", + "not_now_button": "終了せずホーム画面に戻る", + "reconnect_button": "再接続", + "survey_prompt": "通話はどうでしたか?" }, + "call_name": "通話名", "common": { + "analytics": "分析", "audio": "音声", "avatar": "アバター", "display_name": "表示名", + "encrypted": "暗号化済み", "home": "ホーム", "loading": "読み込んでいます…", + "options": "オプション", "password": "パスワード", "profile": "プロフィール", "settings": "設定", + "unencrypted": "暗号化されていません", "username": "ユーザー名", "video": "ビデオ" }, + "disconnected_banner": "サーバーへの接続が失われました。", + "hangup_button_label": "通話終了", "header_label": "Element Call ホーム", + "header_participants_label": "参加者", + "invite_modal": { + "link_copied_toast": "リンクがクリップボードにコピーされました", + "title": "この通話に招待する" + }, "join_existing_call_modal": { "join_button": "はい、通話に参加", "text": "この通話は既に存在します。参加しますか?", "title": "既存の通話に参加しますか?" }, + "layout_grid_label": "グリッド", "layout_spotlight_label": "スポットライト", "lobby": { - "join_button": "通話に参加" + "join_button": "通話に参加", + "leave_button": "最近に戻る" }, + "log_in": "ログイン", "logging_in": "ログインしています…", "login_auth_links": "<0>アカウントを作成または<2>ゲストとしてアクセス", + "login_auth_links_prompt": "登録はまだですか?", + "login_subheading": "Element を続けるには", "login_title": "ログイン", + "microphone_off": "マイクオフ", + "microphone_on": "マイクオン", + "mute_microphone_button_label": "ミュート", + "rageshake_button_error_caption": "ログ送信の再試行", "rageshake_request_modal": { + "body": "この通話に参加している別のユーザーに問題が発生しています。この問題のより良い診断のため、デバッグ ログを収集したいと考えています。", "title": "デバッグログを要求" }, "rageshake_send_logs": "デバッグログを送信", "rageshake_sending": "送信しています…", "rageshake_sending_logs": "デバッグログを送信しています…", + "rageshake_sent": "ありがとうございます!", + "recaptcha_dismissed": "Recaptcha は却下されました", + "recaptcha_not_loaded": "Recaptcha が読み込まれませんでした", "register": { "passwords_must_match": "パスワードが一致する必要があります", "registering": "登録しています…" }, "register_auth_links": "<0>既にアカウントをお持ちですか?<1><0>ログインまたは<2>ゲストとしてアクセス", "register_confirm_password_label": "パスワードを確認", + "register_heading": "アカウントを作成", "return_home_button": "ホーム画面に戻る", "screenshare_button_label": "画面共有", "settings": { "developer_tab_title": "開発者", + "feedback_tab_body": "問題が発生している場合、もしくはフィードバックを提供したい場合は、以下に簡単な説明を入力してお送りください。", + "feedback_tab_description_label": "フィードバック", "feedback_tab_h4": "フィードバックを送信", - "feedback_tab_send_logs_label": "デバッグログを含める" + "feedback_tab_send_logs_label": "デバッグログを含める", + "feedback_tab_thank_you": "ありがとうございます。フィードバックを受け取りました!", + "feedback_tab_title": "フィードバック", + "opt_in_description": "<0><1>このボックスのチェックを外すと同意を取り消すことができます。現在通話中の場合、この変更は通話終了後に有効になります。" }, + "start_new_call": "新しい通話を開始", + "start_video_button_label": "ビデオを開始", + "stop_screenshare_button_label": "共有画面", + "stop_video_button_label": "ビデオを停止", + "submitting": "送信中…", "unauthenticated_view_body": "アカウントがありませんか? <2>アカウントを作成", "unauthenticated_view_login_button": "アカウントにログイン", - "version": "バージョン:{{version}}" + "unmute_microphone_button_label": "マイクのミュート解除", + "version": "バージョン:{{version}}", + "video_tile": { + "change_fit_contain": "フレームに合わせる", + "mute_for_me": "ミュートする", + "volume": "ボリューム" + } } diff --git a/locales/pl/app.json b/locales/pl/app.json index 7ea88fd5..c6d9a0f3 100644 --- a/locales/pl/app.json +++ b/locales/pl/app.json @@ -5,14 +5,21 @@ "action": { "close": "Zamknij", "copy_link": "Kopiuj link", + "edit": "Edytuj", "go": "Przejdź", "invite": "Zaproś", + "lower_hand": "Opuść rękę", "no": "Nie", + "pick_reaction": "Wybierz reakcję", + "raise_hand": "Podnieś rękę", "register": "Zarejestruj", "remove": "Usuń", + "show_less": "Pokaż mniej", + "show_more": "Pokaż więcej", "sign_in": "Zaloguj się", "sign_out": "Wyloguj się", - "submit": "Wyślij" + "submit": "Wyślij", + "upload_file": "Prześlij plik" }, "analytics_notice": "Uczestnicząc w tej becie, upoważniasz nas do zbierania anonimowych danych, które wykorzystamy do ulepszenia produktu. Dowiedz się więcej na temat danych, które zbieramy w naszej <2>Polityce prywatności i <5>Polityce ciasteczek.", "app_selection_modal": { @@ -33,20 +40,68 @@ }, "call_name": "Nazwa połączenia", "common": { + "analytics": "Dane analityczne", "audio": "Dźwięk", "avatar": "Awatar", + "back": "Wstecz", "display_name": "Nazwa wyświetlana", "encrypted": "Szyfrowane", "home": "Strona domowa", "loading": "Ładowanie…", + "next": "Dalej", + "options": "Opcje", "password": "Hasło", + "preferences": "Preferencje", "profile": "Profil", + "reaction": "Reakcja", + "reactions": "Reakcje", "settings": "Ustawienia", "unencrypted": "Nie szyfrowane", "username": "Nazwa użytkownika", "video": "Wideo" }, + "developer_mode": { + "crypto_version": "Wersja krypto: {{version}}", + "debug_tile_layout_label": "Układ kafelków Debug", + "device_id": "ID urządzenia: {{id}}", + "duplicate_tiles_label": "Liczba dodatkowych kopii kafelków na uczestnika", + "environment_variables": "Zmienne środowiskowe", + "hostname": "Nazwa hosta: {{hostname}}", + "livekit_server_info": "Informacje serwera LiveKit", + "livekit_sfu": "LiveKit SFU: {{url}}", + "matrix_id": "ID Matrix: {{id}}", + "show_connection_stats": "Pokaż statystyki połączenia", + "show_non_member_tiles": "Pokaż kafelki dla mediów, które nie są od członków", + "url_params": "Parametry URL", + "use_new_membership_manager": "Użyj nowej implementacji połączenia MembershipManager" + }, "disconnected_banner": "Utracono połączenie z serwerem.", + "error": { + "call_is_not_supported": "Połączenie nie jest obsługiwane", + "call_not_found": "Nie znaleziono połączenia", + "call_not_found_description": "<0>Wygląda na to, że ten link nie należy do żadnego istniejącego połączenia. Sprawdź, czy posiadasz prawidłowy link lub <1>utwórz nowy.", + "connection_lost": "Utracono połączenie", + "connection_lost_description": "Zostałeś rozłączony z rozmowy.", + "e2ee_unsupported": "Niekompatybilna przeglądarka", + "e2ee_unsupported_description": "Twoja przeglądarka nie wspiera szyfrowanych połączeń. Obsługiwane przeglądarki obejmują Chrome, Safari i Firefox 117+.", + "generic": "Coś poszło nie tak", + "generic_description": "Wysłanie dziennika debug, pozwoli nam namierzyć problem.", + "insufficient_capacity": "Za mało miejsca", + "insufficient_capacity_description": "Serwer osiągnął maksymalną pojemność, przez co nie możesz dołączyć do połączenia. Spróbuj ponownie później lub skontaktuj się z administratorem serwera, jeśli problem nie zniknie.", + "matrix_rtc_focus_missing": "Serwer nie jest skonfigurowany do pracy z {{brand}}. Prosimy o kontakt z administratorem serwera (Domena: {{domain}}, Kod błędu: {{ errorCode }}).", + "open_elsewhere": "Otwarto w innej karcie", + "open_elsewhere_description": "{{brand}} został otwarty w innej karcie. Jeśli tak nie jest, spróbuj odświeżyć stronę.", + "unexpected_ec_error": "Wystąpił nieoczekiwany błąd (<0>Kod błędu: <1>{{ errorCode }}). Skontaktuj się z administratorem serwera." + }, + "group_call_loader": { + "banned_body": "Zostałeś zbanowany z pokoju.", + "banned_heading": "Zbanowany", + "call_ended_body": "Zostałeś usunięty z rozmowy.", + "call_ended_heading": "Połączenie zakończone", + "knock_reject_body": "Członkowie pokoju odrzucili Twoją prośbę o dołączenie.", + "knock_reject_heading": "Nie możesz dołączyć", + "reason": "Powód: {{reason}}" + }, "hangup_button_label": "Zakończ połączenie", "header_label": "Strona główna Element Call", "header_participants_label": "Uczestnicy", @@ -62,15 +117,25 @@ "layout_grid_label": "Siatka", "layout_spotlight_label": "Centrum uwagi", "lobby": { + "ask_to_join": "Poproś o dołączenie do rozmowy", + "join_as_guest": "Dołącz jako gość", "join_button": "Dołącz do połączenia", - "leave_button": "Wróć do ostatnie" + "leave_button": "Wróć do ostatnie", + "waiting_for_invite": "Żądanie wysłane" }, + "log_in": "Zaloguj", "logging_in": "Logowanie…", "login_auth_links": "<0>Utwórz konto lub <2>Dołącz jako gość", + "login_auth_links_prompt": "Nie masz konta?", + "login_subheading": "Aby przejść do Element", "login_title": "Zaloguj się", "microphone_off": "Mikrofon wyłączony", "microphone_on": "Mikrofon włączony", "mute_microphone_button_label": "Wycisz mikrofon", + "participant_count_one": "{{count, number}}", + "participant_count_few": "{{count, number}}", + "participant_count_many": "{{count, number}}", + "qr_code": "Kod QR", "rageshake_button_error_caption": "Wyślij logi ponownie", "rageshake_request_modal": { "body": "Inny użytkownik w tym połączeniu napotkał problem. Aby lepiej zdiagnozować tę usterkę, chcielibyśmy zebrać dzienniki debugowania.", @@ -82,23 +147,52 @@ "rageshake_sent": "Dziękujemy!", "recaptcha_dismissed": "Recaptcha odrzucona", "recaptcha_not_loaded": "Recaptcha nie została załadowana", + "recaptcha_ssla_caption": "Ta strona jest chroniona przez reCAPTCHA i obowiązują <2> Polityka prywatności Google i <6>Warunki korzystania z usługi. <9>Klikając „Zarejestruj się”, wyrażasz zgodę na naszą <12>umowę licencyjną oprogramowania i usług (SSLA)", "register": { "passwords_must_match": "Hasła muszą pasować", "registering": "Rejestrowanie…" }, "register_auth_links": "<0>Masz już konto?<1><0>Zaloguj się lub <2>Dołącz jako gość", "register_confirm_password_label": "Potwierdź hasło", + "register_heading": "Utwórz konto", "return_home_button": "Powróć do strony głównej", + "room_auth_view_continue_button": "Kontynuuj", + "room_auth_view_ssla_caption": "Klikając \"Dołącz teraz do połączenia\", wyrażasz zgodę na naszą <2>Umowę licencyjną oprogramowania i usług (SSLA)", "screenshare_button_label": "Udostępnij ekran", "settings": { + "audio_tab": { + "effect_volume_description": "Dostosuj głośność, z jaką odtwarzane są efekty reakcji i podniesionej ręki", + "effect_volume_label": "Głośność efektu dźwiękowego" + }, "developer_tab_title": "Programista", + "devices": { + "camera": "Kamera", + "camera_numbered": "Kamera {{n}}", + "default": "Domyślne", + "default_named": "Domyślne <2>({{name}})", + "microphone": "Mikrofon", + "microphone_numbered": "Mikrofon {{n}}", + "speaker": "Głośnik", + "speaker_numbered": "Głośnik {{n}}" + }, "feedback_tab_body": "Jeśli posiadasz problemy lub chciałbyś zgłosić swoją opinię, wyślij nam krótki opis.", "feedback_tab_description_label": "Twoje opinie", "feedback_tab_h4": "Prześlij opinię", "feedback_tab_send_logs_label": "Dołącz dzienniki debugowania", "feedback_tab_thank_you": "Dziękujemy, otrzymaliśmy Twoją opinię!", "feedback_tab_title": "Opinia użytkownika", - "opt_in_description": "<0><1>Możesz wycofać swoją zgodę poprzez odznaczenie tego pola. Jeśli już jesteś w trakcie rozmowy, opcja zostanie zastosowana po jej zakończeniu." + "opt_in_description": "<0><1>Możesz wycofać swoją zgodę poprzez odznaczenie tego pola. Jeśli już jesteś w trakcie rozmowy, opcja zostanie zastosowana po jej zakończeniu.", + "preferences_tab": { + "developer_mode_label": "Tryb programisty", + "developer_mode_label_description": "Włącz tryb programisty i wyświetl kartę ustawień programisty.", + "introduction": "Tutaj możesz skonfigurować dodatkowe opcje dla lepszych doświadczeń.", + "reactions_play_sound_description": "Odtwórz efekt dźwiękowy, gdy ktoś wyślę reakcję w trakcie połączenia.", + "reactions_play_sound_label": "Odtwórz dźwięki reakcji", + "reactions_show_description": "Odtwórz animację, gdy ktoś wyślę reakcję.", + "reactions_show_label": "Pokaż reakcje", + "show_hand_raised_timer_description": "Pokaż licznik, gdy uczestnik podniesie rękę", + "show_hand_raised_timer_label": "Pokaż czas po podniesieniu ręki" + } }, "star_rating_input_label_one": "{{count}} gwiazdki", "star_rating_input_label_other": "{{count}} gwiazdki", @@ -107,8 +201,21 @@ "stop_screenshare_button_label": "Udostępnianie ekranu", "stop_video_button_label": "Zakończ wideo", "submitting": "Wysyłanie…", + "switch_camera": "Przełącz kamerę", "unauthenticated_view_body": "Nie masz konta? <2>Utwórz je", "unauthenticated_view_login_button": "Zaloguj się do swojego konta", + "unauthenticated_view_ssla_caption": "Klikając \"Przejdź\", wyrażasz zgodę na naszą <2>Umowę licencyjną oprogramowania i usług (SSLA)", "unmute_microphone_button_label": "Odcisz mikrofon", - "version": "Wersja: {{version}}" + "version": "Wersja: {{version}}", + "video_tile": { + "always_show": "Zawsze pokazuj", + "camera_starting": "Wczytywanie wideo...", + "change_fit_contain": "Dopasuj do obramowania", + "collapse": "Zwiń", + "expand": "Rozwiń", + "mute_for_me": "Wycisz dla mnie", + "muted_for_me": "Wyciszone dla mnie", + "volume": "Głośność", + "waiting_for_media": "Oczekiwanie na media..." + } } diff --git a/locales/ro/app.json b/locales/ro/app.json index 1330bff5..61bb3e44 100644 --- a/locales/ro/app.json +++ b/locales/ro/app.json @@ -143,10 +143,13 @@ "feedback_tab_title": "Feedback", "opt_in_description": "<0><1>Puteți retrage consimțământul debifând această casetă. Dacă sunteți în prezent la un apel, această setare va intra în vigoare la sfârșitul apelului.", "preferences_tab": { + "introduction": "Aici puteți configura opțiuni suplimentare pentru o experiență îmbunătățită.", "reactions_play_sound_description": "Redați un efect sonor atunci când cineva trimite o reacție la un apel.", "reactions_play_sound_label": "Redați sunete de reacție", "reactions_show_description": "Afișați o animație atunci când cineva trimite o reacție.", - "reactions_show_label": "Afișați reacțiile" + "reactions_show_label": "Afișați reacțiile", + "show_hand_raised_timer_description": "Afișați un cronometru atunci când un participant ridică mâna.", + "show_hand_raised_timer_label": "Afișați durata ridicării mâinii" } }, "start_new_call": "Începe un nou apel", diff --git a/locales/ru/app.json b/locales/ru/app.json index 88a3252a..cdfdfe80 100644 --- a/locales/ru/app.json +++ b/locales/ru/app.json @@ -4,15 +4,30 @@ }, "action": { "close": "Закрыть", + "copy_link": "Скопировать ссылку", + "edit": "Редактировать", "go": "Далее", + "invite": "Пригласить", + "lower_hand": "Опустить руку", "no": "Нет", + "pick_reaction": "Выберите реакцию", + "raise_hand": "Поднять руку", "register": "Зарегистрироваться", "remove": "Удалить", + "show_less": "Показать меньше", + "show_more": "Показать больше", "sign_in": "Войти", "sign_out": "Выйти", - "submit": "Отправить" + "submit": "Отправить", + "upload_file": "Загрузить файл" }, "analytics_notice": "Участвуя в этой бета-версии, вы соглашаетесь на сбор анонимных данных, которые мы используем для улучшения продукта. Более подробную информацию о том, какие данные мы отслеживаем, вы можете найти в нашей <2> Политике конфиденциальности и нашей <5> Политике использования файлов cookie.", + "app_selection_modal": { + "continue_in_browser": "Продолжить в браузере", + "open_in_app": "Открыть в приложении", + "text": "Готовы присоединиться?", + "title": "Выбрать приложение" + }, "call_ended_view": { "create_account_button": "Создать аккаунт", "create_account_prompt": "<0>Почему бы не задать пароль, тем самым сохранив аккаунт?<1>Так вы можете оставить своё имя и задать аватар для будущих звонков.", @@ -20,33 +35,106 @@ "feedback_prompt": "<0>Мы будем рады видеть ваши отзывы, чтобы мы могли улучшить ваш опыт.", "headline": "{{displayName}}, ваш звонок окончен.", "not_now_button": "Не сейчас, вернуться в Начало", + "reconnect_button": "Переподключиться", "survey_prompt": "Как всё прошло?" }, + "call_name": "Название звонка", "common": { + "analytics": "Аналитика", "audio": "Аудио", "avatar": "Аватар", + "back": "Назад", "display_name": "Видимое имя", + "encrypted": "Зашифровано", "home": "Начало", "loading": "Загрузка…", + "next": "Далее", + "options": "Параметры", "password": "Пароль", + "preferences": "Настройки", "profile": "Профиль", + "reaction": "Реакция", + "reactions": "Реакции", "settings": "Настройки", + "unencrypted": "Не зашифровано", "username": "Имя пользователя", "video": "Видео" }, + "developer_mode": { + "crypto_version": "Версия криптографии: {{version}}", + "debug_tile_layout_label": "Отладка расположения плиток", + "device_id": "Идентификатор устройства: {{id}}", + "duplicate_tiles_label": "Количество дополнительных копий плиток на участника", + "hostname": "Имя хоста: {{hostname}}", + "livekit_server_info": "Информация о сервере LiveKit", + "livekit_sfu": "LiveKit SFU: {{url}}", + "matrix_id": "Matrix ID: {{id}}", + "show_connection_stats": "Показать статистику подключений", + "show_non_member_tiles": "Показать плитки для медиафайлов, не являющихся участниками", + "use_new_membership_manager": "Используйте новую реализацию вызова MembershipManager" + }, + "disconnected_banner": "Связь с сервером была потеряна.", + "error": { + "call_is_not_supported": "Вызов не поддерживается", + "call_not_found": "Звонок не найден", + "call_not_found_description": "<0>Эта ссылка, похоже, не принадлежит ни к одному существующему звонку. Убедитесь, что у вас есть нужная ссылка, или <1>создайте новую.", + "connection_lost": "Соединение потеряно", + "connection_lost_description": "Вы были отключены от звонка.", + "e2ee_unsupported": "Несовместимый браузер", + "e2ee_unsupported_description": "Ваш веб-браузер не поддерживает зашифрованные звонки. Поддерживаются следующие браузеры: Chrome, Safari и Firefox 117+.", + "generic": "Произошла ошибка", + "generic_description": "Отправка журналов отладки поможет нам отследить проблему.", + "insufficient_capacity": "Недостаточная пропускная способность", + "insufficient_capacity_description": "Сервер достиг максимальной пропускной способности, и вы не можете присоединиться к звонку в данный момент. Повторите попытку позже или обратитесь к администратору сервера, если проблема сохраняется.", + "matrix_rtc_focus_missing": "Сервер не настроен для работы с {{brand}}. Пожалуйста, свяжитесь с администратором вашего сервера (Домен: {{domain}}, Код ошибки: {{ errorCode }}).", + "open_elsewhere": "Открыто в другой вкладке", + "open_elsewhere_description": "{{brand}} был открыт в другой вкладке. Если это неверно, попробуйте перезагрузить страницу.", + "unexpected_ec_error": "Произошла непредвиденная ошибка (<0> Код ошибки:<1>{{ errorCode }} ). Обратитесь к администратору вашего сервера." + }, + "group_call_loader": { + "banned_body": "Вас заблокировали в этой комнате", + "banned_heading": "Заблокирован", + "call_ended_body": "Вы были удалены из звонка.", + "call_ended_heading": "Вызов завершен", + "knock_reject_body": "Участники комнаты отклонили ваш запрос на присоединение.", + "knock_reject_heading": "Не разрешено присоединиться", + "reason": "Причина" + }, + "hangup_button_label": "Завершить звонок", "header_label": "Главная Element Call", + "header_participants_label": "Участники", + "invite_modal": { + "link_copied_toast": "Ссылка скопирована в буфер обмена", + "title": "Пригласить в этот звонок" + }, "join_existing_call_modal": { "join_button": "Да, присоединиться", "text": "Этот звонок уже существует, хотите присоединиться?", "title": "Присоединиться к существующему звонку?" }, + "layout_grid_label": "Сетка", "layout_spotlight_label": "Внимание", "lobby": { - "join_button": "Присоединиться" + "ask_to_join": "Запрос на подключение к звонку", + "join_as_guest": "Присоединиться в качестве гостя", + "join_button": "Присоединиться", + "leave_button": "Вернуться к списку недавних", + "waiting_for_invite": "Запрос отправлен" }, + "log_in": "Войти", "logging_in": "Вход…", "login_auth_links": "<0>Создать аккаунт или <2>Зайти как гость", + "login_auth_links_prompt": "Еще не зарегистрированы?", + "login_subheading": "Продолжить в Element", "login_title": "Вход", + "microphone_off": "Микрофон выключен", + "microphone_on": "Микрофон включен", + "mute_microphone_button_label": "Отключить микрофон", + "participant_count_one": "{{count, number}}", + "participant_count_few": "{{count, number}}", + "participant_count_many": "{{count, number}}", + "qr_code": "QR код", + "rageshake_button_error_caption": "Повторить отправку журналов", "rageshake_request_modal": { "body": "У одного из участников звонка есть неполадки. Чтобы лучше диагностировать похожие проблемы, нам нужен журнал отладки.", "title": "Запрос журнала отладки" @@ -54,6 +142,7 @@ "rageshake_send_logs": "Отправить журнал отладки", "rageshake_sending": "Отправка…", "rageshake_sending_logs": "Отправка журнала отладки…", + "rageshake_sent": "Спасибо!", "recaptcha_dismissed": "Проверка не пройдена", "recaptcha_not_loaded": "Невозможно начать проверку", "register": { @@ -62,22 +151,66 @@ }, "register_auth_links": "<0>Уже есть аккаунт?<1><0>Войти с ним или <2>Зайти как гость", "register_confirm_password_label": "Подтвердите пароль", + "register_heading": "Создать учетную запись", "return_home_button": "Вернуться в Начало", + "room_auth_view_continue_button": "Продолжить", "screenshare_button_label": "Поделиться экраном", "settings": { + "audio_tab": { + "effect_volume_description": "Отрегулируйте громкость воспроизведения реакций и эффектов поднятия руки.", + "effect_volume_label": "Громкость звукового эффекта" + }, "developer_tab_title": "Разработчику", + "devices": { + "camera": "Камера", + "camera_numbered": "Камера {{n}}", + "default": "По умолчанию", + "default_named": "По умолчанию <2>({{name}})", + "microphone": "Микрофон", + "microphone_numbered": "Микрофон {{n}}", + "speaker": "Динамик", + "speaker_numbered": "Динамик {{n}}" + }, "feedback_tab_body": "Если у вас возникли проблемы или вы просто хотите оставить отзыв, отправьте нам краткое описание ниже.", "feedback_tab_description_label": "Ваш отзыв", "feedback_tab_h4": "Отправить отзыв", "feedback_tab_send_logs_label": "Приложить журнал отладки", "feedback_tab_thank_you": "Спасибо. Мы получили ваш отзыв!", "feedback_tab_title": "Отзыв", - "opt_in_description": "<0><1>Вы можете отозвать согласие, сняв этот флажок. Если вы в данный момент находитесь в разговоре, эта настройка вступит в силу по окончании разговора." + "opt_in_description": "<0><1>Вы можете отозвать согласие, сняв этот флажок. Если вы в данный момент находитесь в разговоре, эта настройка вступит в силу по окончании разговора.", + "preferences_tab": { + "developer_mode_label": "Режим разработчика", + "developer_mode_label_description": "Включить режим разработчика и показать настройки.", + "introduction": "Здесь вы можете настроить дополнительные параметры для улучшения качества работы.", + "reactions_play_sound_description": "Воспроизведите звуковой эффект, когда кто-либо отреагирует на звонок.", + "reactions_play_sound_label": "Воспроизводить звуки реакции", + "reactions_show_description": "Показать реакции", + "reactions_show_label": "Показывать анимацию, когда кто-либо отправляет реакцию.", + "show_hand_raised_timer_description": "Показывать таймер, когда участник поднимает руку", + "show_hand_raised_timer_label": "Показать продолжительность поднятия руки" + } }, "star_rating_input_label_one": "{{count}} отмечен", "star_rating_input_label_other": "{{count}} отмеченных", + "start_new_call": "Начать новый звонок", + "start_video_button_label": "Начать видео", + "stop_screenshare_button_label": "Демонстрация экрана", + "stop_video_button_label": "Остановить видео", "submitting": "Отправляем…", + "switch_camera": "Переключить камеру", "unauthenticated_view_body": "Ещё не зарегистрированы? <2>Создайте аккаунт", "unauthenticated_view_login_button": "Войдите в свой аккаунт", - "version": "Версия: {{version}}" + "unmute_microphone_button_label": "Включить микрофон", + "version": "Версия: {{version}}", + "video_tile": { + "always_show": "Показывать всегда", + "camera_starting": "Загрузка видео...", + "change_fit_contain": "По размеру окна", + "collapse": "Свернуть", + "expand": "Развернуть", + "mute_for_me": "Заглушить звук для меня", + "muted_for_me": "Приглушить для меня", + "volume": "Громкость", + "waiting_for_media": "В ожидании медиа..." + } } diff --git a/locales/sk/app.json b/locales/sk/app.json index 726b9e5c..0c320dfd 100644 --- a/locales/sk/app.json +++ b/locales/sk/app.json @@ -5,14 +5,21 @@ "action": { "close": "Zatvoriť", "copy_link": "Kopírovať odkaz", + "edit": "Upraviť", "go": "Prejsť", "invite": "Pozvať", + "lower_hand": "Dať dole ruku", "no": "Nie", + "pick_reaction": "Vybrať reakciu", + "raise_hand": "Zdvihnúť ruku", "register": "Registrovať sa", "remove": "Odstrániť", + "show_less": "Zobraziť menej", + "show_more": "Zobraziť viac", "sign_in": "Prihlásiť sa", "sign_out": "Odhlásiť sa", - "submit": "Odoslať" + "submit": "Odoslať", + "upload_file": "Nahrať súbor" }, "analytics_notice": "Účasťou v tejto beta verzii súhlasíte so zhromažďovaním anonymných údajov, ktoré použijeme na zlepšenie produktu. Viac informácií o tom, ktoré údaje sledujeme, nájdete v našich <2>Zásadách ochrany osobných údajov a <5>Zásadách používania súborov cookie.", "app_selection_modal": { @@ -33,18 +40,66 @@ }, "call_name": "Názov hovoru", "common": { + "analytics": "Analytika", + "audio": "Zvuk", "avatar": "Obrázok", + "back": "Späť", "display_name": "Zobrazované meno", "encrypted": "Šifrované", "home": "Domov", "loading": "Načítanie…", + "next": "Ďalej", + "options": "Možnosti", "password": "Heslo", + "preferences": "Predvoľby", "profile": "Profil", + "reaction": "Reakcia", + "reactions": "Reakcie", "settings": "Nastavenia", "unencrypted": "Nie je zašifrované", - "username": "Meno používateľa" + "username": "Meno používateľa", + "video": "Video" + }, + "developer_mode": { + "crypto_version": "Krypto verzia: {{version}}", + "debug_tile_layout_label": "Ladenie rozloženia dlaždíc", + "device_id": "ID zariadenia: {{id}}", + "duplicate_tiles_label": "Počet ďalších kópií dlaždíc na účastníka", + "hostname": "Názov hostiteľa: {{hostname}}", + "livekit_server_info": "Informácie o serveri LiveKit", + "livekit_sfu": "LiveKit SFU: {{url}}", + "matrix_id": "Matrix ID: {{id}}", + "show_connection_stats": "Zobraziť štatistiky pripojenia", + "show_non_member_tiles": "Zobraziť dlaždice pre nečlenské médiá", + "use_new_membership_manager": "Použiť novú implementáciu hovoru MembershipManager" }, "disconnected_banner": "Spojenie so serverom sa stratilo.", + "error": { + "call_is_not_supported": "Hovor nie je podporovaný", + "call_not_found": "Hovor nebol nájdený", + "call_not_found_description": "<0>Zdá sa, že tento odkaz nepatrí k žiadnemu existujúcemu hovoru. Skontrolujte, či máte správny odkaz, alebo <1> vytvorte nový. ", + "connection_lost": "Strata spojenia", + "connection_lost_description": "Boli ste odpojení od hovoru.", + "e2ee_unsupported": "Nekompatibilný prehliadač", + "e2ee_unsupported_description": "Váš webový prehliadač nepodporuje šifrované hovory. Medzi podporované prehliadače patria Chrome, Safari a Firefox 117+.", + "generic": "Niečo sa pokazilo", + "generic_description": "Odoslanie záznamov ladenia nám pomôže nájsť problém.", + "insufficient_capacity": "Nedostatočná kapacita", + "insufficient_capacity_description": "Server dosiahol svoju maximálnu kapacitu a momentálne sa nemôžete pripojiť k hovoru. Skúste to znova neskôr alebo kontaktujte správcu servera, ak problém pretrváva.", + "matrix_rtc_focus_missing": "Server nie je nakonfigurovaný na prácu s aplikáciou {{brand}}. Kontaktujte správcu svojho servera (Doména:{{domain}}, Kód chyby:{{ errorCode }}).", + "open_elsewhere": "Otvorené na inej karte", + "open_elsewhere_description": "Aplikácia {{brand}} bola otvorená na inej karte. Ak sa vám to nezdá, skúste znovu načítať stránku.", + "unexpected_ec_error": "Vyskytla sa neočakávaná chyba (<0>Kód chyby: <1>{{ errorCode }}). Kontaktujte prosím správcu vášho servera." + }, + "group_call_loader": { + "banned_body": "Dostali ste zákaz vstupu do miestnosti.", + "banned_heading": "Zakázané", + "call_ended_body": "Boli ste odstránení z hovoru.", + "call_ended_heading": "Hovor bol ukončený", + "knock_reject_body": "Členovia miestnosti odmietli vašu žiadosť o pripojenie.", + "knock_reject_heading": "Nie je povolené pripojiť sa", + "reason": "Dôvod" + }, "hangup_button_label": "Ukončiť hovor", "header_label": "Domov Element Call", "header_participants_label": "Účastníci", @@ -60,15 +115,25 @@ "layout_grid_label": "Sieť", "layout_spotlight_label": "Stredobod", "lobby": { + "ask_to_join": "Požiadať o pripojenie k hovoru", + "join_as_guest": "Pripojiť sa ako hosť", "join_button": "Pripojiť sa k hovoru", - "leave_button": "Späť k nedávnym" + "leave_button": "Späť k nedávnym", + "waiting_for_invite": "Žiadosť odoslaná" }, + "log_in": "Prihlásiť sa", "logging_in": "Prihlasovanie…", "login_auth_links": "<0>Vytvoriť konto Alebo <2>Prihlásiť sa ako hosť", + "login_auth_links_prompt": "Nie ste ešte zaregistrovaní?", + "login_subheading": "Ak chcete pokračovať na Element", "login_title": "Prihlásiť sa", "microphone_off": "Mikrofón vypnutý", "microphone_on": "Mikrofón zapnutý", "mute_microphone_button_label": "Stlmiť mikrofón", + "participant_count_one": "{{count, number}}", + "participant_count_few": "{{count, number}}", + "participant_count_other": "{{count, number}}", + "qr_code": "QR kód", "rageshake_button_error_caption": "Opakovať odoslanie záznamov", "rageshake_request_modal": { "body": "Ďalší používateľ v tomto hovore má problém. Aby sme mohli lepšie diagnostikovať tieto problémy, chceli by sme získať záznam o ladení.", @@ -86,17 +151,44 @@ }, "register_auth_links": "<0>Už máte konto?<1><0>Prihláste sa Alebo <2>Prihlásiť sa ako hosť", "register_confirm_password_label": "Potvrdiť heslo", + "register_heading": "Vytvorte si účet", "return_home_button": "Návrat na domovskú obrazovku", + "room_auth_view_continue_button": "Pokračovať", "screenshare_button_label": "Zdieľať obrazovku", "settings": { + "audio_tab": { + "effect_volume_description": "Upraviť hlasitosť, pri ktorej sa prehrávajú reakcie a efekty zdvihnutia ruky.", + "effect_volume_label": "Hlasitosť zvukového efektu" + }, "developer_tab_title": "Vývojár", + "devices": { + "camera": "Kamera", + "camera_numbered": "Kamera {{n}}", + "default": "Predvolené", + "default_named": "Predvolené <2>({{name}})", + "microphone": "Mikrofón", + "microphone_numbered": "Mikrofón {{n}}", + "speaker": "Reproduktor", + "speaker_numbered": "Reproduktor {{n}}" + }, "feedback_tab_body": "Ak máte problémy alebo jednoducho chcete poskytnúť spätnú väzbu, pošlite nám krátky popis nižšie.", "feedback_tab_description_label": "Vaša spätná väzba", "feedback_tab_h4": "Odoslať spätnú väzbu", "feedback_tab_send_logs_label": "Zahrnúť záznamy o ladení", "feedback_tab_thank_you": "Ďakujeme, dostali sme vašu spätnú väzbu!", "feedback_tab_title": "Spätná väzba", - "opt_in_description": "<0><1>Súhlas môžete odvolať zrušením označenia tohto políčka. Ak práve prebieha hovor, toto nastavenie nadobudne platnosť po skončení hovoru." + "opt_in_description": "<0><1>Súhlas môžete odvolať zrušením označenia tohto políčka. Ak práve prebieha hovor, toto nastavenie nadobudne platnosť po skončení hovoru.", + "preferences_tab": { + "developer_mode_label": "Režim vývojára", + "developer_mode_label_description": "Povoliť režim vývojára a zobraziť kartu Nastavenia vývojára.", + "introduction": "Tu môžete nastaviť ďalšie možnosti pre lepší zážitok.", + "reactions_play_sound_description": "Prehrať zvukový efekt, keď niekto odošle reakciu na hovor.", + "reactions_play_sound_label": "Prehrať zvuky reakcie", + "reactions_show_description": "Zobraziť animáciu, keď niekto odošle reakciu.", + "reactions_show_label": "Zobraziť reakcie", + "show_hand_raised_timer_description": "Zobraziť časovač, keď účastník zdvihne ruku", + "show_hand_raised_timer_label": "Zobraziť trvanie zdvihnutia ruky" + } }, "star_rating_input_label_one": "{{count}} hviezdička", "star_rating_input_label_other": "{{count}} hviezdičiek", @@ -105,8 +197,20 @@ "stop_screenshare_button_label": "Zdieľanie obrazovky", "stop_video_button_label": "Zastaviť video", "submitting": "Odosielanie…", + "switch_camera": "Prepnúť fotoaparát", "unauthenticated_view_body": "Ešte nie ste zaregistrovaný? <2>Vytvorte si účet", "unauthenticated_view_login_button": "Prihláste sa do svojho konta", "unmute_microphone_button_label": "Zrušiť stlmenie mikrofónu", - "version": "Verzia: {{version}}" + "version": "Verzia: {{version}}", + "video_tile": { + "always_show": "Vždy zobraziť", + "camera_starting": "Načítavanie videa...", + "change_fit_contain": "Orezať na mieru", + "collapse": "Zbaliť", + "expand": "Rozbaliť", + "mute_for_me": "Pre mňa stlmiť", + "muted_for_me": "Pre mňa stlmené", + "volume": "Hlasitosť", + "waiting_for_media": "Čaká sa na médiá..." + } } diff --git a/locales/sv/app.json b/locales/sv/app.json index 76b7d2d8..efa3036b 100644 --- a/locales/sv/app.json +++ b/locales/sv/app.json @@ -1,7 +1,220 @@ { + "a11y": { + "user_menu": "Användarmeny" + }, + "action": { + "close": "Stäng", + "copy_link": "Kopiera länk", + "edit": "Redigera", + "go": "Gå", + "invite": "Bjud in", + "lower_hand": "Sänk handen", + "no": "Nej", + "pick_reaction": "Välj reaktion", + "raise_hand": "Räck upp handen", + "register": "Registrera", + "remove": "Ta bort", + "show_less": "Visa mindre", + "show_more": "Visa mer", + "sign_in": "Logga in", + "sign_out": "Logga ut", + "submit": "Skicka", + "upload_file": "Ladda upp fil" + }, + "analytics_notice": "Genom att delta i denna beta samtycker du till insamling av anonyma uppgifter, som vi använder för att förbättra produkten. Du kan hitta mer information om vilka data vi spårar i vår <2>integritetspolicy och vår <5>cookiepolicy.", + "app_selection_modal": { + "continue_in_browser": "Fortsätt i webbläsaren", + "open_in_app": "Öppna i appen", + "text": "Är du redo att gå med?", + "title": "Välj app" + }, "call_ended_view": { - "headline": "{{displayName}}, ditt samtal har avslutats." + "create_account_button": "Skapa konto", + "create_account_prompt": "<0>Varför inte avsluta genom att skapa ett lösenord för att behålla ditt konto?<1>Du kommer att kunna behålla ditt namn och ställa in en avatar för användning vid framtida samtal", + "feedback_done": "<0>Tack för din feedback! ", + "feedback_prompt": "<0>Vi vill gärna höra din feedback så att vi kan förbättra din upplevelse. ", + "headline": "{{displayName}}, ditt samtal har avslutats.", + "not_now_button": "Inte nu, återgå till startskärmen", + "reconnect_button": "Återanslut", + "survey_prompt": "Hur gick det?" + }, + "call_name": "Namn på samtal", + "common": { + "analytics": "Analysdata", + "audio": "Ljud", + "avatar": "Avatar", + "back": "Tillbaka", + "display_name": "Visningsnamn", + "encrypted": "Krypterad", + "home": "Hem", + "loading": "Laddar …", + "next": "Nästa", + "options": "Alternativ", + "password": "Lösenord", + "preferences": "Alternativ", + "profile": "Profil", + "reaction": "Reaktion", + "reactions": "Reaktioner", + "settings": "Inställningar", + "unencrypted": "Inte krypterad", + "username": "Användarnamn", + "video": "Video" + }, + "developer_mode": { + "crypto_version": "Kryptoversion: {{version}}", + "debug_tile_layout_label": "Felsök panelarrangemang", + "device_id": "Enhets-ID: {{id}}", + "duplicate_tiles_label": "Antal ytterligare panelkopior per deltagare", + "environment_variables": "Miljövariabler", + "hostname": "Värdnamn: {{hostname}}", + "livekit_server_info": "LiveKit-serverinfo", + "livekit_sfu": "LiveKit SFU: {{url}}", + "matrix_id": "Matrix-ID: {{id}}", + "show_connection_stats": "Visa anslutningsstatistik", + "show_non_member_tiles": "Visa paneler för media som inte är medlemmar", + "url_params": "URL-parametrar", + "use_new_membership_manager": "Använd den nya implementeringen av samtals-MembershipManager" + }, + "disconnected_banner": "Anslutningen till servern har brutits.", + "error": { + "call_is_not_supported": "Call stöds inte", + "call_not_found": "Samtal hittades inte", + "call_not_found_description": "<0>Den länken verkar inte tillhöra något befintligt samtal. Kontrollera att du har rätt länk, eller <1>skapa en ny.", + "connection_lost": "Anslutning förlorad", + "connection_lost_description": "Du kopplades bort från samtalet.", + "e2ee_unsupported": "Inkompatibel webbläsare", + "e2ee_unsupported_description": "Din webbläsare stöder inte krypterade samtal. Webbläsare som stöds inkluderar Chrome, Safari och Firefox 117+.", + "generic": "Något gick fel", + "generic_description": "Att skicka felsökningsloggar hjälper oss att spåra problemet.", + "insufficient_capacity": "Otillräcklig kapacitet", + "insufficient_capacity_description": "Servern har nått sin maximala kapacitet och du kan inte gå med i samtalet just nu. Försök igen senare, eller kontakta serveradministratören om problemet kvarstår.", + "matrix_rtc_focus_missing": "Servern är inte konfigurerad för att fungera med {{brand}}. Vänligen kontakta serveradministratören (Domän: {{domain}}, Felkod: {{ errorCode }}).", + "open_elsewhere": "Öppnades i en annan flik", + "open_elsewhere_description": "{{brand}} har öppnats i en annan flik. Om det inte låter rätt, pröva att ladda om sidan.", + "unexpected_ec_error": "Ett oväntat fel inträffade (<0>Felkod: <1>{{ errorCode }}). Kontakta din serveradministratör." + }, + "group_call_loader": { + "banned_body": "Du har bannats från rummet.", + "banned_heading": "Bannad", + "call_ended_body": "Du har har tagits bort från samtalet.", + "call_ended_heading": "Samtal avslutat", + "knock_reject_body": "Rumsmedlemmarna avslog din begäran om att gå med.", + "knock_reject_heading": "Inte tillåten att gå med", + "reason": "Anledning" + }, + "hangup_button_label": "Avsluta samtal", + "header_label": "Element Call Hem", + "header_participants_label": "Deltagare", + "invite_modal": { + "link_copied_toast": "Länk kopierad till klippbordet", + "title": "Bjud in till det här samtalet" + }, + "join_existing_call_modal": { + "join_button": "Ja, gå med i samtal", + "text": "Det här samtalet finns redan, vill du gå med?", + "title": "Gå med i befintligt samtal?" + }, + "layout_grid_label": "Rutnät", + "layout_spotlight_label": "Spotlight", + "lobby": { + "ask_to_join": "Be om att delta i samtalet", + "join_as_guest": "Gå med som gäst", + "join_button": "Anslut till samtal", + "leave_button": "Tillbaka till senaste", + "waiting_for_invite": "Begäran skickad" + }, + "log_in": "Logga in", + "logging_in": "Loggar in …", + "login_auth_links": "<0>Skapa ett konto eller <2>Kom åt som gäst", + "login_auth_links_prompt": "Inte registrerad än?", + "login_subheading": "För att fortsätta till Element", + "login_title": "Logga in", + "microphone_off": "Mikrofon av", + "microphone_on": "Mikrofon på", + "mute_microphone_button_label": "Tysta mikrofonen", + "participant_count_one": "{{count, number}}", + "participant_count_other": "{{count, number}}", + "qr_code": "QR-kod", + "rageshake_button_error_caption": "Försök att skicka loggar igen", + "rageshake_request_modal": { + "body": "En annan användare i det här samtalet har ett problem. För att bättre kunna diagnostisera dessa problem vill vi samla in en felsökningslogg.", + "title": "Begäran om felsökningslogg" + }, + "rageshake_send_logs": "Skicka felsökningsloggar", + "rageshake_sending": "Skickar …", + "rageshake_sending_logs": "Skickar felsökningsloggar …", + "rageshake_sent": "Tack!", + "recaptcha_dismissed": "Recaptcha avvisad", + "recaptcha_not_loaded": "Recaptcha laddades inte", + "recaptcha_ssla_caption": "Denna webbplats skyddas av ReCAPTCHA och Googles <2>sekretesspolicy och <6>användarvillkor gäller.<9>Genom att klicka på ”Registrera” godkänner du vårt <12>licensavtal för programvara och tjänster", + "register": { + "passwords_must_match": "Lösenorden måste överensstämma", + "registering": "Registrerar …" + }, + "register_auth_links": "<0>Har du redan ett konto?<1><0>Logga in eller <2>kom åt som en gäst", + "register_confirm_password_label": "Bekräfta lösenord", + "register_heading": "Skapa ditt konto", + "return_home_button": "Återgå till startskärmen", + "room_auth_view_continue_button": "Fortsätt", + "room_auth_view_ssla_caption": "Genom att klicka på ”Anslut till samtal nu” godkänner du vårt <2>licensavtal för programvara och tjänster", + "screenshare_button_label": "Dela skärm", + "settings": { + "audio_tab": { + "effect_volume_description": "Justera volymen vid vilken reaktioner och handuppräckningseffekter spelas", + "effect_volume_label": "Ljudeffektsvolym" + }, + "developer_tab_title": "Utvecklare", + "devices": { + "camera": "Kamera", + "camera_numbered": "Kamera {{n}}", + "default": "Förval", + "default_named": "Förval <2>({{name}})", + "microphone": "Mikrofon", + "microphone_numbered": "Mikrofon {{n}}", + "speaker": "Högtalare", + "speaker_numbered": "Högtalare {{n}}" + }, + "feedback_tab_body": "Om du har problem eller bara vill ge lite återkoppling, skicka oss en kort beskrivning nedan.", + "feedback_tab_description_label": "Din återkoppling", + "feedback_tab_h4": "Skicka återkoppling", + "feedback_tab_send_logs_label": "Inkludera felsökningsloggar", + "feedback_tab_thank_you": "Tack, vi har tagit emot din återkoppling!", + "feedback_tab_title": "Återkoppling", + "opt_in_description": "<0><1>Du kan återkalla ditt samtycke genom att avmarkera den här rutan. Om du för närvarande är i ett samtal träder den här inställningen i kraft vid slutet av samtalet.", + "preferences_tab": { + "developer_mode_label": "Utvecklarläge", + "developer_mode_label_description": "Aktivera utvecklarläger och visa fliken utvecklarinställningar.", + "introduction": "Här kan du konfigurera extra alternativ för en förbättrad upplevelse.", + "reactions_play_sound_description": "Spela en ljudeffekt när någon skickar in en reaktion i ett samtal.", + "reactions_play_sound_label": "Spela reaktionsljud", + "reactions_show_description": "Visa en animering när någon skickar en reaktion.", + "reactions_show_label": "Visa reaktioner", + "show_hand_raised_timer_description": "Visa en timer när en deltagare räcker upp handen", + "show_hand_raised_timer_label": "Visa varaktighet för handuppräckning" + } }, "star_rating_input_label_one": "{{count}} stjärna", - "star_rating_input_label_other": "{{count}} stjärnor" + "star_rating_input_label_other": "{{count}} stjärnor", + "start_new_call": "Starta ett nytt samtal", + "start_video_button_label": "Starta video", + "stop_screenshare_button_label": "Delar skärm", + "stop_video_button_label": "Stoppa video", + "submitting": "Skickar …", + "switch_camera": "Byt kamera", + "unauthenticated_view_body": "Inte registrerad än? <2>Skapa ett konto", + "unauthenticated_view_login_button": "Logga in på ditt konto", + "unauthenticated_view_ssla_caption": "Genom att klicka på ”Kör” godkänner du vårt <2>licensavtal för programvara och tjänster", + "unmute_microphone_button_label": "Sluta tysta mikrofonen", + "version": "Version: {{version}}", + "video_tile": { + "always_show": "Visa alltid", + "camera_starting": "Video laddar …", + "change_fit_contain": "Anpassa till ram", + "collapse": "Kollapsa", + "expand": "Expandera", + "mute_for_me": "Tysta för mig", + "muted_for_me": "Tystad för mig", + "volume": "Volym", + "waiting_for_media": "Väntar på media …" + } } diff --git a/locales/tr/app.json b/locales/tr/app.json index 67a9b7e8..da26eb0f 100644 --- a/locales/tr/app.json +++ b/locales/tr/app.json @@ -1,42 +1,141 @@ { + "a11y": { + "user_menu": "Kullanıcı menüsü" + }, "action": { "close": "Kapat", + "copy_link": "Bağlantıyı kopyala", + "edit": "Düzenle", "go": "Git", + "invite": "Davet et", + "lower_hand": "Elini indir", "no": "Hayır", + "pick_reaction": "Tepki seç", + "raise_hand": "Elini kaldır", "register": "Kaydol", "remove": "Çıkar", + "show_less": "Daha az göster", + "show_more": "Daha fazla göster", "sign_in": "Gir", - "sign_out": "Çık" + "sign_out": "Çık", + "submit": "Gönder", + "upload_file": "Dosya Yükle" + }, + "analytics_notice": "Bu beta sürümüne katılarak, ürünü geliştirmek için kullandığımız anonim verilerin toplanmasına izin vermiş olursunuz. Hangi verileri izlediğimiz hakkında daha fazla bilgiyi <2>Gizlilik Politikamızda ve <6>Çerez Politikamızda bulabilirsiniz..", + "app_selection_modal": { + "continue_in_browser": "Tarayıcıda devam et", + "open_in_app": "Uygulamada aç", + "text": "Katılmaya hazır mısınız?", + "title": "Uygulama seçin" }, "call_ended_view": { "create_account_button": "Hesap aç", "create_account_prompt": "<0>Hesabınızı tutmak için niye bir parola açmıyorsunuz?<1>Böylece ileriki aramalarda adınızı ve avatarınızı kullanabileceksiniz", - "not_now_button": "Şimdi değil, ev ekranına dön" + "feedback_done": "<0>Geri bildiriminiz için teşekkürler!", + "feedback_prompt": "<0>Deneyiminizi geliştirebilmemiz için geri bildirimlerinizi duymak isteriz.", + "headline": "{{displayName}}, çağrınız sona erdi.", + "not_now_button": "Şimdi değil, ev ekranına dön", + "reconnect_button": "Yeniden bağlan", + "survey_prompt": "Nasıl geçti?" }, + "call_name": "Aramanın adı", "common": { + "analytics": "Analiz", "audio": "Ses", + "avatar": "Avatar", + "back": "Geri", "display_name": "Ekran adı", + "encrypted": "Şifrelenmiş", "home": "Ev", "loading": "Yükleniyor…", + "next": "İleri", + "options": "Seçenekler", "password": "Parola", - "settings": "Ayarlar" + "preferences": "Tercihler", + "profile": "Profil", + "reaction": "Tepki", + "reactions": "Tepkiler", + "settings": "Ayarlar", + "unencrypted": "Şifrelenmemiş", + "username": "Kullanıcı adı", + "video": "Video" + }, + "developer_mode": { + "crypto_version": "Şifreleme sürümü: {{version}}", + "debug_tile_layout_label": "Hata ayıklama döşeme düzeni", + "device_id": "Cihaz Kimliği: {{id}}", + "duplicate_tiles_label": "Katılımcı başına ek döşeme sayısı", + "hostname": "Sunucu adı: {{hostname}}", + "livekit_server_info": "LiveKit Sunucu Bilgisi", + "livekit_sfu": "LiveKit SFU: {{url}}", + "matrix_id": "Matrix Kimliği: {{id}}", + "show_connection_stats": "Bağlantı istatistiklerini göster", + "show_non_member_tiles": "Üye olmayan kullanıcılar için ortam döşemelerini göster" + }, + "disconnected_banner": "Sunucuyla bağlantı kesildi.", + "error": { + "call_not_found": "Çağrı bulunamadı", + "call_not_found_description": "<0>Bu bağlantı mevcut herhangi bir çağrıya ait görünmüyor. Doğru bağlantıya sahip olduğunuzu kontrol edin veya <1> yeni bir bağlantı oluşturun. ", + "connection_lost": "Bağlantı kesildi", + "connection_lost_description": "Çağrıdan bağlantınız kesildi.", + "e2ee_unsupported": "Uyumsuz Tarayıcı", + "e2ee_unsupported_description": "İnternet tarayıcınız şifreli aramaları desteklemiyor. Desteklenen tarayıcılar arasında Chrome, Safari ve Firefox 117+ bulunur.", + "generic": "Bir şeyler ters gitti", + "generic_description": "Hata ayıklama günlüklerini göndermeniz sorunu tespit etmemizde yardımcı olacaktır.", + "open_elsewhere": "Başka bir sekmede açıldı", + "open_elsewhere_description": "{{brand}} başka bir sekmede açıldı. Bu doğru değilse, sayfayı yeniden yüklemeyi deneyin." + }, + "group_call_loader": { + "banned_body": "Odaya girmeniz yasaklandı.", + "banned_heading": "Yasaklandı", + "call_ended_body": "Aramadan çıkarıldınız.", + "call_ended_heading": "Arama sonlandırıldı", + "knock_reject_body": "Katılma isteğiniz reddedildi.", + "knock_reject_heading": "Erişim reddedildi", + "reason": "Neden: {{reason}}" + }, + "hangup_button_label": "Aramayı sonlandır", + "header_label": "Element Call Ana Sayfa", + "header_participants_label": "Katılımcılar", + "invite_modal": { + "link_copied_toast": "Bağlantı panoya kopyalandı", + "title": "Bu görüşmeye davet edin" }, "join_existing_call_modal": { + "join_button": "Evet, aramaya katıl", "text": "Bu arama zaten var, katılmak ister misiniz?", "title": "Mevcut aramaya katıl?" }, + "layout_grid_label": "Izgara", + "layout_spotlight_label": "İlgi Odağı", "lobby": { - "join_button": "Aramaya katıl" + "ask_to_join": "Aramaya katılma isteği gönder", + "join_as_guest": "Misafir olarak katıl", + "join_button": "Aramaya katıl", + "leave_button": "Son aramalara dön", + "waiting_for_invite": "İstek gönderildi! Katılmak için izin verilmesi bekleniyor…" }, + "log_in": "Giriş yap", "logging_in": "Giriliyor…", "login_auth_links": "<0>Hesap oluştur yahut <2>Konuk olarak gir", + "login_auth_links_prompt": "Henüz kaydolmadınız mı?", + "login_subheading": "Element'e devam etmek için", "login_title": "Gir", + "microphone_off": "Mikrofon kapalı", + "microphone_on": "Mikrofon açık", + "mute_microphone_button_label": "Mikrofonu sessize al", + "participant_count_one": "{{count, number}}", + "participant_count_other": "{{count, number}}", + "qr_code": "QR Kodu", + "rageshake_button_error_caption": "Günlükleri göndermeyi yeniden dene", "rageshake_request_modal": { "body": "Bu aramadaki başka bir kullanıcı sorun yaşıyor. Sorunu daha iyi çözebilmemiz için hata ayıklama kütüğünü almak isteriz.", "title": "Hata ayıklama kütük istemi" }, "rageshake_send_logs": "Hata ayıklama kütüğünü gönder", "rageshake_sending": "Gönderiliyor…", + "rageshake_sending_logs": "Hata ayıklama günlükleri gönderiliyor...", + "rageshake_sent": "Teşekkürler!", "recaptcha_dismissed": "reCAPTCHA atlandı", "recaptcha_not_loaded": "reCAPTCHA yüklenmedi", "register": { @@ -45,13 +144,66 @@ }, "register_auth_links": "<0>Mevcut hesabınız mı var?<1><0>Gir yahut <2>Konuk girişi", "register_confirm_password_label": "Parolayı tekrar edin", + "register_heading": "Hesabınızı Oluşturun", "return_home_button": "Ev ekranına geri dön", + "room_auth_view_continue_button": "Devam et", "screenshare_button_label": "Ekran paylaş", "settings": { + "audio_tab": { + "effect_volume_description": "Tepkilerin ve el kaldırmaların çaldığı ses düzeyini ayarlayın.", + "effect_volume_label": "Ses efekti sesi" + }, "developer_tab_title": "Geliştirici", + "devices": { + "camera": "Kamera", + "camera_numbered": "Kamera {{n}}", + "default": "Varsayılan", + "default_named": "Varsayılan <2>({{name}})", + "microphone": "Mikrofon", + "microphone_numbered": "Mikrofon {{n}}", + "speaker": "Hoparlör", + "speaker_numbered": "Hoparlör {{n}}" + }, + "feedback_tab_body": "Sorun yaşıyorsanız veya yalnızca geri bildirimde bulunmak istiyorsanız, lütfen bize aşağıdan kısa bir açıklama gönderin.", + "feedback_tab_description_label": "Görüşleriniz", "feedback_tab_h4": "Geri bildirim ver", - "feedback_tab_send_logs_label": "Hata ayıklama kütüğünü dahil et" + "feedback_tab_send_logs_label": "Hata ayıklama kütüğünü dahil et", + "feedback_tab_thank_you": "Teşekkürler, geri bildiriminizi aldık!", + "feedback_tab_title": "Geri Bildirim", + "opt_in_description": "<0><1>Bu kutunun işaretini kaldırarak onayınızı geri çekebilirsiniz. Şu anda bir aramadaysanız, bu ayar aramanın sonunda geçerli olacaktır.", + "preferences_tab": { + "developer_mode_label": "Geliştirici modu", + "developer_mode_label_description": "Geliştirici modunu etkinleştir ve geliştirici ayarları sekmesini göster.", + "introduction": "Burada daha iyi bir deneyim için ek seçenekleri yapılandırabilirsiniz.", + "reactions_play_sound_description": "Birisi aramada tepki gönderdiğinde ses efekti çal.", + "reactions_play_sound_label": "Tepki seslerini çal", + "reactions_show_description": "Biri tepki gönderdiğinde animasyon göster.", + "reactions_show_label": "Tepkileri göster", + "show_hand_raised_timer_description": "Bir katılımcı elini kaldırdığında bir zamanlayıcı göster", + "show_hand_raised_timer_label": "El kaldırma süresini göster" + } }, + "star_rating_input_label_one": "{{count}} yıldız", + "star_rating_input_label_other": "{{count}} yıldız", + "start_new_call": "Yeni arama başlat", + "start_video_button_label": "Videoy paylaşımı Başlat", + "stop_screenshare_button_label": "Ekran paylaşılıyor", + "stop_video_button_label": "Video paylaşımını durdur", + "submitting": "Gönderiliyor...", + "switch_camera": "Kamerayı değiştir", "unauthenticated_view_body": "Kaydolmadınız mı? <2>Hesap açın", - "unauthenticated_view_login_button": "Hesabınıza girin" + "unauthenticated_view_login_button": "Hesabınıza girin", + "unmute_microphone_button_label": "Mikrofonun sesini aç", + "version": "{{productName}} sürüm: {{version}}", + "video_tile": { + "always_show": "Her zaman göster", + "camera_starting": "Video paylaşımı başlatılıyor...", + "change_fit_contain": "Çerçeveye sığdır", + "collapse": "Daralt", + "expand": "Genişlet", + "mute_for_me": "Benim için sessize al", + "muted_for_me": "Benim için susturulanlar", + "volume": "Ses", + "waiting_for_media": "Ortam bekleniyor..." + } } diff --git a/locales/uk/app.json b/locales/uk/app.json index ad0e2bd5..717e8df3 100644 --- a/locales/uk/app.json +++ b/locales/uk/app.json @@ -5,14 +5,21 @@ "action": { "close": "Закрити", "copy_link": "Скопіювати посилання", + "edit": "Редагувати", "go": "Далі", "invite": "Запросити", + "lower_hand": "Опустити руку", "no": "Ні", + "pick_reaction": "Виберіть реакцію", + "raise_hand": "Підняти руку", "register": "Зареєструватися", "remove": "Вилучити", + "show_less": "Показувати менше", + "show_more": "Показати більше", "sign_in": "Увійти", "sign_out": "Вийти", - "submit": "Надіслати" + "submit": "Надіслати", + "upload_file": "Завантажити файл" }, "analytics_notice": "Користуючись дочасним доступом, ви даєте згоду на збір анонімних даних, які ми використовуємо для вдосконалення продукту. Ви можете знайти більше інформації про те, які дані ми відстежуємо в нашій <2>Політиці Приватності і нашій <5>Політиці про куки.", "app_selection_modal": { @@ -33,20 +40,68 @@ }, "call_name": "Назва виклику", "common": { + "analytics": "Аналітика", "audio": "Звук", "avatar": "Аватар", + "back": "Назад", "display_name": "Псевдонім", "encrypted": "Зашифровано", "home": "Домівка", "loading": "Завантаження…", + "next": "Далі", + "options": "Налаштування", "password": "Пароль", + "preferences": "Уподобання", "profile": "Профіль", + "reaction": "Реакція", + "reactions": "Реакції", "settings": "Налаштування", "unencrypted": "Не зашифровано", "username": "Ім'я користувача", "video": "Відео" }, + "developer_mode": { + "crypto_version": "Крипто-версія: {{version}}", + "debug_tile_layout_label": "Налагоджування макету плиток", + "device_id": "ID пристрою: {{id}}", + "duplicate_tiles_label": "Кількість додаткових копій плиток на одного учасника", + "environment_variables": "Змінні середовища", + "hostname": "Ім'я хоста: {{hostname}}", + "livekit_server_info": "Інформація про сервер LiveKit", + "livekit_sfu": "LiveKit SFU: {{url}}", + "matrix_id": "Matrix ID: {{id}}", + "show_connection_stats": "Показувати статистику підключення", + "show_non_member_tiles": "Показувати плитки для медіа, які не є учасниками", + "url_params": "Параметри URL", + "use_new_membership_manager": "Використовуйте нову реалізацію виклику MembershipManager" + }, "disconnected_banner": "Втрачено зв'язок з сервером.", + "error": { + "call_is_not_supported": "Виклик не підтримується", + "call_not_found": "Виклик не знайдено", + "call_not_found_description": "<0>Схоже, що це посилання не належить до жодного існуючого дзвінка. Перевірте, чи посилання правильне, або <1> створіть нове. ", + "connection_lost": "Зв'язок втрачено", + "connection_lost_description": "Вас було відключено від дзвінка.", + "e2ee_unsupported": "Несумісний браузер", + "e2ee_unsupported_description": "Ваш веб-браузер не підтримує зашифровані дзвінки. Підтримувані браузери включають Chrome, Safari та Firefox 117+.", + "generic": "Щось пішло не так", + "generic_description": "Надсилання журналів налагодження допоможе нам відстежити проблему.", + "insufficient_capacity": "Недостатньо обсягу", + "insufficient_capacity_description": "Сервер досяг максимального обсягу, і ви на разі не можете приєднатися до виклику. Спробуйте пізніше або зверніться до адміністратора сервера, якщо проблема не зникне.", + "matrix_rtc_focus_missing": "Сервер не налаштований щоб працювати з {{brand}}. Будь ласка, зв'яжіться з адміністратором сервера (Домен: {{domain}}, Код помилки: {{ errorCode }}).", + "open_elsewhere": "Відкрито в іншій вкладці", + "open_elsewhere_description": "{{brand}} було відкрито в іншій вкладці. Якщо це звучить неправильно, спробуйте перезавантажити сторінку.", + "unexpected_ec_error": "Сталася несподівана помилка (<0>Код помилки: <1> {{ errorCode }}). Будь ласка, зв'яжіться з адміністратором сервера." + }, + "group_call_loader": { + "banned_body": "Вас було забанено в цій кімнаті.", + "banned_heading": "Забанено", + "call_ended_body": "Вас вилучено з виклику.", + "call_ended_heading": "Виклик завершено", + "knock_reject_body": "Ваш запит на приєднання було відхилено.", + "knock_reject_heading": "Доступ заборонено", + "reason": "Причина: {{reason}}" + }, "hangup_button_label": "Завершити виклик", "header_label": "Домівка Element Call", "header_participants_label": "Учасники", @@ -62,15 +117,25 @@ "layout_grid_label": "Сітка", "layout_spotlight_label": "У центрі уваги", "lobby": { + "ask_to_join": "Запит на приєднання до виклику", + "join_as_guest": "Приєднатись як гість", "join_button": "Приєднатися до виклику", - "leave_button": "Повернутися до недавніх" + "leave_button": "Повернутися до недавніх", + "waiting_for_invite": "Запит надіслано! Чекаємо дозволу на приєднання..." }, + "log_in": "Увійти", "logging_in": "Вхід…", "login_auth_links": "<0>Створити обліковий запис або <2>Отримати доступ як гість", + "login_auth_links_prompt": "Ще не зареєстровані?", + "login_subheading": "Продовжити в Element", "login_title": "Увійти", "microphone_off": "Мікрофон вимкнено", "microphone_on": "Мікрофон увімкнено", "mute_microphone_button_label": "Вимкнути мікрофон", + "participant_count_one": "{{count, number}}", + "participant_count_few": "{{count, number}}", + "participant_count_many": "{{count, number}}", + "qr_code": "QR-код", "rageshake_button_error_caption": "Повторити надсилання журналів", "rageshake_request_modal": { "body": "Інший користувач у цьому виклику має проблему. Щоб краще визначити ці проблеми, ми хотіли б зібрати журнал налагодження.", @@ -82,23 +147,52 @@ "rageshake_sent": "Дякуємо!", "recaptcha_dismissed": "Recaptcha не пройдено", "recaptcha_not_loaded": "Recaptcha не завантажено", + "recaptcha_ssla_caption": "Цей сайт захищений ReCAPTCHA та Google<2>Політикою конфіденційності і <6>Умови обслуговування застосовуються.<9> Натискаючи «Зареєструватися», ви погоджуєтеся з нашою<12> Ліцензійна угодою про програмне забезпечення та послуги (SSLA)", "register": { "passwords_must_match": "Паролі відрізняються", "registering": "Реєстрація…" }, "register_auth_links": "<0>Уже маєте обліковий запис?<1><0>Увійти Or <2>Отримати доступ як гість", "register_confirm_password_label": "Підтвердити пароль", + "register_heading": "Створити свій акаунт", "return_home_button": "Повернутися на екран домівки", + "room_auth_view_continue_button": "Продовжити", + "room_auth_view_ssla_caption": "Натиснувши «Приєднатися до виклику зараз», ви погоджуєтеся з нашою <2>Ліцензійною угодою на програмне забезпечення та послуги (SSLA) ", "screenshare_button_label": "Поділитися екраном", "settings": { + "audio_tab": { + "effect_volume_description": "Змінити гучність реакцій і ефекту підіймання руки.", + "effect_volume_label": "Гучність звукових ефектів" + }, "developer_tab_title": "Розробнику", + "devices": { + "camera": "Камера", + "camera_numbered": "Камера {{n}}", + "default": "За замовчуванням", + "default_named": "За замовчуванням <2> ({{name}}) ", + "microphone": "Мікрофон", + "microphone_numbered": "Мікрофон {{n}}", + "speaker": "Динамік", + "speaker_numbered": "Динамік {{n}}" + }, "feedback_tab_body": "Якщо у вас виникли проблеми або ви просто хочете залишити відгук, надішліть нам короткий опис нижче.", "feedback_tab_description_label": "Ваш відгук", "feedback_tab_h4": "Надіслати відгук", "feedback_tab_send_logs_label": "Долучити журнали налагодження", "feedback_tab_thank_you": "Дякуємо, ми отримали ваш відгук!", "feedback_tab_title": "Відгук", - "opt_in_description": "<0><1>Ви можете відкликати згоду, прибравши цей прапорець. Якщо ви зараз розмовляєте, це налаштування застосується після завершення виклику." + "opt_in_description": "<0><1>Ви можете відкликати згоду, прибравши цей прапорець. Якщо ви зараз розмовляєте, це налаштування застосується після завершення виклику.", + "preferences_tab": { + "developer_mode_label": "Режим розробника", + "developer_mode_label_description": "Увімкнути режим розробника та показати вкладку налаштувань розробника.", + "introduction": "Тут ви можете налаштувати додаткові параметри для кращого досвіду.", + "reactions_play_sound_description": "Відтворювати звуковий ефект, коли хтось надсилає реакцію у виклик.", + "reactions_play_sound_label": "Відтворювати звуки реакції", + "reactions_show_description": "Показувати анімацію, коли хтось надсилає реакцію.", + "reactions_show_label": "Показувати реакції", + "show_hand_raised_timer_description": "Показувати таймер, коли учасник піднімає руку", + "show_hand_raised_timer_label": "Показувати тривалість підняття руки" + } }, "star_rating_input_label_one": "{{count}} зірок", "star_rating_input_label_other": "{{count}} зірок", @@ -107,8 +201,21 @@ "stop_screenshare_button_label": "Презентація екрана", "stop_video_button_label": "Зупинити відео", "submitting": "Надсилання…", + "switch_camera": "Переключити камеру", "unauthenticated_view_body": "Ще не зареєстровані? <2>Створіть обліковий запис", "unauthenticated_view_login_button": "Увійдіть до свого облікового запису", + "unauthenticated_view_ssla_caption": "Натискаючи \"Перейти\", ви погоджуєтеся з нашою <2>Ліцензійною угодою на програмне забезпечення та послуги (SSLA) ", "unmute_microphone_button_label": "Увімкнути мікрофон", - "version": "Версія: {{version}}" + "version": "Версія: {{version}}", + "video_tile": { + "always_show": "Показувати завжди", + "camera_starting": "Завантаження відео...", + "change_fit_contain": "Допасувати до рамки", + "collapse": "Згорнути", + "expand": "Розгорнути", + "mute_for_me": "Вимкнути звук для мене", + "muted_for_me": "Вимкнено звук для мене", + "volume": "Гучність", + "waiting_for_media": "Очікування медіа..." + } } From 797710157805134dd16653888b14085919389ff8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Apr 2025 14:09:33 +0000 Subject: [PATCH 082/225] Update dependency livekit-client to v2.11.0 --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 728f5e8e..e09ce1eb 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "i18next-parser": "^9.1.0", "jsdom": "^26.0.0", "knip": "^5.27.2", - "livekit-client": "2.10.0", + "livekit-client": "2.11.0", "lodash-es": "^4.17.21", "loglevel": "^1.9.1", "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#8395919f0fd1af7cab1e793d736f2cdf18ef7686", diff --git a/yarn.lock b/yarn.lock index 8d06a0ac..a85c418a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6910,7 +6910,7 @@ __metadata: i18next-parser: "npm:^9.1.0" jsdom: "npm:^26.0.0" knip: "npm:^5.27.2" - livekit-client: "npm:2.10.0" + livekit-client: "npm:2.11.0" lodash-es: "npm:^4.17.21" loglevel: "npm:^1.9.1" matrix-js-sdk: "github:matrix-org/matrix-js-sdk#8395919f0fd1af7cab1e793d736f2cdf18ef7686" @@ -9280,9 +9280,9 @@ __metadata: languageName: node linkType: hard -"livekit-client@npm:2.10.0": - version: 2.10.0 - resolution: "livekit-client@npm:2.10.0" +"livekit-client@npm:2.11.0": + version: 2.11.0 + resolution: "livekit-client@npm:2.11.0" dependencies: "@livekit/mutex": "npm:1.1.1" "@livekit/protocol": "npm:1.36.1" @@ -9293,7 +9293,7 @@ __metadata: tslib: "npm:2.8.1" typed-emitter: "npm:^2.1.0" webrtc-adapter: "npm:^9.0.1" - checksum: 10c0/bc5d1d1e08576da3356f567836090a58dfad9b2d9ca2280584acf31676949a88d9526940ab10a9b6cf79545a49f82678cb0665f65851628e6148a9d559cacc90 + checksum: 10c0/68d06ffdb066d148a9280fb27ae2de84e7163ac3f134dd74138fbddf2bb6f2b45d837751b379af25935c3b1bf8cd02b719db4f37cccb320e7bc438e0f4d38cd9 languageName: node linkType: hard From e166f36ab5543731a063cb5240306c5fd7f99c5d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Apr 2025 19:10:55 +0000 Subject: [PATCH 083/225] Update dependency livekit-client to v2.11.1 --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index e09ce1eb..64e49806 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "i18next-parser": "^9.1.0", "jsdom": "^26.0.0", "knip": "^5.27.2", - "livekit-client": "2.11.0", + "livekit-client": "2.11.1", "lodash-es": "^4.17.21", "loglevel": "^1.9.1", "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#8395919f0fd1af7cab1e793d736f2cdf18ef7686", diff --git a/yarn.lock b/yarn.lock index a85c418a..baa3d11f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6910,7 +6910,7 @@ __metadata: i18next-parser: "npm:^9.1.0" jsdom: "npm:^26.0.0" knip: "npm:^5.27.2" - livekit-client: "npm:2.11.0" + livekit-client: "npm:2.11.1" lodash-es: "npm:^4.17.21" loglevel: "npm:^1.9.1" matrix-js-sdk: "github:matrix-org/matrix-js-sdk#8395919f0fd1af7cab1e793d736f2cdf18ef7686" @@ -9280,9 +9280,9 @@ __metadata: languageName: node linkType: hard -"livekit-client@npm:2.11.0": - version: 2.11.0 - resolution: "livekit-client@npm:2.11.0" +"livekit-client@npm:2.11.1": + version: 2.11.1 + resolution: "livekit-client@npm:2.11.1" dependencies: "@livekit/mutex": "npm:1.1.1" "@livekit/protocol": "npm:1.36.1" @@ -9293,7 +9293,7 @@ __metadata: tslib: "npm:2.8.1" typed-emitter: "npm:^2.1.0" webrtc-adapter: "npm:^9.0.1" - checksum: 10c0/68d06ffdb066d148a9280fb27ae2de84e7163ac3f134dd74138fbddf2bb6f2b45d837751b379af25935c3b1bf8cd02b719db4f37cccb320e7bc438e0f4d38cd9 + checksum: 10c0/4df027e8844483d315e45a74b43fdc2860e3230a7f2c9224e37b3087a2b93cfa43610384f6ae492166f1703781208a8bd4ed088d2f56ef1069138d83416ca016 languageName: node linkType: hard From e98b0ed1edddc8f5dc64b107416a01f9da68f702 Mon Sep 17 00:00:00 2001 From: fkwp Date: Fri, 11 Apr 2025 00:06:03 +0200 Subject: [PATCH 084/225] indentation --- docs/self-hosting.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/self-hosting.md b/docs/self-hosting.md index c1e109fd..7a515930 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -148,7 +148,10 @@ server { ] ``` -Make sure this file is served with the correct MIME type (`application/json`). Additionally, ensure the appropriate CORS headers are set to allow web clients to access it across origins. For more details, refer to the [Matrix Client-Server API: 2. Web Browser Clients](https://spec.matrix.org/latest/client-server-api/#web-browser-clients). +Make sure this file is served with the correct MIME type (`application/json`). +Additionally, ensure the appropriate CORS headers are set to allow web clients +to access it across origins. For more details, refer to the +[Matrix Client-Server API: 2. Web Browser Clients](https://spec.matrix.org/latest/client-server-api/#web-browser-clients). ``` Access-Control-Allow-Origin: * From 3c0d81844fe25aefbc85c4d1666b364a49fc9e56 Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Fri, 11 Apr 2025 10:07:50 +0200 Subject: [PATCH 085/225] Add option to enable to-device-encryption (#3167) * enable to-device-encryption * add logging for key provider * make rooms encrypted * add dev setting to choose to-device or room encryption * add indicator when to-device is used. --- locales/en/app.json | 3 +- package.json | 2 +- src/livekit/useLiveKit.ts | 3 ++ src/room/GroupCallView.tsx | 51 +++++++++------------------ src/room/InCallView.tsx | 19 +++++++++- src/rtcSessionHelpers.test.ts | 1 + src/rtcSessionHelpers.ts | 2 ++ src/settings/DeveloperSettingsTab.tsx | 19 ++++++++++ src/settings/settings.ts | 6 ++++ yarn.lock | 10 +++--- 10 files changed, 74 insertions(+), 42 deletions(-) diff --git a/locales/en/app.json b/locales/en/app.json index 51beef1b..be75681a 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -73,7 +73,8 @@ "show_connection_stats": "Show connection statistics", "show_non_member_tiles": "Show tiles for non-member media", "url_params": "URL parameters", - "use_new_membership_manager": "Use the new implementation of the call MembershipManager" + "use_new_membership_manager": "Use the new implementation of the call MembershipManager", + "use_to_device_key_transport": "Use to device messages to distribute keys for matrixRTC media" }, "disconnected_banner": "Connectivity to the server has been lost.", "error": { diff --git a/package.json b/package.json index 64e49806..065fbf9f 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "livekit-client": "2.11.1", "lodash-es": "^4.17.21", "loglevel": "^1.9.1", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#8395919f0fd1af7cab1e793d736f2cdf18ef7686", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#e3a3a52f2a56cb5cc52b57b36e9a915faed0b5db", "matrix-widget-api": "1.11.0", "normalize.css": "^8.0.1", "observable-hooks": "^4.2.3", diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLiveKit.ts index 0500a04d..da180ab8 100644 --- a/src/livekit/useLiveKit.ts +++ b/src/livekit/useLiveKit.ts @@ -49,11 +49,14 @@ export function useLiveKit( if (e2eeSystem.kind === E2eeType.NONE) return undefined; if (e2eeSystem.kind === E2eeType.PER_PARTICIPANT) { + logger.info("Created MatrixKeyProvider (per participant)"); return { keyProvider: new MatrixKeyProvider(), worker: new E2EEWorker(), }; } else if (e2eeSystem.kind === E2eeType.SHARED_KEY && e2eeSystem.secret) { + logger.info("Created ExternalE2EEKeyProvider (shared key)"); + return { keyProvider: new ExternalE2EEKeyProvider(), worker: new E2EEWorker(), diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index 3d9b9808..0d727485 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -62,6 +62,7 @@ import { } from "../utils/errors.ts"; import { GroupCallErrorBoundary } from "./GroupCallErrorBoundary.tsx"; import { + useExperimentalToDeviceTransportSetting, useNewMembershipManagerSetting as useNewMembershipManagerSetting, useSetting, } from "../settings/settings"; @@ -151,6 +152,9 @@ export const GroupCallView: FC = ({ const { perParticipantE2EE, returnToLobby } = useUrlParams(); const e2eeSystem = useRoomEncryptionSystem(room.roomId); const [useNewMembershipManager] = useSetting(useNewMembershipManagerSetting); + const [useExperimentalToDeviceTransport] = useSetting( + useExperimentalToDeviceTransportSetting, + ); usePageTitle(roomName); @@ -178,16 +182,13 @@ export const GroupCallView: FC = ({ const latestMuteStates = useLatest(muteStates); const enterRTCSessionOrError = useCallback( - async ( - rtcSession: MatrixRTCSession, - perParticipantE2EE: boolean, - newMembershipManager: boolean, - ): Promise => { + async (rtcSession: MatrixRTCSession): Promise => { try { await enterRTCSession( rtcSession, perParticipantE2EE, - newMembershipManager, + useNewMembershipManager, + useExperimentalToDeviceTransport, ); } catch (e) { if (e instanceof ElementCallError) { @@ -201,7 +202,11 @@ export const GroupCallView: FC = ({ } } }, - [setExternalError], + [ + perParticipantE2EE, + useExperimentalToDeviceTransport, + useNewMembershipManager, + ], ); useEffect(() => { @@ -253,11 +258,7 @@ export const GroupCallView: FC = ({ await defaultDeviceSetup( ev.detail.data as unknown as JoinCallData, ); - await enterRTCSessionOrError( - rtcSession, - perParticipantE2EE, - useNewMembershipManager, - ); + await enterRTCSessionOrError(rtcSession); widget.api.transport.reply(ev.detail, {}); })().catch((e) => { logger.error("Error joining RTC session", e); @@ -270,21 +271,13 @@ export const GroupCallView: FC = ({ } else { // No lobby and no preload: we enter the rtc session right away (async (): Promise => { - await enterRTCSessionOrError( - rtcSession, - perParticipantE2EE, - useNewMembershipManager, - ); + await enterRTCSessionOrError(rtcSession); })().catch((e) => { logger.error("Error joining RTC session", e); }); } } else { - void enterRTCSessionOrError( - rtcSession, - perParticipantE2EE, - useNewMembershipManager, - ); + void enterRTCSessionOrError(rtcSession); } } }, [ @@ -407,13 +400,7 @@ export const GroupCallView: FC = ({ client={client} matrixInfo={matrixInfo} muteStates={muteStates} - onEnter={() => - void enterRTCSessionOrError( - rtcSession, - perParticipantE2EE, - useNewMembershipManager, - ) - } + onEnter={() => void enterRTCSessionOrError(rtcSession)} confineToRoom={confineToRoom} hideHeader={hideHeader} participantCount={participantCount} @@ -491,11 +478,7 @@ export const GroupCallView: FC = ({ recoveryActionHandler={(action) => { if (action == "reconnect") { setLeft(false); - enterRTCSessionOrError( - rtcSession, - perParticipantE2EE, - useNewMembershipManager, - ).catch((e) => { + enterRTCSessionOrError(rtcSession).catch((e) => { logger.error("Error re-entering RTC session", e); }); } diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 53742fc2..b8718ba7 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -10,6 +10,7 @@ import { RoomContext, useLocalParticipant, } from "@livekit/components-react"; +import { Text } from "@vector-im/compound-web"; import { ConnectionState, type Room } from "livekit-client"; import { type MatrixClient } from "matrix-js-sdk"; import { @@ -94,11 +95,11 @@ import { ReactionsOverlay } from "./ReactionsOverlay"; import { CallEventAudioRenderer } from "./CallEventAudioRenderer"; import { debugTileLayout as debugTileLayoutSetting, + useExperimentalToDeviceTransportSetting, useSetting, } from "../settings/settings"; import { ReactionsReader } from "../reactions/ReactionsReader"; import { ConnectionLostError } from "../utils/errors.ts"; - const canScreenshare = "getDisplayMedia" in (navigator.mediaDevices ?? {}); const maxTapDurationMs = 400; @@ -216,6 +217,10 @@ export const InCallView: FC = ({ room: livekitRoom, }); + const [toDeviceEncryption] = useSetting( + useExperimentalToDeviceTransportSetting, + ); + const toggleMicrophone = useCallback( () => muteStates.audio.setEnabled?.((e) => !e), [muteStates], @@ -662,6 +667,18 @@ export const InCallView: FC = ({ ))} + { + // TODO: remove this once we remove the developer flag + // and find a better way to device what key transport to use. + toDeviceEncryption && ( + + using to Device key transport + + ) + } {renderContent()} diff --git a/src/rtcSessionHelpers.test.ts b/src/rtcSessionHelpers.test.ts index fe7465b3..ecfd44f7 100644 --- a/src/rtcSessionHelpers.test.ts +++ b/src/rtcSessionHelpers.test.ts @@ -112,6 +112,7 @@ test("It joins the correct Session", async () => { manageMediaKeys: false, useLegacyMemberEvents: false, useNewMembershipManager: true, + useExperimentalToDeviceTransport: false, }, ); }); diff --git a/src/rtcSessionHelpers.ts b/src/rtcSessionHelpers.ts index fbaa7ed7..51bc79b8 100644 --- a/src/rtcSessionHelpers.ts +++ b/src/rtcSessionHelpers.ts @@ -98,6 +98,7 @@ export async function enterRTCSession( rtcSession: MatrixRTCSession, encryptMedia: boolean, useNewMembershipManager = true, + useExperimentalToDeviceTransport = false, ): Promise { PosthogAnalytics.instance.eventCallEnded.cacheStartCall(new Date()); PosthogAnalytics.instance.eventCallStarted.track(rtcSession.room.roomId); @@ -125,6 +126,7 @@ export async function enterRTCSession( membershipKeepAlivePeriod: matrixRtcSessionConfig?.membership_keep_alive_period, makeKeyDelay: matrixRtcSessionConfig?.key_rotation_on_leave_delay, + useExperimentalToDeviceTransport, }, ); if (widget) { diff --git a/src/settings/DeveloperSettingsTab.tsx b/src/settings/DeveloperSettingsTab.tsx index 0981a843..67de0e0d 100644 --- a/src/settings/DeveloperSettingsTab.tsx +++ b/src/settings/DeveloperSettingsTab.tsx @@ -16,6 +16,7 @@ import { showNonMemberTiles as showNonMemberTilesSetting, showConnectionStats as showConnectionStatsSetting, useNewMembershipManagerSetting, + useExperimentalToDeviceTransportSetting, } from "./settings"; import type { MatrixClient } from "matrix-js-sdk"; import type { Room as LivekitRoom } from "livekit-client"; @@ -44,6 +45,10 @@ export const DeveloperSettingsTab: FC = ({ client, livekitRoom }) => { useNewMembershipManagerSetting, ); + const [ + useExperimentalToDeviceTransport, + setUseExperimentalToDeviceTransport, + ] = useSetting(useExperimentalToDeviceTransportSetting); const urlParams = useUrlParams(); const sfuUrl = useMemo((): URL | null => { @@ -156,6 +161,20 @@ export const DeveloperSettingsTab: FC = ({ client, livekitRoom }) => { )} /> + + ): void => { + setUseExperimentalToDeviceTransport(event.target.checked); + }, + [setUseExperimentalToDeviceTransport], + )} + /> + {livekitRoom ? ( <>

diff --git a/src/settings/settings.ts b/src/settings/settings.ts index a3b52c7a..8820aea2 100644 --- a/src/settings/settings.ts +++ b/src/settings/settings.ts @@ -115,14 +115,16 @@ export const soundEffectVolumeSetting = new Setting( 0.5, ); -export const useNewMembershipManagerSetting = new Setting( +export const useNewMembershipManager = new Setting( "new-membership-manager", true, ); -export const useExperimentalToDeviceTransportSetting = new Setting( +export const useExperimentalToDeviceTransport = new Setting( "experimental-to-device-transport", true, ); +export const muteAllAudio = new Setting("mute-all-audio", false); + export const alwaysShowSelf = new Setting("always-show-self", true); diff --git a/src/useAudioContext.tsx b/src/useAudioContext.tsx index d96b9fdc..d6bc314b 100644 --- a/src/useAudioContext.tsx +++ b/src/useAudioContext.tsx @@ -47,6 +47,7 @@ interface Props { */ sounds: PrefetchedSounds | null; latencyHint: AudioContextLatencyCategory; + muted?: boolean; } interface UseAudioContext { @@ -112,7 +113,7 @@ export function useAudioContext( }, [audioContext, devices]); // Don't return a function until we're ready. - if (!audioContext || !audioBuffers) { + if (!audioContext || !audioBuffers || props.muted) { return null; } return { From e6710f72e395dbf7f15b37468f6482449313723b Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Tue, 13 May 2025 22:05:55 +0200 Subject: [PATCH 157/225] Fix to-device encryption info label (#3208) * Fix to-device encryption info label The label was shown also without checking that we use PerParticipantE2EE. Which is a prerequisite for toDevice transport. As a result the label was shown when not desired. * rename: useLiveKit -> useLivekit * make the settings naming consistent --- src/livekit/{useLiveKit.ts => useLivekit.ts} | 2 +- src/room/InCallView.test.tsx | 249 ++++++++++++++++++ src/room/InCallView.tsx | 38 ++- src/room/ReactionAudioRenderer.test.tsx | 14 +- .../__snapshots__/InCallView.test.tsx.snap | 181 +++++++++++++ src/settings/SettingsModal.tsx | 2 +- src/settings/settings.ts | 2 +- src/useAudioContext.test.tsx | 2 +- src/useAudioContext.tsx | 4 +- src/utils/test.ts | 8 +- 10 files changed, 474 insertions(+), 28 deletions(-) rename src/livekit/{useLiveKit.ts => useLivekit.ts} (99%) create mode 100644 src/room/InCallView.test.tsx create mode 100644 src/room/__snapshots__/InCallView.test.tsx.snap diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLivekit.ts similarity index 99% rename from src/livekit/useLiveKit.ts rename to src/livekit/useLivekit.ts index 99eda021..10de9577 100644 --- a/src/livekit/useLiveKit.ts +++ b/src/livekit/useLivekit.ts @@ -48,7 +48,7 @@ interface UseLivekitResult { connState: ECConnectionState; } -export function useLiveKit( +export function useLivekit( rtcSession: MatrixRTCSession, muteStates: MuteStates, sfuConfig: SFUConfig | undefined, diff --git a/src/room/InCallView.test.tsx b/src/room/InCallView.test.tsx new file mode 100644 index 00000000..66e070d6 --- /dev/null +++ b/src/room/InCallView.test.tsx @@ -0,0 +1,249 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE in the repository root for full details. +*/ + +import { + beforeEach, + describe, + expect, + it, + type MockedFunction, + vi, +} from "vitest"; +import { act, render, type RenderResult } from "@testing-library/react"; +import { type MatrixClient, JoinRule, type RoomState } from "matrix-js-sdk"; +import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; +import { type RelationsContainer } from "matrix-js-sdk/lib/models/relations-container"; +import { ConnectionState, type LocalParticipant } from "livekit-client"; +import { of } from "rxjs"; +import { BrowserRouter } from "react-router-dom"; +import { TooltipProvider } from "@vector-im/compound-web"; +import { + RoomAudioRenderer, + RoomContext, + useLocalParticipant, +} from "@livekit/components-react"; +import { RoomAndToDeviceEvents } from "matrix-js-sdk/lib/matrixrtc/RoomAndToDeviceKeyTransport"; + +import { type MuteStates } from "./MuteStates"; +import { InCallView } from "./InCallView"; +import { + mockLivekitRoom, + mockLocalParticipant, + mockMatrixRoom, + mockMatrixRoomMember, + mockRemoteParticipant, + mockRtcMembership, + type MockRTCSession, +} from "../utils/test"; +import { E2eeType } from "../e2ee/e2eeType"; +import { getBasicCallViewModelEnvironment } from "../utils/test-viewmodel"; +import { alice, local } from "../utils/test-fixtures"; +import { useExperimentalToDeviceTransport as useExperimentalToDeviceTransportSetting } from "../settings/settings"; +import { ReactionsSenderProvider } from "../reactions/useReactionsSender"; +import { useRoomEncryptionSystem } from "../e2ee/sharedKeyManagement"; + +// vi.hoisted(() => { +// localStorage = {} as unknown as Storage; +// }); +vi.hoisted( + () => + (global.ImageData = class MockImageData { + public data: number[] = []; + } as unknown as typeof ImageData), +); + +vi.mock("../soundUtils"); +vi.mock("../useAudioContext"); +vi.mock("../tile/GridTile"); +vi.mock("../tile/SpotlightTile"); +vi.mock("@livekit/components-react"); +vi.mock("../e2ee/sharedKeyManagement"); +vi.mock("react-use-measure", () => ({ + default: (): [() => void, object] => [(): void => {}, {}], +})); + +const localRtcMember = mockRtcMembership("@carol:example.org", "CCCC"); +const localParticipant = mockLocalParticipant({ + identity: "@local:example.org:AAAAAA", +}); +const remoteParticipant = mockRemoteParticipant({ + identity: "@alice:example.org:AAAAAA", +}); +const carol = mockMatrixRoomMember(localRtcMember); +const roomMembers = new Map([carol].map((p) => [p.userId, p])); + +const roomId = "!foo:bar"; +let useRoomEncryptionSystemMock: MockedFunction; +beforeEach(() => { + vi.clearAllMocks(); + // RoomAudioRenderer is tested separately. + ( + RoomAudioRenderer as MockedFunction + ).mockImplementation((_props) => { + return

; + }); + ( + useLocalParticipant as MockedFunction + ).mockImplementation( + () => + ({ + isScreenShareEnabled: false, + localParticipant: localRtcMember as unknown as LocalParticipant, + }) as unknown as ReturnType, + ); + + useRoomEncryptionSystemMock = + useRoomEncryptionSystem as typeof useRoomEncryptionSystemMock; + useRoomEncryptionSystemMock.mockReturnValue({ kind: E2eeType.NONE }); +}); + +function createInCallView(): RenderResult & { + rtcSession: MockRTCSession; +} { + const client = { + getUser: () => null, + getUserId: () => localRtcMember.sender, + getDeviceId: () => localRtcMember.deviceId, + getRoom: (rId) => (rId === roomId ? room : null), + } as Partial as MatrixClient; + const room = mockMatrixRoom({ + relations: { + getChildEventsForEvent: () => + vi.mocked({ + getRelations: () => [], + }), + } as unknown as RelationsContainer, + client, + roomId, + getMember: (userId) => roomMembers.get(userId) ?? null, + getMxcAvatarUrl: () => null, + hasEncryptionStateEvent: vi.fn().mockReturnValue(true), + getCanonicalAlias: () => null, + currentState: { + getJoinRule: () => JoinRule.Invite, + } as Partial as RoomState, + }); + + const muteState = { + audio: { enabled: false }, + video: { enabled: false }, + } as MuteStates; + const livekitRoom = mockLivekitRoom( + { + localParticipant, + }, + { + remoteParticipants$: of([remoteParticipant]), + }, + ); + const { vm, rtcSession } = getBasicCallViewModelEnvironment([local, alice]); + + rtcSession.joined = true; + const renderResult = render( + + + + + + + + + , + ); + return { + ...renderResult, + rtcSession, + }; +} + +describe("InCallView", () => { + describe("rendering", () => { + it("renders", () => { + const { container } = createInCallView(); + expect(container).toMatchSnapshot(); + }); + }); + describe("toDevice label", () => { + it("is shown if setting activated and room encrypted", () => { + useRoomEncryptionSystemMock.mockReturnValue({ + kind: E2eeType.PER_PARTICIPANT, + }); + useExperimentalToDeviceTransportSetting.setValue(true); + const { getByText } = createInCallView(); + expect(getByText("using to Device key transport")).toBeInTheDocument(); + }); + + it("is not shown in unenecrypted room", () => { + useRoomEncryptionSystemMock.mockReturnValue({ + kind: E2eeType.NONE, + }); + useExperimentalToDeviceTransportSetting.setValue(true); + const { queryByText } = createInCallView(); + expect( + queryByText("using to Device key transport"), + ).not.toBeInTheDocument(); + }); + + it("is hidden once fallback was triggered", async () => { + useRoomEncryptionSystemMock.mockReturnValue({ + kind: E2eeType.PER_PARTICIPANT, + }); + useExperimentalToDeviceTransportSetting.setValue(true); + const { rtcSession, queryByText } = createInCallView(); + expect(queryByText("using to Device key transport")).toBeInTheDocument(); + expect(rtcSession).toBeDefined(); + await act(() => + rtcSession.emit(RoomAndToDeviceEvents.EnabledTransportsChanged, { + toDevice: true, + room: true, + }), + ); + expect( + queryByText("using to Device key transport"), + ).not.toBeInTheDocument(); + }); + it("is not shown if setting is disabled", () => { + useExperimentalToDeviceTransportSetting.setValue(false); + + useRoomEncryptionSystemMock.mockReturnValue({ + kind: E2eeType.PER_PARTICIPANT, + }); + const { queryByText } = createInCallView(); + expect( + queryByText("using to Device key transport"), + ).not.toBeInTheDocument(); + }); + }); +}); diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 33f42f1b..7cc3eab2 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -56,7 +56,7 @@ import { type OTelGroupCallMembership } from "../otel/OTelGroupCallMembership"; import { SettingsModal, defaultSettingsTab } from "../settings/SettingsModal"; import { useRageshakeRequestModal } from "../settings/submit-rageshake"; import { RageshakeRequestModal } from "./RageshakeRequestModal"; -import { useLiveKit } from "../livekit/useLiveKit"; +import { useLivekit } from "../livekit/useLivekit.ts"; import { useWakeLock } from "../useWakeLock"; import { useMergedRefs } from "../useMergedRefs"; import { type MuteStates } from "./MuteStates"; @@ -73,7 +73,10 @@ import { import { Grid, type TileProps } from "../grid/Grid"; import { useInitial } from "../useInitial"; import { SpotlightTile } from "../tile/SpotlightTile"; -import { type EncryptionSystem } from "../e2ee/sharedKeyManagement"; +import { + useRoomEncryptionSystem, + type EncryptionSystem, +} from "../e2ee/sharedKeyManagement"; import { E2eeType } from "../e2ee/e2eeType"; import { makeGridLayout } from "../grid/GridLayout"; import { @@ -115,7 +118,7 @@ export interface ActiveCallProps export const ActiveCall: FC = (props) => { const sfuConfig = useOpenIDSFU(props.client, props.rtcSession); - const { livekitRoom, connState } = useLiveKit( + const { livekitRoom, connState } = useLivekit( props.rtcSession, props.muteStates, sfuConfig, @@ -223,19 +226,28 @@ export const InCallView: FC = ({ const [muteAllAudio] = useSetting(muteAllAudioSetting); - const [toDeviceEncryptionSetting] = useSetting( - useExperimentalToDeviceTransportSetting, - ); - const [showToDeviceEncryption, setShowToDeviceEncryption] = useState( - () => toDeviceEncryptionSetting, - ); - useEffect(() => { - setShowToDeviceEncryption(toDeviceEncryptionSetting); - }, [toDeviceEncryptionSetting]); + // This seems like it might be enough logic to use move it into the call view model? + const [didFallbackToRoomKey, setDidFallbackToRoomKey] = useState(false); useTypedEventEmitter( rtcSession, RoomAndToDeviceEvents.EnabledTransportsChanged, - (enabled) => setShowToDeviceEncryption(enabled.to_device), + (enabled) => setDidFallbackToRoomKey(enabled.room), + ); + const [useExperimentalToDeviceTransport] = useSetting( + useExperimentalToDeviceTransportSetting, + ); + const encryptionSystem = useRoomEncryptionSystem(rtcSession.room.roomId); + + const showToDeviceEncryption = useMemo( + () => + useExperimentalToDeviceTransport && + encryptionSystem.kind === E2eeType.PER_PARTICIPANT && + !didFallbackToRoomKey, + [ + encryptionSystem.kind, + didFallbackToRoomKey, + useExperimentalToDeviceTransport, + ], ); const toggleMicrophone = useCallback( diff --git a/src/room/ReactionAudioRenderer.test.tsx b/src/room/ReactionAudioRenderer.test.tsx index fa7df166..c61cbd82 100644 --- a/src/room/ReactionAudioRenderer.test.tsx +++ b/src/room/ReactionAudioRenderer.test.tsx @@ -21,8 +21,8 @@ import { act, type ReactNode } from "react"; import { ReactionsAudioRenderer } from "./ReactionAudioRenderer"; import { - playReactionsSound, - soundEffectVolumeSetting, + playReactionsSound as playReactionsSoundSetting, + soundEffectVolume as soundEffectVolumeSetting, } from "../settings/settings"; import { useAudioContext } from "../useAudioContext"; import { GenericReaction, ReactionSet } from "../reactions"; @@ -50,7 +50,7 @@ vitest.mock("../soundUtils"); afterEach(() => { vitest.resetAllMocks(); - playReactionsSound.setValue(playReactionsSound.defaultValue); + playReactionsSoundSetting.setValue(playReactionsSoundSetting.defaultValue); soundEffectVolumeSetting.setValue(soundEffectVolumeSetting.defaultValue); }); @@ -74,7 +74,7 @@ beforeEach(() => { test("preloads all audio elements", () => { const { vm } = getBasicCallViewModelEnvironment([local, alice]); - playReactionsSound.setValue(true); + playReactionsSoundSetting.setValue(true); render(); expect(prefetchSounds).toHaveBeenCalledOnce(); }); @@ -84,7 +84,7 @@ test("will play an audio sound when there is a reaction", () => { local, alice, ]); - playReactionsSound.setValue(true); + playReactionsSoundSetting.setValue(true); render(); // Find the first reaction with a sound effect @@ -110,7 +110,7 @@ test("will play the generic audio sound when there is soundless reaction", () => local, alice, ]); - playReactionsSound.setValue(true); + playReactionsSoundSetting.setValue(true); render(); // Find the first reaction with a sound effect @@ -136,7 +136,7 @@ test("will play multiple audio sounds when there are multiple different reaction local, alice, ]); - playReactionsSound.setValue(true); + playReactionsSoundSetting.setValue(true); render(); // Find the first reaction with a sound effect diff --git a/src/room/__snapshots__/InCallView.test.tsx.snap b/src/room/__snapshots__/InCallView.test.tsx.snap new file mode 100644 index 00000000..427973b6 --- /dev/null +++ b/src/room/__snapshots__/InCallView.test.tsx.snap @@ -0,0 +1,181 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`InCallView > rendering > renders 1`] = ` +
+
+
+
+ mocked: RoomAudioRenderer +
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+`; diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index b24674dc..b0a4b79e 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -23,7 +23,7 @@ import { import { widget } from "../widget"; import { useSetting, - soundEffectVolumeSetting, + soundEffectVolume as soundEffectVolumeSetting, backgroundBlur as backgroundBlurSetting, developerMode, } from "./settings"; diff --git a/src/settings/settings.ts b/src/settings/settings.ts index 8820aea2..f63148ef 100644 --- a/src/settings/settings.ts +++ b/src/settings/settings.ts @@ -110,7 +110,7 @@ export const playReactionsSound = new Setting( true, ); -export const soundEffectVolumeSetting = new Setting( +export const soundEffectVolume = new Setting( "sound-effect-volume", 0.5, ); diff --git a/src/useAudioContext.test.tsx b/src/useAudioContext.test.tsx index 29949bf8..92d3a947 100644 --- a/src/useAudioContext.test.tsx +++ b/src/useAudioContext.test.tsx @@ -12,7 +12,7 @@ import userEvent from "@testing-library/user-event"; import { deviceStub, MediaDevicesContext } from "./livekit/MediaDevicesContext"; import { useAudioContext } from "./useAudioContext"; -import { soundEffectVolumeSetting } from "./settings/settings"; +import { soundEffectVolume as soundEffectVolumeSetting } from "./settings/settings"; const staticSounds = Promise.resolve({ aSound: new ArrayBuffer(0), diff --git a/src/useAudioContext.tsx b/src/useAudioContext.tsx index d6bc314b..da94f387 100644 --- a/src/useAudioContext.tsx +++ b/src/useAudioContext.tsx @@ -9,7 +9,7 @@ import { logger } from "matrix-js-sdk/lib/logger"; import { useState, useEffect } from "react"; import { - soundEffectVolumeSetting as effectSoundVolumeSetting, + soundEffectVolume as soundEffectVolumeSetting, useSetting, } from "./settings/settings"; import { useMediaDevices } from "./livekit/MediaDevicesContext"; @@ -63,7 +63,7 @@ interface UseAudioContext { export function useAudioContext( props: Props, ): UseAudioContext | null { - const [effectSoundVolume] = useSetting(effectSoundVolumeSetting); + const [effectSoundVolume] = useSetting(soundEffectVolumeSetting); const devices = useMediaDevices(); const [audioContext, setAudioContext] = useState(); const [audioBuffers, setAudioBuffers] = useState>(); diff --git a/src/utils/test.ts b/src/utils/test.ts index 039b6983..6e1b5457 100644 --- a/src/utils/test.ts +++ b/src/utils/test.ts @@ -29,6 +29,10 @@ import { type Room as LivekitRoom, } from "livekit-client"; import { randomUUID } from "crypto"; +import { + type RoomAndToDeviceEvents, + type RoomAndToDeviceEventsHandlerMap, +} from "matrix-js-sdk/lib/matrixrtc/RoomAndToDeviceKeyTransport"; import { LocalUserMediaViewModel, @@ -269,8 +273,8 @@ export function mockConfig(config: Partial = {}): void { } export class MockRTCSession extends TypedEventEmitter< - MatrixRTCSessionEvent, - MatrixRTCSessionEventHandlerMap + MatrixRTCSessionEvent | RoomAndToDeviceEvents, + MatrixRTCSessionEventHandlerMap & RoomAndToDeviceEventsHandlerMap > { public readonly statistics = { counters: {}, From 1ff2fb3fffad81f8c72cf8cb4fa0f4c09064b71d Mon Sep 17 00:00:00 2001 From: Valere Fedronic Date: Tue, 13 May 2025 22:22:56 +0200 Subject: [PATCH 158/225] only show to-device transport label in dev mode (#3221) * Only show to device encryption label if developer mode on * Add tests for developer mode to device label --------- Co-authored-by: Timo --- src/room/InCallView.test.tsx | 21 +++++++++++++++++++-- src/room/InCallView.tsx | 7 ++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/room/InCallView.test.tsx b/src/room/InCallView.test.tsx index 66e070d6..4d02160c 100644 --- a/src/room/InCallView.test.tsx +++ b/src/room/InCallView.test.tsx @@ -42,7 +42,10 @@ import { import { E2eeType } from "../e2ee/e2eeType"; import { getBasicCallViewModelEnvironment } from "../utils/test-viewmodel"; import { alice, local } from "../utils/test-fixtures"; -import { useExperimentalToDeviceTransport as useExperimentalToDeviceTransportSetting } from "../settings/settings"; +import { + developerMode as developerModeSetting, + useExperimentalToDeviceTransport as useExperimentalToDeviceTransportSetting, +} from "../settings/settings"; import { ReactionsSenderProvider } from "../reactions/useReactionsSender"; import { useRoomEncryptionSystem } from "../e2ee/sharedKeyManagement"; @@ -201,6 +204,7 @@ describe("InCallView", () => { kind: E2eeType.PER_PARTICIPANT, }); useExperimentalToDeviceTransportSetting.setValue(true); + developerModeSetting.setValue(true); const { getByText } = createInCallView(); expect(getByText("using to Device key transport")).toBeInTheDocument(); }); @@ -210,6 +214,7 @@ describe("InCallView", () => { kind: E2eeType.NONE, }); useExperimentalToDeviceTransportSetting.setValue(true); + developerModeSetting.setValue(true); const { queryByText } = createInCallView(); expect( queryByText("using to Device key transport"), @@ -221,6 +226,7 @@ describe("InCallView", () => { kind: E2eeType.PER_PARTICIPANT, }); useExperimentalToDeviceTransportSetting.setValue(true); + developerModeSetting.setValue(true); const { rtcSession, queryByText } = createInCallView(); expect(queryByText("using to Device key transport")).toBeInTheDocument(); expect(rtcSession).toBeDefined(); @@ -236,7 +242,18 @@ describe("InCallView", () => { }); it("is not shown if setting is disabled", () => { useExperimentalToDeviceTransportSetting.setValue(false); - + developerModeSetting.setValue(true); + useRoomEncryptionSystemMock.mockReturnValue({ + kind: E2eeType.PER_PARTICIPANT, + }); + const { queryByText } = createInCallView(); + expect( + queryByText("using to Device key transport"), + ).not.toBeInTheDocument(); + }); + it("is not shown if developer mode is disabled", () => { + useExperimentalToDeviceTransportSetting.setValue(true); + developerModeSetting.setValue(false); useRoomEncryptionSystemMock.mockReturnValue({ kind: E2eeType.PER_PARTICIPANT, }); diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 7cc3eab2..768ddfdd 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -101,6 +101,7 @@ import { debugTileLayout as debugTileLayoutSetting, useExperimentalToDeviceTransport as useExperimentalToDeviceTransportSetting, muteAllAudio as muteAllAudioSetting, + developerMode as developerModeSetting, useSetting, } from "../settings/settings"; import { ReactionsReader } from "../reactions/ReactionsReader"; @@ -233,6 +234,8 @@ export const InCallView: FC = ({ RoomAndToDeviceEvents.EnabledTransportsChanged, (enabled) => setDidFallbackToRoomKey(enabled.room), ); + + const [developerMode] = useSetting(developerModeSetting); const [useExperimentalToDeviceTransport] = useSetting( useExperimentalToDeviceTransportSetting, ); @@ -240,13 +243,15 @@ export const InCallView: FC = ({ const showToDeviceEncryption = useMemo( () => + developerMode && useExperimentalToDeviceTransport && encryptionSystem.kind === E2eeType.PER_PARTICIPANT && !didFallbackToRoomKey, [ + developerMode, + useExperimentalToDeviceTransport, encryptionSystem.kind, didFallbackToRoomKey, - useExperimentalToDeviceTransport, ], ); From 56328108ca9534e34b7c12b5b8e38282c5d5f563 Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 14 May 2025 10:41:03 +0200 Subject: [PATCH 159/225] Add custom audio renderer to only render joined participants & add ios earpice workaround fix left right to match chromium + safari (firefox is swapped) earpice as setting Simpler code and documentation The doc explains, what this class actually does and why it is so complicated. Signed-off-by: Timo K use only one audioContext, remove (non working) standby fallback --- locales/en/app.json | 2 + src/livekit/MatrixAudioRenderer.tsx | 201 ++++++++++++++++++++++++++ src/livekit/MediaDevicesContext.tsx | 74 +++++++++- src/room/InCallView.tsx | 12 +- src/settings/DeveloperSettingsTab.tsx | 18 +++ src/settings/DeviceSelection.tsx | 30 +++- src/settings/SettingsModal.tsx | 8 +- src/settings/settings.ts | 8 + src/useAudioContext.tsx | 28 +++- 9 files changed, 351 insertions(+), 30 deletions(-) create mode 100644 src/livekit/MatrixAudioRenderer.tsx diff --git a/locales/en/app.json b/locales/en/app.json index 963a3f55..0b4c0599 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -61,6 +61,7 @@ "video": "Video" }, "developer_mode": { + "always_show_iphone_earpiece": "Show iPhone earpiece option on all platforms", "crypto_version": "Crypto version: {{version}}", "debug_tile_layout_label": "Debug tile layout", "device_id": "Device ID: {{id}}", @@ -174,6 +175,7 @@ "camera_numbered": "Camera {{n}}", "default": "Default", "default_named": "Default <2>({{name}})", + "earpiece": "Earpiece", "microphone": "Microphone", "microphone_numbered": "Microphone {{n}}", "speaker": "Speaker", diff --git a/src/livekit/MatrixAudioRenderer.tsx b/src/livekit/MatrixAudioRenderer.tsx new file mode 100644 index 00000000..4b8218f3 --- /dev/null +++ b/src/livekit/MatrixAudioRenderer.tsx @@ -0,0 +1,201 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE in the repository root for full details. +*/ + +import { getTrackReferenceId } from "@livekit/components-core"; +import { type RemoteAudioTrack, Track } from "livekit-client"; +import { useEffect, useMemo, useRef, type ReactNode } from "react"; +import { + useTracks, + AudioTrack, + type AudioTrackProps, +} from "@livekit/components-react"; +import { type CallMembership } from "matrix-js-sdk/lib/matrixrtc"; +import { logger } from "matrix-js-sdk/lib/logger"; + +import { useEarpieceAudioConfig } from "./MediaDevicesContext"; +import { useReactiveState } from "../useReactiveState"; + +export interface MatrixAudioRendererProps { + /** + * The list of participants to render audio for. + * This list needs to be composed based on the matrixRTC members so that we do not play audio from users + * that are not expected to be in the rtc session. + */ + members: CallMembership[]; + /** + * If set to `true`, mutes all audio tracks rendered by the component. + * @remarks + * If set to `true`, the server will stop sending audio track data to the client. + */ + muted?: boolean; +} + +/** + * The `MatrixAudioRenderer` component is a drop-in solution for adding audio to your LiveKit app. + * It takes care of handling remote participants’ audio tracks and makes sure that microphones and screen share are audible. + * + * It also takes care of the earpiece audio configuration for iOS devices. + * This is done by using the WebAudio API to create a stereo pan effect that mimics the earpiece audio. + * @example + * ```tsx + * + * + * + * ``` + * @public + */ +export function MatrixAudioRenderer({ + members, + muted, +}: MatrixAudioRendererProps): ReactNode { + const validIdentities = useMemo( + () => + new Set(members?.map((member) => `${member.sender}:${member.deviceId}`)), + [members], + ); + + const loggedInvalidIdentities = useRef(new Set()); + /** + * Log an invalid livekit track identity. + * A invalid identity is one that does not match any of the matrix rtc members. + * + * @param identity The identity of the track that is invalid + * @param validIdentities The list of valid identities + */ + const logInvalid = (identity: string, validIdentities: Set): void => { + if (loggedInvalidIdentities.current.has(identity)) return; + logger.warn( + `Audio track ${identity} has no matching matrix call member`, + `current members: ${Array.from(validIdentities.values())}`, + `track will not get rendered`, + ); + loggedInvalidIdentities.current.add(identity); + }; + + const tracks = useTracks( + [ + Track.Source.Microphone, + Track.Source.ScreenShareAudio, + Track.Source.Unknown, + ], + { + updateOnlyOn: [], + onlySubscribed: true, + }, + ).filter((ref) => { + const isValid = validIdentities?.has(ref.participant.identity); + if (!isValid) logInvalid(ref.participant.identity, validIdentities); + return ( + !ref.participant.isLocal && + ref.publication.kind === Track.Kind.Audio && + isValid + ); + }); + + // This component is also (in addition to the "only play audio for connected members" logic above) + // to mimic earpice audio on iphones. + // The safari audio devices enumeration does not expose an earpice audio device. + // We alternatively use the audioContext pan node to only use one of the stereo channels. + + // This component does get additionally complicated because of a safari bug. + // (see: https://bugs.webkit.org/show_bug.cgi?id=251532 + // and the related issues: https://bugs.webkit.org/show_bug.cgi?id=237878 + // and https://bugs.webkit.org/show_bug.cgi?id=231105) + // + // AudioContext gets stopped if the webview gets moved into the background. + // Once the phone is in standby audio playback will stop. + // So we can only use the pan trick only works is the phone is not in standby. + // If earpice mode is not used we do not use audioContext to allow standby playback. + // shouldUseAudioContext is set to false if stereoPan === 0 to allow standby bluetooth playback. + + const { pan: stereoPan, volume: volumeFactor } = useEarpieceAudioConfig(); + const shouldUseAudioContext = stereoPan !== 0; + + // initialize the potentially used audio context. + const audioContext = useMemo(() => new AudioContext(), []); + const audioNodes = useMemo( + () => ({ + gain: audioContext.createGain(), + pan: audioContext.createStereoPanner(), + }), + [audioContext], + ); + + // Simple effects to update the gain and pan node based on the props + useEffect(() => { + audioNodes.pan.pan.value = stereoPan; + }, [audioNodes.pan.pan, stereoPan]); + useEffect(() => { + // *4 to balance the transition from audio context to normal audio playback. + // probably needed due to gain behaving differently than el.volume + audioNodes.gain.gain.value = volumeFactor; + }, [audioNodes.gain.gain, volumeFactor]); + + return ( + // We add all audio elements into one
for the browser developer tool experience/tidyness. +
+ {tracks.map((trackRef) => ( + + ))} +
+ ); +} + +interface StereoPanAudioTrackProps { + muted?: boolean; + audioContext?: AudioContext; + audioNodes: { + gain: GainNode; + pan: StereoPannerNode; + }; +} + +/** + * This wraps `livekit.AudioTrack` to allow adding audio nodes to a track. + * It main purpose is to remount the AudioTrack component when switching from + * audiooContext to normal audio playback. + * As of now the AudioTrack component does not support adding audio nodes while being mounted. + * @param param0 + * @returns + */ +function AudioTrackWithAudioNodes({ + trackRef, + muted, + audioContext, + audioNodes, + ...props +}: StereoPanAudioTrackProps & + AudioTrackProps & + React.RefAttributes): ReactNode { + // This is used to unmount/remount the AudioTrack component. + // Mounting needs to happen after the audioContext is set. + // (adding the audio context when already mounted did not work outside strict mode) + const [trackReady, setTrackReady] = useReactiveState( + () => false, + [audioContext || audioNodes], + ); + + useEffect(() => { + if (!trackRef || trackReady) return; + const track = trackRef.publication.track as RemoteAudioTrack; + track.setAudioContext(audioContext); + track.setWebAudioPlugins( + audioContext ? [audioNodes.gain, audioNodes.pan] : [], + ); + setTrackReady(true); + }, [audioContext, audioNodes, setTrackReady, trackReady, trackRef]); + + return ( + trackReady && + ); +} diff --git a/src/livekit/MediaDevicesContext.tsx b/src/livekit/MediaDevicesContext.tsx index c2fc63e5..3e30c04d 100644 --- a/src/livekit/MediaDevicesContext.tsx +++ b/src/livekit/MediaDevicesContext.tsx @@ -27,11 +27,15 @@ import { audioOutput as audioOutputSetting, videoInput as videoInputSetting, type Setting, + alwaysShowIphoneEarpieceSetting, } from "../settings/settings"; +export const EARPIECE_CONFIG_ID = "earpiece-id"; + export type DeviceLabel = | { type: "name"; name: string } | { type: "number"; number: number } + | { type: "earpiece" } | { type: "default"; name: string | null }; export interface MediaDevice { @@ -40,6 +44,11 @@ export interface MediaDevice { */ available: Map; selectedId: string | undefined; + /** + * An additional device configuration that makes us use only one channel of the + * output device and a reduced volume. + */ + useAsEarpiece: boolean | undefined; /** * The group ID of the selected device. */ @@ -65,6 +74,7 @@ function useMediaDevice( ): MediaDevice { // Make sure we don't needlessly reset to a device observer without names, // once permissions are already given + const [alwaysShowIphoneEarpice] = useSetting(alwaysShowIphoneEarpieceSetting); const hasRequestedPermissions = useRef(false); const requestPermissions = usingNames || hasRequestedPermissions.current; hasRequestedPermissions.current ||= usingNames; @@ -102,27 +112,39 @@ function useMediaDevice( // Create a virtual default audio output for browsers that don't have one. // Its device ID must be the empty string because that's what setSinkId // recognizes. + // We also create this if we do not have any available devices, so that + // we can use the default or the earpiece. + const showEarpiece = + navigator.userAgent.match("iPhone") || alwaysShowIphoneEarpice; if ( kind === "audiooutput" && - available.size && !available.has("") && - !available.has("default") + !available.has("default") && + (available.size || showEarpiece) ) available = new Map([ ["", { type: "default", name: availableRaw[0]?.label || null }], ...available, ]); + if (kind === "audiooutput" && showEarpiece) + // On IPhones we have to create a virtual earpiece device, because + // the earpiece is not available as a device ID. + available = new Map([ + ...available, + [EARPIECE_CONFIG_ID, { type: "earpiece" }], + ]); // Note: creating virtual default input devices would be another problem // entirely, because requesting a media stream from deviceId "" won't // automatically track the default device. return available; }), ), - [kind, deviceObserver$], + [alwaysShowIphoneEarpice, deviceObserver$, kind], ), ); - const [preferredId, select] = useSetting(setting); + const [preferredId, setPreferredId] = useSetting(setting); + const [asEarpice, setAsEarpiece] = useState(false); const selectedId = useMemo(() => { if (available.size) { // If the preferred device is available, use it. Or if every available @@ -138,6 +160,7 @@ function useMediaDevice( } return undefined; }, [available, preferredId]); + const selectedGroupId = useObservableEagerState( useMemo( () => @@ -151,14 +174,27 @@ function useMediaDevice( ), ); + const select = useCallback( + (id: string) => { + if (id === EARPIECE_CONFIG_ID) { + setAsEarpiece(true); + } else { + setAsEarpiece(false); + setPreferredId(id); + } + }, + [setPreferredId], + ); + return useMemo( () => ({ available, selectedId, + useAsEarpiece: asEarpice, selectedGroupId, select, }), - [available, selectedId, selectedGroupId, select], + [available, selectedId, asEarpice, selectedGroupId, select], ); } @@ -167,6 +203,7 @@ export const deviceStub: MediaDevice = { selectedId: undefined, selectedGroupId: undefined, select: () => {}, + useAsEarpiece: false, }; export const devicesStub: MediaDevices = { audioInput: deviceStub, @@ -255,3 +292,30 @@ export const useMediaDeviceNames = ( return context.stopUsingDeviceNames; } }, [context, enabled]); + +/** + * A convenience hook to get the audio node configuration for the earpiece. + * It will check the `useAsEarpiece` of the `audioOutput` device and return + * the appropriate pan and volume values. + * + * @returns pan and volume values for the earpiece audio node configuration. + */ +export const useEarpieceAudioConfig = (): { + pan: number; + volume: number; +} => { + const { audioOutput } = useMediaDevices(); + // We use only the right speaker (pan = 1) for the earpiece. + // This mimics the behavior of the native earpiece speaker (only the top speaker on an iPhone) + const pan = useMemo( + () => (audioOutput.useAsEarpiece ? 1 : 0), + [audioOutput.useAsEarpiece], + ); + // We also do lower the volume by a factor of 10 to optimize for the usecase where + // a user is holding the phone to their ear. + const volume = useMemo( + () => (audioOutput.useAsEarpiece ? 0.1 : 1), + [audioOutput.useAsEarpiece], + ); + return { pan, volume }; +}; diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 768ddfdd..9fa15547 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -5,11 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { - RoomAudioRenderer, - RoomContext, - useLocalParticipant, -} from "@livekit/components-react"; +import { RoomContext, useLocalParticipant } from "@livekit/components-react"; import { Text } from "@vector-im/compound-web"; import { ConnectionState, type Room } from "livekit-client"; import { type MatrixClient } from "matrix-js-sdk"; @@ -107,6 +103,7 @@ import { import { ReactionsReader } from "../reactions/ReactionsReader"; import { ConnectionLostError } from "../utils/errors.ts"; import { useTypedEventEmitter } from "../useEvents.ts"; +import { MatrixAudioRenderer } from "../livekit/MatrixAudioRenderer.tsx"; const canScreenshare = "getDisplayMedia" in (navigator.mediaDevices ?? {}); @@ -713,7 +710,10 @@ export const InCallView: FC = ({ ) } - + {renderContent()} diff --git a/src/settings/DeveloperSettingsTab.tsx b/src/settings/DeveloperSettingsTab.tsx index fdeaa704..36df5c39 100644 --- a/src/settings/DeveloperSettingsTab.tsx +++ b/src/settings/DeveloperSettingsTab.tsx @@ -18,6 +18,7 @@ import { useNewMembershipManager as useNewMembershipManagerSetting, useExperimentalToDeviceTransport as useExperimentalToDeviceTransportSetting, muteAllAudio as muteAllAudioSetting, + alwaysShowIphoneEarpiece as alwaysShowIphoneEarpieceSetting, } from "./settings"; import type { MatrixClient } from "matrix-js-sdk"; import type { Room as LivekitRoom } from "livekit-client"; @@ -46,6 +47,9 @@ export const DeveloperSettingsTab: FC = ({ client, livekitRoom }) => { useNewMembershipManagerSetting, ); + const [alwaysShowIphoneEarpiece, setAlwaysShowIphoneEarpiece] = useSetting( + alwaysShowIphoneEarpieceSetting, + ); const [ useExperimentalToDeviceTransport, setUseExperimentalToDeviceTransport, @@ -192,6 +196,20 @@ export const DeveloperSettingsTab: FC = ({ client, livekitRoom }) => { [setMuteAllAudio], )} /> + {" "} + + ): void => { + setAlwaysShowIphoneEarpiece(event.target.checked); + }, + [setAlwaysShowIphoneEarpiece], + )} + />{" "} {livekitRoom ? ( <> diff --git a/src/settings/DeviceSelection.tsx b/src/settings/DeviceSelection.tsx index 0bdabbe7..12e89f56 100644 --- a/src/settings/DeviceSelection.tsx +++ b/src/settings/DeviceSelection.tsx @@ -22,17 +22,20 @@ import { } from "@vector-im/compound-web"; import { Trans, useTranslation } from "react-i18next"; -import { type MediaDevice } from "../livekit/MediaDevicesContext"; +import { + EARPIECE_CONFIG_ID, + type MediaDevice, +} from "../livekit/MediaDevicesContext"; import styles from "./DeviceSelection.module.css"; interface Props { - devices: MediaDevice; + device: MediaDevice; title: string; numberedLabel: (number: number) => string; } export const DeviceSelection: FC = ({ - devices, + device, title, numberedLabel, }) => { @@ -40,12 +43,13 @@ export const DeviceSelection: FC = ({ const groupId = useId(); const onChange = useCallback( (e: ChangeEvent) => { - devices.select(e.target.value); + device.select(e.target.value); }, - [devices], + [device], ); - if (devices.available.size == 0) return null; + // There is no need to show the menu if there is no choice that can be made. + if (device.available.size == 1) return null; return (
@@ -60,7 +64,7 @@ export const DeviceSelection: FC = ({
- {[...devices.available].map(([id, label]) => { + {[...device.available].map(([id, label]) => { let labelText: ReactNode; switch (label.type) { case "name": @@ -85,6 +89,16 @@ export const DeviceSelection: FC = ({ ); break; + case "earpiece": + labelText = t("settings.devices.earpiece"); + break; + } + + let isSelected = false; + if (device.useAsEarpiece) { + isSelected = id === EARPIECE_CONFIG_ID; + } else { + isSelected = id === device.selectedId; } return ( @@ -93,7 +107,7 @@ export const DeviceSelection: FC = ({ name={groupId} control={ diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index b0a4b79e..1c97a87d 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -98,7 +98,6 @@ export const SettingsModal: FC = ({ useMediaDeviceNames(devices, open); const [soundVolume, setSoundVolume] = useSetting(soundEffectVolumeSetting); const [soundVolumeRaw, setSoundVolumeRaw] = useState(soundVolume); - const [showDeveloperSettingsTab] = useSetting(developerMode); const { available: isRageshakeAvailable } = useSubmitRageshake(); @@ -110,17 +109,18 @@ export const SettingsModal: FC = ({ <>
t("settings.devices.microphone_numbered", { n }) } /> t("settings.devices.speaker_numbered", { n })} /> +

{t("settings.audio_tab.effect_volume_description")}

@@ -146,7 +146,7 @@ export const SettingsModal: FC = ({ <> t("settings.devices.camera_numbered", { n })} /> diff --git a/src/settings/settings.ts b/src/settings/settings.ts index f63148ef..0c7b9191 100644 --- a/src/settings/settings.ts +++ b/src/settings/settings.ts @@ -44,6 +44,9 @@ export class Setting { this._value$.next(value); localStorage.setItem(this.key, JSON.stringify(value)); }; + public readonly getValue = (): T => { + return this._value$.getValue(); + }; } /** @@ -128,3 +131,8 @@ export const useExperimentalToDeviceTransport = new Setting( export const muteAllAudio = new Setting("mute-all-audio", false); export const alwaysShowSelf = new Setting("always-show-self", true); + +export const alwaysShowIphoneEarpiece = new Setting( + "always-show-iphone-earpice", + false, +); diff --git a/src/useAudioContext.tsx b/src/useAudioContext.tsx index da94f387..5a689fdf 100644 --- a/src/useAudioContext.tsx +++ b/src/useAudioContext.tsx @@ -12,7 +12,10 @@ import { soundEffectVolume as soundEffectVolumeSetting, useSetting, } from "./settings/settings"; -import { useMediaDevices } from "./livekit/MediaDevicesContext"; +import { + useEarpieceAudioConfig, + useMediaDevices, +} from "./livekit/MediaDevicesContext"; import { type PrefetchedSounds } from "./soundUtils"; /** @@ -28,12 +31,15 @@ async function playSound( ctx: AudioContext, buffer: AudioBuffer, volume: number, + stereoPan: number, ): Promise { const gain = ctx.createGain(); gain.gain.setValueAtTime(volume, 0); + const pan = ctx.createStereoPanner(); + pan.pan.setValueAtTime(stereoPan, 0); const src = ctx.createBufferSource(); src.buffer = buffer; - src.connect(gain).connect(ctx.destination); + src.connect(gain).connect(pan).connect(ctx.destination); const p = new Promise((r) => src.addEventListener("ended", () => r())); src.start(); return p; @@ -63,8 +69,9 @@ interface UseAudioContext { export function useAudioContext( props: Props, ): UseAudioContext | null { - const [effectSoundVolume] = useSetting(soundEffectVolumeSetting); - const devices = useMediaDevices(); + const [soundEffectVolume] = useSetting(soundEffectVolumeSetting); + const { audioOutput } = useMediaDevices(); + const [audioContext, setAudioContext] = useState(); const [audioBuffers, setAudioBuffers] = useState>(); @@ -106,23 +113,30 @@ export function useAudioContext( if (audioContext && "setSinkId" in audioContext) { // https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/setSinkId // @ts-expect-error - setSinkId doesn't exist yet in types, maybe because it's not supported everywhere. - audioContext.setSinkId(devices.audioOutput.selectedId).catch((ex) => { + audioContext.setSinkId(audioOutput.selectedId).catch((ex) => { logger.warn("Unable to change sink for audio context", ex); }); } - }, [audioContext, devices]); + }, [audioContext, audioOutput.selectedId]); + const { pan: earpiecePan, volume: earpieceVolume } = useEarpieceAudioConfig(); // Don't return a function until we're ready. if (!audioContext || !audioBuffers || props.muted) { return null; } + return { playSound: async (name): Promise => { if (!audioBuffers[name]) { logger.debug(`Tried to play a sound that wasn't buffered (${name})`); return; } - return playSound(audioContext, audioBuffers[name], effectSoundVolume); + return playSound( + audioContext, + audioBuffers[name], + soundEffectVolume * earpieceVolume, + earpiecePan, + ); }, }; } From 6b8c620bbb3ae309e7f645606d531e09716beffe Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 14 May 2025 10:41:08 +0200 Subject: [PATCH 160/225] Add tests --- playwright/access.spec.ts | 2 +- src/UserMenu.tsx | 2 +- src/livekit/MatrixAudioRenderer.test.tsx | 104 ++++++++++++++ src/livekit/MediaDevicesContext.tsx | 2 +- src/room/InCallView.test.tsx | 18 +-- src/room/MuteStates.test.tsx | 1 + .../__snapshots__/InCallView.test.tsx.snap | 2 +- src/useAudioContext.test.tsx | 136 +++++++++++------- src/utils/test.ts | 23 +++ 9 files changed, 228 insertions(+), 62 deletions(-) create mode 100644 src/livekit/MatrixAudioRenderer.test.tsx diff --git a/playwright/access.spec.ts b/playwright/access.spec.ts index 14a70873..da7ec364 100644 --- a/playwright/access.spec.ts +++ b/playwright/access.spec.ts @@ -49,7 +49,7 @@ test("Sign up a new account, then login, then logout", async ({ browser }) => { // logout await returningUserPage.getByTestId("usermenu_open").click(); - await returningUserPage.locator('[data-test-id="usermenu_logout"]').click(); + await returningUserPage.locator('[data-testid="usermenu_logout"]').click(); await expect( returningUserPage.getByRole("link", { name: "Log In" }), diff --git a/src/UserMenu.tsx b/src/UserMenu.tsx index 52cc4a5a..e431c328 100644 --- a/src/UserMenu.tsx +++ b/src/UserMenu.tsx @@ -119,7 +119,7 @@ export const UserMenu: FC = ({ key={key} Icon={Icon} label={label} - data-test-id={dataTestid} + data-testid={dataTestid} onSelect={() => onAction(key)} /> ))} diff --git a/src/livekit/MatrixAudioRenderer.test.tsx b/src/livekit/MatrixAudioRenderer.test.tsx new file mode 100644 index 00000000..9d91e6fa --- /dev/null +++ b/src/livekit/MatrixAudioRenderer.test.tsx @@ -0,0 +1,104 @@ +/* +Copyright 2023, 2024 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE in the repository root for full details. +*/ + +import { afterEach, beforeEach, expect, it, vi } from "vitest"; +import { render } from "@testing-library/react"; +import { type CallMembership } from "matrix-js-sdk/lib/matrixrtc"; +import { + getTrackReferenceId, + type TrackReference, +} from "@livekit/components-core"; +import { type RemoteAudioTrack } from "livekit-client"; +import { type ReactNode } from "react"; +import { useTracks } from "@livekit/components-react"; + +import { testAudioContext } from "../useAudioContext.test"; +import * as MediaDevicesContext from "./MediaDevicesContext"; +import { MatrixAudioRenderer } from "./MatrixAudioRenderer"; +import { mockTrack } from "../utils/test"; + +export const TestAudioContextConstructor = vi.fn(() => testAudioContext); + +beforeEach(() => { + vi.stubGlobal("AudioContext", TestAudioContextConstructor); +}); + +afterEach(() => { + vi.unstubAllGlobals(); + vi.clearAllMocks(); +}); + +vi.mock("@livekit/components-react", async (importOriginal) => { + return { + ...(await importOriginal()), // this will only affect "foo" outside of the original module + AudioTrack: (props: { trackRef: TrackReference }): ReactNode => { + return ( + + ); + }, + useTracks: vi.fn(), + }; +}); + +const tracks = [mockTrack("test:123")]; +vi.mocked(useTracks).mockReturnValue(tracks); + +it("should render for member", () => { + const { container, queryAllByTestId } = render( + , + ); + expect(container).toBeTruthy(); + expect(queryAllByTestId("audio")).toHaveLength(1); +}); +it("should not render without member", () => { + const { container, queryAllByTestId } = render( + , + ); + expect(container).toBeTruthy(); + expect(queryAllByTestId("audio")).toHaveLength(0); +}); + +it("should not setup audioContext gain and pan if there is no need to.", () => { + render( + , + ); + const audioTrack = tracks[0].publication.track! as RemoteAudioTrack; + + expect(audioTrack.setAudioContext).toHaveBeenCalledTimes(1); + expect(audioTrack.setAudioContext).toHaveBeenCalledWith(undefined); + expect(audioTrack.setWebAudioPlugins).toHaveBeenCalledTimes(1); + expect(audioTrack.setWebAudioPlugins).toHaveBeenCalledWith([]); + + expect(testAudioContext.gain.gain.value).toEqual(1); + expect(testAudioContext.pan.pan.value).toEqual(0); +}); +it("should setup audioContext gain and pan", () => { + vi.spyOn(MediaDevicesContext, "useEarpieceAudioConfig").mockReturnValue({ + pan: 1, + volume: 0.1, + }); + render( + , + ); + + const audioTrack = tracks[0].publication.track! as RemoteAudioTrack; + expect(audioTrack.setAudioContext).toHaveBeenCalled(); + expect(audioTrack.setWebAudioPlugins).toHaveBeenCalled(); + + expect(testAudioContext.gain.gain.value).toEqual(0.1); + expect(testAudioContext.pan.pan.value).toEqual(1); +}); diff --git a/src/livekit/MediaDevicesContext.tsx b/src/livekit/MediaDevicesContext.tsx index 3e30c04d..7d82032a 100644 --- a/src/livekit/MediaDevicesContext.tsx +++ b/src/livekit/MediaDevicesContext.tsx @@ -26,8 +26,8 @@ import { audioInput as audioInputSetting, audioOutput as audioOutputSetting, videoInput as videoInputSetting, + alwaysShowIphoneEarpiece as alwaysShowIphoneEarpieceSetting, type Setting, - alwaysShowIphoneEarpieceSetting, } from "../settings/settings"; export const EARPIECE_CONFIG_ID = "earpiece-id"; diff --git a/src/room/InCallView.test.tsx b/src/room/InCallView.test.tsx index 4d02160c..f7bed6fe 100644 --- a/src/room/InCallView.test.tsx +++ b/src/room/InCallView.test.tsx @@ -21,11 +21,7 @@ import { ConnectionState, type LocalParticipant } from "livekit-client"; import { of } from "rxjs"; import { BrowserRouter } from "react-router-dom"; import { TooltipProvider } from "@vector-im/compound-web"; -import { - RoomAudioRenderer, - RoomContext, - useLocalParticipant, -} from "@livekit/components-react"; +import { RoomContext, useLocalParticipant } from "@livekit/components-react"; import { RoomAndToDeviceEvents } from "matrix-js-sdk/lib/matrixrtc/RoomAndToDeviceKeyTransport"; import { type MuteStates } from "./MuteStates"; @@ -48,6 +44,8 @@ import { } from "../settings/settings"; import { ReactionsSenderProvider } from "../reactions/useReactionsSender"; import { useRoomEncryptionSystem } from "../e2ee/sharedKeyManagement"; +// import { testAudioContext } from "../useAudioContext.test"; +import { MatrixAudioRenderer } from "../livekit/MatrixAudioRenderer"; // vi.hoisted(() => { // localStorage = {} as unknown as Storage; @@ -65,6 +63,7 @@ vi.mock("../tile/GridTile"); vi.mock("../tile/SpotlightTile"); vi.mock("@livekit/components-react"); vi.mock("../e2ee/sharedKeyManagement"); +vi.mock("../livekit/MatrixAudioRenderer"); vi.mock("react-use-measure", () => ({ default: (): [() => void, object] => [(): void => {}, {}], })); @@ -81,13 +80,15 @@ const roomMembers = new Map([carol].map((p) => [p.userId, p])); const roomId = "!foo:bar"; let useRoomEncryptionSystemMock: MockedFunction; + beforeEach(() => { vi.clearAllMocks(); - // RoomAudioRenderer is tested separately. + + // MatrixAudioRenderer is tested separately. ( - RoomAudioRenderer as MockedFunction + MatrixAudioRenderer as MockedFunction ).mockImplementation((_props) => { - return
mocked: RoomAudioRenderer
; + return
mocked: MatrixAudioRenderer
; }); ( useLocalParticipant as MockedFunction @@ -98,7 +99,6 @@ beforeEach(() => { localParticipant: localRtcMember as unknown as LocalParticipant, }) as unknown as ReturnType, ); - useRoomEncryptionSystemMock = useRoomEncryptionSystem as typeof useRoomEncryptionSystemMock; useRoomEncryptionSystemMock.mockReturnValue({ kind: E2eeType.NONE }); diff --git a/src/room/MuteStates.test.tsx b/src/room/MuteStates.test.tsx index 4a375c8f..eb066603 100644 --- a/src/room/MuteStates.test.tsx +++ b/src/room/MuteStates.test.tsx @@ -79,6 +79,7 @@ function mockDevices(available: Map): MediaDevice { selectedId: "", selectedGroupId: "", select: (): void => {}, + useAsEarpiece: false, }; } diff --git a/src/room/__snapshots__/InCallView.test.tsx.snap b/src/room/__snapshots__/InCallView.test.tsx.snap index 427973b6..98edb8a4 100644 --- a/src/room/__snapshots__/InCallView.test.tsx.snap +++ b/src/room/__snapshots__/InCallView.test.tsx.snap @@ -9,7 +9,7 @@ exports[`InCallView > rendering > renders 1`] = ` class="header filler" />
- mocked: RoomAudioRenderer + mocked: MatrixAudioRenderer
{ ); }; -class MockAudioContext { - public static testContext: MockAudioContext; - - public constructor() { - MockAudioContext.testContext = this; - } - - public gain = vitest.mocked( - { - connect: () => {}, - gain: { - setValueAtTime: vitest.fn(), - }, +const gainNode = vi.mocked( + { + connect: (node: AudioNode) => node, + gain: { + setValueAtTime: vi.fn(), + value: 1, }, - true, - ); - - public setSinkId = vitest.fn().mockResolvedValue(undefined); - public decodeAudioData = vitest.fn().mockReturnValue(1); - public createBufferSource = vitest.fn().mockReturnValue( - vitest.mocked({ + }, + true, +); +const panNode = vi.mocked( + { + connect: (node: AudioNode) => node, + pan: { + setValueAtTime: vi.fn(), + value: 0, + }, + }, + true, +); +/** + * A shared audio context test instance. + * It can also be used to mock the `AudioContext` constructor in tests: + * `vi.stubGlobal("AudioContext", () => testAudioContext);` + */ +export const testAudioContext = { + gain: gainNode, + pan: panNode, + setSinkId: vi.fn().mockResolvedValue(undefined), + decodeAudioData: vi.fn().mockReturnValue(1), + createBufferSource: vi.fn().mockReturnValue( + vi.mocked({ connect: (v: unknown) => v, start: () => {}, addEventListener: (_name: string, cb: () => void) => cb(), }), - ); - public createGain = vitest.fn().mockReturnValue(this.gain); - public close = vitest.fn().mockResolvedValue(undefined); -} + ), + createGain: vi.fn().mockReturnValue(gainNode), + createStereoPanner: vi.fn().mockReturnValue(panNode), + close: vi.fn().mockResolvedValue(undefined), +}; +export const TestAudioContextConstructor = vi.fn(() => testAudioContext); + +let user: UserEvent; +beforeEach(() => { + vi.stubGlobal("AudioContext", TestAudioContextConstructor); + user = userEvent.setup(); +}); afterEach(() => { - vitest.unstubAllGlobals(); + vi.unstubAllGlobals(); + vi.clearAllMocks(); }); test("can play a single sound", async () => { - const user = userEvent.setup(); - vitest.stubGlobal("AudioContext", MockAudioContext); const { findByText } = render(); await user.click(await findByText("Valid sound")); - expect( - MockAudioContext.testContext.createBufferSource, - ).toHaveBeenCalledOnce(); + expect(testAudioContext.createBufferSource).toHaveBeenCalledOnce(); }); + test("will ignore sounds that are not registered", async () => { - const user = userEvent.setup(); - vitest.stubGlobal("AudioContext", MockAudioContext); const { findByText } = render(); await user.click(await findByText("Invalid sound")); - expect( - MockAudioContext.testContext.createBufferSource, - ).not.toHaveBeenCalled(); + expect(testAudioContext.createBufferSource).not.toHaveBeenCalled(); }); test("will use the correct device", () => { - vitest.stubGlobal("AudioContext", MockAudioContext); render( { selectedGroupId: "", available: new Map(), select: () => {}, + useAsEarpiece: false, }, videoInput: deviceStub, startUsingDeviceNames: () => {}, @@ -112,21 +125,46 @@ test("will use the correct device", () => { , ); - expect( - MockAudioContext.testContext.createBufferSource, - ).not.toHaveBeenCalled(); - expect(MockAudioContext.testContext.setSinkId).toHaveBeenCalledWith( - "chosen-device", - ); + expect(testAudioContext.createBufferSource).not.toHaveBeenCalled(); + expect(testAudioContext.setSinkId).toHaveBeenCalledWith("chosen-device"); }); test("will use the correct volume level", async () => { - const user = userEvent.setup(); - vitest.stubGlobal("AudioContext", MockAudioContext); soundEffectVolumeSetting.setValue(0.33); const { findByText } = render(); await user.click(await findByText("Valid sound")); - expect( - MockAudioContext.testContext.gain.gain.setValueAtTime, - ).toHaveBeenCalledWith(0.33, 0); + expect(testAudioContext.gain.gain.setValueAtTime).toHaveBeenCalledWith( + 0.33, + 0, + ); + expect(testAudioContext.pan.pan.setValueAtTime).toHaveBeenCalledWith(0, 0); +}); + +test("will use the pan if earpice is selected", async () => { + const { findByText } = render( + {}, + useAsEarpiece: true, + }, + videoInput: deviceStub, + startUsingDeviceNames: () => {}, + stopUsingDeviceNames: () => {}, + }} + > + + , + ); + await user.click(await findByText("Valid sound")); + expect(testAudioContext.pan.pan.setValueAtTime).toHaveBeenCalledWith(1, 0); + + expect(testAudioContext.gain.gain.setValueAtTime).toHaveBeenCalledWith( + soundEffectVolumeSetting.getValue() * 0.1, + 0, + ); }); diff --git a/src/utils/test.ts b/src/utils/test.ts index 6e1b5457..51ed1ed2 100644 --- a/src/utils/test.ts +++ b/src/utils/test.ts @@ -27,12 +27,14 @@ import { type RemoteParticipant, type RemoteTrackPublication, type Room as LivekitRoom, + Track, } from "livekit-client"; import { randomUUID } from "crypto"; import { type RoomAndToDeviceEvents, type RoomAndToDeviceEventsHandlerMap, } from "matrix-js-sdk/lib/matrixrtc/RoomAndToDeviceKeyTransport"; +import { type TrackReference } from "@livekit/components-core"; import { LocalUserMediaViewModel, @@ -309,3 +311,24 @@ export class MockRTCSession extends TypedEventEmitter< return this; } } + +export const mockTrack = (identity: string): TrackReference => + ({ + participant: { + identity, + }, + publication: { + kind: Track.Kind.Audio, + source: "mic", + trackSid: "123", + track: { + attach: vi.fn(), + detach: vi.fn(), + setAudioContext: vi.fn(), + setWebAudioPlugins: vi.fn(), + setVolume: vi.fn(), + }, + }, + track: {}, + source: {}, + }) as unknown as TrackReference; From 4569d0135307bc7a79dd7b21b9de934bc6759a53 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 12:09:53 +0200 Subject: [PATCH 161/225] Update dependency vite to v6.2.7 [SECURITY] (#3240) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 212 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 122 insertions(+), 90 deletions(-) diff --git a/yarn.lock b/yarn.lock index a42427b4..bf7244c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4007,142 +4007,142 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.37.0" +"@rollup/rollup-android-arm-eabi@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.40.2" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-android-arm64@npm:4.37.0" +"@rollup/rollup-android-arm64@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-android-arm64@npm:4.40.2" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.37.0" +"@rollup/rollup-darwin-arm64@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-darwin-arm64@npm:4.40.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.37.0" +"@rollup/rollup-darwin-x64@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-darwin-x64@npm:4.40.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.37.0" +"@rollup/rollup-freebsd-arm64@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.40.2" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-freebsd-x64@npm:4.37.0" +"@rollup/rollup-freebsd-x64@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-freebsd-x64@npm:4.40.2" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.37.0" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.40.2" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.37.0" +"@rollup/rollup-linux-arm-musleabihf@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.40.2" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.37.0" +"@rollup/rollup-linux-arm64-gnu@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.40.2" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.37.0" +"@rollup/rollup-linux-arm64-musl@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.40.2" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-loongarch64-gnu@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.37.0" +"@rollup/rollup-linux-loongarch64-gnu@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.40.2" conditions: os=linux & cpu=loong64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.37.0" +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.2" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.37.0" +"@rollup/rollup-linux-riscv64-gnu@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.40.2" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-musl@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.37.0" +"@rollup/rollup-linux-riscv64-musl@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.40.2" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.37.0" +"@rollup/rollup-linux-s390x-gnu@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.40.2" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.37.0" +"@rollup/rollup-linux-x64-gnu@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.40.2" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.37.0" +"@rollup/rollup-linux-x64-musl@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.40.2" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.37.0" +"@rollup/rollup-win32-arm64-msvc@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.40.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.37.0" +"@rollup/rollup-win32-ia32-msvc@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.40.2" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.37.0": - version: 4.37.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.37.0" +"@rollup/rollup-win32-x64-msvc@npm:4.40.2": + version: 4.40.2 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.40.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -4637,7 +4637,14 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:1.0.6, @types/estree@npm:^1.0.0": +"@types/estree@npm:1.0.7": + version: 1.0.7 + resolution: "@types/estree@npm:1.0.7" + checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c + languageName: node + linkType: hard + +"@types/estree@npm:^1.0.0": version: 1.0.6 resolution: "@types/estree@npm:1.0.6" checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a @@ -7849,6 +7856,18 @@ __metadata: languageName: node linkType: hard +"fdir@npm:^6.4.4": + version: 6.4.4 + resolution: "fdir@npm:6.4.4" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/6ccc33be16945ee7bc841e1b4178c0b4cf18d3804894cb482aa514651c962a162f96da7ffc6ebfaf0df311689fb70091b04dd6caffe28d56b9ebdc0e7ccadfdd + languageName: node + linkType: hard + "fflate@npm:^0.4.8": version: 0.4.8 resolution: "fflate@npm:0.4.8" @@ -11567,31 +11586,31 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.30.1": - version: 4.37.0 - resolution: "rollup@npm:4.37.0" +"rollup@npm:^4.34.9": + version: 4.40.2 + resolution: "rollup@npm:4.40.2" dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.37.0" - "@rollup/rollup-android-arm64": "npm:4.37.0" - "@rollup/rollup-darwin-arm64": "npm:4.37.0" - "@rollup/rollup-darwin-x64": "npm:4.37.0" - "@rollup/rollup-freebsd-arm64": "npm:4.37.0" - "@rollup/rollup-freebsd-x64": "npm:4.37.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.37.0" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.37.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.37.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.37.0" - "@rollup/rollup-linux-loongarch64-gnu": "npm:4.37.0" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.37.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.37.0" - "@rollup/rollup-linux-riscv64-musl": "npm:4.37.0" - "@rollup/rollup-linux-s390x-gnu": "npm:4.37.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.37.0" - "@rollup/rollup-linux-x64-musl": "npm:4.37.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.37.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.37.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.37.0" - "@types/estree": "npm:1.0.6" + "@rollup/rollup-android-arm-eabi": "npm:4.40.2" + "@rollup/rollup-android-arm64": "npm:4.40.2" + "@rollup/rollup-darwin-arm64": "npm:4.40.2" + "@rollup/rollup-darwin-x64": "npm:4.40.2" + "@rollup/rollup-freebsd-arm64": "npm:4.40.2" + "@rollup/rollup-freebsd-x64": "npm:4.40.2" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.40.2" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.40.2" + "@rollup/rollup-linux-arm64-gnu": "npm:4.40.2" + "@rollup/rollup-linux-arm64-musl": "npm:4.40.2" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.40.2" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.40.2" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.40.2" + "@rollup/rollup-linux-riscv64-musl": "npm:4.40.2" + "@rollup/rollup-linux-s390x-gnu": "npm:4.40.2" + "@rollup/rollup-linux-x64-gnu": "npm:4.40.2" + "@rollup/rollup-linux-x64-musl": "npm:4.40.2" + "@rollup/rollup-win32-arm64-msvc": "npm:4.40.2" + "@rollup/rollup-win32-ia32-msvc": "npm:4.40.2" + "@rollup/rollup-win32-x64-msvc": "npm:4.40.2" + "@types/estree": "npm:1.0.7" fsevents: "npm:~2.3.2" dependenciesMeta: "@rollup/rollup-android-arm-eabi": @@ -11638,7 +11657,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/2e00382e08938636edfe0a7547ea2eaa027205dc0b6ff85d8b82be0fbe55a4ef88a1995fee2a5059e33dbccf12d1376c236825353afb89c96298cc95c5160a46 + checksum: 10c0/cbe9b766891da74fbf7c3b50420bb75102e5c59afc0ea45751f7e43a581d2cd93367763f521f820b72e341cf1f6b9951fbdcd3be67a1b0aa774b754525a8b9c7 languageName: node linkType: hard @@ -12471,6 +12490,16 @@ __metadata: languageName: node linkType: hard +"tinyglobby@npm:^0.2.13": + version: 0.2.13 + resolution: "tinyglobby@npm:0.2.13" + dependencies: + fdir: "npm:^6.4.4" + picomatch: "npm:^4.0.2" + checksum: 10c0/ef07dfaa7b26936601d3f6d999f7928a4d1c6234c5eb36896bb88681947c0d459b7ebe797022400e555fe4b894db06e922b95d0ce60cb05fd827a0a66326b18c + languageName: node + linkType: hard + "tinypool@npm:^1.0.2": version: 1.0.2 resolution: "tinypool@npm:1.0.2" @@ -13179,13 +13208,16 @@ __metadata: linkType: hard "vite@npm:^5.0.0 || ^6.0.0, vite@npm:^6.0.0": - version: 6.2.6 - resolution: "vite@npm:6.2.6" + version: 6.3.5 + resolution: "vite@npm:6.3.5" dependencies: esbuild: "npm:^0.25.0" + fdir: "npm:^6.4.4" fsevents: "npm:~2.3.3" + picomatch: "npm:^4.0.2" postcss: "npm:^8.5.3" - rollup: "npm:^4.30.1" + rollup: "npm:^4.34.9" + tinyglobby: "npm:^0.2.13" peerDependencies: "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 jiti: ">=1.21.0" @@ -13226,7 +13258,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/68a2ed3e61bdd654c59b817b4f3203065241c66d1739faa707499130f3007bc3a666c7a8320a4198e275e62b5e4d34d9b78a6533f69e321d366e76f5093b2071 + checksum: 10c0/df70201659085133abffc6b88dcdb8a57ef35f742a01311fc56a4cfcda6a404202860729cc65a2c401a724f6e25f9ab40ce4339ed4946f550541531ced6fe41c languageName: node linkType: hard From 18a59dd7dbb851eaa5ac44dfd12e577092031b3e Mon Sep 17 00:00:00 2001 From: Timo Date: Wed, 14 May 2025 17:23:42 +0200 Subject: [PATCH 162/225] use optional audio context and effect to initiate it + review --- src/livekit/MatrixAudioRenderer.test.tsx | 2 +- src/livekit/MatrixAudioRenderer.tsx | 51 ++++++++++++++---------- src/room/InCallView.test.tsx | 1 - src/settings/DeviceSelection.tsx | 2 +- 4 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/livekit/MatrixAudioRenderer.test.tsx b/src/livekit/MatrixAudioRenderer.test.tsx index 9d91e6fa..637e02ed 100644 --- a/src/livekit/MatrixAudioRenderer.test.tsx +++ b/src/livekit/MatrixAudioRenderer.test.tsx @@ -34,7 +34,7 @@ afterEach(() => { vi.mock("@livekit/components-react", async (importOriginal) => { return { - ...(await importOriginal()), // this will only affect "foo" outside of the original module + ...(await importOriginal()), AudioTrack: (props: { trackRef: TrackReference }): ReactNode => { return (

diff --git a/src/settings/settings.ts b/src/settings/settings.ts index 7babcfde..5a7b7a36 100644 --- a/src/settings/settings.ts +++ b/src/settings/settings.ts @@ -117,4 +117,10 @@ export const useNewMembershipManagerSetting = new Setting( "new-membership-manager", true, ); + +export const useExperimentalToDeviceTransportSetting = new Setting( + "experimental-to-device-transport", + false, +); + export const alwaysShowSelf = new Setting("always-show-self", true); diff --git a/yarn.lock b/yarn.lock index baa3d11f..cfd29564 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6913,7 +6913,7 @@ __metadata: livekit-client: "npm:2.11.1" lodash-es: "npm:^4.17.21" loglevel: "npm:^1.9.1" - matrix-js-sdk: "github:matrix-org/matrix-js-sdk#8395919f0fd1af7cab1e793d736f2cdf18ef7686" + matrix-js-sdk: "github:matrix-org/matrix-js-sdk#e3a3a52f2a56cb5cc52b57b36e9a915faed0b5db" matrix-widget-api: "npm:1.11.0" normalize.css: "npm:^8.0.1" observable-hooks: "npm:^4.2.3" @@ -9504,9 +9504,9 @@ __metadata: languageName: node linkType: hard -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#8395919f0fd1af7cab1e793d736f2cdf18ef7686": - version: 37.1.0 - resolution: "matrix-js-sdk@https://github.com/matrix-org/matrix-js-sdk.git#commit=8395919f0fd1af7cab1e793d736f2cdf18ef7686" +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#e3a3a52f2a56cb5cc52b57b36e9a915faed0b5db": + version: 37.3.0 + resolution: "matrix-js-sdk@https://github.com/matrix-org/matrix-js-sdk.git#commit=e3a3a52f2a56cb5cc52b57b36e9a915faed0b5db" dependencies: "@babel/runtime": "npm:^7.12.5" "@matrix-org/matrix-sdk-crypto-wasm": "npm:^14.0.1" @@ -9523,7 +9523,7 @@ __metadata: sdp-transform: "npm:^2.14.1" unhomoglyph: "npm:^1.0.6" uuid: "npm:11" - checksum: 10c0/a0eb3be822e07cfe53965f6ca4f0c3cdf8ba3728d03a15f2322a463a7543206583e0c2f34d6b6d45089ce36eec60d77d9e90eb0635d3c65a343f77728908fe57 + checksum: 10c0/1baf50f93576a6fdf46d76c7a84cf43adeb0b04e692165f749f15c56e8e3fd0f5f354a1702b9f9de1688cebbdee176f7056b71e8a526ef9b0fbbe23405c2aee2 languageName: node linkType: hard From 054d6a9e480e1761e507d123c8aa590c85cb16fe Mon Sep 17 00:00:00 2001 From: Timo Date: Fri, 11 Apr 2025 12:26:25 +0200 Subject: [PATCH 086/225] Update renvovate.json --- renovate.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/renovate.json b/renovate.json index 392a6631..f4068d3d 100644 --- a/renovate.json +++ b/renovate.json @@ -51,7 +51,7 @@ }, { "groupName": "bundled element-call dependencies", - "matchPackageNames": [ + "matchDepNames": [ "com.vanniktech.maven.publish", "com.android.library", "com.android.tools.build", @@ -60,7 +60,7 @@ }, { "groupName": "Yarn", - "matchPackageNames": ["yarn"], + "matchDepNames": ["yarn"], "extends": ["schedule:weekly"] } ], From c305fb8604b47115670ea2fac9464f8f6dc3402c Mon Sep 17 00:00:00 2001 From: Timo Date: Fri, 11 Apr 2025 12:37:35 +0200 Subject: [PATCH 087/225] use matchFileNames --- renovate.json | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/renovate.json b/renovate.json index f4068d3d..a865ce00 100644 --- a/renovate.json +++ b/renovate.json @@ -50,13 +50,8 @@ "prHeader": "Please review modals on mobile for visual regressions." }, { - "groupName": "bundled element-call dependencies", - "matchDepNames": [ - "com.vanniktech.maven.publish", - "com.android.library", - "com.android.tools.build", - "gradle" - ] + "groupName": "embedded package dependencies", + "matchFileNames": ["embedded/**/*"] }, { "groupName": "Yarn", From 13f12779dc0762f3f2df64f08a7a0559acfa9505 Mon Sep 17 00:00:00 2001 From: Timo Date: Fri, 11 Apr 2025 12:39:51 +0200 Subject: [PATCH 088/225] default for yarn updates --- renovate.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/renovate.json b/renovate.json index a865ce00..b737c0ed 100644 --- a/renovate.json +++ b/renovate.json @@ -55,8 +55,7 @@ }, { "groupName": "Yarn", - "matchDepNames": ["yarn"], - "extends": ["schedule:weekly"] + "matchDepNames": ["yarn"] } ], "semanticCommits": "disabled", From 9c9d38cd95d4d8912e15962685615d15495cd99b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Apr 2025 11:47:19 +0000 Subject: [PATCH 089/225] Update dependency livekit-client to v2.11.2 --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 065fbf9f..4549d898 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "i18next-parser": "^9.1.0", "jsdom": "^26.0.0", "knip": "^5.27.2", - "livekit-client": "2.11.1", + "livekit-client": "2.11.2", "lodash-es": "^4.17.21", "loglevel": "^1.9.1", "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#e3a3a52f2a56cb5cc52b57b36e9a915faed0b5db", diff --git a/yarn.lock b/yarn.lock index cfd29564..2a858f23 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6910,7 +6910,7 @@ __metadata: i18next-parser: "npm:^9.1.0" jsdom: "npm:^26.0.0" knip: "npm:^5.27.2" - livekit-client: "npm:2.11.1" + livekit-client: "npm:2.11.2" lodash-es: "npm:^4.17.21" loglevel: "npm:^1.9.1" matrix-js-sdk: "github:matrix-org/matrix-js-sdk#e3a3a52f2a56cb5cc52b57b36e9a915faed0b5db" @@ -9280,9 +9280,9 @@ __metadata: languageName: node linkType: hard -"livekit-client@npm:2.11.1": - version: 2.11.1 - resolution: "livekit-client@npm:2.11.1" +"livekit-client@npm:2.11.2": + version: 2.11.2 + resolution: "livekit-client@npm:2.11.2" dependencies: "@livekit/mutex": "npm:1.1.1" "@livekit/protocol": "npm:1.36.1" @@ -9293,7 +9293,7 @@ __metadata: tslib: "npm:2.8.1" typed-emitter: "npm:^2.1.0" webrtc-adapter: "npm:^9.0.1" - checksum: 10c0/4df027e8844483d315e45a74b43fdc2860e3230a7f2c9224e37b3087a2b93cfa43610384f6ae492166f1703781208a8bd4ed088d2f56ef1069138d83416ca016 + checksum: 10c0/03a184f3a4f81beefb47a78adb37d3ba3b95a5d1f01e2ebbb83fb3769a120f6b8726ee8ccd96eb634164eeec508850cf05d40e2330fe7c1eda0e3d7f481561f7 languageName: node linkType: hard From 8c8a5e28a0f42771a94f559c2e04f81cd7e4d68b Mon Sep 17 00:00:00 2001 From: Andrew Ferrazzutti Date: Fri, 11 Apr 2025 08:45:55 -0400 Subject: [PATCH 090/225] Fix Docker image tag in release notes (#3190) The version tag of published Docker images includes a leading "v", so include it in release notes. --- .github/workflows/publish.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 8037ab2e..8735f05d 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -66,8 +66,6 @@ jobs: name: Add docker release note runs-on: ubuntu-latest steps: - - name: Get artifact version - run: echo "ARTIFACT_VERSION=${VERSION:1}" >> "$GITHUB_ENV" - name: Add release note uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2 with: @@ -79,5 +77,5 @@ jobs: The image provides a full build of Element Call that can be used both in standalone and as a widget (on a remote URL). ``` - docker pull ghcr.io/element-hq/element-call:${{ env.ARTIFACT_VERSION }} + docker pull ghcr.io/element-hq/element-call:${{ env.VERSION }} ``` From 770b94eb4424e1b52b451c737f6ec0f0d0adb2da Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Fri, 11 Apr 2025 17:05:57 +0200 Subject: [PATCH 091/225] Add `RoomAndToDeviceKeyTransport` and enable as default. (#3185) --- package.json | 2 +- src/room/InCallView.tsx | 22 ++++++++++++++++++---- src/settings/settings.ts | 2 +- yarn.lock | 8 ++++---- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 4549d898..13fce7a8 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "livekit-client": "2.11.2", "lodash-es": "^4.17.21", "loglevel": "^1.9.1", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#e3a3a52f2a56cb5cc52b57b36e9a915faed0b5db", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#445981f1bc1e13f80b3061fb26d6f42f49161c24", "matrix-widget-api": "1.11.0", "normalize.css": "^8.0.1", "observable-hooks": "^4.2.3", diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index b8718ba7..b434a1da 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -32,6 +32,7 @@ import classNames from "classnames"; import { BehaviorSubject, map } from "rxjs"; import { useObservable, useObservableEagerState } from "observable-hooks"; import { logger } from "matrix-js-sdk/lib/logger"; +import { RoomAndToDeviceEvents } from "matrix-js-sdk/lib/matrixrtc/RoomAndToDeviceKeyTransport"; import LogoMark from "../icons/LogoMark.svg?react"; import LogoType from "../icons/LogoType.svg?react"; @@ -100,6 +101,8 @@ import { } from "../settings/settings"; import { ReactionsReader } from "../reactions/ReactionsReader"; import { ConnectionLostError } from "../utils/errors.ts"; +import { useTypedEventEmitter } from "../useEvents.ts"; + const canScreenshare = "getDisplayMedia" in (navigator.mediaDevices ?? {}); const maxTapDurationMs = 400; @@ -217,9 +220,20 @@ export const InCallView: FC = ({ room: livekitRoom, }); - const [toDeviceEncryption] = useSetting( + const [toDeviceEncryptionSetting] = useSetting( useExperimentalToDeviceTransportSetting, ); + const [showToDeviceEncryption, setShowToDeviceEncryption] = useState( + () => toDeviceEncryptionSetting, + ); + useEffect(() => { + setShowToDeviceEncryption(toDeviceEncryptionSetting); + }, [toDeviceEncryptionSetting]); + useTypedEventEmitter( + rtcSession, + RoomAndToDeviceEvents.EnabledTransportsChanged, + (enabled) => setShowToDeviceEncryption(enabled.to_device), + ); const toggleMicrophone = useCallback( () => muteStates.audio.setEnabled?.((e) => !e), @@ -668,9 +682,9 @@ export const InCallView: FC = ({ ))} { - // TODO: remove this once we remove the developer flag - // and find a better way to device what key transport to use. - toDeviceEncryption && ( + // TODO: remove this once we remove the developer flag gets removed and we have shipped to + // device transport as the default. + showToDeviceEncryption && ( ( export const useExperimentalToDeviceTransportSetting = new Setting( "experimental-to-device-transport", - false, + true, ); export const alwaysShowSelf = new Setting("always-show-self", true); diff --git a/yarn.lock b/yarn.lock index 2a858f23..300dfffa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6913,7 +6913,7 @@ __metadata: livekit-client: "npm:2.11.2" lodash-es: "npm:^4.17.21" loglevel: "npm:^1.9.1" - matrix-js-sdk: "github:matrix-org/matrix-js-sdk#e3a3a52f2a56cb5cc52b57b36e9a915faed0b5db" + matrix-js-sdk: "github:matrix-org/matrix-js-sdk#445981f1bc1e13f80b3061fb26d6f42f49161c24" matrix-widget-api: "npm:1.11.0" normalize.css: "npm:^8.0.1" observable-hooks: "npm:^4.2.3" @@ -9504,9 +9504,9 @@ __metadata: languageName: node linkType: hard -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#e3a3a52f2a56cb5cc52b57b36e9a915faed0b5db": +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#445981f1bc1e13f80b3061fb26d6f42f49161c24": version: 37.3.0 - resolution: "matrix-js-sdk@https://github.com/matrix-org/matrix-js-sdk.git#commit=e3a3a52f2a56cb5cc52b57b36e9a915faed0b5db" + resolution: "matrix-js-sdk@https://github.com/matrix-org/matrix-js-sdk.git#commit=445981f1bc1e13f80b3061fb26d6f42f49161c24" dependencies: "@babel/runtime": "npm:^7.12.5" "@matrix-org/matrix-sdk-crypto-wasm": "npm:^14.0.1" @@ -9523,7 +9523,7 @@ __metadata: sdp-transform: "npm:^2.14.1" unhomoglyph: "npm:^1.0.6" uuid: "npm:11" - checksum: 10c0/1baf50f93576a6fdf46d76c7a84cf43adeb0b04e692165f749f15c56e8e3fd0f5f354a1702b9f9de1688cebbdee176f7056b71e8a526ef9b0fbbe23405c2aee2 + checksum: 10c0/eaeb21abac46c999d2ac25958680ed4c283c9269380678a08815aaf577b8642254eb80de7dd3d69b9ccc71dd31cda51ad0393088d82b5d6e9f0240ee3e90e67e languageName: node linkType: hard From 58e542e15d129aba284b2bbb5f87322b1abd9c11 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Apr 2025 15:06:47 +0000 Subject: [PATCH 092/225] Update dependency vite to v6.2.6 [SECURITY] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 300dfffa..42e2369b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13092,8 +13092,8 @@ __metadata: linkType: hard "vite@npm:^5.0.0 || ^6.0.0, vite@npm:^6.0.0": - version: 6.2.5 - resolution: "vite@npm:6.2.5" + version: 6.2.6 + resolution: "vite@npm:6.2.6" dependencies: esbuild: "npm:^0.25.0" fsevents: "npm:~2.3.3" @@ -13139,7 +13139,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/226bb3c1875e1982559007007580e8d083b81f5289f18e28841d622ba030599e1bd9926adccc8264879e319e9f9e4f48a38a0dc52a5dfcdf2a9cb7313bfc1816 + checksum: 10c0/68a2ed3e61bdd654c59b817b4f3203065241c66d1739faa707499130f3007bc3a666c7a8320a4198e275e62b5e4d34d9b78a6533f69e321d366e76f5093b2071 languageName: node linkType: hard From 8858e4003a5e684bbea57d31bea7748e7c8c96e5 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Fri, 11 Apr 2025 17:08:08 +0100 Subject: [PATCH 093/225] Explicitly set docker image version for releases Otherwise we end up with inconsistency across RCs and Releases. --- .github/workflows/publish.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 8735f05d..ab7d1a72 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -60,7 +60,7 @@ jobs: artifact_run_id: ${{ github.event.workflow_run.id || github.run_id }} docker_tags: | type=sha,format=short,event=branch - type=semver,pattern=v{{version}} + type=raw,pattern=${{ env.VERSION }} add_docker_release_note: needs: publish_docker name: Add docker release note From fc281c516c8a889f9e571a1b8c934097e978d4c3 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Fri, 11 Apr 2025 17:12:58 +0100 Subject: [PATCH 094/225] Fix error > Unrecognized named-value: 'env'. Located at position 1 within expression: env.VERSION --- .github/workflows/publish.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index ab7d1a72..b43dce83 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -60,7 +60,7 @@ jobs: artifact_run_id: ${{ github.event.workflow_run.id || github.run_id }} docker_tags: | type=sha,format=short,event=branch - type=raw,pattern=${{ env.VERSION }} + type=raw,pattern=${{ github.env.VERSION }} add_docker_release_note: needs: publish_docker name: Add docker release note From 4b247540ef7f3f968431c4e37db3bc83fa66a1df Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Fri, 11 Apr 2025 17:16:47 +0100 Subject: [PATCH 095/225] value!=pattern --- .github/workflows/publish.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index b43dce83..d2b1bb6c 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -60,7 +60,7 @@ jobs: artifact_run_id: ${{ github.event.workflow_run.id || github.run_id }} docker_tags: | type=sha,format=short,event=branch - type=raw,pattern=${{ github.env.VERSION }} + type=raw,value=${{ github.env.VERSION }} add_docker_release_note: needs: publish_docker name: Add docker release note From ee45e5890392022471cf6c4a709add0d903bc444 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Fri, 11 Apr 2025 17:23:56 +0100 Subject: [PATCH 096/225] Meh --- .github/workflows/publish.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index d2b1bb6c..463953fa 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -60,7 +60,8 @@ jobs: artifact_run_id: ${{ github.event.workflow_run.id || github.run_id }} docker_tags: | type=sha,format=short,event=branch - type=raw,value=${{ github.env.VERSION }} + type=raw,value=${{ github.event.release.tag_name }} + # Like before, using ${{ env.VERSION }} above doesn't work add_docker_release_note: needs: publish_docker name: Add docker release note From f5615f2e26750f00bd9c3f3f2e091ecbfa8d9f14 Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Fri, 11 Apr 2025 18:01:04 +0100 Subject: [PATCH 097/225] Set the correct license on docker images (#3197) --- .github/workflows/build-and-publish-docker.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build-and-publish-docker.yaml b/.github/workflows/build-and-publish-docker.yaml index ec34a046..fbe2d665 100644 --- a/.github/workflows/build-and-publish-docker.yaml +++ b/.github/workflows/build-and-publish-docker.yaml @@ -46,6 +46,8 @@ jobs: with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: ${{ inputs.docker_tags}} + labels: | + org.opencontainers.image.licenses=AGPL-3.0-only OR LicenseRef-Element-Commercial - name: Set up Docker Buildx uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0 From d5407a4fdeabb09bffa9acebfd44d17cdfa2d4c7 Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Mon, 14 Apr 2025 09:56:53 +0200 Subject: [PATCH 098/225] Update developer key transport setting description (#3194) --- locales/en/app.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/en/app.json b/locales/en/app.json index be75681a..d5c6293a 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -74,7 +74,7 @@ "show_non_member_tiles": "Show tiles for non-member media", "url_params": "URL parameters", "use_new_membership_manager": "Use the new implementation of the call MembershipManager", - "use_to_device_key_transport": "Use to device messages to distribute keys for matrixRTC media" + "use_to_device_key_transport": "Use to device key transport. This will fallback to room key transport when another call member sent a room key" }, "disconnected_banner": "Connectivity to the server has been lost.", "error": { From e63aff3e9bcfc6a81d7c29c98212a5f8eb76ab18 Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Tue, 15 Apr 2025 10:05:00 +0200 Subject: [PATCH 099/225] Bump js-sdk to `develop` branch (#3205) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 13fce7a8..7c2edc31 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "livekit-client": "2.11.2", "lodash-es": "^4.17.21", "loglevel": "^1.9.1", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#445981f1bc1e13f80b3061fb26d6f42f49161c24", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#64e27f5d3cdab6aafeb7c22f1264416ffa72b83f", "matrix-widget-api": "1.11.0", "normalize.css": "^8.0.1", "observable-hooks": "^4.2.3", diff --git a/yarn.lock b/yarn.lock index 42e2369b..95137dbd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6913,7 +6913,7 @@ __metadata: livekit-client: "npm:2.11.2" lodash-es: "npm:^4.17.21" loglevel: "npm:^1.9.1" - matrix-js-sdk: "github:matrix-org/matrix-js-sdk#445981f1bc1e13f80b3061fb26d6f42f49161c24" + matrix-js-sdk: "github:matrix-org/matrix-js-sdk#64e27f5d3cdab6aafeb7c22f1264416ffa72b83f" matrix-widget-api: "npm:1.11.0" normalize.css: "npm:^8.0.1" observable-hooks: "npm:^4.2.3" @@ -9504,9 +9504,9 @@ __metadata: languageName: node linkType: hard -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#445981f1bc1e13f80b3061fb26d6f42f49161c24": +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#64e27f5d3cdab6aafeb7c22f1264416ffa72b83f": version: 37.3.0 - resolution: "matrix-js-sdk@https://github.com/matrix-org/matrix-js-sdk.git#commit=445981f1bc1e13f80b3061fb26d6f42f49161c24" + resolution: "matrix-js-sdk@https://github.com/matrix-org/matrix-js-sdk.git#commit=64e27f5d3cdab6aafeb7c22f1264416ffa72b83f" dependencies: "@babel/runtime": "npm:^7.12.5" "@matrix-org/matrix-sdk-crypto-wasm": "npm:^14.0.1" @@ -9523,7 +9523,7 @@ __metadata: sdp-transform: "npm:^2.14.1" unhomoglyph: "npm:^1.0.6" uuid: "npm:11" - checksum: 10c0/eaeb21abac46c999d2ac25958680ed4c283c9269380678a08815aaf577b8642254eb80de7dd3d69b9ccc71dd31cda51ad0393088d82b5d6e9f0240ee3e90e67e + checksum: 10c0/716f89b4fffc67ae42fad55f47b96792a0c49bd6d741410758dfbe1d0e4673097627b4c8f8a77063702cb41a5e0f7f0c5ff96c109ed332d3b3bc973f4d31f555 languageName: node linkType: hard From 8b63813e51db0240d680797d58fe958edd38156c Mon Sep 17 00:00:00 2001 From: Hugh Nimmo-Smith Date: Tue, 15 Apr 2025 10:41:47 +0100 Subject: [PATCH 100/225] Improve tagging of Release versions of platform specific embedded packages (#3203) * Refactor version calculation to use separate step and track version for each platform * Set tag for NPM and SNAPSHOT for AAR appropriately * Log output versions for each platform * Fix tarball name * Just use npm tag of `latest` or `other` * Attempt to fix AAR snapshot publishing --- .../workflows/publish-embedded-packages.yaml | 115 +++++++++++++----- embedded/android/lib/build.gradle.kts | 2 +- 2 files changed, 86 insertions(+), 31 deletions(-) diff --git a/.github/workflows/publish-embedded-packages.yaml b/.github/workflows/publish-embedded-packages.yaml index a84e302a..b09b3376 100644 --- a/.github/workflows/publish-embedded-packages.yaml +++ b/.github/workflows/publish-embedded-packages.yaml @@ -11,19 +11,48 @@ on: push: branches: [livekit] -env: - # We perform a dry run for all events except releases. - # This is to help make sure that we notice if the packaging process has become - # broken ahead of a release. - DRY_RUN: ${{ github.event_name != 'release' }} - # We should only use the hard coded test value for a dry run - VERSION: ${{ github.event_name == 'release' && github.event.release.tag_name || 'v0.0.0-pre.0' }} - jobs: + versioning: + name: Versioning + runs-on: ubuntu-latest + outputs: + DRY_RUN: ${{ steps.dry_run.outputs.DRY_RUN }} + PREFIXED_VERSION: ${{ steps.prefixed_version.outputs.PREFIXED_VERSION }} + UNPREFIXED_VERSION: ${{ steps.unprefixed_version.outputs.UNPREFIXED_VERSION }} + TAG: ${{ steps.tag.outputs.TAG }} + steps: + - name: Calculate VERSION + # We should only use the hard coded test value for a dry run + run: echo "VERSION=${{ github.event_name == 'release' && github.event.release.tag_name || 'v0.0.0-pre.0' }}" >> "$GITHUB_ENV" + - id: dry_run + name: Set DRY_RUN + # We perform a dry run for all events except releases. + # This is to help make sure that we notice if the packaging process has become + # broken ahead of a release. + run: echo "DRY_RUN=${{ github.event_name != 'release' }}" >> "$GITHUB_OUTPUT" + - id: prefixed_version + name: Set PREFIXED_VERSION + run: echo "PREFIXED_VERSION=${VERSION}" >> "$GITHUB_OUTPUT" + - id: unprefixed_version + name: Set UNPREFIXED_VERSION + # This just strips the leading character + run: echo "UNPREFIXED_VERSION=${VERSION:1}" >> "$GITHUB_OUTPUT" + - id: tag + # latest = a proper release + # other = anything else + name: Set tag + run: | + if [[ "${VERSION}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "TAG=latest" >> "$GITHUB_OUTPUT" + else + echo "TAG=other" >> "$GITHUB_OUTPUT" + fi + build_element_call: + needs: versioning uses: ./.github/workflows/build-element-call.yaml with: - vite_app_version: embedded-${{ github.event.release.tag_name || 'v0.0.0-pre.0' }} # Using ${{ env.VERSION }} here doesn't work + vite_app_version: embedded-${{ needs.versioning.outputs.PREFIXED_VERSION }} package: embedded secrets: SENTRY_ORG: ${{ secrets.SENTRY_ORG }} @@ -32,7 +61,7 @@ jobs: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} publish_tarball: - needs: build_element_call + needs: [build_element_call, versioning] if: always() name: Publish tarball runs-on: ubuntu-latest @@ -40,7 +69,7 @@ jobs: contents: write # required to upload release asset steps: - name: Determine filename - run: echo "FILENAME_PREFIX=element-call-embedded-${VERSION:1}" >> "$GITHUB_ENV" + run: echo "FILENAME_PREFIX=element-call-embedded-${{ needs.versioning.outputs.UNPREFIXED_VERSION }}" >> "$GITHUB_ENV" - name: 📥 Download built element-call artifact uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4 with: @@ -53,7 +82,7 @@ jobs: - name: Create Checksum run: find ${{ env.FILENAME_PREFIX }} -type f -print0 | sort -z | xargs -0 sha256sum | tee ${{ env.FILENAME_PREFIX }}.sha256 - name: Upload - if: ${{ env.DRY_RUN == 'false' }} + if: ${{ needs.versioning.outputs.DRY_RUN == 'false' }} uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2 with: files: | @@ -61,10 +90,12 @@ jobs: ${{ env.FILENAME_PREFIX }}.sha256 publish_npm: - needs: build_element_call + needs: [build_element_call, versioning] if: always() name: Publish NPM runs-on: ubuntu-latest + outputs: + ARTIFACT_VERSION: ${{ steps.artifact_version.outputs.ARTIFACT_VERSION }} permissions: contents: read id-token: write # required for the provenance flag on npm publish @@ -90,17 +121,23 @@ jobs: - name: Publish npm working-directory: embedded/web run: | - npm version ${{ env.VERSION }} --no-git-tag-version + npm version ${{ needs.versioning.outputs.PREFIXED_VERSION }} --no-git-tag-version echo "ARTIFACT_VERSION=$(jq '.version' --raw-output package.json)" >> "$GITHUB_ENV" - npm publish --provenance --access public ${{ env.DRY_RUN == 'true' && '--dry-run' || '' }} + npm publish --provenance --access public --tag ${{ needs.versioning.outputs.TAG }} ${{ needs.versioning.outputs.DRY_RUN == 'true' && '--dry-run' || '' }} env: NODE_AUTH_TOKEN: ${{ secrets.NPM_RELEASE_TOKEN }} + - id: artifact_version + name: Output artifact version + run: echo "ARTIFACT_VERSION=${{env.ARTIFACT_VERSION}}" >> "$GITHUB_OUTPUT" + publish_android: - needs: build_element_call + needs: [build_element_call, versioning] if: always() name: Publish Android AAR runs-on: ubuntu-latest + outputs: + ARTIFACT_VERSION: ${{ steps.artifact_version.outputs.ARTIFACT_VERSION }} permissions: contents: read steps: @@ -122,7 +159,13 @@ jobs: java-version: "17" - name: Get artifact version - run: echo "ARTIFACT_VERSION=${VERSION:1}" >> "$GITHUB_ENV" + # Anything that is not a final release will be tagged as a snapshot + run: | + if [[ "${{ needs.versioning.outputs.TAG }}" == "latest" ]]; then + echo "ARTIFACT_VERSION=${{ needs.versioning.outputs.UNPREFIXED_VERSION }}" >> "$GITHUB_ENV" + else + echo "ARTIFACT_VERSION=${{ needs.versioning.outputs.UNPREFIXED_VERSION }}-SNAPSHOT" >> "$GITHUB_ENV" + fi - name: Set version string run: sed -i "s/0.0.0/${{ env.ARTIFACT_VERSION }}/g" embedded/android/lib/src/main/kotlin/io/element/android/call/embedded/Version.kt @@ -135,13 +178,19 @@ jobs: ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_RELEASE_PASSWORD }} ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_SIGNING_KEY }} ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.GPG_SIGNING_KEY_PASSWORD }} - run: ./gradlew publishAndReleaseToMavenCentral --no-daemon ${{ env.DRY_RUN == 'true' && '--dry-run' || '' }} + run: ./gradlew publishToMavenCentral --no-daemon ${{ needs.versioning.outputs.DRY_RUN == 'true' && '--dry-run' || '' }} + + - id: artifact_version + name: Output artifact version + run: echo "ARTIFACT_VERSION=${{env.ARTIFACT_VERSION}}" >> "$GITHUB_OUTPUT" publish_ios: - needs: build_element_call + needs: [build_element_call, versioning] if: always() name: Publish SwiftPM Library runs-on: ubuntu-latest + outputs: + ARTIFACT_VERSION: ${{ steps.artifact_version.outputs.ARTIFACT_VERSION }} permissions: contents: read steps: @@ -169,7 +218,7 @@ jobs: run: rsync -a --delete --exclude .git element-call/embedded/ios/ element-call-swift - name: Get artifact version - run: echo "ARTIFACT_VERSION=${VERSION:1}" >> "$GITHUB_ENV" + run: echo "ARTIFACT_VERSION=${{ needs.versioning.outputs.UNPREFIXED_VERSION }}" >> "$GITHUB_ENV" - name: Set version string run: sed -i "s/0.0.0/${{ env.ARTIFACT_VERSION }}/g" element-call-swift/Sources/EmbeddedElementCall/EmbeddedElementCall.swift @@ -184,27 +233,33 @@ jobs: git config --global user.email "ci@element.io" git config --global user.name "Element CI" git add -A - git commit -am "Release ${{ env.VERSION }}" + git commit -am "Release ${{ needs.versioning.outputs.PREFIXED_VERSION }}" git tag -a ${{ env.ARTIFACT_VERSION }} -m "${{ github.event.release.html_url }}" - name: Push working-directory: element-call-swift run: | - git push --tags ${{ env.DRY_RUN == 'true' && '--dry-run' || '' }} + git push --tags ${{ needs.versioning.outputs.DRY_RUN == 'true' && '--dry-run' || '' }} + + - id: artifact_version + name: Output artifact version + run: echo "ARTIFACT_VERSION=${{env.ARTIFACT_VERSION}}" >> "$GITHUB_OUTPUT" release_notes: - needs: [publish_npm, publish_android, publish_ios] + needs: [versioning, publish_npm, publish_android, publish_ios] if: always() name: Update release notes runs-on: ubuntu-latest permissions: contents: write # to update release notes steps: - - name: Get artifact version - run: echo "ARTIFACT_VERSION=${VERSION:1}" >> "$GITHUB_ENV" - + - name: Log versions + run: | + echo "NPM: ${{ needs.publish_npm.outputs.ARTIFACT_VERSION }}" + echo "Android: ${{ needs.publish_android.outputs.ARTIFACT_VERSION }}" + echo "iOS: ${{ needs.publish_ios.outputs.ARTIFACT_VERSION }}" - name: Add release notes - if: ${{ env.DRY_RUN == 'false' }} + if: ${{ needs.versioning.outputs.DRY_RUN == 'false' }} uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2 with: append_body: true @@ -218,19 +273,19 @@ jobs: ### NPM ``` - npm install @element-hq/element-call-embedded@${{ env.ARTIFACT_VERSION }} + npm install @element-hq/element-call-embedded@${{ needs.publish_npm.outputs.ARTIFACT_VERSION }} ``` ### Android AAR ``` dependencies { - implementation 'io.element.android:element-call-embedded:${{ env.ARTIFACT_VERSION }}' + implementation 'io.element.android:element-call-embedded:${{ needs.publish_android.outputs.ARTIFACT_VERSION }}' } ``` ### SwiftPM ``` - .package(url: "https://github.com/element-hq/element-call-swift.git", from: "${{ env.ARTIFACT_VERSION }}") + .package(url: "https://github.com/element-hq/element-call-swift.git", from: "${{ needs.publish_ios.outputs.ARTIFACT_VERSION }}") ``` diff --git a/embedded/android/lib/build.gradle.kts b/embedded/android/lib/build.gradle.kts index f4234faa..59039206 100644 --- a/embedded/android/lib/build.gradle.kts +++ b/embedded/android/lib/build.gradle.kts @@ -27,7 +27,7 @@ android { } mavenPublishing { - publishToMavenCentral(SonatypeHost.S01) + publishToMavenCentral(SonatypeHost.S01, automaticRelease = true) signAllPublications() From a839cde34fdb4c36a8231d8b01557f11aa6ac3b1 Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Tue, 15 Apr 2025 12:10:48 +0200 Subject: [PATCH 101/225] Add PR- label requirement action (#3171) * Add PR- label requirement action * also add dependencies * review --- .github/workflows/changelog-label.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/workflows/changelog-label.yml diff --git a/.github/workflows/changelog-label.yml b/.github/workflows/changelog-label.yml new file mode 100644 index 00000000..6fdfd1e6 --- /dev/null +++ b/.github/workflows/changelog-label.yml @@ -0,0 +1,14 @@ +name: PR changelog label + +on: + pull_request_target: + types: [labeled, unlabeled, opened] +jobs: + pr-changelog-label: + runs-on: ubuntu-latest + steps: + - uses: yogevbd/enforce-label-action@2.1.0 + with: + REQUIRED_LABELS_ANY: "PR-Bug-Fix,PR-Documentation,PR-Task,PR-Feature,PR-Improvement,PR-Developer-Experience,dependencies" + REQUIRED_LABELS_ANY_DESCRIPTION: "Select at least one 'PR-' label" + BANNED_LABELS: "banned" From 4694354f695f73dbf44c536b6caa671477ab256b Mon Sep 17 00:00:00 2001 From: fkwp Date: Tue, 15 Apr 2025 17:53:27 +0200 Subject: [PATCH 102/225] add informatino about required synapse listeners --- docs/self-hosting.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/self-hosting.md b/docs/self-hosting.md index 7a515930..5fdbb143 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -63,6 +63,11 @@ rc_delayed_event_mgmt: burst_count: 20 ``` +As a prerequisites for the +[Matrix Livekit JWT auth service](https://github.com/element-hq/lk-jwt-service) +make sure that your Synapse server has either a `federation` or `openid` +[listener configured](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#listeners). + ### MatrixRTC Backend In order to **guarantee smooth operation** of Element Call MatrixRTC backend is From 78a88a9e0b3b824ff5cf856714a6e7bacd47072e Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Wed, 16 Apr 2025 19:39:08 +0200 Subject: [PATCH 103/225] Add a .links.temp-disabled.yaml state explicitly for when the pre-commit hook disabled the yaml file. otherwise we end up with a linked repo after every commit. (#3210) --- .githooks/post-commit | 8 ++++---- .githooks/pre-commit | 3 +-- .gitignore | 1 + 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.githooks/post-commit b/.githooks/post-commit index 96e19a17..467799bd 100755 --- a/.githooks/post-commit +++ b/.githooks/post-commit @@ -1,10 +1,10 @@ #!/usr/bin/sh -FILE=.links.disabled.yaml +FILE=.links.temp-disabled.yaml if test -f "$FILE"; then - # echo "$FILE exists. -> moving to .links.disabled.yaml" - mv .links.disabled.yaml .links.yaml - # echo "running yarn" + # Only do the post-commit hook if the file was temp-disabled by the pre-commit hook. + # Otherwise linking was actively (`yarn links:disable`) disabled and this hook should noop. + mv .links.temp-disabled.yaml .links.yaml yarnLog=$(yarn) echo "[yarn-linker] The post-commit hook has re-enabled .links.yaml." exit 1 diff --git a/.githooks/pre-commit b/.githooks/pre-commit index f8098203..435d75f1 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -2,8 +2,7 @@ FILE=".links.yaml" if test -f "$FILE"; then - # echo "$FILE exists. -> moving to .links.disabled.yaml" - mv .links.yaml .links.disabled.yaml + mv .links.yaml .links.temp-disabled.yaml # echo "running yarn" x=$(yarn) y=$(git add yarn.lock) diff --git a/.gitignore b/.gitignore index cc594f8a..d15cee0b 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ yarn-error.log !/.yarn/versions /.links.yaml /.links.disabled.yaml +/.links.temp-disabled.yaml # Playwright /test-results/ From 2cf2e090f6eaab55ff978571f86060894d30ba39 Mon Sep 17 00:00:00 2001 From: fkwp Date: Thu, 17 Apr 2025 16:31:52 +0200 Subject: [PATCH 104/225] Update docs/self-hosting.md Co-authored-by: Robin --- docs/self-hosting.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/self-hosting.md b/docs/self-hosting.md index 5fdbb143..0e3e8a82 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -63,8 +63,8 @@ rc_delayed_event_mgmt: burst_count: 20 ``` -As a prerequisites for the -[Matrix Livekit JWT auth service](https://github.com/element-hq/lk-jwt-service) +As a prerequisite for the +[Matrix LiveKit JWT auth service](https://github.com/element-hq/lk-jwt-service) make sure that your Synapse server has either a `federation` or `openid` [listener configured](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#listeners). From e751248fee3a549b684448ed304b75e2610d933e Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 22 Apr 2025 16:31:44 +0200 Subject: [PATCH 105/225] Revert livekit-client to 2.10.0 Closes https://github.com/element-hq/element-call/issues/3219. --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 7c2edc31..fdeda543 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "i18next-parser": "^9.1.0", "jsdom": "^26.0.0", "knip": "^5.27.2", - "livekit-client": "2.11.2", + "livekit-client": "2.10.0", "lodash-es": "^4.17.21", "loglevel": "^1.9.1", "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#64e27f5d3cdab6aafeb7c22f1264416ffa72b83f", diff --git a/yarn.lock b/yarn.lock index 95137dbd..cbcea660 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6910,7 +6910,7 @@ __metadata: i18next-parser: "npm:^9.1.0" jsdom: "npm:^26.0.0" knip: "npm:^5.27.2" - livekit-client: "npm:2.11.2" + livekit-client: "npm:2.10.0" lodash-es: "npm:^4.17.21" loglevel: "npm:^1.9.1" matrix-js-sdk: "github:matrix-org/matrix-js-sdk#64e27f5d3cdab6aafeb7c22f1264416ffa72b83f" @@ -9280,9 +9280,9 @@ __metadata: languageName: node linkType: hard -"livekit-client@npm:2.11.2": - version: 2.11.2 - resolution: "livekit-client@npm:2.11.2" +"livekit-client@npm:2.10.0": + version: 2.10.0 + resolution: "livekit-client@npm:2.10.0" dependencies: "@livekit/mutex": "npm:1.1.1" "@livekit/protocol": "npm:1.36.1" @@ -9293,7 +9293,7 @@ __metadata: tslib: "npm:2.8.1" typed-emitter: "npm:^2.1.0" webrtc-adapter: "npm:^9.0.1" - checksum: 10c0/03a184f3a4f81beefb47a78adb37d3ba3b95a5d1f01e2ebbb83fb3769a120f6b8726ee8ccd96eb634164eeec508850cf05d40e2330fe7c1eda0e3d7f481561f7 + checksum: 10c0/bc5d1d1e08576da3356f567836090a58dfad9b2d9ca2280584acf31676949a88d9526940ab10a9b6cf79545a49f82678cb0665f65851628e6148a9d559cacc90 languageName: node linkType: hard From b7b3fde2023eef04e8bf859f3790696a8bb6ee4b Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 22 Apr 2025 18:00:41 +0200 Subject: [PATCH 106/225] Upgrade LiveKit track processors --- package.json | 2 +- yarn.lock | 28 ++++++++++------------------ 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index 413ae6cd..f44264b3 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "@livekit/components-core": "^0.12.0", "@livekit/components-react": "^2.0.0", "@livekit/protocol": "^1.33.0", - "@livekit/track-processors": "^0.3.3", + "@livekit/track-processors": "^0.5.5", "@mediapipe/tasks-vision": "^0.10.18", "@opentelemetry/api": "^1.4.0", "@opentelemetry/core": "^1.25.1", diff --git a/yarn.lock b/yarn.lock index 165e6f57..b23ad6ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2536,15 +2536,14 @@ __metadata: languageName: node linkType: hard -"@livekit/track-processors@npm:^0.3.3": - version: 0.3.3 - resolution: "@livekit/track-processors@npm:0.3.3" +"@livekit/track-processors@npm:^0.5.5": + version: 0.5.5 + resolution: "@livekit/track-processors@npm:0.5.5" dependencies: - "@mediapipe/holistic": "npm:0.5.1675471629" - "@mediapipe/tasks-vision": "npm:0.10.9" + "@mediapipe/tasks-vision": "npm:0.10.14" peerDependencies: livekit-client: ^1.12.0 || ^2.1.0 - checksum: 10c0/a33478a340f89ae489ac2e1dcfbc1c69744943301c5f3bd22f604b63b188ef0feebe065d4cf084fcb53d9766d10c7655f8045e19549772471d52d3a976c36778 + checksum: 10c0/b86737c4ce6b93c714dfc814c997d07f1d40b0869b5e269b28e00034a3c06da811d9117c4914d8a2706ac760be31f2e9d0705108c07b29f4bbb4626dcd41ed64 languageName: node linkType: hard @@ -2562,17 +2561,10 @@ __metadata: languageName: node linkType: hard -"@mediapipe/holistic@npm:0.5.1675471629": - version: 0.5.1675471629 - resolution: "@mediapipe/holistic@npm:0.5.1675471629" - checksum: 10c0/241cacfbff10b6418a815dfb24c36d77c626f5e10c60045a3d8cdb9f89c6e346e0d356dcfe1e8bbc4d00040983b4bc426e802a45af3f7142554afda3239ff8fc - languageName: node - linkType: hard - -"@mediapipe/tasks-vision@npm:0.10.9": - version: 0.10.9 - resolution: "@mediapipe/tasks-vision@npm:0.10.9" - checksum: 10c0/38a3112bf5f073e6b15f3a1556c4d628371f1068cbe16aabeae288f43be62f8c17f4ae66590bda11be6a9aeb098736c85d102751277db5bb4b881516a23e43a5 +"@mediapipe/tasks-vision@npm:0.10.14": + version: 0.10.14 + resolution: "@mediapipe/tasks-vision@npm:0.10.14" + checksum: 10c0/dea1d094153fcb91e76d1a266b6a79baf9cbdd106a786adc0236ded87099b5242c89e0e5b73a3f5d57d7e23ff657dd37f40b9261e12a330762041cd9549fadcc languageName: node linkType: hard @@ -6902,7 +6894,7 @@ __metadata: "@livekit/components-core": "npm:^0.12.0" "@livekit/components-react": "npm:^2.0.0" "@livekit/protocol": "npm:^1.33.0" - "@livekit/track-processors": "npm:^0.3.3" + "@livekit/track-processors": "npm:^0.5.5" "@mediapipe/tasks-vision": "npm:^0.10.18" "@opentelemetry/api": "npm:^1.4.0" "@opentelemetry/core": "npm:^1.25.1" From 7142122a742202392f8ddfc53998acd265452698 Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 22 Apr 2025 18:05:31 +0200 Subject: [PATCH 107/225] Dedupe Mediapipe dependencies --- package.json | 1 + yarn.lock | 7 ------- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/package.json b/package.json index f44264b3..f091280e 100644 --- a/package.json +++ b/package.json @@ -134,6 +134,7 @@ }, "resolutions": { "@livekit/components-core/rxjs": "^7.8.1", + "@livekit/track-processors/@mediapipe/tasks-vision": "^0.10.18", "matrix-widget-api": "1.11.0" }, "packageManager": "yarn@4.7.0" diff --git a/yarn.lock b/yarn.lock index b23ad6ba..703c9ebf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2561,13 +2561,6 @@ __metadata: languageName: node linkType: hard -"@mediapipe/tasks-vision@npm:0.10.14": - version: 0.10.14 - resolution: "@mediapipe/tasks-vision@npm:0.10.14" - checksum: 10c0/dea1d094153fcb91e76d1a266b6a79baf9cbdd106a786adc0236ded87099b5242c89e0e5b73a3f5d57d7e23ff657dd37f40b9261e12a330762041cd9549fadcc - languageName: node - linkType: hard - "@mediapipe/tasks-vision@npm:^0.10.18": version: 0.10.21 resolution: "@mediapipe/tasks-vision@npm:0.10.21" From 63ad4a3ad316eb4e871461f890709398d2f698ba Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 22 Apr 2025 18:32:01 +0200 Subject: [PATCH 108/225] Get blurring working again --- src/livekit/BlurBackgroundTransformer.ts | 5 +++++ src/livekit/TrackProcessorContext.tsx | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/livekit/BlurBackgroundTransformer.ts b/src/livekit/BlurBackgroundTransformer.ts index 51b6a536..d57524fc 100644 --- a/src/livekit/BlurBackgroundTransformer.ts +++ b/src/livekit/BlurBackgroundTransformer.ts @@ -54,9 +54,14 @@ export class BlurBackgroundTransformer extends BackgroundTransformer { delegate: "GPU", ...this.options.segmenterOptions, }, + canvas: this.canvas, runningMode: "VIDEO", outputCategoryMask: true, outputConfidenceMasks: false, }); + + if (this.options.blurRadius) { + this.gl?.setBlurRadius(this.options.blurRadius); + } } } diff --git a/src/livekit/TrackProcessorContext.tsx b/src/livekit/TrackProcessorContext.tsx index 8edec4f5..ba94e257 100644 --- a/src/livekit/TrackProcessorContext.tsx +++ b/src/livekit/TrackProcessorContext.tsx @@ -90,7 +90,7 @@ export const ProcessorProvider: FC = ({ children }) => { try { if (!blur.current) { blur.current = new ProcessorWrapper( - new BlurBackgroundTransformer({}), + new BlurBackgroundTransformer({ blurRadius: 15 }), "background-blur", ); } From 3fc4cc908e8d7e1c605d5996ab1a6c0724f0ae8b Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 22 Apr 2025 19:19:40 +0200 Subject: [PATCH 109/225] Cleanup + use a better check for blurring support --- src/livekit/TrackProcessorContext.tsx | 89 +++++++++------------------ src/livekit/useLiveKit.ts | 2 +- src/room/LobbyView.tsx | 2 +- src/settings/SettingsModal.tsx | 7 +-- 4 files changed, 33 insertions(+), 67 deletions(-) diff --git a/src/livekit/TrackProcessorContext.tsx b/src/livekit/TrackProcessorContext.tsx index ba94e257..b310e7b3 100644 --- a/src/livekit/TrackProcessorContext.tsx +++ b/src/livekit/TrackProcessorContext.tsx @@ -7,18 +7,10 @@ Please see LICENSE in the repository root for full details. import { ProcessorWrapper, + supportsBackgroundProcessors, type BackgroundOptions, } from "@livekit/track-processors"; -import { - createContext, - type FC, - useCallback, - useContext, - useEffect, - useRef, - useState, -} from "react"; -import { logger } from "matrix-js-sdk/src/logger"; +import { createContext, type FC, useContext, useEffect, useMemo } from "react"; import { type LocalVideoTrack } from "livekit-client"; import { @@ -30,23 +22,23 @@ import { BlurBackgroundTransformer } from "./BlurBackgroundTransformer"; type ProcessorState = { supported: boolean | undefined; processor: undefined | ProcessorWrapper; - /** - * Call this method to try to initialize a processor. - * This only needs to happen if supported is undefined. - * If the backgroundBlur setting is set to true this does not need to be called - * and the processorState.supported will update automatically to the correct value. - */ - checkSupported: () => void; }; + const ProcessorContext = createContext(undefined); -export const useTrackProcessor = (): ProcessorState | undefined => - useContext(ProcessorContext); +export function useTrackProcessor(): ProcessorState { + const state = useContext(ProcessorContext); + if (state === undefined) + throw new Error( + "useTrackProcessor must be used within a ProcessorProvider", + ); + return state; +} export const useTrackProcessorSync = ( videoTrack: LocalVideoTrack | null, ): void => { - const { processor } = useTrackProcessor() || {}; + const { processor } = useTrackProcessor(); useEffect(() => { if (!videoTrack) return; if (processor && !videoTrack.getProcessor()) { @@ -61,53 +53,28 @@ export const useTrackProcessorSync = ( interface Props { children: JSX.Element; } + export const ProcessorProvider: FC = ({ children }) => { // The setting the user wants to have const [blurActivated] = useSetting(backgroundBlurSettings); - - // If `ProcessorState.supported` is undefined the user can activate that we want - // to have it at least checked (this is useful to show the settings menu properly) - // We dont want to try initializing the blur if the user is not even looking at the setting - const [shouldCheckSupport, setShouldCheckSupport] = useState(blurActivated); - - // Cache the processor so we only need to initialize it once. - const blur = useRef | undefined>( - undefined, + const supported = useMemo(() => supportsBackgroundProcessors(), []); + const blur = useMemo( + () => + new ProcessorWrapper( + new BlurBackgroundTransformer({ blurRadius: 15 }), + "background-blur", + ), + [], ); - const checkSupported = useCallback(() => { - setShouldCheckSupport(true); - }, []); // This is the actual state exposed through the context - const [processorState, setProcessorState] = useState(() => ({ - supported: false, - processor: undefined, - checkSupported, - })); - - useEffect(() => { - if (!shouldCheckSupport) return; - try { - if (!blur.current) { - blur.current = new ProcessorWrapper( - new BlurBackgroundTransformer({ blurRadius: 15 }), - "background-blur", - ); - } - setProcessorState({ - checkSupported, - supported: true, - processor: blurActivated ? blur.current : undefined, - }); - } catch (e) { - setProcessorState({ - checkSupported, - supported: false, - processor: undefined, - }); - logger.error("disable background blur", e); - } - }, [blurActivated, checkSupported, shouldCheckSupport]); + const processorState = useMemo( + () => ({ + supported, + processor: supported && blurActivated ? blur : undefined, + }), + [supported, blurActivated, blur], + ); return ( diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLiveKit.ts index c9bfd78e..f214a203 100644 --- a/src/livekit/useLiveKit.ts +++ b/src/livekit/useLiveKit.ts @@ -88,7 +88,7 @@ export function useLiveKit( const devices = useMediaDevices(); const initialDevices = useRef(devices); - const { processor } = useTrackProcessor() || {}; + const { processor } = useTrackProcessor(); const initialProcessor = useInitial(() => processor); const roomOptions = useMemo( (): RoomOptions => ({ diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index f3739175..e6bf5362 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -120,7 +120,7 @@ export const LobbyView: FC = ({ muteStates.audio.enabled && { deviceId: devices.audioInput.selectedId }, ); - const { processor } = useTrackProcessor() || {}; + const { processor } = useTrackProcessor(); const initialProcessor = useInitial(() => processor); const localTrackOptions = useMemo( diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 44d06116..b24674dc 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -5,10 +5,10 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE in the repository root for full details. */ -import { type FC, type ReactNode, useEffect, useState } from "react"; +import { type FC, type ReactNode, useState } from "react"; import { useTranslation } from "react-i18next"; import { type MatrixClient } from "matrix-js-sdk"; -import { Root as Form ,Separator} from "@vector-im/compound-web"; +import { Root as Form, Separator } from "@vector-im/compound-web"; import { type Room as LivekitRoom } from "livekit-client"; import { Modal } from "../Modal"; @@ -69,8 +69,7 @@ export const SettingsModal: FC = ({ // Generate a `Checkbox` input to turn blur on or off. const BlurCheckbox: React.FC = (): ReactNode => { - const { supported, checkSupported } = useTrackProcessor() || {}; - useEffect(() => checkSupported?.(), [checkSupported]); + const { supported } = useTrackProcessor(); const [blurActive, setBlurActive] = useSetting(backgroundBlurSetting); From 78a41c09ded0ee4735d6e72cb89603f9cccf28d8 Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Tue, 22 Apr 2025 21:24:09 +0200 Subject: [PATCH 110/225] Fix MatrixRTC js-sdk logs in rageshakes (#3226) --- package.json | 2 +- src/settings/rageshake.ts | 5 ----- yarn.lock | 14 +++++++------- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index fdeda543..07289035 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "livekit-client": "2.10.0", "lodash-es": "^4.17.21", "loglevel": "^1.9.1", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#64e27f5d3cdab6aafeb7c22f1264416ffa72b83f", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#19b1b901f575755d29d1fe03ca48cbf7c1cae05c", "matrix-widget-api": "1.11.0", "normalize.css": "^8.0.1", "observable-hooks": "^4.2.3", diff --git a/src/settings/rageshake.ts b/src/settings/rageshake.ts index 21ed5956..6c1a0f61 100644 --- a/src/settings/rageshake.ts +++ b/src/settings/rageshake.ts @@ -473,11 +473,6 @@ export async function init(): Promise { // configure loglevel based loggers: setLogExtension(logger, global.mx_rage_logger.log); - // these are the child/prefixed loggers we want to capture from js-sdk - // there doesn't seem to be an easy way to capture all children - ["MatrixRTCSession", "MatrixRTCSessionManager"].forEach((loggerName) => { - setLogExtension(logger.getChild(loggerName), global.mx_rage_logger.log); - }); // intercept console logging so that we can get matrix_sdk logs: // this is nasty, but no logging hooks are provided diff --git a/yarn.lock b/yarn.lock index cbcea660..4a41df01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6913,7 +6913,7 @@ __metadata: livekit-client: "npm:2.10.0" lodash-es: "npm:^4.17.21" loglevel: "npm:^1.9.1" - matrix-js-sdk: "github:matrix-org/matrix-js-sdk#64e27f5d3cdab6aafeb7c22f1264416ffa72b83f" + matrix-js-sdk: "github:matrix-org/matrix-js-sdk#19b1b901f575755d29d1fe03ca48cbf7c1cae05c" matrix-widget-api: "npm:1.11.0" normalize.css: "npm:^8.0.1" observable-hooks: "npm:^4.2.3" @@ -9350,7 +9350,7 @@ __metadata: languageName: node linkType: hard -"loglevel@npm:^1.7.1, loglevel@npm:^1.9.1, loglevel@npm:^1.9.2": +"loglevel@npm:^1.9.1, loglevel@npm:^1.9.2": version: 1.9.2 resolution: "loglevel@npm:1.9.2" checksum: 10c0/1e317fa4648fe0b4a4cffef6de037340592cee8547b07d4ce97a487abe9153e704b98451100c799b032c72bb89c9366d71c9fb8192ada8703269263ae77acdc7 @@ -9504,9 +9504,9 @@ __metadata: languageName: node linkType: hard -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#64e27f5d3cdab6aafeb7c22f1264416ffa72b83f": - version: 37.3.0 - resolution: "matrix-js-sdk@https://github.com/matrix-org/matrix-js-sdk.git#commit=64e27f5d3cdab6aafeb7c22f1264416ffa72b83f" +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#19b1b901f575755d29d1fe03ca48cbf7c1cae05c": + version: 37.4.0 + resolution: "matrix-js-sdk@https://github.com/matrix-org/matrix-js-sdk.git#commit=19b1b901f575755d29d1fe03ca48cbf7c1cae05c" dependencies: "@babel/runtime": "npm:^7.12.5" "@matrix-org/matrix-sdk-crypto-wasm": "npm:^14.0.1" @@ -9515,7 +9515,7 @@ __metadata: bs58: "npm:^6.0.0" content-type: "npm:^1.0.4" jwt-decode: "npm:^4.0.0" - loglevel: "npm:^1.7.1" + loglevel: "npm:^1.9.2" matrix-events-sdk: "npm:0.0.1" matrix-widget-api: "npm:^1.10.0" oidc-client-ts: "npm:^3.0.1" @@ -9523,7 +9523,7 @@ __metadata: sdp-transform: "npm:^2.14.1" unhomoglyph: "npm:^1.0.6" uuid: "npm:11" - checksum: 10c0/716f89b4fffc67ae42fad55f47b96792a0c49bd6d741410758dfbe1d0e4673097627b4c8f8a77063702cb41a5e0f7f0c5ff96c109ed332d3b3bc973f4d31f555 + checksum: 10c0/68a30a113059ba052b2e66502abcd9805f9a18a1bfd1d209203d728b36508af257a57e6248fb237c7018c81bfbe1ec78fa17aea8968c8af0729ea935398dcf8b languageName: node linkType: hard From a1d6eef12a9ea3877cf942a0adb81fc6cf98037e Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Wed, 23 Apr 2025 09:22:54 +0200 Subject: [PATCH 111/225] Set `ratchetWindowSize` to > 0 enable rachet compatibility. (#3224) --- src/e2ee/matrixKeyProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/e2ee/matrixKeyProvider.ts b/src/e2ee/matrixKeyProvider.ts index c5f6c879..9b190ed8 100644 --- a/src/e2ee/matrixKeyProvider.ts +++ b/src/e2ee/matrixKeyProvider.ts @@ -16,7 +16,7 @@ export class MatrixKeyProvider extends BaseKeyProvider { private rtcSession?: MatrixRTCSession; public constructor() { - super({ ratchetWindowSize: 0, keyringSize: 256 }); + super({ ratchetWindowSize: 10, keyringSize: 256 }); } public setRTCSession(rtcSession: MatrixRTCSession): void { From a6696c2304cac57110c6a12039612b4c09feb429 Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 23 Apr 2025 11:59:13 +0200 Subject: [PATCH 112/225] Return to latest livekit-client version (2.11.3) This latest release of livekit-client fixes the regression observed in https://github.com/element-hq/element-call/issues/3219. --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 07289035..3730004b 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "i18next-parser": "^9.1.0", "jsdom": "^26.0.0", "knip": "^5.27.2", - "livekit-client": "2.10.0", + "livekit-client": "^2.11.3", "lodash-es": "^4.17.21", "loglevel": "^1.9.1", "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#19b1b901f575755d29d1fe03ca48cbf7c1cae05c", diff --git a/yarn.lock b/yarn.lock index 4a41df01..70de0fc6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6910,7 +6910,7 @@ __metadata: i18next-parser: "npm:^9.1.0" jsdom: "npm:^26.0.0" knip: "npm:^5.27.2" - livekit-client: "npm:2.10.0" + livekit-client: "npm:^2.11.3" lodash-es: "npm:^4.17.21" loglevel: "npm:^1.9.1" matrix-js-sdk: "github:matrix-org/matrix-js-sdk#19b1b901f575755d29d1fe03ca48cbf7c1cae05c" @@ -9280,9 +9280,9 @@ __metadata: languageName: node linkType: hard -"livekit-client@npm:2.10.0": - version: 2.10.0 - resolution: "livekit-client@npm:2.10.0" +"livekit-client@npm:^2.11.3": + version: 2.11.3 + resolution: "livekit-client@npm:2.11.3" dependencies: "@livekit/mutex": "npm:1.1.1" "@livekit/protocol": "npm:1.36.1" @@ -9293,7 +9293,7 @@ __metadata: tslib: "npm:2.8.1" typed-emitter: "npm:^2.1.0" webrtc-adapter: "npm:^9.0.1" - checksum: 10c0/bc5d1d1e08576da3356f567836090a58dfad9b2d9ca2280584acf31676949a88d9526940ab10a9b6cf79545a49f82678cb0665f65851628e6148a9d559cacc90 + checksum: 10c0/d56444f31c107b46ccd5532038ac77bd21038042910619008267c17894f1d3f054262ae2354d89df6fe0ba325aba01909b0612ad4c290906487c40d91641f6e4 languageName: node linkType: hard From 09177b90d3a9abdf1eec9e76c9e1f10fc9fa1ab1 Mon Sep 17 00:00:00 2001 From: fkwp Date: Thu, 24 Apr 2025 23:40:32 +0200 Subject: [PATCH 113/225] added matrix-rtc server to route jwt and sfu traffic. renamed file to dev_nginx.conf --- ...ls_localhost_nginx.conf => dev_nginx.conf} | 49 ++++++++++++++++++- 1 file changed, 47 insertions(+), 2 deletions(-) rename backend/{tls_localhost_nginx.conf => dev_nginx.conf} (53%) diff --git a/backend/tls_localhost_nginx.conf b/backend/dev_nginx.conf similarity index 53% rename from backend/tls_localhost_nginx.conf rename to backend/dev_nginx.conf index 2a593210..e4d665d6 100644 --- a/backend/tls_localhost_nginx.conf +++ b/backend/dev_nginx.conf @@ -16,9 +16,9 @@ server { # currently rely for local development environment on deprecated config.json # setting for livekit_service_url location /.well-known/matrix/client { - return 200 '{"m.homeserver": {"base_url": "http://synapse.localhost:8008"}, "org.matrix.msc4143.rtc_foci": [{"type": "livekit", "livekit_service_url": "http://localhost:8080"}]}'; - default_type application/json; add_header Access-Control-Allow-Origin *; + return 200 '{"m.homeserver": {"base_url": "http://synapse.localhost:8008"}, "org.matrix.msc4143.rtc_foci": [{"type": "livekit", "livekit_service_url": "http://matrix-rtc.localhost:8008/livekit/jwt"}]}'; + default_type application/json; } # Reverse proxy for Matrix Synapse Homeserver @@ -38,3 +38,48 @@ server { error_page 500 502 503 504 /50x.html; } + +server { + listen 80; + listen [::]:80; + listen 443 ssl; + listen 8448 ssl; + listen [::]:443 ssl; + listen [::]:8448 ssl; + server_name matrix-rtc.localhost; + ssl_certificate /root/ssl/cert.pem; + ssl_certificate_key /root/ssl/key.pem; + + + location ^~ /livekit/jwt/ { + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # JWT Service running at port 8080 + proxy_pass http://auth-server:8080/; + } + + location ^~ /livekit/sfu/ { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_send_timeout 120; + proxy_read_timeout 120; + proxy_buffering off; + + proxy_set_header Accept-Encoding gzip; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + # LiveKit SFU websocket connection running at port 7880 + proxy_pass http://livekit-sfu:7880/; + } + + error_page 500 502 503 504 /50x.html; + +} From 1ae876de26260fad6f14b2f8b92b8ee52fbb711b Mon Sep 17 00:00:00 2001 From: fkwp Date: Thu, 24 Apr 2025 23:40:58 +0200 Subject: [PATCH 114/225] remove legacy livekit key --- config/config.devenv.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/config/config.devenv.json b/config/config.devenv.json index cebca705..b0e38ee4 100644 --- a/config/config.devenv.json +++ b/config/config.devenv.json @@ -5,9 +5,6 @@ "server_name": "synapse.localhost" } }, - "livekit": { - "livekit_service_url": "http://localhost:8009" - }, "features": { "feature_use_device_session_member_events": true }, From 8ad1d60975303de635dfd53b397ce6abc85ff83f Mon Sep 17 00:00:00 2001 From: fkwp Date: Thu, 24 Apr 2025 23:45:53 +0200 Subject: [PATCH 115/225] remove NOTE wrt. legacy livekit key from README.md --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 8ac32d80..4d843d55 100644 --- a/README.md +++ b/README.md @@ -192,11 +192,6 @@ To use it, create a local config by, e.g., The `config.devenv.json` config should work with the backend development environment as outlined in the next section out of box. -> [!NOTE] -> Be aware, that this `config.devenv.json` is exposing a deprecated fallback -> LiveKit config key. If the homeserver advertises SFU backend via -> `.well-known/matrix/client` this has precedence. - You're now ready to launch the development server: ```sh From b61bed019778ccea72acfd27eb08be695f4920f6 Mon Sep 17 00:00:00 2001 From: fkwp Date: Thu, 24 Apr 2025 23:46:45 +0200 Subject: [PATCH 116/225] cleanup used ports, reflect endpoint routing of JWT service and SFU websocket connection --- dev-backend-docker-compose.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dev-backend-docker-compose.yml b/dev-backend-docker-compose.yml index 8d70bfc2..38853054 100644 --- a/dev-backend-docker-compose.yml +++ b/dev-backend-docker-compose.yml @@ -7,7 +7,7 @@ services: hostname: auth-server environment: - LK_JWT_PORT=8080 - - LIVEKIT_URL=ws://localhost:7880 + - LIVEKIT_URL=ws://matrix-rtc.localhost/livekit/sfu - LIVEKIT_KEY=devkey - LIVEKIT_SECRET=secret # If the configured homeserver runs on localhost, it'll probably be using @@ -18,12 +18,13 @@ services: condition: on-failure ports: # HOST_PORT:CONTAINER_PORT - - 8009:8080 + - 8080:8080 networks: - ecbackend livekit: image: livekit/livekit-server:latest + hostname: livekit-sfu command: --dev --config /etc/livekit.yaml restart: unless-stopped # The SFU seems to work far more reliably when we let it share the host @@ -85,11 +86,13 @@ services: hostname: synapse.localhost image: nginx:latest volumes: - - ./backend/tls_localhost_nginx.conf:/etc/nginx/conf.d/default.conf:Z + - ./backend/dev_nginx.conf:/etc/nginx/conf.d/default.conf:Z - ./backend/tls_localhost_key.pem:/root/ssl/key.pem:Z - ./backend/tls_localhost_cert.pem:/root/ssl/cert.pem:Z ports: # HOST_PORT:CONTAINER_PORT + - "80:80" + - "443:443" - "8008:80" - "4443:443" depends_on: From 9416c41d6215a70caaf4cc76fb854fa5dee68bb4 Mon Sep 17 00:00:00 2001 From: fkwp Date: Fri, 25 Apr 2025 00:09:39 +0200 Subject: [PATCH 117/225] added note about certificate exceptions --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 4d843d55..db7cc43f 100644 --- a/README.md +++ b/README.md @@ -225,6 +225,13 @@ yarn backend # podman-compose -f dev-backend-docker-compose.yml up ``` +> [!NOTE] +> To ensure your local development frontend functions properly, you’ll need to add +> certificate exceptions in your browser for both `https://localhost:3000` and +> `https://synapse.localhost/.well-known/matrix/client`. The easiest way to do this +> is to simply copy and paste each URL into your browser’s address bar and follow +> the prompts to add the exception. + ### Playwright tests Our Playwright tests run automatically as part of our CI along with our other From de4875ac7ccdf82bd62d7a9a1148865d275a9d98 Mon Sep 17 00:00:00 2001 From: fkwp Date: Fri, 25 Apr 2025 00:31:13 +0200 Subject: [PATCH 118/225] replace jsonc with nginx highlighting --- docs/self-hosting.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/self-hosting.md b/docs/self-hosting.md index 0e3e8a82..4946c3a1 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -93,7 +93,7 @@ the example above, this results in: Using Nginx, you can achieve this by: -```jsonc +```nginx configuration file` server { ... location ^~ /livekit/jwt/ { @@ -203,7 +203,7 @@ Because Element Call uses client-side routing, your server must be able to route any requests to non-existing paths back to `/index.html`. For example, in Nginx you can achieve this with the `try_files` directive: -```jsonc +```nginx configuration file server { ... location / { From 984383b60d2fbe7ad40487975bd7dfd9871903fd Mon Sep 17 00:00:00 2001 From: fkwp Date: Fri, 25 Apr 2025 00:32:19 +0200 Subject: [PATCH 119/225] typo --- docs/self-hosting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/self-hosting.md b/docs/self-hosting.md index 4946c3a1..85ace615 100644 --- a/docs/self-hosting.md +++ b/docs/self-hosting.md @@ -93,7 +93,7 @@ the example above, this results in: Using Nginx, you can achieve this by: -```nginx configuration file` +```nginx configuration file server { ... location ^~ /livekit/jwt/ { From c91cc79162ddde77275a189f0d9d9c9a76d76e41 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 28 Apr 2025 15:56:26 +0200 Subject: [PATCH 120/225] Remove unneeded Knip override for MediaPipe --- knip.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/knip.ts b/knip.ts index 4732aea3..f1189ca8 100644 --- a/knip.ts +++ b/knip.ts @@ -32,8 +32,6 @@ export default { // element call side. "@types/dom-mediacapture-transform", "matrix-widget-api", - // we bundle files from this and lazy load them: - "@mediapipe/tasks-vision", ], ignoreExportsUsedInFile: true, } satisfies KnipConfig; From e88e0b19019089ab63c82b17e017d9d6c99ef343 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 28 Apr 2025 15:58:50 +0200 Subject: [PATCH 121/225] Import the segmenter model in a more statically-analyzable way --- src/livekit/BlurBackgroundTransformer.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/livekit/BlurBackgroundTransformer.ts b/src/livekit/BlurBackgroundTransformer.ts index d57524fc..0ff363c2 100644 --- a/src/livekit/BlurBackgroundTransformer.ts +++ b/src/livekit/BlurBackgroundTransformer.ts @@ -1,5 +1,5 @@ /* -Copyright 2024 New Vector Ltd. +Copyright 2024-2025 New Vector Ltd. SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. @@ -12,6 +12,8 @@ import { } from "@livekit/track-processors"; import { ImageSegmenter } from "@mediapipe/tasks-vision"; +import modelAssetPath from "../mediapipe/imageSegmenter/selfie_segmenter.tflite?url"; + interface WasmFileset { /** The path to the Wasm loader script. */ wasmLoaderPath: string; @@ -32,11 +34,6 @@ const wasmFileset: WasmFileset = { ).href, }; -const modelAssetPath = new URL( - "../mediapipe/imageSegmenter/selfie_segmenter.tflite", - import.meta.url, -).href; - export class BlurBackgroundTransformer extends BackgroundTransformer { public async init({ outputCanvas, From 02ce1f701aed930c1e3dbd7e9c65d499c5124cb0 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 28 Apr 2025 15:59:32 +0200 Subject: [PATCH 122/225] Document the background transformer a bit better --- src/livekit/BlurBackgroundTransformer.ts | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/livekit/BlurBackgroundTransformer.ts b/src/livekit/BlurBackgroundTransformer.ts index 0ff363c2..72256fe1 100644 --- a/src/livekit/BlurBackgroundTransformer.ts +++ b/src/livekit/BlurBackgroundTransformer.ts @@ -21,8 +21,16 @@ interface WasmFileset { wasmBinaryPath: string; } -// n.b. this only includes the SIMD versions of the WASM files which have good support: -// https://caniuse.com/?search=simd +// The MediaPipe package, by default, ships some alternative versions of the +// WASM files which avoid SIMD for compatibility with older browsers. But SIMD +// in WASM is actually fine by our support policy, so we include just the SIMD +// versions. +// It's really not ideal that we have to reference these internal files from +// MediaPipe and depend on node_modules having this specific structure. It's +// easy to see this breaking if our dependencies changed and MediaPipe were +// no longer hoisted, or if we switched to another dependency loader such as +// Yarn PnP. +// https://github.com/google-ai-edge/mediapipe/issues/5961 const wasmFileset: WasmFileset = { wasmLoaderPath: new URL( "../../node_modules/@mediapipe/tasks-vision/wasm/vision_wasm_internal.js", @@ -34,12 +42,20 @@ const wasmFileset: WasmFileset = { ).href, }; +/** + * Track processor that applies effects such as blurring to a user's background. + * + * This is just like LiveKit's prebuilt BackgroundTransformer except that it + * loads the segmentation models from our own bundle rather than as an external + * resource fetched from the public internet. + */ export class BlurBackgroundTransformer extends BackgroundTransformer { public async init({ outputCanvas, inputElement: inputVideo, }: VideoTransformerInitOptions): Promise { - // call super.super.init() + // Call super.super.init() since we're totally replacing the init method of + // BackgroundTransformer here, rather than extending it await VideoTransformer.prototype.init.call(this, { outputCanvas, inputElement: inputVideo, From cd9035b5fca34ed6cfaea038164f4e52d6c9cfba Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 28 Apr 2025 16:00:03 +0200 Subject: [PATCH 123/225] Make background blurring actually react to track restarts --- src/livekit/useLiveKit.ts | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLiveKit.ts index f214a203..99eda021 100644 --- a/src/livekit/useLiveKit.ts +++ b/src/livekit/useLiveKit.ts @@ -9,7 +9,7 @@ import { ConnectionState, type E2EEManagerOptions, ExternalE2EEKeyProvider, - type LocalVideoTrack, + LocalVideoTrack, Room, type RoomOptions, Track, @@ -18,6 +18,8 @@ import { useEffect, useMemo, useRef } from "react"; import E2EEWorker from "livekit-client/e2ee-worker?worker"; import { logger } from "matrix-js-sdk/lib/logger"; import { type MatrixRTCSession } from "matrix-js-sdk/lib/matrixrtc"; +import { useObservable, useObservableEagerState } from "observable-hooks"; +import { map } from "rxjs"; import { defaultLiveKitOptions } from "./options"; import { type SFUConfig } from "./openIDSFU"; @@ -39,6 +41,7 @@ import { useTrackProcessorSync, } from "./TrackProcessorContext"; import { useInitial } from "../useInitial"; +import { observeTrackReference$ } from "../state/MediaViewModel"; interface UseLivekitResult { livekitRoom?: Room; @@ -132,21 +135,25 @@ export function useLiveKit( return r; }, [roomOptions, e2eeSystem]); - const videoTrack = useMemo( - () => - Array.from(room.localParticipant.videoTrackPublications.values()).find( - (v) => v.source === Track.Source.Camera, - )?.track as LocalVideoTrack | null, - [ - room.localParticipant.videoTrackPublications, - // We need to update on map changes - // eslint-disable-next-line react-hooks/exhaustive-deps - room.localParticipant.videoTrackPublications.keys(), - ], + // Sync the requested track processors with LiveKit + useTrackProcessorSync( + useObservableEagerState( + useObservable( + (room$) => + observeTrackReference$( + room$.pipe(map(([room]) => room.localParticipant)), + Track.Source.Camera, + ).pipe( + map((trackRef) => { + const track = trackRef?.publication?.track; + return track instanceof LocalVideoTrack ? track : null; + }), + ), + [room], + ), + ), ); - useTrackProcessorSync(videoTrack); - const connectionState = useECConnectionState( { deviceId: initialDevices.current.audioInput.selectedId, From 7d0117903ebff92748988b43d0108571bac9e9d0 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 28 Apr 2025 16:01:34 +0200 Subject: [PATCH 124/225] Don't lie about the type of the video track --- src/room/LobbyView.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index e6bf5362..0cabc645 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -156,10 +156,12 @@ export const LobbyView: FC = ({ const tracks = usePreviewTracks(localTrackOptions, onError); - const videoTrack = useMemo(() => { - const track = tracks?.find((t) => t.kind === Track.Kind.Video); - return track as LocalVideoTrack | null; - }, [tracks]); + const videoTrack = useMemo( + () => + (tracks?.find((t) => t.kind === Track.Kind.Video) ?? + null) as LocalVideoTrack | null, + [tracks], + ); useTrackProcessorSync(videoTrack); const showSwitchCamera = useShowSwitchCamera( useObservable( From 8f1761442b2e554b39c33ba0ab2604a24e83c5d1 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 28 Apr 2025 16:37:53 +0200 Subject: [PATCH 125/225] Fix tests --- src/room/GroupCallView.test.tsx | 34 +++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/room/GroupCallView.test.tsx b/src/room/GroupCallView.test.tsx index 76765270..75961c72 100644 --- a/src/room/GroupCallView.test.tsx +++ b/src/room/GroupCallView.test.tsx @@ -38,6 +38,7 @@ import { GroupCallView } from "./GroupCallView"; import { type WidgetHelpers } from "../widget"; import { LazyEventEmitter } from "../LazyEventEmitter"; import { MatrixRTCFocusMissingError } from "../utils/errors"; +import { ProcessorProvider } from "../livekit/TrackProcessorContext"; vi.mock("../soundUtils"); vi.mock("../useAudioContext"); @@ -46,6 +47,13 @@ vi.mock("react-use-measure", () => ({ default: (): [() => void, object] => [(): void => {}, {}], })); +vi.hoisted( + () => + (global.ImageData = class MockImageData { + public data: number[] = []; + } as unknown as typeof ImageData), +); + const enterRTCSession = vi.hoisted(() => vi.fn(async () => Promise.resolve())); const leaveRTCSession = vi.hoisted(() => vi.fn( @@ -137,18 +145,20 @@ function createGroupCallView( const { getByText } = render( - + + + , ); From 0b82dcf701d4df6d91b6523c7dd7b71be1646510 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 28 Apr 2025 17:44:22 +0200 Subject: [PATCH 126/225] Upgrade TypeScript for ImageBufferSource support --- package.json | 6 +-- yarn.lock | 134 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 100 insertions(+), 40 deletions(-) diff --git a/package.json b/package.json index 0650d263..2b570028 100644 --- a/package.json +++ b/package.json @@ -73,8 +73,8 @@ "@types/react-dom": "^18.3.0", "@types/sdp-transform": "^2.4.5", "@types/uuid": "10", - "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", + "@typescript-eslint/eslint-plugin": "^8.31.0", + "@typescript-eslint/parser": "^8.31.0", "@use-gesture/react": "^10.2.11", "@vector-im/compound-design-tokens": "^3.0.0", "@vector-im/compound-web": "^7.2.0", @@ -121,7 +121,7 @@ "react-use-measure": "^2.1.1", "rxjs": "^7.8.1", "sass": "^1.42.1", - "typescript": "^5.1.6", + "typescript": "^5.8.3", "typescript-eslint-language-service": "^5.0.5", "unique-names-generator": "^4.6.0", "vaul": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index ab0d017f..d7a49a1f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4831,15 +4831,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^8.0.0": - version: 8.25.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.25.0" +"@typescript-eslint/eslint-plugin@npm:^8.31.0": + version: 8.31.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.31.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.25.0" - "@typescript-eslint/type-utils": "npm:8.25.0" - "@typescript-eslint/utils": "npm:8.25.0" - "@typescript-eslint/visitor-keys": "npm:8.25.0" + "@typescript-eslint/scope-manager": "npm:8.31.0" + "@typescript-eslint/type-utils": "npm:8.31.0" + "@typescript-eslint/utils": "npm:8.31.0" + "@typescript-eslint/visitor-keys": "npm:8.31.0" graphemer: "npm:^1.4.0" ignore: "npm:^5.3.1" natural-compare: "npm:^1.4.0" @@ -4847,8 +4847,8 @@ __metadata: peerDependencies: "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/11d63850f5f03b29cd31166f8da111788dc74e46877c2e16a5c488d6c4aa4b6c68c0857b9a396ad920aa7f0f3e7166f4faecbb194c19cd2bb9d3f687c5d2b292 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/7d78e0cdcc967742752d49d2d38986ee38d0b7ca64af247e5fe0816cea9ae5f1bfa5c126154acc0846af515c4fb1c52c96926ee25c73b4c3f7e6fd73cb6d2b0e languageName: node linkType: hard @@ -4863,19 +4863,19 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^8.0.0": - version: 8.25.0 - resolution: "@typescript-eslint/parser@npm:8.25.0" +"@typescript-eslint/parser@npm:^8.31.0": + version: 8.31.0 + resolution: "@typescript-eslint/parser@npm:8.31.0" dependencies: - "@typescript-eslint/scope-manager": "npm:8.25.0" - "@typescript-eslint/types": "npm:8.25.0" - "@typescript-eslint/typescript-estree": "npm:8.25.0" - "@typescript-eslint/visitor-keys": "npm:8.25.0" + "@typescript-eslint/scope-manager": "npm:8.31.0" + "@typescript-eslint/types": "npm:8.31.0" + "@typescript-eslint/typescript-estree": "npm:8.31.0" + "@typescript-eslint/visitor-keys": "npm:8.31.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/9a54539ba297791f23093ff42a885cc57d36b26205d7a390e114d1f01cc584ce91ac6ead01819daa46b48f873cac6c829fcf399a436610bdbfa98e5cd78148a2 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/9bd903b3ea4e24bfeb444d7a5c2ed82e591ef5cffc0874c609de854c05d34935cd85543e66678ecdb8e0e3eae2cda2df5c1ba66eb72010632cb9f8779031d56d languageName: node linkType: hard @@ -4899,18 +4899,28 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.25.0": - version: 8.25.0 - resolution: "@typescript-eslint/type-utils@npm:8.25.0" +"@typescript-eslint/scope-manager@npm:8.31.0": + version: 8.31.0 + resolution: "@typescript-eslint/scope-manager@npm:8.31.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.25.0" - "@typescript-eslint/utils": "npm:8.25.0" + "@typescript-eslint/types": "npm:8.31.0" + "@typescript-eslint/visitor-keys": "npm:8.31.0" + checksum: 10c0/eae758a24cc578fa351b8bf0c30c50de384292c0b05a58762f9b632d65a009bd5d902d806eccb6b678cc0b09686289fb4f1fd67da7f12d59ad43ff033b35cc4f + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:8.31.0": + version: 8.31.0 + resolution: "@typescript-eslint/type-utils@npm:8.31.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:8.31.0" + "@typescript-eslint/utils": "npm:8.31.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^2.0.1" peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/b7477a2d239cfd337f7d28641666763cf680a43a8d377a09dc42415f715670d35fbb4e772e103dfe8cd620c377e66bce740106bb3983ee65a739c28fab7325d1 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/f6938413a583430468b259f6823bb2ab1b5cd77cd6d4e21e1803df70e329046b9579aed5bdc9bdcf4046c8091615a911ac3990859db78d00210bb867915ba37f languageName: node linkType: hard @@ -4928,6 +4938,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:8.31.0": + version: 8.31.0 + resolution: "@typescript-eslint/types@npm:8.31.0" + checksum: 10c0/04130a30aac477d36d6a155399b27773457aeb9b485ef8fb56fee05725b6e36768c9fac7e4d1f073fd16988de0eb7dffc743c3f834ae907cf918cabb075e5cd8 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" @@ -4964,6 +4981,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:8.31.0": + version: 8.31.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.31.0" + dependencies: + "@typescript-eslint/types": "npm:8.31.0" + "@typescript-eslint/visitor-keys": "npm:8.31.0" + debug: "npm:^4.3.4" + fast-glob: "npm:^3.3.2" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^2.0.1" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/0ec074b2b9c49f80fafea716aa0cc4b05085e65730a3ef7c7d2d39db1657a40b38abe83f22bbe15ac4f6fdf576692f47d2d057347242e6cef5be81d070f55064 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/utils@npm:5.62.0" @@ -4982,7 +5017,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.25.0, @typescript-eslint/utils@npm:^8.13.0": +"@typescript-eslint/utils@npm:8.31.0": + version: 8.31.0 + resolution: "@typescript-eslint/utils@npm:8.31.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:8.31.0" + "@typescript-eslint/types": "npm:8.31.0" + "@typescript-eslint/typescript-estree": "npm:8.31.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/1fd4f62e16a44a5be2de501f70ba4b2d64479e014370bde7bbc6de6897cf1699766a8b7be4deb9b0328e74c2b4171839336ede4e3c60fec6ac8378b623a75275 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:^8.13.0": version: 8.25.0 resolution: "@typescript-eslint/utils@npm:8.25.0" dependencies: @@ -5017,6 +5067,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:8.31.0": + version: 8.31.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.31.0" + dependencies: + "@typescript-eslint/types": "npm:8.31.0" + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10c0/e41e2a9e287d11232cda6126377d1df4de69c6e9dc2a14058819cff15280ec654a3877886a6806728196f299766cfbb0b299eb021c2ce168eb15dff5eb07b51b + languageName: node + linkType: hard + "@ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" @@ -6920,8 +6980,8 @@ __metadata: "@types/react-dom": "npm:^18.3.0" "@types/sdp-transform": "npm:^2.4.5" "@types/uuid": "npm:10" - "@typescript-eslint/eslint-plugin": "npm:^8.0.0" - "@typescript-eslint/parser": "npm:^8.0.0" + "@typescript-eslint/eslint-plugin": "npm:^8.31.0" + "@typescript-eslint/parser": "npm:^8.31.0" "@use-gesture/react": "npm:^10.2.11" "@vector-im/compound-design-tokens": "npm:^3.0.0" "@vector-im/compound-web": "npm:^7.2.0" @@ -6968,7 +7028,7 @@ __metadata: react-use-measure: "npm:^2.1.1" rxjs: "npm:^7.8.1" sass: "npm:^1.42.1" - typescript: "npm:^5.1.6" + typescript: "npm:^5.8.3" typescript-eslint-language-service: "npm:^5.0.5" unique-names-generator: "npm:^4.6.0" vaul: "npm:^1.0.0" @@ -12709,13 +12769,13 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.1.6": - version: 5.7.3 - resolution: "typescript@npm:5.7.3" +"typescript@npm:^5.8.3": + version: 5.8.3 + resolution: "typescript@npm:5.8.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/b7580d716cf1824736cc6e628ab4cd8b51877408ba2be0869d2866da35ef8366dd6ae9eb9d0851470a39be17cbd61df1126f9e211d8799d764ea7431d5435afa + checksum: 10c0/5f8bb01196e542e64d44db3d16ee0e4063ce4f3e3966df6005f2588e86d91c03e1fb131c2581baf0fb65ee79669eea6e161cd448178986587e9f6844446dbb48 languageName: node linkType: hard @@ -12729,13 +12789,13 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.1.6#optional!builtin": - version: 5.7.3 - resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5" +"typescript@patch:typescript@npm%3A^5.8.3#optional!builtin": + version: 5.8.3 + resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/6fd7e0ed3bf23a81246878c613423730c40e8bdbfec4c6e4d7bf1b847cbb39076e56ad5f50aa9d7ebd89877999abaee216002d3f2818885e41c907caaa192cc4 + checksum: 10c0/39117e346ff8ebd87ae1510b3a77d5d92dae5a89bde588c747d25da5c146603a99c8ee588c7ef80faaf123d89ed46f6dbd918d534d641083177d5fac38b8a1cb languageName: node linkType: hard From 9df0f581178885d50dfbcce40168348e9b6c1dc7 Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 29 Apr 2025 12:04:08 +0200 Subject: [PATCH 127/225] Inline a patched version of WebCodecs types --- knip.ts | 4 - package.json | 1 - src/@types/dom-mediacapture-transform.d.ts | 137 ++++ src/@types/dom-webcodecs.d.ts | 736 +++++++++++++++++++++ yarn.lock | 17 - 5 files changed, 873 insertions(+), 22 deletions(-) create mode 100644 src/@types/dom-mediacapture-transform.d.ts create mode 100644 src/@types/dom-webcodecs.d.ts diff --git a/knip.ts b/knip.ts index f1189ca8..05bd029d 100644 --- a/knip.ts +++ b/knip.ts @@ -27,10 +27,6 @@ export default { // then Knip will flag it as a false positive // https://github.com/webpro-nl/knip/issues/766 "@vector-im/compound-web", - // We need this so the eslint is happy with @livekit/track-processors. - // This might be a bug in the livekit repo but for now we fix it on the - // element call side. - "@types/dom-mediacapture-transform", "matrix-widget-api", ], ignoreExportsUsedInFile: true, diff --git a/package.json b/package.json index 2b570028..36c9c9cf 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,6 @@ "@testing-library/react": "^16.0.0", "@testing-library/user-event": "^14.5.1", "@types/content-type": "^1.1.5", - "@types/dom-mediacapture-transform": "^0.1.10", "@types/grecaptcha": "^3.0.9", "@types/jsdom": "^21.1.7", "@types/lodash-es": "^4.17.12", diff --git a/src/@types/dom-mediacapture-transform.d.ts b/src/@types/dom-mediacapture-transform.d.ts new file mode 100644 index 00000000..ac55dc90 --- /dev/null +++ b/src/@types/dom-mediacapture-transform.d.ts @@ -0,0 +1,137 @@ +/* eslint-disable */ +// The contents of this file below the line are copied from +// @types/dom-mediacapture-transform, which is inlined here into Element Call so +// that we can apply the patch to @types/dom-webcodecs found in +// ./dom-webcodecs.d.ts, which it depends on. +// (https://github.com/DefinitelyTyped/DefinitelyTyped/pull/72625) +// Once that PR is merged and released, we can remove this file and return to +// depending on @types/dom-mediacapture-transform. +// ----------------------------------------------------------------------------- + +// In general, these types are only available behind a command line flag or an origin trial in +// Chrome 90+. + +// This API depends on WebCodecs. + +// Versioning: +// Until the above-mentioned spec is finalized, the major version number is 0. Although not +// necessary for version 0, consider incrementing the minor version number for breaking changes. + +// The following modify existing DOM types to allow defining type-safe APIs on audio and video tracks. + +/** Specialize MediaStreamTrack so that we can refer specifically to an audio track. */ +interface MediaStreamAudioTrack extends MediaStreamTrack { + readonly kind: "audio"; + clone(): MediaStreamAudioTrack; +} + +/** Specialize MediaStreamTrack so that we can refer specifically to a video track. */ +interface MediaStreamVideoTrack extends MediaStreamTrack { + readonly kind: "video"; + clone(): MediaStreamVideoTrack; +} + +/** Assert that getAudioTracks and getVideoTracks return the tracks with the appropriate kind. */ +interface MediaStream { + getAudioTracks(): MediaStreamAudioTrack[]; + getVideoTracks(): MediaStreamVideoTrack[]; +} + +// The following were originally generated from the spec using +// https://github.com/microsoft/TypeScript-DOM-lib-generator, then heavily modified. + +/** + * A track sink that is capable of exposing the unencoded frames from the track to a + * ReadableStream, and exposes a control channel for signals going in the oppposite direction. + */ +interface MediaStreamTrackProcessor { + /** + * Allows reading the frames flowing through the MediaStreamTrack provided to the constructor. + */ + readonly readable: ReadableStream; + /** Allows sending control signals to the MediaStreamTrack provided to the constructor. */ + readonly writableControl: WritableStream; +} + +declare var MediaStreamTrackProcessor: { + prototype: MediaStreamTrackProcessor; + + /** Constructor overrides based on the type of track. */ + new ( + init: MediaStreamTrackProcessorInit & { track: MediaStreamAudioTrack }, + ): MediaStreamTrackProcessor; + new ( + init: MediaStreamTrackProcessorInit & { track: MediaStreamVideoTrack }, + ): MediaStreamTrackProcessor; +}; + +interface MediaStreamTrackProcessorInit { + track: MediaStreamTrack; + /** + * If media frames are not read from MediaStreamTrackProcessor.readable quickly enough, the + * MediaStreamTrackProcessor will internally buffer up to maxBufferSize of the frames produced + * by the track. If the internal buffer is full, each time the track produces a new frame, the + * oldest frame in the buffer will be dropped and the new frame will be added to the buffer. + */ + maxBufferSize?: number | undefined; +} + +/** + * Takes video frames as input, and emits control signals that result from subsequent processing. + */ +interface MediaStreamTrackGenerator + extends MediaStreamTrack { + /** + * Allows writing media frames to the MediaStreamTrackGenerator, which is itself a + * MediaStreamTrack. When a frame is written to writable, the frame’s close() method is + * automatically invoked, so that its internal resources are no longer accessible from + * JavaScript. + */ + readonly writable: WritableStream; + /** + * Allows reading control signals sent from any sinks connected to the + * MediaStreamTrackGenerator. + */ + readonly readableControl: ReadableStream; +} + +type MediaStreamAudioTrackGenerator = MediaStreamTrackGenerator & + MediaStreamAudioTrack; +type MediaStreamVideoTrackGenerator = MediaStreamTrackGenerator & + MediaStreamVideoTrack; + +declare var MediaStreamTrackGenerator: { + prototype: MediaStreamTrackGenerator; + + /** Constructor overrides based on the type of track. */ + new ( + init: MediaStreamTrackGeneratorInit & { + kind: "audio"; + signalTarget?: MediaStreamAudioTrack | undefined; + }, + ): MediaStreamAudioTrackGenerator; + new ( + init: MediaStreamTrackGeneratorInit & { + kind: "video"; + signalTarget?: MediaStreamVideoTrack | undefined; + }, + ): MediaStreamVideoTrackGenerator; +}; + +interface MediaStreamTrackGeneratorInit { + kind: MediaStreamTrackGeneratorKind; + /** + * (Optional) track to which the MediaStreamTrackGenerator will automatically forward control + * signals. If signalTarget is provided and signalTarget.kind and kind do not match, the + * MediaStreamTrackGenerator’s constructor will raise an exception. + */ + signalTarget?: MediaStreamTrack | undefined; +} + +type MediaStreamTrackGeneratorKind = "audio" | "video"; + +type MediaStreamTrackSignalType = "request-frame"; + +interface MediaStreamTrackSignal { + signalType: MediaStreamTrackSignalType; +} diff --git a/src/@types/dom-webcodecs.d.ts b/src/@types/dom-webcodecs.d.ts new file mode 100644 index 00000000..f06ceedd --- /dev/null +++ b/src/@types/dom-webcodecs.d.ts @@ -0,0 +1,736 @@ +/* eslint-disable */ +// The contents of this file below the line are copied from +// @types/dom-webcodecs, which is inlined here into Element Call so that we can +// apply the patch https://github.com/DefinitelyTyped/DefinitelyTyped/pull/72625 +// which is needed for TypeScript 5.8 compatibility. Once that PR is merged and +// released, we can remove this file and return to depending on +// @types/dom-webcodecs. +// ----------------------------------------------------------------------------- + +// Versioning: +// Until the WebCodecs spec is finalized, the major version number is 0. I have chosen to use minor +// version 1 to denote the API as defined by the IDL files from the Chromium repo at +// https://chromium.googlesource.com/chromium/src/+/main/third_party/blink/renderer/modules/webcodecs. +// Please use a version number above 0.1 if using the spec at https://w3c.github.io/webcodecs/ as +// the source. + +// The declarations in webcodecs.generated.d.ts have been generated using the code in +// https://github.com/yume-chan/webcodecs-lib-generator. See +// https://github.com/yume-chan/webcodecs-lib-generator/blob/main/README.md for more detail. + +// The following declarations are copied from +// https://github.com/microsoft/TypeScript-DOM-lib-generator/blob/a75338e1ea8a958bf08a5745141d2ab8f14ba2ca/baselines/dom.generated.d.ts +// and modified to expand the types to include VideoFrame. + +/** Shim for OffscreenCanvas, which was removed in TS 4.4 */ +interface OffscreenCanvas extends EventTarget {} + +/** + * Replaces CanvasImageSource; only applies if WebCodecs is available. + */ +type CanvasImageSourceWebCodecs = + | HTMLOrSVGImageElement + | HTMLVideoElement + | HTMLCanvasElement + | ImageBitmap + | OffscreenCanvas + | VideoFrame; + +interface CanvasRenderingContext2D { + drawImage(image: CanvasImageSourceWebCodecs, dx: number, dy: number): void; + drawImage( + image: CanvasImageSourceWebCodecs, + dx: number, + dy: number, + dw: number, + dh: number, + ): void; + drawImage( + image: CanvasImageSourceWebCodecs, + sx: number, + sy: number, + sw: number, + sh: number, + dx: number, + dy: number, + dw: number, + dh: number, + ): void; + createPattern( + image: CanvasImageSourceWebCodecs, + repetition: string | null, + ): CanvasPattern | null; +} + +interface OffscreenCanvasRenderingContext2D { + drawImage(image: CanvasImageSourceWebCodecs, dx: number, dy: number): void; + drawImage( + image: CanvasImageSourceWebCodecs, + dx: number, + dy: number, + dw: number, + dh: number, + ): void; + drawImage( + image: CanvasImageSourceWebCodecs, + sx: number, + sy: number, + sw: number, + sh: number, + dx: number, + dy: number, + dw: number, + dh: number, + ): void; + createPattern( + image: CanvasImageSourceWebCodecs, + repetition: string | null, + ): CanvasPattern | null; +} + +/** + * Replaces ImageBitmapSource; only applies if WebCodecs is available. + */ +type ImageBitmapSourceWebCodecs = CanvasImageSourceWebCodecs | Blob | ImageData; + +declare function createImageBitmap( + image: ImageBitmapSourceWebCodecs, + options?: ImageBitmapOptions, +): Promise; +declare function createImageBitmap( + image: ImageBitmapSourceWebCodecs, + sx: number, + sy: number, + sw: number, + sh: number, + options?: ImageBitmapOptions, +): Promise; + +/** + * Replaces TexImageSource; only applies if WebCodecs is available. + */ +type TexImageSourceWebCodecs = + | ImageBitmap + | ImageData + | HTMLImageElement + | HTMLCanvasElement + | HTMLVideoElement + | OffscreenCanvas + | VideoFrame; + +interface WebGLRenderingContextOverloads { + texImage2D( + target: GLenum, + level: GLint, + internalformat: GLint, + format: GLenum, + type: GLenum, + source: TexImageSourceWebCodecs, + ): void; + texSubImage2D( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + format: GLenum, + type: GLenum, + source: TexImageSourceWebCodecs, + ): void; +} + +interface WebGL2RenderingContextBase { + texImage3D( + target: GLenum, + level: GLint, + internalformat: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + border: GLint, + format: GLenum, + type: GLenum, + source: TexImageSourceWebCodecs, + ): void; + texSubImage3D( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + format: GLenum, + type: GLenum, + source: TexImageSourceWebCodecs, + ): void; +} + +interface WebGL2RenderingContextOverloads { + texImage2D( + target: GLenum, + level: GLint, + internalformat: GLint, + format: GLenum, + type: GLenum, + source: TexImageSourceWebCodecs, + ): void; + texImage2D( + target: GLenum, + level: GLint, + internalformat: GLint, + width: GLsizei, + height: GLsizei, + border: GLint, + format: GLenum, + type: GLenum, + source: TexImageSourceWebCodecs, + ): void; + texSubImage2D( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + format: GLenum, + type: GLenum, + source: TexImageSourceWebCodecs, + ): void; + texSubImage2D( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + width: GLsizei, + height: GLsizei, + format: GLenum, + type: GLenum, + source: TexImageSourceWebCodecs, + ): void; +} + +///////////////////////////// +/// webcodecs APIs +///////////////////////////// + +interface AudioDataCopyToOptions { + format?: AudioSampleFormat | undefined; + frameCount?: number | undefined; + frameOffset?: number | undefined; + planeIndex: number; +} + +interface AudioDataInit { + data: AllowSharedBufferSource; + format: AudioSampleFormat; + numberOfChannels: number; + numberOfFrames: number; + sampleRate: number; + timestamp: number; +} + +interface AudioDecoderConfig { + codec: string; + description?: AllowSharedBufferSource | undefined; + numberOfChannels: number; + sampleRate: number; +} + +interface AudioDecoderInit { + error: WebCodecsErrorCallback; + output: AudioDataOutputCallback; +} + +interface AudioDecoderSupport { + config?: AudioDecoderConfig; + supported?: boolean; +} + +interface AudioEncoderConfig { + bitrate?: number | undefined; + codec: string; + numberOfChannels: number; + sampleRate: number; +} + +interface AudioEncoderInit { + error: WebCodecsErrorCallback; + output: EncodedAudioChunkOutputCallback; +} + +interface AudioEncoderSupport { + config?: AudioEncoderConfig; + supported?: boolean; +} + +interface AvcEncoderConfig { + format?: AvcBitstreamFormat | undefined; +} + +interface EncodedAudioChunkInit { + data: AllowSharedBufferSource; + duration?: number | undefined; + timestamp: number; + type: EncodedAudioChunkType; +} + +interface EncodedAudioChunkMetadata { + decoderConfig?: AudioDecoderConfig | undefined; +} + +interface EncodedVideoChunkInit { + data: AllowSharedBufferSource; + duration?: number | undefined; + timestamp: number; + type: EncodedVideoChunkType; +} + +interface EncodedVideoChunkMetadata { + decoderConfig?: VideoDecoderConfig | undefined; + temporalLayerId?: number | undefined; +} + +interface ImageDecodeOptions { + completeFramesOnly?: boolean | undefined; + frameIndex?: number | undefined; +} + +interface ImageDecodeResult { + complete: boolean; + image: VideoFrame; +} + +interface ImageDecoderInit { + colorSpaceConversion?: ColorSpaceConversion | undefined; + data: ImageBufferSource; + desiredHeight?: number | undefined; + desiredWidth?: number | undefined; + preferAnimation?: boolean | undefined; + premultiplyAlpha?: PremultiplyAlpha | undefined; + type: string; +} + +interface PlaneLayout { + offset: number; + stride: number; +} + +interface VideoColorSpaceInit { + fullRange?: boolean | null | undefined; + matrix?: VideoMatrixCoefficients | null | undefined; + primaries?: VideoColorPrimaries | null | undefined; + transfer?: VideoTransferCharacteristics | null | undefined; +} + +interface VideoDecoderConfig { + codec: string; + codedHeight?: number | undefined; + codedWidth?: number | undefined; + colorSpace?: VideoColorSpaceInit | undefined; + description?: AllowSharedBufferSource | undefined; + displayAspectHeight?: number | undefined; + displayAspectWidth?: number | undefined; + hardwareAcceleration?: HardwarePreference | undefined; + optimizeForLatency?: boolean | undefined; +} + +interface VideoDecoderInit { + error: WebCodecsErrorCallback; + output: VideoFrameOutputCallback; +} + +interface VideoDecoderSupport { + config?: VideoDecoderConfig; + supported?: boolean; +} + +interface VideoEncoderConfig { + alpha?: AlphaOption | undefined; + avc?: AvcEncoderConfig | undefined; + bitrate?: number | undefined; + bitrateMode?: VideoEncoderBitrateMode | undefined; + codec: string; + displayHeight?: number | undefined; + displayWidth?: number | undefined; + framerate?: number | undefined; + hardwareAcceleration?: HardwarePreference | undefined; + height: number; + latencyMode?: LatencyMode | undefined; + scalabilityMode?: string | undefined; + width: number; +} + +interface VideoEncoderEncodeOptions { + keyFrame?: boolean; +} + +interface VideoEncoderInit { + error: WebCodecsErrorCallback; + output: EncodedVideoChunkOutputCallback; +} + +interface VideoEncoderSupport { + config?: VideoEncoderConfig; + supported?: boolean; +} + +interface VideoFrameBufferInit { + codedHeight: number; + codedWidth: number; + colorSpace?: VideoColorSpaceInit | undefined; + displayHeight?: number | undefined; + displayWidth?: number | undefined; + duration?: number | undefined; + format: VideoPixelFormat; + layout?: PlaneLayout[] | undefined; + timestamp: number; + visibleRect?: DOMRectInit | undefined; +} + +interface VideoFrameCopyToOptions { + layout?: PlaneLayout[] | undefined; + rect?: DOMRectInit | undefined; +} + +interface VideoFrameInit { + alpha?: AlphaOption | undefined; + displayHeight?: number | undefined; + displayWidth?: number | undefined; + duration?: number | undefined; + timestamp?: number | undefined; + visibleRect?: DOMRectInit | undefined; +} + +interface AudioData { + readonly duration: number; + readonly format: AudioSampleFormat | null; + readonly numberOfChannels: number; + readonly numberOfFrames: number; + readonly sampleRate: number; + readonly timestamp: number; + allocationSize(options: AudioDataCopyToOptions): number; + clone(): AudioData; + close(): void; + copyTo( + destination: AllowSharedBufferSource, + options: AudioDataCopyToOptions, + ): void; +} + +declare var AudioData: { + prototype: AudioData; + new (init: AudioDataInit): AudioData; +}; + +interface AudioDecoderEventMap { + dequeue: Event; +} + +/** Available only in secure contexts. */ +interface AudioDecoder { + readonly decodeQueueSize: number; + readonly state: CodecState; + ondequeue: ((this: AudioDecoder, ev: Event) => any) | null; + close(): void; + configure(config: AudioDecoderConfig): void; + decode(chunk: EncodedAudioChunk): void; + flush(): Promise; + reset(): void; + addEventListener( + type: K, + listener: (this: AudioDecoder, ev: AudioDecoderEventMap[K]) => any, + options?: boolean | AddEventListenerOptions, + ): void; + addEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | AddEventListenerOptions, + ): void; + removeEventListener( + type: K, + listener: (this: AudioDecoder, ev: AudioDecoderEventMap[K]) => any, + options?: boolean | EventListenerOptions, + ): void; + removeEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | EventListenerOptions, + ): void; +} + +declare var AudioDecoder: { + prototype: AudioDecoder; + new (init: AudioDecoderInit): AudioDecoder; + isConfigSupported(config: AudioDecoderConfig): Promise; +}; + +interface AudioEncoderEventMap { + dequeue: Event; +} + +/** Available only in secure contexts. */ +interface AudioEncoder { + readonly encodeQueueSize: number; + readonly state: CodecState; + ondequeue: ((this: AudioEncoder, ev: Event) => any) | null; + close(): void; + configure(config: AudioEncoderConfig): void; + encode(data: AudioData): void; + flush(): Promise; + reset(): void; + addEventListener( + type: K, + listener: (this: AudioEncoder, ev: AudioEncoderEventMap[K]) => any, + options?: boolean | AddEventListenerOptions, + ): void; + addEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | AddEventListenerOptions, + ): void; + removeEventListener( + type: K, + listener: (this: AudioEncoder, ev: AudioEncoderEventMap[K]) => any, + options?: boolean | EventListenerOptions, + ): void; + removeEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | EventListenerOptions, + ): void; +} + +declare var AudioEncoder: { + prototype: AudioEncoder; + new (init: AudioEncoderInit): AudioEncoder; + isConfigSupported(config: AudioEncoderConfig): Promise; +}; + +interface EncodedAudioChunk { + readonly byteLength: number; + readonly duration: number | null; + readonly timestamp: number; + readonly type: EncodedAudioChunkType; + copyTo(destination: AllowSharedBufferSource): void; +} + +declare var EncodedAudioChunk: { + prototype: EncodedAudioChunk; + new (init: EncodedAudioChunkInit): EncodedAudioChunk; +}; + +interface EncodedVideoChunk { + readonly byteLength: number; + readonly duration: number | null; + readonly timestamp: number; + readonly type: EncodedVideoChunkType; + copyTo(destination: AllowSharedBufferSource): void; +} + +declare var EncodedVideoChunk: { + prototype: EncodedVideoChunk; + new (init: EncodedVideoChunkInit): EncodedVideoChunk; +}; + +/** Available only in secure contexts. */ +interface ImageDecoder { + readonly complete: boolean; + readonly completed: Promise; + readonly tracks: ImageTrackList; + readonly type: string; + close(): void; + decode(options?: ImageDecodeOptions): Promise; + reset(): void; +} + +// declare var ImageDecoder: { +// prototype: ImageDecoder; +// new(init: ImageDecoderInit): ImageDecoder; +// isTypeSupported(type: string): Promise; +// }; + +// interface ImageTrack { +// readonly animated: boolean; +// readonly frameCount: number; +// readonly repetitionCount: number; +// selected: boolean; +// } + +// declare var ImageTrack: { +// prototype: ImageTrack; +// new(): ImageTrack; +// }; + +// interface ImageTrackList { +// readonly length: number; +// readonly ready: Promise; +// readonly selectedIndex: number; +// readonly selectedTrack: ImageTrack | null; +// [index: number]: ImageTrack; +// } + +// declare var ImageTrackList: { +// prototype: ImageTrackList; +// new(): ImageTrackList; +// }; + +interface VideoColorSpace { + readonly fullRange: boolean | null; + readonly matrix: VideoMatrixCoefficients | null; + readonly primaries: VideoColorPrimaries | null; + readonly transfer: VideoTransferCharacteristics | null; + toJSON(): VideoColorSpaceInit; +} + +declare var VideoColorSpace: { + prototype: VideoColorSpace; + new (init?: VideoColorSpaceInit): VideoColorSpace; +}; + +interface VideoDecoderEventMap { + dequeue: Event; +} + +/** Available only in secure contexts. */ +interface VideoDecoder { + readonly decodeQueueSize: number; + readonly state: CodecState; + ondequeue: ((this: VideoDecoder, ev: Event) => any) | null; + close(): void; + configure(config: VideoDecoderConfig): void; + decode(chunk: EncodedVideoChunk): void; + flush(): Promise; + reset(): void; + addEventListener( + type: K, + listener: (this: VideoDecoder, ev: VideoDecoderEventMap[K]) => any, + options?: boolean | AddEventListenerOptions, + ): void; + addEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | AddEventListenerOptions, + ): void; + removeEventListener( + type: K, + listener: (this: VideoDecoder, ev: VideoDecoderEventMap[K]) => any, + options?: boolean | EventListenerOptions, + ): void; + removeEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | EventListenerOptions, + ): void; +} + +declare var VideoDecoder: { + prototype: VideoDecoder; + new (init: VideoDecoderInit): VideoDecoder; + isConfigSupported(config: VideoDecoderConfig): Promise; +}; + +interface VideoEncoderEventMap { + dequeue: Event; +} + +/** Available only in secure contexts. */ +interface VideoEncoder { + readonly encodeQueueSize: number; + readonly state: CodecState; + close(): void; + ondequeue: ((this: VideoEncoder, ev: Event) => any) | null; + configure(config: VideoEncoderConfig): void; + encode(frame: VideoFrame, options?: VideoEncoderEncodeOptions): void; + flush(): Promise; + reset(): void; + addEventListener( + type: K, + listener: (this: VideoEncoder, ev: VideoEncoderEventMap[K]) => any, + options?: boolean | AddEventListenerOptions, + ): void; + addEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | AddEventListenerOptions, + ): void; + removeEventListener( + type: K, + listener: (this: VideoEncoder, ev: VideoEncoderEventMap[K]) => any, + options?: boolean | EventListenerOptions, + ): void; + removeEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | EventListenerOptions, + ): void; +} + +declare var VideoEncoder: { + prototype: VideoEncoder; + new (init: VideoEncoderInit): VideoEncoder; + isConfigSupported(config: VideoEncoderConfig): Promise; +}; + +interface VideoFrame { + readonly codedHeight: number; + readonly codedRect: DOMRectReadOnly | null; + readonly codedWidth: number; + readonly colorSpace: VideoColorSpace; + readonly displayHeight: number; + readonly displayWidth: number; + readonly duration: number | null; + readonly format: VideoPixelFormat | null; + readonly timestamp: number; + readonly visibleRect: DOMRectReadOnly | null; + allocationSize(options?: VideoFrameCopyToOptions): number; + clone(): VideoFrame; + close(): void; + copyTo( + destination: AllowSharedBufferSource, + options?: VideoFrameCopyToOptions, + ): Promise; +} + +declare var VideoFrame: { + prototype: VideoFrame; + new (source: CanvasImageSource, init?: VideoFrameInit): VideoFrame; + new (data: AllowSharedBufferSource, init: VideoFrameBufferInit): VideoFrame; +}; + +interface AudioDataOutputCallback { + (output: AudioData): void; +} + +interface EncodedAudioChunkOutputCallback { + (output: EncodedAudioChunk, metadata: EncodedAudioChunkMetadata): void; +} + +interface EncodedVideoChunkOutputCallback { + (chunk: EncodedVideoChunk, metadata: EncodedVideoChunkMetadata): void; +} + +interface VideoFrameOutputCallback { + (output: VideoFrame): void; +} + +interface WebCodecsErrorCallback { + (error: DOMException): void; +} + +// type AllowSharedBufferSource = ArrayBuffer | ArrayBufferView; +// type BitrateMode = "constant" | "variable"; +// type ImageBufferSource = ArrayBuffer | ArrayBufferView | ReadableStream; +// type AlphaOption = "discard" | "keep"; +// type AudioSampleFormat = "f32" | "f32-planar" | "s16" | "s16-planar" | "s32" | "s32-planar" | "u8" | "u8-planar"; +// type AvcBitstreamFormat = "annexb" | "avc"; +// type CodecState = "closed" | "configured" | "unconfigured"; +// type EncodedAudioChunkType = "delta" | "key"; +// type EncodedVideoChunkType = "delta" | "key"; +type HardwarePreference = + | "no-preference" + | "prefer-hardware" + | "prefer-software"; +// type LatencyMode = "quality" | "realtime"; +// type VideoColorPrimaries = "bt470bg" | "bt709" | "smpte170m"; +// type VideoMatrixCoefficients = "bt470bg" | "bt709" | "rgb" | "smpte170m"; +// type VideoPixelFormat = "BGRA" | "BGRX" | "I420" | "I420A" | "I422" | "I444" | "NV12" | "RGBA" | "RGBX"; +// type VideoTransferCharacteristics = "bt709" | "iec61966-2-1" | "smpte170m"; diff --git a/yarn.lock b/yarn.lock index d7a49a1f..44a0d217 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4621,22 +4621,6 @@ __metadata: languageName: node linkType: hard -"@types/dom-mediacapture-transform@npm:^0.1.10": - version: 0.1.11 - resolution: "@types/dom-mediacapture-transform@npm:0.1.11" - dependencies: - "@types/dom-webcodecs": "npm:*" - checksum: 10c0/19c76d54cf31aa2a925011fc5f973dff9a10bdecfdf2285e5e568e61850a0fa2b8c9f1807a1462cbefd57ec26d32eeaa9c359117aca9d9fe7f0d6f2fff33f51e - languageName: node - linkType: hard - -"@types/dom-webcodecs@npm:*": - version: 0.1.14 - resolution: "@types/dom-webcodecs@npm:0.1.14" - checksum: 10c0/20f2e9a52986f861eb5725365561c57d4d8c7494322e55f5df1b0639e97d399c3c427e05d2bc7772c9c975197dc12db3e047e3e0ad7b49ae13181514e3d54f56 - languageName: node - linkType: hard - "@types/estree@npm:1.0.6, @types/estree@npm:^1.0.0": version: 1.0.6 resolution: "@types/estree@npm:1.0.6" @@ -6969,7 +6953,6 @@ __metadata: "@testing-library/react": "npm:^16.0.0" "@testing-library/user-event": "npm:^14.5.1" "@types/content-type": "npm:^1.1.5" - "@types/dom-mediacapture-transform": "npm:^0.1.10" "@types/grecaptcha": "npm:^3.0.9" "@types/jsdom": "npm:^21.1.7" "@types/lodash-es": "npm:^4.17.12" From fa0af6403e24a938ce123e55b49b4c0e211c6107 Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 29 Apr 2025 12:21:56 +0200 Subject: [PATCH 128/225] Fix Playwright tests in Firefox As explained by the comment. --- playwright/fixtures/widget-user.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/playwright/fixtures/widget-user.ts b/playwright/fixtures/widget-user.ts index 0a422d20..d1412bd8 100644 --- a/playwright/fixtures/widget-user.ts +++ b/playwright/fixtures/widget-user.ts @@ -154,8 +154,13 @@ export const widgetTest = test.extend({ ewPage1.getByRole("heading", { name: "Invite to Welcome Room" }), ).toBeVisible(); - await ewPage1.getByRole("textbox").fill(whistlerMxId); - await ewPage1.getByRole("textbox").click(); + // To get the invite textbox we need to specifically select within the + // dialog, since there is another textbox in the background (the message + // composer). In theory the composer shouldn't be visible to Playwright at + // all because the invite dialog has trapped focus, but the focus trap + // doesn't quite work right on Firefox. + await ewPage1.getByRole("dialog").getByRole("textbox").fill(whistlerMxId); + await ewPage1.getByRole("dialog").getByRole("textbox").click(); await ewPage1.getByRole("button", { name: "Invite" }).click(); // Accept the invite From dfb9eb4b1f828bc7ceac091f5b69eedfe7aa23fe Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 29 Apr 2025 12:41:23 +0200 Subject: [PATCH 129/225] Upgrade Playwright to fix Element's unsupported browser warning --- package.json | 2 +- yarn.lock | 30 +++++++++++++++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 3730004b..78960c8b 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@opentelemetry/sdk-trace-base": "^1.25.1", "@opentelemetry/sdk-trace-web": "^1.9.1", "@opentelemetry/semantic-conventions": "^1.25.1", - "@playwright/test": "^1.51.0", + "@playwright/test": "^1.52.0", "@radix-ui/react-dialog": "^1.0.4", "@radix-ui/react-slider": "^1.1.2", "@radix-ui/react-visually-hidden": "^1.0.3", diff --git a/yarn.lock b/yarn.lock index 70de0fc6..be477d19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3045,14 +3045,14 @@ __metadata: languageName: node linkType: hard -"@playwright/test@npm:^1.51.0": - version: 1.51.0 - resolution: "@playwright/test@npm:1.51.0" +"@playwright/test@npm:^1.52.0": + version: 1.52.0 + resolution: "@playwright/test@npm:1.52.0" dependencies: - playwright: "npm:1.51.0" + playwright: "npm:1.52.0" bin: playwright: cli.js - checksum: 10c0/ae83dd2c3a32133de58f44a9dbcd73a8059155ebd8acc736ba8bd0a7ca99b194afe2e8f5a500861d18b1c8f06b4e4ea8de4a2402297c59053d4becc404b47e0a + checksum: 10c0/1c428b421593eb4f79b7c99783a389c3ab3526c9051ec772749f4fca61414dfa9f2344eba846faac5f238084aa96c836364a91d81d3034ac54924f239a93e247 languageName: node linkType: hard @@ -6860,7 +6860,7 @@ __metadata: "@opentelemetry/sdk-trace-base": "npm:^1.25.1" "@opentelemetry/sdk-trace-web": "npm:^1.9.1" "@opentelemetry/semantic-conventions": "npm:^1.25.1" - "@playwright/test": "npm:^1.51.0" + "@playwright/test": "npm:^1.52.0" "@radix-ui/react-dialog": "npm:^1.0.4" "@radix-ui/react-slider": "npm:^1.1.2" "@radix-ui/react-visually-hidden": "npm:^1.0.3" @@ -10295,27 +10295,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.51.0": - version: 1.51.0 - resolution: "playwright-core@npm:1.51.0" +"playwright-core@npm:1.52.0": + version: 1.52.0 + resolution: "playwright-core@npm:1.52.0" bin: playwright-core: cli.js - checksum: 10c0/8f5de23088c5e97c00327f356b17e0223181e921baf99f4e38d9a3b18d0693db288f8b5389e96d0cb4a1b55f03870f140dd7346128a0c02ce36d11eb92153841 + checksum: 10c0/640945507e6ca2144e9f596b2a6ecac042c2fd3683ff99e6271e9a7b38f3602d415f282609d569456f66680aab8b3c5bb1b257d8fb63a7fc0ed648261110421f languageName: node linkType: hard -"playwright@npm:1.51.0": - version: 1.51.0 - resolution: "playwright@npm:1.51.0" +"playwright@npm:1.52.0": + version: 1.52.0 + resolution: "playwright@npm:1.52.0" dependencies: fsevents: "npm:2.3.2" - playwright-core: "npm:1.51.0" + playwright-core: "npm:1.52.0" dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: 10c0/e8509ea500e03e8051fd243f2347ac3196ff8dde4c20ae3aba4cf723e2b647a0158d209fba062995dab90590229a483d723562cf1ea8b2fc11698617027416fd + checksum: 10c0/2c6edf1e15e59bbaf77f3fa0fe0ac975793c17cff835d9c8b8bc6395a3b6f1c01898b3058ab37891b2e4d424bcc8f1b4844fe70d943e0143d239d7451408c579 languageName: node linkType: hard From 9f5eae0ac104fd0d90c27e50617d79eb7c8c73fa Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 29 Apr 2025 13:02:02 +0200 Subject: [PATCH 130/225] Clean up a string --- locales/en/app.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/en/app.json b/locales/en/app.json index ab3f8dd0..d185d2f8 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -166,7 +166,7 @@ }, "background_blur_header": "Background", "background_blur_label": "Blur the background of the video", - "blur_not_supported_by_browser": "(Background blur is not supported by this device)", + "blur_not_supported_by_browser": "(Background blur is not supported by this device.)", "developer_tab_title": "Developer", "devices": { "camera": "Camera", From eeb3a1a9914f4eb16a20f7de3d5baed5c07c3e07 Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 29 Apr 2025 22:19:00 +0200 Subject: [PATCH 131/225] Add license notices to inlined type declarations --- src/@types/dom-mediacapture-transform.d.ts | 9 +++++++++ src/@types/dom-webcodecs.d.ts | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/src/@types/dom-mediacapture-transform.d.ts b/src/@types/dom-mediacapture-transform.d.ts index ac55dc90..d4c1f8f8 100644 --- a/src/@types/dom-mediacapture-transform.d.ts +++ b/src/@types/dom-mediacapture-transform.d.ts @@ -8,6 +8,15 @@ // depending on @types/dom-mediacapture-transform. // ----------------------------------------------------------------------------- +// This project is licensed under the MIT license. +// Copyrights are respective of each contributor listed at the beginning of each definition file. + +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + // In general, these types are only available behind a command line flag or an origin trial in // Chrome 90+. diff --git a/src/@types/dom-webcodecs.d.ts b/src/@types/dom-webcodecs.d.ts index f06ceedd..55e4c7d4 100644 --- a/src/@types/dom-webcodecs.d.ts +++ b/src/@types/dom-webcodecs.d.ts @@ -7,6 +7,15 @@ // @types/dom-webcodecs. // ----------------------------------------------------------------------------- +// This project is licensed under the MIT license. +// Copyrights are respective of each contributor listed at the beginning of each definition file. + +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + // Versioning: // Until the WebCodecs spec is finalized, the major version number is 0. I have chosen to use minor // version 1 to denote the API as defined by the IDL files from the Chromium repo at From aee30d84022771dc1aed5ef3d21e558d03ec809a Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Fri, 2 May 2025 11:49:49 +0200 Subject: [PATCH 132/225] Fix release notes (#3244) --- .github/{realease.yml => release.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{realease.yml => release.yml} (100%) diff --git a/.github/realease.yml b/.github/release.yml similarity index 100% rename from .github/realease.yml rename to .github/release.yml From 06e1a4eb1e8120edef266467fc233580fef78b00 Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 12:57:23 +0200 Subject: [PATCH 133/225] Adapt new naming schema *.m.localhost --- backend/dev_homeserver.yaml | 4 ++-- backend/dev_nginx.conf | 6 +++--- dev-backend-docker-compose.yml | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/backend/dev_homeserver.yaml b/backend/dev_homeserver.yaml index 5697c32e..eab4e698 100644 --- a/backend/dev_homeserver.yaml +++ b/backend/dev_homeserver.yaml @@ -1,5 +1,5 @@ -server_name: "synapse.localhost" -public_baseurl: http://synapse.localhost:8008/ +server_name: "synapse.m.localhost" +public_baseurl: https://synapse.m.localhost/ pid_file: /data/homeserver.pid diff --git a/backend/dev_nginx.conf b/backend/dev_nginx.conf index e4d665d6..bc60f9c1 100644 --- a/backend/dev_nginx.conf +++ b/backend/dev_nginx.conf @@ -5,7 +5,7 @@ server { listen 8448 ssl; listen [::]:443 ssl; listen [::]:8448 ssl; - server_name synapse.localhost; + server_name synapse.m.localhost; ssl_certificate /root/ssl/cert.pem; ssl_certificate_key /root/ssl/key.pem; @@ -17,7 +17,7 @@ server { # setting for livekit_service_url location /.well-known/matrix/client { add_header Access-Control-Allow-Origin *; - return 200 '{"m.homeserver": {"base_url": "http://synapse.localhost:8008"}, "org.matrix.msc4143.rtc_foci": [{"type": "livekit", "livekit_service_url": "http://matrix-rtc.localhost:8008/livekit/jwt"}]}'; + return 200 '{"m.homeserver": {"base_url": "https://synapse.m.localhost"}, "org.matrix.msc4143.rtc_foci": [{"type": "livekit", "livekit_service_url": "https://matrix-rtc.m.localhost/livekit/jwt"}]}'; default_type application/json; } @@ -46,7 +46,7 @@ server { listen 8448 ssl; listen [::]:443 ssl; listen [::]:8448 ssl; - server_name matrix-rtc.localhost; + server_name matrix-rtc.m.localhost; ssl_certificate /root/ssl/cert.pem; ssl_certificate_key /root/ssl/key.pem; diff --git a/dev-backend-docker-compose.yml b/dev-backend-docker-compose.yml index 38853054..ad25bf75 100644 --- a/dev-backend-docker-compose.yml +++ b/dev-backend-docker-compose.yml @@ -7,7 +7,7 @@ services: hostname: auth-server environment: - LK_JWT_PORT=8080 - - LIVEKIT_URL=ws://matrix-rtc.localhost/livekit/sfu + - LIVEKIT_URL=wss://matrix-rtc.m.localhost/livekit/sfu - LIVEKIT_KEY=devkey - LIVEKIT_SECRET=secret # If the configured homeserver runs on localhost, it'll probably be using @@ -83,7 +83,7 @@ services: nginx: # openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout tls_localhost_key.pem -out tls_localhost_cert.pem -subj "/C=GB/ST=London/L=London/O=Alros/OU=IT Department/CN=localhost" - hostname: synapse.localhost + hostname: synapse.m.localhost image: nginx:latest volumes: - ./backend/dev_nginx.conf:/etc/nginx/conf.d/default.conf:Z From 08f034251c2abb8216a6f41aa8e90a8a57c49737 Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 13:02:58 +0200 Subject: [PATCH 134/225] Add call.m.localhost pointing to yarn dev --host --- backend/dev_nginx.conf | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/backend/dev_nginx.conf b/backend/dev_nginx.conf index bc60f9c1..1b201a89 100644 --- a/backend/dev_nginx.conf +++ b/backend/dev_nginx.conf @@ -1,3 +1,4 @@ +# Synapse reverse proxy including .well-known/matrix/client server { listen 80; listen [::]:80; @@ -39,12 +40,15 @@ server { } +# MatrixRTC reverse proxy +# - MatrixRTC Authorization Service +# - LiveKit SFU websocket signaling connection server { listen 80; listen [::]:80; listen 443 ssl; - listen 8448 ssl; listen [::]:443 ssl; + listen 8448 ssl; listen [::]:8448 ssl; server_name matrix-rtc.m.localhost; ssl_certificate /root/ssl/cert.pem; @@ -83,3 +87,37 @@ server { error_page 500 502 503 504 /50x.html; } + + +# Convenience reverse proxy for the call.m.localhost domain to yarn dev --host +server { + listen 80; + listen [::]:80; + server_name call.m.localhost; + + return 301 https://$host$request_uri; +} + +server { + listen 443 ssl; + listen [::]:443 ssl; + server_name call.m.localhost; + ssl_certificate /root/ssl/cert.pem; + ssl_certificate_key /root/ssl/key.pem; + + + location ^~ / { + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_pass https://host.docker.internal:3000; + proxy_ssl_verify off; + + } + + error_page 500 502 503 504 /50x.html; + +} \ No newline at end of file From 14ff6dce9364ed362540d47cfe3e45f88b3829ff Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 13:05:07 +0200 Subject: [PATCH 135/225] localhost TLS mini CA including wildcard certs for *.m.localhost --- backend/dev_tls_local-ca.crt | 19 +++++++++++++++++ backend/dev_tls_local-ca.key | 28 +++++++++++++++++++++++++ backend/dev_tls_m.localhost.crt | 20 ++++++++++++++++++ backend/dev_tls_m.localhost.key | 28 +++++++++++++++++++++++++ backend/dev_tls_setup | 37 +++++++++++++++++++++++++++++++++ 5 files changed, 132 insertions(+) create mode 100644 backend/dev_tls_local-ca.crt create mode 100644 backend/dev_tls_local-ca.key create mode 100644 backend/dev_tls_m.localhost.crt create mode 100644 backend/dev_tls_m.localhost.key create mode 100644 backend/dev_tls_setup diff --git a/backend/dev_tls_local-ca.crt b/backend/dev_tls_local-ca.crt new file mode 100644 index 00000000..9c8ee3d7 --- /dev/null +++ b/backend/dev_tls_local-ca.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDGjCCAgKgAwIBAgIUGdiFHhH4KL2pqBjMQHQ+PVIkSV8wDQYJKoZIhvcNAQEL +BQAwHjEcMBoGA1UEAwwTRWxlbWVudCBDYWxsIERldiBDQTAeFw0yNTA1MDUxMDMy +MDJaFw0zNTA1MDMxMDMyMDJaMB4xHDAaBgNVBAMME0VsZW1lbnQgQ2FsbCBEZXYg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA2y0hjmNn1vRsVSdy +8IOfo8N1q9UgkhQWpGKXzPh+D5d1fnuJEmHIVwtDEtS/PwQ43LTmegChPtKH9jdT +tG0IihW9Ja5YNG+9xAwaoA/sB3CGCBYsz+2/XjVUpXoBJXIPoFBWsn+K0oeFw9fw +eRO1z9abM4cl+LjKzMNM8CCyu9uI1MaGjYez2YIWvG854VucLxX7HSlMJxZNWnie +Ui7fMakuJhB2+aiIQjdKxy4E5RHNhzYG/LXhvP+wBYBDPNRsP3rtzEaE9HAveL9K +FGqd3R4cBia6r1WIXmpAzyu5RGP5Eou0TZlGkal96/bF0I7q/pKlL23Jt1BLPiQU +KGKrAgMBAAGjUDBOMB0GA1UdDgQWBBQJqBjMu61c1p24txw/y+kv3D+V6DAfBgNV +HSMEGDAWgBQJqBjMu61c1p24txw/y+kv3D+V6DAMBgNVHRMEBTADAQH/MA0GCSqG +SIb3DQEBCwUAA4IBAQB8m2YfFGLugNt5vAAOvNxVqDA8c72yCVYr3CBCpmTIEY5Z +d3qVGhG9//ux6+J8ntkSwd9nV5GJyYXHukCG1VavnAWolWdNF/WAllf0jhLuz7kD +/cJnuI1By4tBsBmSz851i6HJ4t5k99Be+6GQVzi0e7zzfxTHZE4xP2J6Ox8QbPsP +n0m76nIp/WbWaJqzvIIjJhmUUPPv+4wN+eOArgjiGLzptM2qTtGZtd0c9nS5gvep ++mEbSUN9zkhAroZf80wf+hEvy+fJ94VbZ9QjTzTg7odZLrsXGIe8DaG63EYRQ25b +W5iYBAreln5fGSt7qHsGfqwZibTEk/Lx3dydO1Kg +-----END CERTIFICATE----- diff --git a/backend/dev_tls_local-ca.key b/backend/dev_tls_local-ca.key new file mode 100644 index 00000000..c6de05c4 --- /dev/null +++ b/backend/dev_tls_local-ca.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDA2y0hjmNn1vRs +VSdy8IOfo8N1q9UgkhQWpGKXzPh+D5d1fnuJEmHIVwtDEtS/PwQ43LTmegChPtKH +9jdTtG0IihW9Ja5YNG+9xAwaoA/sB3CGCBYsz+2/XjVUpXoBJXIPoFBWsn+K0oeF +w9fweRO1z9abM4cl+LjKzMNM8CCyu9uI1MaGjYez2YIWvG854VucLxX7HSlMJxZN +WnieUi7fMakuJhB2+aiIQjdKxy4E5RHNhzYG/LXhvP+wBYBDPNRsP3rtzEaE9HAv +eL9KFGqd3R4cBia6r1WIXmpAzyu5RGP5Eou0TZlGkal96/bF0I7q/pKlL23Jt1BL +PiQUKGKrAgMBAAECggEAAPX2kxi5AQ7ul82SzT1KgpSXyDHLdYaUyAoYnaX9RO+B +8ylmpyeqygs4+KQS4EMJm9jpo85Oy37bIKdG3kljU6wQcKlL5Y+ZUOo1nzpV6fid +hGVs6ts8VXw8KshKQ9AyccZ8L/pirUfgOffgTwfjY7/90zceAL/s98GuZWc62nkX +55joQv/OikqYfAGP/U6Bp2Zyf23DwJB09Z3B6NnZj/ZyAbDrDEHuA15LhCOcCczp +IU/mFEywBPHT9Tg4w4Beq78PeAETvku2UalYRLhP3RLlXr2oEbwUtINRVt2QjZ85 +Esps4uCqL/mgQluIebtudD9HL/YMlNPXue1mDXFxJQKBgQDgZZY4yJBcf488T1V6 +HNm06b/LvVGj253pKgw14hpY1xQu3Ymgzv1GEqzhSYdzxhpmj0tMUNHxAp+YdGQu +SZ0wcPKhw0aYVkIjDRYDC3Wn5GJhyIEYHGYMo/n4l49UzHRBPOTDzp49DkHTKBgh +XgIIazYT3CkjTIMRrkUv+qfIPQKBgQDcBGu/mqbjxs4sN3zqPS4aB21o6t6W0sXs +ZP9w6RlTPQi5U2oRbftjZtYc0bbEgkMUImB1HwYPQT5pJ+MyC414xDvSc2exBr5d +To6yyPIy78Tf5PHM12fpKV92nSvoz/pSjYcGxxDtKfPqu+t8mOJfjCV1lLLA+xuB +DDaE4p8dBwKBgQCdAne6A5v/HMH8UQZeCxHJpESvKiiVnnU/UEx651nID7XvlNNX +0X0mKqsMd4ZvW43ddSYan/JF0LAa3FW8jYWO/3jF9vzOWoysOdvNBZetgf/Uq5ao +aDZ/YbzmVCXWD7jIbPMkjs3pqrAkL0mzDzQc7+dGviWKrV6IYIfIqnn7gQKBgDCz +vdIk/qpO+JZrFfiX4Fucp0hhLTJ/p5ZDaRPqVVPKn+K+Jy2ChfIj8mNgvK9VEloj +nexvGJ1J2PHYBX+vdPp1nbRhHWPfVUY8PHQw7QP/dToGaMvqJrNDGEGeWvjnCMc7 +UtdaO1H0Rm0AegkTopB56lTTvJnhO95eALd7nrMDAoGAEPdzJtWoKafp49svhSj0 +hiXQv2SPBwVUN4LZ4SOWiXUcmYYm80aNpYKLkBxYjrfqFWhE7NUHLGp8YorQWKY2 +acD9AReHk/xku0ABy6jeYmSCmCxASxst5liKD+l12sk0gB0rk5MBxB4Uu1MIbQZ2 +aCASX3AVD2/XyC2MKkzc8Eg= +-----END PRIVATE KEY----- diff --git a/backend/dev_tls_m.localhost.crt b/backend/dev_tls_m.localhost.crt new file mode 100644 index 00000000..be3eb0a3 --- /dev/null +++ b/backend/dev_tls_m.localhost.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDXDCCAkSgAwIBAgIUXizLjwkdqepX0bh0K3abeJxj68AwDQYJKoZIhvcNAQEL +BQAwHjEcMBoGA1UEAwwTRWxlbWVudCBDYWxsIERldiBDQTAeFw0yNTA1MDUxMDMy +MDJaFw0zNTA1MDMxMDMyMDJaMBgxFjAUBgNVBAMMDSoubS5sb2NhbGhvc3QwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbr79gttr7X8j+ISfdCV53PD8f +R6JsLf6nmkCbRqCaIq85Y82tnYbUB3B6F9RcosrxF+UHFMa/i1UiLSNL0GHisclB +5LII2RycsLJYShkO9pVioVDf3gh+hyVRySBQ2FgtLHB+ZgcZOCG8f75g9CdeVDmv +Kw4J29QV8bxFSafvTLOdqtupylfTSqYVTAE8HnIOsdnZ+mE6SjeS2wV3DYqdSXoa +xWmGranZUmrCgeZdukAZTWgAlHgQvuWVtgyAxPmhcr2KA50QHB/IJ2SDIaUiI++R +4nXkVChbePnNaxqw0kc0QD3Jpd3B1QhHlOhKi9R6Mo5Iyf0nsHnZaQ0bAzPDAgMB +AAGjgZcwgZQwHwYDVR0jBBgwFoAUCagYzLutXNaduLccP8vpL9w/legwCQYDVR0T +BAIwADALBgNVHQ8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwJQYDVR0RBB4w +HIILbS5sb2NhbGhvc3SCDSoubS5sb2NhbGhvc3QwHQYDVR0OBBYEFJgJZkgE6cem +HbSQ7P47rVhmeWjHMA0GCSqGSIb3DQEBCwUAA4IBAQBDocJIUHVxNvbvigPyZvZa +uAmj5eqhf8fDNtQM2tl8AuzOJm0TlggUuKDQNM6zRBXVHQRhCmtaZ3CMkmkTNNhH +aMfG7o/JVvQsxIuORMvAnPlivla2DgiEWr/NEaWISlINMov44DysOyupbHRXcbKd +WWB1cA+D5ZNb8ivOPT1edNSGavAiyEaCPA/qqGFZwq54EtJKIuteqV1UGn1nYD/W +a0niB157moRtlnzwNfwDDeW1Y4HBbuVkX2sipCO+HC6sn7Vni90LzK9zBolaWXTw +RxauTzS9IvtU1G/Gv5/VRzhzIb+ds2jEsdLLnBlTyA+Jh2Cqs002t7QJki6Qto5p +-----END CERTIFICATE----- diff --git a/backend/dev_tls_m.localhost.key b/backend/dev_tls_m.localhost.key new file mode 100644 index 00000000..d83c1dea --- /dev/null +++ b/backend/dev_tls_m.localhost.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCbr79gttr7X8j+ +ISfdCV53PD8fR6JsLf6nmkCbRqCaIq85Y82tnYbUB3B6F9RcosrxF+UHFMa/i1Ui +LSNL0GHisclB5LII2RycsLJYShkO9pVioVDf3gh+hyVRySBQ2FgtLHB+ZgcZOCG8 +f75g9CdeVDmvKw4J29QV8bxFSafvTLOdqtupylfTSqYVTAE8HnIOsdnZ+mE6SjeS +2wV3DYqdSXoaxWmGranZUmrCgeZdukAZTWgAlHgQvuWVtgyAxPmhcr2KA50QHB/I +J2SDIaUiI++R4nXkVChbePnNaxqw0kc0QD3Jpd3B1QhHlOhKi9R6Mo5Iyf0nsHnZ +aQ0bAzPDAgMBAAECggEARLRazvnzCnLbVrbYCjX7v7/RFWM9/OKRWnJ6p2uULWE4 +FaoDFuaJHSHJU8AXYegfiiTi1+ylxtrcr4/e3zKvN+UAbXlYzgnOFCHwGoFcrJtK +EnQhJiIsenX2lLCe9755rznIzScGY+0/ChoPsGaexwSBTlnAQL6HykVbMfKOz03H +ywEx4g3AK1rgTnqNLFHkl+1ainoW6ffeM6thMD/bObGz+PoGSMqbTA80TGMswgMN +Ipnt0AwSgKweLmYG00t667c9htxY6DPRUoJ55dqsAFS8VMa4hhcslyhktPXTGEXh +x2r8UAFavEo2IdRnR8vfNfOv6twsWSHTVRGc7qmKDQKBgQDX0HnMAnBb8KB1zj/O +1prhAlhc6Jtwf3s5Hm/2MW0Jg/u7bZx81s206rvcTJtUJ2ROH+K7Rx3iASWzcsuW +XljCWA9G156SuOBE6mIS1EMI1EKgjbJBru1cOco6AIwI0SuJKcEX/1RtzoBbIIbZ +qhn99RszqAKDjw1iqbpyZCX5PQKBgQC4rRLsMTVvFTqWPEAA7SeJr3LZF+eoap/U +1+MA+J49D5ykQMFHjL1VSdfWgKIm3i4xDbDLAX1BYELxeKVLIp6CL808zEldGQy5 +g+O4dJlmz1PUGorb28qKGJnfwXK7F5tJuX+NgQM2zJnueyTv+fsskBp79CWNQvzr +ueG41o6w/wKBgG7sA+3LQxy+LHrgKwOQYcJMhkYad+n2W8sbzcfn13cQkw3eZJP1 +g3z9ONkdtqgmJvPQh6RiBQXoOQxmcCU1EMGyqQdsQ2B+DSbeoNG0r0+WaThEG96O +ngjM2xe8uDy/5XR2NXy0Cxz1ChvMOAMf3oQcuoJuU/xyRhrzyZSJzMqxAoGAH8hx +nEKvzolZxudhoIcwKcsPOfuaO+r1zPzGrbEcEqgwLjiSywyWvSnzQpBq18OfMYQI +rDd6Zhj6DHLWB8NSgldVvCPwcFxSS08+js1KZV5DMBrNUR9XkULAoLi7VSWv7RVG +tYTBl9nImDmLVt2v87BtTm3rVI911d/s0BHlBuMCgYEAs0AFMsTE+22Y44JMcTAE +OeHEsEDXI5cTlcNmwFKWY+UCZnb2FXflO2XNeqyi6ReYMUyBI2wHdUGvh2B1c2Ac +3z/SShBLS7bMGgyvYE/By1xnemiy+6vG2NIYHKExZfOphx8rDTfm5Qlj6LxstY9+ +Tx2VzAs01UIZGDhJ94u5imo= +-----END PRIVATE KEY----- diff --git a/backend/dev_tls_setup b/backend/dev_tls_setup new file mode 100644 index 00000000..4276e148 --- /dev/null +++ b/backend/dev_tls_setup @@ -0,0 +1,37 @@ +#!/bin/bash + +# Step 1: Create a Root CA key and cert +openssl genrsa -out dev_tls_local-ca.key 2048 +openssl req -x509 -new -nodes \ + -days 3650 \ + -subj "/CN=Element Call Dev CA" \ + -key dev_tls_local-ca.key \ + -out dev_tls_local-ca.crt \ + -sha256 -addext "basicConstraints=CA:TRUE" + +# Step 2: Create a private key and CSR for *.m.localhost +openssl req -new -nodes -newkey rsa:2048 \ + -keyout dev_tls_m.localhost.key \ + -out dev_tls_m.localhost.csr \ + -subj "/CN=*.m.localhost" + +# Step 3: Sign the CSR with your CA +openssl x509 \ + -req -in dev_tls_m.localhost.csr \ + -CA dev_tls_local-ca.crt -CAkey dev_tls_local-ca.key \ + -CAcreateserial \ + -out dev_tls_m.localhost.crt \ + -days 3650 \ + -sha256 \ + -extfile <( cat < Date: Mon, 5 May 2025 13:06:02 +0200 Subject: [PATCH 136/225] add new certs to nginx section --- dev-backend-docker-compose.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dev-backend-docker-compose.yml b/dev-backend-docker-compose.yml index ad25bf75..c2786583 100644 --- a/dev-backend-docker-compose.yml +++ b/dev-backend-docker-compose.yml @@ -82,19 +82,22 @@ services: - ecbackend nginx: - # openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout tls_localhost_key.pem -out tls_localhost_cert.pem -subj "/C=GB/ST=London/L=London/O=Alros/OU=IT Department/CN=localhost" + # see backend/dev_tls_setup for how to generate the tls certs hostname: synapse.m.localhost image: nginx:latest volumes: - ./backend/dev_nginx.conf:/etc/nginx/conf.d/default.conf:Z - - ./backend/tls_localhost_key.pem:/root/ssl/key.pem:Z - - ./backend/tls_localhost_cert.pem:/root/ssl/cert.pem:Z + - ./backend/dev_tls_m.localhost.key:/root/ssl/key.pem:Z + - ./backend/dev_tls_m.localhost.crt:/root/ssl/cert.pem:Z ports: # HOST_PORT:CONTAINER_PORT - "80:80" - "443:443" - "8008:80" - "4443:443" + - "8448:8448" + extra_hosts: + - "host.docker.internal:host-gateway" depends_on: - synapse networks: From fb63e64eb4476c14398c2f7a27975391845f49dc Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 13:06:58 +0200 Subject: [PATCH 137/225] removed old localhost tls certificates --- backend/tls_localhost_cert.pem | 22 ---------------------- backend/tls_localhost_key.pem | 28 ---------------------------- 2 files changed, 50 deletions(-) delete mode 100644 backend/tls_localhost_cert.pem delete mode 100644 backend/tls_localhost_key.pem diff --git a/backend/tls_localhost_cert.pem b/backend/tls_localhost_cert.pem deleted file mode 100644 index 267ce0d5..00000000 --- a/backend/tls_localhost_cert.pem +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIUCmJjl3HAeLmrPwRg+/OzikW6peQwDQYJKoZIhvcNAQEL -BQAwazELMAkGA1UEBhMCR0IxDzANBgNVBAgMBkxvbmRvbjEPMA0GA1UEBwwGTG9u -ZG9uMQ4wDAYDVQQKDAVBbHJvczEWMBQGA1UECwwNSVQgRGVwYXJ0bWVudDESMBAG -A1UEAwwJbG9jYWxob3N0MB4XDTI0MTEwNDIxNDcwMFoXDTM0MTEwMjIxNDcwMFow -azELMAkGA1UEBhMCR0IxDzANBgNVBAgMBkxvbmRvbjEPMA0GA1UEBwwGTG9uZG9u -MQ4wDAYDVQQKDAVBbHJvczEWMBQGA1UECwwNSVQgRGVwYXJ0bWVudDESMBAGA1UE -AwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs368 -ExLSudP8luNoY5UfaPqBSVJUPYBi+JGyd36tyN75p5OI7xSfHTttQxuD4KrExBFP -C8mAhE1eoZPBVBOZJ4FYWBJfMaQnCjeqU+laP36td65kSJYbUYlKYH1WpxEpCdgx -wWOKkP/kPX5YXbYqODx9aBJXgoT3yAJW7AniIoL+eLFnS9Xo86TPqCDBTJU9ocwK -gPIDLhDv60724rhZT1kbGp7ECqRovndoDTQjuws2D3yNMfQ+4rrQGPXHGmP5PcaR -0R7uueB+6APyC7MJbuhbxxg/+DFHrRi3lJsgwxuh2hi/+vWw8zgKlgYIwHFA9X0l -cX0UlQdENMH3bgcGIwIDAQABo1MwUTAdBgNVHQ4EFgQUUFGxw7zoiHXGwRqtagjZ -RPYc85cwHwYDVR0jBBgwFoAUUFGxw7zoiHXGwRqtagjZRPYc85cwDwYDVR0TAQH/ -BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEALokb1z2lu3qW141b2wm14ilZQKCZ -reNNuUR95Uom96FXPH4QVEH+mYTXXJ5UrfNhQYKQFpdE+5S4HL/UqEOxtWvbAHpK -nsLQ62J8m+0+uwiJGqeQpWr03KJgXDAVE9X3XwMlp/+buxSLhc+GIHWuXW56itV2 -jiZJYjhO5SnhhgTWNoVZk93qXuuWEN0yacw7c3Fr1IvFYYYWufbXTk70dbZihPDK -VD141o8tpp6FerSKHNYDqkVFDyTz3DVOhQQJ59zfMre7bFr+PpTTl4vIuGzXEY+E -HPjUSlOzwkCoh5fu7Fs3qG55rJt8akhTEoKpiBTaLucgAjVWNHeci1+Yxg== ------END CERTIFICATE----- diff --git a/backend/tls_localhost_key.pem b/backend/tls_localhost_key.pem deleted file mode 100644 index 32801b3c..00000000 --- a/backend/tls_localhost_key.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCzfrwTEtK50/yW -42hjlR9o+oFJUlQ9gGL4kbJ3fq3I3vmnk4jvFJ8dO21DG4PgqsTEEU8LyYCETV6h -k8FUE5kngVhYEl8xpCcKN6pT6Vo/fq13rmRIlhtRiUpgfVanESkJ2DHBY4qQ/+Q9 -flhdtio4PH1oEleChPfIAlbsCeIigv54sWdL1ejzpM+oIMFMlT2hzAqA8gMuEO/r -TvbiuFlPWRsansQKpGi+d2gNNCO7CzYPfI0x9D7iutAY9ccaY/k9xpHRHu654H7o -A/ILswlu6FvHGD/4MUetGLeUmyDDG6HaGL/69bDzOAqWBgjAcUD1fSVxfRSVB0Q0 -wfduBwYjAgMBAAECggEACTqdSExxzJ+LX5ARFaWyOBSWly2GKqSyR14+aInOklhx -9QgkmfOxJrCf3TvJ8RWhXloW0Aqr8qGDxG0Ixgjn7rG7gskXCey1xn8MNppLS0kj -ztaG+NB3AR89ABm8XdoHsSY45geh3/Ni9I0i1VardGQafUJhgNLTZqjwIodzkBtJ -S/bi4uFk1lGNfuvWQvWqzGXUvd1l1YupV6iA4GfhXlUvrSBZwftLBD6xEvQaSqsA -pHvBxTfMXG4RMAkNPDIElkuQ8++CGi1gIRkJfmrv4OgbbitteMnxqqqGYV0zSNCg -R/5FG6umIV7lDLBHZCSCk7wmfmq2UUvzhHThHy4yMQKBgQDu4TwFJCIcVIj7Wj4r -DUBFvz6Lgbltqb+YAMUBtpiDcAQxDJWmedh6dK04ts5CFAFRlRjjuz2uFn7qlVBm -uye9R7tL+tOv5viqDXU78a4snFywoXub6yzpbxrW8B4W1pdIUvQmhwCcDwvO1V24 -7Vj2vxcM5I9dsk1aCQSi3VY5yQKBgQDAW/VoTRwhU6OUc6sji5Z5dnkMjkP6NZK9 -CSrTWLAMGaLPY+g6fFS7JMNSvfWm/okypD6rcN7p0cxMK3mfFKmMiyPRde0wdrci -sGFjGxM/2d2D7KTMC9iMYwA0K17UIna+UiYPfhR/muIg/dCyjlkKDFs9Z4jk//r1 -91bmznt2iwKBgFdiYXhn/Wprqih4nKFXGZnqGdEixVhObl4GegrkZuo+AeqHdf8O -N5ikMfG7PbyCYPEdH5u/FRMn+4mI0X6jHChroyJqQSHp1jEu9yHUiSicknOyvusM -nsNN932FHRyxp2m3nsSxQhHUlzc0ajKJ8K9iu+XlfmSCIzW6cs25Nh+xAoGBAJro -M0wIdPPdsCj3sUVRvx8XqknTM6kGhaIYBNXoYPWNm5BaC4U15OJEq8sxUOdnqcMP -g6x6m/k+S8C3bh0O/a9Bydl/l0BlCfw0gGjYP/s2ju4Tn272xy/e9iYNGzPIgUmp -TB9D0GwmpZ4d6HgyrD+sTbm4bATGpCp6QhBjDggbAoGBAJVMMtZ4pF8D6mLMRZGR -pQjNPy+MH13XYmDRc/BSF8KJ4yKk3tohr9LSXzxR0SEB43NoL1bHkucZrNjGyL8x -jktnwkoIs96kO2mPrl1TqWkXs5RjGkkSTbAJovIcvkRU31SWap/WzN2kHpmRVcQc -KEFKXT5fUYZCLLWxhgZFlGPp ------END PRIVATE KEY----- From 9c65b402251a8307215c8f437579a2aaa62758f9 Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 13:07:37 +0200 Subject: [PATCH 138/225] adapt new hostname schema and move to https URLs --- config/config.devenv.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.devenv.json b/config/config.devenv.json index b0e38ee4..59608d13 100644 --- a/config/config.devenv.json +++ b/config/config.devenv.json @@ -1,8 +1,8 @@ { "default_server_config": { "m.homeserver": { - "base_url": "http://synapse.localhost:8008", - "server_name": "synapse.localhost" + "base_url": "https://synapse.m.localhost", + "server_name": "synapse.m.localhost" } }, "features": { From 25afbf430322aeaec83fa2bb4ff2feaedf6217ad Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 14:20:51 +0200 Subject: [PATCH 139/225] base playwright backend on dev-backend --- backend/ew.test.config.json | 4 +- backend/playwright_homeserver.yaml | 4 +- ...wright-backend-docker-compose.override.yml | 4 + playwright-backend-docker-compose.yml | 99 +------------------ 4 files changed, 10 insertions(+), 101 deletions(-) create mode 100644 playwright-backend-docker-compose.override.yml diff --git a/backend/ew.test.config.json b/backend/ew.test.config.json index fac478dd..3644714b 100644 --- a/backend/ew.test.config.json +++ b/backend/ew.test.config.json @@ -1,8 +1,8 @@ { "default_server_config": { "m.homeserver": { - "base_url": "http://synapse.localhost:8008", - "server_name": "synapse.localhost" + "base_url": "http://synapse.m.localhost:8008", + "server_name": "synapse.m.localhost" } }, "disable_custom_urls": false, diff --git a/backend/playwright_homeserver.yaml b/backend/playwright_homeserver.yaml index d4d0a041..ca45cf3f 100644 --- a/backend/playwright_homeserver.yaml +++ b/backend/playwright_homeserver.yaml @@ -1,5 +1,5 @@ -server_name: "synapse.localhost" -public_baseurl: http://synapse.localhost:8008/ +server_name: "synapse.m.localhost" +public_baseurl: https://synapse.m.localhost/ pid_file: /data/homeserver.pid diff --git a/playwright-backend-docker-compose.override.yml b/playwright-backend-docker-compose.override.yml new file mode 100644 index 00000000..34f01682 --- /dev/null +++ b/playwright-backend-docker-compose.override.yml @@ -0,0 +1,4 @@ +services: + synapse: + volumes: + - ./backend/playwright_homeserver.yaml:/data/cfg/homeserver.yaml:Z \ No newline at end of file diff --git a/playwright-backend-docker-compose.yml b/playwright-backend-docker-compose.yml index e5cf12b5..4ac42faf 100644 --- a/playwright-backend-docker-compose.yml +++ b/playwright-backend-docker-compose.yml @@ -1,97 +1,2 @@ -networks: - ecbackend: - -services: - auth-service: - image: ghcr.io/element-hq/lk-jwt-service:latest-ci - hostname: auth-server - environment: - - LK_JWT_PORT=8080 - - LIVEKIT_URL=ws://localhost:7880 - - LIVEKIT_KEY=devkey - - LIVEKIT_SECRET=secret - # If the configured homeserver runs on localhost, it'll probably be using - # a self-signed certificate - - LIVEKIT_INSECURE_SKIP_VERIFY_TLS=YES_I_KNOW_WHAT_I_AM_DOING - deploy: - restart_policy: - condition: on-failure - ports: - # HOST_PORT:CONTAINER_PORT - - 8009:8080 - networks: - - ecbackend - - livekit: - image: livekit/livekit-server:latest - command: --dev --config /etc/livekit.yaml - restart: unless-stopped - # The SFU seems to work far more reliably when we let it share the host - # network rather than opening specific ports (but why?? we're not missing - # any…) - ports: - # HOST_PORT:CONTAINER_PORT - - 7880:7880/tcp - - 7881:7881/tcp - - 7882:7882/tcp - - 50100-50200:50100-50200/udp - volumes: - - ./backend/dev_livekit.yaml:/etc/livekit.yaml:Z - networks: - - ecbackend - - redis: - image: redis:6-alpine - command: redis-server /etc/redis.conf - ports: - # HOST_PORT:CONTAINER_PORT - - 6379:6379 - volumes: - - ./backend/redis.conf:/etc/redis.conf:Z - networks: - - ecbackend - - element-web: - image: ghcr.io/element-hq/element-web:develop - volumes: - - ./backend/ew.test.config.json:/app/config.json - environment: - ELEMENT_WEB_PORT: 81 - ports: - - "8081:81" - networks: - - ecbackend - - synapse: - hostname: homeserver - image: docker.io/matrixdotorg/synapse:latest - environment: - - SYNAPSE_CONFIG_PATH=/data/cfg/homeserver.yaml - # Needed for rootless podman-compose such that the uid/gid mapping does - # fit local user uid. If the container runs as root (uid 0) it is fine as - # it actually maps to your non-root user on the host (e.g. 1000). - # Otherwise uid mapping will not match your non-root user. - - UID=0 - - GID=0 - volumes: - - ./backend/synapse_tmp:/data:Z - - ./backend/playwright_homeserver.yaml:/data/cfg/homeserver.yaml:Z - networks: - - ecbackend - - nginx: - # openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout tls_localhost_key.pem -out tls_localhost_cert.pem -subj "/C=GB/ST=London/L=London/O=Alros/OU=IT Department/CN=localhost" - hostname: synapse.localhost - image: nginx:latest - volumes: - - ./backend/tls_localhost_nginx.conf:/etc/nginx/conf.d/default.conf:Z - - ./backend/tls_localhost_key.pem:/root/ssl/key.pem:Z - - ./backend/tls_localhost_cert.pem:/root/ssl/cert.pem:Z - ports: - # HOST_PORT:CONTAINER_PORT - - "8008:80" - - "4443:443" - depends_on: - - synapse - networks: - - ecbackend +include: + - dev-backend-docker-compose.yml \ No newline at end of file From 76fb16dbfd391b5c94f9a476f3ae731a72a7a3d9 Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 14:44:21 +0200 Subject: [PATCH 140/225] update README.md to reflect TLS settings --- README.md | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index db7cc43f..f7530e4c 100644 --- a/README.md +++ b/README.md @@ -207,12 +207,19 @@ See also: A docker compose file `dev-backend-docker-compose.yml` is provided to start the whole stack of components which is required for a local development environment: -- Minimum Synapse Setup (servername: `synapse.localhost`) -- LiveKit JWT Service (Note requires Federation API and hence a TLS reverse proxy) -- Minimum TLS reverse proxy (servername: `synapse.localhost`) Note certificates - are valid for at least 10 years from now +- Minimum Synapse Setup (servername: `synapse.m.localhost`) +- LiveKit Authorization Service (Note requires Federation API and hence a TLS reverse proxy) - Minimum LiveKit SFU Setup using dev defaults for config - Redis db for completeness +- Minimum `localhost` Certificate Authority (CA) for Transport Layer Security (TLS) + - Hostnames: `m.localhost`, `*.m.localhost` + - Add [./backend/dev_tls_local-ca.crt](./backend/dev_tls_local-ca.crt) to your web browsers trusted + certificates +- Minimum TLS reverse proxy for + - Synapse homeserver: `synapse.m.localhost` + - MatrixRTC backend: `matrix-rtc.m.localhost` + - Local Element Call development `call.m.localhost` + - Note certificates will expire on Thu, 03 May 2035 10:32:02 GMT These use a test 'secret' published in this repository, so this must be used only for local development and **_never be exposed to the public Internet._** @@ -226,11 +233,14 @@ yarn backend ``` > [!NOTE] -> To ensure your local development frontend functions properly, you’ll need to add -> certificate exceptions in your browser for both `https://localhost:3000` and -> `https://synapse.localhost/.well-known/matrix/client`. The easiest way to do this -> is to simply copy and paste each URL into your browser’s address bar and follow -> the prompts to add the exception. +> To ensure your local development frontend functions properly, you’ll need to +> add certificate exceptions in your browser for `https://localhost:3000`, +> `https://matrix-rtc.m.localhost/livekit/jwt/healthz` and +> `https://synapse.m.localhost/.well-known/matrix/client`. This can be either +> done by adding the minimum localhost CA +> ([./backend/dev_tls_local-ca.crt](./backend/dev_tls_local-ca.crt)) to your web +> browsers trusted certificates or by simply copying and pasting each URL into +> your browser’s address bar and follow the prompts to add the exception. ### Playwright tests From 005402d8d148110e1aee3c548e8a358c0b454a16 Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 14:48:45 +0200 Subject: [PATCH 141/225] prettier --- README.md | 4 ++-- playwright-backend-docker-compose.override.yml | 2 +- playwright-backend-docker-compose.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f7530e4c..ac9a61db 100644 --- a/README.md +++ b/README.md @@ -212,8 +212,8 @@ whole stack of components which is required for a local development environment: - Minimum LiveKit SFU Setup using dev defaults for config - Redis db for completeness - Minimum `localhost` Certificate Authority (CA) for Transport Layer Security (TLS) - - Hostnames: `m.localhost`, `*.m.localhost` - - Add [./backend/dev_tls_local-ca.crt](./backend/dev_tls_local-ca.crt) to your web browsers trusted + - Hostnames: `m.localhost`, `*.m.localhost` + - Add [./backend/dev_tls_local-ca.crt](./backend/dev_tls_local-ca.crt) to your web browsers trusted certificates - Minimum TLS reverse proxy for - Synapse homeserver: `synapse.m.localhost` diff --git a/playwright-backend-docker-compose.override.yml b/playwright-backend-docker-compose.override.yml index 34f01682..dadbccc2 100644 --- a/playwright-backend-docker-compose.override.yml +++ b/playwright-backend-docker-compose.override.yml @@ -1,4 +1,4 @@ services: synapse: volumes: - - ./backend/playwright_homeserver.yaml:/data/cfg/homeserver.yaml:Z \ No newline at end of file + - ./backend/playwright_homeserver.yaml:/data/cfg/homeserver.yaml:Z diff --git a/playwright-backend-docker-compose.yml b/playwright-backend-docker-compose.yml index 4ac42faf..bb6686d0 100644 --- a/playwright-backend-docker-compose.yml +++ b/playwright-backend-docker-compose.yml @@ -1,2 +1,2 @@ include: - - dev-backend-docker-compose.yml \ No newline at end of file + - dev-backend-docker-compose.yml From 34a223f04b54b950080dc26001db00d5d1e25987 Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 14:54:14 +0200 Subject: [PATCH 142/225] add yarn dev --host hint --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ac9a61db..9fb653f5 100644 --- a/README.md +++ b/README.md @@ -218,7 +218,7 @@ whole stack of components which is required for a local development environment: - Minimum TLS reverse proxy for - Synapse homeserver: `synapse.m.localhost` - MatrixRTC backend: `matrix-rtc.m.localhost` - - Local Element Call development `call.m.localhost` + - Local Element Call development `call.m.localhost` via `yarn dev --host ` - Note certificates will expire on Thu, 03 May 2035 10:32:02 GMT These use a test 'secret' published in this repository, so this must be used From 9dcaa60982ab864e07e60c7e298afa35a94e012e Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 15:26:47 +0200 Subject: [PATCH 143/225] added app.m.localhost for element web --- backend/dev_nginx.conf | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/backend/dev_nginx.conf b/backend/dev_nginx.conf index 1b201a89..59a25ba0 100644 --- a/backend/dev_nginx.conf +++ b/backend/dev_nginx.conf @@ -88,7 +88,6 @@ server { } - # Convenience reverse proxy for the call.m.localhost domain to yarn dev --host server { listen 80; @@ -120,4 +119,37 @@ server { error_page 500 502 503 504 /50x.html; +} + +# Convenience reverse proxy app.m.localhost for element web +server { + listen 80; + listen [::]:80; + server_name app.m.localhost; + + return 301 https://$host$request_uri; +} + +server { + listen 443 ssl; + listen [::]:443 ssl; + server_name app.m.localhost; + ssl_certificate /root/ssl/cert.pem; + ssl_certificate_key /root/ssl/key.pem; + + + location ^~ / { + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_pass http://element-web:81; + proxy_ssl_verify off; + + } + + error_page 500 502 503 504 /50x.html; + } \ No newline at end of file From 679ff8c2afe027da9c7617b6de7119aee1d03857 Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 15:47:03 +0200 Subject: [PATCH 144/225] adapt to TLS setup --- README.md | 1 + backend/ew.test.config.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9fb653f5..510b7c76 100644 --- a/README.md +++ b/README.md @@ -219,6 +219,7 @@ whole stack of components which is required for a local development environment: - Synapse homeserver: `synapse.m.localhost` - MatrixRTC backend: `matrix-rtc.m.localhost` - Local Element Call development `call.m.localhost` via `yarn dev --host ` + - Element Web `app.m.localhost` - Note certificates will expire on Thu, 03 May 2035 10:32:02 GMT These use a test 'secret' published in this repository, so this must be used diff --git a/backend/ew.test.config.json b/backend/ew.test.config.json index 3644714b..52be51b8 100644 --- a/backend/ew.test.config.json +++ b/backend/ew.test.config.json @@ -1,7 +1,7 @@ { "default_server_config": { "m.homeserver": { - "base_url": "http://synapse.m.localhost:8008", + "base_url": "https://synapse.m.localhost", "server_name": "synapse.m.localhost" } }, From 128851263b2191090926eb3e9bad0daf77b9a81f Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 16:01:58 +0200 Subject: [PATCH 145/225] use ssl cert from mini localhost CA --- vite.config.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/vite.config.js b/vite.config.js index 590f3c16..4985e75a 100644 --- a/vite.config.js +++ b/vite.config.js @@ -11,8 +11,8 @@ import { createHtmlPlugin } from "vite-plugin-html"; import { codecovVitePlugin } from "@codecov/vite-plugin"; import { sentryVitePlugin } from "@sentry/vite-plugin"; import react from "@vitejs/plugin-react"; -import basicSsl from "@vitejs/plugin-basic-ssl"; import { realpathSync } from "fs"; +import * as fs from "node:fs"; // https://vitejs.dev/config/ export default defineConfig(({ mode, packageType }) => { @@ -24,7 +24,6 @@ export default defineConfig(({ mode, packageType }) => { process.env.VITE_PACKAGE = packageType ?? "full"; const plugins = [ react(), - basicSsl(), svgrPlugin({ svgrOptions: { // This enables ref forwarding on SVGR components, which is needed, for @@ -83,7 +82,11 @@ export default defineConfig(({ mode, packageType }) => { return { server: { port: 3000, - fs: { allow }, + fs: { allow }, + https: { + key: fs.readFileSync('./backend/dev_tls_m.localhost.key'), + cert: fs.readFileSync('./backend/dev_tls_m.localhost.crt'), + }, }, build: { sourcemap: true, From f2b68e6deeaad13fbe0be60ed82646db46ffc1db Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 16:02:19 +0200 Subject: [PATCH 146/225] add localhost domain to certificate --- backend/dev_tls_m.localhost.crt | 37 +++++++++++------------ backend/dev_tls_m.localhost.key | 52 ++++++++++++++++----------------- backend/dev_tls_setup | 5 ++-- 3 files changed, 48 insertions(+), 46 deletions(-) diff --git a/backend/dev_tls_m.localhost.crt b/backend/dev_tls_m.localhost.crt index be3eb0a3..5d6251a9 100644 --- a/backend/dev_tls_m.localhost.crt +++ b/backend/dev_tls_m.localhost.crt @@ -1,20 +1,21 @@ -----BEGIN CERTIFICATE----- -MIIDXDCCAkSgAwIBAgIUXizLjwkdqepX0bh0K3abeJxj68AwDQYJKoZIhvcNAQEL -BQAwHjEcMBoGA1UEAwwTRWxlbWVudCBDYWxsIERldiBDQTAeFw0yNTA1MDUxMDMy -MDJaFw0zNTA1MDMxMDMyMDJaMBgxFjAUBgNVBAMMDSoubS5sb2NhbGhvc3QwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbr79gttr7X8j+ISfdCV53PD8f -R6JsLf6nmkCbRqCaIq85Y82tnYbUB3B6F9RcosrxF+UHFMa/i1UiLSNL0GHisclB -5LII2RycsLJYShkO9pVioVDf3gh+hyVRySBQ2FgtLHB+ZgcZOCG8f75g9CdeVDmv -Kw4J29QV8bxFSafvTLOdqtupylfTSqYVTAE8HnIOsdnZ+mE6SjeS2wV3DYqdSXoa -xWmGranZUmrCgeZdukAZTWgAlHgQvuWVtgyAxPmhcr2KA50QHB/IJ2SDIaUiI++R -4nXkVChbePnNaxqw0kc0QD3Jpd3B1QhHlOhKi9R6Mo5Iyf0nsHnZaQ0bAzPDAgMB -AAGjgZcwgZQwHwYDVR0jBBgwFoAUCagYzLutXNaduLccP8vpL9w/legwCQYDVR0T -BAIwADALBgNVHQ8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwJQYDVR0RBB4w -HIILbS5sb2NhbGhvc3SCDSoubS5sb2NhbGhvc3QwHQYDVR0OBBYEFJgJZkgE6cem -HbSQ7P47rVhmeWjHMA0GCSqGSIb3DQEBCwUAA4IBAQBDocJIUHVxNvbvigPyZvZa -uAmj5eqhf8fDNtQM2tl8AuzOJm0TlggUuKDQNM6zRBXVHQRhCmtaZ3CMkmkTNNhH -aMfG7o/JVvQsxIuORMvAnPlivla2DgiEWr/NEaWISlINMov44DysOyupbHRXcbKd -WWB1cA+D5ZNb8ivOPT1edNSGavAiyEaCPA/qqGFZwq54EtJKIuteqV1UGn1nYD/W -a0niB157moRtlnzwNfwDDeW1Y4HBbuVkX2sipCO+HC6sn7Vni90LzK9zBolaWXTw -RxauTzS9IvtU1G/Gv5/VRzhzIb+ds2jEsdLLnBlTyA+Jh2Cqs002t7QJki6Qto5p +MIIDZzCCAk+gAwIBAgIUXizLjwkdqepX0bh0K3abeJxj68IwDQYJKoZIhvcNAQEL +BQAwHjEcMBoGA1UEAwwTRWxlbWVudCBDYWxsIERldiBDQTAeFw0yNTA1MDUxMzU5 +MTFaFw0zNTA1MDMxMzU5MTFaMBgxFjAUBgNVBAMMDSoubS5sb2NhbGhvc3QwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrzGSScSgaQuZdELGFYiLiYRwr +LKyUdNr0rsPcOo0bvbeZ3zQMeUMRNlA69zGFdarumiDRXUoAmZI39WmH95aX3d+A +U7EFnWev7xpWSVhSYj8T0d4rke8HjGk3LpaffJ93tbJuagBIH1ouuN6AOdzWs8hp +RYIomWleEeeuVnnfaMwaXOdc+ihJJ6wzm2hwQSfdpjZPWBDd/DFft1ZXxIZOCjDs +rEIiI7uU8iZPLB3QEM/tgxSSAOxrcKvQvxZokk+FD7aMJFP71IfieLCEzMTP1VXa +tP7UTAKAqB2NyDJ8m3IHbOINiqcdFvFR3R1D9bXOYE4oRynNvYZrQUGnL2RtAgMB +AAGjgaIwgZ8wHwYDVR0jBBgwFoAUCagYzLutXNaduLccP8vpL9w/legwCQYDVR0T +BAIwADALBgNVHQ8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwMAYDVR0RBCkw +J4IJbG9jYWxob3N0ggttLmxvY2FsaG9zdIINKi5tLmxvY2FsaG9zdDAdBgNVHQ4E +FgQUfdh1p52ZgWyZcBgBXGwKi4EnUE0wDQYJKoZIhvcNAQELBQADggEBAKrHEuB6 +33j8+EwSHw3zrvt/DRXK2BDHI1Ir9JcztSunaKAjZXVvf/dvZp0Xs1dEdJIdnv6G +iZYhBbOqDqpQZbf2h/h0kuu5yZSBUdnQXnYNxlhp2UaC/UEgw5iZT/p1rm7RjVie +y4Dp2WytV5iZOLmLj6xDvd3DXazgJPWIRX8p8qJZbKTkwCjTr7nDIj8jjG1sVFf7 +1RJBO5/6WSnImrpDmlLUrvjiKvbxcdseDJyBOhTwdRdSk4S2M+s5tR5j2I1gXLOq +J5ioN76+SCrTY0K0WKRy9oOXWO1/X3+VYcekp+0F3SGkd5w17jylCv1XIGHAdEsQ +v2z2/aMI/7sAD2Q= -----END CERTIFICATE----- diff --git a/backend/dev_tls_m.localhost.key b/backend/dev_tls_m.localhost.key index d83c1dea..73d89ce4 100644 --- a/backend/dev_tls_m.localhost.key +++ b/backend/dev_tls_m.localhost.key @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCbr79gttr7X8j+ -ISfdCV53PD8fR6JsLf6nmkCbRqCaIq85Y82tnYbUB3B6F9RcosrxF+UHFMa/i1Ui -LSNL0GHisclB5LII2RycsLJYShkO9pVioVDf3gh+hyVRySBQ2FgtLHB+ZgcZOCG8 -f75g9CdeVDmvKw4J29QV8bxFSafvTLOdqtupylfTSqYVTAE8HnIOsdnZ+mE6SjeS -2wV3DYqdSXoaxWmGranZUmrCgeZdukAZTWgAlHgQvuWVtgyAxPmhcr2KA50QHB/I -J2SDIaUiI++R4nXkVChbePnNaxqw0kc0QD3Jpd3B1QhHlOhKi9R6Mo5Iyf0nsHnZ -aQ0bAzPDAgMBAAECggEARLRazvnzCnLbVrbYCjX7v7/RFWM9/OKRWnJ6p2uULWE4 -FaoDFuaJHSHJU8AXYegfiiTi1+ylxtrcr4/e3zKvN+UAbXlYzgnOFCHwGoFcrJtK -EnQhJiIsenX2lLCe9755rznIzScGY+0/ChoPsGaexwSBTlnAQL6HykVbMfKOz03H -ywEx4g3AK1rgTnqNLFHkl+1ainoW6ffeM6thMD/bObGz+PoGSMqbTA80TGMswgMN -Ipnt0AwSgKweLmYG00t667c9htxY6DPRUoJ55dqsAFS8VMa4hhcslyhktPXTGEXh -x2r8UAFavEo2IdRnR8vfNfOv6twsWSHTVRGc7qmKDQKBgQDX0HnMAnBb8KB1zj/O -1prhAlhc6Jtwf3s5Hm/2MW0Jg/u7bZx81s206rvcTJtUJ2ROH+K7Rx3iASWzcsuW -XljCWA9G156SuOBE6mIS1EMI1EKgjbJBru1cOco6AIwI0SuJKcEX/1RtzoBbIIbZ -qhn99RszqAKDjw1iqbpyZCX5PQKBgQC4rRLsMTVvFTqWPEAA7SeJr3LZF+eoap/U -1+MA+J49D5ykQMFHjL1VSdfWgKIm3i4xDbDLAX1BYELxeKVLIp6CL808zEldGQy5 -g+O4dJlmz1PUGorb28qKGJnfwXK7F5tJuX+NgQM2zJnueyTv+fsskBp79CWNQvzr -ueG41o6w/wKBgG7sA+3LQxy+LHrgKwOQYcJMhkYad+n2W8sbzcfn13cQkw3eZJP1 -g3z9ONkdtqgmJvPQh6RiBQXoOQxmcCU1EMGyqQdsQ2B+DSbeoNG0r0+WaThEG96O -ngjM2xe8uDy/5XR2NXy0Cxz1ChvMOAMf3oQcuoJuU/xyRhrzyZSJzMqxAoGAH8hx -nEKvzolZxudhoIcwKcsPOfuaO+r1zPzGrbEcEqgwLjiSywyWvSnzQpBq18OfMYQI -rDd6Zhj6DHLWB8NSgldVvCPwcFxSS08+js1KZV5DMBrNUR9XkULAoLi7VSWv7RVG -tYTBl9nImDmLVt2v87BtTm3rVI911d/s0BHlBuMCgYEAs0AFMsTE+22Y44JMcTAE -OeHEsEDXI5cTlcNmwFKWY+UCZnb2FXflO2XNeqyi6ReYMUyBI2wHdUGvh2B1c2Ac -3z/SShBLS7bMGgyvYE/By1xnemiy+6vG2NIYHKExZfOphx8rDTfm5Qlj6LxstY9+ -Tx2VzAs01UIZGDhJ94u5imo= +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCrzGSScSgaQuZd +ELGFYiLiYRwrLKyUdNr0rsPcOo0bvbeZ3zQMeUMRNlA69zGFdarumiDRXUoAmZI3 +9WmH95aX3d+AU7EFnWev7xpWSVhSYj8T0d4rke8HjGk3LpaffJ93tbJuagBIH1ou +uN6AOdzWs8hpRYIomWleEeeuVnnfaMwaXOdc+ihJJ6wzm2hwQSfdpjZPWBDd/DFf +t1ZXxIZOCjDsrEIiI7uU8iZPLB3QEM/tgxSSAOxrcKvQvxZokk+FD7aMJFP71Ifi +eLCEzMTP1VXatP7UTAKAqB2NyDJ8m3IHbOINiqcdFvFR3R1D9bXOYE4oRynNvYZr +QUGnL2RtAgMBAAECggEAJaFQii8U/KOYt9vXNoMnZvSkaeSQLLhn2V6Kciu1CtWE +aMTWLsFE6nk+G5xXkYcTmM3T0GghtH3u5CjyI6EcsEkeEorCZJt0wbmayDmqiekR +LfMzOdHuTHX5+edPgMGYYG1BFyRKyYFsjH1b5zRFZhXdGQnrl5760GsVlz9D1KZQ +iHcT+q1S2tmZeoUukQnADENKXUMCyTGM5FCddgNtsWnGDsTDayh7hUdvDkB+mW4G +lSp+BZuc3PCwpbD6qkXvfugWs6CUAAtXoV3ceWgxQ+TEnNlwxaG1AyugfgNUBolk +8xgeZt4r5QId03jsHDf7hpBAofcaCd5EMIIQYFvWoQKBgQDlbAvAzEFPTZZn2nRV +Xagw4xjqVc1LLEKLCWq0N5rEkwn0h90Dz5N7/3NuonP/sIDsDHCbyiOYBI1Ck6Xi +0WuB+OyKDh+xeF2mekN9G9ywPahdK5lT/TVsxXFyZlwtVv1x/6KBO4yv5URizxqU +gyAPDDxfD/KcNjkOBaodWEwQGQKBgQC/s2gPDBtQkjLwkHXchBomLww5eLlVrac1 +WK4UX6uSdOgrjJ375OOgMTxe8NVZdOuAKytGXRWDwgH3nVWvuZhe7dGlX3JMuSer +e9VwDpBESrvqcR4ruL6wm8wej6BXyjH0wD3FHb0S5HfuBDxTn+4bDwrbRzOUMNgy +lSppuflxdQKBgQDiZcIfazFT8evn5nMAvuC4BZNTxIJHmZC9JfjPiUPIkpWzYtOe +7BvNtKOT3Op9uw8uYYRKqKqBXJSNy6ha8XCXHS9HeXKbLn20SFkLQBCDNwVLlDfF +40zyXtF6JDr4XyzSb4NM5pgKCER5AYloXxGm59s3sEQpFXUuOjbKqJS/GQKBgAoI +c7vF4HAZFr1sch62cz/oWnVvkhOf4Q5zs7ixQSOLJtOQqnwSgK9TpFs7s47ZBbJR +kBRAru2Ua9Hv1Bo8VnMxczV6h1roneDlvEf/GyHX33nnrbKQGrrXjJlU3wl5NaAf +p5v3cHvapUQ5yIZ/6lBUOzc6xMJOxCHxmKSr7Rg5AoGAbEE4lt6Xh2dnBPJ81eNI +IDrw/3ITY53qAY4Bx88CByIFuu8CEUdUZprh98jSl6ic1tMinZfUhRMwABLrUD51 +DGst8iGLPD9u83iMcUHI/L+p7AbxrKLvWXZrF5UZm440c9mSWqfhPaTBosPtNDsG +LfETwH1flKXMTXd2xA9RTE4= -----END PRIVATE KEY----- diff --git a/backend/dev_tls_setup b/backend/dev_tls_setup index 4276e148..8a778dc8 100644 --- a/backend/dev_tls_setup +++ b/backend/dev_tls_setup @@ -31,7 +31,8 @@ extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] -DNS.1 = m.localhost -DNS.2 = *.m.localhost +DNS.1 = localhost +DNS.2 = m.localhost +DNS.3 = *.m.localhost EOF ) From 48b4fd63fe1e24689cec49971d146cad0a71fbae Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 16:09:34 +0200 Subject: [PATCH 147/225] prettier --- vite.config.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/vite.config.js b/vite.config.js index 4985e75a..5b800f7a 100644 --- a/vite.config.js +++ b/vite.config.js @@ -82,11 +82,11 @@ export default defineConfig(({ mode, packageType }) => { return { server: { port: 3000, - fs: { allow }, - https: { - key: fs.readFileSync('./backend/dev_tls_m.localhost.key'), - cert: fs.readFileSync('./backend/dev_tls_m.localhost.crt'), - }, + fs: { allow }, + https: { + key: fs.readFileSync("./backend/dev_tls_m.localhost.key"), + cert: fs.readFileSync("./backend/dev_tls_m.localhost.crt"), + }, }, build: { sourcemap: true, From e12dfa9a9fb7523b234c4be8c367b1ee44e425ed Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 16:17:16 +0200 Subject: [PATCH 148/225] prettier --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index ab541644..2f693995 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,6 @@ "@use-gesture/react": "^10.2.11", "@vector-im/compound-design-tokens": "^3.0.0", "@vector-im/compound-web": "^7.2.0", - "@vitejs/plugin-basic-ssl": "^1.0.1", "@vitejs/plugin-react": "^4.0.1", "@vitest/coverage-v8": "^3.0.0", "babel-plugin-transform-vite-meta-env": "^1.0.3", From b7e5b81dbf2182a552c8875422d6d5e2159ab365 Mon Sep 17 00:00:00 2001 From: fkwp Date: Mon, 5 May 2025 16:25:18 +0200 Subject: [PATCH 149/225] update yarn.lock to remove plugin-basic-ssl --- yarn.lock | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/yarn.lock b/yarn.lock index 394e81a7..ef372359 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5127,15 +5127,6 @@ __metadata: languageName: node linkType: hard -"@vitejs/plugin-basic-ssl@npm:^1.0.1": - version: 1.2.0 - resolution: "@vitejs/plugin-basic-ssl@npm:1.2.0" - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 - checksum: 10c0/0d360fcca01f91ade6e451edbea09a107ff9e95cd3c3766c7a069d1a168709df92d96c0bd1eccc66e2739a153e07c75a45321ec487450c0da942606200d8441d - languageName: node - linkType: hard - "@vitejs/plugin-react@npm:^4.0.1": version: 4.3.4 resolution: "@vitejs/plugin-react@npm:4.3.4" @@ -6968,7 +6959,6 @@ __metadata: "@use-gesture/react": "npm:^10.2.11" "@vector-im/compound-design-tokens": "npm:^3.0.0" "@vector-im/compound-web": "npm:^7.2.0" - "@vitejs/plugin-basic-ssl": "npm:^1.0.1" "@vitejs/plugin-react": "npm:^4.0.1" "@vitest/coverage-v8": "npm:^3.0.0" babel-plugin-transform-vite-meta-env: "npm:^1.0.3" From 380880137e50ff966aebacb0a6c9dbe4d32db839 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Mon, 5 May 2025 17:12:00 +0200 Subject: [PATCH 150/225] Keep the HTML lang attribute in sync with the i18next language (#3247) --- src/initializer.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/initializer.tsx b/src/initializer.tsx index 1087dc94..d0797e9d 100644 --- a/src/initializer.tsx +++ b/src/initializer.tsx @@ -136,6 +136,11 @@ export class Initializer { lookup: () => getUrlParams().lang ?? undefined, }); + // Synchronise the HTML lang attribute with the i18next language + i18n.on("languageChanged", (lng) => { + document.documentElement.lang = lng; + }); + await i18n .use(Backend) .use(languageDetector) From 9f727b904b4d3db8222a86e336e57cfd0ed8d56c Mon Sep 17 00:00:00 2001 From: Robin Date: Fri, 9 May 2025 10:48:09 -0400 Subject: [PATCH 151/225] Remove patched version of WebCodecs types The patch has now been upstreamed to @types/dom-webcodecs. --- knip.ts | 4 + package.json | 1 + src/@types/dom-mediacapture-transform.d.ts | 146 ---- src/@types/dom-webcodecs.d.ts | 745 --------------------- yarn.lock | 17 + 5 files changed, 22 insertions(+), 891 deletions(-) delete mode 100644 src/@types/dom-mediacapture-transform.d.ts delete mode 100644 src/@types/dom-webcodecs.d.ts diff --git a/knip.ts b/knip.ts index 05bd029d..2381356c 100644 --- a/knip.ts +++ b/knip.ts @@ -27,6 +27,10 @@ export default { // then Knip will flag it as a false positive // https://github.com/webpro-nl/knip/issues/766 "@vector-im/compound-web", + // We need this so that TypeScript is happy with @livekit/track-processors. + // This might be a bug in the LiveKit repo but for now we fix it on the + // Element Call side. + "@types/dom-mediacapture-transform", "matrix-widget-api", ], ignoreExportsUsedInFile: true, diff --git a/package.json b/package.json index 2f693995..74567edb 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "@testing-library/react": "^16.0.0", "@testing-library/user-event": "^14.5.1", "@types/content-type": "^1.1.5", + "@types/dom-mediacapture-transform": "^0.1.11", "@types/grecaptcha": "^3.0.9", "@types/jsdom": "^21.1.7", "@types/lodash-es": "^4.17.12", diff --git a/src/@types/dom-mediacapture-transform.d.ts b/src/@types/dom-mediacapture-transform.d.ts deleted file mode 100644 index d4c1f8f8..00000000 --- a/src/@types/dom-mediacapture-transform.d.ts +++ /dev/null @@ -1,146 +0,0 @@ -/* eslint-disable */ -// The contents of this file below the line are copied from -// @types/dom-mediacapture-transform, which is inlined here into Element Call so -// that we can apply the patch to @types/dom-webcodecs found in -// ./dom-webcodecs.d.ts, which it depends on. -// (https://github.com/DefinitelyTyped/DefinitelyTyped/pull/72625) -// Once that PR is merged and released, we can remove this file and return to -// depending on @types/dom-mediacapture-transform. -// ----------------------------------------------------------------------------- - -// This project is licensed under the MIT license. -// Copyrights are respective of each contributor listed at the beginning of each definition file. - -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -// In general, these types are only available behind a command line flag or an origin trial in -// Chrome 90+. - -// This API depends on WebCodecs. - -// Versioning: -// Until the above-mentioned spec is finalized, the major version number is 0. Although not -// necessary for version 0, consider incrementing the minor version number for breaking changes. - -// The following modify existing DOM types to allow defining type-safe APIs on audio and video tracks. - -/** Specialize MediaStreamTrack so that we can refer specifically to an audio track. */ -interface MediaStreamAudioTrack extends MediaStreamTrack { - readonly kind: "audio"; - clone(): MediaStreamAudioTrack; -} - -/** Specialize MediaStreamTrack so that we can refer specifically to a video track. */ -interface MediaStreamVideoTrack extends MediaStreamTrack { - readonly kind: "video"; - clone(): MediaStreamVideoTrack; -} - -/** Assert that getAudioTracks and getVideoTracks return the tracks with the appropriate kind. */ -interface MediaStream { - getAudioTracks(): MediaStreamAudioTrack[]; - getVideoTracks(): MediaStreamVideoTrack[]; -} - -// The following were originally generated from the spec using -// https://github.com/microsoft/TypeScript-DOM-lib-generator, then heavily modified. - -/** - * A track sink that is capable of exposing the unencoded frames from the track to a - * ReadableStream, and exposes a control channel for signals going in the oppposite direction. - */ -interface MediaStreamTrackProcessor { - /** - * Allows reading the frames flowing through the MediaStreamTrack provided to the constructor. - */ - readonly readable: ReadableStream; - /** Allows sending control signals to the MediaStreamTrack provided to the constructor. */ - readonly writableControl: WritableStream; -} - -declare var MediaStreamTrackProcessor: { - prototype: MediaStreamTrackProcessor; - - /** Constructor overrides based on the type of track. */ - new ( - init: MediaStreamTrackProcessorInit & { track: MediaStreamAudioTrack }, - ): MediaStreamTrackProcessor; - new ( - init: MediaStreamTrackProcessorInit & { track: MediaStreamVideoTrack }, - ): MediaStreamTrackProcessor; -}; - -interface MediaStreamTrackProcessorInit { - track: MediaStreamTrack; - /** - * If media frames are not read from MediaStreamTrackProcessor.readable quickly enough, the - * MediaStreamTrackProcessor will internally buffer up to maxBufferSize of the frames produced - * by the track. If the internal buffer is full, each time the track produces a new frame, the - * oldest frame in the buffer will be dropped and the new frame will be added to the buffer. - */ - maxBufferSize?: number | undefined; -} - -/** - * Takes video frames as input, and emits control signals that result from subsequent processing. - */ -interface MediaStreamTrackGenerator - extends MediaStreamTrack { - /** - * Allows writing media frames to the MediaStreamTrackGenerator, which is itself a - * MediaStreamTrack. When a frame is written to writable, the frame’s close() method is - * automatically invoked, so that its internal resources are no longer accessible from - * JavaScript. - */ - readonly writable: WritableStream; - /** - * Allows reading control signals sent from any sinks connected to the - * MediaStreamTrackGenerator. - */ - readonly readableControl: ReadableStream; -} - -type MediaStreamAudioTrackGenerator = MediaStreamTrackGenerator & - MediaStreamAudioTrack; -type MediaStreamVideoTrackGenerator = MediaStreamTrackGenerator & - MediaStreamVideoTrack; - -declare var MediaStreamTrackGenerator: { - prototype: MediaStreamTrackGenerator; - - /** Constructor overrides based on the type of track. */ - new ( - init: MediaStreamTrackGeneratorInit & { - kind: "audio"; - signalTarget?: MediaStreamAudioTrack | undefined; - }, - ): MediaStreamAudioTrackGenerator; - new ( - init: MediaStreamTrackGeneratorInit & { - kind: "video"; - signalTarget?: MediaStreamVideoTrack | undefined; - }, - ): MediaStreamVideoTrackGenerator; -}; - -interface MediaStreamTrackGeneratorInit { - kind: MediaStreamTrackGeneratorKind; - /** - * (Optional) track to which the MediaStreamTrackGenerator will automatically forward control - * signals. If signalTarget is provided and signalTarget.kind and kind do not match, the - * MediaStreamTrackGenerator’s constructor will raise an exception. - */ - signalTarget?: MediaStreamTrack | undefined; -} - -type MediaStreamTrackGeneratorKind = "audio" | "video"; - -type MediaStreamTrackSignalType = "request-frame"; - -interface MediaStreamTrackSignal { - signalType: MediaStreamTrackSignalType; -} diff --git a/src/@types/dom-webcodecs.d.ts b/src/@types/dom-webcodecs.d.ts deleted file mode 100644 index 55e4c7d4..00000000 --- a/src/@types/dom-webcodecs.d.ts +++ /dev/null @@ -1,745 +0,0 @@ -/* eslint-disable */ -// The contents of this file below the line are copied from -// @types/dom-webcodecs, which is inlined here into Element Call so that we can -// apply the patch https://github.com/DefinitelyTyped/DefinitelyTyped/pull/72625 -// which is needed for TypeScript 5.8 compatibility. Once that PR is merged and -// released, we can remove this file and return to depending on -// @types/dom-webcodecs. -// ----------------------------------------------------------------------------- - -// This project is licensed under the MIT license. -// Copyrights are respective of each contributor listed at the beginning of each definition file. - -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -// Versioning: -// Until the WebCodecs spec is finalized, the major version number is 0. I have chosen to use minor -// version 1 to denote the API as defined by the IDL files from the Chromium repo at -// https://chromium.googlesource.com/chromium/src/+/main/third_party/blink/renderer/modules/webcodecs. -// Please use a version number above 0.1 if using the spec at https://w3c.github.io/webcodecs/ as -// the source. - -// The declarations in webcodecs.generated.d.ts have been generated using the code in -// https://github.com/yume-chan/webcodecs-lib-generator. See -// https://github.com/yume-chan/webcodecs-lib-generator/blob/main/README.md for more detail. - -// The following declarations are copied from -// https://github.com/microsoft/TypeScript-DOM-lib-generator/blob/a75338e1ea8a958bf08a5745141d2ab8f14ba2ca/baselines/dom.generated.d.ts -// and modified to expand the types to include VideoFrame. - -/** Shim for OffscreenCanvas, which was removed in TS 4.4 */ -interface OffscreenCanvas extends EventTarget {} - -/** - * Replaces CanvasImageSource; only applies if WebCodecs is available. - */ -type CanvasImageSourceWebCodecs = - | HTMLOrSVGImageElement - | HTMLVideoElement - | HTMLCanvasElement - | ImageBitmap - | OffscreenCanvas - | VideoFrame; - -interface CanvasRenderingContext2D { - drawImage(image: CanvasImageSourceWebCodecs, dx: number, dy: number): void; - drawImage( - image: CanvasImageSourceWebCodecs, - dx: number, - dy: number, - dw: number, - dh: number, - ): void; - drawImage( - image: CanvasImageSourceWebCodecs, - sx: number, - sy: number, - sw: number, - sh: number, - dx: number, - dy: number, - dw: number, - dh: number, - ): void; - createPattern( - image: CanvasImageSourceWebCodecs, - repetition: string | null, - ): CanvasPattern | null; -} - -interface OffscreenCanvasRenderingContext2D { - drawImage(image: CanvasImageSourceWebCodecs, dx: number, dy: number): void; - drawImage( - image: CanvasImageSourceWebCodecs, - dx: number, - dy: number, - dw: number, - dh: number, - ): void; - drawImage( - image: CanvasImageSourceWebCodecs, - sx: number, - sy: number, - sw: number, - sh: number, - dx: number, - dy: number, - dw: number, - dh: number, - ): void; - createPattern( - image: CanvasImageSourceWebCodecs, - repetition: string | null, - ): CanvasPattern | null; -} - -/** - * Replaces ImageBitmapSource; only applies if WebCodecs is available. - */ -type ImageBitmapSourceWebCodecs = CanvasImageSourceWebCodecs | Blob | ImageData; - -declare function createImageBitmap( - image: ImageBitmapSourceWebCodecs, - options?: ImageBitmapOptions, -): Promise; -declare function createImageBitmap( - image: ImageBitmapSourceWebCodecs, - sx: number, - sy: number, - sw: number, - sh: number, - options?: ImageBitmapOptions, -): Promise; - -/** - * Replaces TexImageSource; only applies if WebCodecs is available. - */ -type TexImageSourceWebCodecs = - | ImageBitmap - | ImageData - | HTMLImageElement - | HTMLCanvasElement - | HTMLVideoElement - | OffscreenCanvas - | VideoFrame; - -interface WebGLRenderingContextOverloads { - texImage2D( - target: GLenum, - level: GLint, - internalformat: GLint, - format: GLenum, - type: GLenum, - source: TexImageSourceWebCodecs, - ): void; - texSubImage2D( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - format: GLenum, - type: GLenum, - source: TexImageSourceWebCodecs, - ): void; -} - -interface WebGL2RenderingContextBase { - texImage3D( - target: GLenum, - level: GLint, - internalformat: GLint, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - border: GLint, - format: GLenum, - type: GLenum, - source: TexImageSourceWebCodecs, - ): void; - texSubImage3D( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - zoffset: GLint, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - format: GLenum, - type: GLenum, - source: TexImageSourceWebCodecs, - ): void; -} - -interface WebGL2RenderingContextOverloads { - texImage2D( - target: GLenum, - level: GLint, - internalformat: GLint, - format: GLenum, - type: GLenum, - source: TexImageSourceWebCodecs, - ): void; - texImage2D( - target: GLenum, - level: GLint, - internalformat: GLint, - width: GLsizei, - height: GLsizei, - border: GLint, - format: GLenum, - type: GLenum, - source: TexImageSourceWebCodecs, - ): void; - texSubImage2D( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - format: GLenum, - type: GLenum, - source: TexImageSourceWebCodecs, - ): void; - texSubImage2D( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - width: GLsizei, - height: GLsizei, - format: GLenum, - type: GLenum, - source: TexImageSourceWebCodecs, - ): void; -} - -///////////////////////////// -/// webcodecs APIs -///////////////////////////// - -interface AudioDataCopyToOptions { - format?: AudioSampleFormat | undefined; - frameCount?: number | undefined; - frameOffset?: number | undefined; - planeIndex: number; -} - -interface AudioDataInit { - data: AllowSharedBufferSource; - format: AudioSampleFormat; - numberOfChannels: number; - numberOfFrames: number; - sampleRate: number; - timestamp: number; -} - -interface AudioDecoderConfig { - codec: string; - description?: AllowSharedBufferSource | undefined; - numberOfChannels: number; - sampleRate: number; -} - -interface AudioDecoderInit { - error: WebCodecsErrorCallback; - output: AudioDataOutputCallback; -} - -interface AudioDecoderSupport { - config?: AudioDecoderConfig; - supported?: boolean; -} - -interface AudioEncoderConfig { - bitrate?: number | undefined; - codec: string; - numberOfChannels: number; - sampleRate: number; -} - -interface AudioEncoderInit { - error: WebCodecsErrorCallback; - output: EncodedAudioChunkOutputCallback; -} - -interface AudioEncoderSupport { - config?: AudioEncoderConfig; - supported?: boolean; -} - -interface AvcEncoderConfig { - format?: AvcBitstreamFormat | undefined; -} - -interface EncodedAudioChunkInit { - data: AllowSharedBufferSource; - duration?: number | undefined; - timestamp: number; - type: EncodedAudioChunkType; -} - -interface EncodedAudioChunkMetadata { - decoderConfig?: AudioDecoderConfig | undefined; -} - -interface EncodedVideoChunkInit { - data: AllowSharedBufferSource; - duration?: number | undefined; - timestamp: number; - type: EncodedVideoChunkType; -} - -interface EncodedVideoChunkMetadata { - decoderConfig?: VideoDecoderConfig | undefined; - temporalLayerId?: number | undefined; -} - -interface ImageDecodeOptions { - completeFramesOnly?: boolean | undefined; - frameIndex?: number | undefined; -} - -interface ImageDecodeResult { - complete: boolean; - image: VideoFrame; -} - -interface ImageDecoderInit { - colorSpaceConversion?: ColorSpaceConversion | undefined; - data: ImageBufferSource; - desiredHeight?: number | undefined; - desiredWidth?: number | undefined; - preferAnimation?: boolean | undefined; - premultiplyAlpha?: PremultiplyAlpha | undefined; - type: string; -} - -interface PlaneLayout { - offset: number; - stride: number; -} - -interface VideoColorSpaceInit { - fullRange?: boolean | null | undefined; - matrix?: VideoMatrixCoefficients | null | undefined; - primaries?: VideoColorPrimaries | null | undefined; - transfer?: VideoTransferCharacteristics | null | undefined; -} - -interface VideoDecoderConfig { - codec: string; - codedHeight?: number | undefined; - codedWidth?: number | undefined; - colorSpace?: VideoColorSpaceInit | undefined; - description?: AllowSharedBufferSource | undefined; - displayAspectHeight?: number | undefined; - displayAspectWidth?: number | undefined; - hardwareAcceleration?: HardwarePreference | undefined; - optimizeForLatency?: boolean | undefined; -} - -interface VideoDecoderInit { - error: WebCodecsErrorCallback; - output: VideoFrameOutputCallback; -} - -interface VideoDecoderSupport { - config?: VideoDecoderConfig; - supported?: boolean; -} - -interface VideoEncoderConfig { - alpha?: AlphaOption | undefined; - avc?: AvcEncoderConfig | undefined; - bitrate?: number | undefined; - bitrateMode?: VideoEncoderBitrateMode | undefined; - codec: string; - displayHeight?: number | undefined; - displayWidth?: number | undefined; - framerate?: number | undefined; - hardwareAcceleration?: HardwarePreference | undefined; - height: number; - latencyMode?: LatencyMode | undefined; - scalabilityMode?: string | undefined; - width: number; -} - -interface VideoEncoderEncodeOptions { - keyFrame?: boolean; -} - -interface VideoEncoderInit { - error: WebCodecsErrorCallback; - output: EncodedVideoChunkOutputCallback; -} - -interface VideoEncoderSupport { - config?: VideoEncoderConfig; - supported?: boolean; -} - -interface VideoFrameBufferInit { - codedHeight: number; - codedWidth: number; - colorSpace?: VideoColorSpaceInit | undefined; - displayHeight?: number | undefined; - displayWidth?: number | undefined; - duration?: number | undefined; - format: VideoPixelFormat; - layout?: PlaneLayout[] | undefined; - timestamp: number; - visibleRect?: DOMRectInit | undefined; -} - -interface VideoFrameCopyToOptions { - layout?: PlaneLayout[] | undefined; - rect?: DOMRectInit | undefined; -} - -interface VideoFrameInit { - alpha?: AlphaOption | undefined; - displayHeight?: number | undefined; - displayWidth?: number | undefined; - duration?: number | undefined; - timestamp?: number | undefined; - visibleRect?: DOMRectInit | undefined; -} - -interface AudioData { - readonly duration: number; - readonly format: AudioSampleFormat | null; - readonly numberOfChannels: number; - readonly numberOfFrames: number; - readonly sampleRate: number; - readonly timestamp: number; - allocationSize(options: AudioDataCopyToOptions): number; - clone(): AudioData; - close(): void; - copyTo( - destination: AllowSharedBufferSource, - options: AudioDataCopyToOptions, - ): void; -} - -declare var AudioData: { - prototype: AudioData; - new (init: AudioDataInit): AudioData; -}; - -interface AudioDecoderEventMap { - dequeue: Event; -} - -/** Available only in secure contexts. */ -interface AudioDecoder { - readonly decodeQueueSize: number; - readonly state: CodecState; - ondequeue: ((this: AudioDecoder, ev: Event) => any) | null; - close(): void; - configure(config: AudioDecoderConfig): void; - decode(chunk: EncodedAudioChunk): void; - flush(): Promise; - reset(): void; - addEventListener( - type: K, - listener: (this: AudioDecoder, ev: AudioDecoderEventMap[K]) => any, - options?: boolean | AddEventListenerOptions, - ): void; - addEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | AddEventListenerOptions, - ): void; - removeEventListener( - type: K, - listener: (this: AudioDecoder, ev: AudioDecoderEventMap[K]) => any, - options?: boolean | EventListenerOptions, - ): void; - removeEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | EventListenerOptions, - ): void; -} - -declare var AudioDecoder: { - prototype: AudioDecoder; - new (init: AudioDecoderInit): AudioDecoder; - isConfigSupported(config: AudioDecoderConfig): Promise; -}; - -interface AudioEncoderEventMap { - dequeue: Event; -} - -/** Available only in secure contexts. */ -interface AudioEncoder { - readonly encodeQueueSize: number; - readonly state: CodecState; - ondequeue: ((this: AudioEncoder, ev: Event) => any) | null; - close(): void; - configure(config: AudioEncoderConfig): void; - encode(data: AudioData): void; - flush(): Promise; - reset(): void; - addEventListener( - type: K, - listener: (this: AudioEncoder, ev: AudioEncoderEventMap[K]) => any, - options?: boolean | AddEventListenerOptions, - ): void; - addEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | AddEventListenerOptions, - ): void; - removeEventListener( - type: K, - listener: (this: AudioEncoder, ev: AudioEncoderEventMap[K]) => any, - options?: boolean | EventListenerOptions, - ): void; - removeEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | EventListenerOptions, - ): void; -} - -declare var AudioEncoder: { - prototype: AudioEncoder; - new (init: AudioEncoderInit): AudioEncoder; - isConfigSupported(config: AudioEncoderConfig): Promise; -}; - -interface EncodedAudioChunk { - readonly byteLength: number; - readonly duration: number | null; - readonly timestamp: number; - readonly type: EncodedAudioChunkType; - copyTo(destination: AllowSharedBufferSource): void; -} - -declare var EncodedAudioChunk: { - prototype: EncodedAudioChunk; - new (init: EncodedAudioChunkInit): EncodedAudioChunk; -}; - -interface EncodedVideoChunk { - readonly byteLength: number; - readonly duration: number | null; - readonly timestamp: number; - readonly type: EncodedVideoChunkType; - copyTo(destination: AllowSharedBufferSource): void; -} - -declare var EncodedVideoChunk: { - prototype: EncodedVideoChunk; - new (init: EncodedVideoChunkInit): EncodedVideoChunk; -}; - -/** Available only in secure contexts. */ -interface ImageDecoder { - readonly complete: boolean; - readonly completed: Promise; - readonly tracks: ImageTrackList; - readonly type: string; - close(): void; - decode(options?: ImageDecodeOptions): Promise; - reset(): void; -} - -// declare var ImageDecoder: { -// prototype: ImageDecoder; -// new(init: ImageDecoderInit): ImageDecoder; -// isTypeSupported(type: string): Promise; -// }; - -// interface ImageTrack { -// readonly animated: boolean; -// readonly frameCount: number; -// readonly repetitionCount: number; -// selected: boolean; -// } - -// declare var ImageTrack: { -// prototype: ImageTrack; -// new(): ImageTrack; -// }; - -// interface ImageTrackList { -// readonly length: number; -// readonly ready: Promise; -// readonly selectedIndex: number; -// readonly selectedTrack: ImageTrack | null; -// [index: number]: ImageTrack; -// } - -// declare var ImageTrackList: { -// prototype: ImageTrackList; -// new(): ImageTrackList; -// }; - -interface VideoColorSpace { - readonly fullRange: boolean | null; - readonly matrix: VideoMatrixCoefficients | null; - readonly primaries: VideoColorPrimaries | null; - readonly transfer: VideoTransferCharacteristics | null; - toJSON(): VideoColorSpaceInit; -} - -declare var VideoColorSpace: { - prototype: VideoColorSpace; - new (init?: VideoColorSpaceInit): VideoColorSpace; -}; - -interface VideoDecoderEventMap { - dequeue: Event; -} - -/** Available only in secure contexts. */ -interface VideoDecoder { - readonly decodeQueueSize: number; - readonly state: CodecState; - ondequeue: ((this: VideoDecoder, ev: Event) => any) | null; - close(): void; - configure(config: VideoDecoderConfig): void; - decode(chunk: EncodedVideoChunk): void; - flush(): Promise; - reset(): void; - addEventListener( - type: K, - listener: (this: VideoDecoder, ev: VideoDecoderEventMap[K]) => any, - options?: boolean | AddEventListenerOptions, - ): void; - addEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | AddEventListenerOptions, - ): void; - removeEventListener( - type: K, - listener: (this: VideoDecoder, ev: VideoDecoderEventMap[K]) => any, - options?: boolean | EventListenerOptions, - ): void; - removeEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | EventListenerOptions, - ): void; -} - -declare var VideoDecoder: { - prototype: VideoDecoder; - new (init: VideoDecoderInit): VideoDecoder; - isConfigSupported(config: VideoDecoderConfig): Promise; -}; - -interface VideoEncoderEventMap { - dequeue: Event; -} - -/** Available only in secure contexts. */ -interface VideoEncoder { - readonly encodeQueueSize: number; - readonly state: CodecState; - close(): void; - ondequeue: ((this: VideoEncoder, ev: Event) => any) | null; - configure(config: VideoEncoderConfig): void; - encode(frame: VideoFrame, options?: VideoEncoderEncodeOptions): void; - flush(): Promise; - reset(): void; - addEventListener( - type: K, - listener: (this: VideoEncoder, ev: VideoEncoderEventMap[K]) => any, - options?: boolean | AddEventListenerOptions, - ): void; - addEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | AddEventListenerOptions, - ): void; - removeEventListener( - type: K, - listener: (this: VideoEncoder, ev: VideoEncoderEventMap[K]) => any, - options?: boolean | EventListenerOptions, - ): void; - removeEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | EventListenerOptions, - ): void; -} - -declare var VideoEncoder: { - prototype: VideoEncoder; - new (init: VideoEncoderInit): VideoEncoder; - isConfigSupported(config: VideoEncoderConfig): Promise; -}; - -interface VideoFrame { - readonly codedHeight: number; - readonly codedRect: DOMRectReadOnly | null; - readonly codedWidth: number; - readonly colorSpace: VideoColorSpace; - readonly displayHeight: number; - readonly displayWidth: number; - readonly duration: number | null; - readonly format: VideoPixelFormat | null; - readonly timestamp: number; - readonly visibleRect: DOMRectReadOnly | null; - allocationSize(options?: VideoFrameCopyToOptions): number; - clone(): VideoFrame; - close(): void; - copyTo( - destination: AllowSharedBufferSource, - options?: VideoFrameCopyToOptions, - ): Promise; -} - -declare var VideoFrame: { - prototype: VideoFrame; - new (source: CanvasImageSource, init?: VideoFrameInit): VideoFrame; - new (data: AllowSharedBufferSource, init: VideoFrameBufferInit): VideoFrame; -}; - -interface AudioDataOutputCallback { - (output: AudioData): void; -} - -interface EncodedAudioChunkOutputCallback { - (output: EncodedAudioChunk, metadata: EncodedAudioChunkMetadata): void; -} - -interface EncodedVideoChunkOutputCallback { - (chunk: EncodedVideoChunk, metadata: EncodedVideoChunkMetadata): void; -} - -interface VideoFrameOutputCallback { - (output: VideoFrame): void; -} - -interface WebCodecsErrorCallback { - (error: DOMException): void; -} - -// type AllowSharedBufferSource = ArrayBuffer | ArrayBufferView; -// type BitrateMode = "constant" | "variable"; -// type ImageBufferSource = ArrayBuffer | ArrayBufferView | ReadableStream; -// type AlphaOption = "discard" | "keep"; -// type AudioSampleFormat = "f32" | "f32-planar" | "s16" | "s16-planar" | "s32" | "s32-planar" | "u8" | "u8-planar"; -// type AvcBitstreamFormat = "annexb" | "avc"; -// type CodecState = "closed" | "configured" | "unconfigured"; -// type EncodedAudioChunkType = "delta" | "key"; -// type EncodedVideoChunkType = "delta" | "key"; -type HardwarePreference = - | "no-preference" - | "prefer-hardware" - | "prefer-software"; -// type LatencyMode = "quality" | "realtime"; -// type VideoColorPrimaries = "bt470bg" | "bt709" | "smpte170m"; -// type VideoMatrixCoefficients = "bt470bg" | "bt709" | "rgb" | "smpte170m"; -// type VideoPixelFormat = "BGRA" | "BGRX" | "I420" | "I420A" | "I422" | "I444" | "NV12" | "RGBA" | "RGBX"; -// type VideoTransferCharacteristics = "bt709" | "iec61966-2-1" | "smpte170m"; diff --git a/yarn.lock b/yarn.lock index ef372359..33b73a4e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4621,6 +4621,22 @@ __metadata: languageName: node linkType: hard +"@types/dom-mediacapture-transform@npm:^0.1.11": + version: 0.1.11 + resolution: "@types/dom-mediacapture-transform@npm:0.1.11" + dependencies: + "@types/dom-webcodecs": "npm:*" + checksum: 10c0/19c76d54cf31aa2a925011fc5f973dff9a10bdecfdf2285e5e568e61850a0fa2b8c9f1807a1462cbefd57ec26d32eeaa9c359117aca9d9fe7f0d6f2fff33f51e + languageName: node + linkType: hard + +"@types/dom-webcodecs@npm:*": + version: 0.1.15 + resolution: "@types/dom-webcodecs@npm:0.1.15" + checksum: 10c0/1407f0352156c99c9b4378fb4c0c799b061520d031903a7f359ad09a6f706cc1fd56bafb272bb1a3decffcb32e54a51d2f07442eb72622464a950cff7f9e8862 + languageName: node + linkType: hard + "@types/estree@npm:1.0.6, @types/estree@npm:^1.0.0": version: 1.0.6 resolution: "@types/estree@npm:1.0.6" @@ -6944,6 +6960,7 @@ __metadata: "@testing-library/react": "npm:^16.0.0" "@testing-library/user-event": "npm:^14.5.1" "@types/content-type": "npm:^1.1.5" + "@types/dom-mediacapture-transform": "npm:^0.1.11" "@types/grecaptcha": "npm:^3.0.9" "@types/jsdom": "npm:^21.1.7" "@types/lodash-es": "npm:^4.17.12" From b681e53c352baa275b3ca7ec04b305da32704235 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 12 May 2025 01:54:04 +0000 Subject: [PATCH 152/225] Update dependency livekit-client to v2.11.4 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 33b73a4e..11023415 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9368,8 +9368,8 @@ __metadata: linkType: hard "livekit-client@npm:^2.11.3": - version: 2.11.3 - resolution: "livekit-client@npm:2.11.3" + version: 2.11.4 + resolution: "livekit-client@npm:2.11.4" dependencies: "@livekit/mutex": "npm:1.1.1" "@livekit/protocol": "npm:1.36.1" @@ -9380,7 +9380,7 @@ __metadata: tslib: "npm:2.8.1" typed-emitter: "npm:^2.1.0" webrtc-adapter: "npm:^9.0.1" - checksum: 10c0/d56444f31c107b46ccd5532038ac77bd21038042910619008267c17894f1d3f054262ae2354d89df6fe0ba325aba01909b0612ad4c290906487c40d91641f6e4 + checksum: 10c0/e674c75ff2c9cd2115c11e40e009a6ca85b41ab20740a5df3b7fafb67ebe683d5214be49532a5aedd81cb85768df393caf4571c83b17584cd168118bce24d315 languageName: node linkType: hard From 9f8dd000e0d1bcadc6245ebd3446e364e00b2e1c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 12 May 2025 14:20:03 +0200 Subject: [PATCH 153/225] Update embedded package dependencies (#3242) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- embedded/android/gradle/libs.versions.toml | 4 ++-- .../android/gradle/wrapper/gradle-wrapper.jar | Bin 43462 -> 43764 bytes .../gradle/wrapper/gradle-wrapper.properties | 2 +- embedded/android/gradlew | 9 ++++----- embedded/android/gradlew.bat | 4 ++-- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/embedded/android/gradle/libs.versions.toml b/embedded/android/gradle/libs.versions.toml index 8d38daab..2d9bfa40 100644 --- a/embedded/android/gradle/libs.versions.toml +++ b/embedded/android/gradle/libs.versions.toml @@ -2,11 +2,11 @@ # https://docs.gradle.org/current/userguide/platforms.html#sub::toml-dependencies-format [versions] -android_gradle_plugin = "8.8.0" +android_gradle_plugin = "8.10.0" [libraries] android_gradle_plugin = { module = "com.android.tools.build:gradle", version.ref = "android_gradle_plugin" } [plugins] android_library = { id = "com.android.library", version.ref = "android_gradle_plugin" } -maven_publish = { id = "com.vanniktech.maven.publish", version = "0.30.0" } \ No newline at end of file +maven_publish = { id = "com.vanniktech.maven.publish", version = "0.31.0" } \ No newline at end of file diff --git a/embedded/android/gradle/wrapper/gradle-wrapper.jar b/embedded/android/gradle/wrapper/gradle-wrapper.jar index d64cd4917707c1f8861d8cb53dd15194d4248596..1b33c55baabb587c669f562ae36f953de2481846 100644 GIT binary patch delta 34753 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%0AF=STgWRWL+V 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 W(m*lz*HoBlEiM*bU{am~Dx&}eeNGnu diff --git a/embedded/android/gradle/wrapper/gradle-wrapper.properties b/embedded/android/gradle/wrapper/gradle-wrapper.properties index 79eb9d00..6514f919 100644 --- a/embedded/android/gradle/wrapper/gradle-wrapper.properties +++ b/embedded/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/embedded/android/gradlew b/embedded/android/gradlew index f5feea6d..23d15a93 100755 --- a/embedded/android/gradlew +++ b/embedded/android/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -115,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -206,7 +205,7 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. @@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/embedded/android/gradlew.bat b/embedded/android/gradlew.bat index 9d21a218..db3a6ac2 100644 --- a/embedded/android/gradlew.bat +++ b/embedded/android/gradlew.bat @@ -70,11 +70,11 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell From de8a2cb53309776eb23de6590e8a32ad5a7a3496 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 May 2025 07:25:55 +0000 Subject: [PATCH 154/225] Update dependency livekit-client to v2.12.0 --- yarn.lock | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index 11023415..0e8a2fb0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2527,7 +2527,16 @@ __metadata: languageName: node linkType: hard -"@livekit/protocol@npm:1.36.1, @livekit/protocol@npm:^1.33.0": +"@livekit/protocol@npm:1.38.0": + version: 1.38.0 + resolution: "@livekit/protocol@npm:1.38.0" + dependencies: + "@bufbuild/protobuf": "npm:^1.10.0" + checksum: 10c0/ca64d4f984853054ff60574730b08a761afcd3bdc084e5218663e54b0e7f395aa2022d9d15d982fa094bbc0179cb19ef6a96ec74b1aa3265d118a85d1a4fde33 + languageName: node + linkType: hard + +"@livekit/protocol@npm:^1.33.0": version: 1.36.1 resolution: "@livekit/protocol@npm:1.36.1" dependencies: @@ -9368,11 +9377,11 @@ __metadata: linkType: hard "livekit-client@npm:^2.11.3": - version: 2.11.4 - resolution: "livekit-client@npm:2.11.4" + version: 2.12.0 + resolution: "livekit-client@npm:2.12.0" dependencies: "@livekit/mutex": "npm:1.1.1" - "@livekit/protocol": "npm:1.36.1" + "@livekit/protocol": "npm:1.38.0" events: "npm:^3.3.0" loglevel: "npm:^1.9.2" sdp-transform: "npm:^2.15.0" @@ -9380,7 +9389,7 @@ __metadata: tslib: "npm:2.8.1" typed-emitter: "npm:^2.1.0" webrtc-adapter: "npm:^9.0.1" - checksum: 10c0/e674c75ff2c9cd2115c11e40e009a6ca85b41ab20740a5df3b7fafb67ebe683d5214be49532a5aedd81cb85768df393caf4571c83b17584cd168118bce24d315 + checksum: 10c0/8a4657aa6c0f0bc5d1fe77c2cd9603a3b07d4acefa634f1c5151190eed69711e7e599dd09c07915939a418dc8770d87e3529ecf1b029f2a9af7f2172d83acb1c languageName: node linkType: hard From 44ed04475d33f369750a37d74659c214c5aa8bff Mon Sep 17 00:00:00 2001 From: fkwp Date: Tue, 13 May 2025 09:38:43 +0200 Subject: [PATCH 155/225] bump livekit protocol version --- package.json | 2 +- yarn.lock | 13 ++----------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 74567edb..6ff4198d 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@formatjs/intl-segmenter": "^11.7.3", "@livekit/components-core": "^0.12.0", "@livekit/components-react": "^2.0.0", - "@livekit/protocol": "^1.33.0", + "@livekit/protocol": "^1.38.0", "@livekit/track-processors": "^0.5.5", "@mediapipe/tasks-vision": "^0.10.18", "@opentelemetry/api": "^1.4.0", diff --git a/yarn.lock b/yarn.lock index 0e8a2fb0..a42427b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2527,7 +2527,7 @@ __metadata: languageName: node linkType: hard -"@livekit/protocol@npm:1.38.0": +"@livekit/protocol@npm:1.38.0, @livekit/protocol@npm:^1.38.0": version: 1.38.0 resolution: "@livekit/protocol@npm:1.38.0" dependencies: @@ -2536,15 +2536,6 @@ __metadata: languageName: node linkType: hard -"@livekit/protocol@npm:^1.33.0": - version: 1.36.1 - resolution: "@livekit/protocol@npm:1.36.1" - dependencies: - "@bufbuild/protobuf": "npm:^1.10.0" - checksum: 10c0/bb2e56785c542446bef3e2f2fd20b33d01db43b786be87ccb834feee8a664fd32c8231e249b4e1915d7a8eda13af0d59eea479fa710327079a1a370daf05c42e - languageName: node - linkType: hard - "@livekit/track-processors@npm:^0.5.5": version: 0.5.5 resolution: "@livekit/track-processors@npm:0.5.5" @@ -6946,7 +6937,7 @@ __metadata: "@formatjs/intl-segmenter": "npm:^11.7.3" "@livekit/components-core": "npm:^0.12.0" "@livekit/components-react": "npm:^2.0.0" - "@livekit/protocol": "npm:^1.33.0" + "@livekit/protocol": "npm:^1.38.0" "@livekit/track-processors": "npm:^0.5.5" "@mediapipe/tasks-vision": "npm:^0.10.18" "@opentelemetry/api": "npm:^1.4.0" From 04bc6c77a3063a7038575f9c2257b0244b5413be Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Tue, 13 May 2025 21:11:12 +0200 Subject: [PATCH 156/225] developer option to mute all audio (#3239) --- locales/en/app.json | 1 + src/room/CallEventAudioRenderer.tsx | 3 +++ src/room/GroupCallView.tsx | 7 +++++-- src/room/InCallView.tsx | 11 +++++++---- src/room/ReactionAudioRenderer.tsx | 3 +++ src/settings/DeveloperSettingsTab.tsx | 22 ++++++++++++++++++++-- src/settings/settings.ts | 6 ++++-- src/useAudioContext.tsx | 3 ++- 8 files changed, 45 insertions(+), 11 deletions(-) diff --git a/locales/en/app.json b/locales/en/app.json index d185d2f8..963a3f55 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -70,6 +70,7 @@ "livekit_server_info": "LiveKit Server Info", "livekit_sfu": "LiveKit SFU: {{url}}", "matrix_id": "Matrix ID: {{id}}", + "mute_all_audio": "Mute all audio (participants, reactions, join sounds)", "show_connection_stats": "Show connection statistics", "show_non_member_tiles": "Show tiles for non-member media", "url_params": "URL parameters", diff --git a/src/room/CallEventAudioRenderer.tsx b/src/room/CallEventAudioRenderer.tsx index 6eeef4c4..a0d685ff 100644 --- a/src/room/CallEventAudioRenderer.tsx +++ b/src/room/CallEventAudioRenderer.tsx @@ -47,12 +47,15 @@ export const callEventAudioSounds = prefetchSounds({ export function CallEventAudioRenderer({ vm, + muted, }: { vm: CallViewModel; + muted?: boolean; }): ReactNode { const audioEngineCtx = useAudioContext({ sounds: callEventAudioSounds, latencyHint: "interactive", + muted, }); const audioEngineRef = useLatest(audioEngineCtx); diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index 0d727485..960b4a05 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -62,8 +62,9 @@ import { } from "../utils/errors.ts"; import { GroupCallErrorBoundary } from "./GroupCallErrorBoundary.tsx"; import { - useExperimentalToDeviceTransportSetting, - useNewMembershipManagerSetting as useNewMembershipManagerSetting, + useNewMembershipManager as useNewMembershipManagerSetting, + useExperimentalToDeviceTransport as useExperimentalToDeviceTransportSetting, + muteAllAudio as muteAllAudioSetting, useSetting, } from "../settings/settings"; import { useTypedEventEmitter } from "../useEvents"; @@ -104,11 +105,13 @@ export const GroupCallView: FC = ({ null, ); + const [muteAllAudio] = useSetting(muteAllAudioSetting); const memberships = useMatrixRTCSessionMemberships(rtcSession); const leaveSoundContext = useLatest( useAudioContext({ sounds: callEventAudioSounds, latencyHint: "interactive", + muted: muteAllAudio, }), ); // This should use `useEffectEvent` (only available in experimental versions) diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index b434a1da..33f42f1b 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -96,7 +96,8 @@ import { ReactionsOverlay } from "./ReactionsOverlay"; import { CallEventAudioRenderer } from "./CallEventAudioRenderer"; import { debugTileLayout as debugTileLayoutSetting, - useExperimentalToDeviceTransportSetting, + useExperimentalToDeviceTransport as useExperimentalToDeviceTransportSetting, + muteAllAudio as muteAllAudioSetting, useSetting, } from "../settings/settings"; import { ReactionsReader } from "../reactions/ReactionsReader"; @@ -220,6 +221,8 @@ export const InCallView: FC = ({ room: livekitRoom, }); + const [muteAllAudio] = useSetting(muteAllAudioSetting); + const [toDeviceEncryptionSetting] = useSetting( useExperimentalToDeviceTransportSetting, ); @@ -693,10 +696,10 @@ export const InCallView: FC = ({ ) } - + {renderContent()} - - + + {footer} {layout.type !== "pip" && ( diff --git a/src/room/ReactionAudioRenderer.tsx b/src/room/ReactionAudioRenderer.tsx index c65f6094..2b95acb9 100644 --- a/src/room/ReactionAudioRenderer.tsx +++ b/src/room/ReactionAudioRenderer.tsx @@ -24,8 +24,10 @@ const soundMap = Object.fromEntries([ export function ReactionsAudioRenderer({ vm, + muted, }: { vm: CallViewModel; + muted?: boolean; }): ReactNode { const [shouldPlay] = useSetting(playReactionsSound); const [soundCache, setSoundCache] = useState = ({ client, livekitRoom }) => { useExperimentalToDeviceTransport, setUseExperimentalToDeviceTransport, ] = useSetting(useExperimentalToDeviceTransportSetting); + + const [muteAllAudio, setMuteAllAudio] = useSetting(muteAllAudioSetting); + const urlParams = useUrlParams(); const sfuUrl = useMemo((): URL | null => { @@ -175,6 +179,20 @@ export const DeveloperSettingsTab: FC = ({ client, livekitRoom }) => { )} /> + + ): void => { + setMuteAllAudio(event.target.checked); + }, + [setMuteAllAudio], + )} + /> + {livekitRoom ? ( <>