From 4f77ae0faa11b433229679767eab131d0d62d7d3 Mon Sep 17 00:00:00 2001 From: Bryan1029384756 <23323626+Bryan1029384756@users.noreply.github.com> Date: Mon, 6 Apr 2026 23:29:31 -0500 Subject: [PATCH] Fix invite --- .../shared/src/assets/icons/role_shield.svg | 1 + packages/shared/src/components/Sidebar.jsx | 4358 ++++++++++------- roles/Screenshot 2026-02-27 004430.png | Bin 0 -> 105148 bytes roles/Screenshot 2026-02-27 004454.png | Bin 0 -> 184010 bytes 4 files changed, 2494 insertions(+), 1865 deletions(-) create mode 100644 packages/shared/src/assets/icons/role_shield.svg create mode 100644 roles/Screenshot 2026-02-27 004430.png create mode 100644 roles/Screenshot 2026-02-27 004454.png diff --git a/packages/shared/src/assets/icons/role_shield.svg b/packages/shared/src/assets/icons/role_shield.svg new file mode 100644 index 0000000..6a8747b --- /dev/null +++ b/packages/shared/src/assets/icons/role_shield.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/shared/src/components/Sidebar.jsx b/packages/shared/src/components/Sidebar.jsx index 38ec5fa..4440520 100644 --- a/packages/shared/src/components/Sidebar.jsx +++ b/packages/shared/src/components/Sidebar.jsx @@ -1,2036 +1,2664 @@ -import React, { useState, useRef, useEffect, useLayoutEffect, useCallback } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { useConvex, useMutation, useQuery } from 'convex/react'; -import { api } from '../../../../convex/_generated/api'; -import Tooltip from './Tooltip'; -import { useVoice } from '../contexts/VoiceContext'; -import ChannelSettingsModal from './ChannelSettingsModal'; -import ServerSettingsModal from './ServerSettingsModal'; -import ScreenShareModal from './ScreenShareModal'; -import MobileServerDrawer from './MobileServerDrawer'; -import MobileCreateChannelScreen from './MobileCreateChannelScreen'; -import MobileCreateCategoryScreen from './MobileCreateCategoryScreen'; -import MobileChannelDrawer from './MobileChannelDrawer'; -import MobileChannelSettingsScreen from './MobileChannelSettingsScreen'; -import DMList from './DMList'; -import Avatar from './Avatar'; -import UserSettings from './UserSettings'; -import ChangeNicknameModal from './ChangeNicknameModal'; -import { Track } from 'livekit-client'; -import { DndContext, closestCenter, PointerSensor, useSensor, useSensors, DragOverlay, useDraggable } from '@dnd-kit/core'; -import { SortableContext, verticalListSortingStrategy, useSortable } from '@dnd-kit/sortable'; -import { CSS } from '@dnd-kit/utilities'; -import muteIcon from '../assets/icons/mute.svg'; -import mutedIcon from '../assets/icons/muted.svg'; -import defeanIcon from '../assets/icons/defean.svg'; -import defeanedIcon from '../assets/icons/defeaned.svg'; -import settingsIcon from '../assets/icons/settings.svg'; -import voiceIcon from '../assets/icons/voice.svg'; -import disconnectIcon from '../assets/icons/disconnect.svg'; -import cameraIcon from '../assets/icons/camera.svg'; -import screenIcon from '../assets/icons/screen.svg'; -import inviteUserIcon from '../assets/icons/invite_user.svg'; -import personalMuteIcon from '../assets/icons/personal_mute.svg'; -import serverMuteIcon from '../assets/icons/server_mute.svg'; -import categoryCollapsedIcon from '../assets/icons/category_collapsed_icon.svg'; -import PingSound from '../assets/sounds/ping.mp3'; -import screenShareStartSound from '../assets/sounds/screenshare_start.mp3'; -import screenShareStopSound from '../assets/sounds/screenshare_stop.mp3'; -import { getUserPref, setUserPref } from '../utils/userPreferences'; -import { usePlatform } from '../platform'; -import ColoredIcon from './ColoredIcon'; +import React, { useState, useRef, useEffect, useLayoutEffect, useCallback } from "react"; +import { useNavigate } from "react-router-dom"; +import { useConvex, useMutation, useQuery } from "convex/react"; +import { api } from "../../../../convex/_generated/api"; +import Tooltip from "./Tooltip"; +import { useVoice } from "../contexts/VoiceContext"; +import ChannelSettingsModal from "./ChannelSettingsModal"; +import ServerSettingsModal from "./ServerSettingsModal"; +import ScreenShareModal from "./ScreenShareModal"; +import MobileServerDrawer from "./MobileServerDrawer"; +import MobileCreateChannelScreen from "./MobileCreateChannelScreen"; +import MobileCreateCategoryScreen from "./MobileCreateCategoryScreen"; +import MobileChannelDrawer from "./MobileChannelDrawer"; +import MobileChannelSettingsScreen from "./MobileChannelSettingsScreen"; +import DMList from "./DMList"; +import Avatar from "./Avatar"; +import UserSettings from "./UserSettings"; +import ChangeNicknameModal from "./ChangeNicknameModal"; +import { Track } from "livekit-client"; +import { + DndContext, + closestCenter, + PointerSensor, + useSensor, + useSensors, + DragOverlay, + useDraggable, +} from "@dnd-kit/core"; +import { SortableContext, verticalListSortingStrategy, useSortable } from "@dnd-kit/sortable"; +import { CSS } from "@dnd-kit/utilities"; +import muteIcon from "../assets/icons/mute.svg"; +import mutedIcon from "../assets/icons/muted.svg"; +import defeanIcon from "../assets/icons/defean.svg"; +import defeanedIcon from "../assets/icons/defeaned.svg"; +import settingsIcon from "../assets/icons/settings.svg"; +import voiceIcon from "../assets/icons/voice.svg"; +import disconnectIcon from "../assets/icons/disconnect.svg"; +import cameraIcon from "../assets/icons/camera.svg"; +import screenIcon from "../assets/icons/screen.svg"; +import inviteUserIcon from "../assets/icons/invite_user.svg"; +import personalMuteIcon from "../assets/icons/personal_mute.svg"; +import serverMuteIcon from "../assets/icons/server_mute.svg"; +import categoryCollapsedIcon from "../assets/icons/category_collapsed_icon.svg"; +import PingSound from "../assets/sounds/ping.mp3"; +import screenShareStartSound from "../assets/sounds/screenshare_start.mp3"; +import screenShareStopSound from "../assets/sounds/screenshare_stop.mp3"; +import { getUserPref, setUserPref } from "../utils/userPreferences"; +import { usePlatform } from "../platform"; +import ColoredIcon from "./ColoredIcon"; -const USER_COLORS = ['#5865F2', '#EBA7CD', '#57F287', '#FEE75C', '#EB459E', '#ED4245']; +const USER_COLORS = ["#5865F2", "#EBA7CD", "#57F287", "#FEE75C", "#EB459E", "#ED4245"]; -const ICON_COLOR_DEFAULT = 'hsl(240, 4.294%, 68.039%)'; -const ICON_COLOR_ACTIVE = 'hsl(357.692, 67.826%, 54.902%)'; -const SERVER_MUTE_RED = 'hsl(1.343, 84.81%, 69.02%)'; +const ICON_COLOR_DEFAULT = "hsl(240, 4.294%, 68.039%)"; +const ICON_COLOR_ACTIVE = "hsl(357.692, 67.826%, 54.902%)"; +const SERVER_MUTE_RED = "hsl(1.343, 84.81%, 69.02%)"; const controlButtonStyle = { - background: 'transparent', - border: 'none', - cursor: 'pointer', - padding: '6px', - borderRadius: '4px', - display: 'flex', - alignItems: 'center', - justifyContent: 'center' + background: "transparent", + border: "none", + cursor: "pointer", + padding: "6px", + borderRadius: "4px", + display: "flex", + alignItems: "center", + justifyContent: "center", }; function getUserColor(name) { - let hash = 0; - for (let i = 0; i < name.length; i++) { - hash = name.charCodeAt(i) + ((hash << 5) - hash); - } - return USER_COLORS[Math.abs(hash) % USER_COLORS.length]; + let hash = 0; + for (let i = 0; i < name.length; i++) { + hash = name.charCodeAt(i) + ((hash << 5) - hash); + } + return USER_COLORS[Math.abs(hash) % USER_COLORS.length]; } function bytesToHex(bytes) { - return Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join(''); + return Array.from(bytes) + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); } function randomHex(length) { - const bytes = new Uint8Array(length); - crypto.getRandomValues(bytes); - return bytesToHex(bytes); + const bytes = new Uint8Array(length); + crypto.getRandomValues(bytes); + return bytesToHex(bytes); } const VoiceTimer = () => { - const [elapsed, setElapsed] = React.useState(0); - React.useEffect(() => { - const start = Date.now(); - const interval = setInterval(() => setElapsed(Math.floor((Date.now() - start) / 1000)), 1000); - return () => clearInterval(interval); - }, []); - const hours = Math.floor(elapsed / 3600); - const mins = Math.floor((elapsed % 3600) / 60); - const secs = elapsed % 60; - const time = hours > 0 - ? `${hours}:${String(mins).padStart(2, '0')}:${String(secs).padStart(2, '0')}` - : `${mins}:${String(secs).padStart(2, '0')}`; - return {time}; + const [elapsed, setElapsed] = React.useState(0); + React.useEffect(() => { + const start = Date.now(); + const interval = setInterval(() => setElapsed(Math.floor((Date.now() - start) / 1000)), 1000); + return () => clearInterval(interval); + }, []); + const hours = Math.floor(elapsed / 3600); + const mins = Math.floor((elapsed % 3600) / 60); + const secs = elapsed % 60; + const time = + hours > 0 + ? `${hours}:${String(mins).padStart(2, "0")}:${String(secs).padStart(2, "0")}` + : `${mins}:${String(secs).padStart(2, "0")}`; + return {time}; }; const STATUS_OPTIONS = [ - { value: 'online', label: 'Online', color: '#3ba55c' }, - { value: 'idle', label: 'Idle', color: '#faa61a' }, - { value: 'dnd', label: 'Do Not Disturb', color: '#ed4245' }, - { value: 'invisible', label: 'Invisible', color: '#747f8d' }, + { value: "online", label: "Online", color: "#3ba55c" }, + { value: "idle", label: "Idle", color: "#faa61a" }, + { value: "dnd", label: "Do Not Disturb", color: "#ed4245" }, + { value: "invisible", label: "Invisible", color: "#747f8d" }, ]; const UserControlPanel = React.memo(({ username, userId }) => { - const { session, idle, searchDB } = usePlatform(); - const { isMuted, isDeafened, toggleMute, toggleDeafen, connectionState, disconnectVoice } = useVoice(); - const [showStatusMenu, setShowStatusMenu] = useState(false); - const [showUserSettings, setShowUserSettings] = useState(false); - const [currentStatus, setCurrentStatus] = useState('online'); - const updateStatusMutation = useMutation(api.auth.updateStatus); - const navigate = useNavigate(); - const manualStatusRef = useRef(false); - const preIdleStatusRef = useRef('online'); - const hasInitializedRef = useRef(false); - const currentStatusRef = useRef(currentStatus); - currentStatusRef.current = currentStatus; + const { session, idle, searchDB } = usePlatform(); + const { isMuted, isDeafened, toggleMute, toggleDeafen, connectionState, disconnectVoice } = + useVoice(); + const [showStatusMenu, setShowStatusMenu] = useState(false); + const [showUserSettings, setShowUserSettings] = useState(false); + const [currentStatus, setCurrentStatus] = useState("online"); + const updateStatusMutation = useMutation(api.auth.updateStatus); + const navigate = useNavigate(); + const manualStatusRef = useRef(false); + const preIdleStatusRef = useRef("online"); + const hasInitializedRef = useRef(false); + const currentStatusRef = useRef(currentStatus); + currentStatusRef.current = currentStatus; - // Fetch stored status preference from server and sync local state - const allUsers = useQuery(api.auth.getPublicKeys) || []; - const myUser = allUsers.find(u => u.id === userId); - React.useEffect(() => { - if (myUser) { - const isInitial = !hasInitializedRef.current; - if (isInitial) hasInitializedRef.current = true; + // Fetch stored status preference from server and sync local state + const allUsers = useQuery(api.auth.getPublicKeys) || []; + const myUser = allUsers.find((u) => u.id === userId); + React.useEffect(() => { + if (myUser) { + const isInitial = !hasInitializedRef.current; + if (isInitial) hasInitializedRef.current = true; - // 'idle' is auto-set by the idle detector, not a user preference — - // on a fresh app launch, reset it to 'online' just like 'offline' - const shouldReset = !myUser.status || myUser.status === 'offline' - || (isInitial && myUser.status === 'idle'); + // 'idle' is auto-set by the idle detector, not a user preference — + // on a fresh app launch, reset it to 'online' just like 'offline' + const shouldReset = + !myUser.status || myUser.status === "offline" || (isInitial && myUser.status === "idle"); - if (shouldReset) { - setCurrentStatus('online'); - manualStatusRef.current = false; - if (userId) { - updateStatusMutation({ userId, status: 'online' }).catch(() => {}); - } - } else if (myUser.status) { - setCurrentStatus(myUser.status); - manualStatusRef.current = (myUser.status === 'dnd' || myUser.status === 'invisible'); - } - } - }, [myUser?.status]); - - const handleLogout = async () => { - // Disconnect voice if connected - if (connectionState === 'connected') { - try { disconnectVoice(); } catch {} - } - // Save and close search DB - if (searchDB?.isOpen()) { - try { await searchDB.save(); searchDB.close(); } catch {} - } - // Clear persisted session - if (session) { - try { await session.clear(); } catch {} - } - // Clear storage (preserve theme and user preferences) - const theme = localStorage.getItem('theme'); - const savedPrefs = {}; - for (let i = 0; i < localStorage.length; i++) { - const key = localStorage.key(i); - if (key.startsWith('userPrefs_')) { - savedPrefs[key] = localStorage.getItem(key); - } - } - localStorage.clear(); - if (theme) localStorage.setItem('theme', theme); - for (const [key, value] of Object.entries(savedPrefs)) { - localStorage.setItem(key, value); - } - sessionStorage.clear(); - navigate('/'); - }; - - const effectiveMute = isMuted || isDeafened; - const statusColor = STATUS_OPTIONS.find(s => s.value === currentStatus)?.color || '#3ba55c'; - - const handleStatusChange = async (status) => { - manualStatusRef.current = (status !== 'online'); - setCurrentStatus(status); - setShowStatusMenu(false); + if (shouldReset) { + setCurrentStatus("online"); + manualStatusRef.current = false; if (userId) { - try { - await updateStatusMutation({ userId, status }); - } catch (e) { - console.error('Failed to update status:', e); - } + updateStatusMutation({ userId, status: "online" }).catch(() => {}); } + } else if (myUser.status) { + setCurrentStatus(myUser.status); + manualStatusRef.current = myUser.status === "dnd" || myUser.status === "invisible"; + } + } + }, [myUser?.status]); + + const handleLogout = async () => { + // Disconnect voice if connected + if (connectionState === "connected") { + try { + disconnectVoice(); + } catch {} + } + // Save and close search DB + if (searchDB?.isOpen()) { + try { + await searchDB.save(); + searchDB.close(); + } catch {} + } + // Clear persisted session + if (session) { + try { + await session.clear(); + } catch {} + } + // Clear storage (preserve theme and user preferences) + const theme = localStorage.getItem("theme"); + const savedPrefs = {}; + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i); + if (key.startsWith("userPrefs_")) { + savedPrefs[key] = localStorage.getItem(key); + } + } + localStorage.clear(); + if (theme) localStorage.setItem("theme", theme); + for (const [key, value] of Object.entries(savedPrefs)) { + localStorage.setItem(key, value); + } + sessionStorage.clear(); + navigate("/"); + }; + + const effectiveMute = isMuted || isDeafened; + const statusColor = STATUS_OPTIONS.find((s) => s.value === currentStatus)?.color || "#3ba55c"; + + const handleStatusChange = async (status) => { + manualStatusRef.current = status !== "online"; + setCurrentStatus(status); + setShowStatusMenu(false); + if (userId) { + try { + await updateStatusMutation({ userId, status }); + } catch (e) { + console.error("Failed to update status:", e); + } + } + }; + + // Auto-idle detection via platform idle API + // On Capacitor (Android), skip this entirely — presence disconnect handles + // offline when not in voice, and VoiceContext AFK polling handles idle + // after 5 min of not talking when in voice. + useEffect(() => { + if (!idle || !userId) return; + if (window.Capacitor?.isNativePlatform?.()) return; + + const handleIdleChange = (data) => { + if (manualStatusRef.current) return; + if (data.isIdle) { + preIdleStatusRef.current = currentStatusRef.current; + setCurrentStatus("idle"); + updateStatusMutation({ userId, status: "idle" }).catch(() => {}); + } else { + const restoreTo = preIdleStatusRef.current || "online"; + setCurrentStatus(restoreTo); + updateStatusMutation({ userId, status: restoreTo }).catch(() => {}); + } }; + idle.onIdleStateChanged(handleIdleChange); + return () => idle.removeIdleStateListener(); + }, [userId]); - // Auto-idle detection via platform idle API - // On Capacitor (Android), skip this entirely — presence disconnect handles - // offline when not in voice, and VoiceContext AFK polling handles idle - // after 5 min of not talking when in voice. - useEffect(() => { - if (!idle || !userId) return; - if (window.Capacitor?.isNativePlatform?.()) return; - - const handleIdleChange = (data) => { - if (manualStatusRef.current) return; - if (data.isIdle) { - preIdleStatusRef.current = currentStatusRef.current; - setCurrentStatus('idle'); - updateStatusMutation({ userId, status: 'idle' }).catch(() => {}); - } else { - const restoreTo = preIdleStatusRef.current || 'online'; - setCurrentStatus(restoreTo); - updateStatusMutation({ userId, status: restoreTo }).catch(() => {}); - } - }; - idle.onIdleStateChanged(handleIdleChange); - return () => idle.removeIdleStateListener(); - }, [userId]); - - return ( -
in Text Channels
-+ in Text Channels +
+- By making a category private, only selected members and roles will be able to view this category. Synced channels will automatically match this category's permissions. -
-+ By making a category private, only selected members and roles will be able to view this + category. Synced channels will automatically match this category's permissions. +
+V&nW45ny9+2CG_Sf zfV3f?k5qAJEHyVG9BwU5IzS)iL&x#FjldPQNHgHYU@;ry_IGmEbKe zkHMbQ-p@ieier9T;KBr=X;@$6;syAu&QHZ4|KNE3Bi(PiLA9|^RfLt`OZF>;9~@Qf zJit`;H9uJ2nVUT%xf;J|cHdFK X;5sd=`*eO6!yllD4V>QZ#os28g`3&eYjFC0k2abYXJ(dQ}{pX43CasO*_ zryw`{#-I0qd**bjF~qx+IDZFL5!JGt<{J=4pYZ2TMzfaKD)D}d%#inw{mD~JB$ox) z%`3+zufH>29H_?9+idl^(9iO9Tw9mbKNptk#9I&@d@`AsI52lds4H%lYAH zq3lRK$o70p7tJ{?Zo9lGNG~BzChpNHR5PEGee>nFL64>{q~hXx7wJoBiHZ-U7A)g! zk(hFpE}Fma0-MNU$UN7ZfbBaJjBL{(+=O2uhUeBNf;5+R-%)gMoNJ32)&@D|4wnST ziM&Ug9YkfHbR&Z{%G=+s4hU{1N3%PqUsIWYh&+ zQNapvoqHH`?@9f(gWBIe%#kLfUxC;^{UcL5auwzF&R&v}hbDFbPuaq$nBzkhLgucg zRJ?Co%y9!Ca`WCQf@Ac(YmvuR)sB7G7%uefTjFK^iEGV$A-uS?3*y{@qwblO#)Vd- zlhF3Mq~7&u{O#I`hk+qQx5UL~A5kxVMPff#rLoTP65*=+9vWQrOxv)SSRND=`?&G< z-nTc`lMSx)^(`Jn7Yh9c* ~#<`JSp?J6G4wj=lclMtw_JKKdoFkkCI; zD)u?EZ~lvBYX(F1h~A@Wu5;XKgo!QL{A_~)wPpQSb&S`WKfVmjklBX-ozH>dABnu* zY^*l`l}?(|4vu_!b-V&?QC9=wXTPe_hmB!kqkAT^8WTqX3>QAfL%*xM`RTr_Fa&%! z-t&xNq>N~WyMh&G#)CE69OR5V4DJtkg+#+-92x>5@b&=FBvRzrZYKyLFE3c*fNcO1 zbk^;5vGQnE{7{Kv5pk6l+qSQxncS?6+>tL-Z}BBePf&in9P=M*Keb0d&itxjCJA~& ze12?)tx`sQ@;9X~)!W!S^?=ppXqJxt@w!3fU*r^eXOAg(!y>mn-wq3|c`!~pwBuoY z-s4dZ@M99=L!}X{V~Ksnwo(X8 qy$0!Bea2+>2 tR z%w=c%HA;}p<1EnWCy<3x8}i`N<(JH7gl8FhnQ{C6maqakwTDuxXXxtZ)UPXlw)e4Z zdL^<@enM%3R(L`a7fk4;Xa%?fRjEknSy!XRM%^PBtYy%li>=_B0dGa`8r -a+Z}t7enNcWjTGtpp$L;vh}-3#|^K&APy`n@B6SP zdctuQ0h=PrR?fg|K;R4Z#+c)ev~ZVZDu2dNTJBRugQL~X)C^PY%m(MO5ZmxmtA1$0 zS^B97p6ek-B;@kC!P`L 6Mz@ka)_*?}FQ>mzx6irur=40kkWg@KzIt;b;%I)~Ugy07({2f1IvP|s?C)KO zHR@Ur6cNFFarf?S3jJ9_JV_u$&rw2dcr>uzvQ
}jRr*_a52WNZGHRtY z?0q&ad{#aidyi_-ax2oFF+|wgRrk@W9+5n-!g$uzyE5bPtgUJ@1?F#4HEz2Xgcx =Q9fwZ+1&0(ciQ}&cY!cPIMKqF zRjv-fz2ZQsyjfZm#h+L(jv!)<5&JANC##`!pgUk|@cS%l<-)PGEy>QkD9$c!ug1CM z+R zJp$DciiO@HSk?rLaB&PX-^L7000+F2FX-RY;tk8ivh=g5uoXnwk1PK<#CgSLkk>iv zYBipRI~ds3{d6xWO^Lykzy8G*&=inmq6F}LljHJfQg-3f`1u5t93&v<8Q#eEweg1H z^p!5##Hyv{3bmfS*{ZmLCleJ(MarDslRbWDyz|Jjemy_a?)poTh;!S_s _t;$#yNa3j3{cx8!==hs8 z07p-H&NS_0OUc2fYHUGvDZEhR^qq&i{qpTC;~%@BoX2lehj?=aE0$gD)hhEFk@@E* z$V|-0wfW=wo3l6oBGYEM1<*?A7aoiW<1xPRa`lLKvAI!|@KE)mDk&$I?}I+E&b8>4 z>%+E-Pa3WO`GO^FBHMXWig@38*Rlvs+u?gQo~$8PQUVXbZcvWsOtTP0d@PcGRE<$F z{Tg{*$Q;uGna{Te|JtsBdA9~j2t)=~9i?zQc{o>7&_UJhb=H7Ric_ns9eHyoL0Q_E zTHXCjJ4u3lJaAuxCeV*) IL$XnqcrQ5}sYFOfyH27M_mKYFM`U$| z6R#L9vg#c&U08tx$=Y92*Uzui1z9bDgO8zP&Z7Nrlq&M?i8y3-tm%Z5-%hr@KL=%X z%Gng)Lf0-;UYTPvU3zviPK<)A=B}Fm xRj8wS;N5Ij2@nC6MCHx7lXeiVFlR8{XnO^1%rZ* z7SLD!pi7(Zh6PY6tC|3tzCDZ&$*0`8pf)!4L~%N|60y~&q7e}xM`rG%&djT|tY*qd z*mUdq`iq$7X1+1ms{v~;uHY=ls;%CvAl{H;N`>Q>0XM>h0&?3eG)^|4&qB+?bNsf^ zfW4t diku1F
%CF((=?qH1vIi7{?M1_ zN2Jp64Lm3$mg{r8o-`|!u`G9n1f u4SFN%ibTaawzSXX zK*ntGoy!wTv3;c k?Im 5z@wUUejMI+}~p_0!{0#dX>2Uj~Xr@EvpgWbQA-W*{`w z(^aAS*2KY1BpanW+(~6fJ&khH_hKA`LFr(W--9oX&{pp0(?%SMrY$K1)Ot(@vhw|c zrV7_vVfTCJ#&siepbmrZtP!E?;vM7cHn-!jHlQeGGDWCkE@sIlMtYoh)*>c4_9^{Z zQX6nI>+jKMdRgQ@Q)on{fqxf&M5CgjY8le}rbx19m2n0gOY*uVkcp$*8vib_zf3V& zZQ4Jgl&tek?2g`dZPfx#td}B3`0DUtuv|1#c0Gc2U#lTnBE_LV9%8{y&c3}CQ?3rq zk)u0Nq=~Q`n)+$_D!?)ielqq%SBHCdTZni|5%lh8s>p@T7DjZoLEJ<_gj;z{-S)jR zpEVF!UJ=-L61eBA06Wz3xRsTE*64l}O1h=-^7bN7@Yfx$bW(si6DVe?+F5Yg54-)> zA>D{yszg)(0|4;UkFuwsTA;{6bohI3LOy&wg1ukr>DH{w7zh6i$s=cMGUDB^)QM zS`-y*I8osqZkOs oJy}=1-w3_yMdGcAHv=`tg7t` z8>K{)5>Pr63F+>ZZUm$|rMpW&>F!3lLAqO-4NAwRySriUZ=s%Ze)oCqckleeXKh() z%~)f`JK`No(r+b89$tT>PTO3E5XCiL!SkZEj%MsI*zF5?@e*9yJ6}=HKLdpPj<*fH z?rZH)tnK;t9fS}-!X+f_55Zgp1_m=tY#~m25R;ozV_Nm9Bywr&YR? Tz z;NTT-qr>KI-s2KNeun|3D%x2-4EHg HKl{PW&qcI^5{;E6)TUoCvbFL=w=iu|qkw&vxUKICe6BrSamU{_wT(s+~x0R~ru# zB|C@=>>j#t@j-YYD>XqsM*Xoi{Cjn*dx8uOI=FZt;;U$y_RrKcI~d9V8F-wf{Dy}2 zVvarrs%qjRGu5n3>GsV&0}h1Zb&WF--PCp)3UZk>mwV?C{ta%^h_6{*X<0wZl9`>u z6%WMXIZEFbhRw*GgMX7t?;Y43o&SsN_ihs-9*j0-sa@xLEu+ib!j|yCKjWLMp$!=H z)sNWtN5|zg8Lh$Td`{B6$IBg9Z8tj!5BpUr!JiAQCyOkx@{1WA4AFMq?f8C~rWfff z;YY!K6GCDG$IjN unJO5fz9vv)vd%+4cVU^_a(;}Q%AD4&ihs8fJ z`i+9X_ pm%dW5BlH$lL z$G)=TT$uZk;4DjSbLZ>QrX_X068^ lHgD_|W*bCmuJvUw zEgsL8t);XMzkXZ;(yg=EB_@S(YBm~}iH>>Xk$v^vkZs`qO}_(?{jCom)L E9>xbB!9AL=HRYJb@@h;u-)%`1 z@8Q==3YmwHXIHoI#wVxnoFeZ@U8kPss5|-G69|Z42}sC=ad425s&>?_#9mJv8fp8G ze}ePA7_m1WXXr4JJ2>qqxSQwXf=^HY&(SVVS=TKOOe!1GvOSf_0kCT>rQT;NqhWt# zZ@|Fp^UEj?-fU}t`6EZ2? _G c?0jsMxr zJ#sUDNdGJ8g;v;{9t&1iH#AiDi8nW+E}V8_30KpBgmR6s+``>voR)CD^%O7aEvp)X zX 1P`WdHlaldo5)ZMKZ?tj^-gg zPS7;ao!?~apB9L$i#ed6pb$EpZ?|urW4;bGOjW7wE5b*`XU#EAy{u`grt&2&+Sg)^ zh%`B *Esg6Lzn32f}`uF6T2Iay#D2 z^s(QRF_24bb`i%SAu+8_9Lsyp#Xv}-T3!l#Sw+jgcvJBnSpKaWdjh|GOF?)tnX6H| zyFXKzK3*VKX#@4X_k2JqR*#K}600#A$7ZNF-Jh$C#ir9VsO(s>n2t(GF}H4-C{`Ge zwipYNILZG*FeGsjOO&f#<%*${FJmyUDq5=67M9Cm3L_!M-xq+2L91IA*U+H$_=#-G zG}5?YC2me%6)NUE=W({AWMXn5lQmP#O2a|h6nXrXK#3mOSY3U8b;yT=f =x)^X37L^fqHqo8a|?5!EVGxgtxYG*U^^SAhr z<@sb#wNRp9MEeu&Sk&n&>KBBBG9^=Gm3sOcgRexy#g&?!iFT)L1Qirsd@KeV&@C~3 z2@5+{d~l=$qK|Ub9#xk>$-N%1kxc={%+=ME(P!}p@QsyMP@prPE|(4e3 ;LOI51{kv-2{EuJderhgz3HKK#_Og?tsjqc>1() zecWgDz8AjzsL_K=vd23RzV;X^MfSVRimM1W*NG9)tV}-P2IuqnR&&e_OiU*yC%p@^ zY1Dr^rkdWP$nD39C&~1Kklm^;7Su!U%K}35>OZDm+zcaa8oT{_qhgF2ZNeDS0@X@A z<&B;%*Z80Ckp$0JLH|X4Wv9R}r4RR~zc^J0>*I^SA&^mi5f%ZLei;hLPc!PL@y1&m zIe1VPxJ4I!A!xZif*TL~4q2bI(bSKkQaS^#tNh4Qt)nS~kG28Bj+mG926F|~vzf3z z<5!eCR% zWcElk-fO-=EPR@juT4XUEM(#sFc1jKaaEoeLom)rHZ_-N2l{| zv4vyCbgsHCu^V1UMf>s-nv*p#%jVCflfI)ik6bWpw5lq 4}RPbS4JgxAbSprxO54Gq<~bu{KG zSHYOqW@|3!nNNX8&2N=WL`^=lnz3jgnpW9@tgDW*??Nkn=I_hp%cuP~`k>C*P{I_E zO2OiO2>berj<7ps()Tcuwg=x=&00uE7D9VX5v3Znu@j+_= N&|V+^0~{MA#0M$(sEvCDQ+hsdm1AphBjc^C5QL zOzj3nn*9M8;jF(9$4m)=gk0d&JB&(sQtb7#Y#ux~OYY;qxQCtMi1PMbA?&LN$N;)h zf?ci@{Ci;nrJD{?QjQ}sY6H3=A*(_+6O0^zJKxEYsp>Ns0FgV;+J`s(tIG pWW;q;o627-iRBjy}%P*w-I>Z4KA10*EUn(@~vH4 zGPX8C0q#oXb;dg>?_{mCVRgnJ@np~J? >1yVVN)sGj!5zti-`TQM`hnRH z^UUBMxkp0g1Z(^PrD?71Lk}bo(Z0{?qzq2+l8;GprQRt?6+gH}3zL!gnU*o8e7x#w zKM`g<@n8RO4JM`U1oLbY0U-sy5p`}dPD8WOPWHt^(as*)Vi_*~1x@};9aFkz=RmTb zPI6cc>+58P+3}*F6-PzuHlHYlL)Y=ucrbf`=g;6`&Na)WPrF
)gy8Z)(iB059(7VaT 1)f2Yw9zeH%Ni4&+ASXvl(h^EynS5=8xUO; za#Tl#-OAsQb%RoePKxRp Nkw)?1x3I2`s&)JGVt_C4k&jaU1fsO*SgD#tiO$N? z7c>2I4vq>Q@6zrvyG<}XMcGM~?0)`(Olot+cK6Bhrz`O8`@O#J4D@*SyFatuTfa*4 zJSnogIwKF6B@t)-STx=_L_di~BETmr^{19xPUfnxu}X^Y*gyfuq-<*DMUl9uQZizC z%4X5gf%T9SuQ lJZVD!-?(ffPcJQl za57%^Pe?_VWy)XMnfe_PbVkw3p44AhtP?PdA7SEy`VsECU2`i1!kcRfvKl}CUY>yk z`jxsEHkuPnD*SWu(I?1Hx0+pTVPmp6)0Sl>n-RB)1a8;Rcc%OC&_>s{0C39Y8V3z0 z6y&**y|3ZU+P=7g_HWyr1?SWAA%+|L_?9u@9A+@}g=EHNDN?#BaVMwmcuS|yV@Xde zj8G GB!Yxe`J+hj?G4w5c`vC%KIKl z3O`eAZpVT2@`(mv9&`76tag`z#_K2LHEn;Zii5*O{wK18RlE~yc7LqkUW?Q_KbaC^ z$L^a>Q^4$Ys8cnKPCpYrg+sLvawm~8ZECX)>1Z)4vcnj@UdHP!hbsgrkwoU}h6?g( z`3@^%W+$F)(7a8u!`)^{{>TupYNv-5?$MTBpY@?SXy4kLkdv{Vich?D{cBNoV|y?I zafF~b=2J*Yze5FxY)Wf|^#1)Fv#YC5)5JN9rocThA!uu~j{JMeMQ^;L9-c10K-dvl zszqp!76HS3OSE?_ET-C-24%(_{H?5ZCvq0CAm$25z5X)#%~IeBOgr0QkLH#4V2q2# zD(Z^|zHk!ar<39=(5sPap%FfYEgj1x5k QOyCoZL1ICVKvtZ6sS-*B3z}ZQ13tq< swwHCo z+#vA$tNEq=j&=-xSof!!i$hv`W(f~ApTE2VnjFP;7t@i$j{e}1t8D^%*B@&N;rp2! zDR!QhT!CDfnpnxY3S&m>>*#jqbURxMoQvS}Iv IzdpistLz*;`g#)ik+}n`>)fZ!JKy+T&DF7X;GtlY7SG2K{nx-=1P xxq%EukM{nGZL zO!%&)R#c=s`cj!1os2vx>X~ Z_9o5aKnwC3g>$yuUq~SymD_hssva67*n^a znIHr4jUGOhjz_@Jeku^SRrx!bKBQ5B%aZk|jU|Apy`J)g1Rri^So8fcq9VG;tQT(N z+Jp8}7**=Y=b&*ZA>Q|an0Sr9nm~1sk5|nfG01Y86bnY>Map$MV=4~{;~c?S7pqe~ zqjx03Mu}c?`|xDBaJ~o00!}EI(3#XZ>y8~Pw;>?hh9&;k@hLO zU+pQg_ls>_2ZJ6z_eJNunC;(Ii>oU&D}Rq@k(~4ROva1!oJdOI8_kac15@hd71__) zG_D9Ihdenqo+=)2k{f~(_IJacSNb12j$qqNtwi98tZR3!*2JbNG=6LmQAZnHy;cB_ zfu)(5*&`Ex7MCiVrepq4>%k|L1^)?nz|-}X)gfyr!L(`Iet!9uB;eOdrz!5;8Gg3h zXBUvdAqj+SX%jDfJdvuzzFk4B{?SmcOChl4YBq*%pu~HOY$ZPAzSs~mSRRjs#DVh) zqY=AUwXVG0i8{f|W37Yfv&Y<%_fo7YB_mM?uC6LoB~dQaV`CB)=EfYVuY=btayX;l z7Q;Ohrr{0hfm!ja!+-E T#D#8gGAL1{?g|VzT<_^bXUC&PLtAb z(l_I&9Y2X%PB*4`jdisFekWVU3E=n_UGh5kI5KtYdJQQCMpYHZ03DvjP!dK9UU+|s z_;@3p+gFg9@=|2oEbp~jK93iFU&@U8I}+5=?lJU?txAvipBIswdx>8tS`W; C>)$}!h=j;-{{4`H0v$Gc_Owk=S elx2vkWkYp@?&eo+)m*vExQq?>5nf&Z>Xwd$1?|V_ zTe2BgpM(+ryzSt6sZfFQp50-J(pUW5D1CBI9C{z4@ufVkGJzsG;2pxSzdIK&V`}5y zyk*kpx@0|QG1T0BHwIbElF8&tj^s}p-YWC*RW`^monv$V+T +Dn^pq0S= `eO%o%qBW60frS_ zisR=Xf!AzUdlD(jX=3(=JtU|Hvf4Jyj_>qHC^nbi55&%-GM#}HiPA)#s9Rh~ASaI@ z3cs&B6BI8hl3U~8Y~R({*Vp$*37SYA@vQo-1Pq+!`HJ^)vk-jp_hCRgVL~+bYk2AF z7a~B2@8?S^E6fQDGFxkH(o#3@XU5{{(^Lb!I{dsO8?FP#+JxWv(n}Iv8xk^vSKFLR z)vV{hPW4UoLf9heRg%wubtv70c*>MHovZGpTE7EPX%4JML 9cZrAx=0 z{W2odll-s}r;` 3;^vsm-o$;HUk|&7 z&pq^Jk#uf9y?Gj=g@j@yey6ZE4#D=k$20_e1iCp ^!@5{+6D0s9r|0(u4 +Zw5g{Cs@_CHMG{~X$d@4;EiBMj zvC;(t 6CCK z##S*o{lTq@u{`F_EJ6!`OeO}GT)0Efrl+yvrT-kFS@I|(*49@deVq1Gc=n%VSgc8l zottB4R&CVd4feO`$MJEd4%kHM&xLTdr0{hf_X%6lagLkx6P#P9By_jS>z(&0sT1pF zm_$Z?(}lMPW{ cNn;I>Z`1hkp@Q*nM+-+q&iH&jN6j9Wv!$Os+>DyW!QI6U z^?@3GOCs#a|HbHb#|s<(?f*e7v2PDk@PgRQ3zw*v&|pOKsA`#0p_Sv|2$jNWJks;@ z5@FMlPaM>IRAANE0!*>rWqt15D Sv)Me2#xvAwKO*~U( z1CA;(=78-Bmh0sW- ^V;eolGhX*Xm0{=3rdbI3j_0| zn!gmN3GD0AWzJ8+lG@+RBtoCmK}oY}+f@6E?m$Cw@e=;XvoUVFo8Z}!LA^#p4#UGD zzEtXSXIOlgimHYviSyl$A|#9bev&q)_sE87_U!e=|9nUuzyqTiT2G0`*-^)L2e&r; zKDN!~c!_ U%i`1WfT9-G* -jjP>rEdJXl41f2r^@QwF$A5Hl zs)Ghp W#7`Ndk_d;4rkcHYTJ7;K;OyQ?1O6q5)`BAescEqCr?$Qr42EMfa+$pDTlQo2!y9RsLaY1;#c29PK6&?YzR=V-+`c$5)X z^~f`r-F7X7I-_kOjF69MZ{9?t!^G2c=g-RA?Q4rg;&xphi=-8+i_dED{ln|<-DfN| zmVrP1z?)vi@+Gn}5bmJs@;+Sd{Aks9$hNnj%TC2pz!$x@rT05@gc8x_K6C@?``=Yq zDnk(?w^EmLrrjC$A;9HrkmIG5&J!|b(+xRhPi`j9PpW@SF{fHIHY4|ZnNRRKie^h^ zqU9!=#gE$o)LcO%R-rF!wvygIcXKxI`U`}iwL8@YHP1s$8-Uw+!bA)bGRskA=y=JW zeQ+aLFAMAvFIibHDhs=CO5b);B@uTAjOA4dK*F0(hxcrbH<9ISsr+@ARb-4$^iBP^ z&$F18XN_^+F5!ZLDCadtg)%9wV`L0Q{_VlK1`~{Qv-3e1C^csoP`>%YhTYiUW^A5M zAY?;R22CBV=BBLddJ878c+UiJKQ8!&8Le`F^zIW&9HxuxPV;)!M#oBu7!D(%?ARk@ zt9zLaY%HEpw#)HeSaRU2IQKo1h|nG_4OUW5ZDq9a7stC$_9$)=?wt+4KW~3l3bLNh zAEMFy)$PHzrkgUTqLjgR<<94pFHdRip*bBU$=?<&Kq+S|Y1wpu0p>eFBLQ?C2fEY$ zyK`A60&WsSGjU&@FfiWMJK_uQ#_7=cojBLZA&2U)b{-N2gK_^w?)LCp+}r?{y nXEeZ24`|1SdqUPtj@siaefcNt3O`nc{j*z>p}V-aq@|_x z_xHbMVcBa!-~{MxIvA^f8i5=p@RXF4;DrT19lZPaG#XkK|Hi-SZ?4CB9UaMl+aCEK zro;7djf{+z0dlF-)Kso!K@JaS-np%s{c;VL>>rs#u(W6Z_`7gQYLx-@Ogm@i-d`uH z7K7mZ2f$dO%= DKl(Ku~t_%+_dVu |Cp%i3YIPoI?SYFrb7yk(ZYTX#YV2J$}{IET$uAOq5%8)mOSwk*`U79!*S*bNCAm zKGATjFdHSezqT{(iheaDbM2*^ot}0rwFhuDPB@f&c$z7$+u3|X&`?i1xA%@TrtE#s z^NCVCOE~~|QejHZ*I9)F{M(O&yCGjw?Z{+5i2s_IKi#sKwqgx$_d#s}kH2DIV1U8I z!n$$0MJJ=6NC{1#Hul5+kTnlOn7SnA&V{a}O{>QI+H8a*?f#V9!44yu*L(_PGb@ld z3#bbwjoU3mGPciQH+RY>E_G=VH+XeV^A$j}Zr$EWWoKsxBO+q?nx1}9>pbSAG1=hc zHndhT4j6fiZKX# y<`t!VnY=oW~AnT=_&; zzg=W8)n-G*Xa6xY6xu#r{)UMu`o|9u?0c^E2{|w7r3cx;^UQt-zRQcm4LOy3Ar)*R zyyZ=#cr7~Dgvw=&imb-spg4s1l(Wo4v9m?-OvcR|dDo*!A;;&o?1@c<^TNUmNI$<7 z$&&(^4#K}8L%)ef-T}Eq499Y*&W{8>Lmr+onvJ~#7Lx5>YyA1LcYZ?th$$tZaZ &g?7l7zXSBN?0PI~!)I*^ZpCFT_`q?Kv}__8Ixt zp!nA~`cF9e=a`~)MVi{PPj nUPIyW(e0R;fWg-?D7{}V!U9NI J@k#^>boidx|N1!&Zhh@L#rzX7Ui|%9;RFe>5X~itZkrA0ltv zzIQ>?-DRt}SPrrT2rs?v9ZFR1MsYXGN6Okk$^r}mx1M!htUTDOj~|*#B~df<@3Xsh z?|zvMlURb|=i8g9XN|XVWG=WH7Ectc-`_hE`Va>VC3@M;;YVyV2+a-9#*CUoJJN@) z>n1py)=wX#zKD)lp26((xrWCnA5Ic-FXk$ 0Qokl(!=(|mLxtrFJm%;?vYe&ZoG`A1+Jmb zf@HCes!sAfnhVT}-fAyy1r|erc2C|g905qY7lPf=ailA|OCr1Xc_wqZYLoJ2f5qtd zO?-R@yeHFz8@C(fadR0YLRsL@ LeE?>N=J3=SqCXDEk9qa8k@3O7}tB(gz zpN1Aj%&m?n-kpS;dAn=x*D~Iih6A)?rcjAn@f^+v&@%6aNbVQ=)7+DsR &!XBSBAEUF| z*`3Iwu;!^Dm^Zl`^?nnAXF#IR=V`moH@>-5F$NxVJhFc9PwL+odvsq=YgW%VJfEA> z-pu6%b_=YFEgP6GU z X|LuTuN-^@(10S5?4}%DTm*F6QwP zQBj*?RaV+L?!?@QXYOB^RT<0scVVXuZ0>2sn~k@@^eeS9in?)+<(-qvGwJP_3iUAo z>luY?N=z(=)!al{kp_@>s~_tdwakZGhP*()PX$;lv@E@n@xxPpS^e+;mg+@Ocvc*X zJ@cSot{-(}nhqJq%2A>`hLUB3y#%2g)pi#o!-R{W6c8BgqOGmx;x6k5pI{ +O%q03co(Nq&nR9XF zJLNVez&Ys73Ig9JctZpNT3OTT+d{Gj;h}5E>|Z1MtEaOJDRsP@$be*Ij|5YXn?LH@ zmw;1%Xp3<>`HkcD%z&0`uE?Ox`m=mNl+T%&49GYTyUvM%ef!zB*4AHI9)gErO)I{) z%* FW3>BMYvb3q*@y-JmIJjX0M<-y_RN&}v{{W=8ifMi= zzIY&cRPSxjv#Azg>N?)A#^QN@W>lIL9_sd)!JAkZ%7`8z4jG)$?{>8lx=h0NDB8cf zu=1WoXY*+3?K{{%i#YbU1AJBDUH0xnyppqvAeqr=RGRVUDDU?4e)f;UM&4P8W46MH zizCw;FWA{Q^SsJ%{W3@rmen;h)xH@lA-Nt982GSOH!eAM!7~owmkbX89gHDg4u3P< zagBzN`5N+S`xEl|`c;y3bPO3ieMa=#r3Sr0MSzUGvJwZ8&A@Q&6u}mlo&msemVrS% zt$E1=%-OHNZT+!{56Z=ovH6THhb_Ervre~HB(_2dQtOIw+dFa_Lwh(`{k6`w=e0y# zUez)##lITxy!w0+DGwBkuAf9M)v2}>lX&q%5B;8e*$RgU)Xn6JY12KCb?K_p`>uZJ zNO|9EuY2t2t!wh|i(8v2T-SVI=mf5S=ce*-Ve|a%mI(XM4JMJxW!yT6?e(Nd7j@hA zw)qf;tn8^za-$EwQ0t8D&h!r36l(fNU1z=B`ZVSC{h+(%=zT+lCS&`k<} =s#-K^$H(@$O$G2zT_|lW6=-0X7c=}#%TnU5Y=4xby=5EJkl;-0$%rh7z4kbK zVTD13$J^A>zZV|K2wA`*tdg#{+kTfp+wP~2r81MJvz;t7s#tCEovTrSfRwZ*={q=% z-nc31AuexPmn5F$fRcyLBTmNB68z-mx46B`38flz%#z-LUa0&%{ nS;u4deS)_hojX&$31X7i8Sr6L3L#xT;1I^yi#Iiouf7vM0wnP9wF_SKn6?U z%N;#V@#d7l!!u%$j3>SW_YV+l*WOa2IgT^Qva@$yO-li$!xg+ 6cUCpFra*D-pkZjzy1ND_#wo&P_<{@pB`t3_y_mSas^J-s~(U+Me2W%%Y~zVr$il zI#?Pozz~w$!1Q?>bq;mIj#fpm7Oe|*x%u~#;Mls~D>NsF (FNe})?LhV57e1u;^FzO+chUq?c1O$TU= zHcR nK(?}^*pR$4)7YS3lmhjmKKrpQQ*YH})
|u4v7K2y`4epFHN@w`x z^?gYV2@6^|Y!q5TStibmG|}D!;k2du0&QthMN*@lYVuuHZx`phc`xl9a3x>;w5{G! zi{$-x2#WgVsWT!fe%K>+ZIrn8EU9$ApmwN|sNCG$l~PgBKMHB7nzjH4sp+id>w3n= z{edW_m^jCThK2^-y++{cj4-s{r=5uu8V@}u=`q;^Qm~qv7jtn%N*_Qklpp8Dhpe KTbDf4GPq|TrWQU0~ zf+4!-qC4$z#E+<_XAy**`zEv2M6R!o834E&2ztXxIm0*8A&H4NlMfG|0XM>kV5)O7 z`8=V?%beq5^o{!)rL;Nz#N5JcejX_iDfqi0xmZeB+S3}!yDH$qXsNAr6L4~yibvq` z^eQ ?Q>@ix2J&;xApemnAq_NkCDA1XdT!4Yk6WP&oLhy3FaNbW&K zH*$@i>hDjNsk0q8sCcox*)jzH@#5pLqog9j2;g2MU>DI+jLH}8ivYIF;pU?@P*Lo( z^NLq=$&UH&S~tT|PA)Ety92@#Yc6GkLNM1G@E_V${ iuoTyjVctB84TG5B+Kl?$OCg}FR6%xObO 6bOQ4Id{=85YpUDazr#a% zKp^7vhDV)4AYd_3+>ej@?XuYq+WqJ8w?7NG|8u>>XoURZei;2;ofg|+Om^c@^FsWO zVMf9i$k*z-inDHOYy178%=S^q;`nHZ{#~BOB`1H)F| GKbON+>z`F$bge z$;+%iTCv+d2^cy4a_Z-@zB>_0iPB*huS?;&crnxm(zDq% 1B zr$}dlDpq2GK}n7HNPM1>g#5>Nx%q!d^=ukb`$)|F61CZrg9)|xLK{=%VQwa#a#jZ? z>pqCK+?CZFO!?l{$MyVzWyZRy-n~*6Nr!nS4XWe&G~I#jBL12$+TX(JK&AHJs$bWW z+ak7BcJu|elZ|NE^SZhbLW7~fo6_6VU zL2-zH(oVWNg>{Ro%8aW-)z}7u5H{wm$;nmwGVV{`W((oTDWbwPv|!DxYTm^*$TR2J z-2+*;3XSx}f=2C6n-gdj%>>S|NgJYqsl?!9O8Z#trMj}E0m+tzGYIh)@M?c>ddZE) z&>KZQzfT^}1?49#hufmlV&0q-A}3c(vV@Wsq~Ac@HD%^Y<>8u03wO@>azOqxo~}9c zX?)hkdUUG?8DqZGpA qs?2qjD%KTf?;H8(H`LaVdhAY^Zu+z*N_SK_3>hszxfucN^zEa8~ScC)RHuKIu zVx+jVw0$RVyHrcx8r-0?UE3kHLyU+vR(0}GY%{tE5?-8)>fYZ@vU;aqgj2a1ePr85 zgG*!KsxrVI$DubJPvP=}Iv`LIwIG?{g;>Z9h+vKi#+wioDm~Y6`YWfYvQ*bihob$$ z3}^QWdzXSi+A62q*jBu-89J_9WK~|jbbpx6Zon%<6wAIh8_T7;a<=}06P4yj%F$fP zAe-`KEY}#Fd-BY$R1J;fdxfrlU7eSJfa5nSRvFr6XNYwEe3>KBJ+pAeuKd*thOx0S zwpEvdWi@v^zay{ct*7YuM_%D4Qam A@84ub+(pR?+$GsSW`r^* z=SXfs<@>yPb)T|yR-!~CPxZJv%*wljkS=0(*j2baeY04(ufdYJqw6(%s@BnpSW69m zSdWRX7<|3GL7T$=^`ykWw@Mkg*ub11B2xmP<)q>x1xIC9nerKe9MnRajI)o6RK=3? z*9vyZl6Pmw;6J8k_;|n9;WV!-zG@VZu|3O^jD1ZF*T9h_U4qYP@-QUeGi-V|xM0Ms zOj=_>V*w%O8oliCaiA@sb(&Mhfr8@sv bI{{ax@cRGp}*Y1qIO`m_1o?CuG zsh(1i>?x5bccHKCYV8bI;-=ybfO_(G0lx+kOa{D`#Vckrvq+CIO0824ulfQWPcR>` zwO{ijjq%<7N-L1`EdFqL5j%c3TubYen-tx|&-87|WaVgo2EFlo*RJA;B| >m0+ct @pLB0o9(UxwQhW22wJ~ z`rbYr%focy!s+^pqkU`Mv}cXwcWn&A>|PE;`#otqE@;gQ)|TZMHYDv6+S44?`M_C# zH}(DR5g5gI`BFqs5T>WcIV7}m 3J{A4BUSb$9Fb z2sp;=|2V#56lvJnGMZH5rGf$$bUfAJ&|m_)eY-z|E$D=SOu8-Eu?Pt*_f^P&O0N;W z{!KZfSoH1NYZ(eG_EglsZhgx(OG31#z;*0^h=M{?W#jure(w{a=Rii8$CCS=A~yK* zXPC%2=^pEPAZfto0p*Jf=Er;J{<{Z=z3E &I_YGwmAa$XeDby>BTv^%*fbsCZD=ub3ruf z&)HmV4bOwZ^nW&}CN E~-FMk3jat!f4t {TS;bq;)PoZ<1 zcYTbGtFDKZIvtnfW-{_Vi4S$Shn@z!Ucw8+w50so999 y?@ft|j1aJX5>#iz!ow2++Wdr#v<-8N(Cr9A zEZng%L%sh=^YKi&?n}E7w3itaqw3rmpZBOc3$ZZ}Vx^~iw5HhR(Cm0gy58D2?og4o ztwzc(cDzLw`PH`YbtvKTkY*Vo?tHpSF#9MQuJ@65GtCtpGvU4AaBl0q?;zLfsJ;2R z^mbIu=*9p|l!jus)yJDBSNYccMpvgIhBqMum7Y9-Xu#hTHr7h4+nc(k+jKGBI`oMr z-;NmtOddx%q_3_HrnBYb$&<3>d=vX24$Qh}>9Q8v-ko59roOI6(abbeZTVnpJlgcB z4Br6uySI2kWf^t*`l7}e+#b4>sXE;TVkpV(`=Nx&;Te@1F|Wx3)jRX6yRvectA`LR zGg#LBnEvZdI ^L5_sMv_a^i8s>?aq-2g-J-vTAk4tn$TgS|BhcEo2*kwm; zk{Xc= VQ*|;eh^X8X|^Yt(tw;Kht?CdHliQv?< z7t(!!3HU>#q#1egnDRZT*P~$2I_`Y&iZbMC1Ci~f;B=@g^t!l6i83~hHKe~E37Y}J zQ=(eY__`24DnCuSR>wU_a~t*6mhCyv%YCiz_Brun=CiQy7TFRCFCXw83hvB|1%`X$ z@4{L|MFv04dyM8 PZz)zT1M-cSb0 zRb00d?FN0So%Z{WmriaESn72=vBH6e _(9R+!h3hIzA~p#Cut3Wh#g29f#zH)CmiT1SFC6npx(GzI2>=ZPR% z*<8b+c%xr_cQFK2om`s}RzIC;q+x2}R)~Q2+LNoR&8E0R?wZ%QuEZ1Wxp{|Vbw_xi z7C-ID!J2ZPK9m$g7bj4Y!8mQ
yj-|+pqj8gZmlQP|P okqT`)rW@LX*;=$unPX8VlDymqu)>|*b`k|4= zB0D!0cj`F~O496SfNbKjN(|MmCl<}W0pTFy9X09Ox}`p?kT#y^FHpPhxtX5=xqkV; z!mLFc*BSbj1X$bY^SWeIM%_dDq%yD6?D0#`n=Q%qO-MpBnfR4NJVo2*2@=w8*KeJy z@G3o77ic@8<2Mj+I>IhR;MLmKv8IDrH}=`Ev{U+x4!qiO6`YUQP2vLhLmi~*Ki0F- zn%#+(TFSPD8g2FEWu6L@d<`fAdwd)UTN {ic9RNId*U{O12%# Ha6@VEE?lJ+amb`K{&Ynvz6{OZ&jDN zK)Z77(tPn7Y(oX-*#?Hbriyct)}VWPuQja4Erg%n_xc(E*iVpvUMXo20^K1uJ6F5y zrNp(tI(hc-39FpNl&cu0@J<+R0T`@RoF@yRoh{e5gW7{&H-hsT_sq3YYIa@=W{X z0&?Unb~N|Sb#P`l`8!mtgq94@L*%|=GjO4;k6Y~m{o3cCT4*^CqfZr!ytR+J=TaVO zIC8|Mq$1z)HI=sE3FXFuCN@~>*LViCtx?`k6>(yT<<2y@ecqxbQLyx^SHBn6)Vz3D zy2!dgm>j;a=POv5PipT@@`NHxCW9D?tOeJoq|?&u9U^06n1j#HpXBDs*jqScNW^Ef zE&DO?9N_^@ikB17x*~66%V^Yrv?aqz!#53%lAnVn+$!4aRtBs+u3p(f-}1O!gvSW> zUbtU`TM|Rp+U)&Ppoh>-wc>yfliU`;Kx`Nl$W^pO;Mv_o+$4h 6Bi`_v$2 xIUOdysOAyz6EAa(ZT(bh`C9H=nZz zy&+O{D19y-Tz2=-r!T9HW^9l_hmR$TV=wZR-p!q3v?Z*`JWQANrKue6)yADQI7l9= zCajL^y*ED`nw0tW=nQm~<$HPgoYs&4=Li#mNHxRRp`ffe mg?DKSZCpw zm~aXgvY{LZ<%gL{$EAYk?EJ7Fv$E)Z(7rJ|@mGK8n|rQDmP+Sr$xMNy*SFVv3vPpD zIV(S|u%&ZPDo+o*i 7D^3;RgKHFj4MrMn}aDH_%Uj>M1`V9OJZ5Jai4S?A!Aqi0xQEfsj4!pue? z6dxAW{$0+H2)v|MNJ0#{!NhAzZ=!gt_1ndn&S7eQ3Ft!}V^O|ZhKJ@d`fiWlle2x- zksZ(99`O k#7cgup$P0#@Ug)L( zD~ASGY~JWv9Iqv8NSO-xS8sYFFa7e=f8^%o8ol&uoeNH!oIhGgvD63i%HUxmm`=eP z1qHp|v)wB~rw$ {l<|TG;A^o(f0NIlpbZl`KabSC^~OApyrL?~ za 4ta;X)m*=C;|x0TH|_C{@Eovl`yw~nz6HS|w)ez!>gwf*dSFBM zE~lN;GDUopy&r9*wVo|sAz)Ol|KKSeb<&F-@Qc`eI92*>yA$*2T#n zuc*HqIiD5Ns&5d~kE;p9UkZzc7*bJE=14Dk(>~5tvr{bjq=Tby5Kp1B6N%onZZ; z{6X2^Z>zg7vpXMouT^ysO+>wOmZ(zOLe;Pq PjEx*s`DC)i=665^#TQD_ddA@A~TDiY(*#S0P-2iRXtw!vSh<* hq>k_b0&6L78 z!DAhD=2&dL8?%4PcgPUYDM2^e=UTA1LdmP-bd?+1=K+r{Y3zQS8`{BUv+r5idU||i znL17^R)6w~VAb8FU50(<%ES*5g2Z=}664lLc^vxeXd(SxGx=_49aXTcMXJ2h(u2fP z=T@}pLhe*qIK-;_*wv{JfmgWN>NZ65)iihKsO_loc%xx%k!<#R9sKbOchjnaC3DXC z$u%mbik_+?xY0z6_4&!2jD{;$bJ!v-(aLh%Jxld*)%C`Z!Ds>IK 3ZA4juoA8LRDNxdbiq7A);u=peTnH*2wBi(TXT&Cmez7dx z$Kcw+J8agH-Om}<(IZ)B2J7x9B!0?wc@dXa4i9b>i1TNvq?1M%qw4q3u^%S{eN;OH z^x|UM(sXyXcBTz<^0tUXmR;#Egn9N%hEk&Xl_z)qYBTU4f5o8{x9%qWRgn+301U zQ{$O~4psQtO|8*5*x_(af%YW#Ts-=hwKbY(wt3X|MEuBNe8_EZ`|7E~-tzoV$p$)9 ziTuusnk{K_%X1mpa3=mMH`Tivua6Oz2lA$(ij9h>X{-iDYbT1Anv#t{^s$mhT^jtF z`-WDX6#O9=2B*B4h%ntD9v-hRePK)ZznnyF*2M4LcFutyq) b7~hY|I(oEVavBy!P38? zck)XDW`kAdV0P71*JxgeTF+I<#+7Hs4nf}g( y3Am}&h^L6O zKo*1qBdf9}vqj10mwtEDqQ-i}!(_5M3!N*#tJCCEvdE4V9ow5GscW+S(_5+BcJ4S6 z9$Kc)#ZqM%HPf3g=?YD@PoM1O%BCBCuXO0ru2Wq|B4zvNloHX!Vg9^1VYj>rdwfJ> zDzYj%l|6FH9w#-OJv?r`@PL2nP+oa2mj74(cT`?do6wUzsr}P#w*hiKOYt0tm7yzn z8Z`E(dF-c??8F&L-27(3tnzrdpo+upSNY%|;h`GMvkzrPka@By(eX5-l@e@?gvy3x zY0PjSY?nV_zZ_c|2@3;^f@&J3SqJ`fzH@9l8Na^)z9jJ1_=$sqois1?`{kjgs1>?@ zzfl4AcXJMD??8aX>sSXajs*UhW9v)!&1L~Itj*DdCj=qRSo#zQakg$=grmr|s{9m? zSkPEC*p6m5Oxd{9?gGxbx~~ZaV()PiZmvNeBpuF<2 S#K#BN@_Ek(NH-q;xxle&H*P?| zU_5LzwAK{)U<$>IhYb7?@WYT1SBDOJU0of_L=HKgn|A-Xg#TA~`GLz{d|C7Vk1zW? z|NVS~Q|^K>y{Rby*Ng|BFf!oBqYFxXOip$AAn>;jxb6EHKktzJOJY zm3dEgsf~5#p|yg&MdkBw#jTfh;ezcn#>8-AZdmWubm~ReNHBmf_bMsLgSHBT2@Qwq z`+V|I$>&7Y(w5M{SN|0Qok0|gD|~-Ga-VH_I)S5W66UwtDv?<9DL8mAedl=?(ICs% zkdko9KzK=^Z?D4(V-TnDax6v+5Mbq;F%YZ8qfT|m8!DV8;(jdB6Optr76?Z;mpzp{ z&p5SMp{_Pq?r#NHotlm9Lz6$EYx$=k^GyRldkUj-4>=In`GPwS^GCXm27(lBALLOR z)5jj@ggKj$ZgeRZURXHix~(B7ff=cZ+#re2Y2Egdf54^>}A&TheLTX>nbWG1e?o{089EYliPS z<61s2t-BIHpaoCei2ap{ECA;fOB8Bm`UJQrJk~VZY=v&7JxwaUW2)|IJ47C@ACMGk z?gP7FT^zO9gO$me8J=>B@;p_#Lg!t4m<^;e%@@AYB?euwuluo~v5OE-lG8&O@^9g< zbZ>ICkEG#xb>L?o+GW4NX7KXm68Twl?k0uZ29B!o;`Wi6c&k78v&9zmT>MZ&yzq~X#^)u#Gx4y3tMtVd{fnx85@Ba^CqmT zyMw_>q~h}xOo71*d+F1y#+6lO4-_#^c0^}>aI{Z0mL>!j&>g7^(7`PB{lgj0n uF;4O^hjqb6^2zE=S)RfeQ@Ox(kmed(~fH}uoO1cBK;QEVjhJgx~nv252X2RZ@x zV`_Vo&i5}H6Xx4XBJvNP+}nEY9nyWbIL$_*^qr({3qI~kgl KVrK2agupBn2P)0)X*_! L}cBmzWyoH7RC6z7ZD|DAXI;U++jgl9NM%_ zsn^XLatphJ!5AZHa7YYeLpd?oa3O+uvfQf+TUyI*NxGBCd7Z9$o)@cHC~~Q9A^#DB z+dEsq)?{)OwY$$J9qV~FZAkk1Cbc$fIf)W|`V~Nb{U9B}Ng-i0+nd91OV2>FqotaI zCai=~RI6 k9*XFYv+UsANFJiT%P42M>9Q3V-6nxW-; QHbRQ!ymlL;@W%iBo+{@c&jrKkxTYNiy(rPhKfyXMUGopLugP=7eG zap=?Lq`);CWUd5?H-vSamE)+E26LZRekQ+BFkE56%u*S9i|K^5)N{){oZ-}ozAw^r zcB;;parCno6{b%q&ON^h6W_YH17cTk$H*!X_TjB}kHl?07c4BtVpe`isGCTRHd5vA z OsZQi2G`5<7o;eOXKP3r}24d9Db2iDGC5g$Qx5u!wcV&;w 4@ 90eszpQl0A!TqPRD;nXV&> zkFuof>0*|V^_g;N!RhL@E7d@vij+%vk$x+`t+Pcn>{b4@TMNO1r$Ig~+PK0UwdN9z z#}w2S6A#wrIh~;F`xy%00f7j^Cs_I(Ao9O{5rH6M36HQDJSi~}!HDXuV^^*%$$zEs zeh7(oib_&aL3#IOjIGbD=x(zs#-9t|A~tUZ3$n+`ow!WJ>^~PJ9=*Z-Mp)!pLy7nB z%r+%-bXwWvUL5TYWy-glqr>$(lrE1L6;-c25s&%!VXws`C~o5o{C!$d@4O5SfwO;?rCL#Q zNr+UP?4pN8zWQIYeZcfvp*r0ta|;x7K%4`3TvRN2ZeT$m zS#4~Wxt;}ADkBGk?mB~v|x9zz~UffXgsB2=!u0E;R5o(2xGBy9X zX+mCO9;MCaYiw$827X}UH3s3)#yYvG$!p71?`3Ze#{&2>Ee@Km%6 F+Hc zh)JuNJsk>-b*yAed2CU *S$))VUu2D|xQ60(=WEqkIeWFXkA6 z%6!pK>Qb*O+d<_MQ(vDte+VdgMLuH(QFw2a(uV&w&4GCqGfAZVX6}6G-t|p;F1lM^ z6b%Pw8=yW0L@4%UT33F2t)Gs?lsGnA@_i@t+)aFA`=`1SwG8tLyqWo?JX>&%#fi~e zoc8Q8h$vf5i?>gdJCzRUMI`ga4vuAL1^Yp&WanZseFKr*Mnix)DLa?8MX|Y>PSwE` zC>r)GDA#7cK7giBQu*A1D_5Iq198BJY2qBQr=LvBW5&?{g=JUv+K2x{2=_N{*Zt*a`Cq(j!~>s z?mG Z?dS1zeMAj>VUuKE+zLE73ulD^2s2m2o1#X z7K*N2^J>xSbUbGYU5wG+KXcQh%TNk-ZHf_-p&P+HTwg(Ze<|H+9d2X@zMoIT6LEYa zG}0tFsi{gJJfc1dGL2`X)K=;pFY<7Hv&~sL*Df|3?P`MhyAj;6!7KaKTLQsSV>)(< z#;qE#p+&{Y&R4rt(yS}e$zpn1+ACjmt@FctlwbbPcVOaJ=8P_kROM0*?rR P zV5&i%5y{qdIperYx0flJ*2gzZZl?Vlry-tTkJwZT@1V;&`z*3RhaSBl5L(_wQ|gZ9 zOmxz5R)~q|R lP@?Irmb!%E> zk3M);oS`f0w7unEPg~-QFB9a#2NN%p%8G+&be&l+;a?PUT+&9_mY$b)OpN{)QDyh$ ziu1`nk+`-2e^N#l&HyKf+~39ntX@i$f89mUao_56!!;Vl1<3c5F%@R&(@w#)$Z$`V zE=8^`6d0HZmQ=)TYZ(#Z;K1?8$s2y9JVxn|PL$ubmQz0Il1>zPH=qF}#0i!Q`$Pl6 zEq_85j)>{I*Ers?&wXn>WGVR*OD%5$JtTyo0Zb;5{ZjFygqYrr!SJ40iEH?Ej;^po zylx;=c*`D5Ud=UJl!D5J$JGVw5K~)+Y#lDe#VNo0@xH+ahsIDa2`9s!BMdm=Vz|3f z%(de JImQJC!|x>EHyv>x+H}yiGm<0hNq& VK)}@hhRk~ zIC2V(+(e20)>CYM{VqR?lkpm82%D9k8YU-etc=2UkUZqgA9Vvif7JhRw7}!J%?1+| zfD5M9faLS_PbR=4E3hI+Ej&2_ b}k1PN7@S2Sg7b$I6>yTAblmxAx zpI`21rYiH?KmQ$Tz;S@yqEm3>*Co2Ovjfb3(2`MJ%Y}e{v-G|4^z_tbmyw`#Jw0WH ztI@@adw_j_bGTvy>+7FEOCBKwA?`!#jfrvdsaknhxsQ)Xu0r `6N6LAOMOw%`(`<$%QbqXtBM?Q58f!tusm3 zg80|JZg=kJ8f<~&g53RN1F!vfg{>_a&t`a@q;Mn6W&7D8d;0V#pir-sjnYer$bvMX zk?$857jGO+Z(yIFBij xhv3pt+QG=9P?eo z_!@`#iQGxT)zky>bDU@IC+gx=o+ {hrE_1ln{nb17B zCM1q*y5S-cH{bsyes#DYJa}@V?Qt#MZl=XZ{2-1Lj@Usq6YFrz^z1xBy`jc-dw8U& zvS`sU*D6WZJ5zZb;XCVSldlVJ&Qd|}UVkzrmkrMe*qP{EX(#I >Y)d1x=)GIM1}c*)`Eb4lQ6S+Xfxq zx7H|w-UExR#>cJUi&v>S )WcW7oL0*mn~9m4=mYD zTVyhCRK~pS&DJusSCA)rT{)89c)k`JW^?gpad5WqA-U#es3#N3waxRZFeP)xC0O+y zxIHgS^K-1YB!@a_?7sCCks%J$> !dY1^_?g3Id2ZZ$B+isV)8nZ@}LRqGoiaCLCK3M zG^I5SMe5@Xx{lxZWziz%U#H6Z8#0&}l8YsYXZqNsFL;<{zk71^wGdkz*iCyn76_vS z7xD}^P=!UBiQ1`U+ SQKF$W73yyoc^-m0IfRou@h%|qSi+g5aaXUE- zhTPLr_?8#zQ;PI{9q$<`0^dhU${R48QqFxF1@C?1iG908`f 0EZT
Fe1PSc@<9BHka5&$7vm-B-u!+;y3@y0}WFh%;`;vkanna7PCybRN#kT zZaOp+M><22wdeL?Kv6>(QogFqhd(Gul}(;lS~Q~$Gzm3C?!3!0oS}wD#?`fw-v}80 zMoBES(u~%( -VGpS68qXgrSlt4G-3ySO+RxW@ugBjPNPmXbO{ zo(NmjFH+{_gx5IqmcUZa4;}>e29RvoUl>N7+D`}c(fP8EK@z)Kp@Td4rg+N31p&oD z8{+K|Dn!-&Lo&YIqA^}1wzV 31I%*kjr$c$9?`3pv(OPY1mRm`| zRU<<63o>Sri3ULsDIoex^!j)!1KPQki`f>sofu?1VC31NM;@B_i(dp&d{=8`E-1s4 z{mJmgwrC QXlUq59Ae@+VB*u=TjnIZ#u*ZV zGa{kj6oYjBGNe>G>l+v$@$1NX{(bu27#E3l=eph3oC;4B9Z)|3x))9MYTfTTu<9 z17d4eZQOt^w|jL213GYHR6N1;VHk@|mi9nyOFoq^Xu>ECW1}9RB<=9)hE|sU37>@; z3}g+@RaTOmM~VU*bPJ=hO<`LUJX#}0)YtI45@uRFWt3~?nYJ O*p>cdHw^MfYDP>~^>;XoF( zPz~*lxv+q|y86AQCc-V2m-Nslvs!t|k{c6M(Y!kkuqaObf`ukJmVa)LR>-w!v6XFP z$Opv)xppU^j@c-gT3A{hZ8ay3jUXQ*;h-;AHKO7t4Ry@sln3@5@L20SehNjUBi%vf zKOVeADqPG(px0O!NQL(}ZFZWd4OV9h401=*nsPs0Utf$aS;kbgUuD*DvbZZgh$`XN zrm<3vG2nE-jw0k5Sr;QmY%~-BwUc^qmT<~6P7*iYK99X~qG+0{bG|c%sC`w @C=T1|%rp$F5Lv23M*bOG?Vk10aa;2&i<#S61ZP{}I_d-@gW!3zKhB zG<_+!SN}L!&ICjGXTc*I^v)Q!y_G5>n~ZAb``8j8!UyK`swwVyA=g415UN(UZ1NAb z$LaODv#Jc`!GqHL;_S~VbvkKd5Yw|8D18s)9suL$%q*@?P!JU$$>1HwAZGiV(gOw8 zpk4{=!f)|`k5O@!cp4*>T@#oxEyqWc g4T0idCidVPzL7w8Wrf` z+(Vz}sEXa2b#Uf2#ZRQ|ddU5)wc^*O1=%2q8{#|rsifB |sFVMrHh?gJpBD2hVoj7G~WBlE RQ`qfvSEVFiIFY%5iSMC^7%(w!>p zmL*)Z<@4mB1>zOMD2!tqte!V09X^Oj@7uZt$l9Oj)HDo)xfi _ce$bBpAOf1rlWCC z7j dQq*My2dr@}wZu=yp zPa(|s%iu3OoxqC70e9XkF> )Y;NO}S`QQp%{p>0noo8QHXamv1uO(B}-p>oWgf8=#` zuFDwTj^}Sc!Oim!HmQ(h$aqkFp@FlS3RGbjFHFovSD5+MU)oVZZsQS-qQcR6PtVT& zcsL_~i&2^Iea#%YB?kGJObp7gjc*gildB|!7RJ9#EGQLKL}9JC{Dn0|jKhT{tbQ zAu0MK6jufs$nwzcjOR(~KfD@+t2cOM8%sy?0g8C5ug~wv^bAt0@NZ-)0gT{=x(1C2%3c7Dl(PI1eQB-U7cJ+fo0!ehAbo {kbo#E!EXkfFYhs)95(xt>mkV4fP= zGgndmle9ZDp8(8|HCMm#M@)cj%XWcDOMDnr36(>NsFm{A`n~{BF202mJhnq|m)Kr= zqjSzf@J;H5U eRENvD~=ax^e7UTbt>fp0XD3*R!J1I#H@2y=U1t%V~U=OhW_eiPtwZh%Yjb) zqTpJGh*8{`cvuYdXNSP}MpLE4S^pAH`wHn1tpVzxP q7H<~UUo_W1a>J@oml?w_@#t)mFvA+?SRM5o)?_A|!&Xsdn5?pw%Y%z5At z`q^>x&2H05r2tc4Q>^8!rMMQ^2F)&^`rdGUe*Ap yp!YU3Dq 7`>kv zI^Ma}-5{qHLb|Iy>t^T+-KbW2sKaVbKH)~&S?bx8G8W=UK@Ic9WPJThFncScG|;wJ z73!+NV_g2SOn^T&&{ef9$Rm1H;hfnq>vhx-2@CTitj>cn->y%?h~wVO%Sfdbo!R~} zWL9BaFyVH+pEI79O{yu2+a0t?67(CBGoCLfEjION`6pg!H!XU8ob319G40asOO#ct z;s%~dn=s6e*KX8eN1vV)NaP>ru(~cQBt#XtKO2 2qw3!XSIbvt$QCi!=Z!qCe-7Wi-F8cCY$NY% zk#+L!ldve8Cv;y)+{=DmO{J3xSEg|x$8g`H5B%izOe&Ho_)&;G522Esbi(=QmEJUI zon1llTeh)vm)vc;J)YOn3&1|``ktOq-Mcpxss_@CT@j&}ZqkX6Gk=|=3nFC6vwSQO zlY88M)kr9EwNvv Dy(w8FPkRdwzAB4F`Ew=nNt3~( o;&PQT$gx3Hdg(`XrMi> z^2$xD>Gy8%0$#D3+^`~k1lc_Swwcq`*MvVP_LM0!*D0Pu{dipLD0BT+an;N6GQ}0H zarh*e%dv2YsPi6CwfD-}o43gd I|q-(4U9HMsO$b9pqS1O-9w#kTd@+DSU*(=lo-@9j(;?X@Z2uqQXCxv${m z*>~YZtnrB1m4pbyvnAkEk!-GsphqLj-M0o}^44``ztA=Y$942Quecjp5~$6>#H7@w zH7XFR-(F(AJ(3+j#2uYZSr)jt0nvJM?5%(q%$MV4?W)qU5U0+EVISZ-`?B}JAuDBv zQj6-}CnE|-;oq CDe(RyL-5P3te4E%c~;kEUP#FmvI#SC&b@cG*~9f4n3`AnucQfoWxo-x<2+ z-M1E%l(IFzv5&t GNb@1YF%DPWw> +01dxH#!nwr)jCowRZ=Z*UF+OCt?RE!TP(;x?CW=J00 z@9YU>7eHeBbJQrqS`%k9A3l0iJ{Q@klUzy!@bdCt4p^%3lexmrg|*qpa_PU!k@P$~ zL E^`Jcpv>Ub&{%M#eu|r^)XCS24c{!iAu8!wJ0y46B$YwvC}2R)W*=lg4*cU6 zU!dwNV_#8>oUWYESsz+D -rts!2ZQb3c=}p%k;rzb|EA$6|MbC%y^xp z_&|ZN{E}c|wq{+JU|Wo-OYfe&(s!4H-)-}d10?q@Umt&3bKbQAp@?M kJ&-iE@-WgbOIjUiA`+lO$-{6o* z=grZzFU<5DW6EKlZ{>VKCOtXeSBpy-a$3tlpk3KHW`3}>9kEfymrV)hWQSn>I=)s? z^u5{rfI_3+-?U&o5%@AkONQm`n7AiwZkTbp)3%Hsy&v9ju|1$Uolb<^@D)|Tlec0r zFE$LE2l~e{j&4PS-pS8@N1{HouuvcA9p6t2h=InQYG<;wQS6!dc%ctVWW1!hJEkZO zcZP4ebWF$}mo C=TePhP2W>i`lVIgcu9nSRJ(3$<_5`